For most of this year, we have offered two weekly, competitive quizzes on PL/SQL:
PL/SQL Challenge & PL/SQL Explore
But it doesn't really make sense to offer two different championships. At least, that's how I, the fellow who would write all those quizzes, feels about it.
There is, as one might expect, lots of overlap between the top 50 ranked players in the two quizzes: only 14 in PL/SQL Explore are not in PL/SQL Challenge's top 50.
It seems to me that it makes much more sense to have a single championship for PL/SQL, overall.
But our database design doesn't easily allow us to make that change (that is, one championship per domain with merged rankings).
So here is what I would like to do instead:
For the 2014 PL/SQL Championship, participants will be as follows:
1. The top 50 ranked players in the PL/SQL Challenge
2. The additional 14 in the top 50 of PL/SQL Explore
3. Up to 20 other wildcard and correctness players, all drawn from the PL/SQL Challenge
Then going forward, even though PL/SQL Explore will remain competitive, the PL/SQL Championship will be based only on your performance in the PL/SQL Challenge quiz.
What are your thoughts on this?
Thanks, Steven Feuerstein
08 December 2014
01 May 2014
New Roundtable discussion: What's missing from PL/SQL?
PL/SQL has been around for over twenty years. It has been enhanced steadily and strongly throughout all that time, adding bulk processing, object types, automatic optimization, PL/Scope and so much more. So the question is: is PL/SQL fully baked? What is it missing that you need in order to write better code faster?
Give us your thoughts on the PL/SQL Challenge Roundtable.
PL/SQL is a critical enabling technology for hundreds of thousands of mission-critical applications around the world. Any improvement in the language can have a widespread impact. The PL/SQL development team must have a list of enhancement requests 10 miles long (no, I haven't seen it) and it is likely that anything we come up with here will already be on their list. But that's not the point. The point is to find out what active PL/SQL developers think is key for the language.
Some of you may be aware that I published the iloveplsqland.net website years ago to allow developers to sort-of-vote on enhancements to the PL/SQL language. It never generated a whole lot of traffic, but I encourage you to check it out for ideas. And if you posted an idea there, and still feel strongly about it, then post the info here as well!
I can think of several categories of enhancements to PL/SQL and I encourage you to let us know into which category your idea would fall.
- Performance: improve the runtime performance of PL/SQL code.
- Usability: make it easier or more productive to write your program units.
- Multimedia/Internet: improve the way PL/SQL "plays" in the modern world of mobile and Internet applications.
- Critical bug fixes: sure, it's not an enhancement, but if there's something that's been bugging you for years and still isn't fixed, go ahead and gripe about it here!
- Object orientation: object types have come a long way....but assuming you are trying to use them to build production apps, what's missing?
Oh, and I need to be really clear about this: Just because I work for Oracle Corporation now, that doesn't mean that I can guarantee any of your ideas will be implemented. Heck. I don't even work in the PL/SQL development team (and I sure don't belong there!).
This is a discussion which will benefit enormously from every player using the Like feature to indicate which idea they, ahem, like. Please take advantage of it!
Finally, I point out to you that it would be best if you did not reply here with your ideas. Go to the PL/SQL Challenge Roundtable and do it. But I will be happy to read your thoughts here as well.
Cheers, Steven Feuerstein
18 April 2014
Another quiz idea for your consideration: Code Pong
Thanks for all your feedback on the PL/SQL Countdown quiz. I am certain we will add that to the mix soon.
And since I have decided to no longer keep all my best ideas to myself ( :-) ), I offer another idea for a "quiz", though it is not really a quiz, I suppose. More of a "game"?
I call it Code Pong (some of you may know of the classic Pong game). Here's how it would work:
It starts with a piece of rather awful code (likely a function or procedure that is supposed to do X or display certain output). It has all sorts of issues: outright bugs, typos, logic flaws, etc.
Two people sign up to play. And they each take turns applying changes to the code to improve it. The rules for making a change are:
1. You can change 1 line.
2. You can insert up to 3 lines.
3. You can delete up to 3 lines.
4. You can reject the other player's last move.
5. Assert that the game is done.
6. Accept or reject other player's assertion that game is done.
Player must include a description of the change: how does it help get closer to a solution?
What this means is that you can't make one big wholesale change to the code to fix it. Instead, you must work with the other player, sometimes following their lead, sometimes leading the way, to make changes until you believe the code works and all the problems are removed (that is, it not only works, but also is now a program that is easy to understand and maintain.
Here's a simple example: Change the code so that "9" is displayed.
Move 1 (player 1):
Change line 2 to:
l_index PLS_INTEGER;
Explanation: PLS_INTEGER is faster than NUMBER and you do not need NUMBER.
Move 2 (player 2):
Change line 2 to:
l_index PLS_INTEGER := 1;
Explanation: the default initial value is NULL and adding 1 to NULL returns 1. So l_index stays NULL throughout.
Move 3 (player 1):
Assert that game is done.
Move 4 (player2):
Accept; game is done!
What do you think? Too complicated? Too strange?
And since I have decided to no longer keep all my best ideas to myself ( :-) ), I offer another idea for a "quiz", though it is not really a quiz, I suppose. More of a "game"?
I call it Code Pong (some of you may know of the classic Pong game). Here's how it would work:
It starts with a piece of rather awful code (likely a function or procedure that is supposed to do X or display certain output). It has all sorts of issues: outright bugs, typos, logic flaws, etc.
Two people sign up to play. And they each take turns applying changes to the code to improve it. The rules for making a change are:
1. You can change 1 line.
2. You can insert up to 3 lines.
3. You can delete up to 3 lines.
4. You can reject the other player's last move.
5. Assert that the game is done.
6. Accept or reject other player's assertion that game is done.
Player must include a description of the change: how does it help get closer to a solution?
What this means is that you can't make one big wholesale change to the code to fix it. Instead, you must work with the other player, sometimes following their lead, sometimes leading the way, to make changes until you believe the code works and all the problems are removed (that is, it not only works, but also is now a program that is easy to understand and maintain.
Here's a simple example: Change the code so that "9" is displayed.
DECLARE l_index NUMBER; BEGIN FOR rec IN (SELECT * FROM all_source WHERE rownum < 10) LOOP l_index := l_index + 1; END LOOP; DBMS_OUTPUT.PUT_LINE (l_index) END;
Move 1 (player 1):
Change line 2 to:
l_index PLS_INTEGER;
Explanation: PLS_INTEGER is faster than NUMBER and you do not need NUMBER.
Move 2 (player 2):
Change line 2 to:
l_index PLS_INTEGER := 1;
Explanation: the default initial value is NULL and adding 1 to NULL returns 1. So l_index stays NULL throughout.
Move 3 (player 1):
Assert that game is done.
Move 4 (player2):
Accept; game is done!
What do you think? Too complicated? Too strange?
13 April 2014
Take a Survey on Database Design Quizzes
Chris Saxon, who is the "domain admin" for the Database Design and author of many of the weekly quizzes, would love to get feedback from our players on these quizzes. He's been doing them now for six months and figures it's time to check in with all of you.
So he's used Google Forms to set up a quick, anonymous survey:
https://docs.google.com/forms/d/1mFdjTgX3qS-ze_Unu5UxLGof5yopvdspPqPvuLLqJLg/viewform
We hope you can take a few moments to fill it out.
So he's used Google Forms to set up a quick, anonymous survey:
https://docs.google.com/forms/d/1mFdjTgX3qS-ze_Unu5UxLGof5yopvdspPqPvuLLqJLg/viewform
We hope you can take a few moments to fill it out.
21 March 2014
Idea for a new type of quiz: Countdown PL/SQL
Always looking for ways to increase the entertainment value of the site, I came up with this idea last night.
Countdown PL/SQL
You have thirty seconds to answer ten true-false questions.
With the clock on the page counting down, you are shown a statement about PL/SQL and you must quickly decide: true or false.
Of course, the same could be done with SQL, APEX, etc.
One concern I could see with this quiz is that comfort with the English language could have a big impact on how quickly you can get through the questions. It is also possible that we could offer versions that contained code, not (mostly) words.
Perhaps it is time to look at localization of content: offer it in different languages!
So what do you think? Sound interesting? Sound like something you'd bother playing?
Countdown PL/SQL
You have thirty seconds to answer ten true-false questions.
With the clock on the page counting down, you are shown a statement about PL/SQL and you must quickly decide: true or false.
Of course, the same could be done with SQL, APEX, etc.
One concern I could see with this quiz is that comfort with the English language could have a big impact on how quickly you can get through the questions. It is also possible that we could offer versions that contained code, not (mostly) words.
Perhaps it is time to look at localization of content: offer it in different languages!
So what do you think? Sound interesting? Sound like something you'd bother playing?
17 March 2014
Q2 2014 Brings Big Changes to the PL/SQL Challenge
Last year, I (Steven Feuerstein) floated the idea that I would end the daily PL/SQL quiz. Many players protested, and several agreed to help me with the workload by writing quizzes. So I agreed to keep the daily quiz going into 2014 and we would see how it goes.
It went pretty well. Some players did write quizzes (a big thank you most especially to Jeroen Rutte, who wrote a total of 7 quizzes, 5 of which were used in Q1). But I still spent and spend lots of time writing quizzes, which I enjoy greatly, but unfortunately is not sustainable.
So starting in Q2 2014, the daily PL/SQL quiz will end and in its place we will offer three weekly quizzes in its place:
PL/SQL Challenge
The PL/SQL Challenge replaces the daily PL/SQL quiz that ran from April 2010 through March 2014. I will write all the quizzes for the PL/SQL Challenge quiz. They will focus on "core" PL/SQL features (including commonly-used supplied packages like DBMS_OUTPUT and UTL_FILE), up through the latest production version of the Oracle database. Players who take this quiz are eligible to qualify for the annual PL/SQL Challenge Championship.[We may decide to increase the frequency of those championships, but for now: annual.]
PL/SQL Explore
The PL/SQL Explore quiz explores the nooks and crannies of the PL/SQL language, and the many PL/SQL packages supplied by Oracle Corporation. Quizzes are provided by both Steven Feuerstein and players, and can range from "core" PL/SQL functionality to "edgy" elements of the language, like calling Java from PL/SQ or rarely used supplied packages. like DBMS_XA.
PL/SQL Deja Vu
PL/SQL Deja Vu offers quizzes from the past - PL/SQL quizzes previously played on the daily PL/SQL quiz or one of the other PL/SQL quizzes. Use Deja Vu PL/SQL to reinforce your PL/SQL knowledge without worrying about competing with others. These quizzes are not ranked!
We will also "re-brand" the daily PL/SQL quiz to the "PL/SQL Challenge", so the daily quiz names will be of this form:
PL/SQL Challenge #276 D2011-04-12
and the weekly PL/SQL Challenge quiz names will look like:
PL/SQL Challenge #1240 WS2013-04-12
where "WS" is the "Weekly quiz Starting on".
We will look into ways to offer rankings across the various competitive PL/SQL quizzes, but we will not be able to get to that immediately.
Of course, the new quarter has not yet started. I am very interested to hear your feedback on these quizzes.
And, of course, you are welcome to shower me with flattery about how much you love those daily quizzes and want them to continue. Surely, my ego could use the stroking. :-)
But this time the decision is made: the daily quiz will end, and three new PL/SQL weekly quizzes will take its place.
It went pretty well. Some players did write quizzes (a big thank you most especially to Jeroen Rutte, who wrote a total of 7 quizzes, 5 of which were used in Q1). But I still spent and spend lots of time writing quizzes, which I enjoy greatly, but unfortunately is not sustainable.
So starting in Q2 2014, the daily PL/SQL quiz will end and in its place we will offer three weekly quizzes in its place:
PL/SQL Challenge
The PL/SQL Challenge replaces the daily PL/SQL quiz that ran from April 2010 through March 2014. I will write all the quizzes for the PL/SQL Challenge quiz. They will focus on "core" PL/SQL features (including commonly-used supplied packages like DBMS_OUTPUT and UTL_FILE), up through the latest production version of the Oracle database. Players who take this quiz are eligible to qualify for the annual PL/SQL Challenge Championship.[We may decide to increase the frequency of those championships, but for now: annual.]
PL/SQL Explore
The PL/SQL Explore quiz explores the nooks and crannies of the PL/SQL language, and the many PL/SQL packages supplied by Oracle Corporation. Quizzes are provided by both Steven Feuerstein and players, and can range from "core" PL/SQL functionality to "edgy" elements of the language, like calling Java from PL/SQ or rarely used supplied packages. like DBMS_XA.
PL/SQL Deja Vu
PL/SQL Deja Vu offers quizzes from the past - PL/SQL quizzes previously played on the daily PL/SQL quiz or one of the other PL/SQL quizzes. Use Deja Vu PL/SQL to reinforce your PL/SQL knowledge without worrying about competing with others. These quizzes are not ranked!
We will also "re-brand" the daily PL/SQL quiz to the "PL/SQL Challenge", so the daily quiz names will be of this form:
PL/SQL Challenge #276 D2011-04-12
and the weekly PL/SQL Challenge quiz names will look like:
PL/SQL Challenge #1240 WS2013-04-12
where "WS" is the "Weekly quiz Starting on".
We will look into ways to offer rankings across the various competitive PL/SQL quizzes, but we will not be able to get to that immediately.
Of course, the new quarter has not yet started. I am very interested to hear your feedback on these quizzes.
And, of course, you are welcome to shower me with flattery about how much you love those daily quizzes and want them to continue. Surely, my ego could use the stroking. :-)
But this time the decision is made: the daily quiz will end, and three new PL/SQL weekly quizzes will take its place.
10 March 2014
Results of 2013 Q4 PL/SQL Championship
You will find below the rankings for the 2013 Q4 PL/SQL championship; the number next to the player's name is the number of times that player has participated in a championship.
Congratulations first and foremost to our top-ranked players:
1st Place: Peter Auer of Germany
2nd Place: Mike Pargeter of United Kingdom
3rd Place: Frank Schmitt of Germany
This was Peter's first championship. An impressive rookie performance, Peter!
Next, congratulations to everyone who played in the championship. I hope you found it entertaining, challenging and educational. And for those who were not able to participate in the championship, you can take the quizzes next week through the Practice feature. We will also make the championship as a whole available as a Test, so you can take it just like these players did.
My thanks to all my fine reviewers, but most particularly Elic, whose impact on the quality of our daily quizzes and championships cannot be overstated.
Steven Feuerstein
Note: Below the table of results for this championship, you will find another list showing the championship history of each of these players.
Congratulations first and foremost to our top-ranked players:
1st Place: Peter Auer of Germany
2nd Place: Mike Pargeter of United Kingdom
3rd Place: Frank Schmitt of Germany
This was Peter's first championship. An impressive rookie performance, Peter!
Next, congratulations to everyone who played in the championship. I hope you found it entertaining, challenging and educational. And for those who were not able to participate in the championship, you can take the quizzes next week through the Practice feature. We will also make the championship as a whole available as a Test, so you can take it just like these players did.
My thanks to all my fine reviewers, but most particularly Elic, whose impact on the quality of our daily quizzes and championships cannot be overstated.
Steven Feuerstein
Note: Below the table of results for this championship, you will find another list showing the championship history of each of these players.
Rank | Name | Country | Total Time | % Correct | Total Score |
---|---|---|---|---|---|
1 | Peter Auer (1) | Germany | 27 mins 25 secs | 92% | 2882 |
2 | Mike Pargeter (12) | United Kingdom | 22 mins 06 secs | 87% | 2788 |
3 | Frank Schmitt (8) | Germany | 30 mins 05 secs | 87% | 2723 |
4 | Karel Prech (3) | Czech Republic | 32 mins 25 secs | 87% | 2652 |
5 | Michal Cvan (11) | Slovakia | 33 mins 58 secs | 87% | 2551 |
6 | Zoltan Fulop (7) | Hungary | 29 mins 14 secs | 82% | 2485 |
7 | Janis Baiza (9) | Latvia | 22 mins 35 secs | 76% | 2443 |
8 | Jerry Bull (11) | United States | 29 mins 20 secs | 74% | 2443 |
9 | Ravshan Abbasov (1) | Uzbekistan | 33 mins 11 secs | 79% | 2441 |
10 | Anna Onishchuk (8) | Ireland | 16 mins 40 secs | 79% | 2432 |
11 | dmitrysk (1) | Russia | 32 mins 52 secs | 84% | 2398 |
12 | Manfred Kleander (1) | Austria | 34 mins 52 secs | 84% | 2393 |
13 | Vincent Malgrat (7) | French Republic | 32 mins 35 secs | 79% | 2388 |
14 | Lukasz Kubicki (1) | Poland | 22 mins 54 secs | 71% | 2362 |
15 | james su (8) | Canada | 21 mins 52 secs | 71% | 2348 |
16 | Chad Lee (10) | United States | 33 mins 00 secs | 84% | 2325 |
17 | Jeroen Rutte (7) | Netherlands | 34 mins 46 secs | 82% | 2320 |
18 | Frank Puechl (4) | Germany | 20 mins 50 secs | 74% | 2298 |
19 | Rytis Budreika (1) | Lithuania | 18 mins 20 secs | 68% | 2253 |
20 | mentzel.iudith (13) | Israel | 33 mins 13 secs | 84% | 2251 |
21 | João Barreto (4) | Portugal | 22 mins 17 secs | 74% | 2214 |
22 | Telmoc (2) | Portugal | 20 mins 30 secs | 66% | 2190 |
23 | Randy Gettman (12) | United States | 34 mins 52 secs | 71% | 2183 |
24 | Yuri Pedan (4) | Ukraine | 17 mins 06 secs | 71% | 2163 |
25 | Viacheslav Stepanov (12) | Russia | 31 mins 00 secs | 76% | 2145 |
26 | Krzysztof Helbin (3) | Poland | 26 mins 08 secs | 68% | 2112 |
27 | Anil Jha (3) | United States | 34 mins 56 secs | 76% | 2101 |
28 | Kevan Gelling (9) | Isle of Man | 30 mins 37 secs | 68% | 2078 |
29 | Siim Kask (13) | Estonia | 27 mins 48 secs | 63% | 2054 |
30 | Leszek Grudzień (2) | Poland | 30 mins 20 secs | 66% | 1998 |
31 | Yuan Tschang (8) | United States | 34 mins 24 secs | 55% | 1972 |
32 | Niels Hecker (14) | Germany | 35 mins 00 secs | 71% | 1960 |
33 | Oleksiy Varchyn (2) | Norway | 21 mins 32 secs | 61% | 1919 |
34 | _tiki_4_ (6) | Germany | 25 mins 06 secs | 58% | 1678 |
35 | Goran Stefanović (5) | Serbia | 24 mins 33 secs | 61% | 1544 |
36 | Rakesh Dadhich (5) | India | 26 mins 50 secs | 55% | 1443 |
37 | Stelios Vlasopoulos (10) | Belgium | 24 mins 13 secs | 50% | 1406 |
38 | Thierry Poels (7) | Belgium | 28 mins 05 secs | 58% | 1343 |
39 | Milibor Jovanovic (5) | Serbia | 32 mins 24 secs | 53% | 1272 |
40 | Dan Kiser (6) | United States | 33 mins 38 secs | 50% | 897 |
Championship Performance History
After each name, the quarter in which he or she played, and the ranking in that championship.Name | History |
---|---|
Peter Auer | Q4 2013:1st |
Mike Pargeter | Q4 2010:22nd, Q1 2011:15th, Q2 2011:8th, Q4 2011:5th, Q1 2012:5th, Q2 2012:17th, Q3 2012:5th, Q4 2012:20th, Q2 2013:12th, Q4 2013:2nd |
Frank Schmitt | Q4 2011:22nd, Q2 2012:2nd, Q3 2012:21st, Q4 2012:3rd, Q1 2013:13th, Q2 2013:1st, Q3 2013:9th, Q4 2013:3rd |
Karel Prech | Q3 2012:36th, Q4 2012:23rd, Q4 2013:4th |
Michal Cvan | Q3 2010:22nd, Q4 2010:25th, Q3 2011:21st, Q1 2012:11th, Q3 2012:14th, Q4 2012:14th, Q1 2013:14th, Q2 2013:11th, Q3 2013:1st, Q4 2013:5th |
Zoltan Fulop | Q1 2012:15th, Q2 2012:26th, Q3 2012:22nd, Q4 2012:17th, Q1 2013:22nd, Q3 2013:22nd, Q4 2013:6th |
Janis Baiza | Q2 2010:3rd, Q4 2010:7th, Q3 2011:9th, Q4 2011:1st, Q3 2012:23rd, Q1 2013:4th, Q2 2013:4th, Q3 2013:3rd, Q4 2013:7th |
Jerry Bull | Q2 2011:32nd, Q3 2011:8th, Q1 2012:12th, Q2 2012:11th, Q3 2012:13th, Q4 2012:15th, Q1 2013:9th, Q2 2013:15th, Q4 2013:8th |
Ravshan Abbasov | Q4 2013:9th |
Anna Onishchuk | Q1 2011:5th, Q2 2011:20th, Q3 2011:19th, Q4 2011:17th, Q1 2012:21st, Q2 2012:8th, Q4 2013:10th |
dmitrysk | Q4 2013:11th |
Manfred Kleander | Q4 2013:12th |
Vincent Malgrat | Q4 2011:9th, Q1 2012:13th, Q2 2012:13th, Q4 2012:6th, Q1 2013:1st, Q2 2013:14th, Q4 2013:13th |
Lukasz Kubicki | Q4 2013:14th |
james su | Q3 2010:56th, Q2 2011:7th, Q3 2011:11th, Q4 2011:14th, Q2 2012:15th, Q1 2013:7th, Q3 2013:15th, Q4 2013:15th |
Chad Lee | Q2 2011:26th, Q3 2011:17th, Q4 2011:12th, Q1 2012:1st, Q2 2012:23rd, Q3 2012:28th, Q4 2012:22nd, Q1 2013:20th, Q2 2013:8th, Q4 2013:16th |
Jeroen Rutte | Q3 2010:19th, Q3 2012:10th, Q4 2012:11th, Q1 2013:8th, Q2 2013:18th, Q3 2013:4th, Q4 2013:17th |
Frank Puechl | Q3 2012:26th, Q1 2013:15th, Q3 2013:12th, Q4 2013:18th |
Rytis Budreika | Q4 2013:19th |
mentzel.iudith | Q4 2010:4th, Q1 2011:17th, Q2 2011:23rd, Q3 2011:5th, Q4 2011:4th, Q1 2012:7th, Q2 2012:16th, Q3 2012:33rd, Q4 2012:4th, Q1 2013:2nd, Q2 2013:7th, Q3 2013:2nd, Q4 2013:20th |
João Barreto | Q3 2010:18th, Q4 2010:21st, Q2 2011:3rd, Q4 2013:21st |
Telmoc | Q4 2013:22nd |
Randy Gettman | Q3 2010:8th, Q1 2011:25th, Q2 2011:10th, Q3 2011:3rd, Q4 2011:11th, Q1 2012:18th, Q2 2012:19th, Q3 2012:30th, Q4 2012:12th, Q1 2013:3rd, Q2 2013:13th, Q4 2013:23rd |
Yuri Pedan | Q3 2010:45th, Q4 2010:9th, Q1 2011:2nd, Q4 2013:24th |
Viacheslav Stepanov | Q1 2011:8th, Q2 2011:4th, Q3 2011:13th, Q4 2011:19th, Q1 2012:17th, Q2 2012:9th, Q3 2012:6th, Q4 2012:21st, Q1 2013:18th, Q2 2013:22nd, Q3 2013:11th, Q4 2013:25th |
Krzysztof Helbin | Q1 2012:10th, Q4 2012:18th, Q4 2013:26th |
Anil Jha | Q2 2012:28th, Q4 2012:19th, Q4 2013:27th |
Kevan Gelling | Q2 2011:19th, Q3 2011:1st, Q4 2011:6th, Q1 2012:6th, Q2 2012:22nd, Q4 2012:16th, Q1 2013:12th, Q4 2013:28th |
Siim Kask | Q1 2011:28th, Q2 2011:6th, Q3 2011:10th, Q4 2011:3rd, Q1 2012:8th, Q2 2012:4th, Q3 2012:31st, Q4 2012:10th, Q1 2013:11th, Q2 2013:16th, Q3 2013:17th, Q4 2013:29th |
Leszek Grudzień | Q2 2013:24th, Q4 2013:30th |
Yuan Tschang | Q2 2012:24th, Q3 2012:24th, Q4 2012:27th, Q2 2013:30th, Q4 2013:31st |
Niels Hecker | Q2 2010:2nd, Q3 2010:1st, Q4 2010:15th, Q1 2011:6th, Q3 2011:7th, Q4 2011:10th, Q1 2012:2nd, Q2 2012:3rd, Q3 2012:2nd, Q4 2012:7th, Q1 2013:6th, Q2 2013:3rd, Q3 2013:13th, Q4 2013:32nd |
Oleksiy Varchyn | Q3 2013:28th, Q4 2013:33rd |
_tiki_4_ | Q4 2011:26th, Q1 2012:16th, Q2 2012:20th, Q4 2012:8th, Q3 2013:8th, Q4 2013:34th |
Goran Stefanović | Q1 2012:31st, Q2 2012:27th, Q3 2012:34th, Q4 2013:35th |
Rakesh Dadhich | Q2 2012:10th, Q1 2013:23rd, Q2 2013:28th, Q3 2013:27th, Q4 2013:36th |
Stelios Vlasopoulos | Q4 2010:37th, Q4 2011:20th, Q1 2012:27th, Q2 2012:30th, Q3 2012:1st, Q4 2012:1st, Q1 2013:27th, Q2 2013:23rd, Q3 2013:19th, Q4 2013:37th |
Thierry Poels | Q3 2011:22nd, Q1 2012:24th, Q1 2013:26th, Q3 2013:25th, Q4 2013:38th |
Milibor Jovanovic | Q4 2012:29th, Q1 2013:30th, Q3 2013:18th, Q4 2013:39th |
Dan Kiser | Q4 2013:40th |
26 February 2014
Results of First Annual Logic Championship (2013)
You will find below the rankings for the first ever 2013 Logic championship.
Congratulations first and foremost to our top-ranked players:
1st Place: Viacheslav Stepanov of Russia
2nd Place: Jerry Bull of United States
3rd Place: Niels Hecker of Germany
Next, congratulations to everyone who played in the championship. I hope you found it entertaining, challenging and educational. And for those who were not able to participate in the championship, you can take the quizzes next week through the Practice feature. We will also make the championship as a whole available as a Test, so you can take it just like these players did.
Steven Feuerstein
Congratulations first and foremost to our top-ranked players:
1st Place: Viacheslav Stepanov of Russia
2nd Place: Jerry Bull of United States
3rd Place: Niels Hecker of Germany
Next, congratulations to everyone who played in the championship. I hope you found it entertaining, challenging and educational. And for those who were not able to participate in the championship, you can take the quizzes next week through the Practice feature. We will also make the championship as a whole available as a Test, so you can take it just like these players did.
Steven Feuerstein
Rank | Name | Country | Total Time | % Correct | Total Score |
---|---|---|---|---|---|
1 | Viacheslav Stepanov (1) | Russia | 20 mins 50 secs | 90% | 3033 |
2 | Jerry Bull (1) | United States | 14 mins 48 secs | 76% | 2634 |
3 | Niels Hecker (1) | Germany | 37 mins 57 secs | 81% | 2356 |
4 | mentzel.iudith (1) | Israel | 59 mins 50 secs | 90% | 2253 |
5 | Ingimundur Gudmundsson (1) | Norway | 34 mins 27 secs | 71% | 2051 |
6 | Zoltan Fulop (1) | Hungary | 43 mins 38 secs | 76% | 2017 |
7 | Dan Jankowski (1) | United States | 19 mins 58 secs | 62% | 1966 |
8 | Lieselotje (1) | Belgium | 47 mins 08 secs | 76% | 1947 |
9 | Hudai Polat (1) | Turkey | 21 mins 25 secs | 62% | 1902 |
10 | MarkM. (1) | Germany | 59 mins 40 secs | 81% | 1847 |
11 | Randy Gettman (1) | United States | 58 mins 17 secs | 81% | 1839 |
12 | Rytis Budreika (1) | Lithuania | 09 mins 33 secs | 52% | 1804 |
13 | Elic (1) | Belarus | 56 mins 49 secs | 76% | 1754 |
14 | Jason H (1) | United States | 22 mins 30 secs | 57% | 1730 |
15 | Andres (1) | Estonia | 58 mins 51 secs | 76% | 1713 |
16 | Stelios Vlasopoulos (1) | Belgium | 57 mins 43 secs | 76% | 1701 |
17 | Sandra99 (1) | Italy | 41 mins 56 secs | 67% | 1681 |
18 | Christoph Hillinger (1) | Austria | 59 mins 11 secs | 76% | 1636 |
19 | Chris Saxon (1) | United Kingdom | 34 mins 11 secs | 62% | 1606 |
20 | Cristinel Boboc (1) | Romania | 47 mins 33 secs | 67% | 1604 |
21 | katuinbouter (1) | Netherlands | 55 mins 59 secs | 71% | 1585 |
22 | PZOL (1) | Hungary | 37 mins 58 secs | 62% | 1566 |
23 | Yuan Tschang (1) | United States | 55 mins 14 secs | 71% | 1560 |
24 | danad (1) | Czech Republic | 31 mins 09 secs | 57% | 1517 |
25 | Sean Molloy (1) | United States | 54 mins 40 secs | 67% | 1462 |
26 | Tony Winn (1) | Australia | 52 mins 56 secs | 67% | 1386 |
27 | Mihail Siscu (1) | Moldova | 58 mins 35 secs | 67% | 1383 |
28 | Peter Chenery (1) | United Kingdom | 44 mins 42 secs | 57% | 1361 |
29 | Enrico Rebecchi (1) | Italy | 59 mins 30 secs | 67% | 1325 |
30 | tonyC (1) | United Kingdom | 52 mins 29 secs | 57% | 1130 |
31 | Mehrab (1) | United Kingdom | 56 mins 38 secs | 57% | 1082 |
32 | Rich Dellheim (1) | United States | 53 mins 53 secs | 52% | 952 |
33 | macabre (1) | Russia | 41 mins 27 secs | 48% | 936 |
34 | Milibor Jovanovic (1) | Serbia | 58 mins 13 secs | 52% | 791 |
35 | Chad Lee (1) | United States | 48 mins 28 secs | 38% | 461 |
36 | JasonC (1) | United Kingdom | 58 mins 14 secs | 33% | 264 |
17 February 2014
A Glimpse into Feuerstein Refactoring....End Result Better?
As some of you may recall, we held our first non-PLSQL and non-quarterly championship since the PL/SQL Challenge started: the 12 February Annual SQL Championship.
Now, of course, if I had designed my database without any flaws, fully taking into account all possible directions in which the website could go, anticipating all possible user requests, etc., then we would not have encountered any bugs in the process of applying our code base to this new championship.
Ha. Ha. Ha.
We found many, many bugs, ranging from drawbacks in the design (worst, deepest impact, etc.) to ridiculous examples of hard-coding (the PL/SQL Championship competition_id = 2. So, sure, you could find "2"s in my code. What can I say? At least I admit it. Perhaps this is my own personal form of confessional therapy: dumping all this on you!).
So we did lots of work before the championship was held, and our efforts paid off with an error-free competition (well....not quite. With all players starting at the same time, there was a noticeable delay and some timeouts right at the beginning, but then it all settled down).
But then it was time to report on the results, award prizes, generate certificates, display results on the Quiz Details page....and we found many more bugs!
One of the steps we'd taken previously was to build in much more flexibility about specifying how and when players can see results. So now each competition event (daily quiz, championship, etc.) has a section that looks like (these are the settings for a championship):
But of course I then needed to write the code that would correctly combine these settings with the "state of play" and do the right thing.
It was hard for me to sort out all the logic, but I pushed my way through it, did some testing, seemed OK. And then I (deep shame) copy/pasted it for another function that had slightly different settings. I said to myself: "You have got to refactor this." to which I replied, "Yeah, right, will do. Someday."
You will find the code below. Feel free to read it, of course, but here's my overall take on it: besides the obvious awfulness of the copied code, those complex Boolean expressions are really, really difficult to understand and maintain. In trying to fix a problem right after the playoff, I introduced two more by getting mixed up on AND vs OR and where the parentheses should go.
Oh and then there are the comments:
"/* 2.5 I do not see what this will do. */"
and"
/* 2.5 I do not see what value this adds.*/".
Real confidence builders! So like I say, feel free to check out this code, but what I mostly want to do is show you the refactored version and do a little reality check with anyone who wants to take the time: Is it easier to read? Do you think it was worth doing? Do you see a better way to do this?
And yes, sure, I should provide more of an explanation to what is going on here, but:
a. I don't have the time, and
b. I "pride" myself on writing self-documenting code. In other words, I am too lazy to write comments.
Thanks! Steven Feuerstein
Original UGLY Code
The Refactored Code
Now, of course, if I had designed my database without any flaws, fully taking into account all possible directions in which the website could go, anticipating all possible user requests, etc., then we would not have encountered any bugs in the process of applying our code base to this new championship.
Ha. Ha. Ha.
We found many, many bugs, ranging from drawbacks in the design (worst, deepest impact, etc.) to ridiculous examples of hard-coding (the PL/SQL Championship competition_id = 2. So, sure, you could find "2"s in my code. What can I say? At least I admit it. Perhaps this is my own personal form of confessional therapy: dumping all this on you!).
So we did lots of work before the championship was held, and our efforts paid off with an error-free competition (well....not quite. With all players starting at the same time, there was a noticeable delay and some timeouts right at the beginning, but then it all settled down).
But then it was time to report on the results, award prizes, generate certificates, display results on the Quiz Details page....and we found many more bugs!
One of the steps we'd taken previously was to build in much more flexibility about specifying how and when players can see results. So now each competition event (daily quiz, championship, etc.) has a section that looks like (these are the settings for a championship):
But of course I then needed to write the code that would correctly combine these settings with the "state of play" and do the right thing.
It was hard for me to sort out all the logic, but I pushed my way through it, did some testing, seemed OK. And then I (deep shame) copy/pasted it for another function that had slightly different settings. I said to myself: "You have got to refactor this." to which I replied, "Yeah, right, will do. Someday."
You will find the code below. Feel free to read it, of course, but here's my overall take on it: besides the obvious awfulness of the copied code, those complex Boolean expressions are really, really difficult to understand and maintain. In trying to fix a problem right after the playoff, I introduced two more by getting mixed up on AND vs OR and where the parentheses should go.
Oh and then there are the comments:
"/* 2.5 I do not see what this will do. */"
and"
/* 2.5 I do not see what value this adds.*/".
Real confidence builders! So like I say, feel free to check out this code, but what I mostly want to do is show you the refactored version and do a little reality check with anyone who wants to take the time: Is it easier to read? Do you think it was worth doing? Do you see a better way to do this?
And yes, sure, I should provide more of an explanation to what is going on here, but:
a. I don't have the time, and
b. I "pride" myself on writing self-documenting code. In other words, I am too lazy to write comments.
Thanks! Steven Feuerstein
Original UGLY Code
FUNCTION results_available_for (comp_event_id_in IN INTEGER, user_id_in IN INTEGER) RETURN BOOLEAN IS c_user_id CONSTANT INTEGER := NVL (user_id_in, qdb_user_mgr.guest_user_id) ; c_can_play CONSTANT BOOLEAN := can_play (comp_event_id_in, user_id_in) ; l_comp_event qdb_comp_events%ROWTYPE; l_competition qdb_competitions%ROWTYPE; l_return BOOLEAN := FALSE; BEGIN /* Might be null from reviewer */ IF comp_event_id_in IS NOT NULL THEN l_comp_event := qdb_comp_event_mgr.one_comp_event (comp_event_id_in); l_competition := qdb_comp_event_mgr.competition_for_comp_event (comp_event_id_in); IF qdb_utilities.trace_is_on THEN qdb_utilities.trace_activity ( 'results_available_for sra-pas-sa', l_comp_event.pl_see_results_after || '-' || l_competition.players_accept_scores || '-' || l_comp_event.scores_accepted); END IF; /* Precedence to access: ANSWERED CLOSED RANKED */ l_return := CASE /* Can always see results of "Solve Problem" quiz */ WHEN qdb_content.free_form_question ( qdb_quiz_mgr.single_question_id_for_compev ( comp_event_id_in)) THEN TRUE /* If answered, then can view if results are available after answered or scores have been accepted. */ WHEN ex_u_qdb_compev_answers (comp_event_id_in, c_user_id) THEN ( (l_comp_event.pl_see_results_after = qdb_competition_mgr.c_resavail_answered) OR ( l_comp_event.pl_see_results_after = qdb_competition_mgr.c_resavail_closed AND l_comp_event.comp_event_status = qdb_competition_mgr.c_compev_closed) OR ( l_comp_event.pl_see_results_after = qdb_competition_mgr.c_resavail_ranked AND ( l_comp_event.comp_event_status = qdb_competition_mgr.c_compev_ranked OR ( l_comp_event.ignore_results = qdb_config.c_yes AND l_comp_event.comp_event_status = qdb_competition_mgr.c_compev_closed)))) or ( l_comp_event.pl_see_results_after = qdb_competition_mgr.c_quiz_accepted AND ( l_competition.players_accept_quizzes = qdb_config.c_no OR ( l_competition.players_accept_quizzes = qdb_config.c_yes AND l_comp_event.quizzes_accepted = qdb_config.c_yes))) /* Not answered but could play...can only see if closed/ranked*/ WHEN c_can_play THEN l_comp_event.comp_event_status IN (qdb_competition_mgr.c_compev_ranked, qdb_competition_mgr.c_compev_closed) /* Not a player - what can everyone see? */ WHEN comp_event_closed_for_user (comp_event_id_in, c_user_id) THEN ( l_comp_event.ev_see_results_after = qdb_competition_mgr.c_resavail_closed AND l_comp_event.comp_event_status = qdb_competition_mgr.c_compev_closed) OR ( l_comp_event.ev_see_results_after = qdb_competition_mgr.c_resavail_ranked AND ( l_comp_event.comp_event_status = qdb_competition_mgr.c_compev_ranked OR ( l_comp_event.ignore_results = qdb_config.c_yes AND l_comp_event.comp_event_status = qdb_competition_mgr.c_compev_closed))) /* 2.5 I do not see what value this adds. */ /* Can you see it when it's ranked */ WHEN l_comp_event.pl_see_results_after IN (qdb_competition_mgr.c_resavail_closed, qdb_competition_mgr.c_resavail_answered, qdb_competition_mgr.c_resavail_ranked) AND l_comp_event.comp_event_status = qdb_competition_mgr.c_compev_ranked THEN TRUE ELSE FALSE END; END IF; RETURN l_return; END results_available_for; FUNCTION results_available_for_sql (comp_event_id_in IN INTEGER, user_id_in IN INTEGER) RETURN PLS_INTEGER IS BEGIN RETURN CASE WHEN results_available_for (comp_event_id_in, user_id_in) THEN 1 ELSE 0 END; END; FUNCTION can_see_quiz (comp_event_id_in IN INTEGER, user_id_in IN INTEGER) RETURN BOOLEAN IS c_user_id CONSTANT INTEGER := NVL (user_id_in, qdb_user_mgr.guest_user_id) ; c_can_play CONSTANT BOOLEAN := can_play (comp_event_id_in, user_id_in) ; l_comp_event qdb_comp_events%ROWTYPE; l_competition qdb_competitions%ROWTYPE; l_return BOOLEAN := FALSE; BEGIN /* Might be null from reviewer */ IF comp_event_id_in IS NOT NULL THEN l_comp_event := qdb_comp_event_mgr.one_comp_event (comp_event_id_in); l_competition := qdb_comp_event_mgr.competition_for_comp_event (comp_event_id_in); IF qdb_utilities.trace_is_on THEN qdb_utilities.trace_activity ( 'can_see_quiz sqa-pas-sa', l_competition.pl_see_quiz_after || '-' || l_competition.players_accept_quizzes || '-' || l_comp_event.quizzes_accepted); END IF; /* if played, quizzes are accepted and can see after quiz taken. */ /* Precedence to access: ANSWERED CLOSED RANKED */ l_return := CASE WHEN qdb_content.free_form_question ( qdb_quiz_mgr.single_question_id_for_compev ( comp_event_id_in)) THEN /* Can always see results of "Solve Problem" quiz */ TRUE WHEN ex_u_qdb_compev_answers (comp_event_id_in, c_user_id) THEN /* If answered, then can view if results are available after answered or quizzes have been accepted. */ ( (l_comp_event.pl_see_quiz_after = qdb_competition_mgr.c_resavail_answered) OR ( l_comp_event.pl_see_quiz_after = qdb_competition_mgr.c_resavail_closed AND l_comp_event.comp_event_status = qdb_competition_mgr.c_compev_closed) OR ( l_comp_event.ev_see_results_after = qdb_competition_mgr.c_resavail_ranked AND ( l_comp_event.comp_event_status = qdb_competition_mgr.c_compev_ranked OR ( l_comp_event.ignore_results = qdb_config.c_yes AND l_comp_event.comp_event_status = qdb_competition_mgr.c_compev_closed)))) WHEN c_can_play THEN /* Not answered but could play...can only see if closed/ranked*/ l_comp_event.comp_event_status IN (qdb_competition_mgr.c_compev_ranked, qdb_competition_mgr.c_compev_closed) WHEN comp_event_closed_for_user (comp_event_id_in, c_user_id) THEN /* Not a player - what can everyone see? */ ( l_comp_event.ev_see_quiz_after = qdb_competition_mgr.c_resavail_closed AND l_comp_event.comp_event_status = qdb_competition_mgr.c_compev_closed) OR ( l_comp_event.ev_see_results_after = qdb_competition_mgr.c_resavail_ranked AND ( l_comp_event.comp_event_status = qdb_competition_mgr.c_compev_ranked OR ( l_comp_event.ignore_results = qdb_config.c_yes AND l_comp_event.comp_event_status = qdb_competition_mgr.c_compev_closed))) WHEN l_comp_event.pl_see_quiz_after IN (qdb_competition_mgr.c_resavail_closed, qdb_competition_mgr.c_resavail_answered, qdb_competition_mgr.c_resavail_ranked) AND l_comp_event.comp_event_status = qdb_competition_mgr.c_compev_ranked THEN /* 2.5 I do not see what this will do. */ /* Can you see it when it's ranked */ TRUE ELSE FALSE END; END IF; RETURN l_return; END;
The Refactored Code
FUNCTION can_show_information ( info_type_in IN VARCHAR2, comp_event_id_in IN qdb_comp_events.comp_event_id%TYPE, user_id_in IN INTEGER) RETURN BOOLEAN IS c_user_id CONSTANT INTEGER := NVL (user_id_in, qdb_user_mgr.guest_user_id) ; c_could_have_played CONSTANT BOOLEAN := can_play (comp_event_id_in, c_user_id) ; c_quiz_answered CONSTANT BOOLEAN := ex_u_qdb_compev_answers (comp_event_id_in, c_user_id) ; c_quizzes_accepted BOOLEAN; c_results_accepted BOOLEAN; c_closed_or_ranked BOOLEAN; c_ranked_or_voided BOOLEAN; c_is_solve_problem BOOLEAN; c_closed_for_player BOOLEAN; CURSOR required_info_cur IS SELECT c.players_accept_quizzes, c.players_accept_scores, ce.comp_event_status, ce.ignore_results, ce.quizzes_accepted, ce.scores_accepted, ce.pl_see_quiz_after, ce.pl_see_answer_after, ce.pl_see_results_after, ce.ev_see_quiz_after, ce.ev_see_answer_after, ce.ev_see_results_after, ce.tm_member_results_preview, ce.author_can_play, ce.hide_quizzes, ce.is_private, ct.text comp_type, ct.comp_type_id FROM qdb_competitions c, qdb_comp_events ce, qdb_comp_types ct WHERE c.competition_id = ce.competition_id AND c.comp_type_id = ct.comp_type_id AND ce.comp_event_id = comp_event_id_in; l_required_info required_info_cur%ROWTYPE; l_return BOOLEAN; PROCEDURE get_required_info IS BEGIN OPEN required_info_cur; FETCH required_info_cur INTO l_required_info; CLOSE required_info_cur; c_quizzes_accepted := l_required_info.players_accept_quizzes = qdb_config.c_no OR ( l_required_info.players_accept_quizzes = qdb_config.c_yes AND l_required_info.quizzes_accepted = qdb_config.c_yes); c_results_accepted := l_required_info.players_accept_scores = qdb_config.c_no OR ( l_required_info.players_accept_scores = qdb_config.c_yes AND l_required_info.scores_accepted = qdb_config.c_yes); c_ranked_or_voided := l_required_info.comp_event_status = qdb_competition_mgr.c_compev_ranked OR ( l_required_info.ignore_results = qdb_config.c_yes AND l_required_info.comp_event_status = qdb_competition_mgr.c_compev_closed); c_closed_or_ranked := /* Also returns TRUE if I took it. So just go with status. comp_event_closed_for_user (comp_event_id_in, c_user_id)*/ l_required_info.comp_event_status IN (qdb_competition_mgr.c_compev_closed, qdb_competition_mgr.c_compev_ranked); c_closed_for_player := comp_event_closed_for_user (comp_event_id_in, c_user_id); c_is_solve_problem := l_required_info.comp_type_id = qdb_competition_mgr.c_solve_problem_ct_id; END; FUNCTION everyone_can (moment_in IN VARCHAR2) RETURN BOOLEAN IS BEGIN RETURN CASE moment_in WHEN qdb_competition_mgr.c_resavail_never THEN FALSE WHEN qdb_competition_mgr.c_quiz_accepted THEN c_quizzes_accepted WHEN qdb_competition_mgr.c_result_accepted THEN c_results_accepted WHEN qdb_competition_mgr.c_resavail_closed THEN c_closed_or_ranked WHEN qdb_competition_mgr.c_resavail_ranked THEN c_ranked_or_voided ELSE FALSE END; IF qdb_utilities.trace_is_on THEN qdb_utilities.trace_activity ( 'can_show_information for everyone moment ' || moment_in, l_return); END IF; END; FUNCTION player_can (moment_in IN VARCHAR2) RETURN BOOLEAN IS l_return BOOLEAN; BEGIN l_return := CASE moment_in WHEN qdb_competition_mgr.c_resavail_never THEN FALSE WHEN qdb_competition_mgr.c_quiz_accepted THEN c_quizzes_accepted WHEN qdb_competition_mgr.c_result_accepted THEN c_results_accepted WHEN qdb_competition_mgr.c_resavail_answered THEN c_quiz_answered WHEN qdb_competition_mgr.c_resavail_closed THEN c_closed_or_ranked OR ( info_type_in = c_see_correctness AND l_required_info.players_accept_quizzes = qdb_config.c_yes) WHEN qdb_competition_mgr.c_resavail_ranked THEN c_ranked_or_voided ELSE FALSE END; RETURN l_return; END; BEGIN IF comp_event_id_in IS NULL THEN /* A reviewer may be reviewing an unscheduled quiz... */ l_return := info_type_in = c_see_answers; ELSE get_required_info; /* Can always see stuff for a "solve problem" quiz. */ l_return := c_is_solve_problem; IF NOT l_return THEN CASE info_type_in WHEN c_see_my_choices THEN /* For this choice ONLY, the acceptance status of quizzes does not apply */ l_return := CASE WHEN c_quiz_answered OR c_could_have_played THEN player_can (l_required_info.pl_see_quiz_after) ELSE everyone_can (l_required_info.ev_see_quiz_after) END; WHEN c_see_correctness THEN l_return := CASE WHEN c_quiz_answered OR c_could_have_played THEN player_can (l_required_info.pl_see_answer_after) ELSE everyone_can (l_required_info.ev_see_answer_after) END; WHEN c_see_answers THEN /* Control display of overall answer, choice explanations, etc. */ l_return := CASE WHEN NOT c_quizzes_accepted THEN FALSE WHEN c_quiz_answered OR c_could_have_played THEN player_can (l_required_info.pl_see_answer_after) ELSE everyone_can (l_required_info.ev_see_answer_after) END; WHEN c_see_results THEN /* Display stats, rankings, % correct, etc. */ l_return := CASE WHEN NOT c_results_accepted THEN FALSE WHEN c_quiz_answered OR c_could_have_played THEN player_can (l_required_info.pl_see_results_after) ELSE everyone_can ( l_required_info.ev_see_results_after) END; END CASE; END IF; END IF; RETURN l_return; END;
/* And now specialized programs for different scenarios. */
FUNCTION can_see_my_choices (comp_event_id_in IN INTEGER, user_id_in IN INTEGER) RETURN BOOLEAN IS BEGIN RETURN can_show_information (c_see_my_choices, comp_event_id_in, user_id_in); END; FUNCTION can_see_correctness (comp_event_id_in IN INTEGER, user_id_in IN INTEGER) RETURN BOOLEAN IS BEGIN RETURN can_show_information (c_see_correctness, comp_event_id_in, user_id_in); END; FUNCTION can_see_answers (comp_event_id_in IN INTEGER, user_id_in IN INTEGER) RETURN BOOLEAN IS BEGIN RETURN can_show_information (c_see_answers, comp_event_id_in, user_id_in); END; FUNCTION can_see_results (comp_event_id_in IN INTEGER, user_id_in IN INTEGER) RETURN BOOLEAN IS BEGIN RETURN can_show_information (c_see_results, comp_event_id_in, user_id_in); END; FUNCTION results_available_for (comp_event_id_in IN INTEGER, user_id_in IN INTEGER) RETURN BOOLEAN IS BEGIN RETURN can_see_results (comp_event_id_in, user_id_in); END results_available_for;
16 February 2014
Results of First-ever SQL Championship for 2013
You will find below the rankings for the first ever 2013 SQL championship.
Congratulations first and foremost to our top-ranked players:
1st Place: Vincent Malgrat of French Republic
2nd Place: Christoph Hillinger of Austria
3rd Place: Tony Winn of Australia
Next, congratulations to everyone who played in the championship. I hope you found it entertaining, challenging and educational. And for those who were not able to participate in the championship, you can take the quizzes next week through the Practice feature. We will also make the championship as a whole available as a Test, so you can take it just like these 39 players did.
And special thanks must go out to Kim Berg Hansen for writing these challenging quizzes and to Vitaliy Lyanchevskiy (a.k.a., Elic) for his thorough reviews. No objections were reported on these quizzes, and that was due entirely to the deep technical skills and attention to detail of both Kim and Vitaliy.
Warm regards,
Steven Feuerstein
Congratulations first and foremost to our top-ranked players:
1st Place: Vincent Malgrat of French Republic
2nd Place: Christoph Hillinger of Austria
3rd Place: Tony Winn of Australia
Next, congratulations to everyone who played in the championship. I hope you found it entertaining, challenging and educational. And for those who were not able to participate in the championship, you can take the quizzes next week through the Practice feature. We will also make the championship as a whole available as a Test, so you can take it just like these 39 players did.
And special thanks must go out to Kim Berg Hansen for writing these challenging quizzes and to Vitaliy Lyanchevskiy (a.k.a., Elic) for his thorough reviews. No objections were reported on these quizzes, and that was due entirely to the deep technical skills and attention to detail of both Kim and Vitaliy.
Warm regards,
Steven Feuerstein
Rank | Name | Country | Total Time | % Correct | Total Score |
---|---|---|---|---|---|
1 | Vincent Malgrat | French Republic | 34 mins 51 secs | 86% | 2513 |
2 | Christoph Hillinger | Austria | 43 mins 01 secs | 86% | 2405 |
3 | Tony Winn | Australia | 35 mins 40 secs | 78% | 2332 |
4 | mentzel.iudith | Israel | 38 mins 59 secs | 84% | 2285 |
5 | james su | Canada | 37 mins 29 secs | 78% | 2240 |
6 | Chris Saxon | United Kingdom | 22 mins 52 secs | 71% | 2168 |
7 | Niels Hecker | Germany | 41 mins 41 secs | 80% | 2096 |
8 | Leszek Grudzień | Poland | 35 mins 09 secs | 71% | 1997 |
9 | Sachi | United States | 31 mins 29 secs | 71% | 1985 |
10 | koko | Ukraine | 40 mins 19 secs | 78% | 1974 |
11 | Chase Mei | Canada | 44 mins 11 secs | 76% | 1966 |
12 | Scott Wesley | Australia | 19 mins 45 secs | 63% | 1960 |
13 | Zoltan Fulop | Hungary | 35 mins 04 secs | 69% | 1959 |
14 | JohnR | United States | 40 mins 01 secs | 73% | 1935 |
15 | Ivan Blanarik | Slovakia | 36 mins 27 secs | 69% | 1856 |
16 | Rimantas Adomauskas | Lithuania | 42 mins 50 secs | 73% | 1843 |
17 | Justin Cave | United States | 43 mins 46 secs | 73% | 1810 |
18 | Michal Cvan | Slovakia | 39 mins 23 secs | 69% | 1797 |
19 | Eric Levin | United States | 41 mins 58 secs | 69% | 1786 |
20 | Andres | Estonia | 44 mins 51 secs | 73% | 1748 |
21 | Viacheslav Stepanov | Russia | 43 mins 12 secs | 71% | 1736 |
22 | Rytis Budreika | Lithuania | 24 mins 23 secs | 59% | 1722 |
23 | Telmoc | Portugal | 30 mins 18 secs | 59% | 1714 |
24 | Yuan Tschang | United States | 44 mins 34 secs | 71% | 1694 |
25 | Krzysztof Helbin | Poland | 34 mins 15 secs | 65% | 1690 |
26 | Jason H | United States | 38 mins 09 secs | 65% | 1677 |
27 | Stelios Vlasopoulos | Belgium | 29 mins 16 secs | 61% | 1665 |
28 | Anna Onishchuk | Ireland | 20 mins 37 secs | 55% | 1663 |
29 | Matthias Rogel | Germany | 31 mins 35 secs | 59% | 1653 |
30 | Sean Molloy | United States | 41 mins 57 secs | 67% | 1651 |
31 | Chad Lee | United States | 42 mins 36 secs | 67% | 1633 |
32 | Milibor Jovanovic | Serbia | 42 mins 26 secs | 65% | 1611 |
33 | Marsel Fattakhov | Russia | 27 mins 26 secs | 59% | 1571 |
34 | Randy Gettman | United States | 44 mins 50 secs | 65% | 1493 |
35 | Giedrius Deveikis | Lithuania | 44 mins 52 secs | 57% | 1418 |
36 | Hertha Rettinger | Germany | 30 mins 17 secs | 55% | 1414 |
37 | swart260 | Netherlands | 39 mins 38 secs | 55% | 1282 |
38 | Pavel Vorontsov | Russia | 13 mins 43 secs | 39% | 1181 |
39 | Tobias Stark | Germany | 44 mins 12 secs | 43% | 741 |
20 January 2014
Participants in the Q4 2013 PL/SQL Championship
The following players will be invited to participate in the Q4 2013 championship. The number in parentheses after their names are
the number of playoffs in which they have already participated.
Congratulations to all listed below on their accomplishment and best of luck in the upcoming competition!
We currently plan to hold the championship on 27 February (all at the same time world-wide), and are waiting for confirmation from players that this day will work.
Note: we accepted the top 50 ranked players into the SQL and Logic championships, but still only the top 25 players for PL/SQL. We are going to shift to the top 50 for all championships, starting this quarter, but did not feel it was appropriate to switch the rules for the PL/SQL championship after the fact.
See the FAQ for an explanation of the three ways a player can qualify for the playoff.
Congratulations to all listed below on their accomplishment and best of luck in the upcoming competition!
We currently plan to hold the championship on 27 February (all at the same time world-wide), and are waiting for confirmation from players that this day will work.
Note: we accepted the top 50 ranked players into the SQL and Logic championships, but still only the top 25 players for PL/SQL. We are going to shift to the top 50 for all championships, starting this quarter, but did not feel it was appropriate to switch the rules for the PL/SQL championship after the fact.
See the FAQ for an explanation of the three ways a player can qualify for the playoff.
Name | Rank | Qualification | Country |
---|---|---|---|
Stelios Vlasopoulos (9) | 1 | Top 25 | Belgium |
Rakesh Dadhich (4) | 2 | Top 25 | India |
mentzel.iudith (12) | 3 | Top 25 | Israel |
Siim Kask (12) | 4 | Top 25 | Estonia |
Janis Baiza (8) | 5 | Top 25 | Latvia |
Niels Hecker (13) | 6 | Top 25 | Germany |
Viacheslav Stepanov (11) | 7 | Top 25 | Russia |
Jerry Bull (10) | 8 | Top 25 | United States |
Zoltan Fulop (6) | 9 | Top 25 | Hungary |
swart260 (6) | 10 | Top 25 | Netherlands |
Mike Pargeter (11) | 11 | Top 25 | United Kingdom |
Vincent Malgrat (6) | 12 | Top 25 | French Republic |
Milibor Jovanovic (4) | 13 | Top 25 | Serbia |
Yuri Pedan (3) | 14 | Top 25 | Ukraine |
Oleksiy Varchyn (1) | 15 | Top 25 | Norway |
Ajaykumar Gupta (3) | 16 | Top 25 | Singapore |
Andrey Zaytsev (1) | 17 | Top 25 | Russia |
james su (7) | 18 | Top 25 | Canada |
Chad Lee (9) | 19 | Top 25 | United States |
Rytis Budreika (0) | 20 | Top 25 | Lithuania |
Kevan Gelling (8) | 21 | Top 25 | Isle of Man |
Joaquin Gonzalez (6) | 22 | Top 25 | Spain |
Jeroen Rutte (6) | 23 | Top 25 | Netherlands |
Manfred Kleander (0) | 24 | Top 25 | Austria |
Anna Onishchuk (7) | 25 | Top 25 | Ireland |
_tiki_4_ (5) | 26 | Wildcard | Germany |
Frank Schmitt (7) | 27 | Wildcard | Germany |
Krzysztof Helbin (2) | 28 | Wildcard | Poland |
Leszek Grudzień (1) | 29 | Wildcard | Poland |
João Barreto (3) | 30 | Wildcard | Portugal |
Ravshan Abbasov (0) | 31 | Wildcard | Uzbekistan |
Peter Auer (0) | 32 | Wildcard | Germany |
dmitrysk (0) | 33 | Wildcard | Russia |
Lukasz Kubicki (0) | 34 | Wildcard | Poland |
Frank Puechl (3) | 35 | Wildcard | Germany |
Karel Prech (2) | 40 | Correctness | Czech Republic |
Thierry Poels (6) | 43 | Correctness | Belgium |
Michal Cvan (10) | 45 | Correctness | Slovakia |
Telmoc (1) | 46 | Correctness | Portugal |
Yuan Tschang (7) | 84 | Correctness | United States |
Randy Gettman (11) | 109 | Correctness | United States |
ChallengeMe (0) | 176 | Correctness | United Kingdom |
Anil Jha (2) | 182 | Correctness | United States |
Goran Stefanović (4) | 197 | Correctness | Serbia |
Dan Kiser (5) | 213 | Correctness | United States |
Participants in First-Ever Annual SQL Championship
The following players will be invited to participate in the first-ever SQL 2013 championship.
As you can see, we have "tweaked" the rules for championships as follows: the top 50 ranked players are now eligible to compete!
See the FAQ for an explanation of the three ways a player can qualify for the championship.
We currently plan to hold this championship on 12 February.
And congratulations to all listed below on their accomplishment and best of luck in the upcoming competition!
As you can see, we have "tweaked" the rules for championships as follows: the top 50 ranked players are now eligible to compete!
See the FAQ for an explanation of the three ways a player can qualify for the championship.
We currently plan to hold this championship on 12 February.
And congratulations to all listed below on their accomplishment and best of luck in the upcoming competition!
Name | Rank | Qualification | Country |
---|---|---|---|
swart260 | 1 | Top 50 | Netherlands |
Rakesh Dadhich | 2 | Top 50 | India |
mentzel.iudith | 3 | Top 50 | Israel |
Vincent Malgrat | 4 | Top 50 | French Republic |
Chris Saxon | 5 | Top 50 | United Kingdom |
Stelios Vlasopoulos | 6 | Top 50 | Belgium |
Matthias Rogel | 7 | Top 50 | Germany |
Chad Lee | 8 | Top 50 | United States |
Justin Cave | 9 | Top 50 | United States |
Niels Hecker | 10 | Top 50 | Germany |
Milibor Jovanovic | 11 | Top 50 | Serbia |
Frank Puechl | 12 | Top 50 | Germany |
james su | 13 | Top 50 | Canada |
Chase Mei | 14 | Top 50 | Canada |
Krzysztof Helbin | 15 | Top 50 | Poland |
Zoltan Fulop | 16 | Top 50 | Hungary |
Rytis Budreika | 17 | Top 50 | Lithuania |
Giedrius Deveikis | 19 | Top 50 | Lithuania |
Ivan Blanarik | 20 | Top 50 | Slovakia |
Leszek Grudzień | 21 | Top 50 | Poland |
Naresh Kumar | 22 | Top 50 | India |
Randy Gettman | 23 | Top 50 | United States |
_tiki_4_ | 24 | Top 50 | Germany |
Anna Onishchuk | 25 | Top 50 | Ireland |
Sachi | 26 | Top 50 | United States |
Viacheslav Stepanov | 27 | Top 50 | Russia |
Pavel Vorontsov | 28 | Top 50 | Russia |
Sean Molloy | 29 | Top 50 | United States |
Tony Winn | 30 | Top 50 | Australia |
Scott Wesley | 32 | Top 50 | Australia |
Jens Petersen | 33 | Top 50 | Germany |
koko | 34 | Top 50 | Ukraine |
Tobias Stark | 35 | Top 50 | Germany |
Jerry Bull | 36 | Top 50 | United States |
Hertha Rettinger | 37 | Top 50 | Germany |
Andres | 38 | Top 50 | Estonia |
MikaelZ | 39 | Top 50 | Ukraine |
Pawan Agarwal | 40 | Top 50 | India |
Sebastian Kolski | 41 | Top 50 | Poland |
Kuvardin Evgeniy | 42 | Top 50 | Russia |
JohnR | 43 | Top 50 | United States |
Marsel Fattakhov | 44 | Top 50 | Russia |
Eric Levin | 45 | Top 50 | United States |
chill | 46 | Top 50 | Austria |
dmitrysk | 47 | Top 50 | Russia |
Rimantas Adomauskas | 48 | Top 50 | Lithuania |
Jason H | 50 | Top 50 | United States |
Michal Cvan | 69 | Correctness | Slovakia |
macabre | 70 | Correctness | Russia |
Thierry Poels | 77 | Correctness | Belgium |
Telmoc | 84 | Correctness | Portugal |
Yuan Tschang | 88 | Correctness | United States |
Participants in First-Ever Annual Logic Championship
The following players will be invited to participate in the first-ever PL/SQL Challenge Logic 2013 championship.
As you can see, we have "tweaked" the rules for championships as follows: the top 50 ranked players are now eligible to compete!
We currently plan to hold the championship on 19 February.
See the FAQ for an explanation of the three ways a player can qualify for the championship.
And congratulations to all listed below on their accomplishment and best of luck in the upcoming competition!
As you can see, we have "tweaked" the rules for championships as follows: the top 50 ranked players are now eligible to compete!
We currently plan to hold the championship on 19 February.
See the FAQ for an explanation of the three ways a player can qualify for the championship.
And congratulations to all listed below on their accomplishment and best of luck in the upcoming competition!
Name | Rank | Qualification | Country |
---|---|---|---|
Naresh Kumar | 1 | Top 50 | India |
mentzel.iudith | 2 | Top 50 | Israel |
Ingimundur Gudmundsson | 3 | Top 50 | Norway |
Chad Lee | 4 | Top 50 | United States |
Milibor Jovanovic | 5 | Top 50 | Serbia |
Niels Hecker | 6 | Top 50 | Germany |
PZOL | 7 | Top 50 | Hungary |
Jerry Bull | 8 | Top 50 | United States |
Dan Jankowski | 9 | Top 50 | United States |
Kanellos | 10 | Top 50 | Greece |
macabre | 11 | Top 50 | Russia |
Viacheslav Stepanov | 12 | Top 50 | Russia |
Sebastian Kolski | 15 | Top 50 | Poland |
chill | 16 | Top 50 | Austria |
katuinbouter | 17 | Top 50 | Netherlands |
Peter Chenery | 18 | Top 50 | United Kingdom |
Chris Saxon | 19 | Top 50 | United Kingdom |
james su | 20 | Top 50 | Canada |
Rich Dellheim | 21 | Top 50 | United States |
Ralf Koelling | 22 | Top 50 | Germany |
Zoltan Fulop | 23 | Top 50 | Hungary |
Yuan Tschang | 24 | Top 50 | United States |
Elic | 25 | Top 50 | Belarus |
Tom Hussey | 26 | Top 50 | United States |
Thierry Poels | 27 | Top 50 | Belgium |
gobruins | 28 | Top 50 | United States |
Pavel Vorontsov | 29 | Top 50 | Russia |
Sean Molloy | 30 | Top 50 | United States |
Mehrab | 31 | Top 50 | United Kingdom |
koko | 32 | Top 50 | Ukraine |
danad | 33 | Top 50 | Czech Republic |
Vijay Mahawar | 34 | Top 50 | India |
JasonC | 35 | Top 50 | United Kingdom |
umir | 36 | Top 50 | Italy |
Cristinel Boboc | 37 | Top 50 | Romania |
Rytis Budreika | 38 | Top 50 | Lithuania |
Jason H | 39 | Top 50 | United States |
Randy Gettman | 40 | Top 50 | United States |
Stelios Vlasopoulos | 41 | Top 50 | Belgium |
Tony Winn | 42 | Top 50 | Australia |
Jens Petersen | 43 | Top 50 | Germany |
Mihail Siscu | 44 | Top 50 | Moldova |
Hudai Polat | 45 | Top 50 | Turkey |
Sandra99 | 46 | Top 50 | Italy |
Andres | 47 | Top 50 | Estonia |
Justin Cave | 48 | Top 50 | United States |
Bruno Martins | 49 | Top 50 | Portugal |
JuanFer | 50 | Top 50 | Bolivia |
MarkM. | 55 | Correctness | Germany |
owbeg | 58 | Correctness | Ukraine |
tonyC | 61 | Correctness | United Kingdom |
Dan Kiser | 79 | Correctness | United States |
Lieselotje | 81 | Correctness | Belgium |
Enrico Rebecchi | 126 | Correctness | Italy |
Subscribe to:
Posts (Atom)