<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUIDRnw7eip7ImA9WhVUFEQ.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607</id><updated>2012-05-19T22:59:37.202-07:00</updated><category term="Unit testing" /><category term="technology" /><category term="2009" /><category term="solution" /><category term="tools" /><category term="SQL" /><category term="mediocre" /><category term="java cracker" /><category term="development" /><category term="password recovery" /><category term="Criteria.addOrder test" /><category term="Hibernate" /><category term="getAll" /><category term="ThoughtWorks" /><category term="Oracle" /><category term="java pdf" /><category term="Validator" /><category term="contestants" /><category term="Order.asc. Order" /><category term="test" /><category term="FilterDef" /><category term="wall" /><category term="annotation filter" /><category term="physical" /><category term="ALM" /><category term="setup data" /><category term="agile" /><category term="Google code jam 2009" /><category term="Google code jam" /><category term="issues" /><category term="tips" /><category term="List validation" /><category term="pdf password" /><category term="out of the box" /><category term="java brute force" /><category term="group" /><category term="sort" /><category term="rank()" /><category term="latest date" /><category term="recommendation" /><category term="Library" /><category term="highest record" /><category term="hybrid" /><category term="brute force" /><category term="experience" /><category term="quickly" /><category term="card" /><category term="List Data" /><category term="brute" /><category term="force" /><category term="Unit testing repository DAO classes" /><category term="india" /><category term="physical wall" /><category term="Weblogic ant redeploy SUBST" /><category term="Google" /><category term="pdf" /><category term="time" /><category term="Collection data" /><category term="builder" /><category term="Filter" /><category term="Consultant" /><category term="no setter" /><category term="no constructor" /><category term="Spring MVC" /><category term="dynamic list" /><category term="Validation" /><category term="physical card wall" /><category term="pattern" /><category term="LazyList" /><category term="rank" /><category term="statistics" /><category term="china" /><category term="Criteria" /><category term="latest record" /><category term="password" /><category term="OneToMany" /><category term="brute force algorithm" /><category term="Books" /><title>Venky - Tech space</title><subtitle type="html">"Venkatesh Nannan" - Working as Application Developer in ThoughtWorks, Chennai, India.
This blog provides me a platform to share and discuss some interesting things we face as developers.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.nvenky.in/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/" /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Venky-TechSpace" /><feedburner:info uri="venky-techspace" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><entry gd:etag="W/&quot;AkANQH06fSp7ImA9WhVWE00.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607.post-2244709964037398741</id><published>2012-04-24T16:05:00.001-07:00</published><updated>2012-04-24T16:06:31.315-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-24T16:06:31.315-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="out of the box" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="time" /><category scheme="http://www.blogger.com/atom/ns#" term="solution" /><category scheme="http://www.blogger.com/atom/ns#" term="mediocre" /><category scheme="http://www.blogger.com/atom/ns#" term="experience" /><title>Are you settling for mediocre solution?</title><content type="html">"This is just an Intranet application"&lt;br /&gt;
"People would hardly use this feature"&lt;br /&gt;
"There will be only less than 100 users for this site" &lt;br /&gt;
How many times have you heard such arguments during discussions. I have heard similar comments many times and have also made such comments myself. I have just realized that I had been convincing myself with these arguments to settle with mediocre solution for some of the "interesting" problems. &lt;br /&gt;
&lt;br /&gt;
There is one particular requirement in my recent project where I faced similar situation.&lt;br /&gt;
&lt;h4&gt;



Initial approach: &lt;/h4&gt;
We came up with some sort of a "conventional" solution to address a requirement. This approach was not very clean as it had couple of issues &lt;br /&gt;
- We were violating the general rule of the site to support browser back/forward actions&lt;br /&gt;
- We were using URL query param to hide/show few links&lt;br /&gt;
Even though we had these issues, I was convinced with the solution and wanted to go ahead with that. I had "strong" reasons (read as excuses :) ) for the same.&lt;br /&gt;
&lt;h4&gt;



Reasons (Excuses):&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;This application doesn't deserve "advanced/complex" features / This requirement is unwanted: &lt;/b&gt;This project has only 100 end users. We don't have to spend much time on building this "advanced/complex" features just for these users. I am not convinced yet that this requirement is needed.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;Just enough design/This is an exceptional case:&lt;/b&gt; The conventional solution for this requirement works and we don't have to spend much time on this. We can violate the back/forward support for this requirement as it is an exception case&lt;b&gt;.&lt;/b&gt;&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;Story points: &lt;/b&gt;It is only a 2 (S/something) pointer and we can't spend much time on this story. &lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;This scenario would never happen:&lt;/b&gt; NO user would be performing these sequence of steps (Even though I don't have any metrics to support this claim)&lt;/li&gt;
&lt;br /&gt;
&lt;/ol&gt;
&lt;b&gt;But,&lt;/b&gt;&lt;br /&gt;
Luckily in my project, all mediocre/conventional solutions were challenged and the team was not convinced with my reasons. We had to come up with a better solution.&lt;br /&gt;
&lt;br /&gt;
When we spent a little more time without thinking about excuses, we were able to come up with a better/cleaner solution. This out of the box solution met all our requirements and also made us feel good about. All it required was that little push from others and a little time to overcome the mediocre solution mode.&lt;br /&gt;
&lt;br /&gt;
Now when I look back at my "strong reasons", everything seem to be flawed:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;I could not see the difference between unwanted feature and differentiators. Without these features (related to usability), our site would end up being mediocre. It would not be able to get more users on to the system.&lt;/li&gt;
&lt;li&gt;Looks like my notion of "Just enough design" also had "taking exceptions" for granted. In this particular case, I had already convinced myself that this requirement can take exceptions (like not supporting browser forward/backward) without exploring some more possibilities.&lt;/li&gt;
&lt;li&gt;Story points are just a metrics to track progress and it should not be used for killing innovation/thinking out of the box.&lt;/li&gt;
&lt;li&gt;I think, I had made up the "scenario would never happen" argument to support my "this is an exception" argument. &lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;



Lessons learnt:&lt;/h4&gt;
Mediocre solutions come into existence only by convincing ourselves that it is the right thing to do in THIS&amp;nbsp; case/application. All it needs is a little more time to come up with a better alternative.&lt;br /&gt;
Team members should be constantly challenging each other on mediocre solutions in order to build a great product. It also helps the team to improve their technical and problem solving skills.&lt;br /&gt;
&lt;br /&gt;
Are you coming up with excuses or a better product?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9103875830128984607-2244709964037398741?l=www.nvenky.in' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.nvenky.in/feeds/2244709964037398741/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.nvenky.in/2012/04/are-you-settling-for-mediocre-solution.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/2244709964037398741?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/2244709964037398741?v=2" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/2012/04/are-you-settling-for-mediocre-solution.html" title="Are you settling for mediocre solution?" /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;CEYBQXk-eCp7ImA9WhVWEUQ.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607.post-6339119665881898811</id><published>2012-04-23T07:40:00.002-07:00</published><updated>2012-04-23T07:42:30.750-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-23T07:42:30.750-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="physical" /><category scheme="http://www.blogger.com/atom/ns#" term="physical card wall" /><category scheme="http://www.blogger.com/atom/ns#" term="ALM" /><category scheme="http://www.blogger.com/atom/ns#" term="wall" /><category scheme="http://www.blogger.com/atom/ns#" term="physical wall" /><category scheme="http://www.blogger.com/atom/ns#" term="hybrid" /><category scheme="http://www.blogger.com/atom/ns#" term="issues" /><category scheme="http://www.blogger.com/atom/ns#" term="card" /><title>Physical card wall is injurious to health</title><content type="html">...of the project.&lt;br /&gt;
&lt;br /&gt;
Don't get me wrong, let me finish it. Only if your project uses ALM tools and physical wall at the same time.&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;NOTE: ALM tools - Agile Lifecycle management tools (like Mingle, Version One, etc)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;












Physical Wall Vs ALM tools wall&lt;/h2&gt;
&lt;br /&gt;
We are not getting into this argument right now. By now most of us would have used both and know the pros &amp;amp; cons of each. Personally, I am OK with any one of these.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;












Physical Wall &amp;amp; ALM tools - Hybrid approach&lt;/h2&gt;
&lt;br /&gt;
This is where I have a problem. In most the projects I have worked on, we have used this hybrid model. We would use ALM tools to create story, prioritize and for discussions with client but use physical wall to track the progress of the sprint/iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;












Issues (I faced) in this approach&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;
No single source of truth:&lt;/b&gt; Few things would be up-to-date in physical wall but not on the tool and vice versa. Consider this case - You find that a story card is 'In Dev' lane in physical wall and 'In QA' lane in ALM wall. Does this mean that:
&lt;ul&gt;
&lt;li&gt;Story is 'Dev complete' and moved to 'In QA' by dev in ALM wall but not on Physical wall.&lt;/li&gt;
&lt;li&gt;QA found a bug and moved the story back to 'In Dev' in physical wall but not on ALM.&lt;/li&gt;
&lt;/ul&gt;
We cannot be sure and usually we end up chasing the team members working on the story for "correct status". Is it worth maintaining two walls? &lt;/li&gt;
&lt;br /&gt;
&lt;li&gt; &lt;b&gt;
Duplication of effort:&lt;/b&gt; Duplication is painful even here. Imagine that you just did your team sign up on the physical wall. How motivated would you be to update the exact same information on the ALM tool. So you can't complain the team for not having things in sync.
&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;
 ALM Tool is not a boon anymore but a burden:&lt;/b&gt; In most of the teams I have been, it is a burden for few individuals (like PM, BAs, sometime Devs) to keep the ALM tool in sync with the physical wall. A tool that was supposed to be helping the project becomes a burden.
&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;Invalid metrics:&lt;/b&gt; ALM tools provide lot of useful metrics that can be used to track the project and make some useful decision. Since the tool is not used properly, metrics provided is also invalid.&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;
 Wrong/Incomplete status on the wall:&lt;/b&gt; One of the projects I worked on had distributed team members. The physical wall in offshore would have only the stories that are worked on by offshore team members as it was hard/painful to track the cards worked on by onshore members. This wall was actually projecting wrong state of the project to everyone. It is better not to have such a wall than to have with wrong/incomplete information. (In this case, we stopped having the physical wall)
&lt;/li&gt;
&lt;/ol&gt;
And there are few more...&lt;br /&gt;
&lt;br /&gt;
It is hard to convince everyone and remove the physical wall from a project team that is used to having it.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;





Arguments in favor of Physical wall &lt;/h3&gt;
Here are the few arguments that I have faced in favor of Physical wall:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;I am used to doing signups and track things on Physical Wall&lt;/li&gt;
&lt;li&gt;I prefer to physically feel story cards than rely on software tools.&lt;/li&gt;
&lt;li&gt;Physical wall can promote more collaboration within team.&lt;/li&gt;
&lt;li&gt;I have to click through 100 links to get the information I need in the ALM tool.&lt;/li&gt;
&lt;li&gt;It is easy to refer to physical wall and get any information almost immediately. I don't want to login to ALM tool every time.&lt;/li&gt;
&lt;li&gt;I prefer Physical Wall over ALM tools, it is simple.&lt;/li&gt;
&lt;li&gt;It just takes couple of minutes to sync both tool and physical wall. Why do you bother?&lt;/li&gt;
&lt;li&gt;Physical wall is an information radiator. Anyone walking-by can know the status of the project&lt;/li&gt;
&lt;li&gt;Last but not the least - There are other major issues in our project. Can we look at this later? - :( YOU CAN NEVER FIND AN ANSWER TO THIS. &lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;







My take &lt;/h3&gt;
I could find convincing reply to the above questions except the last two:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Reality:&lt;/b&gt; ALM tool has become a necessity in most of the projects because of the benefits and flexibility it brings in. Also, physical wall is not an option for a distributed team. It is the reality and you can't escape from ALM tools in many cases.&amp;nbsp;&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;Single source of truth:&lt;/b&gt; As discussed in the issues section, we all love to have single source of truth than to end up with conflicting information.&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;Personal preference is not an option:&lt;/b&gt; I can't introduce a new language or a framework into a project since I am comfortable in using it. When we are working as a team, we discuss the pros/cons and decide on one tool/language/framework. If ALM tool can't be replaced, try to embrace it rather than fighting it and maintaining a physical wall.&amp;nbsp;&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;Other benefits does not outweigh the issues:&lt;/b&gt; Few people claim that physical wall improves collaboration and some of them prefer to see stories as physical cards &amp;amp; track it through different lanes. On the collaboration part, I am not sure whether there is any fact to back this but I think ALM walls can also have the same effect. On the second benefit, most of the ALM tools provide standup / dashboard view, that mimics the physical wall. Even if we assume that the above benefits cannot be met with a tool, these are only side effects of a physical wall and it would take a back seat considering the issues it brings along.&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;Access to information immediately:&lt;/b&gt; Most of the ALM tools have long user session time, so we can keep a tab open in our browser(just like email/facebook) to refer whenever we need any information. So we can get necessary information in a click instead of the need to login everytime.&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;ALM tool usability (100 click syndrome):&lt;/b&gt; It would take a day or two to get used to any new tool. Most of the product development companies would have usability experts to make the interface as easy as possible to stay in business. If we could just spend that short time to get used to the tool, we won't be exaggerating and complaining about "100 clicks" needed to do an operation in ALM tool.&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;Information radiator:&lt;/b&gt; Like build monitor, if each team can project their card wall on a monitor, it would still act as an information radiator. Even though this cannot exactly replace the physical wall, it is a trade off decision we have to go with to see the benefits of using just the ALM tool.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;And last, Does it really worth it:&lt;/b&gt; When you can get all the information that is needed from ALM tools dashboard/standup wall, why do we need to replicate the information on physical wall?&lt;/li&gt;
&lt;/ol&gt;
Even though we were able to try without physical wall successfully in a small team, I was not able to try it in my 20 member project because of the last argument(10 - Other issues take priority). But I would definitely try it in future.&lt;br /&gt;
&lt;br /&gt;
You could help in refining this by sharing your comments, views and experience. Also, it would be great if you shed some light on how you overcame the issues in the hybrid approach I mentioned earlier.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9103875830128984607-6339119665881898811?l=www.nvenky.in' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.nvenky.in/feeds/6339119665881898811/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.nvenky.in/2012/04/physical-card-wall-is-injurious-to.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/6339119665881898811?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/6339119665881898811?v=2" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/2012/04/physical-card-wall-is-injurious-to.html" title="Physical card wall is injurious to health" /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;D0cNQHkzcCp7ImA9Wx5aGEo.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607.post-727284591793426372</id><published>2010-11-15T18:35:00.000-08:00</published><updated>2010-11-15T18:38:11.788-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T18:38:11.788-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="no constructor" /><category scheme="http://www.blogger.com/atom/ns#" term="Unit testing" /><category scheme="http://www.blogger.com/atom/ns#" term="pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="no setter" /><category scheme="http://www.blogger.com/atom/ns#" term="setup data" /><category scheme="http://www.blogger.com/atom/ns#" term="builder" /><title>Builders to setup Unit test data</title><content type="html">Exposing Setter methods or constructors in domain objects for setting up Unit test data should never be done. &lt;br /&gt;
Builder pattern is a simple alternate to setup unit test data using reflection without exposing unnecessary setters and constructors in domain objects.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1) Abstract builder:&lt;/b&gt;&lt;br /&gt;
Create an Abstract builder that will be extended by all domain builder objects.&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt;import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class AbstractBuilder&amp;lt;E&amp;gt; {
    private E domain;

    public AbstractBuilder(E domain) {
        this.domain = domain;
    }

    public E build() {
        try {
            List&amp;lt;Field&amp;gt; domainFields = getAllFields(new ArrayList&amp;lt;Field&amp;gt;(), domain.getClass());
            Map&amp;lt;String, Field&amp;gt; builderFieldsMap = index(getAllFields(new ArrayList&amp;lt;Field&amp;gt;(), this.getClass()));
            for (Field domainField : domainFields) {
                Field builderField = builderFieldsMap.get(domainField.getName());
                if (builderField != null) {
                    copyFieldValue(domainField, builderField);
                }
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return domain;
    }

    private void copyFieldValue(Field domainField, Field builderField) throws IllegalAccessException {
        domainField.setAccessible(true);
        builderField.setAccessible(true);
        domainField.set(domain, builderField.get(this));
    }

    private Map&amp;lt;String, Field&amp;gt; index(List&amp;lt;Field&amp;gt; allFields) {
        Map&amp;lt;String, Field&amp;gt; map = new HashMap&amp;lt;String, Field&amp;gt;();
        for (Field allField : allFields) {
            map.put(allField.getName(), allField);
        }
        return map;
    }

    public static List&amp;lt;Field&amp;gt; getAllFields(List&amp;lt;Field&amp;gt; fields, Class&amp;lt;?&amp;gt; type) {
        for (Field field : type.getDeclaredFields()) {
            fields.add(field);
        }
        if (type.getSuperclass() != null) {
            fields = getAllFields(fields, type.getSuperclass());
        }
        return fields;
    }

    public E getDomain() {
        return domain;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;2) Domain builder class:&lt;/b&gt;&lt;br /&gt;
Consider a domain class Person with 4 attributes (firstName, lastName, gender, dateOfBirth). You should create the domain builder object with same 4 attributes.&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt;
public class PersonBuilder extends AbstractBuilder&amp;lt;Person&amp;gt; {
    private String firstName;
    private String lastName;
    private String gender;
    private Date dateOfBirth;

    public PersonBuilder() {
        super(new Person());
    }

    public PersonBuilder withFirstName(String firstName) {
        this.firstName = firstName;
        return this;
    }

    public PersonBuilder withLastName(String lastName) {
        this.lastName = lastName;
        return this;
    }

    public PersonBuilder withGender(String gender) {
        this.gender = gender;
        return this;
    }

    public PersonBuilder withDateOfBirth(Date dateOfBirth) {
        this.dateOfBirth = dateOfBirth;
        return this;
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;3) Using Builders in Unit Tests:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
You can use the builder as shown below&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt;Person testPerson = new PersonBuilder().withFirstName("hello").withLastName("World").build();&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Tip:&lt;/b&gt;&lt;br /&gt;
If you are using Intellij IDEA as the IDE, use Builder plugin to generate the "with" methods quickly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9103875830128984607-727284591793426372?l=www.nvenky.in' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.nvenky.in/feeds/727284591793426372/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.nvenky.in/2010/11/builders-to-setup-unit-test-data.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/727284591793426372?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/727284591793426372?v=2" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/2010/11/builders-to-setup-unit-test-data.html" title="Builders to setup Unit test data" /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;A0AGQHo9fCp7ImA9Wx5aGEs.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607.post-5737761436907724885</id><published>2010-11-15T16:04:00.000-08:00</published><updated>2010-11-15T17:08:41.464-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T17:08:41.464-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Weblogic ant redeploy SUBST" /><title>Redeploy application to Weblogic Server through Ant script</title><content type="html">The most time consuming task in a Web app development is to redeploy the application into the server for every change and test it.&lt;br /&gt;
&lt;br /&gt;
In Weblogic Workshop IDE, we have an option to redeploy the app into Weblogic server by just right clicking it. But in Intellij Idea, I was not able to find such feature. We spent considerable amount of time to redeploy application using 'Weblogic Console' until we figured out the 'Ant' script to do it.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt;&amp;lt;project&amp;gt;
&amp;lt;property name="bea.home" value="C:/bea"/&amp;gt;
&amp;lt;property name="wl.home" value="${bea.home}/weblogic92"/&amp;gt;
&amp;lt;property name="wl.domain" value="domainName"/&amp;gt;
&amp;lt;property name="wl.server" value="serverName"/&amp;gt;
&amp;lt;!-- classpath to have weblogic.jar as the first jar --&amp;gt;
&amp;lt;path id="base.path"&amp;gt;
&amp;lt;fileset file="${wl.home}/server/lib/weblogic.jar"/&amp;gt;
&amp;lt;fileset dir="${wl.home}/server/lib/"&amp;gt;
&amp;lt;include name="**/*.jar"/&amp;gt;
&amp;lt;/fileset&amp;gt;
&amp;lt;pathelement path="${java.class.path}/"/&amp;gt;
&amp;lt;/path&amp;gt;

&amp;lt;!-- weblogic tasks--&amp;gt;
&amp;lt;taskdef name="wldeploy" classname="weblogic.ant.taskdefs.management.WLDeploy"&amp;gt;
&amp;lt;classpath refid="base.path"/&amp;gt;
&amp;lt;/taskdef&amp;gt;
&amp;lt;taskdef name="wlserver" classname="weblogic.ant.taskdefs.management.WLServer"&amp;gt;
&amp;lt;classpath refid="base.path"/&amp;gt;
&amp;lt;/taskdef&amp;gt;

&amp;lt;target name="&lt;b&gt;deployApp&lt;/b&gt;"&amp;gt;
&amp;lt;wldeploy action="deploy" verbose="true" debug="true"
name="sampleApp" source="z:/app/target/sampleApp.ear"
user="weblogic" password="weblogic"
adminurl="t3://localhost:7001" targets="${wl.server}"/&amp;gt;
&amp;lt;/target&amp;gt;

&amp;lt;target name="redeployApp"&amp;gt;
&amp;lt;wldeploy action="undeploy" verbose="true" debug="true" name="sampleApp" 
user="weblogic" password="weblogic"
adminurl="t3://localhost:7001" targets="${wl.server}"/&amp;gt;
&amp;lt;wldeploy action="deploy" verbose="true" debug="true"
name="sampleApp" source="z:/app/target/sampleApp.ear"
user="weblogic" password="weblogic"
adminurl="t3://localhost:7001" targets="${wl.server}"/&amp;gt;
&amp;lt;/target&amp;gt;
&amp;lt;/project&amp;gt;&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;TIP:&lt;/b&gt;&lt;br /&gt;
Use &lt;b&gt;SUBST&lt;/b&gt; command in Windows to map your project location to a new drive.&amp;nbsp;For eg.,&lt;br /&gt;
&lt;pre style="-moz-background-inline-policy: continuous; background: url(&amp;quot;http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif&amp;quot;) repeat scroll 0% 0% rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt;subst z: d:/venky/projects/utils/sampleApp&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Individual developers in the team can checkout the code to any location but using this SUBST command will help the team to refer the project from same location like &lt;b&gt;z:/src&lt;/b&gt;. Even though IDE's use relative path, it is nice to do this as the team can use these kinds of file without any customization.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9103875830128984607-5737761436907724885?l=www.nvenky.in' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.nvenky.in/feeds/5737761436907724885/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.nvenky.in/2010/11/redeploy-application-to-weblogic-server.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/5737761436907724885?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/5737761436907724885?v=2" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/2010/11/redeploy-application-to-weblogic-server.html" title="Redeploy application to Weblogic Server through Ant script" /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A08HQX8zcSp7ImA9Wx5aGEs.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607.post-5824480199376368424</id><published>2010-07-20T18:56:00.000-07:00</published><updated>2010-11-15T17:10:30.189-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T17:10:30.189-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="latest date" /><category scheme="http://www.blogger.com/atom/ns#" term="Filter" /><category scheme="http://www.blogger.com/atom/ns#" term="OneToMany" /><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate" /><category scheme="http://www.blogger.com/atom/ns#" term="FilterDef" /><category scheme="http://www.blogger.com/atom/ns#" term="annotation filter" /><title>Hibernate @OneToMany annotation filter by Latest date</title><content type="html">When there is a @OneToMany relationship between domain objects, a&amp;nbsp;common requirement is to fetch the latest child record based on some date column or a version number column.&amp;nbsp;This can be easily implemented in Hibernate using @Filter annotation and some SQL as shown below.&lt;br /&gt;
&lt;br /&gt;
Consider a case where a Person has more than one Mobile phone and he always uses the latest mobile phone.&lt;br /&gt;
&lt;br /&gt;
Person object has a @OneToMany relationship to MobilePhone object .&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt;@Entity
@Table(name = "PERSON")
&lt;b&gt;@FilterDef(name = Person.LATEST_PHONE_FILTER)&lt;/b&gt;
public class &lt;b&gt;Person&lt;/b&gt;{
   public static final String LATEST_PHONE_FILTER = "latestPhoneFilter";

   @Column(name = "PERSON_ID")
   private Long id;

   @Column(name = "FIRST_NAME")   
   private String firstName;

   @Column(name = "LAST_NAME")
   private String lastName;

   @OneToMany(mappedBy = "owner", fetch = FetchType.EAGER)
   @Filter(name = LATEST_PHONE_FILTER, condition = "&lt;b&gt;PURCHASE_DATE &lt;/b&gt;=
   (select max(M.PURCHASE_DATE) from MOBILE_PHONE M where &lt;b&gt;M.PERSON_ID= PERSON_ID&lt;/b&gt;")
   private List&amp;lt;MobilePhone&amp;gt; mobilePhones;
   
   public MobilePhone &lt;b&gt;getLatestMobilePhone()&lt;/b&gt;{
      return CollectionsUtil.isEmpty(mobilePhones) ? null: mobilePhones.get(0);
   }
}
@Entity
@Table(name = "MOBILE_PHONE")
public class &lt;b&gt;MobilePhone&lt;/b&gt;{    
    ..............
    ..............
    @Column(name = "PURCHASE_DATE")
    private Date purchaseDate;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "PERSON_ID")
    private Person owner;
}&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
If you notice the SQL used in the filter, it has a condition like &amp;nbsp;&lt;i&gt;&lt;b&gt;M.PERSON_ID= PERSON_ID&lt;/b&gt;&lt;/i&gt;.&lt;br /&gt;
PERSON_ID column without alias name refers to the PERSON tables primary key. Hibernate takes care of giving proper alias name while generating SQL.  &lt;br /&gt;
&lt;br /&gt;
This configuration will always fetch only the latest mobile phone to the List of MobilePhone and the &lt;b&gt;getLatestMobilePhone()&lt;/b&gt; method can return that object.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9103875830128984607-5824480199376368424?l=www.nvenky.in' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.nvenky.in/feeds/5824480199376368424/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.nvenky.in/2010/07/hibernate-onetomany-annotation-filter.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/5824480199376368424?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/5824480199376368424?v=2" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/2010/07/hibernate-onetomany-annotation-filter.html" title="Hibernate @OneToMany annotation filter by Latest date" /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;CEUGQXk6cCp7ImA9WxFUF08.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607.post-2958831128005616893</id><published>2010-05-29T12:09:00.000-07:00</published><updated>2010-06-28T03:50:20.718-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-28T03:50:20.718-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dynamic list" /><category scheme="http://www.blogger.com/atom/ns#" term="Library" /><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Books" /><category scheme="http://www.blogger.com/atom/ns#" term="ThoughtWorks" /><category scheme="http://www.blogger.com/atom/ns#" term="recommendation" /><title>Recommended Technical Books</title><content type="html">Long time since I wrote any blog..&lt;br /&gt;
We recently got new technical books for our office library. ThoughtWorkers pitched in with their books recommendation and we ended up getting a great collection of books. I hope these recommended books will help others too.&lt;br /&gt;
&lt;br /&gt;
&lt;table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; width: 100%;"&gt;&lt;tbody&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(216, 216, 216); border: 1pt solid windowtext; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: center;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=9103875830128984607&amp;amp;postID=2958831128005616893" name="RANGE!A3:D83"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Sl No.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(216, 216, 216); border-color: windowtext windowtext windowtext -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: center;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Title (Sorted Alphabetically)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(216, 216, 216); border-color: windowtext windowtext windowtext -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: center;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Author&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;About Face 3: The Essentials Of Interaction   Design&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Alan Cooper, Robert Reimann, David Cronin&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;2&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="nowrap" style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" valign="bottom" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Agile Estimating and Planning&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Mike Cohn&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;3&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Agile Software Development 2ed- The   Cooperative Game&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Cockburn&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;4&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Agile Software Development, Principles,   Patterns, And Practices&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Robert C. Martin&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;5&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Agile Testing: Practical Guide For Testers&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Lisa Crispin&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;6&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Bargaining For Advantage: Negotiation   Strategies For Reasonable People 2nd Edition&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;G. Richard Shell&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;7&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Clean Code: A Handbook Of Agile Software   Craftsmanship&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Robert C. Martin, Michael C. Feathers, Timothy   R. Ottinger&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;8&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Clr Via C#: Applied Microsoft.net Programming   2e&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Richter J&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;9&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Cocoa Design Patterns&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Erik Buck, Donald Yacktman&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;10&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Cocoa Programming Developer's Handbook   (developer's Library)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;David Chisnall, Scott Anguish, Erik Buck,   Donald A. Yacktman&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;11&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Concepts, Techniques, And Models Of Computer   Programming&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Haridi Seif&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;12&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Concurrent Programming On Windows&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Joe Duffy&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;13&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="nowrap" style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" valign="bottom" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Core Python Programming 2nd Edition&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Chun &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;14&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Design Patterns: Elements Of Reusable Object   Oriented Software&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Gamma&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;15&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Designing Gestural Interfaces: Touchscreens   And Interactive Devices&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Dan Saffer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;16&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Designing Interfaces: Patterns For Effective   Interaction Design&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Jenifer Tidwell&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;17&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Domain-driven Design&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Eric Evans&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;18&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Don't Make Me Think: A Common Sense Approach   To Web Usability, 2nd Edition&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Steve Krug&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;19&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Emotional Design: Why We Love (or Hate)   Everyday Things&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Donald A. Norman&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;20&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Enterprise Integration Patterns: Designing,   Building, And Deploying Messaging Solutions&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Gregor Hohpe, Bobby Woolf&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;21&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Essentials Of Programming Languages,3/ed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Daniel P Friedman&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;22&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" valign="bottom" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 9pt;"&gt;Ext Js 3.0 Cookbook&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" valign="bottom" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 9pt;"&gt;Jorge Ramon &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;23&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="nowrap" style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" valign="bottom" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Extreme Programming Explained 2nd Edition&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Beck &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;24&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Getting Things Done: The Art Of Stress-free   Productivity&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;David Allen&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;25&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Groovy And Grails Recipes (recipes: A   Problem-solution Approach)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Bashar Abdul-jawad&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;26&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Groovy Recipes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Scott Davis&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;27&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Growing Object-oriented Software, Guided By   Tests (beck Signature)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Steve Freeman, Nat Pryce&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;28&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Gui Bloopers 2.0, Second Edition: Common User   Interface Design Don'ts And Dos (interactive Technologies)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Jeff Johnson&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;29&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Handbook Of Usability Testing: How To Plan,   Design And Conduct Effective Tests, 2nd Ed&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Jeffrey Rubin, Dana Chisnell&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;30&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Head First Ajax&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;M. Rebecca Riordan&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;31&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Head First Iphone Development&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Dan Pilone, Tracey Pilone&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;32&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Head First Javascript&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Michael Morrison&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;33&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Head First Object-oriented Analysis &amp;amp;   Design&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Brett Mclaughlin, Gary Pollice, David West&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;34&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;High Performance Web Sites: Essential   Knowledge For Front-end Engineers&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Steve Souders&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;35&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Implementation Patterns (addison-wesley   Signature)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Kent Beck&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;36&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Influence: The Psychology Of Persuasion   (collins Business Essentials)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Robert B. Cialdini&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;37&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Introduction To Algorithms 3e&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Thomas H Cormen&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;38&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Iphone For Programmers: An App-driven Approach   (deitel Developer)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Paul Deitel, Harvey Deitel, Abbey Deitel, Eric   Kern, Michael Morgano&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.8in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.8in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;39&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.8in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Iphone Hacks: Pushing The Iphone And Ipod   Touch Beyond Their Limits&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.8in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Damien Stolarz, Adam Stolarz, William Hurley,   David Jurick, Jurick David, Stolarz Adam, Stolarz Damien&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;40&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Iphone In Action: Introduction To Web And Sdk   Development&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Christopher Allen, Shannon Applecline&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;41&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Iphone Sdk Development (the Pragmatic   Programmers)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Bill Dudney, Christopher Adamson, Marcel   Molina&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;42&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Jasper Reports For Java Developers :   Create.design,format,and Export Reports With The Wor&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Heffelfinger&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;43&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Javascript Programmer's Reference&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Alexei White&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;44&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" valign="bottom" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 9pt;"&gt;Jquery Cookbook&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="nowrap" style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" valign="bottom" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 9pt;"&gt;Cody Lindley&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;45&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Lean Software Development: An Agile Toolkit&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Mary Poppendieck, Tom Poppendieck&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 24.6pt;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 24.6pt; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;46&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 24.6pt; padding: 0in 5.4pt; width: 55.08%;" valign="bottom" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 9pt;"&gt;Learning Ext JS&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 24.6pt; padding: 0in 5.4pt; width: 33.3%;" valign="bottom" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 9pt;"&gt;Shea Frederick, Colin   Ramsay, and Steve 'Cutter' Blades&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;47&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Lessons Learned In Software Testing&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Bret Pittichord, James Bach, Cem Kaner&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;48&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Made To Stick: Why Some Ideas Survive And   Others Die&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Dan Heath Chip Heath&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;49&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Maverick!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Ricardo Semler&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;50&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Modular Web Design: Creating Reusable   Components For User Experience Design And Documentation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Nathan Curtis&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;51&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Patterns Of Enterprise Application   Architecture&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Martin Fowler&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;52&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Planning Extreme Programming&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Kent Beck, Martin Fowler, Martin Fowler&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;53&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Practical Common Lisp&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Peter Seibel&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;54&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Practices Of An Agile Developer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Venkat Subramaniam, Andy Hunt&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;55&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Pragmatic Programmer, The&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Andy Hunt, David Thomas&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.8in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.8in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;56&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.8in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Professional Css: Cascading Style Sheets For   Web Design&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.8in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Christopher Schmitt, Mark Trammell, Ethan   Marcotte, Todd Dominey, Dunstan Orchard, Todd Dominey&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;57&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Programming F#: A Comprehensive Guide For   Writing Simple Code To Solve Complex Problems&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Chris Smith, Glen Smith&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 24.6pt;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 24.6pt; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;58&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 24.6pt; padding: 0in 5.4pt; width: 55.08%;" valign="bottom" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 9pt;"&gt;Programming Google App   Engine: Build and Run Scalable Web Apps on Google's Infrastructure (Animal   Guide)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="nowrap" style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 24.6pt; padding: 0in 5.4pt; width: 33.3%;" valign="bottom" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 9pt;"&gt;Dan Sanderso&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;59&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Programming In Objective-c: A Complete   Introduction To The Objective-c Language&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Kochan Stephen G.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;60&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Programming In Scala: A Comprehensive   Step-by-step Guide&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Martin Odersky, Lex Spoon, Bill Venners&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;61&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Pulling Strings With Puppet: Configuration   Management Made Easy&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;James Turnbull&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;62&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Python For Unix And Linux System   Administration&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Noah Gift, Jeremy Jones&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;63&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Refactoring Improving The Design Of Existing   Code&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Fowler Martin&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;64&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Restful Webservices&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Leonard Richardson, Sam Ruby, David Heinemeier&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;65&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Selfish Gene 30th Indian Edn.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Richard Dawkins&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;66&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Smalltalk Best Practice Patterns&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Kent Beck&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;67&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Software Testing: A Craftsman's Approach,   Third Edition&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Paul C. Jorgensen&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;68&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Structure And Interpretation Of Computer   Programs - 2nd Edition (mit Electrical Engineering And Computer Science)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Harold Abelson, Gerald Jay Sussman&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;69&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Succeeding With Agile: Software Development   Using Scrum (addison-wesley Signature)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Mike Cohn&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;70&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Test-driven Development By Example&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Beck&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;71&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Testing Computer Software, 2nd Edition&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Cem Kaner, Hung Quoc Nguyen, Jack Falk&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;72&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Testing Extreme Programming&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Lisa Crispin, Ken S. Rosenthal, Tip House&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;73&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;The Art Of Innovation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Tom Kelley&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;74&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;The Design Of Everyday Things&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Donald A. Norman, Don Norman&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;75&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;The Knowledge-creating Company (harvard   Business Review Classics)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Ikujiro Nonaka&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;76&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;The New Turing Omnibus: Sixty-six Excursions   In Computer Science&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;A. K. Dewdney&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;77&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;The Psychology Of Computer Programming: Silver   Anniversary Edition&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Gerald M. Weinberg&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.4in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.4in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;78&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;What Customers Want: Using Outcome-driven   Innovation To Create Breakthrough Products And Services&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.4in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Anthony Ulwick&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;79&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Windows Presentation Foundation Unleashed   (wpf)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Adam Nathan, Daniel Lehenbauer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 0.2in;"&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; height: 0.2in; padding: 0in 5.4pt; width: 11.62%;" width="11%"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: right;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;80&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 55.08%;" width="55%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Working Effectively With Legacy Code&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; height: 0.2in; padding: 0in 5.4pt; width: 33.3%;" width="33%"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Feathers&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9103875830128984607-2958831128005616893?l=www.nvenky.in' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.nvenky.in/feeds/2958831128005616893/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.nvenky.in/2010/05/amazing-list-of-technical-books.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/2958831128005616893?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/2958831128005616893?v=2" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/2010/05/amazing-list-of-technical-books.html" title="Recommended Technical Books" /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><thr:total>8</thr:total></entry><entry gd:etag="W/&quot;A04DQnY7fSp7ImA9Wx5aGEs.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607.post-597329975132910251</id><published>2010-01-28T20:32:00.000-08:00</published><updated>2010-11-15T17:12:53.805-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T17:12:53.805-08:00</app:edited><title>Parsing Excel Sheet made easy with Annotations and POI</title><content type="html">HSSF - Horrible Spreadsheet Format – not anymore. With few annotations, excel parsing can be done in one line.&lt;br /&gt;
&lt;br /&gt;
We had a requirement in our current project to parse multiple excel sheets and store the information to database. I hope most of the projects involving excel sheet parsing would be doing the same. We built a extensible framework to parse multiple sheets and populate JAVA objects with annotations.&lt;br /&gt;
&lt;br /&gt;
We will discuss the steps to use annotations to parse excel sheet and populate Java objects.&lt;br /&gt;
&lt;br /&gt;
Consider we have an excel sheet with student information.&lt;br /&gt;
&lt;div class="separator" style="clear: both; overflow: auto; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_OAeb_UFifRg/S2WiIfweGiI/AAAAAAAACCA/Sv36FYxed1E/s1600-h/Screenshot.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="138" src="http://3.bp.blogspot.com/_OAeb_UFifRg/S2WiIfweGiI/AAAAAAAACCA/Sv36FYxed1E/s640/Screenshot.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;Parsing Logic:&lt;/b&gt;&lt;br /&gt;
While parsing this excel sheet, we need to populate one “Section” object and multiple “Student” objects related to a Section. You can see that Student information is available in multiple rows whereas the Section details (Year, Section) is available in column B.  &lt;br /&gt;
&lt;br /&gt;
We will have to annotate the above information to the domain class, that can be interpretted by the sheet parser.&lt;br /&gt;
&lt;br /&gt;
1) Annotate Domain Class:&lt;br /&gt;
First we will see the steps to annotate Section object:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt;&lt;b&gt;@ExcelObject(&lt;/b&gt;parseType = ParseType.COLUMN, start = 2, end = 2)
public class Section {
 &lt;b&gt;@ExcelField&lt;/b&gt;(position = 2)
 private String year;

 &lt;b&gt;@ExcelField&lt;/b&gt;(position = 3)
 private String section;
 
 &lt;b&gt;@MappedExcelObject&lt;/b&gt;
 private List &amp;lt;Student&amp;gt; students;
}&lt;/code&gt;&lt;/pre&gt;You can find three different annotation in this class. &lt;br /&gt;
i)&lt;b&gt;ExcelObject:&lt;/b&gt; This annotation tells the parser about the parse type (Row or Column), number of objects to create (start, end). Based on the above annotation, Section value should be parsed Columnwise and information can be found in Column 2 (“B”) of the Excelsheet.&lt;br /&gt;
&lt;br /&gt;
ii)&lt;b&gt;ExcelField:&lt;/b&gt; This annotation tells the parser to fetch “year” information from Row 2 and “section” information from Row 3.  &lt;br /&gt;
&lt;br /&gt;
iii)&lt;b&gt;MappedExcelObject:&lt;/b&gt; Apart from Simple datatypes like “Double”,”String”, we might also try to populate complex java objects while parsing. In this case, each section has a list of student information to be parsed from excel sheet. This annotation will help the parser in identifying such fields. &lt;br /&gt;
&lt;br /&gt;
Next step is to annotate Student class:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt;&lt;b&gt;@ExcelObject&lt;/b&gt;(parseType = ParseType.ROW, start = 6, end = 8)
public class Student {
 &lt;b&gt;@ExcelField&lt;/b&gt;(position = 2)
 private Long roleNumber;
 
 &lt;b&gt;@ExcelField&lt;/b&gt;(position = 3)
 private String name;
 
 &lt;b&gt;@ExcelField&lt;/b&gt;(position = 4)
 private Date dateOfBirth;
 
 &lt;b&gt;@ExcelField&lt;/b&gt;(position = 5)
 private String fatherName;
 
 &lt;b&gt;@ExcelField&lt;/b&gt;(position = 6)
 private String motherName;
 
 &lt;b&gt;@ExcelField&lt;/b&gt;(position = 7)
 private String address;
 
 &lt;b&gt;@ExcelField&lt;/b&gt;(position = 8)
 private Double totalScore;
}&lt;/code&gt;&lt;/pre&gt;i) &lt;b&gt;ExcelObject&lt;/b&gt;: As shown above, this annotation tells parser to parse Rows 6 to 8 (create 3 student objects). NOTE: Optional field “zeroIfNull” , if set to true, will populate Zero to all number fields (Double,Long,Integer) by default if the data is not available in DB.&lt;br /&gt;
&lt;br /&gt;
ii) &lt;b&gt;ExcelField:&lt;/b&gt; Student class has 7 values to be parsed and stored in the database. This is denoted in the domain class as annotation.&lt;br /&gt;
&lt;br /&gt;
iii) &lt;b&gt;MappedExcelObject&lt;/b&gt;: Student class does not have any complex object, hence this annoation is not used in this domain class.&lt;br /&gt;
&lt;br /&gt;
Once the annotation is done, you have just invoke the parser with the Sheet and the Root class you want to populate.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt;//Get the sheet using POI API.
String sheetName = "Sheet1";
SheetParser parser = new SheetParser();
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("Student Profile.xls");
Sheet sheet = new HSSFWorkbook(inputStream).getSheet(sheetName);

//Invoke the Sheet parser.
List&lt;section&gt; entityList = parser.createEntity(sheet, sheetName, Section.class);
&lt;/section&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Thats all it requires. Parser would populate all the fields based on the annotation for you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9103875830128984607-597329975132910251?l=www.nvenky.in' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.nvenky.in/feeds/597329975132910251/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.nvenky.in/2010/01/parsing-excel-sheet-made-easy-with.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/597329975132910251?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/597329975132910251?v=2" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/2010/01/parsing-excel-sheet-made-easy-with.html" title="Parsing Excel Sheet made easy with Annotations and POI" /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_OAeb_UFifRg/S2WiIfweGiI/AAAAAAAACCA/Sv36FYxed1E/s72-c/Screenshot.png" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkcFSHY4fCp7ImA9Wx5aGEo.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607.post-7744288647204207480</id><published>2010-01-07T18:16:00.000-08:00</published><updated>2010-11-15T17:13:39.834-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T17:13:39.834-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="password recovery" /><category scheme="http://www.blogger.com/atom/ns#" term="password" /><category scheme="http://www.blogger.com/atom/ns#" term="java pdf" /><category scheme="http://www.blogger.com/atom/ns#" term="brute force" /><category scheme="http://www.blogger.com/atom/ns#" term="brute" /><category scheme="http://www.blogger.com/atom/ns#" term="pdf" /><category scheme="http://www.blogger.com/atom/ns#" term="java cracker" /><category scheme="http://www.blogger.com/atom/ns#" term="force" /><category scheme="http://www.blogger.com/atom/ns#" term="pdf password" /><category scheme="http://www.blogger.com/atom/ns#" term="java brute force" /><category scheme="http://www.blogger.com/atom/ns#" term="brute force algorithm" /><title>Crack PDF password - Java Brute force algorithm</title><content type="html">Recently I was in a big mess when I lost the password for an important PDF document. I ended up using the Brute force algorithm and cracked the PDF password.&lt;br /&gt;
&lt;br /&gt;
PDFBox API is being used in the below code to open the PDF file. Please download the dependent JAR files from &lt;a href="http://sourceforge.net/projects/pdfbox/files/PDFBox/PDFBox-0.7.3/PDFBox-0.7.3.zip/download"&gt;&lt;b&gt;here&lt;/b&gt;&lt;/a&gt;.&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Word of caution: &lt;/b&gt;Based on the length of the password, it might even take few days to run it. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt;package com.bruteforce;

import java.io.IOException;

import org.apache.pdfbox.exceptions.CryptographyException;
import org.apache.pdfbox.exceptions.InvalidPasswordException;
import org.apache.pdfbox.pdmodel.PDDocument;

public class BruteForceDecryptPDF {

 private static final String PDF_FILE_PATH = "c:/file2.pdf";
 private static final int PASSWORD_MAX_LENGTH = 4;
 private static final int PASSWORD_MIN_LENGTH = 2;
 // Array with characters to use in Brute Force Algorithm.
 // You can remove or add more characters in this array.
 private static char fCharList[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
   'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
   'v', 'w', 'x', 'y', 'z','0','1','2','3','4','5','6','7','8',
   '9'};

 public static void main(String[] args) {
  long startTime=System.currentTimeMillis();
  PDDocument document = null;
  boolean found = false;
  try {
   document = PDDocument.load(PDF_FILE_PATH);

   for (int i = PASSWORD_MIN_LENGTH; i &lt;= PASSWORD_MAX_LENGTH; i++) { 
    try {
     startBruteForce(i, document);
    }catch(PasswordFoundInterrupter ex){
     found=true;
     System.out.println("SUCCESS. PASSWORD: - " + ex.getMessage());
    }
    catch (Exception e) {
     e.printStackTrace();
    }
   }
   if(!found){
    System.out.println("Failure - Password not found");
   }
   document.close();
   long timeTaken=System.currentTimeMillis()-startTime;
   System.out.println("TOTAL TIME TAKEN - " + timeTaken);
  } catch (IOException e) {
   System.out.println("PDF File not found at - "+ PDF_FILE_PATH);
   throw new RuntimeException(e);
  }
 }

 public static void startBruteForce(int length, PDDocument document) {
  StringBuffer sb = new StringBuffer(length);
  char currentChar = fCharList[0];

  for (int i = 1; i &lt;= length; i++) {
   sb.append(currentChar);
  }

  changeCharacters(0, sb, length, document);
 }

 private static StringBuffer changeCharacters(int pos, StringBuffer sb,
   int length, PDDocument document) {
  for (int i = 0; i &lt;= fCharList.length - 1; i++) {
   sb.setCharAt(pos, fCharList[i]);
   if (pos == length - 1) {    
    // Uncomment this to see the generated passwords. It may slow down if you are trying for larger size passwords.
    //System.out.println(sb.toString());
    if(valid(sb.toString(),document)){
     throw new BruteForceDecryptPDF.PasswordFoundInterrupter(sb.toString());
    }
   } else {
    changeCharacters(pos + 1, sb, length, document);
   }
  }

  return sb;
 }
 
 public static boolean valid(String password, PDDocument document) {
  System.out.println(password);
  try {
   document.decrypt(password);
   System.out.println("Success - " + password);
   return true;
  } catch (IOException e) {
   throw new RuntimeException(e);
  } catch (CryptographyException e) {
   return false;
  } catch (InvalidPasswordException e) {
   return false;
  }
 }
 
 private static class PasswordFoundInterrupter extends RuntimeException{
  public PasswordFoundInterrupter(String message) {
   super(message);
  }  
 }
}  
&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9103875830128984607-7744288647204207480?l=www.nvenky.in' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.nvenky.in/feeds/7744288647204207480/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.nvenky.in/2010/01/crack-pdf-password-brute-force.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/7744288647204207480?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/7744288647204207480?v=2" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/2010/01/crack-pdf-password-brute-force.html" title="Crack PDF password - Java Brute force algorithm" /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><thr:total>5</thr:total></entry><entry gd:etag="W/&quot;D0UFRH49eyp7ImA9Wx5aGEo.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607.post-5594110095323426903</id><published>2009-12-02T09:44:00.000-08:00</published><updated>2010-11-15T18:40:15.063-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T18:40:15.063-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Unit testing repository DAO classes" /><title>Unit testing repository/DAO classes</title><content type="html">In an enterprise application we have many layers. As part of testing a layer, we would Mock the underlying layer objects and test it. But to test the DAO layer, we need to write integration test to perform DB operations.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1) Declare Spring &lt;/b&gt;&lt;b&gt;context aware Abstract Test class:&lt;/b&gt;&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt;@ContextConfiguration(locations = {"classpath:data-applicationContext.xml"})  
 @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)  
 @Transactional  
 public abstract class SpringTransactionTestContext extends AbstractTransactionalJUnit4SpringContextTests {  
 }  
&lt;/code&gt;&lt;/pre&gt;&lt;b&gt;2) Extend this class in all DAOTest and Autowire DAO:&lt;/b&gt;&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt; public class StudentDaoImplTest extends SpringTransactionTestContext {  
   @Autowired  
   private StudentDaoImpl personDao;  
 }  
&lt;/code&gt;&lt;/pre&gt;&lt;b&gt;3) Setup Test data:&lt;/b&gt;&lt;br /&gt;
If Student class is dependent on some School table, to test this class we need to insert School record.&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Options&lt;/b&gt;:&lt;br /&gt;
&lt;u&gt;i) Using Session factory:&lt;/u&gt;&lt;br /&gt;
Use SessionFactory instance and save School object as shown below: &lt;br /&gt;
&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt;@Autowired  
 private SessionFactory sessionFactory;  
 School school= new School("School Name");  
 sessionFactory.getCurrentSession().save(school);  
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Also, builders can be used to create objects with required test data. Look at this &lt;a href="http://venky-techspace.blogspot.com/2010/11/builders-to-setup-unit-test-data.html"&gt;post &lt;/a&gt;on how to use builder pattern in Unit tests.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;ii) Using SimpleJDBCTemplate - Less preferred:&lt;/u&gt;&lt;br /&gt;
SimpleJDBCTemplate object is found in . This can be directly used to run SQL scripts to insert into tables.&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt;String schoolInsertQuery = "Insert into SCHOOL(ID,NAME) values (?,?)";  
 this.simpleJdbcTemplate.update(schoolInsertQuery, schoolId, schoolName);  
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Once the Test execution is completed, it would automatically rollback the transaction (As defaultRollback is set true).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9103875830128984607-5594110095323426903?l=www.nvenky.in' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.nvenky.in/feeds/5594110095323426903/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.nvenky.in/2009/12/simple-ways-to-setup-test-data-for.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/5594110095323426903?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/5594110095323426903?v=2" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/2009/12/simple-ways-to-setup-test-data-for.html" title="Unit testing repository/DAO classes" /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkUFSHkyeSp7ImA9Wx5aGEo.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607.post-6608115222748331537</id><published>2009-11-24T18:26:00.000-08:00</published><updated>2010-11-15T17:16:59.791-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T17:16:59.791-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="latest record" /><category scheme="http://www.blogger.com/atom/ns#" term="rank()" /><category scheme="http://www.blogger.com/atom/ns#" term="rank" /><category scheme="http://www.blogger.com/atom/ns#" term="highest record" /><category scheme="http://www.blogger.com/atom/ns#" term="tips" /><category scheme="http://www.blogger.com/atom/ns#" term="group" /><category scheme="http://www.blogger.com/atom/ns#" term="Oracle" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="sort" /><title>Picking up latest/highest record from a group using rank() function</title><content type="html">Consider a example where we have Student, Subject and Mark information stored in different tables.&lt;br /&gt;
&lt;br /&gt;
If we need to retrieve the toppers in every subject for a given year through SQL, the usual way is to use a Subquery, sort the result descending and pick up the ROWNUM=1 record. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Instead of doing all that, Oracle's rank() function can help us to achieve the same in a simple way.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Table Structure:&lt;/b&gt;&lt;br /&gt;
- STUDENT (ID, Name, Class)&lt;br /&gt;
&lt;b&gt;- &lt;/b&gt;SUBJECT (ID, Name, Year)&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;- &lt;/b&gt;MARK (Subject_ID, Student_ID, Score)&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;SQL&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt; SELECT STUDENT.*, MARK.Mark, SUBJECT.Name  
 FROM STUDENT, SUBJECT,  
 (SELECT *, rank() OVER( partition by Subject_ID order by Score desc) rank FROM MARK )MARK  
 WHERE MARK.Student_ID=STUDENT.ID  
 AND MARK.Subject_ID=SUBJECT.ID  
 AND SUBJECT.Year=10  
 AND rank=1  
&lt;/code&gt;&lt;/pre&gt;In the above example, instead of joining MARK table directly, we use Oracle &lt;b&gt;rank()&lt;/b&gt; function to get the rank column also.&lt;br /&gt;
&lt;br /&gt;
Here we partition the table by Subject_Id, apply the descending order by Score and then rank the result. When we add the WHERE clause on &lt;b&gt;rank=1&lt;/b&gt; it would fetch the toppers in every Subject.&lt;br /&gt;
&lt;br /&gt;
This rank() function is also handy to get the latest record based on date from a given group.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9103875830128984607-6608115222748331537?l=www.nvenky.in' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.nvenky.in/feeds/6608115222748331537/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.nvenky.in/2009/11/picking-up-latesthighest-record-from.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/6608115222748331537?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/6608115222748331537?v=2" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/2009/11/picking-up-latesthighest-record-from.html" title="Picking up latest/highest record from a group using rank() function" /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A08BR3s4fip7ImA9WxBRGUw.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607.post-2022832814450760388</id><published>2009-11-24T17:45:00.000-08:00</published><updated>2010-01-07T19:04:16.536-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-07T19:04:16.536-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Criteria" /><category scheme="http://www.blogger.com/atom/ns#" term="Order.asc. Order" /><category scheme="http://www.blogger.com/atom/ns#" term="Criteria.addOrder test" /><category scheme="http://www.blogger.com/atom/ns#" term="test" /><category scheme="http://www.blogger.com/atom/ns#" term="getAll" /><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate" /><title>Testing Hibernate list() DAO method which fetches all records.</title><content type="html">Consider the example where you have a static table "VERSION" and the DAO method that fetches all records from VERSION table through Hibernate.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;DAO Method:&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt;   public List getAll() {  
     Criteria crit = getSession().createCriteria(Version.class);  
     crit.addOrder(Order.asc("name"));  
     return crit.list();  
   }  
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Poor Test case:&lt;/b&gt;&lt;br /&gt;
Many occasions I have noticed Test cases that directly assert on the number of records being returned.&lt;br /&gt;
&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; public class VersionDaoImplTest extends AbstractTransactionalJUnit4SpringContextTests{  
   @Autowired  
   private VersionDao versionDao;  
   @Test  
   public void shouldReturnTheListOfVersions() {  
     List versions = versionDao.getAll();  
     assertEquals(5, versions.size());  
   }  
 }  
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
As seen above, this test case tries to assert Only 5 records are there in the Version Table. When a new record is added to this table, this test case would fail. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Proper test case:&lt;/b&gt;&lt;br /&gt;
Other way of testing this method is given below.&lt;br /&gt;
&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; @Test  
   public void shouldReturnTheListOfVersions() {    
   List versions = ratingsDao.versionDao.getAll();  
     assertNotNull(ratings);  
     int prevSize = ratings.size();  
     String insertSQL = "Insert into VERSION (NAME,VERSION_NO) values (?,?)";  
     this.simpleJdbcTemplate.update(insertSQL, "TST+", 95);  
     this.simpleJdbcTemplate.update(insertSQL, "TST", 96);  
     this.simpleJdbcTemplate.update(insertSQL, "TST-", 97);  
     versions = versionDao.getAll();  
     assertEquals(prevSize + 3, ratings.size());  
   }  
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
In this test case, we get the number of records currently in the database. We then insert 3 new records into the table and try to assert whether the number of records being returned has increased by 3.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Testing Sort Order:&lt;/b&gt;&lt;br /&gt;
Also to test the &lt;b&gt;Criteria.addOrder(Order.asc("name"))&lt;/b&gt; you can enhance the test case with the following:&lt;br /&gt;
&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; for (int i = 1; i &amp;lt; versions.size(); i++) {  
       assertTrue(versions.get(i - 1).getName().compareTo(versions.get(i).getName()) &amp;lt; 0);  
 }  
&lt;/code&gt;&lt;/pre&gt;This would assert that records are sorted by the NAME.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9103875830128984607-2022832814450760388?l=www.nvenky.in' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.nvenky.in/feeds/2022832814450760388/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.nvenky.in/2009/11/testing-dao-method-that-fetches-all.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/2022832814450760388?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/2022832814450760388?v=2" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/2009/11/testing-dao-method-that-fetches-all.html" title="Testing Hibernate list() DAO method which fetches all records." /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;CkMCQH0zcSp7ImA9Wx5aGEo.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607.post-6769650957865613644</id><published>2009-10-05T11:00:00.000-07:00</published><updated>2010-11-15T17:21:01.389-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T17:21:01.389-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dynamic list" /><category scheme="http://www.blogger.com/atom/ns#" term="Validator" /><category scheme="http://www.blogger.com/atom/ns#" term="Validation" /><category scheme="http://www.blogger.com/atom/ns#" term="Spring MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="List validation" /><category scheme="http://www.blogger.com/atom/ns#" term="List Data" /><category scheme="http://www.blogger.com/atom/ns#" term="LazyList" /><category scheme="http://www.blogger.com/atom/ns#" term="Collection data" /><title>Spring MVC - Dynamic list binding and validating the input data</title><content type="html">&lt;style&gt;
pre{
background-color:#DDDDFF;
overflow:auto;
}
&lt;/style&gt;&lt;br /&gt;
It took quiet some time to figure out how to display a dynamic list of data on screen and get user input information back. We also had to perform validation on this dynamic list input data and display error message on the corresponding row. &amp;nbsp; &lt;br /&gt;
Here is the simple example to achieve the above requirement.&lt;br /&gt;
&lt;br /&gt;
Consider that you need to display Parent and list of child information on a screen and get the Age and Sex information of each child. Also you need to show error message on the screen if the user has not entered the age or sex information.&lt;br /&gt;
&lt;h3&gt;1) Form bean&lt;/h3&gt;&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt;public class MotherFormBean{  
   private String name;  
   private List&amp;lt;Child&amp;gt; children;  
   public MotherFormBean() {  
     children= LazyList.decorate(new ArrayList(),  
       FactoryUtils.instantiateFactory(Child.class));  
   }  
 }  
 public class Child{  
   private String name;  
   private String age;  
   private String sex;  
 }  
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Instead of initializing the List&lt;child&gt; as normal ArrayList, use the LazyList class (Commons-collection package). This is to avoid "&lt;b&gt;IndexOutOfBoundException&lt;/b&gt;" when the data is submitted back to the controller.&lt;br /&gt;
&lt;/child&gt;&lt;br /&gt;
&lt;h3&gt;2) JSP&lt;/h3&gt;&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt;&amp;lt;form:form action="${formAction}" name="childrenDetails"&amp;gt;  
 &amp;lt;table&amp;gt;&amp;lt;thead&amp;gt;  
  &amp;lt;tr&amp;gt;  
   &amp;lt;th&amp;gt;&amp;lt;b&amp;gt;Name&amp;lt;/b&amp;gt;&amp;lt;/th&amp;gt;  
   &amp;lt;th&amp;gt;&amp;lt;b&amp;gt;Sex&amp;lt;/b&amp;gt;&amp;lt;/th&amp;gt;  
   &amp;lt;th&amp;gt;&amp;lt;b&amp;gt;Age&amp;lt;/b&amp;gt;&amp;lt;/th&amp;gt;  
  &amp;lt;/tr&amp;gt;  
  &amp;lt;/thead&amp;gt;   
  &amp;lt;tbody&amp;gt;   
   &amp;lt;c:foreach items="${command.children}" var="child" varStatus="loop"&amp;gt;   
    &amp;lt;tr&amp;gt;   
     &amp;lt;td&amp;gt;&amp;lt;c:out value="${child.name}"&amp;gt;&amp;lt;/c:out&amp;gt;  
       &amp;lt;form:hidden path="children[${loop.index}].name"/&amp;gt;   
     &amp;lt;/td&amp;gt;  
     &amp;lt;td&amp;gt;&amp;lt;form:select path="children[${loop.index}].sex"&amp;gt;  
        &amp;lt;option value=""&amp;gt;--Please Select--&amp;lt;/option&amp;gt;  
        &amp;lt;option value="M"&amp;gt;Male&amp;lt;/option&amp;gt;  
        &amp;lt;option value="F"&amp;gt;Female&amp;lt;/option&amp;gt;   
       &amp;lt;/form:select&amp;gt;  
     &amp;lt;/td&amp;gt;  
     &amp;lt;td&amp;gt;&amp;lt;form:input path="children[${loop.index}].age"/&amp;gt;&amp;lt;/td&amp;gt;   
    &amp;lt;/tr&amp;gt;  
   &amp;lt;/c:foreach&amp;gt;   
  &amp;lt;/tbody&amp;gt;   
  &amp;lt;/table&amp;gt;  
 &amp;lt;/form:form&amp;gt;  
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
This code will print all the children names and show input fields for Age and Sex field.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3) Validator Class&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
When the List data is submitted back, Spring constructs the data back to the Form bean with help of the LazyList collection. Validation and raising error on these fields is very simple.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt; public class MotherBeanValidator implements org.springframework.validation.Validator {  
 .......   
   public void validate(Object target, Errors errors) {  
     MotherFormBean bean = (MotherFormBean) target;  
     List&amp;lt;Child&amp;gt; children = bean.getChildren();  
     for (int i = 0; i &amp;lt; children.size(); i++) {  
       if (StringUtils.isEmpty(children.get(i).getSex()))   
        errors.rejectValue("children[" + i + "].sex", "select.sex");  
       if (StringUtils.isEmpty(children.get(i).getAge()))   
        errors.rejectValue("children[" + i + "].age", "select.age");  
     }  
   }  
 }  
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
JSP Changes:&lt;br /&gt;
Include &lt;b&gt;&amp;lt;form:errors&amp;gt;&lt;/b&gt; tag after the sex and age input fields.&lt;br /&gt;
eg.) &lt;br /&gt;
&lt;pre class="codeHighlight"&gt;&lt;code class="codeContent"&gt; &amp;lt;form:errors path="children[${loop.index}].sex"/&amp;gt;   
&lt;/code&gt;&lt;/pre&gt;Hope this helps you in displaying the Collection data using Spring MVC and validating it. &lt;br /&gt;
&lt;br /&gt;
Thanks to &lt;a href="http://mattfleming.com/node/134"&gt;Matt Flemings&lt;/a&gt; blog for shedding some light on the LazyList.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9103875830128984607-6769650957865613644?l=www.nvenky.in' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.nvenky.in/feeds/6769650957865613644/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.nvenky.in/2009/10/spring-displaying-dynamic-list-and.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/6769650957865613644?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/6769650957865613644?v=2" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/2009/10/spring-displaying-dynamic-list-and.html" title="Spring MVC - Dynamic list binding and validating the input data" /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><thr:total>6</thr:total></entry><entry gd:etag="W/&quot;CEIASH86fyp7ImA9WxNRGEg.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607.post-3249936616316995364</id><published>2009-09-13T07:26:00.000-07:00</published><updated>2009-09-13T07:35:49.117-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-13T07:35:49.117-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="statistics" /><category scheme="http://www.blogger.com/atom/ns#" term="contestants" /><category scheme="http://www.blogger.com/atom/ns#" term="2009" /><category scheme="http://www.blogger.com/atom/ns#" term="india" /><category scheme="http://www.blogger.com/atom/ns#" term="Google code jam" /><category scheme="http://www.blogger.com/atom/ns#" term="Google code jam 2009" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="experience" /><category scheme="http://www.blogger.com/atom/ns#" term="china" /><title>Google Code Jam 2009 experience</title><content type="html">&amp;nbsp;&amp;nbsp; I participated in &lt;a href="http://code.google.com/codejam/contest/"&gt;Google code Jam 2009&lt;/a&gt; and tried to solve such problems for the first time in my life. As expected I could go only till Round 1 but it has been a great experience to participate in this event.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; It was amazing to see people solving the problems within few minutes which I had no idea where and how to start. I was particularly impressed by "ACRush" (Winner of Google Code Jam 2008) - before I could even understand the &lt;a href="http://code.google.com/codejam/contest/dashboard?c=186264#s=p1"&gt;"The next number"&lt;/a&gt; problem in Round 1B he submitted the solution for it in 6 mins.&amp;nbsp; Google has again amazed me by providing such a platform for people to compete. The best part of it was making the solution submitted by all users available for download once the competition is over. &amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Having considerable professional experience in IT, I was hoping to fair better. But while attending the contest I felt that it had its own deterring factors. I was trying to visualize everything as Java objects and wasting time in modularizing code and naming it properly. Also having no exposure to such problems took its toll while racing against time. When I looked at the solutions from other users, most of them have used multi-dimensional arrays to solve the problems. Apart from my college days, I had almost never used multi-dimensional arrays in any of the professional projects. "Complex business logic" would typically involve complex queries and triggering different actions when an event occurs. We don't write algorithms or solve problems like these in a typical web application. Also maintaining state in multi-dimensional arrays is more prone to defect which would explain my lack of exposure to it.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Another interesting thing about Google Code Jam is the competition statistics - by Country and Programming language. I was surprised to find that only 1220 contestants from India competed in the qualifiers second to China which had 1324 contestants. But in round one, only 6 from India had the "Perfect Score". I assume most of the university students are not aware of this competition. Google should promote this event better as it is a great platform for students to compete against the world's top coders.&lt;br /&gt;
Programming language: Java - 499 people but C++ - 1200 people. C++ has comfortably outnumbered Java as the preferred programming language in the code jam competition. Not happy to see this as a java developer :) &amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
I would never miss Google Code Jam competition again. I hope that I would fair better in 2010 competition. Congratulations to all the participants of the code jam and thanks to Google for providing this opportunity. Keep going.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9103875830128984607-3249936616316995364?l=www.nvenky.in' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.nvenky.in/feeds/3249936616316995364/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.nvenky.in/2009/09/code-jam-experience.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/3249936616316995364?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/3249936616316995364?v=2" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/2009/09/code-jam-experience.html" title="Google Code Jam 2009 experience" /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><thr:total>4</thr:total></entry><entry gd:etag="W/&quot;DEUMRX46cSp7ImA9WxNSE0w.&quot;"><id>tag:blogger.com,1999:blog-9103875830128984607.post-5513161610572220906</id><published>2009-08-26T12:51:00.000-07:00</published><updated>2009-08-26T12:51:24.019-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-26T12:51:24.019-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="quickly" /><category scheme="http://www.blogger.com/atom/ns#" term="Consultant" /><category scheme="http://www.blogger.com/atom/ns#" term="ThoughtWorks" /><title>Consultant - "Doing things quickly" - Not really</title><content type="html">I was working as a consultant&amp;nbsp;from an Indian IT company&amp;nbsp;at a client location in Melbourne for almost three years. It was an exiting place to work as I was given opportunity try out new technologies for the project.&lt;br /&gt;
&lt;br /&gt;
As a consultant, I had the following perspective on my role and&amp;nbsp;obliged with it:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;I had to &lt;b&gt;quickly &lt;/b&gt;learn the tools and technologies used at my client place (like., Weblogic Portal, Spring, IBatis, Clearcase, etc)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;I had to do my job &lt;b&gt;quickly &lt;/b&gt;to add value to my customer.&lt;/li&gt;
&lt;li&gt;I had to understand the project functionalities &lt;b&gt;quickly&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;I had to adapt to new technologies &lt;b&gt;quickly &lt;/b&gt;and start contributing.&lt;/li&gt;
&lt;/ul&gt;But only when my clients hired three consultants from &lt;b&gt;ThoughtWorks&lt;/b&gt;, I realized how little was my value add to the customer apart from my "doing things quickly".&lt;br /&gt;
&lt;br /&gt;
I had gravely missed to think on these lines as a consultant...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Are we using the right tools? &amp;nbsp;Are there better tools out there?&lt;/b&gt;&amp;nbsp;Clearcase&amp;nbsp;version control&amp;nbsp;- it is being used at my client place for more than 5 years.&amp;nbsp;After the initial&amp;nbsp;hiccups, I got used to it and tried to solve our problems within the tools limits. I never had a clue that this could be challenged. But TW, proposed Subversion as an alternate for development environment and integrated with&amp;nbsp;Subversion to&amp;nbsp;Clearcase behind the scene. Introduction of this SVN to the Test driven development environment is claimed to have helped the developers is refactoring the code at ease.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Are we using the right technology? Can it be done in a simple way with other technology?&lt;/b&gt;&lt;br /&gt;
Weblogic Portal was traditionally used at my client place for more than five years. It is a good technology to work on if you are familiar with it. It had so many features and good IDE to develop things.&lt;br /&gt;
But we had a big learning curve with Weblogic portal in our first project and it has always been difficult for new developers coming into project. Few developers tried proposing alternate technologies but was not able to convince everyone.&lt;br /&gt;
Again TW consultants, annoyed with the time taken to learn,build and deploy portal applications, proposed Spring MVC as the alternate technology. But this time they presented it with a case study comparing the effort &amp;nbsp;involved in developing a functionality in Weblogic portal and Spring MVC. As it directly translated to $$$ terms, it caught the attention of everyone and Spring MVC was inducted into clients technology stack.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Are we up-to-date with technology?&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;Being up-to-date with technology not only helps in doing things in a smarter way but also leads to doing things quicker. I am still wondering how few people are so familiar with the latest open source technologies. For example, which tool will you use for XML processing? &lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Do not choose the opensource library just because you have used it earlier.&lt;/li&gt;
&lt;li&gt;Look out for better opensource libraries which will help you to achieve the result in a smart way.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Be up-to-date about the new libraries.&lt;/li&gt;
&lt;/ul&gt;I never imagined that a technology like "Weblogic Portal" which was considered as the standard for all applications could be replaced. I never thought a tool like "Clearcase" which is being used for 5 years can have an alternate.The lesson I learnt from this experience is&amp;nbsp;&lt;b&gt;"Never take anything for granted".&lt;/b&gt;&amp;nbsp;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;I always thought that I had to learn the technologies used by the client but I have now realized that it is also my duty to identify what is right for the client.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9103875830128984607-5513161610572220906?l=www.nvenky.in' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.nvenky.in/feeds/5513161610572220906/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.nvenky.in/2009/08/consultant-doing-things-quickly-not.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/5513161610572220906?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9103875830128984607/posts/default/5513161610572220906?v=2" /><link rel="alternate" type="text/html" href="http://www.nvenky.in/2009/08/consultant-doing-things-quickly-not.html" title="Consultant - &quot;Doing things quickly&quot; - Not really" /><author><name>Venkatesh Nannan</name><uri>https://profiles.google.com/106535696042665151954</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-P3pBxUcu78c/AAAAAAAAAAI/AAAAAAAACcw/Oj_jtf2VmdE/s512-c/photo.jpg" /></author><thr:total>2</thr:total></entry></feed>

