14 August 2010

Rescoring performed for 13 August Quiz on INDICES OF BETWEEN (1330)

The 13 August quiz asked you to answer this question: "Which of the following statements regarding the BETWEEN clause of the INDICES OF feature are true?" We scored the following choice as correct: "The values in the BETWEEN clause can be any valid PLS_INTEGER value." Several players, led by Sergey P., objected, pointing out that you could use, for example, 1.5 (which is clearly not a PLS_INTEGER value) for either of the expressions in the BETWEEN clause. Oracle would not raise an issue, it would simply implicitly convert this number into an integer and then use it to execute the FORALL statement. My first reaction to this was: yes, it is true, that you can in fact supply any expression in BETWEEN that can be evaluated to a PLS_INTEGER. But the choice only states that the values "can be" any valid PLS_INTEGER value. This statement is undoubtedly true. You can use any PLS_INTEGER value, and you can also use other values that implicitly convert to a PLS_INTEGER value. So I could stand by my original scoring; from a linguistic standpoint, I am correct. The PL/SQL Challenge is not, however, about the English language. It is about Oracle and PL/SQL technologies. So I have decided to rescore answers to this question, so that even if you did not mark this choice as correct, you will receive credit. I will also change the text of this choice to remove this ambiguity in the future. Sigh...I was just about to post a note on the blog expressing deep satisfaction that we had gone over two weeks without any need to adjust scores (that is, we published quizzes without errors). Well, I can't do that, but I can express joy that the quality of the quizzes have improved dramatically since Darryl Hurley and Ken Holmslykke agreed to become reviewers of my quizzes. May thanks to Darryl and Ken! And, finally, congratulations to Sergey for winning his choice of an O'Reilly Media ebook for being the first player to point out this issue. Oh and one other thing: a player wrote to say that "I think that if a value is specified in the BETWEEN clause, it must be a literal." This is not the case, as you can see by putting together a test script or running the code I included in my answer text.

12 August 2010

Questions about the INSTR quiz of 11 August (1328)

A few players wrote with concerns about the INSTR quiz, which tested your knowledge of the impact of using a negative value for the POS argument to the function. Here we go: 1. "From my point of view today quiz is formulated ambiguously. None of the answers describes INSTR behavior really accurately. The _combination_ of the first and second answers does. For this reason I have selected no one of them, but I guess the other interpretation is possible as well in which case both of them shell be selected. It depends on how you interpret choices - as self-contained or as complimentary."
2. "Regarding today's question, I think two of the options can be a little incomplete, maybe misleading. This can be confusing, as it is not clear in the question if you meant "what is correct?" or "what is correct and complete?":
"Oracle searches for the NTH occurrence of the STR2 value backwards through STR1 (towards index position 1) - I didn't check this one, although I believe everything there is correct. But it fails to mention that is searches starting in position (length - POS)
"The search for STR2 begins from the end of STR1, instead of from the beginning. That is, a value for POS of -1 starts the search from the last character in STR1. A value for POS of -2 starts the search from the second-to-last character in STR1- I checked this one, and I think everything it says is correct. Still, to be *complete*, it probably had to mention that is searches backwards." My response: when I looked back over the choices for the quiz, I was surprised that I hadn't noticed when writing and reviewing the quiz how similar the two correct answers were. I generally try to avoid that, and make sure that each choice is more distinct. Having said that, I don't think there is actually any inaccuracy in either one - but I also agree that neither is a "complete" definition of INSTR. So let's address that: I do not claim in the assumptions or in this particular quiz that for a choice to be correct it has to describe completely a particular feature. Unless I state that in the particular question, all you should be concerned with is whether that choice itself is correct as a "self-contained" statement.

10 August 2010

Quizzes missing text in Firefox 3.6.3 (or other browsers)?

We have received occasional but persistent reports of players not able to see all the text for a quiz. Here are some typical descriptions:

"Hi Steven Yesterday (9th) was a very easy quiz but for answer 2 and 5, I just saw the boxes, but there was absolutely nothing in the corresponding Choice/Explanation field, so I haven't any reason to check the box (with nothing you can't do nothing. Unfortunately, now with the answer, I see what it should have been and that I have 2 mistakes because of that."

"On yesterday's quiz (about UTL_FILE) I could only see 4 possible answers although there were 5 tick boxes. I did not take a screenshot but the middle solution was completely blank."

We have not been able to reproduce this problem; it is likely related to the image rendering, which can be tricky across browsers.

Please submit a bug report if this has happened to you. And if you see it happening again, please take a screenshot and include that in the bug report.

I am using Firefox 3.6.8 and have not had any problems. Perhaps those of you on 3.6.3 could upgrade and that will resolve the problem?


Questions about the 9 August 2010 Quiz(1326)

The quiz on 9 August asked the following question: "Which of the following functions can you use to change the case of a string?" We then listed UPPER, LOWER, INITCAP, NLS_INITCAP and REVERSE_CASE. We scored the first four as correct, the last as incorrect. We received emails raising the following concerns: 1. "The wording for the today's quiz should be slightly different (bold word added): 'which of the following builtin functions...". Since anyone could write a function with the name reverse_case and use that to change the case of a string." 2. "For today's quiz question, regarding functions you can use to change the case of a string, I think I answered correctly based on my perception of your intent of the question, however, I wanted to point out that technically NONE of the functions listed CHANGE any supplied string, but instead return a new string, actually leaving the supplied string itself unchanged." 3. "Depends what case the string was to start with e.g. lower('asdfg') will not change case but UPPER('asdfg') will, similarly UPPER('ASDFG') won't." Regarding (1), I will change the text of the question to explicitly reference "built-in functions," but I do not think it was necessary, given the assumptions that we state for the quizzes. Anyone could write a function, but unless that function is defined as part of the question, you must assume that such a function does not exist. Regarding (2), yes, it is true that these functions do not actually change the case of a string passed to them. Instead, they return a string with a possibly changed case. I believe, however, that the meaning of this question was clear and will not be adjusting any scores or ranks. I will, though, change the text to make that explicit. Regarding (3), the player is correct that there are circumstances under which none of these functions would return a string any different from that passed into it, but that wasn't the question. The fact is, you can use those first four functions to return a string with changed case. I look forward to your thoughts on this. Regards, Steven

08 August 2010

Proposal for Forgiveness Policy

Several players have requested a way to avoid being penalized heavily for missing quizzes or for making a silly mistake or for Internet failures that result in long delays is submitting responses. This issue has come up quite a bit lately, given the summer months and the tendency of normal human beings in the northern hemisphere to take holidays during this time.

In addition, I now manually make adjustments to scores when players report a problem. This is very time consuming and simply not sustainable or scalable (as we add more players).

I therefore plan to implement a forgiveness policy starting with Q3 2010. We will "forgive" a certain number of missed days or low scores per month/quarter. Once this is in place, we will also no longer make adjustments to scores, such as when your quiz submission is interrupted and you have to go back and "take the quiz" a second time.

I share with you below my ideas on how to implement/apply this policy. I would love to hear what you think. It may take a little while to sort it all out, but of this you can be certain:

The forgiveness policy will be applied at the end of Q3 (and every quarter thereafter). The determination of participation in the championship playoff will be made after I apply the forgiveness algorithm. So if you miss a few days of quizzes, do not panic!

Forgiveness Algorithm
  • Must be applied equally to everyone. That is, if I do not miss any quizzes, I should not be penalized, relatively speaking. Even I should see a benefit from the forgiveness policy.
  • Apply forgiveness to 10 days of quizzes in a quarter(out of about 60 days).
  • For each missed quiz (up to 10), give that person a score equal to average of all scores for that day. This way, you do not take the "full hit" of a 0 score, but you also will not "jump ahead" of those who rank lots higher than you (and remember: this only happens for a small number of days out of the total).
  • If you missed less than 10 quizzes in a quarter (let's call the balance N), then I will apply a different algorithm to the N lowest ranked days in that quarter. Suppose, for example, you usually rank in the top 100, but on 15 days during the quarter, your ranking was around 200. You also missed 3 quizzes. Then I would "forgive" 7 of the lowest ~200 ranked days.
  • Forgiveness for low ranking: change your score for those days to match the score of the ranking on that day that equals your average ranking throughout the quarter. In other words, if you average ranking is 125 then on a day in which you were ranked 250, I find the score of the person ranked 125, give you that score, and then re-rank.
What do you think? I need to find a way to give players some leeway/flexibility, but also not "punish," in effect, those who are diligent and most devoted to the quiz.

Thanks in advance for your thoughts.