Every year or so, the excellent staff from the excellent Weblog Tools Collection runs a Plugin Competition. This is a very exciting moment of the plugin year because it fosters plugin coding and plugin ideas, and introduces new coders.
This year, 50 plugins were submitted, which I think is excellent. As I looked at some of the plugins I started to have ideas or comments that may (or may not:) qualify as valuable feedback for these plugin authors, so I thought, why not sort of review them all? Could be interesting and fun! So here it goes, 2008 Plugin Competition Review, Part One.
Disclaimer :
- This is a totally personal and unsollicited initiative, out of curiosity and because I like to have a look at others' codes and ideas. I don't assume the following will be taken in consideration or even read by the official judges of the competition.
- I reviewed almost all the plugins. I didn't review those which I thought were too complex for a quick review to be fair and do the author's work some justice. I also didn't review them when I felt they were targetting an audience that I have no clue about (there's a Real Estate plugin for instance, or a Comic Book manager). Finally, I didn't review plugins when I just didn't understand what the heck they were about. The first thing people get to see about a plugin is its description, and a crappy description will mostly ruin the best plugin. Pay a lot of attention to it!
- As a plugin coder in mind, the very first thing I have a look at when testing a plugin is: its code. Most of the time, my opinion is done before I actually try the plugin within WordPress. The following are mostly, if not only, code reviews and thoughts.
- As an experienced WordPress user, I have particular needs that plugins can cover, but sometimes a plugin just don't ring any bell. It can be hard to express an opinion about a plugin that seems totally useless (when obviously it can be useful to others)
- It's not because I say "this sucks" that it actually sucks. What I mean is, "Me thinks that it sucks, but hey, who am I to judge, and there's more than one way to do it". Don't get too upset if I say something sucks :)
- All I know about WordPress coding, I learned it from reading sources — WP and other plugins, and from others' advices. When I read about a plugin concept, I always ask to myself "How would I do this?" and then have a look at the plugin. Sometimes my way is better, and sometimes I learn something valuable from the plugin because their way is smarter, shorter or simply better. Read sources.
- Most of the following comments or critics should easily apply to my own plugins, particulary the ones I wrote 3 or 4 years ago. By no means I'm the uber definitive authority on plugins. I'm just sharing ideas :)
Still with us? Let's go!
Adminimize
Adminize minifies some areas of the admin backend.
The name is really good, but I don't like the code of the plugin, for 2 main reasons.
First of all, the whole plugin is something that should be loaded only when viewing admin pages: I would have done a minimalist plugin file with just something like if (is_admin()) {include(another plugin file)} so that when viewing a public page (ie the blog) the webserver would not waste a single nanosecond reading files it doesn't need.
But most of all, the plugin fails with my main coding concern: add all your options into one single database entry, damnit! I totally hate it when doing some DB maintenance I find out that a plugin added 15 lines in table wp_options, when one would have been enough.
AnyVar
AnyVar allows for creating alias to be used in posts, such as [ebay_id] being replaced with 123456789abcdef
Clean code encapsulated in a class, one DB entry to store everything you'll input, things are looking good. I would have put all the admin page stuff into a separate file that would load only when in the admin area, but that's minor.
What I don't get, though, is why the whole plugin doesn't use the internal WordPress Shortcode API to replace all these [stuff] instead of using output buffering. Okay, I guess you could create any kind of alias ([stuff] and <stuff> or !!stuff!! or whatever, not only using braces) but that seems rather counter productive to me. Rule #rand(1,10) of WordPress coding is: always use the WP APIs when possible.
Automatic Timezone
Automatic Timezone says it all, it automatically sets your timezone (which is one of the few lame tasks when setting up a new blog, the computer should do this for you)
Otto is a far better WP coder than I am and is a fine code snippet provider in the wp-hackers mailing list. His plugin is cleanly written, heavily commented, ready for translation, and shows some smart behaviors such as the auto-deactivation if it cannot run on a system.
What could I say? I hope this plugin will get integrated into WordPress' core, with a failover to the actual manual setting for the poor chaps running PHP4 on Windows servers.
Broken Links Remover
Broken Links Remover checks every links in posts and hides them if they are broken (ie leading to 404 or other unexpected results)
About the "what": having dead links in posts is both inevitable and something I don't care. Some posts on this blog are 4 years old so I don't mind if something completely outdated points to something missing. A broken link in a fresh post is something I'll probably find out by myself fast. (And I really don't think broken outgoing links have any impact on SEO)
About the "how": if I understood things correctly, for every link in every post that is displayed, the plugin adds one extra DB query and maybe one remote HTTP request. That is totally overkill.
My way to warn about broken links would be to check at publish time, and add something like an ugly popup over the "Write" screen telling that, dude, you've link to 404s, wtf. But definitely not at render time, especially on old outdated forgotten posts.
WordPress Editor Extender
WordPress Editor Extender enhances the WYSIWYG editor with more WYSIWYGuinness
The "Visual Editor" is something I hate so much that I would rather amputate myself than try to do something with it. However I'm glad I found about this plugin because I didn't know about the author's site and I really like it :)
Flickr Gallery
Flickr Gallery pushes the built-in [gallery] shortcode a step further to allow embedding images and galleries from Flickr
Dan Coulter knows Flickr pretty well and that's a robust PHP class that comes into play here. The plugin code is as clean as it gets, is ready for translation, uses the shortcode API. I wouldn't mind some more inline comments, but that's all I can really ask for with this plugin. Well, except for *just one* DB entry in wp_options to store all of the 4 options, but on the other hand I learned something from his code about how /wp-admin/options.php handles option updating ;)
All in all, that's a plugin I really like.
Image Browser Extender
Image Browser Extender enhances the uploaded image browser with allowing you to insert multiple images at once
Yet another plugin for the visual editor, but it seems to fix something I don't like with the default image browser (when you insert an image, the browser frame closes, so if you want to insert another image you have to re-open it)
So, I like the idea of this plugin, but I'm not too fond of the product itself. First of all, why limit it to the visual editor? I think it would much more efficient to add an icon next to the "Add Media" icons that are independent from the editor, rather than add a button into the WYSIWYG crapola. Also, a nice touch would be that when you select a type and size of an image (with or without link, full size or thumbnail, etc…) a cookie would remember the setting and use it next time.
I didn't really glanced the code of this plugin, since I don't like therefore know the internals of TinyMCE, but beware of the wp-config.php include that is deprecated on WP 2.6 (wp-config.php can be moved)
So, basically: very cool idea, I hope the plugin improves in the future.
Invite Friends
Invite Friends lets you… invite friends, so they'll register as users in your blog backend
I cannot think of a reason I'd use this plugin (which is not an evidence of quality or lack thereof, of course) but I found it quite amusing that someone decided to use a setting that has been part of WordPress for years and never used since: field user_activation_key in table wp_users (at least I don't think I've ever seen this field other than empty)
The plugin is a rather neat example of query var and template redirecting, which is a tricky area of WordPress coding.
There are however a number of little details I noticed: I don't like CamelCase function names although that's a really personal matter; the plugin does define constants WP_CONTENT_URL and WP_CONTENT_DIR as expected to comply with WP 2.6 but don't use them consistently (for instance, doing a require ABSPATH."/wp-content/plugins/...; the plugin enforces logins to be at least 4 characters long and damn it, I hate it when I can register on a site with login "Ozh" because it's too short, no, seriously, I mean, WTF.
Other than that, a rather nice plugin, ready for translation and using well internal APIs and functions of WordPress.
Live Blogroll
Live Blogroll shows recent posts from a link in your blogroll when a user hovers it
The plugin code is somewhat inconsistent, it has good and bad points. Indenting varies from block to block, which makes it annoygin to read. Javascripts are correctly added to pages using the appropriate functions, which is something neat enough to be noticed. The code block that tries to guess a feed location, assuming everything is either Blogspot, Typepad or WordPress, seems a bit weak to me. The wp-config.php requires may not work on some WP 2.6 if it has been moved.
There's also a cool idea I'd like to share: one of the JS file contains a few variables that are dynamic, therefore the JS file is a PHP file, okay. But instead of including wp-config.php in order to use a plugin function that will guess the needed var values, I would simply pass those values to the .js.php file as a query argument. As a result, you don't need to include wp-config.php which has a minimal cost of 7 DB queries.
Overall, this is a rather nice idea and decent plugin for those using blogrolls.
Manageable
Manageable lets you edit post slugs, date, title, author, categories, anything, inline right from the Manage page.
This plugin looks like a killer idea and is probably a plugin I'll end up using.
I would have splitted the main file into smaller files that would load only if (is_admin()), I would make the wp-config.php including fully WP 2.6 compliant, and I would make sure the javascripts are correctly added, those are my thoughts when looking at this plugin.
I will definitely give this plugin a real try.
Media In Response
Media in Response allows your visitors to upload images or videos in their comments
This is exactly a plugin I would have liked to see on action on the developer's site. I mean, when you code something that is for commenters, let your commenters see it, right? Also, I wonder how spam can interfere with this. What about disk usage, too, is there any limit settings?
Other than that, I didn't actually looked at the plugin.
And that's it for Part One
Time permitting, I should be able to publish part 2 within the next two days. If you don't understand a comment I made about your plugin, I you feel I just didn't understand its purpose correctly, or if you think my suggestion is dumb, please respond here!
Shorter URL
Want to share or tweet this post? Please use this short URL: http://ozh.in/it
Hello Ozh,
thanks for your statement to the plugin Adminimize. I wanted to write a small plugin, then i become many wishes from users and i have no time for better code. I will use your information for a better code and better performance and write this in the next version.
Sorry for my bad enflish.
Ozh, thanks for your Frank views.nice to get them from a developer who has spent a lot of time researching wordpress.
Once a link has been detected as bad, the plugin does make a DB query but not the remote HTTP request. I do agree that db queries are a kill, but most plugins cannot avoid db queries.Atleast this one cannot avoid, if it has to render the functionality it claims.Infact you may well be aware that wordpress internally makes a lot of db queries.
Ofcourse this can be overcome by turning on mysql cache and using full page caching plugins. Also wordpress now has turned on its object cache by default.
I believe that the above will provide a lot of cushion.
I am also planning to provide options for
1)only logging or
2)completely ignoring
links returning certain http status.This list can be determined by the user.
cheers,
Rajesh
[…] 2008 Plugin Competition Review, Part One […]
Random thoughts:
AnyVar doesn't use the shortcode API because he wanted to also be able to replace the text if it's in a theme file or anywhere else. The shortcode API only applies to the post content. To replace text in a theme, output buffering is required.
I actually like the WYSIWYG editor in WordPress now. It works fairly well.
Manageable is super awesome. I've been using it ever since it popped up on the competition site.
And yes, if I find some free time soon, I'll convert Automatic Timezone into a core patch. :)
Ozh, first off, digging the disclaimer, very well put but I will guarantee that people will still jump down your throat for some of your comments. So let me be the first… :)
To be honest, my two submissions, WordPress Editor Extender and Image Browser Extender, were done in a few hours each and was for the competition and for my wife who kept asking me to build them for her. So the code may not be the cleanest and efficient.
It did not seem like you had too much critiquing of the WEE plugin, but thank you for the kind words about my site.
For the IBE plugin I actually second your thoughts. There are plans for creating a non-editor dependent version but the time has just not been there and is ever so slightly trickier because WP uses jQuery 1.2.3 and most of the jQuery UI stuff that I would use to make it easier will only work well with jQuery 1.2.6. I am working on some work arounds for my PhotoXhibit plugin that is giving me ideas so we may see an updated version soon.
As for the wp-config problem, that is why it is hard to develop plugins for WP and keep them maintained. Each version the seem to make little changes that cause huge issues for plugins. It get frustrating and I wish they would just add some depreciation code for a few versions so we don't have to change out plugins every 6 months.
Anyway, I am ranting, I appreciate that you took the time to look thru all the above plugins and I appreciate your feedback.
It is a good suggestion to add this option, namely checking for links at publish time, in the plugin. But broken links typically arise only in older posts.In newer posts either the webmaster himself detects it or a loyal reader alerts him of such broken link…
but in links on older posts, the chances of they getting broken is more…
Eg: 1) sites you linked to a long ago, might move those posts or pages to newer locations.
2) sometimes even the entire site may cease to exist.
3) It is also possible that a hacker targets such links on older posts and redirects it to somewhere else..
Thanks Ozh.
I would prefer Admin Management Extended plugin instead of Manageable. That's a really good one:
http://www.schloebe.de/wordpress/admin-management-xtended-plugin/
Hello Ozh,
i have use your information for a new version with one db-entry, small queries in the admin-area and i ask for admin (is_admin()).
I think, now is better. I will lern a better code with oop in php. The code of Anyvar is very nice and small.
THX
[…] please and puh-leaaase, if you are a contestant and if you didn't read Part One, do read it before you proceed to part 2. There is a mandatory disclaimer that you and me […]
[…] your favorite in the WordPress Plugin Competition. There are some top notch Plugins included, and Ozh has written his review of the entrants in the competition, giving you insights into which are the ones he likes and […]
[…] plugin quick reviews I recently did (Plugin Competition roundup, part 1, part 2) got two consequences so far. First, they generated some feedback from readers asking for […]
[…] spidered: Ozh reviews the WordPress Plugin Competition 2008: Part One and Part 2 of […]