WordCampUK is an informal 2 day conference and barcamp that centers around using, working with and developing in WordPress. This year's WordCampUK was held in Manchester and so being local I could hardly miss the opportunity to attend. It was a great event, with great talks and lots of friendly people who were really enthusiastic about WordPress.
I thought that I would go through the parts of the event that I went to and try to sum up the event at the end.
Picture taken by Benjamin Ellis.
Core plugins are a set of plugins that are developed in conjunction with the core of WordPress. To start off with these plugins will be part of the core of WordPress, but will be pulled out into plugins. The idea is that they can be turned on if certain features are needed. These plugins will also be fully tested by the WordPress development team to ensure that they are fully compatible with future versions of the system.
Various hooks and filters will be added in order to make these plugins extensible.
Peter took us through some of the parts of WordPress that will be moved into core plugins and what sort of implications there were for each. These are as follows:
- Importers: There are a few importing functions in WordPress, but these are only ever used once, so it makes sense to be able to turn them on and off when needed and also to have them updatable outside of WordPress.
- Health Check: The Health Check plugin is currently being written that will allow site administrators to view certain stats associated with their WordPress install. This might be things like a current version check, a file permissions check or even a PHP version check. Obviously this sort of thing will confuse users who don't know what it means, so turning this off would make sense. I found it a little strange that people in the room were asking if the Health Check plugin would be able to solve problems as well as warn about them. It is both outside the remit of the plugin and also very dangerous for a bit of code to change settings on a system.
- Post-by-email: The post-by-email functionality has been available in WordPress for quite some time, but it has also been neglected for a while as well. It is feature poor as it is impossible to do many of the things that go along with a normal WordPress post. This feature is also rarely used, perhaps due to it being feature poor.
It is important to note here that these core plugins will all be part of the WordPress SVN repository and all of the plugins will be available on the WordPress Trac system.
Peter also mentioned that each core plugin (and some of the more popular plugins) will be given its own mailing list so that developers can communicate effectively.
One item of news that caught my interest in this talk (and the following questions) was that PHP4 will no longer be officially supported by quarter 1 of 2011. Although Peter was quick to point out that this doesn't mean a full rewrite of the code to bring it upto PHP5 standards, it does mean that PHP4 systems will not be used in the testing of the system.
Overall this talk was interesting and I think the idea behind core plugins is solid and worth doing. Perhaps the most notable quote of the session was Peter saying "Hello Dolly might just live forever", which isn't great news to me. In my opinion this plugin adds nothing to WordPress at all, it should really be replaced by an examples plugin that will give a much better understanding of how to hook into WordPress than this little file does.
Wordpress How Far Can You Go
Benjamin Ellis (@BenjaminEllis) - Recatto
The second session of the day was an analysis of a site that was built quickly and had large amounts of traffic. Due to client confidentiality Benjamin didn't actually give away the name of the site in question, but the talk was interesting in how Benjamin and his team overcame certain problems and time constraints to create a site that the client liked.
What was created was a massive image uploading site, with WordPress running everything behind the scenes. The site had lots of users (over 150,000), who would all be logging onto the site at the same time. One thing I found interesting was that WordPress itself was not a weak point in the chain. The core of WordPress was able to scale quite nicely to these sort of user level, it was the various plugins used that were not at all ready for scaling. In fact, most of the plugins basically needed a full rewrite to make them able to handle these sorts of traffic levels. This is understandable as they are usually written by people with small blogs in mind, these sorts of traffic levels are quite unusual to your average blogger.
The sorts of traffic levels that this site was getting were 160,000 page views a day at peak, with 12,000 registrations each day at peak. There were also users who were still using IE6 so there had to be a lot of testing to make sure the interface worked.
Different pages were creating using page templates, which meant that they could be swapped in and out with ease. This meant that a careful analysis of traffic levels was possible and it was found that ugly pages generally worked better than ones with lots of styling. This lead to the expression that Benhamin uses in his office, which is:
"Looks good vs Is good."
In order to run this site a heafty server was used, which didn't go above 30% usage. The key is having lots of RAM so that everything is running out of memory rather than caching to disc. Apparently MySQL was able to withstand these traffic levels fine whilst it was all contained in memory, but as soon as it started to cache to disc there was a large performance drop.
The planning software milestoneplanner.com was used for planning, which is created by Redcatto.
The plugins used on the site (mostly rewritten to make them scalable) were as follows:
- Members only
- Subscribe to comments
A large number of custom plugins were also created to turn various things on or off or to create new functionality within WordPress.
Overall this was a fascinating talk that sounded very familiar as I have done more or less the same thing with Drupal in the past (ie. quick timescales and large traffic levels). Benjamin stressed through his talk that the core of WordPress was rock solid throughout, it was plugins that caused most of the issues.
The final session of day 1 was devoted to a 3 hour block where developers got together and tried to build something using Wordpress. There were about 12 people in the session, so we decided to split into two or three teams.
Picture taken by Bensventures.
Four of us (including me) decided to look at an event/ticketing system. Having worked with different types of event plugins in the past we saw a real need for a decent system that used the new custom post types rather than using categories in weird or buggy ways.
Having only 3 hours we managed to set up a test site, sketch down some ideas on paper, create two custom post types, create a simple template for each and create some simple geocaching code. One problem we encountered was trying to get the permalink structure worked out for our custom post types. Although we didn't quite finish the task, we did get a significant amount of work done with the plugin and will be continuing this work in the Manchester WordPress UserGroup (MWUG). I found this session a great learning experience, both in terms of writing WordPress plugins and cutting out features to shave down to the very tight timescale.
The other group of about six or seven people created a project that took a XML feed from the DFID aid projects and converted these into custom post types in WordPress so that they could be commented on by people around the world. To this end a site called OpenAid was set up and the site that the team produced was brilliant, especially given the small timescale. One of the neat things about this site was the ability to comment against different versions of the same post and have those comments displayed separately. All of the code will also be released onto Google Code so that everyone can see what was done.
After the first day had come to an end I went to get some dinner with a couple of friends and then went to the exclusive party at the Factory in Manchester city center. The Factory is meant to be one of the best nightclubs in the city, but in my opinion it smelled quite badly of sick and was stupidly expensive.
Paul Gibbs @pgibbs - http://byotos.com
This talk was an introduction to BuddyPress, which is a plugin that adds a social layer to a WordPress site, the idea being that this switches the focus from blogs to users. BuddyPress is really a set of plugins, installed as one plugin but are updated and maintained independently. BuddyPress adds the following features
Extended profiles - Essentially taking the default author profiles that come with WordPress and extending them. This allows optional or mandatory fields for user data, with the ability to add custom fields. Any information that the user enters will also be automatically linked so that when a user clicks on it they search the site for other users who have entered the same information.
Friends - It is possible to add people as friends in BuddyPress, although it only allows one to one relationships only at the moment (ie. Facebook type) a one to many Twitter style relationship is planned for the future.
Private messages - Standard internal email stuff.
Groups - This gives users the ability to create groups so that users interact on a given subject, much like the Facebook groups. The user who creates a group becomes the admin and other users can be added to the list of admins. Each group has one of three privacy settings, these are as follows:
- public All users can add themselves to this group without approval.
- private This makes the group read only. Users request memberships, which admins then approve.
- hidden This group is hidden from searching and users signing up to it. Users only become part of this group by invite only.
Forums Each group has a forum. All forums are aggregated in the latest posts area. Forums are run through the back end (ie. database tables and underlying logic) of BBPress, without any of the admin stuff.
Activity streams This is an updated list of what users do on the site. Everything is added in here out of the box and it can all be commented. It is possible to filter this list by friends and groups. It is also possible to ping users using twitter style @username tags, which causes it to appear in the activity stream page for the user in question.
Paul then went onto discuss why anyone would want to use BuddyPress. He explained that rather than replacing Facebook, this plugin is intended for intranets, focused social networks and school/colleges to create social networks. This makes sense to me as the ability to allow your users to interact with you is key in maintaining a good relationship with them. This tied quite nicely into a look at some sites that use BuddyPress. The examples were BuddyPress Test Drive, Irrational Games, Ride Oregon, hMAG and Tasty Kitchen.
The intersting thing about Irrational Games is that they created an achievements plugin, which gives out points for actions that users undertake on the site.
Finishing this Paul brought up the idea of bring your own terms of service or BYOTOS. The thing about Facebook or similar is that if you create a page for your business or network on there you are always subject to their terms of service. With BuddyPress you own the entire stack and can therefore create your own terms of service and be as evil or as nice as you like. Obviously the idea is to be nice as your social networking site will quickly fail if you are evil.
There are also several plugins available for BuddyPress, all of which are available on wordpress.org.
- Buddypress Album+
- Buddypress Links
- Group Documents
- oEmbed for BuddyPress
- Welcome Pack
Paul did go into themes a little bit, but they are clearly a more complex topic and a little outside the scope of the talk. There are themes available on the BuddyPress site at buddypress.org/extend/themes/ as well as a template pack at www.wordpress.org/extend/plugins/bp-template-pack/. The template pack allows autocopying of BuddyPress themes so that custom themes can be created.
Overall this was an excellent introdcution to the basics of BuddyPress, and it is a plugin that I will be taking a look at in the future.
Extending WP-E-Commerce The Right Way
Jeffry Ghazally @Jgahazly
This was a quick introduction to the WP-E-Commerce plugin for WordPress, but as this subject is quite large this was a content heavy introduction.
Jeffry quickly took us through the features in the upcoming new version of the plugin. These are a better product management system, shipping calculations, tax calculations and integrating coupons, promotions and different types of payment gateways.
The plugin comes with some standard theming options. These are full product (products_page.php), single prod page (single_product.php), checkout (shopping_cat_page.php) and cart widget (cart_widget.php) with more template files on the way in the next version.
Jeffry then took us through the right way to extend or reduce the functionality of the plugin. This was by creating a WordPress plugin that uses the hooks available with WP-E-Commerce. He was also able to take us through some examples of plugins in action and what sort of things we should be doing.
I didn't know until this weekend that there was an e-commerce plugin for WordPress, but after meeting Jeffry and watching his talk I am quite inclined to give it a go.
Michael Kimb Jones @mkjones
This was an interesting session that had the simple intent of showing a few plugins that people might not have already been aware of. The talk was split into commercial and free plugins for WordPress.
Commercial plugins talked about:
- Gravity Forms: This plugin is more than just a contact form as it also allows integration with the edit post page within WordPress. The official line from Michael was "It's great". An alternative to this plugin might be cforms, but this doesn't cover all features offered by Gravity Forms.
- Whishlist Member: - This is a member plugin with a terrible website. The source code is encrypted. A-member is an alternative free, but exists as a separate bit of software with links to WordPress.
- WP-E-Commerce: Although this plugin is free it is possible to buy extra features and support for it.
- WPPlugins: This is a WordPress app store where you can find support for paid versions of some free plugins and others.
Free plugins talked about
- Import HTML Pages: This takes static html pages and imports them into wordpress as pages. It also takes care of hierarchy.
- Role Scoper: Restrict users to page sections (ie 4 levels deep), also works with posts in certain categories.
- Wordpress Beta Tester: Install the latest nightly build of WordPress.
- After The Deadline: Spellchecking, grammar, and style checking and stuff.
- Redirection : Redirect URLs from one place to another. Lots of different uses and everything is logged as well.
- WP-Table Reloaded: Creates tables in your WordPress site, although it isn't really user friendly when adding tables to posts.
- Gigpress: Event manager for WordPress.
- WP Geo: Talks to Google maps and allows geo tagging of WordPress posts.
- tinyMCE Advanced: Customise the tinyMCE editor. Useful for removing things like the image button so the users use the image upload bits.
- My Page Order: Basically similar to Page Mash.
- Mingle: Quite like BuddyPress, but minimal with just profiles and friends.
- White Label CMS: Completely customise the dashboard, remove the logos, dashboard, login logos and links and also remove different menu options.
- WP-CMS Post Control: Remove things like custom fields from posts.
- Members: Edit roles and permissions (WordPress capabilities).
- Query Posts Widget: Allows the creation of a custom widget with lots of parameters. Could be used as a widget driven theme.
Overall this was a good talk that provided a nice and relaxing break in the day. Some of the plugins mentioned I had used, but they were mostly new to me so I was able to get some hints and tips about new plugins to use in upcoming projects.Testing Strategies For Wordpress
John Adams and Nikolay Bachiyski
This talk was split into two sections, the first of which was run by John and was rather pointless and unnecessary really. It was intended to see what sort of testing strategies people used in the industry. What it turned out to be was a rehashing of what everybody knew, that there isn't really any unit testing in WordPress and people's testing strategies consisted of randomly clicking and fixing. This 30 minute discussion could have been simplified to two show of hands questions of "who uses unit testing?" and "who uses unit testing on WordPress?". I don't think the failing of this part was John's fault, but I think everyone was in the room to find out how to test WordPress properly, and noone in the room really had any good responses to this. I think the idea behind this part was to point people in the direction of using tools like PHPUnit to test WordPress at which point Nikolay took over.
The second part of the talk was presented by Nikolay and was about testing strategies. Although it was clear that the talk used WordPress objects and code, it didn't really hint at how to set these tests up. However, it was an excellent introduction to the why's of unit testing as well as some good strategies regarding writing a solid testing regime.
Nicolay had a few main tips that I will take with me from this
- Use factories to create objects with certain properties. This might be a factory function that creates a user with admin access.
- It doesn't matter how long the test function names are, as long as you can tell what they are meant to do without looking at the source code.
- If you find yourself writing comments about the code then split it out into another test using the comment as the function name.
- To test databases use ROLLBACK queries. On test setup start a transaction, when the test finished rollback the transaction.
Overall I think that this could have been so much more. Nikolay's talk was interesting and informative, but was largely irrelevant to most of the room without knowing how to get starting in testing on WordPress. I went into the talk wanting to know about how to test WordPress and I came out with no more of an idea about how to do this. I was chatting to @lornajane afterwards about this and we both agreed that this is a major flaw in using WordPress, especially for large clients.
Looking At Aggregation, Community and iOS Integration with WordPress
This was an interesting discussion by Simon about the strategies he undertook to integrate a high traffic site with a iPad/iPhone without putting too much load onto the server. My notebook battery, although lasting most of the weekend with only being charged a total of four times, finally died in this session so I wasn't able to take any decent notes. However, it was good to see how Simon created sites that could deal with 1 million+ users clicking on a link and landing on the site.
Introduced by Tony Scott
Picture taken by Benjamin Ellis.
The final session of the event consisted of a quick runthrough of the WordHack project that had created the OpenAid website. Everybody was impressed with the work done on the site and what had been produced in such a short amount of time.
The general good mood of WordCamp was perhaps marred a little bit by Jane from Automatic having a little bit of an argument with some of the people in the room. I won't write too much about this as there are a lot of blogs from the weekend focusing on this, but it started when the topic of where the next WordCampUK is going to be held and how that decision was going to be made. Someone suggested that we have a WordCampUK as normal, but also with regional WordCamps for different areas of the country. I'm pretty sure that Jane didn't say "you can't do that", but that is what everyone in the room heard, or at least understood her to mean. A few people in the audience thought this was Automatic stamping its foot on WordCamp and trying to control what we were doing with WordCampUK.
She backed this up by saying that a WordCampUK event would be seen as important, attract all the best speakers and take focus away from regional events. This comment kind of made sense to me as the PHPNW user group I am a member of hold a fantastic conference every year which is called PHPNW. The PHPLondon user group also hold a similar conference but they call it PHPUK, which doesn't necessarily mean that the conference that PHPNW runs is any less important or gets poorer speakers, PHPUK is just based in London so they have more space. We usually see a large group of PHPLondon members some up for the PHPNW conference and a few of the PHPNW members usually go down for their conference.
Honestly though, I think this was a bit of a storm in a teacup. Having reflected on it for a couple of days I think there are pros and cons for splitting the event into regions. Although I would say that I perhaps don't like WordPress enough to drive to Brighton for the weekend if the only event in the UK was held there. I think the success of WordCampUK can be measured by the fact that there is a need for us to start splitting the event into regions and it's a shame that such a great event was marred by this single discussion.
One good idea that came out of this discussion that I think the WordCampUK team should really think about is labelling the talks for levels of difficulty. Talking to some people at the event I found that a few of them were lost by the more coding heavy talks. What generally seemed to happen was that people would sit in a talk, watch the first 5 minutes, decide that this talk was a bit basic/advanced and then move to another room to see if that one would be better. This was irritating as it caused disruption to both talks.
My only complaint about the event was the flaky wireless access that for some reason insisted I enter my username and password about 300 times. The organisers seemed to be aware of this and closed down one of the rooms due to the really bad wireless signal there.
Overall, WordCampUK was a brilliant experience. The talks were good, but the people there and the general sense of community made the weekend all the more special. I also met @ai_development and @johnpcampbell at the event and it was great to catch up with them as I hadn't seem them in a while. I want to thank the organisers behind WordCampUK for their efforts in creating such a fantastic event.