Thursday, May 29, 2008

Higher Energy Prices == More Value in Software, Bandwidth

I got to see Arthur Rosenfeld speak at UC Berkeley's Physics Dept. graduation last week, when my younger brother finished up there as an undergrad. Dr. Rosenfeld's lab and LBNL worked in both research and policy, producing technical advancements in energy efficiency focusing on physical buildings.

His talk got me thinking that not only can information processing produce efficiencies ... but actually that higher energy costs may also be a boon to all manner of information processing and software applications, because it increases the general (relative) value both of processing and of bandwidth (and associated infrastructure).

The gains apply not only to applications directly focused on saving fuel (e.g. logistics systems), but also all of the productivity apps that allow more (or the same) industrial capability with less effort, time, and raw materials. This productivity argument is a standard ROI type argument about information systems. It just takes on a new urgency as forecasts for the energy component in these industrial processes show a bigger number.

Also worth re-examining are the applications which are meant not to make moving physical stuff more efficient -- but to obviate the need completely. The U.S. Mail's logistics capability may make Netflix much more efficient than driving an SUV to Blockbuster ... but BitTorrent makes Netflix look like the stone age. It's no surprise that the easiest thing to move as data is a data-like-object.

The other category is meat-like-objects. Telecommuting and satellite work sites are vastly more usable and useful now than they were even 6 years ago when companies (famously Sun) ditched office space after the dot-com crash.

While issues remain with 100%-offsite work, I believe the era of traveling to the office five days a week for 'info-worker' jobs is pretty much over. Already, I see many companies allowing or encouraging people to work somewhere else part of the week, coming in only 2 or 3 days. That movement can become broader based as the support software and bandwidth improves. In the verticals, the telemedicine model will become more prevalent.

We can also create improvements in industries where the physical world is the point, like grocery stores -- and no, I'm not thinking about stuff like WebVan even if Safeway.com does pretty well, and amazon.com can ship you a year's worth of pasta. I'm thinking that sharing and augmenting data from a store (and its upstream supply chain) can reduce the number of trips people take to the store ... you won't go when they don't have what you're looking for; you'll look at the produce or the microbrews remotely and decide whether to bother; you'll spend less time in the store, which means a smaller (both in business hours and space) site can service the same volume of sales.

But I'm getting too specific: my point is not to envision kooky Internet schemes for avoiding bruised apples. It's that all of the software we have (operating systems, applications), hardware (GPUs, quad-core procs), and bandwidth becomes measurably more valuable as they becomes a viable substitute good for energy. And where we always measured productivity by looking at time-replacement, that time becomes doubly valuable when we are also paying more to heat, cool, light, or motorize the environment where people need to spend that time.

Monday, May 26, 2008

My Brain on Web 3.0: a Killer App for the Semantic Web?

Here's a semantic app I'd really like and which could make the Internet -- and data stores in general -- more valuable. If anyone sees this and thinks it's a great startup idea, you're welcome to develop it.

Right now, a number of semantic analysis engines are being developed, and many are running well in production. Examples include ClearForest, which is related to Reuters Calais.

There are also a bunch of up-and-coming semantic-web apps, like Twine, that add semantic analysis to the extant web 2.0 experience. But while the RDF-enabled-del.icio.us-on-steroids-with-autotagging may be nice -- heck, I'm sure I'll be using one of those systems -- I want something that can carry out the kind of mental associations that I normally would have to do myself.

In order to make that a reality, I'll need several things:

  1. The Model: it works by association, and associations have direction, degree, and kind, among other things. So we need more than just a network. We need a model that implements a metric space or vector space, allowing distances to be computed between any two points with sensible behavior, and where measures (length, volume) can easily and intuitively work.
  2. Concepts (e.g., "politics"), and the places concepts are referenced (say, a political blog page), both live inside this space as subspaces, just like in my brain. Some of these spaces may consist of just one element.
  3. The formulae that support metric need to be fine tuned so that abstract tags ("politics", "justice" as opposed to "Davis, CA" or "bananas") don't suck a million other things to within epsilon of themselves. We can't have everything that linguistically has to do with politics cluster tightly in the space to a politics node, or else the system isn't terribly helpful.
  4. I want the system to start out thinking like me ... and then I can experiment later with "social thinking." What does this mean? My semantic tagging is different from everyone else's. Each group or culture I'm in sees the content differently from other groups and cultures; there is no universal invariant conceptual structure. One persons sees a news story and thinks "economics" while someone else thinks "environment" and another thinks "social justice." If we mush all these tags together we get nothing terribly useful. So: let's start out with my view of the world, we'll compare and integrate others' later.
  5. How to do #4? Start with every web page I visit (not just those I actively tag) -- read my history file or my network traffic (obviously, keep raw data local for now). Read my email and my calendar and my notes and phone (PIM) and my to-do list. And weight accordingly: associations in a web page I write (like this blog post) count more than stuff I browse through; notes I make in my phone or Outlook count for even more; the metadata in my calendar and the titles of my contacts mean a heck of a lot for the model. Walk my social graph and look at what my friends know and are interested in! These are all straightforward algorithmic steps. Leaving aside any self-tuning in the metrics engine, there is no AI or black box here.
  6. The data from #5 is part of the metric function ... that's how the system shapes itself to my view of the world, or at least my "attention waveform" as I transmit that through keystrokes and mouse clicks. Concretely, nodes "move" in the space based on whether I actually key them, whether they appear in meetings in my calendar, whether they are tightly clustered to my personal contacts etc. Even my contacts are arranged based on how long I've known them, what I talk to them about, how often, etc.
  7. The system will make mistakes. So all the more reason for (1) privacy around my core data and (2) a dashboard where I can "juice" certain things or move them around. (This is where interesting goal-oriented self-retuning can come inThere is plenty of other data that can be shared and deduced for network-effect-dependent revenue streams.
  8. A UI into the model. What I'd really like is something brilliant and minimalist (that I can't myself invent!) I know there are lots of desktop-based visualization methods that would be fascinating and could dazzle a crowd at a presentation, but I want something day-to-day useful ... and ideally something that fits on a mobile phone (or at least iPhone) screen. So that in a perfect world, if I'm out and about, I can poke this system with one piece of data and have it return the associations my brain makes -- and the ones it would make if I were jacked up on caffeine and had the whole internet in my frontal lobe somewhere. I'd like maps, charts, and pictures in there too.

I hope this outline makes some sort of sense. Like I said, it's really not as tricky or complex as it sounds. Fine tuning the metrics will take real work, as will optimizing the data structures so that the relevant queries are fast, and so that the system can work in "tinfoil-hat-private-mode" as well as "publish-whatever-you-deduce-from-my-friendfeed-and-private-chats-mode."

Incidentally, this app could also help solve the augmented reality dilemma of "how do you narrow down all the possible info about the input objects and coordinates, so that the user sees something interesting and/or actionable," so that's another angle.

Have some capital or time you want to throw in this direction? Feel free to email me -- adbreind@gmail.com ... or if you want to loot this idea and think you can build a killer app for the semantic web era? That's fine too -- send me a link when I can sign up for the beta.

Thursday, May 22, 2008

Great Article on the True Nature of LINQ in C#

In the early days of C# 3.0, Microsoft distributed a whitepaper which walked through the rationale behind the additions to language, how the language changes related to the syntax options, and what it could be used for.

Among the key applications ... perhaps a co-evolved objective ... for the new constructs was LINQ ... of the to-SQL, to-XML, and over-Objects varieties.

As Visual Studio 2008 and C# 3.0 has moved out into wide use, though, that background has faded away and instead one sees a ton of quick examples and how-tos about LINQ and database operations that give the impression it's all some kind of fancy SQL trick.

Which is why I really liked this article on 7 Tricks to Simplify Your Programs with LINQ.

The only thing I didn't love was the name, because it's not really LINQ that Igor is talking about, it's the awesome functional programming features under the hood ... which happen to enable LINQ.

Igor shows how the underlying extension method and lamba constructs let you do the cool Lisp (ok, Ruby) tricks with C#, and he does it without getting into explaining what all the machinery is or even what it's called. Those explanations are important to be sure, but having these quick (2-3 lines!), powerful examples communicates a lot at first glance to readers who may not want to read about all the CS issues right away.

Furthermore, Igor avoids examples featuring the slightly misleading SQLesque syntactic sugar that can cloud what's really happening... until his last example.

Which is very useful, because the busy developer-on-the-run seeing a LINQ example doesn't realize that the select/from/where stuff are not magic language keywords. They're just an alternate way of saying Foo.Where or Foo.Select. They're just extension methods that happen to be fairly fundamental to working with lists and sets.

Maybe Igor even gets some folks who thought C# had somehow sucked in SQL to realize that, instead, all the time they've been writing complex SQL queries, they've actually been doing that functional programming stuff they've been hearing so much about. And now they can "think the same way" in C#.

Tips: Cable Modem Signal Troubleshooting

I've had a few problems with fluctuating signal levels on my cable modem, which result in losing connectivity for a period of time. If you have a cable modem and the connection has ever been flaky for no apparent reason, you might be able to use a few tips I've picked up.

First, most cable modems have an internal management/monitoring system you can use to see what's going on, and it's conveniently exposed via HTTP so you can look at it with your browser.

This web page has a great collection of information on accessing the modem status and what numbers and error messages to look for. This may sound obvious, but download all of the info before you have an outage unless you have a redundant connection. (Also, don't be scared off by the old dates on the page ... most newer models have the same interfaces, and of course DOCSIS is a standard so it doesn't change year to year).

The modem typically listens on 192.168.100.1. So if you have a router (e.g. a WiFi access point) between your PC and modem, you may need to adjust the subnets or routing, or remove it, because this subnet may be downstream/local/wrong-side-o-the-box for you. If subnets and routing aren't your thing, the easiest alternative is to unhook the router and connect directly to the modem.

With cable modems, it's not just an issue of having a "strong enough" signal -- the signal has to be consistent within a certain band, because the modem determines its uplink transmit power level based on the downstream level it observes. In other words, if the downstream level comes in too strong, then the modem will reduce its upstream power in response, and you can lose connectivity because of that.

If you've had some issues, you see signal fluctuations, and your cable operator doesn't have any reports of problems (their system can remotely observe other people in your area), here are a couple of remediation steps to try:

First, isolate the cable modem on your wiring -- meaning unhook other devices, TVs, DVRs, etc., which might be on your line. Clearly not a long-term solution, but if this makes a difference then you'll have info that will help if and when you do need the cable company to make adjustments.

If that doesn't make a help, follow the cable line (assuming you can get to it) from the modem all the way back to where it comes into your house. Remove any unneeded splitters, barrel connectors, 20m tangles of  coax, etc. To the extent that you do need these parts, they should be ideally be 5GHz capable (marked that way right on the device). If you have older ones that say, e.g., 1000MHz, replace them with newer ones.

Splitters and the like are not normally weatherproofed, and apparently (I have no proper data to support this, but technicians have told me), they show deterioration after a few years of exposure to heat, cold, condensation, etc. in basements and crawlspaces -- enough to cause a high-frequency signal to get flaky. And they can end up producing effects that vary with temperature.

Last, on my line, a technician also chopped out the connectors where the cable company's own line transitions to the house wiring, put new connectors on both sides, and hooked it back together. If you want to make this swap, or replace any of your connectors (as opposed to parts that the connectors attach to, like splitters), you'll need a coax tool for cutting and stripping the wire and then crimping on a new connector.

These primitive coax tricks won't solve all problems (even in my own installation, these changes resolved maybe 85% of the trouble) but they may make a difference and, at the least, they'll remove a bunch of unknowns from your equation.

Monday, May 19, 2008

mod_ndb: Wicked REST for My[Giant]SQL Cluster

I caught a great presentation at CommunityOne a couple of weeks ago, and haven't had a chance to write about it until now.

In a nutshell, mod_ndb is an Apache module which allow a limited set of parametrizable MySQL queries to be automagically exposed as REST services via Apache. There are three things I left out of that sentence for clarity, that make this uber-cool:

  1. The operations actually run against MySQL Cluster, a high-performance, shared-nothing (code for you don't need to manage a SAN and shared filesystem) scale-out system.
  2. In exchange for not having full SQL capability, these services interact with MySQL Cluster using the cluster's native NDB API for maximum performance.
  3. The latest version of MySQL Cluster, 5.1, has significant technical advantages over the earlier but still impressive 4.1 and 5.0. These include the ability to store more data on disk instead of dedicated RAM, and this collection of improvements. (In that doc, where you see references to 'carrier grade edition' note also that, according to the CommunityOne talk, future versions of MySQL Cluster will be on a unified codebase from that carrier grade version.)

I've liked MySQL Cluster since it's debut, and I'm thrilled to see this evolution.

As far as "let's download this right now and set it up," it is true that in the four years or so since that debut, the niche for scale-out clustering has narrowed:

On one hand, machines and storage have continued to get cheaper and faster, with the result that a data set and transaction load that might have a cluster of 2-4 dual-proc servers, and associated hassle, can now be handled by a single server with a couple of fat quad-core Xeons. The single OS and single filesystem simplify things vastly, to the benefit of databases like SQL Server, which have not invested in a scale-out strategy.

On the other hand, applications with a need for super-massive data that can live with some latency and a lightly structured, don't-call-me-relational data model can pay as they go for that scale-out capability with Amazon SimpleDB, Microsoft SSDS, etc.

Still, there is a well-defined middle section for a product like MySQL Cluster (and its arch-nemesis, Oracle RAC):

  • big data sets and/or large-scale OLTP,
  • plus a highly-structured relational data model. (Microsoft has asserted that SSDS will move toward full relational capabilities in the longer-term roadmap, but inasmuch as the initial service is still in beta, I don't count that.)
  • legal or business requirements to keep the data in-house (not in the cloud)

Or you can flip it around the other way: if your app doesn't need a cluster like this (or something similar), what are you really doing, anyway?

Thursday, May 15, 2008

Vista Performance: It Really Is That Bad

I try to stay away from the rant post, it's too easy and doesn't contribute a lot. But I feel myself succumbing, so at least I'll try and mix in a little useful material with my rant.

I just spent some significant time trying get Vista to behave on my wife's laptop. By behave, I mean not make it impossible for her to surf the web with Firefox because the CPU was pegged most of the time and the HDD never spun down.

First, some facts:

  1. I'm as close to a Microsoft fanboy as you'll find in the Bay Area. They do great stuff. I'm an ecumenical kind of guy, so I also so like Ruby and Flex and Java and Linux (wait 'til my next MySQL post). I.e., I'm not married to Microsoft, but I think they have done some amazing engineering in the last 10 years and it's a pleasure to work with almost all of their late-model products.
  2. This machine, while not blazing by 2008 standards is only a few years old, does have a 3 GHz HT proc, multiple gigs of RAM, nVidia graphics, plenty of hard drive space, etc. In fact, it ranks in the 4.x range on Vista's own "performance estimate" in every category except graphics. Which shouldn't matter because Aero Glass is turned off, and my wife isn't a gamer.
  3. Just to cover all the bases, it's plugged in and not configured to ever step down the processor or anything like that to save power. And there's almost no software on it. It's basically Firefox and MS Office, Grisoft/AVG, whatever Windows Update considers critical, and not much else. My wife runs under a non-admin account because she neither wants nor needs to install or configure anything on it.
  4. An early-ish adopter, I was forced to abandon Vista after seeing it run cripplingly slowly on a 3.5 GHz, 5+ rated desktop. As a developer, watching this machine churn while it tries to decide which UAC prompt to throw next wasn't acceptable, since I had XP on the same box (dual-boot) and could measure that XP was easily 25% faster. But the wife liked Vista's look and feel, actually preferred it to XP, so cool, didn't think perf would be a big issue for her.

Ok, so the performance was all gone to heck. I checked all the obvious background tasks that could be going nuts, virus scans, disk indexing and all that. Found a few services and tasks that had caused problems before and disabled all of them. Can't imagine why they're running by default. What ever happened to configuring services to run based on their actually being needed by something the user wants to do?

The killer this particular time was the 'network location awareness service' and the DNS caching service. First, NLA. According to MSDN (full info here), this service is 'vital for computers or devices that might move between different networks.' First, I'm not sure I believe that; so far, the computer seems to work better without it. The little icon (and service) that would take 5 minutes to realize the machine was actually on the Internet (you know the icon) is now dead, and apps connect right away. Funny how that works.

Just for the sake of argument, let's pretend that it really is 'vital for computers moving between different networks.' Here's a clue: (1) it doesn't take much monitoring for the machine to realize it's always on the same network in my house, so (2) shut this stupid service down, (3) if another network is detected or the old one is unavailable, maybe then spin this beast up and (4) monitor your own resource usage -- if the service starts using 50%+ of the CPU all the time, for whatever reason, and the network isn't ever changing, why not shut it the #$% down at that point?

I could make the same argument for DNS cache. Although it boggles the mind how a service this simple could ever be using a real percentage of a modern CPU. I turned it off. I guess Comcast will hate me now for making an extra 25 lookups a day.

I'm not going to get into the argument that there shouldn't be lots of services on the machine -- after all, most of the myriad services have little performance impact and at least in Vista are supposedly less likely to compromise security. Although I would prefer a 'configure to run after deciding it's useful and not harmful' self-management approach.

I just wonder, if a pristine machine like this one, well configured etc., scoring generally 4 in the Vista perf scale, and whose only sin is being 2005 vintage, gets mucked up this badly from such mild use, there are truly some problems with Vista, both for home users and businesses, that are more serious than I would have believed.

Ok, so I promised I'd try and offer a little useful info. Once again, for the sake of SEO

Some possible fixes for Really Bad Perf in a basic Vista machine:

  • go into the task scheduler and get rid of tasks you don't want to run;
  • look at the Network Location Awareness and DNSCache services (I'm not gonna say kill them unless that's what your particular machine needs ... but look at them);
  • if you haven't quashed Aero already, turn it all off and see if that helps;
  • and if you're running Vista Ultimate, and you don't actually ever use Media Center, go and kill all the tasks and services related to MC because Vista isn't smart enough to notice that you don't need 'em, and I've caught them hogging a ton of resources.

Last, not to get into the 'uphill to school both ways thing,' but a 700+MB working set with no user apps running??? You just want to say, "Man, have some self respect and get on a treadmill once in a while..."

Sunday, May 11, 2008

Ghost of Christmas Yet to Come: Alternative Futures for Windows

Sun's OpenSolaris demos and pleas ("put in on your laptop -- really!") last week got me thinking about the desktop OS, or more precisely the boot OS ...

Some folks have hypothesized that 'Windows 7' will be ultra-modular and may introduce a new API scheme while supporting the old ones via virtualization.

I think this is the right idea, but can be taken much further, with benefit to the entire industry/ecosystem.

Consider:

  1. The desktop will remain critical, as long as NVidia and Intel keep loading cores and cache onto chips, while keeping the price low and the power consumption efficient. Unless/until mobile broadband gets faster, more reliable, higher penetration, and about a 90% price cut, the desktop (or laptop or palmtop) is where a lot of computing will happen.
  2. Windows will remain vital for a majority of desktop users: businesses keep Windows to keep their legacy line-of-business apps running. Those workstations also run Office. Users want to run Office at home. There are also gamers who haven't migrated to consoles.
  3. (and this is the fun part): Windows doesn't have to be that desktop, and that desktop doesn't have to be Windows. Breaking them apart properly can create more value Microsoft (in terms of equivalent or greater revenue, with lower costs), and opportunity for everyone else (Apple, Sun, Linux distros, device makers).

What I am basically proposing is that Windows be so extremely modularized that many (eventually most or even all) flavors of it run only in virtualization on top of ... well ... anything.

Having Windows be the Ring 0 (or -1) operating system is hard and expensive and in most cases no longer necessary. It also doesn't pay well. Making an operating system run well on every cheap piece of hardware, taking the blame for the blue screens caused by other folks' faulty drivers, and being the "buck stops here" guy for security and resource management is neither cheap nor easy.

So I say: ditch it!

Could this work? In most cases, yes.

Businesses don't need Windows per se. What they need is an operating system that is supportable and manageable and can run their legacy Windows apps without incurring a bunch of additional cost.

What would a minimal Win32 Lite OS look like? The XP Embedded system builder is all about figuring that out. The Wine, Mainsoft, and Mono folks also have pretty good data on which APIs are critical for which sorts of apps. I'm not suggesting running a port of Win32 (or .Net), just that those folks have real good familiarity with which APIs and services are critical for running a user's apps, and the dependency chains between them. I don't claim to have that info at my fingertips, but we know that an upper bound for client software is XP Pro. From there we can subtract a lot.

So businesses could be running Linux or OpenSolaris or Mac OS, and run a SKU of Win32Lite in VirtualBox. Microsoft wins, because they only deliver and debug against a small set of virtual hardware devices, and can charge around the same amount as they currently do for the license (on an annual amortized or subscription basis) and support. As long as they produce a great implementation and great APIs to develop against (they've got a big headstart for desktop apps), there's no reason they wouldn't keep selling licenses.

Some security issues are lessened, because the virtualization layer is senior to the VM. Similarly with deployment, monitoring, resource management, etc. And hardware has migrated (and continues to migrate) to the USB bus, which is supported via the VM.

What about consumers? The rise of web applications doesn't mean the desktop is irrelevant -- all the apps in Flash, Silverlight, and Java make that clear. But those are browser plug-ins, which don't rely on Windows being underneath them. Home users may well want the latest Microsoft Office 2007, so Wine isn't their solution ... they'll buy a different SKU of Win32Lite to run office and their handful of random non-Web apps... maybe some of the Adobe products.

For the few cases where performance is important (let's say a non-linear editing tool for hacking HD videos), a simple user-mode service on the underlying host can deal with big number crunching or disk-file-shuffling jobs in cooperation with the VM. Again, most legacy consumer gadgets don't need to care about the "real" OS, since they're on USB and they're proxied through to the VM. Most of them will play nice with other-OS class drivers (such as 'mass storage' or 'image acquisition') anyway, so users may not need Windows at all for them.

So who isn't covered by these basic configurations? Folks with real custom hardware (strange ISA or PCI cards and the like) and hardcore gamers.

I have a feeling the 'real custom hardware' will show up more in businesses, which can lean on Microsoft's 10-year-plus support lifecycle policy. Even in slow industries, that should provide enough time to at least plan a migration.

For gamers, well, there are at least 3 options for Microsoft, all of which can provide revenue:

  1. Drive innovation in 3D acceleration under virtualization ... Fusion already supports DX9 Shader 2, and with Microsoft's contribution I'm sure the perf could get vaguely close to unmediated DX.
  2. Encourage gamers to migrate to a console... not a loss for Microsoft if they can bulk up margins even a little on the XBox
  3. Offer a DirectX-on-the-Metal version of Windows, to be run from a bootloader next to a 'productivity OS' ... and I'm thinking DX-on-the-Metal is not that dissimilar from XBox anyway.

And one more thing:

Sooner or later, if the must-boot-on-the-metal requirement has been gone from Windows, hardware changes will make it so that Windows no longer can boot on commodity metal.

The architecture shift will inevitably happen before some businesses are ready to make a switch (don't believe this? go look at the airlines). For some businesses, there may be expensive retro boards (just like there were Z80 boards for running CP/M in 65xx and x86 machines), but eventually we'll need to run Windows in a VM on top of some hardware emulation.

I don't think it's in the least unreasonable to expect emulated x86 hardware to run as fast at that point as real hardware does today. We'll call it MAME Enterprise Edition.

Wednesday, May 07, 2008

Alternate Reality: Java and .Net Both Went Open Source 8 Years Ago

The later-phase, heading-to-market end of application model innovation is screaming along.

Sun and Microsoft have announced their intent to get into cloud models that improve scalability and manageability. We don't know for sure how pleasant the programming will be, but it seems reasonable to assume it's at least as good as ASP.net 3.5 or J5EE. Microsoft seems to be aiming center-of-the-road with stuff like ASP.net, the MVC flavor,  and "dynamic data" pieces, while Sun is putting a big chunk of its chips on the Java side, and another big piece on JRuby/whatever-is-next-that-they-can-get-to-run-in-Glassfish.

Amazon is offering persistent disks for EC2, acknowledging that the RDBMS-backed app is not immediately going to disappear in favor of a S3 or SimpleDB layer. 'Cause syncing RDB stores usefully on S3 is a hassle (see slides 10-14 here).

Or, you can also buy all the missing pieces of the Amazon stack from RightScale.

Then there's Passenger (mod_rails) for Apache, and a Glassfish gem, which both aim to improve Rails deployability and incrementally bump performance.

But all this got me thinking about an alternate universe, one of those hindsight 20/20 things, that's interesting to imagine:

For Sun and Microsoft, I believe the missed-opportunity-of-the-decade was not open sourcing the JVM and CLR respectively (and their core libraries and infrastructure), from around 2000.

In the late 90s, Java was a beautiful thing, and aside from a few anti-OO diehards, it was clear that if the perf issues and minor hassles could be overcome, virtualized apps in an elegant environment (Smalltalk, oh wait, did I say that out loud?) were the future.

By 2000, Java legitimized VMs for server apps. As for GUI apps, graphics, printing, language neutral JIT, all manner of easy native interop, module loading, and the other parts Sun didn't get to ... Microsoft had those problems licked even if CLR was still in beta.

If all this IP had gone open at that time, a few major projects -- maybe 2 or 3 -- would probably have come out of it, and these projects would be the de facto runtimes for everything we want to run today. These few projects would spawn native bindings for all manner of OSes according to the existing APIs, so it would be even easier to really write apps that run on all kinds of devices, or in a cloud facility, or in on local elastic virtual infrastructure.

With the languages separate from the VMs, but with well known interfaces, a lot of debates (JavaScript 2 for example) would be less necessary. Meanwhile, Apple could have contributed whatever changes were necessary to get keep Cocoa APIs in sync, instead of going halfway down the Java road and then getting stuck, which would vastly improve the reach of that platform (their mission being more about user experience than about Objective C).

Performance, security, deployability, management -- these problems wouldn't magically go away, but with a more modest universe of options, they become infinitely more tractable.

In hindsight it seems that keeping these technologies proprietary (Sun's moving along; you can see Microsoft's code now, but you can't change it and re-release your own variant) was about fear and ego and control, defensive maneuvering.

I find it hard to see how either of these players would have made a dime less money in the scenario here; actually they would probably have made more money and have even more mindshare than they do now.

Sunday, May 04, 2008

Martin Fowler's DSL Material

I'm not a big link blog guy, but Martin Fowler's note/outline/draft material for an upcoming book on Domain-Specific Languages is worth checking out at your earliest convenience. I've been impressed.

Lest you be tempted to pick sides for or against DSLs (really not the point of Mssr. Fowler's book), or to postpone thinking hard about them, consider: DSLs are already merging with with 'traditional' languages and APIs ... it is likely that this trend will continue, with the result that DSLs will be a fact of life in the 'standard model' approach for many types of applications.

So it's probably useful to get a grounding in what they can really do, how they can best do it... and how they can best not interfere when they shouldn't.