Friday, May 8, 2009

Post Card #11 - Time Warp, Part One

Wow. The past two years have absolutely flown by. I started this blog at the time I started to get deeply interested in open-source software and subsequently open-source hardware. My original goal was to pursue building a USB-based T1 interface that could be used with FreeSWITCH. At the time there was no TDM interface for FreeSWITCH, so I couldn't use it to replace the outbound IVR that I had started building in Asterisk. However, the FS developers soon thereafter came up with OpenZAP, a TDM abstraction layer that allows FreeSWITCH to talk to TDM cards from Digium, Sangoma, PIKA, Rhino Technologies, OpenVox, etc. In one fell swoop my original motivation for this journey was neutralized. I consider that a good thing.

So now what? Well, I have new journeys. I have since changed employment and I now have another child. (Final score: 1 girl, 1 boy, hundreds of nights of frequently interrupted sleep.) I also have a new open source journey: FreeSWITCH. I now work for an open-source friendly company who supports FreeSWITCH and I now have a full-time job that allows me to work with Anthony, Brian, and Mike on a full-time basis. I consider myself extremely fortunate. How did I get here?

Nearly three years ago I started researching this interesting idea of an open-source PBX, Asterisk, and I quickly learned about the schism in the community. From my perspective I could see two main groups: those who supported the Digium way of doing things and those who felt that Digium was more like the "Digistapo." I asked about it on the Asterisk users list and was immediately attacked for being a troll and for going off topic. Fortunately, a long-time Asterisk user and TDM developer, Tzafrir Cohen from Xorcom, mailed me off list and gave me some background. I was very grateful for that. It helped me see where things were and where things were going.

What I discovered was that those who disagreed with the way Digium was handling things fell into two groups: the OpenPBX (now CallWeaver) group and the FreeSWITCH group. The former forked the Asterisk code base and took it in another direction. The latter started an entirely new telecommunications platform from scratch. At the time I was still new, but I investigated all three projects. I immediately liked the goals held out by the FreeSWITCH developers, but the project was still in its infancy and I couldn't really do much with it at that point. I decided to sign up on the mailing list and watch it. I visited the CallWeaver site but honestly I didn't see a lot of activity, nor did I see any real benefit for me to use it. Furthermore, I immediately purchased Asterisk - The Future of Telephony, aka the starfish, the moment I saw it on the bookshelf. That part was settled: I would use Asterisk to build my outbound IVR.

I spent many hours playing with Asterisk. I convinced my boss to let me buy a 4 port T1 card and play around. Being the PBX guy at our office, I knew how to "liberate" a PRI circuit for me to play with, plus I connected the Asterisk box to our existing office PBX. I was having a lot of fun learning how to do all sorts of fun stuff. And then... there were CDRs. I began to see that there were issues making CDRs work the way I wanted. For an outbound IVR I would need a lot of information, including on calls that failed for one reason or another. Frankly, I had headaches trying to get what I needed. I ended up writing nasty hacks to get the data I needed, using shell scripts and Perl to stitch together the data necessary to fill out my IVR history database. It felt like I was writing hacks to make up for deficiencies in Asterisk. I decided to look around.

I kept gravitating back to FreeSWITCH. I was keeping up with the users list and I could see that progress was happening slowly but very steadily. Then one day OpenZAP arrived! That was June 2007. Finally I could play with my IVR on FreeSWITCH! Well, sort of. I soon realized that the FreeSWITCH way of doing things was much different than the Asterisk way. If I may paraphrase Yoda: I had to unlearn what I had learned. Also, not too many in the FreeSWITCH camp were actually using TDM, so I was a bit of a pioneer. I must say that I was pleasantly surprised - I asked lots and lots of questions about OpenZAP and FreeSWITCH and I received answers directly from all three developers: Anthony Minessale, Brian West, and Mike Jerris. They also patiently helped me learn while also taking my feedback and making OZ better. All the while I did my best to document everything on the wiki. Things kept moving forward. Pretty soon I was able to tell the difference between a bug and a misconfiguration. In some cases there were both. I've lost count of how many "PEBKAC-induced segfaults" I discovered! Things kept moving forward.

I started spending more time on the IRC channel. (#freeswitch on irc.freenode.net) I slowly got into the position of assisting others and being the volunteer OpenZAP documentation guy. I like doing documentation so when Brian West suggested a weekly conference call to discuss documentation issues I volunteered immediately. We did those calls for a few months and cleaned up a lot of the documentation on the wiki. That kind of pooped out, though, because with users all over the world it was nearly impossible to find a time that worked for everyone. However, I still did my best to help out with the documentation and I volunteered to be a doc marshall.

Things were leading up to ClueCon 2008. I wanted to go but I couldn't afford it. Then one day Brian asks me what it would take to get me to ClueCon. I mentioned that I couldn't afford the entrance fee and the hotel, so if I could sneak in for free and have a roommate then I'd be good on that front, but the biggest hurdle would be getting permission from my boss. And by boss, I mean my wife. With two young children it would be a challenge, but she could see how badly I wanted to go, so we made the arrangements. I had to take vacation time because technically this wasn't for my day job. I was very glad I went. I met a lot of people whom I'd chatted with via email and IRC. I also had a very interesting conversation with Brian. But that's another story...