mvc wtf?
As a freelance developer, inheriting and working with code I did not originally write is common place. More often than not, code written using a known framework results in perfectly readable code, easy enough to work with and extend. Granted, every project is not written in Laravel 5, but the code that I inherit is workable.

When I recently inherited a complicated CodeIgniter site I was (initially) confident I’d have a good base to extend and work with. How wrong I was I? I could literally write a book about why the project I inherited was so bad. For the sake of brevity, I’ll stick to the main issues.

This post proves a single statement. Code written using a framework, is not necessarily “good”. It can end up painfully awful. In retrospect, I would have preferred to inherit a WordPress site. At least then my expectations are low to begin with 🙂

Continue reading MVC WTF?

Brace yourself, code like this this still exists

Yup, it’s 2014 and there are countless articles written about security your PHP code. Hell, most people use a framework. Today, I took over from another developer on a rather large internal quoting system, from another company. The company, rather ironically, class themselves are “the web experts”. The following gem was written on 23/10/2014. I present the following in all it’s scary, insecure glory:
Continue reading Brace yourself, code like this this still exists

Heart Internet Support – !*&^THD^(HDD

heart internet support 504 gateway timeout
Whilst I don’t usually come into contact with the Heart Internet people too frequently (I only use them for a couple of domains personally and have experienced past annoyances with SSH/Shell access to a Heart Internet account), I did this morning. I have no issue with their manner, as the person I spoke to was very polite.

Heart Internet Support Ticket Statistics

There are some rather painful statistics that this ticket resulted in:

Opened: 17/11/2014 at 11:09
Last Reply: 22/11/2014 at 15:54
Time opened: 5 days, 1 hour, 43 minutes
Number of ticket updates: 59
Number of support staff involved: 12 (not a typo, 12 different people)
Issue ultimately resolved: No
Phone calls made (by myself): 2
Times Heart Internet blamed PyroCMS: 4
Compensation offered by heart Internet: 3 months free hosting
Times Heart Internet apologised: 4
Amount of my own time wasted: A lot

In short, I had a run of the mill MySQL connection error. PyroCMS was complaining, saying:

mysqli::real_connect(): (HY000/1045): Access denied for user 'THE USER NAME'@'' (using password: YES)

Unfortunately, when all the connection details are correct in the script, there is little choice but to raise a support ticket. I raised a detailed ticket, provided locations to where the site was connecting to the database and a location to the error log (which was a nicely formatted, CodeIgniter log file). I explained everything in detail.

Continue reading Heart Internet Support – !*&^THD^(HDD

Moment of Clarity!

Just came across this gem, that I’m sure anyone who works in development can appreciate:

As developers need to look at problems from a different standpoint, software projects
cannot be accelerated by spending more time in the office or adding more people
to a project. Development is not just about timelines and assigned tasks. If you visit
the development centers of world-famous software companies such as Google and
IBM, you’ll see that there are many opportunities for spending time away from the
keyboard for developers. Programming questions have to be thought of in the context
of the real world

The Video Js API – Referencing Video Objects

video js api
After using the excellent VideoJs HTML5 video player today, I thought a small article regarding improving site performance for video heavy websites was in order. The site in question is a project I inherited from a very large agency. The site was an internal application (so no need to worry about video SEO). By correctly referencing the VideoJS object through the Video Js API and displaying videos dynamically through JavaScript the site in question loaded faster and is more flexible for future updates.

The current site output the video HTML (36 video DOM elements nonetheless!) directly onto the webpage, as below. Dummy data has been used, a silly mammoth JavaScript closure and additional video setup options are omitted for the sake of brevity/sanity:
Continue reading The Video Js API – Referencing Video Objects

An Unexpected Selling Point …

angry-customerThis morning, I was part of a fairly normal client meeting discussing potential new work. The client started to discuss about what constitutes a good and bad service in relation to web development. In a similar fashion to lots of customers I encounter, they all have their own horror story of working with another developer or agency. This client was no different in that respect. The client had issues with work not being completed and promised missed deadlines in the past.

Continue reading An Unexpected Selling Point … – Really?


Recently, the latest website security saga in the news has been I won’t try and top Scott Helme’s article as he does an excellent job at explaining the saga in exhaustive detail, along with the other glaring issues he discovered. There’s another great article by Neil Stud that is definitely worth a read too. However, I’ll be covering the issue purely from a web development perspective, because as a developer myself, I find the whole situation scary/insane.

The issue I will be covering concerns an error that any web developer, even a junior, cannot excuse – the ability to change query string data and view private information without authentication. A site as big as Hotel Hippo and one that that stores a lot of personal customer information should frankly, be ashamed of themselves for such a basic breach.

Continue reading – Really?

Opencart 1.5.5 – Product Filters

Opencart have implemented product filters as of 1.5.5. In my opinion, category level product filters are a much needed feature and something Opencart has been lacking for a while. However, in true Opencart style, to date their documentation/announcement is completely lacking, simply citing “Product Filters” as a new feature – even their demo store still uses Opencart 1.5.4, meaning you won’t even be able to see the amazing new Opencart product filters in action!

Continue reading Opencart 1.5.5 – Product Filters

Counter Cache

Counter Cache (or Counter Cache Columns) is the term coined when adding a column to data tables in order to keeps track of aggregate data in an application. The term “cache” is used because the application has no need to perform costly count queries. It can simply read the value of the “count column”. This practice is less costly when compared to performing separate database queries. The worst case scenario, where the application has database queries within a loop is avoided too.

Continue reading Counter Cache

Bodyforms’ Perfect Response to Facebook Rant

Nowadays, companies and brands are wide open to criticism and comments from anyone with an Internet connection. With the dramatic rise of social media, there is no place to hide. Brands and companies needs to deal with such negative criticism and comments in an open, yet transparent way. The worse thing any brand or company can do is to not respond to such comments or try to cover them up with deceptive tactics such as fake replies, negative SEO, paid reviews etc.

Continue reading Bodyforms’ Perfect Response to Facebook Rant