<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-36948928</id><updated>2012-01-29T04:47:29.235-08:00</updated><category term='Hostbased authentication'/><category term='Parallelism'/><category term='DryadLINQ'/><category term='SSH'/><category term='Microsoft Dryad'/><category term='MapReduce'/><category term='Dryad'/><category term='MPI'/><category term='Hadoop'/><title type='text'>Jaliya Ekanayake Tech Report</title><subtitle type='html'>/*Blog space for my thoughts and findings on technologies*/</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-36948928.post-462454732628801165</id><published>2010-07-16T10:27:00.000-07:00</published><updated>2010-07-16T10:28:33.751-07:00</updated><title type='text'>Azure Platform Appliance</title><content type='html'>&lt;p style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: 'Georgia', 'serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Microsoft recently announced its next move with Azure "&lt;a href="http://www.microsoft.com/windowsazure/appliance/"&gt;Azure Platform Appliance&lt;/a&gt;". The idea is to offer Azure platform as an infrastructure that can be used in private clusters. From my perspective, this is somewhat similar to the idea of private clouds (infrastructure services) that one can deploy using runtimes such as Eucalyptus or Nimbus on local clusters. However, since Azure is not an infrastructure service, it will be more flexible for the users. Unlike pure virtual machines, Azure platform appliance will expose most platform services of Azure as well.  In addition, the migration between the private Azure and the public Azure will be seamless as well. Overall, I think the biggset advantage of this approach is the piece of mind that the businesses will have "I am in control of my data and it is local".&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-462454732628801165?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/462454732628801165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=462454732628801165' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/462454732628801165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/462454732628801165'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2010/07/azure-platform-appliance.html' title='Azure Platform Appliance'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-3715036392699101910</id><published>2010-06-24T16:12:00.000-07:00</published><updated>2010-06-24T16:13:51.135-07:00</updated><title type='text'>Azure Storage Browser in Visual Studio</title><content type='html'>Now &lt;a href="http://blogs.msdn.com/b/jnak/archive/2010/06/10/windows-azure-storage-browser-in-the-visual-studio-server-explorer.aspx"&gt;this &lt;/a&gt;is a handy tool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-3715036392699101910?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/3715036392699101910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=3715036392699101910' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/3715036392699101910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/3715036392699101910'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2010/06/azure-storage-browser-in-visual-studio.html' title='Azure Storage Browser in Visual Studio'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-8632175483738137601</id><published>2010-06-11T14:54:00.001-07:00</published><updated>2010-06-11T14:54:21.564-07:00</updated><title type='text'>Hadoop Application Wiki</title><content type='html'>A nice collection of Hadoop apps.&lt;br /&gt;&lt;a href="http://wiki.apache.org/hadoop/PoweredBy"&gt;http://wiki.apache.org/hadoop/PoweredBy&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-8632175483738137601?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/8632175483738137601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=8632175483738137601' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/8632175483738137601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/8632175483738137601'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2010/06/hadoop-application-wiki.html' title='Hadoop Application Wiki'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-6364500872836082428</id><published>2010-03-18T21:31:00.000-07:00</published><updated>2010-03-18T21:37:51.336-07:00</updated><title type='text'>What is the concept of "static data" in Twister?</title><content type='html'>Many iterative applications we analyzed show a common characteristic of operating on two types of data products called static and variable data. Static data (most of the time the largest of the two) is used in each iteration and remain fixed throughout the computation whereas the variable data is the computed results in each iteration and typically consumed in the next iteration in many expectation maximization (EM) type algorithms.&lt;br /&gt;&lt;br /&gt;If a set of data is read by the application but do not get changed, then this set of data can be considered "static" in Twister. Matrix blocks, points in clustering, and web graph in pagerank are all examples of static data.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-6364500872836082428?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/6364500872836082428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=6364500872836082428' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/6364500872836082428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/6364500872836082428'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2010/03/what-is-concept-of-static-data-in.html' title='What is the concept of &quot;static data&quot; in Twister?'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-347855262476141066</id><published>2010-03-18T21:27:00.000-07:00</published><updated>2010-03-18T21:38:26.467-07:00</updated><title type='text'>How does Twister differ from MRnet?</title><content type='html'>There are many differences between &lt;a href="http://www.paradyn.org/mrnet/"&gt;MRnet &lt;/a&gt;and MapReduce and then with Twister. I will list some here.&lt;br /&gt;&lt;br /&gt;In MapReduce the communication between map and reduce stage of the computation is a graph not a tree. A map can produce (key,value) pairs that may end up in multiple reducers. In MapReduce the framework does not impose any communication topology or connection topology between map and reduce stages of the computation. It is purely the intermediate keys that determine the communication pattern. For example, in an associative and commutative operations such as sum or histogramming, how the intermediate keys are used to distribute intermediate results among the reduce tasks is not that important.However for operations such as sorting, or matrix operations, one can select the intermediate keys in such a way that specific keys goes to specific reduce tasks. Again this is not defined by the network, but the keys and the key selector functions.&lt;br /&gt;&lt;br /&gt;Twister uses pub/sub messaging to implement a MapReduce runtime,especially to support iterative MapReduce computations. Similar to other MapReduce runtimes it gives more focus on processing data while maintain data- process affinity. Map and reduce functions in Twister are long running processes providing distinction between static data and variable data. It supports broadcast, scatter type data distributions and reading data via the local disks. I am not sure how the latter two functions can be handled using MRnet.&lt;br /&gt;&lt;br /&gt;Comparing MRnet with MapReduce for data processing applications is an interesting analysis one can do though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-347855262476141066?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/347855262476141066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=347855262476141066' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/347855262476141066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/347855262476141066'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2010/03/how-does-twister-differ-from-mrnet.html' title='How does Twister differ from MRnet?'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-4712080789684313318</id><published>2010-02-09T15:26:00.000-08:00</published><updated>2010-02-09T19:03:08.398-08:00</updated><title type='text'>Twister: Iterative MapReduce</title><content type='html'>MapReduce programming model has simplified the implementations of many data parallel applications. The simplicity of the programming model and the quality of services provided by many implementations of MapReduce attract a lot of enthusiasm among parallel computing communities. From the years of experience in applying MapReduce programming model to various scientific applications we identified a set of extensions to the programming model and improvements to its architecture which will expand the applicability of MapReduce to more classes of applications.&lt;br /&gt;&lt;br /&gt;Twister is a lightweight MapReduce runtime we have developed by incorporating these enhancements. We have published several scientific papers [1-5] explaining the key concepts and comparing it with other MapReduce implementations such as Hadoop and DryadLINQ. Today we would like to announce its first release.&lt;br /&gt;&lt;br /&gt;Key Features of Twister are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Distinction on static and variable data&lt;/li&gt;&lt;li&gt;    Configurable long running (cacheable) map/reduce tasks&lt;/li&gt;&lt;li&gt;    Pub/sub messaging based communication/data transfers&lt;/li&gt;&lt;li&gt;    Combine phase to collect all reduce outputs&lt;/li&gt;&lt;li&gt;    Efficient support for Iterative MapReduce computations (extremely faster than Hadoop or DryadLINQ)&lt;/li&gt;&lt;li&gt;    Data access via local disks&lt;/li&gt;&lt;li&gt;    Lightweight (5600 lines of code)&lt;/li&gt;&lt;li&gt;    Tools to manage data &lt;/li&gt;&lt;/ul&gt;For more details please visit &lt;a href="http://www.blogger.com/www.iterativemapreduce.org"&gt;www.iterativemapreduce.org&lt;/a&gt; and let us know your thoughts and experience using Twister.&lt;br /&gt;&lt;br /&gt;Thank you,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://salsaweb.ads.iu.edu/salsa/"&gt;SALSAHPC Team&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;[1]. Jaliya Ekanayake, (Advisor: Geoffrey Fox) &lt;a href="http://grids.ucs.indiana.edu/ptliupages/publications/SC09-abstract-jaliya-ekanayake.pdf"&gt;Architecture and Performance of Runtime Environments for Data Intensive Scalable Computing&lt;/a&gt;, Doctoral Showcase, SuperComputing2009.&lt;br /&gt;[2]. Jaliya Ekanayake, Atilla Soner Balkir, Thilina Gunarathne, Geoffrey Fox, Christophe Poulain, Nelson Araujo, Roger Barga, &lt;a href="http://grids.ucs.indiana.edu/ptliupages/publications/eScience09-camera-ready-submission.pdf"&gt;DryadLINQ for Scientific Analyses&lt;/a&gt;, Fifth IEEE International Conference on e-Science (eScience2009), Oxford, UK.&lt;br /&gt;[3]. Jaliya Ekanayake, Xiaohong Qiu, Thilina Gunarathne, Scott Beason, Geoffrey &lt;a href="http://grids.ucs.indiana.edu/ptliupages/publications/cloud_handbook_final-with-diagrams.pdf"&gt;Fox High Performance Parallel Computing with Clouds and Cloud Technologies&lt;/a&gt; Technical Report August 25 2009 to appear as Book Chapter.&lt;br /&gt;[4]. Geoffrey Fox, Seung-Hee Bae, Jaliya Ekanayake, Xiaohong Qiu, and Huapeng Yuan, Parallel &lt;a href="http://grids.ucs.indiana.edu/ptliupages/publications/CetraroWriteupJune11-09.pdf"&gt;Data Mining from Multicore to Cloudy Grids&lt;/a&gt;, High Performance Computing and Grids workshop, 2008. – An extended version of this paper goes to a book chapter.&lt;br /&gt;[5]. Jaliya Ekanayake, Shrideep Pallickara, Geoffrey Fox,  &lt;a href="http://grids.ucs.indiana.edu/ptliupages/publications/ekanayake-MapReduce.pdf"&gt;MapReduce for Data Intensive Scientific Analyses,&lt;/a&gt; Fourth IEEE International Conference on eScience, 2008, pp.277-284.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-4712080789684313318?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/4712080789684313318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=4712080789684313318' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4712080789684313318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4712080789684313318'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2010/02/twister-iterate-mapreduce.html' title='Twister: Iterative MapReduce'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-6832614723269433071</id><published>2010-01-03T21:42:00.000-08:00</published><updated>2010-01-03T22:12:02.420-08:00</updated><title type='text'>Almost MapReduce in 1992</title><content type='html'>&lt;span style="font-size:130%;"&gt;Paralex: An Environment for Parallel Programming in Distributed Systems (1992)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;by Özalp Babaoglu ,  Lorenzo Alvisi ,  Alessandro Amoreso ,  Renzo Davoli ,  Davoli Luigi ,  Luigi Alberto Giachini &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Just found this paper and read it to the end since I noticed some similarities of what they have proposed in 1992 and the current MapReduce programming model and some of the observations are still true for today as well.  I will list few of the observations/assumptions they have made showing the similarity of their work and the current MapReduce programming model.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Large-grain data flow model suitable for high-latency low bandwidth networks&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Only by keeping the communication-computation ratio to reasonable levels can we expect reasonable performance from parallel applications in such system.&lt;/span&gt; – We noticed a similar thing with performing parallel computing in Cloud infrastructures [&lt;a href="http://grids.ucs.indiana.edu/ptliupages/publications/CGLCloudReview.pdf"&gt;paper&lt;/a&gt;]&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Paralex functions mush be “pure” – no side effects&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Node corresponds to computations (functions, procedures, programs) and links indicate flow of typed data&lt;/span&gt; – Compare this with Microsoft Dryad’s DAG based programming model.&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://research.microsoft.com/en-us/projects/dryad/eurosys07.pdf"&gt;Dryad paper&lt;/a&gt; has referred to their work.  - I haven't noticed it before ;)&lt;br /&gt;&lt;br /&gt;Some of their performance measures had issues with 16MB data set because the memory they had in one of the machines was only 16 MB. Today we have the luxury of using large memories but our data sets are also grown into petabytes. What they did with NFS is now done in HDFS in Hadoop.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-6832614723269433071?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/6832614723269433071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=6832614723269433071' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/6832614723269433071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/6832614723269433071'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2010/01/almost-mapreduce-in-1992.html' title='Almost MapReduce in 1992'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-3065838154242224722</id><published>2009-12-01T12:15:00.001-08:00</published><updated>2009-12-01T12:56:01.687-08:00</updated><title type='text'>Dynamic Provisioning of Virtual Clusters</title><content type='html'>Here I will present the details of the demonstration that we (&lt;a href="http://www.infomall.org/salsa/"&gt;SALSA &lt;/a&gt;team) presented at the Super Computing 09 conference in Portland.&lt;br /&gt;&lt;br /&gt;Deploying virtual/bare-system clusters on demand is an emerging requirement in many HPC centers. The tools such as &lt;a href="http://xcat.sourceforge.net/"&gt;xCAT &lt;/a&gt;and &lt;a href="http://www.clusterresources.com/products/moab-cluster-suite.php"&gt;MOAB &lt;/a&gt;can be used to provide these capabilities on top of a physical hardware infrastructure.&lt;br /&gt;&lt;br /&gt;In this demonstration we coupled the idea of provisioning clusters with parallel runtimes. In other words, we showed that people can switch a given set of hardware nodes into different operating systems (either virtual or non-virtual) and run different applications written using various cloud technologies. Specifically we showed that it is possible to provision clusters with Hadoop on both Linux bare-system and virtual machines and Microsoft DryadLINQ on Windows Server 2008.&lt;br /&gt;&lt;br /&gt;The following diagram shows the operating system and the software stacks we used in our demonstrations.  We were able to get all configurations demonstrated except for Windows HPC on XEN VMs which does not work well due to the non-existence of para-virtualized drivers.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_k3HwFYLi7fM/SxWBIBFtkVI/AAAAAAAABV0/0Nnx_WGssuM/s1600/architecture.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 167px;" src="http://1.bp.blogspot.com/_k3HwFYLi7fM/SxWBIBFtkVI/AAAAAAAABV0/0Nnx_WGssuM/s320/architecture.png" alt="" id="BLOGGER_PHOTO_ID_5410372502086848850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We setup our demonstration in 4 clusters each with 64 CPU cores (8 nodes with 8 CPU cores each). The first 3 clusters were configured with RedHat Linux bare-system, RedHat Linux on XEN, and Windows HPC 2008 operating systems respectively. The last cluster is configured to dynamically switch between any of the above configurations. In Linux (both bare-system and XEN) clusters we ran a Smith Waterman dissimilarity calculation using Hadoop as our demo application while on Windows we ran a DryadLINQ implementation of the same application.&lt;br /&gt;&lt;br /&gt;We developed a performance monitoring infrastructure based on pub-sub messaging  to collect and summarize CUP and memory utilization of individual clusters and a performance visualization GUI (Thanks Saliya for the nice GUI) as our front end demonstration component.  Following two diagrams show the monitoring architecture and the GUI of our demo.&lt;br /&gt;With the 3 static clusters we were able to demonstrate and compare the performance of Hadoop (both on Linux bare-system and XEN) and DryadLINQ to the people. It also provides a way to show the overhead of virtualization as well. The dynamic cluster demonstrated the applicability of the dynamically provisionable virtual/physical clusters with parallel runtimes for scientific research.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_k3HwFYLi7fM/SxWBV2RC7VI/AAAAAAAABV8/FiKqEcFoyHo/s1600/monitoring_architecture.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 181px;" src="http://1.bp.blogspot.com/_k3HwFYLi7fM/SxWBV2RC7VI/AAAAAAAABV8/FiKqEcFoyHo/s320/monitoring_architecture.png" alt="" id="BLOGGER_PHOTO_ID_5410372739699764562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_k3HwFYLi7fM/SxWBa1hTcGI/AAAAAAAABWE/crV0H9_Y7os/s1600/monitor_full.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 193px;" src="http://2.bp.blogspot.com/_k3HwFYLi7fM/SxWBa1hTcGI/AAAAAAAABWE/crV0H9_Y7os/s320/monitor_full.png" alt="" id="BLOGGER_PHOTO_ID_5410372825398866018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It was a wonderful team work involving all the members of the SALSA team and the members of IU UITS. What is more amazing is that we go this very successful demonstration built from the scratch in less than one month.&lt;br /&gt;We will upload a video of the demonstration soon.&lt;br /&gt;&lt;br /&gt;Here is a photo of most of the members of our group.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_k3HwFYLi7fM/SxWB0k9V7ZI/AAAAAAAABWM/uSQnpakFrOc/s1600/100_8343.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_k3HwFYLi7fM/SxWB0k9V7ZI/AAAAAAAABWM/uSQnpakFrOc/s320/100_8343.JPG" alt="" id="BLOGGER_PHOTO_ID_5410373267629665682" border="0" /&gt;&lt;/a&gt;Front row (left to right): Jaliya Ekanakaye, Dr. Judy Qiu, Thilina Gunarathne, Scott Beason, Jong Choi, Saliya Ekanayake, Li Hui.&lt;br /&gt;Second row (left to right) Prof. Geoffrey Fox, Joe Rinkovsky and Jenett Tillotson.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-3065838154242224722?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/3065838154242224722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=3065838154242224722' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/3065838154242224722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/3065838154242224722'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2009/12/dynamic-provisioning-of-virtual.html' title='Dynamic Provisioning of Virtual Clusters'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_k3HwFYLi7fM/SxWBIBFtkVI/AAAAAAAABV0/0Nnx_WGssuM/s72-c/architecture.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-4006489856219639182</id><published>2009-11-01T21:03:00.000-08:00</published><updated>2009-11-01T21:05:16.509-08:00</updated><title type='text'>CloudComp09 Presentation</title><content type='html'>I shared the slides presented at CloudComp09 via &lt;a href="http://www.slideshare.net/jaliyae/high-performance-parallel-computing-with-clouds-and-cloud-technologies"&gt;slideshare&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-4006489856219639182?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/4006489856219639182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=4006489856219639182' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4006489856219639182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4006489856219639182'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2009/11/cloudcomp09-presentation.html' title='CloudComp09 Presentation'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-4348458143008426553</id><published>2009-11-01T20:41:00.000-08:00</published><updated>2009-11-01T21:01:11.186-08:00</updated><title type='text'>Windows Server 2008 on Xen</title><content type='html'>As part of our ongoing research, we started running DryadLINQ applications on a virtual cluster running Windows Server 2008 VMs on top of Xen. Although we noticed acceptable performance degradation with para-virtualized Linux guests (from our previous research), with Windows we noticed extremely higher performance degradations. Also we noticed that whenever we run a DryadLINQ job which has considerable amount of communication, the VM that runs the DryadLINQ job manager crashes. We had an exactly similar experience with Windows VMs provided by GoGrid earlier. However, those VMs had only 1 CPU core where as the VMs we just ran have 8 CPU cores. (Note: This effect has nothing to do with DryadLINQ, but the handling of I/O operations by the guest and the host OSs)&lt;br /&gt;&lt;br /&gt;Overall, the full virtualization approach may not seem to work well for parallel applications. Especially for applications with considerable inter-process communication requirements. Following is a brief analysis I wrote.&lt;br /&gt;&lt;br /&gt;===========================&lt;br /&gt;If we look at the development of the virtualization technologies, we can see these three virtualization techniques.&lt;br /&gt;&lt;br /&gt;Full virtualization -&gt; Para-Virtualization -&gt; Hardware Assisted Virtualization&lt;br /&gt;&lt;br /&gt;(e.g. VM Ware Server) e.g. Xen, Hyper-V e.g. Hyper-V, Virtual Iron, VM-Ware Workstation (64 bit)&lt;br /&gt;&lt;br /&gt;So far, para-virtualization seems to be the best approach for virtualization to achieve better performance. However, it requires modified guest operating systems. This is the problem for Windows guests, and that is why we cannot run Windows Server 2008 on Xen as para-vritualized guest. According to [1] the hardware assisted approach is still in its early stages and not performing well, but I think this will catch up soon.&lt;br /&gt;&lt;br /&gt;Hyper-V coming from Microsoft, may provide better virtualization solutions to Windows guests and currently it supports both para-virtualization and hardware assisted virtualization.&lt;br /&gt;&lt;br /&gt;Given these observations and the observations from our tests, currently it does not seem feasible to have one virtualization layer (like Xen) on a cluster and provide both Windows and Linux VMs for parallel computations. (Here I assumed that Linux on Xen is performing better than Linux on Hyper-V, we need to verify this).&lt;br /&gt;&lt;br /&gt;However, if we go for a hybrid approach such as using technologies like XCAT to boot Windows and Linux bare-metal host environments, and provide Linux virtualization using Xen and Windows virtualization using Hyper-V, we may be able to utilize best technologies from both worlds.&lt;br /&gt;&lt;br /&gt;Then the next thing to figure out is the performance and how we can run Dryad, Hadoop, and MPI on these virtual environments.&lt;br /&gt;&lt;br /&gt;Although we did not see this “&lt;span style="font-weight: bold;"&gt;mythical” 7&lt;/span&gt;% virtualization overhead, they are not so bad as well (on private clouds /clusters at least – we saw 15% to 40% performance degradations).&lt;br /&gt;&lt;br /&gt;However, we need to figure out ways of handling large data sets in VMs to use Hadoop and Dryad for wide variety of problems. The main motivation of MapReduce is “moving computation to data”. In virtualized environments, we currently store only an image of the VM without data. If the data is large we have to either move them to the local disks of virtual resources before we run computations, or attach blobs/block storage devices to VMs. The first approach does not preserve anything once the virtual resource is rebooted, whereas the second approach adds network links in between the data and computations (moving data). If our problems are not so data intensive, we can simply ignore these aspects for the moment, but I think this is something worth investigating.&lt;br /&gt;==========================&lt;br /&gt;Hope to add more results soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-4348458143008426553?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/4348458143008426553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=4348458143008426553' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4348458143008426553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4348458143008426553'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2009/11/windows-server-2008-on-xen.html' title='Windows Server 2008 on Xen'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-8276034490340681223</id><published>2009-09-17T08:37:00.001-07:00</published><updated>2009-09-17T08:38:38.925-07:00</updated><title type='text'>Tips for MapReduce with Hadoop</title><content type='html'>I found &lt;a href="http://www.cloudera.com/blog/2009/05/18/10-mapreduce-tips/"&gt;these &lt;/a&gt;nice set of tips for fine tuning MapReduce programs using Hadoop from the &lt;a href="http://www.cloudera.com/"&gt;Cloudera &lt;/a&gt;web site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-8276034490340681223?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/8276034490340681223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=8276034490340681223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/8276034490340681223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/8276034490340681223'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2009/09/tips-for-mapreduce-with-hadoop.html' title='Tips for MapReduce with Hadoop'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-3656363180850838657</id><published>2009-09-11T22:16:00.000-07:00</published><updated>2009-09-11T22:50:23.186-07:00</updated><title type='text'>MSR Internship is over - Going back to IU</title><content type='html'>Today I finished my 3 months internship at Microsoft research. It was quite a wonderful experiance for me, and I was able to accomplish most of my internship goals.&lt;br /&gt;&lt;br /&gt;At the beginning of my internship I was given the following goals for my internship.&lt;br /&gt;Evaluate the usability of DryadLINQ for scientific analyses&lt;br /&gt;– Develop a series of scientific applications using DryadLINQ&lt;br /&gt;– Compare them with similar MapReduce implementations (E.g. Hadoop)&lt;br /&gt;– Run above DryadLINQ applications on Cloud&lt;br /&gt;&lt;br /&gt;During the internship, I developed four DryadLINQ applications and optimized them for performance and also identified several improvements to the current DryadLINQ code base.&lt;br /&gt;&lt;br /&gt;I did a detailed performance analysis of the Cap3, HEP, Kmeans applications developed using DryadLINQ comparing them with Hadoop implementations of the same applications. Performance of the pair wise distance calculation application was compared with an MPI implementation of the same application. These findings were all included in the following two papers.&lt;br /&gt;&lt;a href="http://grids.ucs.indiana.edu/ptliupages/publications/DryadLINQ_for_Scientific_Analyses.pdf"&gt;DryadLINQ for Scientific Analyses&lt;/a&gt;&lt;br /&gt;&lt;a href="http://grids.ucs.indiana.edu/ptliupages/publications/MTAGS09-23.pdf"&gt;Cloud Technologies for Bioinformatics Applicaitons&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We (I and my colleague intern –Atilla Balkir) were able to deploy a Windows HPC cluster on GoGrid cloud. I was able to run Cap3 application on Cloud but other applications did not work due to the limitations of the GoGrid infrastructure.&lt;br /&gt;&lt;br /&gt;Overall we have the following conclusions regarding DryadLINQ runtime.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;We developed six DryadLINQ applications with various computation, communication, and data access requirements&lt;br /&gt;All DryadLINQ applications work, and in many cases perform better than Hadoop&lt;/li&gt;&lt;li&gt;&lt;span style="color:#cc0000;"&gt;We can definitely use DryadLINQ for scientific analyses&lt;/span&gt; &lt;/li&gt;&lt;li&gt;We did not implement (find)&lt;br /&gt;–Applications that can only be implemented using DryadLINQ but not with typical MapReduce&lt;/li&gt;&lt;li&gt;Current release of DryadLINQ has some performance limitations&lt;/li&gt;&lt;li&gt;DryadLINQ hides many aspects of parallel computing from user&lt;br /&gt;Coding is much simpler in DryadLINQ than Hadoop (provided that the performance issues are fixed)&lt;/li&gt;&lt;li&gt;More simplicity comes with less control and sometimes it is hard to fine-tune&lt;/li&gt;&lt;li&gt;We showed that it is possible to run DryadLINQ on Cloud&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I got all the necessary support from my mentor (Nelson Araujo), Chirstophe, and the ARTS team @ MSR in accomplishing the objectives of my internship. I would also like to thank Dryad team at Silicon Valley for their dedicated support as well. Last but not least, the support from my advisor (&lt;a href="http://www.informatics.indiana.edu/research/profiles/gcf.asp"&gt;Prof. Geoffrey Fox&lt;/a&gt;) and the &lt;a href="http://www.infomall.org/multicore/index.php/Main_Page"&gt;SALSA team&lt;/a&gt; at pervasive technology labs was a tremendous encouragement to me.&lt;/p&gt;&lt;p&gt;Sunday we are planning to head back to Indiana with a two week old baby - Our small miracle - in our hands.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-3656363180850838657?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/3656363180850838657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=3656363180850838657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/3656363180850838657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/3656363180850838657'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2009/09/msr-internship-is-over-going-back-to-iu.html' title='MSR Internship is over - Going back to IU'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-4513308936590502671</id><published>2009-09-07T21:04:00.001-07:00</published><updated>2009-09-07T21:45:00.473-07:00</updated><title type='text'>DryadLINQ for Scientific Analyses</title><content type='html'>I spent the last 3 months at Microsoft Research as an intern doing research on DryadLINQ. Our goal (myself and a another intern - &lt;a href="http://www.cs.uchicago.edu/people/soner"&gt;Atilla Soner Balkir&lt;/a&gt;) was to evalute the usability of DryadLINQ for scientific applications.&lt;br /&gt;&lt;br /&gt;We selected a series of scientific applications and developed DryadLINQ programs for those applications, and evaluated their performances. We compared the performance of the DryadLINQ applicaitons against Hadoop and in some cases MPI versions of the same applications.&lt;br /&gt;&lt;br /&gt;We identified several improvments to DryadLINQ and its software stack, and found workarounds to these inefficienies and was able to run most applicaitons with 100% CPU utilizations.&lt;br /&gt;&lt;br /&gt;We compiled a paper including our findings regarding DryadLINQ and submitted it for the eScience09 conference. You can find a draft of this technical paper &lt;a href="http://grids.ucs.indiana.edu/ptliupages/publications/DryadLINQ_for_Scientific_Analyses.pdf"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hope this will be usefull to some of  you who are developing applications using DryadLINQ.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-4513308936590502671?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/4513308936590502671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=4513308936590502671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4513308936590502671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4513308936590502671'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2009/09/dryadlinq-for-scientific-analyses.html' title='DryadLINQ for Scientific Analyses'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-7134836871843657982</id><published>2009-07-13T11:43:00.001-07:00</published><updated>2009-07-13T11:44:32.638-07:00</updated><title type='text'>Microsoft released Dryad and DryadLINQ  for Academic Use</title><content type='html'>&lt;a href="http://research.microsoft.com/en-us/collaboration/tools/dryad.aspx"&gt;http://research.microsoft.com/en-us/collaboration/tools/dryad.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-7134836871843657982?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/7134836871843657982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=7134836871843657982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/7134836871843657982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/7134836871843657982'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2009/07/microsoft-released-dryad-and-dryadlinq.html' title='Microsoft released Dryad and DryadLINQ  for Academic Use'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-4406982369416497863</id><published>2009-06-19T00:33:00.000-07:00</published><updated>2009-06-19T00:38:43.446-07:00</updated><title type='text'>High Performance Parallel Computing with Clouds and Cloud Technologies</title><content type='html'>We compiled the latest results/findings of our research as a paper and submitted to CloudComp2009.&lt;br /&gt;Following is the abstract of the paper.&lt;br /&gt;&lt;br /&gt;Infrastructure services (Infrastructure-as-a-service), provided by cloud vendors, allow any user to provision a large number of compute instances fairly easily. Whether leased from public clouds or allocated from private clouds, utilizing these virtual resources to perform data/compute intensive analyses requires employing different parallel runtimes to implement such applications. Among many parallelizable problems, most “pleasingly parallel” applications can be performed using MapReduce technologies such as Hadoop, CGL-MapReduce, and Dryad, in a fairly easy manner. However, many scientific applications, which require complex communication patterns, still require optimized runtimes such as MPI. We first discuss large scale data analysis using different MapReduce implementations and then, we present a performance analysis of high performance parallel applications on virtualized resources.&lt;br /&gt;&lt;br /&gt;You can find the draft of the paper &lt;a href="http://grids.ucs.indiana.edu/ptliupages/publications/cloudcomp_submission.pdf"&gt;here&lt;/a&gt;. &lt;a href="http://grids.ucs.indiana.edu/ptliupages/publications/cloudcomp_submission.pdf"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-4406982369416497863?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/4406982369416497863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=4406982369416497863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4406982369416497863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4406982369416497863'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2009/06/high-performance-parallel-computing.html' title='High Performance Parallel Computing with Clouds and Cloud Technologies'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-5082946207562991352</id><published>2009-05-14T11:42:00.000-07:00</published><updated>2009-05-14T11:46:34.962-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MapReduce'/><category scheme='http://www.blogger.com/atom/ns#' term='Parallelism'/><category scheme='http://www.blogger.com/atom/ns#' term='Hadoop'/><title type='text'>How to control the number of tasks per node when you run your jobs in Hadoop cluster?</title><content type='html'>One of my colleague asked me the following question.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How to control the number of tasks per node when you run your jobs in Hadoop cluster?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We can do this by modifying the hadoop-site.xml. However, the exact xml for the properties are there in hadoop-default.xml.&lt;br /&gt;&lt;br /&gt;So here is the method.&lt;br /&gt;&lt;br /&gt;Modify the $HADOOP_HOME/conf/hadoop-site.xml and add the following lines.&lt;br /&gt;&lt;property&gt;&lt;name&gt;&lt;/name&gt;&lt;/property&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;name&amp;gt;mapred.tasktracker.map.tasks.maximum&amp;lt;/name&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;value&amp;gt;8&amp;lt;/value&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;name&amp;gt;mapred.tasktracker.reduce.tasks.maximum&amp;lt;/name&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;value&amp;gt;2&amp;lt;/value&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can find these properties in Hadoop-default.xml, but better not modify them there.&lt;br /&gt;Instead, copy the properties to hadoop-site.xml and change the value. Then the default values will be overridden by the properties in the hadoop-site.xml.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;JobConf.setNumMapTasks()&lt;/span&gt;. Is to define how many map tasks Hadoop should execute for the entire job. This simply determines the data splitting factor.&lt;br /&gt;&lt;br /&gt;With all three parameters we can control the Hadoop's job parallelism better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-5082946207562991352?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/5082946207562991352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=5082946207562991352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/5082946207562991352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/5082946207562991352'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2009/05/how-to-control-number-of-tasks-per-node.html' title='How to control the number of tasks per node when you run your jobs in Hadoop cluster?'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-5236118096969277198</id><published>2009-05-13T16:35:00.001-07:00</published><updated>2009-05-14T11:47:42.078-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Dryad'/><category scheme='http://www.blogger.com/atom/ns#' term='DryadLINQ'/><title type='text'>High Energy Physics Data Analysis using Microsoft Dryad</title><content type='html'>A demo of the Dryad version of the HEP data analysis can be found &lt;a href="http://cs.indiana.edu/%7Ejekanaya/papers/demos/hep_demo.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-5236118096969277198?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/5236118096969277198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=5236118096969277198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/5236118096969277198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/5236118096969277198'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2009/05/high-energy-physics-data-analysis-using.html' title='High Energy Physics Data Analysis using Microsoft Dryad'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-7005566383488210485</id><published>2009-04-05T09:16:00.000-07:00</published><updated>2009-05-14T11:47:26.265-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MapReduce'/><category scheme='http://www.blogger.com/atom/ns#' term='Dryad'/><category scheme='http://www.blogger.com/atom/ns#' term='MPI'/><category scheme='http://www.blogger.com/atom/ns#' term='Hadoop'/><title type='text'>Classes of MapReduce Applications and Different Runtimes</title><content type='html'>In my experiance with MapReduce runtiems and the applications, I have noticed few classes of applications where the users can benifit from the available MapReduce runtimes. Let me list them below with their common characteristics.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Pleasingly Parallel Applications.&lt;/span&gt;&lt;br /&gt;E.g. Processing a set of bilogy data files using &lt;a href="http://pbil.univ-lyon1.fr/cap3.php"&gt;Cap3 &lt;/a&gt;program.&lt;br /&gt;&lt;br /&gt;This could be the most common class of parallel applications that many users needs. The common characteristic is the application of a function or  a program on a collection of data files producing another set of data files. Processing a set of medical images is also another type of similar application.&lt;br /&gt;&lt;br /&gt;When using MapReduce runtimes for these type of applications, we can simply use "map only"&lt;br /&gt;mode of the runtimes. For example, in Hadoop we can use 0 reduce tasks as follows.&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;JobConf jc = new JobConf(getConf(), Cap3Analysis.class);&lt;br /&gt;jc.setNumReduceTasks(numReduceTasks);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I impletented the "map only" support for CGL-MapReduce as well and it greatly increase the usability of the runtime to another large class of parallel applications.&lt;br /&gt;&lt;br /&gt;More information about Cap3 and the performance of different runtimes such as Hadoop, Dryad, and CGL-MapReduce can be found in the &lt;a href="http://www.cs.indiana.edu/%7Ejekanaya/cglmr.html"&gt;CGL-MapReduce web page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This class of applications also suite best for the &lt;a href="http://www.microsoft.com/azure/default.mspx"&gt;Azure &lt;/a&gt;applications written using &lt;a href="http://msdn.microsoft.com/en-us/library/dd179341.aspx"&gt;Worker Role&lt;/a&gt; where a set of workers are assinged to process a computation tasks available in a Queue.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Typical MapReduce Applications&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;E.g. High Energy Physics Data Analysis, where a set of analysis functions are executed on each data file of a collection of data files during the "map" stage producing a collection of intermediate histograms and in the "reduce" stage these histograms are merged together to produce the final histogram.&lt;br /&gt;&lt;br /&gt;Histogramming words and Distributed Grep are very common examples used in most tutorials.&lt;br /&gt;&lt;br /&gt;This class utilizes complete execution model of MapReduce. The application of the "reduce" stage and the function performed by that stage depend on the "&lt;span style="font-style: italic;"&gt;associative&lt;/span&gt;" and "&lt;span style="font-weight: bold;"&gt;commutative&lt;/span&gt;" properties of the application itself.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Iterative MapReduce Applications.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a complex class of applications where we need to apply mutliple stages of MapReduce computations to accomplish the data analysis task. Kmeans clustering is a simple application of this nature, where each iteration of MapReduce cluster a set of data points to a given number of cluster centers. The next iteration takes the previous cluster centers as the input and calculate another set of cluster centers minimizing the difference.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Matrix Multiplication&lt;/span&gt; and&lt;span style="font-style: italic;"&gt; Multi Dimensional Scaling&lt;/span&gt; aretwo more similar applications of this class and many machine learning algorithms also fit to this class of applications.&lt;br /&gt;&lt;br /&gt;However, the applicability of the current runtimes such as Hadoop and Dryad for this class of applications is questionable. According to our results shown in the following graph we can see the overhead added by runtimes such as Dryad and Hadoop for such data analysis. Also note how the light weight MapReduce runtime -CGL-MapReduce - and its support for iterative applications have enabled it to produce close results with MPI.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_k3HwFYLi7fM/SdkIfHDFEbI/AAAAAAAABTo/woSQMX3_1kw/s1600-h/kmeans_perf_dry_had_cgl_mpi.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 215px;" src="http://1.bp.blogspot.com/_k3HwFYLi7fM/SdkIfHDFEbI/AAAAAAAABTo/woSQMX3_1kw/s320/kmeans_perf_dry_had_cgl_mpi.png" alt="" id="BLOGGER_PHOTO_ID_5321293765275881906" border="0" /&gt;&lt;/a&gt;Figure 1. Performance of different parallel run times in executing Kmeans Clustering&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_k3HwFYLi7fM/SdkIljybq7I/AAAAAAAABTw/a6TAwRKHB9M/s1600-h/kmeans_oh_dry_had_cgl_mpi.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 215px;" src="http://1.bp.blogspot.com/_k3HwFYLi7fM/SdkIljybq7I/AAAAAAAABTw/a6TAwRKHB9M/s320/kmeans_oh_dry_had_cgl_mpi.png" alt="" id="BLOGGER_PHOTO_ID_5321293876069903282" border="0" /&gt;&lt;/a&gt;Figure 2. Overhead of different parallel run times in executing Kmeans Clustering&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-7005566383488210485?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/7005566383488210485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=7005566383488210485' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/7005566383488210485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/7005566383488210485'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2009/04/classes-of-mapreduce-and-different.html' title='Classes of MapReduce Applications and Different Runtimes'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_k3HwFYLi7fM/SdkIfHDFEbI/AAAAAAAABTo/woSQMX3_1kw/s72-c/kmeans_perf_dry_had_cgl_mpi.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-3570074888540194791</id><published>2009-04-05T09:10:00.000-07:00</published><updated>2009-05-14T11:48:11.840-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hostbased authentication'/><category scheme='http://www.blogger.com/atom/ns#' term='SSH'/><title type='text'>Simple PasswordLess SSHTutorial</title><content type='html'>I was configuring Xen virtual machines to run MPI programs. Running MPI,&lt;a href="http://hadoop.apache.org/core/"&gt;Hadoop&lt;/a&gt;, or even &lt;a href="http://www.cs.indiana.edu/%7Ejekanaya/cglmr.html"&gt;CGL-MapReduce&lt;/a&gt; require password less login between the nodes of a cluster.&lt;br /&gt;&lt;br /&gt;It is the same old steps that we need to perform, but found this &lt;a href="http://blogs.translucentcode.org/mick/archives/000230.html"&gt;simple tutorial&lt;/a&gt; which list the process very succinctly.&lt;br /&gt;&lt;br /&gt;To get MPI to work you also need to add the following line to your bash (or your shell) profile.&lt;br /&gt;&lt;br /&gt;export LAMRSH="ssh -x"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-3570074888540194791?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/3570074888540194791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=3570074888540194791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/3570074888540194791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/3570074888540194791'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2009/04/simple-passwordless-sshtutorial.html' title='Simple PasswordLess SSHTutorial'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-3490261635032701885</id><published>2009-02-27T22:53:00.000-08:00</published><updated>2009-02-27T23:26:57.333-08:00</updated><title type='text'>Eucalyptus without a DNS</title><content type='html'>It has been a while that I last blog relating to my research. I went to my home country (Sri Lanka) for the winter break and came back in mid January. After coming here I just realized that I need a big vacation again :). I had to finish a lot of pending work and now back on track and I can blog again. Still it is 1.56 am in the morning :)&lt;br /&gt;&lt;br /&gt;I just got a set of Xen VMs running with &lt;a href="http://eucalyptus.cs.ucsb.edu/"&gt;Eucalyptus &lt;/a&gt;after a few hours of debugging to fix the following warning that I got when I try to ssh between the VM instances.&lt;br /&gt;-----&lt;br /&gt;&lt;br /&gt;get_socket_address: getnameinfo 8 failed: Name or service not known&lt;br /&gt;userauth_hostbased: cannot get local ipaddr/name&lt;br /&gt;-----&lt;br /&gt;&lt;br /&gt;Actually, it has nothing to do with the VM usage but something I have missed in configuring host based authentication using ssh.&lt;br /&gt;&lt;br /&gt;Since it could be helpful to someone else, let me describe the problem and the solution.&lt;br /&gt;I was trying to start a set of VM instances using a Eucalyptus cloud that has been setup in a iDataplex cluster here at Indiana. I was able to follow the guidelines and start the VMs.&lt;br /&gt;&lt;br /&gt;Then my goal is to run a set of MPI applications on these VMs. To get MPI working, I need to have password less login between the nodes. As I have previously configured this in the VM image things worked fine but it gave the above warning when I try login between nodes, which then stops MPI daemons from starting.&lt;br /&gt;&lt;br /&gt;When I used these VM images with Eucalyptus public cloud every VM instance got assigned a static IP. So, setting up any DNS was not required. This time, however, we use only one static IP for one of the nodes of the VM instances while the rest have dynamic IPs. Also there is no DNS setup for these VM instances. This causes the above warning when I try to login between the nodes using ssh.&lt;br /&gt;&lt;br /&gt;Joe Rinkovsky a Unix Systems Specialist @ Indiana explained me the fix. I need to add (IP , name) pairs to /etc/hosts file of the head node of the VM instances. The solution is explained &lt;a href="http://users.telenet.be/mydotcom/howto/linux/sshpasswordless.htm"&gt;here&lt;/a&gt; under "make sure name resolution works" which I haven't noticed till today :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-3490261635032701885?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/3490261635032701885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=3490261635032701885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/3490261635032701885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/3490261635032701885'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2009/02/eucalyptus-without-dns.html' title='Eucalyptus without a DNS'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-1438198745223369960</id><published>2008-11-17T11:00:00.000-08:00</published><updated>2008-11-17T11:05:28.959-08:00</updated><title type='text'>MapReduce for Data Intensive Scientific Analyses</title><content type='html'>Most scientific data analyses comprise analyzing voluminous data collected from various instruments. Efficient parallel/concurrent algorithms and frameworks are the key to meeting the scalability and performance requirements entailed in such scientific data analyses. The recently introduced MapReduce technique has gained a lot of attention from the scientific community for its applicability in large parallel data analyses. Although there are many evaluations of the MapReduce technique using large textual data collections, there have been only a few evaluations for scientific data analyses. The goals of this paper are twofold. First, we present our experience in applying the MapReduce technique for two scientific data analyses: (i) High Energy Physics data analyses; (ii) Kmeans clustering. Second, we present CGL-MapReduce, a stream based MapReduce implementation and compare its performance with Hadoop.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.cs.indiana.edu/%7Ejekanaya/papers/eScience-final.pdf"&gt;paper&lt;/a&gt; accepted for the eScience 2008.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-1438198745223369960?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/1438198745223369960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=1438198745223369960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/1438198745223369960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/1438198745223369960'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2008/11/mapreduce-for-data-intensive-scientific.html' title='MapReduce for Data Intensive Scientific Analyses'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-8354093216479431704</id><published>2008-10-10T12:38:00.000-07:00</published><updated>2008-10-10T13:05:24.738-07:00</updated><title type='text'>Multi Dimensional Scaling (MDS) using MapReduce</title><content type='html'>&lt;div style="text-align: justify;"&gt;    &lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;As part of my ongoing research on various parallelization techniques, I implemented a MapReduce version of a MDS program. My colleague &lt;/span&gt;&lt;a style="font-family: arial;" href="http://grids.ucs.indiana.edu/ptliupages/publications/hpcsApril12-08.pdf"&gt;Seung-Hee Bea&lt;/a&gt;&lt;span style="font-family:arial;"&gt; has developed the in memory  implementation of MDS using C#  which runs on a multi-core computers. As the first step in converting that algorithm to a MapReduce implementation, I implemented a single threaded version of the same program in Java (since I am planning to use CGL-MapReduce as my MapReduce runtime). I ran this program to reduce 1024 four dimension (4D) data set to a 3D data set and measured the execution time of the different parts of the program. The result showed that&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt; 97.7%&lt;/span&gt;&lt;span style="font-family:arial;"&gt; of the overall execution time of this program is used for matrix multiplication (both square matrices and matrix and vector multiplications).&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;   This observation motivated me to first implement the matrix multiplication in MapReduce and parallelize the matrix multiplication part of the entire computation using MapReduce technique. I developed both square matrix and matrix and vector multiplication algorithms using CGL-MapReduce and incorporated these to the MDS algorithm.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;   I tested this MapReduce version of the MDS program using 1024 and 4096 points data sets (4 dimensional data reduced to 3D data) and obtained the following results. The data I used has a predefined structure and the results show the exact structure of the data. In addition the results also tally with the results of the single threaded program. So I can reasonably assume that the program performs as expected. The program performed the MDS on &lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;1024&lt;/span&gt;&lt;span style="font-family:arial;"&gt; data set in nearly &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:100%;"  &gt;11 minuites&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt; and the &lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;4096&lt;/span&gt;&lt;span style="font-family:arial;"&gt; data set in &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:100%;"  &gt;2 hours and 40 minuites&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_k3HwFYLi7fM/SO-wEXbQLmI/AAAAAAAABR8/4PHHcYsPjZc/s1600-h/GD_4D_496_1-24_all.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_k3HwFYLi7fM/SO-wEXbQLmI/AAAAAAAABR8/4PHHcYsPjZc/s320/GD_4D_496_1-24_all.png" alt="" id="BLOGGER_PHOTO_ID_5255612879218945634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="font-family:arial;"&gt;Figure 1. Resulting clusters of Multi Dimensional Scaling. Left hand side images shows the clusters visualized using &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.cats.rwth-aachen.de/software/meshing/meshview"&gt;MeshView&lt;/a&gt;&lt;span style="font-family:arial;"&gt; software and the right hand side images illustrate the predefined structure expected in the data set using lines drawn on the same image.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;Memory Size Limitation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:arial;"&gt;    The current MapReduce implementation of the MDS algorithm handles only the matrix multiplication in the MapReduce style. However, I believe that we can come up with a different algorithm which will allow most of the computations performed in MDS to be performed using MapReduce. This will reduce the amount of data that needs to be held in-memory by the master program allowing the MDS program to handle larger problems utilizing the total memory available in the distributed setting.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-8354093216479431704?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/8354093216479431704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=8354093216479431704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/8354093216479431704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/8354093216479431704'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2008/10/multi-dimensional-scaling-mds-using.html' title='Multi Dimensional Scaling (MDS) using MapReduce'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_k3HwFYLi7fM/SO-wEXbQLmI/AAAAAAAABR8/4PHHcYsPjZc/s72-c/GD_4D_496_1-24_all.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-2854696854220768296</id><published>2008-08-20T17:53:00.000-07:00</published><updated>2008-08-26T20:46:25.902-07:00</updated><title type='text'>Hadoop as a Batch Job using PBS</title><content type='html'>During my previous data analyses using  Hadoop and CGL-MapReduce I had to use the compute resources accessible via a job queue. For this purpose I used the Quarry cluster @ Indiana University which support batch job submissions via &lt;a href="http://en.wikipedia.org/wiki/Portable_Batch_System"&gt;Portable Batch System&lt;/a&gt;(PBS).  I contacted one of the system administrators of the Quarry  (George Wm Turner) and he point me to the Hadoop On Demand (&lt;a href="http://hadoop.apache.org/core/docs/r0.16.4/hod.html"&gt;HOD&lt;/a&gt;) project of Apache which mainly try to solve the problem that I am facing.&lt;br /&gt;&lt;br /&gt;We gave HOD a serious try but could not get it working the way we wanted. What we tried was to install HOD in set of nodes and let users to use it on demand via a job queue. This option simply did not work for multiple users, since the configurations options for the file system overlap between the users causing only one user to use Hadoop at a given time.&lt;br /&gt;&lt;br /&gt;With this situation, I decided to give it a try to start Hadoop dynamically using PBS. The task the script should perform is as follows.&lt;br /&gt;&lt;br /&gt;1. Identify the master node&lt;br /&gt;2. Identify the slave nodes&lt;br /&gt;3. Update $HADOOP_HOME/conf/masters and $HADOOP_HOME/conf/slaves files&lt;br /&gt;4. UPdate the $HADOOP_HOME/conf/hadoop-site.xml&lt;br /&gt;5. Cleanup any hadoop file system specific directories created in previous runs&lt;br /&gt;6. Format a new Hadoop Distribtued File System (HDFS)&lt;br /&gt;7. Start Hadoop daemons&lt;br /&gt;8. Execute the map-reduce computation&lt;br /&gt;9. Stop Daemons&lt;br /&gt;10. Stop HDFS&lt;br /&gt;&lt;br /&gt;Although the list is bit long, most of the tasks are straigt forward to perfom in a shell script.&lt;br /&gt;&lt;br /&gt;The first problem I face is finding the IP addresses of the nodes. PBS passes this information via the variable PBS_NODEFILE. However, in a multi-core and multi-processor systems the PBS_NODEFILE contains multiple entries of the same node depending on the numebr of processors we requested in each node. So I have to find the "SET" of IP addresses eliminating the duplicates. Then have to update the configuration files depending on this information. So I decided to use a Java program to do the job (with my shell script knowledge I could not find an easy way to do a "SET" operation)&lt;br /&gt;&lt;br /&gt;Once I have this simple Java file to perform the steps 1 -4 the rest is straightforward. Here is my PBS script and I the link after the script will show you the simple Java program which update the configuration files.&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#PBS -l nodes=5:ppn=8&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#PBS -l walltime=01:00:00&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#PBS -N hdhep&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#PBS -q hod&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;java -cp ~/hadoop_root/bin HadoopConfig $PBS_NODEFILE ~/hadoop-0.17.0/conf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;for line in `cat $PBS_NODEFILE`;do&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; echo $line&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; ssh $line rm -rf /tmp/hadoop*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;done&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var=`head -1 $PBS_NODEFILE`&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;echo $var&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ssh -x $var ~/hadoop-0.17.0/bin/hadoop namenode -format&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ssh -x $var ~/hadoop-0.17.0/bin/start-dfs.sh&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sleep 60&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ssh -x $var ~/hadoop-0.17.0/bin/start-mapred.sh&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sleep 60&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ssh -x $var ~/hadoop-0.17.0/bin/hadoop jar ~/hadoop-0.17.0/hep.jar hep ~/hadoop_root /N/dc/scratch/jaliya/alldata 40 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ssh -x $var ~/hadoop-0.17.0/bin/stop-mapred.sh&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ssh -x $var ~/hadoop-0.17.0/bin/stop-dfs.sh&lt;/span&gt;&lt;br /&gt;-------------------------------------------------------------------&lt;br /&gt;[&lt;a href="http://www.cs.indiana.edu/%7Ejekanaya/HadoopConfig.java"&gt;HadoopConfig.java&lt;/a&gt;]&lt;hadoopconfig.java&gt;&lt;br /&gt;&lt;br /&gt;As you can see in the script, I use ssh to log into each node of the cluster and perform the cleaning up of the HDFS directories. Then I use SSH to login to the master node to start the Hadoop daemons.&lt;br /&gt;&lt;br /&gt;Next comes the actual execution of the data analysis task, which I have coded in the hep.jar.&lt;br /&gt;After the MapReduce computation is over the rest of the commands simply stop the daemons.&lt;br /&gt;&lt;br /&gt;This is method has more flexibility to the user and requires no changes for the batch job scheduling system. It also serves as an easy opti&lt;div class="cssButtonOuter"&gt;&lt;div class="cssButtonMiddle"&gt;&lt;div class="cssButtonInner"&gt;&lt;a&gt;Save Now&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;on when the number of MapReduce computations are smaller than the other batch jobs.&lt;br /&gt;&lt;br /&gt;However, if the cluster is dedicated to run MapReduce computations, then everybody starting and stopping a HDFS file system does not make sense. Ideally the Hadoop should be started by the adminitrators and then the users should be allowed to  simply execute the MapReduce computations on it.&lt;br /&gt;&lt;br /&gt;Your comments are welcome!&lt;br /&gt;&lt;/hadoopconfig.java&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-2854696854220768296?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/2854696854220768296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=2854696854220768296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/2854696854220768296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/2854696854220768296'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2008/08/hadoop-as-batch-job-using-pbs.html' title='Hadoop as a Batch Job using PBS'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-1241137464384021257</id><published>2008-08-20T17:51:00.001-07:00</published><updated>2008-08-20T17:53:07.746-07:00</updated><title type='text'>High Energy Physics Data Analysis Using Hadoop and CGL-MapReduce</title><content type='html'>After the previous set of tests wtih parallel Kmeans clusting using CGL-MapReduce, Hadoop and MPI I shift the direction of testing to another set of tests. This time, the test is to process large number (and volume of) High Energy Physics data files and produce a histogram of interesting events. The amount of data that needs to be processed is 1 terabyte.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Converting this data analysis into a MapReduce version is straigt forward. First the data is split into managable chunks and each map task process some of these chunks and produce histograms of interested events. Reduce tasks merge the resulting histograms producing more concentrated histograms. Finally a merge operation combine all the histograms produced by the reduce tasks.&lt;br /&gt;&lt;br /&gt;I performed the above test by incresing the data size on a fixed set of computing nodes using both CGL-MapReduce and Hadoop. To see the scalability of the MapReduce approach and the scalability of the two MapReduce implementations, I performed another test by fixing the amount of data to 100GB and varying the number of compute nodes used. Figure 1 and Figure 2 shows my findings.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_k3HwFYLi7fM/SKy8OBD1iaI/AAAAAAAAA6M/pr438L08IJQ/s1600-h/es_hep.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_k3HwFYLi7fM/SKy8OBD1iaI/AAAAAAAAA6M/pr438L08IJQ/s320/es_hep.PNG" alt="" id="BLOGGER_PHOTO_ID_5236767415713761698" border="0" /&gt;&lt;/a&gt;Figure 1. HEP data analysis, execution time vs. the volume of data (fixed compute resources)&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_k3HwFYLi7fM/SKy8Wbbp55I/AAAAAAAAA6U/ELKto6_anmA/s1600-h/es_scale.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_k3HwFYLi7fM/SKy8Wbbp55I/AAAAAAAAA6U/ELKto6_anmA/s320/es_scale.PNG" alt="" id="BLOGGER_PHOTO_ID_5236767560231937938" border="0" /&gt;&lt;/a&gt;Figure 2. Total time vs. the number of compute nodes (fixed data)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Hadoop and CGL-MapReduce both show similar performance. The amount of data accessed in each analysis is extremely large and hence the performance is limited by the I/O bandwidth of a given node rather than the total processor cores. The overhead induced by the MapReduce implementations has negligible effect on the overall computation.&lt;br /&gt;&lt;br /&gt;The results in Figure 2 shows the scalability of the MapReduce technique and the two implementations. It also shows how the performance increase obtained by the parallelism diminshes after a certain number of computation node for this particular data set.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-1241137464384021257?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/1241137464384021257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=1241137464384021257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/1241137464384021257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/1241137464384021257'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2008/08/high-energy-physics-data-analysis-using.html' title='High Energy Physics Data Analysis Using Hadoop and CGL-MapReduce'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_k3HwFYLi7fM/SKy8OBD1iaI/AAAAAAAAA6M/pr438L08IJQ/s72-c/es_hep.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-6850555687263628756</id><published>2008-07-03T21:35:00.000-07:00</published><updated>2008-07-03T22:05:41.083-07:00</updated><title type='text'>July 2nd Report</title><content type='html'>&lt;span style="font-size:130%;"&gt;CGL MapReduce, Hadoop and MPI&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Last few weeks I was busy implementing CGL Map Reduce a streaming based map reduce implementation that uses a content dissemination network for all its communication.  Our main objective behind this implementation is to avoid the overhead imposed by the technique adopted by both Google and Hadoop in their map-reduce implementations, that is communicate data via files.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Instead of communicating the data between the map and reduce tasks via files, we use NaradaBrokering's publish/subscribe messaging for the data transfer. In most of the map-reduce use cases the output of the map task is significantly smaller than the size of the input data. In addition, the use of a file system based data communication mechanism is prohibitively slow for Iterative map-reduce tasks such as clustering algorithms. These observations motivates us in implementing the CGL Map Reduce.&lt;br /&gt;&lt;br /&gt;Following two graphs compares the performance of CGL MapReduce with other parallization techniques used for SPMD programs. For this benchmark we use kmeans algorithm to cluster a collection of 2D data points.&lt;br /&gt;&lt;br /&gt;First we compare the performance of CGL MapReduce with Hadoop and MPI.  We increase the size of the data set from 100000 points to 40 million and measured the total time for the computation under different implementations. MPI program was the fastest of the three while CGL MapReduce shows very close performance for large data sets. However, Hadoop's timing is almost 30 times longer than the CGL MapReduce and the MPI.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_k3HwFYLi7fM/SG2rhLeO6QI/AAAAAAAAA5U/ocRfHwjdFP4/s1600-h/mpi-mr-hadoop-large-data.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_k3HwFYLi7fM/SG2rhLeO6QI/AAAAAAAAA5U/ocRfHwjdFP4/s320/mpi-mr-hadoop-large-data.PNG" alt="" id="BLOGGER_PHOTO_ID_5219016129695901954" border="0" /&gt;&lt;/a&gt;Figure 1. Performance of CGL MapReduce vs. Hadoop vs. MPI&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Next, we performed the similar computation on a Single multi-core machine to see the effect of various parallelization techniques for this type of computations. Java threads, MPI and CGL MapReduce shows the converging results for large data sizes. In this case the main limitation factor is the memory access and hence the technique with minimum overhead to the to memory wins the battle. In our experiment the MPI performed the fastest and the Java threads performed second while CGL MapReduce is little behind Java threads. Again, Hadoop is about 30 times slower than any of the other programs.&lt;br /&gt;MPI program achieves its performance from its C++ roots. Java threads is faster than CGL MapReduce simply due to the additional overheads in the map reduce implementation. Hadoop's slowness is due to its overhead in creating and retrieving files for the communication.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_k3HwFYLi7fM/SG2r1HWA6nI/AAAAAAAAA5c/wrJ175bR8v0/s1600-h/mpi-mr-hadoop-single-computer.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_k3HwFYLi7fM/SG2r1HWA6nI/AAAAAAAAA5c/wrJ175bR8v0/s320/mpi-mr-hadoop-single-computer.PNG" alt="" id="BLOGGER_PHOTO_ID_5219016472185072242" border="0" /&gt;&lt;/a&gt;Figure 2. Performance of CGL MapReduce vs. Hadoop vs. MPI vs. Java Threads&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;More analyses will follow soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-6850555687263628756?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/6850555687263628756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=6850555687263628756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/6850555687263628756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/6850555687263628756'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2008/07/july-2nd-report.html' title='July 2nd Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_k3HwFYLi7fM/SG2rhLeO6QI/AAAAAAAAA5U/ocRfHwjdFP4/s72-c/mpi-mr-hadoop-large-data.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-6185645232065597497</id><published>2008-05-23T09:35:00.000-07:00</published><updated>2008-05-29T08:04:58.376-07:00</updated><title type='text'>May 21st Report - CTS Conference</title><content type='html'>Last two weeks, i was preparing for the cts 2008 conference. I had to prepare for my talk and the demonstration. I had to struggle with the new Dell laptop to get the demo working, simply because of the incompatibilities in the software and the necessary drivers. After tweaking some configurations, I was able to install Fedora 7 and ROOT. However, the demo started giving some unpredictable behaviors.&lt;br /&gt;&lt;br /&gt;The conference went well, did my talk and did the demonstration as well, the demo crashes few times though.&lt;br /&gt;&lt;br /&gt;During the conference, the power went off for the Irvine area and we had to stay without power for almost 16 hours. The organization committee worked hard to get the conference going with some emergency power, and the speakers had to shout the audience since we did not have power for the audio equipments.&lt;br /&gt;&lt;br /&gt;After all, it is a very fruitful experience for me. My first talk in a large conference. The keynote speeches and the panel discussions brought a lot of insight into the future of the Collaborative Technologies.&lt;br /&gt;&lt;br /&gt;Here are the &lt;a href="http://www.cs.indiana.edu/%7Ejekanaya/papers/cts-2008-slides.ppt"&gt;slides &lt;/a&gt;for my presentation.  &lt;a href="http://www.cs.indiana.edu/%7Ejekanaya/papers/cts-2008-slides.ppt"&gt;&lt;slides&gt;&lt;/slides&gt;&lt;/a&gt; &lt;a href="http://www.cs.indiana.edu/%7Ejekanaya/papers/cts-2008-slides.ppt"&gt;&lt;slides&gt;&lt;/slides&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-6185645232065597497?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/6185645232065597497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=6185645232065597497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/6185645232065597497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/6185645232065597497'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2008/05/may-21st-report-cts-conference.html' title='May 21st Report - CTS Conference'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-5800481831166036111</id><published>2008-05-13T16:58:00.000-07:00</published><updated>2008-05-13T17:13:26.177-07:00</updated><title type='text'>A ROOT bug when using DLLs</title><content type='html'>I have been trying to convert the ROOT &amp;amp; C++ program that extends the &lt;a href="www.naradabrokering.org"&gt;NaradaBrokering&lt;/a&gt;'s publish/subscribe functionalities to ROOT users to Windows. I was able to convert the pure C++ part of it and the DLL works fine in Windows.&lt;br /&gt;&lt;br /&gt;Then I tried to use the wrappers for ROOT with the generated dictionary. Code generation and the compilation all worked as expected but when I try the DLL the ROOT crashes printing garbage characters.&lt;br /&gt;&lt;br /&gt;I track down the problem for two days and was able to reduce the problem into its minimum form.&lt;br /&gt;It simply boils down to a parameter passing problem related to string values.&lt;br /&gt;&lt;br /&gt;I then ask the question from the &lt;a href="http://root.cern.ch/phpBB2/index.php"&gt;ROOT Talks&lt;/a&gt; and one of the ROOT devs&lt;span class="postbody"&gt;, Bertrand, helped me to track down it further.&lt;br /&gt;&lt;br /&gt;Finally, the resolution is a bug in ROOT &lt;/span&gt;&lt;span class="postbody"&gt;5.19.02. From my experiments, I know that it was also present in ROOT 5.18 as well.&lt;br /&gt;&lt;br /&gt;Here is the full resolution in the ROOT Talk.&lt;br /&gt;&lt;a href="http://root.cern.ch/phpBB2/viewtopic.php?p=27702#27702"&gt;http://root.cern.ch/phpBB2/viewtopic.php?p=27702#27702&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;According to &lt;/span&gt;&lt;span class="postbody"&gt;Bertrand, t&lt;/span&gt;&lt;span class="postbody"&gt;here will be a new release tomorrow and the bug seemed to be fixed in this release.&lt;br /&gt;&lt;br /&gt;Hope it will fix my problem and also no more bugs in my way :))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-5800481831166036111?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/5800481831166036111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=5800481831166036111' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/5800481831166036111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/5800481831166036111'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2008/05/root-bug-when-using-dlls.html' title='A ROOT bug when using DLLs'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-390432352633679677</id><published>2008-05-11T19:29:00.000-07:00</published><updated>2008-05-11T19:36:07.375-07:00</updated><title type='text'>May 7th Report</title><content type='html'>Posters for the CTS Conference&lt;br /&gt;&lt;br /&gt;I have created two posters for the CTS 2008 conference. After a week of crash learning Adobe Illustrator I was able to create them in the way I need  :)&lt;br /&gt;&lt;br /&gt;Here are the two posters.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_k3HwFYLi7fM/SCes7T5OZyI/AAAAAAAAA40/yOz7sKPsIT4/s1600-h/cts-poster-final.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_k3HwFYLi7fM/SCes7T5OZyI/AAAAAAAAA40/yOz7sKPsIT4/s320/cts-poster-final.gif" alt="" id="BLOGGER_PHOTO_ID_5199314429775079202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_k3HwFYLi7fM/SCeslz5OZxI/AAAAAAAAA4s/ym7yTp4xPeM/s1600-h/cts-poster-narada-final.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_k3HwFYLi7fM/SCeslz5OZxI/AAAAAAAAA4s/ym7yTp4xPeM/s320/cts-poster-narada-final.gif" alt="" id="BLOGGER_PHOTO_ID_5199314060407891730" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-390432352633679677?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/390432352633679677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=390432352633679677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/390432352633679677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/390432352633679677'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2008/05/may-7th-report.html' title='May 7th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_k3HwFYLi7fM/SCes7T5OZyI/AAAAAAAAA40/yOz7sKPsIT4/s72-c/cts-poster-final.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-5603878999493689617</id><published>2008-04-16T21:07:00.000-07:00</published><updated>2008-04-16T21:17:44.202-07:00</updated><title type='text'>Hadoop Presentation</title><content type='html'>Today I did a small presentation on &lt;a href="http://hadoop.apache.org/core/"&gt;Apache Hadoop&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I went though the documentation they have on HDFS, Map-reduce framework, and the Streaming API. I also had to go through the code to understand some of the functionalities in the framework. So far my idea is that the framework is bit more biased towards the text oriented computations. Probably because the initial computations that they use map-reduce are mainly centered on processing large collection of documents (specifically web pages)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.indiana.edu/%7Ejekanaya/Hadoop.pdf"&gt;Here is my presentation&lt;/a&gt;&lt;br /&gt;&lt;a href="http://hadoop.apache.org/core/"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-5603878999493689617?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/5603878999493689617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=5603878999493689617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/5603878999493689617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/5603878999493689617'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2008/04/hadoop-presentation.html' title='Hadoop Presentation'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-2842847747540308370</id><published>2008-04-11T13:48:00.000-07:00</published><updated>2008-04-11T14:04:26.923-07:00</updated><title type='text'>April 9th Report</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Platform shift for the NBC++ Bridge  (Linux to Windows)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The HEP solution is taking a new turn by moving on to CherryPy and Windows. This impose a new requirement for the NaradaBrokering's C++ bridge I wrote.&lt;br /&gt;Initially I did the development in Linux platform using g++ compiler. With the new requirement, I had to compile this for Windows based platforms.&lt;br /&gt;&lt;br /&gt;Dr. Julian Bunn gave a big help by converting the C++ bridge to a DLL for windows. After doing some debugging, I was able to get NBC++ working on Windows. Another dimension for NaradaBrokering users.&lt;br /&gt;&lt;br /&gt;Since it is hard to maintain two code repositories (one for Windows and one for Linux), I decided to merge the two source code repositories. After covering the differences with pre-compiler directives I was able to  get the same code  working in both Windows and Linux.&lt;br /&gt;&lt;br /&gt;Have to finish the documentation and then I can release the new version of NBC++ soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-2842847747540308370?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/2842847747540308370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=2842847747540308370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/2842847747540308370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/2842847747540308370'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2008/04/april-9th-report.html' title='April 9th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-2997861728578291898</id><published>2008-02-28T20:25:00.001-08:00</published><updated>2008-02-28T21:14:04.774-08:00</updated><title type='text'>February 27th Report</title><content type='html'>&lt;span style="font-size:130%;"&gt;Writing Papers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The paper, A Collaborative Framework for Scientific Data Analysis and Visualization,  I submitted to CTS2008 got accepted. However, reviewers pointed out that there are some grammatical errors in my writing. I had to correct these errors within a week because of the final submission deadline. The following section highlights my experience with the above.&lt;br /&gt;&lt;br /&gt;Dr. Shrideep Pallickara pointed me to two books.&lt;br /&gt;1. &lt;a href="http://books.google.com/books?id=IAy6NCD0Iq0C&amp;amp;dq=the+elements+of+style&amp;amp;pg=PP1&amp;amp;ots=fIObunQfWT&amp;amp;sig=-4GZJTegZmVFcYDjC0ZizaUHahI&amp;amp;hl=en&amp;amp;prev=http://www.google.com/search?q=The+elements+of+style&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;rls=org.mozilla:en-US:official&amp;amp;client=firefox-a&amp;amp;sa=X&amp;amp;oi=print&amp;amp;ct=title&amp;amp;cad=one-book-with-thumbnail"&gt;The Elements of Style by William Strunk Jr. and E.B. White.&lt;/a&gt;&lt;br /&gt;2. &lt;a href="http://www.amazon.com/Chicago-Manual-Style-Essential-Publishers/dp/0226103897"&gt;The Chicago Manual of Style by University of Chicago Press Staff&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I found both books in the bookstore and noticed that the second one is more suitable as a reference. The first one is a really nice book for my situation. It is very small book (~100 pages) but it has lot of grammatical styles with examples in it.&lt;br /&gt;&lt;br /&gt;I was able to fix lot of grammatical errors present in my initial write up with the help of the above book.&lt;br /&gt;&lt;br /&gt;Still I was not 100% sure about my corrections, and decided to search for a proof read service. I found many online services, which does proof reading. However, all of them charge very high amounts for quick jobs.&lt;br /&gt;&lt;br /&gt;Lucy Buttersbry, the secretary of our department, pointed me to Writing Tutorial Services in Ballantine Hall 206 (855-6738). If you are an IU student, this is a very good service. They will not proof read your papers, but will help you to identify the common errors you made by going through the paper.&lt;br /&gt;&lt;br /&gt;I showed up my revised paper to one of the instructors and he showed me few more common errors that I had in my writing.&lt;br /&gt;&lt;br /&gt;After all these steps and few more review cycles I was able to come up with the final version of the paper.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Formatting the Paper&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I did the initial writing on Microsoft Word and converted it to pdf before submitting. After converting the document to pdf, I noticed that the column width(for two column pages) of the pdf document is smaller than the column width expected by the conference format sheet.&lt;br /&gt;&lt;br /&gt;I decided to give it a try with the Latex format sheet that they provide. After copying few pages I noticed that the column width is correct and also the length of the paper is slightly reduced when formatted using Latex. Of course, the neatness is superb as well.&lt;br /&gt;&lt;br /&gt;At the beginning I found it bit hard to insert figures, but it is simply a matter of finding the (right) easy method of doing it. It is very easy to insert images as pdf files. So the only change I had to do was to convert the png images I had into pdf files. I could easily do that using the CutePDF writer. The following latex section shows how I include figures.&lt;br /&gt;&lt;br /&gt;\begin{figure}[h]&lt;br /&gt;\begin{center}&lt;br /&gt;\includegraphics[width=0.46\textwidth]{D:/Academic/Ph.D/CTS2008/architecture2.pdf}&lt;br /&gt;\textbf{\caption{\centering{Architecture of the Proposed Collaborative Data Analysis Framework}}&lt;br /&gt;\label{fig:arch}}&lt;br /&gt;\end{center}&lt;br /&gt;\end{figure}&lt;br /&gt;&lt;br /&gt;One final thought. If you have time, better to format the paper using Latex as it save you space as well as provide a very neat paper.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-2997861728578291898?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/2997861728578291898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=2997861728578291898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/2997861728578291898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/2997861728578291898'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2008/02/fe.html' title='February 27th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-5550192096062702199</id><published>2008-02-04T07:28:00.000-08:00</published><updated>2008-02-04T07:38:36.475-08:00</updated><title type='text'>February 13th Report</title><content type='html'>Demonstration to Prof Malcolm Atkinson.&lt;br /&gt;&lt;a href="http://www.nesc.ac.uk/nesc/staff/mpa.html"&gt;&lt;br /&gt;Prof Malcolm Atkinson&lt;/a&gt; is the Director of The e-Science Institute and e-Science Envoy National e-Science Centre and was visiting our lab on 4th of February. The lab has organized a demo session so that most students can show their work to him.&lt;br /&gt;&lt;br /&gt;When I got the mail regarding the demo, I was in the middle of modifying the ROOT-NB-Clarens application(my research prototype) to add new features. After two long days I was able to get it working and today we did the demo successfully.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-5550192096062702199?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/5550192096062702199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=5550192096062702199' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/5550192096062702199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/5550192096062702199'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2008/02/february-13th-report.html' title='February 13th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-446561390071449464</id><published>2008-02-04T07:16:00.000-08:00</published><updated>2008-02-04T07:28:37.341-08:00</updated><title type='text'>January 30th Report</title><content type='html'>Two papers were due during these and had to struggle with time to get those two papers completed before the deadline.&lt;br /&gt;Followings are the conferences:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://cisedu.us/cis/cts/08/"&gt;The 2008 International Symposium on Collaborative Technologies and Systems (CTS 2008)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ipdps.org/ipdps2008/2008_phdforum.html"&gt;2008 IPDPS TCPP PhD Forum&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;Dr. Shrideep and Prof. Fox helped me a lot in refining my ideas and correcting presentation errors. Finally I was able to submit the two papers  before the deadline.&lt;br /&gt;&lt;br /&gt;I also created a &lt;a href="http://www.cs.indiana.edu/%7Ejekanaya/research.html"&gt;research page&lt;/a&gt; which highlights the motivation , goals and the proposed solution of my research. I looking forward to maintain that web site throughout my Ph.D. research.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-446561390071449464?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/446561390071449464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=446561390071449464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/446561390071449464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/446561390071449464'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2008/02/january-30th-report.html' title='January 30th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-9209386336251838993</id><published>2008-01-16T08:57:00.000-08:00</published><updated>2008-01-16T09:17:42.925-08:00</updated><title type='text'>January 16th Report</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Root Client Supports Shared Eventing and Shared Display Type Collaborations.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So far the HEP Data Analysis Client that we have uses a shared event model for collaboration. All the clients perform the fitting and merging of histograms received from servers. This is a very useful feature if different collaborative clients need to "fit" different models to the data received to them. However, if the same model is used by all the clients, then a shared display type collaboration would be the right solution.&lt;br /&gt;&lt;br /&gt;I added a feature to the client so that it publishes its current histogram as an image (after fitting and merging) to a topic using the NB's C++ client. I also developed a separate program to simply subscribe to a topic and display the images received over the pub/sub communication channel. This program is very lightweight as its task is merely showing images in a canvas as an when they are received.&lt;br /&gt;&lt;br /&gt;This implementation enables the shared display type collaboration among the participating clients to an experiment. Physicists who just need to see the results of an experiment can simply use the shared display client.&lt;br /&gt;&lt;br /&gt;Currently all the clients subscribed to a particular topic will receive the histogram images. However,  with the introduction of the "agents" , which keep track of on going experiments, to the system these settings can be controlled.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-9209386336251838993?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/9209386336251838993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=9209386336251838993' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/9209386336251838993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/9209386336251838993'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2008/01/january-16th-report.html' title='January 16th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-1689036319937348978</id><published>2007-12-31T12:58:00.000-08:00</published><updated>2007-12-31T13:30:18.611-08:00</updated><title type='text'>December 26th Report</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Scalability of the Rootlet Architecture:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Last two weeks I was working on improving the HEP(High Energy Physics) data processing implementation, so that I can do a benchmark on the scalability of the proposed architecture. As the first step, I was able to benchmark the Naradabrokering's C++ Client that I wrote.  The following graph compares the performance of Naradaborkering's Java Client vs. C++ Client.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_k3HwFYLi7fM/R3lZ5uhw1BI/AAAAAAAAA0I/G9-49gPmejM/s1600-h/perfgraphs.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_k3HwFYLi7fM/R3lZ5uhw1BI/AAAAAAAAA0I/G9-49gPmejM/s320/perfgraphs.PNG" alt="" id="BLOGGER_PHOTO_ID_5150246497151931410" border="0" /&gt; &lt;/a&gt;&lt;br /&gt;The graph measures the time  for two hops (in milliseconds) for various message sizes. The reason for the step wise increase that the Java client demonstrates is mainly the buffer allocation strategy in Java sockets. During the benchmark a message rate of approximately 50 messages per seconds was maintained.&lt;br /&gt;&lt;br /&gt;Next, I measured the time for two hops for a 100KB message with increasing message rates. The results shows that the both Java and C++ implementations show stable performance upto the measured 1000 messages per second message rate.  According to the results, the C++  Client performs better than the Java clients for higher message rates. (Please see the graph below)&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_k3HwFYLi7fM/R3lb3uhw1CI/AAAAAAAAA0Q/xTChB44j0Xk/s1600-h/100kbperf.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_k3HwFYLi7fM/R3lb3uhw1CI/AAAAAAAAA0Q/xTChB44j0Xk/s320/100kbperf.PNG" alt="" id="BLOGGER_PHOTO_ID_5150248661815448610" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Next Step:&lt;/span&gt;&lt;br /&gt;The next task is to measure the scalability of the HEP data processing implementation as a whole. For this I am trying to process large amount of HEP data by increasing the number of processing nodes to process the same amount of data so that we can gain performance improvements by splitting the computation task among multiple processing entities.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;MapReduce:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Prof. Fox pointed me to few interesting papers(listed below) which discuss on a technique to parallelize large data processing tasks, named MapReduce, which has its roots in functional programming. Right now I am reading the papers and was simply amazed by the similarity of &lt;a href="http://jaliyacgl.blogspot.com/2007/11/november-28th-report.html"&gt;the work we have done&lt;/a&gt; so far the and technique described by these papers:&lt;br /&gt;&lt;br /&gt;J. Dean and S. Ghemawat, “Mapreduce: Simplified data processing&lt;br /&gt;on large  clusters,” in OSDI’04: Sixth Symposium on Operating System&lt;br /&gt;Design and  Implementation, December 2004.&lt;br /&gt;&lt;br /&gt;R. Pike, S. Dorward, R. Griesemer, and S.  Quinlan, “Interpreting the&lt;br /&gt;data: Parallel analysis with sawzall,” Scientific  Programming Journal&lt;br /&gt;Special Issue on Grids and Worldwide Computing  Programming Models&lt;br /&gt;and Infrastructure, vol. 13, no. 4, pp. 227–298,  2005.&lt;br /&gt;&lt;br /&gt;M. Isard, M. Budiu, Y. Yu, A. Birrell, and D. Fetterly,  “Dryad:&lt;br /&gt;Distributed data-parallel programs from sequential building blocks,”  in&lt;br /&gt;European Conference on Computer Systems (EuroSys), March 2007.&lt;br /&gt;&lt;br /&gt;H. chih  Yang, A. Dasdan, R.-L. Hsiao, and D. S. Parker, “Map-reducemerge:&lt;br /&gt;Simplified  relational data processing on large clusters,” in Proc.&lt;br /&gt;SIGMOD, 2007.&lt;br /&gt;&lt;br /&gt;Hope to discuss them more in my next blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-1689036319937348978?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/1689036319937348978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=1689036319937348978' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/1689036319937348978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/1689036319937348978'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/12/december-26th-report.html' title='December 26th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_k3HwFYLi7fM/R3lZ5uhw1BI/AAAAAAAAA0I/G9-49gPmejM/s72-c/perfgraphs.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-4096486220730239527</id><published>2007-12-14T12:32:00.000-08:00</published><updated>2007-12-14T12:45:43.466-08:00</updated><title type='text'>Decmeber 12th Report</title><content type='html'>TCSC Symposium Proposal:&lt;br /&gt;&lt;br /&gt;After SC07 my main target was to write a paper for the above symposium. According to their &lt;a href="http://www.ieeetcsc.org/young/doctoral08"&gt;website&lt;/a&gt;;&lt;br /&gt;"The IEEE TCSC Doctoral Symposium provides a forum for students in the area of Scalable Computing to obtain feedback on their dissertation topics and advice on initiating a research career."&lt;br /&gt;&lt;br /&gt;I was able to draft a proposal documentation and then with lot of help from Prof. Fox and Dr. Shrideep we were able to submit it before the deadline.&lt;br /&gt;&lt;br /&gt;I learnt a lot regarding writing papers especially in presenting ideas. Coming from the programming background, I always tend to go  into details straight away. Sherideep helped me to correct this in the paper.&lt;br /&gt;&lt;br /&gt;The paper present our plans on designing a "Scalable Framework for Collaborative Analysis of Sceintific Data" especially for data with the "composition" property. That is, the data analysis task can be broken down to set of sub analyses which  can be executed concurrently and merge or combine the results of these sub analyses to form the final results.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-4096486220730239527?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/4096486220730239527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=4096486220730239527' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4096486220730239527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4096486220730239527'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/12/decmeber-12th-report.html' title='Decmeber 12th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-4599224764373174590</id><published>2007-11-24T21:17:00.000-08:00</published><updated>2007-11-24T21:50:07.506-08:00</updated><title type='text'>November 28th Report</title><content type='html'>&lt;span style="font-weight: bold;"&gt;After month of silence:&lt;/span&gt;&lt;br /&gt;During the last month I was completely engaged in getting the ROOT client working with Naradabrokering and Clarens so that the Physicist can submit and monitor analysis jobs collaboratively. It was not just another implementation problem, but  a implementation+integration task which requires different hetrogenous components to work together. The user case that we tried to achieve.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A Physicist identify a dataset from a partial physics experiment&lt;/li&gt;&lt;li&gt;He then write an analysis script based on some analysis criteria using &lt;a href="http://root.cern.ch/"&gt;ROOT&lt;/a&gt; language and test it using a sample data file in his computer.&lt;/li&gt;&lt;li&gt;Now he needs to execute this analysis on all the data files available for a particular experiment.&lt;/li&gt;&lt;li&gt;While the jobs are getting processed, he should be able to monitor the results of each analysis sub task, which is a histogram.&lt;/li&gt;&lt;li&gt;The client program that needs to be developed should be able to display and merge the resulting histograms in real time.&lt;/li&gt;&lt;li&gt;Also, any other physicist who would like to see the result of the analysis as an when it is happening, should be able to connect to the same experiment and see the results getting merged one by one in his Client Software.&lt;/li&gt;&lt;/ul&gt;With a month of work I was able to implement a Client software written in ROOT language that can achieve all of the above requirements. We were able to show this demonstration during the Supercomputing Conference 07 in Reno Nevada. The following image shows the software while executing an analysis on files located in three different servers.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_k3HwFYLi7fM/R0kJcE3oMCI/AAAAAAAAAzs/lESEwmIc8MI/s1600-h/Screenshot-NBR-Clarens-ROOT-1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_k3HwFYLi7fM/R0kJcE3oMCI/AAAAAAAAAzs/lESEwmIc8MI/s320/Screenshot-NBR-Clarens-ROOT-1.png" alt="" id="BLOGGER_PHOTO_ID_5136647227940810786" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Some explanation about the software:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Main canvas shows the histogram of the results. All the histograms generated at each analysis sub task is merged and displayed to the user&lt;/li&gt;&lt;li&gt;Panel at the top right; shows the connected server. In this example, it has been connected to three Clarens servers running in three different machines.&lt;/li&gt;&lt;li&gt;Panel below that; shows the available data files at each server. This panel also shows the status of each file, whether it has been processed or not by changing color. "Grey" color indicates that the file has not yet been processed, "Red" color indicates that the resulting histogram for that file has been received and in the process of merging it with the available results so far, and the "Blue" color indicates that the file has been processed and the resulting histogram has been merged with the existing results.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Few Implementation Details:&lt;/span&gt;&lt;br /&gt;The GUI is completely written in the interpreted language provided by the ROOT framework.&lt;br /&gt;It uses a C++ bridge for &lt;a href="http://www.naradabrokering.org/"&gt;Naradabrokering&lt;/a&gt; and C++ client library for &lt;a href="http://clarens.sourceforge.net/"&gt;Clarens&lt;/a&gt; server internally.&lt;br /&gt;It also uses a python script to submit analysis tasks to multiple Rootlets (A concept similar to Servlet) concurrently. This is especially required because the interpreted ROOT language does not support multi-threading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-4599224764373174590?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/4599224764373174590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=4599224764373174590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4599224764373174590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4599224764373174590'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/11/november-28th-report.html' title='November 28th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_k3HwFYLi7fM/R0kJcE3oMCI/AAAAAAAAAzs/lESEwmIc8MI/s72-c/Screenshot-NBR-Clarens-ROOT-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-7874460812095643611</id><published>2007-10-01T09:02:00.000-07:00</published><updated>2007-10-01T09:14:21.618-07:00</updated><title type='text'>October 3rd Report</title><content type='html'>Had a meeting with Prof. Geoffrey relating to the Ph.D. topic that I should select. He advice me to find more use cases of the data analysis tasks that are similar to the Particle Physics data analysis that we are doing using Clarens and ROOT.&lt;br /&gt;&lt;br /&gt;The data analysis tasks that we handled has the following characteristic.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Data is in large files and these files are distributed across the  globe.&lt;/li&gt;&lt;li&gt;One or more analysis technique(in our case, one analysis script) can be applied to all the data to identify patterns.&lt;/li&gt;&lt;li&gt;The outcome of an analysis of a single file is a histogram.&lt;/li&gt;&lt;li&gt;These outcomes(histograms) can be merged to produce the final results.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;So far I have found one strong use case of this nature and that is;&lt;br /&gt;Astronomical Image Processing - mainly for identifying features in astronomical images.&lt;br /&gt;&lt;br /&gt;There are few candidate areas that I found interesting and they are;&lt;br /&gt;Analysis of Earthquake Data&lt;br /&gt;Microarray Analysis for Genes&lt;br /&gt;Pattern Matching in Financial Data&lt;br /&gt;&lt;br /&gt;Currently I am reading to find out the exact data analysis requirements of these fields. The target is to find more use cases for "Distributed Composable Data Analysis"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-7874460812095643611?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/7874460812095643611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=7874460812095643611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/7874460812095643611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/7874460812095643611'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/10/october-3rd-report.html' title='October 3rd Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-7122510672864192760</id><published>2007-10-01T08:56:00.000-07:00</published><updated>2007-10-01T09:02:09.723-07:00</updated><title type='text'>September 19th Report</title><content type='html'>Conrad tested the demo from CERN and it worked well. So, now I can focus on the next step of the project.&lt;br /&gt;Conrad also sent me a link to more root data files so as the next step I will test the demo with those new root data files. The first demo only uses a single rootlet and the reason for this is mainly the way how the Clarens client is written. Each analysis request is processed synchronously and hence the client send requests one by one to the server for each root data file to be analyzed.&lt;br /&gt;&lt;br /&gt;As the next step of the project, I am planning to run the client in with multiple processes and allow it to create multiple rootlets so that the analysis can be performed simultaneously utilizing the full cpu power. Hope to get the results soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-7122510672864192760?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/7122510672864192760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=7122510672864192760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/7122510672864192760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/7122510672864192760'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/10/september-19th-report.html' title='September 19th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-6535262589512460583</id><published>2007-09-13T18:08:00.000-07:00</published><updated>2007-09-13T19:02:45.401-07:00</updated><title type='text'>September 5th Report</title><content type='html'>Demo is ready.&lt;br /&gt;&lt;br /&gt;ROOT application development supports both interpreted code and also compiled code. Interpreted code (Mainly the analysis code written by physicist) can use compiled shared libraries including ROOT provide ones and also other user written libraries. Interpretation helps the user to debug and fix code easily and write the necessary analysis as a function.&lt;br /&gt;&lt;br /&gt;As explained in my previous blog (August 22nd Report) the plan is to let the rootlet to publish the location of the generated histogram files to the subscribed clients. Clients who receive those notifications then use these files to update their results.&lt;br /&gt;&lt;br /&gt;As the second phase, I developed a ROOT compliant wrapper classes for the C++ client of Naradabrokering. These allow ROOT clients to utilize the publish/subscribe capabilities of Naradabrokering.&lt;br /&gt;The steps for developing the ROOT compliant classes are explained in the following tutorial.&lt;br /&gt;&lt;a href="ftp://root.cern.ch/root/course1.ps.gz"&gt;Part1&lt;/a&gt;, &lt;a href="ftp://root.cern.ch/root/course2.ps.gz"&gt;part2&lt;/a&gt; and &lt;a href="ftp://root.cern.ch/root/course3.ps.gz"&gt;part3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was able to get the publishing of messages working from interpreted code and thought that the subscription would work in the same manner. After few days of trying I found that I was wrong.&lt;br /&gt;To get the subscription to work, the interpreted code should pass a function pointer as the callback to the compiled code and on the reception of a notification , the compiled code should call this callback (which is in the interpreted code). Passing a function pointer to the compiled code is easy and straight forward, however, when the compiled code try to call that pointer I got an error *****Segmentation Violation*********&lt;br /&gt;&lt;br /&gt;This happens mainly because of the limitation of the ROOT interpreter in resolving function pointers across the interpreted/compiled code boundaries. After few days of searching and querying Conrad, we decided to ask the question on the ROOT mailing list. They replied really soon and helped us to solve the problem. The solution came in a way of a reflection type call interface for calling interpreted code from the compiled code supported by ROOT.&lt;br /&gt;Here is the mail thread.&lt;br /&gt;&lt;a href="http://root.cern.ch/phpBB2/viewtopic.php?t=5408"&gt;http://root.cern.ch/phpBB2/viewtopic.php?t=5408&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So with that help, I was able to get the demonstration working and it is so nice to see how it is working. Results of the remote analysis triggers users who are subscribed for notifications and their histograms get updated with remote results.&lt;br /&gt;&lt;br /&gt;Somethings are too good to be true!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-6535262589512460583?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/6535262589512460583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=6535262589512460583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/6535262589512460583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/6535262589512460583'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/09/september-5th-report.html' title='September 5th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-2505705136837264641</id><published>2007-08-22T11:26:00.000-07:00</published><updated>2007-08-22T12:00:36.774-07:00</updated><title type='text'>August 22nd Report</title><content type='html'>Last week Conrad helped us in setting up a Clarens server in gridfarm003 and after resolving few issues with our certificates I was able to use it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Usage Scenario : Big Picture&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The user writes a Client code in C++ which utilizes services of the clarens server. Let's call this &lt;span style="font-weight: bold;"&gt;ClientCode.C&lt;/span&gt;&lt;/li&gt;&lt;li&gt;She also has written the analysis code for root data. Let's call these files &lt;span style="font-weight: bold;"&gt;Analysis.C&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Analysis.H&lt;/span&gt; .&lt;/li&gt;&lt;li&gt;She then executes the &lt;span style="font-weight: bold;"&gt;ClientCode.C&lt;/span&gt; using the C++ interpreter provided by the ROOT. (ROOT has a built in C++ interpreter)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;ClientCode.C&lt;/span&gt; uses the built in ROOT libraries to locate data files in the server and also to upload the above two files to the clarens server.&lt;/li&gt;&lt;li&gt;After discovering (polling for files) root data files,&lt;span style="font-weight: bold;"&gt; ClientCode.C &lt;/span&gt;send request/requests to the Clarens server for creating rootlet/rootlets to execute the analysis code that it uploaded.&lt;/li&gt;&lt;li&gt;For every rootlet request Clarens server creates a wrapper script for rootlet and executes it with the input and output files. This wrapper script is called &lt;span style="font-weight: bold;"&gt;rootlet_wrappper.sh&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Finally the &lt;span style="font-weight: bold;"&gt;ClientCode.C&lt;/span&gt; poll for output files and display the results of the analysis in a histogram generated at the user's machine.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Incorporating Naradabrokeing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As the first step, I changed the rootlet_wrapper.sh to publish a message after finishing the analysis using the nbclient program we wrote using C++. This works fine and we can eliminate the polling requirement of the ClientCode.C to find the results.&lt;br /&gt;&lt;br /&gt;Next task is to incorporate the subscriber functionality to the visualization part of the ClientCode.C&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-2505705136837264641?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/2505705136837264641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=2505705136837264641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/2505705136837264641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/2505705136837264641'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/08/august-22nd-report.html' title='August 22nd Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-528433331397480360</id><published>2007-07-31T07:38:00.000-07:00</published><updated>2007-08-22T11:33:19.248-07:00</updated><title type='text'>August 8th Report</title><content type='html'>&lt;span style="font-size:130%;"&gt;Secure Message Transfer Between Java and C++&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:130%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span style=""&gt;Scenario:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;We are developing an application which require secure message transfer between Naradabrokering (java based messaging substrate) and C++ client application. The communications between the entities uses a custom publish/subscribe messaging protocol to get better performance. (No XML processing) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;JDK has a built in support for security features such as certificate handling, encryption and signing. However, to get those functionalities in C++ a separate library needs to be installed. For this we used Openssl (&lt;a href="http://www.openssl.org/"&gt;http://www.openssl.org/&lt;/a&gt;) To develop applications it is required to have the development files of the openssl and the installation is different according to the underlying operating system. For my machine running Ubuntu 2.6.15-28-386 it is simply;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;          &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;apt-get install libssl0.9.7&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;apt-get install libssl-dev&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Following sections of shows the code fragments that we can use to encrypt/decrypt messages (bytes) both in Java and C++. The algorithm used for the encryption is AES (http://en.wikipedia.org/wiki/Advanced_Encryption_Standard)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:130%;"&gt;Encryption in JAVA&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;In java the encryption is handled by the provided &lt;/span&gt;&lt;span style=""&gt;javax.crypto.Cipher&lt;/span&gt;&lt;span style="font-size:100%;"&gt; class. The following code fragment shows the encryption in Java.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;byte[] bytesToEncrypt = /*Bytes to be encrypted*/&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;      &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;byte[] encBytes = null; /*Encrypted Bytes*/&lt;/span&gt;&lt;o:p style="font-family: courier new;"&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;        &lt;p class="MsoNormal"  style="margin-bottom: 0.0001pt; line-height: normal;font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;      &lt;/span&gt;/**&lt;br /&gt;&lt;span style=""&gt;        &lt;/span&gt;* Create a Cipher by specifying the following parameters a. Algorithm&lt;br /&gt;&lt;span style=""&gt;        &lt;/span&gt;* name - here it is AES&lt;span style=""&gt; &lt;/span&gt;*/&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;            &lt;p class="MsoNormal"  style="margin-bottom: 0.0001pt; line-height: normal;font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;span style=""&gt;     &lt;/span&gt;Cipher aesCipher;&lt;br /&gt;&lt;span style=""&gt;      &lt;/span&gt;try {&lt;br /&gt;&lt;span style=""&gt;           &lt;/span&gt;    aesCipher = Cipher.getInstance(Constants.AES_ALGO);&lt;span style=""&gt;              &lt;/span&gt;&lt;span style=""&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style=""&gt;           &lt;/span&gt;    aesCipher.init(Cipher.ENCRYPT_MODE, secretKey);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style=""&gt;           &lt;/span&gt;    encBytes = aesCipher.doFinal(msg.getBytes());&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;} catch (Exception e) {&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style=""&gt;&lt;br /&gt;    &lt;/span&gt;    throw new ClarensException(&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt; "Error encrypt message using secret key",e);&lt;/span&gt;&lt;span style=""&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;These bytes are then transferred to the C++ client using socket based communication channel.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;Decryption in C++&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Openssl provides a set of libraries for handling the decryption&lt;span style=""&gt;  &lt;/span&gt;and the following utility function shows how we can use those to decrypte the received set of bytes.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"  style="margin-bottom: 0.0001pt; line-height: normal;font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;    bool&lt;br /&gt;SecurityUtil::decryptAES(const unsigned char *in,int inputLength ,unsigned char     *out,int &amp;outputLength, string aesKey){&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;        &lt;p class="MsoNormal"  style="margin-bottom: 0.0001pt; line-height: normal;font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;      &lt;/span&gt;int olen, tlen, n;&lt;br /&gt;&lt;span style=""&gt;      &lt;/span&gt;EVP_CIPHER_CTX ctx;&lt;br /&gt;&lt;span style=""&gt;      &lt;/span&gt;EVP_CIPHER_CTX_init (&amp; ctx);&lt;br /&gt;&lt;span style=""&gt;      &lt;/span&gt;EVP_DecryptInit (&amp; ctx, EVP_aes_128_ecb (), (unsigned char *)aesKey.c_str(),       NULL);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"  style="margin-bottom: 0.0001pt; line-height: normal;font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;      &lt;/span&gt;olen=0; tlen=0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;            &lt;p class="MsoNormal"  style="margin-bottom: 0.0001pt; line-height: normal;font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;if (EVP_DecryptUpdate (&amp; ctx, out, &amp;amp; olen, (const unsigned char*)in,inputLength) != 1)&lt;br /&gt;&lt;span style=""&gt;      &lt;/span&gt;{&lt;br /&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;cerr&lt;&lt;"error in decrypt update"&lt;&lt;endl;&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;return false;&lt;br /&gt;&lt;span style=""&gt;      &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/endl;&gt;&lt;/span&gt;&lt;/p&gt;            &lt;p class="MsoNormal"  style="margin-bottom: 0.0001pt; line-height: normal;font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;      &lt;/span&gt;if (EVP_DecryptFinal(&amp; ctx, out + olen, &amp;amp; tlen) != 1)&lt;br /&gt;&lt;span style=""&gt;      &lt;/span&gt;{&lt;br /&gt;&lt;span style=""&gt;            &lt;/span&gt;cerr&lt;&lt;"error in decrypt final"&lt;&lt;endl;&gt;&lt;span style=""&gt;            &lt;/span&gt;return false;&lt;br /&gt;&lt;span style=""&gt;      &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/endl;&gt;&lt;/span&gt;&lt;/p&gt;        &lt;p class="MsoNormal"  style="margin-bottom: 0.0001pt; line-height: normal;font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;      &lt;/span&gt;olen += tlen;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;outputLength=olen;&lt;span style=""&gt;    &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;      &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;EVP_CIPHER_CTX_cleanup (&amp; ctx);&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;      &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;    return true;&lt;br /&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Ok, now let's see the other side of the story, from C++ to Java&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:130%;"&gt;Encryption in C++&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Again Openssl provides a set of library functions for encryption as well. Following is the utility function for the encryption&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNoSpacing"  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;    bool &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNoSpacing"  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;    SecurityUtil::encryptAES(const unsigned char* in,int&lt;br /&gt;inputLength ,unsigned char *out,int &amp;outputLength, string&lt;br /&gt;aesKey){&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;        &lt;p class="MsoNoSpacing"  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;      int olen, tlen, n;&lt;br /&gt;EVP_CIPHER_CTX ctx;&lt;br /&gt;EVP_CIPHER_CTX_init (&amp; ctx);&lt;/span&gt;&lt;/p&gt;        &lt;p class="MsoNoSpacing"  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;      EVP_EncryptInit (&amp; ctx, EVP_aes_128_ecb (), (unsigned char&lt;br /&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;*)aesKey.c_str(), NULL);      &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;              &lt;p class="MsoNoSpacing"  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;      if (EVP_EncryptUpdate (&amp; ctx, out, &amp;amp; olen, (const unsigned&lt;br /&gt;&lt;span style=""&gt;      &lt;/span&gt;char*)in , inputLength) != 1)&lt;br /&gt;{&lt;br /&gt;   cerr&lt;&lt;"error in decrypt update"&lt;&lt;endl; return=""&gt;&lt;/endl;&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;            &lt;p class="MsoNoSpacing"  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;      if (EVP_EncryptFinal (&amp; ctx, out + olen, &amp;amp;amp;amp;amp;amp;amp;amp; tlen) != 1)&lt;br /&gt;{&lt;br /&gt;   cerr&lt;&lt;"error in encrypt final"&lt;&lt;endl; return=""&gt;&lt;/endl;&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;        &lt;p class="MsoNoSpacing"  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;      olen+=tlen;&lt;br /&gt;outputLength=olen;     &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;            &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;      EVP_CIPHER_CTX_cleanup (&amp; ctx);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      return true;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:130%;"&gt;Decrypting the bytes received from the C++ client in JAVA&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Decryption is java is also handled by the&lt;span style=""&gt;  &lt;/span&gt;javax.crypto.Cipher class and is fairly straight forward. Here is the code segment.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"  style="margin-bottom: 0.0001pt; line-height: normal;font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;    byte[] decBytes = null;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style=""&gt;    &lt;/span&gt;Cipher aesCipher;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;    &lt;p class="MsoNormal"  style="margin-bottom: 0.0001pt; line-height: normal;font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;    &lt;/span&gt;try {&lt;br /&gt;&lt;span style=""&gt;       &lt;/span&gt;aesCipher = Cipher.getInstance(Constants.RSA_ALGO);&lt;span style=""&gt;               &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style=""&gt;       &lt;/span&gt;aesCipher.init(Cipher.DECRYPT_MODE, prKey);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style=""&gt;&lt;br /&gt; &lt;/span&gt;decBytes = aesCipher.doFinal(msgBytes);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;} catch (Exception e) {&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style=""&gt;        &lt;/span&gt;throw new ClarensException(&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style=""&gt;              &lt;/span&gt;"Error decrypting message using private key ", e);&lt;/span&gt;&lt;span style=""&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;           &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Simple right? The main problem I faced when developing the above application was the lack of documentation on this regard. There are tons of documentation on how to handle encryption/decryption using java but very small number for the same in C++. How about encryption/decryption between Java and C++? I could not find anything in this sort. Openssl has a good documentation on various functions/data structures it offers for encryption/decryption but the main problem is there very limited amount of code examples which shows the exact usage. Followings are some of the resources that I used to come up with this implementation and hope someone will find this helpful.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;a href="http://www.openssl.org/docs/"&gt;http://www.openssl.org/docs/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.openssl.org/docs/"&gt;http://www.madboa.com/geek/openssl/#cert-self&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/linux/library/l-openssl.html"&gt;http://www.ibm.com/developerworks/linux/library/l-openssl.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mail-archive.com/openssl-users@openssl.org/msg40449.html"&gt;http://www.mail-archive.com/openssl-users@openssl.org/msg40449.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mail-archive.com/openssl-users@openssl.org/msg23119.html"&gt;http://www.mail-archive.com/openssl-users@openssl.org/msg23119.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.fortrel.net/blog/index.php?title=encryption_java_c&amp;more=1&amp;amp;amp;c=1&amp;tb=1&amp;amp;pb=1"&gt;http://www.fortrel.net/blog/index.php?title=encryption_java_c&amp;more=1&amp;amp;amp;c=1&amp;tb=1&amp;amp;pb=1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.adp-gmbh.ch/cpp/common/base64.html"&gt;http://www.adp-gmbh.ch/cpp/common/base64.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Next Blog: Signing and Verifying between Java and C++&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-528433331397480360?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/528433331397480360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=528433331397480360' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/528433331397480360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/528433331397480360'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/07/august-8th-report.html' title='August 8th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-5520176787279182125</id><published>2007-07-31T07:16:00.000-07:00</published><updated>2007-07-31T07:38:03.107-07:00</updated><title type='text'>July 25th Report</title><content type='html'>During the last two weeks i was mainly focusing on two things.&lt;br /&gt;1. Qualifying Exam (on 19&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;th&lt;/span&gt; of July)&lt;br /&gt;2. Finishing the Service Discovery Framework for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Clarens&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Results:&lt;br /&gt;I passed the Oral Qualifiers. However, from the questions asked from me, I realized that there are lot more that I should learn.&lt;br /&gt;&lt;br /&gt;Service Discovery Framework has some more work. Getting the encryption (both using &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;symmetric&lt;/span&gt; keys and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;RSA&lt;/span&gt; keys) working with C++ and Java seems bit tough. Main reason for this is the lack of documentation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-5520176787279182125?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/5520176787279182125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=5520176787279182125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/5520176787279182125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/5520176787279182125'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/07/july-25th-report.html' title='July 25th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-8567457831202674999</id><published>2007-07-11T15:15:00.000-07:00</published><updated>2007-07-11T15:37:27.633-07:00</updated><title type='text'>July 11th Report</title><content type='html'>Last week I was able to complete the functionality of the agent discovery for the C++ client. After that I put the client into a load test and found that it crashes after few (correct)discovery cycles.&lt;br /&gt;&lt;br /&gt;Since it works correctly for at least one discovery the error is not in the logic but in the implementation details. It is implemented in C++ and the debugging is not that easy when there are some threads in the code. After a lot of (a lot of actually) debugging I found the problem.&lt;br /&gt;It was just an update of boolean variable that I missed. (my eyes could not catch it during the first few debug cycles.)&lt;br /&gt;&lt;br /&gt;After that I went through the code again, and did a complete cleanup. Then I let the test run for few hours and found that it is running without any problems and most importantly without any memory leaks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-8567457831202674999?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/8567457831202674999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=8567457831202674999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/8567457831202674999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/8567457831202674999'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/07/july-11th-report.html' title='July 11th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-3284364074186148978</id><published>2007-06-21T08:19:00.000-07:00</published><updated>2007-06-28T09:18:46.646-07:00</updated><title type='text'>June 27th Report</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Axis2 Hackathon June 11th to June 16th.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We started the hackathon with the intention of cleaning up the bugs list and come with some API fixes.  It was a successful hackathon and we (Srinath Perera, Eran Chinthaka, Deepal Jayasinghe, Amila Suriyaarchhi, Ajith Ranabahu, Glen Daniels, and Myself) were able to fix most of the bugs whcih were labled as blockers and do some cleanup in the API as well. Axis2 has now grown into a large project and the API changes are not very straight forward as we did one year back. It is now a process of improvement plus depreciation.&lt;br /&gt;&lt;br /&gt;An excellent presentation on API Design.&lt;br /&gt;&lt;a href="http://www.infoq.com/presentations/effective-api-design"&gt;http://www.infoq.com/presentations/effective-api-design&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;C++ Agent/Service Discovery for Clarens&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I was able to get the C++ client working for the Agent Discovery.  The *next step* is to get the service discovery working which require both encryption and signing of messages.&lt;br /&gt;&lt;br /&gt;Getting the exchange of messages between java and C++ was not easy with security in place. I am using openssl libraries for the C++ client and for the java side, it is the built in cryptographic extension of JDK. However, there are compatibility issues when it comes to different versions of certificates and padding schemes. So I will write a blog with complete code samples regarding the above issues after getting that *next step* completed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-3284364074186148978?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/3284364074186148978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=3284364074186148978' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/3284364074186148978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/3284364074186148978'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/06/june-27th-report.html' title='June 27th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-342278840861927730</id><published>2007-06-21T08:12:00.000-07:00</published><updated>2007-06-21T08:19:30.937-07:00</updated><title type='text'>June 13th Report</title><content type='html'>Started working on the C++ version of the Clarens implementation. I need to implement the client code of the proposed architecture in C++ so that both C++ and Python clients can use it.&lt;br /&gt;&lt;br /&gt;The initial plan was to develop a version without security, but it seems like Caltech needs security in all their applications. It will not be easy to inject security related code once developed without it, so I decided to implement the complete version of the client code with security similar to the java implementation.&lt;br /&gt;&lt;br /&gt;Currently I am implementing the above code and it is a bit of slow going process because I have to learn how to use OpenSSL libraries for security functions.&lt;br /&gt;&lt;br /&gt;In the meanwhile I was able to schedule my Oral exam with my professors and the data I could get was 19th of July. Currently preparing for the exam as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-342278840861927730?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/342278840861927730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=342278840861927730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/342278840861927730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/342278840861927730'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/06/june-13th-report.html' title='June 13th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-4142569338820430481</id><published>2007-06-21T08:09:00.000-07:00</published><updated>2007-06-21T08:12:18.278-07:00</updated><title type='text'>May 30th Report</title><content type='html'>Continued working on the Clarens Project :&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoPlainText"&gt;I created a python service "ping.ping" which responds to an agent's requests informing that the service is up and running and deployed it in clarens.&lt;/p&gt;    &lt;p class="MsoPlainText"&gt;And also tested the following scenario;&lt;/p&gt;    &lt;p class="MsoPlainText"&gt;First, a RootletSimulator(java) registers the rootlet service with an agent. (In the actual implementation this should be handled by the initialization method of the rootlet service)&lt;/p&gt;    &lt;p class="MsoPlainText"&gt;After the registration, the agent will keep on pinging the rootlet service (python running on Clarens) to make sure that the service is up.&lt;/p&gt;    &lt;p class="MsoPlainText"&gt;Now, if we use the ClientSimulator (java) it can discover the service and may be use the service.&lt;/p&gt;    &lt;p class="MsoPlainText"&gt;Then we can stop the Clarens server or remove the rootlet service from the web-frontend (need to find out how to do this)&lt;/p&gt;    &lt;p class="MsoPlainText"&gt;Now if we use the ClientSimulator(java) again, it won't discover the service, because the agent has removed the service from its list of available services.&lt;/p&gt;    &lt;p class="MsoPlainText"&gt;&lt;o:p&gt;&lt;/o:p&gt;Security Considerations:&lt;/p&gt;        &lt;p class="MsoPlainText"&gt;Agent discovery request/response uses signed messages.&lt;br /&gt;Service discovery request/response uses encrypted and signed messages.&lt;br /&gt;*pings* use xmlrpc over http and the messages are secured using a grid-proxy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-4142569338820430481?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/4142569338820430481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=4142569338820430481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4142569338820430481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/4142569338820430481'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/06/may-30th-report.html' title='May 30th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-2190062525663954653</id><published>2007-05-15T21:41:00.000-07:00</published><updated>2007-05-15T21:58:31.042-07:00</updated><title type='text'>May 15th Report</title><content type='html'>&lt;p class="MsoNormal"&gt;Started working on the C++ Bridge for Nardabrokering.&lt;br /&gt;Current work includes, adding a layer of functions to the bridge so that it can be used to discover agents and rootlet services in architecture comprises of multiple agents and rootlet services.&lt;br /&gt;&lt;br /&gt;Started developing the C++ client and then started implementing the agent (java) as it is required to test the C++ client code.&lt;br /&gt;&lt;br /&gt;To provide secure agent/rootlet discovery mechanism architecture was discussed that utilize both symmetric and asymmetrical keys. &lt;span style=""&gt; &lt;/span&gt;The proposed message exchange pattern for discovering an agent and rootlet service is as follows.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;Client                                                                                    &lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;                                           &lt;/span&gt;&lt;span style=""&gt;                     &lt;/span&gt;&lt;span style=""&gt;                                                 &lt;/span&gt;-------------------------------------------  Agent&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                &lt;/span&gt;-&gt;DiscoverAgentRequest&lt;span style=""&gt;   &lt;/span&gt;with Client’s credentials.&lt;/p&gt;        &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;- DiscoverAgentResponse&lt;span style=""&gt;  &lt;/span&gt;encrypted using&lt;span style=""&gt;  &lt;/span&gt;a secret key&lt;br /&gt;&lt;span style=""&gt;                                &lt;/span&gt;Secret key is encrypted using the Client’s public key&lt;br /&gt;&lt;span style=""&gt;                                &lt;/span&gt;Message is signed using Agent’s Private key&lt;span style=""&gt;   &lt;br /&gt;                              &lt;/span&gt;Message contains agents credentials.&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                &lt;/span&gt;-&gt;DiscoverRootletRequest &lt;span style=""&gt; &lt;/span&gt;with Client’s credentials&lt;br /&gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;span style=""&gt;                &lt;/span&gt;Message encrypted using the secret key (Shared during the previous step)&lt;br /&gt;&lt;span style=""&gt;                                &lt;/span&gt;Signed using Client’s Private key&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;- DiscoverRootletResponse &lt;span style=""&gt;                                &lt;/span&gt;Message encrypted using the secret key&lt;br /&gt;&lt;span style=""&gt;                                &lt;/span&gt;Signed using the Agent’s Private key&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Since we cannot exchange objects in their native serialization form from java and C++ a customer serialization mechanism is designed to transfer data between the clients and agents.&lt;br /&gt;&lt;br /&gt;Currently working on getting the security framework working in both java and C++.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-2190062525663954653?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/2190062525663954653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=2190062525663954653' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/2190062525663954653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/2190062525663954653'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/05/may-15th-report.html' title='May 15th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-7532967598240920701</id><published>2007-05-04T12:27:00.000-07:00</published><updated>2007-05-04T12:33:40.643-07:00</updated><title type='text'>My Version of the Spring Semester</title><content type='html'>&lt;p class="MsoNormal"&gt;January    - Diarrhea + Vomiting&lt;br /&gt;                   - My wife got Chickenpox&lt;br /&gt;February  -  Chickenpox&lt;br /&gt;                   - Reactive Arthritis due to chickenpox&lt;br /&gt;                   - Enlargement in my thyroid gland&lt;br /&gt;March        - Went back home&lt;br /&gt;April           - Thyroid Surgery&lt;br /&gt;May            - Came back to US&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-7532967598240920701?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/7532967598240920701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=7532967598240920701' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/7532967598240920701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/7532967598240920701'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/05/my-version-of-spring-semester.html' title='My Version of the Spring Semester'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-116949198682117652</id><published>2007-01-22T10:47:00.000-08:00</published><updated>2007-01-22T10:54:04.873-08:00</updated><title type='text'>January 24th Report</title><content type='html'>During the last two weeks I completed the required benchmarks for the paper &lt;b style=""&gt;"&lt;span style=""&gt;A Scalable Approach for the Secure and Authorized Tracking of the Availability of Entities in Distributed Systems&lt;u1:p&gt;&lt;/u1:p&gt;, &lt;/span&gt;&lt;/b&gt;Shrideep Pallickara, Jaliya Ekanayake and Geoffrey Fox, which was accepted for the IPDPS 2007 .&lt;br /&gt;&lt;p class="MsoNormal"&gt;In addition I was researching on the &lt;a href="http://http://www.caucho.com/hessian/"&gt;Hessain&lt;/a&gt; library which can be used in the data transformation layer of the C++ &lt;st1:place st="on"&gt;&lt;st1:placetype st="on"&gt;bridge&lt;/st1:placetype&gt; for &lt;st1:placename st="on"&gt;Naradabrokering&lt;/st1:placename&gt;&lt;/st1:place&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-116949198682117652?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/116949198682117652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=116949198682117652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/116949198682117652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/116949198682117652'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2007/01/january-24th-report.html' title='January 24th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-116603751079229568</id><published>2006-12-13T11:15:00.000-08:00</published><updated>2006-12-13T11:18:30.796-08:00</updated><title type='text'>December 13th Report</title><content type='html'>Finished implementing the C++ client for the Naradabrokeing project.&lt;br /&gt;Few more pending  tasks to call it really "Finished"&lt;br /&gt;&lt;br /&gt;-Check the portability between different operating systems&lt;br /&gt;-Check for different platforms (currently it runs on a 32 bit Intel based Linux box)&lt;br /&gt;-Benchmarks&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-116603751079229568?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/116603751079229568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=116603751079229568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/116603751079229568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/116603751079229568'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2006/12/december-13th-report.html' title='December 13th Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-116482695898054622</id><published>2006-11-29T07:55:00.000-08:00</published><updated>2006-11-29T11:02:39.010-08:00</updated><title type='text'>NOVEMBER 29th  Status Report</title><content type='html'>During the last two weeks I have been implementing the C++ client for the Naradabrokering.&lt;br /&gt;&lt;p class="MsoNormal"&gt;First I tried connecting to the broker and establish a connection. It worked and I found that the Java uses BigEndian scheme when they serialize data types where as Intel based architectures use LittleEndian scheme. So when serializing data types like int, long from C++ need to re-arrange the bytes.&lt;/p&gt;Now I am converting the required classes and try to get the message publishing to work from C++.     &lt;p class="MsoNormal"&gt;Converting an existing java application to a C++ application is always not easy as there are many simple utilities that are available in Java and missing in C++.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;One of them is the string operations (C++ has string operations, but since we are working with event headers we have to use char operations.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;Java code always has the luxury of using different collection classes to keep object references but when it comes to C++ they need to be implemented manfully.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-116482695898054622?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/116482695898054622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=116482695898054622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/116482695898054622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/116482695898054622'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2006/11/november-29th-status-report.html' title='NOVEMBER 29th  Status Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-116345358135579569</id><published>2006-11-13T13:21:00.000-08:00</published><updated>2006-11-15T08:29:58.733-08:00</updated><title type='text'>NOVEMBER 15th  Status Report</title><content type='html'>&lt;a href="http://jaliya.livejournal.com/#item409"&gt;NOVEMBER 15th  Status Report&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-116345358135579569?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/116345358135579569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=116345358135579569' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/116345358135579569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/116345358135579569'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2006/11/november-15th-status-report.html' title='NOVEMBER 15th  Status Report'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36948928.post-116239322360614674</id><published>2006-11-01T06:55:00.000-08:00</published><updated>2006-11-01T07:00:23.616-08:00</updated><title type='text'>Status Report for 10/18/2006 to 01/11/2006</title><content type='html'>&lt;p class="MsoNormal"&gt;Implemented a &lt;st1:place st="on"&gt;&lt;st1:placename st="on"&gt;C++&lt;/st1:PlaceName&gt;  &lt;st1:placetype st="on"&gt;Bridge&lt;/st1:PlaceType&gt;&lt;/st1:place&gt; for Naradabrokering.&lt;u1:p&gt;&lt;/u1:p&gt;  The project was completed as per the initial requirements and waiting for the feedback.&lt;br /&gt;&lt;br /&gt;Started working on the initial steps of my research.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36948928-116239322360614674?l=jaliyacgl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jaliyacgl.blogspot.com/feeds/116239322360614674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36948928&amp;postID=116239322360614674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/116239322360614674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36948928/posts/default/116239322360614674'/><link rel='alternate' type='text/html' href='http://jaliyacgl.blogspot.com/2006/11/status-report-for-10182006-to-01112006.html' title='Status Report for 10/18/2006 to 01/11/2006'/><author><name>Jaliya Ekanayake</name><uri>http://www.blogger.com/profile/12210985278265903305</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_k3HwFYLi7fM/Su5pmZkpuVI/AAAAAAAABVU/_lyl-OvJ8aM/s1600-R/jaliya.jpg'/></author><thr:total>0</thr:total></entry></feed>
