Monday, October 22, 2012

How to bulk update deals in Highrise HQ

One of the fun things about being a technology entrepreneurs is that occasionally I encounter business problems that give me a chance to touch code. In this case I had to update a bunch of Highrise HQ deals.

The business problem: At Telestax, we had a great first year, which we celebrated at the recent Mobicents Community Summit 2012 in Rio De Janeiro.  One of the decisions we made at the Summit was to grow the sales team. We use HighriseHQ and until now we've used it in a loosely organized fashion. The result of course was a messy pile of sales data.

Lesson learned. We've created a list of discovery questions, improved our data sheets, polished the offerings documents and created best practices for the sales process. Now we can pass on the knowledge to the new members of the sales team. But before we do that, we need to clean up the old mess. For example we need to organize deals in meaningful categories, remove outdated tasks, and establish proper visibility levels.

The technical challenge: HighriseHQ has a nice search UI, and intuitive create/update UI for individual entries, but it doesn't offer more advanced features such as bulk updates. At least I couldn't find them. This is probably by design as 37Signals is known for keeping things simple.

The solution: Fortunately there is a nice, well designed REST API that can be used with command line tools to get the job done. The task of updating a lot of leads takes a few command lines and a little scripting. In the example below, we are updating the visibility of all existing leads to a sales user group.

First let's get a list of all deals in an xml file:

curl -u 6006c09437e0e1fde:X > all-deals.xml

Then list the groups so we can see the integer ID of the group we want to apply to all deals:

curl -u 6006c09437e0e1fde:X

The result would have a section that looks similar to this:

    <id type="integer">437336</id>
    <name>Sales Account Managers</name>

We now have enough information to process. The next step is to write a script that creates update commands. We will use a simple XSLT stylesheet for the job:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
<xsl:template match="/deals">
      <xsl:for-each select="deal/id">
curl -u 6006c09437e0e1fde:X -X PUT  -H 'Content-Type: application/xml'  -d '<deal><visible-to>NamedGroup</visible-to><group-id type="integer">437361</group-id></deal>'<xsl:value-of select="text()" />.xml

The stylesheet above simply iterates over all deals in an xml file, extracts each deal ID and places it in a curl command that updates the visibility of the given deal to the group ID of Sales Account Managers. Let's name the XSLT file deal-visibility-update.xslt and run it with the xsltproc command line tool found on most Linux and OS X machines.

xsltproc deal-visibility-update.xslt deals-all.xml >

The output of the command goes to a shell script file that's almost ready to run. We just need to remove the first line, which is an xml heading printed by default by xsltproc.

<?xml version="1.0" encoding="UTF-8"?>

The rest of the file is a long list of curl commands printed by the xslt script. Let's run it.


It takes a second or two for each deal to be updated, because each curl command is a remote http invokation to the HighriseHQ server. It would have been a lot more efficient if we could run a bulk update query on the HighriseHQ server. However I am not complaining because this is not a daily need and its a whole lot faster than using the UI to update each deal. In fact I started that route and after twenty minutes of clicking decided that its going to take hours before I can make significant progress.

So here we go, in a couple of hours total, I managed to solve a business problem, play with code and blog about it.

If you know of more efficient ways to get the same job accomplished, please share in the comments section. Thank you in advance!

Sunday, November 06, 2011

Mobicents Media Server passes 100% JSR 309 Compliance

The Mobicents Media Server continues the tradition of the Mobicents community to drive simultaneously Open Source innovation and Standardization to an otherwise siloed telco industry. As of today, November 6, 2011, the Mobicents Media Server is the first Open Source (LGPL) 100% JSR 309 compliant implementation.

JSR 309 is the standard Java API that allows control of media server resources. It makes it possible for Java developers to implement in a standard and portable way, rich media applications such as Conference Calling, Interactive Voice Response, DTMF detection, Text To Speech, Video Playback and many others.

Established media server vendors such as HP OpenCall, Dialogic, Voxeo, and Radisys already offer JSR 309 drivers for their products. And now MMS joins the group as the first Open Source implementation.

We welcome all interested community users to verify our claim and bring up any potential issues. Build and run instructions are located at:

Please report your test results on the mobicents public mailing list or the Media Server issue tracker.

The path to JSR 309 certification has been a long and hard battle. It started over three years ago when we decided to join the JSR 309 Expert Group. Participating in the discussions has been a great experience. We learned a lot from the other members of the EG, most of which had deeper experience with media delivery at the time. The HP OpenCall team, who lead the spec did a great job advancing the collaboration past religious deadlocks towards results. As far as I remember the 309 EG met its deadlines pretty closely. Impressive for a big group of contributors to a communications standard. Anyone who ever sat on an ITU, OMA or GSMA standards committee would understand why I make this remark.

Starting with a strong specification and TCK, we were able to advance with the implementation, even though it required significant refactoring because the 309 model was fundamentally different than the original MMS architecture. By December 2009 we have reached the 70% pass mark. It took almost another two years to solve the last 30% riddle. But we finally solved it!

Many, many thanks to the project lead Oleg Kulikoff, who did not give up the fight to design a quasi-real-time media server engine, that delivers predictable, measurable media processing operations in pure Java, without relying on hardware guaranteed preemptive scheduling properties.

I strongly recommend following Oleg's blog if you are interested in this non-trivial problem. There are important implications that will play a big role in our cloud strategy, where we have to deal with virtualized environment, several layers above and across commodity hardware.

Many thanks to the other key contributors: Vladimir Ralev, Yulian Oifa, Amit Bhayani, and Bartosz Baranowski who supported Oleg throughout various stages of his journey. Special acknowledgement goes to Yulian who helped us cross the finish line in the last few weeks after Oleg had reached the 90% TCK mark.

I know there are other contributors to MMS that I missed to acknowledge. Please correct me in the comments to this post.

I am very excited about this achievement and look forward to community feedback.

Important as it may be, JSR 309 is just one of the milestones on the MMS roadmap. Stay tuned for other great announcements in the near future, especially ones related to auto-scaling MMS in the cloud. Better yet, take an active role in the project and help us get there faster! Everyone wins.

Wednesday, November 02, 2011

Annual Mobicents Community Summit - Sochi, Russia, December 4-9, 2011

By tradition, the Mobicents core team and community contributors will meet in person for a week of brainstorming and fun. The location we chose this year is Sochi, Russia - the home of the Winter Olympic Games 2014.

The goal of the week-long gathering is to socialize, catch up on the latest in the Cloud Communications industry, review Mobicents projects progress and set direction for the next 12-18 months.

The event is open to all Mobicents contributors and community members. This is a great opportunity to mingle with the core team and share experience with fellow developers, product managers and entrepreneurs.

The event will be hosted at the picturesque Katerina Hotel:

If you would like to join us, please contact me (ivelin117 at gmail) or any other core team member as soon as possible.

Discounted hotel rooms are limited. Lead time may be required for obtaining a Russian tourist visa, depending on your country of origin. Do not delay. Contact us today!

The work days for the meeting are December 5,6 and 7.

December 4 is arrival day. The closest airport to Sochi is Adler/Sochi (AER).
December 8 is allocated for team building activities and focused group meetings.
December 9 is departure day.

We will allocate all of December 5 for community member presentations. This is a great opportunity for presenters to solicit feedback from fellow experts and influence the project roadmap discussions in the following two days. Let me know if you have something interesting to share in a 20 minute short talk. Example topics:
- Cool Customer Success Story
- Innovative App
- Surviving Production Crisis
- Developing Hurdles
- 3rd Party Product Integration Concerns
- Recommendations for Improvement
- Features Wish List

December 6 and 7 are allocated for core member presentations on:
- Project Development Progress for the past year
- Community Development Progress for the past year
- Planning vs Reality: Matching the 12 month roadmap set a year ago to what actually happened
- Integration Concerns with Other Mobicents Projects
- Integration Concerns with 3rd Party Products
- Cross Project Concerns: Cloud Deployment, Clustering, Management, Auto Scaling
- Setting the Roadmap for the next 12-18 month

Detailed Tentative Agenda:

December 5: Stories from the battle field

  • 8am-9:20am: Breakfast, Meet and Greet
  • 9:30am-10:20am: Welcome Message, Round Table Introductions
  • 10:30am-10:50: Transitioning Mobicents leadership from Red Hat to new company - Ivelin Ivanov
  • 11am-11:20am: Twilio Client and Cloud Communications - Jonas Borjesson, Twilio
  • 11:30am-11:50am: Open - Battlefield Story
  • noon-1pm: lunch
  • 1:30pm-1:50pm: Multi Modal Video Conferencing -  Nick Semergey and Alex Vinogradov, Avistar - Codeminders
  • 2:00pm-2:20pm: Open - Battlefield Story
  • 2:30pm-2:50pm: Moho - FOSS Telco Framework for Java Developers - Jason Goecke, Voxeo Labs
  • 3:00pm-3:20pm: Mobicents Diameter in MEVEO Open Source Billing - Sébastien Michéa, Manaty
  • 3:30pm-3:50pm: Innovation with Mobicents at MTN - Amit Bhayani
  • 4:00pm-4:20pm: Open - Battlefield Story
  • 4:30pm-4:50pm: Unified Cloud Communications for SMBs - Silvano Girardi Jr, Inphonex
  • 5:00pm-5:20pm: Open - Battlefield Story
  • 5:30pm-5:50pm: Cool apps for Next Gen Intelligent Networks - Vilius Panevėžys, Elitnet
  • 6:00pm-6:20pm: break
  • 6:30pm: dinner

December 6: Mobicents Projects: Progress and Roadmap
*  10am-10:50: RestComm - Thomas Quintana
*  11am-11:20: OpenVBX on RestComm - Thomas Q
*  11:30am-11:50: Cloud Management - Thomas Q
*  noon-1pm: lunch
*  1:30pm-2:50pm: From SIP Servlets to TelScale - Jean Deruelle
*  3pm-3:50pm: SIP Load Balancing - Vladimir Ralev
*  4pm-4:50pm: Converged LB, TLS, SBC, NAT - Vladimir Ralev
*  5pm-5:50pm: Container independent failover framework - Jean Deruelle
*  6pm-6:20pm: CDI Telco Framework and Aquilian - George Vagenas

December 7: Mobicents Projects: Progress and Roadmap (cont.)
*  10am-10:50: TelScale SNMP and JMX management - Jean Deruelle
*  11am-11:50: QE achievements, infrastructure review, frameworks, roadmap, expansion to community contributed resources - Luis Barreiro
noon-1pm: lunch
*  1:30pm-2:50pm: Media Server theory, practice, cloud considerations, design discussion, roadmap
*  3pm-3:50pm: JSLEE progress and roadmap - Eduardo Martins
*  4pm-4:50pm: Diameter progress, popular use cases, roadmap - Alexandre Mendonca, Bartosz Baranowski
*  5pm-5:50pm: SS7 progress, popular use cases, roadmap - Amit Bhayani, Sergey, Bartosz

All meetings will take place in room "Tor".

Link to the Google Calendar Public Event:

Looking forward to a great week in Sochi - the Winter Olympics City of 2014.

Ivelin Ivanov
Founder, Mobicents

Sunday, October 02, 2011

HA strategies for Mobicents

Continuing on the topic of deploying mobicents in a cloud environment (whether private or public), Vladimir Ralev published a document that attempts to find the fundamental types of SIP and HTTP interactions that can be used in composition to describe a broad range of real world use cases.

The main value of this work is that it greatly simplifies an otherwise complex task of correctly designing and implementing High Availability, Load Balancing, Fault Tolerance and Elasticity. The paper allows us to wrap our minds around a small number of use cases and focus our energy on optimizing Mobicents in a cloud environment for these.

Community feedback is welcome as always. Looking forward to reading your comments.

Direct link to the document: here.

Sunday, July 10, 2011

Mobicents SIP and HTTP Load Balancing

The topic of High Availability and Fault Tolerance is always interesting as the set of use cases evolves and the infrastructure available to support various solutions varies. Vladimir Ralev, Mobicents architect, discusses some essential aspects of SIP Load Balancing and converged SIP + HTTP load balancing in a pretty thorough presentation (42 slides):

Comments to this exciting topic are most welcome.

Monday, June 20, 2011

Mobicents Cloud Communications

For the last 6 months there has been a great amount of activity in the Mobicents community on the topic of Cloud Communications.
To provide an overview of our current state and future roadmap to community members interested in the topic, we created a short (under 4 minutes) video.

For a more technical discussion of Mobicents for Cloud Communications, take a look at the research thesis by Thibault Leruitte at Universit e catholique de Louvain: Migration of Mobicents SIP Servlets on a Cloud Platform.

As always, looking forward to feedback, criticism, suggestions and most of all code contributions :)