How to get an Arduino clone and connect it to the internet for less than $8

Recently I wanted to start using Arduino embedded micro controllers, to refresh and improve my knowledge of electronics and telecommunications, the subject I studied back in the days at my beloved high school (Arturo Malignani in Udine, Italy).

On this post we will see how to connect an Arduino to the internet (and moving towards the “internet of things”) by using cheap components bought in eBay for less than $8!

Read more

SugarCRM using multiple MySQL databases

Let’s assume you currently have a MySQL Setup with one “Master” and multiple “Slaves”, and you do want to make sure your Sugar system uses the “Slave” instances for reading purposes. Alternatively, if you are looking at deploying MySQL Master/Slave instances with a click of a button to test this out, you can achieve the same setup using Amazon AWS RDS, by deploying one MySQL database with additional read replicas.

SugarCRM commercial editions already have a feature that allows to connect Sugar to a slave database for Reports and/or an additional one for module’s ListViews, providing additional performance and scalability to the application. The feature is provided out of the box and it is available by changing a configuration file, for self hosted systems.

Read more

Can I remove Team Security from SugarCRM?

Any SugarCRM Commercial Edition has a great feature for segmenting data, called Team Security.

In a nutshell, all non Administrator Users can only see SugarCRM records associated with at least one of the Teams they are part of.

…but what if in my organisation I do not want to limit who can see which records on the CRM system? Keep reading to find out the answer!

Not everybody knows that SugarCRM recently introduced the Visibility and ACL Layer that gives Partners and tech savvy End Users, a great granular control when customising record visibility and permissions.

Read more

Upgrading CodeIgniter

I finally had an afternoon free, to test the upgrade of the base PHP framework CodeIgniter, on one of my websites.

CodeIgniterThe first operation we need to do (especially if the initial coding started long ago) is to find out which version of CodeIgniter we are currently using.

We need to search for the constant “CI_VERSION” defined inside the code. In my case the starting point was version 1.7.2.

Now we neet to understand which one is the latest version in the download section (currently 2.1.3) of CodeIgniter’s website.

The next step is to find out our upgrade path defined on the upgrade page and to download the required packages.
CodeIgniter Upgrade Path

In my case I downloaded my current version 1.7.2 and the latest 2.1.3.

NOTE: If for any reason you are still running PHP 4, you will not be able to upgrade to CodeIgniter 2.x. It only supports PHP 5.1 and above.

Read more

CRM, SugarCRM and a RESTful integration

At InsightfulCRM I have been involved with SugarCRM projects of various sizes for quite few years, and I was recently asked to present at the Sydney PHP Meetup group about SugarCRM and REST integration.

Let me share the presentation I prepared for the Meetup on my blog as well:


To give you an overview, the presentation starts with an introduction about CRM and why businesses that do not have a CRM strategy should definitely consider implementing one.

Read more

Multiple custom footers on SugarCRM view and metadata

I recently built a customisation for SugarCRM that required a custom footer on the metadata definition file.
This was a requirement, so that the final user was not able to edit the panel from Studio, and potentially damage the javascript intensive customisation.

To build the customisation as upgrade safe as possible, I created a custom view for the module I was customising, and inside the “display()” method, I set my own custom footer in the following way:

$this->ev->defs['templateMeta']['form']['footerTpl'] = 'custom/modules/Opportunities/mycustomfooter.tpl';

Then I coded all my business logic inside the display method and at the end, I called the “parent::display()” method.

Read more