{"id":876,"date":"2008-08-08T17:13:30","date_gmt":"2008-08-08T15:13:30","guid":{"rendered":"http:\/\/planetozh.com\/blog\/?p=876"},"modified":"2008-08-08T17:35:08","modified_gmt":"2008-08-08T15:35:08","slug":"2008-plugin-competition-review-part-2-of-2","status":"publish","type":"post","link":"https:\/\/planetozh.com\/blog\/2008\/08\/2008-plugin-competition-review-part-2-of-2\/","title":{"rendered":"2008 Plugin Competition Review, Part 2 of 2"},"content":{"rendered":"<p>Here is part 2 (of 2) of my &quot;reviewing&quot;, mostly from a plugin coder&#39;s point of view, the plugins running in the <a href=\"http:\/\/weblogtoolscollection.com\/pluginblog\/2008\/07\/26\/its-time-to-cast-your-vote\/\">WordPress Plugin Competition<\/a>.<\/p>\n<p>Please, please and puh-leaaase, if you are a contestant and if you didn&#39;t read <a href=\"http:\/\/planetozh.com\/blog\/2008\/08\/2008-plugin-competition-review-part-one\/\">Part One<\/a>, do read it before you proceed to part 2. There is a <em>mandatory disclaimer<\/em> that you and me don&#39;t want you to miss before you read any comment I could have made on a plugin of yours :) Thanks in advance. Now, let&#39;s go:<br \/>\n<!--more--><\/p>\n<h2>Picture Increment Cron System<\/h2>\n<p><em><a href=\"http:\/\/www.tiafo.com\/plugins\/2008\/06\/14\/pics-wordpress-plugin\/\">Picture Increment Cron System<\/a> turns a collection of pics inside a directory into one post a day<\/em><br \/>\nFun idea. Alas, the plugin is encrypted with <a href=\"http:\/\/www.zend.com\/en\/products\/guard\/\">Zen Guard<\/a>, which makes its source completely obfuscated and unreadable, which is in itself enough reason for me not to install a plugin. By the way, I think this infringes the Plugin Competition guidelines, as well as the WordPress plugin repository, which require plugins to be GPL compatible.<br \/>\nYuck. Sucks.<\/p>\n<h2>Post Tabs<\/h2>\n<p><em><a href=\"http:\/\/pirex.com.br\/wordpress-plugins\/post-tabs\/\">post Tabs<\/a> splits posts into a tabbed interface<\/em><br \/>\nThat is a rather cool idea that will probably find its audience. I could easily use something similar on my blog, for instance on plugin pages where I would have a first tab about the plugin concept, a second tab about detailed documentation, then a tab about download and install instruction, and finally a tab with a FAQ.<br \/>\nGood stuff: all the admin part is in a separate file that doesn&#39;t load in memory when someone views the public part of the blog. The 13 saved options of the plugin are all in the same DB entry. The code is fairly clean and well commented.<br \/>\nWeird stuff: all the javascript is old school code that seems to have escaped from a 1998 web page. I mean, I thought everybody was in love with jQuery nowadays, right? The color picker is pretty ugly too, with a very limited set of colors.<br \/>\nBad stuff: hardcoded path to the plugin directory, nothing is sanitized or checked before being stored in options.<br \/>\nImprovable stuff: all the javascript could be improved and made less obstrusive, with behaviors added to span elements instead of making up links with <em>href=&quot;javascript:something&quot;<\/em>. This would also allow for more degradable stuff when javascript is turned off, instead of having hidden tabs you cannot read. The whole stuff could be more &quot;semantic&quot; too: having an unordered list of tab names followed by divs containing the tab contents seems ugly to me and will be unreadable when printed or with a screen reader. All the javascript should load only if a post on the page needs it, instead of being unconditionally added into the page &lt;head&gt;.<\/p>\n<h2>Role Scoper<\/h2>\n<p><em><a href=\"http:\/\/agapetry.net\/news\/introducing-role-scoper\/\">Role Scoper<\/a> lets you define roles and groups to manage privileges amongst several users<\/em><br \/>\nThis seems to be a very ambitious plugin that will seriously help multi user blogs. To be honest I didn&#39;t test it and gave a quick glance at the code, which looked clean and very well commented, but this is obviously not a plugin you can really judge in a few minutes.<br \/>\nWhat I did like though, and hence this mini review despite my lack of insightful comments, is the explanations, their content and their tone. Very well put, clear, detailed but not overwhelming. Or maybe it&#39;s just that this plugin rang some bell in me? I&#39;m pretty sure that this plugin will be something I&#39;ll remember and point to when I get questions about role managing.<\/p>\n<h2>SEO Smart Links<\/h2>\n<p><em><a href=\"http:\/\/www.prelovac.com\/vladimir\/wordpress-plugins\/seo-smart-links\">SEO Smart Links<\/a> automatically interlinks your posts and pages on keywords matching category, or tags, or posts names<\/em><br \/>\nTo be honest, whenever I see a plugin with &quot;SEO&quot; in its name, I want to trash it. While a small fraction of people truly understand SEO, everybody and their mother seem to have awesome ideas and invent new tricks. Want to make a popular plugin? Use this pompous keyword and you&#39;re almost done.<br \/>\nOK, enough for the rant, what about this plugin anyway ?<br \/>\nCoding style is so-so, with a lot of indenting inconsistencies and no comment to help the reader understand what&#39;s going on. The plugin seems to add between 1 and 4 queries to every post displayed, depending on options, but also seems to hopefully use WP built in query cache to reduce impact.<br \/>\nGenerated links are either with <em>target=&quot;_blank&quot;<\/em>, which is a pain to me as a reader, or <em>nofollowed<\/em>, which has exactly zero SEO impact. I don&#39;t get why on Earth you would chose between these two modes and why they should be mutually exclusive.<br \/>\nThe plugin seems to be a potential candidate for update problems via WordPress&#39; notifier: depending on where you look (plugin name, directory or plugin filename), the name is either &quot;SEO Smart Links&quot;, &quot;SEO Links&quot; or &quot;SEO Automatic Links&quot;, which is not the best way to ensure that WP will always detect when a new version is available (at least according to <a href=\"http:\/\/planetozh.com\/blog\/2008\/04\/4-checkpoints-to-make-sure-plugin-update-notices-in-wordpress-will-work\/\">my empiric observations<\/a>)<br \/>\nOn the plus side, I&#39;ll mention that all options are stored within, everybody says it loud with me, just one DB entry.<br \/>\nAll in all and despite my negative remarks, probably not a bad plugin. I just can&#39;t help having negative feelings towards the implied &quot;man you&#39;re gonna get so goodly rank0red in Google you won&#39;t beeleeeeve it !!!1&quot;<\/p>\n<h2>Show Me Options<\/h2>\n<p><em><a href=\"http:\/\/www.prelovac.com\/vladimir\/wordpress-plugins\/show-me-options\">Show Me Options<\/a> detects the URL to a plugin option page when you activate it (no more wandering through Settings then Manage then Plugins to find the darn submenu)<\/em><br \/>\nThis plugin is a gem.<br \/>\nEven if you shouldn&#39;t really <em>need<\/em> it (I mean, you&#39;re all using <a href=\"http:\/\/planetozh.com\/blog\/my-projects\/wordpress-admin-menu-drop-down-css\/\">Admin Drop Down Menus<\/a> now, right? so searching for a submenu is just a matter of hovering), this is the kind of short plugin that provides just a little help, in just one place, just sometimes, but that will make the whole experience more pleasant. This is the kind of plugin that adds features that don&#39;t look like plugin features: they look like something WordPress does, or should do, out of the box.<br \/>\nI would move everything to a conditionally included file that would load only if (is_admin()), but the plugin is so short that it&#39;s negligible. I would also hook with &#39;load-plugins.php&#39; instead of &#39;admin-head&#39;. The biggest complaint I have here would be to add more inline commenting, but again, this is a short plugin.<br \/>\nThe whole job is done in a smart way. Or at least it must be fairly smart, since I cannot think of any other simple way to do so, and I probably would have not find any simple way at all to do it if someone asked me to code something similar.<br \/>\nThings are not perfect, since the plugin will be fooled by plugins which add multiple pages (one under Manage and another one under Settings for instance) but things will be fine in most cases.<br \/>\nOverall: a simple feature, a short plugin, a great result. No fancy stuff, no amazing interface, nothing that looks like it needed 3 months of work and a ton of files, just a simple idea to improve a simple task with a very smart piece of code. I really like it.<\/p>\n<h2>Simple Flash Video<\/h2>\n<p><em><a href=\"http:\/\/www.simplethoughtproductions.com\/sfv-plugin\/\">Simple Flash Video<\/a> does something with Flash videos. I guess.<\/em><br \/>\nI didn&#39;t review nor try this plugin, but want to highlight something very important when designing a plugin: once you&#39;re pleased with your code and the features, don&#39;t botch up the <em>packaging<\/em>, ie the page that will &quot;sell&quot; the plugin. Don&#39;t let people (or competition judges) guess what your plugin is about, <strong>tell them<\/strong>.<br \/>\nThis plugin page lacks a clear brief intro that will say &quot;this plugin does this and that, and it&#39;s cool because of this and this&quot;. All you see is at first glance is irrelevant information, and features. Features are important to highlight, but it&#39;s not the first thing you want to tell. The first stuff your page has to be about is&#8230; what your plugin is about. Starting by features is like saying to a potential customer &quot;my product has 4 wheels!&quot; when this customer doesn&#39;t even know if you&#39;re talking about a car, a quad bike or a wheelchair.<\/p>\n<h2>Snazzy Archives<\/h2>\n<p><em><a href=\"http:\/\/www.prelovac.com\/vladimir\/wordpress-plugins\/snazzy-archives\">Snazzy Archives<\/a> displays your blog archives as a compelling mosaic of text and images<\/em><br \/>\nThe result of this plugin is quite aesthetic, inspired by the way <a href=\"http:\/\/tumblr.com\">Tumblr<\/a> displays post archives. The plugin in itself is mostly CSS and JS, the PHP part of it is minor and trivial, yet neatly done: using shortcodes, adding JS and storing options are done the way they should.<br \/>\nThe Javascript work might be a bit incomplete, as for instance all the &quot;toggle&quot; links seem to do nothing on my Firefox, but I have to admit that the result is pretty anyway.<br \/>\nHere on this blog, the result out of the box was totally terrible, so I think depending on your theme you might have some CSS work for better integration. Will look best on blogs embedding a lot of images.<\/p>\n<h2>Tabbed Widgets<\/h2>\n<p><em><a href=\"http:\/\/konstruktors.com\/blog\/wordpress\/322-tabbed-widgets-plugin-for-wordpress\/\">Tabbed Widgets<\/a> enhances sidebar widgets with visual &quot;Tabs&quot; or &quot;Accordions&quot; effects<\/em><br \/>\nAs far as I can tell about the code, this is mostly state of the art coding. Everything is clean, wrapped into a class, with correct use of API functions to inject javascripts and everything. The few improvements I can suggest are the use of nonce functions and sanitizations of options before they&#39;re stored, a more WP 2.6 compliant way of guessing the plugin&#39;s path, and moving admin stuff into a separate file that won&#39;t load in memory when viewing a blog page.<br \/>\nAs expected from anything by Kaspars, the interface of the plugin is sexy and appealing. I would suggest a more dynamic way to add widget wrappers, instead of having by default 8 blocks each containing 6 rows. As of now, that makes a lot of empty spaces, and a gazillion &quot;Update Options&quot; button that might be a bit scary.<br \/>\nI don&#39;t exactly have a smart suggestion about it, but I think it would be better if the whole stuff was more integrated with the Widgets page, rather than having to deal with 2 pages (Widgets and Tabbed Widgets). Something like adding at the bottom of the Widgets page a field for &quot;How many Tabbed widgets to you want?&quot; and creating new widgets accordingly.<br \/>\nAll in all, a very clean and pleasant plugin.<\/p>\n<h2>tWPtter<\/h2>\n<p><em><a href=\"http:\/\/www.bochgoch.com\/page\/plugin\/wp_twptter\/\">tWPtter<\/a> allows you to publish short posts via a widget or a page within your blog, or via email<\/em><br \/>\nThe first things that popped in my head were: Wow, fun name, how the f*ck you pronounce that? Wow, totally cool logo. Things start really better when you go &quot;wow&quot; on first sight :)<br \/>\nThen I started to &quot;de-wow&quot; a bit since I could find a download link on the page. Honestly, I had to view the page source, search for &quot;download&quot;, to find out that the tiny link was totally hidden under an ad. There has to be a better way to do this!<br \/>\nThe code is compact, more or less randomly indented and difficult to read. The usual mistakes are there: each option generates one entry in wp_options, plugin path is hardcoded, the author didn&#39;t understand how <a href=\"http:\/\/codex.wordpress.org\/Writing_a_Plugin#Internationalizing_Your_Plugin\">plugin translation works<\/a> (it&#39;s not just using <tt>_e($string)<\/tt>)<br \/>\nThe plugin is cute and probably fun to use, but from a coder&#39;s perspective could be improved a lot. Which wouldn&#39;t make it any cuter or more fun to use, actually, but you know, geeks, they like when everything under the hoods is neat and ordered :)<\/p>\n<h2>Vent<\/h2>\n<p><em><a href=\"http:\/\/blog.clearskys.net\/plugins\/vent-events-system\/\">Vent<\/a> is an event manager that uses the scheduled posts functionality to manage future events<\/em><br \/>\nThis plugin looks like a piece of serious work, in a field (managing events) that will certainly meet an audience.<br \/>\nVery nice code, clean, commented, structured. As everything is already splitted into a public and an admin class, it would make sense to even put these classes into separate files so the admin functions wouldn&#39;t load and compile when viewing the blog. Really nothing more to say about the code as this is obviously a pretty big work that can&#39;t be evaluated in a few minutes.<br \/>\nWhat I want to outline here, once again, is the <a href=\"http:\/\/blog.clearskys.net\/plugins\/vent-events-system\/\">plugin page<\/a>. Clean and clear, with a small screenshot of all the key aspects and features of the plugin: by the time you&#39;ve read the page, you already have the feeling you&#39;ve started using the plugin.<br \/>\nThis really looks like an impressive plugin, with smart integration of its features into the existing admin pages (namely, the Write page)<\/p>\n<h2>WP 125<\/h2>\n<p><em><a href=\"http:\/\/www.webmaster-source.com\/wp125-ad-plugin-wordpress\/\">WP 125<\/a> is a 125x125pixels ads management plugin<\/em><br \/>\nCode is ugly and totally unindented, if such a word exists. Let me be clear on something that may not be obvious for everybody: having clear, commented and neatly indented code is not just a geek useless odd mania, it&#39;s a must have for maintainable code. A few months after you&#39;ve written a plugin, you mostly forgot how things run, how you handled this damn problem or how super smart was your super long regexp. After a few months, you <strong>need<\/strong> your code to be easily readable.<br \/>\nCoding wise, the plugin seems to be improvable in several areas. There&#39;s a click tracking function that stores into a MySQL table something right from the $_GET parameter without any sanity check, which is a loud call for exploit. There&#39;s an install function triggered by plugin activation, that&#39;s fine, but the install file gets included anyway on every page view, that&#39;s a waste. Same thing for the admin menu stuff: they are in a separate file, fine, that&#39;s always included, not fine.<br \/>\nThe plugin creates 2 tables, one for ads and one for settings. Having a table for ads is probably a good idea, since you&#39;ll probably want to keep track of a lot of thins. But creating a table for options doesn&#39;t look like a good idea to me: this will add an extra query on every page view, to read options, and this query would be avoided using wp_options to store them. Queries are expensive, always code as <em>if you were paying for each one<\/em>.<br \/>\nFeature wise, I think the plugin lacks a bridge with Paypal to automate billing, in order to truly save time on cumbersome tasks.<\/p>\n<h2>WP Comment Remix<\/h2>\n<p><em><a href=\"http:\/\/pressography.com\/plugins\/wp-comment-remix\/\">WP Comment Remix<\/a> adds functions and options to the default WordPress commenting system<\/em>.<br \/>\nThis plugin appears to borrow some code and ideas from my own <a href=\"http:\/\/planetozh.com\/blog\/my-projects\/absolute-comments-manager-instant-reply\/\">Absolute Comments<\/a> as well as throwing a few other features in the mix.<br \/>\nThe lack of file and directory structure in the archive is a bit overwhelming: that&#39;s 20 files in the same directory, JS, CSS, .mo and .php all partying together. I find things easier to maintain and understand when files are logically put and ordered. Other than that, the code is very clean and well commented.<br \/>\nThis is by far a too complex plugin to be reviewed here: too much code to ponder, too much features to test, a two paragraphs review wouldn&#39;t do it justice, and given that I&#39;m the author of a plugin in this field, I have a pretty established opinion of what lacks and what would be cool. I will definitely have a later deeper look at this plugin when I have some time (maybe I&#39;ll end up borrowing a few ideas as well!) but after a 3 minutes run on my test blog, I gave it its 5 stars.<br \/>\nGiven the audience this plugin meets (basically: anyone with a WP blog), this well may be a winner for the plugin competition.<\/p>\n<h2>WP Easy Uploader<\/h2>\n<p><em><a href=\"http:\/\/blog.realthemes.com\/wp-easy-uploader\/\">WP Easy Uploader<\/a> lets you upload themes, plugins and anything from within WordPress<\/em><br \/>\nCode looks serious at first glance: clean, using nonces and paying attention to user privileges, things that are a must when you are dealing with a plugin that, basically, will let you overwrite your wp-config.php if you say so.<br \/>\nThe PEAR files inclusion may be troublesome on a few installs because of the way they are included (not using a full path to the files, but instead toying with <em>ini_set()<\/em>, which can be unavailable for security reasons). The choice of getting some PEAR library files to handle some parts of the job seems sensible to me, as they are probably fairly tested, secure and maintained.<br \/>\nThe plugin might lack some file browsing functions (like, when you want to delete or move something you&#39;ve just uploaded) but that would broaden its actual scope (it&#39;s supposed to be just an uploaded after all).<br \/>\nOverall : a plugin I would probably not use or recommended because of the scary factor (any security hole in this plugin would be disastrous) unless it would go through a serious security review, but this does really look like a very nice job.<\/p>\n<h2>WP Wall<\/h2>\n<p><em><a href=\"http:\/\/www.prelovac.com\/vladimir\/wordpress-plugins\/wp-wall\">WP Wall<\/a> adds a commenting &quot;wall&quot;, just like in your sister&#39;s Facebook profile<\/em><br \/>\nYet another plugin from Vladimir Prelovac who appears to be running something like 285 plugins in this competition.<br \/>\nRegarding the plugin code, same comments as from previous Vladimir&#39;s plugins apply (read for instance my thoughts on <a href=\"http:\/\/planetozh.com\/blog\/2008\/08\/2008-plugin-competition-review-part-one\/\">Live Blogroll<\/a>).<br \/>\nThis wall uses the commenting system to handle replies: that means that spam, moderation and managing in general will be done by WP and any Comment plugin you may run, which is a smart choice. Walls are an easy target for abuse and spam, so you&#39;d better not try to re-invent the wheel here.<br \/>\nIf I had to use a Wall plugin, or when asked about one, I&#39;ll head to this plugin.<\/p>\n<h2>And that&#39;s it<\/h2>\n<p>Overall it&#39;s been fun to have a look at all the plugins. I like to compare how coders do things and I would have done them, and how ideas and codes can cross-pollinate to get better.<\/p>\n<p>Thanks for reading if you did, but first of all thanks for participating in the contest and for coding plugins. And of course, thanks to the contest staff, I know how hard it will be to judge and rate all the plugins. This competition far the best moment of the plugin year, I hope I&#39;ll be able to throw some plugins in next year!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here is part 2 (of 2) of my &quot;reviewing&quot;, mostly from a plugin coder&#39;s point of view, the plugins running in the WordPress Plugin Competition. Please, please and puh-leaaase, if you are a contestant and if you didn&#39;t read Part One, do read it before you proceed to part 2. There is a mandatory disclaimer [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[259,85,63,245],"class_list":["post-876","post","type-post","status-publish","format-standard","hentry","category-published","tag-competition","tag-plugins","tag-review","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/posts\/876","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/comments?post=876"}],"version-history":[{"count":0,"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/posts\/876\/revisions"}],"wp:attachment":[{"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/media?parent=876"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/categories?post=876"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/tags?post=876"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}