It's almost time for the next release

It's just about that time again: the next release is just about ready. In fact, for anyone who's feeling adventurous, here's a beta release of LnBlog 0.4.1. At least, I think it will be version 0.4.1 - I'm a little torn as to whether to use a higher version number.

You see, aside from a few bug fixes and a couple of small feature additions, there isn't much new in this release. That is, there isn't much new for people who don't program and only speak English. The main focus was adding internationalization support.

The next release includes several fixes for character encoding issues and will be fully translatable. I've added support for PHP's GNU gettext extension as well as an ad hoc translation facility. The idea is that since gettext isn't a standard module, you can also have translations in simple PHP files that don't depend on it. I even added a fix for the character encoding conflict with generated text from strftime(). Sadly, that fix depends on the iconv extension to work properly, but it's better than nothing.

My other focus was documentation. Not end-user documentation, although there's still plenty of that to write, but developer documentation. I used Natural Docs to auto-generate technical documentation from comments in the code. Yes, I know auto-generated docs have a nasty tendency to not be very good, but it's better than hand-written docs that easily get out of sync with the code. Besides, Natural Docs has a really nice syntax which looks a lot like how I would document the code anyway. You can see the results of my furious code commenting in the full LnBlog technical documentation that I've uploaded. It contains documentation on the basic function of all pages, full documentation on configuration constants, and documentation on the methods and properties of the back-end classes. With this, it might actually be possible for people other than me to write plugins that do something interesting.

Lastly, I should probably mention the couple of new features. First, I added a calendar plugin for the sidebar. It still needs some polish before the final release, but I though some people might like it better than the old archive list.

Second, I've added a simplified mechanism for overriding configuration constants. In the previous version, you had to add PHP code to userdata/userconfig.php. Now, you can do it in userdata/userconfig.cfg, which is a plain text file. It uses a simple name=value format. So now, instead of doing something like
define("DEFAULT_CHARSET", "utf-8");
in userconfig.php, you can just do
DEFAULT_CHARSET=utf-8
in userconfig.cfg. Yeah, it's not a big difference, but it's less prone to syntax errors for people who aren't programmers.

Anyway, I still want to do some testing and polishing before the official release. If all goes well, I might make it before Thanksgiving (that's the 24th for those not in the US). If not, then it will probably be another week or so. At any rate, I'm aiming to be done with it by the end of the month.

Version 0.4.0 is finally up

I have just released LnBlog 0.4.0 final. It is available from the download page. Aside from a few bug fixes, this is pretty much the same as the beta releases, which you can read about in the previous posts. If you care about the gorey details, read the ChangeLog. For those with a short attention span, here's the short list of upgrade details:

  1. The fsconfig.php, passwd.php, and sitemap.htm files have moved from the installation root directory to the "userdata" subdirectory. When you do the upgrade, copy them there. Note: you will need to go to the admin page and run an upgrade for each blog as well.
  2. There is now a plugin system. Various features that were once part of the core have moved to standard plugins, including the sidebar modules, e-mail notification for comments, and RSS feed generation. I've also added plugins to generate an Apache .htaccess file when a blog is created or upgraded and one to add RDF code TrackBack auto-detection to blog entires.
  3. There were a sickening number of bug fixes, including problems with the file writing setup and Unicode handline. Thanks to WGM for all his help on the alpha and beta releases.

I think the posts from the beta releases pretty much say everything there is to say, so I'll leave it at that. As usual, if you have any comments, questions, or bug reports, feel free to e-mail me or leave a commnent.

One more beta

Well, here's another beta release. This one is verson 0.4.0 beta 2 and, with any luck, this will turn into the final release. This includes several bug fixes, including a bug in deleting comments, a bug in the login page URL redirection, and hopefully, the bizarre blog creation bug that's been plaguing WGM. I did a little markup and documentation clean-up.

We're up to a beta now!

Here's another test release for anyone who's interested. I'm calling this one version 0.4.0 beta 1, since I think it's getting close to ready. I've been doing a lot of bug fixes, as you may have noticed from the previous comment threads. And speaking of the comments, I'd like to thank WGM for all the input and bug reports. I really appreciate the help.

I'll start with a brief recap. Since version 0.3.4, there have been an awful lot of changes to the back-end code. If you're actually reading the code (and I don't know of many people who are), I've been trying to move as much as I can out of the page and template file and into the classes and plugins. The idea is that the "frosting," if you will, goes into the plugins and can be easily removed or reworked independent of the rest of the code base, while the classes provide a rich inerface for data retreival, storage, and generation, and so can be reimplemented in different ways, if needed. This leaves the page file more or less free of implementation details and essentially maintenance free (although it's never that easy) and it leaves the templates largely free of code so that users can tweak the heck out of them.

On the feature side, not a lot has changed. I've added a plugin system and moved the sidebar, site map, banner, RSS stuff, and comment notification to plugins. Before, all that was in either templates or classes, so if you like all those things, then nothing has changed. If, however, you want to get rid of any of them, you can now just move or delete the plugin file. I've also added two new plugins in this release: one that adds META tags to the page (description, author, and generator tags, to be precise) and another that creates an Apache .htaccess file when you create or upgrade a blog. Right now, the .htaccess file just redirects direct requests for blog data files, but I plan to add other capabilities sooner or later. Note that on some Apache configurations (e.g. Ubuntu's default configuration), this .htaccess file can cause an internal server error. If that happens, you will have to either change the server configuration or just delete/edit the file manually.

Among the accumulated bug fixes in this release are better handling for Unicode posts, fixes in the file writing setup, and various comment handling fixes. If you want to try this release with data from LnBlog 0.3.4, you will move your passwd.php, fsconfig.php, and sitemap.htm files to from the LnBlog root directory to the userdata subdirectory and then upgrade your blog's wrapper scripts to the current version. To do this, just login to the administrative page, put the name of your blog into the upgrade box (if your blog is in the web root, the you should just need the directory name, not a full path), click the button, and wait. This could take a few seconds.

That's it for now. If you have any suggestions or bug reports, you can either e-mail me or post a comment. Have fun!

Perhaps another?

How about another alpha release? You can download it here.

Things are coming along slowly. I added a fix for posting in Unicode in LBcode markup mode, along with a few other bugs. I also did a little more work on the plugins. For one thing, I moved the RSS handling into several plugins, since it doesn't really need to be in the core or have any kind of real user interface. There are actually 4 RSS-related plugins now: one for a display in the sidebar, one for link elements in the page head, one for generating the RSS 1.0 files, and one for generating the RSS 2.0 files.

I still need to do more with plugin configuration. I'm working on a generic plugin configuration interface, but I need to adapt some of the ad hoc configuration pages I had to work with it (I'm thinking of the sitemap config in particular). I also need to go through and finish adding all the events for plugins to tie into. There's still a lot to be done, especially in terms of documentation, but I'm making progress.

A new test release

Well, I've been slowly plugging along at LnBlog 0.4.0 for a while now, and I have a test release for anyone who cares. Feel free to grab the 0.4.0 alpha 1 release and give it a spin. Note that this requires upgrading you blogs. Since this isn't a stable release, you might consider making backup copies of your blog files and you old LnBlog installation. Also note that the passwd.php, fsconfig.php, and sitemap.htm files have moved from the LnBlog installation root to the userdata subdirectory.

There's still a lot of polishing work to be done and not many visible changes, so don't get too excited. I've added a few small usability enhancements, such as smarter redirects and form field highlighting, but the big change is the addition of a plugin system. It's an event-driven plugin system, if that means anything to you, which allows plugins to be added or over-riddenon both a system wide and per-blog basis. In fact, as of today, the banner, menu bar, and side bar are all created using plugins.

Don't look for a stable release any earlier than a few weeks from now. There's still lots of coding and testing to do, plus I'm way behind on documentation. I'm working on some technical documentation (e.g. for plugin authors) as well as adding some comments in the code for auto-documentation using Natural Docs.

I think I'm done adding features for the 0.4.0 release, but I'm already thinking about 0.5.0. One thing I'd like to do is add some plugins or conditional features to take advantage of Apache's .htaccess files. In particular, I'd like to try to use mod_rewrite to get rid of the need to upgrade the PHP wrapper scripts in each blog data directory. Another cool thing would be to add alternate implementations of the back-end classes so that data could be stored in a MySQL database. The idea is that you could simply set a single configuration variable to switch between file and database storage. I've already tightened the encapsulation of the back-end classes in preparation for something like that, but it's still a long way off.

Notice the lame search feature

I finally got around to adding a lame search feature. Right now, it's just a box and button that employ Google to do all the heavy lifting, since Google's search facilities are much better than anything I'm likely to come up with in a reasonable amount of time. I'm planning to add a simple built-in search facility as well. You'll be able to configure the search via a planned "panel configuration" system.

I'm planning to make the sidebar, menubar, and banner customizable with a simple plugin system. Each plugin will know how to configure itself and store its configuration and you will be able to set which plugins are used and which order they are initialized in. Of course, this is all still a long, long way from finished, but you'll be able to see the progress on this site. Stay tuned!

Progress on next release

I've been puttering about with LnBlog a little the last few days. I've slowed down considerably from the somewhat frantic pace of the last few releases, which is undoubtedly a good thing. Now it's time to clean up the code and plan my next move.

The first order of business is to increase the flexibility of the code. To this end, I'm trying to encapsulate as much logic in the back-end classes as possible, with the intention that they will eventually be able to examine the run-time environment and automagically determine the correct paths, settings, and so forth. Basically, I want to be able to do the same kind of thing that I do with the filesystem classes with every other class, i.e. dynamically determine the proper subclass and create an instance transparently. One nice thing about doing this is that it would allow me to add an optional database back-end, so that the software would scale better for higher-traffic sites (in particular, I don't think the user account code would scale too well).

I'd also like to get together a framework for creating plugins. Right now I'm working on sidebar panel plugins, but I'd really like to come up with something more generic. For instance, plugins that allow you to add "smart-quotes" to entries or auto-generate acronym and abbreviation tags. Frankly, though, I'm not really sure how I'm going to do this. One idea is to simply make plugins a subclass of whatever they're plugging into. That allows pretty much infinite flexibility, but the problem is, then you can only use one plugin at a time for any class. On the other hand, I could just make each class have a list of active plugins and apply them when the class is created and at other appropriate times, but that seems a big ugly.

As you probably guessed, it's going to be a while before the next release. On the up side, though, I suspect it will be worth the trouble of upgrading. I'll try to post new developments here until them.

LnBlog 0.3.4 released

Well, I'll be away on vacation for a week starting on Saturday, so this is probably a good time to put up the next version. You can get it from the download page.

This release is just a collection of small enhancements and bug fixes. You can look at the change log if you really want the details. Among the noticable enhancements are some HTML cleanup, the edit/delete/upload links for entries have been moved out of the sidebar and now respect security, and I've updated the long-neglected Skepticats theme.

As usual e-mail me any suggestions or bug reports. Have fun!