<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Warheads Stacked in the Kitchen</title>
	<atom:link href="http://jsgoecke.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jsgoecke.wordpress.com</link>
	<description>Jason Goecke's blog</description>
	<lastBuildDate>Wed, 22 Jul 2009 17:44:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='jsgoecke.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/47c92d478abd03f9e51a878e3b6c1f8e?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Warheads Stacked in the Kitchen</title>
		<link>http://jsgoecke.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://jsgoecke.wordpress.com/osd.xml" title="Warheads Stacked in the Kitchen" />
	<atom:link rel='hub' href='http://jsgoecke.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Its official &#8211; Adhearsion &amp; Voxeo</title>
		<link>http://jsgoecke.wordpress.com/2009/07/22/its-official-adhearsion-voxeo/</link>
		<comments>http://jsgoecke.wordpress.com/2009/07/22/its-official-adhearsion-voxeo/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 17:44:14 +0000</pubDate>
		<dc:creator>jasongoecke</dc:creator>
				<category><![CDATA[Adhearsion]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[VoIP]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tropo]]></category>
		<category><![CDATA[tropo.com]]></category>
		<category><![CDATA[voxeo]]></category>
		<category><![CDATA[voxeo labs]]></category>

		<guid isPermaLink="false">http://jsgoecke.wordpress.com/?p=456</guid>
		<description><![CDATA[Adhearsion is effective in making telephony applications easy to develop. The next phase is to make deployment and scaling of these applications easy while increasing choice of development environments. The first step in accelerating this phase was announced today, Adhearsion and Voxeo Launch Voxeo Labs! It is time to take Adhearsion to the cloud. Some [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=456&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-457 alignright" title="Picture 1" src="http://jsgoecke.files.wordpress.com/2009/07/picture-1.png?w=271&#038;h=70" alt="Picture 1" width="271" height="70" /><a href="http://adhearsion.com" target="_blank">Adhearsion</a> is effective in making telephony applications easy to develop. The next phase is to make deployment and scaling of these applications easy while increasing choice of development environments. The first step in accelerating this phase was announced today, <a href="http://news.yahoo.com/s/prweb/20090722/bs_prweb/prweb2668014" target="_blank">Adhearsion and Voxeo Launch Voxeo Labs</a>! It is time to take Adhearsion to the cloud.</p>
<p>Some of you that have been following along closely, may already have noticed our involvement with <a href="http://tropo.com" target="_blank">Tropo.com</a>. We worked closely with Voxeo at the inception of Tropo which was subsequently launched at <a href="http://www.youtube.com/watch?v=K7bX8OzZe9Y" target="_blank">eComm in March of 2009</a>. The goal of Tropo.com is to bring a scalable telephony cloud infrastructure to the broadest group of developers by allowing development directly in dynamic languages. Languages included are: Javascript, Groovy, PHP, Python and Ruby. We will now be focused on bringing Tropo and Adhearsion together to offer the power of Adhearsion with the scale of Tropo, while extending capabilities in the other languages.</p>
<p>Jay and I as founding members of Voxeo Labs is no accident. The DNA of Voxeo Labs is a commitment to open-source. Adhearsion will continue to evolve as an open-source framework with continued support for <a href="http://asterisk.org">Asterisk</a> along with Tropo and others. Our goal is to provide the widest possible set of deployment choices for the Adhearsion community, while eliminating friction for those who want effortless deployment and scaling.</p>
<p>Stay tuned as we have lots of interesting announcements just around the corner. In the meantime, thanks to the entire Adhearsion community for the support that allowed us to pursue this next step.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jsgoecke.wordpress.com/456/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jsgoecke.wordpress.com/456/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jsgoecke.wordpress.com/456/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jsgoecke.wordpress.com/456/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jsgoecke.wordpress.com/456/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jsgoecke.wordpress.com/456/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jsgoecke.wordpress.com/456/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jsgoecke.wordpress.com/456/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jsgoecke.wordpress.com/456/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jsgoecke.wordpress.com/456/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jsgoecke.wordpress.com/456/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jsgoecke.wordpress.com/456/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jsgoecke.wordpress.com/456/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jsgoecke.wordpress.com/456/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=456&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jsgoecke.wordpress.com/2009/07/22/its-official-adhearsion-voxeo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4f295d5bdebbf607ad32f7ce5036aded?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jasongoecke</media:title>
		</media:content>

		<media:content url="http://jsgoecke.files.wordpress.com/2009/07/picture-1.png" medium="image">
			<media:title type="html">Picture 1</media:title>
		</media:content>
	</item>
		<item>
		<title>Adhearsion (アドヒアジョン) &amp; Tropo presentation at Ruby Kaigi &#8211; Tokyo 2009</title>
		<link>http://jsgoecke.wordpress.com/2009/07/17/adhearsion-tropo-presentation-at-ruby-kaigi-tokyo-2009/</link>
		<comments>http://jsgoecke.wordpress.com/2009/07/17/adhearsion-tropo-presentation-at-ruby-kaigi-tokyo-2009/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 08:29:43 +0000</pubDate>
		<dc:creator>jasongoecke</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Adhearsion]]></category>
		<category><![CDATA[アドヒアジョン]]></category>
		<category><![CDATA[japan]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[ruby kaigi]]></category>
		<category><![CDATA[rubykaigi]]></category>
		<category><![CDATA[tokyo]]></category>
		<category><![CDATA[tropo]]></category>

		<guid isPermaLink="false">http://jsgoecke.wordpress.com/?p=451</guid>
		<description><![CDATA[I just gave my talk at Ruby Kaigi in Tokyo Japan. The event is well organized and attended. I suppose that is a bit easier since Tokyo is the home of Ruby, and filled with 13 million people. Here are the slides:<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=451&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I just gave my talk at Ruby Kaigi in Tokyo Japan. The event is well organized and attended. I suppose that is a bit easier since Tokyo is the home of Ruby, and filled with 13 million people.</p>
<p>Here are the slides:</p>
<object type='application/x-shockwave-flash' wmode='opaque' data='http://static.slideshare.net/swf/ssplayer2.swf?id=1732968&doc=rubykaigijuly2009-tokyojapanese-090716214905-phpapp02' width='600' height='492'><param name='movie' value='http://static.slideshare.net/swf/ssplayer2.swf?id=1732968&doc=rubykaigijuly2009-tokyojapanese-090716214905-phpapp02' /><param name='allowFullScreen' value='true' /></object>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jsgoecke.wordpress.com/451/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jsgoecke.wordpress.com/451/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jsgoecke.wordpress.com/451/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jsgoecke.wordpress.com/451/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jsgoecke.wordpress.com/451/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jsgoecke.wordpress.com/451/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jsgoecke.wordpress.com/451/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jsgoecke.wordpress.com/451/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jsgoecke.wordpress.com/451/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jsgoecke.wordpress.com/451/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jsgoecke.wordpress.com/451/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jsgoecke.wordpress.com/451/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jsgoecke.wordpress.com/451/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jsgoecke.wordpress.com/451/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=451&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jsgoecke.wordpress.com/2009/07/17/adhearsion-tropo-presentation-at-ruby-kaigi-tokyo-2009/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4f295d5bdebbf607ad32f7ce5036aded?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jasongoecke</media:title>
		</media:content>
	</item>
		<item>
		<title>Behavior Driven Systems Monitoring for Telephony</title>
		<link>http://jsgoecke.wordpress.com/2009/06/10/behavior-driven-systems-monitoring-for-telephony/</link>
		<comments>http://jsgoecke.wordpress.com/2009/06/10/behavior-driven-systems-monitoring-for-telephony/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 18:15:59 +0000</pubDate>
		<dc:creator>jasongoecke</dc:creator>
				<category><![CDATA[Adhearsion]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[VoIP]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[behavior driven development]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[cucumber nagios]]></category>
		<category><![CDATA[cukes]]></category>
		<category><![CDATA[euruko]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[sipper]]></category>
		<category><![CDATA[sipr]]></category>
		<category><![CDATA[systems management]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[telephony]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[test driven development]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://jsgoecke.wordpress.com/?p=417</guid>
		<description><![CDATA[While attending Euruko several weeks ago, I had the opportunity to see @aslak_hellesoy present the Cucumber Behavior Driven Development (BDD) framework. BDD is a part of Agile software development focused on bringing the domain expert into the specification process through the use of natural language. This is done through the users and developers creating a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=417&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://cukes.info/"><img class="alignright size-full wp-image-421" title="CucumberLogo" src="http://jsgoecke.files.wordpress.com/2009/06/picture-13.png?w=229&#038;h=72" alt="CucumberLogo" width="229" height="72" /></a></p>
<p>While attending <a href="http://www.euruko2009.org/" target="_blank">Euruko</a> several weeks ago, I had the opportunity to see <a href="http://twitter.com/aslak_hellesoy" target="_blank">@aslak_hellesoy</a> present the <a href="http://cukes.info/" target="_blank">Cucumber</a> <a href="http://en.wikipedia.org/wiki/Behavior_driven_development" target="_blank">Behavior Driven Development (BDD)</a> framework. BDD is a part of <a href="http://en.wikipedia.org/wiki/Agile_software_development" target="_blank">Agile software development</a> focused on bringing the domain expert into the specification process through the use of natural language. This is done through the users and developers creating a story that is directly parsed by the code for tests.</p>
<p>Aslak&#8217;s <a href="http://www.slideshare.net/railsconf/quality-code-with-cucumber-presentation" target="_blank">presentation</a> was well done, giving some compelling reasons to adhere to BDD principals, showing that using Cucumber made it a joy. Thing is, Cucumber is already a part of testing for  the <a href="http://adhearsion.com" target="_blank">Adhearsion</a> framework and some specific projects we are working on. What was new to me, was a lightning talk given at the end of the day on <a href="http://github.com/auxesis/cucumber-nagios" target="_blank">Cucumber-Nagios</a>.</p>
<p><span id="more-417"></span></p>
<p>Cucumber-Nagios is a project developed by <a href="http://twitter.com/auxesis" target="_blank">@auxesis</a> that bridges Cucumber test results into the <a href="http://www.nagios.org/" target="_blank">Nagios</a> monitoring tool. This allows you to take any test you have written and allow the steps to become part of an on-going systems monitoring strategy. While Cucumber-Nagios is geared towards web application testing, you may use this beyond to test virtually any application.</p>
<p>Naturally I have started using Cucumber-Nagios to create a series of tests to do application level monitoring of Adhearsion and <a href="http://asterisk.org" target="_blank">Asterisk</a>. This now allows one to not only ensure that these processes are running, but they are working as defined by the BDD specification.</p>
<p>To start, I created a couple of <a href="http://wiki.github.com/aslakhellesoy/cucumber/feature-introduction" target="_blank">features</a> that will connect to Adhearsion and/or Asterisk. Then ping the <a href="http://www.voip-info.org/wiki/view/Asterisk+manager+API" target="_blank">Asterisk Manager Interface (AMI)</a> looking for a corresponding pong, ensuring the systems are still responsive.</p>
<p>The feature to ping the AMI uses the straight forward <a href="http://wiki.github.com/aslakhellesoy/cucumber/gherkin" target="_blank">Gherkin</a> language to create a feature file with the test specification:</p>
<p><img class="aligncenter size-full wp-image-428" title="PingAsteriskFeature" src="http://jsgoecke.files.wordpress.com/2009/06/picture-1.jpg?w=600&#038;h=139" alt="PingAsteriskFeature" width="600" height="139" /></p>
<p>The feature file is then parsed by the <a href="http://wiki.github.com/aslakhellesoy/cucumber/step-definitions" target="_blank">steps definitions</a> as set out in the step file:</p>
<p><img class="aligncenter size-full wp-image-430" title="cukes steps" src="http://jsgoecke.files.wordpress.com/2009/06/steps.jpg?w=512&#038;h=192" alt="cukes steps" width="512" height="192" /></p>
<p>The methods called in the step definitions then invoke the system testing library I wrote specifically for these <a href="http://en.wikipedia.org/wiki/Telephony" target="_blank">telephony</a> systems. The result is having a standalone test framework that may provide direct input at an application level to Nagios, as well as provide plain English feedback to anyone looking to track down the cause of the problem.</p>
<p>First, if Asterisk is down we may see the result of running the Cucumber plain English test:</p>
<p><img class="aligncenter size-full wp-image-433" title="cuke-fail" src="http://jsgoecke.files.wordpress.com/2009/06/cuke-fail1.jpg?w=600&#038;h=504" alt="cuke-fail" width="600" height="504" />Then the corresponding Cucumber-Nagios test that also fails with a &#8216;Critical&#8217; error:</p>
<p><img class="aligncenter size-full wp-image-434" title="nagios fail" src="http://jsgoecke.files.wordpress.com/2009/06/nagios-fail.jpg?w=600&#038;h=403" alt="nagios fail" width="600" height="403" /></p>
<p>Now, if Asterisk is up and all is fine we may see these same tests pass. First, for Cucumber all is green:</p>
<p><img class="aligncenter size-full wp-image-437" title="cuke-success" src="http://jsgoecke.files.wordpress.com/2009/06/cuke-success1.jpg?w=600&#038;h=403" alt="cuke-success" width="600" height="403" />Then for Cucumber-Nagios we see all 3 tests passed:</p>
<p><img class="aligncenter size-full wp-image-438" title="nagios success" src="http://jsgoecke.files.wordpress.com/2009/06/nagios-success.jpg?w=600&#038;h=403" alt="nagios success" width="600" height="403" /></p>
<p>The great thing about this approach is that it may be used to test systems using a standard open source dynamic language like <a href="http://www.ruby-lang.org/" target="_blank">Ruby</a>. These tests are not limited to testing Ruby systems though, as you may see in this case I am testing the Asterisk open source telephony engine. Further, I may test not only the standard interfaces of various systems, but that the behavior of my application deployed within these systems is behaving as required from a specification perspective. This is a powerful approach to systems monitoring and troubleshooting, pulling the system administrators directly into the development process.</p>
<p>You may check out my <a href="http://github.com/jsgoecke/telephony-system-tests" target="_blank">telephony-system-tests</a> project on Github. My plan is to greatly extend this system testing framework over time in order to have a stable of standard tests for Adhearsion, Asterisk, Freeswitch and others in the future. One of the next steps will be to integrate <a href="http://sipper.agnity.com/" target="_blank">SIPr</a> into the framework for testing <a href="http://en.wikipedia.org/wiki/Session_initiation_protocol" target="_blank">SIP</a> dialogs as well.</p>
<p>Another interesting item from Euruko that I will be posting about soon is <a href="http://wiki.opscode.com/display/chef/Home" target="_blank">Chef</a>, which was presented by <a href="http://diluvia.net/" target="_blank">Joshua Sierles</a> of <a href="http://37signals.com/" target="_blank">37Signals</a> at the conference. So much more to come on this front.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jsgoecke.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jsgoecke.wordpress.com/417/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jsgoecke.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jsgoecke.wordpress.com/417/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jsgoecke.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jsgoecke.wordpress.com/417/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jsgoecke.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jsgoecke.wordpress.com/417/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jsgoecke.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jsgoecke.wordpress.com/417/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jsgoecke.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jsgoecke.wordpress.com/417/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jsgoecke.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jsgoecke.wordpress.com/417/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=417&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jsgoecke.wordpress.com/2009/06/10/behavior-driven-systems-monitoring-for-telephony/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4f295d5bdebbf607ad32f7ce5036aded?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jasongoecke</media:title>
		</media:content>

		<media:content url="http://jsgoecke.files.wordpress.com/2009/06/picture-13.png" medium="image">
			<media:title type="html">CucumberLogo</media:title>
		</media:content>

		<media:content url="http://jsgoecke.files.wordpress.com/2009/06/picture-1.jpg" medium="image">
			<media:title type="html">PingAsteriskFeature</media:title>
		</media:content>

		<media:content url="http://jsgoecke.files.wordpress.com/2009/06/steps.jpg" medium="image">
			<media:title type="html">cukes steps</media:title>
		</media:content>

		<media:content url="http://jsgoecke.files.wordpress.com/2009/06/cuke-fail1.jpg" medium="image">
			<media:title type="html">cuke-fail</media:title>
		</media:content>

		<media:content url="http://jsgoecke.files.wordpress.com/2009/06/nagios-fail.jpg" medium="image">
			<media:title type="html">nagios fail</media:title>
		</media:content>

		<media:content url="http://jsgoecke.files.wordpress.com/2009/06/cuke-success1.jpg" medium="image">
			<media:title type="html">cuke-success</media:title>
		</media:content>

		<media:content url="http://jsgoecke.files.wordpress.com/2009/06/nagios-success.jpg" medium="image">
			<media:title type="html">nagios success</media:title>
		</media:content>
	</item>
		<item>
		<title>Using C#/.Net to Invoke the Adhearsion API via REST</title>
		<link>http://jsgoecke.wordpress.com/2009/06/08/using-c-net-to-invoke-the-adhearsion-api-via-rest/</link>
		<comments>http://jsgoecke.wordpress.com/2009/06/08/using-c-net-to-invoke-the-adhearsion-api-via-rest/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 19:01:12 +0000</pubDate>
		<dc:creator>jasongoecke</dc:creator>
				<category><![CDATA[Adhearsion]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[VoIP]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[communications]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[rpc]]></category>
		<category><![CDATA[voice]]></category>

		<guid isPermaLink="false">http://jsgoecke.wordpress.com/?p=410</guid>
		<description><![CDATA[Recently an Adhearsion community member, David Lawal, built upon the PHP/REST example I posted back in February. David comes from a C#/.Net background and was beginning to learn Ruby in order to use Adhearsion. Then, in his own words: &#8220;&#8230;I needed to leverage &#8216;all the work&#8217; done in .Net&#8230;As I discovered, the marriage of .Net [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=410&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently an <a href="http://adhearsion.com">Adhearsion</a> community member, David Lawal, built upon the <a href="http://blog.goecke.net/2009/02/20/using-php-to-invoke-the-adhearsion-api-via-rest/" target="_blank">PHP/REST example</a> I posted back in February. David comes from a <a href="http://en.wikipedia.org/wiki/C_Sharp_(programming_language)" target="_blank">C#</a>/<a href="http://en.wikipedia.org/wiki/.NET_Framework" target="_self">.Net</a> background and was beginning to learn Ruby in order to use  Adhearsion. Then, in his own words:</p>
<blockquote><p>&#8220;&#8230;I needed to leverage &#8216;all the work&#8217; done in .Net&#8230;As I discovered, the marriage of .Net and Adhearsion was lovely, thanks to the <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" target="_blank">RESTful</a> <a href="http://en.wikipedia.org/wiki/Remote_procedure_call" target="_blank">RPC</a> [API of Adhearsion]&#8220;</p></blockquote>
<p>So David created an example and has graciously shared it with the rest of us. The example includes a component in Adhearsion that has this method extending the &#8216;methods_for :rpc&#8217;:</p>
<p><span id="more-410"></span></p>
<pre class="brush: ruby;">
def launch_call_rpc(vars)
  ahn_log.ami vars   

  channel = vars[&quot;src&quot;]
  exten = vars[&quot;dest&quot;]
  options = { &quot;Channel&quot; =&gt; channel,
              &quot;Context&quot; =&gt;  &quot;callback&quot;,
              &quot;Exten&quot; =&gt;    exten,
              &quot;Priority&quot; =&gt; “1”,
              &quot;Callerid&quot; =&gt; “33333” }
  result = Adhearsion::VoIP::Asterisk.manager_interface.originate options

  ahn_log.ami &quot;status: call Queued&quot;
  ahn_log.ami result
end
</pre>
<p>Following the full <a href="http://github.com/jsgoecke/adhearsion_csharp_example">README and example here</a>, this C# code may then be used to invoke the Adhearsion REST API:</p>
<pre class="brush: csharp;">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using JSONSharp;
using System.Net;
using System.IO;

namespace adhearsion
{//adhearsion server is http://192.168.1.62:5000
    class Program
    {
        static void Main(string[] args)
        {
            Program.connect();
        }
        static void connect()
        {
            try
            {
                ahnparams ahn = new ahnparams();
                ahn.src = @&quot;SIP/4031234567@192.168.1.200&quot;;
                ahn.dest = @&quot;7801234567&quot;;
                //Pass it to our static reflector, which will build
                JSONReflector jsonReflector = new JSONReflector(ahn);   //JSONSharp converts the class to JSON format
                //Console.WriteLine(jsonReflector.ToString());
                NetworkCredential myCred = new NetworkCredential(&quot;jicksta&quot;, &quot;roflcopterz&quot;);

                CredentialCache myCache = new CredentialCache();

                myCache.Add(new Uri(&quot;http://192.168.1.62:5000&quot;), &quot;Basic&quot;, myCred);

                WebRequest request = WebRequest.Create(&quot;http://192.168.1.62:5000/launch_call_rpc&quot;);
                request.Credentials = myCache;
                string postData = &quot;[&quot;+jsonReflector.ToString()+&quot;]&quot;;  //had to add the [] for it to work with restful_rpc just like php json
                Console.WriteLine(postData);
                request.Method = &quot;POST&quot;;
                byte[] byteArray = Encoding.UTF8.GetBytes(postData);
                // Set the ContentType property of the WebRequest.
                request.ContentType = &quot;application/x-www-form-urlencoded&quot;;
                // Set the ContentLength property of the WebRequest.
                request.ContentLength = byteArray.Length;
                // Get the request stream.
                Stream dataStream = request.GetRequestStream();
                // Write the data to the request stream.
                dataStream.Write(byteArray, 0, byteArray.Length);
                // Close the Stream object.
                dataStream.Close();

                WebResponse response = request.GetResponse();
                // Display the status.
                Console.WriteLine(((HttpWebResponse)response).StatusDescription);
                // Get the stream containing content returned by the server.
                dataStream = response.GetResponseStream();
                // Open the stream using a StreamReader for easy access.
                StreamReader reader = new StreamReader(dataStream);
                // Read the content.
                string responseFromServer = reader.ReadToEnd();
                // Display the content.
                Console.WriteLine(responseFromServer);
                // Clean up the streams.
                reader.Close();
                dataStream.Close();
                response.Close();
            }
            catch (Exception e)
                {
                    throw e;
                }

        }
    }
}
</pre>
<p>This is a great example of the cross-platform capabilities of Adhearsion that you get for free via REST. You do not have to be a Ruby-ist to take advantage of adding voice capabilities to your web applications. You may use virtually any language and platform that may consume web services.</p>
<p>We definitely appreciate it when our community takes the time to share their Adhearsion experiences with the rest of us. Thanks David, and for the rest of you the full example with his README is available <a href="http://github.com/jsgoecke/adhearsion_csharp_example/">here</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jsgoecke.wordpress.com/410/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jsgoecke.wordpress.com/410/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jsgoecke.wordpress.com/410/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jsgoecke.wordpress.com/410/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jsgoecke.wordpress.com/410/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jsgoecke.wordpress.com/410/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jsgoecke.wordpress.com/410/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jsgoecke.wordpress.com/410/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jsgoecke.wordpress.com/410/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jsgoecke.wordpress.com/410/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jsgoecke.wordpress.com/410/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jsgoecke.wordpress.com/410/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jsgoecke.wordpress.com/410/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jsgoecke.wordpress.com/410/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=410&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jsgoecke.wordpress.com/2009/06/08/using-c-net-to-invoke-the-adhearsion-api-via-rest/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4f295d5bdebbf607ad32f7ce5036aded?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jasongoecke</media:title>
		</media:content>
	</item>
		<item>
		<title>Mashing up Tripit with Adhearsion</title>
		<link>http://jsgoecke.wordpress.com/2009/05/21/mashing-up-tripit-with-adhearsion/</link>
		<comments>http://jsgoecke.wordpress.com/2009/05/21/mashing-up-tripit-with-adhearsion/#comments</comments>
		<pubDate>Fri, 22 May 2009 01:26:12 +0000</pubDate>
		<dc:creator>jasongoecke</dc:creator>
				<category><![CDATA[Adhearsion]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[VoIP]]></category>
		<category><![CDATA[mash up]]></category>
		<category><![CDATA[mashup]]></category>
		<category><![CDATA[tripit]]></category>

		<guid isPermaLink="false">http://jsgoecke.wordpress.com/?p=403</guid>
		<description><![CDATA[A friend of mine in Barcelona who travels frequently, and runs his own business, recently asked me if he could tie his Tripit location to his business phone routing. Even when he is traveling across the Atlantic, he must be able to provide telephone support to his clients but only based on a reasonable time [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=403&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://tripit.com"><img class="alignright size-full wp-image-405" title="Picture 3" src="http://jsgoecke.files.wordpress.com/2009/05/picture-31.png?w=298&#038;h=76" alt="Picture 3" width="298" height="76" /></a>A friend of mine in Barcelona who travels frequently, and runs his own business, recently asked me if he could tie his <a href="http://tripit.com" target="_blank">Tripit</a> location to his business phone routing. Even when he is traveling across the Atlantic, he must be able to provide telephone support to his clients but only based on a reasonable time in the timezone he is in.</p>
<p>Of course you could setup routing rules in your phone system each time you move to a new timezone, but good luck remembering to do this. Tripit now makes a <a href="http://www.tripit.com/uhp/helpFaq#bb0" target="_blank">blog badge</a> available that reports your current location based on city, state or country:</p>
<p><img class="aligncenter size-full wp-image-406" title="Picture 2" src="http://jsgoecke.files.wordpress.com/2009/05/picture-2.png?w=600&#038;h=227" alt="Picture 2" width="600" height="227" />My <a href="http://github.com/jsgoecke/tripit" target="_blank">Tripit Adhearsion Comonponent</a> on <a href="http://github.com" target="_blank">Github</a> allows you to mashup the details from your badge and use them in your <a href="http://docs.adhearsion.com/display/adhearsion/Dialplan" target="_blank">dialplan</a>. Now, you may add this component to your project and add something like this to your Adhearsion dialplan:</p>
<pre class="brush: ruby;">
adhearsion {
  user_time = tripit_user_time?('jdoe')
  if user_time
    ahn_log.tripit.debug user_time
  else
    ahn_log.tripit.debug 'Error'
  end
}
</pre>
<p>You may then use this information to decide whether to dial your mobile at your destination, or send it straight to voicemail. This is a great example of using Adhearsion to mashup data available on the web and use it to control your communications.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jsgoecke.wordpress.com/403/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jsgoecke.wordpress.com/403/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jsgoecke.wordpress.com/403/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jsgoecke.wordpress.com/403/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jsgoecke.wordpress.com/403/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jsgoecke.wordpress.com/403/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jsgoecke.wordpress.com/403/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jsgoecke.wordpress.com/403/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jsgoecke.wordpress.com/403/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jsgoecke.wordpress.com/403/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jsgoecke.wordpress.com/403/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jsgoecke.wordpress.com/403/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jsgoecke.wordpress.com/403/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jsgoecke.wordpress.com/403/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=403&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jsgoecke.wordpress.com/2009/05/21/mashing-up-tripit-with-adhearsion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4f295d5bdebbf607ad32f7ce5036aded?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jasongoecke</media:title>
		</media:content>

		<media:content url="http://jsgoecke.files.wordpress.com/2009/05/picture-31.png" medium="image">
			<media:title type="html">Picture 3</media:title>
		</media:content>

		<media:content url="http://jsgoecke.files.wordpress.com/2009/05/picture-2.png" medium="image">
			<media:title type="html">Picture 2</media:title>
		</media:content>
	</item>
		<item>
		<title>Early impressions of Skype for SIP (SfS)</title>
		<link>http://jsgoecke.wordpress.com/2009/04/08/early-impressions-of-skype-for-sip-sfs/</link>
		<comments>http://jsgoecke.wordpress.com/2009/04/08/early-impressions-of-skype-for-sip-sfs/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 16:26:17 +0000</pubDate>
		<dc:creator>jasongoecke</dc:creator>
				<category><![CDATA[Skype]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[counterpath]]></category>
		<category><![CDATA[pstn]]></category>
		<category><![CDATA[sfa]]></category>
		<category><![CDATA[sip]]></category>
		<category><![CDATA[skype]]></category>
		<category><![CDATA[skype for asterisk]]></category>
		<category><![CDATA[skype for sip]]></category>
		<category><![CDATA[skypein]]></category>
		<category><![CDATA[skypeout]]></category>
		<category><![CDATA[VoIP]]></category>
		<category><![CDATA[xlite]]></category>

		<guid isPermaLink="false">http://jsgoecke.wordpress.com/?p=387</guid>
		<description><![CDATA[The day has finally come, I have been able to place a SIP call directly to and from the Skype network via a Skype service. I received my Skype for SIP (SfS) closed beta credentials yesterday and immediately set to work configuring endpoints to start making calls. The first step was to use an XLite [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=387&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-388 alignright" title="125251152_618186f502" src="http://jsgoecke.files.wordpress.com/2009/04/125251152_618186f502.jpg?w=369&#038;h=276" alt="125251152_618186f502" width="369" height="276" />The day has finally come, I have been able to place a <a href="http://en.wikipedia.org/wiki/Session_initiation_protocol" target="_blank">SIP</a> call directly to and from the <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://skype.com">Skype</a> network via a Skype service. I received my <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://www.skype.com/business/form/sip-beta/" target="_blank">Skype for SIP (SfS) closed beta</a> credentials yesterday and immediately set to work configuring endpoints to start making calls.</p>
<p>The first step was to use an <a href="http://www.counterpath.com/x-lite.html" target="_blank">XLite Softphone</a> to connect to the Skype SIP proxy. Then I graduated to connecting an <a href="http://asterisk.org" target="_blank">Asterisk</a> server. While there were some initial issues, Skype worked with the beta testers and had all of the major elements working by the end of the first day. I am impressed by how few issues there actually are, but I guess that is to be expected since this service leverages the same infrastructure behind <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://www.skype.com/allfeatures/callphones/" target="_blank">SkypeOut</a> and <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://www.skype.com/allfeatures/onlinenumber/" target="_blank">SkypeIn</a>. Those services have been around for years and make up some of Skype&#8217;s core revenue generating business.</p>
<p>Here was what I was able to do so far:</p>
<ul>
<li>Asterisk/XLite -&gt; SIP -&gt; SkypeOut -&gt; <a href="http://en.wikipedia.org/wiki/Pstn" target="_blank">PSTN</a> (w/<a href="http://en.wikipedia.org/wiki/G.711" target="_blank">G711</a> codec)</li>
<li>PSTN -&gt; SkypeIn -&gt; SIP -&gt; Asterisk/XLite (w/<a href="http://en.wikipedia.org/wiki/G.729" target="_blank">G729</a> codec)</li>
<li>Skype User -&gt; SIP -&gt; Asterisk/XLite</li>
</ul>
<p><em>(Note: What I will not be able to try is &#8216;Asterisk/Xlite -&gt; SIP -&gt; Skype User&#8217; since this is intentionally blocked by Skype. I presume this is to protect their SkypeIn business by blocking the ability to create a competing alternative.)</em></p>
<p>If you have used the SkypeIn/SkypeOut services before, then you already know the quality of the calling. So far I have not had any issues with the call quality or dropped calls once the kinks were worked out.</p>
<p>While Skype is supporting the freely available G711 codec via its SIP gateways, it is dependent on what codecs are supported by the carrier that is being used to terminate a particular call. So while on SkypeOut I was able to use the G711 codec to terminate to numbers in the San Francisco Bay Area (415/650), on SkypeIn to a San Jose number (408) the only available codec was g729. So the reality is, you will need to have a SIP endpoint that supports the licensed G729 codec for reliable use.</p>
<p>The current calls are not encrypted. Skype has already stated they intend to support <a href="http://en.wikipedia.org/wiki/TLS" target="_blank">TLS</a>/<a href="http://en.wikipedia.org/wiki/Secure_Real-time_Transport_Protocol" target="_blank">SRTP</a> in the near future as encryption is considered a core feature for SIP as much as for their <a href="http://en.wikipedia.org/wiki/Peer-to-peer" target="_blank">P2P</a> calls.</p>
<p>As time permits I will be continuing to do more tests as well as contrasting with the <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://share.skype.com/sites/en/2008/09/skype_for_asterisk_beta.html" target="_blank">Skype for Asterisk (SfA)</a> beta software. Skype is definitely on the right track by opening their network to key standards with multiple interfacing options. I believe Skype is now poised to become a key global player in the business VoIP market, as well as bringing in a broader range of developers.</p>
<p>I began to think this day would never come, but it has&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jsgoecke.wordpress.com/387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jsgoecke.wordpress.com/387/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jsgoecke.wordpress.com/387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jsgoecke.wordpress.com/387/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jsgoecke.wordpress.com/387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jsgoecke.wordpress.com/387/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jsgoecke.wordpress.com/387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jsgoecke.wordpress.com/387/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jsgoecke.wordpress.com/387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jsgoecke.wordpress.com/387/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jsgoecke.wordpress.com/387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jsgoecke.wordpress.com/387/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jsgoecke.wordpress.com/387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jsgoecke.wordpress.com/387/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=387&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jsgoecke.wordpress.com/2009/04/08/early-impressions-of-skype-for-sip-sfs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4f295d5bdebbf607ad32f7ce5036aded?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jasongoecke</media:title>
		</media:content>

		<media:content url="http://jsgoecke.files.wordpress.com/2009/04/125251152_618186f502.jpg" medium="image">
			<media:title type="html">125251152_618186f502</media:title>
		</media:content>
	</item>
		<item>
		<title>Adhearsion Website and Sandbox Migration Complete</title>
		<link>http://jsgoecke.wordpress.com/2009/04/07/adhearsion-website-and-sandbox-migration-complete/</link>
		<comments>http://jsgoecke.wordpress.com/2009/04/07/adhearsion-website-and-sandbox-migration-complete/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 14:41:38 +0000</pubDate>
		<dc:creator>jasongoecke</dc:creator>
				<category><![CDATA[Adhearsion]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[VoIP]]></category>
		<category><![CDATA[amazon web services]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[ebs]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[s3]]></category>
		<category><![CDATA[sandbox]]></category>
		<category><![CDATA[tropo]]></category>
		<category><![CDATA[voxeo]]></category>

		<guid isPermaLink="false">http://jsgoecke.wordpress.com/?p=380</guid>
		<description><![CDATA[Over the last week we have been working to migrate various Adhearsion services to new homes. This could not have come a moment too soon, as during the migration one of the hard drives in our server in Texas gave up the ghost. Of course we used RAID, so we did not miss a beat, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=380&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-381" title="sandbox1" src="http://jsgoecke.files.wordpress.com/2009/04/sandbox1.gif?w=194&#038;h=195" alt="sandbox1" width="194" height="195" />Over the last week we have been working to migrate various <a href="http://adhearsion.com" target="_blank">Adhearsion</a> services to new homes. This could not have come a moment too soon, as during the migration one of the hard drives in our server in Texas gave up the ghost. Of course we used <a href="http://en.wikipedia.org/wiki/RAID" target="_blank">RAID</a>, so we did not miss a beat, but clearly it was time to move along.</p>
<p>To this end we have now migrated the Adhearsion <a href="http://adhearsion.com" target="_blank">website</a>, <a href="http://docs.adhearsion.com" target="_blank">wiki</a> and <a href="http://api.adhearsion.com" target="_blank">API docs</a> to <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://aws.amazon.com/ec2/" target="_blank">Amazon EC2</a>. Leveraging <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://aws.amazon.com/s3/" target="_blank">S3</a> and <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://aws.amazon.com/ebs/" target="_blank">EBS</a> we have a great solution that allows us to quickly fire up more servers if and when needed. The cloud is great.</p>
<p>We have also moved the <a href="http://adhearsion.com/getting_started" target="_blank">Sandbox</a> to a new hosted server. <a href="http://www.voxeo.com"><img class="alignleft" title="Voxeo" src="http://www.voxeo.com/images/top/logo.gif" alt="" width="183" height="43" /></a>Our friends at <a href="http://voxeo.com" target="_blank">Voxeo</a> have provided a great server for us and are now sponsoring the Adhearsion Sandbox. It is great to have a <a href="http://tropo.com/" target="_blank">visionary</a> leader in the telephony cloud space involved with the Adhearsion community.</p>
<p>I would like to take this opportunity to remind folks what the Adhearsion Sandbox provides. We have provided a hosted system that takes away the need to install your own Asterisk to get started developing Adhearsion applications. Simply install Adhearsion, <a href="http://adhearsion.com/getting_started" target="_blank">sign-up for a Sandbox account</a> and get started writing apps. Our goal is to lower all the barriers to make it easy for developers to realize the possibilities of voice in modern web development.</p>
<p>Enjoy the new servers!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jsgoecke.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jsgoecke.wordpress.com/380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jsgoecke.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jsgoecke.wordpress.com/380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jsgoecke.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jsgoecke.wordpress.com/380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jsgoecke.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jsgoecke.wordpress.com/380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jsgoecke.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jsgoecke.wordpress.com/380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jsgoecke.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jsgoecke.wordpress.com/380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jsgoecke.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jsgoecke.wordpress.com/380/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=380&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jsgoecke.wordpress.com/2009/04/07/adhearsion-website-and-sandbox-migration-complete/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4f295d5bdebbf607ad32f7ce5036aded?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jasongoecke</media:title>
		</media:content>

		<media:content url="http://jsgoecke.files.wordpress.com/2009/04/sandbox1.gif" medium="image">
			<media:title type="html">sandbox1</media:title>
		</media:content>

		<media:content url="http://www.voxeo.com/images/top/logo.gif" medium="image">
			<media:title type="html">Voxeo</media:title>
		</media:content>
	</item>
		<item>
		<title>Click to Call on stage with Sinatra, Rack and Passenger</title>
		<link>http://jsgoecke.wordpress.com/2009/04/03/click-to-call-onstage-with-sinatra-rack-and-passenger/</link>
		<comments>http://jsgoecke.wordpress.com/2009/04/03/click-to-call-onstage-with-sinatra-rack-and-passenger/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 20:41:11 +0000</pubDate>
		<dc:creator>jasongoecke</dc:creator>
				<category><![CDATA[Adhearsion]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[VoIP]]></category>
		<category><![CDATA[ami]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[click to call]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[rack]]></category>
		<category><![CDATA[sinatra]]></category>

		<guid isPermaLink="false">http://jsgoecke.wordpress.com/?p=371</guid>
		<description><![CDATA[I have been preparing an Amazon Machine Image (AMI) with Adhearsion, Asterisk and all of the available components installed and pre-configured to be made public soon. For the AMI I decided to get the Sinatra web app included with the Click To Call component up and running as a daemon. I used a combination of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=371&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have been preparing an <a href="http://developer.amazonwebservices.com/connect/kbcategory.jspa?categoryID=171" target="_blank">Amazon Machine Image (AMI)</a> with Adhearsion, Asterisk and all of the available components installed and pre-configur<img class="alignright" src="http://www.modrails.com/images/site_body_eyecatcher_bg.png" alt="" width="327" height="145" />ed to be made public soon. For the AMI I decided to get the <a href="http://www.sinatrarb.com/" target="_blank">Sinatra</a> web app included with the <a href="http://github.com/jsgoecke/restful_clicktocall" target="_blank">Click To Call</a> component up and running as a <a href="http://en.wikipedia.org/wiki/Daemon_(computer_software)" target="_blank">daemon</a>.</p>
<p>I used a combination of <a href="http://rack.rubyforge.org/" target="_blank">Rack</a> and <a href="http://www.modrails.com/" target="_blank">Passenger</a>, since they make the process so easy and production ready. To this end I have updated the README and Click To Call component I covered in my <a href="http://blog.goecke.net/2009/02/03/restful-click-to-call-with-adhearsion/" target="_blank">previous blog post</a> to include the how to and Rack configuration file required.</p>
<p>To get this up and running do the following:</p>
<ul>
<li>Install the Apache Webserver</li>
<li>sudo gem install rack</li>
<li>sudo gem install passenger (follow instructions <a href="//www.modrails.com/install.html" target="_blank">here</a> for compiling the Apache module)</li>
</ul>
<p>Copy the files and directories in ~ahn-project/components/restful_clicktocall/web directory to the appropriate file system location for your Apache web server. Add these virtual host settings to your Apache configuration (ie &#8211; /etc/httpd/conf/httpd.conf):</p>
<pre class="brush: php;">
&lt;VirtualHost *:80&gt;
  ServerName ec2-174-129-89-20.compute-1.amazonaws.com
  DocumentRoot /var/www/restful_clicktocall_web/public
&lt;/VirtualHost&gt;
</pre>
<p>Change line three to reflect your configuration. Restart your Apache web server and then connect to the site you configured. For more options I recommend referring to the Passenger documentation found <a href="http://www.modrails.com/documentation/Users%20guide.html" target="_blank">here</a>.</p>
<p>Stay tuned for the upcoming Amazon Machine Image!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jsgoecke.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jsgoecke.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jsgoecke.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jsgoecke.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jsgoecke.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jsgoecke.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jsgoecke.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jsgoecke.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jsgoecke.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jsgoecke.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jsgoecke.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jsgoecke.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jsgoecke.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jsgoecke.wordpress.com/371/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=371&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jsgoecke.wordpress.com/2009/04/03/click-to-call-onstage-with-sinatra-rack-and-passenger/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4f295d5bdebbf607ad32f7ce5036aded?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jasongoecke</media:title>
		</media:content>

		<media:content url="http://www.modrails.com/images/site_body_eyecatcher_bg.png" medium="image" />
	</item>
		<item>
		<title>Skype Rates and Least Cost Routing</title>
		<link>http://jsgoecke.wordpress.com/2009/04/01/skype-rates-and-least-cost-routing/</link>
		<comments>http://jsgoecke.wordpress.com/2009/04/01/skype-rates-and-least-cost-routing/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 19:27:01 +0000</pubDate>
		<dc:creator>jasongoecke</dc:creator>
				<category><![CDATA[Adhearsion]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Skype]]></category>
		<category><![CDATA[VoIP]]></category>
		<category><![CDATA[lcr]]></category>
		<category><![CDATA[least cost routing]]></category>
		<category><![CDATA[sfa]]></category>
		<category><![CDATA[sfs]]></category>
		<category><![CDATA[skype for asterisk]]></category>
		<category><![CDATA[skype for sip]]></category>

		<guid isPermaLink="false">http://jsgoecke.wordpress.com/?p=359</guid>
		<description><![CDATA[Now that Skype is coming to the enterprise with Skype for Asterisk and Skype for SIP, they will need to enhance the data available for their calling rates. Enabling Least Cost Routing (LCR) is a must for any VoIP provider to the enterprise. LCR allows a phone system to determine, on a call by call [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=359&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Now that Skype is coming to the enterprise with <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://share.skype.com/sites/en/2008/09/skype_for_asterisk_beta.html" target="_blank">Skype for Asterisk</a> and <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://www.skype.com/business/form/sip-beta/" target="_blank">Skype for SIP</a>, they will need to enhance the data available for their <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://www.skype.com/prices/callrates/#allRatesTab" target="_blank">calling rates</a>. Enabling <a href="http://en.wikipedia.org/wiki/Least_cost_routing" target="_blank">Least Cost Routing (LCR)</a> is a must for any <a href="http://en.wikipedia.org/wiki/Voip" target="_blank">VoIP</a> provider to the enterprise. LCR allows a phone system to determine, on a call by call basis, which VoIP provider to use based on the best rates associated to the country code or prefix being dialed.</p>
<p>As of now Skype <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://www.skype.com/prices/callrates/#allRatesTab" target="_blank">publishes a web page</a> of calling rates based on the country name and the per minute rate including or excluding the tax. A few additional items are needed to make this usable for LCR systems:</p>
<ul>
<li>The associated country code for each country (ie &#8211; &#8217;34&#8242; for Spain, &#8217;1&#8242; for the US, etc)</li>
<li>More granular prefixes where calling rates may differ (ie &#8211; &#8217;346&#8242; for Spanish mobiles, &#8217;336&#8242; for Frech mobiles, &#8217;1212&#8242; for NYC, &#8217;1712&#8242; for Iowa, etc)</li>
<li>Billing intervals</li>
<li>A file download in <a href="http://en.wikipedia.org/wiki/Comma-separated_values" target="_blank">CSV</a>, or similar format, for import into LCR systems</li>
</ul>
<p>Of course, in the meantime it is easy enough to scrape the website and convert the available data into a more appropriate format. Here is an example, in <a href="http://www.ruby-lang.org" target="_blank">Ruby</a>, of how this may be done in a trivial way:</p>
<pre class="brush: ruby;">
require 'rubygems'
require 'open-uri'
require 'nokogiri'
require 'json'

skype_rates = Hash.new
skype_url = 'http://www.skype.com/prices/callrates/#allRatesTab'
skype_htmldoc = Nokogiri::Hpricot(open(skype_url).read)
(skype_htmldoc/'table.listing//tr.r1').each do |country|
  country_name = country.at('td').inner_html
  skype_rates.merge!({ country_name =&gt; { 'amount' =&gt; country.at('span.amount').inner_html.split('&lt;!')[0].gsub('$ ', '').to_f,
                                         'vat' =&gt; country.at('span.vat').inner_html.split('&lt;!')[0].gsub('$ ', '').to_f } })
end

p skype_rates.to_json
</pre>
<p>Which produces <a href='http://en.wikipedia.org/wiki/Json'>JSON</a> output as follows:</p>
<pre class="brush: jscript;">
{
  &quot;Bolivia-La Paz&quot;: {
     &quot;amount&quot;:0.122,
     &quot;vat&quot;:0.14
  },
  &quot;Sweden - Mobile&quot;: {
     &quot;amount&quot;:0.292,
     &quot;vat&quot;:0.336
  },
  &quot;Hong Kong&quot;: {
     &quot;amount&quot;:0.021,
     &quot;vat&quot;:0.024
  }
}
</pre>
<p>You may then perform a <a href="http://en.wikipedia.org/wiki/Regex" target="_blank">Regular Expression</a> against another data source to derive the appropriate country codes/prefixes and store those in your LCR system. A good example of the additional detail needed is provided by <a href='http://www.flowroute.com/services/rates/'>Flowroute</a>.</p>
<p>I have on my list of actions to create an <a href='http://adhearsion.com'>Adhearsion</a> component to provide LCR capabilities for any Adhearsion application. The plan is to support a wide number of VoIP providers and other data inputs as a part of this plug-in.</p>
<p>In the meantime, it will be interesting to see how Skype goes about publishing their rates with additional details and formats for download.</p>
<p><b>UPDATE</b> <a href='http://twitter.com/JimCanuck'>@JimCanuck</a> points out it is not just about least cost, but also about quality of termination. Skype has some interesting approaches to call quality. More <a href='http://voiceontheweb.biz/2007/05/skypeout-vsnl-and-climbing-the-call-quality-improvement-ladder/'>here</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jsgoecke.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jsgoecke.wordpress.com/359/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jsgoecke.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jsgoecke.wordpress.com/359/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jsgoecke.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jsgoecke.wordpress.com/359/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jsgoecke.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jsgoecke.wordpress.com/359/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jsgoecke.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jsgoecke.wordpress.com/359/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jsgoecke.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jsgoecke.wordpress.com/359/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jsgoecke.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jsgoecke.wordpress.com/359/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=359&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jsgoecke.wordpress.com/2009/04/01/skype-rates-and-least-cost-routing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4f295d5bdebbf607ad32f7ce5036aded?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jasongoecke</media:title>
		</media:content>
	</item>
		<item>
		<title>Writing Voice Apps in the Clouds with COBOL</title>
		<link>http://jsgoecke.wordpress.com/2009/04/01/writing-voice-apps-in-the-clouds-with-cobol/</link>
		<comments>http://jsgoecke.wordpress.com/2009/04/01/writing-voice-apps-in-the-clouds-with-cobol/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 14:12:04 +0000</pubDate>
		<dc:creator>jasongoecke</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[VoIP]]></category>
		<category><![CDATA[cobol]]></category>
		<category><![CDATA[tropo]]></category>
		<category><![CDATA[tropo.com]]></category>
		<category><![CDATA[voice apps]]></category>
		<category><![CDATA[voxeo]]></category>

		<guid isPermaLink="false">http://jsgoecke.wordpress.com/?p=344</guid>
		<description><![CDATA[Following on the heels of Voxeo&#8217;s announcement of support for COBOL in their recently released Tropo.com platform, I have put together a script showing how to use this great new feature. Finally, I may use the language that first introduced me to the wonders of computer programming to develop voice apps in the clouds. The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=344&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Following on the heels of <a href='http://blogs.voxeo.com/tropo/?p=46'>Voxeo&#8217;s announcement</a> <a href="http://en.wikipedia.org/wiki/Grace_Hopper" target="_blank"><img class="alignright size-full wp-image-345" title="h96920k" src="http://jsgoecke.files.wordpress.com/2009/03/h96920k.jpg?w=245&#038;h=318" alt="h96920k" width="245" height="318" /></a>of support for <a href="http://en.wikipedia.org/wiki/COBOL" target="_blank">COBOL</a> in their recently released <a href="http://tropo.com" target="_blank">Tropo.com</a> platform, I have put together a script showing how to use this great new feature. Finally, I may use the language that first introduced me to the wonders of computer programming to develop voice apps in the clouds.</p>
<p>The first application I participated in writing was a <a href="http://en.wikipedia.org/wiki/Computer_telephony_integration" target="_blank">Computer Telephony Integration</a> system using COBOL on <a href="http://en.wikipedia.org/wiki/HP_3000" target="_blank">HP3000s</a>. This system is still alive and well today and now may be adapted to take advantage of all the clouds have to offer.  Considering the codebase has not been touched since 1999, and then only for refactoring, this is a tremendous leap forward.</p>
<p>Here is an example to get you started, I will be posting to GitHub shortly:</p>
<pre class="brush: delphi;">
      $ SET SOURCEFORMAT&quot;FREE&quot;
IDENTIFICATION DIVISION.
PROGRAM-ID.  CallingGrace.
AUTHOR.  Jason Goecke.
&lt;ul&gt;
  &lt;li&gt;Demonstrates the use of Tropo.com&lt;/li&gt;
&lt;li&gt;for writing voice applications from&lt;/li&gt;
&lt;li&gt;all the world's systems that use&lt;/li&gt;
&lt;li&gt;COBOL in the clouds.&lt;/li&gt;
&lt;/ul&gt;

DATA DIVISION.
WORKING-STORAGE SECTION.
01 MenuStr             PIC X(99)      VALUE &quot;Please tell us what you would like to know about Grace Hopper.&quot;.
01 RetryCntr           PIC 9          VALUE ZEROS.
01 MenuOptions         PIC X(99)      VALUE &quot;war('Where did Grace work?'), bug('Where is that moth?')&quot;.
01 MenuResult          PIC X(99)      VALUE &quot;&quot;.
01 SayGoodbye          PIC X(99)      VALUE &quot;Thank you for calling, goodbye.&quot;.
01 PleaseTryAgain      PIC X(99)      VALUE &quot;Invalid choice, please try again.&quot;
01 WarDeptPhone	       PIC 9999999999 VALUE 7035456700.
01 SmithsonianBugs     PIC 9999999999 VALUE 2026331000.

LINKAGE SECTION
01 TROPO-PROCEDURES

PROCEDURE DIVISION USING TROPO-PROCEDURES.
000-MAINLINE.
    CALL 'ANSWER'.
    PERFORM UNTIL RetryCntr = 3
       MenuResult = CALL 'ASK' USING MenuStr
                                     MenuOptions.
       IF MenuResult ALPHABETIC
         PERFORM 200-CALL-DESTINATION.
		 RetryCntr = 3.
       ELSE
         CALL 'SAY' USING PleaseTryAgain.
         ADD 1 TO RetryCntr.
    END-PERFORM.

    GO TO 300-EXIT.

200-CALL-DESTINATION.
    IF MenuResult EQUAL 'war'
      CALL 'TRANSFER' USING WarDeptPhone.

	IF MenuResult EQUAL 'bug'
	  CALL 'TRANSFER' USING .

300-EXIT.
	CALL 'SAY' USING SayGoodbye.
	CALL 'HANGUP'.
	STOP RUN.
</pre>
<p>It is a fact, there are more lines of COBOL in use in the world today than any other single computer programming language. I applaud the visionary leadership behind Tropo.com siezing this giant opportunity to bring voice from the clouds to all of those systems out there.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jsgoecke.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jsgoecke.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jsgoecke.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jsgoecke.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jsgoecke.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jsgoecke.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jsgoecke.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jsgoecke.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jsgoecke.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jsgoecke.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jsgoecke.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jsgoecke.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jsgoecke.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jsgoecke.wordpress.com/344/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jsgoecke.wordpress.com&amp;blog=3974561&amp;post=344&amp;subd=jsgoecke&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jsgoecke.wordpress.com/2009/04/01/writing-voice-apps-in-the-clouds-with-cobol/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4f295d5bdebbf607ad32f7ce5036aded?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jasongoecke</media:title>
		</media:content>

		<media:content url="http://jsgoecke.files.wordpress.com/2009/03/h96920k.jpg" medium="image">
			<media:title type="html">h96920k</media:title>
		</media:content>
	</item>
	</channel>
</rss>
