tag:blogger.com,1999:blog-38716259824364721872024-03-14T10:37:20.393-07:00Geek SnackPaulo Carolihttp://www.blogger.com/profile/09825058582367262895noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-3871625982436472187.post-34729138219929715862010-03-30T02:20:00.000-07:002010-03-30T02:27:06.049-07:00Git with SVN by Praveen MV<span style="font-weight: bold;">Introduction</span><br />For the uninitiated, Git was invented by Linus Torvalds to support the development of the Linux Kernel, but it has since proven valuable to a wide range of projects. There are two git packages for windows: Cygwin based git and msysGit.<br /><br /><span style="font-weight: bold;">Git concepts</span><br /><br /><span style="font-weight: bold; font-style: italic;">Repository:</span> An archive of what the working tree looked like at different times in the past — whether on your machine or someone else’s. It’s a history of snapshots, and allows you to compare your working tree to those past states.<br /> <br /><span style="font-weight: bold; font-style: italic;">The index:</span> Git does not commit changes directly from the working tree into the repository. Instead, changes are first registered in something called the index. Think of it as a way of “confirming” your changes, one by one, before doing a commit (which records all your approved changes at once).<br /> <br /><span style="font-weight: bold; font-style: italic;">Working tree:</span> Any directory on your file system which has a repository associated with it (typically indicated by the presence of a sub-directory within it named .git.). It includes all the files and sub-directories in that directory.<br /><br /><span style="font-weight: bold; font-style: italic;">Branch:</span> Just a name for a commit, also called a reference. It’s the parentage of a commit which defines its history, and thus the typical notion of a “branch of development”.<br /> <br /><span style="font-weight: bold; font-style: italic;">Master:</span> The mainline of development in most repositories is done on a branch called “master”. Although this is a typical default, it is in no way special.<br /> <br /><span style="font-weight: bold; font-style: italic;">HEAD:</span> HEAD refers to the most recent commit of the last branch you checked out. Thus, if you are currently on the master branch, the words master and HEAD would be equivalent.<br /><br /><span style="font-weight: bold;">Getting started</span><br /><br />Lets start of by seeing how we can checkout exisiting repository , make modifications and check in .Checking out repository is as simple as :<br /><br />git svn clone <url-of-the-repository><br />This might take a long time based on how old the codebase is . It gets information of every thing that happened on the repository , all the logs etc .<br />However the simplest and fastest way to check out exisiting repository is to copy .git folder from any one who has code checked out. Using git bash, navigate to folder containing .git folder and execute the following command<br /><br />git checkout<br />Now we are ready with our local repository .<br />Next as developers we modify the code, add new feature . Now we need to commit . So lets see how to commit a code . Use the following comand to view the modification made to the source code.<br />This comand shows all the new and modified files .<br /><br />git status<br />Now we need to add all the new and modified files to list of files to be committed . Use the following:<br /><br />git add .<br />We can also add one file at a time using<br /><br />git add filename<br />Now we must commit the file added to our local repository<br /><br />git commit -m "Message while commiting"<br />So far we have commited to our local repository . Now we must take updates from the main repository to see if there are any modification or confilicts .<br /><br />git svn rebase<br />This gets the latest files from the repository and updates the modification made by you on to the latest file .Assuming there are no confilicts. Now we can commit our code to the central repository .<br />so we run<br /><br />git svn –dcommit<br />We are done with our first commit .We have covered the basic flow of git .</url-of-the-repository>HariKrishnanhttp://www.blogger.com/profile/14826569810270700936noreply@blogger.com0tag:blogger.com,1999:blog-3871625982436472187.post-30790373991299638332010-01-31T08:30:00.000-08:002010-01-31T08:48:40.174-08:00Do high-performing teams always need retrospectives?by Sumeet Moghe<br /><br />A few months back Patrick Kua wrote a blog conjecturing if the lack of retrospectives is really a smell. Pat mentioned how he was very lucky that the team had some really strong people who got things done and kept the project 'continuously improving'. To quote Patrick, “It’s amazing what a bunch of energized, passionate and people with the “solve the right problem once” attitude can achieve."<br /><br />Reminiscing this post from Pat, I had a few thoughts. Given us agree that:<br />• retrospectives are a 'best practice';<br />• and that they are a tool for improvement;<br /><br />Is it fair for us to say (at least theoretically) that we can take this 'best practice' to an extreme level just as rationale behind extreme programming may suggest?<br />• Second, Agile methods (at least theoretically) assume a team composed of the 'best people' who are 'generalizing specialists' or 'versatilists'.<br />• The key to having a really strong team could then be mechanisms that not only encourage strong communication, but also those that allow teams to recognize problems, find solutions. That then will fuel continuous improvement, perhaps making retrospectives purely an optional ritual.<br /><br /><span style="font-weight: bold;">What could these mechanisms be?</span><br />• My passion for retrospectives set aside, I realize that the practice is definitely more than a decade old in the mainstream. Things have changed significantly since then.<br />• More teams understand the value of solving problems 'just in time';<br />• Command and control leadership may have not disappeared from the horizon, but leaders are slowly discovering their roles in empowering their teams to take more control of situations and problems.<br />• Technology is changing fast and our ability to use tools to make problems visible solve them is fast increasing.<br />• Here are a few ideas I had to increase communication and to recognize and solve problems on a team. These ideas don't necessarily negate the requirement of a retrospective, but they can perhaps take us one step further to being high performing teams.<br /><br /><span style="font-weight: bold;">A low tech method - daily 'hot topics'</span><br /><br />A few months back, we were a team of 7 people with Ritin Tandon at the helm as the team lead. Ritin devised a method for us to recognize issues and solve them on an ongoing basis. In the team area, Ritin put up a flip chart called "Hot Topics". Every time anyone in the team had something to discuss or a non-urgent problem to solve, they'd put up a sticky on the flipchart. At the end of the day, one of us (often Ritin) would facilitate a quick discussion around our hot topics and we'd volunteer to solve the problems then and there. If we expected that a problem would take time to solve, then one or more of us would sign up to work on it and we kept reporting back progress to the team. It has been a fantastic practice and for the investment of a few minutes each day, we got a huge sense of fulfillment by taking blockers out of our way. What we were doing was a bit of a mini-retrospective each day and that helped us be a continuously improving team.<br /><br /><span style="font-weight: bold;">A hi-tech method - use Web 2.0 tools to surface and resolve problems.</span><br /><br />There are quite a few tools these days that can help create high quality communication in teams. Two tools that I think can be really useful to surface and resolve problems in a team are Google Wave and Google Moderator. And of course there’s the indigenous www.ideaboardz.com.<br /><br /><span style="font-weight: bold; font-style: italic;">Google Wave</span><br />Google Wave follows the paradigm of blips. It could be quite easy to create retrospective playground on Google Wave where you create brainstorming blips (Keep Doing, Stop Doing, etc) on the wave and people can add their thoughts and following discussion under those blips. In fact I think this could be even better than a ritual retrospective where we often don't discuss issues because of a lack of time. Using this method, people can actually choose to comment on every issue they feel passionately about instead of restraining themselves only because others don't see the value in their thoughts yet!<br /><br /><span style="font-weight: bold; font-style: italic;">Google Moderator</span><br />Google Moderator is a great social application to crowd source ideas. You could potentially ask your team an open ended question about ideas for improving the project. As the team posts it ideas, members can vote up the ideas they like the most and provide commentary on its implementation. Over time, you have a nice prioritized list of improvement activities for your project. As you implement these ideas, the burning need for a retrospective may disappear.HariKrishnanhttp://www.blogger.com/profile/14826569810270700936noreply@blogger.com0tag:blogger.com,1999:blog-3871625982436472187.post-50861260858220810992009-12-13T21:12:00.000-08:002010-01-16T13:19:58.449-08:00Concurrency, Time and Clojureby Suresh Harikrishnan<br /><br /><a href="http://www.scribd.com/doc/23967584/Geek-Snack-Episode-7">Download </a>this one-page Geek snack episode, and place it at your snack area.<br /><br />Have you ever wondered what concurrency and time related constructs your favorite programming language provides?<br /><br />I did, after watching this wonderful presentation by Rich Hickey:<br />http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey<br /><br />Java supports concurrency using its Threads library. There are a few constructs supporting multi-threading, but mostly to ensure you play safe when using threads. These constructs are available to protect the mutable state in objects. And Java's notion of time is limited to a few (rather awful) classes in its library. Rich Hickey uses the example of athletes running a race to show the problem of concurrency with most languages in use today. If you want to know who is leading a race, you don't ask the athletes to stop running. The athletes keep running as you notice the current standings. Simply put, Java and other popular languages presumes single shared timeline.<br /><br />Compare this with Clojure. Clojure's approach to concurrency is provided by 2 distinct features - functional approach to its data structures and different styles of concurrency constructs. It's pure functions are time independent, in other words, side effects free. Clojure data structures are immutable, but persistent. It differentiates "Value" from the notion of identity. Most OO languages treat them as one - an Account object could have no balance, and then when you deposit something into this account, it takes a positive balance. Clojure on the other hand would differentiate the account identity from the actual balance in that account.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI8L4-DZ1vVAwAoA78iUFYUAR8BDsFtoqRnYwdOhIX3fY1AnkW7E_g42wyZbQl0SGPMq-9tKFm55jdegM5PW17CHN7gkrEtmsJeu2oHTiW-mB1y7viB1MaV5BHyD4Z9w25y_PqLjQMSD3M/s1600-h/geeksnack+episode+7+image.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 290px; height: 285px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI8L4-DZ1vVAwAoA78iUFYUAR8BDsFtoqRnYwdOhIX3fY1AnkW7E_g42wyZbQl0SGPMq-9tKFm55jdegM5PW17CHN7gkrEtmsJeu2oHTiW-mB1y7viB1MaV5BHyD4Z9w25y_PqLjQMSD3M/s320/geeksnack+episode+7+image.jpg" alt="" id="BLOGGER_PHOTO_ID_5414957090388210610" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Only the references are mutable. And Clojure supports 3 types of mutable references:<br />•Synchronous coordinated changes between threads using refs.<br /> ◦Clojure uses STM for ref modifications.<br /> ◦You need to be inside a transaction context to change refs<br />•Asynchronous coordinated changes between threads using agents.<br /> ◦Ala Actor models<br /> ◦You pass a function to change the state of the agent<br />•Isolate changes within a thread using vars.<br /> ◦Equivalent to thread locals.<br /><br />Check out more about clojure at http://clojure.org. There is lot more to say about clojure, maybe later :)HariKrishnanhttp://www.blogger.com/profile/14826569810270700936noreply@blogger.com0tag:blogger.com,1999:blog-3871625982436472187.post-70664266964036348792009-11-18T20:31:00.000-08:002010-01-16T13:24:44.920-08:00Java – Bridges in Generics - By Venkat RS<meta equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Charikri%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml> <w:worddocument> <w:view>Normal</w:View> <w:zoom>0</w:Zoom> <w:punctuationkerning/> <w:validateagainstschemas/> <w:saveifxmlinvalid>false</w:SaveIfXMLInvalid> <w:ignoremixedcontent>false</w:IgnoreMixedContent> <w:alwaysshowplaceholdertext>false</w:AlwaysShowPlaceholderText> <w:compatibility> <w:breakwrappedtables/> <w:snaptogridincell/> <w:wraptextwithpunct/> <w:useasianbreakrules/> <w:dontgrowautofit/> </w:Compatibility> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:latentstyles deflockedstate="false" latentstylecount="156"> </w:LatentStyles> </xml><![endif]--><style> <!-- /* Font Definitions */ @font-face {font-family:"Trebuchet MS"; panose-1:2 11 6 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; mso-bidi-font-size:10.0pt; font-family:"Trebuchet MS"; mso-fareast-font-family:"Times New Roman"; mso-bidi-font-family:"Times New Roman";} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--> <p class="MsoNormal"><span style="font-size:10pt;">by Venkatesh R S
<br />
<br /><a href="http://www.scribd.com/doc/22696513/Geeksnack-Episode-6">Download </a>this one-page Geek snack episode, and place it at your snack area.
<br />
<br /></span></p><p class="MsoNormal"><span style="font-size:10pt;">In the non-Generics Java world (JDK 1.4 or before) we would have noticed all wrapper classes that implement Comparable interface have got two compareTo methods as shown below:<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:10pt;"><o:p> </o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" >public interface Comparable {<o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" ><span style=""> </span>public int compareTo( object obj );<o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" >}<o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" ><o:p> </o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" >public final class Long extends Number implements Comparable {<o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" ><o:p> </o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" ><span style=""> </span>//Override<o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" ><span style=""> </span>public int compareTo( Object obj )<o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" ><span style=""> </span>{<o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" ><span style=""> </span>return compareTo( (Long)obj );<o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" ><span style=""> </span>}<o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" ><o:p> </o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" ><span style=""> </span>public int compareTo( Long anotherLong) {<o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" ><span style=""> </span>//logic for comparing two Long objects.<o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" ><span style=""> </span>return result;<o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" ><span style=""> </span>}<o:p></o:p></span></p> <p class="MsoNormal"><span style=";font-family:";font-size:10pt;" >}<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:10pt;"><span style="">
<br /></span></span></p><p class="MsoNormal"><span style="font-size:10pt;"><span style=""></span>A convenient method taking in an argument of type Long for comparison.<o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:10pt;"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-size:10pt;"><span style=""></span>And the one that’s implemented as a result of implementing Comparable interface which takes in an argument of type Object. This method internally casts the incoming object to the given class type (Long) and delegates the call to the convenient compareTo method as shown above. If it couldn’t cast, then a ClassCastException is thown. We call this method as ‘bridge‘ method. <o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:10pt;"><o:p> </o:p></span></p><span style="font-size:10pt;"><span style=""></span>But Post Java 5, with introduction of Generics and type safety, things have improved</span><span style="font-size:10pt;"> and we no more need the bridge method, compareTo(Object o) and doesn’t have to worry about any ClassCastException anymore. The implementation of the wrapper class, Long, in Java 5 or above looks as follows:<o:p></o:p></span> <p class="MsoNormal">
<br /><span style="font-size:10pt;"><o:p></o:p></span></p><p class="MsoNormal"><meta equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Charikri%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><link rel="Edit-Time-Data" href="file:///C:%5CDOCUME%7E1%5Charikri%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_editdata.mso"><!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><!--[if gte mso 9]><xml> <w:worddocument> <w:view>Normal</w:View> <w:zoom>0</w:Zoom> <w:punctuationkerning/> <w:validateagainstschemas/> <w:saveifxmlinvalid>false</w:SaveIfXMLInvalid> <w:ignoremixedcontent>false</w:IgnoreMixedContent> <w:alwaysshowplaceholdertext>false</w:AlwaysShowPlaceholderText> <w:compatibility> <w:breakwrappedtables/> <w:snaptogridincell/> <w:wraptextwithpunct/> <w:useasianbreakrules/> <w:dontgrowautofit/> </w:Compatibility> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:latentstyles deflockedstate="false" latentstylecount="156"> </w:LatentStyles> </xml><![endif]--><style> <!-- /* Font Definitions */ @font-face {font-family:"Trebuchet MS"; panose-1:2 11 6 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; mso-bidi-font-size:10.0pt; font-family:"Trebuchet MS"; mso-fareast-font-family:"Times New Roman"; mso-bidi-font-family:"Times New Roman";} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--> </p><p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;color:blue;" >public</span><span style=";font-family:";font-size:10pt;" > <span style="color:blue;">final</span> <span style="color:blue;">class</span> <span style="color:olive;">Long</span> <span style="color:blue;">extends</span> <span style="color:olive;">Number</span> <span style="color:blue;">implements</span> <span style="color:olive;">Comparable</span><<span style="color:olive;">Long</span>> {<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" ><span style=""> </span>@Override<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" ><span style=""> </span><span style="color:blue;">public</span> <span style="color:blue;">int</span> compareTo(<span style="color:olive;">Long</span> anotherLong) {<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" ><span style=""> </span><span style="color:green;">//logic for comparing to Long objects</span><o:p></o:p></span></p> <p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" ><span style=""> </span><span style="color:blue;">return</span> result;<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" ><span style=""> </span>}<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" >}<o:p></o:p></span></p> <p class="MsoNormal" style="">
<br /><span style="font-size:10pt;"><span style=""></span></span></p><p class="MsoNormal" style=""><span style="font-size:10pt;"><span style=""></span>But hold on second, isn’t Java 5 and above compilers has got something called type erasure, a process where the compiler will remove all the information related to type parameters and type arguments within a class or method for the sake of being binary compatible with Java libraries/applications that were created before generics?<o:p></o:p></span></p> <p class="MsoNormal" style="">
<br /><span style="font-size:10pt;"><span style=""></span></span></p><p class="MsoNormal" style=""><span style="font-size:10pt;"><span style=""></span>Doesn’t it mean that the above Java 5 Long code after compilation should get translated as it is in the Java 1.4 versions?<o:p></o:p></span></p> <p class="MsoNormal" style="">
<br /><span style="font-size:10pt;"><span style=""></span></span></p><p class="MsoNormal" style=""><span style="font-size:10pt;"><span style=""></span>If that’s the case, where does the bridge method go which maintains the contract between Long and Comparable interface? <o:p></o:p></span></p> <p class="MsoNormal" style=""><span style="font-size:10pt;">
<br /></span></p><p class="MsoNormal" style=""><span style="font-size:10pt;">Things are suppose to break here. But it actually doesn’t why?<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style="font-size:10pt;"><o:p> </o:p></span></p> <p class="MsoNormal" style=""><span style="font-size:10pt;"><span style=""></span>That’s where ‘<b style="">Bridges</b>‘ in Generics comes into picture. When the compiler translates the code for binary compatibility with older applications, it also adds the required bridge methods automatically in order to sustain the implementation contracts. In this case the contract is between Comparable and the class(Long) that is implementing it.<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style="font-size:10pt;"><span style=""> </span><o:p></o:p></span></p> <p class="MsoNormal" style=""><span style="font-size:10pt;"><span style=""></span>The following snippet of reflection code for the Long.class should reveal the secret.<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style="font-size:10pt;"><o:p> </o:p></span></p> <p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;color:blue;" >final</span><span style=";font-family:";font-size:10pt;" > <span style="color:olive;">Method</span>[] methods = <span style="color:olive;">Long</span>.<span style="color:blue;">class</span>.getDeclaredMethods();<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;color:blue;" >for</span><span style=";font-family:";font-size:10pt;" > (<span style="color:olive;">Method</span> method : methods) {<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" ><span style=""> </span><span style="color:olive;">System</span>.out.println(method.toString() +<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" ><span style=""> </span><span style=""> </span>"<span style="color:fuchsia;"> - IsBrige?:</span>" + method.isBridge());<o:p></o:p></span></p> <p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" >}<o:p></o:p></span></p> <p class="MsoNormal" style="">
<br /><span style=";font-family:";font-size:10pt;" ><span style=""></span></span></p><p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" ><span style="">Output: .....
<br /></span></span></p><p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" ><span style="">
<br /></span></span></p><p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" ><span style="">public int
<br /></span></span></p><p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" ><span style="">java.lang.Long.compareTo(java.lang.Long) - IsBrige?:false
<br /></span></span></p><p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" ><span style="">public int
<br /></span></span></p><p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" ><span style="">java.lang.Long.compareTo(java.lang.Object) - IsBrige?:true</span></span></p><p class="MsoNormal" style="">
<br /><span style=";font-family:";font-size:10pt;" ><span style=""></span></span></p><p class="MsoNormal" style=""><span style=";font-family:";font-size:10pt;" ><span style="">
<br /></span></span><span style="font-size:10pt;"><!--[endif]--><o:p></o:p></span></p> <p></p> HariKrishnanhttp://www.blogger.com/profile/14826569810270700936noreply@blogger.com1tag:blogger.com,1999:blog-3871625982436472187.post-83379927810315031182009-09-08T20:52:00.000-07:002009-09-08T20:59:40.088-07:00Does it Really Work?<meta equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 12"><meta name="Originator" content="Microsoft Word 12"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cpcaroli%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"><link rel="themeData" href="file:///C:%5CDOCUME%7E1%5Cpcaroli%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"><link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5Cpcaroli%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"><!--[if gte mso 9]><xml> <w:worddocument> <w:view>Normal</w:View> <w:zoom>0</w:Zoom> <w:trackmoves/> <w:trackformatting/> <w:punctuationkerning/> <w:validateagainstschemas/> <w:saveifxmlinvalid>false</w:SaveIfXMLInvalid> <w:ignoremixedcontent>false</w:IgnoreMixedContent> <w:alwaysshowplaceholdertext>false</w:AlwaysShowPlaceholderText> <w:donotpromoteqf/> <w:lidthemeother>EN-US</w:LidThemeOther> <w:lidthemeasian>X-NONE</w:LidThemeAsian> <w:lidthemecomplexscript>X-NONE</w:LidThemeComplexScript> <w:compatibility> <w:breakwrappedtables/> <w:snaptogridincell/> <w:wraptextwithpunct/> <w:useasianbreakrules/> <w:dontgrowautofit/> <w:splitpgbreakandparamark/> <w:dontvertaligncellwithsp/> <w:dontbreakconstrainedforcedtables/> <w:dontvertalignintxbx/> <w:word11kerningpairs/> <w:cachedcolbalance/> </w:Compatibility> <w:browserlevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathpr> <m:mathfont val="Cambria Math"> <m:brkbin val="before"> <m:brkbinsub val="--"> <m:smallfrac val="off"> <m:dispdef/> <m:lmargin val="0"> <m:rmargin val="0"> <m:defjc val="centerGroup"> <m:wrapindent val="1440"> <m:intlim val="subSup"> <m:narylim val="undOvr"> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"> <w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"> <w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"> <w:lsdexception locked="false" priority="39" name="toc 1"> <w:lsdexception locked="false" priority="39" name="toc 2"> <w:lsdexception locked="false" priority="39" name="toc 3"> <w:lsdexception locked="false" priority="39" name="toc 4"> <w:lsdexception locked="false" priority="39" name="toc 5"> <w:lsdexception locked="false" priority="39" name="toc 6"> <w:lsdexception locked="false" priority="39" name="toc 7"> <w:lsdexception locked="false" priority="39" name="toc 8"> <w:lsdexception locked="false" priority="39" name="toc 9"> <w:lsdexception locked="false" priority="35" qformat="true" name="caption"> <w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"> <w:lsdexception locked="false" priority="1" name="Default Paragraph Font"> <w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"> <w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"> <w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"> <w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"> <w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"> <w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"> <w:lsdexception locked="false" unhidewhenused="false" name="Revision"> <w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"> <w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"> <w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"> <w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"> <w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"> <w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"> <w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"> <w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"> <w:lsdexception locked="false" priority="37" name="Bibliography"> <w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"> </w:LatentStyles> </xml><![endif]--><style> <!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} @font-face {font-family:"Trebuchet MS"; panose-1:2 11 6 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin-top:0in; margin-right:0in; margin-bottom:10.0pt; margin-left:0in; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} .MsoPapDefault {mso-style-type:export-only; margin-bottom:10.0pt; line-height:115%;} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.0in 1.0in 1.0in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0in; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin;} </style> <![endif]--><i><span style=";font-family:";font-size:12;" ><o:p></o:p></span></i><span style="line-height: 115%;font-family:";font-size:12;" >by Francisco Trindade</span>
<br /><p class="MsoNormal"><span style="line-height: 115%;font-family:";font-size:12;" >
<br /></span><span style="line-height: 115%;font-family:";font-size:12;" ><a style="color: rgb(0, 0, 102);" href="http://www.geocities.com/paulocaroli/agile/geek_snack_episode5.pdf">Download </a><span style="color: rgb(0, 0, 102);">this one-page Geek snack episode, and place it at your snack area.</span></span></p><p class="MsoNormal">
<br /><span style="line-height: 115%;font-family:";font-size:12;" ><o:p></o:p></span></p> <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style=";font-family:";font-size:12;" ><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style=";font-family:";font-size:12;" >Some time ago, during a TW London Thursday event, I had the pleasure to see the <a href="http://www.infoq.com/presentations/Agile-UCD-Robertson-Johnston">Agile Methods and User Centered Design presentation from Dave Robertson and John Johnston </a>(or at least part of it), about how Agile and User Centered design are more a match, sharing goals and values, than different approaches to software development.</span></p><p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;">
<br /><span style=";font-family:";font-size:12;" ><o:p></o:p></span></p> <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style=";font-family:";font-size:12;" ><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style=";font-family:";font-size:12;" >If you have some time you should really watch it, it is worth the time.</span></p><p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;">
<br /><span style=";font-family:";font-size:12;" ><o:p></o:p></span></p> <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style=";font-family:";font-size:12;" ><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style=";font-family:";font-size:12;" >The overall presentation is really good, but the reason I’m posting here is one specific point that was mentioned, which I believe really hit the spot, and that’s when they say we should rethink the word work in the “the simplest thing that could possibly work” sentence.</span></p><p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;">
<br /><span style=";font-family:";font-size:12;" ><o:p></o:p></span></p> <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style=";font-family:";font-size:12;" ><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style=";font-family:";font-size:12;" >This point goes back to the Agile Vs Usability discussion and it is very correct IMO, because it reiterates that development teams should not deliver any code just because it was quick to develop it and the client is happy (although he shouldn’t be at all) since it didn’t cost a fortune.</span></p><p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;">
<br /><span style=";font-family:";font-size:12;" ><o:p></o:p></span></p> <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style=";font-family:";font-size:12;" ><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style=";font-family:";font-size:12;" >And what is interesting about this subject is how agile teams don’t usually accept low quality code standards (code without tests, lots of hacks, etc..), but easily accept low usability standards, not understanding that is also their responsibility to define what a good user experience is.</span></p><p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;">
<br /><span style=";font-family:";font-size:12;" ><o:p></o:p></span></p> <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style=";font-family:";font-size:12;" ><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style=";font-family:";font-size:12;" >What I’m NOT trying to say is that the user should be left outside from the application design. He should definitely have his opinion (and a strong one), but should also receive advice in UX standards as much as he should in code quality, making sure that he understands what he loses when is trying to save money on each particular feature.</span></p><p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;">
<br /><span style=";font-family:";font-size:12;" ><o:p></o:p></span></p> <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style=";font-family:";font-size:12;" ><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style=";font-family:";font-size:12;" ><span style="">(read more</span> at <a href="http://blog.franktrindade.com/">Franciscos’s Blog</a>).
<br /></span></p><p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;">
<br /><span style=";font-family:";font-size:12;" ><o:p></o:p></span></p> <p class="MsoNormal"><span style="line-height: 115%;font-family:";font-size:12;" >
<br /><!--[if !supportLineBreakNewLine]-->
<br /><!--[endif]--></span></p> Paulo Carolihttp://www.blogger.com/profile/09825058582367262895noreply@blogger.com0tag:blogger.com,1999:blog-3871625982436472187.post-80834389153833371672009-08-04T00:53:00.000-07:002009-08-04T01:03:13.024-07:00Measuring Value of Automation Tests<span style="font-style: italic;">by Preetam Reddy</span>
<br />
<br /><meta equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 12"><meta name="Originator" content="Microsoft Word 12"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cpcaroli%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"><link rel="themeData" href="file:///C:%5CDOCUME%7E1%5Cpcaroli%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"><link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5Cpcaroli%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"><!--[if gte mso 9]><xml> <w:worddocument> <w:view>Normal</w:View> <w:zoom>0</w:Zoom> <w:trackmoves/> <w:trackformatting/> <w:donotshowrevisions/> <w:donotprintrevisions/> <w:donotshowmarkup/> <w:donotshowcomments/> <w:donotshowinsertionsanddeletions/> <w:donotshowpropertychanges/> <w:punctuationkerning/> <w:validateagainstschemas/> <w:saveifxmlinvalid>false</w:SaveIfXMLInvalid> <w:ignoremixedcontent>false</w:IgnoreMixedContent> <w:alwaysshowplaceholdertext>false</w:AlwaysShowPlaceholderText> <w:donotpromoteqf/> <w:lidthemeother>EN-US</w:LidThemeOther> <w:lidthemeasian>X-NONE</w:LidThemeAsian> <w:lidthemecomplexscript>X-NONE</w:LidThemeComplexScript> <w:compatibility> <w:breakwrappedtables/> <w:snaptogridincell/> <w:wraptextwithpunct/> <w:useasianbreakrules/> <w:dontgrowautofit/> <w:splitpgbreakandparamark/> <w:dontvertaligncellwithsp/> <w:dontbreakconstrainedforcedtables/> <w:dontvertalignintxbx/> <w:word11kerningpairs/> <w:cachedcolbalance/> </w:Compatibility> <m:mathpr> <m:mathfont val="Cambria Math"> <m:brkbin val="before"> <m:brkbinsub val="--"> <m:smallfrac val="off"> <m:dispdef/> <m:lmargin val="0"> <m:rmargin val="0"> <m:defjc val="centerGroup"> <m:wrapindent val="1440"> <m:intlim val="subSup"> <m:narylim val="undOvr"> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"> <w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"> <w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"> <w:lsdexception locked="false" priority="39" name="toc 1"> <w:lsdexception locked="false" priority="39" name="toc 2"> <w:lsdexception locked="false" priority="39" name="toc 3"> <w:lsdexception locked="false" priority="39" name="toc 4"> <w:lsdexception locked="false" priority="39" name="toc 5"> <w:lsdexception locked="false" priority="39" name="toc 6"> <w:lsdexception locked="false" priority="39" name="toc 7"> <w:lsdexception locked="false" priority="39" name="toc 8"> <w:lsdexception locked="false" priority="39" name="toc 9"> <w:lsdexception locked="false" priority="35" qformat="true" name="caption"> <w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"> <w:lsdexception locked="false" priority="1" name="Default Paragraph Font"> <w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"> <w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"> <w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"> <w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"> <w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"> <w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"> <w:lsdexception locked="false" unhidewhenused="false" name="Revision"> <w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"> <w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"> <w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"> <w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"> <w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"> <w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"> <w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"> <w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"> <w:lsdexception locked="false" priority="37" name="Bibliography"> <w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"> </w:LatentStyles> </xml><![endif]--><style> <!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face {font-family:"Trebuchet MS"; panose-1:2 11 6 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; mso-bidi-font-size:10.0pt; font-family:"Trebuchet MS","sans-serif"; mso-fareast-font-family:"Times New Roman"; mso-bidi-font-family:"Times New Roman";} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:10.0pt; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt; mso-ascii-font-family:Times; mso-fareast-font-family:Times; mso-hansi-font-family:Times;} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.0in 1.0in 1.0in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} </style> <![endif]--> <p class="MsoNormal"><span style="font-size:10;">The value of test automation is often described in terms of the cost benefits due to reduction in manual testing effort (and the resources needed thereof) and also their ability to give fast feedback. However, this is based on a key assumption that the automated tests are serving their primary purpose – to repeatedly, consistently, and quickly validate that the application is within the threshold of acceptable defects.
<br /></span></p><p class="MsoNormal">
<br /><span style="font-size:10;"><o:p></o:p></span></p> <p class="MsoNormal"><span style="font-size:10;">Since it is impossible to know most of the defects in an application without using it over a period of time (either by a manual testing team or by users in production), we will need statistical concepts and models to help us design and confirm that the automated tests are indeed serving their primary purpose... (</span>read more at <a href="http://agileramblings.blogspot.com/2009/07/measuring-value-of-automation-tests.html">Preetam’s blog</a>).
<br /></p>
<br />
<br />Download this Geek Snack episode <a href="http://www.geocities.com/paulocaroli/agile/geek_snack_episode4.pdf">here</a>.
<br />
<br />
<br />Paulo Carolihttp://www.blogger.com/profile/09825058582367262895noreply@blogger.com0tag:blogger.com,1999:blog-3871625982436472187.post-7326540532761277192009-07-15T22:18:00.000-07:002009-08-04T00:52:24.637-07:00Velocity gone wrong #1: Done is not done<span style="font-style: italic;">by Danilo Sato</span><br /><br />Dan North wrote an interesting post about the perils of estimation, questioning our approach to inceptions, release planning, and setting expectations about scope. This made me think about the implications of those factors once a project starts, and I came up with some anti-patterns on the usage of velocity to track progress. This is my first attempt at writing about them.<br /><br />Before we start, it’s important to understand what velocity means. My simple definition of velocity is the total number of estimation units for the items delivered in an iteration. Estimation unit can be whatever the team chooses: ideal days, hours, pomodoros, or story points. The nature of items may vary as well: features, use cases, and user stories are common choices. Iteration is a fixed amount of time where the team will work on delivering those items. Sounds simple? Well… there’s one concept that is commonly overlooked and that’s the source of the first anti-pattern: what does delivered means?<br /><br />… (read more at <a href="http://www.dtsato.com/blog/2009/07/03/velocity-gone-wrong-done-is-not-done/">Danilo’s blog</a>).<br /><br /><br />Download this Geek Snack episode <a href="http://www.geocities.com/paulocaroli/agile/geek_snack_episode3.pdf">here</a>.Paulo Carolihttp://www.blogger.com/profile/09825058582367262895noreply@blogger.com0tag:blogger.com,1999:blog-3871625982436472187.post-52541747202080841302009-06-08T11:49:00.000-07:002009-08-04T00:51:46.570-07:00Document Oriented Databases<span style="font-style: italic;">by Hari Krishnan</span><br /><br /><span style="font-weight: bold;font-family:trebuchet ms;" >History</span><br /><br />Relational Databases have been almost the only way applications persist data. In the old days when code was written mostly with languages like COBOL, even navigational databases were sufficient. The switch to relational databases made it easier to query. Not much has changed in the way we store data since then. This may be attributed to fact that query performance is still the most important aspects for choosing a persistence mechanism.<br />Object oriented code as we all know has to go through mapping tools to be persisted as relational entities. Are we going to use the same database concepts in the coming years?<br /><br /><span style="font-weight: bold;">Retrospect</span><br /><br />Have you been bothered by the below issues?<br />• We model business logic as interaction between objects. Concepts such as triggers also model some amount of business logic. Though the confusion should not arise, many a times people mix business logic in database layer and business layer. In some rare circumstances there may even be duplication of logic in Business layer and Database layer. Example: When a new customer is created, a trigger inserts a new row into another table called privileged customer based on a data condition. The trigger here has business logic in it which is not covered by unit test cases.<br />• Applications have Domain validations like customer name cannot be null. If you have such validations are in our code, which we normally do, then why do we need a database that also does these validations?<br />• We create great Object oriented business layer and lose sleep over mapping them to a relational model. All I care about is persistence of the state of my objects. Though I agree relational databases have very good query performance, are we really keeping our eyes closed to other persistence techniques?<br /><br /><span style="font-weight: bold;">Alternate Approach</span><br /><br />CouchDB – A Document Oriented Database: Document-based databases do not store data in tables with uniform sized fields for each record. Instead, each record is stored as a document that has certain characteristics. Any number of fields of any length can be added to a document.<br />CouchDB is a distributed, fault-tolerant and schema-free document-oriented database accessible via a RESTful HTTP/JSON API. Couch DB is not an object-oriented database.<br /><br />In a relational database we would store addresses of a customer in a different table, with a foreign key linking it to the customer.<br />With a document-oriented database, such as CouchDB, the nested resources maybe stored together with the main resource. Example JSON Document:<br /><span style="font-family:courier new;">{</span><br /><span style="font-family:courier new;">"name": "Geeky Customer",</span><br /><span style="font-family:courier new;">"adresses": [</span><br /><span style="font-family:courier new;">{"street": "Wall Street", "Number": "2"},</span><br /><span style="font-family:courier new;">{"street": "Dalal Street", "Number": "4"},</span><br /><span style="font-family:courier new;">]</span><br /><span style="font-family:courier new;">}</span><br />This brings us to an interesting thought. We do not require ORM frameworks like hibernate and active record which are mostly written around SQL-like problems that CouchDB just doesn’t have.<br />There are libraries like CouchRest, RelaxDB, ActiveCouch etc which provide simple ways to connect to CouchDB.<br />I have taken CouchDB only as an example. There are many new database which are quickly becoming popular for specific situations. It may be worth the effort to take a look at such alternatives.<br /><br />Download this Geek Snack episode <a href="http://www.geocities.com/paulocaroli/agile/geek_snack_episode2.pdf">here</a>.HariKrishnanhttp://www.blogger.com/profile/14826569810270700936noreply@blogger.com1tag:blogger.com,1999:blog-3871625982436472187.post-4384705337176611242009-04-30T04:50:00.000-07:002009-08-04T00:51:01.081-07:00Agile linear algebra questionnaire<span style="font-weight: bold;font-size:130%;" >Test your Agile linear algebra</span><br /><br /><span style="font-style: italic;">By Paulo Caroli</span><br /><br />Releasing planning, Iteration planning, velocity and burn up charts are basic linear algebra!<br /><br />From Wikipedia: “Algebra is a part of mathematics (math) that helps show the general links between numbers and math operations (adding, subtracting, multiplying or dividing) used on the numbers. Algebra does this by using letters (a,b,c,...) or other symbols to represent numbers, either because the numbers are unknown or because the numbers change during the course of the problem, in which case the letters are called variables.<br />Let’s test your basic Agile linear algebra knowledge!<br /><br />Check out the formulae below and try out the questionnaire.<br /><br /><span style="font-weight: bold;font-size:130%;" >The Formulae</span><br /><br />Vp = Ro / Ip<br />The planned average velocity (Vp) is the number of story points planned for the release (Ro) by the number of planned iterations (Ip).<br /><br />V = ∑Si / i<br />The average velocity of a team (V) is the sum delivered story points per iteration (∑Si) by the number of iterations elapsed (i).<br /><br />Ve = V + ∆V<br />Velocity expected is the average velocity (V ) plus the expected velocity variation (∆V). Velocity expected is commonly used for planning activities, such as iteration and release planning.<br /><br />R = Ro + ∆R<br />The current total story points planned for the release (R) is the original story points planned for the release (Ro) plus the delta of story points for the release (∆R).<br /><br />Rm = R - ∑Si<br />The number of story points remaining for the release (Rm ) is the current total Story points for the release (R ) minus the sum of completed story points for the iterations (∑Si).<br /><br />Ir = Rm / Ve<br />The number of iterations remaining (Ir) is the number of story points remaining for the release (Rm ) by the expected velocity (Ve)<br /><br /><br /><span style="font-weight: bold;font-size:130%;" >Questionnaire</span><br /><br />Problem 1<br />An agile team plans to deliver 400 story points in 10 iterations. What is the planned average velocity for the team?<br />(a) 10 sp/it (b) 20 sp/it (c) 40 sp/it (d) 400 sp/it (e) other<br /><br />Problem 2<br />A team has average velocity of 10 sp/it. Extra resources are added to the team, thus creating an expected rise in velocity of 4 sp/it. What is the expected velocity for the team?<br />(a) 10 sp/it (b) 14 sp/it (c) 4 sp/it (d) 6 sp/it (e) other<br /><br />Problem 3<br />In Iteration 1, the team delivered 10 story points, in iteration 2 the team delivered 14 story points, in Iteration 3 the team delivered 12 story points. What is the average velocity for the team?<br />(a) 6 sp/it (b) 12 sp/it (c) 24 sp/it (d) 36 sp/it (e) other<br /><br />Problem 4<br />Consider the team iteration history of Problem 3. The original release plan is to deliver 400 story points. Assume that the team is about to start Iteration 4, and that the team is able to keep the same average velocity from the first 3 iteration for the remaining iterations of the release. The project manager decides to add an extra pair of developer to the team; and the velocity is expected to increase by 2 sp/it. How many iterations (in total) will it take for the team to deliver the 400 story points planned for the release?<br />(a) 23it (b) 26 it (c) 29 it (d) 32 it (e) other<br /><br />Problem 5<br />Same as Problem 4, but 140 sp have been de-scoped from the release. How many more iterations will it take for the team to deliver the number of story points planned for the release?<br />(a) 12it (b) 16 it (c) 26 it (d) 36 it (e) other<br /><br />Problem 6<br />Same as Problem 4. How many story points should be de-scoped from the release to enable the software to be released after a total of 12 iterations?<br />a) 0sp (b) 112 sp (c) 196sp (d)238 sp (e) other<br /><br />Download this Geek Snack episode <a href="http://www.geocities.com/paulocaroli/agile/geek_snack_episode1.pdf">here</a>.Paulo Carolihttp://www.blogger.com/profile/09825058582367262895noreply@blogger.com3tag:blogger.com,1999:blog-3871625982436472187.post-33955865269673971002009-04-30T04:42:00.000-07:002009-04-30T06:03:49.518-07:00Welcome to GeekSnackOften we (geeks) find ourselves at the pantry looking for snacks and geeking out. <br /><br />To support these hungry geeks, we are periodically printing out some geeky one-page article and placing it in our office area (next to the snacks cabinet).<br /><br />In this blog we will upload the Geek Snack episodes. Also we will post comments and discussions for the episodes.Paulo Carolihttp://www.blogger.com/profile/09825058582367262895noreply@blogger.com0