<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Code of Contact</title>
	
	<link>http://blog.radvision.com/codeofcontact</link>
	<description>The ins and outs of V²oIP &amp; IMS programming</description>
	<lastBuildDate>Wed, 14 Jul 2010 12:04:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/CodeOfContact" /><feedburner:info uri="codeofcontact" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><image><url>http://www.radvision.com/radvision/Images//design/radvision.gif</url></image><feedburner:emailServiceId>CodeOfContact</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Standardized Human Behavior: Anonymity</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/Oqha84cMAx8/</link>
		<comments>http://blog.radvision.com/codeofcontact/2010/07/14/standardized-human-behavior-anonymity/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 12:04:10 +0000</pubDate>
		<dc:creator>Ran Arad</dc:creator>
				<category><![CDATA[Standardization]]></category>
		<category><![CDATA[access]]></category>
		<category><![CDATA[anonymity]]></category>
		<category><![CDATA[behavior]]></category>
		<category><![CDATA[caller id]]></category>
		<category><![CDATA[id]]></category>
		<category><![CDATA[phone]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[science]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[support]]></category>
		<category><![CDATA[text]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=98</guid>
		<description><![CDATA[Do you remember, in the &#8216;before&#8217; times, when the phone would ring? Are you at the age where the phone was a plastic thing with numbers on it, which was connected to a special socket in the wall? So it rang. Ring. Ring ring.
Who is it?
Wait! Skip a few years later, and this other plastic [...]<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2010/07/14/standardized-human-behavior-anonymity/">Standardized Human Behavior: Anonymity</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Do you remember, in the &#8216;before&#8217; times, when the phone would ring? Are you at the age where the phone was a plastic thing with numbers on it, which was connected to a special socket in the wall? So it rang. Ring. Ring ring.</p>
<p><a href="http://www.flickr.com/photos/acrider/4286909046/"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  class="alignright" title="Caller ID" src="http://blog.radvision.com/images/2010/20100714-CodeOfContact-caller-id.jpg" alt="" width="240" height="129" /></a>Who is it?</p>
<p>Wait! Skip a few years later, and this other plastic gadget-thing which dad bought showed us the number that was calling us. Nope, we don&#8217;t know this number.</p>
<p>Ring ring.</p>
<h3>Sync</h3>
<p>A few years later, a few years ago, I got a car-phone. It was a horrid thing, slow and stupid. In addition, it could not be synced with my mobile&#8217;s phone book. I had to &#8220;hack&#8221; it:  take the SIM out, put it in the mobile phone, copy all the numbers from the mobile to the SIM, stick it back into the car-phone, fix the butchered names (John Do~1, John Do~2, John Do~3), or at least the important ones, etc.</p>
<p>And if someone updated their number, god forbid, I had to update it manually on both phones. And it did not have text-to-speech, so I had to teach it how to pronounce the contact names if I wanted to use speech, eyes on the road and all that.</p>
<p>Still I got numbers I did not recognize, just like in the &#8216;before&#8217; times. In that day and age, I expected more. I expected <a href="http://www.urbanaero.com/Urban_Main.htm">flying cars</a>, but that aside, I expected the phone systems to provide me with a name, or the best approximation of a name (company, location) it can.</p>
<h3><a href="http://www.flickr.com/photos/eltuercas/1339058852/"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  class="alignright" title="How should this work?" src="http://blog.radvision.com/images/2010/20100714-CodeOfContact-explore.jpg" alt="" width="240" height="360" /></a>Workflow: How this SHOULD work</h3>
<ul>
<li> Alice, upon buying her new phone, provides her name, the correct phonetic representation(s) of her name, selected web profiles, a flattering picture and a PIN number or some other password to grant permission to call her.</li>
<li> Alice meets Bob, an old high school friend, and wants to keep in touch with him. She gives him her password.</li>
<li> Bob looks up Alice, and provides the access password. His phone downloads her details from the network.</li>
<li> Bob calls Alice, and Alice&#8217;s phone updates with his details.</li>
</ul>
<p>It&#8217;s no rocket science, just applying the current social networking methodologies to the phone system. As for &#8216;private numbers&#8217;:</p>
<ul>
<li> Organizations must provide at least a company name and location.</li>
<li> People who do not want to provide means for calling them back can provide limited information and no callback ability</li>
<li> Those who want to remain anonymous can try to. Subscribers can decide if they want to allow anonymous calls, messages, etc.</li>
</ul>
<p>Only one thing remains &#8211; backwards compatibility. Subscribers to POTS or older mobile phones can still have profiles and PIN numbers, even if they could not receive them. Until the subscribers create such profiles, the old caller id will still be supported. Maybe dad could get a new gadget, with an LCD screen showing the caller picture.</p>
<p style="text-align: center"><a href="http://www.flickr.com/photos/21734563@N04/2170089669/"><img class="alignnone" title="The army days" src="http://blog.radvision.com/images/2010/20100714-CodeOfContact-army-days.jpg" alt="" width="320" height="400" /></a><br />
Is that gramps? This picture is from his army days. Just press &#8216;Ignore&#8217;.</p>
<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2010/07/14/standardized-human-behavior-anonymity/">Standardized Human Behavior: Anonymity</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.radvision.com/codeofcontact/2008/03/24/standardized-human-behaviour-baby-boom/" title="Standardized Human Behaviour: Baby boom (March 24, 2008)">Standardized Human Behaviour: Baby boom</a> (1)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2008/03/03/standardized-human-behaviour/" title="Standardized Human Behaviour (March 3, 2008)">Standardized Human Behaviour</a> (2)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2008/04/07/naughty-protocols-need-spanking/" title="Naughty protocols, need spanking (April 7, 2008)">Naughty protocols, need spanking</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/09/23/interface-design-perceptual-control-theory/" title="Interface Design &amp; Perceptual Control Theory (September 23, 2009)">Interface Design &amp; Perceptual Control Theory</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/04/07/integrity-porting/" title="Integrity Porting (April 7, 2009)">Integrity Porting</a> (1)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Oqha84cMAx8:XJ3F3AHhfxU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Oqha84cMAx8:XJ3F3AHhfxU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=Oqha84cMAx8:XJ3F3AHhfxU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Oqha84cMAx8:XJ3F3AHhfxU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=Oqha84cMAx8:XJ3F3AHhfxU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Oqha84cMAx8:XJ3F3AHhfxU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Oqha84cMAx8:XJ3F3AHhfxU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Oqha84cMAx8:XJ3F3AHhfxU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=Oqha84cMAx8:XJ3F3AHhfxU:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/Oqha84cMAx8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2010/07/14/standardized-human-behavior-anonymity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2010/07/14/standardized-human-behavior-anonymity/</feedburner:origLink></item>
		<item>
		<title>VC240 – Is It Hack-Worthy?</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/C2evv7DwNMQ/</link>
		<comments>http://blog.radvision.com/codeofcontact/2010/06/30/vc240-is-it-hack-worthy/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 11:50:44 +0000</pubDate>
		<dc:creator>Ran Arad</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[access]]></category>
		<category><![CDATA[access point]]></category>
		<category><![CDATA[customers]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[RADVISION]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[source code]]></category>
		<category><![CDATA[VC240]]></category>
		<category><![CDATA[windows mobile]]></category>
		<category><![CDATA[wrt54g linksys]]></category>
		<category><![CDATA[xda developers]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=96</guid>
		<description><![CDATA[Windows Mobile 6.5.3 is actually a decent piece of software. I would not have been able to reach this conclusion without the good people of XDA-Developers, and especially @NRGZ28, who cooked the EnergyROM I&#8217;m now using.
Let me explain: with most of the phones that you buy today, you are not limited to the OS supplied [...]<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2010/06/30/vc240-is-it-hack-worthy/">VC240 &#8211; Is It Hack-Worthy?</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Windows Mobile 6.5.3 is actually a decent piece of software. I would not have been able to reach this conclusion without the good people of <a href="http://www.xda-developers.com/">XDA-Developers</a>, and especially <a href="http://twitter.com/NRGZ28">@NRGZ28</a>, who cooked the <a href="http://energyrom.com/">EnergyROM</a> I&#8217;m now using.</p>
<p>Let me explain: with most of the phones that you buy today, you are not limited to the OS supplied by the manufacturer and any updates released for it &#8211; courtesy of your friendly internet hacker. You can download tools to hack your device and flash any ROM on it &#8211; and it might even be legal. That is, if you&#8217;re ok with voiding your warranty.</p>
<h3>Hacking? Who cares?!</h3>
<p>A few days ago, a colleague asked me &#8220;what if the <a href="http://www.radvision.com/Products/Video-Products/Desktop-Video-Communications/SCOPIA-VC240/">VC240</a> root password is leaked or hacked? Customers could install whatever they want on them!&#8221; Well, I said, first, we&#8217;re dealing with the enterprise market here, and they have a tendency to value warranty. Second, when we&#8217;ll really have to worry about that, we&#8217;ll know we&#8217;ve hit the big times.</p>
<p><a href="http://en.wikipedia.org/wiki/File:Linksys_WRT54G_V1.jpg"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;'  class="alignleft" title="Linksys WRT54G" src="http://blog.radvision.com/images/2010/20100630-CodeOfContact-wrt54g.jpg" alt="" width="320" height="240" /></a>Take my router, for example: Linksys WRT54G. Linksys was required to release the WRT54G&#8217;s firmware source code due to some legal hubbub. The result? A massive amount of <a href="http://en.wikipedia.org/wiki/List_of_wireless_router_firmware_projects">third party firmware projects</a>, which modify everything from capabilities to GUI &#8211; even converting the router to an access point or a repeater. This has lead to better product reviews and better sales. So much in fact, that when version 5 of the product turned out to have too little memory for the modifications, Linksys re-released version 4 under a new model name, so as to allow it to be hacked.</p>
<p>Of course, if your real business is selling (or licensing) the software for your hardware platform, like Apple&#8217;s doing with the iPhone or Microsoft with the Xbox, then hacking is a real problem. If you just sell the device, like Archos is doing with their Jukebox or Creative with the iRiver, why would you care what software it is running? The customer can replace the software with the <a href="http://www.rockbox.org/">Rock Box</a> and it will only mean that you no longer have to service this device.</p>
<p>On the other hand, if you&#8217;re a software company, you&#8217;re in trouble: the sad truth is <strong>anyone can create software</strong>. I&#8217;m saying create and not write, since mashup services and &#8216;cooked&#8217; ROMs are not exactly written.</p>
<h3>Would you hack that?</h3>
<p>Back to the VC240. We sell a nifty screen, with a heavy-duty camera, some really mean processing units, some badass codecs and a decent GUI.</p>
<p>Until VC240 fits into a <a href="http://www.blendtec.com/willitblend/">blender</a>, we can ponder about hacking.</p>
<p>Could someone hack that? Yes. By now you should know that anything can be hacked. Would he want to replace our software with his own? Seems to me that if someone wants a video conferencing unit, they could not create a better solution without a massive investment of time and effort, but maybe I&#8217;m wrong &#8211; open source groups have taken on major projects before and done extremely well.</p>
<p>On the other hand, if anyone would want to create a use for it that is NOT a video endpoint &#8211; a gesture activated screen, some kind of artistic video feedback, security, face recognizing workstation &#8211; it may actually make sense.</p>
<p>I have to admit I look forward to that.</p>
<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2010/06/30/vc240-is-it-hack-worthy/">VC240 &#8211; Is It Hack-Worthy?</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.radvision.com/codeofcontact/2009/09/23/interface-design-perceptual-control-theory/" title="Interface Design &amp; Perceptual Control Theory (September 23, 2009)">Interface Design &amp; Perceptual Control Theory</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/04/07/integrity-porting/" title="Integrity Porting (April 7, 2009)">Integrity Porting</a> (1)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2010/04/14/if-you-were-a-fly-on-the-wall-at-these-great-companies/" title="If You Were A Fly On The Wall At These Great Companies (April 14, 2010)">If You Were A Fly On The Wall At These Great Companies</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2008/05/08/in-and-out-in-radvision-source-code/" title="Writing code for human beings: IN, OUT and INOUT (May 8, 2008)">Writing code for human beings: IN, OUT and INOUT</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/03/25/software-is-the-new-hardware/" title="Software Is the New Hardware (March 25, 2009)">Software Is the New Hardware</a> (2)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=C2evv7DwNMQ:GbOIIhOpaFI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=C2evv7DwNMQ:GbOIIhOpaFI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=C2evv7DwNMQ:GbOIIhOpaFI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=C2evv7DwNMQ:GbOIIhOpaFI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=C2evv7DwNMQ:GbOIIhOpaFI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=C2evv7DwNMQ:GbOIIhOpaFI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=C2evv7DwNMQ:GbOIIhOpaFI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=C2evv7DwNMQ:GbOIIhOpaFI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=C2evv7DwNMQ:GbOIIhOpaFI:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/C2evv7DwNMQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2010/06/30/vc240-is-it-hack-worthy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2010/06/30/vc240-is-it-hack-worthy/</feedburner:origLink></item>
		<item>
		<title>Beware: Type Conversion Can Get You to Crash</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/Fl857LqVH_g/</link>
		<comments>http://blog.radvision.com/codeofcontact/2010/06/16/beware-type-conversion-can-get-you-to-crash/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 11:31:33 +0000</pubDate>
		<dc:creator>Ofer Goren</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[support]]></category>
		<category><![CDATA[Toolkits]]></category>
		<category><![CDATA[type conversion]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=94</guid>
		<description><![CDATA[I&#8217;ve been working on several things since my last post. After all, the work of a wise developer never ends (for job-security reasons). The team and I had to evaluate some new RFCs for effort estimations, we had to read some PRDs and MRDs, and of course produce our share of documents to be added [...]<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2010/06/16/beware-type-conversion-can-get-you-to-crash/">Beware: Type Conversion Can Get You to Crash</a></p>
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on several things since <a href="http://blog.radvision.com/codeofcontact/2010/03/31/a-new-ga-is-born/">my last post</a>. After all, the work of a wise developer never ends (for job-security reasons). The team and I had to evaluate some new RFCs for effort estimations, we had to read some PRDs and MRDs, and of course produce our share of documents to be added to the general pile of documents that no one ever reads once they get approved.</p>
<p>While doing all of that, from time to time, we still need to address issues that we receive from our Customer Support department, cases which they cannot resolve without help from the R&amp;D boys and girls. Surprisingly enough, one of those boys is I.</p>
<p>Last week Ran shared a case about <a href="http://blog.radvision.com/codeofcontact/2010/06/02/closing-connections-and-the-tcp-sockets-heaven/">TCP connection closing</a>, and so I couldn&#8217;t do without sharing an interesting case of my own.</p>
<h3>A bit of history</h3>
<p>The case we have at hand is a simple case of type conversion. I&#8217;m assuming we all know <a href="http://en.wikipedia.org/wiki/Type_conversion">what that is</a>. We sometimes need to convert a 32-bit integer to 16 bits, or from unsigned long to a signed one, and while doing it, we need to be very careful. As the <a href="http://www.around.com/ariane.html">case of Ariane 5</a> shows, type conversion can sometimes blow up in your face.</p>
<p>The moral of the story is that if you&#8217;re going to use the same piece of software written for your old product (let&#8217;s say, the Ariane 4 missile) in your new product (Ariane 5, for instance) as well, you should take into consideration that the new product is most likely to be different.</p>
<p>In this case, the latter was much faster, so some velocity values that were never achieved on the previous version were reached on the new one, including a 32-bit integer value that was later converted to a 16-bit one. Of course, some part of the value was cut off by the conversion, leading to a crash &#8211; not a code crash, but of a missile crash. OUCH!</p>
<p>Bottom line: when stepping into that field, you aren&#8217;t alone. Giants walked there before you, and crashed.</p>
<p style="text-align: center"><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/z-r9cYp3tTE&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/z-r9cYp3tTE&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<h3>A bit of SIP</h3>
<p><a href="http://community.radvision.com/glossary/SIP/">SIP</a> has a nagging habit of retransmissions. Instead of warning you that you&#8217;re dialing your mother, and by the end of it, you will surely feel guilty of something, it actually insists on fulfilling your wish. Therefore, it sends an INVITE message, and waits half a second for a reply. If none is received, it sends another one, but this time waits a whole second. Then 2, then 4, then it continues trying every 4 seconds, until 32 seconds have passed since the initial INVITE. During all that time it never stops to ask, &#8220;Are you sure you <em>are</em> calling your mother?&#8221;</p>
<p>Here&#8217;s the &#8220;official&#8221; documentation for it from <a href="http://www.ietf.org/rfc/rfc3261.txt">RFC 3261</a>, section13.3.1.4:</p>
<p>The 2xx response is passed to the transport with an interval that starts at T1 seconds and doubles for each retransmission until it reaches T2 seconds (T1 and T2 are defined in Section 17). Response retransmissions cease when an ACK request for the response is received.</p>
<h3>The case in hand</h3>
<p>So we got a call from someone in Customer Support. A customer complained that the last INVITE retransmission was sent after 487 milliseconds instead of 4 seconds. In fact, the last INVITE they experienced should have never been sent, as 32 seconds already passed from the first INVITE. Luckily for us, the customer also supplied a log file with the full details. All our toolkits can generate such logs, which helps us a lot during debugging. It lists API calls, message details and lots of other stuff. For each entry, there is also a timestamp, which is also a huge help.</p>
<p>Here&#8217;s the gestalt (edited for your reading pleasure):</p>
<p><code>Received INVITE<br />
[...]<br />
19:47:35.238112 Sent 200 OK<br />
[...0.5s...]<br />
19:47:35.740140 Sent 200 OK (retransmission)<br />
[...1.0s...]<br />
19:47:36.741197 Sent 200 OK (retransmission)<br />
[...2.0s...]<br />
19:47:38.742312 Sent 200 OK (retransmission)<br />
[...4.0s...]<br />
[...]<br />
[...]<br />
19:47:58.748456 Sent 200 OK (retransmission)<br />
[...4.0s...]<br />
19:48:02.749685 Sent 200 OK (retransmission)<br />
[...4.0s...]<br />
19:48:06.750914 Sent 200 OK (retransmission)<br />
[...0.5s...]<br />
19:48:07.239942 Sent 200 OK (retransmission <strong>that should not happen</strong>)</code></p>
<h3>The Drill down</h3>
<p><a href="http://www.flickr.com/photos/jesuspresley/2558211848/"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  class="alignright" title="The drill down" src="http://blog.radvision.com/images/2010/20100616-CodeOfContact-bug.jpg" alt="" width="320" height="240" /></a>When a timer expires, our code reports it using a callback. The callback checks what time it is, what should happen next, and if needed sets up a new timer. We use 64-bit variables to measure time in nanoseconds. However, our timer APIs, use 32-bit variables (that represent milliseconds). This means that when the timer is triggered, we get its current value in milliseconds, and then convert it to nanoseconds.</p>
<p>So before setting a new timer, we take the value in nanoseconds, and divide them by a million to convert them to milliseconds. Therefore, our timer callback checks the time and calculates the interval for the next timer, if any. After all, if 31 seconds have passed since the first INVITE, there is no point in setting a 4 second timer. When a timer is set, it should also compensate for processing time and all kinds of other stuff being done between timer sets.</p>
<p>You might ask yourself what is the problem with converting 4 seconds, in their nanoseconds representation, to milliseconds. There is none. But what if, due to some compensation, we need to convert an ugly number such as 3,999,999,999 nanoseconds to milliseconds? We end up with 3,999 milliseconds, losing a lot of precision &#8211; almost a whole millisecond. Then, when the timer is expired and the callback is called, all the calculations are inaccurate.</p>
<p>This was indeed the case here. The code should have realized that 32 seconds have already passed since the first INVITE, but due to inaccurate calculations, it concluded that another retransmission should be sent. That, and all the compensations that we were doing, yielded the last unneeded message to be sent after 487 milliseconds.</p>
<p>The funny thing is (at least, for those who think those things are funny) that we had all the information we needed to avoid this in the first place. After all, we had the nanosecond values. We just used the wrong numbers in a wrong way &#8211; we used the converted milliseconds value instead.</p>
<p>Needless to say, the fix was a single change in a single line of code, using the right numbers in the right way.</p>
<h3>Conclusion</h3>
<p>I remember reading an excellent and recommended book from MS-press, &#8220;<a href="http://www.amazon.com/Writing-Solid-Code-Microsoft-Programming/dp/1556155514">Writing Solid Code</a>&#8220;. While not addressing this problem specifically, it does deal a lot with type conversions and the funny crashes you will experience if being light headed about it.</p>
<p>Lucky for us, we&#8217;re not building missiles&#8230; yet.</p>
<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2010/06/16/beware-type-conversion-can-get-you-to-crash/">Beware: Type Conversion Can Get You to Crash</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.radvision.com/codeofcontact/2009/03/25/software-is-the-new-hardware/" title="Software Is the New Hardware (March 25, 2009)">Software Is the New Hardware</a> (2)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/04/07/integrity-porting/" title="Integrity Porting (April 7, 2009)">Integrity Porting</a> (1)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/11/11/visual-studio-2005-and-beyond/" title="Visual Studio 2005 And Beyond (November 11, 2009)">Visual Studio 2005 And Beyond</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2010/01/20/human-vs-android/" title="Human Vs Android (January 20, 2010)">Human Vs Android</a> (2)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/" title="About The Intel Threading Tools, Our SIP Stack, and Me (March 18, 2009)">About The Intel Threading Tools, Our SIP Stack, and Me</a> (0)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Fl857LqVH_g:e7SAhFjvsjs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Fl857LqVH_g:e7SAhFjvsjs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=Fl857LqVH_g:e7SAhFjvsjs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Fl857LqVH_g:e7SAhFjvsjs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=Fl857LqVH_g:e7SAhFjvsjs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Fl857LqVH_g:e7SAhFjvsjs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Fl857LqVH_g:e7SAhFjvsjs:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Fl857LqVH_g:e7SAhFjvsjs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=Fl857LqVH_g:e7SAhFjvsjs:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/Fl857LqVH_g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2010/06/16/beware-type-conversion-can-get-you-to-crash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2010/06/16/beware-type-conversion-can-get-you-to-crash/</feedburner:origLink></item>
		<item>
		<title>Closing Connections and the TCP Sockets Heaven</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/euX9-cME5Ig/</link>
		<comments>http://blog.radvision.com/codeofcontact/2010/06/02/closing-connections-and-the-tcp-sockets-heaven/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 11:42:01 +0000</pubDate>
		<dc:creator>Ran Arad</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[H.245]]></category>
		<category><![CDATA[TCP]]></category>
		<category><![CDATA[timeout]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=92</guid>
		<description><![CDATA[Story hour came early this week, when a colleague stuck his head in my office and asked why we wait before reusing an address on Windows Server 2003. So began a most harrowing tale, the strange case of the mysterious closing connections.
It came from the beyond
Once upon a time, in a protocol stack far, far [...]<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2010/06/02/closing-connections-and-the-tcp-sockets-heaven/">Closing Connections and the TCP Sockets Heaven</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Story hour came early this week, when a colleague stuck his head in my office and asked why we wait before reusing an address on Windows Server 2003. So began a most harrowing tale, the strange case of the mysterious closing connections.</p>
<h3>It came from the beyond</h3>
<p>Once upon a time, in a protocol stack far, far away, <a href="http://community.radvision.com/glossary/H245/">H.245</a> sockets were dying inexplicably. Packet captures on both sides saw the other side as closing the connection immediately after it was opened, causing the call to fail. It only happened during high load, and after further inquiry we discovered that it only happened when a socket was opened immediately after a socket with the same address was closed. Could it be that the socket was communicating with the dead?</p>
<h3>Where do dead sockets go?</h3>
<p><a href="http://www.flickr.com/photos/steelight/66130129/"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;'  class="alignleft" title="Do TCP sockets go to heaven when they close?" src="http://blog.radvision.com/images/2010/20100602-CodeOfContact-sockets-heaven.jpg" alt="" width="320" height="256" /></a>If they were good sockets, they go to socket heaven, also known as the TIME_WAIT state. In socket heaven, they wait until they are reborn. In Linux socket heaven, they wait 60 seconds. In Windows socket heaven, they wait 120 or 240 seconds, depending on the specific version. In socket terms, these times are an eternity, two eternities and four eternities accordingly. The socket&#8217;s address cannot be used in this time, but there is a shortcut: if the socket is set to reuse the address, it can be used again instantly.</p>
<p>Here&#8217;s the catch: if a packet somehow is delayed in the network, the new socket using the same addresses treats it as a packet meant for it. If the packet was meant to terminate the dead connection, for instance, if both sides terminated communications at the same time, the new socket will terminate. After close examination, we confirmed that this is what was happening in our case: both sides closed the H.245 connection at the same time, and then one of them reused the address and tried to reconnect, immediately receiving the connection close message left over from the previous connection and closing the connection and the call. We had to disable the &#8216;reuse address&#8217; option, which forces the connection to wait, which in turn can cause the ports to run out under high load.</p>
<p>So what can be done to solve this issue?</p>
<h3>1. Increase the size of heaven</h3>
<p>Windows used a default port range of 1025 through 4999, which isn&#8217;t nearly enough. In Windows Vista and in Windows Server 2008, the new default start port is 49152, and the default end port is 65535 &#8211; which should last until the ports are available again in any reasonable traffic. On Linux it should be higher, but it depends on the exact kernel used. There is a nice guide <a href="http://www.ncftp.com/ncftpd/doc/misc/ephemeral_ports.html">here</a> for increasing the port range on any system.</p>
<h3>2. Limit the time in heaven</h3>
<p>The fact is 60 seconds is a lot of time, not to mention 120 or 240 seconds. I recommend configuring Windows to a shorter delay (<a href="http://technet.microsoft.com/en-us/library/cc938217.aspx">here</a>), or tune up you Unix/Linux (<a href="http://www.cromwell-intl.com/security/security-stack-hardening.html">here</a> and <a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/tprf_tunelinux.html">here</a>). In fact, <a href="http://lmgtfy.com/?q=operating+system+tcp+tuning">let me Google that for you</a>. I see no reason to use anything above 60 seconds, and even 30 seconds seem like eternity, in network terms, unless you expect to work in a high latency network, in which case, just take the highest latency expected and double it.</p>
<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2010/06/02/closing-connections-and-the-tcp-sockets-heaven/">Closing Connections and the TCP Sockets Heaven</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.radvision.com/codeofcontact/2008/11/26/determining-a-timeout-on-that-network-event-of-yours-take-your-time/" title="Determining a Timeout on That Network Event of Yours? Take Your Time (November 26, 2008)">Determining a Timeout on That Network Event of Yours? Take Your Time</a> (4)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=euX9-cME5Ig:CvmrbjItLQo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=euX9-cME5Ig:CvmrbjItLQo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=euX9-cME5Ig:CvmrbjItLQo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=euX9-cME5Ig:CvmrbjItLQo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=euX9-cME5Ig:CvmrbjItLQo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=euX9-cME5Ig:CvmrbjItLQo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=euX9-cME5Ig:CvmrbjItLQo:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=euX9-cME5Ig:CvmrbjItLQo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=euX9-cME5Ig:CvmrbjItLQo:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/euX9-cME5Ig" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2010/06/02/closing-connections-and-the-tcp-sockets-heaven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2010/06/02/closing-connections-and-the-tcp-sockets-heaven/</feedburner:origLink></item>
		<item>
		<title>If You Were A Fly On The Wall At These Great Companies</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/dLBiR3uAvzI/</link>
		<comments>http://blog.radvision.com/codeofcontact/2010/04/14/if-you-were-a-fly-on-the-wall-at-these-great-companies/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 11:53:59 +0000</pubDate>
		<dc:creator>Ran Arad</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[buzz]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[interface]]></category>
		<category><![CDATA[KiSS]]></category>
		<category><![CDATA[RADVISION]]></category>
		<category><![CDATA[support]]></category>
		<category><![CDATA[VC240]]></category>
		<category><![CDATA[windows mobile]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=90</guid>
		<description><![CDATA[Here are a few conversations that went on (mostly in my feverish imagination) illustrating the consequences of our diminishing attention spans, and their exploitations.
Google offices, a few months ago
-       You see, the process is very streamlined.
-       Is it?
-       The user clicks &#8216;buzz&#8217;, gets a screen of privacy options, then a screen of his contacts to [...]<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2010/04/14/if-you-were-a-fly-on-the-wall-at-these-great-companies/">If You Were A Fly On The Wall At These Great Companies</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Here are a few conversations that went on (mostly in my feverish imagination) illustrating the consequences of our diminishing attention spans, and their exploitations.</p>
<p><em>Google offices, a few months ago</em></p>
<p><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  class="alignright" title="Google Buzz" src="http://blog.radvision.com/images/2010/20100414-CodeOfContact-Google-Buzz.jpg" alt="" width="180" height="227" />-       You see, the process is very streamlined.</p>
<p>-       Is it?</p>
<p>-       The user clicks &#8216;buzz&#8217;, gets a screen of privacy options, then a screen of his contacts to choose from.</p>
<p>-       You say?!</p>
<p>-       Ok, maybe it&#8217;s not that streamlined.</p>
<p>-       Is it.</p>
<p>-       I guess we could just start up with some defaults.</p>
<p>-       You say?</p>
<p>-       And pick all contacts as defaults, it will be ok for most people.</p>
<p>-       Is it…</p>
<p><em>Apple offices, a few months ago</em></p>
<p><a href="http://www.flickr.com/photos/ottopeura/4494329825/"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  class="alignright" title="Apple iPad" src="http://blog.radvision.com/images/2010/20100414-CodeOfContact-Apple-iPad.jpg" alt="" width="180" height="237" /></a>-       You see, sir, we have great plans for the iPad. We&#8217;ll add multitasking, drag and drop, an SD slot, flash support, a camera – two, in fact, and we&#8217;ll write an open SDK for it!</p>
<p>-       No, no, no, no, double-no, and <strong>big</strong> no.</p>
<p>-       What? But the new UI, it&#8217;s almost ready, we have a new concept that will re-re-re-invent the whole market.</p>
<p>-       I. Want.</p>
<p>-       Yes?</p>
<p>-       An iPhone.</p>
<p>-       Right…</p>
<p>-       Only</p>
<p>-       Yes…?</p>
<p>-       Bigger.</p>
<p>-       Bigger, sir?</p>
<p>-       Bigger.</p>
<p>-       Not, say, better, with more features, re-re-re-revolutionizing-</p>
<p>-       You have an iPhone, right?</p>
<p>-       Of course, sir.</p>
<p>-       Don&#8217;t you think it&#8217;s great?</p>
<p>-       Why, yes, sir!</p>
<p>-       I want it to be like the iPhone… only bigger.</p>
<p>-       Right on it, sir.</p>
<p><em>Microsoft offices, a few months ago</em></p>
<p>-       We have this smart copy-paste feature.</p>
<p>-       Which part of <a href="http://en.wikipedia.org/wiki/KISS_principle">KISS</a> did you fail to understand?</p>
<p>-       No, it&#8217;s really cool. It has a history, adapts to the destination, synchronizes, offers suggestions-</p>
<p>-       SUGGESTIONS? SUGGESTIONS?! We don&#8217;t want another clippy the sodding office paper clip on our hands, that&#8217;s the last thing we need now!</p>
<p>-       But most testers said-</p>
<p>-       Let me see that! Ha! 20% said it was &#8220;confusing at start&#8221;, and 40% said they &#8220;could have done without it&#8221;. Forty percent!</p>
<p>-       But-but-</p>
<p>-       Look here – the Windows 7 Phone Series will have NO copy-paste! None! Code it out, NOW!</p>
<p style="text-align: center"><a href="http://www.imagegenerator.net/create/clippy/"><img class="alignnone" title="Microsoft Clippy" src="http://blog.radvision.com/images/2010/20100414-CodeOfContact-Microsoft-Clippy.jpg" alt="" width="392" height="542" /></a></p>
<p><em> RADVISION offices, a few months ago</em></p>
<p><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  class="alignright" title="RADVISION VC240" src="http://blog.radvision.com/images/2010/20100414-CodeOfContact-RADVISION-VC240.jpg" alt="" width="240" height="160" />-       You see, the VC240 interface is much simpler than that of existing endpoints. We got great reviews on it.</p>
<p>-       Yes, I see. Just dial and send. All the options are tucked away in menus.</p>
<p>-       No interface like it. Great reviews.</p>
<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2010/04/14/if-you-were-a-fly-on-the-wall-at-these-great-companies/">If You Were A Fly On The Wall At These Great Companies</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.radvision.com/codeofcontact/2010/06/30/vc240-is-it-hack-worthy/" title="VC240 &#8211; Is It Hack-Worthy? (June 30, 2010)">VC240 &#8211; Is It Hack-Worthy?</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/11/11/visual-studio-2005-and-beyond/" title="Visual Studio 2005 And Beyond (November 11, 2009)">Visual Studio 2005 And Beyond</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/09/23/interface-design-perceptual-control-theory/" title="Interface Design &amp; Perceptual Control Theory (September 23, 2009)">Interface Design &amp; Perceptual Control Theory</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/04/07/integrity-porting/" title="Integrity Porting (April 7, 2009)">Integrity Porting</a> (1)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2010/01/20/human-vs-android/" title="Human Vs Android (January 20, 2010)">Human Vs Android</a> (2)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=dLBiR3uAvzI:BtBILTGTmjI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=dLBiR3uAvzI:BtBILTGTmjI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=dLBiR3uAvzI:BtBILTGTmjI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=dLBiR3uAvzI:BtBILTGTmjI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=dLBiR3uAvzI:BtBILTGTmjI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=dLBiR3uAvzI:BtBILTGTmjI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=dLBiR3uAvzI:BtBILTGTmjI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=dLBiR3uAvzI:BtBILTGTmjI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=dLBiR3uAvzI:BtBILTGTmjI:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/dLBiR3uAvzI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2010/04/14/if-you-were-a-fly-on-the-wall-at-these-great-companies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2010/04/14/if-you-were-a-fly-on-the-wall-at-these-great-companies/</feedburner:origLink></item>
		<item>
		<title>A New GA is Born</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/wnpMCPsnmSc/</link>
		<comments>http://blog.radvision.com/codeofcontact/2010/03/31/a-new-ga-is-born/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 14:01:15 +0000</pubDate>
		<dc:creator>Ofer Goren</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SDKs]]></category>
		<category><![CDATA[Android OS]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[IMS]]></category>
		<category><![CDATA[Ofer Goren]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[product manager]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[source code]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=88</guid>
		<description><![CDATA[[Ofer Goren is the pen name I choose... no, he's the guy I hired... you see, I'm on hiatus... (Sigh) I should really start writing in my blog. This time we get a glimpse into the process of turning simple code into the products we all know and love.]
We&#8217;ve just released a new version of [...]<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2010/03/31/a-new-ga-is-born/">A New GA is Born</a></p>
]]></description>
			<content:encoded><![CDATA[<p><em>[<a href="http://il.linkedin.com/pub/ofer-goren/0/150/31a">Ofer Goren</a> is the pen name I choose... no, he's the guy I hired... you see, I'm on hiatus... (Sigh) I should really start writing in my blog. This time we get a glimpse into the process of turning simple code into the products we all know and love.]</em></p>
<p>We&#8217;ve just released a new version of the <a href="http://www.radvision.com/Products/Developer/VoIP-Developer-Tools/SIP-Developer-Suite/">SIP Developer Suite</a>. In the following post, I will try and describe the different steps required for such a miracle to happen. After you&#8217;ve finished reading, I hope you will have a better understanding of what we&#8217;re doing here, while waiting for our crops to grow in the <a href="http://www.farmville.com/">farm</a>.</p>
<h3>Step One: Developing New Features</h3>
<p>This is the obvious part. It starts with our Product Manager randomly selecting some features, out of those RFCs or drafts for RFCs on the <a href="http://www.ietf.org/">IETF site</a>. Then he tells us something like &#8220;after carefully reviewing the market, and while visiting every single customer we have, I&#8217;ve decided that our SIP suite must support&#8230;&#8221; these features. &#8220;<a href="http://www.urbandictionary.com/define.php?term=make%20it%20so,%20Number%20One">Make it so, Number one</a>!&#8221;</p>
<p>In this version, for example, we added support for <a href="http://www.faqs.org/rfcs/rfc4662.html">RFC 4662</a>. It is a very important addition, that deals with processing of&#8230; um&#8230; some sort of&#8230; and also with&#8230; and that too. Another thing we added is support for Android OS, <a href="http://blog.radvision.com/codeofcontact/2010/01/20/human-vs-android/">as I told you before</a>. And some new headers that were added as part of the <a href="http://www.3gpp.org/">3GPP initiative</a>.</p>
<p style="text-align: center"><img class="alignnone" title="Slow going" src="http://blog.radvision.com/images/2010/20100331-CodeOfContact-slow.jpg" alt="" width="350" height="232" /></p>
<p>Once that phase was finished, the real complex fun started.</p>
<h3>Step Two: Compiling on all Supported Operating Systems and Testing</h3>
<p>I mentioned several times the fact that the SIP suite supports many OS &#8211; from Microsoft Windows with its different flavors to embedded OS, such as VxWorks, PSOS, Nucleus and a lot of others, and even some real strange ones, like the Mac OS.</p>
<p>Once we finish developing, it is time to check our code and verify that everything is compile-able at least. The fact that we have an OS-agnostic layer helps, but there are still differences that should be taken care of. OpenSSL, for example, has different const-qualifiers in some functions for VxWorks comparing to Solaris due to different versions installed with each. Tcl/Tk has similar issues.</p>
<p>Testing is a very important thing to do. Or so they say. I&#8217;m still waiting for a proof. However, till then, we&#8217;re testing. And that means running every single sample application we have on various OS. Then, we run our internal multi-thread tester to check for <a href="http://blog.radvision.com/codeofcontact/2009/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/">appropriate multi-thread behavior</a>. While doing that, we use our test application to test new features as well as regression testing.</p>
<p>Of course, our QA team is also in the loop, sticking their fingers inside our precious code, finding all those things we deliberately put in there to see if they find them.</p>
<h3>Step Three: Compilation Flags &#8211; fun fun fun</h3>
<p>Reading through our readme files, one can see that the SIP suite has a nice list of compilation flags to suit various needs and features. IMS, SIMPLE and SRV are only some examples. Compiling with all the combinations available can be quite amusing. On a slow PC, it can even be a good excuse for a day off. If you want to cause one of us developers to develop an acute case of heart disease with high blood pressure, ask him to compile with NO_TRHEADS and NO_LOGS. Then, ask him to fix all the resulted warnings. Its kinda funny to see someone with steam coming out of his ears.</p>
<h3>Step Four: Documentation</h3>
<p>When talking about &#8220;documentation&#8221;, I do not mean inline documentation. Like every other good programmer, we are documenting as we write our code&#8230; ahmm, right. But then, we need to put them on the .chm files, .pdf files, release notes and readme files, and send them for review to our technical writer, and then fix everything after she finds out that English is the only language we are NOT using. At least, not the one spoken in the civilized world. Then, we put those fixes in the inline documentation again, re-compile everything just to verify we didn&#8217;t accidently comment-out main(), see something you forgot to pass on, send it back to the tech-writer, and so forth. At that point &#8211; usually three days before the release &#8211; you might see our tech-writer lurking the corridors holding a knife, hunting the last person who sent her those last minute additions.</p>
<h3>Step Five: Packaging</h3>
<p>Linux code is tar-ed and gzip-ed, with the source code CR&#8217;d. Windows code is zipped, with the source code CRLF&#8217;d. Common-Core is a separate package. SigComp as well. As is IMS, SIMPLE, etc. You get the idea. Everything should be packaged according to its designated OS, with only the relevant files (no point in packaging an MSDev vcproj files for Linux compilation, right?), and with the appropriate compression tool. We have a script for that, but this script should be updated every time a new module is added, whenever a new OS is supported, and whenever we feel bored and want to play with it a little.</p>
<p>So we package, and then un-package and test the results to see that everything is compiling and running. Of course, it fails dramatically, and we need to debug the script to see where we messed up, re-package, and again. And again. And again.</p>
<p>Once all is working, always on the last minute of the last day of the promised Q, we ship it.</p>
<h3>Step Six: Vacation</h3>
<p style="text-align: center"><img class="alignnone" title="Vacation" src="http://blog.radvision.com/images/2010/20100331-CodeOfContact-vacation.jpg" alt="" width="450" height="295" /></p>
<p>Yeah, right!</p>
<h3>Conclusion</h3>
<p>There is no moral in this story. Just a description of what I was doing since my last post here. Like always, it was a stressful month. Now that I got Tsahi off my back, I&#8217;m off to the beach.</p>
<p>And when I&#8217;m back, I am sure we will organize things here a bit better for the next time. I will mention that in the kick-off meeting&#8230;</p>
<p style="text-align: center"><a href="http://geekandpoke.typepad.com/geekandpoke/2010/02/this-time.html"><img class=" alignnone" title="Kickoff meeting" src="http://blog.radvision.com/images/2010/20100331-CodeOfContact-kickoff.jpg" alt="" width="450" height="637" /></a></p>
<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2010/03/31/a-new-ga-is-born/">A New GA is Born</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.radvision.com/codeofcontact/2010/01/20/human-vs-android/" title="Human Vs Android (January 20, 2010)">Human Vs Android</a> (2)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/03/25/software-is-the-new-hardware/" title="Software Is the New Hardware (March 25, 2009)">Software Is the New Hardware</a> (2)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/04/07/integrity-porting/" title="Integrity Porting (April 7, 2009)">Integrity Porting</a> (1)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2008/08/06/why-is-voip-so-hard-on-firewalls-and-nat/" title="Why is VoIP so hard on firewalls and NATs? (August 6, 2008)">Why is VoIP so hard on firewalls and NATs?</a> (1)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/11/11/visual-studio-2005-and-beyond/" title="Visual Studio 2005 And Beyond (November 11, 2009)">Visual Studio 2005 And Beyond</a> (0)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=wnpMCPsnmSc:Dtpx0v3AMYU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=wnpMCPsnmSc:Dtpx0v3AMYU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=wnpMCPsnmSc:Dtpx0v3AMYU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=wnpMCPsnmSc:Dtpx0v3AMYU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=wnpMCPsnmSc:Dtpx0v3AMYU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=wnpMCPsnmSc:Dtpx0v3AMYU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=wnpMCPsnmSc:Dtpx0v3AMYU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=wnpMCPsnmSc:Dtpx0v3AMYU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=wnpMCPsnmSc:Dtpx0v3AMYU:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/wnpMCPsnmSc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2010/03/31/a-new-ga-is-born/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2010/03/31/a-new-ga-is-born/</feedburner:origLink></item>
		<item>
		<title>Human Vs Android</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/oqxldckqvlE/</link>
		<comments>http://blog.radvision.com/codeofcontact/2010/01/20/human-vs-android/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 11:41:53 +0000</pubDate>
		<dc:creator>Ofer Goren</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[abstraction layer]]></category>
		<category><![CDATA[Android OS]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Ofer Goren]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[porting]]></category>
		<category><![CDATA[RADVISION]]></category>
		<category><![CDATA[sdk]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[SIP Stack]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=86</guid>
		<description><![CDATA[[Ofer Goren really needs no introductions, does he? He writes here more than I do, lately. Anyway, this time he shares a harrowing tale of Android OS and job insecurities of a completely different kind.]
The Android OS is out for quite some time. Recently it was decided that we should bring our SIP Stack revolution [...]<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2010/01/20/human-vs-android/">Human Vs Android</a></p>
]]></description>
			<content:encoded><![CDATA[<p><em>[<a href="http://il.linkedin.com/pub/ofer-goren/0/150/31a">Ofer Goren</a> really needs no introductions, does he? <a href="http://blog.radvision.com/codeofcontact/tag/ofer-goren/">He writes here more than I do, lately</a>. Anyway, this time he shares a harrowing tale of Android OS and job insecurities of a completely different kind.]</em></p>
<p>The <a href="http://developer.android.com/guide/basics/what-is-android.html">Android OS</a> is out for quite some time. Recently it was decided that we should bring our SIP Stack revolution to this uncharted world It was a challenging task, which only a few can take: .  a new operating system, to add to the many that our stack already works with. I boldly took the responsibility on myself, and I emerged triumphant. Well, kinda.</p>
<p><img class="alignnone" title="Human versus Android (OS)" src="http://blog.radvision.com/images/2010/20100120-CodeOfContact-Human-vs-Android.jpg" alt="" width="323" height="372" /></p>
<h3>The First Hesitant Step</h3>
<p>The heavy-duty work was done by our Common Core team. They are the experts in porting our OS-abstraction layer APIs to work with new operating systems. This layer helps us, the rest of the developers, to work without directly interacting with the OS bits and bytes, pipes and ports and whatnot. So what&#8217;s the big deal in another OS to port to, right? All you have to do is <a href="http://en.wikipedia.org/wiki/RTFM">RTFM</a>. Such an easy job those Common Core people have&#8230;.</p>
<p>Therefore, after this &#8220;unimportant&#8221; phase, it was time for me to work my magic. Of course, with the help of our Common Core team, again. Why? Because the Android&#8217;s way of compiling code is quite different than the one we usually use. The first thing I had to do is check out the documentation of the Android&#8217;s Makefile system. It was buried deep in the NDK documentation (&lt;NDK_INST_DIR&gt;/docs). That took me some time. Or at least that&#8217;s what <a href="http://www.dilbert.com/strips/comic/2009-12-16/">I told my boss</a> when asked about my slow progress.</p>
<h3>We&#8217;re On It, Baby</h3>
<p>So we were done with the porting, and we knew how to name the android Makefile (android.mk &#8211; Ingenious!). Our system started humming and making start-up sounds. Now came the hard part: should we force Android developers, our existing and new customers, to work our way (and as god intended, if I may say), or submit ourselves to Google&#8217;s will?</p>
<p>The thing is &#8211; if you wish to compile your code, you need to place it under one of the Android NDK folders. You can&#8217;t just place your code anywhere you want, as you used to with *nix or Windows. You must have at least one anchor well placed under the environment tree. Out of generosity, we decided to let Google win this time.</p>
<p>After some additional steps (write a JNI wrapper, place an Android.mk file in almost every folder, etc.), we were able to compile everything. Experts as we are, it all ran smoothly the first time we tested it. That is, if you agree to call that time we tried it, after 3 weeks of continuous debugging because of crashes, the &#8220;first time&#8221;. But what are 3 weeks compared to eternity, right?</p>
<h3>So What You Should Do</h3>
<p>If you&#8217;re going to develop some code under the Android platform, there are some things you should know. First, you&#8217;ll need to download and install the Android <a href="http://developer.android.com/sdk/index.html">SDK</a> and <a href="http://developer.android.com/sdk/ndk/1.5_r1/index.html">NDK</a>. You should also write some pieces of JNI code that will connect the Android GUI to the C code you&#8217;re writing. It will also be a good idea to download and install <a href="http://www.eclipse.org/">Eclipse</a>, and then install <a href="http://developer.android.com/sdk/eclipse-adt.html">Android ADT plug-in for Eclipse</a>. For more information, you might want to read <a href="http://developer.android.com/guide/tutorials/hello-world.html">this article</a>.</p>
<h3>Conclusions</h3>
<p>It was a nice experience. People actually thought I work on Android (I didn&#8217;t. Remember the OS-abstraction layer?) and I could see them gather in the corridors, whispering about the cool job I have. Hey, if they are already staring at me, I rather think this is what they&#8217;re thinking.</p>
<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2010/01/20/human-vs-android/">Human Vs Android</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.radvision.com/codeofcontact/2009/11/11/visual-studio-2005-and-beyond/" title="Visual Studio 2005 And Beyond (November 11, 2009)">Visual Studio 2005 And Beyond</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/04/07/integrity-porting/" title="Integrity Porting (April 7, 2009)">Integrity Porting</a> (1)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2010/03/31/a-new-ga-is-born/" title="A New GA is Born (March 31, 2010)">A New GA is Born</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/" title="About The Intel Threading Tools, Our SIP Stack, and Me (March 18, 2009)">About The Intel Threading Tools, Our SIP Stack, and Me</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/03/25/software-is-the-new-hardware/" title="Software Is the New Hardware (March 25, 2009)">Software Is the New Hardware</a> (2)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=oqxldckqvlE:1tV4X82GQaQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=oqxldckqvlE:1tV4X82GQaQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=oqxldckqvlE:1tV4X82GQaQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=oqxldckqvlE:1tV4X82GQaQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=oqxldckqvlE:1tV4X82GQaQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=oqxldckqvlE:1tV4X82GQaQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=oqxldckqvlE:1tV4X82GQaQ:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=oqxldckqvlE:1tV4X82GQaQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=oqxldckqvlE:1tV4X82GQaQ:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/oqxldckqvlE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2010/01/20/human-vs-android/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2010/01/20/human-vs-android/</feedburner:origLink></item>
		<item>
		<title>Visual Studio 2005 And Beyond</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/GkVT6IXBck0/</link>
		<comments>http://blog.radvision.com/codeofcontact/2009/11/11/visual-studio-2005-and-beyond/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 14:10:43 +0000</pubDate>
		<dc:creator>Ofer Goren</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[Ofer Goren]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[porting]]></category>
		<category><![CDATA[Programmers]]></category>
		<category><![CDATA[RADVISION]]></category>
		<category><![CDATA[sdk]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[stack]]></category>
		<category><![CDATA[support]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[toolkit]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=84</guid>
		<description><![CDATA[[Ofer Goren is a frequent guest in this blog. He has posted here on his experiences with multicore optimization, as well as a follow up post to that. Today's treat is of a frequent developer problem - backwards compatibility.] 
As mentioned in one of my previous posts, we do have customers. Some of those customers [...]<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2009/11/11/visual-studio-2005-and-beyond/">Visual Studio 2005 And Beyond</a></p>
]]></description>
			<content:encoded><![CDATA[<p><em>[<a href="http://www.linkedin.com/pub/ofer-goren/0/150/31a">Ofer Goren</a> is a frequent guest in this blog. He has posted here on his <a href="http://blog.radvision.com/codeofcontact/2009/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/">experiences with multicore optimization</a>, as well as a <a href="http://blog.radvision.com/codeofcontact/2009/06/17/sip-multicore-optimization-the-aftershock/">follow up</a> post to that. Today's treat is of a frequent developer problem - backwards compatibility.] </em></p>
<p>As mentioned in <a href="http://blog.radvision.com/codeofcontact/2009/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/">one of my previous posts</a>, we do have customers. Some of those customers do have special needs (don&#8217;t they all?). Lately, one of our customers asked us to update our workspaces, so that they can use our product with Microsoft&#8217;s Visual Studio 2008.</p>
<h3>The Whole IDEa</h3>
<p>Up until now, we had two types of solutions for the Windows platform flavor of our toolkit: the &#8220;legacy&#8221; Visual Studio 6.0 (or VC6) .<em>dsw</em> files, and the Visual Studio 2005 (or VS2005) .<em>sln</em> files. That was OK, because we actually had to support only one type. After all, who else but us still uses Visual Studio 6.0? But we liked it: the IDE was clear, menus were fine, <a href="http://www.wholetomato.com/">Visual Assist</a> supported it &#8212; We were happy. In fact, most of our development was done using this IDE version, while Visual Studio 2005 was used mainly for testing before releasing new stack versions for those of you out there, the adventurer types, who call a 2-years-old technology &#8220;new&#8221;.</p>
<h3>The New Found Problem</h3>
<p>We have many customers. It&#8217;s a problem. We want to support them all. It&#8217;s even a bigger problem. If they want to work with VC6, we should have a solution for that. And if they want to work with VS2005, we should also support that.</p>
<p>From file-tree perspective, we need to support these two options at the same time. We also have to support Unix and Linux flavors, as well as <a href="http://blog.radvision.com/codeofcontact/2009/04/07/integrity-porting/">other embedded operating systems</a>, but that&#8217;s a different story.</p>
<p>Back then, when we added support for VS2005, life was easy. VC6 had .<em>dsw</em> and .<em>dsp</em> files, and VS2005 had the matching .<em>sln</em> and .<em>vcproj</em> files. Two different set of files, unique extensions. But how do you support two versions of the IDE that have the <strong>same</strong> file extensions?</p>
<p>You see, with Visual Studio 2008 (VS2008), Microsoft didn&#8217;t change the file extensions. You have the same .<em>sln</em> and .<em>vcproj</em> files as in VS2005. The contents are different, but the extensions are the same. We needed to differentiate them somehow, but not work too hard on maintaining those 2 sets.</p>
<p>And it gets worse: If you try to open a VS2005 .<em>sln</em> file in VS2008, it will automatically convert it and all of its contained .<em>vcproj</em> files to VS2008 format. If you then try to re-open them in VS2005, Visual Studio will tell you that you can&#8217;t:</p>
<p><img class="alignnone" title="Old visual studio notice" src="http://blog.radvision.com/images/2009/20091111-CodeOfContact-old-visual-studio-notice.jpg" alt="" width="600" height="115" /></p>
<p>Why? <a href="http://www.youtube.com/watch?v=HfHbw3n0EIM&amp;feature=channel">Because they can</a>. A possible solution for this may be to put the VS2008 .<em>sln</em> files in a different folder than the VS2005, but our customers are already used to finding our .<em>sln files</em> and <em>Makefiles</em> (for non-Windows OS) in the same folder. We can use 2 different sets of files, but we will have to maintain them, which is time-consuming. And we also had to think of the future &#8211; after all, VS2010 is coming, and the VS train doesn&#8217;t stop there. The horror&#8230;</p>
<p>This was frustrating, really. I get that some general information about your project should be aggregated in some file: dependencies, project settings and such. But what crucial information should be saved there, that needs to be different between versions? How come no one thinks of me, the programmer, at the end of the <strong>fool</strong> chain, who needs to support (at least) 2 Visual Studio IDEs in parallel?</p>
<h3><strong>The Easy Solution is Always Worth a Shot</strong></h3>
<p>Yes, we eventually decided <strong>not</strong> to support that customer, and asked him to contact our competitor. Hopefully, no other customer will have such a ridiculous request.</p>
<p style="text-align: right"><em><a href="http://www.flickr.com/photos/bondidwhat/402089763/"><img class="alignnone" title="Problem solved" src="http://blog.radvision.com/images/2009/20091111-CodeOfContact-problem-solved.jpg" alt="" width="350" height="263" /></a><br />
</em></p>
<p>Well. Not really. Our PM didn&#8217;t really agree to that solution.</p>
<h3><strong>Alternate Ending: A Real Solution</strong></h3>
<p>My bosses in Radvision have foreseen the future, and sent me to a <a href="http://en.wikipedia.org/wiki/Perl">Perl</a> course a while ago. Seeing that it was good, they said &#8220;let&#8217;s send him to another course. Maybe cooking. With enough courses, the solution will eventually present itself&#8221;. I didn&#8217;t object, of course, but the budget controller did. So it was just Perl.</p>
<p>We decided that all of our engineers will start working with VS2008 when developing. And we will maintain 2 sets of .<em>sln</em>/.<em>vcproj file</em>s: VS2008 files will have the suffix  &#8220;_vs2008&#8243; added to them; VS2010 files will have the suffix &#8220;_vs2010&#8243;. And VS2012 files?  We&#8217;re just programmers. We&#8217;ll have to wait for the PM to decide what suffix to use there.</p>
<p>And, we will write two Perl scripts:</p>
<p>The first will be used <strong>once</strong>, to duplicate all our .<em>sln</em>/.<em>vcproj</em> files while concatenating their copies with the new suffix to their names. The script will also update the internals of the .<em>sln</em> files to use the new project file names. We have dozens of .<em>vcproj</em> files, so an automatic operation of a script is required. Once done, the rest will be magically completed by the upgrade wizard of VS2008. We&#8217;re even making this wonderful script available to you, if you think it might assist you. Just <a href="http://blog.radvision.com/codeofcontact/files/2009/11/vsupgrade.pl">follow this link</a>.</p>
<p>The second script will be used to downgrade the VS2008 files to VS2005 files before releasing new versions to customers. So we will need to maintain two (more in the future) sets of VS files, but scripts will be used to do the editing tasks (removing new attributes added to new .<em>sln file</em>s , altering .<em>vcproj</em> files, etc.), and all we will need to do is to just check that everything is compiling and running at the end.</p>
<p>And voila &#8212;</p>
<table border="0" cellspacing="0" cellpadding="0" width="601">
<tbody>
<tr>
<td width="295" valign="top"><img class="alignnone" title="Before" src="http://blog.radvision.com/images/2009/20091111-CodeOfContact-before.jpg" alt="" width="290" height="341" /></td>
<td width="306" valign="top"><img class="alignnone" title="After" src="http://blog.radvision.com/images/2009/20091111-CodeOfContact-after.jpg" alt="" width="290" height="331" /></td>
</tr>
<tr>
<td width="295" valign="top">Before</td>
<td width="306" valign="top">After</td>
</tr>
</tbody>
</table>
<h3><strong>Conclusions</strong></h3>
<p>Here&#8217;s my 2 cents (hey, there&#8217;s a recession going on!):</p>
<ul>
<li>When developing a system,      think about the future as well. In the VS case, I don&#8217;t see any reason why      VS2005 shouldn&#8217;t open VS2008 .<em>sln file</em>s, chew up everything it can,      and drop everything it doesn&#8217;t understand.</li>
<li>On the bright side, XML is      a good option when considering making a configuration file, as in the case      of .<em>sln</em> and .<em>vcproj</em> files. A simple scripting language can      then greatly help when deciding to do some automatic operations on them.</li>
</ul>
<p>Oh &#8211; and choose your customers wisely. <img src='http://blog.radvision.com/codeofcontact/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2009/11/11/visual-studio-2005-and-beyond/">Visual Studio 2005 And Beyond</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.radvision.com/codeofcontact/2009/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/" title="About The Intel Threading Tools, Our SIP Stack, and Me (March 18, 2009)">About The Intel Threading Tools, Our SIP Stack, and Me</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/06/17/sip-multicore-optimization-the-aftershock/" title="SIP Multicore optimization – the aftershock (June 17, 2009)">SIP Multicore optimization – the aftershock</a> (2)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2010/01/20/human-vs-android/" title="Human Vs Android (January 20, 2010)">Human Vs Android</a> (2)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/04/07/integrity-porting/" title="Integrity Porting (April 7, 2009)">Integrity Porting</a> (1)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/01/21/todo-or-not-todo-that-is-the-question/" title="TODO or not TODO, That is the Question (January 21, 2009)">TODO or not TODO, That is the Question</a> (0)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=GkVT6IXBck0:6CFUcm8xdDg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=GkVT6IXBck0:6CFUcm8xdDg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=GkVT6IXBck0:6CFUcm8xdDg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=GkVT6IXBck0:6CFUcm8xdDg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=GkVT6IXBck0:6CFUcm8xdDg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=GkVT6IXBck0:6CFUcm8xdDg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=GkVT6IXBck0:6CFUcm8xdDg:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=GkVT6IXBck0:6CFUcm8xdDg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=GkVT6IXBck0:6CFUcm8xdDg:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/GkVT6IXBck0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2009/11/11/visual-studio-2005-and-beyond/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2009/11/11/visual-studio-2005-and-beyond/</feedburner:origLink></item>
		<item>
		<title>Interface Design &amp; Perceptual Control Theory</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/2yFTopInUac/</link>
		<comments>http://blog.radvision.com/codeofcontact/2009/09/23/interface-design-perceptual-control-theory/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 11:51:41 +0000</pubDate>
		<dc:creator>Ran Arad</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SDKs]]></category>
		<category><![CDATA[access]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[BEEHD]]></category>
		<category><![CDATA[callbacks]]></category>
		<category><![CDATA[conflicts]]></category>
		<category><![CDATA[customers]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[interfaces]]></category>
		<category><![CDATA[Interoperability]]></category>
		<category><![CDATA[problem solving]]></category>
		<category><![CDATA[protocol stack]]></category>
		<category><![CDATA[protocol stacks]]></category>
		<category><![CDATA[RADVISION]]></category>
		<category><![CDATA[rock band]]></category>
		<category><![CDATA[rules]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sdk]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[Simplicity]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[support]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=82</guid>
		<description><![CDATA[It&#8217;s been a (long) while, but I&#8217;m finally back to continue my discussion of Dan Teasdale&#8217;s Design Lessons Learned From Rock Band. Dan brings up issues of design, re-design, software development cycles, management, communities and dealing with the unexpected that are much more universal than just game design. I discussed the One Question Principle in [...]<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2009/09/23/interface-design-perceptual-control-theory/">Interface Design &amp; Perceptual Control Theory</a></p>
]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a (long) while, but I&#8217;m finally back to continue my discussion of <a href="http://dantdesign.blogspot.com/2009/04/gdc-slides.html">Dan Teasdale&#8217;s Design Lessons Learned From Rock Band</a>. Dan brings up issues of design, re-design, software development cycles, management, communities and dealing with the unexpected that are much more universal than just game design. I discussed <a href="http://blog.radvision.com/codeofcontact/2009/05/13/developing-products-around-the-one-question/">the One Question Principle</a> in the previous post, and in this one, I&#8217;ll consider the second principle he discusses &#8211; the Perceptual Control Theory (PCT).</p>
<h3>The What What What?</h3>
<p>If you&#8217;re wondering what, it doesn&#8217;t really matter. You can read <a href="http://en.wikipedia.org/wiki/Perceptual_control_theory">the Wikipedia</a> page , but Dan only refers to a single element of the whole theory, and here&#8217;s the relevant Wikipedia quote:</p>
<blockquote><p>When two systems are controlling the same variable with different goals, they are in conflict. When two opposing systems are locked into a static pattern, it is a <strong>source of psychological distress</strong>.</p></blockquote>
<p>And also:</p>
<blockquote><p>An internal conflict exists when a patient wants a perception to be in <strong>two incompatible states</strong>; the patient wants but doesn&#8217;t want a certain perception. For example, a person wants to eat in a healthy way but winds up eating too much or eats the wrong things.</p></blockquote>
<p>Bear in mind that this theory relates to living organisms (animals, humans) but also to automatic systems. To sum up, we are talking about the case where someone, usually your customer, wants two different things to happen in the same time &#8211; he wants automation, reliability and simplicity, and at the same time, he wants control, versatility and transparency. Since your product can compromise these two ends, at best, the real problem is not in your product, but in how it is perceived by the customers. This perception is something you can control.</p>
<p>Take, for example, our BEE<strong>HD</strong> application.</p>
<h3>SDK vs. Application</h3>
<p>RADVISION&#8217;s Technology Business Unit (TBU), which I am part of, &#8220;manufactures&#8221; mostly Software Development Kits (SDKs), or &#8220;Protocol Stacks&#8221; as we fondly call them. These stacks translate the application&#8217;s &#8220;wishes&#8221; to the protocol level, meaning that if the application wants to send some indication, it calls the appropriate Stack API, and the stack builds and sends the appropriate message, notifies the application as to the response, etc.</p>
<p>However, applications written above the SDK tend to have &#8220;special needs&#8221;, for instance they want specific changes in the messages or proprietary messages. That is why our SDKs have a lot of hooks and callbacks, allowing application level control over even the most basic functions of the stack.</p>
<p>The <a href="http://www.radvision.com/Products/Developer/BEE/BEEHD/default.htm">BEE<strong>HD</strong></a>, for instance, is a rather closed application. Well, it&#8217;s almost closed &#8211; the APIs are the closest we could come to GUI buttons (while leaving the actual graphics to the customer). Some customers are ok with that, and are actually glad to leave concerns such as interoperability to us. Other customers are, well, used to working above SDKs, and their major complaint are &#8220;why can&#8217;t we change this?&#8221; or &#8220;why can&#8217;t we do things another way?&#8221;</p>
<p>There are a few possible answers:</p>
<p>1. Explain that this is an application, not a SDK, and it doesn&#8217;t work that way.</p>
<p>2. Change the application to allow the SDK-level access.</p>
<p>Both are pretty problematic: with option 1, you get frustrated customers; with option 2, you enter debugging hell when your application logic tries to cope with all the strange changes that the SDK level access imposes on it.</p>
<h3>Higher Level Control Systems</h3>
<p>As we learn from the PCT, &#8220;An internal conflict exists when a patient wants a perception to be in two incompatible states&#8221;. However, we also learn that &#8220;Higher level control systems may seek perceptions that don&#8217;t produce the conflict&#8221;, meaning that if our customers have a conflict resulting from conflicting needs, we but invoke higher level systems to resolve the conflicts &#8211; so we did.</p>
<p>What we did is sit down with the customer to talk, and reach answer no. 3:</p>
<p>3. Add the required (low-level) features as services controlled by (high-level) APIs.</p>
<p><a href="http://www.flickr.com/photos/iain/137546399/"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  class="alignright" title="More control under the hood" src="http://blog.radvision.com/images/2009/20090923-CodeOfContact-more-control.jpg" alt="" width="240" height="320" /></a>Notice the difference between a feature, such as &#8220;add this field to that message&#8221;, and a service, such as &#8220;be compatible with this device&#8221; &#8211; services are our higher-level control systems. Simply put &#8211; we learn from our customers, and improve our product for the next customer. Think of us as car manufacturers adding a sports mode to accommodate the &#8217;sporty&#8217; drivers and not just the &#8216;calm&#8217; ones. The car is a &#8220;closed application&#8221;, but instead of forcing hot rods to mess with the engine to squeeze out more performance, the car is made with a high-level control to accommodate them.</p>
<p>To prevent the distress from occurring in the first place, we could add to the product description something like &#8220;the BEE<strong>HD</strong> application supports several services and modes of operation to accommodate different environments and requirements. If you cannot find a suitable service in the current offering, please contact RADVISION&#8217;s customer support with the required services, and we will implement one according to you needs&#8221;.</p>
<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2009/09/23/interface-design-perceptual-control-theory/">Interface Design &amp; Perceptual Control Theory</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.radvision.com/codeofcontact/2009/04/08/lessons-learned-from-rock-band/" title="Lessons Learned From Rock Band (April 8, 2009)">Lessons Learned From Rock Band</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/04/07/integrity-porting/" title="Integrity Porting (April 7, 2009)">Integrity Porting</a> (1)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/11/11/visual-studio-2005-and-beyond/" title="Visual Studio 2005 And Beyond (November 11, 2009)">Visual Studio 2005 And Beyond</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/03/25/software-is-the-new-hardware/" title="Software Is the New Hardware (March 25, 2009)">Software Is the New Hardware</a> (2)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/05/13/developing-products-around-the-one-question/" title="Developing Products Around The One Question (May 13, 2009)">Developing Products Around The One Question</a> (0)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=2yFTopInUac:vFj79eOkU_c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=2yFTopInUac:vFj79eOkU_c:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=2yFTopInUac:vFj79eOkU_c:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=2yFTopInUac:vFj79eOkU_c:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=2yFTopInUac:vFj79eOkU_c:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=2yFTopInUac:vFj79eOkU_c:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=2yFTopInUac:vFj79eOkU_c:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=2yFTopInUac:vFj79eOkU_c:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=2yFTopInUac:vFj79eOkU_c:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/2yFTopInUac" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2009/09/23/interface-design-perceptual-control-theory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2009/09/23/interface-design-perceptual-control-theory/</feedburner:origLink></item>
		<item>
		<title>SIP Multicore optimization – the aftershock</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/3rjy1bb5LAA/</link>
		<comments>http://blog.radvision.com/codeofcontact/2009/06/17/sip-multicore-optimization-the-aftershock/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 13:06:18 +0000</pubDate>
		<dc:creator>Ofer Goren</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[Implementation]]></category>
		<category><![CDATA[Intel Parallel Amplifier]]></category>
		<category><![CDATA[Intel Thread Profiler]]></category>
		<category><![CDATA[Intel threading tools]]></category>
		<category><![CDATA[multi threading]]></category>
		<category><![CDATA[Multi-core]]></category>
		<category><![CDATA[Multi-core processors]]></category>
		<category><![CDATA[Ofer Goren]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[product manager]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[RADVISION]]></category>
		<category><![CDATA[SIP Stack]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[stack]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=80</guid>
		<description><![CDATA[[By now, you should all know Ofer Goren.. He has guest posted here on his experiences with multicore optimization. Well, he's back,  along with the aftershock effect of the  work he did.] 
At the last Intel seminar I participated in, James Reinders, the Chief Software Evangelist &#38; Director of Software Development Products at [...]<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2009/06/17/sip-multicore-optimization-the-aftershock/">SIP Multicore optimization – the aftershock</a></p>
]]></description>
			<content:encoded><![CDATA[<p><em>[By now, you should all know </em><a href="http://www.linkedin.com/pub/ofer-goren/0/150/31a"><em>Ofer Goren</em></a><em>.. He has guest posted here on his </em><a href="http://blog.radvision.com/codeofcontact/2009/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/"><em>experiences with multicore optimization</em></a><em>. Well, he's back,  along with the aftershock effect of the  work he did.] </em></p>
<p>At the last Intel seminar I participated in, <a href="http://software.intel.com/en-us/blogs/author/james-reinders/">James Reinders</a>, the Chief Software Evangelist &amp; Director of Software Development Products at Intel, made a great comment when asked a question.  &#8220;Intel has no opinion yet on that matter. I&#8217;ll give you my opinion, which usually becomes Intel&#8217;s&#8221;.  I love this statement for it exemplifies our differences: I keep my opinions to myself, his become press releases.</p>
<p>As you might know, RADVISION participated in the Intel Developer Tools seminar,  where they focused on the new <a href="http://software.intel.com/en-us/intel-parallel-studio-home/">Intel Parallel Suite</a> tool that was just released. They asked me if I could speak at the event because of <a href="http://blog.radvision.com/codeofcontact/2009/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/">my success with the tool</a> in its beta form, as well as the success I had with the post I later wrote about it (89 unique visitors. I&#8217;m getting pretty good at putting my hands on those unique IP addresses&#8230;J ). Before I was able to give them an answer, my boss answered for me, and without further discussion, I was off to the seminar.</p>
<h3>Agenda</h3>
<p style="text-align: center"><em><a href="http://www.flickr.com/photos/pagedooley/2814895287/"><img class="alignnone" title="Parallelism and multicore" src="http://blog.radvision.com/images/2009/20090617-CodeOfContact-Parallelism.jpg" alt="" width="300" height="225" /></a></em></p>
<p style="text-align: center">
<p>The seminar was all about multi core parallelism. An introduction was given by James Reinders regarding this new approach in programming, and about how Intel can help us developers  achieve parallelism through the usage of their various tools. We had a 3 hour demonstration session on those tools, with live results on &#8220;before&#8221; and &#8220;after&#8221;. We also had some very&#8230; YAWN&#8230; interesting&#8230; z..zzz&#8230;zzzz&#8230; marketing presentations.</p>
<p>That said, a few lectures got my full attention, and I would like to elaborate.</p>
<h3>The Academic Perspective</h3>
<p>This lecture was given by <a href="http://us.geocities.com/amimar2/">Dr. Ami Marowka</a> from Bar-Ilan University<strong>.</strong> The full name of the lecture was &#8220;<em>Pitfalls and Issues of Multi-Core Programming: OpenMP vs TBB; The Academic Perspective</em>&#8220;. First of all, he dramatically claimed, that parallel programming is very very hard (as if calling pthread_create() is that complicated. Right?). It is a revolutionary approach, very different from serial programming.  As a professor, he claims that Israeli Universities do not teach this and if someone wants to learn, their only option is to be taught by an expert in the field, while on the job.</p>
<p>The second section of his lecture focused on what <a href="http://openmp.org/wp/">OpenMP</a> and Intel&#8217;s <a href="http://www.threadingbuildingblocks.org/">TBB</a>, can and cannot give us. As an example, he showed us a very simple code snip that can never be parallelized as-is by both approaches:</p>
<p style="padding-left: 30px">for (i =1; I &lt; 10; i++)</p>
<p style="padding-left: 60px">a[i]= a[i-1] + 7;</p>
<p>As this is a case of <a href="http://en.wikipedia.org/wiki/Data_dependency">data dependency</a>, one cannot parallelize this code section because the result of one operation is dependent on the data calculated in a previous step.</p>
<p>He then showed some benchmark results of a comparison between OpenMP and TBB, suggesting that for most cases, TBB is better. This was interesting, as OpenMP defines compiler directives. If Intel implements OpenMP on their compilers, Why is that different from their TBB? I will get back to that later.</p>
<p>Anyway, I hope some  students took good notes on his lecture, so I can copy them before the semester exams&#8230; Oh, wait; <a href="http://www.quotegarden.com/graduation.html">I&#8217;m no longer a student</a>!</p>
<h3>Parallelism Roadmap</h3>
<p>The second interesting session was at the end of the day, again given by James Reinders, about the possible future parallel tools being developed by Intel. He spoke about <a href="http://software.intel.com/en-us/intel-vtune/">vTune</a> as the tool for the experts (planning to make it even more complicated), why they won&#8217;t integrate its technology into the parallel suite. &#8220;If I need to explain someone what &#8216;<em>cache&#8217;</em> is, I don&#8217;t want him to use vTune. He probably needs to use the new suite&#8221; &#8211; his words. Good thing <a href="http://www.cachecounty.org/">I know what it is</a>. He explained a little bit about <a href="http://www.hpcwire.com/features/Intel-Gets-Ready-to-Push-Ct-Out-of-the-Lab-42634332.html">Ct</a> which looks very promising, then switched to the chip domain, explaining a bit on <a href="http://www.intel.com/technology/architecture-silicon/next-gen/">Nehalem</a>, <a href="http://www.intel.com/technology/visual/microarch.htm">Larrabee</a> and <a href="http://www.intel.com/technology/atom/index.htm">Atom</a>, and basically showed us Intel&#8217;s plan to rule the world.</p>
<h3>The Main Event &#8211; My Lecture</h3>
<p>This was  a RADVISION presentation, and aside from Intel, we were the only other company speaking at this conference. <a href="http://www.linkedin.com/pub/sagi-subocki/1/272/52b">Sagi Subocki</a>, one of our product managers, was first to present an overview to our solution and then  about our optimization experience. After that, he called me to the stage to give my lecture&#8230;</p>
<p><img class="alignnone" title="Intel Seminar" src="http://blog.radvision.com/images/2009/20090617-CodeOfContact-Intel-Seminar.jpg" alt="" width="300" height="225" /></p>
<p>I don&#8217;t want to talk about it. I&#8217;m still recuperating. It was the scariest experience of my life: 200 people staring at me&#8230; I said I won&#8217;t talk about it. You can see it yourself:</p>
<p><div style="width:425px;text-align:center" id="__ss_1596541"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/RADVISION/radvision-and-intel-parallel-suite-improving-sip-stack-performance?type=powerpoint" title="Radvision and Intel Parallel Suite: Improving SIP Stack Performance">Radvision and Intel Parallel Suite: Improving SIP Stack Performance</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=intellecturefinalversion-090617055020-phpapp01&stripped_title=radvision-and-intel-parallel-suite-improving-sip-stack-performance" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=intellecturefinalversion-090617055020-phpapp01&stripped_title=radvision-and-intel-parallel-suite-improving-sip-stack-performance" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more presentations from <a style="text-decoration:underline;" href="http://www.slideshare.net/RADVISION">Radvision Ltd.</a>.</div></div></p>
<p><a href="http://blogs.microsoft.co.il/blogs/gadim/archive/2009/06/09/333605.aspx">They say</a> I was OK. I don&#8217;t remember.</p>
<p><img class="alignnone" title="Ofer Goren @ Intel Seminar" src="http://blog.radvision.com/images/2009/20090617-CodeOfContact-Intel-Seminar-Ofer.jpg" alt="" width="300" height="272" /></p>
<h3>The Next Day</h3>
<p>We made such a good impression, that the guys from Intel came to visit us in our office the next day. After the necessary introductions, I gave James Reinders the lecture I had the other day, only in English, and then shared some of my insights regarding the parallel suite, like what was missing, what can be improved, etc. He was kind enough to give us a glimpse at Intel&#8217;s software group roadmap for  the next couple of years.</p>
<p>Getting back to the TBB/OpenMP comparison, he said that it is indeed  very strange In his opinion, TBB should not be better than OpenMP, but rather just another approach to parallelism engineering. So this still remains a mystery that might forever plague us. He did indicate that there is a huge performance gap between the MS OpenMP implementation and the Intel one, in favor of the latter.</p>
<h3>My Conclusions</h3>
<ul>
<li> The obvious and more acute one: there are far too few females in the software engineering industry. Out of 200 participants in the seminar, I think only 10 of them were women. And it was kind of sad that there was not a single female lecturer.</li>
<li> Parallelism is here and is not going anywhere. Even Atom will become multi-core eventually (&#8220;not promising anything&#8221;, cautions James). We will have to start thinking differently. Parallel optimization will be part of the regular software release cycle, just like the rest of the tools of our trade.</li>
<li> The guys in Intel are doing a great job. I Never realized how big their software tools business is: IPP, TBB, vTune, MPI libraries, Ct, and much more.</li>
<li> Evangelist? In the holy land??</li>
<li> All in all, it was a very interesting experience. Can I go back to coding now? Please?</li>
</ul>
<p><hr />
<table border="0" width="100%" cellpadding="0">
<tr>
<td>
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1"><img src="http://blog.radvision.com/images/eBook/eBook_feed_64x64.jpg" ></a></td>
<td width="100%">
<a href="http://blog.radvision.com/videooverenterprise/wp-content/plugins/download-monitor/download.php?id=1">Download your free eBook guide on Video Conferencing, the Enterprise and You</a>.<p>Post from: <a href="http://blog.radvision.com/videooverenterprise">Video over Enterprise</a></p>
</td>
</tr>
</table>
<hr /><br/><br/><a href="http://blog.radvision.com/codeofcontact/2009/06/17/sip-multicore-optimization-the-aftershock/">SIP Multicore optimization – the aftershock</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.radvision.com/codeofcontact/2009/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/" title="About The Intel Threading Tools, Our SIP Stack, and Me (March 18, 2009)">About The Intel Threading Tools, Our SIP Stack, and Me</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/11/11/visual-studio-2005-and-beyond/" title="Visual Studio 2005 And Beyond (November 11, 2009)">Visual Studio 2005 And Beyond</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/01/21/todo-or-not-todo-that-is-the-question/" title="TODO or not TODO, That is the Question (January 21, 2009)">TODO or not TODO, That is the Question</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/04/08/lessons-learned-from-rock-band/" title="Lessons Learned From Rock Band (April 8, 2009)">Lessons Learned From Rock Band</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2009/09/23/interface-design-perceptual-control-theory/" title="Interface Design &amp; Perceptual Control Theory (September 23, 2009)">Interface Design &amp; Perceptual Control Theory</a> (0)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=3rjy1bb5LAA:Qx8fuCN_ZDw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=3rjy1bb5LAA:Qx8fuCN_ZDw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=3rjy1bb5LAA:Qx8fuCN_ZDw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=3rjy1bb5LAA:Qx8fuCN_ZDw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=3rjy1bb5LAA:Qx8fuCN_ZDw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=3rjy1bb5LAA:Qx8fuCN_ZDw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=3rjy1bb5LAA:Qx8fuCN_ZDw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=3rjy1bb5LAA:Qx8fuCN_ZDw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=3rjy1bb5LAA:Qx8fuCN_ZDw:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/3rjy1bb5LAA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2009/06/17/sip-multicore-optimization-the-aftershock/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2009/06/17/sip-multicore-optimization-the-aftershock/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 2.732 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-07-31 04:47:26 -->
