<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>The Muse</title><link>http://damroo.blogspot.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/damroo" /><description>ramble on...</description><language>en</language><managingEditor>noreply@blogger.com (Varun Mehta)</managingEditor><lastBuildDate>Sun, 22 Jan 2012 10:30:49 PST</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">23</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><feedburner:info uri="damroo" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><itunes:explicit>no</itunes:explicit><itunes:subtitle>ramble on...</itunes:subtitle><item><title>Move over to {proton:fever}</title><link>http://feedproxy.google.com/~r/damroo/~3/0o4XWAxVr8M/move-over-to-protonfever.html</link><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Wed, 21 Oct 2009 22:54:19 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-7476619022053255714</guid><description>&lt;span style="font-size: x-large;"&gt;Migrated the blog to &lt;a href="http://protonfever.com/"&gt;http://protonfever.com&lt;/a&gt;, henceforth please check the new blog for updates&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-7476619022053255714?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-22T01:54:19.123-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2009/10/move-over-to-protonfever.html</feedburner:origLink></item><item><title>iPhone SSH screenshots</title><link>http://feedproxy.google.com/~r/damroo/~3/osc7uKg0OVU/iphone-ssh-screenshots.html</link><category>linux</category><category>ssh</category><category>jailbreak</category><category>iphone.</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Mon, 27 Apr 2009 21:19:13 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-8515419494292647054</guid><description>It's been some time the iPhone jailbreak is available, and there are many posts available online. But I wanted to boast about my jailbroken version. Here are a few screenshots.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_a14Xcoi-jlw/SfZ_T9HS-UI/AAAAAAAAA1o/p3nFWkreKKg/s1600-h/iphone-ssh.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 109px;" src="http://2.bp.blogspot.com/_a14Xcoi-jlw/SfZ_T9HS-UI/AAAAAAAAA1o/p3nFWkreKKg/s400/iphone-ssh.png" alt="" id="BLOGGER_PHOTO_ID_5329587189838969154" border="0" /&gt;&lt;/a&gt;First the unix version; uname -a&lt;br /&gt;&lt;br /&gt;After that I wanted to use some standard linux commands, but they were not available. When using Cydia,  I saw some apt-get being executed; so tried it and installed 'top'&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_a14Xcoi-jlw/SfZ_TwLYyqI/AAAAAAAAA1w/LIknIftg3l0/s1600-h/iphone-top.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 233px;" src="http://4.bp.blogspot.com/_a14Xcoi-jlw/SfZ_TwLYyqI/AAAAAAAAA1w/LIknIftg3l0/s400/iphone-top.png" alt="" id="BLOGGER_PHOTO_ID_5329587186366466722" border="0" /&gt;&lt;/a&gt;I started MobileSafari to check if was realtime, or it popped up in ms on this screen.&lt;br /&gt;&lt;br /&gt;I was bored over the weekend and decided to jailbreak it, and was wondering; "What kept me away from it!!"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-8515419494292647054?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-28T00:19:13.793-04:00</app:edited><media:thumbnail url="http://2.bp.blogspot.com/_a14Xcoi-jlw/SfZ_T9HS-UI/AAAAAAAAA1o/p3nFWkreKKg/s72-c/iphone-ssh.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2009/04/iphone-ssh-screenshots.html</feedburner:origLink></item><item><title>The e-Book progress</title><link>http://feedproxy.google.com/~r/damroo/~3/F18QB7BxQRk/e-book.html</link><category>VMWare</category><category>virtualization</category><category>ebook</category><category>Practical Implementation</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Wed, 18 Mar 2009 22:39:53 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-971453871114887837</guid><description>I was initially using google docs to write the e-book, but then was too lost in formatting the book, or proof reading it again and again. Also I could not update it using my phone, which is pretty much my hand held computer now. I was reading someone else's book online, when using the blog as an ebook sounded reasonable, so I've gone ahead and ported some chapters over to a new blog.&lt;br /&gt;&lt;a href="http://startupastartup.blogspot.com/"&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://startupastartup.blogspot.com/"&gt;&lt;blockquote&gt;http://startupastartup.blogspot.com/&lt;/blockquote&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://startupastartup.blogspot.com/"&gt;&lt;/a&gt;As of now the access is restricted, but if you want access, just comment to this post and I shall be glad to add you as a proof reader to my book.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-971453871114887837?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-19T01:39:53.580-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2009/03/e-book.html</feedburner:origLink></item><item><title>DWR + Lazy Loading</title><link>http://feedproxy.google.com/~r/damroo/~3/h3nMGMqknQw/dwr-lazy-loading.html</link><category>performance</category><category>java</category><category>hibernate</category><category>dwr</category><category>mysql</category><category>database</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Wed, 18 Mar 2009 21:42:09 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-2241893014588902152</guid><description>Time immemorial, we are all aware about the famous lazy load exceptions in Hibernate. Using a detached object does not exactly hide us from the issue. We are using DWR in our application and found that when marshalling (or unmarshalling if you insist) a detached object to JSON, DWR was erratically trying to call a null (lazyly loaded) object, causing LazyLoadExceptions.&lt;br /&gt;&lt;br /&gt;We did not want to use OpenSessionInViewFilter as it is evil (some day I'll post all the consolidated rantings as one). You can google and find a lot of info around it.&lt;br /&gt;&lt;br /&gt;As a quick fix we did what one would first think of, "It's a demo, just eager load it!". Well the demo was over and now was the time to investigate a better solution, and we did find it.&lt;br /&gt;&lt;br /&gt;It was no rocket science, the solution was available in front of us all along, we just did not look hard enough. When using DWR, there are BeanConverters available which are responsible for this marshalling process. There was one for Hiberante, called "hibernate3". &lt;a href="http://directwebremoting.org/dwr/server/hibernate"&gt;http://directwebremoting.org/dwr/server/hibernate&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;The HibernateBeanConverter tries to avoid reading from un-initialized properties. (If you just want something that blindly reads everything then just use a plain BeanConverter).&lt;/blockquote&gt;Bingo, so when exporting a detached hibernate object to DWR, use type="hibernate3" and that should resolve the lazy load issues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-2241893014588902152?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-19T00:42:09.859-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2009/03/dwr-lazy-loading.html</feedburner:origLink></item><item><title>Cheap Memory</title><link>http://feedproxy.google.com/~r/damroo/~3/tqlkA-1Mkzc/cheap-memory.html</link><category>rant</category><category>memory upgrade</category><category>linux</category><category>Varun Mehta</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Tue, 10 Feb 2009 22:58:16 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-5542498968445472948</guid><description>Finally upgraded myself to 4GB of memory on my personal laptop. The price was so cheap just could not resist it :)&lt;br /&gt;&lt;br /&gt;Other reasons I was waiting for was better 64-bit Ubuntu support. I still need to reformat my machine. Some of the issues resolved by 64-bit which I was waiting on;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Flash browser support (had to use a 32-bit script)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Video codecs (works like a charm, even apple trailers work)&lt;/li&gt;&lt;li&gt;Open Office (the icons &amp;amp; menu was all messed up)&lt;/li&gt;&lt;li&gt;Support for my wi-fi atheros chipset (8.10 cured the problem, no more ndiswrapper)&lt;/li&gt;&lt;/ul&gt;Hopefully this weekend, I should be able to make a transition. Only if I had 64-bit Windows, what the heck, will wait for Windows 7.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-5542498968445472948?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-11T01:58:16.873-05:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2009/02/cheap-memory.html</feedburner:origLink></item><item><title>TODO: Cleanup blog</title><link>http://feedproxy.google.com/~r/damroo/~3/7KOveslhnhI/todo-cleanup-blog.html</link><category>rant</category><category>redesign</category><category>Varun Mehta</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Sun, 08 Feb 2009 20:05:27 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-5917983355176562150</guid><description>I'm not able to get any good templates, I think I need to search more on the web, or come up with a good design myself...&lt;br /&gt;&lt;br /&gt;Can I go back to Photoshop &amp;amp; CSS again?? Been quite some time now...&lt;br /&gt;&lt;br /&gt;Hmm let me think..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-5917983355176562150?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-08T23:05:27.916-05:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2009/02/todo-cleanup-blog.html</feedburner:origLink></item><item><title>By Contract or By Convention</title><link>http://feedproxy.google.com/~r/damroo/~3/MxA09t5ymDY/by-contract-or-by-convention.html</link><category>performance</category><category>java</category><category>hibernate</category><category>spring</category><category>aop</category><category>Varun Mehta</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Mon, 04 May 2009 06:00:30 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-4778991249168185827</guid><description>&lt;p&gt;&lt;span style="font-size:100%;"&gt;Should we be using interfaces for everything and making everyone explicitly implement them or should we trust that everyone follows the same convention.&lt;/span&gt;&lt;/p&gt;&lt;h5&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;By Contract&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h5&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;For use cases, where a certain contracts needs to be followed, we should use interfaces, this allows easier testing and loose coupling of implementation, allowing us more flexibility to change the implementation at run time as asked for.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;eg: UserService interface has a method fetchUser(); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;We can have two implementations for this service method, one using a DAO and other the WebService. Thus the implementation is loose and "the contract" is set to return a User.&lt;/span&gt;&lt;/p&gt;&lt;h5&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;By Convention&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h5&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;In certain cases, we cannot implement a contract, esp where the concerns span across multiple layers of the app. This is when we need to define convention over contract. AOP is the perfect use case where this needs to be strictly followed.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;Let's consider the service methods which fetch information for displaying info to the front end. They need to have a specific security restriction associated with it, or a use case where we need to assign "READ_ONLY" rights to certain users for an object. In order to keep the code as decoupled as possible we use AOP, which apply concerns on these  methods, without having actual references in the code. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;For these concerns to be properly applied, we need to follow conventions. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;eg: All DAOs should persist an object using the create() method only, that ways we can add a concern to block access to all create() methods for a group of user. If someone plans to "be different" and follow their own convention, like calling the method persist(), this can open up a huge security hole in the application. The AOP concern will skip "persist()" as it does not follow convention. Such issues will not be caught unless there is a proper code review performed on the code base, or we have really really strong test case. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;If your module needs to follow a convention, which cannot be controlled using a contract, please document it, so as the team can follow is correctly.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-4778991249168185827?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-04T09:00:30.698-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2009/02/by-contract-or-by-convention.html</feedburner:origLink></item><item><title>2 DTO or not 2 DTO</title><link>http://feedproxy.google.com/~r/damroo/~3/lJtgnYfnGhQ/2-dto-or-not-2-dto.html</link><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Sun, 01 Feb 2009 20:56:53 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-24338969780435190</guid><description>Since the new project began I've been think about this over and over again reading as many posts and taking ideas from different posts and blogs. The more I read, the less I knew. Below is a collection of few links I've come across which have some conclusive and non-conclusive decisions/arguments, some of these post lean towards POJO's and some towards DTO. Frankly I was not been able to convince myself on what to use. (Leaning more towards POJO's as detached objects).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forum.springframework.org/archive/index.php/t-27716.html"&gt;http://forum.springframework.org/archive/index.php/t-27716.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://forum.springframework.org/showthread.php?t=11338"&gt;http://forum.springframework.org/showthread.php?t=11338 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://forum.springframework.org/showthread.php?t=9810"&gt;http://forum.springframework.org/showthread.php?t=9810 &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.hibernate.org/124.html"&gt;http://www.hibernate.org/124.html &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://api.blogs.com/the_catch_blog/2005/05/protecting_the_.html"&gt;http://api.blogs.com/the_catch_blog/2005/05/protecting_the_.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://hookom.blogspot.com/2004/12/corporate-developer.html"&gt;http://hookom.blogspot.com/2004/12/corporate-developer.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is a small tutorial talking about how to develop using POJO's. Makes you think the non-EJB2 way. (Reading this is strongly recommended)&lt;br /&gt;Part 1 -&lt;a href="http://www.developer.com/java/ejb/article.php/3590731"&gt; http://www.developer.com/java/ejb/article.php/3590731&lt;/a&gt;&lt;br /&gt;Part 2 - &lt;a href="http://www.developer.com/java/ejb/article.php/3592341"&gt;http://www.developer.com/java/ejb/article.php/3592341&lt;/a&gt;&lt;br /&gt;Part 3 - &lt;a href="http://www.developer.com/java/ejb/article.php/3594121"&gt;http://www.developer.com/java/ejb/article.php/3594121&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Since EJB3 is more revolutionary and uses POJO's unlike remoting in EJB2, here is a link from the sun java forums&lt;br /&gt;&lt;a href="http://forums.sun.com/thread.jspa?threadID=5302559"&gt;http://forums.sun.com/thread.jspa?threadID=5302559&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I strongly recommend everyone to read these articles before choosing. My brains had been deep fried already reading these before trying to reach any conclusion. I wanted some other heads to think about these issues and post in their opinions.&lt;br /&gt;&lt;br /&gt;Some points where I played the devil's advocate and jotted my concerns with arguments before we said 'I do' to DTO or POJO.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ProDTO&lt;/span&gt;: DTO will shield the UI if there are any model changes&lt;br /&gt;Argument: Either ways we'll have to modify the DTO, the marshaller/unmarshaller to propagate these changes from the POJO to DTO. DTO does not eliminate the problem completely, but obfuscates or hides it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ProDTO&lt;/span&gt;: Our service layer shall talk to various 'services' webUI or web Service or RMI or Star Trek, so we need DTOs to provide loose coupling and don't want the service to expose the domain object directly.&lt;br /&gt;Argument: We will use XML (WSDL or SOAP or RestFUL or &lt;add-a-buzz-word&gt;) for data transfer, which will involve marshalling/unmarshalling of the XML to DTO and then POJO &amp;amp; vice-versa, any changes will again have to propagated. through all the layers. We are just exposing the POJO to the XML transformer, not the DAO calls. The POJO by itself cannot persist if in a detached state. Unless we have a usecase of just exposing half the object to the webservice (do we have a usecase?)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ProPOJO&lt;/span&gt;: Less effort, lean and clean design, any changes will propagate at multiple places and will provide less points of transformation errors.&lt;br /&gt;Argument: The inner implementation of the POJO with the Data model needs to be changed, but the view/web service does not have to change the implementation. We have to make the changes in these layers even if we don't have to, there by adding more work and complexity.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ProPOJO&lt;/span&gt;: No over head of transforming POJO to DTO and vice-versa. Less memory consumption.&lt;br /&gt;Argument: It's a good practice to separate your business objects and data objects, provides better decoupling.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Anti-POJO&lt;/span&gt;: Handling Lazy Initialization of hierarchical objects, no openSessionInView Filter for ExtJS.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Anti-DTO&lt;/span&gt;: Locking of objects for optimistic locking. DTO's are not aware of the revision.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusion:&lt;/span&gt; Use POJOs as detached objects where basic CRUD calls are required and for fetching objects with minimum hierarchy, but if you need to fetch loads of info from different tables with a very small subset of columns from each, then use HQL + DTO&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;Select new com.vtech.model.dto.CompanyEmployee(bla bla bla);&lt;/code&gt;&lt;/blockquote&gt; &lt;/add-a-buzz-word&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-24338969780435190?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-01T23:56:53.488-05:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://damroo.blogspot.com/2009/02/2-dto-or-not-2-dto.html</feedburner:origLink></item><item><title>You've got hacked :)</title><link>http://feedproxy.google.com/~r/damroo/~3/Wu_GISYVJVw/youve-got-hacked.html</link><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Tue, 14 Oct 2008 08:20:40 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-338019301389784918</guid><description>Yup since I opened up the ssh ports, once a day someone tries to get into the system. Here a small piece of log,&lt;br /&gt;&lt;code&gt;Oct 13 17:19:07 *******-server sshd[7250]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=58.117.255.223  user=nobody&lt;br /&gt;Oct 13 17:19:09 *******-server sshd[7250]: Failed password for nobody from 58.117.255.223 port 35131 ssh2&lt;br /&gt;Oct 13 17:19:17 *******-server sshd[7255]: Invalid user patrick from 58.117.255.223&lt;br /&gt;Oct 13 17:19:17 *******-server sshd[7255]: pam_unix(sshd:auth): check pass; user unknown&lt;br /&gt;Oct 13 17:19:17 *******-server sshd[7255]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=58.117.255.223&lt;br /&gt;Oct 13 17:19:19 *******-server sshd[7255]: Failed password for invalid user patrick from 58.117.255.223 port 35703 ssh2&lt;br /&gt;Oct 13 17:23:50 *******-server sshd[7325]: Invalid user jane from 58.117.255.223&lt;br /&gt;Oct 13 17:23:50 *******-server sshd[7325]: pam_unix(sshd:auth): check pass; user unknown&lt;br /&gt;Oct 13 17:23:50 *******-server sshd[7325]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=58.117.255.223&lt;br /&gt;Oct 13 17:23:52 *******-server sshd[7325]: Failed password for invalid user jane from 58.117.255.223 port 52794 ssh2&lt;br /&gt;Oct 13 17:23:59 *******-server sshd[7327]: Invalid user pamela from 58.117.255.223&lt;br /&gt;Oct 13 17:23:59 *******-server sshd[7327]: pam_unix(sshd:auth): check pass; user unknown&lt;br /&gt;Oct 13 17:23:59 *******-server sshd[7327]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=58.117.255.223&lt;br /&gt;&lt;/code&gt;The &lt;a href="http://network-tools.com/default.asp?prog=network&amp;amp;host=58.117.255.223"&gt;address&lt;/a&gt; belongs to some kid in China (Beijing Education Information Network). The box has been safe so far.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-338019301389784918?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-14T11:20:40.535-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2008/10/youve-got-hacked.html</feedburner:origLink></item><item><title>Nobel Gases</title><link>http://feedproxy.google.com/~r/damroo/~3/7lOdhNHR8F4/nobel-gases.html</link><category>computer names</category><category>VMWare</category><category>virtualization</category><category>hardware configuration</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Tue, 14 Oct 2008 07:55:58 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-3350217703710475931</guid><description>Finally after successfully setting up OpenVPN with Linux server and XP/Ubuntu clients (Vista is evil), we decided to create the final network, but were stalled with the general problem of names (wonder what will I do when I have to name my kids!!). Looked around for tips and there is an RFC on it &lt;a href="http://www.faqs.org/rfcs/rfc1178.html"&gt;RFC 1178&lt;/a&gt; which gives a few tips for names.&lt;br /&gt;&lt;br /&gt;Without much ado the names helium, neon, argon, krypton clicked. &lt;a href="http://en.wikipedia.org/wiki/Noble_gas"&gt;Nobel Gases&lt;/a&gt; I say...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-3350217703710475931?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-14T10:55:58.633-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2008/10/nobel-gases.html</feedburner:origLink></item><item><title>Book progress</title><link>http://feedproxy.google.com/~r/damroo/~3/r9AJqpEJIxk/book-progress.html</link><category>VMWare</category><category>virtualization</category><category>Xen</category><category>ebook</category><category>Practical Implementation</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Wed, 17 Sep 2008 14:47:15 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-5999241376372940936</guid><description>I've finished the first chapter and have been able to rope in a few friends help me proof read and correct me along the way. I had never thought writing a book would be so much fun, but there is a lot of thought process also put in to make it as simple yet professional for anyone and everyone to understand.&lt;br /&gt;&lt;br /&gt;There are many references from wikipedia for definitions of certain terms and terminologies. For those who don't trust wikipedia can search up their favourite reliable resources for further explanation and review.&lt;br /&gt;&lt;br /&gt;Another interesting problem I'm facing as I go ahead is, how much detailed should the explanation be. What is the level of assumption I should consider while explaining a topic. Hopefully my friends will be able to point that out, if you are interested to participate in the proof reading, just drop me an email and I'll be glad to send you an invite.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-5999241376372940936?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-17T17:47:15.435-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2008/09/book-progress.html</feedburner:origLink></item><item><title>My first E-Book: Kick Start a software start-up</title><link>http://feedproxy.google.com/~r/damroo/~3/jB6rkpkHezM/my-first-e-book-kick-start-software.html</link><category>java</category><category>Version control</category><category>startup</category><category>VMWare</category><category>project planning</category><category>linux</category><category>virtualization</category><category>Continious Integration</category><category>ebook</category><category>Practical Implementation</category><category>cloud computing</category><category>hardware configuration</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Thu, 04 Sep 2008 12:05:29 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-8440524793306601094</guid><description>Ok after all the configuration and working of the VM server with 4 virtual machines, I found it too much info to blog (lazy me..) with all the steps and configuration (I have some 3 posts still as draft yet to be published). There were some random thoughts on how this process and infrastructure can be used by others (start-ups or low budgets) for thier benefit.&lt;br /&gt;&lt;br /&gt;Since most of the blog postings are enlightenments that occured to time once in a while, I've decided to consolidate all this information and jott them down like a step-by-step guide on how can we use the VM infrastructure for small shops or small projects in large shops. The table of contents for this book will look something like this.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Table of Contents&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Preface &lt;/li&gt;&lt;li&gt;Who should read this book &lt;/li&gt;&lt;li&gt;What are the technologies we'll cover&lt;/li&gt;&lt;li&gt;Introduction&lt;/li&gt;&lt;li&gt;Analyzing &amp;amp; Building the server&lt;/li&gt;&lt;li&gt;Software selection.&lt;/li&gt;&lt;li&gt;RAID &amp;amp; LVM&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Setup &amp;amp; Configure your first VM&lt;/li&gt;&lt;li&gt;VPN Applicance&lt;/li&gt;&lt;li&gt;Creating more Appliances I: Webserver, Database&lt;/li&gt;&lt;li&gt;Creating more Applicanes II: Version Control, Continious Integration Servers&lt;/li&gt;&lt;li&gt;Timed VNC sessions (iTalc or vncthumbnailviewer)&lt;/li&gt;&lt;li&gt;Appendix A: Configure your Linksys router with DDNS&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;If you have anything else you would like to consider let me know if practically possible I'll try to include it into the book. I hope to get the book out in 2-3 months (provided I can give it one hour a day). People volunteering for proof-reading are most welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-8440524793306601094?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-04T15:05:29.638-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://damroo.blogspot.com/2008/09/my-first-e-book-kick-start-software.html</feedburner:origLink></item><item><title>CollectionUtils (apache commons) Bad Boy....</title><link>http://feedproxy.google.com/~r/damroo/~3/2kBaawRwO20/collectionutils-apache-commons-bad-boy.html</link><category>performance</category><category>java</category><category>Varun Mehta</category><category>collectionutils</category><category>sets</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Sun, 29 Mar 2009 08:00:22 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-7330246464374322957</guid><description>We had a problem at work today, where we need to find the difference between two collections and remove the uncommon ones from the first one and add the uncommon ones from the first to the second.&lt;br /&gt;&lt;br /&gt;This is related to hibernate add-remove-update for collections. &lt;a href="http://www.hibernate.org/hib_docs/v3/reference/en/html_single/#performance-collections-oneshotdelete"&gt;Read here about it&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Set A = {R, G, B}&lt;br /&gt;Set Z = {R, G, Y}&lt;br /&gt;&lt;br /&gt;Final Set to the DB is = {R, G, Y}, well looks simple so we just send the second set &lt;span style="font-weight: bold;"&gt;Z&lt;/span&gt;, yeah but the catch is it needs to maintain the instance of &lt;span style="font-weight: bold;"&gt;A&lt;/span&gt; and finally send back &lt;span style="font-weight: bold;"&gt;A&lt;/span&gt; to the hibernate layer again, so all the manipulations happen on it.&lt;br /&gt;&lt;br /&gt;Mathematically solving the problem, we need an intersection of &lt;span style="font-weight: bold;"&gt;A&lt;/span&gt; &amp;amp; &lt;span style="font-weight: bold;"&gt;Z&lt;/span&gt; {R, G} and a union of the relative complement of A &amp;amp; Z {R, G } + {Y} = {R, G , Y}&lt;br /&gt;&lt;br /&gt;Using Java we can solve this using three approaches.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;For Loop&lt;/li&gt;&lt;li&gt;&lt;a href="http://commons.apache.org/collections/"&gt;CollectionUtils&lt;/a&gt;&lt;/li&gt;&lt;li&gt;JDK collections native (1.6)&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;For Loop&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush :java"&gt;private static void forLoop(List&amp;lt;Set&amp;lt;String&amp;gt;&amp;gt; all) {&lt;br /&gt;Set&lt;string&gt; db = all.get(0);&lt;br /&gt;Set&lt;string&gt; web = all.get(1);&lt;br /&gt;&lt;br /&gt;Set&lt;string&gt; tempCollection = new HashSet&amp;lt;String&amp;gt;();&lt;br /&gt;tempCollection.addAll(db);&lt;br /&gt;&lt;br /&gt;for (String t : tempCollection) {&lt;br /&gt;if (!web.contains(t)) {&lt;br /&gt;db.remove(t);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;for (String t : web) {&lt;br /&gt;if (!tempCollection.contains(t)) {&lt;br /&gt;db.add(t);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;} &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CollectionUtils&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;private static void collectionUtils(List&amp;lt;Set&amp;gt;&amp;lt;String&amp;gt;&amp;gt; all) {&lt;br /&gt;Set&lt;string&gt; db = all.get(0);&lt;br /&gt;Set&lt;string&gt; web = all.get(1);&lt;br /&gt;&lt;br /&gt;CollectionUtils.retainAll(web, db);&lt;br /&gt;db.addAll(web);&lt;br /&gt;}&lt;/string&gt;&lt;/string&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;JDK Collection Native&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;private static void jdkNative(List&amp;lt;Set&amp;gt;&amp;lt;String&amp;gt;&amp;gt; all) {&lt;br /&gt;Set&lt;string&gt; db = all.get(0);&lt;br /&gt;Set&lt;string&gt; web = all.get(1);&lt;br /&gt;&lt;br /&gt;db.retainAll(web);&lt;br /&gt;db.addAll(web);&lt;br /&gt;}&lt;/string&gt;&lt;/string&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Now we ran a performance test on both, and were shocked to see the results.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;forLoop -18 ms&lt;br /&gt;&lt;/li&gt;&lt;li&gt;collectionUtils -72 ms&lt;br /&gt;&lt;/li&gt;&lt;li&gt;jdkNative -5 ms&lt;/li&gt;&lt;/ul&gt;This is what the web and db collection were made up of.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Create Collections&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;    private static List&amp;lt;Set&amp;lt;String&amp;gt;&amp;gt; createCollections() {&lt;br /&gt; List&amp;lt;Set&amp;lt;String&amp;gt;&amp;gt; all = new ArrayList&amp;lt;Set&amp;lt;String&amp;gt;&amp;gt;();&lt;br /&gt;&lt;br /&gt; Set&amp;lt;String&amp;gt; db = new HashSet&amp;lt;String&amp;gt;();&lt;br /&gt; Set&amp;lt;String&amp;gt; web = new HashSet&amp;lt;String&amp;gt;();&lt;br /&gt; for (int i = 0; i &amp;lt; 10000; i++) {&lt;br /&gt;   db.add(String.valueOf(i));&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; for (int i = 5000; i &amp;lt; 15000; i++) {&lt;br /&gt;   web.add(String.valueOf(i));&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; all.add(db);&lt;br /&gt; all.add(web);&lt;br /&gt;&lt;br /&gt; return all;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;and the &lt;span style="font-weight: bold;"&gt;main method &lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;  public static void main(String[] args) {&lt;br /&gt; long start = 0;&lt;br /&gt; long end = 0;&lt;br /&gt;&lt;br /&gt; List&amp;lt;Set&amp;lt;String&amp;gt;&amp;gt; all = createCollections();&lt;br /&gt;&lt;br /&gt; start = new Date().getTime();&lt;br /&gt; forLoop(all);&lt;br /&gt; end = new Date().getTime();&lt;br /&gt; System.out.println("TIME BY forLoop " + (end - start));&lt;br /&gt;&lt;br /&gt; start = new Date().getTime();&lt;br /&gt; jdkNative(all);&lt;br /&gt; end = new Date().getTime();&lt;br /&gt; System.out.println("TIME BY jdkNative " + (end - start));&lt;br /&gt;&lt;br /&gt; start = new Date().getTime();&lt;br /&gt; collectionUtils(all);&lt;br /&gt; end = new Date().getTime();&lt;br /&gt; System.out.println("TIME BY collectionUtils " + (end - start));&lt;br /&gt;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So avoid using the &lt;a href="http://commons.apache.org/collections/"&gt;CollectionUtils&lt;/a&gt;. See what is more important, cleaner code or faster code ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-7330246464374322957?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-29T11:00:22.277-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2008/08/collectionutils-apache-commons-bad-boy.html</feedburner:origLink></item><item><title>iPhone &amp; CFA</title><link>http://feedproxy.google.com/~r/damroo/~3/SJEfMq1_93I/iphone-cfa.html</link><category>sen finance</category><category>iphone.</category><category>CFA Level I</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Thu, 04 Sep 2008 11:31:39 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-8777708212849579183</guid><description>I've enrolled myself for the Level I CFA exam in December '08. Studying on and off, depending on the schedule and time availability. Off late I stumbled upon &lt;a href="http://www.senfinance.com/"&gt;SenFinance&lt;/a&gt; an interesting site full of Accounting and Quantitative tutorials for CFA Level I.&lt;br /&gt;&lt;br /&gt;I downloaded them all and wanted to view them on my way to work (a 20 minute train travel is good to study). So I got my hands on &lt;a href="http://www.erightsoft.com/SUPER.html"&gt;SUPER®&lt;/a&gt; which is an amazing software to convert any one video or auto file to another format. Now I finally have the tutorials in mp4 format and can study on my way to work!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-8777708212849579183?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-04T14:31:39.944-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://damroo.blogspot.com/2008/08/iphone-cfa.html</feedburner:origLink></item><item><title>Setting up a PHP development environment on your local system</title><link>http://feedproxy.google.com/~r/damroo/~3/ktyZ91CLr6c/setting-up-php-development-environment.html</link><category>joomla</category><category>wordpress</category><category>VMWare</category><category>mysql</category><category>linux</category><category>virtualization</category><category>php</category><category>Varun Mehta</category><category>database</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Wed, 30 Jul 2008 13:18:39 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-1750365343610392720</guid><description>This is an old post I had written on google docs, before VMware Server was free for the general user. Thought could be still more relevant to the general developer for testing in Linux envoirment. VMPlayer I beleive is lighter than VMware Server.&lt;br /&gt;&lt;br /&gt;There are 2 stages of setting up the development &amp;amp; testing environment for yourself. The preferred work environment is Linux. If you already on Linux then you can safely skip Stage I, you can directly proceed to Stage II, also if you have Linux already installed, just cross check if you have the LAMP (Linux + Apache + MySQL + PHP) server installed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pre Installation Software Download Links&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.vmware.com/download/player/"&gt;http://www.vmware.com/download/player/&lt;/a&gt; [VMPlayer]&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ubuntu.com/getubuntu/download"&gt;http://www.ubuntu.com/getubuntu/download&lt;/a&gt; [Ubuntu]&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;STAGE I: Setting up Ubuntu on VMWare.&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Download Ubuntu/Xubuntu/Kubuntu Desktop edition ISO, what ever you like... all the same just different filemanagers (Gnome/Xfe/KDE resp.). If you are comfortable with command line, then you can also install the Server edition with no XWindows and only commandline.&lt;/li&gt;&lt;li&gt;Download and install VMPlayer for your system.&lt;/li&gt;&lt;li&gt;Download qemu for your operating system and extract in any directory you like.&lt;/li&gt;&lt;li&gt;Open your commandline to go ahead to bin folder of qemu and type &lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;&lt;code&gt;qemu-img create -f vmdk ubuntu.vmdk 3G&lt;/code&gt;&lt;/pre&gt; &lt;ul&gt;&lt;li&gt;Here we are creating a 3GB, virtual hard drive in VMWare format. This file will now act as our hard drive for VMWare to install an OS on it. The name of the file is ubuntu.vmdk, you can name it what ever you wish to.&lt;/li&gt;&lt;li&gt;Now the main vmx file (The VMWare configuration file). change the highlighted paths as per your system.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt; #!/usr/bin/vmware&lt;br /&gt;config.version = "8"&lt;br /&gt;virtualHW.version = "4"&lt;br /&gt;ide0:0.present = "TRUE"&lt;br /&gt;ide0:0.filename = "ubuntu.vmdk"&lt;br /&gt;# The amount of RAM you want to allot to the Operating system. For Desktop use 512 and server just 256.&lt;br /&gt;memsize = "512"&lt;br /&gt;MemAllowAutoScaleDown = "FALSE"&lt;br /&gt;ide1:0.present = "TRUE"&lt;br /&gt;&lt;br /&gt;#ide1:0.fileName = "auto detect"&lt;br /&gt;#ide1:0.deviceType = "cdrom-raw"&lt;br /&gt;&lt;br /&gt;ide1:0.fileName = "ubuntu-7.04-server-i386.iso"&lt;br /&gt;ide1:0.deviceType = "cdrom-image"&lt;br /&gt;&lt;br /&gt;ide1:0.autodetect = "TRUE"&lt;br /&gt;floppy0.present = "FALSE"&lt;br /&gt;ethernet0.present = "TRUE"&lt;br /&gt;usb.present = "TRUE"&lt;br /&gt;sound.present = "TRUE"&lt;br /&gt;displayName = "Ubuntu LAMP Server"&lt;br /&gt;guestOS = "ubuntu"&lt;br /&gt;nvram = "ubuntu-server-three.nvram"&lt;br /&gt;MemTrimRate = "-1"&lt;br /&gt;&lt;br /&gt;ide0:0.redo = ""&lt;br /&gt;ethernet0.addressType = "generated"&lt;br /&gt;uuid.location = "56 4d ce 99 e0 d2 2b bf-73 47 ac 62 65 13 57 86"&lt;br /&gt;uuid.bios = "56 4d ce 99 e0 d2 2b bf-73 47 ac 62 65 13 57 86"&lt;br /&gt;&lt;br /&gt;tools.syncTime = "TRUE"&lt;br /&gt;ide1:0.startConnected = "TRUE"&lt;br /&gt;&lt;br /&gt;uuid.action = "create"&lt;br /&gt;&lt;br /&gt;checkpoint.vmState = "ubuntu-lamp-server.vmss"&lt;br /&gt;&lt;br /&gt;isolation.tools.hgfs.disable = "TRUE"&lt;br /&gt;virtualHW.productCompatibility = "hosted"&lt;br /&gt;tools.upgrade.policy = "manual"&lt;br /&gt;&lt;br /&gt;tools.remindInstall = "TRUE"&lt;br /&gt;&lt;br /&gt;usb.autoConnect.device0 = ""&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;After setting all the paths correctly, if you have VMPlayer installed, just save the vmx file, (call it ubuntu.vmx) and double click on the file.&lt;/li&gt;&lt;li&gt;If all the paths are set correctly, the VMPlayer will boot up the virtual drive and show the ubuntu installation menu. This is easier than windows a million times.&lt;/li&gt;&lt;li&gt;At the end of the installation (server or desktop) the process will ask you, if you want to install LAMP server. Select it and let it install the LAMP server.&lt;/li&gt;&lt;li&gt;Reboot the system, and you are good to go. You have successfully installed Ubuntu on VMWare.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;STAGE II: Check the configuration setup of Apache/MySQL/PHP&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now we'll check if PHP and Apache have been successfully installed on your system. Go the /var/www folder, you should be seeing a apache2-default folder out there. If you see these then apache seems to be installed. Just open the browser and type http://localhost you should be able to see the apache-default folder over there. If you a receive a page not found then apache is not running or installed properly.&lt;br /&gt;&lt;br /&gt;If things look good, next stage is to check PHP installation. Create a file named index.php and type the following there.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt; &amp;lt;?php phpinfo(); ?&amp;gt; &lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Just refresh the localhost (place the file in /var/www) That should give you loads of PHP info on the screen in blue, purple and a huge table. If that happens you are good to go!!! Else something is wrong!!!.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;   MySQL Check&lt;/span&gt;&lt;br /&gt;Open the command line and type&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;mysql -uroot&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;If it opens up with a mysql&gt; prompt then it's good else something is wrong. Your mysql password is blank.&lt;br /&gt;&lt;br /&gt;If all sounds good, now go to Stage III&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;STAGE III: Applications to setup.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Download&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JOOMLA&lt;/li&gt;&lt;li&gt;WORDPRESS&lt;/li&gt;&lt;/ul&gt; Extract them to the /var/www folders and access them using &lt;a href="http://localhost/joomla"&gt;http://localhost/joomla&lt;/a&gt; and &lt;a href="http://localhost/wordpress"&gt;http://localhost/wordpress&lt;/a&gt; respectively if you extracting them to the folders on these names.&lt;br /&gt;&lt;br /&gt;How to go about setting them, start the index.php or read the readme file and you should be good to go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-1750365343610392720?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-30T16:18:39.272-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2008/07/setting-up-php-development-environment.html</feedburner:origLink></item><item><title>The demise of MyGadgetBuilder</title><link>http://feedproxy.google.com/~r/damroo/~3/CagnXvUjBkQ/demise-of-mygadgetbuilder.html</link><category>mygadgetbuilder.com</category><category>Varun Mehta</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Thu, 24 Jul 2008 13:21:26 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-630280113011595981</guid><description>Hello all, my previous blog, &lt;a href="http://mygadgetbuilder.com/"&gt;MyGadgetBuilder.com&lt;/a&gt; has been officially shut down. I'll not be renewing the domain name any more, so some one can go ahead and claim it. It was a nice learning experience. Being a developer with some design skills, putting up the site was a piece of cake, but getting people to post on the site was kind of painful.&lt;br /&gt;&lt;br /&gt;People had issues with copyright, data protection and all kinds of issues. Also things/people change as time passes by, everyone gets busy with their own profession and has little time for off-track exploration for their old love (electronics). I don't blame them, priorities do change; but took me some time to realize :) better late than never.&lt;br /&gt;&lt;br /&gt;Well all for good. Hence forth MGB will point to this blog (till end of subscription life). Instead visit &lt;a href="http://www.instructables.com/"&gt;Instructables&lt;/a&gt; a nice site, which already existed on the lines of the world I was planning to build.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-630280113011595981?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-24T16:21:26.287-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2008/07/demise-of-mygadgetbuilder.html</feedburner:origLink></item><item><title>Cloud Computing on VMWare or Xen</title><link>http://feedproxy.google.com/~r/damroo/~3/IKHSC2Jdb2Y/cloud-computing-on-vmware-or-xen.html</link><category>VMWare</category><category>Xen</category><category>cloud computing</category><category>Varun Mehta</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Wed, 23 Jul 2008 10:21:01 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-6851067498064645868</guid><description>&lt;span style="font-weight: bold;"&gt;What is Cloud Computing (CC)?&lt;/span&gt;&lt;br /&gt;A lot has already been said and blogged about cloud computing. Just to give you a one liner about it;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;It's the availability of system resources to allow scalability of the system as and when required by the application. &lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;As and when required?&lt;/span&gt;&lt;br /&gt;Consider an example of a build server running in our VM environment, now this server during it's peak instrumentation of code and all kinds of code analysis requires the power of a quad core machine with 4GB RAM, so when you perform your hardware requirement analysis for this server, you consider all these factors and build a VM fulfilling these requirements.&lt;br /&gt;&lt;br /&gt;Over the period of time your system usage reports show a small spike in system resource usage every 3-4 hours (every commit build) and a peak spike for 2-2.5 hours every 24 hours (nightly builds), the remaining time the system is pretty much idle doing nothing, eating up precious RAM allocation and number of CPUs dedicated.&lt;br /&gt;&lt;br /&gt;Now if we push this setup in a CC environment, the system will use bare minimum resources when idle and grab all the possible resources from the cluster, during peak cycles. This allows us to leverage the un-utilized system resources, during non-peak cycles.&lt;br /&gt;&lt;br /&gt;VMWare has &lt;a href="http://www.vmware.com/products/vi/vc/drs.html"&gt;DRS - Distributed Resource Scheduler&lt;/a&gt;, which helps the VMs attain similar to cloud status to dynamically allocate the resources.&lt;br /&gt;&lt;br /&gt;Now Xen also has something similar, but then is it available for a small start-up (read free)? Yes, &lt;a href="http://workspace.globus.org/clouds/nimbus.html"&gt;Nimbus@UC&lt;/a&gt; is something we can look at, will try digging in more into it and see what we can achieve out of it. So let us see how we can leverage the existing hardware to allow maximum virtual resource utilization.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt; Read this article &lt;a href="http://highscalability.com/eucalyptus-build-your-own-private-ec2-cloud"&gt;http://highscalability.com/eucalyptus-build-your-own-private-ec2-cloud &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-6851067498064645868?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-23T13:21:01.560-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2008/07/cloud-computing-on-vmware-or-xen.html</feedburner:origLink></item><item><title>Virtualization: The Practical Implementation - I</title><link>http://feedproxy.google.com/~r/damroo/~3/I36q_sYwodY/agile-environment-practical.html</link><category>agile</category><category>Version control</category><category>VMWare</category><category>project planning</category><category>virtualization</category><category>Continious Integration</category><category>Star4ce</category><category>Practical Implementation</category><category>Varun Mehta</category><category>hardware configuration</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Thu, 17 Jul 2008 09:02:54 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-731872086796395191</guid><description>I'm helping my friend Nitin at his firm &lt;a href="http://www.star4ce.com/"&gt;Star4ce Technologies&lt;/a&gt; put up a virtualization server as  their in-house development environment. To begin with we went ahead and ordered some hardware from &lt;a href="http://www.newegg.com/"&gt;newegg&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is a brief on the hardware we've picked;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Intel Core 2 Quad Q9300 Yorkfield 2.5GHz LGA 775 95W Quad-Core Processor&lt;/li&gt;&lt;li&gt;ASUS P5K-E LGA 775 Intel P35 ATX Intel Motherboard&lt;/li&gt;&lt;li&gt;(5) Seagate Barracuda 7200.11 ST3500320AS 500GB 7200 RPM SATA 3.0Gb/s Hard Drive&lt;/li&gt;&lt;li&gt;(2) CORSAIR 4GB (2 x 2GB) 240-Pin DDR2 800 (PC2 6400) SDRAM Dual Channel&lt;/li&gt;&lt;li&gt;LITE-ON 20X DVD±R DVD Burner with LightScribe SATA &lt;/li&gt;&lt;li&gt;Antec 850W ATX12V / EPS12V Power Supply&lt;/li&gt;&lt;li&gt;Antec P182 Gun Metal Black 0.8mm cold rolled steel ATX Mid Tower Computer Case &lt;/li&gt;&lt;li&gt;ZOTAC GeForce 7300GT 256MB 128-bit GDDR2 PCI Express x16&lt;/li&gt;&lt;li&gt;Logitech USB + PS/2 Cordless Standard Desktop EX110 Mouse Included&lt;/li&gt;&lt;/ul&gt;Now the bill fits to around $1,500.00 as of the day this article was written. Hopefully by next week we shall receive the components and we shall go ahead and assemble the system.&lt;br /&gt;&lt;br /&gt;A few after thoughts about the hardware choices&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Intel Core 2 Quad Q9300&lt;/span&gt;&lt;br /&gt;45nm consumes less power compared to predecessors and can be over clocked to 3.2GHz.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ASUS P5K-E&lt;/span&gt;&lt;br /&gt;It's not a high end server, but can be used for a low end server. We did see a few other motherboards but opted for this, as they had SLI and were more geared towards being gaming PC's.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;Why no Server Motherboards&lt;/span&gt;&lt;br /&gt;This is an interesting find we dug into, we decided to hit the server motherboards for the system, as they supported 32GB of RAM quite easily as compared to the 8GB max of the above mentioned. The price was not that different approx $150.00 higher (with dual processors -physical) but it had &lt;a href="http://en.wikipedia.org/wiki/Fully_Buffered_DIMM"&gt;FB-RAM&lt;/a&gt; which took the toll on the price of the system. 4GB on FB-RAM goes to approx $250.00 to $550.00 for 8GB. Yes now that's a whopping high number we are talking about.&lt;br /&gt;&lt;br /&gt;So we are back to reality with a lower end system (recall the &lt;a href="http://damroo.blogspot.com/2008/07/agile-environment-using-virtualization.html"&gt;first article&lt;/a&gt;) it was aimed towards start-ups and low budget development teams.&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Seagate Barracuda 7200.11 ST3500320AS&lt;/span&gt;&lt;br /&gt;32MB cache, and I trust Seagate. 5 pieces: 1- OS and 4- RAID 01&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CORSAIR 4GB (2 x 2GB) 240-Pin DDR2 800&lt;/span&gt;&lt;br /&gt;Nice &amp;amp; reliable.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ZOTAC GeForce 7300GT 256MB &lt;/span&gt;&lt;br /&gt;There was no onboard video, this was the lowest and best&lt;br /&gt;&lt;br /&gt;So we wait and watch for the parts to arrive. I'll be posting in intermittently the progress, issues &amp;amp; accomplishments along the way.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UPDATE:&lt;/span&gt; The shipping was quick, the parts should be arriving today afternoon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-731872086796395191?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-17T12:02:54.785-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2008/07/agile-environment-practical.html</feedburner:origLink></item><item><title>DATETIME vs TIMESTAMP vs DATE &amp; TIME - II</title><link>http://feedproxy.google.com/~r/damroo/~3/sEFvOsHT_nU/datetime-vs-timestamp-vs-date-time-ii.html</link><category>timestamp</category><category>mysql</category><category>datetime</category><category>date and time</category><category>optimization</category><category>Varun Mehta</category><category>database</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Tue, 15 Jul 2008 12:32:25 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-8733265045560510935</guid><description>Ok now the test are run and the results are out, I know we are all excited to know them, and I'm equally eager to print them too!!&lt;br /&gt;&lt;br /&gt;The test did a simple select * from the tables.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;  public void fetchAll() throws Exception {&lt;br /&gt;  String SQL1 = "SELECT * FROM dateandtime";&lt;br /&gt;  String SQL2 = "SELECT * FROM datetime";&lt;br /&gt;  String SQL3 = "SELECT * FROM timestamps";&lt;br /&gt;&lt;br /&gt;  long start = 0;&lt;br /&gt;  long end = 0;&lt;br /&gt;&lt;br /&gt;  System.out.println("ONE");&lt;br /&gt;  start = new Date().getTime();&lt;br /&gt;  selectQuery(SQL1);&lt;br /&gt;  end = new Date().getTime();&lt;br /&gt;  System.out.println(" SQL 1 - dateandtime " + (end - start));&lt;br /&gt;&lt;br /&gt;  System.out.println("TWO");&lt;br /&gt;  start = new Date().getTime();&lt;br /&gt;  selectQuery(SQL2);&lt;br /&gt;  end = new Date().getTime();&lt;br /&gt;  System.out.println(" SQL 2 - datetime " + (end - start));&lt;br /&gt;&lt;br /&gt;  System.out.println("THREE");&lt;br /&gt;  start = new Date().getTime();&lt;br /&gt;  selectQuery(SQL3);&lt;br /&gt;  end = new Date().getTime();&lt;br /&gt;  System.out.println(" SQL 3 - timestamps " + (end - start));&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;The time to fetch kept on reducing with every subsequent calls.&lt;br /&gt;&lt;pre&gt;&lt;code&gt; SQL 1 - dateandtime 4526 ms&lt;br /&gt;SQL 2 - datetime 2852 ms&lt;br /&gt;SQL 3 - timestamps 3577 ms&lt;br /&gt;&lt;br /&gt;SQL 1 - dateandtime 4168 ms&lt;br /&gt;SQL 2 - datetime 2467 ms&lt;br /&gt;SQL 3 - timestamps 3073 ms&lt;br /&gt;&lt;br /&gt;SQL 1 - dateandtime 4080 ms&lt;br /&gt;SQL 2 - datetime 2346 ms&lt;br /&gt;SQL 3 - timestamps 3130 ms&lt;br /&gt;&lt;br /&gt;SQL 1 - dateandtime 3949 ms&lt;br /&gt;SQL 2 - datetime 2419 ms&lt;br /&gt;SQL 3 - timestamps 3043 ms &lt;/code&gt;&lt;/pre&gt;So looks like DATETIME wins in fetching speed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-8733265045560510935?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-15T15:32:25.145-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2008/07/datetime-vs-timestamp-vs-date-time-ii.html</feedburner:origLink></item><item><title>Duplicate file finder</title><link>http://feedproxy.google.com/~r/damroo/~3/ebxFZsCTqZA/duplicate-file-finder.html</link><category>java</category><category>duplicate</category><category>MD5</category><category>checksum</category><category>binary</category><category>SHA</category><category>photos</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Tue, 26 Aug 2008 08:39:46 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-3088362550870133417</guid><description>Disk space is cheap, starting from a 1.2GB hard drive from my first computer to a "spare" 500GB external hard drive, cheap data storage has come a long way. I click a lot of photographs ever since I got my first digital camera, and I store a lot of these photos too (locally), now since 2006 I have over 201,608 photos and some videos. My camera photo number counter has reset twice!!&lt;br /&gt;&lt;br /&gt;A few days back I decided to hand over my drive to my brother, since he was leaving soon, I dumped all the stuff on my two laptops, and forgot about them. Of late my wife asked me to pick up good nice pics so we can print them. That's when I realized I had a lot of duplicate photos, now the simplest idea was to find the duplicate file names and delete them, but that was not possible, since I had already reset the counter so I technically had 3 files with the same name and atleast 10,000 of them!!&lt;br /&gt;&lt;br /&gt;MD5 to the rescue. Since all the photos and movies are binary files, MD5 seemed ideal to me...&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;MD5 digests have been widely used in the software world to provide some assurance that a transferred file has arrived intact. For example, file servers often provide a pre-computed MD5 checksum for the files, so that a user can compare the checksum of the downloaded file to it.&lt;/blockquote&gt;&lt;br /&gt;So I started my eclipse and churned out a program to scan my HDD and compare MD5 keys and find all duplicates.&lt;br /&gt;&lt;br /&gt;The method below generates the MD5 checksum for any file&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;  private static String generateMD5(String path) throws IOException {&lt;br /&gt; MessageDigest digest;&lt;br /&gt; InputStream is = null;&lt;br /&gt; try {&lt;br /&gt;   digest = MessageDigest.getInstance("MD5");&lt;br /&gt;   is = new FileInputStream(new File(path));&lt;br /&gt;   byte[] buffer = new byte[8192];&lt;br /&gt;   int read = 0;&lt;br /&gt;&lt;br /&gt;   while((read = is.read(buffer)) &gt; 0) {&lt;br /&gt;     digest.update(buffer, 0, read);&lt;br /&gt;   }&lt;br /&gt;   byte[] md5sum = digest.digest();&lt;br /&gt;   BigInteger bigInt = new BigInteger(1, md5sum);&lt;br /&gt;   return bigInt.toString(16);&lt;br /&gt; } catch(NoSuchAlgorithmException e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt; } catch(FileNotFoundException e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt; } catch(IOException e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt; } finally {&lt;br /&gt;   is.close();&lt;br /&gt; }&lt;br /&gt; return null;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Then go ahead and get a list of all the files on your system&lt;pre&gt;&lt;code&gt;&lt;br /&gt;missed the code&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;And finally run the main method.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;public static void main(String[] args) throws Exception {&lt;br /&gt; List filePaths = new ArrayList();&lt;br /&gt; File file = new File("/home/varun/workbench/duplicates.csv");&lt;br /&gt; FileWriter fw = new FileWriter(file);&lt;br /&gt; SortedMap duplicates = new TreeMap();&lt;br /&gt; filePaths = generateFileMap("/mnt/datastorage/photos", filePaths);&lt;br /&gt; for(String path : filePaths) {&lt;br /&gt;   String hash = generateMD5(path);&lt;br /&gt;   if(duplicates.containsKey(hash)) {&lt;br /&gt;     fw.write(path + "," + duplicates.get(hash) + "\n");&lt;br /&gt;   } else {&lt;br /&gt;     duplicates.put(hash, path);&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;So go ahead and run this, you can also extend it to generate a list of any kind of duplicate files. Average file size is 1.5 - 2.0 MB&lt;br /&gt;&lt;br /&gt;The output file when viewed on Open Office, Google Docs or Excel looks like this&lt;br /&gt;&lt;br /&gt;This is how the output looks like this. It shows you which file a duplicate of which other file.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;/mnt/datastorage/Photos/2008/Photos/Halloween NYC 2007/DSC01958.JPG /mnt/datastorage/Photos/2008/Photos/SORT ME/DSC01958.JPG&lt;br /&gt;/mnt/datastorage/Photos/2008/Photos/Halloween NYC 2007/DSC01959.JPG /mnt/datastorage/Photos/2008/Photos/SORT ME/DSC01959.JPG&lt;br /&gt;/mnt/datastorage/Photos/2008/Photos/Halloween NYC 2007/DSC01960.JPG /mnt/datastorage/Photos/2008/Photos/SORT ME/DSC01960.JPG&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UPDATE:&lt;/span&gt; Ran the program with SHA algorithm also and here are the comparison times.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Time for MD5 858,953ms (14.31 minutes)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Time for SHA 1,191,656ms (19.80 minutes)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Bibliography&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/MD5#Applications"&gt;http://en.wikipedia.org/wiki/MD5#Applications &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Md5sum"&gt;http://en.wikipedia.org/wiki/Md5sum &lt;/a&gt;&lt;br /&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/8305397494524192141-3088362550870133417?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-26T11:39:46.103-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://damroo.blogspot.com/2008/07/duplicate-file-finder.html</feedburner:origLink></item><item><title>DATETIME vs TIMESTAMP vs DATE &amp; TIME</title><link>http://feedproxy.google.com/~r/damroo/~3/qse2xVouGMM/mysql-datetime-vs-timestamp-vs-date.html</link><category>timestamp</category><category>mysql</category><category>datetime</category><category>date and time</category><category>optimization</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Wed, 01 Apr 2009 14:27:36 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-6558677316910644298</guid><description>I'm starting off this project and wanted to study some data retrieval optimization values. DATE &amp;amp; TIME are the two most deciding factors for processing the information in my app. The aggregation, classification, sorting &amp;amp; grouping of data is based on DATE &amp;amp; TIME.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Daily reports&lt;/li&gt;&lt;li&gt;Weekly reports&lt;/li&gt;&lt;li&gt;Every day at 00:00 hours.&lt;/li&gt;&lt;li&gt;Every year on this date&lt;/li&gt;&lt;/ul&gt;So there is a huge amount of chronlogical processing. We might require to process the data just date, just time, or both date &amp;amp; time. So was born the question. &lt;span style="font-style: italic; font-weight: bold;"&gt;"What is the most optimum way of storing information DATE &amp;amp; TIME, DATETIME or TIMESTAMP?"&lt;/span&gt; The initial study helped me find this.&lt;br /&gt;&lt;p&gt;From the MySQL manual...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="bold"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="bold"&gt;&lt;strong&gt;Storage Requirements for Date and Time       Types&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;     &lt;/p&gt; &lt;div class="informaltable"&gt;&lt;table border="1"&gt; &lt;colgroup&gt; &lt;col&gt; &lt;col&gt; &lt;/colgroup&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="bold"&gt;&lt;strong&gt;Data Type&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="bold"&gt;&lt;strong&gt;Storage Required&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;&lt;code class="literal"&gt;DATE&lt;/code&gt;&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;3 bytes&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;&lt;code class="literal"&gt;TIME&lt;/code&gt;&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;3 bytes&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;&lt;code class="literal"&gt;DATETIME&lt;/code&gt;&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;8 bytes&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;&lt;code class="literal"&gt;TIMESTAMP&lt;/code&gt;&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;4 bytes&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;&lt;code class="literal"&gt;YEAR&lt;/code&gt;&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;1 byte&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;&lt;/div&gt; &lt;p&gt;&lt;span style="font-size:85%;"&gt;       The storage requirements shown in the table arise from the way       that MySQL represents temporal values:     &lt;/span&gt;&lt;/p&gt; &lt;div class="itemizedlist"&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;           &lt;span style="font-size:85%;"&gt;&lt;code class="literal"&gt;DATE&lt;/code&gt;: A three-byte integer packed as           &lt;code class="literal"&gt;DD&lt;/code&gt; + &lt;code class="literal"&gt;MM&lt;/code&gt;×32           + &lt;code class="literal"&gt;YYYY&lt;/code&gt;×16×32         &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;           &lt;span style="font-size:85%;"&gt;&lt;code class="literal"&gt;TIME&lt;/code&gt;: A three-byte integer packed as           &lt;code class="literal"&gt;DD&lt;/code&gt;×24×3600 +           &lt;code class="literal"&gt;HH&lt;/code&gt;×3600 +           &lt;code class="literal"&gt;MM&lt;/code&gt;×60 + &lt;code class="literal"&gt;SS&lt;/code&gt;&lt;/span&gt;         &lt;/p&gt;&lt;/li&gt;&lt;li&gt; &lt;p&gt;           &lt;span style="font-size:85%;"&gt;&lt;code class="literal"&gt;DATETIME&lt;/code&gt;: Eight bytes:         &lt;/span&gt;&lt;/p&gt; &lt;div class="itemizedlist"&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;               A four-byte integer packed as               &lt;code class="literal"&gt;YYYY&lt;/code&gt;×10000 +               &lt;code class="literal"&gt;MM&lt;/code&gt;×100 +               &lt;code class="literal"&gt;DD&lt;/code&gt;&lt;/span&gt;             &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;               A four-byte integer packed as               &lt;code class="literal"&gt;HH&lt;/code&gt;×10000 +               &lt;code class="literal"&gt;MM&lt;/code&gt;×100 +               &lt;code class="literal"&gt;SS&lt;/code&gt;&lt;/span&gt;             &lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt; &lt;/li&gt;&lt;li&gt;&lt;p&gt;           &lt;span style="font-size:85%;"&gt;&lt;code class="literal"&gt;TIMESTAMP&lt;/code&gt;: A four-byte integer representing           seconds UTC since the epoch (&lt;code class="literal"&gt;'1970-01-01           00:00:00'&lt;/code&gt; UTC)         &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;           &lt;span style="font-size:85%;"&gt;&lt;code class="literal"&gt;YEAR&lt;/code&gt;: A one-byte integer         &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/blockquote&gt;So in terms of data storage, DATETIME is 8 bytes, TIMESTAMP 4 bytes, DATE &amp;amp; TIME 6 bytes (3 each). Ideally TIMESTAMP is good enough, if it fits my needs.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;8 bytes &gt; 6 bytes &gt; 4 bytes&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Memory is getting cheaper by the day, so let's ignore this for the time being, we'll revisit the storage factor a bit later.&lt;br /&gt;&lt;br /&gt;Since I have to fetch information and process it, I decided to run some test in MySQL. Below is the schema of the database.&lt;br /&gt;&lt;pre class="brush:sql"&gt;CREATE DATABASE datetest;&lt;br /&gt;&lt;br /&gt;USE datetest;&lt;br /&gt;&lt;br /&gt;DROP TABLE IF EXISTS dateandtime;&lt;br /&gt;&lt;br /&gt;DROP TABLE IF EXISTS datetime;&lt;br /&gt;&lt;br /&gt;DROP TABLE IF EXISTS timestamps;&lt;br /&gt;&lt;br /&gt;CREATE TABLE dateandtime (&lt;br /&gt; timeonly TIME,&lt;br /&gt; dateonly DATE,&lt;br /&gt; counter    INTEGER,&lt;br /&gt; salary DECIMAL(10,2),&lt;br /&gt;PRIMARY KEY (timeonly, dateonly));&lt;br /&gt;&lt;br /&gt;CREATE TABLE datetime (&lt;br /&gt; dateandtime DATETIME,&lt;br /&gt; counter    INTEGER,&lt;br /&gt; salary DECIMAL(10,2),&lt;br /&gt;PRIMARY KEY (dateandtime));&lt;br /&gt;&lt;br /&gt;CREATE TABLE timestamps (&lt;br /&gt; timestamps TIMESTAMP,&lt;br /&gt; counter    INTEGER,&lt;br /&gt; salary DECIMAL(10,2),&lt;br /&gt;PRIMARY KEY (timestamps));&lt;/pre&gt;&lt;br /&gt;I added approximately 100,000,000 records to each table, and then ran further test on it. As of now I'm yet to write the test cases, after I'm done I'll put the files on.&lt;br /&gt;&lt;br /&gt;Found another interesting post, you might want to touch base on.&lt;br /&gt;&lt;a href="http://www.scribd.com/doc/2565263/The-top-20-design-tips-for-MySQL-Enterprise-data-architects"&gt;http://www.scribd.com/doc/2565263/The-top-20-design-tips-for-MySQL-Enterprise-data-architects &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Bibliography&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/*%20%20http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html"&gt;http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html &lt;/a&gt;&lt;br /&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/8305397494524192141-6558677316910644298?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-01T17:27:36.510-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2008/07/mysql-datetime-vs-timestamp-vs-date.html</feedburner:origLink></item><item><title>Agile environment using virtualization</title><link>http://feedproxy.google.com/~r/damroo/~3/GRZXDsIKSoQ/agile-environment-using-virtualization.html</link><category>NAT</category><category>agile</category><category>Version control</category><category>VMWare</category><category>project planning</category><category>mysql</category><category>virtualization</category><category>Continious Integration</category><category>Xen</category><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Tue, 26 Aug 2008 08:39:06 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-6841188937538141017</guid><description>&lt;span style="font-size:78%;"&gt;(This document is aimed more towards Java &amp;amp; VMWare, but the same can be replicated for any other language &amp;amp; environment)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Abstract&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You have a team of developers working on different modules for a project-product which are inter-dependant. Each developer diligently writes unit &amp;amp; integration tests supporting their code. You want to set-up an agile test environment to run the unit tests &amp;amp; staging server for integration test, but purchasing hardware for multiple machines is a constraint.&lt;br /&gt;&lt;br /&gt;The following article provides a guide on how virtualization tools like VMware can be used to set-up staging or QA environment (Agile), with approximate minimum hardware &amp;amp; time investment.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Hardware Sizing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The hardware sizing performed here is not an exact calculation, but an educated guess at the approximate system requirement to run the application.&lt;br /&gt;&lt;br /&gt;                  &lt;table id="dhp-" style="color: rgb(153, 153, 153);" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;&lt;tbody id="kf:q0"&gt;&lt;tr id="kf:q1" bg="" style="color: rgb(204, 204, 204);"&gt;           &lt;td id="kf:q2" style="text-align: center; color: rgb(0, 0, 0);" width="50%"&gt;             &lt;b id="srco"&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;Application&lt;/span&gt;&lt;br /&gt; &lt;/b&gt;           &lt;/td&gt;           &lt;td id="kf:q4" style="text-align: center; color: rgb(0, 0, 0);" width="25%"&gt;             &lt;b id="srco0"&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;RAM&lt;/span&gt;&lt;br /&gt; &lt;/b&gt;           &lt;/td&gt;           &lt;td id="kf:q6" style="text-align: center; color: rgb(0, 0, 0);" width="25%"&gt;             &lt;b id="srco1"&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;CPU&lt;/span&gt;&lt;br /&gt; &lt;/b&gt;           &lt;/td&gt;         &lt;/tr&gt;         &lt;tr id="kf:q10"&gt;           &lt;td style="color: rgb(0, 0, 0);" id="kf:q11" width="50%"&gt;             Revision Control (SVN or CVS)&lt;br /&gt;&lt;/td&gt;           &lt;td style="color: rgb(0, 0, 0);" id="kf:q13" width="25%"&gt;             512MB - 1GB&lt;br /&gt;&lt;/td&gt;           &lt;td style="color: rgb(0, 0, 0);" id="kf:q15" width="25%"&gt;             Single&lt;br /&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr id="kf:q19"&gt;           &lt;td style="color: rgb(0, 0, 0);" id="kf:q20" width="50%"&gt;Continuous Integration (Cruise Control or Bamboo)           &lt;/td&gt;           &lt;td style="color: rgb(0, 0, 0);" id="kf:q22" width="25%"&gt;             1GB - 2GB&lt;br /&gt;&lt;/td&gt;           &lt;td style="color: rgb(0, 0, 0);" id="kf:q24" width="25%"&gt;             Single&lt;br /&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr id="kf:q28"&gt;           &lt;td style="color: rgb(0, 0, 0);" id="kf:q29" width="50%"&gt;Database (MySQL*)&lt;br /&gt;&lt;/td&gt;           &lt;td style="color: rgb(0, 0, 0);" id="kf:q31" width="25%"&gt;             2GB - 4GB&lt;br /&gt;&lt;/td&gt;           &lt;td style="color: rgb(0, 0, 0);" id="kf:q33" width="25%"&gt;             Single-Dual&lt;br /&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr id="imbf"&gt;           &lt;td style="color: rgb(0, 0, 0);" id="imbf0" width="50%"&gt;             Webserver (Wiki, Bugzilla, JIRA)&lt;br /&gt;&lt;/td&gt;           &lt;td style="color: rgb(0, 0, 0);" id="imbf2" width="25%"&gt;             1GB&lt;br /&gt;&lt;/td&gt;           &lt;td style="color: rgb(0, 0, 0);" id="imbf4" width="25%"&gt;             Single&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:85%;"&gt;*MySQL on VMware has some serious performance issues for production environments, if your application is very database intensive with thousands to millions of I/O per second, you might want to avoid virtualization all together. For testing purpose (application sanity, NOT performance) VM is decent.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Considering the above list of applications, and the assumption, each physical core can support 2 virtual cores.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Hardware configuration&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;  Quad-core processor CPU&lt;/li&gt;&lt;li&gt;     8GB of RAM&lt;/li&gt;&lt;li&gt;     5 HDDs (1 OS + 4 HDD with RAID**)&lt;/li&gt;&lt;li&gt;     Other basic required components&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;**Setting up RAID and the type of configuration suiting your needs is a seperate chapter all together, We consider mirrored and stripped there are loads of articles available on the internet on this topic.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The approximate cost of the above system is roughly $2,500.00 - $3,500.00 (as the date of this article)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Set-up&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can either install Windows or Linux (we are on an Ubuntu system) as the HostOS. Since you have 8GB of RAM on the physical machine, 32 bit OS's are not capable of using above 3-4GB. Use 64-bit distributions.&lt;br /&gt;&lt;br /&gt;Download VMWare server from [&lt;a href="http://www.vmware.com/products/server"&gt;&lt;span style="font-family:courier new;"&gt;http://www.vmware.com/products/server&lt;/span&gt;&lt;/a&gt;] select the distribution type depending on your OS. The guest and the host OS can be completely different, they need not be same there is no relation between them.&lt;br /&gt;eg: You can install Windows as host and Linux as guest or vice-versa.&lt;br /&gt;&lt;br /&gt;You can either create the virtual machines all by yourself using the VMware step-by-step wizard, or download 'appliances' created by others from the VMware site [&lt;a href="http://www.vmware.com/appliances"&gt;&lt;span style="font-family:courier new;"&gt;http://www.vmware.com/appliances&lt;/span&gt;&lt;/a&gt;], this saves you the initial installation effort.&lt;br /&gt;&lt;br /&gt;When you create a new VM, you are also asked the default networking connection type. NAT and Bridged are the most common options one selects from. Use NAT if you want the VM to talk within its own subnet only, or Bridged if you want other machines on the same subnet as the host access them.&lt;br /&gt;eg: Your host machine is on 192.168.10.50&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Tip: If you installing the guest yourself, you can create one master guest, with all the common applications configured (eg: OpenSSH server would be great to have on all the guests for remote management or java), you'll have to change the host name after that.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;Power up each of the VM's and install the required applications for which they've been set and use them like any other machine on the network.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;    Your source files are versioned on the Revision Control Server&lt;/li&gt;&lt;li&gt;    Your tests are run nightly on the Cruise Control Server&lt;/li&gt;&lt;li&gt;    Your team documents the whole project and process on the Wiki, and file bugs in Bugzilla&lt;/li&gt;&lt;li&gt;    Your MySQL server is used for running the DB &amp;amp; the supporting DBs for other apps (bugzilla, wiki)&lt;/li&gt;&lt;/ul&gt;These VM's need to be maintained like any other normal physical machine on the network.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Pitfalls&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Putting all your eggs in one basket, if the main VMware server fails, all the "machines" (VM's) fail.&lt;/li&gt;&lt;li&gt;Since the server is dependant on the native OS it sits on, the capabilities of the VMServer is restricted by the OS&lt;/li&gt;&lt;li&gt;Solution: Use commercial ESX Server or other alternatives&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Alternatives&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can use the Xen too for virtualization. I've heard pretty good things about it too, with a few short comings &amp;amp; advantages over VMServer (that's a separate topic all together).&lt;br /&gt;&lt;br /&gt;There is an article dedicated to Virtual Machines on Wikipedia, you can refer that depending on your needs and fix upon a solution that suits your needs better&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Glossary&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Virtualization&lt;/span&gt; - The virtual machine simulates enough hardware to allow an unmodified "guest" OS (one designed for the same CPU) to be run in isolation&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Continuous Integration&lt;/span&gt; - Continuous integration describes a set of software engineering practice's that speed up the delivery of software by decreasing integration times&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Revision Control&lt;/span&gt; - Revision control (also known as version control (system) (VCS), source control or (source) code management (SCM)) is the management of multiple revisions of the same unit of information&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Host OS&lt;/span&gt; - The operating system installed on the physical machine running VMware Server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Guest OS&lt;/span&gt; - The operating system installed on the virtual machine.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Bibliography&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;http://en.wikipedia.org/wiki/Agile_software_development&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Xen"&gt;http://en.wikipedia.org/wiki/Xen&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8305397494524192141&amp;amp;postID=6841188937538141017#%20http://en.wikipedia.org/wiki/Comparison_of_virtual_machines"&gt;http://en.wikipedia.org/wiki/Comparison_of_virtual_machines&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8305397494524192141&amp;amp;postID=6841188937538141017#%20http://en.wikipedia.org/wiki/Virtualization"&gt;http://en.wikipedia.org/wiki/Virtualization&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8305397494524192141&amp;amp;postID=6841188937538141017#%20%20http://en.wikipedia.org/wiki/Continuous_Integration"&gt;  http://en.wikipedia.org/wiki/Continuous_Integration&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8305397494524192141&amp;amp;postID=6841188937538141017#%20%20http://en.wikipedia.org/wiki/Revision_control"&gt;  http://en.wikipedia.org/wiki/Revision_control&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8305397494524192141&amp;amp;postID=6841188937538141017#%20%20http://it20.info/blogs/main/archive/2007/11/26/83.aspx"&gt;  http://it20.info/blogs/main/archive/2007/11/26/83.aspx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8305397494524192141&amp;amp;postID=6841188937538141017#%20http://mysql-dba-journey.blogspot.com/2007/11/mysql-and-vmware.html"&gt;http://mysql-dba-journey.blogspot.com/2007/11/mysql-and-vmware.html&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-6841188937538141017?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-26T11:39:06.386-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://damroo.blogspot.com/2008/07/agile-environment-using-virtualization.html</feedburner:origLink></item><item><title>About</title><link>http://feedproxy.google.com/~r/damroo/~3/0vsp6iuURlQ/about.html</link><author>noreply@blogger.com (Varun Mehta)</author><pubDate>Wed, 18 Mar 2009 21:29:19 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8305397494524192141.post-8599809923839547016</guid><description>Always quelling over a problem laden upon by clients, situations or myself in quest for a better solution. And sometimes, I do hit upon one! It is these solutions or concepts I have dawned upon, that I would like to share, and see them implemented by others in the real world.&lt;br /&gt;&lt;br /&gt;I code for a living, click pictures as a hobby &amp;amp; rave about geeky gadgets. Hopefully soon I shall lay my hands upon the Nikon D-90, and finally revive my photoblog. Till then you'll have to do away with a hopelessly outdated version at &lt;a href="http://varunphotography.blogspot.com"&gt;http://varunphotography.blogspot.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8305397494524192141-8599809923839547016?l=damroo.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-19T00:29:19.407-04:00</app:edited><feedburner:origLink>http://damroo.blogspot.com/2008/06/about.html</feedburner:origLink></item><media:rating>nonadult</media:rating></channel></rss>

