A year ago, after much consideration of differing tools, I looked at all of the open source Content Management Solutions and came to the conclusion that nothing solved every one of my needs well.
I needed the following:
- A blog
- A photo gallery
- A web mail program
I tried quite a few solutions and came down to the following solutions that seemed to do their respective jobs best:
- A blog – B2Evolution
- A photo gallery – Gallery 2
- A web mail program – Squirrelmail
Then I ran into the following problems:
- No common authentication scheme for these three tools. In essence I had to log into each of them separately. This is a common problem to using multiple tools.
- A strange Out Of Memory error that occurs on my Apache web server when it runs too long. I don’t know if it’s B2 Evolution or Gallery 2 doing that. Currently the web server restarts its process every hour to avoid this (not really an optimal solution, don’t visit at the top of the hour)
- Squirrelmail has many of the features I want, but the interface is lacking.
- No way of tying the information together. I can not use the same categories for blog entries, photos, and email messages together. This was not an original requirement but became more apparent over time as I began using other tools, like Agendus on my PDA.
- PHP seems to have quite a few security holes, requiring a lot of patching/restarts of the web server.
So, with the hubris that most developers have, I decided it would be better to just write my own tools to do this.
I have looked at the following programming environments:
- Ruby on Rails – A Ruby Application Server for web development
- Zope – Like Ruby on Rails, but in Python
- J2EE – A web programming environment for Java
Each has its own pros and cons. Both Zope and Ruby on Rails appear to be very much tied to database design and relationships. J2EE is looking like a good choice for complete abstraction, but with that power comes a lot of work.
Then, there is the research needed to make certain aspects of blogs and photo galleries work.
In order to understand the implementation of Trackbacks and other Blog-related concepts, I’ll end up diving into B2Evolution’s code. In order to find out how caching is handled for photos, I’ll end up diving into Gallery 2’s code.
At that point, I might as well force those tools to do what I want.