Carl Backstrom

Subscribe to Carl Backstrom feed
Where spellcheqk is just another word.
Posting and Rants about Web Development in general and Oracle Application Express in particular.Carl Backstrom
Updated: 10 hours 40 min ago

OOW recap (pt 2)

Wed, 2008-10-15 22:05
Better late than never on this one this job thing really gets in the way of blogging sometimes ;) .

I had two sessions this Oracle World , well I had a session and I helped out on another.

Sessions (Helper)

The session I helped out with a bit was Mark Drake's Oracle Application Express and Oracle XML Database: A Match Made in the Database. This session had it's beginning's way back at Web2.0 Expo where Mark and I shared a demo booth.  XMLDB has a standard sample/demo called XFILES which is a simple yet full featured file management system using all XMLDB features. But it requires using a java server and is kinda slow , well I think it's slow but I might be biased.

So I was like hey Mark! you should build this in APEX since we are both built in features of the database. And lo and behold the his session was born.  I helped on and off with building the demo application , and it was a big learning experience, both with the features XMLDB provides as well as were APEX does not leverage them well, something we will be working on improving.

Mark at OOW asked if I could sit in so if there was any specific APEX questions, and hey I'm a people person so of course I said yes.  The session was very well attended with many people in the audience already familiar with APEX and/or XMLDB.  Mark covered the basics of XMLDB and I quickly went over APEX basic's and then it was all demo. 

I really think the application demo and explanation of how things were created was a hit, it showed the power of XMLDB as well as how APEX can leverage it's features directly out of the databasey.  Just the number of hands that came up with people saying things like

  • Hey I just built that a month a go and yours is cooler.
  • Hey I need to build that in the near future and these are great ideas.
  • Hey can I have that application?

shows that this session hit a sweet spot. A couple things I got from this is that people like that APEX can directly leverage built in database features and want more of it easier, and secondly I need to really make time to clean up that XFILES application so it can be a packaged application.

Sessions (Mine)

My session was titled Web 2.0 using Oracle Application Express and was pretty well attended , especially since I was up against two other APEX sessions at the end of the day.  I like my sessions slide light , demo heavy and with audience participation . Luckily I didn't rewrite my whole demo and slides the day my session as I'm known to do though I was editing right up till the end. 

My presentation had two parts.

A technical part that expected people to know or at least have knowledge of APEX and it's built in javascript framework already.  During this part of the session I went over features in APEX that were used to build Interactive reports.  It goes something like this, in Interactive Reports we have this feature, and this is how it was built

...code ensues...

I like this format since it shows at a low level way how to build features but leaves it up to the developers how they want to leverage it. 

I also stress using the proper debugging tools when building client side features , specifically Firefox with Firebug , though I did point out that newer versions of other browsers are also getting these features.  Basically if your using a browser that doesn't give you proper error message IE 6/7 among others DO NOT use it for development, your making it harder on yourself and wasting time.

You download my application from here to mess around with.

The second part of my presentation is the real fun part where I get to talk about upcoming features in APEX.  So after showing my safe harbor slide , the one that keeps me out of trouble with the boss's , I was able to go over features that we are working on for future release's.

Improvements to the base functions $x() $v() $s() which are the base functions when dealing with page items.

Namespacing of our javascript libraries so that we play nice with other third party javascript libraries.

The use of chaining in our javascript library so that javascript is more compact and reusable.

And finally and my favorite!
Though I've hinted to people off and on for awhile we will  be including in the base jQuery library in our next release! It's all signed of and everything and I'm busy rewriting our code to leverage jQuery underneath, one of the reason's it's been tough for me to get these posts out.

In my next post I will go over how the inclusion of jQuery effect's APEX.  It's both a bigger and yet smaller change than you might think

Demo Application from Oracle World (and ODTUG too)

Mon, 2008-10-06 12:41
As promised I've put up the export of my demo application from Oracle World , for people who were at ODTUG in New Orleans it's pretty much the same application I showed there.

Thanks, for everybody who showed up I had a great time and hopefully was able to give people some ideas. I'll see what the rules are for me putting my slides on slideshare or something like that , but at some point Oracle will putting up the slides and a recording of the session.

Download the Application


The application will only work in Firefox, but that is only because it was built specifically to show Firebug features.

If you remove anything that says console.log or console.dir it will work in other browsers.


OOW recap (pt 1)

Thu, 2008-10-02 14:06
Hi all it's been a week now since the end of Oracle World and finally have enough time to write up a brief recap of my experience of OOW.

HOL (Hands On Labs)
I helped out in a couple of the APEX Hands on Labs starting with the very first one at 10:30 am on Sunday and they seemed to run fairly smooth , some computer problems but were able to work through them, and were very well attended. Seeing some of the issues people ran into was very informative. Some are just places where we can improve the Hands on Labs themselves and others were where we can improve product, for that information alone I'm glad I volunteered to helped out.

Sessions (Not Mine)
I almost never have enough time for sessions at Oracle World , mainly because I like working the demo grounds, and usually completely ignore my scheduled demo ground times and just hang out what can I say I'm a people person :D , but I did make it to a few.

I was in Joel Kallman's APEX + Globalization session, which was very well attended, especially for a Sunday. Since globalization isn't something I usually have to deal with I always learn something new from these sessions. One thing I did learn about APEX is you don't have to take globalization into account from the very beginning of development comparative to some other development enrollments, though a bit of forethought helps, but can decide to translate and globalize your applications as needed.

The other session I was able to sit through in it's entirety was Raj Mattamal's Security: Writing Custom Authentication Schemes for Application Express session, and as always Raj put on a very enjoyable and informative session.

In fact if one thing ,at least for me, stands out about Joel's and Raj's sessions it's how well both of them communicate some complex very ideas and how easily some of these complex ideas can be implemented with APEX.

Demo Grounds
The demo grounds are my favorite part of Oracle World. Since I work from home usually most my communication , even with the APEX development team, is email / IM / phone calls. Oracle World not only allows me to remember what the people I work with look like but meet people I know from forums,blogs,etc face to face.

I also like demoing APEX, it's fun to show someone who's never seen APEX just how fast you can build and edit a complete working application , APEX pretty much sells itself in the 5 minute demo, and to see how they react when they hear they already own APEX with their current database license.

And for people that have seen or using APEX already I like demoing the new stuff. This OOW the new stuff was Websheets (interactive reports with built in edit and more) and Dynamic Actions (declarative javascript functionality).

As a developer's working on bugs and functionality on these features sometimes we lose track of how cool/useful/needed some of these things are. But to watch people reactions as we show them the stuff they can't play with yet ;) and to get comments and suggestions about the features (good or bad) really makes it worth it.

OOW recap (pt2) I'll go over the sessions I had a hand in , some miscellaneous events over the week.

The blog post after that will be about our plans with APEX + jQuery , it kinda deserves it's own post.

Me @ Oracle World

Sat, 2008-09-20 18:42
Been awhile since I've posted. That whole work thing will get in the way of that on occasion.

Anyway for people heading to Oracle World .

I'll be helping run the APEX hands on lab.

S298611, 10:30 - 11:30 at Golden Gate A2, Marriott
Hands-on Lab: Extending the Oracle Application Express Framework with Web 2.0

and also will have my very own session

S298613, 17:30 - 18:30 at Salon 14/15, Marriott
Web 2.0 Development with Oracle Application Express

Past that I will be ducking in and out of sessions and unconference events as well as working the APEX booth (by far my favorite part of Oracle World).

I'm pretty excited about this years Oracle World as APEX seems to be , is ;) , huge this year.

I'll be posting updates here on and on so feel free to follow along I'll do my best to keep everyone in loop.

If your at Oracle World please stop by the APEX booth and say hello, and if your not feel free to send me questions through the above service , or and I'll do my best to answer them or corner someone that can.

P.S. You know it's going to be a long week when Raj calls me up because he heard a rumor I'm already in SF ;) watch that guy he's trouble, but his session will be awesome!!!!

Vote! The best session on APEX Authentication you'll ever see!

Tue, 2008-06-24 11:37
I'm talking about Raj Mattamal's session up for votes on Raj is a good friend of mine and used to be on the APEX team until he decided to strike out on his own to use APEX to make money in the real world. He is very knowledge about all subjects APEX and this one in particular.

Both Tyler and Dimitri have mentioned voting for Raj's session but I just wanted to throw my endorsement out for this session as well.

If you've seen Raj present before you will know that it is an event in itself and when you combine that with the amount of useful information that comes out of the session it's a winner. Just take a look at my review of his session from last Oracle World.

I have to admit I'm doing this for a selfish reason, I missed his session at ODTUG , I didn't think it was a big deal since I've seen it before, until I was informed it was an entirely different session I was pretty disappointed on missing it, plus he might have some blackmail on me I don't know and don't want to find out ;).

Vote Early , Vote Often.

ODTUG 2008 (week in review)

Mon, 2008-06-23 13:39
Well alot of people have been giving day by day reports about this years ODTUG (where do they get the time). So I figured I'd just post a weekly roundup on the proceedings.


The ODTUG 2008 event itself was alot of fun and very well organized.
From Tom Kyte's opening keynote , which was a very cool and non technical , looking at why we always need to question how and why we do the things we do because the way you used to do it might not be the right way anymore and it's our job to always make sure things are done in the right way.

To the closing night get together, complete with band , fortune tellers and beads the event was just very interesting with the right amount fun to keep everybody looking forward to what comes next. And the infrastructure of the event was put together so that getting to the sessions or events you needed to took the minimal of effort or fuss. I recommend this event to anyone interested in any of the tools that Oracle provides.


All I can say is "WOW"!! I knew people are using and interested in APEX but the amount of interest and usage is amazing. Almost every APEX session had a full room and many were standing room only. Many times I would just end up standing outside the door looking in just so I wasn't taking up a seat , that's the type of guy I am ;). I would say everybody at the event was surprised at the interest and energy of the APEX crowd including the APEX crowd itself.

During the sessions I'm amazed at the things people have done with our product, both from the people that just use the stock out of the box features. To applications that don't look or act like APEX at all until you look at the URL in the browser.

Both of these scenarios are perfect examples of the awesome cross section of APEX developers and uses, from the business user just trying to solve a business problem in the quickest / cheapest / reliable way around, to the advanced developer using custom javascript and/or third party libraries to provide APEX based RIA. APEX runs the gamut. Trying to be everything to everyone is hard and from everything I saw at ODTUG I would say that APEX is doing a very good job of it.

Carl @ ODTUG

Well here I have and will to be my own worst critic , unless someone else wants to jump in just try and make it constructive. I'll start with where I felt things were bad, and then mention the good. I wasn't as happy with my presentation as I should have been, and it was 100% my own fault, I will do better next time.

The Bad.

Two things I learned for giving presentations.

1. Never rewrite your whole presentation the day of the presentation. This seems such an obvious statement but this was my second presentation ever and I've made this same mistake twice now, I will not do it again.

2. Make sure that your mic is adjusted correctly before you start. Trying to adjust a mic in a very hot room 5 minutes into you presentation , while already a bit nervous, wastes too much time, makes the presenter even more nervous and compounds the problem. Next time mic will be right on the collar and everything will be perfect.

The Good

Rewriting my presentation was the right thing to do, I just should have done it earlier. The presentation I had , which I will eventually show , was very flashy and whizbang and would have been useless to pretty much everybody, though would have made me look great ;).

What I wanted to do ,and did, was show people some nuts and bolts examples of how things can be done in APEX, not how to fix or build particular things but to give people ideas of what can be done. Using an interactive report as the example I went through the features that are in APEX that allowed us to build them.

It ended up being a short and sweet session (48 min) but the room was very hot and it was the end of the day so I think the timing was near perfect in that respect. And I had enough people come up to me afterwards to ask questions and/or ask for the application that I think I did fairly well.

Thanks to everybody that attended, it does make one feel good to know that so many people are interested.

One thing I will do next time is Dietmar's suggestion , and how he did his session, which is to use screencasts of the functionality, live demo's are great but a screencast will show the same thing without the issue of having to jump back and forth between applications.

After a bit of cleanup I'll be putting both the slides and the application out for everybody to take a look at , plus to ODTUG so they can host on their site as well.

New Orleans

This was my first time to New Orleans and I had a real nice time. There were some very good restaurants and watering holes and I only had time to sample a few of each. The French Quarter was very cool with some of it's old style architecture. Bourbon Street was a experience in itself , and considering how crowded it was on just a random week I couldn't imagine being there during Mardi Gras, it must be insane.

Being from Vegas we have a joke , "Sure it's 120 f (50 c) but it's a dry heat!" , if New Orleans taught me one thing , that is not a joke! Vegas might be 120 but New Orleans at 82 felt alot hotter. I will tell that joke again in the future, but it will be a cold shiver down my spine as I remember what a non-dry heat feels like ;).

Lakers @ ODTUG

Congratulation's Boston.

Game 6 just happened to be the same night as the APEX meetup , which made going to a place with a TV mandatory. I was the only Laker fan in attendance at the APEX meetup and I remember all the names and faces of you haters :D

Hand grenade

A horrible yet intriguing drink, the name should be enough to keep you away from it, you have been warned.


At events like this it's the people that make it worthwhile , both the people in attendance and the people giving the session's, and this years ODTUG is no exception. Some of the most interesting ideas / questions / comments come outside the sessions, though the sessions are the catalyst. I learned quite a few new things about APEX and how people use it , along as with some other Oracle technologies and can't wait to start putting this information into action.

If you want more detailed accounts try searching through APEX Blog Aggregator or the Oracle News Aggregator there are many postings with much more detail on specific sessions.

tapiGen in the wild (new opensource)

Thu, 2008-06-12 18:43
Dan McGhan has started a sourceforge project tapiGen which generates PL/SQL API's to access many table based database features.

You can read more about it here. Try it out and drop him a line on all his work, I'm sure he'd appreciate hearing from you.

If you like what he's done you should considering signing up to help out, or at least providing some feature requests , bug reports, and feedback and such.

Vote for APEX!

Thu, 2008-06-05 11:45
If you didn't know this year at Oracle World there have been a number of slots saved for community suggested and voted on topics. In the last couple days two APEX ones have been posted that look very interesting.

Rapid Development and Validation of ApEx Applications at an FDA Regulated Medical Device Company
(Re)Developing a logistic application in APEX in the real world.

You probably have to register to vote but lets get those APEX number up!

Hurray Patchset!

Thu, 2008-05-22 16:02
As Joel blogged here our patchset for Application Express 3.1 is out.

Hopefully this fixes any issues you ran into with APEX 3.1 so we can start on creating all brand new ones in future versions ;)

Pick a Session Any Session!

Fri, 2008-05-02 16:03
Well I haven't even made it through Kaleidoscope yet and Oracle World isn't 'just' right around the corner but things are starting to move along. Last year introduced the Unconference of which I'm a huge fan.

This year you get the chance to suggest and vote on for sessions to be included in at OOW.

You can read more about it here and here.

Lets see some APEX specific sessions anybody have any ideas?

APEX as SaaS and/or Cloud Computing question.

Wed, 2008-04-30 19:37
Well I was at Web2.0 Expo last week and saw many recurring themes with building and deploying applications. Most of which , being biased as I am , I think Application Express is well suited for.

Two of the most often heard were SaaS and Cloud Computing (the cloud!!!) and was wondering if there was any interest of an APEX offering in those contexts.

So being the type of person I am ,I want to hear straight from the people and put this post here on the OTN forums.

and this posting on

So have at it all comments / opinions welcome

Quick Don't Look! ohhhh too late

Wed, 2008-04-16 17:33
Begin PSA.

This is a quick heads up , if you haven't checked the blogs you link to lately and you link to anything on you might want to remove or change that link. isn't what you think it is anymore ;)

While the first click through is "probably" SFW any link or popup after that is probably NSWF.

Stupid link farms.

End PSA.

New Stuff (4) Hit you over the head with a CLOB!

Thu, 2008-04-10 17:24

One problem with APEX is it has issues with dealing with text values of greater than 32k, while there is a fairly simple workaround it does have quite a few pieces and there has to be an easier way to do it.

Well in APEX 3.1 there is now an integrated javascript call to take care of this. This example also shows some of our new namespaced javascript objects and functions.

I've created a working example here.

Setting the CLOB

function clob_set(){
var clob_ob = new apex.ajax.clob(
var rs = p.readyState
if(rs == 1||rs == 2||rs == 3){
}else if(rs == 4){
}else{return false;}


What's happening in the previous piece of javascript is I'm creating a apex.ajax.clob object. This object only takes one parameter when being initialized which is a function , or pointer to a function, to call when the XMLHTTP object's readyState changes. In that return function ,and for all built in APEX asynchronous AJAX calls, p is the XMLHTTP object.

Once the apex.ajax.clob object is created you just call set method giving it a string ._set(String Value);

It will automatically create a collection in your session CLOB_CONTENT and populate the CLOB001 column.

You can then use that in a page or application level process , usually by calling a doSubmit() and submitting the page.

The p.responseText on successful population of the CLOB will be SUCCESS.

Getting the CLOB

function clob_get(){
var clob_ob = new apex.ajax.clob(
var rs = p.readyState
if(rs == 1||rs == 2||rs == 3){
}else if(rs == 4){
}else{return false;}

Getting a CLOB is much the same as setting one. Create the apex.ajax.clob object setting the function to call when p.readyState and then call the ._get() method which doesn't take any parameters.

This solution only deals with one clob at a time and the clob is alway put into the CLOB_CONTENT collection, though dealing with multiple clobs is also much easier, more on that later ;). But it is much easier to work with than the old workaround.

I just watched 2001: A Space Odyssey in the last week in HD. If you've never seen or it's been awhile or never seen it in HD do yourself a favor and check it out it's an amazing movie, though it looks like they were a little off on the dates.

APEX Tip (the unwashed masses)

Tue, 2008-04-08 13:16
Sometimes you only want a region / item /tab /list etc to show up if your in development mode.

Sure you can add a authentication and authorization setup and take care of this but a quick and dirty way is set the condition to PL/SQL Function Body Returning a Boolean and use this code.

if apex_application.g_edit_cookie_session_id is not null then
return true;
return false;
end if;

For a production application please take the time to set up a proper authorization rule, but for development this is simple and works.

Considering this is a quick and dirty fix/tip I guess it's the unwashed one :)

New Stuff (2) x01 and friends

Tue, 2008-04-08 00:03
So I mentioned in my last post one of my favorite new features in Application Express 3.1 was being able to pass temporary values to OnDemand process, and I showed an example using x01.

Of course passing one value is useful but not as useful as passing 10-13 of them so lets meet the rest.

  • x01-x10
  • g_widget_mod
  • g_widget_action
  • g_widget_action_mod

As you can see there are 10 generic variables, x01-x10 plus the placeholders for some more specific functionality, sure you can use g_widget_mod , g_widget_action , g_widget_action_mod to pass just random values but they are there for a different use which I will go over on in another post.

You can see an example of these variables and code running here.

OnDemand process (GLOBAL_AJAX)

htp.p('wwv_flow.g_widget_mod : ' ||wwv_flow.g_widget_mod);
htp.p('wwv_flow.g_widget_action : ' ||wwv_flow.g_widget_action);
htp.p('wwv_flow.g_widget_action_mod : ' ||wwv_flow.g_widget_action_mod);
htp.p('wwv_flow.g_widget_num_return: ' ||wwv_flow.g_widget_num_return);
htp.p('wwv_flow.g_x01 : ' || wwv_flow.g_x01);
htp.p('wwv_flow.g_x02 : ' || wwv_flow.g_x02);
htp.p('wwv_flow.g_x03 : ' || wwv_flow.g_x03);
htp.p('wwv_flow.g_x04 : ' || wwv_flow.g_x04);
htp.p('wwv_flow.g_x05 : ' || wwv_flow.g_x05);
htp.p('wwv_flow.g_x06 : ' || wwv_flow.g_x06);
htp.p('wwv_flow.g_x07 : ' || wwv_flow.g_x07);
htp.p('wwv_flow.g_x08 : ' || wwv_flow.g_x08);
htp.p('wwv_flow.g_x09 : ' || wwv_flow.g_x09);
htp.p('wwv_flow.g_x10 : ' || wwv_flow.g_x10);

New Stuff (Q & A)

Tue, 2008-04-08 00:01
Most of my last couple posts have focused on new APEX 3.1 features. And there have been some good questions in the comments. So I figured I'd go through some of them in a post to make the answers a little easier to find.

Question 1What is the difference between add() and addParam()

They are used for passing values in slightly different ways and with different results.

.add() should only be used when dealing with a page or application items, anything else will cause an error, things you set with .add() will also automatically be set in the session state.

.addParam() should be used with what we term as parameters, the main difference being is they are not set in session and are only available for that particular request.

Can I set those global variable's values like common items in PL/SQL:
... or is there any more concise way to do it ?

No you can't set these into the session in PL/SQL. Remember those values are temporary and will not be saved past each specific request. If you need to save values from one of these that's the perfect reason to use a application level item, or collection.

Question 2
There's something I don't get.
Why do you need a temp item at all?

Mainly because it's much easier to build reusable/generic AJAX components that can be used in multiple applications. It's also going to be a big part of how the AJAX component for custom item and regions types will be implemented, more on that later. Don't get me wrong there are very good reasons sometimes to use an application or page item but many times it's not.

A quick rule of thumb is if you want to save a value into session use the application or page items, if you just passing values, use the generic ones.

Question 3There is also g_widget_name, g_widget_num_return and g_clob_01. Could you explain them also?

g_widget_num_return I just plain missed this, my bad. Many times when I was building something using these new handy parameters it just seemed like I was also adding a number to set the number of return values, instead of wasting one of my x01-x10 we added another one. I've update my code example and the blog posting to show this.

I skipped g_widget_name on purpose as it will be used in a slightly different way in the future. You can absolutly use it now to pass values and it it won't break anything, in fact I'm working on an example that does just that.

g_clob_01 That one at the moment is unused, and might be removed, so I'd stay away from it. If you need to hold on to a specific CLOB the best way is to create a collection and use the clob column in that.

Thanks, for the questions, Matjaz , Anonymous and Mark

Also Doug Gault yet again is the first to to figure out one of my slightly obscure cultural references , good job Doug!

Face front, true believer!

Sun, 2008-04-06 13:29
Well this is interesting Marvel and Oracle.

Gotta love the link direct link to APEX.
Makes the job kinda surreal.

extra points if you know the quote!

Themes and Theme Testing

Fri, 2008-04-04 19:15
I've created an application here that lists out all the themes contained in APEX along with a thumbnail. Each image links to a copy of our theme testing application running that particular theme, the theme testing application is just the regular sample application with extra pages to cover different template and item types.

When we build out themes for APEX we build very generically and the theme testing application is what we use to test against. Feel free to download the theme testing application and use to test your own themes or theme variations against.

Vikas used to host applications showcasing the themes but I figured we (APEX team) should take the time update them with every version change and Theme Testing Application change. Like I've stated before I have almost no moral issues with 'borrowing' a good idea , but I did contact Vikas and ask first ;).

If you think we are missing a use case in that application please drop a line in the comments, or better yet comp one out on and put a link in the comments. Remember we build very generically so the themes can handle as many data and usage variations as possible.

New Stuff (3) Start Stop Table item is for real!

Wed, 2008-03-26 13:47
This is a small feature but fixes something that has always bugged me.

In Application Express there is the Start Stop Table item. Which is very useful for form layout especially when building forms with large textarea's.

The problem was there was no way easy way access the Start Stop Table itself with javascript or CSS since it didn't have any discerning attributes. Well that has all changed in APEX 3.1 as the Start Stop Table gets some of the same attributes as a regular item does.

Start Stop Table's will get the id attribute set to the Item Name just like regular items , Start Stop Tables will also insert attributes from HTML Form Element Attributes property , agian just like a regular APEX item.

You can see a very simple usage example here

I can definitely see this being used for some more dynamic and just plain prettier forms and layouts, there are a few spots in the APEX builder slated to get some treatment from this.

As with my last few posts , and my next couple, this isn't the most WizBang feature but the impact if properly used can be huge.