Back when I started using Ning to create Commentosphere I wrote a review of the service. I have since had much more experience in working with the tools provided by Ning and there have been some improvements and so this is an update on my previous review.
Language Support
To the best of my knowledge Ning still only supports PHP and XNHTML. While they expect to support more languages, for now if you don’t like PHP you won’t like development on Ning. Their PHP support, however, is top-notch. Full PHP5 support with numerous extensions installed and many Ning-specific components that just make coding easier (automated comment system, Gmail support, etc). Having previously only worked with servers supporting PHP4, just the PHP5 support seems like a miracle: code is cleaner and I can use some of those nice OOP features I’ve been reading about for ages.
The Content Store
The content store may still be hard to get into for a coder used to SQL, but once you get your head around it, it can be easier to use in some ways. For example, there are some default fields (title, description, contributorName, createdDate, updatedDate) which, if used correctly, can make transferring code between apps easier. Built-in support for tagging objects means you no longer have to have your code manage (sometimes complicated) many-to-many tables for the relationships between tags and content.
- All query filters still behave like an AND operation, but this limitation can often be overcome through code design. While the lack of a union (OR) operation can be painful to get around and would be very welcome, it is not a crucial thing in many apps.
- There is still no proper pattern matching, but this too can be partially overcome by storing dummy fields that have appropriate characters (especially non-alphanumerics) replaced by spaces and using their full-text ‘like’ operator. Not the ideal solution, but workable.
- There is still no way to change the owner of an object, but this is not the biggest problem and it seems Ning is moving towards providing API-style access themselves.
- The OOP-style of returns still inhibits sorting to some extent, but not nearly as much as I originally feared. SQL-returned arrays are often difficult to merge and sort themselves, and XN_Content objects on Ning are not unsortable, they just require self-written sorting functions. Merging query results is not a common operation anyway.
- The Content Store has been significantly speeded up. While mass operations begin to bog, or even freeze, when you deal with volumes approaching 100 objects, at least it is fast enough for some mass-updating operations.
Other Considerations and Conclusions
Multi-user development is still basically impossible on Ning. This is probably the feature #1 on my list of things I wish they’d add. The License problems are annoying (there’s a lot of good GPL code out there I’d like to use) but not fatal.
While Ning has not yet fully rectified my main initial points (speed content store to enable large scale importers, group development, pattern matching, better documentation) I have found that some of these points are mitigated as you get used to the service. While the speed limitation on the content store are annoying, they can be got around if you take data in smaller chunks. The documentation is not the greatest, but it is getting better, especially with the advent of the Ning Tech Blog. Group development is definitely my #1 request at this point.
JScripts is a new Ning app of mine for hosting JavaScript includes. The benefits of a semi-centralised location for hosting JavaScript APIs/hacks (from the FreshTags system to the prototype framework) are many, but the greatest ones are (1) it makes it easier for us to find ones others have written (2) browsers can then cache the same JavaScript for use across sites. I have put my FreshTags system on the app, but will also keep it hosted in the other location for now. This blog now includes the file hosted on JScripts, however.
JScripts (and its parent app, FileSS, which I also wrote) has a coComment-integrated comment system and also integrates features from Sweeties. There are RSS feeds for new scripts (which can be filtered by tag, user, and search query) and for comments on each script.
I have been doing some work recently with the Outline Converter, upgrading its code and adding more input and output formats. One of the benefits of this is that it can now act as a feed2json converter. Since it is hosted on Ning it doesn’t suffer from the bandwidth restrictions so many other feed2json scripts do. To use it as a feed2json use the following URL format:
http://xoxotools.ning.com/outlineconvert.php?output=json&classes=items&url=FEED URL&callback=CALLBACK
I have already upgraded my version of FreshTags to use this instead of the other feed2json script so that I no longer have to worry about the bandwidth restrictions. Here is the code for the function I am using to convert the JSON data to the Delicious.posts format:
function feedjson2deljson(json_data) {
var rtrn = [];
for(var i=0; i<json_data.items.length; i++) {
obj = {};
obj.d = json_data.items[i].title;
obj.u = json_data.items[i].link;
obj.n = ”;
if(json_data.items[i].description)
obj.n = json_data.items[i].description;
if(json_data.items[i].content)
obj.n = json_data.items[i].content;
rtrn.push(obj);
}//end for
return rtrn;
}//end feedjson2deljson
Googlist has published a list of “18 Ways for Blogger to Beef up“. I strongly support most of the point there given, and have some comments and some points of my own.
1 and 2 – Category support
While the greasemonkey script and FreshTags method works fine, I must admit this would still be a welcome feature. One thing that concerns me, though, is that it will be poorly done and force those of us who want the features to contine using a hack on a system that supports it natively… I’m not going to want to lose the FreshTags functionality now that I’ve got it, and while FreshTags is not bound to del.icio.us, it is bound to having a decent way to extract post by tag programatically.
5 – Plugin support
If they enable this with any sort of usefulness it will eliminate their need to do some of the other stuff — we’ll do it for them!
7 – Static pages
This would be an incredibly useful feature, but one addition could make all of Blogger that much more useful — WYSIWYG. I happen to dislike WYSIWYG, but there are a lot of non-coders out there who don’t agree with me and resent the fact that they are bound to the boring blogger templates for their Look and Feel. If Blogger created some simple way to edit template basics without coding for those people they could much better appeal to ‘the masses’.
12 – Non-image File upload
Please, Blogger? Hosting images here is lovely, but what about my JavaScript includes? Or external pieces of CSS?
14 – Trackbacks
Backlinks are swell, but incomplete. I want to be able to send and recieve proper trackbacks too — and haloscan, while it works, is just so ugly.
17 – SPAM
I, for one, would like to see some conditional moderation, as seen on WordPress. I don’t want to have to approve every single comment, but I’d rather have outright SPAM quarantined. And what about the ability to block certain users from commenting? A lot of the comment SPAM I get here is tied to a Blogger account and could be easily blocked if they’d just let us.
Other
Another interesting thing, that I’ve been waiting for for a long time, is the integration of Blogger with the Google Accounts system. A page for the login is already active, but not functional as of yet. Looks promising.
Comment feeds anyone? Blogger Recent Comments works, but nothing beats native support, especially if they start offering RSS 2.0 feeds with wfw:commentFeed support natively on top of that.
The FreshTags system is more than just categories for Blogger. With the tag-passing features it adds a social aspect to blog browsing. Not everyone runs on Blogger, and some of us are lucky enough to run on blogging systems that support categories natively. The other FreshTags features would be and can be immensely useful to these people as well. So, in a move to push FreshTags beyond Blogger and beyond del.icio.us I have created a FreshTags plugin for WordPress.
Update: Version 0.11 has been released. Some minor bugs have been fixed and loading captured tags into the search box is now optional. To load the searchbox you must add this code to your template: <?php freshtags_load_searchbox(); ?>
Features
- Detects tags passed directly via ?tags, ?tag, or ?cat
- Detects tags from the referer URL, all the same formats as the original FreshTags are supported
- Detects the tag of the current category page or the first tag on the current post, if applicable
- Supports tag intersections
- Displays n matching posts from detected tag(s) in the sidebar
- Supports either list or drop form of tags in the sidebar, highlighting selected tag(s)
- Rewrites post links when tags are selected to enable tag-passing from the blog
- Generates JSON(P) feeds for use in peek-a-boo sidebar headlines by other blogs
Implementing
To implement this plugin on your WordPress blog:
- Download the plugin
- Unpack the file and upload ‘freshtags.php’ to your /wp-content/plugins/ directory on your blog
- Go to your WordPress dashboard and the plugins screen to activate the plugin
- Edit your template and replace the code that outputs the category list in your sidebar with:
<?php echo freshtags_taglist();
echo freshtags_postlist(); ?>
To customise the display you can pass ‘drop’ to freshtags_taglist to get a drop-down list of tags. You can pass two parameters to freshtags_postlist, the first is the maximum number of posts to display (default: 10), the second is a string to output as a header for the list of matching posts (replacing %tags% with the detected tags, default none).
Other
I have updated my version of FreshTags to support getting peek-a-boo titles from blogs using this WordPress plugin. Just call load_otherblog_titles(‘wordpress’,’blog url‘,”,’feed url (optional)‘,’id of element to put results in‘); after the normal FreshTags data has loaded.