Managing PHP 5.4 Extensions on Ubuntu

My shiny new VPS* runs Ubuntu 12.10 (official subtitle: Quantal Queztal. Local nickname: Quirky Kestrel) and therefore has PHP 5.4 installed. It's very new so every command I type is missing, and today I realised that included a PECL module (pecl_http, of course). So I aptitude install php5-pear and then get tangled in dev packages (clue: look which libcurl you have already installed to figure out which of a long list of -dev packages to choose), managing finally to emerge with a pecl install http that completes successfully with the words:

configuration option "php_ini" is not set to php.ini location
You should add "extension=http.so" to php.ini

I've been using Ubuntu for some time however, and we don't put settings straight into php.ini, there's a directory called /etc/php5/conf.d/ where all the various module configurations live, or you can enable things just for when PHP is called by apache or from the CLI. However today I hopped into /etc/php5/ and saw this:

.
├── apache2
├── cli
├── conf.d
└── mods-available

Hmmm ... mods-available ? Continue reading

Downloading Files from Faspex

This week, someone sent me a very large file using something called faspex. To begin with, it sent me a link to click on to download my file, but then started telling me "for best results, install a plugin". And apparently "for best results" means "to download this file in any way".
Continue reading

Movable Type Fonts and Ubuntu

Since relaunching this site, with actual design rather than several shades of pink thrown together, I've become more aware of being consistent in presentation. With this in mind, I wanted add the same fonts to Ubuntu that are used here.
Continue reading

First Steps with GraphViz

This year I moved my whole presentations toolchain over to LaTeX and PDF, and where I added diagrams (which doesn't happen a lot!) I used graphviz to generate them. Graphviz is a way of describing items and their relationships in a textual manner, and rendering them into a graph - and the results can be saved as an image, or included in LaTeX documents.

I found graphviz frustrating at times but on the whole it draws clean, symmetrical graphs far beyond anything else I can manage, even if I do use a mouse or tablet. Since I'm not able to use a pointing device on a regular basis, and I'm marking up my presentations in text also, it turned out to be a really good fit. I thought I'd share how I got on with it and some of my own graphs - as much to remind me next time conference season comes around as anything.

Continue reading

Apache on Ubuntu/Debian

Apache on Debian. Ubuntu

When I first started using Ubuntu, I was coming from a distro journey that started with FreeBSD and took in Mandrake and Gentoo along the way; I hadn't worked with any Debian-based systems before and was new to the way that Apache is configured on those platforms.

Continue reading

Installing Gearman for PHP and Ubuntu

I've been using Gearman lately in a project that I'm working on, and of course a month later when I came to deploy the code, I had to look up all over again what was required for a gearman server in order to put it on the new platform. Here is the short version for my future reference (and yours, if you like)

Continue reading

Using gnome-keybinding-properties

ubuntu netbook logoLast week I reinstalled my aspireone, which I've had for quite a while but which is really excellent for events. I put the latest Ubuntu Netbook Remix onto it and it installed like a dream, with peripherals and powersaving all working correctly. It says something about the positive experiences I've had with *buntu installs lately that I even did this over the wifi!

The weird thing was that I don't really use Gnome on other machines as I prefer KDE, and I hadn't seen the Unity desktop before (as I understand it, this is a lightweight gnome replacement - it still looks and smells like gnome to me), so there were a few things that were "missing" as far as I was concerned. Easily the most annoying is the Alt+F2 shortcut, I don't really care what GUI I'm using, I mostly just run things from that! I also realised that I now had workspaces, but that there was no keyboard shortcut to switch between them (I don't use a mouse, so it's keyboard or nothing for me).

Enter a wonderful utility called gnome-keybinding-properties.
Continue reading

Missing pcre.h when installing pecl_oauth

I was playing with pecl_oauth last week (more about that in a later post) and when I tried to install from PECL, it grabbed the files, ran the configure step but stopped with an error status during make. This is bad news for those of us who are ubuntu users rather than compile-happy linux users! Closer inspection showed this line around the point things started to go wrong:

Error: /usr/include/php5/ext/pcre/php_pcre.h:29:18: error: pcre.h: No such file or directory

I didn't have the header files for pcre installed - in ubuntu the headers are in the -dev packages so I just installed what I needed:

sudo aptitude install libpcre3-dev

Re-attempting the pecl install, everything worked as expected. This is on Ubuntu 10.04 Lucid Lynx, and from reading around you'd want to install the same package in response to this error message, regardless of what you were doing to cause it. Hope this helps someone.

Thoughts on OggCamp in Liverpool

Last weekend I went to Liverpool (my first visit there!) to attend OggCamp for the second year in a row. This isn't a part of the software community I normally interact with, but I accidentally went to a LUGRadio event once a couple of years ago and have been hooked ever since!! OggCamp went to 2 days for the first time this year and was a triumph of organisation, with a great venue and a wonderful feel to the whole event. I was particularly impressed (as an event organiser myself) that for an event with no registration, they had the right number of chairs, the venue was the right size, but in fact they didn't have that information so a very well done to whoever made that call :)

I spoke again this year, it seemed to me like since there was voting on the talks, if my talk wouldn't be a good fit then I wouldn't get a slot! So I did put in a talk about source control; a topic that I'll be speaking on in a couple of weeks at TEK-X in Chicago and one that I still feel a little bit wobbly about. Taking the main stage to give a hastily-reduced version of the talk to such a well qualified audience and coming off the stage to feel like it went OK was an excellent preparation for my next speaking event and I got chatting to all sorts of people while I was there. I'm not really a linux nut but I do have ubuntu or kubuntu installed on everything, and it was great to hear a bit more about so many aspects of technology that I use but don't know much about.

The event ended in the traditional live podcast with all the presenters of Linux Outlaws and the Ubuntu UK Podcast all on stage at once. This is always good fun and there were some laughs from the crowd as always.

OggCamp Live Podcast

All in all, a great event, and I'm very much looking forward to next year's!

Bzr-svn: Preserving Commits and Rebasing

Recently I've been using bzr-svn when I'm working with subversion repositories; its a bridge between a local bzr repository and a remote subversion one. I travel fairly frequently and the pain of being disconnected from the server, unable to diff or log, and then either unpicking everything I've done or sending a monster commit with the message "Things Lorna did in the last 2 days" is just tedious and annoying. Possibly more tedious and annoying for the rest of the team than me even, so a better solution is more than welcome!

Some time ago I blogged about starting to use bzr-svn but its taken me a while to get past those first steps. Having the repo locally is so fast to use, and the speedy diff and log functionality had me completely sold straight away. I've been mildly annoyed by bzr squashing my commits though, meaning that I'm still doing a single monster commit to subversion when I come back online after being gone for a few days.

Today, with some help from the very lovely people in the #bzr channel on freenode, I found out how to preserve my commit history when sending the changes back to subversion from bzr-svn. The bzr-svn user guide recommends a particular set of commands, but this includes merging your changes into the mirror of SVN. Even in a standard bzr branch, this would show in the logs as a single, combined commit.

Push, Don't Merge

The key to retaining the commit history is to push changes from the branch, rather than merging into the trunk mirror. To make this clearer, I've shown an example. The SVN is checked out into lorna-trunk and I'm making changes in the lorna-branch directory, including adding the db directory and the hello.php file.

$ bzr commit -m "initialising database files and hello.php"
Committing to: /home/lorna/data/personal/publish/tek10/svn_vs_distributed/bzr-svn-example/lorna-repo/lorna-branch/
added db
added hello.php
added db/setup.sql
Committed revision 2.
$ bzr push ../lorna-trunk/
All changes applied successfully.
Pushed up to revision 2.

No matter how many times you commit, when you push, all your changes will be sent to subversion as individual commits in the same way. This will really help me next time I'm offline for a little while!

When There Are Changes In Subversion

Charmingly, while answering my questions to get me this far, the #bzr channel inhabitants then immediately explained to me that to handle changes in subversion, I'd have to rebase my branch before I could push my changes. This is because you can only push to a branch that is in sync with where yours was when you started making changes. If you try to push to subversion when there are changes in it, you will see this error:

bzr: ERROR: These branches have diverged.  See "bzr help diverged-branches" for more information.

All I needed to do was to run bzr update in the mirror, and then rebase my branch onto that. At first my system didn't recognise the rebase command, but this was because I needed to install the bzr-rebase package (called bzr-rewrite in newer versions but bzr-rebase in mine, Ubuntu 9.10 Karmic Koala). Rebasing was easy to do and brings the changes from the repo into your working branch. Here are the commands and how the output looked for me (with shortened paths to make this more readable):

[email protected]:~/.../lorna-branch$ cd ../lorna-trunk/
[email protected]:~/.../lorna-trunk$ bzr update
+N  readme
All changes applied successfully.
Updated to revision 3.
[email protected]:~/.../lorna-trunk$ cd ../lorna-branch/
[email protected]:~/.../lorna-branch$ bzr rebase ../lorna-trunk/
All changes applied successfully.
Committing to: /home/lorna/.../lorna-branch/
modified hello.php
Committed revision 4.
[email protected]:~/.../lorna-branch$ bzr push ../lorna-trunk/
All changes applied successfully.
Pushed up to revision 4.

I haven't had a lot of experience with using this in difficult situations with complex branching or conflicts yet, if you have any tips to add though, a comment would be excellent :)