PE is the new Component Development Champion!
Friday, November 2, 2007
by the Development Review Board
TopCoder Members
After three days of on-site finals, PE emerged as the winner of the 2007 TopCoder Collegiate Challenge Component Development competition, taking home the top prize of $15,000. lyt came in second, and serine took home the third.
Component Development Final Scores
Handle | Total Points |
PE | 100 |
lyt | 47 |
serine | 37 |
enefem21 | 32 |
Yeung | 24 |
catcher | 22 |
fanse | 22 |
Wednesday, October 31, 2007
Round 1: Subversion Path-Based Authorization Development
by cnettel
On the development side, the first component of this year's TCCC was very similar for .NET and Java. Although the .NET developers faced a few Java-isms in the UML docs, both designs fit well into their respective environment. Hence, the choice was totally a matter of developer preference, and maybe to some degree a desire to win the per-component prize. The fact that Java 5 is now used in many components also makes the differences smaller, with things like generics and enums.
The actual scope of the component was to provide an object model and convenient access to the contents of files for SVN authorization settings. For an SVN server handling multiple source code repositories and projects with granular security access, maintaining the associated flat text files of permissions and group structure can be a horror. The requirements and the design put a lot of effort into maintaining the specific structure of the file read, even when it contains semi-illegal or redundant information. Even whitespace should be preserved perfectly! Together with the fact that comments are allowed just about anywhere in the file, what might seem like a straightforward line-by-line read is suddenly far from trivial.
The real "killer" in this component, however, was another aspect: the huge and very flexible frontend for performing CRUD (create, read/retrieve, update, delete) operations on the basic entities of users, groups, and repository paths. The design also included indexing for faster lookups. All modifying operations need to be carefully implemented to update or rebuild the index properly, and also make sure that the index is in a consistent state, even if the operation should fail.
Yet, the main problem for several of the submitters was just the sheer number of similar, but not identical, methods to implement in the frontend. Several of those who did submit at all still had remaining rough edges, or even unimplemented methods. Personally, I'm reminded of the "Conversion Factory 1.0" component I did back in 2004 where the list of methods for the single main class needs to be zoomed out to 25 % to fit on a 1600x1200 display... The key to that component, as well as this one, was for the developer to figure out the best way to reduce the redundancy in the actual implementation.
Thursday, November 1, 2007
Round 2: Ant Dependency Versions / NAnt Dependency Versions
by dmks
The Ant (NAnt) Dependency Versions component is a custom Ant task (NAnt function) for finding the best fit version of a dependency jar file (dll file) within a specified path and a version expression. The version of the dependency file will be determined through a pluggable algorithm. Two implementations are provided: one that relies on the TopCoder directory structure, and one that determines version from META-INF/MANIFEST.MF for java archives or metadata in .NET assemblies. The best fit version will be selected by "last version" and "last build date" pluggable algorithms according the version expression. This component is very useful for the application to find the best fit Java archives (.NET assemblies) by build script automatically.
This component is the easiest of the three TCCC07 final development components. It had 5 submissions and almost all of them implemented the functionalities correctly. But the developers should pay special attention to the exception handling. They should consider the invalid/non-existing files, invalid version expressions, invalid version format of the files, etc. Two submissions did a good job on it and the others missed some required exceptions.
Friday, November 2, 2007
Round 3: Subversion Path-Based Authorization Web Interface
by Savior
The Subversion Path-Based Authorization Web Interface component provides a web-based GUI to a subset of API of the Subversion Path-Based Authorization component, which is the first project of development finals. The .NET version provides a WCF service.
To finish this project, developers have to write mock implementations for the Subversion Path-Based Authorization component, which is very large, contains lots of methods. Few people finished it in week 1. Fortunately, not all of them are required, but I believe it is still not an easy job. There was no submission in the .NET version. On the Java side, three developers submitted, but one of them is not completed.
The servlets in Java version and the panels in .NET version are not difficult to implement, the designs are rather clear, but in-container tests for them should be provided. And since this is a GUI component, a clear demo is also required.
Component Development: Scores & Wagers
Subversion Path-Based Authorization Development |
|||||||
Round 1 | |||||||
Competitor | initial score | final score | place | wager | points | link | rd1 total |
catcher | N/A | N/A | 5 | 20 | 4 | N/A | 4 |
enefem21 | 62.22 | 62.89 | 3 | 30 | 10 | 10 | |
fanse | N/A | N/A | 5 | 10 | 2 | N/A | 2 |
lyt | 53.15 | 53.15 | 4 | 10 | 2 | 2 | |
PE | 88.17 | 89.15 | 1 | 60 | 60 | 60 | |
serine | 75.25 | 75.57 | 2 | 30 | 15 | 15 | |
Yeung | N/A | N/A | 5 | 10 | 2 | N/A | 2 |
Ant Dependency Versions / NAnt Dependency Versions |
|||||||
Round 2 | |||||||
Competitor | initial score | final score | place | wager | points | link | rd2 total |
catcher | N/A | N/A | 6 | 20 | 3 | N/A | 7 |
enefem21 | 75.48 | 75.6 | 5 | 10 | 2 | 12 | |
fanse | N/A | N/A | 6 | 30 | 5 | N/A | 7 |
lyt | 93.48 | 95.47 | 2 | 30 | 15 | 17 | |
PE | 97.03 | 97.5 | 1 | 20 | 20 | 80 | |
serine | 85.89 | 87.13 | 3 | 60 | 20 | 35 | |
Yeung | 83.7 | 84.01 | 4 | 60 | 15 | 17 | |
Subversion Path-Based Authorization Web Interface |
|||||||
Round 3 | |||||||
Competitor | initial score | final score | place | wager | points | link | complete total |
catcher | N/A | N/A | 4 | 60 | 15 | N/A | 22 |
enefem21 | 46.93 | 47.55 | 3 | 60 | 20 | 32 | |
fanse | N/A | N/A | 4 | 60 | 15 | N/A | 22 |
lyt | 73.85 | 76.27 | 2 | 60 | 30 | 47 | |
PE | 91.55 | 92.68 | 1 | 20 | 20 | 100 | |
serine | N/A | N/A | 4 | 10 | 2 | N/A | 37 |
Yeung | N/A | N/A | 4 | 30 | 7 | N/A | 24 |