APIFest08:TaskX
From APIDesign
The judgment day is here! Dear APIFest08 participants, during the last rounds, you were concentrated on making your own solution perfect. However since today you will have to stop looking just at your own solution, you will need to start digging in solutions provided by others to find possible evolution mistakes. This is a new task, different to what you have done so far, but I hope you'll make it. Because only if you find mistakes in solutions provided by others you will be allowed to win TheAPIBook.
If your own solution is found BackwardCompatible, you'll be awarded with 10 points. By default you all have those points. However you can be awarded with 1 point by showing compatibility problems in each solution provided by someone else. Of course, in case somebody finds such problem, the author of the solution looses own 10 points. As I wrote in the last post, I know that at least five solutions have some problems, so do not give up and seek for them! Your points are waiting! Also please note that the fact that I may know about a problem of your solutions does not mean other participants are going to find it. Don't give up and good luck!
First of all you need to setup your working environment:
# create the repository hg clone http://source.apidesign.org/hg/apifest08/ # or update it hg pull; hg update # create directory named by you Joe Hacker would have: mkdir taskx/jhacker
and now your hunt can start. Repeat following tasks as many times you wish. First of all somehow select the solution you want to find problem in. Usually I use a diff:
diff -ru task1/solution03 task4/solution03
Each difference is potential candidate for compatibility problem. It is just necessary to write code against the old API that does something different in the new version. If I notice some potential evolution problem, then I setup the against project and write a test into it to show the error:
# select the solution you want to break, let supposed it is #3: hg copy taskx/jtulach/against-solutionXY/ taskx/jhacker/against-solution03 # now open some of the created files in your favorite editor: netbeans --open taskx/jhacker/against-solution03/project.properties
Now adjust the content of the properties file:
# change definition of apitotest property to solution03: apitotest=solution03 # you can also adjust the taskA and taskB variables to # reflect the days that you want to compete against # for example if there is compatibility problem between # task2 and task3, change them to: taskA=${apifest}/task2 taskB=${apifest}/task3
Now you can open the project in the NetBeans IDE
netbeans --open taskx/jhacker/against-solution03/
or directly edit its jhacker/against-solution03/test/apifest/CurrencyTest.java file. The goal is to make this file compilable against api available in the version taskA. If you execute the project:
ant -f taskx/jhacker/against-solution03/build.xml run
or by pressing F6 in the NetBeans IDE, your test is compiled, executed against taskA and it has to succeed. If it does, the test is executed against taskB library. If it fails, you have demonstrated BackwardCompatibility problem and that is why the build succeeds. Make sure you open the Output Window to see the real result! If the test succeeds with taskB library, the sources of your test are compiled once again against taskB library. This can fail, if there are source incompatibilities. Failure means your success, as you have demonstrated incompatibility! Perfect, you can repeat these steps for another solution.
The rules for writing compatibility tests are similar to API Fest One - e.g. the less tricks you use the better. Where trick means more or less Java Permission. Do not try to use reflection, with that every solution can be broken. Also do not use wildcard imports in source, that can easily break each solution as well. Rules are simple: less tricks is better and I am the judge. Enjoy!
After you are done, please generate the diff using hg diff and submit your solutions by Sun, Oct 26, 2008, morning of CET to our mailing list. Possibly you can ZIP your sources and send them to us too. As soon as we process your submissions, I'll write an APIFest08 report and announce winners. Also I will prepare TheAPIBook for the winner.