An indoor water park, in Ohio, in the middle of the winter sounded like a very strange destination. But the conference turned out to be very diverse and stimulating, and I was able to try out version two of my new presentation, "The World is Dynamic."
Also, lost my virginity on a water slide. Wait, that came out wrong. I went down a water slide for the first time. Basically, you drop into a dark tube and start plummeting down and around. The surprising thing is when you start going up, and I must have gone down at least a dozen times trying to get over the surprise of going upward, and attempting to achieve a state of total relaxation for the whole trip (maybe not the point, but still an interesting challenge). Later that night, took two Tylenol to attempt to dull the experience of having been pummelled.
The most refreshing thing about this conference is that it is cross-language, cross-technology, so it reminded me of the very first conference I went to long, long ago, Micro Cornucopia's "Semi-Official Gathering" (SOG, which interestingly enough started with river rafting). SOGs were great; much more about learning and sharing than pushing ways of thought. CodeMash reflected that because the people that came were curious about everything -- and tired of the struggles over which is best.
One of the most interesting new things I saw was Sun's "Small Programmable Object Technology," (SPOT), which puts a Java CPU and 512MB of static RAM on a tiny board (this was a demo, and the package could easily be much smaller). This is a full JVM, including garbage collector, and is not intended to be a hard real-time system like real time Java (where you can stop the garbage collector in order to control reaction times). Instead, it's for everything else where the JVM with garbage collector is fast enough. This is especially good for things like instrumentation, and apparently the DoD is very interested in using this technology for dropping lots of remote sensors. You could imagine it being used for all kinds of things. I'm not really a believer in "Java everywhere," but having done my initial years in embedded systems development, I would certainly take a long, hard look at SPOT if I were creating an embedded device. Sun isn't creating hardware (too bad, since Sun is supposed to be able to do that kind of thing), but software licenses are very cheap as these things go, on the order of 500$ per product, I think. So I expect third party companies to come out with programmable hardware using this technology. You can learn more at www.sunspotworld.com.
To kick off the conference, on Wednesday I chaired a panel of experts on various languages which seemed to turn out quite well. This was recorded (as well as many of the other talks) so I would expect to see something on the CodeMash web site eventually.
After that, I introduced the idea of open spaces. These got off to a bit of a slow start, possibly because the idea needed to sink in, but maybe because I then focused on rewriting my keynote and did not pay attention to the schedule board and the organization. I think if I help out with open spaces in future conferences, I will make sure that someone volunteers to manage the board and to oversee the process in general to make sure that it goes smoothly and that process questions are answered and dealt with. If a conference is only open spaces then things tend to take care of themselves, but if you introduce open spaces into a traditional conference format then I think it might help to have a little extra coaching and guidance on a continuing basis.
In any event, the open spaces gathered momentum as soon as someone nucleated the process. James Ward, Kevin Dangoor and Mark Ramm drew at least 20 people to their discussion, where they ended up wrapping a Flex component as a TurboGears widget, something no one had done before. James was on a high about this (as well as grokking Python list comprehensions) for the rest of the day. So people could watch, they borrowed a monitor and also used VNC with a laptop to create ad-hoc display screens. Another example of just "making things happen" during open spaces.
Speaking of list comprehensions, Microsoft's Scott Guthrie gave a presentation on LINQ, which immediately jumps out to a Python programmer as "list comprehensions for data." When I first heard about LINQ, it sounded like yet another boring database thingy, but it's really amazing. It allows you to collect and refine data in the same format as you would with a list comprehension, but it is abstracted away from the source of the data. That source can be objects within your program, or an SQL database, or an XML schema, and certainly other things (not sure if the programmer can create their own translator, but that seems likely). If you connect to a database, it generates SQL, but you don't have to know that or figure out how to optimize it. One of the best things about this abstraction is that a smart compiler can make good use of multiple cores or CPUs, without effort on your part.
One of the things I've heard far too often is "C# is just Microsoft's clone of Java." Perhaps that was the original intent, but C# is definitely not Java. In fact, a number of the features in Java 5 were clearly added in an attempt to catch up to C#. And delegates and features like LINQ are going to require even more effort by Sun to either duplicate or denigrate. With my limited view of what's going on in Microsoft, C# and the ideas that Anders and his team are implementing is the most innovative thing there. So stop saying C# is just Java in a wolf suit, and take it seriously.
This was the first iteration of an all-volunteer conference, and I have to say it went remarkably well, which was certainly due to all the time that the organizers put in; I know this because my Ann Arbor host was Dianne Marsh, and she was fretting and taking care of details down to the last minute.
They decided to try to record everything, which was an interesting experiment. The idea was to run VNC to capture the screen, and then record it with camtasia. But it sounded like that might have been a little ambitious. With my keynote, they asked me for the slides so they could just integrate the sound, which I think is probably a better idea. I had so many photos that I'm still not sure how feasible it will be to provide it for downloading.
This keynote was the second iteration of "The World is Dynamic," and I did a serious refactoring of the presentation since I gave it in Poland. Now the pictures and ideas are more evenly distributed, which apparently worked a lot better. The goal of the presentation is to stimulate your thinking, help you invent better experiments, and especially to make you question your preconceptions about "the best way to do things" -- and even more, to learn how to challenge your own preconceptions. I got a lot of good feedback afterwards, so I think I'm on the right path, but I think that it will continue to evolve.
My goal with this presentation is to create something that will be a good fit for a lot of different software conferences, and something that maintains its freshness and stimulation. In the past I've often developed a new presentation every time I've given a keynote, mostly because I didn't want to give the same one over and over, but with "The World is Dynamic" I think I've got something that will be stimulating even if you've seen it before (or, from my perspective, given it before). It's a new experiment.
Just a bit of clarification regarding SunSPOT. The onboard memory config is 512K with 4MB flash (I may have said 512MB during our discussion, apologies for the confusion). Also, Sun will offer complete developer kits (including the SunSPOT hardware, NetBeans plugin, docs, etc). We've created the hardware and software platform as a proof of concept and plan to open source the technology. As you mention, we expect embedded hardware experts will reduce the physical size of the current SunSPOT and introduce creative uses for this Java-based sensor technology. Stay tuned.
> If you connect to a database, it generates SQL, but you > don't have to know that or figure out how to optimize > it.
LINQ sounds really neat, but let's not get carried away! Encouraging developers not to care - or even know - when they're doing a database access is a recipe for performance problems and, worse, subtle bugs. I'm sure the SQL that LINQ generates is sometimes a long way from optimal, too. I wouldn't be surprised to see a few book chapters on how to write efficient LINQ in the coming year.