1. CMS Made Simple add-on hits 4000 downloads

    September 2, 2008 by iain

    It was nice to see today that the custom tag that I built for CMS Made Simple has exceeded 4000 downloads.

    Random Global Content Blocks enables the template editor to specify a range of content blocks to show and then the tag does the work of deciding which one to display per page load. It even supports a regular expression syntax so as long as a given naming convention is adhered to new items can be added through the CMS without the need for template modifications.

    For example:
    {random_gcb block_regex="^case_study_"}

    This would mean that any global content block starting with the name starting case_study_ would be included in rotation, randomly.

    You can download the tag here or read more about Siftware’s CMS Made Simple installation and customisation services.


  2. Debugging with PhpED and DBG

    January 20, 2008 by bealers

    As long-term PhpED user I’ve always been well aware that I was not making the most of some of the more powerful features of my IDE, particularly the debugging capabilities. Well this week I finally got debugging set-up properly and as per most of my other blog posts I’m listing what I did here for future reference and just in case it helps anyone else. (more…)


  3. A Pragmatic Look At Symfony

    July 29, 2007 by bealers

    On Thursday I presented to around 30 developers attending the July Bristol Skillswap at Bristol’s Watershed.

    It was my first ever public speaking gig (if you ignore some sales presentations) and I’m delighted by how well it went. The talk was a ten minute powerpoint introduction and then 45 mins of live coding - this was pretty taxing - finishing off with a 30 min Q+A.

    The powerpoint bit was a breeze and the coding went OK because I’d run through the whole thing on a number of occasions to prepare. I did wobble at one point when I got an error but it turned out that I’d saved a file to the wrong place.

    I got some great feedback from Ed Mitchell, the guy running the show, and according to him the audience was paying very close attention to everything I was doing; so at least I didn’t bore them.

    I also got to meet a few underscore regulars including Rick Hurst, Andy Gale, Dan Hilton and Oliver Humpage (who also works at the Watershed as a techie) and the evening was finished off by getting pretty messy with Ed, Toby Roal and Dan Dixon who all seem like good eggs.

    For those of you interested here are the following things I used in my presentation:


  4. Building a PHP development server

    April 2, 2006 by bealers

    Following these instructions will get you a Debian based PHP/MySQL development server set-up with the ability to have multiple developer sandboxes that are accessible from a remote machine on the local network, using Samba.

    Time needed < 1hr

    Install operating system

    If you are following these instructions verbatim then build your machine from a Debian netinst CD. Get networking going and make sure your /etc/apt.d/sources points to a local mirror. FYI I’ve set the server to use DHCP and told my DHCP server to assign it a fixed lease, in this case (192.168.2.110).

    Become root:

    su -

    install some absolute basics:

    apt-get install bzip2 ssh vim

    Install Apache

    apt-get -y --force-yes apache2 apache2-utils apache2-threaded-dev

    I always compile PHP and MySQL from source so I can get whatever is new. As this is a very basic debian install I need a few things before I can start compiling:

    apt-get -y --force-yes install gcc g++ make autoconf automake

    Install MySQL

    First Install a MySQL dependency:

    apt-get install libncurses5-dev

    Get the source:

    cd && mkdir -p build/src && cd build/src

    wget http://downloads.mysql.com/archives/mysql-5.0/mysql-5.0.27.tar.gz

    cd ..

    tar -zxvf src/mysql-5.0.27.tar.gz

    cd mysql-5.0.27/

    Configure and build:

    CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \
    -fno-exceptions -fno-rtti" ./configure \
    --prefix=/usr/local/mysql --enable-assembler \
    --with-mysqld-ldflags=-all-static

    make && make install

    Make it start on boot up automatically:

    cp support-files/mysql.server /etc/init.d/mysqld
    chmod 0755 /etc/init.d/mysqld
    update-rc.d mysqld start 75 2 3 4 5 .

    Do some simple configuration:

    groupadd mysql
    useradd -g mysql mysql
    cp support-files/my-medium.cnf /etc/my.cnf
    cd /usr/local/mysql
    chown -R mysql .
    chgrp -R mysql .
    bin/mysql_install_db
    chown -R root .
    chown -R mysql var

    This server is only for development so I turn off binary logging to save building up massive log files. In /etc/my.conf comment out this line so it look like:
    #log-bin=mysql-bin

    Compile and install PHP

    First install some PHP dependencies:

    apt-get install -y --force-yes flex libssl0.9.7 openssl libcurl3-dev libjpeg62-dev libgd2-xpm-dev libxml2-dev libmysqlclient15-dev

    get the source:

    cd ~/build/src
    wget http://uk.php.net/get/php-5.2.1.tar.bz2/from/this/mirror
    cd ..
    tar -jxvf src/php-5.2.1.tar.bz2
    cd php-5.2.1/

    Configure and build:

    ./configure --with-layout=GNU --with-pear=/usr/share/php --enable-track-vars \
    --enable-force-cgi-redirect --with-openssl=shared,/usr --with-zlib \
    --with-exec-dir=/usr/lib/php/libexec --prefix=/usr --with-apxs2=/usr/bin/apxs2 \
    --with-regex=php --with-config-file-path=/etc/php --with-curl=shared,/usr \
    --with-gd --with-zlib-dir=/usr --with-jpeg-dir=shared,/usr \
    --with-png-dir=shared,/usr --with-mysql=/usr --with-mysql-sock=/tmp/mysql.sock

    make

    Normally we’d ‘make install’ now, but this will break as httpd.conf is blank these days with the Apache 2 package. To trick the PHP installer that things are OK we’re going to add a dummy LoadModule line to httpd.conf. (I appreciate that this is a bit of a hack and slightly magic but as it’s a dev server for PHP then I can live with it)

    So:

    cd /etc/apache2
    echo "
    #LoadModule foo_module /usr/lib/apache2/modules/foo.so" > /etc/apache2/httpd.conf
    (the first line break is important)

    Now we can carry on:

    make install

    ..and copy the standard php.ini to the right place:

    mkdir /etc/php && cp php.ini-dist /etc/php/php.ini

    Then we configure Apache a bit more to make PHP work:

    echo "AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps" > /etc/apache2/conf.d/php

    Check it’s working:

    echo "<?php phpinfo(); ?>" > /var/www/phpinfo.php
    /etc/init.d/apache2 restart

    On the phpinfo screen (got to in my case by going to http://192.168.2.110/phpinfo.php) I check to see whether php.ini has been picked up, that MySQL is there plus other modules I normally have compiled in. Hmm I notice Curl is not loaded….

    A quick check of /usr/lib/php/20060613-zts shows me that curl.so is there so I change extension_dir as follows:

    extension_dir = "/usr/lib/php/20060613-zts"

    and add the line:

    extension=curl.so

    Whilst I’m there, make sure we get to see errors and warnings:

    error_reporting = E_ALL

    Restart Apache and Curl is loaded now.

    Ok so we now have a working web server but we need to be able to easily write files to the document root AND we want multiple developer sandboxes.

    Install Samba

    apt-get -y --force-yes install samba

    Now configure it by editing /etc/samba/smb.conf, I add:

    [homes]
    comment = Home Directory
    browseable = no
    read only = no
    writeable = yes
    available = yes

    /etc/init.d/samba restart

    Add a samba user, making the user name & password the same as the system user name (and ideally the same as the host user name) this makes connecting to the shares from the host a piece of cake as one does not need to specify a user name/password then. For the record it is possible to make Samba’s and the system password automatically update when either is changed but I’ve never got it to work and it’s not really a big deal to change a few passwords now and again, so the following suffices:

    smbpasswd -a bealers
    (enter password)

    If you are on Windows to check that it worked open up Windows explorer and enter \\192.168.2.110 into the address bar; you should see your home directory. Assuming that you can write to it then you can map a drive and your job is nearly done. The final job is to configure Apache to work from your home directory. I simply chrgp my home dir to www-data (the Apache user) and create a new virtual host container:

    chgrp /home/bealers www-data
    mkdir ~bealers/www && chown bealers.bealers www

    echo "<VirtualHost *>
    ServerName dev.bealers
    DocumentRoot /home/bealers/www
    <Directory>
    Options FollowSymLinks Indexes MultiViews
    AllowOverride All
    </Directory>
    ErrorLog /var/log/apache2/bealers.error.log
    LogLevel warn
    CustomLog /var/log/apache2/bealers.access.log combined
    </VirtualHost>" > /etc/apache2/sites-available/dev.bealers

    cd /etc/apache2/sites-enabled/
    ln -s ../sites-available/dev.bealers

    Assuming that you’ve internal DNS (or a horribly long hosts file) make sure that dev.bealers resolves to 192.168.2.110. Now popping http://dev.bealers into my browser gives me an (empty) directory listing for /home/bealers/www/, which is right.

    You can now either develop direct to the dev server or copy and paste the files over when you need to.

    In summary: onto a very basic Debian we installed Apache as a Debian package and MySQL/PHP were compiled from source; that gave us our web-server. As we want to easily save our changes and view them immediately without having to faff with FTP or SSH we write directly to the web root of our own sandbox on the server, to facilitate this we use Samba (although there are other options such as NFS).

    Enjoy.

    This page is updated when something notably changes. Last update April 07 when Etch became stable.


/div>