WordCamp SF 2010

I know this post is quite delayed, but I wanted to get it out there anyway. Last year I went to WordCamp SF and attended several of the sessions. This year I went to WordCamp SF 2010, but things were a little different. I ended up spending most of my time at the Genius Bar helping the attendees with WordPress. The Genius Bar was organized by Lloyd Budd, and while I only volunteered for a single session there, I found it hard to pull myself away from helping the various interesting people that showed up. The questions ranged from how to scale up because of a large influx of traffic, to “How do I get downstairs?” (hint: we were downstairs).

Following the WordCamp event, my wife and I went to one of the best food and wine events we’ve ever attended. It was at a place called One Market, and was put on by The American Institute of Wine & Food. We had lamb starting with the tongue and cheek, working our way back to the leg. Each course was paired with one or two wines from the Zacherle or Fisher labels, and the wine makers were there to talk about each wine and answer our many questions (who knows what a “brick” is in wine making, and why some wines need fewer bricks than others?). It was a beautiful, fancy, entertaining dinner.

When we finished that, we caught a cab over to the Automattic Lounge at Pier 38 to catch part of the WordCamp after party. Talk about a shock to the system. We left a place where lamb was being served to people in suits and fancy dresses who were seated at tables with linens and full silverware sets, and within minutes we were at a party with blaring music and full of geeks, many of who had consumed considerably more alcohol than recommended. We spent a little time saying hi to everyone, having a few laughs at the expense of the imbibed (you know who you are), and I got my picture taken with several people (I’m not sure any of them knew who I was, they just seemed to like posing with someone and getting their picture taken). We left relatively early, around midnight, and headed back to the hotel. I knew from the year before that the developer day was going to be my personal favorite part of the event, and I didn’t want to be falling asleep at the laptop all day.

The following morning I arrived back at the Pier 38 lounge to find that I was the first to arrive for the developer day (I was a few minutes early). Ryan Boren was the next to show, but we ended up having to wait a little longer until someone with keys arrived. I’m not sure people really got the “unconference” thing, as everyone kept wanting to know what was scheduled for when, and where things would be happening. The basic idea is simply “find people that want to discuss what you want to discuss, form a group, and discuss it.” Eventually a group of us formed at one of the tables and began working on WordPress 3.0. I’m sure I can’t name everyone, but I know Dion Hulse, Ryan Boren, Andrew Nacin, Matt Martz, Pete Mall, John Jacoby, and Ptah Dunbar were all there. Dion and I spent several hours on an elusive bug with a rather simple fix, and it was really great to finally get to put faces with the names and handles that I see regularly on IRC, mailing lists, Trac, etc.

After the dev day coding, several of us walked down to Gordon Biersch, had dinner together and tried not to talk about WordPress too much (although Andrew Nacin’s like a machine…you just can’t stop the man!). So, what do you think we would do after a long day of coding? Well, we’re geeks, so we walked to one of the hotels were a few of the guys were staying, went up to their lounge, and started doing some more coding. As a guy who works from home and tends to work only with remote programmers, it was really nice to spend some time with people that understood what I was saying! I’m looking forward to seeing everyone again next year.

Google Summer of Code 2010

It’s official (and has been for a few days, I’m a little behind schedule), the 15 students selected to work on WordPress this summer as part of the Google Summer of Code have been announced. The lineup is pretty great. There are some names on the list that will be familiar to those who are already involved in the WordPress development community. Andrew Nacin for example was given WordPress core commit access in February. Also,
Justin Shreve and Daryl Koopersmith both participated in last year’s GSoC (quite successfully).

This year there are a lot of great students and projects. I’m definitely excited to see what happens with all of them. However, I’m most excited about the student that I’m going to be mentoring. Jon Stacey is going to be implementing stream wrappers into the WordPress file API. He did a similar project for Drupal as part of GSoC last year, and this year we were able to woo him over to WordPress.

Not only does the project have great potential, but since stream wrappers were introduced in PHP 5, it will help push WordPress toward PHP 5 as a minimum requirement (which I’m all for). So good luck to Jon and all the 2010 GSoC students.

WordPress Core vs Canonical Plugins

There has been intense discussion about what should and shouldn’t go into the core of WordPress and what should be in plugins since way before Matt talked about canonical WordPress plugins in his State of the Word, but that mention has definitely caused some serious buzz. The question is whether WordPress should stay small and fast or grow and be feature rich. Both have their advantages and disadvantages.

The advantages to the “WordPress should stay small” philosophy are not limited to the WordPress download staying small (although that is one advantage). A smaller code base will make it easier to keep WordPress fast, reliable, and easy to test as well. The people that support this side of the argument would argue that WordPress could be extended to still accomplish any of the “missing” features through plugins and custom themes, and having built-in functionality that you don’t use is a waste.

The disadvantages are that many users (remember there are millions of WordPress blogs out there, many ran by people that are not tech savvy) are not comfortable with or even capable of installing plugins to solve their problems. For those people, having the functionality in the core WordPress install is probably the only way they’ll get to use it. Not to mention if 99% of people that install WordPress install a specific plugin, isn’t it obvious that the functionality provided by that plugin should be included in WordPress itself? Unfortunately, what if it’s 95%? 90%? 75? It’s hard to figure out where to draw the line. Additionally, if something is popular but doesn’t make it into core, should the programmers test against it before releasing new versions of WordPress or does that responsibility fall to the plugin author?

Obviously the advantages and disadvantages for the “WordPress should be feature rich” philosophy are the exact opposite. The problem is, both sides have valid arguments, so the real question becomes “is there something better?” I think canonical plugins may very well be the answer to that. The idea of canonical plugins is that WordPress would back a specific plugin as being the “solution” to a specific problem. For example, maybe you want to display related posts and WordPress has decided that “Efficient Related Posts” is the solution for that. They may have a list of commonly asked for features and their solutions on a page somewhere, or they may take it one step further and package the plugins with the official WordPress download.

I think that if they package some plugins with the official WordPress download, they may be very close to a great solution to this tiring debate. The advantages are that the core would stay lean, fast, and reliable. The functionality would be available to all users because it’s just a matter of activating the plugins rather than finding, downloading, and installing them. Also, the plugins that are shipped with WordPress would need to be tested with each new version, which means they’ll be stable as well. The only real disadvantage is that the download size would grow, but we live in the era of broadband. It seems a small price to pay to solve so many other problems.

WordCamp San Francisco 2009

As some of you already know, I went to WordCamp San Francisco last weekend. I took the wife (who didn’t attend WordCamp, but did come to the party) and had a great time taking in some of “The City” in the process. I went to the main event on Saturday, the WordPress Anniversary Party Saturday night, and also the developer day on Sunday. It was really nice to meet some of the people, and just get a feel for what a WordCamp is like.

When I first showed up on Saturday, they weren’t even ready to check people in yet. I tend to be quite prompt, so I was there a few minutes before eight, and they were still alphabetizing name tags. Luckily there was a nice little place to sit, with power for my laptop and free wi-fi (unsecured to be exact…). The plan was to tweet about the experience as @wpinformer, which is the Twitter account for WordPress Informer where you’ll be able to read more detailed posts about each speaker I listened to. once they were ready I checked in, and just a few minutes later I was passing the check in tables and overheard them turning away walk-ins because they were already overbooked. I don’t know what the actual totals were, but I’m guessing there were about 800 people in attendance.

I ended up attending the welcome by Matt Mullenweg, “Cooking With BuddyPress” by Andy Peatling, “Straight from Google: What You Need to Know” by Matt Cutts, State of the Word by Matt Mullenweg, “Your Business Web” by Dave Gray of XPlane, “Customizing Themes and Plugins” by Ann Oyama, “Even Faster WordPress Themes” by Steve Souders, “FAILs, LOLs and User-Generated Content” by Scott Porad, “Lessons from Mozilla” by John Lilly, and the Goodbye by Matt Mullenweg. The fact that there were two tracks means that I missed a lot, but I was able to see pretty much everything I wanted to.

The tracks were upstairs and downstairs, with the main room being upstairs. The welcome by Matt Mullenweg was extremely quick and generic. It served as a kind of kickoff, but I honestly could have skipped it and just started downstairs at the first speaker.

The first real presentation I saw was “Cooking With BuddyPress” by Andy Peatling. You can read Why BuddyPress to get more detail about what I thought, but overall it was a really great session. Andy obviously knows what he’s talking about (he is the lead developer of BuddyPress), but he’s also good as conveying that knowledge to his audience. It was nice to hear a little of the history of the project (421 days to version 1.0) and some of the plans for the future (such as better BBPress installation), but the best thing was getting a quick overview of how BuddyPress worked, what it did, and how it could be extended and customized.

Next I went back upstairs to listen to “Straight from Google: What You Need to Know” by Matt Cutts. Matt is the head of Google’s Anti-webspam department. His job is to find those spam sites that plague the internet, and make sure that Google doesn’t offer you links to those kinds of sites in your search results. Since he spends so much time dealing with Google’s algorithms, he’s extremely current on best practices in Search Engine Optimization. The biggest thing to take away from this talk was that Matt said that WordPress is a “great choice” for SEO because it solves “80-90% of Search Engine Optimization (SEO).” That’s really saying something coming from one of the true experts out there.

After that, everyone came upstairs for “State of the Word” by Matt Mullenweg, whoch actually continued with a question and answer session after lunch. We got a lot of the normal history, WordPress was a fork of B2 and was later officially recognized by the B2 creator as the “official” continuation of B2, etc. There were a couple interesting WordPress facts such as that plugins were introduced in WordPress 1.2 and themes were introduced in WordPress 1.5. He also gave his summary of GPL Freedom to use software for any purpose, freedom to modify software, and freedom to redistribute. Then he talked about the fact that WordPress.org would be featuring themes that had paid support available, which he sees as perfectly in line with the essence of the GPL (and I agree). Alex King was brought up to talk a little about Crowd Favorite which now has eight full time staff in Denver and WordPress development and support is their primary revenue stream.

The Internet According to Dave Gray After the Q & A with Matt, I went downstairs to listen to “Growing Your Business Web” by Dave Gray of XPlane. Dave started by saying his slides sucked and wouldn’t be available for download, but I disagree. As a matter of fact, I loved “the internet according to Dave Gray” which spread pretty quickly across Twitter (so I’m not the only one). The whole talk was great, but was unfortunately cut short because he was going over his allotted time. It would have been nice to let him go a few more minutes, but I understand that they needed to keep things going.

Next up was “Customizing Themes and Plugins” by Ann Oyama, again downstairs. Ann was extremely nervous, and it showed. I was fine with that, I get nervous too. It seems like she knew most of the material, and I credited her nervousness with the bits that she seemed to leave out, skip over, or jumble up. Unfortunately, some of the information she gave was simply wrong. For example, functions.php and plugins are not really “the same thing.” They are loaded at different times, so they can do different things. For example, plugins are loaded before pluggable.php and can therefore override about 43 functions (depending on the version of WordPress) that functions.php cannot. Plugins can also modify settings before the global $wp_query is set up, which can be extremely handy. There are more differences as well, but that’s not really the point. Nervousness aside, there was some misinformation and while many of the people in the room will never need to know the differences (and some of the people there already knew), it’s still pretty unfortunate.

After Ann, things really picked up. Next was “Even Faster WordPress Themes” by Steve Souders, who wrote “High Performance Web Sites” and “Even Faster Web Sites” (both must reads in my opinion). Steve has spent time optimizing web performance for companies like Yahoo and Google, and he really knows his stuff. A lot of it was repeat info from his books, but it was definitely extremely useful information.

Following Steve was “FAILs, LOLs and User-Generated Content” by Scott Porad. He went over some of the highs and lows of having users generate your content for you. Steve Porad is the CTO at Pet Holdings, Inc. (aka lolcats) and I think everyone will agree that they’ve definitely succeeded at user generated content. They also run completely on WordPress.com, which really says something for WordPress.com.

For the last full session of the day I listened to “Lessons from Mozilla” by John Lilly. I loved his style of talking. He was a little ADD, running a lot of tangents…which reminded me of…well…me. He offered no “magic” key to succeeding as an open source project, which I respect because I don’t think one exists. However, he did give a good picture of what it’s like at the top of the food chain, with no one to copy or follow. It had been a long day, and I was tired, so I slacked off on tweeting as well as notes. I wish I hadn’t.

The day ended with the Goodbye by Matt Mullenweg. It was nearly as quick as the welcome, but by the end of the day it didn’t seem so bad. The big announcement? Don’t forget about the sixth anniversary party at the Automattic lounge. The party was nice, but let’s face it…we geeks aren’t all that outgoing. It seemed pretty dead by about 10pm when I left. So what was the best part of the conference? Definitely the developer day on Sunday, which I promise to write about soon.

The Problem with Related Post Plugins

Showing related content to your users is important. I don’t think there’s anyone disputing that (at least not that I’m listening to). The real question is “how?” How can you show your user good related content without adding a ton of extra work for yourself? This is where related posts plugins come into play.

There are a lot of options out there. So many that it’s quite time consuming to try them all until you find one that suits you. Two of my favorites are WordPress Related Posts and Yet Another Related Posts Plugin (YARPP). Yarpp gives you more control over how matches are made, but for that very reason it’s also less efficient. Joost de Valk referred to it as a “heavy plugin” in his article on Optimizing WordPress database performance, and it definitely is. WordPress Related Posts is far more efficient, but offers you a little less control over how matches are made. Unfortunately they share the same problem.

So what is this problem? They all find matches to a post in the front end rather than the back end. They do it when a user views a specific post, rather than when a post is created or modified. On a brand new site I launched, which has only 7 posts, we’ve received roughly 2000 pageviews. That’s pretty low, but lets take a look at it. About 700 of those visits were to the home page and about 1300 were to single post pages. If you only show related posts on single post pages (which is how we currently do it) then the related posts plugin has been run over 1300 times for only 7 posts, which is roughly 185 times per post! If I were to show related posts for each post on the front page then it would have run another 4000 times (which is a conservative estimate), bringing it to 757 times per post. If you think this seems excessive, lets take a look at the stats for Web Developer News. It has had over 13,500 page views in the last 30 days. About 750 were to the home page, about 140 were to other static pages, roughly 550 were to tag pages, and another 250 were to miscellaneous pages such as search pages. That leaves 11,810 visits to single post pages and 21 posts during that same time. That’s about 562 times per post! If I added related posts to the home page, tag pages, and search pages it would need to be run roughly another 15,000 or 1,276 times per post.

Read more

The WordPress has-patch marathon

Xavisys is participating in the WordPress 24 hour has-patch marathon. We’ll update this post as we go, but wanted to encourage others out there to participate as well. Grab a ticket and get started!

#8014 has been fixed as part of the marathon.
Now you can use dbDelta() with SQL containing backticks!
#9507 has been fixed
You can now localize the “tag” word in the new plugin page
#9408 has been committed
WAI-ARIA landmark roles have been added to the default theme to increase accessibility
#5710 – wp_tag_cloud should echo get_tag_cloud
For this one, my patch was replaced with a better solution offered by DD32 which added an echo option to the args array for wp_tag_cloud
#9472 – Fixed
Now wp_list_pages() applies the “current_page_item/parent/ancestor” classes when browsing image/attachment pages!
Some new filters were added
I always like to see new filters. It means that plugins can be more powerful. They added wp_trim_excerpt and admin_footer_text so far.
#9442 – Login UI
They added a password recovery link to the login error messages

Exciting new things in WordPress 2.8?

WordPress 2.8 is slated to be released late this month. Unfortunately, I’ve heard a lot of talk that 2.8 isn’t anything to get excited about. People are saying that it doesn’t have a lot of new features. As a matter of fact, in the WordPress Weekly PodcastEpisode 49 Were You Fooled?, David Peralty even said that it only had “stuff that should have been in WordPress already”.

While I agree that 2.8 will have fewer noticeable new features than 2.7 did, it definitely has plenty packed into it. First, more than 270 tickets have been closed for 2.8, over 240 of those were set to “fixed”. Many of the changes in WordPress 2.8 are cleaning up what was added in 2.7, as well as strengthening the foundations of the core code.

The widgets code has been completely reworked and all the core widgets have been updated to use the new WP_Widget class. Personally, I think it’s pretty exciting! Previously, writing widgets that followed the multi-widget pattern (the ones that can be used more than once, like the text widget) was a real pain. Using the old widgets methodology, the text widget was 104 lines of code, and rather confusing. The new WP_Widget class has reduced that to 39 lines of considerably simpler code. I’m looking forward to updating my WordPress Twitter Widget, Gallery Widget Pro, and Get Free Web Designs Widget. I also plan to release a few new widgets using the new framework.

Another new feature in 2.8 that I find important, is support in the Admin UI for taxonomy descriptions. Currently in the WordPress admin interface, you can add descriptions to categories, but not for tags or any custom taxonomy. Since categories, tags, and other terms are all the same now, there’s really no reason you shouldn’t be able to control the description of all of them. The patch that was committed (which I submitted), adds a description box to the tag/taxonomy forms in the admin section, adds a description column to the tag and custom taxonomy tables in the admin, and adds two new helper functions for use in your theme called tag_description and term_description.

Here are some other things I find interesting that are new in 2.8:

In the end, the changes may not be as flashy as they were in 2.5 or 2.7, but 2.8 is a solid step forward for WordPress.

What's the best CMS?

What is the best CMS? This is a question that I am asked all the time. There are so many options out there that answering this question is no small task. Once again Jeffery Scott comes through with an amazing article as he reviews the The Top 10 Open Source Content Management Systems. What does his list look like? Here it is:

  1. Drupal
  2. WordPress
  3. Joomla
  4. Media Wiki
  5. Liferay
  6. TYPO3
  7. Moodle
  8. Dolphin
  9. Pligg
  10. Movable Type

His conclusion was that Drupal edged out the top spot because of its ease of use, great support, and vast number of modules. He concedes that WordPress is a really a close second. I’m not sure I agree with his exact order, but I’m biased because I’ve been developing on WordPress for years and I’m very familiar with it. I’d probably put the top three like this:

  1. WordPress
  2. Drupal
  3. Movable Type

Of course, with the introduction of Acquia to the scene, that may change in the near future. Either way, the article is a great read.

Reorder Gallery now in WordPress Core

Less than a week ago, I released a new WordPress plugin called “Reorder Gallery” which gave you the ability to change the order of your images when you uploaded them, so that the gallery shortcode would display them in an order of your choosing. Two days later, Matt Mullenweg stopped by to say that it “would be pretty cool functionality for core WP” so I offered to add it in. It’s now done, and you can look forward to seeing it in WordPress 2.6.

Read more

Adobe's take on WordPress vs MovableType

To be fair, this is actually an “Adobe employee’s personal take” (as Anil Dash pointed out) on this situation. My post is not meant as a slam to Movable Type, I simply found humor in the quote on the Adobe blog.

Powered by a blogging system that\'s not as good as WordPress but still tries really hardWhile helping out in the WordPress IRC channel today, someone sent me a link to an Adobe Blog called Penguin.SWF, which tracks development status and issues regarding the Linux version of Adobe’s Flash Player. In case they change it, this image is from the bottom of the right sidebar. The exact text is “Powered by a blogging system that’s not as good as WordPress but still tries really hard” and “tries really hard” links to MovableType.com.

WordPress and Movable Type are competing platforms, but recently that competition has come to a boil. Anil Dash, Six Apart’s Chief Evangelist, took some shots with a blog post titled A WordPress 2.5 Upgrade Guide where he asserted that Movable Type was the upgrade that WordPress installs needed. Matt Mullenweg, WordPress founder, fired back in a Twitter message that said “six apart is getting desperate, and dirty” to which Anil replied “desperation is resorting to name-calling and slander instead of substance — if there’s a factual error, i’m glad to fix it.

The barrage went on for weeks, spilling into blogs, forums, and ultimately into the community itself. I’m not going to get into my personal take on the situation right now, that’s for another, much longer, post. Suffice it to say that I develop WordPress sites, write WordPress plugins, and contribute code to WordPress. What I find much more interesting is that someone over at Adobe, on the Linux version of Adobe’s Flash Player, is revolting because they don’t like Movable Type.