It is great that you are now COO of the worlds leading Free Software company. We look forward to Canonical growing and changing over the next few years. Canonical has a world class management team, an epic engineering staff and the support of a huge and amazing community.
LONDON, February 5, 2010 – Canonical Ltd., the commercial sponsor of Ubuntu, announced today that open source industry veteran Matt Asay has joined the company as chief operating officer (COO) — responsible for aligning strategic goals and operational activities, the optimization of day-to-day operations, and leadership of Canonical marketing and back-office functions.
Part of your role appears to be figuring out how to help a Free Software company make money (monetise is not a great word). We don’t think “Open Core” is the right way. That might work for a proprietary company that just wants to leverage a community to do free marketing for them. We would like Canonical to be a Free Software company – and for it to make money.
Here are some ideas we think offer good potential for a reasonably quick return on investment.
Please take a long hard look at the partner ecosystem and programmes. There has been staggering amounts of effort put into community building around Ubuntu, but really not much of this has been directed at companies who want to support and participate in Ubuntu. There is no Launchpad group for partners. No mailing list. No IRC channel. There are just three other partners apart from ourselves in the UK. We would like to see lots of UK partners, and we would like to see them talking to each other; doing joint marketing events, subbing business out to each other as they run out of capacity to meet the growing market demands, you know the kind of thing. Creating a community of partners is one sure way to get your messages across faster and more consistently.
We’d like Canonical to produce more business-focussed events where you show off some of the cool things you and your customers are doing with Ubuntu like Landscape and the Eucalyptus private enterprise cloud. Talk about some of the amazing business-centric applications that run on Ubuntu like OpenERP, Asterisk, Alfresco etc. With a strong partner network getting bums-on-seats is less of a chore and you are more likely to get quality delegates too.
Please encourage and promote the whole “opportunistic developer” thing that is going on with Quickly, Launchpad and Ground Control. This is really fantastic stuff and could be a big differentiator. Our opportunity is to show businesses how:
- They can use Quickly to develop internal applications hosted on launchpad and then with Ground Control they can empower all their staff to improve the tools they work with.
- Quickly and Launchpad and the Ubuntu One CouchDB back end can be used to develop internal applications that work online and offline and share information between desktopcouchdb instances.
- Quickly and CouchDB have all the security and authentication and workflow of Lotus Notes without the clunky UI widgets and general user interface direness. Couchdb can do that at the back end and Quickly/GTK can take care of the UI.
One last thing, get Alfresco back in the repositories. It was in the partner repo for 9.04 and was nearly great, just a few minor issues. In 9.10 and 10.04 it isn’t present. Simply not there. As it is in the partner repo and not one of the Canonical or community maintained repos there is very little we can do to help, much as we would like to. You know how great Alfresco is, you know how great Ubuntu is. They belong together. Jump up and down until it happens. If Canonical/Alfresco will commit to not putting it in the partner repo that is a perfectly acceptable alternative, it is GPL licensed Free Software, we will work with others in the community to get it in the Universe repo and maintain it there.
Good luck Matt, we very much look forward to working with you and Canonical over the coming years,
Alan Bell & Alan Lord
The Open Learning Centre
I just noticed that I hadn’t posted anything here for what feels like ages – since August the 15th.
So I thought, hmmm, better write something.
But what? A quick update on what’s been going on perhaps? That’ll do…
I’ve been working quite a bit with the brilliant free and open source vtiger CRM recently. Looking at some of the less widely used features and updating our training materials for the recent 5.10 release. I’ve also just submitted a small patch for the Customer Portal feature, to do with its web layout and have been thinking about how best to improve this, and the Webforms modules, to make them easier to customise.
I am also really enjoying using a great little python application called “Getting Things Gnome“. It one of those simple applications which does one job, does it very well and is easy to use. It’s basically an app for jotting down your todo list and making sure you get things done… Here’s what it looks like on my Ubuntu Jaunty desktop:
I also had a mail from those nice people at Packt Publishing suggesting two new books to look at and review for them, In fact a co-author of one of them actually requested that Packt contact me to do a review Flattery indeed.
So, we now have four books in the pipeline in no particular order:
Implementing, Administering, and Consulting on Commercial IP Telephony Solutions
- Written by four Asterisk Professionals, this book brings their years of experience together in an easy-to-understand guide to working with Asterisk in small, medium and larger Commercial environments
- Packed with hints, tips, and best practice – learn to avoid the pitfalls that can hinder an Asterisk implementation
- Focused chapters provide thorough, comprehensive, and self-contained instructions on how to deploy Asterisk across different commercial scenarios
This will probably be the first one I read when they arrive next week. It’s hot-off the press, just been released and can be ordered from Packt’s web site here.
My little Asus 1008HA netbook is running very happily with the Alpha build of Ubuntu Karmic Koala. I was at the swimming pool yesterday (not in it but taking my son to his lesson) and using 3G mobile internet to get on line. Battery life is good although not as long as is quoted by Asus. I reckon I get about 3 1/2 to 4hrs of good use. But that is mainly when powering a 3G dongle too – and they get hot. Karmic is shaping up to be a great release I think although to be frank I am really not sure about the new Gwibber interface, and the Empathy IM client hasn’t really floated my boat yet. But hey ho, never mind, at least we have a choice folks.
We are planning some new marketing activities over the coming months, what with the forthcoming release of the best desktop OS of all time and Microsoft releasing their rewrite of Vista, October should be a fun month. Hopefully we’ll have lots of interesting stuff to write about.
In fact I want to share with you a backup script I’ve written in Bash for my home office network and what may well end up being expanded and developed to support some of our commercial systems too. Well I think it’s pretty cool anyway. It wakes up machines in the middle of the night, uses – currently – rsync to back them up, then turns them off again. Configuration is easy and it seems to be working fine. When I get a mo I’ll publish the script source and let you all comment on my terrible bash skills. But I like it…
[Please Note: If you use the book links from this site to Packt’s and decide to buy *any* book from their site, we will get a small commission that we’ll use towards the upkeep of our servers etc.]
trixbox itself is a “packaged solution” comprising the operating system, Asterisk and a back-end/front-end configuration tool based on FreePBX. Personally, I’m from the “old school” when it comes to applications and I do like to know what makes them tick. So with Asterisk for example, when I first started looking at it I wanted to try and understand the configuration files and how it really worked so I installed from source and built everything from scratch. trixbox CE (Community Edition) on the other hand provides a user-friendly front end to Asterisk and wraps the whole thing up with an OS and delivers the bundle as a free download which is a ready-to-run ISO.
I guess one downside to the appliance package like trixbox is that you are tied into using the vendor’s choice of OS (CentOS in this instance) rather than your own. However, there are several advantages too: you know it works, has been tested all together and is supported, to whatever extent the community provides, by the producer. Anyway, this post isn’t a plug for Ubuntu or a review of the trixbox product itself. This is a review of a book about trixbox.
Before we get into the book though, for those who are unfamiliar with what trixbox is, their website tells us:
Beginning in 2004 as Asterisk@Home, the trixbox® Community Edition (CE) telephony application platform is the open source software that has quickly become the most popular Asterisk®-based distribution in the world. trixbox CE combines the best of the open source telephony tools into one easy-to-install package, along with the trixbox dashboard which provides a web-based interface to configure and manage a complete IP-PBX system. The most flexible and customizable communications platform available, trixbox CE averages over 65,000 downloads a month.
And the Wikipedia, in what must be one of the shortest pages in the entire Wikiverse, states:
Trixbox CE is 100% free and licensed under the GPLv2. Founding members of the trixbox CE project are Kerry Garrison and Andrew Gillis.
The trixbox CE brand is now owned by Fonality. Documentation, help and community forums can be found at www.trixbox.org
So that’s what the book is supposed to be telling us about. Let’s see if does…
It is subtitled “Implementing, managing, and maintaining an Asterisk-based telephony system” and written by Kerry Garrison. It’s quite a hefty tome weighing in at around 300 pages and is produced with Packt’s professional and easy-to-read layout & styling.
Chapter 1 is a brief introduction into the whole telephony scene covering subject such as what a PBX is. It then moves the reader toward an overview of the key features of Asterisk. For the most part the author has a good writing style and gets the information over with clarity. There is some good advice too; whilst obviously the author wants to explain why trixbox is the bees knees, he does make a very sensible comment early on:
While trixbox CE does make using Asterisk dramatically easier, it is certainly a good idea to really get in and learn all you can about the Asterisk configuration files. The more you know about how the system works under the hood the easier it will be for you to troubleshoot problems and even add features to your systems that aren’t available in trixbox CE.
Chapter 2 introduces the reader to trixbox itself:
- Going over some of it’s history,
- briefly mentioning the commercial trixbox packages available from Fonality,
- looking at the core components that make up trixbox
- trixbox features with lots of screenshots
- and what you will need to try out trixbox such as a PC, perhaps an analogue line card and a SIP phone.
There are lots of URLs scattered about where necessary directing the reader to further sources of reading or links to relevant vendors and downloads etc. For someone who is getting started this is a good resource and introduction.
In Chapter 3 we get shown how to install trixbox, even showing novice readers how to burn a CD if you happen to be unfortunate enough to be using Windows.
I followed this chapter through myself and installed trixbox CE 2.6 in a VirtualBox VM. The instructions were good with plenty of screenshots and comments guiding the reader through the process. (Just FYI, on my PC Lobsang, the entire install in a Virtual Machine took just about 3 minutes!. During the first boot up I noticed that it uses the excellent OSLEC echo canceller by default. That’s a plus mark from me.)
Continuing through the chapter, after installing and doing a
yum updatewe are guided to the browser interface of trixbox…
The rest of Chapter 3 explains the various screens and basic navigation techniques to get around. Once again, I’d say the book is comprehensive and has plenty of screenshots and comments.
I’m not going to write about every chapter because, to be honest, the rest of the book is equally well put together and covers the subject in detail. Chapters 3 to 11 are what a good manual would be like. Having digested these chapters, the reader will know a good deal of how (and perhaps more importantly why) to plan, select hardware, install, setup, configure and maintain a trixbox system. There is plenty of “extra” information thrown in that explains what various features or aspects of the system are for and how they work. References to external sources abound and other vendors are given a decent mention where appropriate. Simply put, it’s good. If you want to use or manage a trixbox CE system this book would be an excellent resource in my opinion.
The final part of the book, Chapters 12 to 17, provide somewhat more orthogonal, but nevertheless valuable, information. We get to find out a little about:
- troubleshooting techniques and also where else to go to learn further skills,
- some of the additional trixbox utilities that are available like the endpoint manager,
- the basics of designing a decent callflow for the IVR,
- an introduction to a new end-user interface called HUD (Head Up Display),
- and an overview of the commercial trixbox Pro products.
In summary then, this is another good book from Packt that hits all the right buttons. It is well written, very detailed, and has good explanations of technologies and applications related to IP telephony.
As to it’s main purpose, that is explaining how to deploy and use trixbox CE, in my opinion this what a decent product manual should be like.
[Please Note: If you follow the book links from this site to Packt’s and decide to buy *any* book from their site, we will get a small commission that we’ll use towards the upkeep of our servers etc.]
As you may have read previously, I was approached by Packt Publishing to see if I would like to review their new book on AGI Programming by Nir Simionovich. Time has conspired against me to actually use it for a real project so instead I resorted to choosing it as my bedtime reading for a few days.
I’ve now read the book and first off I’d like to thank Packt for asking me. I have enjoyed it far more than I thought I would. As for how to review it, I thought I’d give my overall impression and then just go through it chapter by chapter.
It isn’t a long book – about 190 pages – which to my mind is no bad thing. It managed to concentrate on the subject and had little in the way of superfluous text and language (Apart from chapter 1 that is). The author knows his subject well and writes in a fairly informal and easy-to-read style which I personally quite liked. The meat of the book concentrates on – as you would probably guess – programming with AGI and focusses almost exclusively on using PHP. As much as I am happy around PHP, I would have liked to see some examples with alternative languages such as Python perhaps. The subtitle of the book is “Design and Develop Asterisk-based VoIP telephony platforms and services using PHP and PHPAGI” so I guess that’s why other languages don’t get much of a look in. They are mentioned here and there and there are some good links to various other libraries and open source projects. I did like the fact that he mentioned throughout the book – where necessary – the functional difference between the main versions of Asterisk (1.2, 1.4 and 1.6) and ways to deal with those differences when you come up against them.
OK – so here is my chapter-by-chapter review:
Sorry, but I didn’t really get the first chapter at all. This is a book aimed at programmers and developers and yet the first chapter was a repetitive cut-and-paste of how to build the various asterisk components from source, including lots of screen shots showing the output of things like
./configure which personally I found a bit trivial and uninteresting. I was a bit concerned that the rest of the book was going to follow suit but thankfully I was mistaken.
Chapter 2 is really good. It explains the workings of Asterisk’s dialplan and applications – the infamous extension.conf – in a very clear and understandable way. I recall when I first started to look at Asterisk and was delving into as much information on-line as I could get, the Asterisk TFOT book [pdf download] and whatever else I could find, that it was several days before the penny finally dropped. It isn’t difficult really but it isn’t quite the same as “normal” programming or scripting concepts and the language itself is far from obvious (e.g. an extension is not the phone on your desk in Asterisk’s configuration files). But then this is telephony we are talking about. Using the example of a basic IVR or AA the author examines the diaplan syntax and construction.
So I got quite a lot out of chapter 2. I thought it was well written and clear and useful. Chapter 3 develops the IVR theme further, introduces other features of the Asterisk application pool and covers the scripting language in more detail examining branching, expressions, operators and flow control. It’s a fairly short chapter but covers a good deal of ground if you are unfamiliar with Asterisk programming.
Your level of knowledge and familiarity with Asterisk will dictate what you get from this first section (Chapters 1-3). Although I have used Asterisk for a couple of years now and have felt quite comfortable with the platform’s configuration and use, I got quite a lot of new information and ideas from this early part of the book. For me, this initial part has been very useful and will be a good reference for the future. I think, though, if you are very familiar with Asterisk then you might find it a bit slow going. The book hasn’t examined AGI whatsoever up to this point and we are about a third of the way through already! The author does suggest that a coffee is a good before starting on Chapter 4 as “the journey becomes more and more complicated”…
Chapter 4 introduces the reader to AGI in a fairly gentle way and also offers 10 “rules” to help make your AGI programming more successful – they all make sense to me and will I’m sure prove to be a very useful monitoring/checking tool. Packt sent me an extract from this chapter which you are free to read here if you want to get a flavour of it.
The following chapter introduces us to some real code (PHP) and we build our first, simple AGI application. Nothing to hard, but a useful introduction into how to actually get the conversation happening between Asterisk and your script. There are couple of nice flow charts which are helpful for visualising the traffic flow back and forth between Asterisk and your script too. Again not too complicated but helpful in getting the novice AGI programmer, i.e. me, thinking about things the right way.
In chapter 6 Nir examines and recommends the use of a set of PHP classes (library) called PHPAGI. Being completely new to AGI programming I am in no position to contradict the author’s recommendation, but looking on the Sourceforge site for this library, it is quite old and has not been updated for 3 years or more. Of course that may be because it is perfect and needs no further development, or there might be other reasons but I would have really liked to have had some more discussion regarding this choice of library before continuing – just for my own piece of mind more than anything else. Perhaps if Nir reads this he could leave a comment about this? My own assumptions after reading the rest of the chapter are that the AGI interface itself is fairly simple and so – perhaps – the need for a more dynamic or complex library is just not there and this one does the job just fine. Anyway, the rest of the chapter we look at a new AGI application using the class library above and also we discover the main – and what seems to me to be a first-class – concept for building AGI applications: Atomic AGI or Particle Programming. Sounds great doesn’t it? It really does make a lot of sense. Basically it’s a bit like the traditional ideals behind Unix/Linux command line applications; write small applications that do one thing and do it well. To summarise then, in chapter 6 we are shown the author’s recommended path to AGI Nirvana through adopting some rules, and practices. It is hard for me to draw any solid conclusions from his approach as I am a novice with AGI and so have nothing by way of comparison, but it certainly seems to make a great deal of sense and is clear and well explained. Good stuff.
The remainder of the book goes a bit wider than just pure AGI. Chapters 7 and 8, examine some of the closely related applications and facilities of Asterisk. We get an overview of FastAGI (AGI over TCP) and Nir shows us some further PHP libraries that are available to assist with producing FastAGI applications. Chapter 8 offers an overview of the AMI (Asterisk Manager Interface) and some example code to get you started.
In the penultimate chapter, the reader is given a challenge: to create an application that is used in the real world – an Asterisk Call Recording Gateway. There is no code in this chapter – that’s for you to do. But Nir provides some useful guidance about the way to think about the development and plan the project itself.
And finally, chapter 10 discusses how to make sure your Asterisk applications can scale and offers several ideas and techniques to improve performance such as database query caching and using web services.
As I said at the beginning – I enjoyed reading this book much more than I thought I would. It is not overly technical and Nir has an engaging style of writing. The book is a great introduction into Asterisk programming. It is not “The Bible of Asterisk Programming” and does not set out to be. It is clearly aimed at developers who have not had much to do with Asterisk before but are familiar with traditional programming methods. I really liked the fact that it is quite short. You can read the whole book in a couple of evenings and being laid out the way it is it will become a very useful reference document for me in the future.
Nir Simionovich has a blog.
Recently I received a flattering email from Packt Publishing telling me about a new book entitled: “Asterisk Gateway Interface 1.4 and 1.6 Programming” – by Nir Simionovich. The author of the email refered to this blog and asked if I would like to review their book for my blog. Very flattering indeed.
[Update: Book review is done now. You can read it here]
I was, of course, already familiar with Packt. They do produce lots of books on Open Source technologies. What I wasn’t aware of, until I looked, was this (from their “about us” page):
Packt Open Source Project Royalty Scheme
Packt believes in Open Source. When we sell a book written on an Open Source project, we pay a royalty directly to that project. As a result of purchasing one of our Open Source books, Packt will have given some of the money received to the Open Source project.
In the long term, we see ourselves and yourselves, as customers and readers of our books, as part of the Open Source ecosystem, providing sustainable revenue for the projects we publish on. Our aim at Packt is to establish publishing royalties as an essential part of the service and support business model that sustains Open Source.
Now that seems like a fine scheme to me and is one that would certainly weight my purchasing decision toward a Packt book over another similar publication. I am aware that they will obviously get some free publicity from our review but having read the above I am quite happy about that.
Anyway, back to AGI.
Asterisk Gateway Interface (AGI)
The Asterisk Gateway Interface is an interface for adding functionality to Asterisk with many different programming languages. Perl, PHP, C, Pascal, Bourne Shell – it’s your choice, really.
- AGI may control the dial plan, called in extensions.conf.
- Async AGI Introduced in Asterisk 1.6, allows asynchronous AGI scripting.
- EAGI gives the application the possibility to access and control the sound channel in addition to interaction with the dial plan.
- FastAGI can be used to do the processing on a remote machine via a network connection.
- DeadAGI gives access to a dead channel, after hangup. Deprecated since Asterisk 1.6
Being a fan and user of Asterisk in our business, I think what we will do is actually use the book and create or modify an application that will be of use to us. This should allow us to give a decent overview of the content and how easy/hard it was to transfer the knowledge into a real world result.
But I am open to other suggestions too. Anyone got any good ideas for a fairly simple AGI application?
I have recently migrated my server at home from a custom Linux build to Ubuntu Server (8.10 Intrepid). The main migration went very smoothly and I learned a few new tricks on the way too.
One function the server performs is as my telephone system for work and home. It runs Asterisk. I have a couple of IAX2 trunks from our VOIP provider for mine and my wife’s businesses and I also have a cheap x100p clone analogue card for PSTN backup purposes. On my old system software, I had compiled the device drivers (zaptel) and kernel modules for the card manually and used a, frankly fantastic, echo canceller called Oslec (the Open Source Line Echo Canceller). You can read the couple of posts I made about when I first tried it out here.
On my new server OS, I installed the Asterisk server via Ubuntu’s package management system
sudo apt-get install asterisk. After some digging around on the ‘net (and it wasn’t obvious) I discovered that the zaptel drivers (for the PSTN hardware) need to be installed slightly differently:
You might have to run
sudo m-a -t build zaptel Which retrieves the zaptel package and builds it for your running kernel.
m-a prepare in advance of this to retrieve your Linux kernel headers.
The m-a (Module Assistant) command will compile and create a
.deb package in the
/usr/src directory. On my system the package was called
It can then be installed using dpkg:
sudo dpkg -i zaptel-modules-2.6.27-11-server_1.4.11~dfsg-2+2.6.27-11.27_i386.deb.
This went fine and I had read on launchpad that as of an earlier version of the zaptel package the Oslec echo canceller was now the default. Unfortunately this didn’t quite work as I expected. The zaptel module was in fact using the standard MG2 EC which is not very good with my x100p card at all.
After a bit more digging around in the source code, there is a file in the zaptel package called zconfig.h which is where the chosen EC is defined. It is specified as MG2 in the package.
What I did to fix it was as follows. Unpack the
zaptel.tar.bz2package that was in
kernel/zconfig.hfile so the line
#define ECHO_CAN_MG2is commented out
and added in a line that reads
Re-assemble the zaptel package:
sudo tar jcvf zaptel.tar.bz2 modules(“modules” is the directory name where the zaptel package extracts to).
Delete the existing zaptel-blah-blah.deb file and the modules directory too. Re-run the
m-a -t build zaptelcommand.
Thanks to Tzafir Cohen on the asterisk mailing list for this. There is a far simpler method to use for the time being although this is a known bug and is now fixed in the development tree so I guess it will be unnecessary once the package has been updated. Do please check first if you are following this in the months to come. Anyway, instead of the commands above, these commands work for me and are far simpler:
sudo m-a -f get zaptel-source This simply gets the source package and saves it in
sudo ECHO_CAN_NAME=OSLEC m-a -t a-i zaptel And this builds and installs the modules and tells the build scripts to choose the Oslec EC by default. The
-t switch puts the command into text mode so you actually see what is going on. I find the process rather opaque and uninformative without this switch.
After rebuilding, the zaptel module now requires, and loads the Oslec EC by default. The command
modinfo zaptel is a good test. The output of it should be something like this:
description: Zapata Telephony Interface
author: Mark Spencer <email@example.com>
vermagic: 2.6.27-11-server SMP mod_unload modversions 686
Note the “depends” line.
You could also type
lsmod | grep 'zaptel' once you have reloaded your server:
zaptel 199844 5 wcfxo
oslec 16668 1 zaptel
crc_ccitt 10112 1 zaptel
This command shows the oslec ec module installed along with the the zaptel and wcfxo drivers.
One final point to note. If you just want to load a particular telephony hardware driver and not all of them, I think you need a file
/etc/default/zaptel like this with the relevant driver(s) uncommented:
# Un-comment as per your requirements; modules to load/unload
#Module Name Hardware
#MODULES="$MODULES tor2" # T400P - Quad Span T1 Card
#E400P - Quad Span E1 Card
#MODULES="$MODULES wct4xxp" # TE405P - Quad Span T1/E1 Card (5v version)
# TE410P - Quad Span T1/E1 Card (3.3v version)
#wct4xxp_ARGS="t1e1override=15" # Additional parameters for TE4xxP driver
#MODULES="$MODULES wct1xxp" # T100P - Single Span T1 Card
# E100P - Single Span E1 Card
#MODULES="$MODULES wcte11xp" # TE110P - Single Span T1/E1 Card
#MODULES="$MODULES wctdm24xxp" # TDM2400P - Modular FXS/FXO interface (1-24 ports)
MODULES="$MODULES wcfxo" # X100P - Single port FXO interface
# X101P - Single port FXO interface
#MODULES="$MODULES wctdm" # TDM400P - Modular FXS/FXO interface (1-4 ports)
I can’t recall the exact origins of this file and whether or not it is really necessary, but I had it on my old system and the Ubuntu provided zaptel init script checks for it’s presence; although it doesn’t look like it does much with its contents though…
Hopefully this will help others and also act as a bit of an aide memoir for me when I next build an Ubuntu server with Asterisk.