Bruno is a professional web developer from Croatia with Master's degrees in Computer Science and English Language and Literature. After having left his position as lead developer for a large online open access publisher, he now works as the PHP editor for Sitepoint and on various freelance projects. When picking them, he makes sure they all involve new and exciting web technologies. In his free time, he writes tutorials on his blog and stalks Google's job vacancy boards.

Bruno's articles

  1. Quick Tip: 4 Steps to Install Custom PHP Extensions into Zend Server 7

    Zend Server 7 is an excellent tool for managing, deploying and monitoring your PHP applications. We’ve covered its installation in this quick tip, and we’ve given it a somewhat thorough review in this post.

    In this Quick Tip, we’ll go through the procedure of installing a custom PHP extension into it. We’ll be installing Phalcon, but the procedure is identical for nearly all extensions out there.

    Step 1: Install Zend Server

    Have an instance of ZS up and running. Follow this quick tip to do that.

    Step 2: Modify the $PATH

    To use the command line PHP tools that come bundled with Zend Server, we need to add the path to them to the system $PATH variable:

  2. Getting to Know Zend Server 7

    Zend Technologies is the company which funds the development of the Zend Engine (the engine PHP is based on), as well as Zend Framework and some other projects like Apigility. They also build proprietary software of high professional caliber, designed for high intensity PHP work in large companies – software like Zend Studio and Zend Server – though both are excellent tools for solo devs as well. In this post, we’ll be taking a look at the latter.

    What is Zend Server?

    Zend Server is, essentially, a locally-run web application which helps you run, deploy, debug and production-prepare other applications you write. It’s more than a developer helper, though – you can install it on your production servers and have it take care of hosting, clustering, file distribution and more.

    It automatically installs Zend Framework (both version 1 and 2 for some reason) and Symfony 2, and supports GUI-based management of other libraries and projects for total ease of use. All operating systems and platforms are supported, and you can install it alongside Apache or Nginx – your choice. You can have it pull in PHP version 5.4 or 5.5, and it will do the rest on its own once you run the installation script.

    The latest version of ZS, version 7, comes in several licenses and flavors, so give those a read if you’d like to know about the differences.

    The concept of Zend Server might be a bit too abstract to grasp right now if you’ve never encountered it before, so let’s just walk through it instead.

  3. Quick Tip: Install Zend Server 7 on an Ubuntu 14.04 Vagrant Box

    I recently took a look at Zend Server 7, the latest version of the powerful application monitor/manager suite. This quick tip will show you how to get it installed on a Vagrant box so you too can experiment with its features.

    Step 1: Install Prerequisites

    Make sure you have Virtualbox and Vagrant installed – the newer the better.

    Step 2: Clone and Boot

    Clone this repository. Adapted from Homestead Improved and originally Homestead, this setup will boot up a bare-bones Trusty (Ubuntu 14.04 LTS 64bit) VM. After the cloning is complete, boot it with vagrant up. The only real difference from a truly bare bones Trusty box is the fact that we’ve forwarded port 10081 which is what Zend Server uses by default.

    git clone
    cd trustead
    vagrant up

    After the booting is done, enter the VM with vagrant ssh.

  4. 7 More Mistakes Commonly Made by PHP Developers

    Back at the end of June, TopTal, the freelance marketplace, published a post about 10 Most Common Mistakes PHP Programmers Make. The list wasn’t exhaustive, but it was well written and pointed out some very interesting pitfalls one should be vary of – even if I wouldn’t personally list the mistakes as very common.

    I encourage you to give it a thorough read – it has some truly valuable information you should be aware of – especially the first eight points. A couple days back, Anna Filina expanded on the list with seven new entries. While less specific and common, her points still carry weight and should be considered when developing.

    X More Mistakes PHP Developers Often Make

    I was asked by someone from TopTal to take a look at their list and potentially contribute, and some of our followers on social networks expressed an interest in seeing the list continued, too, so I’d like to take this opportunity to add some of my own entries to this list that I repeatedly need to warn my team members or followers about.

  5. A First Look at OroCRM and Extending with Bundles

    CRMs are a tricky business. What some devs consider to be “just log everything about the user” apps, others know to be incredibly advanced and convoluted business apps that not only monitor your interactions with the user, but improve both your communication with them and their experience with you – without either of you knowing that explicitly.

    What’s a CRM?

    Customer Relationship Management apps are often underrated and underused, and far too frequently “included” in the base of a company’s app. If you’ve ever worked in an office cubicle for a large company doing menial work day in day out, chances are you’ve had the company’s (ancient Java) app running in front of you on Windows XP, and if something important about a customer you were just talking to came up, it would be marked in a silly comment box next to their name in an obscure corner of the screen, if that.

    CRM is much more than what you’re usually lead to believe – it’s not just semi-relevant and subjective information about a person you once did business with – it’s a collection and collation of all the knowledge about your interactions, and a presentation of all the parameters that statistically help you gain the favor of your correspondent.


    Though the CRM field of the PHP world isn’t madly ripe, the recent flurry of developments from Oro had my interest piqued enough to make me take a look. OroCRM is a multi-language CRM built on PHP 5.4+ with the Symfony framework. It’s a behemoth in its own right, and is tuned nicely for cooperation with the Oro Platform, a business application skeleton you can use to build your own custuom business apps that take advantage of the data OroCRM provides. That’s a bit much for this piece, though, so we’ll just take a look at OroCRM this time. Note, however, that an OroCRM installation brings with itself an underlying instance of the Oro Platform, which it is based upon.

    OroCRM was also announced on the Symfony2 blog, so give it a read if you’re interested in its youth – it was only four months ago.

    Among other features, OroCRM boasts with their marketplace for third party plugins and extensions, their customer segmentation, and import of data from various established tools like Magento. Let’s see how it stacks up in a locally deployed demo app.

  6. A First Look at Beegit: The Collaborative Online Markdown Editor

    Some time ago, I wrote about the current state of MarkDown editors. It was a disappointing report in which I name my favorites and the ways in which some excel and all of them lack. The landscape of MD editors is an interesting one – most having features to kill for, but all of them lacking something critical.

    Some time later, StackEdit fixed their performance issues and climbed back to the top of my list, but still lacked some things. As per their tweets, I was then given access to the closed beta of Beegit. Allegedly, it was “everything I desired”. Let’s see if that’s true. In this article, I’ll take a first look at Beegit, writing this very post in it (so meta!). Note that I’ll be comparing most features with the current reigning champion, StackEdit – in particular, their beta version.


    As opposed to StackEdit’s file-based approach, Beegit has a project-based approach, very similar to repositories you might find on services like Bitbucket and Github.


    Once you log in, you end up on your dashboard. The dash contains all the notifications and changes worth paying attention to, and a list of all your projects.

    Projects are like Github repositories. You can have public or private ones, and they all contain folders and other files. You can share them with other people, give them descriptions, rename them, change their cover image, and more. Additionally, you can switch them from private to public at will.


    Files are exclusively MarkDown files, even if they don’t end in .md. To edit them, you click on the file name and the contents, along with a toolbar, appear in the central area of the screen. They’re dead simple to create:

  7. Guide: How to Install OroCRM on a Vagrant Box

    OroCRM is a CRM application we’ll be describing in a post dedicated to it tomorrow. This guide merely covers its installation and first run on a Vagrant Box – in particular, our good old Homestead Improved. If you need to get up and running with Homestead, see the original Quick Tip. If you want to follow along with tomorrow’s post on OroCRM, get a head start by installing it with the procedures below!


    Before we begin, make sure your original Homestead Improved instance is working well, then destroy it. If you want symlink support and are on Windows, re-run the command prompt and/or Git Bash window through which you’ll be using Vagrant commands with Administrator privileges:

    This is optional – symlinks are not required for Oro to work.

    Step 1: Add a Site

    In Homestead.yaml, add the site:

        - map:
          to: /home/vagrant/Code/orocrm/web

    The web subfolder is needed due to Symfony being the foundation Oro is built upon. This is the last operation we’ll do outside the VM. Enter it now with vagrant ssh after running vagrant up.

    Step 2: Clone

    cd Code
    git clone orocrm

    Step 3: Create the Database

    mysql -u homestead -psecret
    CREATE SCHEMA `oro_crm` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

    Step 4: Configure Nginx and PHP

    The configuration required for OroCRM in this case is as follows (replace the folder paths with your own if necessary). Put this into /etc/nginx/sites-available/, replacing the original content:

  8. 8 Heroku Add-ons for Production Ready PHP Apps

    This article was sponsored by Heroku, the cloud application platform. Thank you for supporting the sponsors that make SitePoint possible! Introduction Heroku is a cloud application platform that makes it super easy to deploy and maintain apps. They take care of app management and scaling, and you as the developer can focus on more important […]

  9. First Look at Themosis, a Framework for WordPress Developers

    My dislike of WordPress is no secret. I look down on its mess of a code base, and advise anyone with any technical knowhow whatsoever against using it. But I don’t just bash it for the sake of bashing, I bash it in the hopes that someone who knows what they’re doing will pick up the baton one day and continue the popularity race in a more logical, sensible pace. Any attempt to fix the mess WP presents us with day in day out is, in my book, a good one.

    Not too long ago, we heard of a new project on the horizon called Themosis, a “framework for WordPress developers”. In this piece, we’ll try and see what Themosis is, how to get started using it, and we’ll take a look at an example project built with it – the example provided by Themosis themselves.

    What is Themosis

    To anyone familiar with the word “framework”, especially in the context of PHP, this might sound confusing. Isn’t WP already packed full with stuff we don’t need? Aren’t frameworks usually built on a minimalistic set of principles and decoupled components, and complex WordPress-like apps built on top of them, instead of the other way around? Well, yes.

    Themosis isn’t a framework in the full sense of the word as you know it. Instead, it’s an API that ties into WP on a level required to make it easier to develop in – but doesn’t necessarily make it lighter. Themosis is a set of APIs that you use to create WordPress components in a modern-PHP format with namespaces, classes, anonymous functions and Composer support.

    Themosis is, quite literally, an MVC powered Laravel-ish WP plugin itself that’s used to write other plugins. It also has its own router so you can define routes Laravel-style, and its own templating engine – Scout – that’s similar to what we’re used to in Laravel and Phalcon – with some added extras for built in WordPress support. For example, the template loop:

    @loop(array('post_type' => 'post', 'posts_per_page' => -1))
        <h1>{{ Loop::title() }}</h1>
            {{ Loop::content() }}

    uses WP API to get to the data it requires, and the Loop class is designed only to be used with loops for underlying WP content.

  10. 0xDBE: A First Look

    0xDBE is a new database administration tool that aims to make things right in an otherwise extremely barren landscape. Sure, there are other tools, but they all regularly underperform – either on the stability, or the features front.

    0xDBE is Jetbrains’ attempt to make it right. Don’t let the name confuse you – it’s not final. DBE stands for “Database Environment” and 0x is just a jab at a hexadecimal representation of the same. In this post, I’ll have a look at the EAP version – please note that everything is still subject to change, and Jetbrains is still collecting feedback and feature requests (already over 400 in the issue tracker!) before they publish the first official release.

    Note that I’ll be approaching this tool as a Workbench / PhpMyAdmin convert and as such may not be entirely objective in the matter. The point of a first impressions post, however, isn’t to be objective anyway. I’ll be performing some very rudimentary tasks with the tool and in a way comparing them to the main competitor – Workbench. Note also that the EAP I’ll be testing in this case is version 138.551.