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. PHP News You May Have Missed – July 2014

    A handful of news cropped up again that didn’t really get the attention they deserved, so I’ll use this opportunity to rehash some of them and explain others. The “news” here are usually less than brand new – instead, they’re bits of information you should pay attention to if you’re even the least bit interested in the PHP community and environment.

    The Zend Rush

    Zend, the company behind anything that has “Zend” in its name (Framework, Server, Studio, Engine…) has been very aggressive in product updates of late. They started the year off with a new release of their Zend Certification exam, continued with a huge update to the Zend Server, which we’ve covered in another post, and wrapped things up by updating Zend Studio to a new major version – it now goes to 11! We’ll be taking a more in-depth look at it in another post.

  2. Diffbot: Crawling with Visual Machine Learning

    Have you ever wondered how social networks do URL previews so well when you share links? How do they know which images to grab, whom to cite as an author, or which tags to attach to the preview? Is it all crawling with complex regexes over source code? Actually, more often than not, it isn’t. Meta information defined in the source can be unreliable, and sites with less than stellar reputation often use them as keyword carriers, attempting to get search engines to rank them higher. Isn’t what we, the humans, see in front of us what matters anyway?

    If you want to build a URL preview snippet or a news aggregator, there are many automatic crawlers available online, both proprietary and open source, but you seldom find something as niche as visual machine learning. This is exactly what Diffbot is – a “visual learning robot” which renders a URL you request in full and then visually extracts data, helping itself with some metadata from the page source as needed.

    After covering some theory, in this post we’ll do a demo API call at one of SitePoint’s posts.

    PHP Library

    The PHP library for Diffbot is somewhat out of date, and as such we won’t be using it in this demo. We’ll be performing raw API calls, and in some future posts we’ll build our own library for API interaction.

    If you’d like to take a look at the PHP library nonetheless, see here, and if you’re interested in libraries for other languages, Diffbot has a directory.

  3. 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:

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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:

  9. 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:

  10. 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 […]