The Self-Correcting Process

carnival

Science is all about making proposals that can be tested (especially after Karl Popper’s formulation of the Falsifiability Criterion), and then undergoing the experience of having that proposal rejected.  This is the essence of any successful process — not that it eliminates errors altogether, but rather that it is able to make corrections despite these errors so that the target need never shift.

Professor Alain Connes recently gave his opinion of Xin-Jing Li’s proof for the Riemann Hypothesis — a proof which relies in part on Professor Connes’ work –  in a blog comment to his own blog (by way of Slashdot):

I dont like to be too negative in my comments. Li’s paper is an attempt to prove a variant of the global trace formula of my paper in Selecta. The "proof" is that of Theorem 7.3 page 29 in Li’s paper, but I stopped reading it when I saw that he is extending the test function h from ideles to adeles by 0 outside ideles and then using Fourier transform (see page 31). This cannot work and ideles form a set of measure 0 inside adeles (unlike what happens when one only deals with finitely many places).

 

Self-correcting extends to other professions, as well.  Scott Hanselman recently posted to correct an opinion he discovered here which he felt required some testing.  Through his own tests, he discovered that nesting a using directive inside a  namespace declaration provides no apparent performance benefit over placing it outside the namespace.

This leads him to draw these important lesson:

  • Don’t believe everything you read, even on a Microsoft Blog.
  • Don’t believe this blog, either!
  • Decide for yourself with experiments if you need a tiebreaker!

 

The sentiment recalls Ralph Waldo Emerson’s memorable words:

 

There is a time in every man’s education when he arrives at the conviction that envy is ignorance; that imitation is suicide; that he must take himself for better, for worse, as his portion; that though the wide universe is full of good, no kernel of nourishing corn can come to him but through his toil bestowed on that plot of ground which is given to him to till. The power which resides in him is new in nature, and none but he knows what that is which he can do, nor does he know until he has tried.

Trust thyself: every heart vibrates to that iron string. Accept the place the divine providence has found for you, the society of your contemporaries, the connection of events.

 

A similar sentiment is expressed in Hobbes’ Leviathan, though with a wicked edge:

 

And as to the faculties of the mind, setting aside the arts grounded upon words, and especially that skill of proceeding upon general and infallible rules, called science, which very few have and but in few things, as being not a native faculty born with us, nor attained, as prudence, while we look after somewhat else, I find yet a greater equality amongst men than that of strength. For prudence is but experience, which equal time equally bestows on all men in those things they equally apply themselves unto. That which may perhaps make such equality incredible is but a vain conceit of one’s own wisdom, which almost all men think they have in a greater degree than the vulgar; that is, than all men but themselves, and a few others, whom by fame, or for concurring with themselves, they approve. For such is the nature of men that howsoever they may acknowledge many others to be more witty, or more eloquent or more learned, yet they will hardly believe there be many so wise as themselves; for they see their own wit at hand, and other men’s at a distance. But this proveth rather that men are in that point equal, than unequal. For there is not ordinarily a greater sign of the equal distribution of anything than that every man is contented with his share. [emphasis mine]

 

We find it again expressed in Descartes’ Discours de la méthode. Descartes, it might be remembered, occasionally exchanged letters with Hobbes:

 

Le bon sens est la chose du monde la mieux partagée; car chacun pense en être si bien pourvu, que ceux même qui sont les plus difficiles à contenter en toute autre chose n’ont point coutume d’en désirer plus qu’ils en ont.

 

Both Hobbes and Descartes formulate their defense of common sense somewhat ironically.  In a recent post, Steve Yegge takes out the irony (or perhaps takes out the kernel of truth and leaves nothing but the irony) in his argument against Joel Spolsky’s widely aknowledged criteria for a desirable employee: "smart, and gets things done."

According to Yegge, the crux of the problem is this:

 

Unfortunately, smart is a generic enough concept that pretty much everyone in the world thinks [he’s] smart.

So looking for Smart is a bit problematic, since we aren’t smart enough to distinguish it from B.S. The best we can do is find people who we think are smart because they’re a bit like us.

So, like, what kind of people is this Smart, and Gets Things Done adage actually hiring?

 

And yet the self-correcting process continues, on the principle that we are all smart enough, collectively, to solve our problems in the aggregate, even if we can’t solve them as individuals.

Presidential candidate Barack Obama recently held a news conference to correct a misunderstanding he had made a few hours earlier about his stance on the Iraq War.  According to CNN:

 

Obama on Thursday denied that he’s shying away from his proposed 16-month phased withdrawal of all combat troops from Iraq, calling it "pure speculation" and adding that his "position has not changed."

However, he told reporters questioning his stance that he will "continue to refine" his policies as warranted.

His comments prompted the Republican National Committee to put out an e-mail saying the presumed Democratic nominee was backing away from his position on withdrawal.

Obama called a second news conference later Thursday to reiterate that he is not changing his position.

 

This is, of course, merely a blip in the history of self-correction.  A more significant one can be found in Bakhtin’s attempt to interpret the works of Rabelais, and to demonstrate (convincingly) that everyone before him misunderstood the father of Gargantua. 

Bakhtin’s analysis of Rabelais in turn brought to light one of the great discoveries of his career: The Carnival — though a colleague once found an earlier reference to the concept in one of Ernst Cassirer’s works.  Against the notion of a careful and steady self-correcting mechanism in history, Bakhtin introduced the metaphor of the Medieval Carnival:

 

The essential principle of grotesque realism is degradation, that is, the lowering of all that is high, spiritual, ideal, abstract; it is a transfer to the material level, to the sphere of earth and body in their indissoluble unity.

Degradation and debasement of the higher do not have a formal and relative character in grotesque realism. "Upward" and "downward" have here an absolute and strictly topographical meaning….Earth is an element that devours, swallows up (the grave, the womb) and at the same time an element of birth, of renascence (the maternal breasts)….Degradation digs a bodily grave for a new birth….To degrade an object does not imply merely hurling it into the void of nonexistence, into absolute destruction, but to hurl it down to the reproductive lower stratum, the zone in which conception and a new birth take place.

 

The Carnival serves to correct inequalities and resentments in society and its subcultures not by setting it upon a surer footing, but rather by affording us an opportunity to air our grievances publicly in a controlled ceremony which allows society and its hierarchical institutions to continue as they are.  It is a release, rather than an adjustment.  A pot party at a rock festival rather than a general strike.

As for the Internet, it is sometimes hard to say what is actually occurring in the back-and-forth that occurs between various blogs.  Have we actually harnessed the wisdom of crowds and created a self-correcting process that responds more rapidly to intellectual propositions, nudging them over a very short time to the correct solution, or have we in fact recreated the Medieval Carnival, a massive gathering of people in one location which breaks down the normal distinctions between wisdom and folly, knowledge and error, competence and foolhardiness? 

The Apocryphal Employee and Some Apocryphal Books

nancy

Nancy Davolio was a fictitious employee in the Microsoft Access 97 Northwind sample database.  Many office workers became smitten with her furtive smile and stylish hair, and while she continued to exist as an employee in later releases of the Northwind database, her employee photo changed, leading many to suspect that something untoward had happened to the real Nancy.

As most people know, "Nancy Davolio" is an anagram for "A Navy Cod Loin", which provides a hint about her origins and eventual fate.  For a list of further Nancy Davolio anagrams, I recommend the Internet Anagram Generator here, where may find more of the 1394 or so anagrams derived from Nancy’s name, for instance:

Cavil Noonday
A Viand Colony
A Divan Colony
A Vainly Condo
Canal Void Yon
Canola Nod Ivy
Canola Don Ivy

Ado Van Coy Nil
Vandal Coin Yo
Vandal Icon Yo
Vandal Coo Yin
Vandal Coy Ion
Avail Cony Nod
Avail Cony Don

And La Coy Vino
And Oval Icy On
And Oval Icy No
And Oval Cony I

Avian Cold Yon
Avian Clod Yon
Avian Doc Only
Day Van Cool In
Day Van Loco In
Day Van Con Oil

Coda Via Nylon

A Navy Cod Loin, however, seems particularly significant, inasmuch as Rabelais has a whole chapter devoted to playing on the word "cod".  Rabelais was a master of lists, as well as a master of profanity.  It has often been suggested that the French simply are much more versatile at cursing than we English speakers, and there may be some truth to this, though you don’t need to understand French to enjoy Book III Chapter 28 of Gargantua and Patagruel (since I’ve found a translation for you):

"And if so be it was preordinated for thee, wouldst thou be so impious as not to acquiesce in thy destiny? Speak, thou jaded cod.

"Faded cod. Louting cod. Appellant cod.
Mouldy cod. Discouraged cod. Swagging cod.
Musty cod. Surfeited cod. Withered cod.
Paltry cod. Peevish cod. Broken-reined cod.
Senseless cod. Translated cod. Defective cod.
Foundered cod. Forlorn cod. Crestfallen cod.
Distempered cod. Unsavoury cod. Felled cod.
Bewrayed cod. Worm-eaten cod. Fleeted cod.
Inveigled cod. Overtoiled cod. Cloyed cod.
Dangling cod. Miserable cod. Squeezed cod.
Stupid cod. Steeped cod. Resty cod.
Seedless cod. Kneaded-with-cold- Pounded cod.
Soaked cod. water cod. Loose cod.
Coldish cod. Hacked cod. Fruitless cod.
Pickled cod. Flaggy cod. Riven cod.
Churned cod. Scrubby cod. Pursy cod.
Filliped cod. Drained cod. Fusty cod.
Singlefied cod. Haled cod. Jadish cod.
Begrimed cod. Lolling cod. Fistulous cod.
Wrinkled cod. Drenched cod. Languishing cod.
Fainted cod. Burst cod. Maleficiated cod.
Extenuated cod. Stirred up cod. Hectic cod.
Grim cod. Mitred cod. Worn out cod.
Wasted cod. Peddlingly furnished Ill-favoured cod.
Inflamed cod. cod. Duncified cod.
Unhinged cod. Rusty cod. Macerated cod.
Scurfy cod. Exhausted cod. Paralytic cod.
Straddling cod. Perplexed cod. Degraded cod.
Putrefied cod. Unhelved cod. Benumbed cod.
Maimed cod. Fizzled cod. Bat-like cod.
Overlechered cod. Leprous cod. Fart-shotten cod.
Druggely cod. Bruised cod. Sunburnt cod.
Mitified cod. Spadonic cod. Pacified cod.
Goat-ridden cod. Boughty cod. Blunted cod.
Weakened cod. Mealy cod. Rankling tasted cod.
Ass-ridden cod. Wrangling cod. Rooted out cod.
Puff-pasted cod. Gangrened cod. Costive cod.
St. Anthonified cod. Crust-risen cod. Hailed on cod.
Untriped cod. Ragged cod. Cuffed cod.
Blasted cod. Quelled cod. Buffeted cod.
Cut off cod. Braggadocio cod. Whirreted cod.
Beveraged cod. Beggarly cod. Robbed cod.
Scarified cod. Trepanned cod. Neglected cod.
Dashed cod. Bedusked cod. Lame cod.
Slashed cod. Emasculated cod. Confused cod.
Enfeebled cod. Corked cod. Unsavoury cod.
Whore-hunting cod. Transparent cod. Overthrown cod.
Deteriorated cod. Vile cod. Boulted cod.
Chill cod. Antedated cod. Trod under cod.
Scrupulous cod. Chopped cod. Desolate cod.
Crazed cod. Pinked cod. Declining cod.
Tasteless cod. Cup-glassified cod. Stinking cod.
Sorrowful cod. Harsh cod. Crooked cod.
Murdered cod. Beaten cod. Brabbling cod.
Matachin-like cod. Barred cod. Rotten cod.
Besotted cod. Abandoned cod. Anxious cod.
Customerless cod. Confounded cod. Clouted cod.
Minced cod. Loutish cod. Tired cod.
Exulcerated cod. Borne down cod. Proud cod.
Patched cod. Sparred cod. Fractured cod.
Stupified cod. Abashed cod. Melancholy cod.
Annihilated cod. Unseasonable cod. Coxcombly cod.
Spent cod. Oppressed cod. Base cod.
Foiled cod. Grated cod. Bleaked cod.
Anguished cod. Falling away cod. Detested cod.
Disfigured cod. Smallcut cod. Diaphanous cod.
Disabled cod. Disordered cod. Unworthy cod.
Forceless cod. Latticed cod. Checked cod.
Censured cod. Ruined cod. Mangled cod.
Cut cod. Exasperated cod. Turned over cod.
Rifled cod. Rejected cod. Harried cod.
Undone cod. Belammed cod. Flawed cod.
Corrected cod. Fabricitant cod. Froward cod.
Slit cod. Perused cod. Ugly cod.
Skittish cod. Emasculated cod. Drawn cod.
Spongy cod. Roughly handled cod. Riven cod.
Botched cod. Examined cod. Distasteful cod.
Dejected cod. Cracked cod. Hanging cod.
Jagged cod. Wayward cod. Broken cod.
Pining cod. Haggled cod. Limber cod.
Deformed cod. Gleaning cod. Effeminate cod.
Mischieved cod. Ill-favoured cod. Kindled cod.
Cobbled cod. Pulled cod. Evacuated cod.
Embased cod. Drooping cod. Grieved cod.
Ransacked cod. Faint cod. Carking cod.
Despised cod. Parched cod. Disorderly cod.
Mangy cod. Paltry cod. Empty cod.
Abased cod. Cankered cod. Disquieted cod.
Supine cod. Void cod. Besysted cod.
Mended cod. Vexed cod. Confounded cod.
Dismayed cod. Bestunk cod. Hooked cod.
Divorous cod. Winnowed cod. Unlucky cod.
Wearied cod. Decayed cod. Sterile cod.
Sad cod. Disastrous cod. Beshitten cod.
Cross cod. Unhandsome cod. Appeased cod.
Vain-glorious cod. Stummed cod. Caitiff cod.
Poor cod. Barren cod. Woeful cod.
Brown cod. Wretched cod. Unseemly cod.
Shrunken cod. Feeble cod. Heavy cod.
Abhorred cod. Cast down cod. Weak cod.
Troubled cod. Stopped cod. Prostrated cod.
Scornful cod. Kept under cod. Uncomely cod.
Dishonest cod. Stubborn cod. Naughty cod.
Reproved cod. Ground cod. Laid flat cod.
Cocketed cod. Retchless cod. Suffocated cod.
Filthy cod. Weather-beaten cod. Held down cod.
Shred cod. Flayed cod. Barked cod.
Chawned cod. Bald cod. Hairless cod.
Short-winded cod. Tossed cod. Flamping cod.
Branchless cod. Flapping cod. Hooded cod.
Chapped cod. Cleft cod. Wormy cod.
Failing cod. Meagre cod.
Deficient cod. Dumpified cod. Faulty cod.
Lean cod. Suppressed cod. Bemealed cod.
Consumed cod. Hagged cod. Mortified cod.
Used cod. Jawped cod. Scurvy cod.
Puzzled cod. Havocked cod. Bescabbed cod.
Allayed cod. Astonished cod. Torn cod.
Spoiled cod. Dulled cod. Subdued cod.
Clagged cod. Slow cod. Sneaking cod.
Palsy-stricken cod. Plucked up cod. Bare cod.
Amazed cod. Constipated cod. Swart cod.
Bedunsed cod. Blown cod. Smutched cod.
Extirpated cod. Blockified cod. Raised up cod.
Banged cod. Pommelled cod. Chopped cod.
Stripped cod. All-to-bemauled cod. Flirted cod.
Hoary cod. Fallen away cod. Blained cod.
Blotted cod. Stale cod. Rensy cod.
Sunk in cod. Corrupted cod. Frowning cod.
Ghastly cod. Beflowered cod. Limping cod.
Unpointed cod. Amated cod. Ravelled cod.
Beblistered cod. Blackish cod. Rammish cod.
Wizened cod. Underlaid cod. Gaunt cod.
Beggar-plated cod. Loathing cod. Beskimmered cod.
Douf cod. Ill-filled cod. Scraggy cod.
Clarty cod. Bobbed cod. Lank cod.
Lumpish cod. Mated cod. Swashering cod.
Abject cod. Tawny cod. Moiling cod.
Side cod. Whealed cod. Swinking cod.
Choked up cod. Besmeared cod. Harried cod.
Backward cod. Hollow cod. Tugged cod.
Prolix cod. Pantless cod. Towed cod.
Spotted cod. Guizened cod. Misused cod.
Crumpled cod. Demiss cod. Adamitical cod.
Frumpled cod. Refractory cod."

Rabelais is also famous for his list of apocryphal books, of which here are a few:

In his abode there he found the library of St. Victor a very stately and magnific one, especially in some books which were there, of which followeth the Repertory and Catalogue, Et primo,

The for Godsake of Salvation.
The Codpiece of the Law.
The Slipshoe of the Decretals.
The Pomegranate of Vice.
The Clew-bottom of Theology.
The Duster or Foxtail-flap of Preachers, composed by Turlupin.
The Churning Ballock of the Valiant.
The Henbane of the Bishops.
Marmotretus de baboonis et apis, cum Commento Dorbellis.
Decretum Universitatis Parisiensis super gorgiasitate muliercularum
  ad placitum.
The Apparition of Sancte Geltrude to a Nun of Poissy, being in
  travail at the bringing forth of a child.
Ars honeste fartandi in societate, per Marcum Corvinum (Ortuinum).
The Mustard-pot of Penance.
The Gamashes, alias the Boots of Patience.
Formicarium artium.
De brodiorum usu, et honestate quartandi, per Sylvestrem Prioratem
  Jacobinum.
The Cosened or Gulled in Court.
The Frail of the Scriveners.
The Marriage-packet.
The Cruizy or Crucible of Contemplation.
The Flimflams of the Law.
The Prickle of Wine.
The Spur of Cheese.
Ruboffatorium (Decrotatorium) scholarium.
Tartaretus de modo cacandi.
The Bravades of Rome.
Bricot de Differentiis Browsarum.
The Tailpiece-Cushion, or Close-breech of Discipline.
The Cobbled Shoe of Humility.
The Trivet of good Thoughts.
The Kettle of Magnanimity.
The Cavilling Entanglements of Confessors.
The Snatchfare of the Curates.
Reverendi patris fratris Lubini, provincialis Bavardiae, de gulpendis
  lardslicionibus libri tres.
Pasquilli Doctoris Marmorei, de capreolis cum artichoketa comedendis,
  tempore Papali ab Ecclesia interdicto.
The Invention of the Holy Cross, personated by six wily Priests.
The Spectacles of Pilgrims bound for Rome.
Majoris de modo faciendi puddinos.
The Bagpipe of the Prelates.
Beda de optimitate triparum.
The Complaint of the Barristers upon the Reformation of Comfits.
The Furred Cat of the Solicitors and Attorneys.
Of Peas and Bacon, cum Commento.
The Small Vales or Drinking Money of the Indulgences.
Praeclarissimi juris utriusque Doctoris Maistre Pilloti, &c.,
  Scrap-farthingi de botchandis glossae Accursianae Triflis repetitio
  enucidi-luculidissima.
Stratagemata Francharchiaeri de Baniolet.
Carlbumpkinus de Re Militari cum Figuris Tevoti.
De usu et utilitate flayandi equos et equas, authore Magistro nostro
  de Quebecu.
The Sauciness of Country-Stewards.
M.N. Rostocostojambedanesse de mustarda post prandium servienda,
  libri quatuordecim, apostillati per M. Vaurillonis.
The Covillage or Wench-tribute of Promoters.
(Jabolenus de Cosmographia Purgatorii.)
Quaestio subtilissima, utrum Chimaera in vacuo bonbinans possit
  comedere secundas intentiones; et fuit debatuta per decem
  hebdomadas in Consilio Constantiensi.
The Bridle-champer of the Advocates.
Smutchudlamenta Scoti.
The Rasping and Hard-scraping of the Cardinals.
De calcaribus removendis, Decades undecim, per M. Albericum de Rosata.
Ejusdem de castramentandis criminibus libri tres.
The Entrance of Anthony de Leve into the Territories of Brazil.
(Marforii, bacalarii cubantis Romae) de peelandis aut unskinnandis
  blurrandisque Cardinalium mulis.
The said Author’s Apology against those who allege that the Pope’s
  mule doth eat but at set times.
Prognosticatio quae incipit, Silvii Triquebille, balata per M.N., the
  deep-dreaming gull Sion.
Boudarini Episcopi de emulgentiarum profectibus Aeneades novem,
  cum privilegio Papali ad triennium et postea non.
The Shitabranna of the Maids.
The Bald Arse or Peeled Breech of the Widows.
The Cowl or Capouch of the Monks.
The Mumbling Devotion of the Celestine Friars.
The Passage-toll of Beggarliness.
The Teeth-chatter or Gum-didder of Lubberly Lusks.
The Paring-shovel of the Theologues.
The Drench-horn of the Masters of Arts.
The Scullions of Olcam, the uninitiated Clerk.
Magistri N. Lickdishetis, de garbellisiftationibus horarum canonicarum,
  libri quadriginta.
Arsiversitatorium confratriarum, incerto authore.
The Gulsgoatony or Rasher of Cormorants and Ravenous Feeders.
The Rammishness of the Spaniards supergivuregondigaded by Friar Inigo.
The Muttering of Pitiful Wretches.
Dastardismus rerum Italicarum, authore Magistro Burnegad.
R. Lullius de Batisfolagiis Principum.
Calibistratorium caffardiae, authore M. Jacobo Hocstraten hereticometra.
Codtickler de Magistro nostrandorum Magistro nostratorumque beuvetis,
  libri octo galantissimi.
The Crackarades of Balists or stone-throwing Engines, Contrepate
  Clerks, Scriveners, Brief-writers, Rapporters, and Papal
  Bull-despatchers lately compiled by Regis.
A perpetual Almanack for those that have the gout and the pox.
Manera sweepandi fornacellos per Mag. Eccium.
The Shable or Scimetar of Merchants.
The Pleasures of the Monarchal Life.
The Hotchpot of Hypocrites.
The History of the Hobgoblins.
The Ragamuffinism of the pensionary maimed Soldiers.
The Gulling Fibs and Counterfeit shows of Commissaries.
The Litter of Treasurers.
The Juglingatorium of Sophisters.
Antipericatametanaparbeugedamphicribrationes Toordicantium.
The Periwinkle of Ballad-makers.
The Push-forward of the Alchemists.
The Niddy-noddy of the Satchel-loaded Seekers, by Friar Bindfastatis.
The Shackles of Religion.
The Racket of Swag-waggers.
The Leaning-stock of old Age.
The Muzzle of Nobility.
The Ape’s Paternoster.
The Crickets and Hawk’s-bells of Devotion.
The Pot of the Ember-weeks.
The Mortar of the Politic Life.
The Flap of the Hermits.
The Riding-hood or Monterg of the Penitentiaries.
The Trictrac of the Knocking Friars.
Blockheadodus, de vita et honestate bragadochiorum.
Lyrippii Sorbonici Moralisationes, per M. Lupoldum.
The Carrier-horse-bells of Travellers.
The Bibbings of the tippling Bishops.
Dolloporediones Doctorum Coloniensium adversus Reuclin.
The Cymbals of Ladies.
The Dunger’s Martingale.
Whirlingfriskorum Chasemarkerorum per Fratrem Crackwoodloguetis.
The Clouted Patches of a Stout Heart.
The Mummery of the Racket-keeping Robin-goodfellows.
Gerson, de auferibilitate Papae ab Ecclesia.
The Catalogue of the Nominated and Graduated Persons.
Jo. Dytebrodii, terribilitate excommunicationis libellus acephalos.
Ingeniositas invocandi diabolos et diabolas, per M. Guingolphum.
The Hotchpotch or Gallimaufry of the perpetually begging Friars.
The Morris-dance of the Heretics.
The Whinings of Cajetan.
Muddisnout Doctoris Cherubici, de origine Roughfootedarum, et
  Wryneckedorum ritibus, libri septem.
Sixty-nine fat Breviaries.
The Nightmare of the five Orders of Beggars.
The Skinnery of the new Start-ups extracted out of the fallow-butt,
  incornifistibulated and plodded upon in the angelic sum.
The Raver and idle Talker in cases of Conscience.
The Fat Belly of the Presidents.
The Baffling Flouter of the Abbots.
Sutoris adversus eum qui vocaverat eum Slabsauceatorem, et quod
  Slabsauceatores non sunt damnati ab Ecclesia.
Cacatorium medicorum.
The Chimney-sweeper of Astrology.
Campi clysteriorum per paragraph C.
The Bumsquibcracker of Apothecaries.
The Kissbreech of Chirurgery.
Justinianus de Whiteleperotis tollendis.
Antidotarium animae.
Merlinus Coccaius, de patria diabolorum.
The Practice of Iniquity, by Cleuraunes Sadden.
The Mirror of Baseness, by Radnecu Waldenses.
The Engrained Rogue, by Dwarsencas Eldenu.
The Merciless Cormorant, by Hoxinidno the Jew.

I wonder if Nancy Davolio has read any of these books.

If you happen to be curious about some of the Latin titles, the Decretum Universitatis Parisiensis super gorgiasitate muliercularum ad placitum translates as The Decree of the University of Paris which Permits Young Ladies to Bare Their Throats at Will.   Campi clysteriorum per is The Field of Enemas.  The Cacatorium medicorum is The Doctor’s Chamberpot.

There are also apocryphal computer books, of course, which, oddly enough, I have the feeling I have read before.  Graham Nelson cites Tedium and Gnawfinger’s Elements of Batch Processing in COBOL-66: third edition and Mr Blobby’s Blobby Book of Computer Fun (h/t @ Paul).

I might also add to the list The Complete Idiot’s Guide to Multithreaded Applications, How Agile Will Make You So Productive The Code Will Write Itself, and Essential Project Management: Lying to the people under you, Lying to the people above you, and Making it all work out.

Whither Ajax?

ajax

Ajax, the fleet son of Oileus, commanded the Locrians. He was not so great, nor nearly so great, as Ajax the son of Telamon. He was a little man, and his breastplate was made of linen, but in use of the spear he excelled all the Hellenes and the Achaeans. —The Iliad

Ajax son of Oileus is traditionally called Ajax the Lesser, while Ajax Telamon’s son is Ajax the Greater.  The Trojan War  is often portrayed as a battle between the national heroes of two great armies, Hector on one side, and Achilles on the other.  What makes the arraying of the sides peculiar is that, in fact, the Achaeans have two heroes that can defeat the war chief of the Trojans.  Both Achilles and Ajax the Greater are superior warriors to Hector.  This feature was actually a giveaway to many classicists back in 1959 that the newly released western Warlock was based on The Iliad.

Two years ago Microsoft began a campaign to carve out a niche in the Ajax world.  They did so with the release of .NET 3.0 and later .NET 3.5.  One of the innovated approaches they took to being a player in Ajax was to support an open source project called the Ajax Control Toolkit.

According to one of the contributors to the Toolkit, however, there have been no releases of the Toolkit for five months, and apparently no suggestions of any plans for the Toolkit:  http://forums.asp.net/t/1283218.aspx .

So is the Toolkit dead?  Is Microsoft’s determination to be a player in the Ajax domain waned, to be replaced by a greater interest in making Silverlight the Flash-killer?

Microsoft says no, and has published a new document explaining Microsoft’s Ajax roadmap  http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=14924.  When it comes to RIAs, Microsoft is insisting that it is going forward with both Silverlight and Ajax. 

The specifics about the Toolkit are admittedly vague, however.  Somewhat more peculiar, a check of the contributors to the Toolkit project on Codeplex shows that at least half of them have not checked in any code for the past 60 days.

Which leads one to wonder: is ASP.NET AJAX named after Ajax son of Oileus, or Ajax son of Telamon?

My Co-Worker is Certified

borat

Joe DeCarlo, a colleague from my Turner Broadcasting days, was recently awarded the MCA.  That is, he is now a Microsoft Certified Architect.  Kirk Evans posted an interview with him about the program here.  It is a difficult program to get into, and requires a recommendation from at least one MCA, as well as vetting by other MCA’s.  They are a rather elite circle of professionals with a strong interest in maintaining the high standards of excellence of their self-selecting club.   Hats off to Joe for making it.

While articulating what an architect’s specific role in a company actually is can be difficult — which is one of the reasons Microsoft began this program — the outlines are fairly simple.  The architect is there to make sure that the contractors don’t screw you when you need some work done on your house, or when you need a new enterprise application built for your company.  Anything beyond that, like making sure the roof doesn’t fall in once you start running a million transactions a day through your new edifice, is gravy.

Fingerprint Scanner Interferes with Media Player Extender

fingerprint

Microsoft has a technology called Media Center Extender that basically allows you to use your XBOX 360 as a media center.  All that’s required is that you have a computer connected to your XBOX over a network with the Media Center software installed (it comes standard with Vista Premier) and turned on.  The XBOX can then be used to play movies and music files located on your harddrive.

I haven’t looked at this much until recently, when I found out about vmcNetFlix.  vmcNetFlix is one of those great ideas.  The developer saw that NetFlix was allowing subscribers to download movies to their desktops, and that Microsoft was allowing people to stream movies to their TV’s through an XBOX, and he put in the final pieces to connect all of this together.  vmcNetFlix has its issues at times, but hey, it’s one guy providing a solution on his own time and it’s free.

Before I could get any of this working, however, I had to get my very sweet HP entertainment laptop to talk to my XBOX, and kept running into the same issues with the XBOX complaining that it could not connect the media center extender to my laptop, despite my repeated attempts to reboot both systems and clear out caches and certificates and blowing on both ends of my ethernet cable for no particular reason except that some guy on some newsgroup told me to.

Finally, based on another internet tip, I uninstalled the nice biometric software that came with my laptop and everything started working.  For whatever reason, every piece of biometric software, which allows you to scan in your fingerprint to identify yourself to the operating system rather than type in a password, interferes with Media Center.  I was using DigitalPersona, but it appears that the problem is not unique to them.

So now the fingerprint scanner on my laptop doesn’t do anything.  This is because it turned out to be a technological bottleneck.  On the other hand, I can now stream movies, including BlueRay movies, to my HD TV anytime I want using free technology built in someone’s basement that removes bottlenecks.  Is it worth it?

Well, yes. Not only can I watch any episode of Buck Rogers in the 25th century whenever I want, but I’ve also got most of the Werner Herzog and Rainer Werner Fassbinder catalogs ready for instant streaming.  That’s hot.  That’s Erin Grey hot.

Beyond Good and Endpoints

beyonder

Two important WCF resources came out last week.  The first is the source code for StockTrader 2.0, Microsoft’s reference app for .NET 3.5 using, in particular, CF and PF.  The download is available here http://msdn.microsoft.com/en-us/netframework/bb499684.aspx.  This is fairly significant since there are not (as far as I have been able to tell) any guidelines generally available on how to build a distributed application using the Communications Foundation.  In the project I am currently working on, we have been trying and stopping as we go, trading frequent emails with various Microsoft insiders to try to find out if what we are doing makes sense (so far it has). 

Now we have the opportunity to compare our app against StockTrader and see where the differences lie.  I’m not sure if this is an artifice or not, but I like being able to take two ideas and decide which one better as I work through an architecture.  This is a necessary exercise in working towards the "right" architecture.  The approach resembles, in some ways, the Mirror of Nature that Richard Rorty made his name on attacking, except that it is concerned with practice rather than with epistemology.  I think that there is a right way to do things of which I am unaware.  To use Don Rumsfeld’s memorable phrase, it is one of the things I know I don’t know.  I then work, through trial and error as well as a comparison of alternatives, towards an intellectual representation of what that correct way of getting things done might be. 

I’ve talked to other developers who feel that speaking about the "right way" to do things is simply a trap we all fall into or, worse, a fiction that serves only to generate artificial conflicts and slow down actual development.  As one developer told me, "There are many arguments on either side of any issue, and we’re not going to be able to resolve here which ones are better, since we come to it with preconceptions and prejudices we can’t get over easily."  While visiting my brother at college once, I attended a lecture in which Alan Dershowitz, the civil rights lawyer, argued very much the same case.  He insisted that he could go about seven levels behind any argument, and then seven levels behind the case against him.  The peeling of levels (usually it only takes two or three) gives the false impression that we are actually getting to the bottom of things, whereas Dershowitz himself had reached the point in his career where he felt it was merely an exercise in cleverness for lawyers and for philosophers an exercise in futility.

This may all be true, and yet I feel I need this fiction, if it is a fiction, in order to do my job well.

The second important release this week is Juval Lowy’s presention on WCF: Beyond the Endpoints (you will need to have Microsoft Live Meeting installed to listen to it).  In this presentation you will come to realize what many people already know: Mr. Lowy is either a genius or a madman, and had he lived in another era, he would have made a good Jules Verne villain.  Based on his WCF book, I had taken his position to be that CF solves many distributed programming problems, and in the big picture serves as the fulfillment (or successor) to component based programming — the notion that based upon common and established conventions we can pass messages between disparate technologies.

In Beyond the Endpoints, Mr. Lowy tops even those grand pronouncements.  Here he argues that CF is actually the successor to all of our current .NET programming conventions in C# and VB.NET, and is in fact a new programming model.  With specific examples from the Singleton pattern to class level isolation, he demonstrates various low level ways in which WCF provides better ways to do our most common programming tasks.  He makes clear in the Q&A session afterwards that he basically sees something in CF that even Microsoft doesn’t see in their technology.  His vision for WCF veers wildly away from Microsoft’s vision.  When asked what the performance penalty for using CF as a programming model would be, he insists that sending messages over a wire in WCF is actually faster than working with traditional in-proc objects (given certain unspecified conditions).  Moreover, the performance cost is irrelevant.  Mr. Lowy appeals to history in order to explain his vision for CF.  COM, for instance, started off as simply a way to embed files inside of Microsoft Word documents.  In order to get Object Linking and Embedding to work, however, Microsoft’s engineers were oblige to solve fundamental problems that in turn produced what we now know as COM.  CF, for Juval Lowy, is headed very much along the same track.

It is a truly amazing presentation, ambitious in scope and broad in vision, and I highly recommend it to anyone interested in the inherent potential of the Communications Foundation.

PBS Sprout and The Hated

caillou bob

So this is how I start the day when I work from home.  I wake up at 5 in the morning, after which I have about 3 hours before anyone else is up.  At 8, the kids start filtering down from upstairs, so I turn PBS Sprout on for them and move from the living room to my office.  PBS Sprout is PBS’s lineup of children’s shows, and our cable provider gives us On Demand access to the episodes, which allows the kids to watch their shows without commercials (oh yes, PBS does have commercials).  My children (at least the youngest) has a fondness for a bald toddler named Caillou.  According to the official site, "the Caillou website and television series features everyday experiences and events that resonate with all children."   I think most parents find him a bit disturbing — but not as disturbing as Teletubbies, of course.

Before Caillou came on today there was a brief intro for PBS Sprout, and in the background was an interesting rendition of Bob Marley’s Three Little Birds which brought back a flood of memories.  The version of the song played by PBS Sprout is by Elizabeth Mitchell.  No, not that Elizabeth Mitchell.  This Elizabeth Mitchell.

Elizabeth Mitchell is married to Daniel Littleton, and in fact Daniel and their son perform on that particular Marley track.  Dan Littleton, in turn, used to play in a punk rock band in Annapolis, Maryland where I went to college.  For my first few years on campus, I used to find chalk drawings all over the sidewalks of Annapolis of The Hated without knowing what it meant.  Then Dan Littleton ended up going to my college (he was a faculty brat, after all) and it all became clear.

Not only that, but I used to hang out with Mark Fisher, who had played guitar and vocals for The Hated, though by the time I met him he was wearing tweed jackets and translating Greek (I think I did the Philoctetes with him), so I never suspected.

And mutatis mutandis, now not only has Bob Marley been gentrified for daytime cartoons, but the founder of The Hated has helped to make it possible.  Is this what middle-age feels like? 

Hear for yourself.

Bob Marley and the Wailers 

Elizabeth Mitchell and family

Software Development and the Occult

mrwizard

Sergey Barskiy, a colleague at Magenic, likes to say that there is no magic in software development.  There’s only hard work.

Every few months, another software management process is promoted, a new tool is developed, or a new snowclone, "X-driven development", is coined to make software developers more productive, and in general they all promote themselves as the magic that will radically change the way we deliver software, and in general they don’t really pan out.  Instead we just end up with different schools of software development.  Physiology, metoposcopy, chiromancy, theurgia, goetia, necromancy, cabalie, geomancy, hydromancy, aeromancy, prymancy and suffumigations — does one method really provide a better way to deliver software than another?  Or should we simply pick the techniques that work best for us and stick with them?  What is ultimately disappointing, and this is at the heart of Sergey’s rule, is that once one immerses oneself in any of these techniques, one discovers, like a teenage goth working through Alaister Crowley’s Magick, Liber ABA, that things don’t ever go quite quite according to plan.

But does this mean there is no magic?  Perhaps we are looking in the wrong place. 

Last Friday, on June 6th, Microsoft released the beta 2 of Silverlight 2.  Almost immediately, several prominent bloggers published entries not only about the release, but also full code samples demonstrating how to use the new release.  Scott Guthrie, Jeff Wilcox, Kirupa Chinnathambi, Brad Abrams and Ashish Shetty all had immediate posts (Mr. Shetty’s was actually a day early), but this is to be expected as they are all Microsoft employees closely associated with Silverlight.

More impressively, non-Microsoft employees like Shawn Wildermuth, Peter McGrattan, Walt Ritscher and several others had immediate code to publish around this release.  No amount of hard work can make that possible. 

What is the occult, after all, but something hidden?  Even for people who once believed in such things, metoposcopy, geomancy and chiromancy were simply techniques for dealing with the hidden world not commonly understood.  Along with alchemy and astrology, cryptography was once considered one of the areas of expertise of a renaissance magus.  Both Johannes Trithemius and Giambattista Della Porta wrote about it.  What made cryptography go so well with other fields such as necromancy and hydromancy is that its secrets were possessed only by the few, and knowledge of it helped preserve one’s monopoly on secret knowledge.

Software development is full of secrets.  Developers call what they do "coding", for no obvious reason other than that it is generally incomprehensible to anyone but a fellow initiate of a particular coding language.  The code, in turn, is a set of instructions which must be translated into another code, assembly, the mystical language of all our virtual worlds, which is actually incomprehensible to nearly everyone.

Dame Francis Yates called this kind of magic "practical" magic.  It is simply a way of getting things done.  Whether one instructs a demon to sour one’s neighbor’s milk, or uses chemicals to acidify it, the effect is basically the same — all that differs is the particular technique one employs to accomplish one’s goal.  One is clearly going to be more effective than the other, but the difference between the occult and the mundane surely does not turn on mere efficacy. 

The other kind of magic is a "spiritual" magic, which is a different sort of secret.  In a chapter entitled "113" in Umberto Eco’s Foucault’s Pendulum, Eco quotes from Ja?far al-?adiq, the sixth Imam:

"Our cause is a secret within a secret, a secret that only another secret can explain; it is a secret about a secret that is veiled by a secret."

Spiritual magic, in this case, is the way one gains influence by either having special access to secrets, or by appearing to have such access.  One begins to be an initiate into its mysteries simply by recognizing that it exists.  In his history of Secret Societies, Arkon Daraul describes an actual case of a young man becoming a Sufi:

"His first contact with a Sufi was when he was working as a part-time assistant in a restaurant.  Here he noticed a man among the customers who always seemed ‘on top of every situation.  His methods of discussion with the people who came into the place were so controlled, and his perception, especially of atmosphere, so profound, that I plucked up enough courage to ask him how one did it.’"

The initiate is then tested for suitability, and finally takes the oaths required of him to learn more of the Sufi way.  Ahmad Yasawi, a thirteenth century Sufi, laid down rules for initiates, of which the seventh is possibly the most important.

"Utter silence of secrets is my oath; and I will show respect for those who are set up over me, without quibble.  I am the friend of the friends of the Order and the Murshid who exemplifies it; the enemy of the enemies of the same."

Today this would perhaps be called an NDA.  The rituals change over time, but the patterns are always recognizable.

The patterns of success are imprinted upon the human mind and its shape appears again and again throughout history.  Secret societies exist in every field, whether we recognize them as such or not.  I do not claim that Microsoft has such a structure, nor do I deny it.  I only suggest that if there is any magic in software development, this is where you will find it.

Extending the Ajax Control Toolkit Tab Container with Lazy Loading

multi-tabs

 

download source code

ASP.NET has been missing a good, free tab control for a long time.  With the ACT Tab Container, we were finally given one.  It typically runs in client-side only mode, but can interact with server-code if we set its AutoPostback property to true.

Compared to what we had before, it is a huge improvement.  The peculiar thing about it, however, is that it isn’t actually an Ajax control.  It doesn’t use asynchronous postbacks or web service calls to talk to the server — instead you just have these two mode: run it using client script only, or run it using server-side events and code-behind only.

So a few months ago I rectified this for a project, and only found out afterwards that Matt Berseth had already outlined the technique on his blog.  You basically run the tab container in client-side mode, and add update panels to the tab panels that you want to be ajaxy.  You then hook up the client-side ActivePageChanged event in such a way that it spoofs the Update Panel contained in the tab, causing an asynchronous (or partial) postback.

Matt also gave this technique a cool name.  He called it ‘lazy loading the tab panel’.  Like lazy loading in OOP, using this technique the update panels inside each tab panel only do something when its tab is selected.  Information is loaded only when its needed, and not before.

I must admit that I hold some resentment against Matt for coming up with this first, and for coming up with the cool moniker for it.  On the other hand, the solution I came up with encapsulates all of the javascript needed for this into a nice simple extender control that you can drop on your page, which his does not, and I’m rather proud of this.

The VS 2008 project for this extender is linked at the top of this post.  To use it, you need to compile the project and add the compiled assembly to your project, or else just add the project to your solution and add a project reference.

1. Drop the TabContainerExtender control into your page.

2. Set the Extender’s TargetControlID property to your TabContainer’s ID.

3. In the RegisterUpdatePanels element of the Extender, map your tabs to your update panels.  This mapping tells the extender which Update Panels to activate when each tab is selected.

Your markup will look something like this:

    <cc2:TabContainerExtender ID="TabContainerExtender1" 
    runat="server" 
    TargetControlID="TabContainer1" OnActiveTabChanged="ActiveTabChanged">
    <RegisterUpdatePanels>
    <cc2:UpdatePanelInfo TabIndex="0" UpdatePanelID="UpdatePanel1" />
    <cc2:UpdatePanelInfo TabIndex="1" UpdatePanelID="UpdatePanel2" />
    <cc2:UpdatePanelInfo TabIndex="2" UpdatePanelID="UpdatePanel3" />
    </RegisterUpdatePanels>
    </cc2:TabContainerExtender> 

4. If you want to add some code-behind to your active tab changed event, add set the OnActiveTabChanged property of the Extender to the name of your handler.  The thrown event will pass the correct Index number for the active Tab, as well as the ID of the mapped Update Panel.  The handler’s signature looks like this:

        protected void ActiveTabChanged(int index, string panelID)

        {

            …

        }

I highly encourage you to read Matt Berseth’s blog entry (which I have to admit is pretty good) to get a clear idea of the techniques being applied in this ajax extender.  If you just need a quick solution, however, feel free to download this code from the link at the top and use it any way you like with no strings attached.  There is a sample project attached to the solution that will demonstrate how to use the Tab Container Extender, in case you run into any problems with lazy loading your panels.

For reference, here is the code for the sample implementation, which loads controls on the fly based on the tab selected:

    <cc1:TabContainer ID="TabContainer1" runat="server">
    <cc1:TabPanel ID="TabPanel1" runat="server" HeaderText="Tab Panel 1">
    <ContentTemplate>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
        Content 1 ...
        <br />
            <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>      
        </ContentTemplate>
        </asp:UpdatePanel>    
    </ContentTemplate>
    </cc1:TabPanel>
        <cc1:TabPanel ID="TabPanel2" runat="server" HeaderText="Tab Panel 2">
    <ContentTemplate>
        <asp:UpdatePanel ID="UpdatePanel2" runat="server">
        <ContentTemplate>
        Content 2 ...
        <br />
            <asp:PlaceHolder ID="PlaceHolder2" runat="server"></asp:PlaceHolder>      
        </ContentTemplate>
        </asp:UpdatePanel>    
    </ContentTemplate>
    </cc1:TabPanel>
        <cc1:TabPanel ID="TabPanel3" runat="server" HeaderText="Tab Panel 3">
    <ContentTemplate>
        <asp:UpdatePanel ID="UpdatePanel3" runat="server">
        <ContentTemplate>
        Content 3 ...
        <br />
            <asp:PlaceHolder ID="PlaceHolder3" runat="server"></asp:PlaceHolder>      
        </ContentTemplate>
        </asp:UpdatePanel>    
    </ContentTemplate>
    </cc1:TabPanel>
    </cc1:TabContainer>
    <cc2:TabContainerExtender ID="TabContainerExtender1" 
    runat="server" 
    TargetControlID="TabContainer1" OnActiveTabChanged="ActiveTabChanged">
    <RegisterUpdatePanels>
    <cc2:UpdatePanelInfo TabIndex="0" UpdatePanelID="UpdatePanel1" />
    <cc2:UpdatePanelInfo TabIndex="1" UpdatePanelID="UpdatePanel2" />
    <cc2:UpdatePanelInfo TabIndex="2" UpdatePanelID="UpdatePanel3" />
    </RegisterUpdatePanels>
    </cc2:TabContainerExtender>