Friday, June 26, 2009

Another most excellent ODTUG

I am just back from the latest ODTUG (the Oracle Development Tools User Group) Kaleidoscope conference, this time in Monterey, California. It was, as usual, a very well-run and successful event (their attendance actually grew from 2008, which is saying an awful lot given the state of the global economy).

It is easy to pick out the highlight of the conference for me: the ODTUG board of directors very graciously bestowed upon me their first Lifetime Achievement Award. Here, I can prove it to you with (what else?) Twitter:

[ How did we ever get by without Twitter? Aw, just kidding. I do without Twitter every single day of my life. :-) ]

Anyway, back to the seriously wonderful stuff: I was very honored by ODTUG and deeply appreciate the award, except I have to wonder if the "subtext" of the award is "Enough already, Steven. Time to chill out and let other people have their way with PL/SQL."

Maybe, maybe....I will give it some thought - after I finish the next edition of Oracle PL/SQL Programming (due out in October at Oracle Open World), implement object type support for Quest Code Tester, wrap up my best practice video series on PL/SQL Obsession, and come back from my Asia-Pacific summer tour (Australia, Singapore and Seoul).

Of course, I don't like ODTUG just because they treat me so nicely (oh, and they have also agreed to let me publish a regular column named "Confessions of a Quick and Dirty Programmer" in their magazine). This is my favorite user group organization precisely because of its focus on developers. At a time when Oracle barely seems to remember that it has this great programming language (excepting the PL/SQL dev team, Oracle Magazine and OTN, of course), ODTUG offers an annual love fest for PL/SQL developers.

Hmmm, actually two love fests: the general ODTUG Kaleidoscope conference (it covers much more than just PL/SQL) and the annual Oracle PL/SQL Programming conference (it covers nothing but PL/SQL). OPP2009 will take place on Nov 10-11 in Atlanta. It will feature an expanded agenda, which means that, more than ever before, if you are looking for an intensive training in PL/SQL, OPP2009 is the best place to spend your scarce training dollars.

Enough shameless promotion of a conference for which I am technical co-chairperson.

So....thanks once more to the ODTUG board and its many fantastic volunteers, as well as Your Conference Connection, which does the on-the-ground organization of ODTUG events. Special kudos to Jeff Jacobs, Kaleidoscope conference chairperson, Mike Riley (ODTUG president, and husband of the very delightful Lisa Riley, with whom I had several excellent conversations) and Kathleen McCausland, ODTUG executive director.

If you've never attended a Kaleidoscope or OPP conference and you are a PL/SQL developer, I strongly urge you to get them on your calendar ASAP.

Wednesday, June 10, 2009

Quest Code Tester for Oracle 1.8.3 Now Available

Version 1.8.3 of Quest Code Tester (the most powerful automated testing tool for PL/SQL currently available, and my main obsession these days) is now available for downloading from Quest's on-line SupportLink (after being prompted to log in you will be taken directly to the download page). If you write PL/SQL code or manage a team that does so, you really owe it to yourself to check out this tool. Thirty-day free trial available at

I strongly urge all Code Tester users to upgrade to this version. It is, without doubt, the most stable and richly-featured release of this automated testing tool.

Of course, you would expect that it would have more features, which I detail below. How, you might ask, can I be sure to make my claim of "most stable"?

Very simple: because for 1.8.3, we finally "ate our own dog food" in a very big way and constructed an automated regression test of the backend functionality of Quest Code Tester.

You might have thought that since this is an automated testing tool, we would have done this from the very start. Yes, that would have been ideal, but so little about our lives are ideal, would you agree?

Certainly, we used Code Tester to test elements of the backend right from the beginning, but that is a different thing from building anything approaching a complete and automated regression test.

That is the most important new "feature" of 1.8.3, and we did it by creating a new utility to complement (and eventually be folded into) Code Tester, which we are calling Test Launcher. I talk more about Test Launcher in a follow-on post to this blog. We will soon be posting Test Launcher on the Code Tester community library in the Downloads and Upgrades section. You will all be able to use Test Launcher yourselves (though initially it will not be supported by Quest Support - you will need to report issues through the community).

New Features in 1.8.3

Besides fixing over 75 bugs, we added some very nice new features. The following information is also available in the release notes.

New Export/Import Architecture

Code Tester now writes export files as an XML document. It will import both the legacy ".QUT" export files as well as the new .XML formatted files. Merging is now only supported for XML exports. The new export format will be much more reliable and easier to support.

Expanded Set of "Hooks"

Code Tester now offers a greatly expanded set of hooks via the my_codetester package to customize the behavior of Code Tester at key points like before and after import, before and after running a test, etc.

Reports for Suites

All reports defined for individual test definitions are now available for suites as well.

View All Test Definitions in Test Dashboard

You can now change the schema selector to "All Schemas" so that you can see the list of all test definitions to which you have access (run and/or edit) at once, without changing the selected schema.

Use Windows Name to Track Changes to Test Definition

You can use the my_codetester package to specify to Code Tester that the "created by" and "changed by" audit columns on test definition tables be populated with the name of the Windows user, rather than the Oracle schema name returned by the USER function.

Test Package Formatting on Demand

Code Tester will no longer automatically format the generated test code (this will improve overall performance of generation). You will now need to explicit request a format and recompile in the Test Code tab of Test Editor.

Improved Support for Wider Set of Datatypes

Code Tester will now allow you to create test definitions properly for all kinds of timestamps and intervals. You can also create a test definition for an object type, though you will still need to write the actual test logic yourself.

Wednesday, June 03, 2009

Hurrah for Barack Obama: another step towards normalization with Cuba

How very exciting! The U.S. policy towards Cuba has been an obscenity for decades, even to the extent of supporting and allowing acts of terrorism on our own soil by so-called Gusanos (worms) against other Cubans supporting the Castro government. Normalization with Cuba would be a big step towards a new, less imperialistic era of relations between the US and Latin America.

OAS revokes 47-year-old suspension of Cuba

SAN PEDRO SULA, Honduras (CNN) -- The Organization of American States on Wednesday revoked a 1962 decision suspending Cuba from the multinational group.Patricia Rodas, the minister of foreign relations for Honduras, made the announcement at the conclusion of the two-day meeting of the 35 member nations.The United States, which led the push to suspend Cuba at the height of the Cold War, was represented at the meeting by Secretary of State Hillary Clinton.U.S. officials had no immediate comment.

Force me to take a break, will you?

Two of the biggest problems we developers have are (a) we are addicted to writing software and don't want to stop, and (b) we generally think we're pretty sharp people and can solve any problem that comes our way.

Why are these problems? Because the net result is that we tend to work too hard and too long without breaks, with a resulting reduction in code quality. This dynamic is particularly obvious when it comes to fixing a bug.

I don't know about you, but when something is demonstrably wrong with my code, I feel nothing short of a compulsion to find the cause of the bug and fix it. Now. Immediately.

But, of course, most bugs are not fixed immediately. Instead, I analyze my code, I run traces, I try this, I try that. My back starts to ache. My eyes get all squinty. I thirst, I hunger, but I cannot, will not stop until I get my code running....

BAD IDEA! If you can't fix your bug quickly, say within 15 minutes, there's a really good chance you won't find it for hours - if you don't take a break. The problem is that we can get too deep inside the code and replace perspective with urgency.

A much better idea is to take a break, get up, drink a big glass of water, move around, stretch, run around the block, take a nap - do anything to stop thinking directly about your problem. Instead let your brain take a break and think "for itself." There's a really good chance that the solution will just "pop" into your head by the time you sit yourself back down in front of your screen.

Of course, when you are desperately engaged with your code, it can be hard to muster the discipline to step away. In those situations, it's nice to have someone or something remind you that it's time for a break.

A few days ago, I got a note from Danilo, who said:

"I always read your personal blog, and i find it really interesting and full of useful tips. So today i would like to share an application that really helps my way to code and relax. I do take lots of breaks during coding, and I have found atool that is a perfect reminder to fight my instinct to code continuously for hours without interruptions. It is called WorkPause and you can download it at"

I downloaded and installed the 30 day free trial and I find that I like it. It's very customizable. So now after 30 minutes of work, my screen locks and a 15 second countdown starts. I can't do anything with my laptop. My immediate reaction is anger.

"Hey! Why can't I type? What's going on?"

Then I remember why this has happened and I sit back, take a deep breath, and wait it out. After the 15 seconds, I can unlock it if I want. Or I can take a real break.

Either way, I am forced to pause. Thanks, Danilo. I am going to buy WorkPause. And I urge all the other developers reading this entry to give it a try. It will save you lots of time and make you feel better, too.