Open Source web frameworks for 2016, 2017, 2018 and beyond

As an Open Source developer specializing in PHP frameworks like WordPress, Drupal, CodeIgniter and Symfony I’m always keen to know where to focus my efforts on new technologies.

But how can you predict where a web technology is going?

This is where Google Trends comes to the rescue. Here are some graphs of interest (in terms of searches for the technology) of new and existing Open Source web frameworks.

One caveat – a search for a term covers a lot of potential use cases such as end users wanting to find out more or developers searching for more information. A higher search number does not mean higher pay rates but it does mean there is a global interest in the technology.

Firstly, some CMSs: Drupal, WordPress, Joomla, TYPO3

WordPress is clearly more popular (which is understandable given its dominance). However, interestingly, Drupal is clearly on a downward trend. Anyone care to explain why?

I did have a look at other CMS’s such as OctoberCMS and PageKit but these did not even feature on the graph hence the omission. If anyone wanted a graph of up-coming systems perhaps I could do a separate chart.

Then, some frameworks: Yii, Symfony, Laravel, Zend, CodeIgniter

Some key takeaways – Laravel is going through the roof!
And Zend, which hit a peak in 2009, is clearly dropping off the radar. CodeIgniter, which had a peak in 2013, still has a strong interest and is in second place.

It would be interesting to expand on these graphs. Any suggestions on other frameworks or time periods to focus on?

Why WeWork doesn’t work…

So I signed up as a Commons member of WeWork this last couple of weeks.

Here’s why it doesn’t work for me.

The Commons areas are usually simply tables distributed around a large open plan area. This area always has at least one person talking in a loud voice on their mobile phone disturbing the concentration of everyone else. There is ALWAYS one (UPDATE: or two or three). There are usually phone booths at WeWork areas but rather than using them they’ll stand in the middle of the public space talking loudly.

In addition, they’re almost always close to their limit meaning you’ll struggle to find desk space. That means sometimes you’ll need to perch at a bar or with your laptop on your knee on a sofa.

The alternative to this is to join and have a dedicated office. However, the prices are astronomical. A dedicated desk (that’s simply a desk in an open plan office) is $450. And offices are extremely over priced on a per-square footage basis. There are plenty of cheaper alternatives.

The argument for using WeWork is that you’ll get lots of connections – e.g. if you’re an app developer you can find a designer. However, that’s more hopeful thinking than anything else. If you really want a designer, just go along to a Design Meetup – you’ll find plenty.


Accordions let users click on content to reveal additional content associated with that item.

In a nutshell, if you’re uncertain, don’t use them. Basically, you’re always safe not using an accordion. However, there are various traps in using them.

Here’s a list of Pros and Cons about them and where you should and shouldn’t use them.


  1. creates a mini table of contents


  1. you have to click on each heading to access more content

When to use them:

  • when the sub items of your content are exclusive – e.g. someone will only want to click on one item. An example, being a list of conferences

When not to use them:

  • when the user may want to open the majority of the items
  • if the user may want to copy and paste the entire content

If you do decide to use one, a key rule is – do not auto close them. If a user wants to copy multiple items of content you’ve just created a major usability problem.

See also:


Trackbacks and Pingbacks

Quick, visual explanation of what trackbacks and pingbacks are. Note that website and blog can be used interchangeably here.

1. Someone (Person A) writes a Post on their website (A)

2. You (Person B) read it and want to comment on it. BUT you want your readers to see your comment AND comment about it on your own website (B). So, you post on your own website (B)

3. Now, you send a message to website A (this message is called a trackback) which contains an excerpt of the comment you’ve posted on your own website

4. Their website (A), having received your trackback, now posts your comment to their post which links back to your website

The only difference between trackbacks and pingbacks is:

  • trackbacks use HTTP POSTs
  • pingbacks use XML-RPC

Think of pingbacks as remote comments.

@weakify, @strongify

ARC supposedly does away with reference counting. However, blocks introduce a small wrinkle.

When you reference self in a block you make a strong reference to it which encourages leaks as you end up with objects (including View Controllers) hanging around beyond when they’re needed.

The solution is to define a weak reference before the block and use that. Inside the block you convert it to a strong reference. We don’t have a proper strong reference outside the block so it decrements as it should do. However, it’s a pain (see the first part of the linked-to post).

This is where the @weakify(self) technique makes things simple and easy. See the second part of this post!

WordPress – crap code

I’ve just been digging through query.php trying to fix a WordPress problem.

And the code I see is staggeringly bad. Yet this is core code.

e.g. take a look at get_posts(), pages upon pages of if statements. Utterly unreadable and there is no way to figure out how a change might cascade down the code.

I ran the code through a debugger. After staggering through the hundreds of lines of if statements I found WordPress was calling the function a 2nd time. So, not only is it incredibly long and incomprehensible. It gets called multiple times.


git reset

git reset allows you to undo changes that haven’t been shared yet.

Example A
git reset will reset the Staging area to the most recent commit.
1. you have a file in Staging ready to commit and want to remove it from Staging. See this:

$ git st
On branch master
Changes to be committed:
(use “git reset HEAD …” to unstage)

modified: test.txt

Now, to remove it from Staging, use git reset, e.g.
git reset

Now you have:
Unstaged changes after reset:
M test.txt
[git-test (master)]$ git st
On branch master
Changes not staged for commit:
(use “git add …” to update what will be committed)
(use “git checkout — …” to discard changes in working directory)

modified: test.txt