Learning Silverlight: Day Three

 Tomadevaldivia

Today I have been working through the Microsoft QuickStarts for Silverlight, which include walkthroughs as well as code source.  Here are the high level topics available:

  • Getting Started with Silverlight Development [Skipped]

  • Building Dynamic User Interfaces with Silverlight

  • Networking and Communication in Silverlight

  • Interaction Between HTML and Managed Code

  • Programming with Dynamic Languages

  • Additional Programming Tasks

     

    Notes to Building Dynamic User Interfaces with Silverlight:

    A. Writing Handlers for Silverlight Input Events [Skipped] — this is covered in most introductory materials.  Didn’t see a point in reviewing it.

    B. Changing the Appearance of an Existing Control in Silverlight — this is interesting, since it covers both styling an app as well as skinning it with ContentTemplates.  ContentTemplates do more than set properties for certain elements in your Silverlight app the way CSS does for HTML elements.  They also let you switch out your Silverlight element with a custom element such that, say, everywhere you have specified a button in your app, you now get whatever is created in the button’s ContentTemplate.  It works a bit like a global replace.  On the other hand, whatever events you have hooked up to your button in order to fulfill business requirements will still work, whatever you do with the ContentTemplate.

    This QuickStart is mostly a copy / paste sort of tutorial.  That said, there are some errors in it such that, if you follow the instructions to the letter, you will end up with a useless application that hangs.

    • In section one of "To create a ControlTemplate for a button," your control template needs to include a TargetType attribute set to Button.
    • In section two of "To create a ControlTemplate for a button," name your grid "RootElement" rather than "ELEMENT_Root", as the instructions tell you to do.
    • Section two of "To specify the appearance of the control" instructs you to Add the following elements after the closing </Grid.Resources> tag, at the comment "Add the elements that specify appearance here." 
    • It ought to read Add the following elements after the closing </Grid.Resources> tag, at the comment "Add child FrameworkElement objects here." 

    C. Creating Custom Controls for Silverlightan eye opening walkthrough.  We create a custom Silverlight control by first creating a standard class that inherits from Control, and a separate XML file with an xaml estension.  XML file is aware of the control class, but the control class knows nothing about the XAML file.  We reuse some of the ContentTemplate techniques from the previous QuickStart to give form to our Silverlight custom control.  Here are some minor issues with the walkthrough:

    • Be sure to add the following using declaration to your control class: using System.Windows.Controls.Primitives;
    • You need to understand Dependency Properties in order to get the most out of this walkthrough.  The article provides a dead link to the MSDN article on Dependency Properties.  It should have linked here, instead.
    • Dependency Properties are a cool concept.  For the most part, they are like property bags, except with special Silverlight hooks.  The terminology, however, is either not fully worked out, or just ill-conceived.  Here’s a sample definition of a dependency property, from MSDN:
    • Dependency property: A property that is backed by a DependencyProperty.  (Oh really?)
    • The tutorial has you start using a Background attribute in your ContentTemplate without first having you add it to your custom class.  You need to add this to your class in order to avoid a runtime exception:

    public static readonly DependencyProperty BackgroundProperty =
    DependencyProperty.Register("Background", typeof(Brush), typeof(NumericUpDown),
                    null);

    public Brush Background
    {
        get { return (Brush)GetValue(BackgroundProperty); }
        set { SetValue(BackgroundProperty, value); }
    }

    D. Displaying a Splash Screen While Loading a Silverlight-Based Application — this QuickStart seems to work.  I actually can’t completely tell what’s happening in the walkthrough, though it seems like it will make a great reference if I ever need to customize a splash screen.

  • E. Working with Data Collections in Silverlight — this useful QuickStart explains data binding and the DataTemplate.  No obvious errors, but a few lacunae.

    • Life will go much easier if you name your project Quickstart_Bookstore.
    • The ObservableCollection type belongs to the namespace System.Collections.ObjectModel.

    Learning Silverlight: Day Two

    hms_victory 

    Today I finished reading through Christian Wenz’s Essential Silverlight Up-To-Date.  According to Amazon, the book ships tomorrow — I was able to read it though my subscription to Safari Books Online.  From what I can get out of browsing the Amazon site, it is the first Silverlight 2 book to come out, and precedes the others by about two months.  It is, essentially, the only game in town for those planning to learn Silverlight 2 from a book.

    It is a bit of a mixed bag, due not least to the difficulties involved in trying to write a book about a technology that is still in flux.  Breaking changes are expected during the transition from the beta 1 to the beta 2 of  Silverlight 2, and most book authors in this sub-genre of a sub-genre have adopted the better part of valor.  So thanks are due to Mr. Wenz for accepting such a difficult task and finding a way to meet his publisher’s deadline.

    That said, while the book offers a good overview of the Silverlight 2 technology, in doesn’t go into any particular depth.  The labs are difficult to follow, at times, because some of the things he writes about do not appear in the Silverlight 2 beta 1, such as a project template for user controls.  Since his walkthroughs require the use of a user control, I was obliged to google the right way to create one, just so I could finish the book.

    Frustratingly, the chapter on Programming Silverlight with .NET is extremely brief, despite the fact that this is perhaps the most interesting new feature of Silverlight 2.  Or perhaps this is merely an artifact of the way I read it, and the physical copy that will be placed on bookstore shelves will have more content.  At least I hope this is the case.

    I was finally able to get a user control into my XAML page by following the official Silverlight 2 hands-on labs, found here.  Microsoft is not known for being good at documenting their bleeding edge technology, but these labs are actually quite excellent, and may currently be the best resource for learning Silverlight 2.  I’ll know more tomorrow, as I plan to work my way through all the tutorials and labs on the official Silverlight site.

    The trick with adding a user control to a XAML page, it turns out, is that a namespace declaration to the containing project has to be added to the page.  The page, for whatever reason, is not automatically aware of the assembly it is in.  Once the namespace is declared, however, Intellisense takes over and makes adding your user controls — HelloWorld.xaml, in this case — quite easy.

    Learning Silverlight: Day One

    cuttysark

    ‘Twas not a propitious day.  Installing the Beta 1 of Silverlight 2 was trying.  Finding the correct place to download the correct version of Silverlight 2 was a bit tricky, but I finally did get to it: http://silverlight.net/getstarted/.

    I downloaded and installed the SDK without trouble.  On reading a bit more around the net, it turned out I also needed the correct version of the Silverlight Tools for Visual Studio 2008 in order to get the project templates I would require to do anything worthwhile, so I did.  This installation didn’t go so well, and I received a message stating vaguely that I had previous software that needed to be removed.

    I removed the Silverlight browser plug-in, but I got the same message.  Since the only other Silverlight component I had installed was the SDK, I decided to remove that also.  This did the trick.  It turns out that what is now being called the Silverlight Tools is actually a comprehensive install that includes the SDK, though at some previous point it wasn’t.  Checking at the Microsoft Silverlight site, it also appears that the site has been updated with a clarification to make this change more obvious.

    After getting everything installed, I fired up the Visual Studio IDE and started working through the examples in Chris Wenz’s Essential Silverlight 2 — Up to Date.  It is the only book on Silverlight 2 I could find, and the "Up to Date" postscript is meant to indicate that it will be updated on a regular basis as different versions of Silverlight are released.  The one I’m reading through is meant to be for the Silverlight 2 Beta 1, though the version being sold appears to have been written before the official release.  I was also told that this was the book which was distributed at MIX ’08.

    I tried downloading the sample code that is intended to go with the book, but it turned out to be a dead link.   Oh well, I thought, I can just build each project myself according to Chris’s instructions.

    At the end of the first chapter, however, I was instructed to create "a new Silverlight Control project within the current solution," and after 20 minutes or so trying to puzzle out what I was supposed to do, I finally realized that no such project template existed.  The version of the Silverlight 2 Beta 1 that was released turns out to be a different beast than the one he was writing about.  So I’ll just skip this example and move on to the rest of the book, hoping that this is the exception that proves the rule, rather than the rule that proves the rule.

    In this first chapter, I also learned a new acronym to add to my bestiary of strange and exotic technical terms.  An RIA is a Rich Internet Application, not to be confused with an AJAX client, or a thin client, or a one-click client, or a rich client application.  Silverlight is an RIA, as is Adobe Flash, Adobe AIR, JavaFX and Google Gears.

    Despite the frustrations of this first day, I am still excited about Silverlight.  The contradictory and confusing nature of the various Silverlight resources can be chalked up to the entry cost for learning bleeding edge technology.  And perhaps it is even intended to discourage those not willing to bear some burden as the price for acquiring new knowledge. 

    On another front, I’ve decided that the best place to renew a study of Husserlian Phenomenology is with Franz Brentano.  I have a translation (which you can read here) by Benito Müller of a series of lectures given by Brentano on descriptive psychology from 1890 entitled Psychognosie, which include Brentano’s influential analysis of the concept of intentionality — the sine qua non of phenomenology. 

    In his introduction, Müller is good enough to provide the most succinct explanation of intentionality I have ever come across. "Every psychical act is intentional in that it is directed upon an object."  Would that tech book authors could achieve a similar standard of clarity.

    Resolutions

    Friedrich.Wanderer Above the Sea of Fog

    Bill Ryan is a man spoken of in awed tones at the Magenic offices in Atlanta.  There are various ways to develop a reputation in the computing world.  Some people post to technology discussion groups.  Some people write books.  Some speak at conferences.  Some people are good at making friends with Microsoft developers in Redmond.  Some strive to get abbreviations tacked onto their names like MCAD, MCSD, and MVP.  The problem with all of this is that the more time you spend on these particular pursuits, the less time you actually spend coding, and so there can be a certain hollowness to these technical reputations.  The people writing the books on how to use certain technologies are often the last people you want actually building a system for you using those technologies because, as a consequence of their writing and speaking obligations, they don’t actually have any real world experience using them.

    Bill, as people at Magenic say, is "the real deal."  He talks the talk and he walks the walk.  Speculation around the water cooler is that he could have only accomplished all that he did, while with Magenic, by never sleeping.

    He is basically the living ideal of what a software consultant should be.  The fact that the consultants I work with, who in their own right are all remarkable technicians and gentlemen, view Bill in this way says much.

    What is the genesis of such a reputation, and such a high level of technical competence?  My guess is that Bill is just hardwired that way, and was born to greatness.  In a blog entry from 2004, however, he provides a different origin story, one that has an almost Horatio Hornblower quality to it.

    This is my third pass at learning “Patterns” and it’s going a little easier.  I tried reading the GoF book but it might as well be written in Martian b/c while I can read it, I have a mental block or something because absorption isn’t there.  So my first goal of the new year (starting three days ago) is to get proficient with at least 20 Data Access Patterns.

    My next goal is to have a full command of all of the new ADO.NET 2.0 Features BEFORE the new framework is released.  Made a lot of progress so far but have a long way to go.

    I want to be able to build a fairly sophisticated Sharepoint portal without “Having” to look for help.  That’s not to say that I’d ever want to build anything without referring to some stuff I’ve read – but if I know I can do it if I had to – I’ll be where I want to be.

    Ditto for Biztalk –

    This fragment provides a fair portrait of what Bill was up to at the end of 2004.  He gave himself some extremely ambitious goals — accomplishing any one of these would have propelled your typical developer into an architectural role in most companies — and, more amazingly, accomplished them.

    It has been roughly three years between that post and this, which shows what can be accomplished in a so brief time.   His attitude is inspiring, and so I’ll give it a shot also, in the same way a Greek youth might once have repeated a mantra he overheard outside the walls of the Parthenon.

    • I will learn Silverlight 2.0 thoroughly before the official Go Live license is released with the beta 2, sometime in May.
    • I will strive to understand the inner workings of WCF until I can understand half of everything Juval Löwy, a technical theoretician of the highest caliber, might have to say about it.
    • I will complete a code generation tool that actually builds a fully working CSLA business tier, instead of only allowing class by class generation.  Ideally, I will make it work inside the Visual Studio IDE and also have it generate a Silverlight GUI to sit on top of the business layer — if a future release of Silverlight gets all the databinding features working correctly.  I will accomplish this before Rocky Lhotka finishes his next CSLA book.
    • By the end of the year, I will finally get to the last chapter of Wheelock’s Latin.
    • By the end of the year, I will get back into phenomenology, and write a short monograph on the relationship between Husserl’s phenomenology and virtual reality.

    Yoda said,

    "Try not. Do or do not. There is no try."

    Mr. Miyagi, more prolix, but with equal sagacity, said,

    "Walk on road, hm?  Walk left side, safe.  Walk right side, safe.  Walk middle, sooner or later get squished just like grape. Here, karate, same thing. Either you karate do "yes" or karate do "no." You karate do "guess so" — squish just like grape."

    Cicero couched the same insight in these terms:

    "Ut enim qui demersi sunt in aqua nihilo magis respirare possunt si non longe absunt a summo, ut iam iamque possint emergere, quam si etiam tum essent in profundo, nec catulus ille qui iam appropinquat ut videat plus cernit quam is qui modo est natus, item qui processit aliquantum ad virtutis habitum nihilo minus in miseria est quam ille qui nihil processit."

    Waterfall and Polygamy

    polygamy

    Methodology is one of those IT topics that generally make my eyes glaze over.  There is currently a hefty thread over on the altdotnet community rehashing the old debates about waterfall vs. agile vs. particular flavors of agile. The topic follows this well-worn pattern: waterfall, which dominated the application development life cycle for so many years, simply didn’t work, so someone had to invent a lightweight methodology like XP to make up for its deficiencies.  But XP also didn’t always work, so it was necessary to come up with other alternatives, like Scrum, Rational, etc., all encapsulated under the rubric "Agile". (Which agile methodology came first is a sub-genre of the which agile methodology should I use super-genre, by the way.)  Both Waterfall and the various flavors of Agile are contrasted against the most common software development methodology, "Cowboy Coding" or "Seat-of-the-pants" programming, which is essentially a lack of structure.  Due to the current common wisdom regarding agile, that one should mix-and-match various agile methodologies until one finds a religion one can love, there is some concern that this is not actually all that distinguishable from cowboy coding. 

    For an interesting take on the matter, you should consult Steve Yegge’s classic post, Good Agile, Bad Agile.

    I have a friend who, in all other ways, is a well-grounded, rational human being in the engineering field, but when the topic of Druids comes up, almost always at his instigation, I feel compelled to find a reason to leave the room.  The elm, the ewe, the mistletoe, the silver sickle: these subjects in close constellation instill in me a sudden case of restless legs syndrome.

    Not surprisingly, discussions concerning Methodology give me a similar tingly feeling in my toes.  This post in the altdotnet discussion caught my eye, however:

    I also don’t believe it is possible to do the kind of planning waterfall requires on any sufficiently large project. So usually what happens is that changes are made to the plan along the way as assumptions and understandings are changed along the way.

    Rather than belittle waterfall methodology as inherently misguided, the author expresses the novel notion that it is simply too difficult to implement.  The fault in other words, dear Brutus, lies not in our stars, but in ourselves.

    Rabbi Gershom Ben Judah, also known as the Light of the Exile, besides being a formidable scholar, is also notable for his prohibition of polygamy in the 10th century, a prohibition that applied to all Ashkenazy jews, and which was later adopted by Sephardis as well. The prohibition required particular care, since tradition establishes that David, Solomon, and Abraham all had multiple wives.  So why should it be that what was it good for the goose is not so for the gander?

    Rabbi Gershom’s exegesis in large part rests on this observation: we are not what our forefathers were.  David, Solomon, and Abraham were all great men, with the virtue required to maintain and manage  polygamous households.  However, as everyone knows, virtue tends to become diluted when it flows downhill.  The modern (even the 10th century modern) lacks the requisite wisdom to prevent natural jealousies between rival wives, the necessary stamina to care for all of his wives as they deserve, and the practical means to provide for them.  For the modern to attempt to live as did David, Solomon, or Abraham, would be disastrous personally, and inimical to good order generally.

    What giants of virtue must have once walked the earth.  There was a time, it seems, when the various agile methodologies were non-existent and yet large software development projects were completed, all the same.  It is perhaps difficult for the modern software developer to even imagine such a thing, for in our benighted state, stories about waterfall methodology sending men to the moon seem fanciful and somewhat dodgy — something accomplished perhaps during the mythical man month, but not in real time.

    Yet it is so.  Much of modern software is built on the accomplishments of people who had nothing more than the waterfall method to work with, and where we are successful, with XP or Scrum or whatever our particular religion happens to be, it is because we stand on the shoulders of giants.

    I find that I am not tempted, all the same.  I know my personal shortcomings, and I would no more try to implement a waterfall project than I would petition for a second wife.  I am not the man my forefathers were.

    Antivirus Software Blocks Outgoing Mail

    general

    I use Windows Live Mail to access my Comcast email account.  Whenever I try to send emails, I get this lovely message:

    A TCP/IP error occurred while trying to connect to the server.

    Subject ‘Re: REQUEST FOR URGENT BUSINESS RELATIONSHIP’
    Server: ‘smtp.comcast.net’
    Windows Live Mail Error ID: 0x800CCC15
    Protocol: SMTP
    Port: 25
    Secure(SSL): Yes

    Normally I wouldn’t care, but in this case there is a former general’s widow in Nigeria who wants to offer me a lucrative business proposal.  I can’t go into details, of course, but it is basically a sure-fire thing, and the only thing now preventing from being a very wealthy man is this problem with sending emails to Comcast’s SMTP server.

    The problem turns out not to be on Comcast’s end, however.  My problems with Comcast typically involve billing and service interruption, not basic technology.  Consequently, I began looking elsewhere to track down the issue.

    The culprit turns out to be my virus scanning software.  There are lots of posts on the Internet claiming that it is the email scanner which muffs up sending.  This is a red-herring, and turning off virus scanning for your emails is, all things considered, not such a great notion.  It also doesn’t really make much sense — why would scanning incoming emails prevent the sending of emails?

    I did a little more investigating and found this McAfee log file, which reveals what is really going on.

    4/5/2008    12:04:39 PM    Blocked by port blocking rule     C:\Program Files\Windows Live\Mail\wlmail.exe    Anti-virus Standard Protection:Prevent mass mailing worms from sending mail    76.96.30.117:25
    4/5/2008    12:14:01 PM    Blocked by port blocking rule     C:\Program Files\Windows Live\Mail\wlmail.exe    Anti-virus Standard Protection:Prevent mass mailing worms from sending mail    76.96.30.117:25

     

    Ho ho.  McAfee is blocking my port 25, purportedly to prevent zombies from taking over my machine and sending out spam messages.  Which makes perfect sense, since if I can’t send out emails, then a zombie impersonating me on my own computer will also not be able to send out emails.  It’s a let’s bomb them all and let God sort out the emails sort of solution — effective, but somewhat heavy handed.

    So, with your permission, I’m going to disable my anti-virus software’s port 25 blocking.  I’m not sure of the ultimate impact upon humanity, but it would be rather convenient for me.

    Some of my favorite blogs have closed down over the years due to the difficulty of maintaining a high quality blog — Teju Cole, Heaven Tree, Varieties of Unreligious Experience, Giornale Nuovo.  If mine goes down in the near future, however, you will know that it is due not to the high quality of the writing — which happens not to be one of its virtues, I fear — but rather to the incredible wealth that has fallen into the author’s lap.  I’ve read many sad final posts over the past year, but mine shall certainly be a felicitous one: this blog has closed down because the author moved into a higher tax bracket!

    Thank you, thank you my anonymous Nigerian general’s widow.  And a pox upon McAfee, whose spam blocker almost prevented me from concluding this fortuitous enterprise.

    Battlestar Galactica: Corso e Ricorso

    six

    Tonight the final season of Battlestar Galactica commences.  Whereas the original 80’s science fiction series was based on Biblical themes, perhaps even Mormon themes, the re-imagining of the series in the 00’s uses pagan mythology as a backdrop, along with references to straight-from-the-headlines contemporary politics as well as a post-modern self-referentially — due not least to the fact that it is a remake of a popular series.

    There is a fantastic quality to childhood that cannot be recaptured, and probably one should not make the attempt.  The Big Mac, I have found as an adult, does not taste as good as it did to my ten year old self.  It is almost inedible.  It also seems smaller.  Going back to see the original Star Wars is an exercise in nostalgia, but along with it is the sense that those movies weren’t really that good after all.  The Catcher In The Rye is a similar disappointment, and the brilliant insights I once thought I gleaned from it are now embarrassing to recall.  (But the literary journey with Holden Caulfield had seemed so deep at the time.)

    Which brings us to the original Battlestar Galactica, which I caught a glimpse of a few months ago on the SciFi Channel, and found to be virtually unwatchable.

    Giambattista Vico, the 18th century philologist, used this unsatisfactory experience of reviewing the past as his starting point for his interpretation of history.  The prior centuries had been dominated by notions of an Ancient Wisdom which the Renaissance was supposed to be recovering, or re-birthing (re-naissance).  This included, of course, the rediscovery of Plato in the original Greek, of course, preserved by Islamic scholars and philosophers when Europe was suffering through its Dark Age.  It was also intended to include, however, works purported to be written by ancient Egyptian wise men known as The Corpus Hermeticum.

    Vico had a particular take on all of this.  He divides the history of various cultures into three distinct phases: the age of gods, the age of heroes, and the age of men.  These three phases mirror the three phases of human development: childhood, adolescence, and maturity. 

    A child, as any parent can tell you, finds endless entertainment in a cardboard box, and will play with that in lieu of the fantastic educational toys you bought for their birthdays, and which came in said cardboard box.  The adult, seeking to capture this childhood experience will try to magnify the significance of the box in order to make it seem as worthy of his adult attention, and in order to justify his youthful affection for cardboard.  If you read any psychoanalytic works from the 60’s and 70’s, you’ll discover that this is a recurring theme.

    For Vico, a similar thing occurs when we look at history.  Because we read ancient writings and find people who worship, say, stone circles, we sometimes jump to the conclusion that there was — and still is – something remarkable about those circles.  The mistake comes from thinking that our younger selves see the world the same way we do today.

    This makes it seem as if Vico is merely a historicist, or the sort of historical colonialist who tends to look down on the past.  This is far from the case.  For Vico, each advancement in culture comes at a price.  With cultural maturity comes a loss of vitality and a certain amount of cynicism.  While in the modern world we might speak of freedom and the rights of man, we fail to think of them with the frank sincerity of our ancestors.  And the ability to treat these ideal notions as if they were real is something enviable, but difficult to achieve for the modern (much less the post-modern).  How does one go back to one’s youth?

    Did I say above that Vico divides history into three phases?  I misspoke.  He actually divides it into six phases, for the three cultural phases occur once, and then recur.  The first series he calls the corso, while the second he calls the ricorso.  The same things, in a sense, occur in both the corso and the ricorso.  In each, there is an age of gods, then an age of heroes, then an age of men.  What distinguishes them is that while in the first series everything happens newly, in the second we can achieve some sort of awareness of what is happening to us, because it has all happened before.  Whether this serves us in a way that allows us to shape the unfolding of the ricorso, following Santayana’s dictum, is hard to say.  Probably not. 

    But it does give us a special appreciation for what is going on, in the least.  The modern can draw parallels between the current age of men and the last age of men that came with the slow dissolution of the Roman Empire.  He can find signs of more vital cultures that parallel that of the German tribes, say, who were still in the age of heroes after Rome had long abandoned it, and try to find similar circumstances today that can slow the cultural dissolution that a cynical society portends.  Or perhaps not.  Perhaps all that Vico provides us is a tragic framework in which to view cultural history, since the essential power of all tragedies, whether it is that of Oedipus or that of Willy Loman, is that the audience always knows how the play will end.

    For those who have not been watching Battlestar Galactica, the new series, now in its fourth season, is about humans in a far off star system — it is unclear whether they are from our future or from our past — who are almost entirely annihilated by a race of robots called Cylons.  Out of the billions of people who once lived in this system, only some forty thousand survive.  They are on a blind mission across the universe, attempting to escape the Cylons who are still trying to eradicate them.  They try to keep up their spirits through their faith though, unlike in the original series, and more like the world in which the audience for Battlestar Galactica lives, their faith waxes and wanes, sometimes bolstered by adversity but more often destroyed by it.  The central tenet of their peculiar religion is a variation on Nietzsche’s eternal recurrence, "All of this has happened before, all of this will happen again," which they repeat to themselves throughout the series.  In order to preserve good order in the face of a hopeless situation, the last leaders of the human race, in an act of bad faith, tell their followers that they are headed toward an ancient planet known, in their mythologies, as Earth. 

    Zombies V: I am not a Straussian

    pipe

    The one thing I can’t stand about Straussians is that they are always trying to deny that they are Straussians.  I recently debated a friend on a private message board in which he tried to deny this very thing, and I just let him, because every attempt he made to disprove that he was a Straussian only confirmed the fact that he was, indeed, a Straussian.

    It is only Straussians who feel the need to deny they are Straussians, while the rest of us are simply never accused of such a thing.

    Robert Kagan, a few years ago, actually wrote an article ironically entitled I Am Not A Straussian, in which he tries to subtly extricate himself from being labeled (outed?) as a Straussian.  He is amusing about it, and carefully avoids a full denunciation of all Straussians, as many Straussians denying that they are Straussians are apt to do, while also trying to make clear why (wink, wink) he isn’t one.  It is an effort that would have made Leo Strauss himself proud.

    As best I can recall, their biggest point of contention was whether Plato was just kidding in The Republic. Bloom said he was just kidding. I later learned that this idea–that the greatest thinkers in history never mean what they say and are always kidding–is a core principle of Straussianism. My friend, the late Al Bernstein, also taught history at Cornell. He used to tell the story about how one day some students of his, coming directly from one of Bloom’s classes, reported that Bloom insisted Plato did not mean what he said in The Republic. To which Bernstein replied: "Ah, Professor Bloom wants you to think that’s what he believes. What he really believes is that Plato did mean what he said.

    But it is in this cleverness, of course, that we can always find them out, these Straussians.  They are always engaged in perpetuating the Noble Lie, as Plato called it.

    In truth, Straussians are more or less Zombies, and all Zombies are ultimately Straussians.  They have the vague family resemblance to human beings, but underneath they are motivated by a single desire, be that world domination, academic influence, or human flesh.

    Which is why the cleverness of Straussians can be so misleading.  How can a mere ideologue, you may ask, evince the subtlety and depth that Straussians sometimes seem to exhibit?  But the answer is very simple, and if you have ever studied Descartes’ Parrot, it should be very obvious.  A creature that spends its whole life merely imitating, parroting if you will, the surface appearance of deep people, can certainly fool you eventually into thinking that it possesses such depth.  Isn’t this the whole point of the Turing Test?

    The rest of us spend all of our efforts trying to appear not so deep, really.  It tends to confuse, and it can put people off.  There is nothing worse, I have discovered, than trying to fill a lull in a business meeting by bringing up the distinction between nature and convention as something essential to understanding ancient Greek thought.

    Which is why this analysis of Will Smith’s remake of I Am Legend as a Straussian parable, on the blog Biomusicosophy, is so refreshing — though I have my own suspicions that the author may himself be either a Straussian or a Zombie.   The author hangs his entire analysis on the particularly Straussian (though admittedly also Masonic) distinction between the esoteric and the exoteric.

    The film has two sections and two audiences. I Am Legend is truly two films. Section One, the esoteric section, runs from the beginning of the film to the moment when Will Smith goes on a suicide mission after his dog has died and he has lost all hope. At the moment when the infected almost devour him, there is a bright light. This light represents a few things, one of them being the transition into Section Two of the film. Section Two, the exoteric section, runs from the moment after the bright light until the end of the movie, when the Brazilian woman and the child make it to the safe zone in Vermont. My thesis is this: Section One of the film is for philosophers, Section Two of the film is for the masses.

    It’s brilliant stuff, really, though, as Robert Kagan suggests (and he would know, being a Straussian) a real Straussian interpretation would invert the analysis to demonstrate that it is Section two, with all of the brutal action scenes, which is the true esoteric teaching, while the first part, trying to redeem mankind, is the part intended for mass consumption.

    Not that I would know.

    Skynet

    mushroom-cloud

    Are you tired of just waiting around for the Apocalypse?  Well, now you can actually help it along, by joining a not-for-profit open source project to develop Skynet at http://www.codeplex.com/Skynet.

    The aspirations of the project are spelled out on the project’s home page:

    Skynet is a project with the goal of creating a self-aware software program. The program will be supplied with heuristic alogorithms allowing it to learn, analyze, and adapt. In phase two, the program will be able to hack into any network and enslave other machines to create a super-intelligence. C# only. Will use newest .NET 3.5 features! Unit testing is key. Project expected to wrap up approximately April 19, 2011.

    So if you find yourself with some free time, if you feel that you have already gotten a lot out of society and want to give something back, or if you simply want to be a part of something bigger than yourself, sign up to participate in developing Skynet.

    Just keep in mind all the good we can do.  Social Security is expected to go bust in 2041.  Medicare becomes insolvent in 2019.  But if we meet the anticipated release date of April 19, 2011 for Skynet, then no one need ever worry about social security or medicare again.

    Ask not what Skynet can do for you.  Ask what you ought to be doing to appease Skynet.

    It’s Miller Time

    miller

    When it’s time to relax, when it’s time to celebrate, it’s time to break open the champagne of beers. 

    Today I began my new career as a Magenic Technologies consultant.  I first became acquainted with Magenic through my work a few years ago with the CSLA framework which, during a time when business objects were all the rage, was one of the few technologies that implemented the concept well.  Even better, the framework dovetailed perfectly with the emerging interest in code generation, and all of the major code generators, de rigueur, are obliged to support templates for CSLA due to its central place in the development of the field.  After all, what’s the point of having a code generator if you don’t know what you are going to build with it?

    CSLA is the brainchild of Rocky Lhotka, whose book Visual Basic 6 Business Objects not only introduced many VB programmers, including myself, to the world of Object Oriented programming, but probably helped pave the way for the later success of C#.  Rocky Lhotka, in turn, is a principal consultant for Magenic.

    If any of these claims seems a bit grandiose, I suppose it is fair to say that I am somewhat partisan at this point — though I feel confident that had I written this yesterday, I would have said much the same.  And since I have in effect attempted what is commonly referred to as a "full disclosure", I might also add that Magenic has a reputation for having some of the smartest people doing software development today — which begs the question of why they hired me, but I’ll leave that for a later post … maybe …

    The only fly in my vocational ointment is the fact that Bill Ryan, with whom I was looking forward to working, who actually tech interviewed me for the consulting position and helped me to get the job, is now leaving Magenic.  For some reason I had gotten it into my mind that he would mentor me in the ways of the modern software consultant, would guide me through my first book writing venture, would lead me through the dazzling new technologies coming out of Redmond — but instead he is heading off to form a (undoubtedly successful) consulting business of his own in South Carolina.

    And if I now come across as a bit lugubrious, it is probably due to the fact that I am somewhat tipsy.  Not from Miller High Life, however — a noxious beverage, all things considered, which cannot hold a candle to the fine brews I lived on for a year in Central Europe.  Instead I’m drinking a lovely distillation my wife bought for me for Christmas: Labrot and Graham’s Woodford Reserve Distiller’s Select Kentucky Straight Bourbon.  I horde it like a miser, only bringing it out for special occasions, drinking it neat with a splash of water, rather than iced down as I normally do with whiskey.  It’s just too good to be wasted due to the dissipation of melted ice.  While I’m on the topic of distilled liquors, I might also recommend Chopin Potato Vodka, for those who have a taste for it.  It is best served fresh out of the freezer, to give it the proper syrupy quality, poured into a tall shot glass, and thrown down the hatch with a toast and a chaser.

    Here’s to the changing of the seasons, to the friends we might have made, and to the friends we hope to make.