Tuesday, 4 August 2015

APEX blogger from Iran

At Kscope I felt geographically isolated, but I was impressed with all the second language speakers attending.

I can only speak one language, and some would argue I don't do well at that - but people were presenting in a language foreign to their native tongue! Kudos.

The Internet I see and view is predominantly English, and no doubt my search results are skewed accordingly. Occasionally I'll find some bloggers in another language and in the days of "translate this page", I have no problems reading them - just be careful with code translation.

Speaking of that link, that was a German post by Carsten Czarski. Through the Official APEX Linkedin group I found Mahdi Ahmadi from Iran. I understand he writes in Persian, and his recent post describes an APEX app that looks superb for database monitoring. He's arranging to release it on Github, but I also hope he talks with Martin D'Souza about getting it on OraOpenSource.
Dashboard Monitoring iranapex.ir
Mahdi's blog name leaves it pretty clear what's going on:

I thought I should give him a shout-out due to the English language bias. Though based on his LinkedIn connections, you've all probably met him already!

And I'm stuck here, down under ;p

Monday, 3 August 2015

APEX 5 Colour Contrast

During the APEX 5 early adopter I remember a bit of discussion going around regarding the colour contrast.

I would have been one of the complainers, and it's one topic I forgot to raise with the team when I met them at Kscope.

Use of APEX 5 is ramping up at my current site and I couldn't go any further without having a little play. A while ago I used some filters in my ad blocker extension to trim the fat from the OTN forums pages.

I'm come across an even better Chrome extension since then called Stylebot and now it's really easy to manipulate pages you regularly visit.

For instance, when you open the extension you can nominate elements on the page then declaratively define some attributes to use every time that page loads on the specified site.

Stylebot interface
After farming the blue colours from APEX 4.2, I applied this to the region titles when editing component properties. I personally found this so much easier to scan the page and look for the attributes I need.

Modified on the left, original on the right.

Shared component properties
It's almost like the difference between quickly reading a mixed case sentence and READING SOMETHING LIKE THIS WITH NO HEIGHT DIFFERENCE WITHIN THE WORDS.

I did the same thing for the Shared Components home page, though this UI will also be revamped like the page designer at some point in the future

Shared Components
Speaking of the I gave the same treatment to the property palette in the page designer.

Page Designer properties
People have already asked for me to post my tweaks, and it turns out Stylebot allows you to share them so here is mine:
Oracle APEX 5 fitted with 4.2 contrast

No doubt I'll make adjustments in future as I explore the environment and see what works, I'll be sure to keep it up to date. I'm happy to hear suggestions, and perhaps news from the APEX development team that they're thinking of adding built-in styling options to the development environment, kind of like skins.

For completion, here are the styles I used so far.

@import url(http://fonts.googleapis.com/css?family=Georgia);

/* Component properties */

div.a-Region-header {
    background-color: #cfdef0;
    border-style: none;
    border-width: 1px;
    border-color: rgb(170, 170, 170);

h2.a-Region-title {
    font-weight: bold;
    font-family: Helvetica;
    font-size: 14px;

span.a-LinksList-label {
    font-size: 14px;

label.a-Form-label {
    font-size: 13px;

li.apex-rds-item.apex-rds-after a span {
    font-size: 13px;

li.apex-rds-item.apex-rds-first.apex-rds-selected.apex-rds-item--hint a span {
    font-size: 13px;

/* Frame some buttons */

div.a-Region-headerItems--buttons button {
    border-style: solid;
    border-width: 1px;
    border-color: #949494;

button.a-Button {
    border-width: 1px;
    border-style: none;
    border-color: #949494;

/* Page designer properties */

div.a-PropertyEditor-propertyGroup-header {
    background-color: #cfdef0;

/* Component view */

div.aRegionHeading {
    background-color: #e8e8e8;

div.aRegionHeading h1 {
    font-weight: bold;
Happy APEXing!

Thursday, 30 July 2015

Thursday Thought: Boredom

Do you ever get bored? I do.

What do you do when you're bored? I eat. I think. I watch.

Sometimes I play on my phone. I whip it out, play some quizzes, read some feeds, send a text.

What I prefer to do is watch the world. There's plenty going on, I walk through a nearby bush regularly and sometimes it's almost like I'm absorbing pleasantness, contentment.

I saw a commercial a few months ago that made me sigh a little. I can't find a link, but it was basically a person at a bus stop, waiting for the bus but had nothing to do. The alternate was to "beat boredom" by getting connected, so he grabbed his phone, dropped his head and played. That was the slogan: beat boredom.

I think boredom is something we should all have and experience. Some of the best ideas probably came out of a state of boredom. It helps us think, helps our brains consolidate information, and rest.

Today I saw another advert, this one for the Apple watch. I don't see it in this list, but it was essentially the same thing. Beat boredom by having a device that's always attached to your arm that at any moment in time you can simply lift your arm up and see a computer screen.

Aren't we all consciously fighting that impulse with our smartphones?

At least the videos in the link show the device in mostly functional uses, though it's a big commitment, and to then not have it - though realistically, anything a watch can do, a phone can do, better.

And I also hear that, not surprisingly, Android gear and software are ahead of the game, not that I'm interested.

I remember giving up wearing a watch not long after I started my professional career, not that I was a big wearer anyway. I love the wrist freedom, in the same way I'm not looking forward to ever wearing glasses. I love not knowing the time, a fact further engrained after experiencing martial arts.

I think I'll wait a few generations until the wearable is much less intrusive, offering real gain.

All that being said, I'm sure there's niche markets to be filled, such as the medical industry where monitoring patients from a distance can free many hospital beds. I'm sure there's a few million dollar ideas to be had.

Maybe try walking amongst the trees.

Wednesday, 22 July 2015

Perth - Free 1/2 day Education Event

Thanks to Sage Computing Services, AUSOUG are hosting a free 1/2 day education event for it's members.

Join us Wednesday 19th August, 2015 at the Duxton Hotel from 2:30pm to be regaled with tales of tuning, APEX, SQL and PL/SQL.

  • Penny - Practical Tuning Tips for Developers
  • Kylie - Snazzy SQL: Titbits to advance your code
  • Katie - PL/SQL: Are you making the most of it?
  • Scott - APEX 5 isn't just a sexy new IDE 

Full details here, but we'll make sure it's a fun afternoon :)

Tuesday, 14 July 2015

My Kscope15 sessions

My Kscope15 sessions are now available on my presentations page.

I linked to the Prezi version as they don't translate well to PDF, as those of you who tried downloading off the Kscope mobile app may have found.

The supporting code from my deep dive demos can be downloaded here:

Thank you to all those who attended, and cheers for all the great feedback, I sincerely appreciate it. I wish I had more time when I was there to talk for longer with more people.

It was so awesome to meet a bunch of bloggers I've only known online, fun at times to match live faces to minute avatars. In addition of course to the plethora of other community participants I met and chatted with.

It was spun out to hear how many people were aware of my blog and were waiting to meet me, how flattering! I do what I can with my geo-isolation ;p

For those looking for other sessions from Kscope15, try Oracle's APEX collateral pages or check through recent uploads on slideshare, or become an ODTUG member for access to all the sessions plus much more.

I'll be back, not sure when, or for which conference, but I'll be back for sure.


Podcast recommendation: SGU

Another item on my backlog is getting up to date on my favourite podcasts. I've got a post drafted that lists my recommendations, but if you're looking for a fun, well produced science podcast then go no further than The Skeptics Guide to the Universe.

They are generally 90 mins an episode and if you're not into podcasts already that may seem daunting. To me they fill my commute with fun but thought provoking stuff in lieu of commercial radio, which I'm sure causes ear cancer.

The episode I linked in particular (517) would be a great starter for software developers - some of the early topics might pique your interest. For many they get hooked in and start listening to the back catalogue... I did.

Soon we may even get a special Pluto episode treated perhaps with a guest commentator like Phil Plait.


Exploring dynamic pivot options

In looking for information on pivoting variable number of columns, I stumbled across a question I once managed to AskTom, many moons ago.

Adrian Billington has an interesting lead into an XML solution with pivot, but would need more digging to finalise conversation of XML data for APEX to use.

Then I found Tom's answer using easy to understand dynamic SQL (properly asserted, no less)

Then I found this gem, courtesy of Anton Scheffer, via Lucas Jellema

The link to Anton's blog post no longer works, but the relevant sql zip is still available in the resources.

It accepts queries like this, which solves my current problem:
select * from table( pivot(  'select deptno,  job, count(*) c from scott.emp group by deptno, job' ) )

---------- ---------- ---------- ---------- ---------- ----------
        30                     1          1                     4
        20          2          2          1                      
        10                     1          1          1           

What an awesome solution.

For anyone receiving this error:
ORA-29913: error in executing ODCITABLEDESCRIBE callout
check you have direct SELECT privilege on table, similar to resolving PLS-201 error.

Now to work it into an APEX region, which seems like will be a little wild when applying PPR on report with generic number of columns.