Friday, August 29, 2008

Safari Books Online by O'Reilly

Thankfully, this post has nothing to do with me crying over your software.

I recently signed up for O'Reilly's Safari Books Online which is an online book service providing complete titles from O'Reilly and several other technology book publishers. O'Reilly, if you didn't already know, is one of the leading publishers of technology books. You've seen their books in the Computer section of your local mega-chain bookstore -- they're the ones with the pictures of ducks and chickens and badgers and snakes on them.

Safari Books Online contains, as far as I can tell, the complete lineup of O'Reilly books and titles from other publishers such as Microsoft Press, Que, Manning (think pictures of swashbucklers and jesters), Prentice Hall, and Adobe Press to name a few. As I write this, there are over 6,100 books available. Full books. Complete with indexes, tables of content, and errata.

Having browsed a little bit through everything that's available, my current "Favorites" lineup includes Beautiful Code, MySQL - Fourth Edition, Building Web Services with Java, Programming Python - Third Edition, and A Designer's Guide to Adobe Indesign and XML.

In addition to books, there is other content available such as articles and videos. The videos were a big suprise and now are my favorite feature of Safari. I've been watching Java Fundamentals LiveLessons I and II (14 hours!) by Deitel & Assoc., Working with Color by Bruce Heavin, and Inspired CSS by Andy Clarke. Videos are availabe in both Flash and Quicktime format, and stream reasonably well (though not as well as I would like at times). Video learning is the fastest way I've found to soak up information without falling asleep or becoming distracted.

The best part of Safari: it's only $42.99 per month for a wealth of information at your fingertips. There are cheaper versions of the service ($23 - 40) called "Safari Bookshelf" in which you have a fixed number of slots (10, 20, or 30) that you can fill with books. But the Bookshelf service only includes limited access to the service and requires that you think about which books you'd like to take a look at. With "Safari Library" being complete for $43, it's the no-brainer choice.

Just today I had to do some mucking with a BIND server and instead of Googling my brains out or trying to read documentation written by programmers, I simply went to Safari and checked out DNS and BIND, 5th Edition and DNS and Bind Cookbook. These are books that I would love to have on my bookshef for just this occasion, but I don't work with BIND enough to warrant purchasing them. (Did I mention that you also get up to 35% off when purchasing a print book from Safari?)

Enough raving, the service does have its flaws.

First, reading online is hard on the eyes and simply not as comfortable as kicking back with a book. While Safari does provide an index and table of contents for every book, it can't touch flipping through real pages for ease of use.

Second, the reading experience is somewhat hampered by the intentional limits imposed by the services. For instance, you can only read one section from a chapter at a time, and you have to click the "Next" button to proceed onward. This means that you're reading the books in what are essentially little snippets which can really slow you down. Some books are actual scans and they only let you see one full page at a time. Thus if there is a corresponding photograph on the next page, you have to click "Next" to get to it (there's a photography book I'm reading and I find myself clicking the Next and Previous buttons all the time to switch between the text and images). All of this is made worse by the semi-ajaxy implementation -- there is nothing to indicate that the next page is loading after you click, and browsers like Firefox do not know how to scroll up to the top of the page when you flip to the next page.

Third, the service is kind of slow. Not unusable slow, but noticable 1-2+ second page loads slow. When you're only given a snippet to read at a time, those seconds really start to add up.

All the negatives aside, Safari is great. Having access to this amount of great information is simply amazing.

Wednesday, August 27, 2008

Installing Dell OMSA and SNMP in Ubuntu 8.04 on PowerEdge R200

This is going to be a simple step by step as I go.


1) Become root:

sudo su

2) Edit /etc/apt/sources.list to include the following line:

deb dell sara

This is an unsupported repository that has the dellomsa package.

3) apt-get update

4) Install snmp daemon and tools:

apt-get install snmp snmpd

5) Install openipmi service (I'm not sure if this is necessary, I had already installed it):

apt-get install openipmi

6) Install OMSA:

apt-get install dellomsa

7) Enable snmp in OMSA. Note: this will automagically make changes to your snmpd configuration.

/etc/init.d/dataeng enablesnmp

8) /etc/init.d/dataeng restart

9) Verify that you can connect to http://YOUR_IP:1311 . You should be able to login with a local system user.


10.1) Install mptctl driver:

modprobe mptctl

10.2) To load the driver at boot, edit /etc/modules and add the line:


10.3) Initialize new driver with OMSA (or something like that):

/etc/init.d/instsvcdrv restart

10.4) Reconnect to https://YOUR_IP:1311 and verify that you can see your storage subsystem.

11) Ease up snmpd security so that you can actually use it.

Edit /etc/snmp/snmpd.conf and change:

com2sec paranoid default public


com2sec readonly default public

12) Now we have to make some changes to the way Ubuntu starts snmpd. Edit /etc/default/snmpd and change:

SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/'


SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -p /var/run/ '

I don't know why removing the smux stuff works, but it's necessary. Removing the localhost IP address will allow snmpd to bind automatically to all interfaces. If you don't remove, you'll only be able to talk to snmpd from the local machine.

13) /etc/init.d/snmpd restart

14) /etc/init.d/dataeng restart

15) Verify that the following command spits out a whole bunch of stuff:

snmpwalk -OS -v 1 -c public localhost .

These should all be Dell-specific.

16) Verify that you can perform the same query from a remote machine (change localhost to the IP of the server we're setting up). Check firewall settings (UDP 161)!

17) Configure the system to start the OMSA web service when the system boots:

update-rc.d dsm_om_connsvc defaults

18) User management.

It appears as though OMSA wants you to login to the GUI via root to become OMSA Admin. To enable your root account in Ubuntu you have to do a sudo passwd root and give root a password. To disable the root account later, do a sudo passwd -l root .

To make a user a "Power User" in OMSA, you have to add them to the root group.

Tuesday, August 26, 2008

Some Thoughts on Design

I'm not a great software engineer. Quite the opposite. I don't get much time for development and many of my projects are quick and dirty hack jobs. I simply wear too many hats in my work to devote myself completely to any one aspect. On a daily basis I get to be the IT guy, software developer, photographer, designer, telephone repairman, technical writer, and guy who does whatever the hell else needs to be done.

Admitting that, I do have some advice for anyone developing software or designing just about anything:

1) Use your own shit.

2) Have somebody else use your shit, and actually listen to them when they tell you what's wrong with it. Chances are, they're right.

A remember reading a blog post a while back about the world's worst toaster in which the author described a toaster that is overly complex -- a sure symptom of poor design. This post really spoke to me. Not because the message is terribly enlightening, and not because I disagree. It's stuck with me because I happen to have a toaster that is considerably worse than the one described in the blog post!

My toaster does not suffer from excessively complex design. It's your standard "pop-up" toaster with a knob that goes from "light" to "dark", and a single lever used to start the toasting process. An elegant, time-tested design that should be pretty hard to screw up. Well, "Chefmate" managed to screw it up pretty well.

Here's what I have to do to make toast:

1) Adjust the "light to dark" knob to somewhere between 50 and 75%. It doesn't really matter where, because anything under 50% is essentially untoasted (dried bread, really), and anything over 75% is burned-to-a-crisp.

2) Insert bread and push the toasting lever down.

3) Wait until the bread pops up.

4) Yay, the bread popped up! -- Not so fast, we're not done. Although the toasting process took about as long as one might expect, the bread at this point is somewhere between hot and barely-toasted. So what we need to do is push the lever down again to re-toast our bread.

5) Wait until the second toasting process "feels" like it's about half way done.

6) Pull the plug. Why pull the plug? Because an anti-safety feature built into the toaster will not allow the user to push the toasting lever up to manually pop the toast. The only way to get the toast to pop up before the toasting cycle is complete is to disrupt the power.

7) Inspect "toast" for done-ness. If it needs to toast a little longer, repeat steps 5 and 6 but vary the amount of time in step 5 as needed. Do not be tempted to adjust the light-dark knob to assist you in selecting the correct amount of time for subsequent toastings -- you will either burn it, or the bread will untoast itself and you'll have to start over (no, you simply won't be able to start toasting if you select "light").

Whew. It sucks to start the day pissed off at a toaster, but that's what I get for only spending $10. Or is it?

It amazes me that this toaster even exists in our world. It was clearly never *used* by anyone at the toaster factory to make toast, or the design would have been modified such that it could actually make toast. The anti-safety feature by which the user cannot manually pop the toast without unplugging the unit is another example of complete usability oversight. This has nothing to do with cheap components, necessarily, but shoddy design. The mechanics of a toaster are not complicated and thanks to plastic, a fairly featureless toaster is easy to mass-produce on the cheap. I have a hard time imagining the guy who was tasked with creating Chefmate's 2007 entry-level toaster -- how low can his self-esteem be?

Whenever I make toast, I think about MP3 players. The reason I do this is so when I write this blog post, I'll have a way to transition into my next example of crap design: cheap MP3 players.

My old 256MB Creative Muvo MP3 player finally died after years of faithful service. It didn't actually die, necessarily, but the "up volume" button broke off so like a racehorse with a broken leg, I had to put it down. I decided that I wanted to get another cheap MP3 player that took a single AAA battery. I've got a lot of rechargable AAA's, and I think that they're more convenient than built-in rechargable batteries. If my battery dies while I'm mowing the lawn, I can simply swap in a fresh one.

Unfortunately, nobody wants to make an MP3 player that takes AAA batteries anymore. The reason for this, I believe, is to make players that are smaller than they need to be. This is an example of a design choice that is of little benefit to anyone, but helps will player sales because for some reason "thin" is "in." Once a device reaches a certain level of "smallness", it doesn't need to be any smaller -- but on the display shelf the smallest gizmo wins.

There are only a few MP3 players being produced that take AAA batteries, and they're all on the cheapo side. I tried out a couple recently but had to return them because they lacked certain software features that they simply should not have been missing. They weren't poor because they were made cheaply, they were poor because the designers didn't care to think about the devices actually being used by real people. Granted this is certainly a symptom of keeping down costs, but just a tiny bit of effort would have saved these devices:

- Nextar MA566 (or similar model).

This is a standard MP3 player with no frills. It plays Mp3s. What more do you want? Well here's the problem: it plays the MP3s in order not by filename, but by file modification date, and THEN filename. Clearly this is a big oops, and whoever wrote the software didn't do enough testing.

I use MyPodder from Podcastready on my MP3 players to download podcasts and audiobooks. When MyPodder downloads new podcasts, it launches (as far as I can tell) about 4 download processes at once. This means that if I'm downloading 10 chapters from an audio book, they don't necessarily arrive in order. Chapter 3 might come down before Chapter 1, etc. This shouldn't be a problem because usually audio book chapters have names like 01_BookName, 02_BookName, such that any DECENT player can play the chapters back in the correct order.

Unfortunately the MA566 isn't smart enough to do get this right, and if Chapter 3 is downloaded to the device before Chapter 1, it plays Chapter 3 first. This means that at the end of any given chapter, I have to stop mowing the lawn and use the player's crappy controls to look for the next chapter (hopefully I haven't forgotten which chapter I was just listening to or I have to listen all the way through the chapter intro to decide if I'm at the right place).

One workaround was to use various filesystem utilities to reset the file modification dates. Eventually I tired of this and literally bit the player nearly in half in a fit of disgust.

- Phillips GoGear

The next cheapo MP3 player I picked up was a Phillips GoGear. Ok, so Phillips is a slightly better brand, and the unit takes a single AAA battery. Shouldn't have any problems then, right?

Much to my complete shock, this player was missing a feature that is so common that it's more of a given than a special feature: the ability to resume playback. How in the hell does this happen? When you turn on the GoGear MP3 player it doesn't start playing from where you left off, it starts you over from scratch. I went through all the options and could find no way to modify this behavior. This little oversight makes the player completely useless for listening to podcasts and audio books!

Recalling the bad taste of the Nextar player as my teeth crunched through it, I decided to return this piece of crap pronto.

- Sansa Clip

Feeling quite discouraged, I gave up my quest for an MP3 player that uses AAA batteries and ended up with a 4GB Sansa "Clip". I'm mostly satisfied with this player and have promised myself to keep it plugged in to my USB charger when I'm not using it. There's nothing worse than mowing the lawn without headphones because of a dead battery. (You may have noticed several references to lawn mowing. Yes, my lawn is very large. Yes, I am clearly so cheap that I use a pushmower. It takes hours and hours. Someday I'll tell you about trying to buy a cheap lawnmower that doesn't suck!)

The only problem I've had thus far with the Sansa Clip is that the clip comes off. That's right. The "clip" is such an important feature of this unit that the model number is literally CLIP, yet the clip falls right if you twist it just so. Way to think it through fellas.

I've gone on long enough. To recap: it doesn't matter how cheap or expensive the software or gizmo you're creating is, remember that human beings are going to spend their money on it and actually use it. 1) Try using it yourself. Does it work? 2) Consider more than your own personal use case. Does it work for others? Sometimes it's just a minor change that stands between usable and useless.

Friday, August 22, 2008

A Note About Migrating OpenVZ VPSs

I had two primary reasons for adopting OpenVZ to provide server virtualization:

1) I like the idea of being able to "freeze" a complete server and resume it later, especially on different hardware. This leads to some very interesting backup / restore possibilities, in that an entire "server" and the application it is responsible for are all packaged up into one independent unit. I don't actually need virtualization for consolidation reasons.

2) Full blown virtualization solutions are extremely resource intensive, and the added overhead is just not worth the benefit in my case. I would have to buy new servers! OpenVZ solves this problem nicely.

So of course I'm having a good time suspending and resuming servers (checkpointing), and have just recently been playing with migration of servers between hardware nodes. The way that OpenVZ makes this happen is actually not terribly elegant. Nothing about OpenVZ is elegant, and I find there's always a little bit of unrest in the back of my mind about whether OpenVZ isn't going to bite me in the ass sometime down the road.

On to the notes:

When performing a migration between hardware nodes, it's extremely important that the hardware node be configured in the same or similar manner as the node you're migrating from. OpenVZ is not smart enough to configure itself during a migration, so in addition to configuring the server OS itself, you must also configure OpenVZ correctly or your migrations will not happen.

The things that got me were this:

1) Disk quotas. By default an OpenVZ install will be configured with disk quotas turned on, and the default quota is not large (it seems that there is a global quota (the one I'm talking about), and individual per-container quotas). You have to either disable quotas on the new node, or crank them up high enough to accept the VPS you're bringing in. These settings for the global quotas are in vz.conf which is probably somewhere like /etc/vz/vz.conf.

2) For the life of me I could not get a migration to work via a dump file. This concerns me greatly. I'm not sure if you're supposed to create a dummy container on the new node with the same number as the node you're migrating, but the restore wouldn't work without the proper private directory existing. You also need to bring over the VPS's conf file and put it in the right spot ( maybe /etc/vz/conf ) before trying the restore.

The instructions here: do not work. There are things that need to happen between the dump and the restore that are not addressed in the wiki article.

3) You need to configure networking properly on the new hardware node before migrating. In my case, I had to make sure that iptables was setup the same way, and also mirror settings from the old /etc/sysctl.conf file. At a minimum, make sure you set net.ipv4.ip_forward = 1.

There are more sysctl parameter suggestions in the OpenVZ Users Guide also. (Note: this guide is extremely light on the issue of migration)

4) The online migration option seems to work if you follow exactly the instructions in this wiki article.

Note to Ubuntu Server users: you have to enable the root user on the new node in order to do an online migration. sudo passwd root

Don't be too hasty to assume that online migration is the only tool you need to migrate from one hardware node to another. Consider the case where the old hardware node has caught fire and burns down your entire compound. After you've rebuilt, you'd better make sure that you can restore your backed up VPSs from dump files to your new servers. As I mentioned earlier, I can't seem to make it work.

5) When performing an online migration with default settings, your "old" VPS will be removed!! Be aware of this if you're just playing around! See the options for vzmigrate.

6) OpenVZ error messages are about as useful as a milk bucket under a bull. Turning on verbose doesn't do anything with some commands. I got error messages that do not even exist in the google index! I got error messages that just said "Error:"!

This software works pretty well, but I really don't trust it yet.

Thursday, August 14, 2008

DanielStallmanAliceLippmann/Richard Stallman

Would everyone please stop calling DanielStallmanAliceLippmann/Richard Stallman "Richard Stallman?" After all, Daniel Stallman and Alice Lippmann were the first to start development on DanielStallmanAliceLippmann/Richard Stallman. It's only fair to give credit where credit is due.

FACTOID: Did you know that 50% of DSAL/Richard Stallman was created by Daniel Stallman, and the other 50% by Alice Lippmann? Richard Stallman is responsible for 0% of the creation of Richard Stallman, yet he still runs around calling himself Richard Stallman.

DSAL/Richard Stallman, for those no in the know, is responsible the GNU/Linux operating system. The GNU/Linux operating system is Linux with a GNU and a forward-slash in front of it.

Tuesday, August 12, 2008

rm -rf /opt/liferay

Sheesh, another Liferay install down the tubes. This is getting ridiculous.

Unfortunately I can't find another portal application with a half way decent document management system included. If anyone knows of anything, let me know. I'm currently downloading the just-released Liferay 5.1.1 which I'll be hating in approximately ten minutes.

Here's some advise for anyone who is thinking about using Liferay:

1) Liferay is extremely convoluted. The end-user system is organized the way a Java programmer might organize his source files. This does not lend itself to useability. Your users, if not extremely competent, won't know what the hell is going on or where they are in the system half the time.

2) Liferay is extremely customizable, but not in a meaningful way. The concept of a "personal space" and a "public" space within the portal all exist, as you might expect, but merging the two concepts into one concise "website" is very difficult.

3) The permissions system has fine-grained itself into sand. You have users, roles, groups, communities, and organizations all duking it out at once over private and public pages organized by user, community, and organization.

A prime example of how this fails is this: you can add users to an organization, and then add organizations to a community. This sounds good, especially for an extranet application. However, just because a user belongs to an organization that belongs to a community does not mean that the various portlets within the community will recognize that the user is part of the organization that belongs to the community. Whew, that's a mouthful. Here's what I mean: if you create a community-wide announcement, users who only belong to organizations that belong to the community will not see the announcement, because the system doesn't realize that they are implicitly part of the community. One way around this is to create a catch-all user group where you dump all of the users who belong to the various organizations that are part of your community. You should also then create a group for each organization in case you want to send announcements to individual organizations through the same announcement instance. Ok, so you're now managing three groups in addition to your community and organizations. Why? Who the hell knows. It's a nightmare.

4) Extending the system is a horrible thing. Just don't, unless it's going to be your full time job. Every single Java technology that has ever escaped from Java Hell is used behind the scenes. You're going to have to know them all. In depth. There are so many references to references to references that you're going to have half a dozen files open just trying to figure out how to make one silly change. Be careful, do something wrong, even in an external portlet, and you could break your install. (why do you think I'm here bitching while waiting for 5.1.1 to download!?) And of course in Java web development style, every little change you try out means restarting the application server, regardless of whether it's in an actual java class or just raw HTML in some template. Wearing a watch? Don't.

5) Documentation was good at around 4.4. Now it sucks. And the fact that expired and the last Wiki overhaul broke every link in the universe, don't even bother using Google. The Wiki isn't getting updated very well. Development documentation is awful. Just awful. The days of the Lifecast seem to be over.

6) The community is virtually non-existant. I would speculate that 70-90% of all questions asked in the forums go unanswered or unresolved. People posting code examples don't often check their work (because it would take about an hour to do so!). The forum software itself doesn't handle code examples at all because they're using a stupid fixed width template.

7) It's a resource hog. Most Java portals are. It's amazing at all the code that runs just to render a typical payload. They've got all their bases covered, for sure, having used every existing technology all at once, but unfortunately there's only one guy playing, and he's standing in right field with his finger in his nose looking up at some birds.

7) What's with the Christian portlets? I mean, Jesus H Christ, nobody ever mentions this. It's a bit odd. Is it a statement? "Look, we know this shit is hard... so here's a Prayer Portlet."

The sad thing is that Liferay seems to be miles ahead of other opensource portal solutions. Nothing would make me happier than a complete feature freeze and a complete examination of how the system is actually being used by, like, people 'n stuff. I really think that all of the features are there, they just need to work properly and take into consideration more than one use case.

As it stands I am very close to keeping Sharepoint as my internal portal even though I really don't like being locked into Microsoft products. The project I'm currently using Liferay for is an extranet and not entirely critical. Based on what I've learned from the experience there's almost no way that I can deploy this software internally and expect it to function well in the short or long term. (BTW, this little project of mine is supposed to be demoed tomorrow. Haha. haha ahdhhahaha haha ah ah ahha aha ah aha aaaaaahhhhhhhhhhhhhhh ha.)

Oop, my download is done. Ahh, nothing like a fresh install to reinstate my sense of hope.

Back in ten minutes...

Tuesday, August 5, 2008

Oh GNU You're So Awesome!

It's called "Linux", get over it.

We're all comfortable with it. We all know what it means. Tooting your own horn just makes you sound like, well, someone tooting his own horn.

Look, we're all impressed that GNU is responsible for about 30% of any "Linux" operating system. And thankfully, the remaining majority of contributors don't seem to be quite so self-obsessed.

Here's a tip: you should have picked a better name.

Really, Mr. Stallman, do you lay awake at night thinking of such petty things?

Monday, August 4, 2008

Alfresco - "Commercial Open Source"

So I don't want to sound like too much of a hater, although the purpose of this blog is to give me a place to vent, but I'm very unimpressed with Alfresco's "open source" business model.

While the Church of the Free Software Foundation would have us believe that source code is a basic human right, other companies like Alfresco have a more restrictive view when it comes to the licensing of their code. And really I'm ok with that. Just because something is trivial to duplicate and distribute does not mean that it has no monetary value. Work is work.

What I do have a problem with are various voices from the Alfresco blogs ripping on closed source vendors and patting themselves on the back as if they were on the same level as "real" open source companies like, for instance, the Apache Software Foundation. There's a big difference between commercial open source companies like Alfresco and less restrictive entities like Apache.

Alfresco maintains two open source branches of their software. One for the so-called community, and one for the Starship Enterprise (i.e. paying customers). What's wrong with that?

Well, for starters I've come across bugs in Community version of Alfresco that I know are fixed in Enterprise. Even though the Community or "Labs" version of Alfresco continues to plow along and is nearly at version 3.0, show-stopper bug fixes from Enterprise 2.1+ are still not merged into Community. Ok, it's open source, so I can fix them, right?

Let me ask you this: why should I? If I were to fix the JSR-168 authentication flaw that's holding me back from actually using Alfresco, then I would be duplicating work that has already been done. Not only that, but the severity of the flaw would almost certainly mean that my fix would be of lesser quality than the fix that already exists because I am not an Alfresco developer. Even if I did fix it, and fix it well, there's nobody to give my fix back to because Alfresco doesn't take a lot of community contributions, and (have I mentioned this?), it's already fixed.

So let's talk about the Alfresco Community for a moment. Where is it? I'm seeing an outdated Wiki and some very inactive forums where moderators spend more time moving threads around to "appropriate" forums than answering questions. The use of the word Community here is a bit of a stretch, and has no greater value than I'd expect to get from a closed-source product. The Alfresco Community is less of an "open source community" and more like a gathering of frustrated but oddly grateful beta testers.

In addition to these not-so-opensourcey qualities of Alfresco is the biggest slap in the face of all: the cute little "nag screen" at the bottom of every page rendered by the Community version. You know, the one that reads: "This software might not be any good because the company running it hasn't paid any money." While much of the look and feel of Alfresco can be easily changed, this little gem is actually buried in the Java source. On purpose. To irritate you into paying. Cute.

"Dude, why don't you just shut up and pay for the software?"

I'm not convinced that it's worth paying for yet. If Alfresco has a similar pricing structure to other open source commercial/support companies, then it's probably more expensive than its closed source competitors. Whoa, did I say that? Yeah. Despite what you might have been led to believe, products like Sharepoint from terrible companies like Microsoft are actually dirt cheap for small to medium sized companies. Sure, you don't get free support with the license fees, but at least I'm not forced to pay extra for something I haven't to this day had to use.

So why should I fork over the cash if the "demo" version I'm using doesn't even correctly implement a fairly straight-foward feature? A feature that is actually specified in a formal standard no less!

"Yeah, but it's worth the price because it's open source, which is all open and not all closed 'n' stuff."

I love open source, but in this case I'm not really sure what the benefit is. I don't use open source software because I'm afraid that some day the vendor will go out of business and I'll be able to continue modifying the software myself. I'm certainly not going to just assume that the "community" is going to pick it up and save the day. I do like open source because I can modify the behavior of the software and fix bugs if need be, but this is really something that I rarely want to do. I'm interested in the software because I want to use the software. And I certainly don't want to be fixing bugs in software that I'm paying support fees for.

If an open source application isn't fully open source then its appeal is greatly diminished. The community around it is diminished. It's really only slightly more interesting than closed source alternatives.

"Ok, so you're still saying that Alfresco is more intersting than its closed source competitors. What the hell is your problem?"

Well, frankly I'm just sick and tired of the Alfresco bloggers ripping on closed source companies. Alfresco is not a community driven open source project, and I certainly don't feel that they have any business taking the moral highground and ripping on their closed source competition. Suck it up, Alfresco, and open the the real source. Microsoft might have its head up its ass when it comes to understanding the benefits of open source, but you've only got one eye peeking out.

"Does it make you feel better to make up these insulting questions that I, the reader, am supposedly dying to ask you?"

Why, yes. Yes it does. Thanks.