<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7362175506419777516</id><updated>2011-12-18T14:41:59.654-05:00</updated><title type='text'>Software Psychology</title><subtitle type='html'>You are what you code</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-7030679179194099173</id><published>2011-09-26T15:04:00.000-04:00</published><updated>2011-09-26T15:04:05.114-04:00</updated><title type='text'>what happens to the code without thought</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;I ran into this wonderful piece of java code at work. Just had to share this with everyone.&lt;br /&gt;This code base was modified over last 4 years by at least 50 different developers with no TDD. Look at what the code ends up being in a long run.&lt;br /&gt;&lt;br /&gt;// given that record and id are Strings&lt;br /&gt;if (record != null &amp;amp;&amp;amp; ((id != null &amp;amp;&amp;amp; id.length() == 20) || (id == null || id.length() != 20))) {&lt;br /&gt;&amp;nbsp; // do something&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This if condition is essentially the same as&lt;br /&gt;&lt;br /&gt;// given that record and id are Strings&lt;br /&gt;if (record != null &amp;amp;&amp;amp; true) {&lt;br /&gt;&amp;nbsp; // do something&lt;br /&gt;}&lt;br /&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/7362175506419777516-7030679179194099173?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/7030679179194099173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2011/09/what-happens-to-code-without-thought.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/7030679179194099173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/7030679179194099173'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2011/09/what-happens-to-code-without-thought.html' title='what happens to the code without thought'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-8884567035722002575</id><published>2011-09-13T20:47:00.001-04:00</published><updated>2011-09-13T20:48:35.293-04:00</updated><title type='text'>laws of software defects</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; line-height: 20px;"&gt;Just for fun but feels so true on some days&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Remember these &lt;b&gt;laws of thermodynamics !&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; line-height: 20px;"&gt;Energy can not be created nor destroyed&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; line-height: 20px;"&gt;Energy can be changed from one form to another&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; line-height: 20px;"&gt;In an isolated system the total energy remains the same&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial, Helvetica, sans-serif; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial, Helvetica, sans-serif; line-height: 20px;"&gt;Now replace the word "energy" by "Defects" and you get the &lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial, Helvetica, sans-serif; line-height: 20px;"&gt;&lt;b&gt;laws of software defects !&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Defects can not be created nor destroyed&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Defects can be changed from one form to another&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;In an isolated system the total defects remains the same&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="line-height: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; line-height: 20px;"&gt;heh !&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-8884567035722002575?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/8884567035722002575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2011/09/laws-of-software-defects.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/8884567035722002575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/8884567035722002575'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2011/09/laws-of-software-defects.html' title='laws of software defects'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-214226975837332462</id><published>2011-08-24T10:01:00.000-04:00</published><updated>2011-08-24T10:01:40.974-04:00</updated><title type='text'>Organizing unit tests</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I have been using a different approach to organizing the unit tests and this have turned out to be very effective. Worth sharing.&lt;br /&gt;&lt;br /&gt;So if we have a class that looks like:&lt;br /&gt;public class AccountService {&lt;br /&gt;&amp;nbsp; public void getAllAccounts() { ... }&lt;br /&gt;&amp;nbsp; public void createAccount() { ... }&lt;br /&gt;&amp;nbsp; public void removeAccount() { ... }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;For such a class we would traditionally have a unit test class called AccountServiceTest and all the test cases for all methods mentioned above. We would also have a bunch of global variables in the Test class and a setup (@Before) method.&lt;br /&gt;&lt;br /&gt;My different approach involves creating a unit test class for each method rather than just one test class. So now we would have three classes:&lt;br /&gt;public class AccountService_getAllAccounts_Test {}&lt;br /&gt;public class AccountService_createAccount_Test {}&lt;br /&gt;public class AccountService_removeAccount_Test {}&lt;br /&gt;&lt;br /&gt;Generalizing it the unit test class name should be:&lt;br /&gt;&amp;lt;&amp;lt;class under test&amp;gt;&amp;gt;_&amp;lt;&amp;lt;method under test&amp;gt;&amp;gt;_Test.java&lt;br /&gt;&lt;br /&gt;Each class would have test cases for only the method referenced in the file name.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;So how is this approach effective?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;u&gt;SRP - Single Responsibility Principle - is restored&lt;/u&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;In the traditional way the SRP principle is violated with the setup method as it is now common to all the test cases for all methods for the class under test. The setup has responsibilities to setup the objects and data for all the test methods for all methods in a class. Even the Test class has multiple responsibilities to test all methods in there. With the new approach every test class has responsibility to test only one single method under test.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;u&gt;"Look and Feel" of unit test cases&lt;/u&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;This is more of a perception thing but it works. Say if every method under test can have 5 unit test cases, in the above example having a single test case class means we already have 15 methods in there. When a developer looks at a single class with that had large number of methods with a single setup method that looked cryptic and they were less likely to update any unit test cases or even add more tests to them. When the classes were&amp;nbsp;separated&amp;nbsp;the "look and feel" of the test cases improved developers are now willing to and able to extend existing code base by adding new test cases.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;What are the side effects of this approach?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Popular plugins like moreunit do not work anymore&lt;/li&gt;&lt;li&gt;Proliferation of Test classes may be something some developers may not like at first.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Let me know what you think !!!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-214226975837332462?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/214226975837332462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2011/08/organizing-unit-tests.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/214226975837332462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/214226975837332462'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2011/08/organizing-unit-tests.html' title='Organizing unit tests'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-751869022929546910</id><published>2011-07-25T13:16:00.001-04:00</published><updated>2011-07-25T13:17:19.630-04:00</updated><title type='text'>TDD and Technical Debt</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;So whats the relation between Test Driven Development and Technical Debt?&lt;br /&gt;&lt;div&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Technical Debt is a term inspired from Financial Debt that people fall into&lt;/li&gt;&lt;li&gt;People fall into Financial Debt when the spending to earning ratio gets out of order, spending more than money earned.&lt;/li&gt;&lt;li&gt;In most cases spending more than limit is because the concept of monthly finance budgets is lacking or not enforced.&lt;/li&gt;&lt;li&gt;The monthly budget that is setup at the start of the month or year is like writing unit test case. Then living the month by the budget is like writing exactly the code needed for the test to pass.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Hey -- so just like in real lives lack of Test Driven Development or not enforcing it does cause more Technical Debt.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-751869022929546910?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/751869022929546910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2011/07/tdd-and-technical-debt.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/751869022929546910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/751869022929546910'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2011/07/tdd-and-technical-debt.html' title='TDD and Technical Debt'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-3087874349189770334</id><published>2011-07-06T08:49:00.001-04:00</published><updated>2011-07-06T08:51:49.226-04:00</updated><title type='text'>moving to github</title><content type='html'>I am moving all my code from presentations / pet projects to github --&amp;nbsp;&lt;a href="https://github.com/daveayan"&gt;http://github.com/daveayan&lt;/a&gt;&lt;br /&gt;So far I have migrated 3 projects but more are coming. So far this is what I have:&lt;br /&gt;&lt;br /&gt;- Google App Engine Presentation I did in April 2010&lt;br /&gt;- Maven in Polyglot space presentation from Columbus Polyglot user group (03/2011) and QSI Tech Lunch (05/2011)&lt;br /&gt;- My pet project rjson that is a core piece for my legacy code testing project (coming soon on github)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-3087874349189770334?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/3087874349189770334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2011/07/moving-to-github.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/3087874349189770334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/3087874349189770334'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2011/07/moving-to-github.html' title='moving to github'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-5662913853479595057</id><published>2011-07-05T11:47:00.001-04:00</published><updated>2011-07-05T11:47:44.753-04:00</updated><title type='text'>Need to start blogging again</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;It has been so long. I need to start blogging again. More stuff coming here.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-5662913853479595057?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/5662913853479595057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2011/07/need-to-start-blogging-again.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/5662913853479595057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/5662913853479595057'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2011/07/need-to-start-blogging-again.html' title='Need to start blogging again'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-2483818635573631266</id><published>2010-02-13T10:49:00.000-05:00</published><updated>2010-02-13T10:49:33.356-05:00</updated><title type='text'>Why do we need unit tests?</title><content type='html'>Alright ... the &lt;a href="http://daveayan.blogspot.com/2010/01/tdd-analogy.html"&gt;TDD &amp;amp; CI analogy&lt;/a&gt; is good. Makes sense the way it is described. But how would you justify spending time and money on writing unit tests when you are under tight budget schedules. Why would you even need unit testing when we have a v good QA and Testing team and as good processes in place? This is an often asked question. Here is what I think.&lt;br /&gt;&lt;br /&gt;Unit tests are not meant to rule out the need for QA / Testing. Unit testing is not even meant to complement QA / Testing, although they would help significantly reduce the burden on QA team. They are there for the developers. Let me give you an example - but first, put on your developer caps. I have a BaseDao class that has a query method on it like this:&lt;br /&gt;&lt;br /&gt;public List&amp;lt;Object&amp;gt; query(String sql)&lt;br /&gt;&lt;br /&gt;The method takes a SQL query as input and returns back a list of objects mapped from the query result set. The more important part is that the method returns a null back if no records were found in database. Now I have atleast 20 DAO's that extend this BaseDao and use this query method atleast 100 times. &lt;br /&gt;&lt;br /&gt;Now in all good mind and after lot of consideration it was decided that the query method in the BaseDao will have to return a empty list (new ArrayList&amp;lt;Object&amp;gt;()) back instead of null if no records were found in database. Sounds like a easy change, but now what happens to all the 100 methods out there using this method? What happens to all those if conditions with null checks after the query method? For example: One of the DAO's has these lines of code that will break for sure.&lt;br /&gt;&lt;br /&gt;List&amp;lt;Object&amp;gt; l = query("SELECT * FROM PERSON")&lt;br /&gt;if(l == null)&lt;br /&gt;&amp;nbsp; return false;&lt;br /&gt;else&lt;br /&gt;&amp;nbsp;return true;&lt;br /&gt;&lt;br /&gt;How does a QA / Testing team plan to test this change in the system? This would become even interesting if there is a DAO method among these 100 that will be called only rarely in certain special data combinations only. Does the testing / QA team know what that method is and when is it called? The real idea with unit testing is to help the developers. If we have all these 20 DAO's and 100 methods all tested well it will be easy to find where the code would break when such a change takes place.&lt;br /&gt;&lt;br /&gt;Another important point is that these lines of code continue to live as long as the system lives. The QA / Testing team moves on and the next time there is a new feature development / major bug fix the same QA team may not be there even. Even the same developers wont be there working on the system. Now consider this scenario - as a new developer you are put on such a project and you have to fix a defect. This method you need to fix is being used by 10 different classes from web and batch projects. How can you update this method confidently without breaking the functionality offered by all the other 10 classes? And you need to think of this even before the next QA / Testing team comes in to start testing the system.&lt;br /&gt;&lt;br /&gt;Of course for developers, just like any other technology, there is a learning curve and it can be difficult. Specially with tight deadlines and with agile processes you may not get a lot of time to learn TDD. But who said life would be easy. Once the learning curve is conquered things become easy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-2483818635573631266?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/2483818635573631266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2010/02/why-do-we-need-unit-tests.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/2483818635573631266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/2483818635573631266'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2010/02/why-do-we-need-unit-tests.html' title='Why do we need unit tests?'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-2365833105669122208</id><published>2010-01-26T22:50:00.002-05:00</published><updated>2010-01-27T08:29:45.209-05:00</updated><title type='text'>TDD and CI - An Analogy</title><content type='html'>More often unit tests are considered to be time consumers, lines of code that add no real value to the core working of the system. Business Requirements have a first class place in the project as well as the "real" code but unit tests do not get such a place as often as they deserve.&lt;br /&gt;&lt;br /&gt;Lately in my work I have to do lot of convincing and mentoring developers on TDD &amp;amp; CI and encourage them to write more unit tests. To convince and to justify the need for TDD and more unit tests and CI I came up with this analogy.&lt;br /&gt;&lt;br /&gt;In my analogy consider the lines of "real" code that do business logic or UI logic or data access logic as the people in society. As there are good and bad elements of the society so are good and bad code modules and lines of code. As people we tend to take different roles and actions in day to day life. We drive, we go out to eat, we take a walk in park, we shop. So do these lines of code in the system take different contexts. The same method in a DAO or Service class may be used by a Web frontend or by a batch job. Some of the domain objects may be used by the UI in a certain way and persisted in database or other remote stores.&lt;br /&gt;&lt;br /&gt;Now lets talk about the business requirements. To keep people behave well and in sanity laws are formed. Some are explicit - such as the driving laws and some are implicit - well, we don't toss burgers in a restaurants, its bad manners. The business requirements for a system are such laws that the code needs to adhere to. The code must satisfy the requirements.&lt;br /&gt;&lt;br /&gt;Here is the fun part - In the society we have cops and agents that enforce these laws on the society. What do we have in software applications that enforce these requirements? This is where TDD, CI and even BDD comes in. It enforces that our code behaves well. If a line of code breaks a unit test it means it violated the law (the business requirements) in some way and this line of code must of brought to justice. Without unit tests we can only assume that the lines of code will behave, but what happens when a change in requirement comes up and we change the code without enforcing the new and old laws?&lt;br /&gt;&lt;br /&gt;There can be an argument that functional testing is a good way to enforce the requirements. This can be true to a certain extent. The part of this that worries me are two things. One is that functional testing is performed at specific milestones in the project cycle. The lines of code live on after this milestone has passed and often times these lines of code change without anymore functional testing. Will it help if the cops come in a city only once a month and assumes that things are well in the city rest of the days? The second trouble is that it is not guaranteed that functional testing will cover all lines of code. Well good functional tests would at some point cover lines of code but where is the metric?&lt;br /&gt;&lt;br /&gt;The point to be taken here is that write unit tests - these are the cops of your code. If some other developer comes and changes these lines of code and unknowingly causes them to be bad elements of the software society the cops (unit tests) will catch em.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-2365833105669122208?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/2365833105669122208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2010/01/tdd-analogy.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/2365833105669122208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/2365833105669122208'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2010/01/tdd-analogy.html' title='TDD and CI - An Analogy'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-9096269544946860939</id><published>2010-01-20T14:02:00.000-05:00</published><updated>2010-01-20T14:02:58.314-05:00</updated><title type='text'>Long Time !!!</title><content type='html'>It has been quite a busy time the last 4 months. My little baby girl was born on Jan 11 and that marks a major milestone in the life. As the sleepless nights settle I would start blogging more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-9096269544946860939?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/9096269544946860939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2010/01/long-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/9096269544946860939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/9096269544946860939'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2010/01/long-time.html' title='Long Time !!!'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-4629781218361979757</id><published>2009-09-25T16:13:00.002-04:00</published><updated>2009-09-25T16:13:24.256-04:00</updated><title type='text'>whoNeedsArchitect</title><content type='html'>http://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf&lt;br /&gt;&lt;br /&gt;My fav quotes from this article --- this is what I often bring up in our lunch conversations with fellow QSI'ers!&lt;br /&gt;&lt;br /&gt;I think that one of an architect’s most important tasks is to remove architecture by finding ways to eliminate&lt;br /&gt;irreversibility in software designs&lt;br /&gt;&lt;br /&gt;Software is not limited by physics, like buildings are. It is limited by imagination, by design, by organization. In&lt;br /&gt;short, it is limited by properties of people, not by properties of the world. “We have met the enemy, and he is us.”&lt;br /&gt;&lt;br /&gt;“Architecture is the decisions that you wish you could get right early in a project.” Why do people feel the&lt;br /&gt;need to get some things right early in the project? The answer, of course, is because&lt;br /&gt;they perceive those things as hard to change. So you might end up defining&lt;br /&gt;architecture as “things that people perceive as hard to change.”&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-4629781218361979757?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/4629781218361979757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/09/whoneedsarchitect.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/4629781218361979757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/4629781218361979757'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/09/whoneedsarchitect.html' title='whoNeedsArchitect'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-3338983161814424411</id><published>2009-09-24T15:23:00.001-04:00</published><updated>2009-09-24T15:24:12.638-04:00</updated><title type='text'>Agile Methodology - Similiar to Creating Shareholder value</title><content type='html'>I have been involved in several projects now that had used Agile methodology for project management or a derivative of this method. In these projects I have assumed several roles - Developer, Team Lead, Designer, Architect and BA in a few cases.&lt;br /&gt;&lt;br /&gt;Something I have realized is Agile method is similar to the notion in public companies - "creating shareholder value". Agile software development has iterations - 2 to 4 weeks long and then we provide improved version of software / product to the client. The client also prioritizes the new features to be developed and / or defects to be fixed. This is similar to what public companies do - a quarter can be considered as an iteration at the end of which the money matters are shared with the shareholders and&amp;nbsp; a new iteration begins. The profits the company makes is the product the shareholders are concerned with. The shareholders directly or indirectly have a say in how the company would improve profits or make new money (similar to client deciding on new features).&lt;br /&gt;&lt;br /&gt;This idea of shareholders value creation is dangerous as well. The company tends to focus on short term gains and loose sight on long term plans. A similar thing may happen in Agile projects where lack of proper documentation, design and architecture due to short term goals (short iterations) may plague a system in long run. Of course there are exceptions - there are well run Agile projects and there are well run public companies that make profits. &lt;br /&gt;&lt;br /&gt;Just a thought !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-3338983161814424411?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/3338983161814424411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/09/agile-methodology-similiar-to.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/3338983161814424411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/3338983161814424411'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/09/agile-methodology-similiar-to.html' title='Agile Methodology - Similiar to Creating Shareholder value'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-885775699996059776</id><published>2009-09-23T10:12:00.002-04:00</published><updated>2009-09-23T10:15:15.506-04:00</updated><title type='text'>ERROR in Eclipse - Access restriction: Class is not accessible due to restriction on required library</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_tTQ_ovvlmcs/SrotJPtLcvI/AAAAAAAABzI/6VGhXd69dnM/s1600-h/eclipseError.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_tTQ_ovvlmcs/SrotJPtLcvI/AAAAAAAABzI/6VGhXd69dnM/s400/eclipseError.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;I get this error in Eclipse when I use the @PostConstruct and / or @PreDestroy annotations. To get rid of this error in Eclipse change the "Forbidden reference (access rules)" level to Warning or Ignore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-885775699996059776?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/885775699996059776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/09/error-in-eclipse-access-restriction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/885775699996059776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/885775699996059776'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/09/error-in-eclipse-access-restriction.html' title='ERROR in Eclipse - Access restriction: Class is not accessible due to restriction on required library'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_tTQ_ovvlmcs/SrotJPtLcvI/AAAAAAAABzI/6VGhXd69dnM/s72-c/eclipseError.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-6056681610121600279</id><published>2009-09-17T11:26:00.001-04:00</published><updated>2009-09-17T11:27:31.455-04:00</updated><title type='text'>B2B - Back to Basics Series</title><content type='html'>I have conducted a dozen or more interviews now in my career so far for different roles on projects - Developer, Sr. Developer and Team Lead. I make it a point to ask about OOAD and Design patterns in all these interviews. However in many cases than I would have expected the candidate was not able to explain the a OOAD principle (like SRP, DRY etc) or design pattern. I think understanding of these core concepts is much more important than the knowledge every API.&lt;br /&gt;&lt;br /&gt;I am going to start writing this B2B series here on my blog. In this series I will write about the fundamentals, basics of Computer Science, Software Engineering, OOAD etc that we learned many years back in school and still use in our professional life. However lot of times we forget lot of these things while dealing with the day to day work. Hopefully someone other than me finds this helpful&lt;br /&gt;&lt;br /&gt;Happy Coding !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-6056681610121600279?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/6056681610121600279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/09/b2b-back-to-basics-series.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/6056681610121600279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/6056681610121600279'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/09/b2b-back-to-basics-series.html' title='B2B - Back to Basics Series'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-2266457034689067078</id><published>2009-09-11T16:25:00.002-04:00</published><updated>2009-09-11T16:25:50.231-04:00</updated><title type='text'>Apache's 11 technologies that changed computing in last 10 years</title><content type='html'>I found a nice article on eWeek.com about the 11 technologies that changed computing over the last decade and to technologies that would probably be dominant in the next decade.&lt;br /&gt;http://www.eweek.com/c/a/Application-Development/11-Apache-Technologies-that-Have-Changed-Computing-in-the-Last-10-Years-469693/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-2266457034689067078?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/2266457034689067078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/09/apaches-11-technologies-that-changed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/2266457034689067078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/2266457034689067078'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/09/apaches-11-technologies-that-changed.html' title='Apache&apos;s 11 technologies that changed computing in last 10 years'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-3431459150975721496</id><published>2009-09-09T18:16:00.003-04:00</published><updated>2009-09-09T18:29:52.178-04:00</updated><title type='text'>Moved to blogspot</title><content type='html'>I have moved my blog to from www.daveayan.com/blog to this space. &lt;br /&gt;Blogspot has a lot more features obviously than the out of box liferay blog. Please update the book marks and add some comments or provide your reactions.&lt;br /&gt;I will be shutting down my site (http://www.daveayan.com) in a couple of months as well and try to come up with another, better looking site.&lt;br /&gt;Thanks&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-3431459150975721496?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/3431459150975721496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/09/moved-to-blogspot.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/3431459150975721496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/3431459150975721496'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/09/moved-to-blogspot.html' title='Moved to blogspot'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-4412654414941832742</id><published>2009-08-06T16:02:00.000-04:00</published><updated>2009-09-09T17:55:23.275-04:00</updated><title type='text'>TestNG + EasyMock - OutOfMemoryException</title><content type='html'>&lt;div class="entry-body"&gt; As much as I liked TestNG and Easy mock a few months back I am starting to hate it as well. We have a suite of around 500 unit tests (maybe just a bit less than that) and we get OutOfMemoryException. We get these running locally and on running on Hudson CI. On further research I found these two links that explain this problem. BTW we run with JAVAOPTS -Xmx128m. Increasing the memory does not help, I dont know why.&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://publicobject.com/2007/01/easymock-and-outofmemoryerror-permgen.html"&gt;EasyMock OutOfMemoryException&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://jira.opensymphony.com/browse/TESTNG-283"&gt;&lt;span style="font-size: small;"&gt;TestNG OutOfMemoryException&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Too bad the TestNG defect is open for almost 10 months and not fixed.&lt;br /&gt;&lt;br /&gt;For now we segmented the unit tests into two groups - unit1 and unit2. This is working well, however I anticipate issues now with the corbertura reports that we want out of CI. Also, next time we hit the wall on unit2 we will have to start a new group - unit3 ... Arrrr !&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/7362175506419777516-4412654414941832742?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/4412654414941832742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/08/testng-easymock-outofmemoryexception.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/4412654414941832742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/4412654414941832742'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/08/testng-easymock-outofmemoryexception.html' title='TestNG + EasyMock - OutOfMemoryException'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-7989023872698492421</id><published>2009-07-23T16:52:00.000-04:00</published><updated>2009-09-09T17:54:39.492-04:00</updated><title type='text'>Up Next - Spring Certification</title><content type='html'>&lt;div class="entry-body"&gt; I would start preparing for Spring Certification starting this week. I would like to try and get the exam done in next three months.&lt;br /&gt;It is an extensive exam with no proper study notes or mock exams and need 76% to pass. This will be fun.&lt;br /&gt;Go Spring !&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/7362175506419777516-7989023872698492421?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/7989023872698492421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/07/up-next-spring-certification.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/7989023872698492421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/7989023872698492421'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/07/up-next-spring-certification.html' title='Up Next - Spring Certification'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-9088834303372718027</id><published>2009-07-15T03:26:00.000-04:00</published><updated>2009-09-09T17:53:51.721-04:00</updated><title type='text'>Liferay book by Jonas Yuan</title><content type='html'>&lt;div class="entry-body"&gt; I got an oppurtunity to review the new book from Packt publishing - &lt;a href="http://www.packtpub.com/liferay-portal-5-2-systems-development/book"&gt;Liferay Portal 5.2 Systems Development by Jonas Yuan&lt;/a&gt;.&lt;br /&gt;&amp;nbsp;A few words about this book.&lt;br /&gt;This is a nice begineer to intermediate to semi-expert level book. The book begins with a nice overview of the liferay portal system and WCM and introduction to JSR 286 portlets. The author then gradually raises the bar with more details on how to develop portlets, manage pages, and customizing the portal.&lt;br /&gt;&lt;br /&gt;My favorite chapters of the book were the chapters on Social Office, Staging &amp;amp; Publishing and using common api. &lt;br /&gt;Actually the social office chapter was quite a surprise. The author has given good treatment to the topics explaining them in sufficiant detail for a beginner and at the same time making it relevant to the advanced users. The author has also explained the events and hooks very well.&lt;br /&gt;&lt;br /&gt;One more thing that I liked about the book was that the author explains how the code works out of the box and then how to customize it. I liked the "Whats happening?" sections of the book &lt;br /&gt;&lt;br /&gt;One of the things I do not like is that there are a few sections in the book like "Using SCORM" that do not talk about the topic in detail. This raised the expectations but then quickly brought them down looking at just a few lines of explanation. However there were not a whole lot of such topics.&lt;br /&gt;&lt;br /&gt;All in all I would recommend this book to anyone who wants to get started with Liferay and get a good handle on the system.&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/7362175506419777516-9088834303372718027?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/9088834303372718027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/07/liferay-book-by-jonas-yuan.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/9088834303372718027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/9088834303372718027'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/07/liferay-book-by-jonas-yuan.html' title='Liferay book by Jonas Yuan'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-7758628045490096653</id><published>2009-07-02T22:10:00.000-04:00</published><updated>2009-09-09T17:52:43.187-04:00</updated><title type='text'>Hibernate - Annotations vs XML</title><content type='html'>&lt;div class="entry-body"&gt; Recently I was involved in a healthy discussion at my work on using Annotations for Entities. We have a Java web application with Spring MVC, Hibernate and Entities with hbm.xml files. Entities with XML work well however there is an interest in the team to use annotations. Here are my thoughts - pros and cons of each approach. I have used both approaches, however I like using hbm xml files over annotations for entities. That said I do like the use of annotations in Spring MVC, TestNG, or on service layers to mark transactions.&lt;br /&gt;Why stick to hbm.xml files?&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Well, if we think back to days before hibernate, when we used JDBC we had the problem where the SQL code was embedded in Java classes, thus causing many maintainability problems. With Hibernate xml files we got a clean way to keep them seperate - the entity pojo's were free of the sql clutter. With Annotations in Entites we are going back to that same model !!!&lt;/li&gt;&lt;li&gt;Entities are cross cutting code - they are used in all layers, starting from DB all the way to JSP in many cases. Cross cutting logic should not have code that looks more biased to a certain layer.&lt;/li&gt;&lt;li&gt;If you are working in a team that is split into Backend Dev team and frontend dev team then the front end team does not need to see all those annotations. Well what would be the argument if frontend team wants to add their own View specific annotations to entities for ease of use?&lt;/li&gt;&lt;li&gt;If you have a code base that takes long time to compile and build (fortunately for us it takes a few seconds), having an hbm xml file is better. No need to recompile.&lt;/li&gt;&lt;li&gt;If you have to migrate from xml to annotations on an existing ongoing project what is cost justification to use annotations?&lt;/li&gt;&lt;/ol&gt;Why move to Annotations?&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Well, as my collegue at work explains, it improves maintainability by having only one file&lt;/li&gt;&lt;li&gt;As &lt;a href="http://paulmazak.blogspot.com/"&gt;Paul Mazak&lt;/a&gt; would say, the mantra is "less code characters", helps in long run.&lt;/li&gt;&lt;li&gt;Annotations are cool ! Learn some new stuff&lt;/li&gt;&lt;/ol&gt;Well in the end it is a religious debate and fun as well. I will stick to hbm xml so far, playing with Annotations as I get an oppurtunity for new development.&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/7362175506419777516-7758628045490096653?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/7758628045490096653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/07/hibernate-annotations-vs-xml.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/7758628045490096653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/7758628045490096653'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/07/hibernate-annotations-vs-xml.html' title='Hibernate - Annotations vs XML'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-9022031686704079758</id><published>2009-06-30T04:18:00.000-04:00</published><updated>2009-09-09T17:51:56.640-04:00</updated><title type='text'>PMP Exam</title><content type='html'>&lt;div class="entry-body"&gt; Passed my PMP exam today finally - what a ride it was.&lt;br /&gt;&lt;br /&gt;It was tough, the real exam questions were very different from the mock exams I had been preparing with, in terms of the style, definitions used etc. There were a few new terms as well, that I never read of before.&lt;br /&gt;&lt;br /&gt;Luckily the time was more than enough. I was able to run through all the 200 questions in 2 hours, 30 mins. For some of the questions I did take a lot of time to think as well. At the end I had around 25 questions marked for review and 4 not answered. The next 90 mins were enough to review and complete them all. I still had 23 mins remaining before I clicked "End Exam".&lt;br /&gt;&lt;br /&gt;After I clicked "End Exam" I was asked for an optional survey. I wanted to fill the survey in good faith but who wants to wait 10 more mins to see a pass / fail score? They should have asked for the survey after showing the score.&lt;br /&gt;&lt;br /&gt;Anyways, after the exam we went and watched a movie and had nice dinner at Chipotle. End of a saga and begining of a new one - whats next?&lt;br /&gt;&lt;br /&gt;I want to take a bit of a break and then go for Sun Certified Java Web Services Developer or Sun Certified Enterprise Architect. Not sure yet which one to pick. And of course not to forget - keep an eye on those PDU's needed to keep PMP credential.&lt;br /&gt;&lt;br /&gt;Caio&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/7362175506419777516-9022031686704079758?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/9022031686704079758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/06/pmp-exam.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/9022031686704079758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/9022031686704079758'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/06/pmp-exam.html' title='PMP Exam'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-8354955766069123437</id><published>2009-06-11T23:33:00.000-04:00</published><updated>2009-09-09T17:50:42.178-04:00</updated><title type='text'>No getters and setters</title><content type='html'>To design good software working with Domain language and making it part of Object's is very important. One way to get this, I think is to get away from the "get" and "set" polluted code.&lt;br /&gt;&lt;br /&gt;consider this code:&lt;br /&gt;&lt;br /&gt;public class Person {&lt;br /&gt;public String getName() {&lt;br /&gt;return name;&lt;br /&gt;}&lt;br /&gt;public void setName(String name) {&lt;br /&gt;this.name = name;&lt;br /&gt;}&lt;br /&gt;private String name;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;We would end up using this code in its simplest form like this:&lt;br /&gt;Person theOne = new Person();&lt;br /&gt;theOne.setName("Neo Anderson");&lt;br /&gt;System.out.println(theOne.getName());&lt;br /&gt;&lt;br /&gt;Instead we can easily modify this code to make it more "domain driven"&lt;br /&gt;public class Person {&lt;br /&gt;public String name() {&lt;br /&gt;return name;&lt;br /&gt;}&lt;br /&gt;public void nameIs(String name) {&lt;br /&gt;this.name = name;&lt;br /&gt;}&lt;br /&gt;private String name;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Our new code would be:&lt;br /&gt;Person theOne = new Person();&lt;br /&gt;theOne.nameIs("Neo Anderson");&lt;br /&gt;System.out.println(theOne.name());&lt;br /&gt;&lt;br /&gt;you can tell this is more english like code as well. You can easily read line 2 in the code there as "The one's name is Neo Anderson". You can easily read line 3 as "Print the one's name"&lt;br /&gt;&lt;br /&gt;I believe in this approach. The easiest way implement this approach is:&lt;br /&gt;1. If you have a private variable names "varName", your getter method would be named "varName"&lt;br /&gt;2. The setter method would be named "varNameIs" .... append with an Is&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-8354955766069123437?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/8354955766069123437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/06/no-getters-and-setters.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/8354955766069123437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/8354955766069123437'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/06/no-getters-and-setters.html' title='No getters and setters'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-5745726689262226217</id><published>2009-06-10T16:00:00.000-04:00</published><updated>2009-09-09T17:49:55.831-04:00</updated><title type='text'>Eclipse: Run a single unit test method</title><content type='html'>In eclipse if we have a junit test class with several methods in it we can run a single method test. Select the method name, right click and run as junit test. The setup and teardown are run well also.&lt;br /&gt;&lt;br /&gt;This technique, however, does not work with testng tests. Eclipse will run all the test methods.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-5745726689262226217?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/5745726689262226217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/06/eclipse-run-single-unit-test-method.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/5745726689262226217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/5745726689262226217'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/06/eclipse-run-single-unit-test-method.html' title='Eclipse: Run a single unit test method'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-4146017752991638958</id><published>2009-06-09T17:06:00.000-04:00</published><updated>2009-09-09T17:49:04.617-04:00</updated><title type='text'>TestNG and EasyMock</title><content type='html'>&lt;div class="entry-body"&gt; Unit Testing is pretty cool once you get a hang of it and have the right tools to play with it. I started using TestNG and EasyMock recently. TestNG has this neat feature that allows us to partition the tests as unit, integration etc. EasyMock is not as easy but not bad.&lt;br /&gt;&lt;br /&gt;Some problems I faced with unit testing were that sometimes a single unit test would run fine when they run from eclipse, but when the suite is run on CI they would fail. Most of the times the problem was that a easymock object was created and reused in its stale state&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/7362175506419777516-4146017752991638958?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/4146017752991638958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/06/testng-and-easymock.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/4146017752991638958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/4146017752991638958'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/06/testng-and-easymock.html' title='TestNG and EasyMock'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-4755323329435137047</id><published>2009-03-28T00:01:00.000-04:00</published><updated>2009-09-09T17:48:04.572-04:00</updated><title type='text'>Liferay 5.2.2</title><content type='html'>&lt;div class="entry-body"&gt;&lt;div class="entry-body"&gt;Liferay 5.2.2 was released in the end of Feb 09. Since then I have been playing and comparing it with 5.1.2. Here are the few things I think:&lt;br /&gt;&lt;b&gt;Pros:&lt;/b&gt;&lt;br /&gt;- Journal Content renamed to a more appropriate Web Content&lt;br /&gt;- More support for google adsense and google gadgets&lt;br /&gt;- Nicer and more intuitive looking Control Panel for all the admin portlets&lt;br /&gt;- Database configuration is now using portal-ext.properties instead of ROOT.xml&lt;br /&gt;- The deploy and data directories are now not in user home. Instead they are at the same level as tomcat server itself&lt;br /&gt;- There is just one built in / prepackaged compary - 7cogs instead of 11 Liferay companies 5.1.2 had&lt;br /&gt;&lt;b&gt;Cons:&lt;/b&gt;&lt;br /&gt;- Larger zip file with tomcat 5.5 because it includes JRE now. (Well this will be a pro as well because now we dont have to worry about installing JDK on a machine that might not have root access)&lt;br /&gt;- Build and startup takes a long time - as such it is a much heavy application now.&lt;br /&gt;The cons list is not a big one and the pros are pretty good. I think however I will still stick with 5.1.2 and watch out for 5.3. The important change I would like to see is 5.3 being lighter weight and without its own JRE&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-4755323329435137047?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/4755323329435137047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/03/liferay-522.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/4755323329435137047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/4755323329435137047'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/03/liferay-522.html' title='Liferay 5.2.2'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7362175506419777516.post-2434671203467940896</id><published>2009-03-21T20:22:00.000-04:00</published><updated>2009-09-09T17:46:53.209-04:00</updated><title type='text'>Welcome</title><content type='html'>Welcome&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7362175506419777516-2434671203467940896?l=daveayan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://daveayan.blogspot.com/feeds/2434671203467940896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://daveayan.blogspot.com/2009/03/welcome.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/2434671203467940896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7362175506419777516/posts/default/2434671203467940896'/><link rel='alternate' type='text/html' href='http://daveayan.blogspot.com/2009/03/welcome.html' title='Welcome'/><author><name>Ayan dave</name><uri>http://www.blogger.com/profile/01115063585587419505</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-XQxwdPCIC5I/TiVvYlXvV2I/AAAAAAAAEh4/uyB3APU2K_c/s1600/0aaf2f3b7a0c162d202aa7827390394b.png'/></author><thr:total>0</thr:total></entry></feed>
