Saturday, November 01, 2008

Carl Backstrom - Memorial Announcement

Just got an e-mail from Joel Kallman with details of the memorial service for Carl, as well as the fund set up in his name:

Please join the family in celebrating the life of Carl Backstrom

on Thursday, the sixth of November

two thousand and eight

at one o'clock in the afternoon

Orange Terrace Park

20010 Orange Terrace Park Parkway

Riverside, CA 92508

In lieu of flowers the family has set up a Memorial Fund
in behalf of Carl's daughter, Destany.

Donations to Carl's Memorial Fund can be made several ways:

Domestic wire transfers
Account Number 152460903
Citibank ABA Number 322271724
International wire transfers SWIFT Code: CITI US 33
Make payable to Susan Bailey (Carl's Mother)
Address: 3395 S. Jones Blvd #403
Las Vegas, NV 89146

“And in the end, it's not the years in your life that count. It's the life in your years.” - Abraham Lincoln

Tuesday, October 28, 2008

Carl Backstrom - a Tragic Loss

As you may have heard by now, Carl Backstrom, one of the APEX developers, was killed in a car accident late Sunday night outisde of Las Vegas, NV. 

I met Carl a few years ago when I was still the Product Manager for what was then called HTML DB.  Carl was one of the most enthuiastic people that I have ever met, filled with a seemingly unending supply of energy.

His great attitude was only surpassed by his technical expertise and willing to share it with others. Carl would go to great lengths to help complete strangers solve their APEX-related issues on the OTN Forums.

My thoughts are with his family, friends and co-workers at this most difficult of times.

Tuesday, October 21, 2008

ODTUG 2009 - Submit an APEX Abstract!

While it's still 2008, the planning for ODTUG Kaleidoscope 2009 has already begun!  And this year, APEX will be bigger than ever, with its own separate track!  So essentially, you can pick a seat in a room, and spend the entire conference in that seat, listening to nothing but APEX presentations all week!  (However, we do encourage you to return to your room at night for some sleep and a shower...)

ODTUG has formed an APEX review committee comprimised of John Scott, Dimitri Gielis, Patrick Wolf and myself to help sort through the abstracts and put together the most comprehensive track that we can. 

But we can't do it without YOU!  If you've been using APEX at all, and have a great story to tell or want to show off your skills, consider submitting an abstract.   If you're not sure what to present, or want others to help refine your ideas, check out the Kaleidoscope Community and see what others have to say.

If selected, you'll get a free pass to the conference, which is almost $1500!  That's $1500 less you or your organization will have to pay for you to attend ODTUG, and in this economic downturn, every dollar counts.

We hope to see you there!

Friday, October 10, 2008

Oracle SQL Developer Data Modeling Beta Released

Just saw that the much anticipated Oracle Data Modeling tool is available for download here:

Once you fill out a quick survey, you can download a complete build with JDK, or just the build for your specific OS.

I have the Mac OS version up and running, and will be putting it to work today on a number of different projects. I'm glad to see that an enterprise-level data modeling tool has finally come to Mac OS X. One more item on the list can be checked off!

Friday, September 26, 2008

Pro Oracle Application Express - Now Shipping

In case you missed it, the book that I contributed to - Pro Oracle Application Express - has finally shipped!

According to the Oracle Bookstore at OpenWorld, it was the hottest book there, at least according to this site:

So if you were one of the many who pre-ordered it, you should have it by now and I personally thank you for your patience!  I hope that you get out of it as much as we (especially John) have put into it!

Thursday, September 25, 2008

OOW 2008 - Summary

After being on the road for 8 days, I am finally almost home - at my parents in Connecticut for a weekend visit.

OOW was in a word, hectic.  I was afraid that it would actually be a bit worse, as it's hard to fit 43,000 people into a city and not have a suite of the obvious logistical issues.  Oracle did a fairly decent job, given the fixed issues of the sheer size of the conference.  Most of the presentations that I wanted to see were in Moscone West or the Marriott, which were just across from one another, which did make things easier.

The registration system was a little bit less than I expected.  I would have liked to have had an interface that would let me know which presentations were coming up next and/or have an easy search to show me not only that but which presentations were in a specific venue.  Often, I found myself walking out of a meeting and would have liked to sit in on something close, but had no way of knowing aside from walking the halls and hoping to stumble upon something interesting.  Pre-registering was a nice idea, but I did change my mind on a number of things.  It would also have been nice to not have gotten evaluation e-mails for presentations that I did not attend. 

As for the big announcement, ehh...  I guess that I'm tainted by the excitement that companies like Apple create with their announcements, as I can go out and buy (or at least afford) most of the products that are announced.  With the "Database Machine", I just can't see sleeping outside of Redwood Shores so that I could be the first one to have one.  It is an intersting announcement, as Oracle has done this in the past with limited to no success.  Perhaps the second time is a charm...

Saturday, September 20, 2008

OOW 2008

I've made it to San Francisco, safe and sound and only a couple minutes delayed.  Tomorrow will be a hectic day, as I am participating in the APEX Experts Panel then presenting/hosting the ODTUG APEX mini-conferece.  We have a great line-up this time, so even if you were at ODTUG this year, definitely stop by to hear what the US Army & Vista (the company, not the OS), WaMu, BAE Systems and Wachovia are doing with APEX.

I was also greeted with a nice, heavy box of books - not just any book, but the one that I helped John Scott author.  It was just weird to see the words that I wrote appear in an actual book!

I did, however, find the 1st typo:  in my Biography, they erronously listed ODTUG as the Oregon Developer Tools User Group.  Oops!  At least the Foreword is not the Forward...

In any case, please feel free to stop by to either session tomorrow.  You may even walk out with a new copy of the book...

Friday, August 29, 2008

APEX 3.1.2 Available

Just before the holiday weekend here in the states, it looks like APEX 3.1.2 is available as Metalink Patch #7313609.  More details can be found here.

Monday, August 25, 2008

OTN Forums Update - Take Two

Looks like Oracle updated the Forums software over the weekend. So far, this round has gone much better in the past.

I do have one major gripe with the new point system. Everyone is a Newbie now, which kinda sucks for those who have posted hundreds or thousands of times. Sure, quantity does not infer quality, but we all know that there are a core group of regulars on this Forum who are anything but Newbies.

My main concern is how your status is actually elevated. You only get points if someone marks their post as "answered". Looking at this weekend's posts, many of them are answered in the thread, but not actually "set" to answered. Thus, the person who answered the post correctly is no closer to a Guru than they were before. I imagine that this will come in time, as people get used to the new software and policies, or at least I hope that it does.

This feature does have some promise, as there are definitely some benefits - looking at the list of posts, you can immediately see which ones are already answered, thus saving time if you're either looking for an answer or looking for questions which to answer. I think that the objectiveness of it may end up helping overall, as someone who posts a lot of "chatter" would ultimately not advance in the standings, whereas someone who posts less frequent but more correct posts would. I guess only time will tell.

Thursday, August 14, 2008

Professor Anti-Java

I saw this article the other day:

It seems that even universities are falling victim to the Internet "buzz" factor, caving in what people deem as popular and cool versus what industry actually needs.  This shift has or will cause a major issue when these students walk out of college and cannot find the challenging jobs they were promised, as companies building systems seek developers skilled in anything but Java.  Unfortunately, Ada isn't sexy; Java is.

Sure, there's a demand for Java developers, and always will be for at least the forseeable future.  There's also a huge demand for what Dewar deems "trivial web applications" that can be met with a multiple number of tools.  These systems admittedly do have a different expectation when it comes to how reliable they must be as compared to an avionics system, for example.  But to the client, they are no less important.

Wednesday, August 13, 2008

PL/PDF 2.0

It appears that the folks over at PL/PDF have released version 2.0 of PL/PDF.  According to their documentation, this is the list of new features for 2.0:

 - SetDocDisplayMode: doc extended
- native PNG support (PrintImageCell, PutImage p_type)
- use without InterMedia
- PrintFlowingTextLimit: bad charter handling fixed
- PrintMultiLineCell: bad charter handling fixed
- compress: LZW without Java
- SetCompress: new parameter: p_method
- plpdf_const package: new entries
- PutImage: new parameter: p_type
- PrintImageCell: new parameter: p_type

Check out PL/PDF, as it is an excellent way to generate PDF files from the Oracle Database without requiring any middle tier hardware/software, as it's mostly PL/SQL.

Those were the days...

We did some fun things back when I was working with the Oracle salesforce, but we never pushed the envelope quite this far:,-A-Marketing-Solution.aspx

Technically, it could be branded as an Oracle solution, and likely was...

Monday, August 11, 2008

It's time to what?

I've never been a huge fan of the United Airlines "It's time to fly" campaign. It started out OK, as it was just after 9/11 that it was introduced, and was some sort of calling to the public that air travel is safe again. It then morphed into something just a bit too artsy for what I think an airline should be trying to convey, especially in today's day and age of nickel-and-diming the passengers for everything they've got.

I just received an e-mail from them with a link to their new commercials, and they are downright weird, if not freaking scary. From the freaky crab directing an oceanic orchestra which includes a chest-thumping Shamoo to the guy who chases his paper ticket (who gets paper tickets anymore, as that costs an extra $20!) through a city and then falls into a throne help up by butterfly-people and balloons to the woman who cuts out her heart in what can only be described as a cross between a Gorillaz video and Indiana Jones and the Temple of Doom, I just don't get what they are trying to sell or convey...

See for yourself:

Friday, August 08, 2008

I Am Rich

No, I didn't win the lottery (I don't even play, and you can't win if you don't play).

Evidently, some developer created an application for Apple's new AppStore called "I Am Rich".  He charged $999.99 for it - the maximum amount allowed.  All it does is show a glowing red ruby.  That's it.  The best part?  Eight people bought it before Apple took it down.

See the full article in the LA times here.

Thursday, August 07, 2008

One more obstacle removed for us Mac users

When I switched from PC to Mac, there were a few applications that I knew that I would leave behind.  The one that stung the most was the ability to host online meetings.  On Windows, there were a number of options available - GotoMeeting, WebEx, Oracle iMeeting.  You could attend some of these meetings with Mac OS X, but you could not host a meeting.  Not fun.

Well, I'm happy to report that this is no longer the case, as it seems that both GotoMeeting and WebEx are offering full Mac OS X clients now, eliminating the need to spin up a Windows VM every time I want to conduct an on-line meeting.

This is great news, and so far, the GotoMeeting Mac client has worked almost flawlessly!  The one downside is that you can only share your desktop; not a specific application or region.  WebEx does allow specific application and region sharing, and I hope that this feature is on the radar for GotoMeeting in the near future.

Monday, July 28, 2008

APEXposed 2008 - Coming to Chicago this October

In case you haven't heard the news, ODTUG & Sumner Technologies, LLC are proud to announce APEXposed 2008

What's just as exciting as the conference itself is that we're teaming up with Steven Feuerstein's OPP PL/SQL conference to offer two conferences in one!  Thus, one registration fee gets you into both conferences, so you can mix and match sessions as you please.  So not only will you get to hear from some of the best minds in the APEX community, but you'll also be able to see some of the best minds in the PL/SQL community, such as Stephen himself, Brynn Llewellyn and Dr. Paul Dorsey.

In addition to the technical sessions, Oracle will also be demonstrating and discussing new features in SQL Developer including the new Data Modeling component that was mentioned at ODTUG.  We'll also be hosting a special event on Wednesday evening - details to be posted soon.

You can register for both conferences here:

Twenty-Seven APEX presentations @ OOW 2008

The numbers are in, and it looks like that there will be 27 APEX-related sessions at OpenWorld this year!

Sure, you could use the requisite Schedule Builder to search for all of them...  But a way cooler (and easier) way would be to use the APEX Interactive Reports-based version, which can be found here:

According to David Peake, he will keep the "Seats Remaining" portion up to date.

Oracle Marketing Oracle APEX

I've just seen the first Oracle APEX advertisement from Oracle in the wild!  Point your browsers at and check out the banner ad (you may have to reload a couple of times to catch it).  For those too lazy to check, here's a screen shot:

Clicking on it will tell a quick and compelling story that, well - just click on it and see for yourself! :)

Wednesday, July 16, 2008

Oracle July 2008 Critical Patch Update

Oracle announced the details for its July 2008 Critical Patch Update today, and the good news is that there are no issues with APEX!

Of course that doesn't mean to ignore it entirely - it's always a good practice to review these and then apply them as deemed necessary.

New APEX Hosting Provider

It seems as if there is another entry into the APEX Hosting Provider space.

MaxApex is offering APEX hosting with five pre-configured plans:
  • Free
  • Starter
  • Standard
  • Professional
  • Enterprise
Details of each can be found on their site.

It's good to see more companies getting into this space, as there is definitely more APEX applications being developed these days, and a lot of them will need a place to call home.

Monday, June 16, 2008

The Seasoning of APEX @ ODTUG

Well, my busiest day at ODTUG is already behind me! We had somewhere around 150 participants at the APEX Symposium yesterday, which was amazing as it was both a Sunday and Father's Day.

The day started off with my keynote, which I successfully navigated through 431 slides in just 30 minutes. It was done in a different style - very rapid, each slide getting only a few seconds of display time. From what I've heard, people liked it, as it kept them engaged, something not easy to do on a Sunday morning after a night on Bourbon Street!

The day was comprised of a number of APEX customers telling their stories about how they got APEX adopted into their environments. This was a departure from the normal "here's how to do something cool" approach, but it was a departure that was both well needed and received. It was very interesting to see the wide range of projects being done with APEX. One of the few common threads between all of the presenters is that each project was vastly different from the next.

Today is my "down" day; I don't have anything aside from a few client calls and ODTUG meetings. I'm looking forward to seeing a few presentations and meeting up with those that I have not had a chance to see.

Monday, June 09, 2008

Know Thy Customer

We all get telemarketer calls, even if you think you've signed up for the National Do Not Call Registry. It's just a fact of life these days. Thus, you can approach them a number of different ways:

1) Simply hang up
2) Demand to be removed from the list then hang up
3) Make them hang up

I prefer #3, but that's not what this post is about. (ask me about my SkyMiles call, which is my personal favorite)

I got a call from a certain hotel chain today that I stayed at from time to time. The call started something like this: "Mr. Spendoli (telltale sign of a telemarketer when the last "ni" is left off). We're calling our preferred customers to let them in on a great deal we're having at our properties in Las Vegas and Orlando."

Before I go on, I need to note that this same hotel chain scuttled my rewards point account a couple months back because I did not stay there over the past 12 months or so. All of my accrued points went with it. No grace period, no offer to extend. Just plain old gone.

"Well," I replied, "do you completely delete the rewards accounts of all of your preferred members?" was my reply.

"Oh, I'm sorry to hear that happened. Let me ask you a question about your income: Do you make less than $50,000, between $50,000 and $75,000, etc." replied the agent.

I then took the next few minutes trying to explain to her that I was really not up for spending money with their company in light of how I was treated. She persisted, upping the ante to include New York and Hawaii. I held my ground and eventually got dumped off to a manager who did little more than give me their toll free number and offer his apologies. At least he stopped trying to sell me stuff.

Now, I don't really care about this incident or my rewards points, and the call gave me something to do while having lunch, but my point here is that companies should at least make a college try to weed out potentially unhappy people before calling them and trying to sell them more stuff. A simple query of their systems could have shown that I was a somewhat erratic customer over the past 10 years who simply had just let his account slip into the void. This could have been parlayed into an opportunity of sorts - perhaps an offer to reinstate my account and its previous balance for at least listening to their pitch or agreeing to one of their offers. The call would have gone in the entirely opposite direction.

After all, they were calling me on their terms; they could have at least chose the correct terms!

Friday, May 30, 2008

New APEX Hosting Provider... Sort of...

Just read on the Revion blog that a new subsidiary called HTMLDBHost is offering APEX hosting at $24.95 for the first six months; the price goes up to the regular rate of $49.95 thereafter.

It seems that you get the same levels of service, band width, disk space as the standard plan offered at at a discounted rate.

Friday, May 23, 2008

APEX 3.1.1 Patchset Released

In case you missed it, the APEX 3.1.1 patchset has been released as both a patch via Metalink (patch #7032837) and a complete download via OTN.

For a complete list of what's fixed, have a look at the patch's installation notes.

Tuesday, May 20, 2008

How to Spot a Phishing Site

I just got an e-mail from Bank of America:

During our regularly scheduled account maintenance and verification procedures, we have detected a slight error in your billing information. This might be due to either of the following reasons:

1. A recent change in your personal information (i.e.change of address).
2. Submiting invalid information during the initial sign up process.
3. The services look that was changed recently:

[Banking Log-In]

Security Advisory,
Bank Of America .


failure to update your account at least 24hrs of notice might lead to account
being locked and access will be restricted.

I'll ignore the fact that I do not have a Bank of America account for the sake of this post, as that's just too easy.

So let's review the signs thus far:

Sign #1: "Either" of the following reasons, followed by three, not two, reasons.
Sign #2: Poor grammar: The services look that was changed recently
Sign #3: Poor punctuation: failure to update your account at least 24hrs of notice might lead to account being locked and access will be restricted.
Sign #4: The fact that the URL in the e-mail resolved to this site in Poland, which is hardly where I believe the Bank of America is located:

So I clicked on it (having a Mac gives you little fear when it comes to checking out phishing sites) and got a relatively legit looking Bank of America login page. Not running in SSL.

Sign #5: No SSL for username & password.

I "signed on" with a bogus name and password, and lo and behind, it accepted it!

Sign #6: A completely made up username and password somehow work.

Now that I'm authenticated, the URL has changed to include both the username and password which I provided:

Sign #7: Your password shows up - in clear text - in the URL

Now I am presented with a form that is asking for all kinds of personal information - checking account number, SSN, online ID (which I just provided), ATM card number and PIN, and bank routing number.

Sign #8: Your bank asks YOU for its routing number.

At this point, if I just submit the page without providing any information, it goes on to the next step.

Sign #9: Not a lick of validation is included anywhere in the site.

Finally - the inspiration for this post - is one of the last pieces of information that the site asked me for:

Third from the bottom, I am asked to provide my Father's Maiden Name - a piece of information so secure, that not even he knows what it is!

Thursday, May 15, 2008

APEX Performance Tuning Webinar

Doug Gault from Hotsos will be presenting a FREE webinar on May 28th: Performance Tuning APEX Applications.

From the Hotsos site:

Application Express (ApEx) is a highly flexible and highly scalable Rapid Application Development environment for web applications. But what do you do when your application's success starts to become its downfall? This free, one-hour presentation will cover strategies and tactical advice for monitoring and addressing performance issues, and presents some of the best practices for making ApEx Performance Problems easy to diagnose. This webinar is presented by Doug Gault, head of Hotsos Product Development.

No one that I know of does Oracle Performance Tuning like the folks at Hotsos do, so I'm sure that this presentation will be packed with tips and best practices.

Friday, May 09, 2008

Firefox Smart Keywords

I can across this post today (Disclaimer: link is very much NSFW only if you try to repeat the examples used for Urban Dictionary; also, other entries in this blog may be NSFW):

To summarize, Firefox allows you to not only bookmark a page, but turn that page into a function of sort, and allow you cal call that page with some sort of parameter.

Thus, if you add a Smart Keyword for Google and call it "g", you can simply type "g oracle apex" into the location bar, and the resulting page would be the same as if you went to, entered "oracle apex", and then clicked enter.

So naturally, my first instinct to was to test this with an APEX application, and I was quite pleased to see it work flawlessly! I added two Smart Keywords - "a" and "c", which search the Accounts and Contacts pages of my APEX-based CRM application. No longer do I need to log in and navigate to those respective pages; I can simply key in Ctrl+L and then type "a sumner" or "c spendolini" to search for an account or contact.

Thursday, May 08, 2008

Decoding Database Features

Having just answered a question in the OTN forums on this, I figured I'd share the link that I often use to decode which feature maps to which version of the Oracle Database:

Since Oracle will change what feature is included with which edition from time to time, it's handy to have this link bookmared somewhere.

Also, what's most unique about this link is that it can only be (easily) found from, not OTN.

Wednesday, May 07, 2008

Debugging APEX with SQL Developer

I have been using SQL Developer since its early days, namely because it runs natively on the Mac.  Despite this fact, it has proven to be a formidable IDE to work with, allowing me to do 95% of what I need to quickly and easily, all without having to spark up a Windows VM.

In this month's Oracle Magazine, David Peake, the APEX Product Manager, writes about how to use SQL Developer to assist in debugging APEX applications.  By instrumenting your processes in APEX with just a couple lines of code, you can trap and then debug your PL/SQL from APEX in SQL Developer's debugger.

While you'll need DBA privileges to get this to work, it's something that's not intended for production environments, so I don't envision that to be much of an issue in most cases.

Tuesday, April 29, 2008

APEX 3.1 Public Training in July 2008 - Now Open for Registration

Based on the success of our March/April public training in Ashburn, VA, I'm happy to announce that we're going to do it again this July 21st through 25th. Like last time, there will be two sessions - a 3-day Intro to APEX 3.1 class and a 2-day Intermediate APEX 3.1 class.

Both sessions filled up completely last time, so don't wait until the last minute!

More details about each class and a registration page can be found on the Sumner Technologies, LLC web site.

Saturday, April 26, 2008

Cloning your Corporate UI with HTML DB - Part VI (Re-Post)

The following is a re-post of the "Cloning your Corporate UI with HTML DB" series that I blogged about back in 2005 on the now-defunct Orablogs site. Most of the content and advise is still the same today, and has been reposted here exactly as it was on the old site.

July 12, 2005

What's the best way to ensure that you have more work to do? Use a statement like "That about wraps up this series" in your "final" posting in a series!

As Earl Lewis pointed out, things are not 100% correct when using MSIE. Now, there's a very simple cut-and-dry solution to this problem: Don't use MSIE. However, for those who have not yet made the switch to Firefox yet (which, according to traffic on HTML DB Studio is still about 80% of you), you will also see this error. Thus, it is critical that you test your site in both - if not more - browsers. This is something which I simply forgot to do.

It's as simple as this: the same HTML can and often will look different in MSIE & FireFox (and other browsers). It is time very well spent running through each and every page in each browser which you expect your users to use, in order to ensure that all pages render correctly. Nothing infuriates me more than a site which only renders correctly on MSIE!

The core problem here is some abandoned JavaScript calls & references, left over from when I gave up on the Dynamic OTN Menus. I took a few minutes to remove all of them, and MSIE is once again, quite happy. Ironically, I had to the use the JavaScript debugger in FireFox to determine which reference was still hiding in the source, as the messages generated by MSIE are very vague. I encourage you to check out the FireFox JavaScript debugger - it's quite nice for a browser add-in.

Looking around some more, I noticed that the titles on the Application Detail pages are not rendering correctly in MSIE either:

Let's take a look at the Report Template to see what HTML is being generated. Here is the relevant snippet:

<table width="100%" class="bodycopy">
<td colspan="3" class="OTNHeadline">#NAME#</td>

Looks like the table has a class called bodycopy associated with it, and the title has a class called OTNHeadline associated with it. The class bodycopy will be applied to all items in the table, as it is defined at the table level. When the #NAME# token is rendered, it will first have the bodycopy class associated with it, but it will override any directive set by bodycopy with those set in OTNHeadline. Those attributes not mentioned in OTNHeadline will retain their values as per their definition in bodycopy.

Let's take a look at bodycopy first, as that is what gets applied to the text first:

.bodycopy { color: #000000; font-size: 12px; font-family: Arial, Helvetica, sans-serif; line-height: 14px; text-decoration: none; visited: #000000 }

Looks like quite a few things are set here: color, font size, font, link style & color, and something called line-height. According to, line-height "Specifies the height of a line of text." So if it is set to 14px as per the above class, and then apply the OTNHeadline class:

.OTNHeadline { font-family: Arial Narrow, Arial; font-weight: bold; font-size: 30px; }

Since there is no definition for line-height, the value of 14px set by bodycopy is retained. This causes something to get chopped off at the top & bottom, as we're trying to render a 30px font in a 14px space. Thus, all I have to do to fix this is change the class definition of OTNHeadline to this:

.OTNHeadline { font-family: Arial Narrow, Arial; font-weight: bold; font-size: 30px; line-height: 30px; }

Reload in MSIE, and things look much better now:

This is just one of many examples of how different browsers render the same HTML. I can assure you that this is the norm, not an exception.

Once again (knocking on wood), that about wraps up this series...

Thursday, April 24, 2008

Cloning your Corporate UI with HTML DB - Part V (Re-Post)

The following is a re-post of the "Cloning your Corporate UI with HTML DB" series that I blogged about back in 2005 on the now-defunct Orablogs site. Most of the content and advise is still the same today, and has been reposted here exactly as it was on the old site.

July 8, 2005
Finally! I just deployed the new look for both Oracle HTML DB Studio & Oracle HTML DB References. (I'll get to Best Practices PL/SQL a bit later today - have to do some customer calls first)

I basically gave up on the DHTML menus - it was taking too much time and overall, I think it just didn't add enough value for me to keep pulling my hair out over. The base OTN Menus are there - clicking on them brings you to the appropriate page in OTN - where the menus work just fine...

I did get a little over ambitious, and decided to give the splash page of both Studio & References a make-over. Check them out:

Both of them now "look & feel" like the rest of OTN &, making it a more seamless experience for users. And it wasn't all that difficult to pull off, either. Most of the graphics were lifted from either our corporate artwork repository or, as was most of the underlying HTML. All you have to do is peek at the HTML source, copy it into your static (or dynamic) region, and then the page, making adjustments when and where they are needed. It was more of an iterative process, not a difficult one.

The only thing that may not seem obvious is how I got gray backgrounds on all of the corporate logos. This was done using the Color Replacer tool in Paint Shop Pro. The Color Replacer tool does what you would think - replaces color A with color B. It was as simple as setting color A to white (#FFFFFF) and color B to a light gray (#EEEEEE) and painting in a new background color. It helps when you have the right tool for the job!

That about wraps up this series. I hope that people learned something about what it takes to create a new Theme in HTML DB based on an existing corporate standard. I like to explain it as part art, part science. You not only need to be skilled in HTML, DHTML, CSS, etc., but you need an eye for good design. It helps to be a perfectionist and pay attention to details, but don't let that consume you, as most people won't notice (or even if they do, won't care about) the slight imperfections. Have a good weekend!

Wednesday, April 23, 2008

Cloning your Corporate UI with HTML DB - Part IV (Re-Post)

The following is a re-post of the "Cloning your Corporate UI with HTML DB" series that I blogged about back in 2005 on the now-defunct Orablogs site. Most of the content and advise is still the same today, and has been reposted here exactly as it was on the old site.

June 14, 2005
In the last installment, the converted site looked pretty good, but the tabs were not quite working. The issue here was overlapping FORMs. If you look at the HTML source of the OTN Home Page, there's an HTML Form which processes the "Search" function. This form was overlapping with HTML DB's Form; thus generating an error when a tab was clicked - which essentially does an HTML POST via a JavaScript function.

In HTML DB Templates, two commonly used tokens are #FORM_OPEN# and #FORM_CLOSE#. These tokens are used where you want to open & close the "functioning" portion of an HTML DB Page. When an HTML DB page is rendered, the #FORM_OPEN# & #FORM_CLOSE# tags are substituted with some dynamic values, as outlined below:

<form action = "wwv_flow.accept" method = "post" name = "wwv_flow" id = "wwvFlowForm">
<input type = "hidden" name = "p_flow_id" value = "20530" id = "pFlowId" />
<input type = "hidden" name = "p_flow_step_id" value = "2" id = "pFlowStepId" />
<input type = "hidden" name = "p_instance" value = "2734685902684999721" id = "pInstance" />
<input type = "hidden" name = "p_page_submission_id" value = "21133974" id = "pPageSubmissionId" />
<input type = "hidden" name = "p_request" value = "" id = "pRequest" /> </ table>

<input type = "hidden" name = "p_md5_checksum" value = "" />

The real beauty of these two tags is that you don't need to know what any of the above HTML really does. It's simply enough to include them in your HTML DB templates, and they will just work. That is, of course, if you don't have overlapping FORM tags...

Back to our page in question. By moving the #FORM_OPEN# token to after the HTML which closes the FORM for the Search box, the page will now work. This presents a bit of a design challenge now. In the current version of HTML DB Studio, there is a Search field which only searches content in HTML DB Studio, not the rest of OTN. I'll have to think about whether I want to have a) two search boxes b) an OTN Only search box c) an HTML DB Studio Only search box or d) no search boxes. Technically, any of these four options are possible. It's just a matter of design choice.

That's all for now - sorry that this has been the shortest entry, but I've been taking a class all week, and evenings have been spent catching up on e-mails, etc. Add to the mix that my wife sprained her ankle today and is not supposed to walk on it, and I am all of a sudden quite busy tonight!

Tuesday, April 22, 2008

Cloning your Corporate UI with HTML DB - Part III (Re-Post)

The following is a re-post of the "Cloning your Corporate UI with HTML DB" series that I blogged about back in 2005 on the now-defunct Orablogs site. Most of the content and advise is still the same today, and has been reposted here exactly as it was on the old site.

June 10, 2005
Before I jump into the Page Header & Footer, I thought that I'd take a minute to detail how moved all of the images from to Using Firefox, I'm able to view a list of all images on a page by right-clicking the page and selecting View Page Info. Under the Media tab is a list of all images referenced on this page. I decided to use as a starting point. All in all, there were about 15 images which I saved, and then moved to

I FTP'ed all of these images to a new directory on, in order to keep them all organized in a single place. Next, I have to change the image paths & BASE_HREF in the Page Template. Currently, the BASE_HREF is still set to . Changing it to dramatically improved the way that most of the page rendered. However, as you can see below, the tabs & DHTML menus are based on a not-yet-copied-over CSS:

So as you may have guessed, it's time to copy over the CSS files from OTN. Since I have some custom CSS entries, I decided to create a 3rd CSS file - ocom.css - which I will use for my own CSS entries. This way, I can be assured that the OTN-supplied CSS files are always in-tact.

BASE_HREF issues
I just noticed something bad: all of the HTML DB-generated links (menus, lists, items, etc.) are picking up the BASE_HREF syntax, and appending that to the beginning of the URL, thus rendering them useless! I guess removing the BASE_HREF line altogether is my best bet. Doing so has fixed the link issues, but I'll have to keep an eye out to see if anything else is still broken.

Broken Images
Next, I took a pass at fixing all of the broken image tags on the page. Fortunately, this task is made easier with the Web Developer extension. Selecting "Find Broken Images" from the Images menu yielded a nice list of what I need to fix. Thus, a simple Search & Replace in Dreamweaver fixed all of my Broken Image woes.

Not only does it look good, it actually works:

Header & Footer
Let's start with the Footer, since it's the easier of the two. It looks like the footer did not change at all from one OTN look to the next. Thus, I don't have to do a thing! Woo hoo!!!

The header is a different story. Let's start with the tabs. Looking at the HTML source of the Page Template in Dreamweaver, it's pretty easy to identify the HTML for the tabs:

<div id="bannerMid"><a href="/index.html" class="headlink">ORACLE.COM</a> <span class="loclink">TECHNOLOGY NETWORK</span> <a href="/partners/index.html" class="headlink">PARTNERS</a> <a href="" class="headlink">STORE</a> <a href="" class="headlink">SUPPORT</a></div>

Looks like the OTN folks did a nice job with these, as it's as simple as it can get. For a non-current tab, the HTML is nothing more than an "A HREF" tag with a class. A current or selected tab has a SPAN tag surrounding it. In an HTML DB Page Template, we can use the token #TAB_CELLS# to represent where we want the tabs to be dynamically rendered. A simple edit to the above HTML is all that is needed, so that it now look like this:

<div id="bannerMid">#TAB_CELLS#</div>

When HTML DB sees the #TAB_CELLS# token, it will refer to the Standard Tab Attributes portion of the Page Template. HTML DB will then render a tab - be it current or non-current - for each tab which is defined in the Application. All we have left to do is provide some HTML for Current and Non-Current tabs. Based on a combination of the static HTML used for tabs on OTN and some more HTML DB tokens, we can easily construct the HTML for both types of tabs.

Current Tab HTML: <a href="#TAB_LINK#" class="loclink">#TAB_LABEL#</a>

Non-Current Tab HTML: <a href="#TAB_LINK#" class="headlink">#TAB_LABEL#</a>

I modified the HTML slightly for the current tab to include a link. OTN doesn't use one, but when a user is in HTML DB Studio and wants to jump to the "Technology Center" home page, I'd like that to work. Moving the CLASS inside the A HREF tag ensures that the text of the tab will be rendered the same way that the OTN ones do - in red.

As a last step, we have to change some of the Tab names in the HTML DB Studio application, as those have changed. We'll also have to make the TECHNOLOGY NETWORK current for all of the pages in HTML DB Studio. With the previous look, both Current and Non-Current tabs looked identical, so there was no reason to make them look different.

All looks good, but the tabs - when clicked - are throwing up 404 Errors.

50 points if you can tell me why! (I'll address it in my next entry...)

Sunday, April 20, 2008

Cloning your Corporate UI with HTML DB - Part II (Re-Post)

The following is a re-post of the "Cloning your Corporate UI with HTML DB" series that I blogged about back in 2005 on the now-defunct Orablogs site. Most of the content and advise is still the same today, and has been reposted here exactly as it was on the old site.

June 8, 2005
Things look really good. The page rendered almost perfectly, it all mostly lines up, and there are only a couple of broken images. We're almost done, right?


There is still a lot of work to be done. Essentially, as it stands now, we have created a static Page Template that doesn't play well with the rest of HTML DB. Also, there are no navigational aids for HTML DB Studio left - they have been replaced by content from OTN. Which leads us to our next step - removing more OTN content.

Removing OTN Content
First of all, I don't need the content in the 3rd column at all on my pages (Resources For, Featured Downloads, Discussion Forums). However, I do want to retain that column and define an HTML DB Region Position there, so that I can put HTML DB dynamic content there.

To start , I copy the Body of my Page Template back into Dreamweaver, so that I can edit it in the WYSIWYG editor. I then remove all of the tables that make up the 3rd column content by simply selecting and deleting them. Finally, in the empty column that remains, I enter #REGION_POSITION_03#. This will allow me to position content in the 3rd column - such as the "Most Popular" and "Recently Added" boxes that I use on the home page of HTML DB Studio. With a little formatting and tweaking, I can right-align this content as well.

Next, I want to add a Region Position for the Application Menu. Just above the page where #BOX_BODY# appears is a table which has some static content in it. I can easily delete this content and replace it with my region position - #REGION_POSITION_02# - which will be the new home for my Menu.

Finally, I want to remove the content in the 1st column of the page (Product Centers, Technology Centers & Community). In all three sites, I use this region for a List of navigable sections. Just as I did before with the other two columns, I remove all of the content, all the while being careful not to alter the underlying table structure. In place of the content, I simply enter #REGION_POSITION_01#, which is my Region Position token.

Once all of the Region Positions are defined, we now have the page layout below:

Note that the images associated with the Menu and List Itema are broken. This is because the _base_href is set to, and our image lives on Since we are using a relative reference in the Menu Template, the image path resolves to - which is the wrong server.

If we look at the HTML from our template, we notice this line:

<base href="">

This line is causing all relative image, CSS & JavaScript references to use as the starting point, which in turn, is causing some images to not render. Removing this line will fix the HTML DB images, but will break the portion of the site which IS using as a source for its images. This presents us with a Catch-22: Removing it breaks stuff, and leaving it in breaks stuff.

Since I do not have any access to make changes to, and I do have access to make changes to, the only solution is to move all of the images, CSS files, and JavaScript libraries from to a place which I can reference on Only after transferring all of these files and updating the template will the site finally have no broken images.

Fixing the CSS References
Note that the buttons "Submit an Application" and "Application Submission Guide" are not rendering properly either. This is due to the fact the we have not yet referenced the previously used Cascading Style Sheet(s) in this new Page Template. Since all we did was copy HTML from OTN, there was no reference of any CSS used in our original HTML DB Page Templates.

In order to correct this, let's load the production version of HTML DB Studio, view the source, and search for the term "css". (Hint: Using Firefox, you can simply hit the "/" key, start typing, the it will highlight any matches. Hitting F3 will tab to the next match. Pretty cool!) My search yielded three hits:

  • <link rel="stylesheet" href="/i/orcl/otn_dyn.css" type="text/css">
  • <link rel="stylesheet" href="/i/orcl/otn_new.css" type="text/css">
  • <link rel="stylesheet" href="/i/css/core.css" type="text/css">

Upon copying & pasting these three lines into the new template, the buttons (and some other minor things) were back to normal. We're getting there - we now have a solid foundation for most of our Page Body in our Template.

Next, we'll tackle the Page Header & Footer, including how to make the Tabs work.

Saturday, April 19, 2008

Cloning your Corporate UI with HTML DB - Part I (Re-Post)

The following is a re-post of the "Cloning your Corporate UI with HTML DB" series that I blogged about back in 2005 on the now-defunct Orablogs site. Most of the content and advise is still the same today, and has been reposted here exactly as it was on the old site. Enjoy!

June 8, 2005

I've often been asked how to create custom Themes & Templates with Oracle HTML DB. The truth is that it’s one half Art, and one half Science. (Note: Percentages may vary based on what you consider “Art” and “Science”). And since the desired look and feel varies from site to site, there’s no easy way to document these steps.

Thus, I am going to attempt to “blog” my way through it, using a real-world example.

As you may know, the look & feel of was recently updated as part of the re-launch of, OTN, etc. I believe that this is now the 4th UI in 2 years for

Three sites that I manage - Oracle HTML DB Studio, Oracle HTML DB References, and Best Practices PL/SQL – are running in the previous “livery”, and need to be updated. I figured that this is as good an example as any to illustrate how to change the look & feel of an HTML DB application without changing the underlying functionality.

Like any good craftsman, you need good tools in order to do a good job. (Hint: never buy the cheapest ANYTHING at Home Depot – it will break, and then you will end up re-buying the more expensive one anyways) Here’s what I plan on using:
  • Mozilla Firefox w/these extensions:
    • Web Developer
    • ColorZilla
    • ieview
  • DreamWeaver MX
  • PaintShop Pro
Getting Started
Since it gets the most traffic of the three, I am going to use HTML DB Studio as the baseline application. Truth be told – it really doesn’t matter which one I use, as once I have my theme completed, I can apply it to all three.

As a first step, I exported HTML DB Studio and then re-imported it as a new application. This way, the production site won’t reflect any of my changes until I am completely done. Feel free to pop in on the Work in Progress.

The next step is to determine which Templates in my Theme will need to be re-worked. Overall, I have 33 templates in my FY06 Theme. If you navigate to this page:

Workspace HTML DB STUDIO > Builder - Application 20530 > Shared Components > Themes > Templates > Template Utilization

You can see which of your templates are actually being used by a specific application. In my Theme, there are 13 templates which are not used. Thus, I need to initially only be concerned with the 20 which are referenced, as the “unused” 13 may be referenced in another application. Either way, this reduces the amount of work required.

Now that I have a short list, I’m going to try to make it even shorter. In some cases – such as my button template – I will not need to make any changes, as the template will look OK in both the new and old UI’s. I can further reduce my list by one or two more templates here. Sometimes you’ll be able to do better…

Where to Start
I’ve found that the best place to start is with the Page Template. Replicating the structure of your desired UI makes assembling all of the components that much easier. Unfortunately, this is typically the most time-consuming task, as Page Templates can be rather large. Depending on how much the target page differs from your current page, you’ll need to decide whether to try to retrofit it or start from scratch. Since it looks like the new look is simpler than the previous one, I am going to start from scratch.

An Oracle HTML DB Page Template is nothing more than HTML sprinkled with HTML DB-specific tokens, used to substitute sub-templates and/or values. Thus, you could go to, save the HTML Source, paste it into an HTML DB Page Template, and the results should be similar, save the relative image & CSS references which would break. That’s exactly what I’m going to do!


Your browser sent a request that this server could not understand. mod_plsql: /pls/otn/wwv_flow.accept HTTP-400 Value param too long. Length is 43467. Upper limit is 32512

Looks like I need to slim down the code, as I am around 10k over the 32k limit. I’ll take that same source and paste it into DreamWeaver, and then remove any content. Remember, we’re just trying to build the structure of the page – we’ll use HTML DB Regions to populate the page with content.

Cutting out all of the content from the center region of the OTN Home page got us well under the 32k limit. I also took a couple of minutes and ensured that the token #BOX_BODY# was placed in the newly-empty center region. #BOX_BODY# will be substituted with the HTML DB Regions for a specific page – reports, forms, HTML, PL/SQL, etc.

Next, let’s set the Theme to use our new Page Template as the Default Page Template. From the Themes page, click on the edit icon next to your Theme, and then select your Page Template as the default Page Template and Apply Changes. If pages in your application are set to use the Default Page Theme, then you should instantly see the new Theme in action – as ugly as it may be.

I’ll have to say that this was the BEST first draft that I have seen in a while:

However, we’re a long way from being done, as things like Authentication, Tabs, Region Templates, CSSs, and Lists still need to be translated over.

Continue to Part II

Friday, April 18, 2008

Customizing Validation Error Messages

APEX validations allow a server-side validation to occur for a number of different conditions - item not null, item is numeric/alphanumeric, regular expressions, etc. When a validation fails, you have four options to display the corresponding error message:
  1. Inline with Field
  2. Notification Message
  3. Both inline with field & Notification Message
  4. Separate Error Page
With a simple template modification, you can create a fifth option, which is a variation of option #3 above. It will still display the message in the notification, but only highlight the label of the item in question.

This allows for a couple of things: first, if you have a form with a number of items and a fixed width template, error messages inline with items will wreak havoc on the layout, pushing items off to the right and misalign your entire page. By only highlighting the label of the item in question, the user is aware of where the issue is, and can simply look in the notification region to understand what needs to be done to correct the issue.

Here's a screenshot of a page with three items that have NOT NULL validations associated with them. The label template denotes that each of these fields are NOT NULL with the "*" prefix.

And when the page is submitted without any values, here is the result:

Notice that no error messages are displayed inline; only the labels are highlighted in a pink color, denoting that there is an issue with each one. Reading the notification will explain what each of the issues are and potentially offer advise on how to correct them.

This trick is achieved with a simple modification to the Required Label Template that you are using on your page. The changes are quite simple; all that needs to be modified is the Error Display section, as illustrated below:

In this example, I simply added a style tag (style="background-color:#ffa0a7;")to the On Error Before Label attribute. This is what changes the background color to pink for a specific label. You can add any additional attributes here to do whatever you would like to.

Just as important as what was added is what was removed. The token for the actual error message - #ERROR_MESSAGE# - was removed from the On Error After Label attribute. Thus, when APEX renders an item with this Error Template, the only thing that changes is the background color; the Error Message is not added.

Thursday, April 17, 2008


It seems as if someone didn't pay the bills, and - where my first blog was started - has been taken over by a, well, let's just say a less savory site. The content of the new site is slightly NSFW; clicking on any of the links we can only assume is definitely NSFW.

The real shame is that it seems as if all of the content from not only my old blog, but those of several others, is gone and unable to be recovered. A couple of weeks back, I did manage to save off my posts about Cloning your Corporate UI, and will eventually resurrect them and re-post it here. However, all of my other content is lost for good, it seems. :(

In any case, you may want to change your bookmarks & links to not reference anymore.

Tuesday, April 15, 2008

Oracle Critical Path Update for APEX

More of a false alarm than anything else - it seems as if the two issues are resolved in APEX 3.0.1. Upgrading to 3.0.1 or the latest release - APEX 3.1 - should fix the two identified issues.

For those running APEX 3.0, 2.2 or earlier, it looks like it's time to take a look at getting up to date!

Sunday, April 13, 2008

Oracle Critial Patch Update Fixes 2 APEX Issues

As if April 15th doesn't bring enough joy to those of us in the US (Hint: it's tax day!), Oracle is scheduling its release of its next Critical Patch Update on the same day as most of us will be making a frantic late-day trip to the post office.

From the bulletin on OTN:

This Critical Patch Update contains 17 new security fixes for the Oracle Database including 2 for Oracle Application Express. Two of these vulnerabilities may be remotely exploited without authentication, i.e. may be exploited over a network without the need for a username and password.

While somewhat vague, it does seem that there are a couple of APEX-related issues that will be addressed. We'll just have to wait and see what they are specifically...

Orace APEX Day in Dublin

If you're in Dublin next week, Oracle Ireland is hosting an APEX Developers Day at its offices in Clontarf. It seems as if the event is free of charge, but more information can be gained by e-mailing

Tuesday, March 18, 2008

New APEX Blog

Jason Straub, another APEX developer, has recently joined the ranks of the APEX bloggers.  He kicks things off with a not-so-short post about getting APEX & NTLM integrated with PL/SQL.  That would sure make a nice addition to the supported APEX Authentication Schemes...

- Scott -

Friday, February 29, 2008

APEX 3.1 Released

Just in time for the weekend, it looks like APEX 3.1 is available for download.

Unfortunately, I will not have time to install it, as I will be watching my beloved  Orangemen fight for a slot in the NCAA tournament up in Syracuse, NY.

Wednesday, February 13, 2008

Region Attributes Feature in APEX 3.1

Patrick Wolf blogged about a new feature of APEX 3.1 called Region Attributes.  I remember trying to get this in to HTML DB 1.6, back when I was the Product Manager in 2003!

Basically, this feature enables you to specify a parameter at the region level which, in turn, will be placed where the #REGION_ATTRIBUTE# tag is located in the template itself.

This feature will definitely cut down on the number of templates required for an application, as going with Patrick's example, the width of a region template can be defined differently for each instantiation of that template.

I just ran into this issue with a client and had to use a slight workaround.  We have an application with 7 tabs - each of which is a different function.  We wanted to indicate which function a user was performing by placing the corresponding icon in the region itself.  I did not want to have to create 7 almost identical region templates, as that would be too cumbersome to manage.

So, I simply created an Application Item called G_ICON, and then referred to that in my region template using the following notation: &G_ICON.

On each page, I created a Before Header computation that sets the value of G_ICON.  Thus, as the user moves from tab to tab, they will see a different icon, and I only have to manage the contents of a single region template.

This method will be unnecessary once APEX 3.1 is released, but if you do have the need for a very dynamic region or other template, it may come in handy today and in the future.

Friday, February 08, 2008

MAOP Brown Bag Lunch - Update

The folks at MAOP inform me that there are only a few seats left for this free event. So, if you're on the fence about attending, act fast and register today!

Some of the topics that my presentation/demo will address:

- MS Outlook Integration
- Contacts & Events
- DHTMLX Tree Integration
- FusionCharts

Wednesday, January 16, 2008

MAOP Brown Bag Lunch

I've been invited to speak at the Mid-Atlantic Oracle Professionals user group's Brown Bag Lunch series. The presentation, You Can't do THAT with a Browser - Part II - is a continuation of addressing how to incorporate 3rd party tools and other non-traditional technologies with APEX. The original presentation can be downloaded from here.

The presentation is set for 28-FEB-2008 at noon at the offices of BBN Technologies in Arlington, Virginia - just a stone's throw from where I lived for the better part of 6 years or so. There is no charge, but you will need to register, and space is limited.

I hope to see some of you who live in the DC area there!

Tuesday, January 15, 2008

Productivity to Take a Hit at 9:00 AM PST Today

Yes, it's that time of year, when legions of IT professionals and graphic designers alike skip lunch to sit in front of a browser and rapidly click "refresh" for the better part of an hour and a half.  MacWorld is upon us!

Apple really does a good job of creating a buzz.  They are well aware that people will start watching the Moscone Center at least a week before the show for any banner, sign, or shipping container with a Cupertino, CA address on it.  This year, of course, it's the "There's something in the air" banner, which has led to a number of predictions from WiMax-enabled MacBooks to the new ultra-portable that has been unanimously coined the MacBook Air.

I'll admit, it is fun to join in on the speculation - at least in moderation.  I suppose there's some element of pride to be had if you're right, as that would put your thought process on par with that of Steve Jobs' - if only for a moment.  However, there is one concern with this type of marketing that Apple needs to consider:  corporate customers.

The corporate customer - which Apple is aggressively seeking now that Vista has been all but recalled - needs to plan and budget their purchases.  They can't always afford to wait until mid-January (or even earlier this year with the surprise MacPro update) to purchase equipment.  In fact, many of them need to use their funding by the end of the year or risk losing it.  Imagine if you personally bought a MacPro a couple of weeks before they were refreshed.  Now multiply that by 500 or 1000 or even 2,500 and you can start to understand the level of buyer's remorse that a corporation would experience.

Apple also needs to consider that a good number of these new corporate customers who are starting to consider Macs are not the "fanboys" that have owned Macs since Hulk Hogan being on TV was something to get excited about.  Their culture is vastly different and much more calculated.  Think John Hodgeman's character in the Get a Mac commercials.  Corporate customers need to plan upgrades, not just go to the Apple Store and buy 2,000 Macs.  They are a more conservative and calculated bunch.

As Apple courts this market more and more, I think that the veil of secrecy of "one more thing" will need to be lifted, at least with the Mac desktop & laptop lines.  This will enable corporate customers to more accurately plan their purchases and feel better about their investment not being refreshed just weeks after it was made.  It will also give corporate customers more confidence that there is nothing coming out in the next few months that will make them wish they did wait.

Sure, I think that iPods, iPhones, AppleTV and the more consumer-based products can still be kept secret until the keynote.  Most of us know that when you get anything high-tech, its days are numbered.  Apple even botched this up with the iPhone price drop a few months back.  
What fun would MacWorld be without some rampant yet typically completely inaccurate speculation combined with the excitement of potentially thinking like Steve!