Monday, 28 April 2008

Building a Community (Tank)

Building a vibrant community takes careful planning because, as with all things in life, you reap what you sow. Setting up a community fish tank is no different. Back in December we took advantage of boxing week prices at our local Big Al's and bought a 180 gallon tank. We wanted to set up the tank as a room divider, which is kind of a non-standard configuration, so the cabinet had to be custom designed to look nice both on the front, as normal, and at the back, since in our case, both of these are actually the sides. It took a long time for things to be constructed and for all the parts to come in, so it wasn't until two weeks ago that Tim and Anthony came for the installation.


We wanted not just a fish tank, but a whole underwater garden too. Big surprise eh? As such, we needed special aquarium gravel that's a bit more like soil for healthy roots. And to really make the plants thrive, a planted tank is bottom heated, which means that heating cables need to be installed under the gravel so that the plants will have especially warm roots.

It's amazing how high tech these kinds of installations are these days. The filtration system is based on a sump design where the water overflows into the black contraption you see in the back. This helps clear the scum that inevitably floats to the top; a tank really is so much like any other community. The water then flows through a foam filter and cascades down through the blue bio-balls into the holding tank below.


The high technology doesn't end there either. Plants love carbon dioxide, so as the water is pumped back up into the tank, it's pumped through a reactor that injects carbon dioxide under pressure to dissolve it in the water. Carbon dioxide, as you'll recall from chemistry class, will make the water grow slightly acidic, which helps counteract the natural 8.0 PH of our local water. There's even a sensor that detects the PH and will try to keep it between 6.8 and 7.0 by regulating the injection of carbon dioxide.

It's a good thing the filters work so well too. Check out the swampy mess when it was first filled up.


Once the tank is set up, you can't just toss everything in and have an instant community. You have to be patient, introduce things into the system gradually, and then wait for the ecology to adjust. The first step was to introduce the plants. Check out the transformation from dirty swamp to underwater garden.


The lighting system is really cool too. There are blue diode night lights so it never gets pitch dark. In the morning, the high output florescent lights come on, and then an hour later, the high intensity metal halide lights kick in to make it as bright as direct sunlight. In the evening the process reverses. It's like a simulated day with sunrise, sunset, and finally soothing moonlight.

Of course what's good for plants is good for the algae, so introducing into the ecology something to eat the unwanted algae was the next step. For this purpose, freshwater algae eating shrimp are ideal.


We got two kinds, 300 in total, including cherry shrimp.


With the ecology in full swing and we had to wait for the tank to cycle. This is the process by which the ecology of the tank forms a closed loop as the waste products produced by one set of living things is consumed by another set of living things. The microbe population needs to adjust to help close the loop whenever any other part of the system changes significantly.

Just as there are two kinds of dirt in this universe, dark dirt to mess up light things and light dirt to mess up dark things, there are two kinds of scum. The kind that floats to the top, which we mentioned before, and the kind that sinks to the bottom, which we still need to address. The shrimp are excellent scavengers, but what we really need as well are some scum sucking bottom feeders. Yesterday we went back to Big Al's with a water sample, and since the water was clean, we got to introduce a few really effective scum sucking bottom feeders, albino bushy nose plecostomus.


It's interesting that while a fish tank really is rather a good model of a community, complete with scum sucking bottom feeders, in the case of a community tank, such creatures are quite attractive and enjoyable to have around.

Monday, 21 April 2008

When Diversity Goes Astray

There's a lot of talk about diversity at Eclipse and it's generally seen as a very good thing. Of course there are exceptions to every rule as Scott Lewis hinted in his blog. Below is a graphic illustration of diversity gone bad. The poor frog has no way to get that misguided toad off his back. Clearly no good can come of this!


I find myself still a bit frustrated with the download page discussions in 205205 . I'll definitely grant that I'm not the best person to judge on what's a good community download page. My experience at IBM with product usability studies taught me that those in the thick of things typically don't have the same perceptions as would a typical user, so it's crucial to consider the users directly. There's a bit of that going on in the bugzilla, but also a lot of experts with expert opinions that may well differ from those of the impacted users; of course I include myself in this comment.

You might consider asking yourself the impression you'd get from the download page as a first time visitor. Could you tell what release you would be getting? If you look way down, you'd see a hint because of the Eclipse Classic 3.3.2 label, but a more prominent mention that 3.3.2 applies for the downloads as a whole would seem to be a good thing. You might even wonder if Eclipse Classic is like Coke Classic? I.e., the way it was before it was ruined by changes? But you'd be digressing badly. Back on track, you might wonder where you could get the latest bleeding edge stuff. Of course there is a "Ganymede M6 Packages" link, but likely you'd think, what the heck is Ganymede and what's so special about M6? According to a comment in the bugzilla, it's hard to find Ganymede with Google even if you already know the appropriate search term.


I definitely don't have all the right answers, but I do get a sense when things don't feel quite right. So while there is a diverse set of opinions on this, it really doesn't seem to have made the page the best I think it could be. Of course that's just my opinion. I would like to think that the big download button on the home page could be used to easily find any other download, i.e., the 3.4 download as well as leads to the downloads for various other projects, with the Eclipse project being the linchpin. Well enough griping. Hopefully I've not offended anyone. Goodness knows our community has some annoying blood suckers, such as yesterday's posting about "I Truly hate Open Source Software," so I don't want to be one of them. Check out the risks some little bloodsuckers are willing to take:


On a more positive theme, the notorious bug 109137---an EMF contributor's words, not my own---has been making excellent progress. The various god-like developers involved in making JDT and PDE great have slaved behind the scenes to produce working results. I'll need to update the instructions for boostrapping EMF from CVS to describe how to exploit this great new support. The approach I'll use going forward is to extract EMF directly into the dropins folder using "eclipse.exe -data dropins" to launch. Once that's all extracted and built, I can launch a runtime workspace and use EMF's wizards to create a new project, generate the source code, and thanks to the new support for external folders on the classpath, the resulting code compiles correctly against the bin folders in the primary workspace.

This is totally awesome, but wait, that's not all! If you right click on the running process for the runtime workspace in the Debug view, you can see the magical incantation that the PDE uses to make the runtime workspace use the development time plugins, i.e., there's a -dev argument that points at a dev.properties file. Now if you record that option, exit your primary Eclipse and restart it with that additional argument, Eclipse will find the development time plugins in the dropins folder and will use the .class files of those plugins to yield a bootstrapped development environment that includes the latest and greatest changes you've just developed without needing to build all the jars! For EMF, this lets me change the generator, quickly restart the environment, and then regenerate my models with those generator changes. I'm now an even happier Eclipse user than before and this is why I truly love open source: people working together to make things better every day.

Friday, 18 April 2008

Things are Heating Up

It seems I've been waiting so long for spring to heat up, and now, all of a sudden, in typical Ontario style, we've suddenly leaped right into summer. It's 24 degrees Celsius today!


For you Americans using that antiquated old measurement system that the rest of the world tossed aside years ago, that means its nice and warm, not below freezing. Other hot news for the day is the fact that Marcelo is having a baby. Well, obviously not Marcelo himself, but rather his wife. I expect to hear word about little Alyssa very soon, hopefully a blog with pictures!


Things have also been heating up on 205205 though, not in such a good way. I'm impressed by Carolyn's valorous effort to make concrete suggestions for improvements. I confess that, like Steve, I'm a bit frustrated by the discussion. Well, maybe not quite like Steve; he has a way with words that I can't hope to match! I would like to see us prominently feature the Ganymede Packages on our main community download page so that our users can more easily get an early start on testing them. (Note the new modeling package with its stunningly beautiful logo!) But I'm not a web designer nor a marketing expert, so I have to respect expert opinions. The discussion seems to be improving again. I wonder what others think?


Oh well, at least it's Friday and it's a particularly lovely day for a rum swizzler out on a lawn chair. Look at this little guy I found packed away in his little hidey hole, waiting for an evening of courtship and hopefully an illicit rendezvous at the pond.


Speaking of hidey holes, Dave got to crawl out of his little book writing hidey hole and be a developer for the last two weeks. He helped finish off our generated support for content types. He also helped with the support for packing enumeration values into bit flags. Java might not support packed fields like C, but EMF certainly does. No wonder it's the most popular project on the download page, although the April 1st update on the data is a little suspicious:


If you have a model with enumeration or boolean features, you should consider taking advantage of this. After all a boolean variable uses 4 bytes but stores only 1 bit of data, wasting the other 31 bits. Not only that, but EObjectImpl has an eFlags field with lots of bits left unused. We suggest using "eFlags" as the field, and reserving 8 bits for future EMF to use, as we've done here for XSD:


Reduced storage for your models is now just a code generation option away and has been brought to you by the friendly, helpful, and hard working EMF team.

Monday, 7 April 2008

Teflon Programming

The bane of our industry is poor quality software. We live in a disposable world and we treat our software in the same way. This fact is easily obscured by the mesmerizing stream of innovation; we're almost happy to discard the crap we use today in favor of new things, even knowing full well that these too will be considered crap in just a few years. Of course, throwing something old away in favor of buying something new is good for the manufacturers and hence we consumers are encouraged to think this way. That's why we don't see cars built to last for thirty years; the car manufacturing industry is far better off if the bucket of rust falls apart after just ten years. The sooner the better, in fact. Though of course, as a manufacturer, you don't want the car you've built to fall apart faster than the other manufacturer's car; you want to have a reputation of quality, so there is significant pressure to keep the darn thing on the road for a reasonably long time. The pressures on the software industry are quite similar. We don't really need a new version of our operating system when the old one is more than adequate, but if we can be convinced that we really need some new wow factor, we can be convinced to make someone else rich. Similarly, we need a new language to replace Java almost as badly as we need another mouth to eat more quickly.


I think the fact that software is all too easily viewed as lacking long term value leads to a career path that might best be described as Teflon Programming. The career works as follows. Always look towards starting something new. If you can't drive the innovative ideas yourself---so few can---look elsewhere for them. Pay very close attention to buzzwords! They will guide you like a moth to a flame. When you see the bright light, do something in that space and do it quickly! Don't worry about testing and code quality, it will only slow you down. You want to be the one who achieves 80% of the goal with only 20% of the effort. Doing so will impress many people and you will move ahead faster by impressing more people. Once you've delivered your first beta, be sure to drop your project like a hot potato, of course with the premise that it's "hot" in a good sense, i.e., like hot property. If you've managed perceptions well, you'll have been promoted by this point for your extremely innovative thinking and amazing productivity. Now just rinse, lather, repeat. The programmers left juggling your hot potato will curse you, but they are the meek and they will not inherit the earth. You can easily besmirch their character for having allowed your impressive results to flounder. Their complaints will just be ignored as the petty griping of those without talent and vision. Meanwhile, you're like Teflon: nothing bad sticks to you because you're busy attracting attention to the next more wonderful thing you've moved on to. That's right, you've learn the art of taking credit and giving blame; it will serve you well in your quest to be the pinnacle of success.


As you might have figured out, I don't care for Teflon Programming, I don't care for the fact that it's so easy to get ahead with that approach, and most of all, I don't care for the fact that it's bad for the clients. I've been working on EMF for a very long time, and much of that has been a struggle because, shockingly, not everyone is enamored with modeling and, worse still, most people even have negative preconceptions. Nevertheless, I intend to continue for a long time. To make it a pleasure, I make sure I create as little crap as possible, because my clients and I will have to live with both the good and the bad forever. In other words, I believe my responsibility is to ensure that my clients have something of lasting value and that they can confidently look to me to ensure that what they build today will have value well into the foreseeable future. I think many of the people at Eclipse are like me. In fact, I like to think that most of the people at Eclipse are like me. When I look at what we're doing with e4, I see what appears to be proof positive. Sure it would be easy to start with a clean slate and do something completely fresh and innovative, without regard for past mistakes or for impact on existing clients, but that would be Teflon Programming and that's not what Eclipse is all about.

Tuesday, 1 April 2008

Announcing m4!

I've been working on a plan for EMF 4.0 in my secret evil lair for quite some time now and today seemed like the perfect day to announce its fruition. I will dub it m4, not to be confused with b4 or e4. Unlike these other projects, mine will be completely transparent to the community: I intend to install a webcam so you can monitor its progress.


So what is planned for m4? Is it everything the community has been wanting? I don't think so, I'm sick of community whining. It will be exactly what I feel like doing personally. Will it be binary compatible with EMF 2.x? Yeah, right. Does that sound like it would be much fun for me? So no, I don't think so; everyone will just have to rewrite their code. And by the way, I'm kind of sick of the "E" prefix, so I'll start by changing every E to M. And no, don't bother asking, it won't be compliant with EMOF either.


In the interests of being open---what good project isn't transparent and open?---I'm looking for the community to stop whining and get involved. Only those willing to do my bidding without questioning my direction need apply. I particularly dislike dissent, so if you have opinions of your own, it's best you don't bother me with them. Tell someone who cares; I doubt anyone will. So to begin with, I'll be the only m4 committer. I figure transparency is more important than openness anyway, so with that webcam installed, there will be little cause for complaint on that front.


So what about the 2.x stream? What about it? It's open source so you can provide patches yourself. But don't hold your breath because I'll be busy with m4. When can you expect these exciting new developments? That will be a surprise won't it! I'm getting a big new fish tank and it's time to start planting for this year's garden, so don't expect me to prioritize the community's needs ahead of my own.