<?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, 20 Jan 2010 11:41:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</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>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>guest</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 align="center"><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> (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>
	<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>
</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>guest</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">
<p align="center">Before</p>
</td>
<td width="306" valign="top">
<p align="center">After</p>
</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> (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>
</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> (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/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>guest</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 align="center"><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 align="center"><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 align="center"><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>
		<item>
		<title>Developing Products Around The One Question</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/L2dhG6hcH1Y/</link>
		<comments>http://blog.radvision.com/codeofcontact/2009/05/13/developing-products-around-the-one-question/#comments</comments>
		<pubDate>Wed, 13 May 2009 11:08:35 +0000</pubDate>
		<dc:creator>Ran Arad</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[BEEHD]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Diameter]]></category>
		<category><![CDATA[PM]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rock band]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Zen]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=79</guid>
		<description><![CDATA[In a previous post, I linked to Dan Teasdale&#8217;s design lessons, as learned from &#8220;Rock Band&#8220;. In this post, and in the next few posts, I will analyze Dan&#8217;s ideas for game development, and try to apply them to development in general.
The first principle Dan mentions is &#8220;The One Question&#8220;.
Decisions, Decisions
Software development is a series [...]<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/05/13/developing-products-around-the-one-question/">Developing Products Around The One Question</a></p>
]]></description>
			<content:encoded><![CDATA[<p>In a previous post, I linked to <a href="http://www.rockband.com/">Dan Teasdale&#8217;s design lessons, as learned from &#8220;Rock Band</a>&#8220;. In this post, and in the next few posts, I will analyze Dan&#8217;s ideas for game development, and try to apply them to development in general.</p>
<p>The first principle Dan mentions is &#8220;<strong>The One Question</strong>&#8220;.</p>
<h3>Decisions, Decisions</h3>
<p>Software development is a series of decisions. The Product Manager, customer and/or Project Manager (or equivalent) can provide requirements, statements of work, high-level design, even low-level design, but the person doing the actual coding is still left with many decisions:</p>
<ul>
<li> How to initialize?</li>
<li> How to destruct?</li>
<li> Which events should be synchronous?</li>
<li> Use more or less parameters?</li>
<li> What should be the exact call flow?</li>
<li> What to do in an error case? Handle automatically or consult the user?</li>
</ul>
<p>All these decisions could annoy your customer, but they could also make him love you forever. Do you know the feeling you get when something works just as you expect it to? It&#8217;s a Zen kind of feeling, of being one with the universe. You want that for your customer.</p>
<p>Dan Teasdale&#8217;s method for achieving this is called &#8220;The One Question&#8221;, meaning that instead of micro-managing every decision your team makes, you present them with a question that defines the essence of the product. Then each decision a developer makes is inspected in light of the One Question, as the result has to fit the question best.</p>
<p>The example Dan makes is related to the development of &#8220;Rock Band&#8221;:</p>
<p><strong>&#8220;Is it an authentic band experience?&#8221;</strong></p>
<ul>
<li> Big Rock Endings &#8211; yes</li>
<li> Powerups &#8211; No</li>
<li> Back from the Brink &#8211; yes</li>
<li> Guitars on Fire &#8211; No</li>
<li> Solo Bonuses &#8211; yes</li>
<li> Minigames &#8211; Big No.</li>
</ul>
<h3>And Now for Development In General</h3>
<p>Can one question, the &#8220;One Question&#8221;, really define something other than a game? Can it define an SDK &#8211; something that means different things for different developers?</p>
<p>The best way to test this is by trying to ask the One Question regarding our new and shiny <a href="http://www.radvision.com/Products/Developer/Clients/BEEHD/">BEE<strong>HD</strong></a> product:</p>
<p><strong>Is this a high-end (video) phone experience?</strong></p>
<p>I put &#8216;video&#8217; in parenthesis because people may not have much experience with video phones, but we definitely know what to expect from our phones. And we know high-end experience from a low-end one. Different people may have different ideas as to how a &#8220;high-end video phone experience&#8221; should be, but this is true also for ideas of what a &#8220;rock band experience&#8221;.</p>
<p>Let&#8217;s try to make some decisions in view of the One Question we just asked:</p>
<ul>
<li> Simple, easy to understand state machine &#8211; Yes</li>
<li> Low-level configuration &#8211; No</li>
<li> Automatic error recovery &#8211; Yes</li>
<li> Interactive operation &#8211; No</li>
<li> Smooth video &#8211; Yes</li>
<li> Delay &#8211; Big No</li>
</ul>
<p>Surprisingly, this seems to work very well.</p>
<p>Now, what about SDKs? Let&#8217;s try to ask a question defining the essence of our <a href="http://www.radvision.com/Products/Developer/Protocol/IMSDiameter/">Diameter stack</a>:</p>
<p><strong>Can it be used to build a robot army and take over the world?</strong></p>
<p>Extreme question, I admit, but my first thought was of Star Wars, where Obi-Wan goes: &#8220;these are not the droids you are looking for&#8221;&#8230;</p>
<p style="text-align: center;"><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/CnjaUoR15dU&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/CnjaUoR15dU&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Pffft, Clones. This would not fly with my <em>robot</em> army. Every robot on the planet should be able to authenticate and authorize (or deny) and droid certificate. And they should do it quickly and reliably. So let&#8217;s make some example design decisions:</p>
<ul>
<li> Multiple levels of APIs &#8211; Yes</li>
<li> Automatic error handling &#8211; No</li>
<li> Network error resilience &#8211; Yes</li>
<li> Static resource usage &#8211; No</li>
<li> Expandable in every possible way &#8211; Yes</li>
<li> Jedi Mind Trick prone &#8211; Big No.</li>
</ul>
<p>It works well for SDKs too. This could potentially replace the classic product manager interface for answering every little design question. And it also relates well to Agile programming, if you&#8217;re into that. This would also be a good guideline for QA &#8211; test this like it&#8217;s going to go into a robot army, test that as if it&#8217;s a high-end communicator.</p>
<p>The One Question paints a big red target for where you want to go. Some developers may still miss the mark, but it will get everyone aiming for the same direction.</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/05/13/developing-products-around-the-one-question/">Developing Products Around The One Question</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/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/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/2008/09/24/web-ui-protocols-are-broken/" title="Web UI Protocols are Broken (September 24, 2008)">Web UI Protocols are Broken</a> (0)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=L2dhG6hcH1Y:eBYFFftVa6k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=L2dhG6hcH1Y:eBYFFftVa6k:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=L2dhG6hcH1Y:eBYFFftVa6k:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=L2dhG6hcH1Y:eBYFFftVa6k:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=L2dhG6hcH1Y:eBYFFftVa6k:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=L2dhG6hcH1Y:eBYFFftVa6k:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=L2dhG6hcH1Y:eBYFFftVa6k:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=L2dhG6hcH1Y:eBYFFftVa6k:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=L2dhG6hcH1Y:eBYFFftVa6k:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/L2dhG6hcH1Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2009/05/13/developing-products-around-the-one-question/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2009/05/13/developing-products-around-the-one-question/</feedburner:origLink></item>
		<item>
		<title>Lessons Learned From Rock Band</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/sWc0vwncsKU/</link>
		<comments>http://blog.radvision.com/codeofcontact/2009/04/08/lessons-learned-from-rock-band/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 11:39:30 +0000</pubDate>
		<dc:creator>Ran Arad</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[RADVISION]]></category>
		<category><![CDATA[reading]]></category>
		<category><![CDATA[rock band]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=77</guid>
		<description><![CDATA[This isn&#8217;t a link blog, but I think this link should be shared, and I don&#8217;t have a Twitter account. So without further ado, here is Dan Teasdale sharing Design Lessons Learned From Rock Band &#8211; make sure you download the slides (that&#8217;s where the beef is). I started reading it because I love Rock [...]<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/04/08/lessons-learned-from-rock-band/">Lessons Learned From Rock Band</a></p>
]]></description>
			<content:encoded><![CDATA[<p>This isn&#8217;t a link blog, but I think this link should be shared, and I don&#8217;t have a Twitter account. So without further ado, here is <a href="http://dantdesign.blogspot.com/2009/04/gdc-slides.html">Dan Teasdale sharing Design Lessons Learned From Rock Band</a> &#8211; make sure you download the slides (that&#8217;s where the beef is). I started reading it because I love <a href="http://blog.radvision.com/codeofcontact/2008/06/02/standards-pul%E2%80%93lease/">Rock Band</a>, but Dan brings up issues of design, redesign, software development cycles, management, communities and dealing with the unexpected that are much more universal than game design. It&#8217;s a long slideshow, so I&#8217;ll let you digest. My Impressions of it, especially on &#8220;The One Question&#8221;, in a later post.</p>
<p align="center"><a href="http://www.flickr.com/photos/bdjsb7/2621317083/"><img class="alignnone" title="not my band, but I like the drummers stage" src="http://blog.radvision.com/images/2009/20090408-CodeOfContact-Rockband.jpg" alt="" width="450" height="338" /></a><br />
(not my band, but I like the drummer&#8217;s stage)</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/04/08/lessons-learned-from-rock-band/">Lessons Learned From Rock Band</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/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/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/2009/04/07/integrity-porting/" title="Integrity Porting (April 7, 2009)">Integrity Porting</a> (0)</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=sWc0vwncsKU:8uuJsAGrR9o:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=sWc0vwncsKU:8uuJsAGrR9o:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=sWc0vwncsKU:8uuJsAGrR9o:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=sWc0vwncsKU:8uuJsAGrR9o:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=sWc0vwncsKU:8uuJsAGrR9o:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=sWc0vwncsKU:8uuJsAGrR9o:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=sWc0vwncsKU:8uuJsAGrR9o:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=sWc0vwncsKU:8uuJsAGrR9o:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=sWc0vwncsKU:8uuJsAGrR9o:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/sWc0vwncsKU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2009/04/08/lessons-learned-from-rock-band/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2009/04/08/lessons-learned-from-rock-band/</feedburner:origLink></item>
		<item>
		<title>Integrity Porting</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/6YLrPU3b8rU/</link>
		<comments>http://blog.radvision.com/codeofcontact/2009/04/07/integrity-porting/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 13:20:18 +0000</pubDate>
		<dc:creator>Ran Arad</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SDKs]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[integrity]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[porting]]></category>
		<category><![CDATA[POSIX]]></category>
		<category><![CDATA[RADVISION]]></category>
		<category><![CDATA[sdk]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[support]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=75</guid>
		<description><![CDATA[Have you ever been to Japan? My experience was very strange. Everything seemed familiar at first glance, but when I tried something &#8211; walk the streets, ride the train, buy at stores, use the washrooms &#8211; I realized that nothing is as it seems and everything is different. So different it might just as well [...]<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/04/07/integrity-porting/">Integrity Porting</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Have you ever been to Japan? My experience was very strange. Everything seemed familiar at first glance, but when I tried something &#8211; walk the streets, ride the train, buy at stores, use the washrooms &#8211; I realized that nothing is as it seems and everything is different. So different it might just as well be another planet &#8211; complete with strange glyph writing, unexpected underground passages, and strange stuff for sale. Remind me to tell you about the half Santa*.</p>
<p style="text-align: center;"><object type="application/x-shockwave-flash" width="400" height="300" data="http://www.flickr.com/apps/video/stewart.swf?v=68975" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param name="flashvars" value="intl_lang=en-us&amp;photo_secret=61376e8da9&amp;photo_id=2511923666"></param> <param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=68975"></param> <param name="bgcolor" value="#000000"></param> <param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=68975" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&amp;photo_secret=61376e8da9&amp;photo_id=2511923666" height="300" width="400"></embed></object><br />
A Japanese experience</p>
<p>Why am I bringing Japan into this techie blog? Because of software porting. Porting software from one operating system to another is much like visiting Japan: everything seems familiar &#8211; same concepts, same services, same methodologies. But when you try to use them, you realize you&#8217;re not in Kansas anymore. Take Integrity, for example. We just finished porting our SIP stack to Integrity 5.0, and by &#8220;we&#8221; I mean Igor Novoseltsev, our resident expert. I sat with him to chat a bit about his experiences and lessons.</p>
<p>When I say, &#8220;porting the SIP stack&#8221;, I actually mean porting the Common Core, our OS abstraction layer. All of our products use the Common Core layer to access the network, use threads and locks, allocate memory, log, for standard data structures, etc. It saves a lot of time and effort, especially when porting. Once the common core is ported, there is only a minor effort to port any of the products that use it.</p>
<h3>Integrity OS</h3>
<p>Integrity is an operating system developed by <a href="http://www.ghs.com/corporate/index.html">Green Hills Software</a> (GHS). It is a real-time operating system for embedded systems, designed with reliability and security in mind &#8211; this is achieved by using hardware memory protection to protect tasks from accidental errors or malicious tampering. It is proudly non-compatible with existing &#8220;80&#8217;s&#8221; operating systems (I think they&#8217;re dissing MS Windows), having been designed from the ground up. Luckily, that does not stand for &#8220;an unfamiliar set of APIs&#8221;, since Integrity supports the <a href="http://en.wikipedia.org/wiki/POSIX">POSIX</a> standards, common to many UNIX systems.</p>
<p>As our SIP stack contains an OS abstraction layer we call &#8220;common core&#8221;, and our common core already supports the POSIX APIs and was compatible with Integrity 4.0, we recently embarked on a mission to port it to Integrity 5.0, the latest release of the Integrity OS. Why? Because a customer asked for it, of course.</p>
<p>GHS provided us with the operating system files for the embedded system and their equivalent to the Microsoft&#8217;s Visual Studio IDE, <a href="http://www.ghs.com/products/MULTI_IDE.html">Multi</a>. Unfortunately for us, we usually use make files to compile our projects on non-windows systems, and we were reluctant to create and maintain a workspace for Integrity &#8211; having too many build systems isn&#8217;t a lot of fun.</p>
<p>Of course, the compiler and linker allow command-line activation, and although it was documented, there were some options and flags (used by Multi) which were undocumented. We asked for a little help from Green Hills representatives here in Israel, which were very responsive and provided us with sample make files, allowing us to compile our SIP stack and run it on the provided simulator.</p>
<p>Now all we needed was to try it out for real.</p>
<h3><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  class="alignright" title="Atmels board" src="http://blog.radvision.com/images/2009/20090407-CodeOfContact-Atmel.jpg" alt="" width="240" height="306" />Going Embedded</h3>
<p>The first rule of embedded operating systems is, and anyone who has worked on those will tell you that: it&#8217;s not over until it the board runs. Simulators have come a long way, but nothing can simulate the nooks and crannies of an embedded, real-time OS running on the actual hardware. However, it is also true that nothing is as frustrating and time consuming as trying to setup some new embedded system that just won&#8217;t do what you want.</p>
<p>The board we used was an <a href="http://www.atmel.com/default.asp">Atmel</a> ARM-based board (<a href="http://www.atmel.com/dyn/products/product_card.asp?part_id=4056">AT91SAM9263</a>). We tried to bring it to life, only to discover, after a few frustrating days of work and with the help of the excellent Atmel support, that the Integrity version we had supports the AT91SAM9261, which, of course, is non-compatible with its -3 variant.</p>
<p>Again, GHS support came to our rescue and provided us with a compatible version, yet we discovered (in the documentation) that the only way to configure the board was with some device called a probe, or with a <a href="http://en.wikipedia.org/wiki/DataFlash">data-flash</a> card. We had neither, nor the available time to order any (the customer was waiting), and so we decided to move from the Atmel board to a <a href="http://focus.ti.com/paramsearch/docs/parametricsearch.tsp?family=dsp&amp;sectionId=2&amp;tabId=1852&amp;familyId=1300">TI DaVinci</a> board &#8211; we had a few of those due to the <a href="http://blog.radvision.com/voipsurvivor/2009/03/26/hd-calling-made-easy/">BEE<strong>HD</strong></a> project.</p>
<p>Unfortunately, things didn&#8217;t go smoothly there either. Again, documentation insisted that we have to use a probe to burn the kernel on to the board. And so GHS came through for us once more: they invited us to their offices, where they can burn the OS on to the board for us.</p>
<p><a href="http://www.flickr.com/photos/inkiboo/107818141/"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  class="alignright" title="Fingers crossed" src="http://blog.radvision.com/images/2009/20090407-CodeOfContact-Fingers-crossed.jpg" alt="" width="240" height="180" /></a>And so we drove over, with the board in hand, only to discover that the exact version we used was not supported. No surprises there, as we got it straight from the TI presses. (We and the TI homies are like <em>this</em> &#8211; you can&#8217;t see, but I&#8217;m making the thing with the fingers right now. See picture for details). But, as it is brand new, no support yet.</p>
<p>But while we were there, we saw another Atmel board lying around, and we were, like, &#8220;can you lend us a data-flash card?&#8221;, and they were all, like, &#8220;we don&#8217;t <em>usually</em> do that&#8221;. And so, to make a long story short, we drove back to our office with an Integritized data-flash card.</p>
<p>From there it was easy to bootstrap U-Boot to the card and setup a TFTP server that will get our binary application, copy it to the correct memory location (0&#215;2000000) and run it. The wonderful assistance from the <a href="http://www.at91.com/Home/Controleurs/cHome.php">AT91 SAM Portal</a> community (supported by Atmel) and the <a href="http://www.linux4sam.org/twiki/bin/view/Linux4SAM/U-Boot">U-Boot project</a> didn&#8217;t hurt as well. Another few days of work and we had it eating from our palm, that is, running SIP. Customer happy, sale done, money in bank, nice PR to show for it (a PR is the sales equivalent of a T-shirt, isn&#8217;t it?)</p>
<h3>So, What Did We Learn From All Of This?</h3>
<ul>
<li>Green Hills Software has a wonderful support team here in Israel. Thanks again, guys.</li>
<li>Atmel has a great support team as well. With the amount of products they provide worldwide support for, it is nothing short of miraculous.</li>
<li>Community sites are great for mental and actual support.</li>
<li>Document everything as you go. The next programmer to try the same thing will run into the same problems, so why not save him some of the bother? Here&#8217;s what we now have on Integrity: <a class="downloadlink" href="http://blog.radvision.com/codeofcontact/wp-content/plugins/download-monitor/download.php?id=1" title="Version 1.0 downloaded 502 times" >Integrity for ARM Howto (566.96 KB)</a></li>
<li>We now have a <a href="http://www.ghs.com/news/20090331_Radvision_Voice_and_Video.html">solution for Integrity</a> &#8220;out of the box&#8221; for customers.</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/04/07/integrity-porting/">Integrity Porting</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/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/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/08/lessons-learned-from-rock-band/" title="Lessons Learned From Rock Band (April 8, 2009)">Lessons Learned From Rock Band</a> (0)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=6YLrPU3b8rU:2h5PToKc8X4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=6YLrPU3b8rU:2h5PToKc8X4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=6YLrPU3b8rU:2h5PToKc8X4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=6YLrPU3b8rU:2h5PToKc8X4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=6YLrPU3b8rU:2h5PToKc8X4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=6YLrPU3b8rU:2h5PToKc8X4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=6YLrPU3b8rU:2h5PToKc8X4:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=6YLrPU3b8rU:2h5PToKc8X4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=6YLrPU3b8rU:2h5PToKc8X4:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/6YLrPU3b8rU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2009/04/07/integrity-porting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2009/04/07/integrity-porting/</feedburner:origLink></item>
		<item>
		<title>Software Is the New Hardware</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/Sef60PS6XSE/</link>
		<comments>http://blog.radvision.com/codeofcontact/2009/03/25/software-is-the-new-hardware/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 16:35:33 +0000</pubDate>
		<dc:creator>Ran Arad</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Standardization]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[Implementation]]></category>
		<category><![CDATA[open]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[protocol stacks]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[sdk]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Stacks]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Toolkits]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=74</guid>
		<description><![CDATA[I&#8217;m probably late on the wagon with this, but I just discovered that standardized protocol interfaces are fast becoming commonplace &#8211; and I&#8217;m not talking about the network-side interface, I&#8217;m talking about the application-side interfaces, also known as APIs, or should I say open APIs.
APIs used to be a matter of taste and design, pride [...]<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/03/25/software-is-the-new-hardware/">Software Is the New Hardware</a></p>
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m probably late on the wagon with this, but I just discovered that standardized protocol interfaces are fast becoming commonplace &#8211; and I&#8217;m not talking about the network-side interface, I&#8217;m talking about the application-side interfaces, also known as APIs, or should I say open APIs.</p>
<p>APIs used to be a matter of taste and design, pride and prestige; they were known to make or break an SDK. All this is about to change, as APIs are being standardized, and SDKs from different vendors will be interchangeable as your network card or USB mouse. Add to this the low cost of general-purpose processing units (GPPs) and you will understand why software is taking over traditional hardware roles (think about washing machines and cars).</p>
<p>Am I taking this too far? I may be late, as I said, but I&#8217;m afraid I&#8217;m dead on target.</p>
<h3>Wikipedia Ride</h3>
<p>First, a little disambiguation: web 2.0 has been with us for a while, with its service description language, remote procedure calls, Open APIs, you name it (and I&#8217;m not linking to the Wikipedia definition of these. If you don&#8217;t know any, just Google it up). I&#8217;m not talking about these. I&#8217;m not talking about network communications at all.</p>
<p>I&#8217;m talking about good old software libraries. I&#8217;m talking about a very specific form of <a href="http://en.wikipedia.org/wiki/Service-oriented_architecture">Service-oriented architecture</a>. I&#8217;m talking about <a href="http://en.wikipedia.org/wiki/Component-based_software_engineering">Component-based software engineering</a> and <a href="http://en.wikipedia.org/wiki/Modular_programming">Modular programming</a>, but not quite. I&#8217;m talking about a form of the old <a href="http://en.wikipedia.org/wiki/Component_Object_Model">COM</a>, <a href="http://en.wikipedia.org/wiki/KPart">KPart</a> and <a href="http://en.wikipedia.org/wiki/Bonobo_%28computing%29">Bonobo</a>. I&#8217;m talking about, ladies and gents, what <a href="http://www.okiproject.org/">OKI</a>, <a href="http://www.openinterface.org/home/">OpenInterface</a> and many others are trying to do as I write these very lines: full encapsulation, reusability and interchangeability of any software component.</p>
<p>We&#8217;re still not there, of course, but it&#8217;s completely within reach. Look at how hardware is getting along just fine with the &#8220;plug-and-play&#8221; concept. I could go to any store, pick up any hardware, plug it into any computer, install a driver (which the OS does automatically for me in most cases), and in 99% of the time it will work like a charm. So why isn&#8217;t software like that, apart from (aforementioned) sporadic examples? It is all for the lack of one, agreed, open, standardized, application-programming interface.</p>
<p><a href="http://www.flickr.com/photos/jamesjordan/2045964426/"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  class="alignright" title="Both sides" src="http://blog.radvision.com/images/2009/20090325-CodeOfContact-both-sides.jpg" alt="" width="240" height="212" /></a>We VoIP developers are used to having a standard under us, but will we adapt that easily to having a standard above us, in our connection to the application?</p>
<h3>VoIP Industry Implications</h3>
<p>Let&#8217;s pretend for a moment that we have such a standard. Answer these questions, please:</p>
<ul>
<li> Standardized or Proprietary?</li>
<li> SIP or H.323?</li>
<li> In-house or outsourced?</li>
<li> Open Source or Commercial?</li>
</ul>
<p>The answers are, by order: both, both, both and both.</p>
<p>Why would you settle for anything else? Especially if you can develop over the very same interface, first a proprietary proof of concept, then some basic SIP you whipped up, adding an open source H.323 when you branch out to the enterprise market, and replacing them all with a commercial implementation when your company grows. And when a new protocol arrives, you will just add that below your existing code.</p>
<p>A unified API may seem unreasonable when you consider that each service provider has its own set of requirements and limitations. I think that it is unreasonable, economically, to think that this can continue for long. Sure, there are advantages and specifics for each protocol type and implementation variant, but for mainstream make-a-call scenarios, a unified API is feasible. There will be some pushing and pulling between different power groups until the standardized API will be stable, and there will be some gaping holes allowing non-standard operation, but we&#8217;re used to that from the network protocols standards. Moreover, protocols learn from and imitate each other, so a novel functionality in one is likely to be mimicked in another. The developers of protocols will have to design protocol stacks that will be adaptive to many environments, perhaps specialized flavors of their toolkits to different environment.</p>
<p>It&#8217;s hard to guess the effect this will have on the industry. It will require more extensive testing, and some rethinking of the design, especially error handling. It will probably push the whole &#8220;<a href="http://blog.radvision.com/codeofcontact/2008/04/07/naughty-protocols-need-spanking/">strict protocols</a>&#8221; thing straight out the widow. I expect <a href="http://blog.radvision.com/codeofcontact/2008/05/27/compiled-protocols-vs-script-protocols/">script protocols</a> to become big, since they solve many issues of implementation variants. I think <a href="http://blog.radvision.com/codeofcontact/2008/11/19/system-security-through-system-breakdown/">system security</a> will be better, but it would require more maturity on the part of users.</p>
<p>Eventually, I think every user (and his mother) will become a part-time system integrator, selecting between components on the fly. It will be like installing a mouse, keyboard or mp3-player*. If one SDK doesn&#8217;t work, the user will replace it with another that does. SDKs will eventually become a consumer product, part of the whole ecosystem of service mash-ups (and yes, I do believe service mash-ups won&#8217;t be just for know-it-all geeks very soon).</p>
<p>Whoever plays best with others will probably win.</p>
<hr />* As a matter of fact, I think the main difference between inserting a USB device and connecting a card to the motherboard is the user-friendly plastic in the former and the use of a screwdriver in the latter. For some reason, people associate screwdrivers with technical expertise.</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/03/25/software-is-the-new-hardware/">Software Is the New Hardware</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.radvision.com/codeofcontact/2009/04/07/integrity-porting/" title="Integrity Porting (April 7, 2009)">Integrity Porting</a> (0)</li>
	<li><a href="http://blog.radvision.com/codeofcontact/2008/02/11/why-text-based-protocols-hurt-your-design/" title="Why text-based protocols hurt your design (February 11, 2008)">Why text-based protocols hurt your design</a> (4)</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/2008/01/21/5-donts-when-building-a-protocol-stack/" title="5 &#8220;don&#8217;ts&#8221; when building a protocol stack (January 21, 2008)">5 &#8220;don&#8217;ts&#8221; when building a protocol stack</a> (0)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Sef60PS6XSE:pLM9CXIAPMA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Sef60PS6XSE:pLM9CXIAPMA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=Sef60PS6XSE:pLM9CXIAPMA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Sef60PS6XSE:pLM9CXIAPMA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=Sef60PS6XSE:pLM9CXIAPMA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Sef60PS6XSE:pLM9CXIAPMA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Sef60PS6XSE:pLM9CXIAPMA:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=Sef60PS6XSE:pLM9CXIAPMA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=Sef60PS6XSE:pLM9CXIAPMA:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/Sef60PS6XSE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2009/03/25/software-is-the-new-hardware/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2009/03/25/software-is-the-new-hardware/</feedburner:origLink></item>
		<item>
		<title>While You Were Away</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/3d--ikIbtWo/</link>
		<comments>http://blog.radvision.com/codeofcontact/2009/03/24/while-you-were-away/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 15:30:35 +0000</pubDate>
		<dc:creator>Ran Arad</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=72</guid>
		<description><![CDATA[Google broke our RSS feed. FeedBurner, which we are using now, is being moved over to the Google &#8220;platform&#8221;, which caused some problems involving their MyBrand service, Yahoo Pipes and a bunch of other minor inconveniences. Don&#8217;t know, don&#8217;t care. Remember what I said once about strict decoding and all that stuff? I lied. That [...]<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/03/24/while-you-were-away/">While You Were Away</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Google broke our RSS feed. FeedBurner, which we are using now, is being moved over to the Google &#8220;platform&#8221;, which caused some problems involving their MyBrand service, Yahoo Pipes and a bunch of other minor inconveniences. Don&#8217;t know, don&#8217;t care. Remember what I said once about <a href="http://blog.radvision.com/codeofcontact/tag/decoding/">strict decoding</a> and all that stuff? I lied. That might be good for signaling, but for the media, for something that humans are supposed to be consuming in the end, accept anything that you can make remote sense of, in hopes that the human in the end would be able to receive it, or maybe realize that something is wrong and try to fix it from his end.</p>
<p>Well, we&#8217;re back. We managed to fix what needed fixing.</p>
<p>As it was, people didn&#8217;t get the feed for a couple of months. Therefore, I&#8217;ll review what you missed.</p>
<p align="center"><a href="http://www.flickr.com/photos/7502393@N04/472028910/"><img class="alignnone" title="Welcome back" src="http://blog.radvision.com/images/2009/20090324-CodeOfContact-Welcome-back.jpg" alt="" width="450" height="260" /></a></p>
<h3>TODO or not TODO, That is the Question</h3>
<p>One of the customers went over our code, and found many TODOs in the code. That made me think: from the client&#8217;s side, isn&#8217;t checking for TODOs in our code a little bit counter-productive? The direct result would be that we will remove the comments from our code, and will be more likely to forget about them. <a href="http://blog.radvision.com/codeofcontact/2009/01/21/todo-or-not-todo-that-is-the-question/">When a programmer writes a TODO comment, it could mean one of several things, not all bad.</a></p>
<h3>Commenting Can Be Bad For Your Soul</h3>
<p>Following the post about the usage of TODO style comments, I asked the developers here at RADVISION to send me stories about <a href="http://blog.radvision.com/codeofcontact/2009/01/28/commenting-can-be-bad-for-your-soul/">inappropriate comments</a> that they found in code. A wicked funny post, plus a guide for writing your own bad comments.</p>
<p>By the way, I also wanted to write an additional post about assertions, but Miško Hevery from Google&#8217;s Testing Blog <a href="http://googletesting.blogspot.com/2009/02/to-assert-or-not-to-assert.html">beat me to it</a>.</p>
<h3>Why I Won&#8217;t Work For Joey DeVilla</h3>
<p>Joey DeVilla writes about Captain Chesley &#8220;Sully&#8221; Sullenberger, and drives his point home with his recommended interview question: &#8220;What do you do in your spare time?&#8221; I don&#8217;t code, Joey, and <a href="http://blog.radvision.com/codeofcontact/2009/02/04/why-i-wont-work-for-joey-devilla/">I want my employees to have interesting hobbies</a>.</p>
<h3>&#8220;Hello, I&#8217;m a Slave&#8221; &#8220;And I&#8217;m a PC&#8221;</h3>
<p>While your PC may be the grease lightning of computers, it usually can&#8217;t handle multiple, intensive memory, disk and network accesses. That&#8217;s where the Slave Computer, or SC, comes in, to aid the PC, the Primary Computer. This post covers some <a href="http://blog.radvision.com/codeofcontact/2009/02/18/hello-im-a-slave-and-im-a-pc/">uses and utilities for a Slave Computer</a>.</p>
<h3>Five Bad Medicines for a Sick Code</h3>
<p>I write about <a href="http://blog.radvision.com/codeofcontact/2009/03/04/five-bad-medicines-for-a-sick-code/">five signs that the developer in charge of the code could not figure out how to fix it</a>. You still find a crutch here and a splint there added to keep the sick code &#8220;breathing&#8221;, like strange constants, data out of place, extensive error returning, code replication and code preservation.</p>
<h3>About The Intel Threading Tools, Our SIP Stack, and Me</h3>
<p>I asked Ofer Goren, a software engineer in the SIP Stack team, and one of those given the optimization task, to write a few words on <a href="http://blog.radvision.com/codeofcontact/2009/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/">multi-core optimization</a>. Spoiler: they increased calls per second by 50% (!), to 94% core utilization.</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/03/24/while-you-were-away/">While You Were Away</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/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/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/2008/08/20/code-of-contact-movie-awards/" title="Code of Contact Movie Awards (August 20, 2008)">Code of Contact Movie Awards</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=3d--ikIbtWo:D9a-3OzUbpg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=3d--ikIbtWo:D9a-3OzUbpg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=3d--ikIbtWo:D9a-3OzUbpg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=3d--ikIbtWo:D9a-3OzUbpg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=3d--ikIbtWo:D9a-3OzUbpg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=3d--ikIbtWo:D9a-3OzUbpg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=3d--ikIbtWo:D9a-3OzUbpg:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=3d--ikIbtWo:D9a-3OzUbpg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=3d--ikIbtWo:D9a-3OzUbpg:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/3d--ikIbtWo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2009/03/24/while-you-were-away/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2009/03/24/while-you-were-away/</feedburner:origLink></item>
		<item>
		<title>About The Intel Threading Tools, Our SIP Stack, and Me</title>
		<link>http://feedproxy.google.com/~r/CodeOfContact/~3/t2hIwl_mxHs/</link>
		<comments>http://blog.radvision.com/codeofcontact/2009/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 13:01:14 +0000</pubDate>
		<dc:creator>guest</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[Intel Parallel Amplifier]]></category>
		<category><![CDATA[Intel Thread Profiler]]></category>
		<category><![CDATA[Intel threading tools]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[Memory]]></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[Programmers]]></category>
		<category><![CDATA[Protocol]]></category>
		<category><![CDATA[RADVISION]]></category>
		<category><![CDATA[resources]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[SIP Stack]]></category>
		<category><![CDATA[stack]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://blog.radvision.com/codeofcontact/?p=70</guid>
		<description><![CDATA[[I knew that our SIP team was working for a while on multi-core optimization. So when there were signs of oil there, with some very promising results, I asked Ofer Goren, a software engineer in the SIP Stack team, and one of those given the optimization task, to write a few words on the process. [...]<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/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/">About The Intel Threading Tools, Our SIP Stack, and Me</a></p>
]]></description>
			<content:encoded><![CDATA[<p><em>[I knew that our SIP team was working for a while on multi-core optimization. So when there were signs of oil there, with some very promising results, I asked </em><a href="http://www.linkedin.com/pub/0/150/31a"><em>Ofer Goren</em></a><em>, a software engineer in the SIP Stack team, and one of those given the optimization task, to write a few words on the process. You might even appreciate the work we do here for our customers, toiling around with analysis tools.]</em></p>
<p>&#8220;Hardware is cheap, programmers are expensive&#8221; says <a href="http://www.codinghorror.com/blog/archives/001198.html">Jeff Atwood</a>. So it&#8217;s better to spend your money on hardware, and not on optimizing your code. I wish we could say that to our customers and my boss, but he has this nagging habit of asking me to do things. Like, well, optimizing our code. More specifically optimizing it to this new multi-core technology. Hmpfff.</p>
<p>Therefore, over the past several months, multi-core optimization was my main focus. After identifying areas that can be optimized for scaling our <a href="http://www.radvision.com/Products/Developer/Protocol/SIPDeveloper/">SIP Stack</a> performance to the level of CPU cores in use, we decided to put some effort into it. Hence the coming SIP Developer Suite version (5.5 GA2) will include code changes aimed to optimize multi-core performance in such environments.</p>
<p>I will describe in short what tools we used, why, and how they helped us with the task at hand.</p>
<h3>What and Why</h3>
<p>So the &#8220;what and why&#8221; questions were quite easy to answer. It was an obvious choice to look for some tool running on MS-Windows. After all, most of our development is done in a Windows environment before being ported to other operating systems, our IDEs and debugger run on Windows, and for me, at least, working with GUI is easier (sorry, but <a href="http://www.gnu.org/software/emacs/">emacs</a> is better than <a href="http://thomer.com/vi/vi.html">vi</a>). We already had an installation of <a href="http://www.intel.com/cd/software/products/asmo-na/eng/286749.htm">Intel Thread Profiler</a> and <a href="http://www.intel.com/cd/software/products/asmo-na/eng/286406.htm">Intel Thread Checker</a>. In an incredible coincidence Intel approached us, suggesting we become part of the beta program for their <a href="http://www.intel.com/cd/software/products/asmo-na/eng/399359.htm">next generation threading tools</a>. Need I say more? I guess the choice was made.</p>
<h3>How</h3>
<p>So we installed the new tools, and started playing with them a little. After some fooling around, an eye-opening window appeared:</p>
<p style="text-align: center;"><a href="http://blog.radvision.com/images/2009/20090318-CodeOfContact-SIP-multicore-1-large.gif"><img class="alignnone" title="Hotspots in our SIP stack with multicore" src="http://blog.radvision.com/images/2009/20090318-CodeOfContact-SIP-multicore-1-small.gif" alt="" width="600" height="450" /></a></p>
<p>Wow. Out of 204 seconds of CPU run time, almost 60 seconds are spent on doing&#8230; nothing??? It just waits there? On a freaking Mutex?!  Heads will roll, I thought to myself. Let&#8217;s see who&#8217;s to blame:</p>
<p style="text-align: center;"><a href="http://blog.radvision.com/images/2009/20090318-CodeOfContact-SIP-multicore-2-large.gif"><img class="alignnone" title="SIP stack multicore issues - whos to blame?" src="http://blog.radvision.com/images/2009/20090318-CodeOfContact-SIP-multicore-2-small.gif" alt="" width="600" height="450" /></a></p>
<p>Hmmm&#8230; we had several suspects, but it seemed that this &#8220;HandleIncomingRequestMsg&#8221; was just lying there, enjoying life, smoking (<a href="http://il.youtube.com/watch?v=OjWQ39GbI4c">which is bad for you</a>), while blocking everybody from doing their job&#8230;</p>
<p>I was interested to know if the legacy Thread Profiler tool agrees with those observations. The Profiler tool makes you work harder to get the same information, but I realized they share the same understanding: some cores are getting paid for no work at all! I knew we had to do something with this code.</p>
<p>To get a feeling of the extent of the issues at hand, Intel&#8217;s thread profiler can give an easy to read picture of CPU utilization by giving the concurrency level of the program running. The higher the right bars the better.</p>
<p style="text-align: center;"><a href="http://blog.radvision.com/images/2009/20090318-CodeOfContact-SIP-multicore-3-large.gif"><img class="alignnone" title="SIP stack concurrency level" src="http://blog.radvision.com/images/2009/20090318-CodeOfContact-SIP-multicore-3-small.gif" alt="" width="600" height="450" /></a></p>
<p>In the image above, you can see that most of the time, the test executed uses a single thread only, while the rest of the threads are idle. You can drill down from this view to your heart&#8217;s content and spend hours looking at your code.</p>
<p>And that&#8217;s <strong>how</strong> we identified potential areas that can be optimized, one at a time, focusing time on the largest bottleneck.</p>
<h3>What I Learned</h3>
<p>I was kinda clueless at the beginning of the process. I was told to optimize the code for multi-core CPUs. Well, great, how the heck should I do that? I just work here, remember?!  So the Intel Tools came to the rescue.. It told us everything we needed to know, in my all-time favorite GUI way, identified potential areas to work on, and gave us a methodical way to scale up and improve our code (Yeah, right. As if I wrote THAT code&#8230;). The work done improved performance on all architectures, not just <a href="http://en.wikipedia.org/wiki/Wintel">Wintel</a>. What can I say? They&#8217;ve got my vote.</p>
<p>My takeaways here are quite simple: when locking objects for a multi-core application that needs to scale:</p>
<ul>
<li> Make the locks you use <strong>as granular as possible</strong> (multi-level hashes, locks on objects and not on arrays, etc.). Bear in mind that while you do that, you increase memory usage and resources, so there&#8217;s a tradeoff here.</li>
<li> Locks should be as short as possible. If you lock large pieces of code &#8211; you&#8217;re going to pay for it. with your time and with the cost of Intel&#8217;s tools <img src='http://blog.radvision.com/codeofcontact/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>
<h3>The Bottom Line</h3>
<p>We started with 65% core utilization. After several months of work, we increased calls per second by 50% (!), to 94% core utilization. So if someone asks me, the Intel threading tools are the right thing for you. Smoking, in case you missed it, is not.</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/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/">About The Intel Threading Tools, Our SIP Stack, and Me</a></p>

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<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/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/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/2008/09/24/web-ui-protocols-are-broken/" title="Web UI Protocols are Broken (September 24, 2008)">Web UI Protocols are Broken</a> (0)</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=t2hIwl_mxHs:Mr5kW3i-9zE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=t2hIwl_mxHs:Mr5kW3i-9zE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=t2hIwl_mxHs:Mr5kW3i-9zE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=t2hIwl_mxHs:Mr5kW3i-9zE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=t2hIwl_mxHs:Mr5kW3i-9zE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=t2hIwl_mxHs:Mr5kW3i-9zE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=t2hIwl_mxHs:Mr5kW3i-9zE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CodeOfContact?a=t2hIwl_mxHs:Mr5kW3i-9zE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/CodeOfContact?i=t2hIwl_mxHs:Mr5kW3i-9zE:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/CodeOfContact/~4/t2hIwl_mxHs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.radvision.com/codeofcontact/2009/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.radvision.com/codeofcontact/2009/03/18/about-the-intel-threading-tools-our-sip-stack-and-me/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 1.449 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-03-17 18:54:47 -->
