Friday, October 30, 2009

Why productivity is soaring in this downturn

Wonder why productivity seems to jump during a recession? It is not
just because people are laid off. The real productivity impacts of
laying someone off cannot be measured immediately, because in the
immediate time of a layoff most companies have obligations to continue
paying severance and into the unemployment pot. Also, let's face it: lay
off decisions in big companies are much more about crony-ism and
favorites than about long-term values, successful missions or measurable
objectives. The Peter Principle ensures that those making such decisions
are not quite capable of making them correctly. Failure is promoted,
success is means for discrediting or dismissal; it is inevitably the
PEOPLE WHO MAKE STUFF who get the shaft.

So there's part of the answer. To paraphrase Indigo Montoya, "You keep usin tha word 'productivity' -- I do no thin it means what you thin it means". Productivity is a euphemism for an average that is
completely misleading, GDP divided by number of labor hours. Even if
the numbers used for GDP and labor hours were accurate, which they are
not, the measure is too gross to suggest it means anything in terms of
how a recession affects the structure of companies.

Another part of the answer is intuitive, and embodied in the saying "to cut the fat". Unfortunately, as we have seen in the American experience, the fatheads doing the cutting have conserved the fat, cut the muscle, and in some cases bled the company dry. The government has
done its part by encouraging a service economy. To apply the same
metaphor, this is in effect a body without muscle or bone.

Here's one thought I have heard: the recent GDP figure has been expanded wildly by raw government expenditure. The money Obama has poured onto
non-production areas like the funding of political cronies, is itself
directly counted as an increase in the GDP. Too bad there's nothing
underneath the fiat money to support its value. Worse yet, that the
money did not get spent in such a way to make substantive improvements
in energy or production. Instead, it has gone to political activities
and feel-good projects, marketing and promotion. In effect, it is a
government spending bubble. That's how we can have a grossly overstated
rise in GDP in the middle of a long-term government initiated and
perpetuated recession.

But here's one other thought I haven't heard: what if the "fat" were practices, not people? Over time, institutions get bigger and go
bureaucratic. As I've been reminded over and over at the Web Design
meetup, PEOPLE DON'T LIKE TO BE MADE TO THINK. So during good times, fat-headed processes like ISO9000, CMM, and all manner of Sarbanes-Oxley
compliance motivated programs get funded, staffed up, and pushed into the
practices of everday workers, making the meat well-marbled with fat. In
a recession, the same processes hang on the books, but the meetings get
tossed under the bus and remaining workers find ways in their slow time
to bypass the blockages these "quality" programs introduced. Similarly,
marketing functions which poured gobs of money into Web development slow
the outpouring for a time to a trickle; Web artifacts have the longevity
of a gnat and yet take enormous amounts of cash to publish relative to
their lifetime, so the slow down causes pauses in incredibly large and
unproductive expenditures. But only for a time.

Saturday, October 24, 2009

The difference between Table-less and Semantic Markup

As organizer of a Web Design Meetup, I get to hear all manner of conversation about Table-less Web design from both expert and amateur designers. But their focus is inevitably about what it is someone else has told them about the evils of the <table> tag, and separation of something they call "style" from something they call "content". Before any of the current crop of born-again post-Flash designers came around, we structured markup types focused upon separation of structure and semantics... distinguishing between the syntactic forms and the meanings or behaviors applied. The ill-defined terms "style" and "content", though present in the markup world prior to the Web, have come to be accepted HTMLisms with apparently much narrower meaning.

People think, for instance, that the following snippet (taken from a CSS Zen Garden theme) is wonderful, because it separates something (style) from something else (content):

<div id="container">
<div id="intro">
<div id="pageHeader">
<h1><span>css Zen Garden</span></h1>
<h2><span>The Beauty of <acronym title="Cascading Style Sheets">CSS</acronym> Design</span></h2>
</div>

<div id="quickSummary">
<p class="p1"><span>A demonstration of what can be accomplished visually through <acronym title="Cascading Style Sheets">CSS</acronym>-based design. Select any style sheet from the list to load it into this page.</span></p>
<p class="p2"><span>Download the sample <a href="/zengarden-sample.html" title="This page's source HTML code, not to be modified.">html file</a> and <a href="/zengarden-sample.css" title="This page's sample CSS, the file you may modify.">css file</a></span></p>
</div>

<div id="preamble">
<h3><span>The Road to Enlightenment</span></h3>
<p class="p1"><span>Littering a dark and dreary road lay the past relics of browser-specific tags, incompatible <acronym title="Document Object Model">DOM</acronym>s, and broken <acronym title="Cascading Style Sheets">CSS</acronym> support.</span></p>
<p class="p2"><span>Today, we must clear the mind of past practices. Web enlightenment has been achieved thanks to the tireless efforts of folk like the <acronym title="World Wide Web Consortium">W3C</acronym>, <acronym title="Web Standards Project">WaSP</acronym> and the major browser creators.</span></p>

<p class="p3"><span>The css Zen Garden invites you to relax and meditate on the important lessons of the masters. Begin to see with clarity. Learn to use the (yet to be) time-honored techniques in new and invigorating fashion. Become one with the web.</span></p>
</div>
</div>


And the code goes on. Now, I don't have a problem with it as far as it goes. They've done two things here:
1. Separated the CSS syntax from the HTML markup
2. Used most of the HTML markup element types names in the manner more-or-less specified in the W3C Recommendations

But look again at the markup. Oodles of nesting. DIV DIV DIV P and DIV DIV DIV H SPAN ... gosh that looks a helluva lot like tables, just with different element names. Oh, I know, I know, table semantics vary between implementations, and implementations are broken, and there are lots of good reasons for not using tables that don't directly affect other nestings of elements. And both DIV and SPAN are "semantic free" (sort of: DIV has the semantics of a generic block-level element, and SPAN has the semantic of a generic in-line level element). But you are still relying upon the side-effects of the style semantics implied by the nesting of the markup to achieve a style effect. Six of one, three of another, I agree the balance is in favor of DIV. But you've still got markup code that exists just for the sake of style. And that is not cool, not even Zen like.

When you're talking about separation of concerns, the style is all over the code like marinara sauce on spaghetti. The markup, by the way, says that the HTML page has seventeen major content divisions, all well and good because DIV just means a grouping of elements that is (usually) formatted as a block. But I object that "UL" is only barely related to the semantic of "menu", and other pages on the site use a sequence of "P" elements to represent the same menu. Please don't tell me this stuff separates the style semantics from the informational content -- clearly it really only separates CSS coding from HTML coding.

I understand it can be hard for Web designers, even the most experienced, to grok abstract concepts such as syntax, semantics, semiotics, and pragmatics. You've got pages to pump out, and such subjects may amount to mere philosophical diversions to when your concern is primarily producing digital marketing collateral and not performing professional information management. But understand that if something is worth doing well, it is a valuable exercise to understand what happens when go all the way, or at least push the boundaries.

On my soapbox, not only is the meme of "separate style and content" not fully realized in Table-less HTML coding, popular practice reaches precisely the opposite effect. The semantics of style are hard-coded into almost all of the HTML markup tags themselves. People just pick on TABLE because it is a scapegoat: the whole tag set is guilty. Never mind about Web 2.0: the Web has been stuck in beta mode for the past twenty years with a set of page style primitives that were accepted because they were free, not because they were good or even "good enough". HTML is wild and woolly, full of fun and frolic, but one thing it is not is a clean design. And that's my hot-button, because all this talk of separation of style and content in HTML is like dressing a pig in Prada.

Off my soapbox, I observe that the semantics of style include layout functions, what printers call imposition, and what in my experience involves staging functions for information content, not just colors, margins, backgrounds and borders. That's precisely where the Table-less discussion falls apart, because it doesn't go far enough. The bottom line is that "Table-less" is not enough. To separate style from content means so much more.

Friday, October 16, 2009

How collectivists handle blame

You know, I've been observing a pattern of behavior over the past few years, particularly in news reports but I've also seen it come out in the rationalization of some of my friends and relatives. Let me explain the meme using two figures often used to explain encryption algorithms, Bob and Alice.

Suppose Bob is a personality who is perceived as mainstream, affluent, majority, conservative, male, Republican, or having some other right-of-center attributions. It does not matter what the particular mix happens to be: Bob could be a blue-dog Democrat or a liberal-but-conscientious dissenter (like the senator from Connecticut, Joe Lieberman). Bob just needs to be seen as having some non-Liberal attribute upon which to focus. Bob is not a team-player.

Now suppose Alice is a personality who is perceived as marginalized, poor, minority, liberal or radical, female, Democrat, or having some other left-of-center attributions. Again, the particular mix does not matter: Alice could be a documented mass-murderer or an antisocial philanderer (like the senator from Massachusetts, Ted Kennedy). Alice just needs to be seen as posessing some attribute valued by a Liberal group. Alice is a team-player.

Now, when I speak to people about the Bobs and Alices in our political arena, here is the meme I see emerging from the conversations: Bob is personally vilified at the slightest allegation, but Alice could be caught red-handed and it will be claimed that both Bob and Alice are guilty of similar actions.

Alice could be caught with bodies at her feet and a smoking gun in her hand yet in conversation Alices personal responsibility will still be dismissed out of hand and to some extent transferred to belong to "everyone" or "both political parties". The language brought up almost always assumes an orientation of hyper-empathy with Alice, at Bob's expense -- even when Bob is more than an arms length away from having anything to do with the subject of discussion.

I think I started seeing this meme when Bill Clinton's penchant for raping women came out during his campaign. Does that language sound shocking? Re-read the definition of rape, and re-examine his record. The point is, it was his opponents that were eventually sullied with the stain of Clinton's guilt. But that was campaign rhetoric and political mud-slinging. Today, the meme has shifted into ordinary street language, and it is my thought that this shift was deliberate, fostered by news agencies following Democrat Party talking points and strategies for dealing with opposition.

Now, mind you, I'm not saying that if a Bob is guilty, he shouldn't be considered guilty. But if an Alice is accused, she should be investigated personally and we should not be so quick to allow her supporters to diminish her culpability or cast the aspersions of her guilt upon those who brought the charges.

I reject the meme.

Friday, October 9, 2009

Obama Wins Nobel Peace Prize (committee draft)

The Nobel Peace Prize for 2009


The Norwegian Nobel Committee has decided that the Nobel Peace Prize for 2009 is to be awarded to President Barack Obama for his extraordinary efforts [11 days after taking office] to strengthen international diplomacy and cooperation between peoples [with dictatorships]. The Committee [of left-leaning Norwegian politicians] has attached special importance to Obama's vision of [a socialist Amerika] and work for a world without nuclear weapons [in the hands of radical Islamic fundamentalists].

Obama has as President [for 11 days] created a new climate in international politics [among budding Fascists everywhere]. Multilateral diplomacy has regained a central position [displacing the United States' national interests with our own], with emphasis on the role that the [virulently anti-Semitic] United Nations and other [impotent] international institutions can play. Dialogue and negotiations are preferred as instruments for resolving even the most difficult international conflicts [even when U.S. citizens are being killed]. The visionpretense of a world free from nuclear arms has powerfully stimulated disarmament and arms control negotiations [failed and allowed unstable countries to join the nuclear arms race.] Thanks to Obama's initiative, the USA is now playing a more constructive role in meeting [being suckered into paying for] the great climatic challenges the world is confronting [other countries' energy expenses]. Democracy and human rights are to be strengthened Goot! That sounds nice. Pass me another blunt, yah?.

Only very rarely has a person [an aspiring socialist] to the same extent as Obama captured the world's attention and given its people [tyrants] hope for a better future. His diplomacy is founded in the concept that those who are to lead the world must do so on the basis of values and attitudes that are shared by the majority of the world's population [in Communist China].

For 108 years, the Norwegian Nobel Committee [cabal of former politicians] has sought to stimulate precisely that [influence, distort, and buy off the] international policy and those attitudes for which Obama is now the world's leading spokesman. The Committee [of former Norwegian politicians] endorses Obama's appeal that "Now is the time for all of us [all of the U.S.] to take our [the rest of the world's] share of responsibility for a global [every knee jerk] response to global [our trumped up] challenges."

Oslo, October 9, 2009

Wednesday, October 7, 2009

Languages and projects

Perhaps it will be helpful for me to think about projects I have done, rather than recent disappointments. I'll consider languages, and mention projects summarily.

Python
GnitPick, a jython tool which integrated the NUX XML library with others within a story editor interface, complete with a Swing-based tabbed interface and cross-tab XML query capability. The tool was an attempt to evalue Jython as a replacement for 4GL interface builder, and I think it did quite well. Menus were build using Jython callbacks organized via XML definitions, and the models were maintained as XML trees.
I also started on a Google App Engine site called SplotchUp, using Python and the Web2Py framework. Knowing exactly how to get the job done tells me very little about what direction to go with it, so for now I'm stumped -- I need an objective problem to solve in order to keep going. No user stories means no tests, and no tests means no code.
I know I've done more Python before GnitPick, but it was mixed up with support related work. GnitPick itself was part of a larger project to bundle Java libraries together into an AJAX-like app framework, which was never published: at the time, the Java clients for HTML sucked. For that matter, they still suck.
Perl
Barcoding scripts using PDF::API2. Scripts to re-write the coding of PostScript files to work with proprietary RIPs on the Xeikon platform. Perl reporting code, literally: perl modules to create output reports for a System Verification Test test-case tracking tool. Various Perl CGI scripts to extract data using the Pear interfaces for business reports. Perl for support purposes for DDTS.
Mentioned below, I also maintained a Perl-based Wiki, Onaima, forked from Dolphin Wiki and hosted on SourceForge. Four groups within the organization used this Wiki, a test team, a development team, the quality/process group, and our engineering support team. For the quality group, I combined the Wiki with a corporate portal. The Wiki succeeded where a concurrent effort to roll out QuickPlace fell completely flat.
C
Block Print Paginator was my first real C project; BPP counted lines with a one page lookahead algorithm which determined how to best split the lines so as to utilize the page without leaving pages with orphaned lines or too small a margin.
The next was a Project Take-Off application, written for the event-driven GEM user interface library on the Atari ST platform. GEM turned out to be not unlike X/Motif. The application itself was a spreadsheet-like system which presented contractors' yellow-pad process for estimating by take-off.
I did lots of ETL programs for Nortel under contract. Puerto-Rico 911's conversion was mine, start to finish. I asked for an ascii version of the specification, cleaned it up with AWK, then used my scripting skills to incorporate the spec as an input to a Make-based build process, generating the validation and conversion regular expressions along with unit test stubs in an object-based framework (C-structs-with-pointers-to-methods) I devised myself. It was absolute perfection. When a question came up about the stability we could both look at the spec to answer the question (the spec was indeed at fault) and demonstrate functional performance by running the built-in tests, which had been coded first.
I also did ETL programs for Bell Atlantic and another telecom, working in a team of three -- though it would have been faster, more reliable, and better documented had I been allowed to take all the responsibility.
Another project was SMSR: Single Member Set Replacement, in another team of three. Actually, two of us did most of the work; the third was the lead and did virtually nothing except set us back, and eventually try to put me into a compromising position with my employer. I did a transactional update interface for SMSR using Lex/Yacc to define the grammar of the input files and C to define the actions.
A small tool I wrote at Kodak was an SCM user interface using the X/Motif library to interact with sccs. I called it XCCS.
After working on the IRTS project, I worked on a system I dubbed the All In One Search Engine. I began writing this in multi-threaded C++ using inverted indexes constructed from case-shifted words. After a substantial amount of work I determined that I could show results faster by redirecting to the C-basedHt/Dig engine. I hacked the search algorithm and provided extended indexers. The method was to extract XML representations from various enterprise quality databases, indexing and saving links to these XML forms, while transforming into HTML representations. Searches were keyed based a selected semantic XML structures, but results were presenting using the HTML representations. Links to the XML and to the original databases (if still available) were also integrated into the HTML results. The system allowed enterprise users in Hong Kong to access quality records for products built and formerly supported in Raleigh, and transferred to China; it also allowed the US operations to discontinue the original quality databases, saving a 50k license immediately and all future support costs, since records were fully accessible in XML format. In other words, it wasn't just a search engine, it was a quality records clearinghouse. Observe that this engine was integrated in 2000-2001 timeframe.

HTML
Look, HTML isn't a programming language. See my other comments on AJAX, XML, and JavaScript. I have done a number of Web sites now, some in Plain Old HTML, but many in Joomla.

XML/SGML
While at Merlin, I was the principle author of the Deluxe Business Systems Imaging Composition Standard Specification. The standard was produced to define a markup language approach to interchanging order data for personalized print applications. The content included financial transaction information and document design specifications. The specification was meant to cover a variety of order capture situations, across all of the DBS businesses. This was all at a time when XML was not even a first draft, so we were well ahead of the curve. I produced DTDs and semantical descriptions, as well as a process specification to show how document instances would be used in a product production chain.
Microsoft had access to the SGML-for-edi communications, I'm sure, because they were working with the DBS CTO at the time (for whom we produced the spec.) Also, one of the partners later founded PODi which in turn published the PPML standard, surfacing many of the print-on-demand markup application ideas we discussed in the form of PPML. So I'm confident I had a real, if not very visible or widely acknowledged, impact on the industry.
I joined Alcatel rather than going to Deluxe, because I wanted a little bit lower key position. My family, especially my wife, was pining for time with me. Being an "ordinary engineer" instead of an "executive consultant" gave them what they wanted.
At Alcatel, I eventually got back into a role as a management consultant and XML evangelist, having seen how markup would impact the fundamental coding practices of engineers. This was difficult, because many in management had lived insular lives. They were embedded in Telecom, and didn't understand the broader software market. Similarly, many engineers were unfamiliar with the technology and had difficulty understanding how it could impact them. Still, I gained clients. One network management group began basing their architecture on XML with XSLT; I provided XSLT and XML consulting to them. I also convinced the ADSL test group to adopt XML for test case automation; they said later in a memo -- after I had been laid off -- that I had "anticipated the organizations needs a year in advance". This was in response to a Systems group's recognition that their specification documents were a mess: the test group already had recaptured much of the necessary content and was using it in productive work.
An interesting project at Alcatel involved a configuration tool which emulated a provisioned rack and provided soundness checks as well as quick access to technical reference materials and quality databases. Two key aspects were that the "tool" was actually a set of XML documents created by an AJAX enabled administration interface, and converted to JSON notation by a publishing transformation. The documents were actually checked in to a document repository which provided consistency of identifiers and a means of subscribing to the transformations as a service. The schemas for the XML used DTD notation.
There were others as well. Another "configurator" type schema I helped define was for a sprinkler manufacturer configuration system. Generally, my approach has been to create sample instances and use Trang to create drafts of the schemas in RelaxNG, iterating between the instance and Trang until the RelaxNG schema is structurally representative of what is desired. Then I refine the RelaxNG schema and begin forking off sample instances as test cases to show usage and conformance, dropping into WXS when I've got most of the semantics worked out and need to verify that I haven't introduced something WXS cannot represent.
XSLT
I've done a number of stylesheet transformation projects, some big and some not so big. Among the first were cookbook stylesheets I wrote for training classes to introduce Alcatel engineers to XML and XSLT. They were way behind the curve on markup languages, and I collected a number of techniques from my previous experience with DSSSL and participation on the XSLT mailing list. I put it all together in a Wiki, another technology I introduced to engineering at a time before Wikipedia came onto the scene.
A typical project was for SPAWAR to demonstrate a "robohelp" like framed output, with a left-pane holding context menus, a right-pane holding content, a title pane, and a notification/branding/status pane at the bottom. Often CSS and/or JavaScript can be used to add effects. Note that JavaScript is not a hard requirement since XSLT mappings provide fixed URLs without the need to perform AJAX type interactions. One thing people ask for repeatedly is how to get XSLT to generate mappings between disparate files -- they often assume the XML "ID" attribute is meant for linking, and are somewhat disoriented when it does not suffice for cross-linking.
One interesting project was for Tekelec. BrightPath Solutions brought me in to provide XSLT, ANT, and DITA training. Following this up, I designed a DITA-OT transformation queuing system and provided an interface to integrate it with the Vasont client. The point was to delegate builds to high performance remote servers, with orderly dispatching of requests. Apparently Sarbanes-Oxley was an issue as well, since controlled access to sources and deliverables required as well.
Java
My exposure to Java is still limited. I worked a bit with it in Eclipse when integrating the Java libraries for GnitPick. But Java can give nothing like the productivity of a properly defined 4GL environment. It retains many of the worst aspects of C++, in which Object Orientation, rather than making code more coherent and comprehensible, makes it instead more disjoint and idiomatic. I supported the XSLT transformation engines at Alcatel with some Java glue coding. I also played with a Swing based "ants" simulation, a kind of cellular automaton in which colored tiles are seeded and mutated according to a set of global rules, exhibiting surprisingly complex emergent behaviors. I used Swing buttons and a simple layout manager, rather than a canvas, for the ants simulation -- a poor choice for performance but it was easier to code.

JavaScript/AJAX
One of the first samples I wrote for training was a use of a Javascript-driven HTML shell to format and display the XSLT, XML, and XPath specifications in various ways, using an associative array to organize the possible transformations and Javascript to manage the user interface and delegating the calls.
The configuration tool mentioned under the XML topic, was an early but very robust AJAX-style application. The system featured a completely Web-based administration interface which managed the loading of card-specific JSON profiles (created by transforming XML documents) through Javascript. Balloon help popups were provided, as were dynamically composed editing forms with semi-automatic layout. Documents were retrieved as JSON, edited, submitted through a CGI interface to a document repository, and subsequently used to regenerate the JSON representation(s). The front-end consisted of the same JSON files, loaded via a frame-based, Javascript-animation enabled interface. The UI supported right-mouse context menus to fill in plug-in card slots, and red-yellow-green status displays on each card as the method of reporting compatibility issues. The rack itself was defined using HTML block-level elements and tables, with a carefully orchestrated sequence of event triggers to contextualize how objects in a class framework were populated as cards and software options were selected. Also, we provided an alternative pop-up dialog method of accessing the card information at a lower level, including access to quality databases and reference documentation. This tool succeeded at effectively managing an information set which five experienced managers had failed to organize using spreadsheets, and went well beyond by providing a coherent delivery framework and two working, AJAX-based analytical tools, within three months of effort. Keep in mind too, that the browsers at this time were not mature and did not provide the ease of use AJAX libraries in use today.
C++
For Deluxe, one of the development projects we performed was to demonstrate a feasible bridge from the Smalltalk business objects framework to a standard SGML parser library. We selected the YASP parser, and used IBM SOM to bridge the parser into a Smalltalk environment, building objects to represent the information content of our markup.
As mentioned, the search engine I began working on was also in C++.

Maple and C++
Another small project I did was for a college professor, implementing an algorithm for efficient search of dependent parameter subsets among datasets of oncogene features, using STL containers. Although I finished work on substantial parts converting the algorithm from Maple to C++, the professor went off for Europe at the same time I graduated and I did not hear back. It was apparently not all that important to her, but honestly, it was among the more challenging projects I've worked on.

Unix Shell
I've written little HTTP servers in Korn shell, just because I could, and a plethora of other scripts, many simple, some very, very involved.
To support a Web application, I wrote a document repository and publishing system using a suite of Korn Shell scripts, written using an object-oriented approach. Scripts represented classes and arguments provided method signatures. The system could register new document types as well as provide pre-check-in validation and post-check-in indexing, abstracting services, and transformations to create AJAX-style applications. Sadly, management was clueless about the methodology and utterly ambivalent about the whole business division. The system was layered, providing a user-level interface to the Repository and delegation of functions to the document type handlers.
During some down time, between writing ETL programs for Nortel, I did an educational project I called NopGen (nop==no operation, a machine instruction which does nothing). NopGen was a code generator designed around the metaphor of plumbing pipes and couplings. The metaphor arose from a paper I wrote about the factoring of programming dependencies, and a paper on Basset Frames in one of Tom DeMarco's books. I simply extended the UNIX pipes metaphor with a framework to organize the pipes and to parameterize blocks of code as templates. A Bourne shell prototype worked well but was slow and had no consistent way to organize the templates. Most of the functionality was implemented using a 1000 line AWK script, based on an idea of using special character strings $- and -$ to delimit chunks' start and end markers, with generic labels and named parameters. (That is, it was a toy LISP-like language, with features of XML markup and XSLT.) A college professor said it belonged in an ACM paper, but I had no clue how to get that accomplished at the time.
I've also written a lot of Make build scripts, as well as several "install kits" based on UNIX shell with or without Make.

Pro*C/Oracle/PL/SQL or ESQL/C
State tax reports for Paychex. What can you say about that? It was pretty routine stuff.
Utilities to format XML output from database queries.
A lot of SMSR was actually written in Pro*C.
After creating the NopGen language, I worked on a database course at SUNY and produced a project I called GROG: Generalized Relational-Object Generator. Grog was a sort of Corba-like IDL generator. Pro*C was used to access the Oracle System tables, which had been annotated by the use of views to specify aggregated types. The tool output was object-based C-with-structures-and-pointers, and instantiated specialized instances to establish a kind of meta-object protocol. I also added stubs for pre-and-post validation procedures, as well as CRUD style accessors. Then I wrote a user guide and technical reference manual for it, as well as release notes and a shell/make-based installation kit . The instructor informed me that in his mind it was graduate-level work, well beyond what was expected, and re-assigned the course as "Advanced Database" to give me additional recognition.
Additionally, I did a lot of work with my Informix projects with ESQL/C, particularly for the Kodak Gateway project. These included data archival programs, raw data loading programs, and scanner alarm monitors. (Although ESQL/C was an Informix product it was not that different from Pro*C.)

SQL/4GL
One of my first jobs was with a small Unix reseller, thrown to the wolves as it were on a ground-up accounting software project for a Furrier's operation. The app and database were done with Informix 4GL. I also did a Sales and Support Lead Tracking system for a window-and-door manufacturer, as well as a Manufacturing Job Tracking system, also using Informix 4GL, from the ground up to fit the client's operation. Later I worked on a POS system with another guy, using a more GUI oriented version of the same 4GL; and on a Real Estate Multiple Listing Service Database and financial reports system for another client. All required attention to detail on the database, since most had been started by people who hadn't a clue about database analysis, normalization, or query optimization.
Later I worked at Kodak on the Gateway project, writing a report queue daemon in Informix 4GL and the embedded SQL/C product.
Alcatel's IRTS ISO9001 incident/workflow tracking application was done with Oracle and the Ideo SmartGL language, as well as some C and non-Ideo scripting in Perl for report and notifications daemon. Their Change Control tool was similar. I also supported a System Verification Test tool which managed test cases with a SmartGL interface, and hooks to LabView, with Perl to do reporting. Again, I had to step in there to fix up the indexes, which had been constructed improperly, and the internal clients were very appreciative.
The SMSR project for Nortel used Oracle Forms as a user interface, which I had to seriously work around to get it to behave: the designer foolishly assumed it could handle hierarchical data sets without difficulty. Remember, this was Oracle 6.

PHP
I focus on components and templates for content management systems. My biggest project was for a Bosch Security Systems marketing program using Mambo -- an ordering site for branded distributor collaterals. It required substantial modification to the com_content component to integrate personalized previews, the com_users for personalization fields and logo uploads, shopping cart integrations, rewriting a credit card gateway for Authorize.net, and order "ticket" packaging for a pre-press production process. The templates also had to match the Bosch site styles precisely, which was not a trivial task. I continue to produce Joomla components. I wrote one component for bridging QuickBooks customers to Joomla users, modified contact components for various purposes, and adapted a number of other off-the-shelf components for specialized purposes. For CMS sites it is rarely economical to custom program entire components from the ground up since GPL components can usually be adapted with much less effort. See Mindsetproject.org and Anziospizza.com for two of the best examples.

ASP
I have repaired and evaluated technical maintenance issues on ASP hosted sites. The VBScript on them is not any more complicated than PHP, but the closed database environment of MS Access and the "jet" database files can make these sites less productive to work with than LAMP environments. I spent a lot of time supporting the Print On Demand Initiative, an industry consortium, now at PODi.org. The chief need there was first to stabilize the site -- it had been left with database problems -- and then to work with the marketing team to put up landing pages for targeted email marketing campaigns. To let them track the campaigns I included a URL-encoded parameter which then populated a hidden form field when the user clicked-through. Eventually the client wanted to overhaul the entire site, but I was not interested in being a liaison to the foreign team they had in mind so we parted ways amicably. Another site I did support for was a wallpaper pattern ordering site. A client, Merlin, was considering purchasing it. The code and database were a mess however, and would not allow customers to complete orders. It was also not bringing in much business -- building that up was really an SEO/SEM problem -- so after learning about the business and digging into the code I advised against a purchase.


Access
I sometimes do MS Access work. The front-end is a VB GUI layout designer, the back-end is SQL based, and the language is VBScript, so it is really just a 4GL environment, albeit a rather poor one. I say that because it is easy for naieve programmers to get into a lot of trouble creating MS Access based applications that look great but destroy the very data they were designed to capture and protect. One of the bigger efforts was a course evaluations reporting system for St. Augustine's College; the consultant left them high-and-dry with an Access database, from which had been stripped all the report generation code. Only the report formats existed. I wrote import procedures and queries to cross-tabulate and summarize the raw data, and to implement business rules as the client specified. I also wrote validation queries to check the integrity of the data before, and of the report counts afterward. I still help them prepare the course evaluation reports every semester, refining the checks and adding a few features here and there to improve the stability and confidence in the process. I also worked on an insurance rates calculation program while at STI, which was done in VBScript under MS Access, and a couple of other forgettable Access database projects.

xBase
I did a lot of serious reworking of the SBT Accounting Modules in my first job, for a client (Utica Steel). The boss sent me for SBT training. The coding was all in dBase with simple sequential record files. I was good at it, but the dBase/SBT environment was not conducive to maintaining the modifications: you were basically forking the codebase.

In view of this reflection, part of my difficulty is in connecting at a social level, and part in treating myself as being at a "tradesman" level. It inherently limits my options.

Feeling defeated

Every time I look at a jobs posting site, I get to feeling defeated and depressed. It isn't just that there aren't a lot of jobs that fit my interests -- there are few that fit my immediate background too. Going to school for a mathematics degree took me away from programming for two years. Even before that, I did part time projects doing XSLT work and XML schema design, but got no Java or .NET coding leads. So I'm S.O.L. for most of the programming postings, where people invariably expect the applicant to have worked on a team doing J2EE or .NET development in some complete project.

The real trouble started at the telecom company. Management there was completely ambivalent about the development work, and seemed to go out of the way to avoid putting together a coherent program. We inherited scads of crap work from engineering, involving perl, oracle, pl/sql, ideo smartgl, html, shell scripts, and c code. What do you do when there's no recognition for anything innovative you are doing from management, despite lengthy explanations, obvious interest from the users you were hired to support, and concurrent validation from trends emerging in the tech literature? In retrospect the whole ship was sinking, and they were much less concerned with the purpose of the voyage than with saving their own skins. In that environment, I devoted a lot of time to doing the right thing for them -- working overtime on antiquated 4GL environments and proprietary tools -- but not necessarily what was good for me professionally.

I get to feeling like I'm some sort of invisible man. No matter how much time I invest in trying to stand out, no matter what new techie hype I learn about, it doesn't feel substantive, and I end up feeling ever more marginalized and forgotten.

I've volunteered. I've worked for nothing. I've presented. I've trained. I've organized meetings for user groups. I've networked and given leads to people. I've called, and find inexplicably that people don't return my calls. Goddamn it, my own RELATIVES won't even return my calls. Nothing new, it has been that way for years. I deal. But I have to ask myself after all these years, before I take another step, where's the payback? WHY should I care. WHAT is in it for me?

Yeah, and that attitude permeates my thought processes now when I hear about some "New and Improved" techie crap someone has going. Same old thing: get people suckered in to something which in the end is, on balance, bad for them. All these social networking sites? Look out. Yeah, I'm a member -- stupid. If you want to drink, you have to visit the watering hole, even if it means drinking where the alligators are swimming.

We are way too dependent upon technology, and it is distorting the way people think. A prospect has been dangling work in front of me for over a month. His messages, sent from a Blackberry, are always cryptic, incomplete, indecisive, procrastinating. In short, stream-of-consciousness. I point out that one time slot out of many will be busy and suggest others. He responds by not scheduling the meeting he specifically asked for. People have forgotten how to reason deeply.

Instead they react. They hear subtle cues and make fantastic leaps, instead of considering nuances. And the Web businesses that spring up to service their needs are there for convenience, to get them hooked, even if it means they lose control of their own business processes. All they seem to want to do is sell and pitch, advertise and market. Knowing means nothing. Producing means less. Excitement and action regardless of the consequences, means everything. I just don't relate to the group think.

I've also gotten inexplicably cynical about the potential employers. I was happier when they deceived me about their relative value to society. Now I see a lot of companies and wonder why they exist. One guy I know sells character outlines. CHARACTER OUTLINES. As in bits of font faces. He gets other people's design work, and converts the artwork to file formats using a program he bought for less than a hundred bucks. Then he sells the output, even has a catalog and a blog. The market is made up of people using the bits for embroidery work. So his Web site is a commercial design resource. He is selling the output of a program other people could for get themselves, if they knew better. Hey, at least he is doing something with some meaning. When I think of potentially working at a bank, insurance company, telecom (done all of those), government, or any of a bunch of other types of companies, I get to feeling singularly demotivated. I feel like they really aren't worth it.

So as a friend of mine said when I asked him what the interesting problems were, "I haven't found a way to do things that are both interesting and which pay". It is incredibly depressing to contemplate that. So far it has held true. Makes me want to just toss this laptop, throw the company in, and just give up. What's the point, if I can't enjoy what I do?

Sunday, October 4, 2009

I don't deserve to be alone

I get it,
you're just coping with yourself.
Your protege has you all worked up,
is it denial or sheer cluelessness that you cannot see your own obstinacy through hers?
And why does empathy so often elude,
why is it so hard to see,
that she is you, and you are she?
I understand,
that you just want to be left alone,
to wallow and stew, isolate and vegetate,
to read and view by yourself in your disquiet.
It is not enough that I am kept to myself for the week-end,
the Untouchable. but
must I also be without the comfort of human discourse,
my name not mentioned,
the very thought of me also forgotten?
Why
are you so oblivious,
that my soul dies within me,
starved for the simplicity
and warmth
of stimulating conversation?
That you cannot reply,
I do not fault you.
It is too much to ask, I know.
The void cannot reciprocate feelings,
but you pretended well, once upon a time,
had me convinced,
that we walked a path together,
that I was not alone.
An indiscreet message between sisters put lie to that tale,
the pretense found out,
wanting empathy yet finding none within yourself,
you showed me your best mimicry of comfort.
Now even that too is gone,
the facade too difficult to maintain,
crumbles with time.
I reached out this week-end, and found the void.
You were not there for me.
I do not deserve to be alone.