<?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>2012-01-28T02:03:48.7029118-08: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>Top Developer Resources?</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2012/01/28/Top+Developer+Resources.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,718af7ab-cb7a-4e95-af71-4f6f98e297b7.aspx</id>
    <published>2012-01-28T02:03:48.7029118-08:00</published>
    <updated>2012-01-28T02:03:48.7029118-08:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
While going through some spam email (well, technically not spam, since I willingly
signed up for the ads/product-centric-newsletters, but that is just a mouthful to
say), I ran across the <a href="http://www.appdesignvault.com/top-mobile-app-development-resources" target="_blank">App
Design Vault 32 Top Resources Mobile App Developers Should Know About list</a>, and
had a look. I was somewhat disappointed at the fact that they were all iOS resources,
leaving the Android and Windows Phone crowd out in the cold, not to mention Java,
.NET, Ruby, and others shivering on the back porch as well.
</p>
        <p>
So, I figured, why not build one that seeks to be a tad more all-encompassing? And
rather than try and impose my own sense of order upon the world, and limit it to my
own experiences, I choose instead to crowdsource the thing, and let you tell me what
you think the top developer resources are.
</p>
        <p>
Because these things have to have some kind of structure, in order to effectively
collate all the resources that will be thrown at me, I’m going to ask that you
</p>
        <ul>
          <li>
            <em>Limit your list to five resources.</em> The final list will likely (I hope) contain
a lot more, but if you just give me the top five resources you think are invaluable
to you as a developer, it’ll make the list more well-considered and pare it down to
just the essential stuff you think about.</li>
          <li>
            <em>Keep the lists somewhat tech-focused.</em> Not in the sense that I don’t want
to know about agile resources and what-not, but that I want to hear what your top
.NET five are, your top Java five, and so on. Of course, if you really want to just
come up with one list across several platforms or categories, go for it. Yours is
the comment box, after all. :-)</li>
        </ul>
        <p>
And if you work for a company or you own a product, please feel free to nominate your
tool of choice… so long as there are four others that go along with your baby. Fair
is fair, after all. ;-)
</p>
        <p>
And yes, for those who are curious, I will of course inject my own into the list,
but I just had this thought latch into my head a few minutes ago, and haven’t compiled
my own list yet, so I need a little time to think about it, too.
</p>
        <p>
Roughly speaking, categories that come to mind are: .NET, Java (which I’m assuming
to mean mostly enterprise/Java-web kinds of things, but hey, if Swing is your thing,
go for it…), Ruby, Web, Game development (any platform), Android, iOS, MacOS, C++
(by which I really mean “any language that compiles to native code”, a la Haskell,
C, Delphi, …), and what the hell, PHP. (Perl guys, I’m going to automatically put
“Any book teaching some other language” at #1 on your list, just to tweak your nose
a bit.) If you have some other categorization, sure, throw that at me, too.
</p>
        <p>
The App Design Vault broke their resources down into a few categories too: Books,
Tutorials, Tools, Sites, Forums, Marketing, and Design. Obviously there’s a pretty
strong website bias in there (Tutorials, Sites, Forums, Marketing and Design all usually
involve websites of one form or another), but feel free to toss in Conferences, Magazines,
and whatever else seems useful to you.
</p>
        <p>
Think of it like this: if a programmer writing an app for you were to be stuck on
a deserted island with nothing but a laptop and an extremely limited Internet connection,
what five things would you want him/her to have with them or access to? (Perhaps more
accurately, “a fully-available Internet connection but a very limited amount of time
to do anything other than work on your app” is the better way to phrase that...)
</p>
        <p>
And please, no flames or criticism of anybody else’s list. Email ‘em to me, if you’d
prefer. (And if you’re reading this through one of the post portals—a la Reddit or
DZone—please comment on the original site, tedneward.com, or I probably won’t see
your comments.)
</p>
        <p>
Once I have what feels like a sizable list and the suggestions are tapering off, I’ll
update this post with the results. No points or awards or endorsements intended—I
just want to compile something I think would be useful.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=718af7ab-cb7a-4e95-af71-4f6f98e297b7" />
        <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>When are servers not servers?</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2012/01/25/When+Are+Servers+Not+Servers.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,42807b50-d3ec-4147-8015-e3198ee8b186.aspx</id>
    <published>2012-01-25T15:45:33.8246536-08:00</published>
    <updated>2012-01-25T15:45:33.8246536-08:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
In his Dr Dobb’s overview, Andrew Binstock talks about the prevalence of low-cost,
low-powers and suggest in the title of the piece that they have begun their steady
ascent over more traditional servers. His concluding statement, in fact, suggests
that they will replace the “pizza box” servers we have come to know and love.
</p>
        <p>
Ironically, to me, the notion of a “server” still conjures up images of row upon row
of full-tower machines, whirring away. In fact, I have one of those under my work
desk at home, doing… nothing. Right now I have it more or less permanently switched
off.
</p>
        <p>
Andrew and I have disagreed on things before, but on this score, he’s right: the machines
we commonly call “servers” are, step by step, slowly but surely, becoming smaller,
quieter, lighter, better power-friendly, and all the other things we have traditionally
associated with the client side of the client/server equation. It’s not new: I have
a couple of friends who, in order to do “cloud” or “cluster” presentations, carry
around with them a small private cloud. One of them carries around (as in, with them
to conferences and such) about a half-dozen laptops, the other, a custom-made rack
of Mac Minis, a router, and other accoutrements. Yes, if you attend TechEd, you probably
know exactly whom I mean.
</p>
        <p>
But this raises some interesting questions. If servers are becoming smaller and lighter
and are still fast enough to be considered servers, what does this have to say about
infrastructure? Andrew touches on it briefly,
</p>
        <blockquote>
          <p>
This model of low-cost, low-power devices is the way of the future. What I am describing
here is not terribly different than building your own personal cloud from inexpensive
machines. If you had chosen to keep the $300, you could have gotten this much from
Rackspace's cloud server: 512MB RAM and 20GB HDD running Linux. That's not close to
as much horsepower as my machine delivers However, it gives you two advantages: You
have no additional ongoing costs (power consumption, parts replacement), and because
it's off site, you have an instant off-site backup of your code base. Other companies,
such as IntoVPS.com, give you about twice Rackspace's resources for the same price.
Eventually, the pricing of cloud options will drop to close to the low-power, on-site
devices, I expect. (Source: <a title="http://drdobbs.com/tools/232500406?cid=DDJ_nl_mdev_2012-01-25_h&amp;elq=5c23117c5cff4d06820726bd0294693a" href="http://drdobbs.com/tools/232500406?cid=DDJ_nl_mdev_2012-01-25_h&amp;elq=5c23117c5cff4d06820726bd0294693a">http://drdobbs.com/tools/232500406?cid=DDJ_nl_mdev_2012-01-25_h&amp;elq=5c23117c5cff4d06820726bd0294693a</a>)
</p>
        </blockquote>
        <p>
… but putting the discussion of “on-premise” vs “cloud” off to one side for a moment,
it raises a more interesting question: if servers are small enough to carry around
with us, are they still servers? Historically, the server has always been the machine
in the data center, but if we have tools that allow servers to synchronize data between
them easily (such as we see going on in tools like Dropbox or Evernote), and the servers
are small and portable enough to fit in our pockets, then are they still servers?
</p>
        <p>
Think about this for a moment: the servers that Andrew describes (“a 1.8GHz dual-core
Intel Atom chip, 2GB RAM, 250 GB SATA, HDMI, 6 ea. USB, Wifi, and GbE” and “a dual-core
1GHz ARM-based Tegra chip from Nvidia, had robust Nvidia graphics (HDMI), 1GB RAM,
a 32GB SSD or a large capacity HDD, and all the USB and other ports you could possibly
want”) are hardly the heavy-metal monsters we used to think about when discussing
“servers”, and yet still serve the purpose. If we don’t need the server for its processing
power, and if we don’t need it for its central location (as a rendezvous point for
clients to discover each other and/or centralize data), then what purpose does the
server serve?
</p>
        <p>
Maybe it’s time to take a really hard look again into those peer-to-peer ideas from
about a half-decade ago.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=42807b50-d3ec-4147-8015-e3198ee8b186" />
        <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>Is Programming Less Exciting Today?</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2012/01/25/Is+Programming+Less+Exciting+Today.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,20604d47-a520-4a9f-8fd2-469caa49eb40.aspx</id>
    <published>2012-01-25T15:24:43.9264030-08:00</published>
    <updated>2012-01-25T15:24:43.9264030-08:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="Android" label="Android" scheme="http://blogs.tedneward.com/CategoryView,category,Android.aspx" />
    <category term="Azure" label="Azure" scheme="http://blogs.tedneward.com/CategoryView,category,Azure.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="Development Processes" label="Development Processes" scheme="http://blogs.tedneward.com/CategoryView,category,Development%2BProcesses.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="iPhone" label="iPhone" scheme="http://blogs.tedneward.com/CategoryView,category,iPhone.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="LLVM" label="LLVM" scheme="http://blogs.tedneward.com/CategoryView,category,LLVM.aspx" />
    <category term="Mac OS" label="Mac OS" scheme="http://blogs.tedneward.com/CategoryView,category,Mac%2BOS.aspx" />
    <category term="Objective-C" label="Objective-C" scheme="http://blogs.tedneward.com/CategoryView,category,Objective-C.aspx" />
    <category term="Parrot" label="Parrot" scheme="http://blogs.tedneward.com/CategoryView,category,Parrot.aspx" />
    <category term="Personal" label="Personal" scheme="http://blogs.tedneward.com/CategoryView,category,Personal.aspx" />
    <category term="Python" label="Python" scheme="http://blogs.tedneward.com/CategoryView,category,Python.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="Security" label="Security" scheme="http://blogs.tedneward.com/CategoryView,category,Security.aspx" />
    <category term="Social" label="Social" scheme="http://blogs.tedneward.com/CategoryView,category,Social.aspx" />
    <category term="Solaris" label="Solaris" scheme="http://blogs.tedneward.com/CategoryView,category,Solaris.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" />
    <category term="XNA" label="XNA" scheme="http://blogs.tedneward.com/CategoryView,category,XNA.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
As discriminatory as this is going to sound, this one is for the old-timers. If you
started programming after the turn of the milennium, I don’t know if you’re going
to be able to follow the trend of this post—not out of any serious deficiency on your
part, hardly that. But I think this is something only the old-timers are going to
identify with. (And thus, do I alienate probably 80% of my readership, but so be it.)
</p>
        <p>
Is it me, or is programming just less interesting today than it was two decades ago?
</p>
        <p>
By all means, shake your smartphones and other mobile devices at me and say, “Dude,
how can you say that?”, but in many ways programming for Android and iOS reminds me
of programming for Windows and Mac OS two decades ago. HTML 5 and JavaScript remind
me of ten years ago, the first time HTML and JavaScript came around. The discussions
around programming languages remind me of the discussions around C++. The discussions
around NoSQL remind me of the arguments both for and against relational databases.
It all feels like we’ve been here before, with only the names having changed.
</p>
        <p>
Don’t get me wrong—if any of you comment on the differences between HTML 5 now and
HTML 3.2 then, or the degree of the various browser companies agreeing to the standard
today against the “browser wars” of a decade ago, I’ll agree with you. This isn’t
so much of a rational and logical discussion as it is an emotive and intuitive one.
It just <em>feels</em> similar.
</p>
        <p>
To be honest, I get this sense that across the entire industry right now, there’s
a sort of malaise, a general sort of “Bah, nothing really all that new is going on
anymore”. NoSQL is re-introducing storage ideas that had been around before but were
discarded (perhaps injudiciously and too quickly) in favor of the relational model.
Functional languages have obviously been in place since the 50’s (in Lisp). And so
on.
</p>
        <p>
More importantly, look at the Java community: what truly innovative ideas have emerged
here in the last five years? Every new open-source project or commercial endeavor
either seems to be a refinement of an idea before it (how many different times are
we going to create a new Web framework, guys?) or an attempt to leverage an idea coming
from somewhere else (be it from .NET or from Ruby or from JavaScript or….). With the
upcoming .NET 4.5 release and Windows 8, Microsoft is holding out very little “new
and exciting” bits for the community to invest emotionally in: we hear about “async”
in C# 5 (something that F# has had already, thank you), and of course there is WinRT
(another platform or virtual machine… sort of), and… well, honestly, didn’t we just
do this a decade ago? Where is the WCFs, the WPFs, the Silverlights, the things that
would get us fired up? Hell, even a new approach to data access might stir some excitement.
Node.js feels like an attempt to reinvent the app server, but if you look back far
enough you see that the app server itself was reinvented once (in the Java world)
in Spring and other lightweight frameworks, and before that by people who actually
thought to write their own web servers in straight Java. (And, for the record, the
whole event-driven I/O thing is something that’s been done in both Java and .NET a
long time before now.)
</p>
        <p>
And as much as this is going to probably just throw fat on the fire, all the excitement
around JavaScript as a language reminds me of the excitement about Ruby as a language.
Does nobody remember that Sun did this once already, with Phobos? Or that Netscape
did this with LiveScript? JavaScript on the server end is not new, folks. It’s just
new to the people who’d never seen it before.
</p>
        <p>
In years past, there has always seemed to be something deeper, something more exciting
and more innovative that drives the industry in strange ways. Artificial Intelligence
was one such thing: the search to try and bring computers to a state of human-like
sentience drove a lot of interesting ideas and concepts forward, but over the last
decade or two, AI seems to have lost almost all of its luster and momentum. User interfaces—specifically,
GUIs—were another force for a while, until GUIs got to the point where they were so
common and so deeply rooted in their chosen pasts (the single-button of the Mac, the
menubar-per-window of Windows, etc) that they left themselves so little room for maneuver.
At least this is one area where Microsoft is (maybe) putting the fatted sacred cow
to the butcher’s knife, with their Metro UI moves in Windows 8… but only up to a point.
</p>
        <p>
Maybe I’m just old and tired and should hang up my keyboard and go take up farming,
then go retire to my front porch’s rocking chair and practice my <em>Hey you kids!
Getoffamylawn!</em> or something. But before you dismiss me entirely, do me a favor
and tell me: what gets you excited these days? If you’ve been programming for twenty
years, what about the industry today gets your blood moving and your mind sharpened?
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=20604d47-a520-4a9f-8fd2-469caa49eb40" />
        <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>Tech Predictions, 2012 Edition</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2012/01/02/Tech+Predictions+2012+Edition.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,990163eb-11cc-4ae9-9b6a-aefc4305a2e6.aspx</id>
    <published>2012-01-01T22:17:28.6610000-08:00</published>
    <updated>2012-01-01T22:20:30.8176060-08:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="Android" label="Android" scheme="http://blogs.tedneward.com/CategoryView,category,Android.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="Development Processes" label="Development Processes" scheme="http://blogs.tedneward.com/CategoryView,category,Development%2BProcesses.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="iPhone" label="iPhone" scheme="http://blogs.tedneward.com/CategoryView,category,iPhone.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="LLVM" label="LLVM" scheme="http://blogs.tedneward.com/CategoryView,category,LLVM.aspx" />
    <category term="Mac OS" label="Mac OS" scheme="http://blogs.tedneward.com/CategoryView,category,Mac%2BOS.aspx" />
    <category term="Objective-C" label="Objective-C" scheme="http://blogs.tedneward.com/CategoryView,category,Objective-C.aspx" />
    <category term="Parrot" label="Parrot" scheme="http://blogs.tedneward.com/CategoryView,category,Parrot.aspx" />
    <category term="Personal" label="Personal" scheme="http://blogs.tedneward.com/CategoryView,category,Personal.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="VMWare" label="VMWare" scheme="http://blogs.tedneward.com/CategoryView,category,VMWare.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>
Well, friends, another year has come and gone, and it's time for me to put my crystal
ball into place and see what the upcoming year has for us. But, of course, in the
long-standing tradition of these predictions, I also need to put my spectacles on
(I did turn 40 last year, after all) and have a look at how well I did <a href="http://blogs.tedneward.com/2011/01/01/Tech+Predictions+2011+Edition.aspx">in
this same activity twelve months ago</a>.
</p>
        <p>
Let's see what unbelievable gobs of hooey I slung last year came even remotely to
pass. For 2011, I said....
</p>
        <ul>
          <li>
            <strong>THEN:</strong>
            <em>Android’s penetration into the mobile space is going to
rise, then plateau around the middle of the year.</em> Android phones, collectively,
have outpaced iPhone sales. That’s a pretty significant statistic—and it means that
there’s fewer customers buying smartphones in the coming year. More importantly, the
first generation of Android slates (including the Galaxy Tab, which I own), are less-than-sublime,
and not really an “iPad Killer” device by any stretch of the imagination. And I think
that will slow down people buying Android slates and phones, particularly since Google
has all but promised that Android releases will start slowing down. 
<ul><li><strong>NOW:</strong> Well, I think I get a point for saying that Android's penetration
will rise... but then I lose it for suggesting that it would slow down. Wow, was I
wrong on that. Once Amazon put the Kindle Fire out, suddenly for the first time Android
tablets began to appear in peoples' hands in record numbers. The drawback here is
that most people using the Fire don't realize it's an Android tablet, which certainly
hurts Google's brand-awareness (not that Amazon really seems to mind), but the upshot
is simple: people are still buying devices, even though they may already own one.
Which amazes me.</li></ul></li>
          <li>
            <strong>THEN:</strong>
            <em>Windows Phone 7 penetration into the mobile space will
appear huge, then slow down towards the middle of the year.</em> Microsoft is getting
some pretty decent numbers now, from what I can piece together, and I think that’s
largely the “I love Microsoft” crowd buying in. But it’s a pretty crowded place right
now with Android and iPhone, and I’m not sure if the much-easier Office and/or Exchange
integration is enough to woo consumers (who care about Office) or business types (who
care about Exchange) away from their Androids and iPhones. 
<ul><li><strong>NOW:</strong> Despite the catastrophic implosion of RIM (thus creating a huge
market of people looking to trade their Blackberrys in for other mobile phones, ones
which won't all go down when a RIM server implodes), WP7 has definitely not emerged
as the "third player" in the mobile space; or, perhaps more precisely, they feel like
a distant third, rather than a creditable alternative to the other two. In fact, more
and more it just feels like this is a two-horse race and Microsoft is in it still
because they're willing to throw loss after loss to stay in it. (For what reason,
I'm not sure--it's not clear to me that they can ever reach a point of profitability
here, even once Nokia makes the transition to WP7, which is supposedly going to take
years. On the order of a half-decade or so.) Even living here in Redmon, where I would
expect the WP7 concentration to be much, much higher than anywhere else in the world,
it's still more common to see iPhones and 'droids in peoples' hands than it is to
see WP7 phones.</li></ul></li>
          <li>
            <strong>THEN:</strong>
            <em>Android, iOS and/or Windows Phone 7 becomes a developer
requirement.</em> Developers, if you haven’t taken the time to learn how to program
one of these three platforms, you are electing to remove yourself from a growing market
that desperately wants people with these skills. I see the “mobile native app development”
space as every bit as hot as the “Internet/Web development” space was back in 2000.
If you don’t have a device, buy one. If you have a device, get the tools—in all three
cases they’re free downloads—and start writing stupid little apps that nobody cares
about, so you can have some skills on the platform when somebody cares about it. 
<ul><li><strong>NOW:</strong> Wow, yes. Right now, if you are a developer and you haven't
spent at least a little time learning mobile development, you are excluding yourself
from a development "boom" that rivals the one around Web sites in the mid-90's. Seriously:
remember when everybody had to have a website? That's the mentality right now with
a ton of different companies--"we have to have a mobile app!" "But we sell condom
lubricant!" "Doesn't matter! We need a mobile app! Build us something! Go go go go
go!"</li></ul></li>
          <li>
            <strong>THEN:</strong>
            <em>The Windows 7 slates will suck.</em> This isn’t a prediction,
this is established fact. I played with an “ExoPC” 10” form factor slate running Windows
7 (Dell I think was the manufacturer), and it was a horrible experience. Windows 7,
like most OSes, really expects a keyboard to be present, and a slate doesn’t have
one—so the OS was hacked to put a “keyboard” button at the top of the screen that
would slide out to let you touch-type on the slate. I tried to fire up Notepad and
type out a haiku, and it was an unbelievably awkward process. Android and iOS clearly
own the slate market for the forseeable future, and if Dell has any brains in its
corporate head, it will phone up Google tomorrow and start talking about putting Android
on that hardware. 
<ul><li><strong>NOW:</strong> Yeah, that was something of a "gimme" point (but I'll take it).
Windows7 on a slate was a Bad Idea, and I'm pretty sure the sales reflect that. Conduct
your own anecdotal poll: see if you can find a store somewhere in your town or city
that will actually sell you a Windows7 slate. Can't find one? I can--it's the Microsoft
store in town, and I'm not entirely sure they still stock them. Certainly our local
Best Buy doesn't.</li></ul></li>
          <li>
            <strong>THEN:</strong>
            <em>DSLs mostly disappear from the buzz.</em> I still see no
strawman (no “pet store” equivalent), and none of the traditional builders-of-strawmen
(Microsoft, Oracle, etc) appear interested in DSLs much anymore, so I think 2010 will
mark the last year that we spent any time talking about the concept. 
<ul><li><strong>NOW:</strong> I'm going to claim a point here, too. DSLs have pretty much
left us hanging. Without a strawman for developers to "get", the DSL movement has
more or less largely died out. I still sometimes hear people refer to something that
isn't a programming language but does something technical as a "DSL" ("That shipping
label? That's a DSL!"), and that just tells me that the concept never really took
root.</li></ul></li>
          <li>
            <strong>THEN:</strong>
            <em>Facebook becomes more of a developer requirement than before.</em> I
don’t like Mark Zuckerburg. I don’t like Facebook’s privacy policies. I don’t particularly
like the way Facebook approaches the Facebook Connect experience. But Facebook owns
enough people to be the fourth-largest nation on the planet, and probably commands
an economy of roughly that size to boot. If your app is aimed at the Facebook demographic
(that is, everybody who’s not on Twitter), you have to know how to reach these people,
and that means developing at least some part of your system to integrate with it. 
<ul><li><strong>NOW:</strong> Facebook, if anything, has become more important through 2011,
particularly for startups looking to get some exposure and recognition. Facebook continues
to screw with their user experience, though, and they keep screwing with their security
policies, and as "big" a presence as they have, it's not invulnerable, and if they're
not careful, they're going to find themselves on the other side of the relevance curve.</li></ul></li>
          <li>
            <strong>THEN:</strong> Twitter becomes more of a developer requirement, too. Anybody
who’s not on Facebook is on Twitter. Or dead. So to reach the other half of the online
community, you have to know how to connect out with Twitter. 
<ul><li><strong>NOW:</strong> Twitter's impact has become deeper, but more muted in some ways--people
don't think of Twitter as a "new" channel, but one that they've come to expect and
get used to. At the same time, how Twitter is supposed to factor into different applications
isn't always clear, which hinders Twitter's acceptance and "must-have"-ness. Of course,
Twitter could care less, it seems, though it still confuses me how they actually make
money.</li></ul></li>
          <li>
            <strong>THEN:</strong> XMPP becomes more of a developer requirement. XMPP hasn’t crossed
a lot of people’s radar screen before, but Facebook decided to adopt it as their chat
system communication protocol, and Google’s already been using it, and suddenly there’s
a whole lotta traffic going over XMPP. More importantly, it offers a two-way communication
experience that is in some scenarios vastly better than what HTTP offers, yet running
in a very “Internet-friendly” way just as HTTP does. I suspect that XMPP is going
to start cropping up in a number of places as a useful alternative and/or complement
to using HTTP. 
<ul><li><strong>NOW:</strong> Well, unfortunately, XMPP still hides underneath other names
and still doesn't come to mind when people are thinking about communication, leaving
this one way unfulfilled. *sigh* Maybe someday we will learn that not everything has
to go over HTTP, but it didn't happen in 2011. 
</li></ul></li>
          <li>
            <strong>THEN:</strong> “Gamification” starts making serious inroads into non-gaming
systems. Maybe it’s just because I’ve been talking more about gaming, game design,
and game implementation last year, but all of a sudden “gamification”—the process
of putting game-like concepts into non-game applications—is cresting in a big way.
FourSquare, Yelp, Gowalla, suddenly all these systems are offering achievement badges
and scoring systems for people who want to play in their worlds. How long is it before
a developer is pulled into a meeting and told that “we need to put achievement badges
into the call-center support application”? Or the online e-commerce portal? It’ll
start either this year or next. 
<ul><li><strong>NOW:</strong> Gamification is emerging, but slowly and under the radar. It's
certainly not as strong as I thought it would be, but gamification concepts are sneaking
their way into a variety of different scenarios (beyond games themselves). Probably
can't claim a point here, no.</li></ul></li>
          <li>
            <strong>THEN:</strong> Functional languages will hit a make-or-break point. I know,
I said it last year. But the buzz keeps growing, and when that happens, it usually
means that it’s either going to reach a critical mass and explode, or it’s going to
implode—and the longer the buzz grows, the faster it explodes or implodes, accordingly.
My personal guess is that the “F/O hybrids”—F#, Scala, etc—will continue to grow until
they explode, particularly since the suggested v.Next changes to both Java and C#
have to be done as language changes, whereas futures for F# frequently are either
built as libraries masquerading as syntax (such as asynchronous workflows, introduced
in 2.0) or as back-end library hooks that anybody can plug in (such as type providers,
introduced at PDC a few months ago), neither of which require any language revs—and
no concerns about backwards compatibility with existing code. This makes the F/O hybrids
vastly more flexible and stable. In fact, I suspect that within five years or so,
we’ll start seeing a gradual shift away from pure O-O systems, into systems that use
a lot more functional concepts—and that will propel the F/O languages into the center
of the developer mindshare. 
<ul><li><strong>NOW:</strong> More than any of my other predictions (or subjects of interest),
functional languages stump me the most. On the one hand, there doesn't seem to be
a drop-off of interest in the subject, based on a variety of anecdotal evidence (books,
articles, etc), but on the other hand, they don't seem to be crossing over into the
"mainstream" programming worlds, either. At best, we can say that they are entering
the mindset of senior programmers and/or project leads and/or architects, but certainly
they don't seem to be turning in to the "go-to" language for projects being done in
2011.</li></ul></li>
          <li>
            <strong>THEN:</strong>
            <em>The Microsoft Kinect will lose its shine.</em> I hate to
say it, but I just don’t see where the excitement is coming from. Remember when the
Wii nunchucks were the most amazing thing anybody had ever seen? Frankly, after a
slew of initial releases for the Wii that made use of them in interesting ways, the
buzz has dropped off, and more importantly, the nunchucks turned out to be just another
way to move an arrow around on the screen—in other words, we haven’t found particularly
novel and interesting/game-changing ways to use the things. That’s what I think will
happen with the Kinect. Sure, it’s really freakin’ cool that you can use your body
as the controller—but how precise is it, how quickly can it react to my body movements,
and most of all, what new user interface metaphors are people going to have to come
up with in order to avoid the “me-too” dancing-game clones that are charging down
the pipeline right now? 
<ul><li><strong>NOW:</strong> Kinect still makes for a great Christmas or birthday present,
but nobody seems to be all that amazed by the idea anymore. Certainly we aren't seeing
a huge surge in using Kinect as a general user interface device, at least not yet.
Maybe it needed more time for people to develop those new metaphors, but at the same
time, I would've expected at least a few more games to make use of it, and I haven't
seen any this past year.</li></ul></li>
          <li>
            <strong>THEN:</strong>
            <em>There will be no clear victor in the Silverlight-vs-HTML5
war.</em> And make no mistake about it, a war is brewing. Microsoft, I think, finds
itself in the inenviable position of having two very clearly useful technologies,
each one’s “sphere of utility” (meaning, the range of answers to the “where would
I use it?” question) very clearly overlapping. It’s sort of like being a football
team with both Brett Favre and Tom Brady on your roster—both of them are superstars,
but you know, deep down, that you have to cut one, because you can’t devote the same
degree of time and energy to both. Microsoft is going to take most of 2011 and probably
part of 2012 trying to support both, making a mess of it, offering up conflicting
rationale and reasoning, in the end achieving nothing but confusing developers and
harming their relationship with the Microsoft developer community in the process.
Personally, I think Microsoft has no choice but to get behind HTML 5, but I like a
lot of the features of Silverlight and think that it has a lot of mojo that HTML 5
lacks, and would actually be in favor of Microsoft keeping both—so long as they make
it very clear to the developer community when and where each should be used. In other
words, the executives in charge of each should be locked into a room and not allowed
out until they’ve hammered out a business strategy that is then printed and handed
out to every developer within a 3-continent radius of Redmond. (Chances of this happening:
.01%) 
<ul><li><strong>NOW:</strong> Well, this was accurate all the way up until the last couple
of months, when Microsoft made it fairly clear that Silverlight was being effectively
"put behind" HTML 5, despite shipping another version of Silverlight. In the meantime,
though, they've tried to support both (and some Silverlighters tell me that the Silverlight
team is still looking forward to continuing supporting it, though I'm not sure at
this point what is rumor and what is fact anymore), and yes, they confused the hell
out of everybody. I'm surprised they pulled the trigger on it in 2011, though--I expected
it to go a version or two more before they finally pulled the rug out. 
</li></ul></li>
          <li>
            <strong>THEN:</strong>
            <em>Apple starts feeling the pressure to deliver a developer
experience that isn’t mired in mid-90’s metaphor.</em> Don’t look now, Apple, but
a lot of software developers are coming to your platform from Java and .NET, and they’re
bringing their expectations for what and how a developer IDE should look like, perform,
and do, with them. Xcode is not a modern IDE, all the Apple fan-boy love for it notwithstanding,
and this means that a few things will happen: 
<ul><li><em>Eclipse gets an iOS plugin.</em> Yes, I know, it wouldn’t work (for the most part)
on a Windows-based Eclipse installation, but if Eclipse can have a native C/C++ developer
experience, then there’s no reason why a Mac Eclipse install couldn’t have an Objective-C
plugin, and that opens up the idea of using Eclipse to write iOS and/or native Mac
apps (which will be critical when the Mac App Store debuts somewhere in 2011 or 2012).</li><li><em>Rumors will abound about Microsoft bringing Visual Studio to the Mac.</em> Silverlight
already runs on the Mac; why not bring the native development experience there? I’m
not saying they’ll actually do it, and certainly not in 2011, but the rumors, they
will be flyin….</li><li><em>Other third-party alternatives to Xcode will emerge and/or grow.</em> MonoTouch
is just one example. There’s opportunity here, just as the fledgling Java IDE market
looked back in ‘96, and people will come to fill it.</li><li><strong>NOW:</strong> Xcode 4 is "better", but it's still not what I would call comparable
to the Microsoft Visual Studio or JetBrains IDEA experience. LLVM is definitely a
better platform for the company's development efforts, long-term, and it's encouraging
that they're investing so heavily into it, but I still wish the overall development
experience was stronger. Meanwhile, though, no Eclipse plugin has emerged (that I'm
aware of), which surprised me, and neither did we see Microsoft trying to step into
that world, which doesn't surprise me, but disappoints me just a little. I realize
that Microsoft's developer tools are generally designed to support the Windows operating
system first, but Microsoft has to cut loose from that perspective if they're going
to survive as a company. More on that later.</li></ul></li>
          <li>
            <strong>THEN:</strong>
            <em>NoSQL buzz grows.</em> The NoSQL movement, which sort of
got started last year, will reach significant states of buzz this year. NoSQL databases
have a lot to offer, particularly in areas that relational databases are weak, such
as hierarchical kinds of storage requirements, for example. That buzz will reach a
fever pitch this year, and the relational database moguls (Microsoft, Oracle, IBM)
will start to fight back. 
<ul><li><strong>NOW:</strong> Well, the buzz certainly grew, and it surprised me that the
big storage guys (Microsoft, IBM, Oracle) didn't do more to address it; I was expecting
features to emerge in their database products to address some of the features present
in MongoDB or CouchDB or some of the others, such as "schemaless" or map/reduce-style
queries. Even just incorporating JavaScript into the engine somewhere would've generated
a reaction.</li></ul></li>
        </ul>
        <p>
Overall, it appears I'm running at about my usual 50/50 levels of prognostication.
So be it. Let's see what the ol' crystal ball has in mind for 2012:
</p>
        <ul>
          <li>
            <em>Lisps will be the languages to watch.</em> With Clojure leading the way, Lisps
(that is, languages that are more or less loosely based on Common Lisp or one of its
variants) are slowly clawing their way back into the limelight. Lisps are both functional
languages as well as dynamic languages, which gives them a significant reason for
interest. Clojure runs on top of the JVM, which makes it highly interoperable with
other JVM languages/systems, and Clojure/CLR is the version of Clojure for the CLR
platform, though there seems to be less interest in it in the .NET world (which is
a mistake, if you ask me).</li>
          <li>
            <em>Functional languages will.... I have no idea.</em> As I said above, I'm kind of
stymied on the whole functional-language thing and their future. I keep thinking they
will either "take off" or "drop off", and they keep tacking to the middle, doing neither,
just sort of hanging in there as a concept for programmers to take and run with. Mind
you, I like functional languages, and I want to see them become mainstream, or at
least more so, but I keep wondering if the mainstream programming public is ready
to accept the ideas and concepts hiding therein. So this year, let's try something
different: I predict that they will remain exactly where they are, neither "done"
nor "accepted", but continue next year to sort of hang out in the middle.</li>
          <li>
            <em>F#'s type providers will show up in C# v.Next.</em> This one is actually a "gimme",
if you look across the history of F# and C#: for almost every version of F# v."N",
features from that version show up in C# v."N+1". More importantly, F# 3.0's type
provider feature is an amazing idea, and one that I think will open up language research
in some <em>very</em> interesting ways. (Not sure what F#'s type providers are or
what they'll do for you? Check out <a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-904T">Don
Syme's talk on it</a> at BUILD last year.)</li>
          <li>
            <em>Windows8 will generate a lot of chatter.</em> As 2012 progresses, Microsoft will
try to force a lot of buzz around it by keeping things under wraps until various points
in the year that feel strategic (TechEd, BUILD, etc). In doing so, though, they will
annoy a number of people by not talking about them more openly or transparently. What's
more....</li>
          <li>
            <em>Windows8 ("Metro")-style apps won't impress at first.</em> The more I think about
it, the more I'm becoming convinced that Metro-style apps on a desktop machine are
going to collectively underwhelm. The UI simply isn't designed for keyboard-and-mouse
kinds of interaction, and that's going to be the hardware setup that most people first
experience Windows8 on--contrary to what (I think) Microsoft thinks, people do not
just have tablets laying around waiting for Windows 8 to be installed on it, nor are
they going to buy a Windows8 tablet just to try it out, at least not until it's gathered
some mojo behind it. Microsoft is going to have to finesse the messaging here very,
very finely, and that's not something they've shown themselves to be particularly
good at over the last half-decade.</li>
          <li>
            <em>Scala will get bigger, thanks to Heroku.</em> With the adoption of Scala and Play
for their Java apps, Heroku is going to make Scala look attractive as a development
platform, and the adoption of Play by Typesafe (the same people who brought you Akka)
means that these four--Heroku, Scala, Play and Akka--will combine into a very compelling
and interesting platform. I'm looking forward to seeing what comes of that.</li>
          <li>
            <em>Cloud will continue to whip up a lot of air.</em> For all the hype and money spent
on it, it doesn't really seem like cloud is gathering commensurate amounts of traction,
across all the various cloud providers with the possible exception of Amazon's cloud
system. But, as the different cloud platforms start to diversify their platform technology
(Microsoft seems to be leading the way here, ironically, with the introduction of
Java, Hadoop and some limited NoSQL bits into their Azure offerings), and as we start
to get more experience with the pricing and costs of cloud, 2012 might be the year
that we start to see mainstream cloud adoption, beyond "just" the usage patterns we've
seen so far (as a backing server for mobile apps and as an easy way to spin up startups).</li>
          <li>
            <em>Android tablets will start to gain momentum.</em> Amazon's Kindle Fire has hit
the market strong, definitely better than any other Android-based tablet before it.
The Nooq (the Kindle's principal competitor, at least in the e-reader world) is also
an Android tablet, which means that right now, consumers can get into the Android
tablet world for far, far less than what an iPad costs. Apple rumors suggest that
they may have a 7" form factor tablet that will price competitively (in the $200/$300
range), but that's just rumor right now, and Apple has never shown an interest in
that form factor, which means the 7" world will remain exclusively Android's (at least
for now), and that's a nice form factor for a lot of things. This translates well
into more sales of Android tablets in general, I think.</li>
          <li>
            <em>Apple will release an iPad 3, and it will be "more of the same".</em> Trying to
predict Apple is generally a lost cause, particularly when it comes to their vaunted
iOS lines, but somewhere around the middle of the year would be ripe for a new iPad,
at the very least. (With the iPhone 4S out a few months ago, it's hard to imagine
they'd cannibalize those sales by releasing a new iPhone, until the end of the year
at the earliest.) Frankly, though, I don't expect the iPad 3 to be all that big of
a boost, just a faster processor, more storage, and probably about the same size.
Probably the only thing I'd want added to the iPad would be a USB port, but that conflicts
with the Apple desire to present the iPad as a "device", rather than as a "computer".
(USB ports smack of "computers", not self-contained "devices".)</li>
          <li>
            <em>Apple will get hauled in front of the US government for... something.</em> Apple's
recent foray in the legal world, effectively informing Samsung that they can't make
square phones and offering advice as to what will avoid future litigation, smacks
of such hubris and arrogance, it makes Microsoft look like a Pollyanna Pushover by
comparison. It is pretty much a given, it seems to me, that a confrontation in the
legal halls is not far removed, either with the US or with the EU, over anti-cometitive
behavior. (And if this kind of behavior continues, and there is no legal action, it'll
be pretty apparent that Apple has a pretty good set of US Congressmen and Senators
in their pocket, something they probably learned from watching Microsoft and IBM slug
it out rather than just buy them off.)</li>
          <li>
            <em>IBM will be entirely irrelevant again.</em> Look, IBM's main contribution to the
Java world is/was Eclipse, and to a much lesser degree, Harmony. With Eclipse more
or less "done" (aside from all the work on plugins being done by third parties), and
with IBM abandoning Harmony in favor of OpenJDK, IBM more or less removes themselves
from the game, as far as developers are concerned. Which shouldn't really be surprising--they've
been more or less irrelevant pretty much ever since the mid-2000s or so.</li>
          <li>
            <em>Oracle will "screw it up" at least once.</em> Right now, the Java community is
poised, like a starving vulture, waiting for Oracle to do something else that demonstrates
and befits their Evil Emperor status. The community has already been quick (far too
quick, if you ask me) to highlight Oracle's supposed missteps, such as the JVM-crashing
bug (which has already been fixed in the _u1 release of Java7, which garnered no attention
from the various Java news sites) and the debacle around Hudson/Jenkins/whatever-the-heck-we-need-to-call-it-this-week.
I'll grant you, the Hudson/Jenkins debacle was deserving of ire, but Oracle is hardly
the Evil Emperor the community makes them out to be--at least, so far. (I'll admit
it, though, I'm a touch biased, both because Brian Goetz is a friend of mine and because
Oracle TechNet has asked me to write a column for them next year. Still, in the spirit
of "innocent until proven guilty"....)</li>
          <li>
            <em>VMWare/SpringSource will start pushing their cloud solution in a major way.</em> Companies
like Microsoft and Google are pushing cloud solutions because Software-as-a-Service
is a reoccurring revenue model, generating revenue even in years when the product
hasn't incremented. VMWare, being a product company, is in the same boat--the only
time they make money is when they sell a new copy of their product, unless they can
start pushing their virtualization story onto hardware on behalf of clients--a.k.a.
"the cloud". With SpringSource as the software stack, VMWare has a more-or-less complete
cloud play, so it's surprising that they didn't push it harder in 2011; I suspect
they'll start cramming it down everybody's throats in 2012. Expect to see Rod Johnson
talking a lot about the cloud as a result.</li>
          <li>
            <em>JavaScript hype will continue to grow, and by years' end will be at near-backlash
levels.</em> JavaScript (more properly known as ECMAScript, not that anyone seems
to care but me) is gaining all kinds of steam as a mainstream development language
(as opposed to just-a-browser language), particularly with the release of NodeJS.
That hype will continue to escalate, and by the end of the year we may start to see
a backlash against it. (Speaking personally, NodeJS is an interesting solution, but
suggesting that it will replace your Tomcat or IIS server is a bit far-fetched; event-driven
I/O is something both of those servers have been doing for years, and the rest of
it is "just" a language discussion. We could pretty easily use JavaScript as the development
language inside both servers, as Sun demonstrated years ago with their "Phobos" project--not
that anybody really cared back then.)</li>
          <li>
            <em>NoSQL buzz will continue to grow, and by years' end will start to generate a backlash.</em> More
and more companies are jumping into NoSQL-based solutions, and this trend will continue
to accelerate, until some extremely public failure will start to generate a backlash
against it. (This seems to be a pattern that shows up with a lot of technologies,
so it seems entirely realistic that it'll happen here, too.) Mind you, I don't mean
to suggest that the backlash will be factual or correct--usually these sorts of things
come from misuing the tool, not from any intrinsic failure in it--but it'll generate
some bad press.</li>
          <li>
            <em>Ted will thoroughly rock the house during his CodeMash keynote.</em> Yeah, OK,
that's more of a fervent wish than a prediction, but hey, keep a positive attitude
and all that, right?</li>
          <li>
            <em>Ted will continue to enjoy his time working for Neudesic.</em> So far, it's been
great working for these guys, and I'm looking forward to a great 2012 with them. (Hopefully
this will be a prediction I get to tack on for many years to come, too.)</li>
        </ul>
        <p>
I hope that all of you have enjoyed reading these, and I wish you and yours a very
merry, happy, profitable and fulfilling 2012. Thanks for reading.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=990163eb-11cc-4ae9-9b6a-aefc4305a2e6" />
        <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>CodeMash 2.0.1.2</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2011/12/27/CodeMash+2012.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,e7e92ddf-87d0-403b-89c3-b1c023261a85.aspx</id>
    <published>2011-12-27T15:20:36.9083610-08:00</published>
    <updated>2011-12-27T15:20:36.9083610-08:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
As has already been <a href="http://www.codemash.org" target="_blank">announced</a>,
CodeMash 2012 has selected me to give a keynote there this January. The keynote will
be my “Rethinking Enterprise” keynote, which I’ve given before, most recently in Krakow,
Poland, at the <a href="http://2011.33degree.org/" target="_blank">33rd Degrees conference</a>,
where it was pretty well-received. (Actually, if it’s not too rude to brag a little,
I watched an attendee fall out of his chair laughing. That was fun.)
</p>
        <p>
For those of you who’ve not seen it (and I hope that includes all or at least most
of the 1200 of you attending CodeMash), the talk is an attempt to offer some advice
about how to re-think the design and architecture of applications in this new, NoSQL/REST/1-tier/agile/mobile/etc
era that we seem to be facing, particularly since some of the “old rules” (app servers,
transactions, etc) seem to be fading fast. But it’s not a traditional path we take
to get there, and along the way we find out a little bit about history, mathematics,
and psychology.
</p>
        <p>
Since I’m there for the full week, but don’t have any speaking responsibilities beyond
the keynote and one session on Android Persistence (with Jessica Kerr), I figured
it’d be a good time to reach out to the community and offer up some time for consultation
and meetings and such. We have a <a href="http://www.neudesic.com/codemash" target="_blank">landing
page</a> on the Neudesic website that you can use to set something up. (Worst case,
you can reach me through the usual channels, but I’m just going to point you towards
Kelli Piepkow, who’s coordinating all that, so you’re best off going through the landing
page. Besides, we’re giving away what sounds to be a pretty nice digital camera as
part of the whole thing—don’t miss that.) So if you’ve got some technical questions
(“What is MongoDB good for?” “How does Ruby/Rails stack up against ASP.NET MVC?” or
things of that nature), or if you’re interested in finding out about getting us to
do some work for you, let’s set something up.
</p>
        <p>
And, of course, if you’re planning to be at CodeMash, remember that it’s being held
at the (newly expanded!) Kalahari Resort, which includes an indoor waterslide park,
so bring your swimsuit.
</p>
        <p>
Hmm…. Maybe we can schedule some of those meetings in the Wave Cove.
</p>
        <p>
See you there!
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=e7e92ddf-87d0-403b-89c3-b1c023261a85" />
        <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>Changes, changes, changes</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2011/12/27/Changes+Changes+Changes.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,405026de-b27a-4308-bf42-66d1b1319540.aspx</id>
    <published>2011-12-27T13:53:14.7364860-08:00</published>
    <updated>2011-12-27T13:53:14.7364860-08:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="Android" label="Android" scheme="http://blogs.tedneward.com/CategoryView,category,Android.aspx" />
    <category term="Azure" label="Azure" scheme="http://blogs.tedneward.com/CategoryView,category,Azure.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="Development Processes" label="Development Processes" scheme="http://blogs.tedneward.com/CategoryView,category,Development%2BProcesses.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="iPhone" label="iPhone" scheme="http://blogs.tedneward.com/CategoryView,category,iPhone.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="Personal" label="Personal" scheme="http://blogs.tedneward.com/CategoryView,category,Personal.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="Security" label="Security" scheme="http://blogs.tedneward.com/CategoryView,category,Security.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="WCF" label="WCF" scheme="http://blogs.tedneward.com/CategoryView,category,WCF.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>
Many of you have undoubtedly noticed that my blogging has dropped off precipitously
over the last half-year. The reason for that is multifold, ranging from the usual
“I just don’t seem to have the time for it” rationale, up through the realization
that I have a couple of regular (paid) columns (one with CoDe Magazine, one with MSDN)
that consume a lot of my ideas that would otherwise go into the blog.
</p>
        <p>
But most of all, the main reason I’m finding it harder these days to blog is that
as of July of this year, I have joined forces with <a href="http://www.neudesic.com" target="_blank">Neudesic,
LLC</a>, as a full-time employee, working as an Architectural Consultant for them.
</p>
        <p>
Neudesic is a Microsoft partner (as a matter of fact, as I understand it we were Microsoft’s
Partner of the Year not too long ago), with several different technology practices,
including a Mobile practice, a User Experience practice, a Connected Systems practice,
and a Custom Application Development practice, among others. The company is (as of
this writing) about 400 consultants strong, with a number of Microsoft MVPs and Regional
Directors on staff, including a personal friend of mine, Simon Guest, who heads up
the Mobile Practice, and another friend, Rick Garibay, who is the Practice Director
for Connected Systems. And that doesn’t include the other friends I have within the
company, as well as the people within the company who are quickly becoming new friends.
I’m even more tickled that I was instrumental in bringing Steven “Doc” List in, to
bring his agile experience and perspective to our projects nationwide. (Plus I just
like working with Doc.)
</p>
        <p>
It’s been a great partnership so far: they ask me to continue doing the speaking and
writing that I love to do, bringing fame and glory (I hope!) to the Neudesic name,
and in turn I get to jump in on a variety of different projects as an architect and
mentor. The people I’m working with are great, top-notch technology experts and just
some of the nicest people I’ve met. Plus, yes, it’s nice to draw a regular bimonthly
paycheck and benefits after being an independent for a decade or so.
</p>
        <p>
The fact that they’re principally a .NET shop may lead some to conclude that this
is my farewell letter to the Java community, but in fact the opposite is the case.
I’m actively engaged with our Mobile practice around Android (and iOS) development,
and I’m subtly and covertly (sssh! Don’t tell the partners!) trying to subvert the
company into expanding our technology practices into the Java (and Ruby/Rails) space.
</p>
        <p>
With the coming new year, I think one of my upcoming responsibilities will be to blog
more, so don’t be too surprised if you start to see more activity on a more regular
basis here. But in the meantime, I’m working on my end-of-year predictions and retrospective,
so keep an eye out for that in the next few days.
</p>
        <p>
(Oh, and that link that appears across the bottom of my blog posts? Someday I’m going
to remember how to change the text for that in the blog engine and modify it to read
something more Neudesic-centric. But for now, it’ll work.)
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=405026de-b27a-4308-bf42-66d1b1319540" />
        <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>Rest In Peace, Mr Ritchie</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2011/10/14/Rest+In+Peace+Mr+Ritchie.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,3824e631-cf05-4c75-a8a5-d5c2890754f2.aspx</id>
    <published>2011-10-13T23:28:22.3864276-07:00</published>
    <updated>2011-10-13T23:28:22.3864276-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="iPhone" label="iPhone" scheme="http://blogs.tedneward.com/CategoryView,category,iPhone.aspx" />
    <category term="Java/J2EE" label="Java/J2EE" scheme="http://blogs.tedneward.com/CategoryView,category,Java%2fJ2EE.aspx" />
    <category term="LLVM" label="LLVM" scheme="http://blogs.tedneward.com/CategoryView,category,LLVM.aspx" />
    <category term="Objective-C" label="Objective-C" scheme="http://blogs.tedneward.com/CategoryView,category,Objective-C.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
As so many of you know by now, Dennis Ritchie passed away yesterday. For so many of
you, he needs no introduction or explanation. But sometimes my family reads this blog,
and it is a fact that while they know who Steve Jobs was, they have no idea who Dennis
Ritchie was or why so many geeks mourn his passing.
</p>
        <p>
And that is sad to me.
</p>
        <p>
I don’t feel up to the task of eulogizing a man of Ritchie’s accomplishments properly
right now; in fact, I don’t know that I ever will. But let it be said right now: in
the end, though his contributions were far less recognized, it was Ritchie that provided
the greater contribution to our world than Jobs did. IMHO.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=3824e631-cf05-4c75-a8a5-d5c2890754f2" />
        <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>God speed, Mr. Jobs</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2011/10/06/God+Speed+Mr+Jobs.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,6da53b68-a4f4-42d4-b8c9-0ad38e02ac49.aspx</id>
    <published>2011-10-05T23:58:41.5968250-07:00</published>
    <updated>2011-10-05T23:58:41.5968250-07:00</updated>
    <category term="Personal" label="Personal" scheme="http://blogs.tedneward.com/CategoryView,category,Personal.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I received the news that Steve Jobs passed away today while packing my kit to fly
down to LA tomorrow morning to attend the funeral of my step-grandmother (my father’s
stepmother), Ruth Neward.
</p>
        <p>
The reason I mention this is that Grandma Ruth is and will always be linked to the
man she married, my father’s father and the man for whom I was named, Theodore Chester
Neward, who died a few years ago after a short battle with cancer. Pancreatic cancer,
if I’m not mistaken, the same disease that brought Steve Jobs down. Grandma Ruth lived
for Grandpa Ted—she was his support structure, his moral backing, and his faithful
companion all throughout the years that I knew them.
</p>
        <p>
My grandfather, like Mr Jobs, was an inventor. He invented several devices that, while
bringing nowhere near the kind of income or world-changing impact that Mr Jobs’ devices
brought, still changed the world just a little. His principal invention was a handheld,
hand-operated vacuum pump that he called the “Mityvac”, to which the Neward Enterprises,
Inc marketing department added the tagline, “It’s a useful little sucker!” because
of its versatility. It had uses across a broad spectrum of industries, from automobile
repair and maintenance (as a one-man brake bleeding kit) to medical emergency use
(as an anti-choking device, one which then-Governor Reagan carried with him during
state dinners, in case Nancy started to choke, which she apparently was prone to do),
to pediatric use (as a replacement for forceps to deliver a child—pop a small cap
on the baby’s head, draw a small vacuum, and the doctor now has a “handle” to help
pull the baby out of the birth canal). Though the Mityvac (and the anti-choking “Throat-E-Vac”)
will never reach the levels of world-shattering dominance that the iOS and MacOS devices
will, there is a good chance that many of the readers of this blog (if they are under
the age of 25) were in fact touched by this device in the very first few minutes of
their lives, and don’t have the “conehead” shape to their head (that forceps inflict
on newborns) to prove it.
</p>
        <p>
My grandfather, like Mr. Jobs, never stopped inventing things. To his grave, he was
still “tinkering” in the shop, working on a more efficient carbeurator for gasoline
engines. And his was the only indoor pool in Banks, Oregon, that not only was a full-length
Olympic-size pool, but also was heated by a wood-fire steam-powered system of his
own design. In a frighteningly good demonstration of the dangers of custom-built systems,
the only documentation to go along with it are the strange markings on the wall and
pipes that probably meant something to him, but to the rest of us, is pure gibberish.
(Note to self: get a photo of that before they replace it with something boring and
standard.)
</p>
        <p>
Unlike Mr, Jobs, my grandfather never really understood what it is I did. When the
volume on his TV was too loud on turning it on, he was told that “that’s just how
TV’s work—they remember the volume from before you turned it off”, and he turned to
my father and said, “You should get Teddy to work on that”.
</p>
        <p>
I was always “Teddy” to him, and to Grandma Ruth, and to this day they are the only
people in the world I allowed to call me that. Now they are both gone, and I will
miss them terribly.
</p>
        <p>
My grandfather built an amazing legacy in the plastics industry. In many ways, I hope
I leave even a tenth as amazing a legacy within my own. You, readers, will have to
be the judge of that.
</p>
        <p>
To the family of Steve Jobs, and all of his friends and associates at Apple, I grieve
with you.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=6da53b68-a4f4-42d4-b8c9-0ad38e02ac49" />
        <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 communities, companies, and bugs (Or, &amp;ldquo;Dr Dobbs Journal is a slut!&amp;rdquo;</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2011/08/04/Of+Communities+Companies+And+Bugs+Or+LdquoDr+Dobbs+Journal+Is+A+Slutrdquo.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,2f4d9bcf-dd16-4bc7-84a7-8277350ca994.aspx</id>
    <published>2011-08-04T13:45:02.4065687-07:00</published>
    <updated>2011-08-04T13:45:02.4065687-07:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Andrew Binstock (Editor-in-Chief at DDJ) <a href="http://www.drdobbs.com/java/231300060#" target="_blank">has
taken a shot at Oracle’s Java7 release</a>, and I found myself feeling a need to respond.
</p>
        <p>
In his article, Andrew notes that
</p>
        <blockquote>
          <p>
… what really turned up the heat was Oracle's decision to ship the compiler aware
that the known defects would cause one of two types of errors: hang the program or
silently generate incorrect results. Given that Java 7 took five years to see light,
it seems to me and many others that Oracle could have waited a bit longer to fix the
bug before releasing the software. To a large extent, there is a feeling in the Java
community that Oracle does not understand Java (despite the company's earlier acquisition
of BEA). That may or may not be, but I would have expected it to understand enterprise
software enough not to ship a compiler with defects that hang a valid program.
</p>
        </blockquote>
        <p>
There’s so many things in this paragraph alone I want to respond to, I feel it necessary
to deconstruct it and respond individually:
</p>
        <ul>
          <li>
“Oracle’s decision to ship the compiler aware that the known defects…” According to
the <a href="http://www.lucidimagination.com/blog/2011/07/28/dont-use-java-7-for-anything/" target="_blank">post
that went out to the Apache Solr mailing list</a> (seen quoted in a blog post), “These
problems were detected only 5 days before the official Java 7 release, so Oracle had
no time to fix those bugs… .” I’m sorry, folks, but five days before the release is
not a “known defect”. It’s a late-breaking bug. This is yellow journalism, if you
ask me.</li>
          <li>
“Given that Java 7 took five years to see light…” Much of that time being the open-sourcing
of the JDK itself (1.5 years) and the Oracle acquisition (1.5 years), plus the community’s
wrangling over closures that Sun couldn’t find a way to bring consensus around. Remember
when they stood on the stage at Devoxx one year and promised “no closures” only to
turn around the year following at the same conference and said, “Yes closures”? Sun'
had a history of flip-flopping on commitments worse than a room full of politicians.
Slapping Oracle with the implicit “you had all this time and you wasted it” argument
is just unfair.</li>
          <li>
“… it seems to me and many others that Oracle could have waited a bit longer to fix
the bug before releasing the software.” First of all, what “many others”? Remember
when Sun proposed the “Java7 now with less features vs Java7 later with more features”
question? Overwhelmingly, everybody voted for now, citing “It’s been so long already,
just ship *something*” as a reason. If Oracle slipped the date, the howls would still
be echoing across the hills and valleys, and Andrew would be writing, “If Oracle commits
to a date, they really should stick with this date…” But secondly, remember, the bug
was noticed five days before the release. Those of you who’ve never seen a bug show
up during a production deployment roll out, please cover your eyes. The rest of you
know good and well that sometimes trying to abort a rollout like that mid-stream causes
far more damage than just leaving the bug in place. Particularly if there’s a workaround.
(Which there is, by the way.)</li>
          <li>
“To a large extent, there is a feeling in the Java community that Oracle does not
understand Java.” Hmm. Not surprising, really, when pundits continually hammer away
how Oracle doesn’t get Java and doesn’t understand that everything should be given
away for free and when people bitch and complain you should immediately buy them all
ponies and promise that they’ll never do anything wrong again…. Seriously? Oracle
doesn’t understand Java? Or is it that Oracle refuses to play the same bullshit game
that Sun played? Let’s see, what is Sun’s stock price these days? Oh, right.</li>
          <li>
“I would have expected it to understand enterprise software enough…” And frankly,
I would have expected an editor to understand journalism enough to at least attempt
a fair and unbiased story. It’s disappointing, really. Andrew has struck me as a pretty
nice and intelligent guy (we’ve chatted over email), but this piece clearly falls
way short on a number of levels.</li>
          <li>
“… not to ship a compiler with defects that hang a valid program.” Let’s get to the
next paragraph to get into this one.</li>
        </ul>
        <p>
Andrew’s next paragraph reveals some disturbing analysis:
</p>
        <blockquote>
          <p>
The problem, from what is known so far, derives from a command-line optimization switch
on the Java compiler. This switch incorrectly optimized loops, resulting in the various
reported errors. In Java 7, this switch is on by default, while it was off by default
in previous releases. Regardless of the state of the switch, the resulting optimizations
were not tested sufficiently.
</p>
          <p>
This is a curious problem, because compilers are one of the most demonstrably easy
products to test. Text file, easily parsed binary file out. Or earlier in the compilation
process: text file in, AST out. The easy generation of input and the simple validation
of output make it possible to create literally tens of thousands of regression tests
that can explore every detail of the generated code in an automated fashion. These
tests are known to be especially important in the case of optimizations because defects
in optimized code are far more difficult for developers to locate and identify. The
implicit contract by the compiler is that going from debug code during development
to optimized code for release does not change functionality. Consequently, optimizations
must be tested extra carefully.
</p>
        </blockquote>
        <p>
Actually, no, the problem, according once again to the <a href="http://www.lucidimagination.com/blog/2011/07/28/dont-use-java-7-for-anything/" target="_blank">Solr
mailing list entry</a>, is with the hotspot compiler, not with the compiler itself.
Andrew demonstrates a shocking lack of comprehension with this explanation: JIT compilation
is nothing like traditional compilation (unless you hyperfocus on the optimization
phases of the traditional compiler toolchain), and often has nothing to do with ASTs
and so forth. In short, Andrew saw “compiler” and basically leapt to conclusions.
It’s a sin of which I’m guilty of as well, but damn, somebody should have caught this
somewhere along the way, including Andrew himself—like maybe contacting Oracle and
asking them to explain the problem and offer an explanation?
</p>
        <p>
Nah, it’s much better (and gets DDJ a lot more hits) if we leave it the way it’s written.
Sensationalism sells. Hence my title.
</p>
        <p>
And, it turns out, if they’re optimizations in the JITter, they can be disabled:
</p>
        <blockquote>
          <p>
At least disable loop optimizations using the -XX:-UseLoopPredicate JVM option to
not risk index corruptions.
</p>
          <p>
Please note: Also Java 6 users are affected, if they use one of those JVM options,
which are not enabled by default: -XX:+OptimizeStringConcat or -XX:+AggressiveOpts
</p>
        </blockquote>
        <p>
Oh, did we mention? It turns out these optimizations have been there in Java 6 as
well, so apparently not only is Oracle an idiot for not finding these bugs before
now, but so is the entire Java ecosystem. (It seems these bugs only appear now because
the optimizations are turned on by default now, instead of turned off.)
</p>
        <p>
Andrew continues:
</p>
        <blockquote>
          <p>
But even if Oracle's in-house testing was not complete, I have to wonder why they
were not testing the code on some of the large open-source codebases currently available.
One program that reported the fatal bug was <a href="http://drdobbs.com/open-source/228901650">Apache
Solr</a>, which most developers would agree is a high profile, open source project.
Projects such as Solr provide almost ideal test beds: a large code base that is widely
used. Certainly, Oracle might not cotton to writing UATs and other tests to validate
what the compiler did with the Solr code. But, in fact, it didn’t have to write a
test at all. It simply needed to run the package and the SIGSEGV segmentation fault
would occur.
</p>
        </blockquote>
        <p>
Oh, right. With the acquisition of Sun, Oracle also inherited a responsibility to
test their software against every open-source software package known to man. Those
people working on those projects have no responsibility to test it themselves, it’s
all Oracle’s fault if it all doesn’t work right out of the box. Particularly with
fast-moving source bases like those seen in open-source projects. Hmm.
</p>
        <blockquote>
          <p>
I have to hope that this event will be a sharp lesson to Oracle to begin using the
large codebases at its disposal as a fruitful proving ground for its tools. While
the sloppiness I've discussed is disturbing, it's made worse by the fact that the
same defects can be found in Java 6. The reason they suddenly show up now is that
the optimization switch is off by default on Java 6, while on in Java 7. This suggests
that Sun's testing was no better than Oracle's. (And given that much of the JDK team
at Oracle is the same team that was at Sun, this is no surprise.) The crucial difference
is that Oracle knew about the bugs prior to release and went ahead with the release
anyway, while there is no evidence Sun was aware of the problems.
</p>
        </blockquote>
        <p>
I have to hope that this even won’t be a sharp lesson to Oracle that the community
is basically made up of a bunch of whiny bitches who complain when a workaroundable
bug shows up in their products. Frankly, I would.
</p>
        <p>
Did we mention that all of this was done on an open-source project? At any point anyone
can grab the source, build it, and test it for themselves. So, Andrew, are you volunteering
to run every build against every open-source project out there? After all, if this
is a “community”, then you should be willing to donate all of your time for the community’s
benefit, right? Where are the hordes of developers willing to volunteer and donate
their time to working on the JDK itself? You’re all quite ready to throw rocks at
Oracle (and before that, Sun), but how many of you are willing to put down the rock,
pick up a hammer, and start working to build it better?
</p>
        <p>
Yeah, I kind of thought so.
</p>
        <blockquote>
          <p>
Oracle's decision was political, not technical. And here Oracle needs to really reassess
its commitment to its users. Is Java a sufficiently important enterprise technology
that shipping showstopper bugs will no longer be permitted? The long-term future of
Java, the language, hangs in the balance.
</p>
        </blockquote>
        <p>
Unless you were in the room when they made the decision, Andrew, you’re basically
blowing hot air out your ass, and it smells about as good as when anyone else does.
This is a blatantly stupid thing to say, and quite frankly, if Oracle refuses to talk
to you ever again, I‘d say they were back to making good decisions. You can’t responsibly
declare what the rationale for a decision was unless you were in the room when it
was made, and sometimes not even then.
</p>
        <p>
Worse than that, the Solr mailing list entry even points out that Oracle acknowledged
the fix, and discussed with the community (the Solr maintainers, in this case, it
seems) when and how the fix could come out:
</p>
        <blockquote>
          <p>
In response to our questions, they proposed to include the fixes into service release
u2 (eventually into service release u1, see [6]).
</p>
        </blockquote>
        <p>
Wow. Oracle actually responded to the bug and discussed when the fix would come out.
Clearly they are unengaged with the community and don’t “get” Java.
</p>
        <p>
Maybe I should rename this blog’s title to “Sloppy Work at Dr Dobb’s Journal”.
</p>
        <p>
Nah. Sensationalism sells better. Even when it turns out to be completely unfounded.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=2f4d9bcf-dd16-4bc7-84a7-8277350ca994" />
        <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>&amp;ldquo;Vietnam&amp;rdquo; in Belorussian</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2011/05/27/ldquoVietnamrdquo+In+Belorussian.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,ba58417f-be48-4c13-8a96-cbf1b7f96954.aspx</id>
    <published>2011-05-27T00:01:45.9737568-07:00</published>
    <updated>2011-05-27T00:01:45.9737568-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="Azure" label="Azure" scheme="http://blogs.tedneward.com/CategoryView,category,Azure.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="Industry" label="Industry" scheme="http://blogs.tedneward.com/CategoryView,category,Industry.aspx" />
    <category term="iPhone" label="iPhone" scheme="http://blogs.tedneward.com/CategoryView,category,iPhone.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="Objective-C" label="Objective-C" scheme="http://blogs.tedneward.com/CategoryView,category,Objective-C.aspx" />
    <category term="Parrot" label="Parrot" scheme="http://blogs.tedneward.com/CategoryView,category,Parrot.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="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="Solaris" label="Solaris" scheme="http://blogs.tedneward.com/CategoryView,category,Solaris.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>
Recently I got an email from Bohdan Zograf, who offered:
</p>
        <blockquote>
          <p>
Hi!
</p>
          <p>
I'm willing to translate publication located at <a href="http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx">http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx</a> to
the Belorussian language (my mother tongue). What I'm asking for is your written permission,
so you don't mind after I'll post the translation to my blog.
</p>
        </blockquote>
        <p>
I agreed, and next thing I know, I get the next email that it’s done. If your mother
tongue is Belorussian, then I invite you to read the article in its translated form
at <a href="http://www.moneyaisle.com/worldwide/the-vietnam-of-computer-science-be">http://www.moneyaisle.com/worldwide/the-vietnam-of-computer-science-be</a>.
</p>
        <p>
Thanks, Bohdan!
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=ba58417f-be48-4c13-8a96-cbf1b7f96954" />
        <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>Managing Talks: An F#/Office Love Story (Part 1)</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2011/04/27/Managing+Talks+An+FOffice+Love+Story+Part+1.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,427bbfdd-c568-458c-b7e7-6a056076b2cc.aspx</id>
    <published>2011-04-26T23:15:13.2769304-07:00</published>
    <updated>2011-04-26T23:16:55.9162416-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="Conferences" label="Conferences" scheme="http://blogs.tedneward.com/CategoryView,category,Conferences.aspx" />
    <category term="Development Processes" label="Development Processes" scheme="http://blogs.tedneward.com/CategoryView,category,Development%2BProcesses.aspx" />
    <category term="F#" label="F#" scheme="http://blogs.tedneward.com/CategoryView,category,F%23.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>
Those of you who’ve seen me present at conferences probably won’t be surprised by
this, but I do a lot of conference talks. In fact, I’m doing an average of 10 or so
talks at the NFJS shows alone. When you combine that with all the talks I’ve done
over the past decade, it’s reached a point where maintaining them all has begun to
approach the unmanageable. For example, when the publication of <em>Professional F#
2.0</em> went final, I found myself going through slide decks trying to update all
the “Credentials” slides to reflect the new publication date (and title, since it
changed to <em>Professional F# 2.0</em> fairly late in the game), and frankly, it’s
becoming something of a pain in the ass. I figured, in the grand traditions of “itch-scratching”,
to try and solve it.
</p>
        <p>
Since (as many past attendees will tell you) my slides are generally not the focus
of my presentations, I realized that my slide-building needs are pretty modest. In
particular, I want:
</p>
        <ul>
          <li>
a fairly easy mechanism for doing text, including bulleted and non-bulleted (yet still
indented) lists 
</li>
          <li>
a “section header” scheme that allows me to put a slide in place that marks a new
section of slides 
</li>
          <li>
some simple metadata, from which I can generate a “list of all my talks” page, such
as what’s behind the listing at <a href="http://www.tedneward.com/speaking.aspx">http://www.tedneward.com/speaking.aspx</a>.
(Note that I realize it’s a pain in the *ss to read through them all; a later upgrade
to the site is going to add a categorization/filter feature to the HTML, probably
using jQuery or something.) 
</li>
        </ul>
        <p>
So far, this is pretty simple stuff. For reasons of easy parsing, I want to start
with an XML format, but keep the verbosity to a minimum; in other words, I’m OK with
XML so long as it merely reflects the structure of the slide deck, and doesn’t create
a significant overhead in creating the text for the slides.
</p>
        <p>
And note that I’m deliberately targeting PowerPoint with this tool, since that’s what
I use, but there’s nothing offhand that prevents somebody from writing a tool to drive
Apple’s Keynote (presumably using Applescript and/or Apple events) or OpenOffice (using
their Java SDK). Because the conferences I speak to are all more or less OK with PowerPoint
(or PDF, which is easy to generate from PPT) format, that’s what I’m using. (If you
feel like I’m somehow cheating you by not supporting either of the other two, consider
this a challenge to generate something similar for either or both. But I feel no such
challenge, so don’t be looking at me any time soon.)
</p>
        <p>
(OK, I admit it, I may get around to it someday. But not any time soon.)
</p>
        <p>
(Seriously.)
</p>
        <p>
As a first cut, I want to work from a format like the following:
</p>
        <pre>&lt;presentation xmlns:xi="http://www.w3.org/2003/XInclude"&gt;
  &lt;head&gt;
    &lt;title&gt;Busy Java Developer's Guide|to Android:Basics&lt;/title&gt;
    &lt;abstract&gt;
This is the abstract for a sample talk.

This is the second paragraph for an abstract.
    &lt;/abstract&gt;
    &lt;audience&gt;For any intermediate Java (2 or more years) audience&lt;/audience&gt;
  &lt;/head&gt;

  &lt;xi:include href="Testing/external-1.xml" parse="xml" /&gt;

  &lt;!-- Test bullets --&gt;
  &lt;slide title="Concepts"&gt;
    * Activities
    * Intents
    * Services
    * Content Providers
  &lt;/slide&gt;
  &lt;!-- Test up to three- four- and five-level nesting --&gt;
  &lt;slide title="Tools"&gt;
    * Android tooling consists of:
    ** JDK 1.6.latest
    ** Android SDK
    *** Android SDK installer/updater
    **** Android libraries &amp; documentation (versioned)
    ***** Android emulator
    ***** ADB
    ** an Android device (optional, sort of)
    ** IDE w/Android plugins (optional)
    *** Eclipse is the oldest; I don’t particularly care for it
    *** IDEA 10 rocks; Community Edition is free
    *** Even NetBeans has an Android plugin
  &lt;/slide&gt;

  &lt;!-- Test bulletless indents --&gt;
  &lt;slide title="Objectives"&gt;
    My job...
    - ... is to test this tool
    -- ... is to show you enough Android to make you dangerous
    --- ... because I can't exhaustively cover the entire platform in just one conference session
    ---- ... I will show you the (barebones) tools
    ----- ... I will show you some basics
  &lt;/slide&gt;

  &lt;!-- Test section header --&gt;
  &lt;section title="Getting Dirty" 
      quote="In theory, there's no difference|between theory and practice.|In practice, however..." 
      attribution="Yogi Berra" /&gt;
&lt;/presentation&gt;</pre>
        <p>
You’ll notice the XInclude namespace declaration in the top-level element; its purpose
there is pretty straightforward, demonstrated in the “credentials” slide a few lines
later, so that not only can I modify the “credentials” slide that appears in all my
decks, but also do a bit of slide-deck reuse, using slides to describe concepts that
apply to multiple decks (like a set of slides describing functional concepts for talks
on F#, Scala,Clojure or others). Given that it’s (mostly) an XML document, it’s not
that hard to imagine the XML parsing parts of it. We’ll look at that later.
</p>
        <p>
The interesting part of this is the other part of this, the PowerPoint automation
used to drive the generation of the slides. Like all .NET languages, F# can drive
Office just as easily as C# can. Thus, it’s actually pretty reasonable to imagine
a simple F# driver that opens the XML file, parses it, and uses what it finds there
to drive the creation of slides.
</p>
        <p>
But before I immediately dive into creating slides, one of the things I want my slide
decks to have is a common look-and-feel to them; in some cases, PowerPoint gurus will
start talking about “themes”, but I’ve found it vastly easier to simply start from
an empty PPT deck that has some “slide masters” set up with the layouts, fonts, colors,
and so on, that I want. This approach will be no different: I want a class that will
open a “template” PPT, modify the heck out of it, and save it as the new PPT.
</p>
        <p>
Thus, one of the first places to start is with an F# type that does this precise workflow:
</p>
        <pre>type PPTGenerator(inputPPTFilename : string) =
    
    let app = ApplicationClass(Visible = MsoTriState.msoTrue, DisplayAlerts = PpAlertLevel.ppAlertsAll)
    let pres = app.Presentations.Open(inputPPTFilename)

    member this.Title(title : string) : unit =
        let workingTitle = title.Replace("|", "\n")
        let slides = pres.Slides
        let slide = slides.Add(1, PpSlideLayout.ppLayoutTitle)
        slide.Layout &lt;- PpSlideLayout.ppLayoutTitle
        let textRange = slide.Shapes.Item(1).TextFrame.TextRange
        textRange.Text &lt;- workingTitle
        textRange.Font.Size &lt;- 30.0f
        let infoRng = slide.Shapes.Item(2).TextFrame.TextRange
        infoRng.Text &lt;- "\rTed Neward\rNeward &amp; Associates\rhttp://www.tedneward.com | ted@tedneward.com"
        infoRng.Font.Size &lt;- 20.0f
        let copyright =
            "Copyright (c) " + System.DateTime.Now.Year.ToString() + " Neward &amp; Associates. All rights reserved.\r" +
            "This presentation is intended for informational use only."
        pres.HandoutMaster.HeadersFooters.Header.Text &lt;- "Neward &amp; Associates"
        pres.HandoutMaster.HeadersFooters.Footer.Text &lt;- copyright</pre>
        <p>
The class isn’t done, obviously, but it gives a basic feel to what’s happening here:
app and pres are members used to represent the PowerPoint application itself, and
the presentation I’m modifying, respectively. Notice the use of F#’s ability to modify
properties as part of the new() call when creating an instance of app; this is so
that I can watch the slides being generated (which is useful for debugging, plus I’ll
want to look them over during generation, just as a sanity-check, before saving the
results).
</p>
        <p>
The Title() method is used to do exactly what its name implies: generate a title slide,
using the built-in slide master for that purpose. This is probably the part that functional
purists are going to go ballistic over—clearly I’m using tons of mutable property
references, rather than a more functional transformation, but to be honest, this is
just how Office works. It was either this, or try generating PPTX files (which are
intrinsically XML) by hand, and thank you, no, I’m not <em>that</em> zealous about
functional purity that I’m going to sign up for that gig.
</p>
        <p>
One thing that was a royal pain to figure out: the block of text (infoRng) is a single
TextRange, but to control the formatting a little, I wanted to make sure the three
lines were line-breaks in just the right places. I tried doing multiple TextRanges,
but that became a problem when working with bulleted lists. After much, much frustration,
I finally discovered that PowerPoint really wants you to embed “\r” carriage-return-line-feeds
into the text directly.
</p>
        <p>
You’ll also notice that I use the “|” character in the raw title to embed a line break
as well; this is because I frequently use long titles like “The Busy .NET Developer’s
Guide to Underwater Basketweaving.NET”, and want to break the title right after “Guide”.
Other than that, it’s fairly easy to see what’s going on here—two TextRanges, corresponding
to the yellow center right-justified section and the white bottom center-justified
section, each of which is set to a particular font size (which must be specified in
float32 values) and text, and we’re good.
</p>
        <p>
(To be honest, this particular method could be replaced by a different mechanism I’m
going to show later, but this gives a feel for what driving the PowerPoint model looks
like.)
</p>
        <p>
Let’s drive what we’ve got so far, using a simple main:
</p>
        <pre>let main (args : string array) : unit =
    let pptg = new PPTGenerator("C:\Projects\Presentations\Templates\__Template.ppt")
    pptg.Title("Howdy, PowerPoint!")
    ()
main(System.Environment.GetCommandLineArgs())</pre>
        <p>
When run, this is what the slide (using my template, though any base PowerPoint template
*should* work) looks like:
</p>
        <p>
          <a href="http://blogs.tedneward.com/content/binary/Windows-Live-Writer/Managing-Talks-An-FOffice-Love-Story_12849/image_2.png">
            <img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.tedneward.com/content/binary/Windows-Live-Writer/Managing-Talks-An-FOffice-Love-Story_12849/image_thumb.png" width="244" height="186" />
          </a>
        </p>
        <p>
Not bad, for a first pass.
</p>
        <p>
I’ll go over more of it as I build out more of it (actually, truth be told, much more
of it is already built out, but I want to show it in manageable chunks), but as a
highlight, here’s some of the features I either have now or I’m going to implement:
</p>
        <ul>
          <li>
as mentioned, XIncluding from other XML sources to allow for reusable sections. I
have this already.</li>
          <li>
“code slides”: slides with code fragments on them. Ideally, the font will be color
syntax highlighted according to the language, but that’s way down the road. Also ideally,
the code would be sucked in from compilable source files, so that I could make sure
the code compiles before embedding it on the page, but that’s also way down the road,
too.</li>
          <li>
markup formats supporting *bold*, _underline_ and ^italic^ inline text. If I don’t
get here, it won’t be the end of the world, but it’d be nice.</li>
          <li>
the ability to “import” an existing set of slides (in PPT format) into this presentation.
This is my “escape hatch”, to get to functionality that I don’t use often enough that
I want to try and capture it in text files yet still want to use. I have this already,
too.</li>
        </ul>
        <p>
I’m not advocating this as a generalized replacement of PowerPoint, by the way, which
is why importing existing slides is so critical: for anything that’s outside of the
20% of the core functionality I need (animations and/or very particular layout come
to mind), I’ll just write a slide in PowerPoint and import it directly into the results.
The goal here is to make it ridiculously easy to whip a slide deck up and reuse existing
material as I desire, without going too far and trying to solve that last mile.
</p>
        <p>
And if you find it inspirational or useful, well… cool.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=427bbfdd-c568-458c-b7e7-6a056076b2cc" />
        <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>Multiparadigmatic C#</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2011/02/10/Multiparadigmatic+C.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,d9f4482d-aa05-4fdc-a9c7-a797b7ec627a.aspx</id>
    <published>2011-02-09T16:09:15.7779250-08:00</published>
    <updated>2011-02-09T16:09:15.7779250-08: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="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="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="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Back in June of last year, at TechEd 2010, the guys at <a href="http://deepfriedbytes.com" target="_blank">DeepFriedBytes</a> were
kind enough to offer me a podcasting stage from which to explain exactly what “multiparadigmatic”
meant, why I’d felt the need to turn it into a full-day tutorial at TechEd, and more
importantly, why .NET developers needed to know not only what it meant but how it
influences software design. They published that show, and it’s now out there for all
the world to <a href="http://deepfriedbytes.com/podcast/episode-63-multiparadigmatic-c-with-ted-neward/">have
a listen</a>.
</p>
        <p>
For those of you who didn’t catch the tutorial pre-con at TechEd, by the way, I’ve
since had the opportunity to write about it as a series in MSDN magazine as part of
my “Working Programmer” column. First piece is from the <a href="http://msdn.microsoft.com/en-us/magazine/ff955611.aspx" target="_blank">September
2010 issue</a>, and continues through this year’s articles (I’ve got one or two more
yet to write, so it’ll probably turn out to be about 12 pieces in total).
</p>
        <p>
To those hanging out in the JVM-based world, there’s still a lot to be gleaned from
the discussion, particularly if you’re using one of the “alternative” languages on
the JVM (a la Groovy or Scala), so have a listen.
</p>
        <p>
On the subject of good timing, there’s a section in there in which I describe the
#ChezNeward party during the MVP Summit, and the work that “my three wives” go through
to pull it off. Required listening if you’re looking to get in this year. ;-)
</p>
        <p>
And yes, multiparadigmatic is a word, and yes, it <em>is</em> the longest word I’ve
ever used in a talk title. :-)
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=d9f4482d-aa05-4fdc-a9c7-a797b7ec627a" />
        <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>
