WordPress is a Mess

« previous entry | next entry »
Jan. 5th, 2006 | 05:19 am
mood: irritated irritated

A few weeks ago Phil Ringnalda posted to say that WordPress 2.0 would ship with Atom 0.3 feeds. Atom 1.0 (RFX 4287) has been done for a good five or six months. Sam Ruby gave notice in July that 0.3 feeds would receive warnings from the feed validator.

It's okay to not be on top of things, but a bug was filed in July. It's still not fixed, despite recent patches. That's bearable, but marking it as an enhancement instead of a bug seems ridiculous.

The Trac argument makes me wonder who is an actual dev and who isn't. I still don't know how to tell, but I'm pretty sure matt is the same Matt posting in the dev blog.

Anywho, I decided to take a stab at fixing the self and alternate links in the current patch. I'm appalled by the code. There's no comments. The documentation is sparse and out of date. Almost everything is a function (who needs objects?), and all files are included (mmm, namespace pollution). There's three classes in one file (aptly named classes.php). Many functions are idiosyncratic. For example, function get_category_rss_link($echo = false, $cat_ID, $category_nicename). $echo has a default value, but is at the beginning of the parameters. Additionally there's a bloginfo() versus get_bloginfo() that differentiates between echoing and just returning a string. $category_nicename isn't even used. Input filtering is done all over the place, despite heavy use of an apply_filters($tag, $string). The $tag types don't seem to be documented or tracked.

I spent quite a few hours writing a new function that generates the prettiest possible URL for a set of query parameters.
http://wp-install/?year=2006&monthnum=01&day=04&feed=atom
is converted into:
http://wp-install/2006/01/04/feed/atom/
(assuming the permalink format contains %year%/%monthnum%/%day%)
The function is big and ugly because there's a bunch of different, task-specific, permalink formats. For example, you can search for 'foo':
http://wp-install/search/foo/
or view all posts in category 'bar':
http://wp-install/category/bar/
and you can combine the two queries to search for 'foo' within category 'bar'. However, neither intuitive form is correct. You have to fall back to a query string:
http://wp-install/search/foo/category/bar/
http://wp-install/category/bar/search/foo/
http://wp-install/?s=foo&category_name=bar
Plugins can define new rewrite rules. I have no idea how to handle them in my function because they're completely unpredictable. The only reason for this (that I can think of) is to allow people to customize their permalink URLs. When was the last time you felt a burning need to do that?

I've previously heard that the WordPress team failed to release security updates, even when a patch was provided and exploits were being used in the wild. If nothing else, they encourage you to make much of your installation writable for the server, and give commands to make it writable to anyone on the machine (chmod 666).

I never want to look at WordPress again. It works, but it doesn't even try to be good software, as far as I can tell. Here's what I look for:
  • Features
  • Clean interface
  • Standards compliance
  • Security
  • Good software design
At least WordPress has features and the interface isn't bad. The awful design combined with an apparent disregard for standards or security drives me away. I know software design isn't something people usually review; however, I'm a programmer and there's a point when code seems unmaintainable, or at least unpleasant to work with.

I'll use Typo. It could use work, like all software, but at least I don't feel like stabbing myself in the temple when I look at it.

Link | Leave a comment | Add to Memories | Tell a Friend

Comments {4}

AmIDevOrNot?

from: [info]weblog.philringnalda.com
date: Jan. 6th, 2006 06:24 am (UTC)
Link

Dev-hood in WordPress is a fairly slippery concept. Matt and Ryan Boren are the only ones with commit access, so at the simplest level they are the only two devs: either they feel that something should be done or it isn't done. Beyond that it's all rather fuzzy: there are some people who do more patches than others, and there are some undocumented keywords that seem to generally be added by a limited set of people, though I don't know if they are supposed to only be added by that set of people, that may or may not trigger an approximate version of patch review. Dunno: my policy has been just to file, patch if I've got it, and then absolutely ignore it until I see from the commit mailing list that it went in or was fixed by something else. I assume that like everything else, the actual work gets done on IRC, but there's only so many hundred hours every week I can waste that way.

Reply | Thread

Atrus

Re: AmIDevOrNot?

from: [info]nikolasco
date: Jan. 6th, 2006 07:10 am (UTC)
Link

For the purposes of this entry, I'm concerned with who has the authority to speak for the project.

Reply | Parent | Thread

(no subject)

from: [info]trs80 [typekey.com]
date: Jan. 11th, 2006 01:31 pm (UTC)
Link

I'm still waiting for a nice django-based weblog app to come out.

Reply | Thread

WordPress Development Model

from: anonymous
date: Jan. 20th, 2006 02:05 pm (UTC)
Link

To clear some things up: matt (Matt Mullenweg) and ryan (Ryan Boren) are the only two people with commit access. Beyond that, there's a group of people called bug gardeners consisting of me (David House), skippy (Scott Merill), morydd (Sean Evans), westi and MarkJaquith (Mark Jaquith). They go through the bug list (http://trac.wordpress.org) and mark bugs as bg|has-patch, bg|needs-patch, bg|reporter-feedback, bg|commit (commit candidate) or bg|needs-testing. Once every week or so matt and ryan go through the commit candidates list (http://trac.wordpress.org/report/9) and commit a lot of bugs with patches on.

Reply | Thread