<?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/"
	>

<channel>
	<title>The Nir Simionovich blog &#187; php</title>
	<atom:link href="http://www.simionovich.com/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.simionovich.com</link>
	<description>The rants and raves of a technogeek</description>
	<lastBuildDate>Thu, 03 Jan 2013 00:26:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Asterisk AGI Programming &#8211; New Book</title>
		<link>http://www.simionovich.com/2009/02/18/asterisk-agi-programming-new-book/</link>
		<comments>http://www.simionovich.com/2009/02/18/asterisk-agi-programming-new-book/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 23:08:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AGI]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[technnology]]></category>
		<category><![CDATA[Asterisk Book]]></category>
		<category><![CDATA[Asterisk Developers]]></category>
		<category><![CDATA[Book]]></category>
		<category><![CDATA[Packt Publishing]]></category>
		<category><![CDATA[PHPAGI]]></category>

		<guid isPermaLink="false">http://www.simionovich.com/?p=254</guid>
		<description><![CDATA[Well, it&#8217;s finally out &#8211; my new book that is Some of you already know, but over the past year I&#8217;ve been busy writing a new book. This time it&#8217;s a book for Asterisk developers, especially tailored to PHP developers wishing to utilizing the PHPAGI framework. The book is out from Packt Publishing (Like my]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.simionovich.com%2F2009%2F02%2F18%2Fasterisk-agi-programming-new-book%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.simionovich.com%2F2009%2F02%2F18%2Fasterisk-agi-programming-new-book%2F&amp;source=nirsimionovich&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Well, it&#8217;s finally out &#8211; my new book that is <img src='http://www.simionovich.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Some of you already know, but over the past year I&#8217;ve been busy writing a new book. This time it&#8217;s a book for Asterisk developers, especially tailored to PHP developers wishing to utilizing the PHPAGI framework. The book is out from Packt Publishing (Like my old AsteriskNOW book) and is updated with all the recent changes in Asterisk &#8211; including version 1.6.X and DAHDI.</p>
<div class="wp-caption aligncenter" style="width: 550px"><a href="http://www.packtpub.com/asterisk-gateway-interface-programming/book"><img title="Asterisk Developers Book" src="http://images.packtpub.com/images/full/184719446X.jpg" alt="Asterisk Developers Book" width="540" height="666" /></a><p class="wp-caption-text">Asterisk Developers Book</p></div>
<p>If you like my work with Asterisk and would like to read more of my work, go ahead and get an electronic version of this book. I know it&#8217;s a little self promoting, by hey, it never hurts does it?</p>
<p>I&#8217;ve included a chapter on how to build a complete project from scratch, detailing the various analysis steps and various paradigms required to develop a fully functional Asterisk based application. I believe that even experienced Asterisk developers will benefit from this book.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simionovich.com/2009/02/18/asterisk-agi-programming-new-book/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts of virtualization &#8211; Part III</title>
		<link>http://www.simionovich.com/2009/01/21/thoughts-of-virtualization-part-iii/</link>
		<comments>http://www.simionovich.com/2009/01/21/thoughts-of-virtualization-part-iii/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 18:25:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AGI]]></category>
		<category><![CDATA[Amazon EC2]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[technnology]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Cloud computing]]></category>
		<category><![CDATA[dialer]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[VMWARE]]></category>

		<guid isPermaLink="false">http://www.simionovich.com/?p=201</guid>
		<description><![CDATA[Ok, it&#8217;s been almost 24 hours since I started my serious playing around with Amazon EC2, and I can honestly say that I&#8217;m tired &#8211; however, I&#8217;m very pleased with my results. Like any other experiment, this one started with a requirement. The requirement was to install and operate one of the dialer frameworks I&#8217;ve]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.simionovich.com%2F2009%2F01%2F21%2Fthoughts-of-virtualization-part-iii%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.simionovich.com%2F2009%2F01%2F21%2Fthoughts-of-virtualization-part-iii%2F&amp;source=nirsimionovich&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Ok, it&#8217;s been almost 24 hours since I started my serious playing around with Amazon EC2, and I can honestly say that I&#8217;m tired &#8211; however, I&#8217;m very pleased with my results. Like any other experiment, this one started with a requirement. The requirement was to install and operate one of the dialer frameworks I&#8217;ve written in the past year on an EC2 based instance. In order to evaluate the process, let&#8217;s start with our baseline installation, meaning, what am I using in the real-world:</p>
<p><strong>Hardware and Software Specification</strong></p>
<p>The original machine answered to the following specification: Quad Core CPU, 2GB of RAM, 250GB of Hard Drive. My original machine was running CentOS 5.2 with an x86_64 kernel installed. In terms of software installed, we had Asterisk 1.4.22.1, MySQL 5.X, PHP, FreePBX, Apache and my dialer framework.</p>
<h1><strong>Introducing Amazon EC2 AMI<br />
</strong></h1>
<p>An EC2 AMI is basically an image of a computer, contained with a single installation manifest on the Amazon cloud computing system. AMI&#8217;s provide for the simplest manner to start using EC2, as these usually include a pre-defined server installation, that usually has some stuff already installed.</p>
<h2>Choosing your AMI</h2>
<p>Amazon provides a multitude of AMI&#8217;s to work with, unfortunately, most of these are either out-dated and the sheer number of these makes the choice somewhat overwhelming. I decided to start working with a working AMI image of Fedora Core 8, that already had the LAMP stack installed &#8211; the one I used was:</p>
<div class="cell_liner"><img src="https://console.aws.amazon.com/images/logo_fedora.gif" alt="LAMP Web Starter" /></div>
<div class="cell_liner"><strong>LAMP Web Starter</strong> (AMI ID: ami-ba4eaad3)<br />
<span class="ami_description">Fedora Core 8, 32-bit architecture, PHP 5.0.4, Apache 2.0.54, and MySQL 4.1.20</span></div>
<h2>The YUM Repository issue</h2>
<p>For some strange reason, the AMI images contained in the Amazon repository are all unable to perform any updates to their installed RPM packages. It took me a while to understand what&#8217;s wrong, but in general, the fedora project had simply removed the old releases from their repository, so I had to go in and manually modify the /etc/yum.repos.d/ configuration files. For you convenience, here is the repos list that I&#8217;m using at this point:</p>
<p><a href="http://www.simionovich.com/wp-content/uploads/2009/01/repos.conf">YUM Repositories for Amazon EC2 Fedora images</a> &lt;- click this to download the file</p>
<pre>[development]
name=Fedora Core $releasever - Development Tree
baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/development/$basearch/
enabled=1
gpgcheck=0</pre>
<pre>[extras-development]
name=Fedora Extras $releasever - Development Tree
baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/extras/development/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-extras
gpgcheck=0</pre>
<pre>[extras]
name=Fedora Extras $releasever - $basearch
baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/extras/$releasever/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-extras
gpgcheck=1</pre>
<pre>[updates-testing]
name=Fedora Core $releasever - $basearch - Test Updates
baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/updates/testing/$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-test</pre>
<pre>[updates-released]
name=Fedora Core $releasever - $basearch - Released Updates
baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/updates/$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora</pre>
<pre>[base]
name=Fedora Core $releasever - $basearch - Base
baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/$releasever/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora</pre>
<p>If you are trying to install an instance, you may use the above for any Fedora based AMI on EC2.</p>
<h2>Creating my own AMI</h2>
<p>While going about and building a single server is fun, I needed a way to create my own installation AMI once I&#8217;ve completed my modifications. The Amazon EC2 resources website gives out a whole lot of information, which can be somewhat confusing for the first time reader. So, I searched for a better way to construct my own AMI image. I found the following web page, which was really really helpful: <a class="wp-caption" title="Azeez's Notes blog" href="http://afkham.org/2008/10/how-to-create-ec2-ami.html" target="_blank">Azeez&#8217;s Notes</a>.</p>
<p>Azeez&#8217;s blog gives a very concise and to the point, step by step, guide to building your own AMI image &#8211; it got me up and running in less than 10 minute &#8211; WAY TO GO AZEEZ.</p>
<h2>So far, so good &#8230;</h2>
<p>So far my installed instances are working just fine and I&#8217;m currently operating a cluster of a few of these dialer systems. I&#8217;m in the process of checking what kind of mileage I&#8217;ll get from the EC2 instances, in comparison to a real hardware server &#8211; which is really interesting.</p>
<p>My main objective here is to be able to build a dialer-on-demand framework, which will enable my customers to increase their capacity utilizing a simple web interface to initiate my AMI instances. I&#8217;ll report back with additional information once I have it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simionovich.com/2009/01/21/thoughts-of-virtualization-part-iii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A2Billing+Apache vs. A2Billing+Lighttpd</title>
		<link>http://www.simionovich.com/2008/10/14/a2billingapache-vs-a2billinglighttpd/</link>
		<comments>http://www.simionovich.com/2008/10/14/a2billingapache-vs-a2billinglighttpd/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 04:51:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AGI]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[technnology]]></category>
		<category><![CDATA[A2Billing]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Authentication]]></category>
		<category><![CDATA[Authorization]]></category>
		<category><![CDATA[errord]]></category>
		<category><![CDATA[FreePBX]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[Lighttpd]]></category>
		<category><![CDATA[memory]]></category>

		<guid isPermaLink="false">http://www.simionovich.com/?p=108</guid>
		<description><![CDATA[Ok, it goes without saying: &#8220;A2Billing is one of the most complete Calling Card systems in the Asterisk market today.&#8221; &#8211; on the other hand, it is also true that: &#8220;A2Billing is one of the most complex and convoluted pieces of code ever written!&#8221;. The combination of the above makes for a fairly combustible mixture,]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F10%2F14%2Fa2billingapache-vs-a2billinglighttpd%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F10%2F14%2Fa2billingapache-vs-a2billinglighttpd%2F&amp;source=nirsimionovich&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Ok, it goes without saying: &#8220;A2Billing is one of the most complete Calling Card systems in the Asterisk market today.&#8221; &#8211; on the other hand, it is also true that: &#8220;A2Billing is one of the most complex and convoluted pieces of code ever written!&#8221;.</p>
<p>The combination of the above makes for a fairly combustible mixture, especially if you have a big system. Now, I recently ran into an issue, where PHP was litterally eating up almost 512MB of ram, in order to run the A2Billing reports. In it self, that didn&#8217;t make much sense to me. However, after inspecting the code, and realizing that A2Billing uses GD in run-time to generate images out of thousands of CDR records, it made perfect sense that it may just be eating up memory.</p>
<p>So, increasing the memory on PHP to go up to 512MB of RAM helps, but creates an interesting probelm. Whenever Apache will invoke a script, it will automatically consume a shitload of RAM, and for each time I intiate a new query, it will spawn a new Apache instance, and consume the same amount of memory. That said, after 6 queries of 512MB, about 50% of the machines RAM was already eaten up &#8211; and Apache will not free it!</p>
<p>At this point, I had 2 choices:</p>
<ol>
<li>Go into the A2Billing code, change the GD code to work right or simply change it completely to something else (maybe flash).</li>
<li>Work around the problem with a mix of proper IT practices.</li>
</ol>
<p>I admit that I hate quite a lot of things (I won&#8217;t list these here); however; nothing ranks up the list as modifying someone elses code, when I know for fact that it will be unmaintainable in the future. So, I choose option number 2.</p>
<p>I&#8217;ve being playing alot with Lighttpd lately, and got some really nice performance from it. So, I said to myself, this would be a great test to see if Lighttpd+FastCGI can solve the problem here. I had to work my way around lighttpd to do what I wanted and verify that my FastCGI server in Lighttpd doesn&#8217;t consume all memory, however, here is what I got working with A2Billing, and really nice.</p>
<p>Step 1: Enable the required modules:</p>
<pre>server.modules              = (</pre>
<pre>                               "mod_access",</pre>
<pre>                               "mod_auth",</pre>
<pre>                               "mod_status",</pre>
<pre>                               "mod_fastcgi",</pre>
<pre>                               "mod_accesslog" )</pre>
<p>Step 2: Enable the FastCGI Server</p>
<pre>fastcgi.server             = ( ".php" =&gt;</pre>
<pre>                               ( "localhost" =&gt;</pre>
<pre>                                 (</pre>
<pre>                                   "socket" =&gt; "/var/run/lighttpd/php-fastcgi.socket",</pre>
<pre>                                   "bin-path" =&gt; "/usr/bin/php-cgi",</pre>
<pre>                                   "idle-timeout" =&gt; 30,</pre>
<pre>                                   "max-procs" =&gt; 1,</pre>
<pre>                                   "min-procs" =&gt; 1</pre>
<pre>                                 )</pre>
<pre>                               )</pre>
<pre>                            )</pre>
<p>Step 3: Modify user permissions (required if you are using FreePBX)</p>
<pre>server.username            = "asterisk"</pre>
<pre>server.groupname           = "asterisk"</pre>
<p>Step 4: Setup authentication and authorization (optional)</p>
<pre>#### auth module</pre>
<pre>## read authentication.txt for more info</pre>
<pre>auth.backend               = "htpasswd"</pre>
<pre>auth.backend.htpasswd.userfile = "/var/www/.htpasswd"</pre>
<pre>auth.require               = ( "/" =&gt;</pre>
<pre>                               (</pre>
<pre>                                 "method"  =&gt; "basic",</pre>
<pre>                                 "realm"   =&gt; "A2Billing Management",</pre>
<pre>                                 "require" =&gt; "valid-user"</pre>
<pre>                               )</pre>
<pre>                             )</pre>
<p>The above configuration made the interface spwan a single FastCGI, insuring that memory usage is never over utilized. I still need 512MB of RAM to run the scripts, but at least now it&#8217;s limited to only 512MB of RAM, out of a machine that has 16GB of RAM.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simionovich.com/2008/10/14/a2billingapache-vs-a2billinglighttpd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>We&#8217;re melting, we&#8217;re melting&#8230;</title>
		<link>http://www.simionovich.com/2008/10/11/were-melting-were-melting/</link>
		<comments>http://www.simionovich.com/2008/10/11/were-melting-were-melting/#comments</comments>
		<pubDate>Sat, 11 Oct 2008 16:37:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[technnology]]></category>
		<category><![CDATA[danny windham]]></category>
		<category><![CDATA[digium]]></category>
		<category><![CDATA[economy]]></category>
		<category><![CDATA[ESX]]></category>
		<category><![CDATA[meltdown]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[NASDAQ]]></category>
		<category><![CDATA[Proprietary]]></category>
		<category><![CDATA[VMWARE]]></category>

		<guid isPermaLink="false">http://www.simionovich.com/?p=103</guid>
		<description><![CDATA[I&#8217;m not much of an economist. I understand income and expenses, I understand more or less how the stock market works from time to time, but I&#8217;m no economist. I&#8217;ve been in the hi-tech industry since early 1997, which means, that I&#8217;ve seen this world being elevated to the level of godly hood, buried alive]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F10%2F11%2Fwere-melting-were-melting%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F10%2F11%2Fwere-melting-were-melting%2F&amp;source=nirsimionovich&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;m not much of an economist. I understand income and expenses, I understand more or less how the stock market works from time to time, but I&#8217;m no economist. I&#8217;ve been in the hi-tech industry since early 1997, which means, that I&#8217;ve seen this world being elevated to the level of godly hood, buried alive with the explosion of the dot.boom era, only to re-invent itself as a highly competitive telecom&#8217;s industry and the &#8220;Network is the Computer&#8221; manner of thinking.</p>
<p>About 2 weeks ago, a man I truely admire had written a post entitled: <a href="http://blogs.digium.com/2008/10/01/economic-meltdown-%e2%80%93-friend-or-foe-of-open-source/" target="_blank">Economic Meltdown &#8211; Friend or Foe of Open Source?</a> (written by Danny Windham, CEO of Digium). Danny talks about the various aspects of companies cutting down on their IT budgets and reversion to Open Source technologies, as a means to hedge needed cash. As I witnessed the Dot.Boom explosion of 2001, I can honestly say that 2001, at least as far as I can say, was the year that Open Source technologies had truly assimilated to the normal business practice of companies. Even beyond that, companies which were not based on Open Source and Linux/Unix based technologies were clearly not a valid option for investors.</p>
<p>One of the urban legends talks about Hotmail wishing to acquire an Israeli company called Commtouch, back then, a webmail company. Commtouch was purely based on Windows NT technologies back then, and while the business track of the negotiations were going fine, the deal collapsed as the technical sides, of a back then BSD based Hotmail, basically negated the deal. Now, I have no idea if the story is true or not, again, this is an urban myth, however, I believe myths are usually based on some portion of the truth - at least to an extent (even a small one).</p>
<p>While the adaptation of Open Source technologies is a must for companies, in order to survive the troubled waters of these time, it is highly dependant on the solution providers, consultants and IT outsourcing companies. In Israel, for example, it is very much a customary to hire outsourced IT assistance, on a part time basis, allowing you to cut your IT costs. When bringing in IT assistance, you&#8217;re not only bringing in IT assistance, you also bring in IT governance and IT policies &#8211; as an outsourced IT person will usually operate under the terms he had learned in his company. If his company is a M$ oriented company, no matter how Open Source will be crucial to the business, M$ will still rule the domain in that area. I believe that the first thing that needs to happen is for the consulting and IT outsourcing companies to realize that they need to change, first for their customers, then for themselves. If the small start-up companies and established companies will start falling, the consultants will simply dry out of work.</p>
<p>It is our responsibility as IT/Telecom/Development/Architecture/Design consultants to explain the aspects of using Open Source, assimilating it, integrating it, both the pros and the cons and then, assist our customers in doing so successfully &#8211; this is the only way to go.</p>
<p>For example, let us take examine the following scenario &#8211; a telephony service provider. Our telephony service provider is based on Asterisk as the switching environment, a purely M$ base for all the billing, web front-ends, databases, development and so on. Their entire IT infrastructure is fully owned by them, all running with ESX servers and other proprietary technologies. This company will be required to pay hundreds of thousands of dollars every year, for support purposes (and the year is coming close to an end), their expansion is highly dependant on 3rd parties and while they are self sufficient on the IT side, they are purely dependant on the technology side. Now, imagine that this company would have had their entire back-end based on Open Source technologies, let&#8217;s imagine PostgreSQL and Ruby on Rails as the web frame work, how much money will that save per year? now, let&#8217;s remove ESX out of the equation&#8230; let&#8217;s also remove non-Open storage solutions and replace those with CoRAID or something similar, we&#8217;ve saved hundreds of thousands of dollars on an annual basis. Radical? &#8211; YES! But drastic times call for drastic measures, and when drastic measures are required, Radical solutions are a must.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simionovich.com/2008/10/11/were-melting-were-melting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dialers &#8211; Myth or Truth?</title>
		<link>http://www.simionovich.com/2008/09/15/dialers-myth-or-truth/</link>
		<comments>http://www.simionovich.com/2008/09/15/dialers-myth-or-truth/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 09:40:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AGI]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[technnology]]></category>
		<category><![CDATA[demographic]]></category>
		<category><![CDATA[dialer]]></category>
		<category><![CDATA[predictive]]></category>
		<category><![CDATA[PSTN]]></category>
		<category><![CDATA[vicidial]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://www.simionovich.com/?p=59</guid>
		<description><![CDATA[Over the past 12 months, I&#8217;ve been heavily involved in the development of high-speed dialers. While many companies published a prolific number of automatic dialers (power, predictive, broadcast) &#8211; none of these companies ever announced there top speed dialing capability. An so I ask myself: &#8220;What is the reason not to release these numbers publicly?&#8221;]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F09%2F15%2Fdialers-myth-or-truth%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F09%2F15%2Fdialers-myth-or-truth%2F&amp;source=nirsimionovich&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Over the past 12 months, I&#8217;ve been heavily involved in the development of high-speed dialers. While many companies published a prolific number of automatic dialers (power, predictive, broadcast) &#8211; none of these companies ever announced there top speed dialing capability.</p>
<p>An so I ask myself: &#8220;What is the reason not to release these numbers publicly?&#8221; &#8211; interesting, isn&#8217;t it. So, I decided to experiment myself and see if I would release public numbers for my dialer. I&#8217;ve designed my dialer to be capable of generating upto 35 calls concurrently. My questions was this: &#8220;While the dialer is fully capable these numbers in a test scenario, will this number be reached in real life?&#8221;</p>
<p>So, I started experimenting with my code &#8211; doing a very simple test. I&#8217;ve installed my dialer on a Dual Quad Core system, 8GB RAM, and a RAID-1 array as the storage. Now, I&#8217;ve setup the system to generate up to 35 calls every second, allowing the server to sustain a total of 180 concurrent calls &#8211; 360 channels.</p>
<p>What happend was actually this: the dialer generated about 180 dials within a period of about 8 seconds, and then, simply waited till some of the calls completed in order to generate additional calls. Ok, that is understandable, however, what is the throughput of the dialer? So, I decided to do another test, I filled up my queue with a total of 50,000 records. In addition, I&#8217;ve arranged with my carrier to terminate the calls to on of their SigValue systems, to sustain the enormous number of inbounds. In addition, I asked them to perform a small measurement of the average call inits per second. I was shocked with the result!</p>
<p>While the dialer simply peaked upon startup, after 20 seconds of operations it started normalizing at around 6 call initiations per second. But how can that be? how can it be that a dialer capable of dialing 35 calls is slowed down to crawl? &#8211; the reason is simple, the latency imposed by the PSTN/VoIP network, the time it takes for the calls to terminate and the actual time the call is left on the air, while the dial happens. All these factors together had given me the notion that there is no practical top speed, as it is in direct relation to the demographics of the dialer operations.</p>
<p>Having said that, is it possible to devise a formula to calcualte this number on a per demographic basis? maybe on a per PSTN/VoIP carrier type? maybe a combination of the both? will a formula such as that will enable for the better creation of broadcast/predictive dialer? &#8211; no use dialing tons of number into a demographic that can&#8217;t handle it, while at the other side of the spectrum, what demographics will benifit from the utilization of an automated dialer?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simionovich.com/2008/09/15/dialers-myth-or-truth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache vs. Lighttpd (AKA: Lighty)</title>
		<link>http://www.simionovich.com/2008/08/27/apache-vs-lighttpd-aka-lighty/</link>
		<comments>http://www.simionovich.com/2008/08/27/apache-vs-lighttpd-aka-lighty/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 11:21:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AGI]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[technnology]]></category>
		<category><![CDATA[Ajaz]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[dialer]]></category>
		<category><![CDATA[Lighttpd]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.simionovich.com/?p=55</guid>
		<description><![CDATA[For a while now I&#8217;ve been toying around with the idea of utilizing Lighttpd for various web based applications. One of these application is my Automatic Dialer framework, also known as the GTD-API. The main issue with the GTD-API (besides that it is highly reliant on a MySQL database), is the fact that all requests]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F08%2F27%2Fapache-vs-lighttpd-aka-lighty%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F08%2F27%2Fapache-vs-lighttpd-aka-lighty%2F&amp;source=nirsimionovich&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>For a while now I&#8217;ve been toying around with the idea of utilizing Lighttpd for various web based applications. One of these application is my Automatic Dialer framework, also known as the GTD-API. The main issue with the GTD-API (besides that it is highly reliant on a MySQL database), is the fact that all requests have to be processed via XML-RPC HTTP post requests.</p>
<p>The main issue that I had was this: in a production scenario, a dialer management system will generate over 100 requests to the XML-RPC server. While Apache is fully capable of rendering services at such a speed, its increasing size and boilerplate automatically introduce a management issue. In addition, as I was trying to build a dialer appliance that can be used in any enterprise, the ever expanding Apache wasn&#8217;t a good choice.</p>
<p>While I was looking at both NginX and Lighttpd, the latter captured my eye, thanks to a simple advantage &#8211; The integration of FastCGI based PHP was so easy, that it almost troubling that I used Apache all these years.</p>
<p>At this point, once I got Lighhtpd working with my Dialer, I said to myself: &#8220;It would be really cool to go about and send status reports back from the dialer, directly to the web client activating the call. In addition, I really don&#8217;t want to go about and perform these updates to the database, then query the database &#8211; that would, literally, kill the MySQL server.</p>
<p>So, I implemented a local session storage area for each call, which updated the call status as it traverses. The information was stored on the hard drive, which allowed a better response time than the ever indexing MySQL server. The status reports were picked up from the Lighttpd server via an Ajax client (which I didn&#8217;t write &#8211; I suck at JS) &#8211; and it works quite well.</p>
<p>I wonder, can Lighttpd completely replace Apache? &#8230; time will tell&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simionovich.com/2008/08/27/apache-vs-lighttpd-aka-lighty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m no web designer &#8211; I&#8217;m a developer</title>
		<link>http://www.simionovich.com/2008/08/10/im-no-web-designer-im-a-developer/</link>
		<comments>http://www.simionovich.com/2008/08/10/im-no-web-designer-im-a-developer/#comments</comments>
		<pubDate>Sun, 10 Aug 2008 09:28:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[GPL]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[technnology]]></category>
		<category><![CDATA[Code Igniter]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Zend]]></category>

		<guid isPermaLink="false">http://www.simionovich.com/?p=28</guid>
		<description><![CDATA[Lets put it this way: I am no web developer, nor was I ever, nor will I ever be. While I do enjoy playing around with various web designs and web technologies, I&#8217;m no web developer. Think about it, this blog is based upon the WordPress system, which means, that while I could easily build]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F08%2F10%2Fim-no-web-designer-im-a-developer%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F08%2F10%2Fim-no-web-designer-im-a-developer%2F&amp;source=nirsimionovich&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Lets put it this way: I am no web developer, nor was I ever, nor will I ever be. While I do enjoy playing around with various web designs and web technologies, I&#8217;m no web developer. Think about it, this blog is based upon the WordPress system, which means, that while I could easily build my own blog system &#8211; I didn&#8217;t.As most developers are, I am a lazy person &#8211; when it comes to writing code, that is. This means that when I write an application, I really like spending my time working on the application logic, rather than wasting my time on GUI. I&#8217;ve always looked for better ways to improve my applications development track, especially, the ability to seperate the logic from the display in such a way that both become agnostic to one another. So, I started looking into various MVC (Model-View-Controller) frameworks &#8211; which had been springing up all over the past year.</p>
<p>While the most popular one seems to be Ruby-On-Rails, I don&#8217;t like Ruby and prefare PHP. Various options exist here, so I seeked one that was easy to integrate and that is backed by a company of some sort.</p>
<h2><strong>Zend Framework</strong></h2>
<p>Much like PHP, Zend Framework appears to be a mixture of functions, closely wrapped into a set of classes, to help you create an MVC environment. I&#8217;ve started learning it, and shortly came to a conclusion: much like PHP, Zend Framework enables you a feature rich environment, however, it isn&#8217;t always clear how to get to do something with it.</p>
<h2>CakePHP</h2>
<p>CakePHP appears to be a slightly more rigid PHP MVC environment, with a fairly vibrant and lively community backing it up. However, like any other young community backed project, it lacks one main element: proper documentation. The documents available on the CakePHP.org website are sketchy at best, which means, there is no ordered manner of getting started fast with CakePHP.</p>
<h2>Code Igniter</h2>
<p>Code Igniter is a PHP MVC environment, backed by Ellis Labs &#8211; the same people behing Expression Engine. So, from a technical point of view, this is a plus, as Ellis Labs had made it its business to make Code Igniter a valid product. The amount of information available on the Internet is satisfactory, and the documentation on the website is more than good &#8211; it&#8217;s down right GREAT! The addition of video tutorials with a very clear naration enables even a novice developer to go about and start working fast with Code Igniter. The one thing that Code Igniter lacks is a rigid framework, which means, that just like PHP &#8211; it&#8217;s easy to fuck about and mess things up.</p>
<h2>My Choice</h2>
<p>Currently, I use a mixture of Code Igniter + Prototype + XAJAX to build my web applications, which makes for a fairly rapid development environment &#8211; I&#8217;d love to hear what you have to say about these.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simionovich.com/2008/08/10/im-no-web-designer-im-a-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working on a new book &#8230;.</title>
		<link>http://www.simionovich.com/2008/08/05/working-on-a-new-book/</link>
		<comments>http://www.simionovich.com/2008/08/05/working-on-a-new-book/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 11:14:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AGI]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[technnology]]></category>
		<category><![CDATA[AsteriskNOW]]></category>
		<category><![CDATA[Book]]></category>
		<category><![CDATA[CTI]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[PacktPublishing]]></category>

		<guid isPermaLink="false">http://www.simionovich.com/?p=52</guid>
		<description><![CDATA[As most of you reading this blog, you must know that I&#8217;ve published an AsteriskNOW book early this year. I&#8217;m happy to say that I&#8217;ve received numerous emails since the publication of the book, all asking various questions about Asterisk in general and AsteriskNOW in particular. Most of the questions that I received were related]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F08%2F05%2Fworking-on-a-new-book%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F08%2F05%2Fworking-on-a-new-book%2F&amp;source=nirsimionovich&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>As most of you reading this blog, you must know that I&#8217;ve published an <a href="http://www.asterisknow.org">AsteriskNOW</a> <a href="http://www.amazon.com/AsteriskNOW-Nir-Simionovich/dp/1847192882/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1217936695&#038;sr=1-1">book</a> early this year. I&#8217;m happy to say that I&#8217;ve received numerous emails since the publication of the book, all asking various questions about Asterisk in general and AsteriskNOW in particular.</p>
<p>Most of the questions that I received were related to the development of AGI and AMI scripts, and how to utilize Asterisk as an application layer platform. This inspired me to work on additonal title, to complete my previous book. I&#8217;m currently working on an Asterisk Developers guide, for AGI/CTI development with Asterisk. The book serves as a complete guide, summarizing the various aspects of developing AGI/CTI applications with Asterisk, while, enjoying various additions from my day-to-day experience with AGI/CTI development with Asterisk. The book is written as an eye-opener for experienced developers, wishing to make their transition to AGI/CTI development, and teaches them how to avoid the most common mistakes of early day AGI developers.</p>
<p>I&#8217;ll be be updating the blog with my progress. Currently, chapters 1 through 5 are complete, covering the basic aspects of dial-plan and AGI development. More information will be released soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simionovich.com/2008/08/05/working-on-a-new-book/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>We are to blame&#8230;</title>
		<link>http://www.simionovich.com/2008/07/09/we-are-to-blame/</link>
		<comments>http://www.simionovich.com/2008/07/09/we-are-to-blame/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 09:13:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AGI]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[technnology]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Magic]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[SIPP]]></category>

		<guid isPermaLink="false">http://www.simionovich.com/?p=49</guid>
		<description><![CDATA[Lately I&#8217;ve come to the realization, that we are to blame for our own inability to promote Open Source and the adaptation of Open Source proficiency. Being an Open Source evangelist and consultant, this is very weird to be said by one like myself, however, this is my realization &#8211; and I will explain. In]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F07%2F09%2Fwe-are-to-blame%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F07%2F09%2Fwe-are-to-blame%2F&amp;source=nirsimionovich&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Lately I&#8217;ve come to the realization, that we are to blame for our own inability to promote Open Source and the adaptation of Open Source proficiency. Being an Open Source evangelist and consultant, this is very weird to be said by one like myself, however, this is my realization &#8211; and I will explain.</p>
<p>In the early days of Open Source adaptations (late 90&#8242;s, early 2000), Open Source software was a somewhat magical solution that meant: pay nothing, get more. Software packages like Linux, Apache, mySQL, PostgreSQL and programming languages like PERL and PHP had lowered the bar on the adaptation of new technologies, and enabled a prolific number of solutions and services.</p>
<p>I still remember the early days, when a Windows based Mail Relay would cost anything between 800$ to 1200$, and I would come in with a Linux based solution that would do the same thing for FREE &#8211; amazing. As time progressed, so did the technology and the penetration of Open Source into new fields. CRM, ERP, Telecoms, management &#8211; all of these now enjoy a diverse number of Open Source solutions. However, the original concept of &#8216;Open Source = Magical FREE Solution&#8217; had still remained in the minds of managers and business people.</p>
<p>Today we are confronted with &#8216;would-be&#8217; Open Source solution experts, which adopt and develop upon Open Source products and project various applications. In example, let&#8217;s take a look at Asterisk. Asterisk has a multitude of Open Source solutions, ranging from PBX system, Prepaid calling cards, Wholesale routing platforms, Attendance system, Presence systems &#8211; and even a plant watering solution. The problem with this ever growing number of solutions is that Asterisk is immediately considered to be: &#8220;A magical solution&#8221; capable of solving any problem &#8211; when it&#8217;s not even remotely related to Asterisk. For example, a friend of mine had been asked to develop an Asterisk based solution, that would support a total of 250 concurrent call initiations and up-to 3000 concurrent calls on the system. Any Asterisk developer would take a look at this, and would immediately say: &#8220;Hmmm&#8230;. this requires several servers, but hey, what about the application itself? that would also have an impact&#8221;. Now, the customer of the project has a &#8216;would-be&#8217; Asterisk tech in his company which said: &#8220;I was able to initiate 200 concurrent SIP invites to Asterisk via SIPP, no problem&#8217; &#8211; HELLO! STUPID! where&#8217;s the application? where&#8217;s the database? where&#8217;s the user information flow? comm&#8217;on, are you listening to yourself speak? or simply are filled with the gasses coming out of your ass that are affecting your brain?</p>
<p>Now, once the customer learns that Asterisk is most probably not the right solution for the problem, he becomes angry. Why? because he now learns that he needs to spend about 10 times more money than he anticipated for the creation of this tool &#8211; well, that&#8217;s life when you have no idea what you are doing/saying, and you believe in magical solutions. However, we &#8211; &#8220;The Open Source Community &#8211; is the one to blame for this scenario, because we got the world accustomed to the idea that Open Source is like magic &#8211; flip the Linux magic wand, and the rest will solve itself.</p>
<p>I&#8217;d like to open the floor for discussion on this, as I believe most of you will have something to say about this.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simionovich.com/2008/07/09/we-are-to-blame/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Predictive dialers enhance contact center performance &#8211; truth or myth?</title>
		<link>http://www.simionovich.com/2008/05/08/predictive-dialers-enhance-contact-center-performance-truth-or-myth/</link>
		<comments>http://www.simionovich.com/2008/05/08/predictive-dialers-enhance-contact-center-performance-truth-or-myth/#comments</comments>
		<pubDate>Thu, 08 May 2008 20:56:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AGI]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[technnology]]></category>
		<category><![CDATA[Call Center]]></category>
		<category><![CDATA[Contact Center]]></category>
		<category><![CDATA[Eliyahu M. Goldratt]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[The Goal]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://www.simionovich.com/?p=36</guid>
		<description><![CDATA[Since I&#8217;ve released my dialer framework demo about 2 months ago, I&#8217;ve been swamped with many requests from various contact centers around the world &#8211; to utilize my dialer framework for the development of a custom made predictive dialer. For those of you who are not in the know, a predictive dialer is a tool]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F05%2F08%2Fpredictive-dialers-enhance-contact-center-performance-truth-or-myth%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F05%2F08%2Fpredictive-dialers-enhance-contact-center-performance-truth-or-myth%2F&amp;source=nirsimionovich&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Since I&#8217;ve released my dialer framework demo about 2 months ago, I&#8217;ve been swamped with many requests from various contact centers around the world &#8211; to utilize my dialer framework for the development of a custom made predictive dialer.</p>
<p>For those of you who are not in the know, a predictive dialer is a tool that is capable of analyzing the performance of each agent in a contact center, accurately predicting when his current call will be completed, and thus, start calling outbound to ensure that the agent is utilized as much as possible.</p>
<p>Most contact center managers believe that if an agent is utilized 100% of the day (or at least a close enough number), they will maximize their profits and work will be done faster. This is not always the case, and there are some cases where predictive dialers will be nothing more than a &#8220;White Elephant&#8221;, sitting in your call center, doing nothing.</p>
<p>Considering the following scenario: We have a contact center selling computer insurance plans by phone. Each agent is trained to make a sale, that is: &#8220;Don&#8217;t get off the bloody phone without a credit card!&#8221;. One of the issues with such a contact center is that there is no-way of predicting how long a sale will take. Lets imagine that one call a sale happens in 15 minutes, while in the next, we start with the kid in the house, move to the older brother, move to the mother, move to the father, ending up making a sale after 35 minutes. In other words, we have no way of profiling an agent, as there is no proper profile to the customers.</p>
<p>So you can argue that by utilizing statistical models and proper targeting of potential customers, we can go about and perform more accurate predictions. However, these predictions will all go up in flames, the minute a deviation from the norm of the statistic happens. We then immediately create a form of ripple effect, that is then carried across the entire contact center.</p>
<p>In the book &#8220;<a href="http://www.amazon.com/Goal-Process-Ongoing-Improvement/dp/0884270610" title="The Goal" target="_blank">The Goal</a>&#8220;, by <a href="http://www.amazon.com/exec/obidos/search-handle-url?%5Fencoding=UTF8&amp;search-type=ss&amp;index=books&amp;field-author=Eliyahu%20M.%20Goldratt" title="Eliyahu M. Goldratt">Eliyahu M. Goldratt</a>, the author tells us a story about a group of boys walking in the woods. The group of boys constantly are unable to walk the path at the designated speed, due to various timing and synchronization issues. In theory, a predictive dialer is used to better synchronize the contact center intake (numbers to be dialed), with the contact center&#8217;s ability to perform (the ability to make a sale). However, this model fails when the sale constraint is unknown, thus, making the entire model fail.</p>
<p>In most cases, contact centers are better off using &#8220;Preview Dialers&#8221; and not &#8220;Predictive Dialers&#8221;, unless, the contact center is highly targeted with its campaigns and sale strategy. A &#8220;sell or die&#8221; contact center strategy immediately negates the possibility of accurately measuring the contact center performance and bottle necks, thus, having an automatic pace creator in such a scenario will become redundant and will most probably just cost funds.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simionovich.com/2008/05/08/predictive-dialers-enhance-contact-center-performance-truth-or-myth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asterisk powers Israel&#8217;s 60th independance day information service</title>
		<link>http://www.simionovich.com/2008/05/04/asterisk-powers-israels-60th-independance-day-information-service/</link>
		<comments>http://www.simionovich.com/2008/05/04/asterisk-powers-israels-60th-independance-day-information-service/#comments</comments>
		<pubDate>Sun, 04 May 2008 16:37:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AGI]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[technnology]]></category>
		<category><![CDATA[independance day]]></category>
		<category><![CDATA[IVR]]></category>

		<guid isPermaLink="false">http://www.simionovich.com/?p=35</guid>
		<description><![CDATA[Ok, the service is up and running, so now I can show it off. Israel&#8217;s 60th independance day parties information service is running of an Asterisk servers &#8211; how do I know that, you ask? simple, it&#8217;s my Asterisk server! Well, actually, the service is being run by BeLowCall, an IVR and telecom services company,]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F05%2F04%2Fasterisk-powers-israels-60th-independance-day-information-service%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F05%2F04%2Fasterisk-powers-israels-60th-independance-day-information-service%2F&amp;source=nirsimionovich&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Ok, the service is up and running, so now I can show it off. Israel&#8217;s 60th independance day parties information service is running of an Asterisk servers &#8211; how do I know that, you ask? simple, it&#8217;s my Asterisk server!</p>
<p>Well, actually, the service is being run by BeLowCall, an IVR and telecom services company, while the platform was developed by me. Essentially, the system is an Asterisk based application engine, that has a very minimalistic dialplan code and communicates with an SQL backoffice then instructs the Asterisk server what to do &#8211; in turn, turning the Asterisk server into a high scaleable state transition machine &#8211; capable of developing IVR system at any depth or as wide as you want.</p>
<p>If you want to feel the system, you are welcome to call +972-73-2126060. The entire application took about 4 hours to provision, including the database registration system and the recording &#8211; not bad, right?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simionovich.com/2008/05/04/asterisk-powers-israels-60th-independance-day-information-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asterisk Bootcamp Training Israel</title>
		<link>http://www.simionovich.com/2008/03/25/asterisk-bootcamp-training-israel/</link>
		<comments>http://www.simionovich.com/2008/03/25/asterisk-bootcamp-training-israel/#comments</comments>
		<pubDate>Mon, 24 Mar 2008 22:59:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[technnology]]></category>

		<guid isPermaLink="false">http://www.simionovich.com/?p=30</guid>
		<description><![CDATA[As some of you may already know, I&#8217;ve been chosen by Digium to perform Asterisk training services here in Israel. For me, as a long time Asterisk community member, it is fairly a big thing, even bigger than the book I&#8217;ve written &#8211; as it incorporates two of the things I really like &#8211; teaching]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F03%2F25%2Fasterisk-bootcamp-training-israel%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F03%2F25%2Fasterisk-bootcamp-training-israel%2F&amp;source=nirsimionovich&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>As some of you may already know, I&#8217;ve been chosen by Digium to perform Asterisk training services here in Israel. For me, as a long time Asterisk community member, it is fairly a big thing, even bigger than the book I&#8217;ve written &#8211; as it incorporates two of the things I really like &#8211; teaching and Asterisk.</p>
<p>The first bootcamp is currently planned for the 25th of May till the 29th of May, in Ramat Gan, Israel.</p>
<p>You can find additional information at <a href="http://www.greenfieldtech.net/asterisktraining">http://www.greenfieldtech.net/asterisktraining</a>.</p>
<p>Oh, btw, did I mention that I&#8217;m now a freelance consultant? check out my website at <a href="http://www.greenfieldtech.net/">http://www.greenfieldtech.net/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simionovich.com/2008/03/25/asterisk-bootcamp-training-israel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The world&#8217;s fastest Asterisk based Dialer</title>
		<link>http://www.simionovich.com/2008/03/02/the-worlds-fastest-asterisk-based-dialer/</link>
		<comments>http://www.simionovich.com/2008/03/02/the-worlds-fastest-asterisk-based-dialer/#comments</comments>
		<pubDate>Sun, 02 Mar 2008 09:23:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AGI]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[technnology]]></category>
		<category><![CDATA[advertizing]]></category>
		<category><![CDATA[ami]]></category>
		<category><![CDATA[dialer]]></category>
		<category><![CDATA[digium]]></category>
		<category><![CDATA[freeswitch]]></category>
		<category><![CDATA[manager]]></category>
		<category><![CDATA[openpbx]]></category>
		<category><![CDATA[power]]></category>
		<category><![CDATA[sangoma]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://www.simionovich.com/?p=26</guid>
		<description><![CDATA[As most of you already know, I&#8217;m heavily involved within the Asterisk Open PBX project. Over the course of the past 5 years of my dealing with Asterisk, Asterisk had always suffered a serious flaw, and that is, a single-threaded Manager interface &#8211; which usually led to serious dead-locks when writing a multi-threaded server that]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F03%2F02%2Fthe-worlds-fastest-asterisk-based-dialer%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.simionovich.com%2F2008%2F03%2F02%2Fthe-worlds-fastest-asterisk-based-dialer%2F&amp;source=nirsimionovich&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>As most of you already know, I&#8217;m heavily involved within the Asterisk Open PBX project. Over the course of the past 5 years of my dealing with Asterisk, Asterisk had always suffered a serious flaw, and that is, a single-threaded Manager interface &#8211; which usually led to serious dead-locks when writing a multi-threaded server that connects to it.</p>
<p>One of my long time challenges was to surpass the 4-5 originate requests to the Asterisk Manager interface, enabling me to automatically dial more than 4-5 calls at the same second. My initial work had began with the idea of increasing that by a factor of 50%, going up to around 7-8 calls per second &#8211; I had achieved that using a combination of smart synchronization between the manager interface and my originating server &#8211; and also enabling asynchronous originate requests &#8211; however, that methodology had proved to be problematic &#8211; in terms of reliability.</p>
<p>I understood that something else had to be devised, something that doesn&#8217;t rely completely on the manager interface, and that will allow me to originate calls freely, without clogging up the manager interface. So, I decided to move my interest from the Manager interface, and concentrate on understanding Asterisk&#8217;s channel handling, especially, how do calls originating from the manager interface are handled by the Asterisk spooler and the Asterisk channel drivers.</p>
<p>more will follow&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simionovich.com/2008/03/02/the-worlds-fastest-asterisk-based-dialer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPAGI Annoyances or maybe&#8230;</title>
		<link>http://www.simionovich.com/2007/11/29/phpagi-annoyances-or-maybe/</link>
		<comments>http://www.simionovich.com/2007/11/29/phpagi-annoyances-or-maybe/#comments</comments>
		<pubDate>Thu, 29 Nov 2007 21:18:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AGI]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[technnology]]></category>
		<category><![CDATA[Asterisk Gateway Interface]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[PHPAGI]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[valgrind]]></category>

		<guid isPermaLink="false">http://www.simionovich.com/?p=21</guid>
		<description><![CDATA[OK, if there is one thing I really hate, is that when something so little as a small configuration change from one version to another causes things not to function properly. It is one thing to make sure that your code is backward compatible, no one really expects that your scripting language will suddenly start]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.simionovich.com%2F2007%2F11%2F29%2Fphpagi-annoyances-or-maybe%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.simionovich.com%2F2007%2F11%2F29%2Fphpagi-annoyances-or-maybe%2F&amp;source=nirsimionovich&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>OK, if there is one thing I really hate, is that when something so little as a small configuration change from one version to another causes things not to function properly. It is one thing to make sure that your code is backward compatible, no one really expects that your scripting language will suddenly start behaving differently, just because you upgraded to a new minor version &#8211; right?<span id="more-21"></span></p>
<p>So, here is the case, over the course of the past 2 years, I&#8217;ve done some extensive AGI programming with the PHP programming language &#8211; hell, I think that if I&#8217;ll sit down and write a book about AGI programming with PHP, it would be one of the most complete ones. I remember that when I started writing AGI scripts, I used to simply write everything by myself, each script was a self contained unit, everything was working hunky-dory. Shortly later, I discovered the PHPAGI class, a nicely wrapped AGI class for AGI, FastAGI and Asterisk Manager interaction, that made my life really easy. When Asterisk evolved to version 1.2, most of my PHPAGI scripts kept on working, apart from a small part of the Manager interface, however, that was easily worked around &#8211; and we&#8217;re back hunky dory. Even Asterisk 1.4 and Asterisk TRUNK liked PHPAGI, no problem there &#8211; till a week ago.</p>
<p>So here I am, working on a new project, and I&#8217;m working on my new snazzy development kit, that is installed according to the following:</p>
<p>CentOS 5.0 x86_64 with Kernel 2.6.18-8.1.4.el5<br />
Asterisk stable 1.4.14<br />
php version 5.1.6 (RPM package: php-5.1.6-12.el5)</p>
<p>At this point, all hell broke loss! All of my old PHPAGI scripts had simply gone crazy on me, causing each of the AGI &#8220;GET VARIABLE&#8221; commands to fail, always returning variables which are not there at all. That was fairly annoying, I&#8217;m issuing a command, getting an error response, issue the same command again, get a proper response only with the wrong variable, issue the command again &#8211; get the proper value. How annoying! &#8211; All these scripts used to work perfectly in the past, what happened? So, I deploy an older code of mine, guess what, that code doesn&#8217;t work either &#8211; at this point, I start pulling hairs off my head (not that I have much to pull on, my hair is very short).</p>
<p>So, what does any good Open Source programmer do when confronted with such a problem? &#8220;Use the source Luke, use the source!&#8221; &#8211; lets dig into the Asterisk code. Adding some AST_LOG functions here and there, doing some more debugging using valgrind, everything within Asterisk looks nice. Just to make sure, lets downgrade the Asterisk version and run the test again &#8211; same results. Conclusion: Asterisk isn&#8217;t the problem, doesn&#8217;t really matter what version I use.</p>
<p>OK, lets check the PHP scripts &#8211; some PHPAGI class hacking, more debug here, mode debug there, a few more syslog calls &#8211; everything looks on the PHPAGI script as if the input from Asterisk is messed up. Conclusion: something in the middle is fucking up royally!</p>
<p>Now, being a good programmer I said to myself: &#8220;OK, so one said that PHPAGI is the only language out there, lets go Python &#8211; besides, I always wanted to learn Python&#8221;. So I spend a day learning some Python, just so I would be able to re-write my script into Python. Ran the script &#8211; holly shit! &#8211; it works, as if nothing happened. Conclusion: something in the PHP environment is screwing up the environment. So, I decide to modify my execution from using php-cli to php-cgi, for all practical matters (at least from the script side) &#8211; it should behave identically. Modified it to work with php-cgi, suddenly the $argv variable isn&#8217;t being passed to the script! &#8211; Hmmmm&#8230;. that&#8217;s odd, it was there a minute ago. Lets dig into php.ini and see what&#8217;s wrong:</p>
<p>; This directive tells PHP whether to declare the argv&amp;argc variables (that<br />
; would contain the GET information).  If you don&#8217;t use these variables, you<br />
; should turn it off for increased performance.<br />
register_argc_argv = Off</p>
<p>Dear god, why would $argv and $argc be turned off? just for performance sake? how would I run the AGI scripts that I want to run, after all, I am using the $argv variable. Turn the parameter back to &#8220;On&#8221; &#8211; JOY! Everything is back working as it should. So the question that remains is: &#8220;What is the main difference between php-cli and php-cgi that had caused this issue?&#8221; According to the voip-info.org website, there is some form of difference, however, it doesn&#8217;t really say how it is exhibited in the operation of AGI scripts.</p>
<p>Well, at least I solved my problem for the mean while, I&#8217;ll work on getting the proper explanation of php-cli vs. php-cgi later on.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simionovich.com/2007/11/29/phpagi-annoyances-or-maybe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
