Interesting to see openings specifically for Apex developers in Perth. For example:
Oracle Developer – APEX (Applications Express)
Advertiser: Vantage Recruitment
Classification: I.T. & T > Database Dev. & Admin
Description: ***Contract Opportunity for an Exciting Oracle Development Project in Perth CBD***
View this job at:
(Note: I’m not affiliated with this advertiser nor do I know anything about this ad apart from what you can read for yourself from the link above.)
I’ve been trying a number of strategies to improve the performance of a very complex form (Oracle Forms 6i) currently in development. We’ve already done a fair amount of work making the code as efficient as possible, while still being reasonably maintainable, so there don’t seem to be any more low-hanging fruit we can pick off easily.
One aspect of the performance is the form startup time, which is on the order of 9-17 seconds. The kinds of changes I’m testing don’t make a very visible change to this time, so to work out whether the changes are worthwhile I have to be a bit more scientific about performance measurement. That means I have to use statistics (Disclaimer: I am not a statistician, so take what I say with a grain of salt and do your own research!). I test the form with the original code and with the modified code to see whether a particular code change makes any difference to the performance.
I start the form up, wait for it to load, then run our debug tool which tells me the times (to the nearest second) when the form started and when control was passed to the user. I then record these times in a spreadsheet, then close the form and try again two or three times, recording each result. Then I take the average and write that down. I’ll then change back to the original (unimproved) code, run the whole test again, then compare the average results. Sometimes the average is better, worse or the same as the original.
This is what I was doing today – I’d made a change which I thought might knock off a second or two off the startup time, and so I ran my 2-phase timing test:
Improved code timings: 19s, 8s, 7s, 7s
Original code timings: 9s, 8s, 8s
What can I conclude from these data? What I did conclude was that the first timing (19s) was an outlier – it was the first time I’d run the form today so it probably had to load various caches and possibly even perform hard-parses for some of the queries. The original code had an average startup time of 8.3 seconds, and the improved code loaded in 7.3 seconds on average (discounting the outlier). My improvement saved 1 second!
Or did it? These tests were performed between 8:16 and 8:27 on a Tuesday morning. I later thought of a slightly different way of doing the code improvement, implemented it and ran the whole test again:
Improved(#2) code timings: 11s, 9s, 12s, 9s
Original code timings: 11s, 12s, 11s, 7s, 8s
The averages have risen to 10.3 and 9.8 seconds, and the “improved” code actually looks worse here! This second battery of tests were performed between 9:13 and 9:22 on the same morning. You’ll also notice that I ran the test more often this time. Why? Well, I couldn’t believe that the improved code slowed the form to an average 10.6 seconds, so ran it a fourth time; and due to my increasing suspicion that these timings were more random than I’d realised, I ran the final test five times. In the end I decided the slower times must be because more and more developers have arrived by 9am and so the app server is busier, throwing my test results into confusion.
One thing I’ll confess is that I’ve had to resist a temptation all along to only include timings that seem “reasonable” – e.g. if the form took 19 seconds to load I’d immediately suspect some other process on the server had slowed my session down, and so I’d be tempted to not include it in the results spreadsheet. I knew enough about statistics to know that doing this would run the risk of introducing confirmation bias into the results, so I diligently recorded every result I observed.
After considering the apparent failure of my attempt to prove my code change made a discernable difference to the performance of the code, I started thinking a bit more about what was going on as I ran the tests and recorded the results. I realised that a more subtle form of confirmation bias has crept into my results because I didn’t decide firsthand how many tests I would run. I simply ran the test three or our times, depending on whether I was in a hurry, and if it didn’t seem to be coming up with the numbers I was expecting, I’d keep running it until it did!
Writing it out like that, it seems blatently obvious, but when you’re in the middle of running these tests and recording results it’s very easy to slip up.
What did I learn from all this? Before running any tests, write down exactly how many tests will be run, and at what times of the day. In other words, try to eliminate irrelevant variables such as concurrent activity on the server by spreading the tests randomly throughout the day, and try to avoid confirmation bias by predicting ahead of time how many tests will be needed to reduce the impact of outliers on the average result.
I’ve been in bed the last few days with a virus, but I should be ok in time for Monday. Had a look through the programme, and again it’s chocablock with very interesting titles. Quite a bit of Development Blue, but not so much DBA Cyan this time (unfortunately, in my opinion). There’s a lot of Apex sessions which I’m guessing reflects the growth of interest in Apex development here in Perth.
2008_Program_perth.pdf via www.ausoug.org.au/2020
Highlights for me include:
- 11g New Features for PL/SQL developers – Dr Timothy S Hall
- Creative Conditional Compilation – Scott Wesley
- What is coming in Oracle Application Express and SQL Developer – David Peake
- How Ugly is that Apex Report? – Penny Cookson
- Back to basics: Simple database web services without the need for SOA – Chris Muir
- 11g features for developers – Connor McDonald
- Boost performance with PL/SQL programming best practices – Dr Timothy S Hall
- The SQL and PL/SQL Results Cache – Penny Cookson
- Converting from Oracle Forms to Oracle Application Express – David Peake
- Advanced UI Presentation Techniques – David Peake
- Babbage vs Oracle – Scott Hollows
Unfortunately, I won’t be able to attend all the above sessions so I’ll have to make some hard decisions 🙂
Um, could someone either
(a) tell me when Australia became part of Asia? or
(b) send Oracle University to Geography 101… 🙂
“First Time in Asia! … Melbourne… Sydney… Brisbane”
I enjoyed today’s programme very much. John Garmany gave a very easy-to-understand intro to the world of Regular Expressions. Luie Matthee spoke about virtualised Oracle 10g instances on Red Hat Enterprise Linux 5, most of which went over my head but I’m learning.
Apparently my red Red Hat hat is in the mail, but I did get a Toad toad.
It croaks when it is dropped or bashed on something. It amused my 2.5 and 0.5 year olds for hours, which is something I can’t say for all the $50+ toys they’ve gotten over the years.
Unfortunately I missed Chris’ talk on load testing web applications, I’ll have to ask my colleagues who attended about that one. I was particularly interested to hear Duncan Mills talk about how to move Oracle to SOA, and I wasn’t disappointed. The surprise is how easy it is to consume web services even with Forms 6i, and the new event triggers in Forms 11 sound very exciting (i.e. no more polling the database to simulate asynchronous processing) – there’ll probably be some new triggers like when-event-raised and when-custom-event which can be used similarly to when-timer-expired, but perhaps without so much network overhead.
The day ended with a rather friendly debate over development tools. Chris Muir started well with good-natured jabs at Forms (hasn’t that gone the way of Cobol? and why are there hardly any talks on Forms anymore?), Apex (voted “Best Toy of 2007”), and .Net (who cares about MS at an Oracle conference anyway?). Scott Wesley pointed out the large installed base of Forms, it’s a mature product, no-one needs to talk about it because there aren’t any problems with it anymore. Penny Cookson extolled the simple power that is available to the Apex developer. David Shields made a valiant attempt to influence a roomful of Oracle developers to give MS a chance, but I think the odds were stacked against him 🙂 Some probing questions from the audience prompted discussion of the various tools’ virtues for newbie developers, for integration with SOA, and for maintaining legacy apps. In the end I think it was decided that the winner is the “best tool for the job at hand”, in other words, everyone won (except perhaps for .Net 😉
My thanks to the AUSOUG committee for their hard work and dedication to bring off another excellent conference, and good luck in Melbourne!
A great start to the Perth conference, great to catch up with old and not-so-old friends.
Listened to Tim Armitage from Oracle talk about database independence and why it’s just not needed due to the range of features Oracle provides for no extra cost.
Snuck into Penny Cookson’s demo of an Apex application she’s been working on for UWA. Quite a few tricks I hadn’t heard of, some of which will solve some niggling issues I’ve had on my applications. One simple one is the use of an application item to hold the previous page, to support reverse navigation from a page which has multiple entry points.
This afternoon will be time to stretch my knowledge a bit: Collin Klepfer on “Database Growth: Problems and Solutions”, and Gilbert Standen on “JVM Cutover for Oracle Forms” which I’m sure will mostly go over my head but I’ll pick up something about the replacement for JInitiator.
I suspect there’s a bit of “OpenWorld Envy” going on. It seems Penny wasn’t able to make it to SF and in her talk pointed out the fact that most blog references to Chris Muir at OW were about beer, specifically the consumption of it at various pubs.
I’m sure this tension will make for a spectacular show tomorrow evening with “The Great Oracle Development Tools Debate” featuring Penny and Chris, as well as David Shields, Vinod Patel (a current colleague of mine) and Scott Wesley (a former colleague of mine).
I’ve had a few blogs in my head the last few months but haven’t had a chance to write them up. This is partly affected by the release cycle at work, and some extra-curricular volunteer work, but mostly by the birth of our second child.
[Warning: the next paragraph is not Oracle-related – skip ahead to the following paragraph if you like…]
Daniel’s arrival has probably affected our home routine more than Chloe’s did; at least with Chloe there was only one child requiring attention at any given moment; now there’s two kids screaming and during the week Daddy’s away at work for 10+ hours a day, so Rosalie’s got to handle it all by herself. The pressure isn’t helped much when one or more of us falls sick; last week Chloe and I were beset with headaches and fever, and while we’re almost recovered now, Daniel has started getting blocked up and having trouble sleeping. To top it all off Rosalie’s a bit under the weather as well. The cold and wet weather here in Perth has probably been a contributor – we’ve had temperature ranges as low as 8-17 degrees (Celsius)!
Yet another contributor to my lack of blogging activity was a fair amount of involvement in the State Youth Games earlier this month; this took a lot of my time, especially throughout May. Soon, I’ll blog about the Oracle APEX-driven web site I created for our team, partly on my non-Oracle blog [EDIT: since removed] and on this blog. The most interesting part of that was learning how to allow connections directly to my http server at home.
With all that excitement, I’ve managed to mostly keep up with all the blogging out there, which was massively helped with my home-grown RSS reader. It is also an Oracle APEX-driven web site for my private use, it regularly polls all my RSS feeds, downloads them to my computer, and keeps track of which ones I’ve read yet. RSS items that have enclosures (e.g. Rocketboom) are downloaded as well, so when I’m ready to watch or listen to them there’s less delay. At the moment I’ve got some hard-coded rules that automatically mark some items as “not interesting”, but eventually I hope to implement some kind of guided learning so that it will be able to mark new items as “probably interesting” or “probably not interesting” based on my feedback on prior items. Even with the hard coded rules, however, it cut down my reading time by about 50% which is nice. A few months ago the database had over 1,000 unread items; over the last few weeks I’ve managed to whittle that down quite a bit, and when I was sick I read the last few so now I’m fully up to date – e.g. Oracle 11g is on its way! 🙂 I can barely wait to get that installed.
That’s the State Of My Blog(s). I hope you enjoyed that because I normally avoid blogging-about-blogging like the /*TODO: insert cliche*/.
“Applications Developer – desirable skills: Soccer or Tetrinet”
Job: Applications Developer
Location: Perth – South
Advertiser: Kwinana Software Company
Classification: I.T. & T > Analyst/Programmer
Description: Highly-regarded development house. Build broad & deep skills in Microsoft, Oracle and industrial technologies. Soccer or Tetrinet skills wouldn’t hurt
“We have comfy chairs, grunty machines and twin 22” wide-screens on every desk (with webcams, for Skyping between offices).”