<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUYMRXoyeSp7ImA9WhRUFkg.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206</id><updated>2012-01-27T15:09:44.491+05:30</updated><category term="technology" /><category term="web" /><category term="pundict" /><category term="ping" /><category term="freedom of speech" /><category term="new" /><category term="rails 2 on ubuntu" /><category term="learning javafx" /><category term="open source" /><category term="RESTful web services" /><category term="application" /><category term="help" /><category term="software development" /><category term="memcache" /><category term="ruby on rails help" /><category term="job" /><category term="bing" /><category term="online presence" /><category term="agile" /><category term="intelligence" /><category term="extraterrestrial" /><category term="apps" /><category term="web scraper" /><category term="domain" /><category term="enterprise ruby" /><category term="performance" /><category term="sqlite4java" /><category term="packt publications" /><category term="open source CMS" /><category term="work" /><category term="blogs" /><category term="linux" /><category term="javafx" /><category term="facebook" /><category term="software modelling" /><category term="hack" /><category term="play framework" /><category term="zembly" /><category term="scala" /><category term="Certification" /><category term="REST" /><category term="success" /><category term="domain driven design" /><category term="FOSS" /><category term="web3.0" /><category term="cloud" /><category term="web services" /><category term="scalability and performance" /><category term="Play Framework Cookbook" /><category term="gaming" /><category term="professional blogger" /><category term="ufo" /><category term="open social" /><category term="sap" /><category term="virtualization challenges" /><category term="ruby on rails" /><category term="jobs" /><category term="rails2" /><category term="web2.0" /><category term="2.0" /><category term="twitter" /><category term="play" /><category term="functional programming" /><category term="CMS" /><category term="book review" /><category term="dictionary" /><category term="ror" /><category term="microsoft" /><category term="memcached" /><category term="java ee performance tuning" /><category term="rails 2" /><category term="Material" /><category term="career" /><category term="ria" /><category term="Free" /><category term="performance optimization" /><category term="widget" /><category term="sqlite transactions" /><category term="beginner" /><category term="rails2 environment" /><category term="money" /><title>Sumit Bisht</title><subtitle type="html">The #1 Blog
Yeah! When I make such a statement, I am not bragging about myself. Sounds a bit crazy, but that's what I am.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://sumitbisht.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>53</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/SumitBisht" /><feedburner:info uri="sumitbisht" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CkQAQ3szcSp7ImA9WhRVEUo.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-3041695809862236168</id><published>2012-01-10T10:09:00.000+05:30</published><updated>2012-01-10T10:09:02.589+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-10T10:09:02.589+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="career" /><title>Experiences as a software engineer</title><content type="html">I will soon be completing my first year working as a software engineer. An year ago, I was an eager college student and was dabbling in open source stuff heavily to make up of the extra time that I had spent in college. I had the prerequisite knowledge to be a developer even before college, but in India, you are worthless if you do not have anything on paper, but are deemed to be knowledgeable if having degrees and certifications.&lt;br /&gt;
&lt;br /&gt;
To start off with, I consider myself lucky to be in my present job, last year during my fifth semester, a trip to various local companies to 'test the waters' proved out to be an opportunity in disguise. I was interviewed and then selected without much fanfare. During the first day as an intern(my last semester involved industrial training) I jumped headfirst into connection pooling using spring, which was required here and there was no looking back (In direct contrast to people working in multinationals, who with much fanfare start their training - but later migrate to management as growth as a developer is restricted). &lt;br /&gt;
Among other things, I was having a java and ruby background and was started as a java developer. One of the perks of being in a product company is you have time and opportunity to try out, learn and explore new stuff all while doing your job.&lt;br /&gt;
After working considerably in the RnD over product development, I was put to test in scaling web scraping applications, porting of our product in .net platform and creating a keyboard/mouse capture application for assembling a test management mashup during the course of the previous year. Although I miss web applications a wee bit, the middleware and logic is what keeps me busy. On a parallel basis, I am into lot of books involving me to be a better developer.&amp;nbsp;&lt;a href="http://www.google.co.in/url?sa=t&amp;amp;rct=j&amp;amp;q=the%20clean%20coder&amp;amp;source=web&amp;amp;cd=5&amp;amp;ved=0CEoQFjAE&amp;amp;url=http%3A%2F%2Fbooks.google.com%2Fbooks%2Fabout%2FThe_Clean_Coder.html%3Fid%3Dik0qCTVzl44C&amp;amp;ei=Ir8LT-uHNsPmrAfehcWQBA&amp;amp;usg=AFQjCNF70pDy2c8Ez4-mELzrTQY99bYhiw&amp;amp;sig2=j8ZqCPvoVMS1oHQUUbsBiQ&amp;amp;cad=rja"&gt;The Clean Coder&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.google.co.in/url?sa=t&amp;amp;rct=j&amp;amp;q=passionate%20programmer&amp;amp;source=web&amp;amp;cd=1&amp;amp;sqi=2&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Fpragprog.com%2Fbook%2Fcfcar2%2Fthe-passionate-programmer&amp;amp;ei=Xr8LT5vzCcHIrQe935G_BA&amp;amp;usg=AFQjCNFKyBmRtj7RRxPiPfEIPoe02RNWGQ&amp;amp;sig2=6KS_8XQCRlnaoocxz1EQXQ&amp;amp;cad=rja"&gt;The passionate programmer,&lt;/a&gt; &lt;br /&gt;
With regards to updating my blog with the new stuff once every month, I learnt and made some interesting excercises during my free time, but paucity of time as well as my frequent forays in &lt;a href="http://dzone.com/"&gt;dzone&lt;/a&gt; and other knowledge portals led to cancellation of various blog posts. I am thinking of reverting to small posts providing a high level overview of technology practices that I consider important in current scenario instead of writing tutorial like posts.&lt;br /&gt;
Am having quite a few of these items in my mind, and will post them as the time allows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-3041695809862236168?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/58wGqBHCytL8pLDL_btH7J9k_eg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/58wGqBHCytL8pLDL_btH7J9k_eg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/58wGqBHCytL8pLDL_btH7J9k_eg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/58wGqBHCytL8pLDL_btH7J9k_eg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/yFYrBTV3uaA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/3041695809862236168/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=3041695809862236168&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/3041695809862236168?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/3041695809862236168?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/yFYrBTV3uaA/experiences-as-software-engineer.html" title="Experiences as a software engineer" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2012/01/experiences-as-software-engineer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEGQHkyeCp7ImA9WhRVEEk.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-8195732731327969703</id><published>2012-01-08T23:13:00.003+05:30</published><updated>2012-01-08T23:13:41.790+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-08T23:13:41.790+05:30</app:edited><title>Book Review : User Interface</title><content type="html">&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-8195732731327969703?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b0u6uf777ePDQAOVhIv02F9PkpA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b0u6uf777ePDQAOVhIv02F9PkpA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b0u6uf777ePDQAOVhIv02F9PkpA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b0u6uf777ePDQAOVhIv02F9PkpA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/zbOn91SgAsM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/8195732731327969703/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=8195732731327969703&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/8195732731327969703?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/8195732731327969703?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/zbOn91SgAsM/book-review-user-interface_08.html" title="Book Review : User Interface" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2012/01/book-review-user-interface_08.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEFSH04cSp7ImA9WhRVEEk.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-1577018307584744810</id><published>2012-01-08T23:13:00.001+05:30</published><updated>2012-01-08T23:13:39.339+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-08T23:13:39.339+05:30</app:edited><title>Book Review : User Interface</title><content type="html">&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-1577018307584744810?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lewUG8J-dGLYOb9ddArj49Qyw1g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lewUG8J-dGLYOb9ddArj49Qyw1g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lewUG8J-dGLYOb9ddArj49Qyw1g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lewUG8J-dGLYOb9ddArj49Qyw1g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/E32F5sEqMR0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/1577018307584744810/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=1577018307584744810&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/1577018307584744810?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/1577018307584744810?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/E32F5sEqMR0/book-review-user-interface.html" title="Book Review : User Interface" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2012/01/book-review-user-interface.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQDSH04cSp7ImA9WhRRFUs.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-7403583931043734197</id><published>2011-11-29T17:36:00.000+05:30</published><updated>2011-11-29T17:36:19.339+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-29T17:36:19.339+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="domain driven design" /><title>Aplying Domain Driven Design</title><content type="html">One of the common mistakes in constructing software that is sub-par with requirements is the lack of understanding of the domain in which it is to be operated. This fallout or mis-communication is perpetrated evidently by usage of different types of languages between the developers and domain experts (abstracted for the sake of simplicity) Evaluation of failures have enabled us to realize that underestimation of domain can lead into perils in project understanding. One of popular example occurs when you try to apply simple CRUD generators into, say something like medical instrumentation. Your productivity falls and you end up hitting a wall. This is evident as the technology is just the enabler, and not the end to means. I have learnt this the hard way in one of my recent project where over engineering and legacy code forced us to create entity framework configuration files via a self-created generator instead of the inbuilt edmx designer - an example of relying on reverse engineering over traditional process.&lt;br /&gt;
&lt;br /&gt;
However, many software solutions which are designed with their domain in mind are essentially an object-oriented model expressed in terms of their domain, at its core. The domain, rather than data-oriented entities constitute this and it compasses the domain wisdom (logic, data, rules, terminology) expressed in simple and utilizable manner. One of the tangible benefits of utilizing this approach is that this increases the longevity of code as domain outlives its implementation. Moreover, this can be modularized into reusable components and mashed-up as the needs arise.&lt;br /&gt;
&lt;br /&gt;
But to start off with, in existing applications, we can use metadata such as annotations or attributes to 'beautify' our code through using the domain logic without undergoing any unnecessary plumbing in the existing application architecture/stack. Another benefit from using them is that in java or c# multiple inheritance is not possible, but this can exist in the domain.&lt;br /&gt;
One thing that most domain-oriented tools tend to do is interface their data/stack through xml, which might be fine for domain experts, but is pain to maintain (think of all the xml documents for business rules and instances).&lt;br /&gt;
&lt;br /&gt;
Thus domain annotations provide a starting point of integrating domain knowledge into our code, making it more reasonable. Other approaches include use of full fledged frameworks like naked objects that are geared for these tasks and like rails, play or asp.net mvc frameworks, can quickly generate abstract applications quickly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-7403583931043734197?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lgMGLxsCXpWMv_k40bKhO3mtbJI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lgMGLxsCXpWMv_k40bKhO3mtbJI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lgMGLxsCXpWMv_k40bKhO3mtbJI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lgMGLxsCXpWMv_k40bKhO3mtbJI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/GHduX6dv3sg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/7403583931043734197/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=7403583931043734197&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/7403583931043734197?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/7403583931043734197?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/GHduX6dv3sg/aplying-domain-driven-design.html" title="Aplying Domain Driven Design" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2011/11/aplying-domain-driven-design.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcFR387eSp7ImA9WhdVFU0.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-2501140403005785422</id><published>2011-09-20T11:56:00.000+05:30</published><updated>2011-09-20T11:56:56.101+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-20T11:56:56.101+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="play" /><category scheme="http://www.blogger.com/atom/ns#" term="Play Framework Cookbook" /><category scheme="http://www.blogger.com/atom/ns#" term="play framework" /><title>Play Framework Cookbook  :book review</title><content type="html">&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:WordDocument&gt;   &lt;w:View&gt;Normal&lt;/w:View&gt;   &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:TrackMoves/&gt;   &lt;w:TrackFormatting/&gt;   &lt;w:PunctuationKerning/&gt;   &lt;w:ValidateAgainstSchemas/&gt;   &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:DoNotPromoteQF/&gt;   &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:Compatibility&gt;    &lt;w:BreakWrappedTables/&gt;    &lt;w:SnapToGridInCell/&gt;    &lt;w:WrapTextWithPunct/&gt;    &lt;w:UseAsianBreakRules/&gt;    &lt;w:DontGrowAutofit/&gt;    &lt;w:SplitPgBreakAndParaMark/&gt;    &lt;w:DontVertAlignCellWithSp/&gt;    &lt;w:DontBreakConstrainedForcedTables/&gt;    &lt;w:DontVertAlignInTxbx/&gt;    &lt;w:Word11KerningPairs/&gt;    &lt;w:CachedColBalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathPr&gt;    &lt;m:mathFont m:val="Cambria Math"/&gt;    &lt;m:brkBin m:val="before"/&gt;    &lt;m:brkBinSub m:val="--"/&gt;    &lt;m:smallFrac m:val="off"/&gt;    &lt;m:dispDef/&gt;    &lt;m:lMargin m:val="0"/&gt;    &lt;m:rMargin m:val="0"/&gt;    &lt;m:defJc m:val="centerGroup"/&gt;    &lt;m:wrapIndent m:val="1440"/&gt;    &lt;m:intLim m:val="subSup"/&gt;    &lt;m:naryLim m:val="undOvr"/&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;   &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;   &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;   &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;   &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;   &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;   &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;   &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;   &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;   &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;   &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;   &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;   &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;   &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;   &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;   &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;   &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;   &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-qformat:yes;
 mso-style-parent:"";
 mso-padding-alt:0in 5.4pt 0in 5.4pt;
 mso-para-margin:0in;
 mso-para-margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:11.0pt;
 font-family:"Calibri","sans-serif";
 mso-ascii-font-family:Calibri;
 mso-ascii-theme-font:minor-latin;
 mso-fareast-font-family:"Times New Roman";
 mso-fareast-theme-font:minor-fareast;
 mso-hansi-font-family:Calibri;
 mso-hansi-theme-font:minor-latin;
 mso-bidi-font-family:"Times New Roman";
 mso-bidi-theme-font:minor-bidi;}
&lt;/style&gt; &lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:shapedefaults v:ext="edit" spidmax="1026"/&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:shapelayout v:ext="edit"&gt;   &lt;o:idmap v:ext="edit" data="1"/&gt;  &lt;/o:shapelayout&gt;&lt;/xml&gt;&lt;![endif]--&gt;  &lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;span lang="EN-IN"&gt;Play Framework Cookbook&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-IN"&gt;Author : Alexander Reelsen&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-IN"&gt;Play framework is an upcoming framework that comes in the growing breed of rapid application development, using convention over configuration based web application development.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-IN"&gt;The thing that sets apart this framework apart from others is the customizability of the framework in the jvm, while taking advantage of either java or scala as desired. However, owing to the late arrival of play, there has been a lack of tutorials and documentation in order to solve real world problems with this framework.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-IN"&gt;This book, being a cookbook covers the topics, head-on and gives practical insight into building web application while covering loads of practical topics, from installation to deployment.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-IN"&gt;The book has been divided into 7 chapters and a small appendix. The first chapter covers the basics and is good for those coming without rails experience. However, the chapter also presents recepies for customizing all parts of the framework- pretty much everything that other technology cookbooks pack into themselves from cover to cover. The middle chapters dig deeper into the framework and integration with external services. One thing that is special in this cookbook is it devotes 3 chapters to modules as extensibility via modules is one of the main differentiating factor that play framework offers.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;In line with practicality, the book devotes its last chapter totally on deployment and release functions. This does omits the cloud vendors that provide paas for play framework directly, but as a lot of cloud offerings for play are unfinalized, they do not find any mention. The appendix is a disappointment as there are no pointers for carrying out further. As with any upcoming technology, it is imperative to look out for more resources in order to update and correct ourselves with its ecosystem. This is especially important as play 2.0 would be out on beta by the end of this year and a reader always expects pragmatism from a hands-on cookbook. Also, due to the flexibility of this framework, various PAAS vendors are providing, or planning to provide play support, which deserves at least a listing of these services. The author clearly states his intention behind leaving scala based applications in play, and this hopefully might make its way in future editions.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-IN"&gt;Overall, this is a book that lives well up to its expectations on providing us with something apart from the documented portions and the stock examples supplied with the play distribution while providing insights into the activities covered and making them flexible enough to be used practically.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-IN"&gt;For anyone learning play framework and looking to go beyond the examples for making interesting and practical applications, I’d heartily recommend this book.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-IN"&gt;Book page : &lt;a href="http://www.packtpub.com/play-framework-cookbook/book"&gt;http://www.packtpub.com/play-framework-cookbook/book&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-IN"&gt;Amazon : &lt;a href="http://www.amazon.com/Play-framework-Cookbook-ebook/dp/B005HIK8BG"&gt;http://www.amazon.com/Play-framework-Cookbook-ebook/dp/B005HIK8BG&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&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/1952948324831261206-2501140403005785422?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vwlKXfY18uxInGc-m-l6uA4VRv8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vwlKXfY18uxInGc-m-l6uA4VRv8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vwlKXfY18uxInGc-m-l6uA4VRv8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vwlKXfY18uxInGc-m-l6uA4VRv8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/SNtaHHRBGGM" height="1" width="1"/&gt;</content><link rel="related" href="http://www.amazon.com/Play-framework-Cookbook-ebook/dp/B005HIK8BG" title="Play Framework Cookbook  :book review" /><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/2501140403005785422/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=2501140403005785422&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/2501140403005785422?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/2501140403005785422?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/SNtaHHRBGGM/play-framework-cookbook-book-review.html" title="Play Framework Cookbook  :book review" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2011/09/play-framework-cookbook-book-review.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08GR3syfCp7ImA9WhdXEUU.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-6668203514765693938</id><published>2011-08-24T16:00:00.001+05:30</published><updated>2011-08-24T16:00:26.594+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-24T16:00:26.594+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="play" /><category scheme="http://www.blogger.com/atom/ns#" term="book review" /><category scheme="http://www.blogger.com/atom/ns#" term="packt publications" /><category scheme="http://www.blogger.com/atom/ns#" term="play framework" /><title>Up Next : Book review on Play framework</title><content type="html">Today I received a copy of the book, 'Play Framework Cookbook' by Alexander Reelsen, courtesy its publisher, &lt;a href="http://link.packtpub.com/uBEJbW"&gt;Packt Publications&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="https://www.packtpub.com/sites/default/files/imagecache/productview/5528OS_Play%20Framework%20Cookbook_Frontcover.jpg" /&gt;&lt;/div&gt;As the name suggests, it covers various recipes regarding the play  framework, which is a promising rapid application development framework  in java/scala platform.&lt;br /&gt;
&lt;br /&gt;
This is the first instance of any good documentation of this upcoming  framework for professionals and looks promising. I will be going over  this book for the next few days and would be posting my views about it,  stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-6668203514765693938?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pwL4mB-NgwL-5MAtgE4vVrhF3k0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pwL4mB-NgwL-5MAtgE4vVrhF3k0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pwL4mB-NgwL-5MAtgE4vVrhF3k0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pwL4mB-NgwL-5MAtgE4vVrhF3k0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/TD8Jj_DPotA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/6668203514765693938/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=6668203514765693938&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/6668203514765693938?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/6668203514765693938?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/TD8Jj_DPotA/up-next-book-review-on-play-framework.html" title="Up Next : Book review on Play framework" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2011/08/up-next-book-review-on-play-framework.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAARn48eyp7ImA9WhdRFU4.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-6360328580239977745</id><published>2011-08-05T15:02:00.000+05:30</published><updated>2011-08-05T15:02:27.073+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-05T15:02:27.073+05:30</app:edited><title>Need Concurrency ? LMAX to rescue!</title><content type="html">&lt;span style="font-size: large;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;In praise of LMAX. &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;Concurrency is a necessary evil beast in any application. Multicore architecture has ncessiated the use of programming for concurrency if there is a need for enhancing application performance.&lt;br /&gt;
Recently, on the martin fowler's blog, I came across an interesting architecture, LMAX which was used by in a financial application to run over 6 Million transaction simultaneously, over a single thread of execution only!&lt;br /&gt;
Even if this architecture is limited to finance domain, it makes up for an excellent solution for dealing with concurrency. With its single point of handling of the business logic processing there might seem a potential bottleneck, but is negated via alternative mechanisms to recreate this controller - Event Sourcing.&lt;br /&gt;
The concept of in-memory solution for performance is not new, but having concurrency&amp;nbsp; without the taxing side effects of transactions is indeed interesting.&lt;br /&gt;
I'll be doing some more study through it during this weekend, and update here if necessary.&lt;br /&gt;
&lt;br /&gt;
Links :&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Found reference from Martin Fowler's blog : &lt;a href="http://martinfowler.com/articles/lmax.html"&gt;http://martinfowler.com/articles/lmax.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;One implementation of LMAX (Disruptor): &lt;a href="http://code.google.com/p/disruptor/"&gt;http://code.google.com/p/disruptor/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Disruptor's technical paper that gives an excellent overview : &lt;a href="http://disruptor.googlecode.com/files/Disruptor-1.0.pdf"&gt;http://disruptor.googlecode.com/files/Disruptor-1.0.pdf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-6360328580239977745?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TgAm2wGzHlzyXVXAaLTCjWQLjAI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TgAm2wGzHlzyXVXAaLTCjWQLjAI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TgAm2wGzHlzyXVXAaLTCjWQLjAI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TgAm2wGzHlzyXVXAaLTCjWQLjAI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/KSOp393wNAQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/6360328580239977745/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=6360328580239977745&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/6360328580239977745?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/6360328580239977745?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/KSOp393wNAQ/need-concurrency-lmax-to-rescue.html" title="Need Concurrency ? LMAX to rescue!" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2011/08/need-concurrency-lmax-to-rescue.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQFSXYyeCp7ImA9WhZaEE0.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-8746326612084695874</id><published>2011-06-25T17:48:00.000+05:30</published><updated>2011-06-25T17:48:38.890+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-25T17:48:38.890+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sqlite transactions" /><category scheme="http://www.blogger.com/atom/ns#" term="java ee performance tuning" /><category scheme="http://www.blogger.com/atom/ns#" term="web" /><category scheme="http://www.blogger.com/atom/ns#" term="sqlite4java" /><category scheme="http://www.blogger.com/atom/ns#" term="web scraper" /><title>The curious case of multithreading Sqlite</title><content type="html">In a recent project, I've embarked upon the process of saving information in a quick and lightweight manner for which the serverless database, sqlite was ideal. This is not only a flexible database supporting dynamic data types, but also an extendible one used from embedded web browsers and mobile platforms to rails based websites(good riddiance, mysql) .The database is so lightweight that you'll find yourself exclaiming it as db. It is less than 100 kb in some cases and can be used as a memory resident database for the performance conscious folks and applications.&lt;br /&gt;
However, the support of transactions and scalability leave a lot to desire as the documentation cleary states the goals of this database is not these.&lt;br /&gt;
In my case, getting started was just the matter of finding the jdbc driver and it s documentation from its website. However, upon customization, there was a need for normalization which in turn required a sequential read/write operations. As soon as this was done, the multi-threaded application that was accessing started experiencing concurrency issues around the database.&lt;br /&gt;
This was resolved via using a little used jni wrapper that I discovered, sqlite4java. This not only solved the concurrency issues, but also enabled transactions. The beauty of this approach is also the fact that it uses a single connection as opposed to a pooled/fresh connection per every request, which tends to be a real performance bottleneck as we scale up our application.&lt;br /&gt;
&lt;br /&gt;
For such a nice framework, it is a surprise that these changes have not permeated to the java/native jdbc drivers so far and the users have to cope up with its api at the moment. This could be probably because of its tight integration with the underlying C-based api that is quite performant as compared to its&lt;br /&gt;
alternatives in python and java, effectively making it non compliant with the jdbc specification.&lt;br /&gt;
&lt;br /&gt;
As the single connection served entire applications, exposing it as a singleton was the easiest approach :&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;static SQLiteQueue queue = new SQLiteQueue(new File("BiddingsDB"));&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;static {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;queue.start();&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
For providing a transaction-like support, there was a need to wrap the existing operations in this queue :&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;public static void databaseInsert(final List&lt;object&gt; list) {
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;queue.execute(new SQLiteJob&lt;integer&gt;() {&lt;/integer&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@Override&lt;/span&gt;&lt;/span&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected Integer job(SQLiteConnection arg0) throws Throwable {&lt;/span&gt;&lt;/span&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;insert(bidders, arg0);&lt;/span&gt;&lt;/span&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;return null;&lt;/span&gt;&lt;/span&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}});&lt;/span&gt;&lt;/span&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/span&gt;

The insert method performs the actual reads and writes in a row in a non-blocking manner which earlier used to cause locking problems with sqlite in the past.

Integration tests verified this performance gains (recollections):
DB insert (Read + Multiple writes in the operation)
1&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Record &amp;nbsp;: ~200 ms&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;2 s
100&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Records : 5s&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;10s
10000&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Records : Fail&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;~100s

As an afterthought, you can have a plain vanilla solution via the&amp;nbsp;&lt;a href="http://scraperwiki.com/"&gt;scraperwiki.com&lt;/a&gt;&amp;nbsp;that not only gives you free cloud access for your scripts, but also its data via sqlite. &amp;nbsp;This aptly highlights the difference in the mindsets of java as well as scripting developers. Here, I was able to run a rudimentary scraper in a matter of minutes but was of no use for my client due to the gathering restrictions of the running jobs there. Hopefully, we get to see some mixing of both the worlds in the near future as scripting for jvm has been making a lot of noise for the past 3 years, but not much efforts have been made by the two sides so far.
Oh, and I am really enjoying the rainy weather as I write this post!
&lt;/object&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-8746326612084695874?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nqpp3Zc02RJlsE3zMII2WUROc0M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nqpp3Zc02RJlsE3zMII2WUROc0M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nqpp3Zc02RJlsE3zMII2WUROc0M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nqpp3Zc02RJlsE3zMII2WUROc0M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/5DH59oyNrbk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/8746326612084695874/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=8746326612084695874&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/8746326612084695874?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/8746326612084695874?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/5DH59oyNrbk/curious-case-of-multithreading-sqlite.html" title="The curious case of multithreading Sqlite" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2011/06/curious-case-of-multithreading-sqlite.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkICQXg5cSp7ImA9WhZQFUs.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-5468682986689138045</id><published>2011-04-23T18:46:00.001+05:30</published><updated>2011-04-23T18:46:00.629+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-23T18:46:00.629+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="gaming" /><title>PC Gaming on Linux</title><content type="html">Many people consider Linux as a serious OS for computing, but there is a fun aspect to it that is not really known as there is no marketing done for these games. However, for a moderate gamer, linux platform is satisfying especially if you are looking for playing games for your amusement without going too heavy on your wallet. Linux has also improved on the UI front considerably as now we can have some seriously GPU intensive graphics through out of box programs like compiz.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-DyxeoT-oUu8/TbKLULSUwAI/AAAAAAAAAIw/xAU8Pac8tYQ/s1600/Screenshot-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://2.bp.blogspot.com/-DyxeoT-oUu8/TbKLULSUwAI/AAAAAAAAAIw/xAU8Pac8tYQ/s320/Screenshot-1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Cool 3D Desktop with Compiz&lt;/b&gt;&lt;/div&gt;Those looking for a quick solution can use http://live.linux-gamers.net that allows you to create and start gaming from the live CD/USB directly.&lt;br /&gt;
&lt;br /&gt;
In addition to the point and click games(like card based games), &amp;nbsp;you can have some serious fun with 3D games that PC gamers have become familiar with. Be it a fast paced action game like AssaultCube or a racing game like TuxKart, there are options for everyone.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-VqMepdBE4tY/TbKMoDxnf9I/AAAAAAAAAI0/-WEQev5AutU/s1600/KKScreenshot-SuperTuxKart.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-VqMepdBE4tY/TbKMoDxnf9I/AAAAAAAAAI0/-WEQev5AutU/s320/KKScreenshot-SuperTuxKart.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;b&gt;TuxKart &amp;nbsp;: Funny racing game&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-0s7czu4ypFs/TbKM6OKHVLI/AAAAAAAAAI4/iUioNS-Qgmo/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://3.bp.blogspot.com/-0s7czu4ypFs/TbKM6OKHVLI/AAAAAAAAAI4/iUioNS-Qgmo/s320/Screenshot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;AssaultCube : Fast paced action, a la Quake3 style&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
Thanks to ID software's initiative of providing a linux binary(and their stand on DirectX framework), we can install and play a game like DOOM3 on Linux http://sites.google.com/site/lgmscripts/scripts/games/doom-3 (which is definitively on my TODO list:)&lt;br /&gt;
&lt;br /&gt;
There are certain caveats to this excercise too. Since my laptop has a Nvidia GeForce 8200MG card, I had to use a non open source binary driver as the cannonical one was not working well on Ubuntu. If you consider the freedom and the non presence of any cost/license, it forms a good overall personal entertainment package.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-5468682986689138045?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MDJgp_QV4YABoQBjxrFUxFhvP7o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MDJgp_QV4YABoQBjxrFUxFhvP7o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MDJgp_QV4YABoQBjxrFUxFhvP7o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MDJgp_QV4YABoQBjxrFUxFhvP7o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/GJASrbRvpF8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/5468682986689138045/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=5468682986689138045&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/5468682986689138045?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/5468682986689138045?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/GJASrbRvpF8/pc-gaming-on-linux.html" title="PC Gaming on Linux" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-DyxeoT-oUu8/TbKLULSUwAI/AAAAAAAAAIw/xAU8Pac8tYQ/s72-c/Screenshot-1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2011/04/pc-gaming-on-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQFQHo7fyp7ImA9WhZSEkw.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-1105700138922974281</id><published>2011-03-27T13:55:00.000+05:30</published><updated>2011-03-27T13:55:11.407+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-27T13:55:11.407+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="domain" /><category scheme="http://www.blogger.com/atom/ns#" term="domain driven design" /><category scheme="http://www.blogger.com/atom/ns#" term="software modelling" /><title>Domain-Driven Design Using Naked Objects</title><content type="html">I just had a chance to read a newly released book, 'Domain-Driven Design Using Naked Objects' by Dan Haywood [&lt;a href="http://www.pragprog.com/titles/dhnako"&gt;http://www.pragprog.com/titles/dhnako&lt;/a&gt;] that provides an insight into the world of DDD. If nothing else, this book is for techies &amp;amp; management people alike. Although Naked Objects is covered as the implementation framework (to explain practically, all aspects of DDD), this book serves as an excellent introduction text for all of us who are new into this concept of crafting an enterprise application according to domain. This book also deserves to be read specially because there has been considerable buzz around this 'Domain' stuff in the recent past.&lt;br /&gt;
&lt;br /&gt;
According to the book , &lt;br /&gt;
&lt;i&gt;'Domain-driven design is an approach to building application software that focuses on the bit that matters in enterprise applications: the core business domain. Rather than putting all your effort into technical concerns, you work to identify the key concepts that you want the application to handle, you try to figure out how they relate, and you experiment with allocating responsibilities (functionality). Those concepts might be easy to see (Customers, Products, Orders, and so on), but often there are more subtle ones (Payable, ShippingRecipient, and RepeatingOrder) that won’t get spotted the first time around. So, you can use a team that consists of business domain experts and developers, and you work to make sure that each understands the other by using the common ground of the domain itself.'&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Since being a domain expert is the next step for any developer naturally, as his experience increases, there is need to have more insight into the business stuff, instead of just the software. UML although does a great job for explaining the Object Oriented stuff, but ponder for a second, how is it really going to help a businessman that is interested in getting more profits. Naked Objects framework (&lt;a href="http://www.nakedobjects.org/"&gt;http://www.nakedobjects.org&lt;/a&gt;) is based on the design pattern with same name(&lt;a href="http://en.wikipedia.org/wiki/naked_objects"&gt;http://en.wikipedia.org/wiki/naked_objects&lt;/a&gt;) is an open source framework (only for java, .NET is a commercial one) that converts simple bean/components automatically into an interface(read as&amp;nbsp; multiple applications).&lt;br /&gt;
Don't yet confuse this with prototyping because DDD incorporates both the developer and the domain expert teams and we are not just creating the UI.&lt;br /&gt;
&lt;i&gt;&lt;span style="font-size: small;"&gt;DDD's 2 central premises explained :&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;A &lt;i&gt;ubiquitous language&lt;/i&gt; for integrating &amp;amp; easing communication between domain experts instead of 2, which is the existing norm(like code &amp;amp; UML)&lt;/li&gt;
&lt;li&gt;Using &lt;i&gt;model-driven design&lt;/i&gt; that aims to capture the model of the business process. This is done in code, rather than just visually, as was the case earlier.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;Naked Objects&lt;/b&gt;&lt;br /&gt;
The java based Naked Objects(NO) framework is an evolutionary step forward from Rails (and its other avatars : Grails, Spring Roo, asp.net MVC, etc) that focuses more on M &amp;amp; V rather than MVC and provides much more domain-specific applications in turn resulting in flexibility for all.&lt;br /&gt;
A typical NO application consists of multiple sub-projects like the core domain, fixture, service, command line and webapp project through a maven archetype. The coolest thing&amp;nbsp; is that NO automatically displays the domain objects in an O-O based UI that offers display in more flexible manner than any other IDE.&lt;br /&gt;
NO also challenges the common frontend-middleware-backend convention and instead applies the Hexagonal architecture (&lt;a href="http://alistair.cockburn.us/Hexagonal+architecture"&gt;http://alistair.cockburn.us/Hexagonal+architecture&lt;/a&gt;) that deals with the bigger picture in mind. The development in this framework is pojo centric and is heavily based on annotations, which should be pretty much regular stuff for any JEE developer. Also, during my initial evaluation of the framework, the code that's being generated during the development is of maintainable quality, which is virtually essential for maintenance and scaling in any enterprise application.&lt;br /&gt;
&lt;br /&gt;
Hence this book, and its field of study is highly recommended for any enterprise developer/ team/ manager/ domain expert and as is repeatedly mentioned, becomes highly important when one has more years of experience under his belt. I am continuing my exploration in this and if it is really useful for me, would post some exercises here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-1105700138922974281?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NyrT-hBTW9ljHoT8GxYLfRzgjWY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NyrT-hBTW9ljHoT8GxYLfRzgjWY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NyrT-hBTW9ljHoT8GxYLfRzgjWY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NyrT-hBTW9ljHoT8GxYLfRzgjWY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/v_0pdDnzugM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/1105700138922974281/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=1105700138922974281&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/1105700138922974281?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/1105700138922974281?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/v_0pdDnzugM/domain-driven-design-using-naked.html" title="Domain-Driven Design Using Naked Objects" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2011/03/domain-driven-design-using-naked.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcDR3c4fSp7ImA9Wx9aEE4.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-5786685078888599468</id><published>2011-03-02T08:01:00.001+05:30</published><updated>2011-03-02T08:01:16.935+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-02T08:01:16.935+05:30</app:edited><title>10 Years of Ruby!</title><content type="html">Let me recollect not very recent past. It was 2008 and recession was at its peak. Back then, I was largely a self-taught developer and had a working knowledge in struts &amp;amp; ejb (the java heavyweights at that time). After unsuccessfully trying to yield a job, I finally decided to pursue my masters in computer applications (out of necessity, or so it seemed back then).&lt;br /&gt;
During this frustrating period, I heard about Ruby On Rails, which was touted as the next-gen platform/language. As with other people, I was quite scared of it as the name sounded very unfamiliar. So, I didn't pursue it. However in the summers of 2009, as I was idling across the netbeans.org looking for some interesting activity to do, I came across this '5-minute Weblog' exercise on rails and decided to have a go.&lt;br /&gt;
Believe me, it was one of the turning point in my career and I spent more than an hour figuring out exactly how I was able to generate a web application just like that using practically no big tools.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As the things turned out, I was not the only one who leaded this entirely new approach. During a recent magazine interview(&lt;a href="http://www.pragprog.com/magazines/2010-12/chad-fowler-on-ruby"&gt;http://www.pragprog.com/magazines/2010-12/chad-fowler-on-ruby&lt;/a&gt;), Chad Fowler, a prominent figure on Ruby Conference and a ruby authority echoed similar views.&lt;br /&gt;
During this interview, it was interesting to observe the maturing of ruby as a language and a platform (performance wise and lightweight for mobile devices).&lt;br /&gt;
&lt;br /&gt;
My current job deals with java, however Ruby &amp;amp; Scala have kept my other side of programming (hacking &amp;amp; open-sourcing) buzzing with activity and with a healthy mix of curiosity and satisfaction.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-5786685078888599468?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oQtcxqpG4eR0ToC9TXMkDB5tk7Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oQtcxqpG4eR0ToC9TXMkDB5tk7Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oQtcxqpG4eR0ToC9TXMkDB5tk7Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oQtcxqpG4eR0ToC9TXMkDB5tk7Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/LpHXQD44YJs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/5786685078888599468/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=5786685078888599468&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/5786685078888599468?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/5786685078888599468?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/LpHXQD44YJs/10-years-of-ruby.html" title="10 Years of Ruby!" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2011/03/10-years-of-ruby.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIDQn84eCp7ImA9Wx9bEk8.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-2889688377462545638</id><published>2011-02-20T22:52:00.000+05:30</published><updated>2011-02-20T22:52:53.130+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-20T22:52:53.130+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="functional programming" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="scalability and performance" /><category scheme="http://www.blogger.com/atom/ns#" term="scala" /><title>Increasing usage of Functional Programming in driving scalable architecture</title><content type="html">One of the most exciting technologies that I've been pursuing lately is nothing new, but as an old wine in a new bottle, provides an alternative method to solve emerging issues for addressing performance. I am referring to Functional Programming, that has been growing in importance during some period in past few years due to various ongoing development in today's huge data processing applications used in enterprise environments. I've been seeing the rise of this otherwise academic language, and is increasingly used/considered to be usable for the past few years due to various ongoing developments. &lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
Features &lt;/b&gt;&lt;br /&gt;
Functional programming provides various features that separates it as a different paradigm for programming( http://en.wikipedia.org/wiki/Functional_programming ). I'll be explaining various features as per this post's context.&lt;br /&gt;
&lt;b&gt;Higher Order Functions&lt;/b&gt; : FP revolves around functions! Think of this as a small version of class in OOP. If you've worked with, say anonymous or inner classes in the past. You've unknowingly been doing FP in OOP, and needless to say, it was difficult to learn and maintain. Generics solve the same problem as First Class Functions, but the resultant implementation leaves a lot to be desired.&lt;br /&gt;
&lt;b&gt;Recursion&lt;/b&gt; : Again a handy feature that provides a lot of bang for small amount of buck, or code! If you know how to use your functions, you can do a lot with your code without having to write boilerplate or plumbing code in your algorithmic implementations.&lt;br /&gt;
&lt;b&gt;Immutability&lt;/b&gt; : Now this is what I am talking about! We all are familiar with multi-threaded programming, yet the tools for using it are hardly ever used as multi threaded programming involves sharing of resources, which is not a good thing. In all other programming paradigms, we are familiar with the foll construct :&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;int a = 0; &amp;nbsp; Initialization at this line in the memory&lt;/span&gt;&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; a = 1; &amp;nbsp; &amp;nbsp; &amp;nbsp; Memory address pointed by a gets 'Updated'&lt;/div&gt;The problem lies with the second statement as we don't know when and more importantly which thread is going to invoke it. But if you recall from your Mathematics, we used to have following notations there:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; let a=0 &amp;nbsp; &amp;nbsp;&amp;nbsp; Initialize a&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; a=5 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Assign a something new, and ignore previous state&lt;/div&gt;As the value of a is immutable, we can safely have as many threads to it as we need. This means, as our applications are thread safe, we can have concurrent / parallel executions of the same code by 2 or 200000 invocations without adverse effects.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
Applicability in meeting the challenges in scaling and performance&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
Today's applications need to fully utilize the underlying hardware. Moore's law doesn't holds when we consider raw cycle performance, but is still applicable if we consider the overall increase in processing capability through hyper threaded and multi core processor hardware. The information generation and its processing needs has increased too, leading to use of parallel computations. This is where the FP comes in handy. Its true that infrastructure can be abstracted from the application (as with cloud platforms) but if we do that ourselves, we can have greater flexibility and scalability for our solutions.&lt;br /&gt;
One feature of many 'newer' breed of FP languages like F# or scala that are hybrid in nature that I haven't discussed before is the ease of use of these languages is the ability to construct Domain Specific Languages; DSLs. From the business' perspectives, DSLs are fast becoming key to map the technology-business divide and keep application agility and re-usability simultaneously.&lt;br /&gt;
&lt;br /&gt;
My exposure these days is with scala, which is a hybrid FP language that runs on JVM, and is interoperable with java. It is attracting the same kind of curiosity for java developers right now which ruby (largely because of Rails) did a few years back. However, this language aims at scalability, which is also its full name (scala stands for scalable architecture) within the JVM itself, making it an ideal candidate for solving middleware performance and scalability related issues. The fact that it replaced Rails in handling message processing in Twitter speaks for itself. I am also working on a research paper that explains the use of scala (and FP in general) to process massive amounts of data in distributed/cloud environment. Will post some more information here as it gets finalized.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-2889688377462545638?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/a73UdRzNvosfcT7D9c8KtbHaiLU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/a73UdRzNvosfcT7D9c8KtbHaiLU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/a73UdRzNvosfcT7D9c8KtbHaiLU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/a73UdRzNvosfcT7D9c8KtbHaiLU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/kWse0BeJtwk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/2889688377462545638/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=2889688377462545638&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/2889688377462545638?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/2889688377462545638?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/kWse0BeJtwk/increasing-usage-of-functional.html" title="Increasing usage of Functional Programming in driving scalable architecture" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2011/02/increasing-usage-of-functional.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YCSHszfip7ImA9Wx9VE0w.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-3050382049060843386</id><published>2011-01-29T19:56:00.000+05:30</published><updated>2011-01-29T19:56:09.586+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-29T19:56:09.586+05:30</app:edited><title>My initial foray into professional software development – Experiences as a Developer</title><content type="html">Its been a fortnight since I've started working full time in a professional software development firm and through this post, I am sharing my experiences. During this period, there have been a lot of revelations for me and many of my fears about work in an IT company have, needless to say, been allayed.&lt;br /&gt;
I started working with a small sized local software company that performs all the development activities for a UK based firm that sells products for converting mainframe legacy systems(IBM's i-Series) into modern ones(JavaEE based). Since this is solely focused business on software development, I was able to obtain various advantages that could've not been possible otherwise. Some of which are :-&lt;br /&gt;
No managerial bullshit about communication, teamwork &amp; motivation (and what else the HR people can put in).&lt;br /&gt;
Simple product oriented workflow with flexible time lines.&lt;br /&gt;
A quiet workplace in the outskirts of the city (which is indeed a quaint place).&lt;br /&gt;
&lt;br /&gt;
My only grouse so far (If I really need to proclaim one) has been long work hours (almost 10 hrs) which leave me with no time for outings and socialization on weekdays, but is fine by me as I am growing as a developer in leaps and bounds, and also because I am not much of a social fellow and all the other developers too are busy with themselves during work.&lt;br /&gt;
&lt;br /&gt;
The technologies that I am working on are also my favorite and involve Enterprise Java (JSF, Hibernate, Spring and JPA). However, due to non proficiency in JSF, finally I am learning this framework. In the past, I've blogged against this framework and ever since 2007, have refrained until now in using this technology. The workplace requirements, however enforced this change and this is not as bad as I was imagining it to be.&lt;br /&gt;
&lt;br /&gt;
The first day in the job was a huge eye-opener for me as I was handled a finished application to explore and document my findings. Upon seeing this massive piece of JEE mastery, despair set in quickly an I was beginning to feel panicked. Fortunately, I had done some open source development during my college years that proved to be quite handy for me (Just build the whole thing and unit tested it). By the end of the first day, I had some rough idea about that enterprise application that housed more than 100 JSF beans (that were integrated into similar number of service classes, DAOs, and other layers coupled with a complete in-house API that was stretching back to more than 10 years). To add my misery, the database was a DB2 instance running on AS400 platform remotely and was sluggish at the very best of the performance with no user manipulative tool at my disposal.&lt;br /&gt;
&lt;br /&gt;
The subsequent days, surprisingly, eased this initial pain as I was informed by my boss that the application in fact was auto-generated by a in-house tool based on freemaker/velocity. Also, what was seemingly impossible one day, became reasonable the other and was accomplished on the third. For this success, I'll attribute to the long hours that I am putting at my workstation there instead of shying away from the problem, as the case was earlier.&lt;br /&gt;
&lt;br /&gt;
However, before ending this, I'll sum up an excellent blog entry that I received quite earlier as a tweet:&lt;br /&gt;
Ingredients for a perfect technology workplace (read as IT)&lt;br /&gt;
Excellent people (Your boss &amp; co-workers)&lt;br /&gt;
Excellent projects (That really stimulate you)&lt;br /&gt;
Excellent workplace (Or something similar, I can't recollect)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-3050382049060843386?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Dc85Hm6vnZPJdyiypUp22sjCYFQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Dc85Hm6vnZPJdyiypUp22sjCYFQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Dc85Hm6vnZPJdyiypUp22sjCYFQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Dc85Hm6vnZPJdyiypUp22sjCYFQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/Ry4-WjC7jFQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/3050382049060843386/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=3050382049060843386&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/3050382049060843386?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/3050382049060843386?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/Ry4-WjC7jFQ/my-initial-foray-into-professional.html" title="My initial foray into professional software development – Experiences as a Developer" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2011/01/my-initial-foray-into-professional.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MGR3s9eyp7ImA9Wx9QGEw.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-5926158189696114865</id><published>2010-12-31T21:33:00.000+05:30</published><updated>2010-12-31T21:33:46.563+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-31T21:33:46.563+05:30</app:edited><title>A paradigm mismatch ?</title><content type="html">Here are my comment on an often repeating topic of conversation about 6th semester projects in Masters Of Computer Applications course. A lot of people are considering programming for web based applications aka websites for their last semester projects in MCA. Since this involves a whole stack of technologies, one can observe that it in turn, helps a person or more importantly, his mentor to hide a poor design behind this complexity.&lt;br /&gt;
Coming back to the topic, a lot of my friends and people from various coaching centers have certainly got preconceived notions regarding different technologies to code with as their server side programming language. However, one can observe the faint rumblings of faint but still existent religious fervor of 'my language is better than yours'.&lt;br /&gt;
To start off with, students try and then ignore Java as an alternative because it is too complex (It is a big pain, but then has its benefits) and huge for their web applications. However, this fear can be allayed by the fact that one can choose from a wide variety of frameworks(MVC like Struts &amp; SpringMVC or component based like Tapestry or JSF) and technologies (a plethora of middleware tech.) within the java ecosystem itself. PHP is touted as a compelling alternative, but for me, the scripting approach only works for demonstrative purposes. Anything larger either needs a huge patience, or frameworks, which are immature so far in this platform. I really am not impressed by frameworks like Zend here to  name a few. Microsoft .NET deserves a special mention because it is already baked in (with IDE &amp; app server ready, for instance) as well as has a meaningful architecture(through code behind). However the very strength of this framework becomes its nemesis as students are not encouraged to question/hack into the innards of any tool used. The upcoming framework like asp.net MVC too represents a copied and chaotic exercise to perform something that is coming too late.&lt;br /&gt;
My personal outlook about the whole situation is that no single technology rules the roost. If you ask me, it is java for building middleware (business intensive) &amp; expandable (one where you can fit in a lot of components/features) websites. Php is really cute as you get the time to play around with css &amp; javascript based functionality around your site (After all, the data is the king and your site functions as its glorified frontend). If I require a lot of versatility as well as ease of development, I'll go for .NET as it really hits that sweet spot when you are willing to work inside the confines of the framework.&lt;br /&gt;
I had this discussion with myself a few days back in a moment of clarity as I was contemplating mine and others' 6th semester project for my MCA course. I specifically ignored Rails (and frameworks based on it) as one generally threads a safe line in our course. Researching and hacking into a shiny new technology and writing a perfect but undocumented &amp; incomplete project would only lead towards its cancellation.&lt;br /&gt;
BTW, I had time to write all this stuff on new year's eve as tomorrow is my 5th semester ERP examination. So good luck for me and a very happy new year 2011 AD for my readers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-5926158189696114865?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Fn3hu5r2ksV3EYBIxMKEOhrM1x4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fn3hu5r2ksV3EYBIxMKEOhrM1x4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Fn3hu5r2ksV3EYBIxMKEOhrM1x4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fn3hu5r2ksV3EYBIxMKEOhrM1x4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/43i5QIUvitM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/5926158189696114865/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=5926158189696114865&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/5926158189696114865?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/5926158189696114865?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/43i5QIUvitM/paradigm-mismatch.html" title="A paradigm mismatch ?" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2010/12/paradigm-mismatch.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUACQHo-fip7ImA9Wx9SFkk.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-6598330943744642841</id><published>2010-12-06T20:32:00.002+05:30</published><updated>2010-12-06T20:32:41.456+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-06T20:32:41.456+05:30</app:edited><title>The stuff behind the fluff – Is Green IT an exercise in vain?</title><content type="html">Cloud computing is generally thought to be efficient, but this study changes it all. According to the &lt;a href="http://www.dw-world.de/dw/article/0,,6293173,00.html"&gt;recent UK study as published by DW World&lt;/a&gt;, cloud computing study reveals higher environmental impact than was previously thought. The quantity of the data centers as well as the consumers would collectively create this problem, which would be further intensified by the use of richer digital media. What this study surprised me was the analysis that it would be casual home users who would lead the excessive usage through rich media sharing/duplication.&lt;br /&gt;
In the past, Information Storage and Management used to focus solely on the enterprise specific needs. For handling the binary media format, technologies like CAS(Content Addressing Systems) are already in place. But according to this study, there would be a demand of 3200 Mega Bytes per person per day in just few years time. Given the pace of Internet proliferation and advancement, this is not a vague guess but a worrisome one.&lt;br /&gt;
The article pointed out the following courses of actions : &lt;br /&gt;
Creation of better/faster computers – This is really not possible as stated due to the lag between demands and Moore's Law&lt;br /&gt;
Green data centers – Again, here too the politics play an important role, BRIC nations in particular do have a cavalier attitude towards implementing clean sources.&lt;br /&gt;
&lt;br /&gt;
What was missing here in my option was the point that the research was addressing the solution of the problem rather than its cause. So, instead of addressing the data storage issues, we need to rigorously safeguard against the redundancy in such data. Semantic web is one such approach. Other approaches such as tagging the digital media and having a single copy for identical media (different locations with same signature) could solve this problem. Also, instead of consolidization, the work on distributed computing should also be promoted.&lt;br /&gt;
The distributed computing can easily be done using map/reduce algorithms or through application development platforms like Apache Hadoop. The issue of data can be addressed using peer-to-peer data exchange as in bit-torrent. These wouldn't create problems themselves because of the ever decreasing costs of online bandwidth and its performance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-6598330943744642841?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/30VmMeVYK4EoupihiJnFGVpJU-E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/30VmMeVYK4EoupihiJnFGVpJU-E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/30VmMeVYK4EoupihiJnFGVpJU-E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/30VmMeVYK4EoupihiJnFGVpJU-E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/bTC7pf5Xn3I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/6598330943744642841/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=6598330943744642841&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/6598330943744642841?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/6598330943744642841?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/bTC7pf5Xn3I/stuff-behind-fluff-is-green-it-exercise.html" title="The stuff behind the fluff – Is Green IT an exercise in vain?" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2010/12/stuff-behind-fluff-is-green-it-exercise.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04ER306fCp7ImA9Wx9TFUU.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-3863554684862118329</id><published>2010-11-24T12:28:00.000+05:30</published><updated>2010-11-24T12:28:26.314+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-24T12:28:26.314+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="virtualization challenges" /><title>Hurdles Towards Virtulization</title><content type="html">&lt;b&gt;Hurdles Towards Virtulization : What we face on its way to implementation&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This post is dedicated to the current challenges that we face in the creation and use of virtualization. I am writing this even at a time when virtualization is something which is sorely missing in everyday computing and beyond for me. For instance, during the past few weeks, I had my both hard disks developing bad sectors and had a miserable experience upgrading Ubuntu on my friends' disk. We need a mechanism to seamlessly move the operating systems from one machine to another. For this, we need virtualization.&lt;br /&gt;
Given the current hype and hoopla over this term, many people believe that this is a recent phenomenon which is not the case. Virtualization has its roots at least 40 years before, with the concept of time sharing systems. Similarly, the IBM OS/360 also heralded this new era of 'virtual machines'(VM). In order to manage these Vms, we need a special program which is known as Hypervisor. Now the challenge with hypervisor is that it needs to provide a secure, equivalent, efficient and controlled resource environment for its guests(which are the virtual machines).&lt;br /&gt;
&lt;br /&gt;
So what are the challenges ?&lt;br /&gt;
The first challenge that comes in my mind is the performance of the VM. If the guest is not getting enough processing, then there is no benefit out of such an arrangement. This can often happen when the guest OS performs a privileged operation such as a hardware interrupt or a system call resulting in acquisition of hardware locks. Now, as the guest has to run safely, this has to be carefully emulated by the hypervisor.&lt;br /&gt;
There is also a concept of time loss or clock skew. As there may be more than one OS per CPU running on a hypervisor at a given instance of time, the instructions by them would be run collectively. However, from the VM's perspective, there were only its instructions, so the instructions take longer time to execute (as other VM processes also hog the CPU cycles) than what the VM actually expects it to. Naturally, this time delay propagates to larger proportions leading to problems such as time-slicing of multiple processes at the guest OS/VM level.&lt;br /&gt;
The processing sharing problem also has a profound effect on the performance of the overall system. For instance, on a high priority guest, a low priority process would get precedence over a higher priority process on a low priority guest.This problem has not been solved to this date and only fringe works have been done in this regard. Perhaps this has still pertained due to the fact that a lot of OSs still are created with a single operator at a time without any restrictions.&lt;br /&gt;
The memory management as well as addressing are also some of the prevailing problems. Memory cache management is also a problem that rises exponentially as the number of intermediaries between the processes and hardware increase. This can be understood using a simple example. Let us consider that we have a machine which as LRU method of page catching and its guest has MRU method of caching. So as soon as the process becomes old in guest, it is discarded from the memory. However, on the host it is not deleted. So new we have wasteful data on the host memory. The  other extreme of this situation is when the data is frequently required in this setup. Now, the host would start to thrash. We need to control this thrashing and ensure page faults remain constant and distributed over a period of time through 'handshaking' communication between the guest and hypervisor with regard to occurrence of faults.The final problem that plagues virtualization systems is the addressing of memory which is there due to different memory addressing schemes being followed in both the hypervisor and guest. The memory addresses are divided for processes into segments, pages and further into offsets. So every process has 2 addresses and 3 memory references, leading to extra overhead. This is avoided through a translation look-aside buffer (TLB), which generally stores the recently used segment and page addresses. But for virtualized environments, this isn't enough as in normal TLB translations, the virtual addresses are transformed into a real ones but due to 3 address levels (Actual hardware address, the 'emulated' hardware address for guest and the virtual address at the guest), there exists an overhead of extra translation. Thankfully, this is being addressed by hardware vendors through hardware support such as Intel's VT-i or AMD's NPT on one end and through utilisation of these enhancements by hypervisors such as virtualbox and vmware.&lt;br /&gt;
Hopefully in the near future, we can expect to see more prevalence of virtualized environments, not only in heavy duty systems, but on hardware ranging from the least expensive personal computing to mission-critical systems, given the increasing maturity of  virtualization .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-3863554684862118329?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GKrYsiE-tSpxbRQAE_0Xkgl1tnc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GKrYsiE-tSpxbRQAE_0Xkgl1tnc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GKrYsiE-tSpxbRQAE_0Xkgl1tnc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GKrYsiE-tSpxbRQAE_0Xkgl1tnc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/4VsRZxfXtW4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/3863554684862118329/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=3863554684862118329&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/3863554684862118329?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/3863554684862118329?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/4VsRZxfXtW4/hurdles-towards-virtulization.html" title="Hurdles Towards Virtulization" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2010/11/hurdles-towards-virtulization.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4CRnc4fSp7ImA9Wx5bEko.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-8675249557928205123</id><published>2010-10-28T19:06:00.000+05:30</published><updated>2010-10-28T19:06:07.935+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-28T19:06:07.935+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="professional blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="online presence" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="career" /><title>Are we a dying breed ?</title><content type="html">Is it really beneficial to build and maintain an online persona when it is fraught with problems all around the corner? This thought was echoed on &lt;a href="http://www.coderanch.com/t/514579/Jobs/careers/noticed-building-online-persona"&gt; a thread on javaranch.com&lt;/a&gt;, which happens to be a very popular social forum for java technology enthusiasts.&lt;br /&gt;
One of my acquaintance had also, quite recently expressed reservations about the same due to the lack of appreciation. Whether his comment is just his perception or is it the truth, remains to be seen. The concept of professional blogging too remains an elusive concept for me and as far as I have observed, this remains largely and exercise in isolation or through and 'tool'.&lt;br /&gt;
&lt;br /&gt;
In the &lt;a href="http://www.google.com/trends?q=blogging&amp;geo=ind&amp;sa=N"&gt;google trends on blogging&lt;/a&gt;, it appeared that the search volume index dropped to an all time low in the last quarter of 2010 ever since the usage curve became consistent since 2007. The reference of blogs in the news also became erratic and dropped during this period.&lt;br /&gt;
&lt;br /&gt;
This leads to an interesting conclusion; is twitter really ushering in an era of microblogging since the people don't really want to go that extra mile for sharing their thoughts ? Applying social networking in the above comparison definitely causes no raised eyebrows as it is quite &lt;a href="http://www.google.com/trends?q=blogging%2C+social+networking&amp;ctab=0&amp;geo=in&amp;geor=all&amp;date=all&amp;sort=0"&gt;clear&lt;/a&gt; that social networking has taken the lead for the online citizens.&lt;br /&gt;
&lt;br /&gt;
As the aftermath of this change, you can expect greater emphasis on the management of information over these platforms - both for commercial and research purposes as well as a general change in the dissemination of information. This is because instead if the traditional Author-reader/follower role, we're fundamentally shifting towards an peer to peer approach with spontaneous interactions. So instead of following your favorite blog and waiting for the posts to come in, real time and probably, &lt;a href="http://en.wikipedia.org/wiki/Foursquare_(social_networking)"&gt; geographically aware&lt;/a&gt; interactions rule the roost. Social networking today has spread much beyond socializing with friends, family and that 'hot chick' profile(pun intended) to an information sharing portal. It is customizable as a mini internet with all the users being able to be the generators of the content.&lt;br /&gt;
&lt;br /&gt;
So if you are a techie or business savvy, you can utilize this change for your benefit. What do you feel about this ? are there any new developments in this arena that you are aware of ? please do comment about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-8675249557928205123?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EbQvZqEYdfgThrDchj3kKEaeSwk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EbQvZqEYdfgThrDchj3kKEaeSwk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EbQvZqEYdfgThrDchj3kKEaeSwk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EbQvZqEYdfgThrDchj3kKEaeSwk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/-Dg71TAdvtw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/8675249557928205123/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=8675249557928205123&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/8675249557928205123?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/8675249557928205123?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/-Dg71TAdvtw/are-we-dying-breed.html" title="Are we a dying breed ?" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2010/10/are-we-dying-breed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUDSHs7cCp7ImA9Wx5VGE8.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-2414882974668576143</id><published>2010-10-12T00:24:00.002+05:30</published><updated>2010-10-12T00:24:39.508+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-12T00:24:39.508+05:30</app:edited><title>From theory to practice- Transitioning isn't as easy as it seems</title><content type="html">I've been involved recently with the task of creating different projects. In order to do this, I followed the simplest and most important rule in the book – just put the most dedicated individuals on your team. However, with the induction of each separate member in the team, the allocation of responsibilities became more complex and the communication too started becoming a thorn in the flesh for the project vision that I had in mind. However, through agile approaches, currently I am able to lead and integrate my team effectively.&lt;br /&gt;
I didn't had enough time to bask in the glory of my newly-founded team equilibrium when my junior students asked me to mentor for their project too (we're having a common project by IBM, namely TGMC 2010). Okay, I said, and went into their class for a briefing. Upon entering the class, I was surrounded by a group of around 70 students, all willing to enter (and most of them already have) in a contest requiring people to submit Ajax driven websites that leverage SOA as their middleware, but very few having experience in even basic html . To get the people up and running, I created a blog wrote a basic how-to (&lt;a href="http://bbdnitm-tgmc.blogspot.com/2010/10/getting-up-to-speed-towards-building.html"&gt;http://bbdnitm-tgmc.blogspot.com/2010/10/getting-up-to-speed-towards-building.html&lt;/a&gt;).However, after 4 days, I am yet to get a comment from these people and have resigned to the fate that they need to work really hard if they ever want to see anything at the end of the tunnel. A few of them might deliver a workable solution after 6 months, but for the rest of them, the pain would be inevitable. From my side, I am willing to mentor any person who is a quick learner of jsp and middleware stuff and although I don't know much about the IBM's product usage, I am willing to learn and help others ease into deployment into IBM specific technologies like DB2 and Websphere/RAD. This incident has led me to think about project management in a new light, and now what I am feeling personally is that it is as important to have an able team as it is to find a mentor. Apart from this, it is the approach that matters for an individual, rather than his/her skills.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-2414882974668576143?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XOngcFwMcxSrCqw_XUwl1Rrx01Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XOngcFwMcxSrCqw_XUwl1Rrx01Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XOngcFwMcxSrCqw_XUwl1Rrx01Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XOngcFwMcxSrCqw_XUwl1Rrx01Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/Q-W4bXxI6kk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/2414882974668576143/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=2414882974668576143&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/2414882974668576143?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/2414882974668576143?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/Q-W4bXxI6kk/from-theory-to-practice-transitioning.html" title="From theory to practice- Transitioning isn't as easy as it seems" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2010/10/from-theory-to-practice-transitioning.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEINQH8yeip7ImA9Wx5XE0Q.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-6140670911810570975</id><published>2010-09-13T21:13:00.000+05:30</published><updated>2010-09-13T21:13:11.192+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-13T21:13:11.192+05:30</app:edited><title>A case for Security on cloud</title><content type="html">&lt;b&gt;A case for Security on cloud – What vendors tell developers and what they actually do&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
 There has been commensurate commentary over the issue of security over clouds by people. My observation so far has made me come to this consensus that on the Internet, there have been two fractions of crowds – one that favors CSPs(Cloud Service Providers) and place trust over them and the other, quite skeptical and $% one wary of the CSPs over privacy and security issues. This issue has permeated from individual to enterprises alike. In keeping with the main issue of 'trust', CSPs have been quick to point out (for their good more than anything else) the black-boxed nature of their offerings.&lt;br /&gt;
This discussion has become more important due to ever increasing share of cloud over the IT infrastructure in almost all organizations, which is not surprising considering the ever growing importance to economize and increase flexibility in all firms across every domain.&lt;br /&gt;
As apparent from the above chart, cloud computing has moved from network and storage level (SAN, NAS) to complete machine level virtualization (vmware, zen) to platform as a services, and is moving towards completely managed applications (of which Salesforce serves as an excellent example). This implies that interdependence over CSPs is increasing at almost an exponential pace. Apart from risks in reliability, interoperability and vendor lock-in, there has been jitters in the IT industry, and rightly so because of the black box approach towards solutions as I'll mention below that CSPs sell while explaining the benefits of abstracting security.&lt;br /&gt;
However, things aren't as rosy as they appear and life is not as simple as we imagine it to be (sigh!) and security for entire solution is different than that of an application. It is not an aspect or component that we can invert to container or add in addition to the application. In this case, the approach towards security differs as it has to be applied at all the levels of the application stack. &lt;br /&gt;
&lt;b&gt;Infrastructure Security&lt;/b&gt;&lt;br /&gt;
This is important in context of public clouds as there tends to be misconceptions between the terms infrastructure security and infrastructure-as-a-service security. There is a slight difference between the two as there is a difference in the above mentioned terms. Both have a similar ramifications over the customer threat, risk and compliance management. Some of the leading CSPs like Amazon and Google have had incidents where their Data Confidentiality and Integrity have been breached. Proper access control over data is as important as having the information secure. Here again, the emphasis is not over the information security but also on the infrastructure security(There have been cases where discarded AMIs have been used maliciously) that is being offered.&lt;br /&gt;
In order to mitigate the increased risk factors, we need to rethink about whether we need a public, private or a hybrid cloud. Similarly for the data in transit, we need to implement rigorous encryption algorithms which again have a trade off between security and usage.&lt;br /&gt;
The security approach follows an onion pattern where host security forms the basis followed by virtualization software and virtual server security, which then propagates into network and finally application security.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Data Security(Information Storage and Management)&lt;/b&gt;&lt;br /&gt;
This is an important part of information storage and management because in a cloud setup, there tends to be a change about how the data moves about. Since the data gets remotely stored, security of the data takes a new dimension. Data security now requires the following aspects:&lt;br /&gt;
Data-in-transit&lt;br /&gt;
Data-at-rest&lt;br /&gt;
Processing of data, including multitenancy&lt;br /&gt;
Data lineage&lt;br /&gt;
Data provenance&lt;br /&gt;
Data remanence&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Authenticity and Accessibility on cloud&lt;/b&gt;&lt;br /&gt;
The services pertaining to the trio of Authentication, Authorization and Auditing(AAA) comprise the Identity and Access Management. Unfortunately, it remains to be seen whether the cloud providers actually are committed towards providing them in a readily usable manner or not because it is inconvenient to provide it properly, but also due to frequent change of roles and rules of the stakeholders involved. However, there has been a lot of work going about here and largely due to federation of IAM entities and emergence of web service standards such as SAML and WS-Federation. What is needed here is something that is IAM-as-a-service. This will not only address weak ISM models, but also makeup for lack of federated structures. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Is Security as a Service (Gosh, another SAAS acronym ) sufficient ?&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
The Security-as-a-service model, like the original SAAS also is subscription based. This however is nothing new as many vendors have been providing email filtering and anti-virus scanning traditionally.&lt;br /&gt;
This service today needs greater scanning and importance that ever before largely due to the rise of crime over the cloud and before cloud platform assumes even greater dimensions than ever before. These are just some of the difficulties that I've mentioned. Similarly, vulnerability management and IAM has been around for a while, but has not truly been incorporated as a service up till now.&lt;br /&gt;
Hopefully in the near future, the shift of enterprises towards cloud computing and the maturity of the services oriented model would promote this service paradigm and the ever increasing security conscious customers would fuel the growth of security over cloud.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-6140670911810570975?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uiORDK2YrakQmnTA20rMjSRxqCI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uiORDK2YrakQmnTA20rMjSRxqCI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uiORDK2YrakQmnTA20rMjSRxqCI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uiORDK2YrakQmnTA20rMjSRxqCI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/uYfA0Vq_Ejg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/6140670911810570975/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=6140670911810570975&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/6140670911810570975?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/6140670911810570975?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/uYfA0Vq_Ejg/case-for-security-on-cloud.html" title="A case for Security on cloud" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2010/09/case-for-security-on-cloud.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMBRHk4eSp7ImA9Wx5QFE8.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-8447487489905858908</id><published>2010-09-02T16:50:00.000+05:30</published><updated>2010-09-02T16:50:55.731+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-02T16:50:55.731+05:30</app:edited><title>Commenting about Comments</title><content type="html">//TODO : Finish this rant&lt;br /&gt;
#There has been a lot of discussions about the use of comments that appear in program code. This was something that I overlooked so far and only used when it appealed to me, which is itself a rare occasion for me.&lt;br /&gt;
&lt;br /&gt;
#In the book, '97 things every programmer should know', there have been a lot of insight over the same issue. In it, Carl Evans recollects a lesson that he learned from his teacher(getting poor grades without commenting). The same thing, in fact happened to me too.&lt;br /&gt;
&lt;br /&gt;
#Recently, a lecturer teaching Software Engineering (who is quite vociferous in his teachings)in our class proclaimed, “Comments are just waste of time and people(coders perhaps ?) should be kicked in their ass for writing comments. Comments indicate that the programmer was wasting time in writing them instead of writing LOCs”.&lt;br /&gt;
However, I learned a lesson similar to Carl in my class exams held in the previous week. In the exam, there was a question that required us to print a pascaline triangle using C#. I wrote its program, that I conjured up at the moment and hoping that it'll yield returns in terms of marks. But to my utter surprise, the program in question was awarded a big 0.&lt;br /&gt;
While explaining the paper, this teacher(who teaches .NET framework and C#) declared the opposite of the commenting practices listed above.&lt;br /&gt;
In my opinion, the amount of comment that you really need to insert is when the code requires some external prodding to be able to be understood.&lt;br /&gt;
&lt;br /&gt;
So, I guess that it is probably useful to create and maintain comments in a codebase if it is self-describing. According to me, for long term basis a comment should only written specifically for technical documentation. The use of javadocs or msdn styled comments not only serve the purpose for the ordinary comments, but also aid future developers into maintaining and extending the software as they can provide insight in various ways( separate documentation and IDE support).&lt;br /&gt;
&lt;br /&gt;
In The Elements of Programming Style (Computing McGraw-Hill), Kernighan and Plauger note that “a comment is of zero (or negative) value if it is wrong.”. These, alongwith my thoughts over the usability and proportionality of comments are echoed in this &lt;a href="http://www.coderanch.com/t/504152/Jobs/careers/Too-Many-Comments#2283340"&gt;javaranch discussion thread&lt;/a&gt;. Hopefully, in the near future such a situation may not arise when it became an embarrassing situation for me, just because of lack of comments in my otherwise correctly functioning piece of code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-8447487489905858908?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZzjCCtAcgGgNrjFqIlZlDYC-fbk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZzjCCtAcgGgNrjFqIlZlDYC-fbk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZzjCCtAcgGgNrjFqIlZlDYC-fbk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZzjCCtAcgGgNrjFqIlZlDYC-fbk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/p46mskDLjbE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/8447487489905858908/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=8447487489905858908&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/8447487489905858908?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/8447487489905858908?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/p46mskDLjbE/commenting-about-comments.html" title="Commenting about Comments" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2010/09/commenting-about-comments.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEGQ3k8cSp7ImA9Wx5QFE8.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-7495500261279198943</id><published>2010-08-28T10:00:00.006+05:30</published><updated>2010-09-02T16:20:22.779+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-02T16:20:22.779+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="performance optimization" /><category scheme="http://www.blogger.com/atom/ns#" term="java ee performance tuning" /><title>Why  performance matters #1</title><content type="html">&lt;style type="text/css"&gt;
 &lt;!--
  @page { size: 21cm 29.7cm; margin: 2cm }
  TD P { margin-bottom: 0cm }
  TH P { margin-bottom: 0cm }
  P { margin-bottom: 0.21cm }
 --&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0cm;"&gt;One of the many issues that i've faced as an enterprise java developer has been performance. It is important to understand the issues surrounding performance and address them before the problems escalate into unresolvable issues. It is probably the fixation of architectural design patterns and conventions with the enterprise java community that lead us to overlook various performance related issues.&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;The community has today moved a long way from MVC frameworks and monolithic j2ee 1.4 servers to increasing adoption of various open source frameworks and protals. The enterprise applications too have evolved from websites having component based solutions to portals and coarse granular SOA applications, built on top of web services. However, one thing remains constant, that is the layered execution model of any application. This can be demonstrated as follows :  &lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;table border="1" bordercolor="#000000" cellpadding="4" cellspacing="0" style="width: 290px;"&gt;&lt;col width="280"&gt;&lt;/col&gt;   &lt;tbody&gt;
&lt;tr&gt;    &lt;th valign="top" width="280"&gt;Our Java EE Application&lt;/th&gt;   &lt;/tr&gt;
&lt;tr&gt;    &lt;td valign="top" width="280"&gt;&lt;div align="center"&gt;Application Framework&lt;/div&gt;&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;    &lt;td valign="top" width="280"&gt;&lt;div align="center"&gt;Application Server&lt;/div&gt;&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;    &lt;td valign="top" width="280"&gt;&lt;div align="center"&gt;Java Runtime Environment&lt;/div&gt;&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;    &lt;td valign="top" width="280"&gt;&lt;div align="center"&gt;Operating System&lt;/div&gt;&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;    &lt;td valign="top" width="280"&gt;&lt;div align="center"&gt;Hardware&lt;/div&gt;&lt;/td&gt;   &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/center&gt; &lt;br /&gt;
&lt;div style="margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;It is important to note that the performance of the solution does'nt depends on the application alone, rather, it depends on correct performance tuning and optimization of all the layers associated with the application. This form of issue is known as Vertical complexity.&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;In actual applications, however, there are a lot of discrete components that are present, each with its own 'stack' of complexity. Together, this forms into another complexity known as horizontal complexity. These issues are apparant only when the application faces heavy load in its lifecycle or when it begins to operate beyond a single JVM. This can result in the following problems :-&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;ul&gt;&lt;li&gt;Slow execution of application-  beyond the aggreed upon threshold in SLAs&lt;/li&gt;
&lt;li&gt;Application performance  degradation over a period of time- memory leaks, resource allocation  bugs&lt;/li&gt;
&lt;li&gt;Erratic CPU utilization and  application freezing&lt;/li&gt;
&lt;li&gt;Performance anomalies which occur  in production- hard to reproduce, which escape load testing&lt;/li&gt;
&lt;/ul&gt;So, it is not hard to imagine why organizations and teams look forward to solve the problems. Solution to these problems has also a fancy name, “Application Performance Management” which is a set of recepies and approaches meant to address the issues listed above. In development, this is applied to memory analysis, code profiling and test coverage. Memory analysis can be done using any standard debugger and most IDEs usually have a nice interface to do so. Profiling, however involves some serious investment into the profiler that you are planning to use. Fortunately, some IDEs like netbeans have in built profilers, but external profilers like yourkit are more relied upon. A code coverage tool does the same thing for performance testing as it normally does for unit testing- identifying whether a given code is covered under performace testing or not.&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;Returning to our 'stack' for a moment, we can easily visualize the tasks needed for performance optimization at different levels.&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;While the performance at application level can be done via APM, the underlying application framework also plays an important role. For instance, if the framework is in beta and the application is using some new feature of it, chances are that it might have a bug that can wreak havoc upon the application and create confusing problems. The application server also needs to be properly tuned and customized for clustering and performance scaling if needed. In other cases too, there is a need for system administration of these servers as they not only act as the host for the application, but also provide monitoring activities (which can further be used as performance measurement) and manage external resources needed by the application. JVM is an often ovelooked slice of the stack, which if used correctly, can cause precise Garbage Collection trips, memory management for the application as well as its dependencies. It never hurts to have knowledge of the JVM memory areas like stack, heap and perm spaces, which are the places where the application and its server reside and operate. The operating system and hardware are the obvious choices for performance optimization because these provide the underlying resource allocation, scalability, computation and other aspects that are needed for the software. From a developer's point of view, the operating system and hardware is not generally modifiable, but the overlying layers are. So it is better to have an understanding of these concepts. In a future post, i'll start with analyzing specific performance issues relating to a tier and post recepies and solutions that I came up with so far.&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&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/1952948324831261206-7495500261279198943?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4P1UCMK4mjo0kBHhRLOt4tBZSJU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4P1UCMK4mjo0kBHhRLOt4tBZSJU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4P1UCMK4mjo0kBHhRLOt4tBZSJU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4P1UCMK4mjo0kBHhRLOt4tBZSJU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/MTrjwHXAgnQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/7495500261279198943/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=7495500261279198943&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/7495500261279198943?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/7495500261279198943?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/MTrjwHXAgnQ/why-performance-matters-1.html" title="Why  performance matters #1" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2010/08/why-performance-matters-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQDRXgyeSp7ImA9Wx5TFkQ.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-9028236158050635772</id><published>2010-08-02T01:22:00.000+05:30</published><updated>2010-08-02T01:22:54.691+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-02T01:22:54.691+05:30</app:edited><title>IBM Offers free System Z Mastery exam to students</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 13px; line-height: 19px;"&gt;The IBM System Z is a part of IBM's zEnterprise system, which combines mainframe, power and system x in a single system and as claimed by IBM, can save more than 50% in costs.&lt;br /&gt;
This includes z/OS, which is a widely used mainframe operating system.Today the mainframe plays a central role in the daily operations of most of the world's largest corporations. Even the advent of private and hybrid cloud has yet to impact the mainframe market significantly and as mainframes continue to evolve, the demand for professionals working on them rise.&lt;br /&gt;
&lt;br /&gt;
Enough of the briefest of the introductions about this technology.&lt;br /&gt;
I wanted to share this information that IBM are conducting the System Z mastery exam for free (they are giving vouchers) to students by the end of this year (before 31st December 2010)&lt;br /&gt;
You can visit&amp;nbsp;&lt;a href="http://www.ibm.com/developerworks/university/systemz/masterytest/students.html" style="color: #004183; text-decoration: underline;"&gt;http://www.ibm.com/developerworks/university/systemz/masterytest/st...&lt;/a&gt;&amp;nbsp;for more details.&lt;br /&gt;
The course materials are also&amp;nbsp;&lt;a href="http://www-03.ibm.com/systems/z/advantages/charter/skills_coursematerials.html#zbasics" style="color: #004183; text-decoration: underline;"&gt;included at the website&lt;/a&gt;.&lt;br /&gt;
These exams are important as they can serve as your career decider; mainframe administration is a field in itself.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 13px; line-height: 19px;"&gt;Unlike configuring server systems targeted for smb s, this involves programming, monitoring, fault tolerance and scalability challenges.&lt;br /&gt;
Hope you have fun!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-9028236158050635772?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uLO3UGC15FlZq6EtB1pe7qVz4wc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uLO3UGC15FlZq6EtB1pe7qVz4wc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uLO3UGC15FlZq6EtB1pe7qVz4wc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uLO3UGC15FlZq6EtB1pe7qVz4wc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/_yIgLj9fdgU" height="1" width="1"/&gt;</content><link rel="related" href="http://www.ibm.com/developerworks/university/systemz/masterytest/students.html" title="IBM Offers free System Z Mastery exam to students" /><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/9028236158050635772/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=9028236158050635772&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/9028236158050635772?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/9028236158050635772?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/_yIgLj9fdgU/ibm-offers-free-system-z-mastery-exam.html" title="IBM Offers free System Z Mastery exam to students" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2010/08/ibm-offers-free-system-z-mastery-exam.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUASHk8eCp7ImA9WxFaEk0.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-7971325353455597916</id><published>2010-07-15T19:27:00.000+05:30</published><updated>2010-07-15T19:27:29.770+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-15T19:27:29.770+05:30</app:edited><title>An Open Source Summer Event</title><content type="html">We, the members of Open Source University Meetup recently conducted an on campus event this summer on 5th of July. As always, it was a successful event with a large turnout and participation of students from different years and branches.&lt;br /&gt;
This was an altogether a different event as compared to the few previous ones. In this event, we held discussions on how to conduct our group in future and also decided on what next things that we as an open souce lobby in our college ought to be doing.&lt;br /&gt;
As the markets for open source softwares continue to mature, so is the increasing number of tools, frameworks and libraries which in short, propell this phenomenon even further.&lt;br /&gt;
&lt;br /&gt;
We are going to have new students coming into our college very soon in the upcoming academic year and this presents an excellent opportunity for us to reiterate and rekindle our spirit of openness and sharing. Special thanks for this time go to Gaurav, Sushant, Raghuvendra, Lalit and others for assembling everyone and making this event a sucess.&lt;br /&gt;
&lt;br /&gt;
Mainly, we held brainstorming sessions on the following areas :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Cool Technologies that we can discuss in depth in future.&lt;/li&gt;
&lt;li&gt;Promoting various Oracle based software.&lt;/li&gt;
&lt;li&gt;Spreading the need of sharing and contributing in the IT industry.&lt;/li&gt;
&lt;li&gt;Trying out open source technologies and helping spread its awareness and adoption.&lt;/li&gt;
&lt;li&gt;Conducting events of varied themes and involving various activities- everyone in community can chip in.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
As always, by conducting these events, we continue to equipt ourselves better in the event management as well as improving upon the contents of our presentation and doing more than ever for the community.&lt;br /&gt;
&lt;br /&gt;
See the event pics at my OSUM profile albums&lt;br /&gt;
&lt;a href="http://osum.sun.com/photo/albums/on-campus-event-5th-july"&gt;http://osum.sun.com/photo/albums/on-campus-event-5th-july&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-7971325353455597916?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3Bb4wx8Z6gSRUiGRbIxeHDSd224/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3Bb4wx8Z6gSRUiGRbIxeHDSd224/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3Bb4wx8Z6gSRUiGRbIxeHDSd224/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3Bb4wx8Z6gSRUiGRbIxeHDSd224/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/Smf3cVVxXUM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/7971325353455597916/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=7971325353455597916&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/7971325353455597916?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/7971325353455597916?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/Smf3cVVxXUM/open-source-summer-event.html" title="An Open Source Summer Event" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2010/07/open-source-summer-event.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQFQ3g_eyp7ImA9WxFUFkk.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-1569997298179409349</id><published>2010-06-27T18:08:00.000+05:30</published><updated>2010-06-27T18:08:32.643+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-27T18:08:32.643+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rails2 environment" /><category scheme="http://www.blogger.com/atom/ns#" term="rails 2 on ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="enterprise ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="ruby on rails" /><title>Enterprise Ruby : First Impressions</title><content type="html">I cannot stop marvel at the 'gem' of a useful software that I installed today (&lt;a href="http://www.rubyenterpriseedition.com/"&gt;www.rubyenterpriseedition.com&lt;/a&gt;). As its name was enterprise ruby, earlier my impression was that it was some proprietary software (I had heard websites like twitter using it) but to a pleasant surprise, turned out to be an open source software distributed by Phusion (the same guys behind Passenger deployment tool). It is provided for all *NIX systems and ready to run .deb installer for Ubuntu.&lt;br /&gt;
Well, to the point itself, Enterprise Ruby features :&lt;br /&gt;
# An enhanced garbage collector. This allows one to reduce memory usage of Ruby on Rails applications (or any Ruby application that takes advantage of the feature) by 33% on average.&lt;br /&gt;
# An improved memory allocator. This increases Ruby's performance drastically.&lt;br /&gt;
# Various developer tools for debugging memory usage and garbage collector behaviour&lt;br /&gt;
&lt;br /&gt;
A lot of this optimization is POSIX dependent, which is why there is no such version for windows yet. The FAQ page (&lt;a href="http://www.rubyenterpriseedition.com/faq.html"&gt;http://www.rubyenterpriseedition.com/faq.html&lt;/a&gt;) demonstrated this and a lot more about the improved platform, which is why a lot of production servers are adopting it.&lt;br /&gt;
&lt;br /&gt;
However, the nicest thing in the&amp;nbsp; whole installation was that you got a lot of commonly used gems installed, which is really appreciative because we otherwise have to manually install or repeatedly try to install via the gem repository (a thing that sadly fails most of the time for me). &lt;br /&gt;
&lt;br /&gt;
Hopefully you find this information helpful. If you feel anything contradictory to that posted above, please do comment as I might be wrong in some areas that I haven't checked out yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-1569997298179409349?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IgVu2UxLSVZPu2BRRw9sHi_l63s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IgVu2UxLSVZPu2BRRw9sHi_l63s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IgVu2UxLSVZPu2BRRw9sHi_l63s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IgVu2UxLSVZPu2BRRw9sHi_l63s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/upg7egfWTNk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/1569997298179409349/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=1569997298179409349&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/1569997298179409349?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/1569997298179409349?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/upg7egfWTNk/enterprise-ruby-first-impressions.html" title="Enterprise Ruby : First Impressions" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2010/06/enterprise-ruby-first-impressions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cDRno6eSp7ImA9WxFVF0g.&quot;"><id>tag:blogger.com,1999:blog-1952948324831261206.post-1957382134577604569</id><published>2010-06-17T10:34:00.000+05:30</published><updated>2010-06-17T10:34:37.411+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-17T10:34:37.411+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="REST" /><category scheme="http://www.blogger.com/atom/ns#" term="web services" /><category scheme="http://www.blogger.com/atom/ns#" term="RESTful web services" /><category scheme="http://www.blogger.com/atom/ns#" term="web" /><title>Towards RESTful Web Services</title><content type="html">When we talk about distributed applications, internet is the enabling technology that comes to the mind. Sure, one can think of many other ways and protocols of performing a software feat on more than one computer at the same time, but the fact that internet or the World WideWeb is the biggest  network out there remains true and has the appeal of its ubiquity in the implementation of any such distributed application.&lt;br /&gt;
You can even think of a website as a distributed application, but here, the client (or you) is a passive person/computer that can only use what is fed to him. Even dynamic websites ultimately generate static content (or for that matter, even Web 2.0, which is built on user experience rather than anything else), which even if it appears as a distributed application, there is no such distribution of computation going on. However, in a truly distributed application, the portions of application reside in different computers and communicate with each other via internet. This interchange of the necessary data and process requests is what is needed in these kinds of applications.&lt;br /&gt;
Before I further befuddle you from the idiosyncrasy of complex distributed application technologies that are widely used like WS-* stack, we need to understand the simple phenomenon that on the web, the content generated on the web pages is in form of HTML, that is read by the web browsers on your computers and displayed to you as a web page. However, if we change this format to a different one (still textual, not changing into binary ) like XML or JSON, the end users of our application become different.&lt;br /&gt;
So ultimately, there is not much difference between a web site and a web service as the former can be used interchangeably with the latter and what make a web site easier to be used by a human being can be applied to a web service, which can be applied over internet on the same manner, to a program. The common web service protocol has been SOAP, which is essentially an application layer on top of whatever internet it is operating on. This created a lighter way of creating distributed and interoperable applications, but at an increasing cost of complexity. Instead of reinventing the wheel, wouldn't it be simply great if we simply set forth the best of the internet in a mix and obtain something refreshingly easy, elegant and say useful for our purposes.&lt;br /&gt;
This is what REST or REpresentational State Transfer is all about. It is not just an alternative method of  creating web services, but is arguably the easier way of creating them as it addresses the addressing and discovery concerns based on the established design patterns of internet. The simplicity of this approach is not its weakness as you probably might be thinking, but its strength. Other web service provider technologies can claim maturity and tools to hide complexity, but the changing face of REST is negating this limitation of itself in this regard. In my future posts, I'll explain how the changing face of REST is going to make it a force to reckon with in future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1952948324831261206-1957382134577604569?l=sumitbisht.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cHlfKhoT1H8g30U8tyot6-Rw4lY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cHlfKhoT1H8g30U8tyot6-Rw4lY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cHlfKhoT1H8g30U8tyot6-Rw4lY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cHlfKhoT1H8g30U8tyot6-Rw4lY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SumitBisht/~4/0NYjuYL2tdI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sumitbisht.blogspot.com/feeds/1957382134577604569/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1952948324831261206&amp;postID=1957382134577604569&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/1957382134577604569?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1952948324831261206/posts/default/1957382134577604569?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SumitBisht/~3/0NYjuYL2tdI/towards-restful-web-services.html" title="Towards RESTful Web Services" /><author><name>Sumit</name><uri>http://www.blogger.com/profile/06506294438832281947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="17" height="32" src="http://2.bp.blogspot.com/_0d4ixjbWo_8/S8lT3Noa_JI/AAAAAAAAAEg/p3dZHBqkkWk/S220/IMG0420A.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sumitbisht.blogspot.com/2010/06/towards-restful-web-services.html</feedburner:origLink></entry></feed>

