<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>Interoperability Happens</title>
  <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/" />
  <link rel="self" href="http://blogs.tedneward.com/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2009-07-01T02:02:01.3466854-07:00</updated>
  <author>
    <name>Ted Neward</name>
  </author>
  <subtitle>Ted Neward's Technical Weblog</subtitle>
  <id>http://blogs.tedneward.com/</id>
  <generator uri="http://www.dasblog.net" version="1.9.7067.0">DasBlog</generator>
  <entry>
    <title>Review: &amp;quot;Iron Python in Action&amp;quot; by Michael Foord and Christian Muirhead</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2009/07/01/Review+QuotIron+Python+In+Actionquot+By+Michael+Foord+And+Christian+Muirhead.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,eb632e02-f7de-43ce-a9fe-8c857b0b2554.aspx</id>
    <published>2009-07-01T02:00:14.2685604-07:00</published>
    <updated>2009-07-01T02:02:01.3466854-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="C#" label="C#" scheme="http://blogs.tedneward.com/CategoryView,category,C%23.aspx" />
    <category term="Languages" label="Languages" scheme="http://blogs.tedneward.com/CategoryView,category,Languages.aspx" />
    <category term="Python" label="Python" scheme="http://blogs.tedneward.com/CategoryView,category,Python.aspx" />
    <category term="Reading" label="Reading" scheme="http://blogs.tedneward.com/CategoryView,category,Reading.aspx" />
    <category term="Review" label="Review" scheme="http://blogs.tedneward.com/CategoryView,category,Review.aspx" />
    <category term="Visual Basic" label="Visual Basic" scheme="http://blogs.tedneward.com/CategoryView,category,Visual%2BBasic.aspx" />
    <category term="WCF" label="WCF" scheme="http://blogs.tedneward.com/CategoryView,category,WCF.aspx" />
    <category term="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <category term="XML Services" label="XML Services" scheme="http://blogs.tedneward.com/CategoryView,category,XML%2BServices.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
OK, OK, I admit it. Maybe significant whitespace isn't all bad. (But don't let me
ever catch you quoting me say that.)
</p>
        <p>
The reason for my (maybe) shift in thinking? Manning Publications sent me a copy of <em>Iron
Python in Action</em>, and I have to say, I like the book and its approach. Getting
me to like Python as a primary language for development will probably take more than
just one book can give, but... *shrug* Who knows?
</p>
        <p>
Bear in mind, I have plenty of reasons to like IronPython (Microsoft's Python implementation
for the .NET environment):
</p>
        <ul>
          <li>
A good friend of mine, Harry Pierson (aka @DevHawk), is the PM on the IPy project,
and I'm generally prejudiced in favor of those things that people I know and respect.</li>
          <li>
I'm generally a fan of dynamic languages, particularly those that let you do strange
and twisted things to the type system and its instances at runtime. (Yes, I'm looking
at you, ECMAScript...)</li>
          <li>
I spent some quality time with IronPython Studio last year while researching a Visual
Studio Extensibility "Deep Dive" paper.</li>
          <li>
I've known Jim Hugunin (the creator of IronPython, and Jython before that) for some
years, ever since his days working on AspectJ, and he's one of those scary-smart guys
that, despite knowing they're scary-smart, still render me stunned when I listen to
them.</li>
          <li>
I'm a huge fan of the DLR. It's like having Parrot, but without having to wait a decade
(give or take).</li>
        </ul>
        <p>
But, just to counterbalance the scales, I have plenty of good reasons to dislike IronPython,
too:
</p>
        <ul>
          <li>
Significant whitespace.</li>
          <li>
The "There's only one way to do it" oath that Pythonistas seem to hold as
religion. (Somebody told me that building C-Python—the original implementation—only
works for you if you swear a holy oath to The One True Way on the One True Way Bible.
Needless to say, I believe them, and have never tried to build C-Python from sources
as a result.)</li>
          <li>
Significant whitespace.</li>
          <li>
Uh.... did I mention significant whitespace yet?</li>
        </ul>
        <p>
I admit, it was with some hesitation that I cracked open the book. Actually, to be
honest, I was really ready to just take out all my dislike of significant whitespace
and pour it into a heated, vitriolic diatribe on everything that was just <em>wrong</em> with
Python.
</p>
        <p>
And...?
</p>
        <p>
Well, OK, I admit it. Maybe significant whitespace isn't all bad.
</p>
        <p>
But this is a review of the book, not the technology. So, on we go.
</p>
        <h3>What I liked about the book
</h3>
        <ul>
          <li>
The focus is on both .NET and Python, and doesn't try to short-change either the "Python"-ness
or the ".NET'-ness by trying to be a "Python book (that happens to run on
.NET)" or a ".NET book (that happens to use Python for code samples)".
The authors, I think, did a very good job of balancing the two, making this <em>the</em> book
to get if you're in that area on the Venn diagram where "Python" overlaps
with ".NET".</li>
          <li>
Part 2, <em>"Core development techniques"</em>, starts down the "feed
you the Python Kool-Ade" pretty quickly, heading straight into Chapter 4 ("<em>Writing
an application and design patterns with IronPython"</em>) without much of a pause
for breath. The authors get into duck typing, protocols, and Model-View-Controller
within the first four pages, and begin working on a running example to highlight some
of the ideas. (Interestingly enough, they also take a few moments to point out that
IronPython on Mono works, and include a couple of screen shots to that effect as we
go, though I personally wonder just how many people are really going down this path.)
I like the no-holds-barred, show-you-the-code style, but only because they also take
time throughout the prose to talk about some of the concepts at work underneath and
laced throughout the code. "Show me then tell me" is a time-honored tradition,
but too many authors forget the "tell me" part and stop with code. These
guys do a good job of following through.</li>
          <li>
The chapters in Part 3, "<em>IronPython and advanced .NET</em>", form an
interesting collection of how IronPython can fit into the rest of the .NET stack,
demonstrating how to use IronPython with WPF, ASP.NET, and IronPython's crowning glory,
Silverlight. If you're into front-end stuff, this is the section where I think you're
going to have the most fun.</li>
          <li>
The chapters in Part 4, "<em>Reaching out with IronPython</em>", is I think
the most important part of the book, showing how to extend IronPython (chapter 14)
with C#/VB extensions (similar to how a C-Python developer would extend Python by
writing C code, but much much simpler) and the opposite—how to embed IronPython inside
of existing C#/VB applications (chapter 15), which is really an exercise in using
the DLR Hosting APIs. While the discussion in chapter 15 is good, I wish it'd had
a bit more thorough discussion of how the DLR could be hosted regardless of the scripting
language, though I admit that's pretty beyond the scope of this book (which is focused,
after all, entirely on IronPython, and as a result <em>should</em> stay focused on
how to host IPy).</li>
        </ul>
        <h3>
          <strong>What I found "Meh" about the book</strong>
        </h3>
        <ul>
          <li>
Part 1 (<em>"A new language for .NET"</em>, <em>"Introduction to Python"</em>,
and <em>".NET objects and IronPythong"</em>) does a good job of bringing
the rank beginner up to speed, getting some basic Python ideas across in the same
breath that they bring .NET home. The only problem is, it only works well if you're
neither a Python programmer nor a .NET programmer. Chapter 1, for example, does a
sort of Cannonball-into-the-pool kind of dive into Python, but dives equally into
the "Iron" parts as it does the "Python" parts. If you're either
a Pythonista or a .NETter, I suspect you're going to be tempted to flip pages pretty
quickly, and (I suspect) miss a few things. Chapter 2 is all about Python (meaning
.NETters will probably spend some time here), but it certainly doesn't feel like an
exhaustive reference, nor does Chapter 3 stand as an exhaustive discussion about all
things .NET, either. I almost wish all three chapters had been collapsed into one—suffice
it to say, I don't feel like I know the Python language, and don't feel like this
book could be my Python reference next to me as I learn it, and I know that it's not
a great .NET reference, either. Fortunately, the goal of these three chapters feels
pretty clearly to be "Teach you just enough to make you dangerous (and able to
understand the rest of the book)", and once we hit Part 2, rubber meets road
pretty quickly.</li>
          <li>
By the time you hit Chapter 7, less than halfway through the book, the authors have
created a fairly nice, if simplistic, application for later dissection, but it's not
until you hit Chapter 7 that they begin to start unit-testing, even though they insist
(on page 17) that "Dynamic language programmers are often proponents of <em>strong
testing rather than strong typing</em>" (a quote they attribute to Bruce Eckel,
though I'm relatively certain I heard Dave Thomas and Neal Ford say it with respect
to Ruby, long before Eckel started "Thinking in Python... or Flex... or whatever").
If unit-testing is that important, why wait three chapters into the application's
development before writing a single unit-test? This doesn't jibe with me, somehow.</li>
          <li>
If you're into back-end stuff, chapter 12 on <em>"Databases and web services"</em> is
pretty bland. The fact that the two are combined into a single chapter is indicative,
all by itself, of how deep or intensive the coverage goes, and there's zero mention
of anything beyond basic ADO.NET. The coverage on web services covers REST relatively
well, but there's zero coverage of WCF, and the whole of SOAP-based services is all
of four or five pages. And Workflow? Doesn't exist, isn't even mentioned (except for
an appearance in a table, "The major new APIs of .NET 3.0"). Yikes.</li>
        </ul>
        <h3>
          <strong>What I actively disliked about the book</strong>
        </h3>
        <p>
Actually, not much. Manning did their usual superb job of arrowed callouts to point
out particular concepts in the code listings, the copyediting is professional (meaning
there's no obvious typos or misspellings that just break up the flow of prose, something
that not all publishers seem to take seriously), and the graphics flow nicely alongside
the prose, not dominating the page but accentuating it.
</p>
        <p>
In fact, about the only thing I'd care to criticize is the <em>huge</em> number of
footnotes, particularly in the first chapter. (By page 20 in the book, there have
already been 30 footnotes.) When you have three footnotes <em>per page</em>, on average
(and sometimes more), it does tend to distract, at least to me it does. It feels like
there were ways, for most of them, to inject the idea or concept into the main prose,
or leave it out entirely, but that could just be a difference of writing style, too.
</p>
        <h3>
          <strong>Summation</strong>
        </h3>
        <p>
If you're a .NET developer interested in learning/using IronPython on your next project,
this is a definite winner. If you're a Python developer looking to see how to break
into .NET, I'm not so sure this is your book, but I say that mostly because I'm <em>not</em> a
Pythonista and can't really speak to how that mindset will find this as an introduction
to the .NET space. My intuition tells me that this would be a good springboard into
another book on .NET for the Python programmer, but I'll have to leave that to Pythonistas
who've read this book to comment one way or another.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=eb632e02-f7de-43ce-a9fe-8c857b0b2554" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>Review: &amp;quot;Programming Clojure&amp;quot;, by Stu Halloway</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2009/06/28/Review+QuotProgramming+Clojurequot+By+Stu+Halloway.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,bfd09520-fc73-4358-9a87-14f433f40095.aspx</id>
    <published>2009-06-27T22:34:56.3740909-07:00</published>
    <updated>2009-06-27T22:34:56.3740909-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="C#" label="C#" scheme="http://blogs.tedneward.com/CategoryView,category,C%23.aspx" />
    <category term="C++" label="C++" scheme="http://blogs.tedneward.com/CategoryView,category,C%2b%2b.aspx" />
    <category term="F#" label="F#" scheme="http://blogs.tedneward.com/CategoryView,category,F%23.aspx" />
    <category term="Java/J2EE" label="Java/J2EE" scheme="http://blogs.tedneward.com/CategoryView,category,Java%2fJ2EE.aspx" />
    <category term="Languages" label="Languages" scheme="http://blogs.tedneward.com/CategoryView,category,Languages.aspx" />
    <category term="Reading" label="Reading" scheme="http://blogs.tedneward.com/CategoryView,category,Reading.aspx" />
    <category term="Review" label="Review" scheme="http://blogs.tedneward.com/CategoryView,category,Review.aspx" />
    <category term="Ruby" label="Ruby" scheme="http://blogs.tedneward.com/CategoryView,category,Ruby.aspx" />
    <category term="Scala" label="Scala" scheme="http://blogs.tedneward.com/CategoryView,category,Scala.aspx" />
    <category term="Visual Basic" label="Visual Basic" scheme="http://blogs.tedneward.com/CategoryView,category,Visual%2BBasic.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <blockquote>
          <p>
            <em>
              <strong>(Disclaimer:</strong> In the spirit of full disclosure, Stu is a friend,
fellow NFJS speaker, and former co-worker of mine from DevelopMentor.)</em>
          </p>
        </blockquote>
        <p>
I present this review to you in two parts.
</p>
        <p>
          <strong>Short version:</strong> If you want to learn Clojure, and you're familiar
with at least one programming language, you'll find this a great resource. If you
don't already know a programming language, or if you already know Clojure, or if you're
looking for "best practices" to cut-and-paste, you're going to be disappointed.
</p>
        <p>
          <strong>Long version:</strong> Recently, fellow NFJS speaker Stu Halloway decided
to take up a new language, and came to Clojure. He found the language interesting
enough to write a book on it, something he hasn't done since his Java days, and the
result is a nice walk through the language and its environment for experienced Java
developers who want to understand Clojure's language, concurrency concepts, and programming
model.
</p>
        <p>
Now, let's be 100% honest about this: if you're coming at this book expecting it to
be a language reference, you will probably be disappointed (as <a href="http://www.amazon.com/review/R3NM9CKFWYFKAE/ref=cm_cr_rdp_perm" target="_blank">this
guy</a> obviously is). Stu's not like that—he's not going to re-create material that's
available elsewhere, or that can be found with an easy Google search. Stu will not
waste your time that way—he wants to tell you a story, one that takes you from "I'm
a Java guy, but clueless about Lisp, dynamic languages, functional programming, concurrency,
or macros" to "Wow. I know kung-fu." in the shortest path possible,
but without trying to lobotomize you. He wants—no, <em>expects</em>—the readers of
his book to be propping the text open with a cell phone on one side and the dinner
plate on the other, craning your neck over to scan the pages and type in the examples
into the REPL shell to try them out, see them work, then spend a few minutes experimenting
with them before moving on to the next paragraph or page. 
</p>
        <p>
(Oh, I suppose you could just cut and paste them from the PDF version of the book,
but where's the fun in that?)
</p>
        <p>
The fact is, the <em>concepts</em> behind Clojure make up what's important to learn
here, and readers of this book will come away like the panda from the movie, realizing
that "There is no Secret Ingredient", that the power of Clojure comes not
from its super-secret language sauce or special libraries, but in the way Clojure
programmers approach problems and think about programming. And for that reason, if
you're a programmer—even if you don't program on the JVM—you really want to take a
look at what Stu's talking about (and Rich Hickey is creating).
</p>
        <p>
Just remember, cellphone and dinner plate. Otherwise you'll be missing out on so much.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=bfd09520-fc73-4358-9a87-14f433f40095" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>Interview with Scott Bellware and Scott Hanselman on the Death of the Professional Speaker</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2009/06/18/Interview+With+Scott+Bellware+And+Scott+Hanselman+On+The+Death+Of+The+Professional+Speaker.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,be86b355-6dfb-4395-bfa9-d09783f21428.aspx</id>
    <published>2009-06-18T06:40:28.1760997-07:00</published>
    <updated>2009-06-18T06:40:28.1760997-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="C#" label="C#" scheme="http://blogs.tedneward.com/CategoryView,category,C%23.aspx" />
    <category term="C++" label="C++" scheme="http://blogs.tedneward.com/CategoryView,category,C%2b%2b.aspx" />
    <category term="Conferences" label="Conferences" scheme="http://blogs.tedneward.com/CategoryView,category,Conferences.aspx" />
    <category term="F#" label="F#" scheme="http://blogs.tedneward.com/CategoryView,category,F%23.aspx" />
    <category term="Flash" label="Flash" scheme="http://blogs.tedneward.com/CategoryView,category,Flash.aspx" />
    <category term="Industry" label="Industry" scheme="http://blogs.tedneward.com/CategoryView,category,Industry.aspx" />
    <category term="Java/J2EE" label="Java/J2EE" scheme="http://blogs.tedneward.com/CategoryView,category,Java%2fJ2EE.aspx" />
    <category term="Languages" label="Languages" scheme="http://blogs.tedneward.com/CategoryView,category,Languages.aspx" />
    <category term="Parrot" label="Parrot" scheme="http://blogs.tedneward.com/CategoryView,category,Parrot.aspx" />
    <category term="Ruby" label="Ruby" scheme="http://blogs.tedneward.com/CategoryView,category,Ruby.aspx" />
    <category term="Scala" label="Scala" scheme="http://blogs.tedneward.com/CategoryView,category,Scala.aspx" />
    <category term="Social" label="Social" scheme="http://blogs.tedneward.com/CategoryView,category,Social.aspx" />
    <category term="Visual Basic" label="Visual Basic" scheme="http://blogs.tedneward.com/CategoryView,category,Visual%2BBasic.aspx" />
    <category term="VMWare" label="VMWare" scheme="http://blogs.tedneward.com/CategoryView,category,VMWare.aspx" />
    <category term="WCF" label="WCF" scheme="http://blogs.tedneward.com/CategoryView,category,WCF.aspx" />
    <category term="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <category term="XML Services" label="XML Services" scheme="http://blogs.tedneward.com/CategoryView,category,XML%2BServices.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Well, OK, the title is trolling ever so slightly, but there is an interesting trend
at work, and I'm genuinely concerned about its ultimate expression if the trend continues
to its logical conclusion. <a href="http://channel9.msdn.com/posts/Glucose/Hanselminutes-on-9-The-Death-of-the-Professional-Conference-Speaker/" target="_blank">Have
a look</a> and tell me if you agree or disagree.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=be86b355-6dfb-4395-bfa9-d09783f21428" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>The &amp;quot;controversy&amp;quot; continues</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2009/06/14/The+Quotcontroversyquot+Continues.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,49e7a9d3-c222-45d7-a049-29b5a4b25cd3.aspx</id>
    <published>2009-06-14T15:17:44.1286409-07:00</published>
    <updated>2009-06-14T15:17:44.1286409-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="C#" label="C#" scheme="http://blogs.tedneward.com/CategoryView,category,C%23.aspx" />
    <category term="C++" label="C++" scheme="http://blogs.tedneward.com/CategoryView,category,C%2b%2b.aspx" />
    <category term="Conferences" label="Conferences" scheme="http://blogs.tedneward.com/CategoryView,category,Conferences.aspx" />
    <category term="F#" label="F#" scheme="http://blogs.tedneward.com/CategoryView,category,F%23.aspx" />
    <category term="Flash" label="Flash" scheme="http://blogs.tedneward.com/CategoryView,category,Flash.aspx" />
    <category term="Industry" label="Industry" scheme="http://blogs.tedneward.com/CategoryView,category,Industry.aspx" />
    <category term="Java/J2EE" label="Java/J2EE" scheme="http://blogs.tedneward.com/CategoryView,category,Java%2fJ2EE.aspx" />
    <category term="Languages" label="Languages" scheme="http://blogs.tedneward.com/CategoryView,category,Languages.aspx" />
    <category term="Mac OS" label="Mac OS" scheme="http://blogs.tedneward.com/CategoryView,category,Mac%2BOS.aspx" />
    <category term="Review" label="Review" scheme="http://blogs.tedneward.com/CategoryView,category,Review.aspx" />
    <category term="Ruby" label="Ruby" scheme="http://blogs.tedneward.com/CategoryView,category,Ruby.aspx" />
    <category term="Scala" label="Scala" scheme="http://blogs.tedneward.com/CategoryView,category,Scala.aspx" />
    <category term="Social" label="Social" scheme="http://blogs.tedneward.com/CategoryView,category,Social.aspx" />
    <category term="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Apparently the Rails community isn't the only one pursuing that ephemeral goal of
"edginess"—another blatantly sexist presentation came off without a hitch,
this time at a Flash conference, and if anything, it was worse than the Rails/CouchDB
presentation. I excerpt a few choice tidbits <a href="http://www.geekgirlsguide.com/blog/2009/06/11/98/prude_or_professional_by_courtney_remes" target="_blank">from
an eyewitness</a> here, but be warned—if you're not comfortable with language, skip
the next block paragraph.
</p>
        <blockquote>
          <p>
Yesterday's afternoon keynote is this guy named <a href="http://flashbelt.com/#/speakers/hoss_gifford/">Hoss
Gifford</a> — I believe his major claim to fame is that viral "spank the monkey"
thing that went around a few years back.  Highlights of his talk:
</p>
          <ul>
            <li>
He opens his keynote with one of those <a href="http://www.ignitempls.org/">"Ignite"-esque
presentations</a> — where you have 5-minutes and 20 slides to tell a story — and the
first and last are a close-up of a woman's lower half, her legs spread (wearing stilettos,
of course) and her shaved vagina visible through some see-thru panties that say "drink
me," with Hoss's Photoshopped, upward-looking face placed below it. 
</li>
            <li>
He later demos a drawing tool he has created (admittedly with someone else's code)
and invites a woman to come up to try it.  After she sits back down, he points
out that in her doodles she's drawn a "cock." 
</li>
            <li>
Then he decides he wants to give a try at using the tool to draw a "cock"
(he loves this word) — and draws a face, then a giant dick (he redraws it three times)
that ultimately cums all over the face. 
</li>
            <li>
A multitude of references to penises and lots of swearing — and also "If you
are easily offended, fuck you!" 
</li>
            <li>
And then, to top it off, a self-made flash movie of an animated woman's face, positioned
as if she's having sex with you, who gradually orgasms based on the speed of your
mouse movement on the page. 
</li>
          </ul>
        </blockquote>
        <p>
Wow. Just... wow. To call this unprofessional smacks of calling Hitler a "socially
awkward individual"... or using a euphemism like "mild medical condition"
to refer to death. This is so far "over the line" that it's unbelievable.
Even Mr. Aimonetti's "CouchDB" presentation, as bad as it was, at least
tried to tie the analogy together in a meaningful, if offensive, way. This is just
male posturing at its worst. (I'm shocked Hoss didn't whip off his pants and demand
the women in the room bow down in worship to his obviously superior manhood.) 
</p>
        <p>
Fortunately, according to the source, the conference organizer seems to be pretty
responsive, so kudos to the one adult in the room, but....
</p>
        <p>
What's worse, apparently the presenter and more than a few of his pals are (in the
best traditions of assholery) blatantly unrepentant about the whole thing, claiming
the moral high ground in much the same way that the Rails idiots did—it's all in good
fun, if you don't find it funny you're a prude, and so on:
</p>
        <blockquote>
          <p>
I checked Twitter (hashtag <a href="http://search.twitter.com/search?q=%23flashbelt">#flashbelt</a>)
to see what the responses were.  Here are some notable remarks:
</p>
          <ul>
            <li>
              <a href="http://twitter.com/Fonx/status/2096740346">Fonx</a> is reading the #flashbelt
rants on Hoss offending the ladies w/ a few swear words &amp; a penis drawing - r
u really that prudish &amp; sexist? 
</li>
            <li>
nthitz lol @hoss69 "If you are easily offended, fuck you" #flashbelt 
</li>
            <li>
              <a href="http://twitter.com/livenootrac/status/2096075802">livenootrac</a> Ladies
of #flashbelt , I am sorry for the Hoss preso, but in the flash community he gets
a pass, kinda like Don Rickles - that's just Hoss. 
</li>
            <li>
              <a href="http://twitter.com/CujoJpn/status/2096658483">CujoJpn</a> @livenootrac And
there were many ladies at #flashbelt who were offended by Hoss' Preso some were thick
skinned and took it as is. 
</li>
          </ul>
          <p>
So, if you didn't like it then 
<br />
a) you are a prude - and sexist (?) 
<br />
b) fuck you 
<br />
c) suck it because Hoss gets a pass here in the boy's club known as "the flash
community" and 
<br />
d) you are a wimpy girl who isn't strong enough / man enough / "thick-skinned"
enough  to deal with it.
</p>
        </blockquote>
        <p>
Even more... wow. Talk about justification and marginalization. Amazing.
</p>
        <p>
Before I figuratively smack this Hoss guy around the blog for a while, let's take
a brief moment for reflection—what's going on here? Why all the misogynistic presentations
recently? Is this reflective of a general trend in the programming industry? Of society
in general? Is the world coming to an end?
</p>
        <p>
A few possibilities present themselves:
</p>
        <ul>
          <li>
            <strong>The lack of women in the IT industry means there's nobody around to act as
a "gender filter" to keep things on an even keel.</strong> In other words,
the genders constantly filter themselves based on the company they keep, and because
the boys who put these presentations together don't have female input, they simply
don't know where to draw the line for mixed company. This theory also presumes that
an industry that's made up primarily of women will also lack such a filter and "girls
will be girls" as a result. Unfortunately I have no good counterexamples at hand
to examine—anybody know of an industry populated primarily by women, and can weigh
in with experience there? The closest I get is my brief experience working in a restaurant
with an almost-all-woman serving staff, and from that brief experience, yep, the theory
holds. Solution? Easy: get more women in IT, and things will re-balance themselves
naturally.</li>
          <li>
            <strong>Programmers are principally males who have no redeeming social skills.</strong> In
other words, the industry gathers up exactly the kind of men who find objectifying
women and reveling in late-acquired testosterone overdoses to be gratifying, and this
kind of behavior is the result. If true, it leads to the conclusion that programmers
are no more evolved than the Navy sailors involved in the Tailhook scandal of a few
years ago. So go ahead, smack your wives and girlfriends around a little if they get
a little "uppity", it's OK, 'cuz u r a l33t d00d. Personally? I find the
idea ludicrous—there is definitely a strong antisocial streak that runs through the
IT ecosystem (how many of you met your friends via World of Warcraft again?), but
like all stereotypes, there's some elements of truth to it, and a lot of exaggeration.
And frankly, anybody who believes in this theory is welcome to come with me to dinner
at a No Fluff Just Stuff show and meet the other speakers, and listen in on our "boys
club" conversations, including questions like, "Which movie best represents
the book it was made after?" and "If given a mandate to create a programming
language, what language would your language most resemble?". Oh, and the odd
fart joke. We are boys, after all.</li>
          <li>
            <strong>We're hypersensitive to the subject right now.</strong> In other words, these
kind of presentations have always been going on, and it's just that we notice them
now, in the same way that you notice a particular brand of car on the road a lot more
when you're thinking about buying that brand and model of car. Frankly, I don't buy
this argument—I've been to a lot of presentations over the past decade, and I've never
seen any that were anything like this.</li>
          <li>
            <strong>This is the YouTube generation, with access to everything the Internet has
to offer, and this is "just how they do things".</strong> After all, how
much maturity, sexual discretion and adult behavior can we expect of the generation
that gave us "Girls Gone Wild" and its ilk? It's just a "generation
gap" thing, and we old fogies who didn't grow up with Internet porn just a browser-click
away just don't "get it". Hmm.... somehow, I just don't buy it. Sure, there
may be some elements of this involved here (I'm <em>really</em> curious to see what
all these "Girls Gone Wild" girls are going to say to their own daughters
in a decade or so...), but I think that's too easy an answer, and an eminently unhelpful
one.</li>
          <li>
            <strong>We have copycatters out there trying to follow the path of people they respect.</strong> If
you're looking up at this Hoss character and thinking, "I want to be just like
him!", you really should see a therapist and develop a sense of self, before
you find yourself without friends. Hoss gets a pass because of your misguided fan-boi
hero-worship. So does Paris Hilton. You want to be the Paris Hilton of your social
circle? Go for it. After all, she's highly respected and loved, right? Take a clue
from the next car wreck you drive past—everybody's slowing to look not because they
wish they were in the body bag, folks, but because we have a ghoulish fascination
with it. In the case of Ms. Hilton, that ghoulish fascination is with those who self-destruct
in spectacular fashion. (Me, I'd <em>love</em> to be the fly on the wall at the Hoss
residence when he tries to explain this whole thing to his daughter or his date/girlfriend/wife,
if he ever finds one.)</li>
          <li>
            <strong>The presenters taking this tack are looking for an easy path to fame.</strong> In
the grand traditions of Andrew Dice Clay ("Oh!"), the easiest way for a
presenter to "stand out" from the rest of the crowd of presenters is to
do something outrageous and call it "edgy", and stake out a claim on the
edge of the civilization, rather than try to integrate with the rest of the crowd
and build something up slowly. Don Box has already claimed "HTTP is dead",
I made the analogy between a technology and a military conflict, and Matt Aimonetti
claimed a data storage framework "performs like a pr0n star", so what's
left but to stake out ground even further out on the fringe and just be misogynistic?
Fortunately, history suggests that people with content-free/shock-heavy presentations
(or even content-heavy/shock-heavy ones) don't go the distance, so to speak, and that
once there's nowhere more shocking left to go, the audience comes back to the content-heavy/shock-light
discussions and stays there for a while. Unfortunately, this means we're going to
have to suffer through somebody's "Live YouPorn filming" talk first, which
I'm <em>not</em> looking forward to.</li>
        </ul>
        <p>
And now for the smacking around... but you know, I suddenly realize that the volume
of comments on the original post leave with nothing to do or say that's not already
being said, so to just "pile on" would only serve to let me vent, and I
have other outlets for that. But it would be inappropriate to just "walk away",
so to speak, so with that in mind....
</p>
        <p>
Hoss, you're an idiot. Like any sprinter, you're going to head up the pack for a bit,
but soon enough, your "shtick" is going to flame out and you'll be left
behind with all the other "shock jocks" of the 80's who found their material
unwelcome after a while. So enjoy the spotlight (such as it is) while you can. In
the meantime, I'm off to revise a few presentations, and stick with solid ideas and
analogies, and maybe dropping the odd F-bomb when I want to make a point, just for
emphasis, because I know something you apparently don't:
</p>
        <p>
Shock makes a point because of the <em>contrast</em> to the rest of the talk, not
because of its inherent "edginess".
</p>
        <p>
Meanwhile, by all means, continue to be an idiot. You just make me look better by
comparison, for which I thank you.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=49e7a9d3-c222-45d7-a049-29b5a4b25cd3" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>A eulogy: DevelopMentor, RIP</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2009/06/01/A+Eulogy+DevelopMentor+RIP.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,dd85708f-48d8-47dc-a9c6-cc4a1287ad31.aspx</id>
    <published>2009-05-31T23:32:07.9686008-07:00</published>
    <updated>2009-06-02T01:25:20.4841608-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="C#" label="C#" scheme="http://blogs.tedneward.com/CategoryView,category,C%23.aspx" />
    <category term="C++" label="C++" scheme="http://blogs.tedneward.com/CategoryView,category,C%2b%2b.aspx" />
    <category term="Conferences" label="Conferences" scheme="http://blogs.tedneward.com/CategoryView,category,Conferences.aspx" />
    <category term="F#" label="F#" scheme="http://blogs.tedneward.com/CategoryView,category,F%23.aspx" />
    <category term="Flash" label="Flash" scheme="http://blogs.tedneward.com/CategoryView,category,Flash.aspx" />
    <category term="Industry" label="Industry" scheme="http://blogs.tedneward.com/CategoryView,category,Industry.aspx" />
    <category term="Java/J2EE" label="Java/J2EE" scheme="http://blogs.tedneward.com/CategoryView,category,Java%2fJ2EE.aspx" />
    <category term="Languages" label="Languages" scheme="http://blogs.tedneward.com/CategoryView,category,Languages.aspx" />
    <category term="Reading" label="Reading" scheme="http://blogs.tedneward.com/CategoryView,category,Reading.aspx" />
    <category term="Scala" label="Scala" scheme="http://blogs.tedneward.com/CategoryView,category,Scala.aspx" />
    <category term="Security" label="Security" scheme="http://blogs.tedneward.com/CategoryView,category,Security.aspx" />
    <category term="Visual Basic" label="Visual Basic" scheme="http://blogs.tedneward.com/CategoryView,category,Visual%2BBasic.aspx" />
    <category term="WCF" label="WCF" scheme="http://blogs.tedneward.com/CategoryView,category,WCF.aspx" />
    <category term="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <category term="XML Services" label="XML Services" scheme="http://blogs.tedneward.com/CategoryView,category,XML%2BServices.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <blockquote>
          <p>
            <strong>Update:</strong> See below, but I wanted to include the text Mike Abercrombie
(DM's owner) posted as a comment to this post, in the body of the blog post itself. <em>"Ted
- All of us at DevelopMentor greatly appreciate your admiration. We're also grateful
for your contributions to DevelopMentor when you were part of our staff. However,
all of us that work here, especially our technical staff that write and delivery our
courses today, would appreciate it if you would check your sources before writing
our eulogy. DevelopMentor is open for business and delivering courses this week and
we intend to remain doing so."</em> Duly noted, Mike. Apology offered (and hopefully
accepted).
</p>
        </blockquote>
        <p>
An email crossed my desk today, announcing that DevelopMentor, home to so many good
people and fond memories, has (at least temporarily) closed its doors.
</p>
        <p>
I admit to a small, carefully-cushioned place in my heart where I mourn over this.
</p>
        <p>
DevelopMentor was such a transcendent place for me. Much, if not most or all, of the
acceleration that came in my career came not only while I was there, but <em>because</em> I
was there.
</p>
        <p>
          <em>So</em> much of my speaking persona and skill I owe to Ron Sumida, who took a
half-baked neophyte of intermediate speaking skill, and in an eight-hour marathon
session still referred to in my mental memoirs as my "Night with Scary Ron",
shaped me and taught me tricks about speaking that I continue to use to this day.
That I got to know him as a friend and confidant later still to this day ranks as
one of my greatest blessings.
</p>
        <p>
I remember my first DM Instructor Retreat, where I met so many of the names I'd read
about or heard about, and feeling "Oh, my God" fanboy-ish. I remember Tim
Ewald giving a talk on transactions at that retreat that left me agape—I seriously
didn't understand half of what he was saying, and rather than feeling overwhelmed
or ashamed, I remember distinctly thinking, "Wow—I have found a home where I
can learn SO much more." It was like waking up one morning to find that your
writing workshop group suddenly included Neal Stephenson, Stephen Pinker, C.S. Lewis
and Ernest Hemingway. (Yes, I know those last two are dead. Work with me here.)
</p>
        <p>
I remember the day that Lorie (the ops manager at the time) called me to say that
Don Box wanted me to work with him on the C# course. I was convinced that she'd called
the wrong Ted, meaning instead to reach for Ted Pattison in her Rolodex and coming
up a few letters shy. She tartly informed me, "No, I know exactly who I'm talking
to, and are you interested or not?" How could I refuse? Help the Diety of COM
write DM's flagship course on Microsoft's flagship technology for the next decade?
"Hmm...", I say out loud, not because I needed time to think about it, but
because a thread in the back of my head says, "Is there <em>any</em> scenario
here where I say no?"
</p>
        <p>
I still fondly recall doing a Guerilla .NET at the Torrance Hilton shortly after the
.NET 1.0 release, and having a conversation with Don in my hotel room later that night;
that was when he told me "Microsoft is working on an open-source version of the
CLR". I was stunned—I had no idea that said version would factor pretty largely
in my life later. But it opened my eyes, in a very practical way, to how deeply-connected
DevelopMentor was to Microsoft, and how that could play out in a direct fashion.
</p>
        <p>
When Peter Drayton joined, he asked me to do a quick review pass on the reference
section of his <em>C# in a Nutshell</em>, and I agreed because Peter was a good guy
(and somebody I'd hoped would become a friend), and wanted to see the book do well.
That went from informal review to formal review to "well, could you maybe make
it an editing pass?" to "Would you like to write a few chapters?" to
"Well, let's sign you up as a co-author...". That project is what introduced
me to John Osborn, which in turn led him to call me one day and say, "Some guys
at Microsoft are working on an open-source version of the CLR, and would like to have
a 'professional writer' help them write a book on it. Interested?" That led to <em>SSCLI
Internals</em>, working with David Stutz, and wow, did I learn a helluvalot from <em>that</em> project,
too.
</p>
        <p>
          <em>Effective Enterprise Java</em> came through DevelopMentor, thanks again to Don
Box, who introduced me to the folks at Addison-Wesley that put the contract (and Scott
Meyers, another blessing) in front of me.
</p>
        <p>
DM got me my start in the conference circuit, as well. In 2002, John Lam pinged me
over email—he'd recently become track chair for Connections down in Orlando, and was
I interested in speaking there? I was such a newbie to the whole idea, but having
taught classes roughly twice every month, I wasn't worried about the speaking part,
but the rest of the process. John walked me through the process, and in doing so,
set me down a path that would almost completely redefine my career within a year or
so.
</p>
        <p>
Even my Java chops got built up—the head of our Java curriculum was Stu Halloway (recently
of Clojure fame), and between him, Kevin Jones, Si Horrell, Brian Maso and Owen Tallman,
man, did I feel simultaneously like a small child among giants and like a kid in a
candy store. Every time I turned around, they'd discovered something new about the
Java platform that floored me. Bob Beauchemin has forgotten more about databases in
general than I will ever learn, and he had some insights on the intersection of Java
+ databases that still hang with me today.
</p>
        <p>
And my start with No Fluff Just Stuff came through DevelopMentor, too. Jason Whittington
heard through a mutual friend (Erik Hatcher, of Ant fame) about this cool little conference
being held in Denver, and maybe I should look into it. That led to an email intro
to Jay Zimmerman, a dinner together while I was teaching in Denver a few weeks later,
and before I knew it, I was on the Denver NFJS schedule, including the speaker panel,
where I uttered the then-infamous line, "Swing sucks. Get over it."
</p>
        <p>
DevelopMentor, you shaped my career—and my life—in so many ways, you will always be
a source of pleasant memories and a group of friends and acquaintances that I would
never have had otherwise. Thank you <em>so</em> much.
</p>
        <p>
Rest in peace.
</p>
        <p>
          <strong>Update:</strong> Well, as it turns out, I have to rescind at least part of
my eulogy, as the post itself generated quite a stir—the folks at DevelopMentor were
pretty quick to email me, pointing out that they're still alive and well. In fact,
as one of them (a friend of mine still working there) put it, "We were all kinda
surprised when we came to work this morning and discovered that we could go home."
Fortunately, the DevelopMentor folks were pretty gracious about what could've been
a <em>very</em> ugly situation, and I apologize for to them for the misunderstanding—all
I can say is that my "source" must've also been mistaken, and I'm glad that
we're all still good. And lest it need to be said out loud, I <em>heartily</em> want
nothing but the best for DM, and hope that I never have to write this message again.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=dd85708f-48d8-47dc-a9c6-cc4a1287ad31" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>SSCLI 2.0 Internals</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2009/05/27/SSCLI+20+Internals.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,50d89561-e424-4164-bbb5-31453121a0c0.aspx</id>
    <published>2009-05-26T18:42:49.5387758-07:00</published>
    <updated>2009-05-26T18:43:06.8356508-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="C#" label="C#" scheme="http://blogs.tedneward.com/CategoryView,category,C%23.aspx" />
    <category term="C++" label="C++" scheme="http://blogs.tedneward.com/CategoryView,category,C%2b%2b.aspx" />
    <category term="F#" label="F#" scheme="http://blogs.tedneward.com/CategoryView,category,F%23.aspx" />
    <category term="Languages" label="Languages" scheme="http://blogs.tedneward.com/CategoryView,category,Languages.aspx" />
    <category term="Reading" label="Reading" scheme="http://blogs.tedneward.com/CategoryView,category,Reading.aspx" />
    <category term="Visual Basic" label="Visual Basic" scheme="http://blogs.tedneward.com/CategoryView,category,Visual%2BBasic.aspx" />
    <category term="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://callvirt.net/blog" target="_blank">Joel's weblog</a> appears to be
down, so in response to some emails I've posted my draft copy of <em>SSCLI 2.0 Internals</em><a href="http://www.tedneward.com/files/SSCLI2Internals-DRAFT.pdf" target="_blank">here</a>.
I think it's the same PDF that Joel had on his weblog, but I haven't made absolutely
certain of the fact. :-/
</p>
        <p>
If you've not checked out the first version of SSCLI Internals, it's cool—the second
edition is basically everything that the first edition is, plus a new chapter on Generics
(and how they changed the internals of the CLR to reflect generics all the way through
the system), so you're good. And if you're not sure where to get the codebase for
Rotor 2.0 (the SSCLI), well, <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=8C09FD61-3F26-4555-AE17-3121B4F51D4D&amp;displaylang=en" target="_blank">here</a>,
I'll make it easy for you. ;-)
</p>
        <p>
Gotta say, this is almost without question my favorite book to have written. Just
wish Microsoft would've kept Rotor up with the successive CLR releases (3.5 SP 1 and
now the forthcoming 4.0). Maybe, if I can find that wishing ring....
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=50d89561-e424-4164-bbb5-31453121a0c0" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>He was Aaron Erickson... Now he's Aaron Erickson, ThoughtWorker</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2009/05/24/He+Was+Aaron+Erickson+Now+Hes+Aaron+Erickson+ThoughtWorker.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,a2f6f427-643e-4c21-b204-16a839caaa8e.aspx</id>
    <published>2009-05-23T19:05:09.9284058-07:00</published>
    <updated>2009-05-23T19:05:09.9284058-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="C++" label="C++" scheme="http://blogs.tedneward.com/CategoryView,category,C%2b%2b.aspx" />
    <category term="Conferences" label="Conferences" scheme="http://blogs.tedneward.com/CategoryView,category,Conferences.aspx" />
    <category term="F#" label="F#" scheme="http://blogs.tedneward.com/CategoryView,category,F%23.aspx" />
    <category term="Languages" label="Languages" scheme="http://blogs.tedneward.com/CategoryView,category,Languages.aspx" />
    <category term="Visual Basic" label="Visual Basic" scheme="http://blogs.tedneward.com/CategoryView,category,Visual%2BBasic.aspx" />
    <category term="WCF" label="WCF" scheme="http://blogs.tedneward.com/CategoryView,category,WCF.aspx" />
    <category term="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <category term="XML Services" label="XML Services" scheme="http://blogs.tedneward.com/CategoryView,category,XML%2BServices.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Yep, you heard that right—Aaron Erickson, author of <em>The Nomadic Developer</em>,
is now a ThoughtWorker.
</p>
        <p>
For those of who you don't know Aaron, he's been a consultant at another consulting
company for a while, and has been exploring a number of different topics in the .NET
space for a few years now, not least of which is one of my favorites (F#) and one
of THoughtWorks' favorites (agile). He's been speaking at a number of events, including
the Connections conferences, and he's going to bring some serious market-development
potential to our Chicago office, something that's obviously of concern right now in
these current economic conditions.
</p>
        <p>
He also cooks a mean bacon-wrapped scallop, but that's another story for another day.
</p>
        <p>
I'm looking forward to having him be a part of the growing collection of .NET rock
stars at ThoughtWorks. Wanna come join us? Always room for a few more....
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=a2f6f427-643e-4c21-b204-16a839caaa8e" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>Of Tomcat 6, native services, Windows 2008R2, and pain...</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2009/05/24/Of+Tomcat+6+Native+Services+Windows+2008R2+And+Pain.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,5ef56688-04d8-4a3b-97dc-340a31cada97.aspx</id>
    <published>2009-05-23T18:37:23.8659058-07:00</published>
    <updated>2009-05-23T18:37:23.8659058-07:00</updated>
    <category term="C++" label="C++" scheme="http://blogs.tedneward.com/CategoryView,category,C%2b%2b.aspx" />
    <category term="Java/J2EE" label="Java/J2EE" scheme="http://blogs.tedneward.com/CategoryView,category,Java%2fJ2EE.aspx" />
    <category term="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
So I'm putting together a Windows 2008 R2 x64 RC Java image for a client (more on
that later), and everything's breezing along fine. Install the OS, check. Install
JDK 1.6 (u13) into the machine, check. Install Tomcat 6 into the machine, running
as a native Windows service, check. Open localhost on port 8080, and... not check.
Times out, no response, not good.
</p>
        <p>
Naturally, the first thing to check is the logs, and I get the <em>strangest</em> error
I've seen in a while. "Cannot create Java". This is odd—what's happening,
in the aggregate, is easy enough to understand, in that the native Windows .exe launcher
(ProcRun, a generic service launcher from Apache) is using JNI to create the JVM inside
the launched service process and, for some reason, failing; what's not clear is why.
Unfortunately, the error codes offered up by the two players involved (Tomcat/ProcRun
and the Windows OS) are not helpful—the Windows Event Log basically says "Service
failed to start. Check the error code", which reports 0 (not helpful, thanks),
and the Tomcat "jakarta_service_<em>date</em>.log" file reports something
along the lines of...
</p>
        <div style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
          <pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">[2009-05-23 17:33:41] [1343 prunsrv.c] [debug] Procrun log initialized<br />
[2009-05-23 17:33:41] [info] Procrun (2.0.4.0) started<br />
[2009-05-23 17:33:41] [1166 prunsrv.c] [debug] Inside ServiceMain...<br />
[2009-05-23 17:33:41] [info] Starting service...<br />
[2009-05-23 17:33:41] [174 javajni.c] [error] The specified module could not be found.<br />
[2009-05-23 17:33:41] [994 prunsrv.c] [error] Failed creating java C:\Java\Tomcat6.0\jre64\bin\server\jvm.dll<br />
[2009-05-23 17:33:41] [1269 prunsrv.c] [error] ServiceStart returned 1<br />
[2009-05-23 17:33:41] [info] Procrun finished.<br /></pre>
          <br />
        </div>
        <p>
... which is not really all that helpful, either.
</p>
        <p>
Hmm.
</p>
        <p>
The fact that it can't create Java is not a really strong clue, so I start searching
the Web for some solutions. Several people report running into this same problem,
but solutions are not easily found—one web page reports that there's a missing "msvcr71.dll"
file from the Windows installer installation script, and that copying the file into
C:\WINDOWS\System32 fixes it, but when I go look in that directory, no dice—the DLL's
there, and a quick "DUMPBIN" on the file reveals it looks good, no accidental
file corruption or anything. Rats.
</p>
        <p>
Maybe the problem's somewhere in the service configuration—it's possible that the
Tomcat installer put the wrong configuration in or something. So I fire up the Tomcat
configuration (tomcat6w.exe) from the "bin" directory, and just to be sure,
I go hunting up the Service entry in the Registry (on the off-chance that the configuration
utility is the source of the bug). Granted, this is kind of a stretch, but unfortunately,
like I said, there's not much to go on. Sure enough, make a few changes (one of which
is to tell the Tomcat native launcher to use the "server" VM, instead of
the "client" VM, by default—why, oh why, hasn't Apache changed that yet?!?),
verify that the changes are percolating all the way through into the Registry, and
try kicking off the service. Still no luck. Still the same error.
</p>
        <p>
While I'm rooting around in the Registry, I notice that there's another node in there
that I'm not familiar with—the Wow6432Node. And buried underneath it (thank you, Registry
Search, for finding this!) is a node for Apache Software Foundation/ProcRun2.0/Tomcat6,
and a whole slew of configuration options under there, as well. Hmm. Errors in the
ProcRun configuration perhaps? Sure enough... no, everything's working fine.
</p>
        <p>
But now the synapses are firing in a different direction—the ProcRun bits are underneath
the "Wow6432Node", and the "Wow" part of that name has me wondering—in
the old 16-bit-to-32-bit transition Windows went through once before, "Wow"
was an acronym for "Windows-on-Windows", meaning that the 32-bit version
of Windows was opening up an emulation layer to run 16-bit programs. Given that this
is an x64 image that I'm working with... is it that the service wants to be using
the x64 version of Java rather than the 32-bit version I downloaded out of pure habit?
Hmm. Go grab the x64 image, install it, and... still no love.
</p>
        <p>
The WoW64 thing is still tickling at the back of my brain, though, and suddenly a
new synapse fires off. If this is a 64-bit version of Windows, then there has to be....
Yep, sure enough, underneath the C:\WINDOWS directory there are not two, but <em>three</em>,
"system" directories—the "C:\WINDOWS\System" directory that used
to be the hangout place for 16-bit DLLs, the "C:\WINDOWS\System32" directory
where 32-bit DLLs were encouraged to reside, and, just as pretty as you please, there
it is, a "C:\WINDOWS\SysWOW64" directory, and inside there... no "msvcr71.dll".
Copy the "msvcr71.dll" over from System32 into SysWOW64, and.... Voila.
Service starts, log file looks good, and "localhost:8080" comes back with
the Tomcat home page.
</p>
        <p>
What have we learned from this little experience? A couple of things, some personal,
some observational about the state of the universe and the industry:
</p>
        <ul>
          <li>
            <strong>Tomcat still installs itself to depend on a JRE found elsewhere on the system.</strong> This
isn't a problem, per se, but the Windows installer for Tomcat tries to discover the
JRE to use to run the Tomcat bits, and usually comes up with the "public"
JRE installed underneath C:\Windows\Java\... . Fact is, I would <em>really</em> prefer
if Tomcat made use of a private JRE (one inside the Tomcat directory) rather than
the "public" one—too many times an installer will take liberties with the
public JRE, and as a general rule, I really don't want installers messing around with
those settings or deployment picture (contents of jre/lib/ext, for example).</li>
          <li>
            <strong>I feel a little out-of-touch with x64 operating systems.</strong> Fact is,
I have gotten a bit rusty on my operating system operation with respect to the 64-bit
operating systems (Windows in particular), as highlighted by the fact that I really
don't know what, if any, differences there are between the 64-bit version of a native
executable and it's 32-bit cousin, or what the 32/64-bit transition story is. Anybody
got any good book recommendations on the 64-bit Windows story?</li>
          <li>
            <strong>I feel a little out-of-touch with the Java 64-bit story.</strong> Same thing—anybody
have a good overview of what's different between 32-bit and 64-bit Java on Windows,
and more importantly, why, even now, when I switch back and try to run the 64-bit
version of Java via the service, it fails (this time with a "not a valid Win32
image" error in the log file)? Is it worth it enough to try and diagnose/debug/develop
a solution to let Tomcat run with the 64-bit version of Java instead of the 32-bit
it's now using?</li>
          <li>
            <strong>The fact that this was harder to unearth via Google than usual bothers me
a bit.</strong> Google usually helps with troubleshooting a lot more than it did,
usually because commonly-hit errors and their fixes are reported all over the place,
in blogs and forums and so on. The fact that there was relatively few hits (with potential
solutions, anyway) makes me wonder: Are people not running Tomcat on Windows, not
running Tomcat as a service on Windows, not running Tomcat on 64-bit Windows, or just
not generally having problems? If you're running Tomcat on Windows, I'd love to hear
your story.</li>
          <li>
            <strong>Diagnosing Windows services is still a pain.</strong> I was a heartbeat away
from trying to debug the native parts of the Tomcat service, using either SysInternals'
Process Explorer or Visual Studio itself, and really wished there was some better
error-logging to indicate what the problem was so I didn't have to. Granted, from
my time writing Windows services way back when, I remember there not being a lot that
a service author can do to make that a more transparent experience, so I can't necessarily
fault the authors of ProcRun, since they're (probably) faithfully reporting the return
value of CreateProcess or LoadLibrary, but it's still frustrating and I think more
information (maybe the return value of GetLastError?) might have helped out here a
bit.</li>
        </ul>
        <p>
Meanwhile, my installations continue....
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=5ef56688-04d8-4a3b-97dc-340a31cada97" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>TechEd 2009 Thoughts</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2009/05/16/TechEd+2009+Thoughts.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,1b6d63c7-4c96-422d-b97d-3b644a9657d2.aspx</id>
    <published>2009-05-15T20:18:19.1589311-07:00</published>
    <updated>2009-05-15T20:18:19.1589311-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="C#" label="C#" scheme="http://blogs.tedneward.com/CategoryView,category,C%23.aspx" />
    <category term="Conferences" label="Conferences" scheme="http://blogs.tedneward.com/CategoryView,category,Conferences.aspx" />
    <category term="F#" label="F#" scheme="http://blogs.tedneward.com/CategoryView,category,F%23.aspx" />
    <category term="Languages" label="Languages" scheme="http://blogs.tedneward.com/CategoryView,category,Languages.aspx" />
    <category term="Review" label="Review" scheme="http://blogs.tedneward.com/CategoryView,category,Review.aspx" />
    <category term="Visual Basic" label="Visual Basic" scheme="http://blogs.tedneward.com/CategoryView,category,Visual%2BBasic.aspx" />
    <category term="WCF" label="WCF" scheme="http://blogs.tedneward.com/CategoryView,category,WCF.aspx" />
    <category term="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <category term="XML Services" label="XML Services" scheme="http://blogs.tedneward.com/CategoryView,category,XML%2BServices.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
These are the things I think as I wing my way out of LA fresh from this year's TechEd
2009 conference:
</p>
        <ul>
          <li>
            <strong>I think I owe the attendees at DTL309 ("Busy .NET Developer's Guide to
F#") an explanation.</strong> It's always embarrassing when your brain freezes
during a presentation, and that's precisely what happened during the F# talk—I completely
spaced on the syntax for implementing an interface on a class in F#. (To the attendees
who commented "consider preparing a bit better so you dont forget the sintax
:)" and "Not remembering the language syntax sorta comes across bad doesn't
it?", you're absolutely right, which prompts this next sentence.) I apologize <em>profusely</em> to
those who were there—I just blew it. For the record, the missing syntax looks like
this: 
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">#light<br /><br />
type IStudy =<br /><span style="color: #0000ff">abstract</span> Study: <span style="color: #0000ff">string</span> -&gt;
unit<br /><br />
type Person(firstName : <span style="color: #0000ff">string</span>, lastName : <span style="color: #0000ff">string</span>,
age : <span style="color: #0000ff">int</span>) =<br />
member p.FirstName = firstName<br />
member p.LastName = lastName<br />
member p.Age = age<br /><span style="color: #0000ff">override</span> p.ToString() = 
<br />
System.String.Format(<span style="color: #006080">"[Person: firstName={0}, lastName={1},
age={2}]"</span>,<br />
p.FirstName, p.LastName, p.Age);<br /><br />
type Student(firstName : <span style="color: #0000ff">string</span>, lastName : <span style="color: #0000ff">string</span>,
age : <span style="color: #0000ff">int</span>, subject : <span style="color: #0000ff">string</span>)
=<br />
inherit Person(firstName, lastName, age)<br /><span style="color: #0000ff">interface</span> IStudy with<br />
member s.Study(sub : <span style="color: #0000ff">string</span>) =<br />
System.Console.WriteLine(<span style="color: #006080">"Hey, Ma, I'm studying
{0}!"</span>, sub)<br />
member s.Subject = subject<br /><span style="color: #0000ff">override</span> s.ToString() =<br />
System.String.Format(<span style="color: #006080">"[Student: "</span> + <span style="color: #0000ff">base</span>.ToString()
+ <span style="color: #006080">" subject={0}]"</span>, s.Subject);<br /></pre><br /></div><a href="http://11011.net/software/vspaste"></a>Truth is, though, right now not a
lot of people (myself included) are writing types that formally implement a given
interface—the current common practice appears to be an object expression instead,
something along these lines: 
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">let monkey =<br />
{ <span style="color: #0000ff">new</span> IStudy with<br />
member p.Study(subject : <span style="color: #0000ff">string</span>) =<br />
System.Console.WriteLine(<span style="color: #006080">"Oook eeek aah aah {0}!"</span>,
subject) }<br />
monkey.Study(<span style="color: #006080">"Visual Basic"</span>)<br /></pre><br /></div>
In this way, the object handed back still implements the interface type that the client
wants to call through, but the defined type remains anonymous (and thus provides an
extra layer of encapsulation against implementation details leaking out). The most
frustrating part about that particular snafu? I had a Notepad window open with some
prepared code snippets waiting for me (a fully-defined Person type, a fully-defined
Student type inheriting from Person, and so on) if I needed to grab that code because
typing it out was taking too long. Why didn't I use it? I just forgot. Oy..... 
</li>
          <li>
            <strong>Clearly Microsoft is thinking big things about Azure.</strong> There were
a lot of sessions around Azure and cloud computing, far more than I'd honestly expected,
given how new (and unreleased) the Azure bits are. This is a subject I would have
expected to see covered this deeply at PDC, not TechEd.</li>
          <li>
            <strong>TechEd Speaker Idol is a definite win, to me.</strong> I watched the final
round of Speaker Idol on Thursday night (before catching the redeye out to Atlanta
for the NFJS show there this weekend), and quite honestly, I was blown away by the
quality of the presentations—they were all of them better than some of the TechEd
speakers I'd seen, and it was great to hear that not only will the winner, who did
a <em>great</em> presentation on legacy application support in Windows7 (and whose
name I didn't catch, sorry) be guaranteed a slot at TechEd, but I overheard that the
runner-up, a Polish security expert who demoed how to break Process Explorer (in front
of Mark Russinovich, no less!), will also be speaking at TechEd Berlin this year.</li>
          <li>
            <strong>As always, the parties at TechEd were where the real value lay.</strong> This
may seem like an odd statement to those whose heads are a bit full right now from
five days' worth of material (six, if you attended a pre-con), but remember that I'm
a speaker, so the sessions aren't always as useful as they are to people who've not
seen this content before (or have the kind of easy access to the people building it
and/or presenting it that I'm fortunate and privileged to have). Any future attendees
should take serious note, though: networking is a serious part of this business, and
if you're not going out to the parties (or creating a few of your own while you're
there) and handing out business cards left and right, you're missing a <em>valuable</em> opportunity.</li>
          <li>
            <strong>I'm looking forward to TechEd 2010.</strong> Particularly because, thanks
to a few technical snafus, I had the chance to sit down with the folks who organize
and run TechEd and vent for a little bit about everything I found annoying (as a speaker).
Not only were my comments <em>not</em> blown off, but it started a really productive
discussion about how to make the behind-the-scenes experience for the TechEd speakers
a more pleasant and streamlined one. What's more, we're planning to revisit some of
these discussions in the months to come as they start their preparations for TechEd
2010 (in New Orleans). I'm looking forward to those conversations and (hopefully)
helping them eliminate some of the awkwardness that I've seethed over in the past.</li>
        </ul>
        <p>
New Orleans in the summer will not be an entirely wonderful experience (I'm told it
gets monstrously humid there in the summers, but it can't be any worse than Orlando
is/was), but I'm honestly very curious to get back there to see what post-Katrina
New Orleans looks and feels like, and to maybe do my (very little) part to help the
area claw its way back by maybe staying an extra day or two and taking in some of
the sights. (I'm hoping that Sara Ford will be willing to act as tour guide.....)
</p>
        <p>
In the meantime, thanks to all of you who came, and remember—if you attended a talk
and you want to say "thanks" to the speaker who gave it, the best way is
to take the five minutes to fill out the evals for that talk. (Speaking personally,
I don't even care so much about the scores you give me, but the comments are absolutely
invaluable.)
</p>
        <p>
See y'all next year!
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=1b6d63c7-4c96-422d-b97d-3b644a9657d2" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>Windows 7 RC install experience</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2009/05/02/Windows+7+RC+Install+Experience.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,d00e5d72-dc03-4261-a551-7fdd688bcbd6.aspx</id>
    <published>2009-05-02T00:18:20.1909958-07:00</published>
    <updated>2009-05-02T00:18:20.1909958-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="C#" label="C#" scheme="http://blogs.tedneward.com/CategoryView,category,C%23.aspx" />
    <category term="F#" label="F#" scheme="http://blogs.tedneward.com/CategoryView,category,F%23.aspx" />
    <category term="Industry" label="Industry" scheme="http://blogs.tedneward.com/CategoryView,category,Industry.aspx" />
    <category term="Review" label="Review" scheme="http://blogs.tedneward.com/CategoryView,category,Review.aspx" />
    <category term="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Since a number of people have been connecting to my blog via my last post on installing
Windows 7 into a VMWare image, I thought since the Windows7 RC is now available, I'd
update my experiences with installing it.
</p>
        <p>
          <strong>I downloaded the Windows7 RC ISO image</strong> (a freakishly hideous name
containing every character on my US keyboard, plus a few in Klingon, I think.... if
you can stand it, the full name of the ISO is 7100.0.090421-1700_x86fre_client_en-us_Retail_Ultimate-GRC1CULFRER_EN_DVD)
from the Microsoft CONNECT website, not bothering with any of the other images (x64,
ia64, and a "server" image I've not explored yet), using Microsoft's File
Transfer Manager. (I know, I know, somebody's going to complain again about the ISOs
not being available via a straight HTTP download or Torrent, but this is just an RC
release, folks, and this is ostensibly to Microsoft-friendly customers who already
have the FTM utility installed.) Took about 3+ hours to download on my home connection...
or so it claimed. I went to bed after starting it last night. It was done when I woke
up. What more do you want from me?
</p>
        <p>
          <strong>I created a new VMWare image</strong>, as a "Windows Vista" VM with
1GB RAM, a 60GB IDE hard disk (by default Fusion wants to create a 40 GB SCSI disk,
but IDE seems to play nicer with the early betas of Microsoft OS'es, and I made it
all one file rather than Fusion's default "Split into 2GB files" option),
with the experimental 3D graphics turned on, battery status turned off, and (this
is HUGE) the "Allow your Mac to open applications in the virtual machine"
option turned OFF. Can't repeat this enough, for ANY VMWare VM containing Windows
inside of it, turn off that option—leaving it on sucks up HUGE amounts of CPU time.
(It's barely documented, and only determined Googling found that this was what was
rendering my VMWare Fusion 2 images all but unusable.)
</p>
        <p>
          <strong>I attached the ISO to the VMWare CD</strong> and turned the thing loose. It
takes a while, but so long as the ISO file and the VMWare VMDK disk file are on separate
drives, the perf isn't too bad—roughly twenty minutes later (or, as I measure things,
one randomly-generated map game of <a href="http://sillysoft.net/pax/">Pax Galaxia</a> later),
the image had installed all the core files on the VM disk, restarted itself, finished
the installation, and restarted itself again. (I have no idea why Win7 wants to reboot
itself twice during the install—if I remember the Vista installs correctly, it only
restarts once). As I write this, I'm starting at the "Setup is preparing your
computer for first use" screen with the funky Cylon-like flashing bar underneath
the text (I'm serious, it really looks like the graphic artists at Microsoft are paying
homage to BSG during that Setup screen). Whoops, I take it back—got through that screen
rather quickly, and now we're into the username/password/product key stage. Plug that
in, set the Update policy, the date and time, the network defaults (Public Location
for all my VMs, just because), and.... "Welcome".
</p>
        <p>
          <strong>There's no Step Four.</strong> Although, according to Windows Update, there's
already an update for Windows7 that should be downloaded and installed. *grin* Actually,
it seems like the driver it installed was for the VMWare virtual sound device, which
normally doesn't kick in until I install the VMWare Tools. It tells me that this is
an "Unsupported Creative Sound Device", however, so maybe it's an older
driver. *shrug* Not sure, don't care, because my next step is....
</p>
        <p>
          <strong>Install the VMWare Tools. </strong>I install VMWare Tools in the image, after
the Update is complete. (No restart was required, so why not?) Actually, let me rephrase
that—I <em>tried</em> to install the VMWare tools, but when I selected it from the
Fusion menu bar... nothing happened. Hmm. OK, let's do the restart and see what happens.
VM shuts down quickly enough (no having to wait for updates to finish, which was somewhat
annoying with Vista), and when I restart, it seems to restart quickly enough (again,
no obvious updates to be installed), so I get to a working desktop (640x480, how did
we <em>ever</em> think this was reasonable?!?), and try the Install VMWare Tools option
from the Fusion menubar again. It thinks for a bit, and the cursor flashes to the
"pointer-with-CD" icon for a second before flashing back, but after a few
seconds, the "What do you want to do?" (Autoplay) menu pops up as if I'd
slipped the CD into the drive, so all looks good. Go through the UAC "Continue/Cancel"
dialog (see below), choose "Complete" for the VMWare Tools install options,
and let 'er rip. Disks spin, lights flicker, and a "VMWare Shared Tools"
network folder shows up on the Win7 desktop, indicating that it's suddenly discovered
the Shared Folder (to my MacOS user account) is there. But now we're back to the Windows-display-exercise
program, which leads me to believe that it's the VMWare driver that's doing the exercise,
not Windows itself. (VMWare? Anybody listening and care to comment?)
</p>
        <p>
          <strong>And now I'm into Win7 desktop customization steps</strong>, things like display
sizing and desktop icon selection, background image, and all that other jazz that
you probably don't care about. (If you do, then I'm a bit worried about you—be an
individual! Choose your own settings!) All in all, pretty flawless and smooth.
</p>
        <p>
          <strong>Thoughts on the process</strong>:
</p>
        <ul>
          <li>
It feels like we're getting away from the "minimal install" process that
Vista tried to create. For a while, there was a meme that said that installing Windows
was too hard for the average person, and Microsoft promised to reduce the number of
steps it had to go through to install the OS. Take the date/time screen, for example:
it picked up the defaults from the underlying (virtual) hardware, why not just assume
those and skip that step? Users can always change it later.</li>
          <li>
I still have to set a Administrator password. I know that Microsoft is trying to find
that sweet-spot balance between "too secure" and "unsecure" for
desktop operating systems, but I have to hand it to the Ubuntu folks here—the "passwordless
root" idea that they use is pretty slick. MacOS uses it (for the most part) in
places, as well. I like the balance that approach achieves: it forces the user to
enter "superuser" mode to do something sensitive, but it isn't challenging
for a password (unless the superuser installs one) every time.</li>
          <li>
It's not going through display-screen calesthenics on each startup with this build.
My previous Win7 image, every time I restart the VM, goes through every possible video/monitor
size combination before settling in on the resolution I established in the last session.
That was a bit disconcerting, until I realized that it's Windows trying to get some
exercise in to be less overweight. *grin*</li>
          <li>
What, no PowerShell installed by default? Either it's not there, or it's buried pretty
deeply. Command Prompt (cmd.exe) is right where it's always been, under Accessories,
but no PowerShell.... Whoops, no, I take it back, it's in a <em>folder</em> underneath
Accessories, forcing one more click to get to it. Hey Microsoft: do me a favor and
pin that guy to the Start Menu. Make it easy for me to use, if you really want me
to believe that this is supposed to replace Command Prompt someday.</li>
          <li>
On that note, though, the PowerShell "ISE" (Interactive Scripting Environment)
is an interesting and new toy to play with.</li>
          <li>
"Pin to Taskbar" is an interesting option that I'm going to have to play
around with. Not being a huge MacOS Dock fan (which is pretty clearly the inspiration
for the new Taskbar), I'm not sure how well I'll like the new "it's the QuickLaunch
and the Taskbar combined" idea.</li>
        </ul>
        <p>
Overall, I'm looking forward to putting a few things into this image (VS 2008, VS
2010, Office, and so on) and seeing how it reacts. As always, your mileage may vary,
no implied warranties with this blog post, blah blah blah, but if you do anything
with the Windows OS, you really should get hold of the RC (build 7100) and put it
into a Virtual PC, VMWare, VirtualBox, Xen or some other virtualized box to play with.
Like it or not, it's entirely reasonable to believe that Windows7 is going to win
a few folks back from the Vista "less-than-I-expected" crowd.
</p>
        <p>
As always, <em>caveat emptor</em>, and feel free to comment....
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=d00e5d72-dc03-4261-a551-7fdd688bcbd6" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>On speaking, trolling, inciting and growing</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2009/05/01/On+Speaking+Trolling+Inciting+And+Growing.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,8da33b92-cb5f-466a-b2d1-a20f4355ed73.aspx</id>
    <published>2009-04-30T23:03:32.1872208-07:00</published>
    <updated>2009-04-30T23:04:32.8747208-07:00</updated>
    <category term="Conferences" label="Conferences" scheme="http://blogs.tedneward.com/CategoryView,category,Conferences.aspx" />
    <category term="Industry" label="Industry" scheme="http://blogs.tedneward.com/CategoryView,category,Industry.aspx" />
    <category term="Ruby" label="Ruby" scheme="http://blogs.tedneward.com/CategoryView,category,Ruby.aspx" />
    <category term="Social" label="Social" scheme="http://blogs.tedneward.com/CategoryView,category,Social.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
It's been going around in developer circles now for a few days, this whole controversy
about the "Perform like a pr0n star" <a href="http://www.slideshare.net/mattetti/couchdb-perform-like-a-pr0n-star">presentation</a> from
the <a href="http://gogaruco.com/">Golden Gate Ruby Conference</a> and the related
accusations of misogyny and sexism and overblown accusations and double-standardisms
and what-all else, and I've deliberately waited to let opinions in my head settle
out before blogging on the whole thing. <a href="http://girldeveloper.com/intar-social-commentary/c-mon-you-guys-we-can-do-better-than-this/">Sara
J Chipps reacts on her blog</a>, and the comments to her comments are also somewhat...
interesting... to note.
</p>
        <p>
Without any particular implied importance or order:
</p>
        <ul>
          <li>
            <strong>Matt Aimonetti, you are an idiot.</strong> You had to know that this was going
to generate more than a few strong reactions. I'll admit, it's a funny title, and
it definitely generated a ton of buzz around your name, but for the rest of your life,
you're going to be "the porno Rails guy", and in about a year or so, it's
not going to be funny anymore. You've touched off a firestorm, and you can't very
well hide from it, and frankly, I think the short-term boost to your public recognizance
is going to be more than outweighed by the long-term judgments that will be levied
against you. "Wait, <em>this</em> is the guy who did that talk? Wow. I bet he's
a good developer, but can I risk him pulling the same kind of stunt at a meeting with
our VP or clients? Nah, I'll go for this other guy...."</li>
          <li>
            <strong>Clearly we have a lot of issues to work out in the programming industry.</strong> I'm
not going to go into the rights or wrongs of putting those images into his talk. I'm
talking about the discussion that followed (one comment here says, "Matt Aimonetti
is obviously an antisocial twerp still living in his mothers basement at the age of
35 who has never even been able to muster up the courage to actually talk to a real-life
woman, let alone respect one.", and a follow-up comment says, "Great presentation,
nevermind the jackasses, keep up the good work!"), and the fact that at no point
in the time leading up to this presentation did anybody pull Mr. Aimonetti off to
one side and say, "Dude, it was funny when we thought of it, sure, but it's time
to stop." If ever we wanted to convince the rest of the world that the programming
industry wasn't populated by a bunch of 13-year-olds giggling over the fact that somebody
said, "Boobies".... well, maybe next year.</li>
          <li>
            <strong>Ruby community, you have a long way to go if you want to convince people to
spend money on you.</strong> Maybe you don't mind that corporations think that you
guys are clearly unstable and immature. If/when you want to gain some degree of corporate
acceptance, and maybe make it out of your parents' basement someday, you're going
to have to learn that how you handle yourself in public goes a long way towards establishing
peoples' attitudes towards you as professionals, and right now, you all collectively
look like a bunch of 13-year-olds, what between this and DHH's famous "FUCK YOU"
presentation of a few years ago. If you're OK with not being taken seriously, then
cool, more power to you. But personally, I like the idea of making money at things
I like to do and have fun doing, and you're not helping yourselves.</li>
          <li>
            <strong>Why are we such prudes?</strong> Whether you agree or not with the rightness
of the "porn" metaphor, you have to admit that there is factual basis in
the bones of this particular comment: "This is probably the least offensive thing
I've seen in 3 weeks." Glance at the billboards in the airport next time you're
walking to the gate. Glance at the racks of magazines in the grocery store as you
prepare to check out. Glance at the beer commercials on TV during prime-time. In every
case, sexy, young, attractive, scantily-clad men and women seek to create an instinctive
emotional reaction inside your head to subconsciously create a feel-good link between
whatever product is being hawked and your id. Honestly, the photos in the presentation
are hardly all that titillating—and a very long ways from the kind of commercials
you can see on TV in Europe—so why are we getting up in arms over this?</li>
          <li>
            <strong>Matt Aimonetti, you are an idiot.</strong> Notice how nobody's talking about
the actual subject of your presentation? A good presenter knows that the message should
never outstrip the delivery mechanism, just like a sauce should never overpower the
flavor of the dish it accompanies. For all that the <em>content</em> of your presentation
might have been spot-on, the lessons that might have been learned from the presentation
have drowned in the "He's a pig!" "No he's not!" that has followed.
Great job there, mate. Way to get your message across.</li>
          <li>
            <strong>To the commenter on the presentation page who said, "ps [sic] feminism
is dead", get a clue.</strong> Women still, on average, get paid less than men
do for an equivalently-skilled employee in the same job. Maybe it's not $.50 to every
$1 as it used to be, but so long as it's even measurable, there's work to be done.
This industry in particular has absolutely no reason for gender discrimination in
any form, since there's absolutely nothing "physical" about what we do.
(Ditto for medicine and law, for that matter.)</li>
          <li>
            <strong>Presentations reach far beyond just the attendees.</strong> One commenter
on Sara's blog notes, "What an over reaction, there was nothing wrong with that
presentation, i wouldn't show it to a board room but as far as showing it to a ruby
developers conference then no probs." Frankly, that's a short-sighted attitude,
making the presumption that someone of the suit-and-tie set (those supposedly inhabiting
the "board room" where this kind of presentation isn't appropriate) wouldn't
actually be in the audience at a ruby developers conference. Oh, granted, when in
Rome, one has to expect Romans to act like Romans, but that just means that the Ruby
community isn't welcome inside the board room, right? (Somehow I doubt this is what
the numerous people who are trying to make money off of Ruby really want.) Fact is,
that presentation is now captured by the Internet for all time, and it will forever
be known as "The Ruby Porno Presentation", and it's an even money bet that
somebody in that board room has seen the presentation (and the video, and the play-by-play
from the people who had friends who had friends that were there....).</li>
          <li>
            <strong>To the commenters who say, "You asked for it", get a clue.</strong> Commenters
have suggested that the title should have clued people into what was coming: "I'm
totally flabbergasted no one has stated the obvious here: if you see a presentation
labeled "CouchDB: Perform like a pr0n star" and you choose to go to it,
don't act all surprised when R-rated images are used as props." Sorry, no biscuit.
Presenters use analogies and imagery all the time in their titles in order to "sell"
their talks. Recently I was part of a talk that was labeled as a "smackdown"—did
that mean the audience should have expected to see images of physical violence? If
I title my next talk as something that's "hard-core", should you expect
to see images of ball gags and snuff film clips? This is what happens when we co-opt
terms like "smackdown" and "hard-core"—you can't fall back to
the original meanings and then claim ignorance when people misunderstand how you're
going to use them. (God only knows what Mr. Aimonetti would have done for a presentation
on "Naked Objects". *shudder*)</li>
          <li>
            <strong>Matt Aimonetti, you are an idiot. </strong>You could have had your joke and
keep it tasteful too. You do, in fact, from time to time in the early part of the
presentation: the photo of the "little blue pills" was perfect, offering
a hint as to what you meant while keeping the <em>double-entendre</em> alive. Every
single "objectionable" photo in that presentation could have been replaced
by a more subtle one that kept everybody's mind on the subject and still got the point
across. The fact that you resorted to the heavy-handed imagery only proves that you
wanted to beat the audience's head with it.</li>
          <li>
            <strong>Please, let the one-ups-manship stop.</strong> Can we please agree that moving
and powerful presentations can be done without having to resort to cheap tricks? They
almost always come off badly, particularly when you have to keep the gag running for
a full hour or so. Anybody remember Marc Fleury's "Joker" retinue at TheServerSide
a half-decade ago? Can you tell me what his presentation was about? Now, consider
Dave Thomas' "Cargo Cults" talk from NFJS around the same time—what was
he covering? If you were there for both talks, chances are you remember Dave's talk
far better than you remember the Fleury keynote beyond the fact that he wore Joker
face paint the entire time. Good presentations are about using humor to underscore
and support the message, and not making humor the central point of the message. Think
about that before you start reaching for the bad innuendo.</li>
          <li>
            <strong>Is this really the kind of industry we want?</strong> Granted, it may seem
like all of this is way overblown if you're a 25-year-old guy recently graduated from
college and hacking on your first or second Rails project. "What do these grumpy
idiots not understand about 'it's a joke'? My God, is everybody nuts? Are they trying
to say that we can't have fun at work or with what we do?" To which all I can
say is two things: one, check in with yourself five or ten years from now, when your
daughters are learning about body images by staring at pictures of women who are entirely
artificial (and yes, guys, those pictures you see are entirely artificial, having
been touched up and enhanced in many ways), and two, you're more than welcome to have
whatever jokes you like at whomever's expense you like, in private. This wasn't in
private. A developer conference is not a private locale. More importantly, though,
think about it—when you bring your girlfriend to work, do you want her hearing those
same jokes that buddies toss off back and forth? What seems like "harmless fun"
now, may have a very different feel to it for you a few years from now.</li>
        </ul>
        <p>
I'll freely admit, I drop profanity from time to time in my presentations. And to
everyone who comes up afterwords (figuratively and literally) saying I shouldn't use
such offensive language, I apologize, and point out that I did so in order to underscore
the point, knowing that I'm taking that risk, and knowing that I may be required to
offer up apologies after the fact for having offended them. (To date, those apologies
still number in the single digits.) So perhaps I am no better than Mr. Aimonetti in
the final accounting of things.
</p>
        <p>
But all of this loses sight of a core principle. Regardless of the efficacy of his
presentation, regardless of your feelings about the subject matter, regardless of
your thoughts around the overblown-or-not nature of this discussion, a deeper principle
is at stake here, that of professional presentation etiquette: Mr. Aimonetti, you
owe an apology to anyone and everyone that was offended by your presentation (for
whatever reason). Failure to deliver that, in my mind, equates to a personal and professional
FAIL on your part. 
</p>
        <p>
When you stand up on stage, and you say something that somebody finds offensive, you
owe that person an apology, even if you think their reasoning or rationale is bogus.
</p>
        <p>
It's simple common courtesy.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=8da33b92-cb5f-466a-b2d1-a20f4355ed73" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
</feed>