Wednesday, 16 October 2024

Upgrading Forms compared to APEX #JoelKallmanDay

My current project has involved rebuilding the entire aging stack for an environment that's currently 95% Forms, with any new work developed in Oracle APEX. The upgrade covers all layers -  from OS, to DB, to browser, and to application builders - all heading to contemporary versions.

The general directive is like-for-like, so the applications should work the way they used to, if not a little better.

So to dumb down the process, we basically need to recompile everything on the new stack, fix the gaps, then test extensively.

***

It's been an interesting project to compare the type of effort required to uplift a large Forms application compared with a modest set of Oracle APEX applications. I do this with the awareness that it's like comparing apples and toaster ovens, but the outcomes have been interesting enough (to me, at least), that it's forming the basis of my next presentation.

In fairness, there wasn't too much in regard to general syntax used within Forms that needed addressing. Nothing has significantly changed in Forms functionality, and we just needed the app to function as it did previously. 

There were a few environment level settings we found to help with some backwards compatibility, thereby saving some rewrite. 

From an infrastructure perspective, however, there were a number of aspects we needed to tackle to keep up with the modernisation of the stack. This included the launcher (Applet->FSAL), the SSO mechanism, document (blob) handling, and guiding the application to a tidy close after a timeout occurred. Compared to Oracle APEX in a modern ecosystem, the sting of that last item will linger.

***

This application has a considerable amount of blob content stored in (now deprecated) OrdImage data types, so that one item took up a considerable portion of effort - from shifting the data; to modifying the UI to load and view the attachments.

Oracle APEX came to the rescue for this case, replacing an old mod_plsql interface that supplemented a Form, and an ancient looking webutil UI in another.

The saddest part of the Forms upgrade was the amount of time I needed to spend ensuring session timeout didn't get the user stuck in a dead session. Part of me kept thinking how much of that 95% we could have started to shift to APEX with that time... 

***

As for the APEX applications, we took advantage of the testing that was going to happen and updated the Universal Theme (UT) of the applications.

Prompt to upgrade the APEX UT

I'm working through the issues that came out of this for the presentation, but most of the issues we needed to remediate were due to the UT update - not the upgrade of the database and the Oracle APEX version. And even then, most of the issues are relatively benign UI differences which don't need attention. A good handful of which were on purpose, for the benefit of APEX users - just against the fine grain of "like for like".

We could have upgraded both the database and the APEX version, left the UT alone, and only had a few minor version related adjustments to take care of - then still have a nice new bag of tricks to explore.

This is a far cry from earlier days of APEX where a big hurdle to upgrades was contemplating the significate cost of migrating to a newer theme with improved considerations.

But again, this wasn't necessary. I recall Joel presenting a session where he took an APEX application built some time ago, spanning a gap of multiple APEX versions. He just imported the application, and it ran without change - even when APEX was still a comparative youngster.

This methodology and mindset hasn't changed. I've done a few APEX upgrades in my time, and my recollection of any issues were related to heavy customisation - rarely native usage. Any native changes were always well documented, with a guide to transition to what is an improved outcome.

***

So today I share this heavily abbreviated and filtered anecdote of my recent explorations with Oracle technology, and once again remember Joel as a guiding force to help transform Oracle APEX into a development tool that has longevity without heavy maintenance, while still making the developer's life easier each release. 

And also a feature haven for those Forms developers out there.

I can even draft next year's post with another small side story from this upgrade project, reaching deeper into the past of Oracle APEX.

Wednesday, 11 October 2023

Pressing Pause on APEX #JoelKallmanDay

To honour this year's #JoelKallmanDay, I'd like to use this as an opportunity to speak about mental health, rather than get technical like I have done in the past.

Yes, my blog posts have been particularly lean - this is my first post since the same event in 2021 - I completely missed last year. Not just this special event, but from any posts whatsoever.

It's not that I've moved away from Oracle, nor that I'm short on inspiration - I'm still emailing myself ideas on a regular basis, but I haven't been setting time aside to transform them into something to post.

And I haven't been totally silent - I did update my Presentations page after presenting at a couple of local meetups this year. And you'll still find me on the Oracle and Stack Overflow forums.

There have been a few reasons for the slow-down in activity, but in part this has been due to my front-end development time being far less than it has been in the past. The Forms->APEX migration project I joined has been paused, and in the meantime I find myself on a project remediating the environment to first upgrade the stack from fax machines and teletype.... well, things aren't quite that old, but there's no point giving the car a flash new paint job without first replacing the tired old engine, right? 

But when you're into painting, mechanical work is far less exciting, and it can take a toll on how one feels about their job.

I still get to paint the odd fender, but that's only part-time.

Sunset after Eclipse 2023

It can't always be about rainbows and lollipops, but after many years of working in the candy factory at the end of a rainbow, I have to wait patiently for the new factory to open under a new rainbow.

Perhaps that's enough mixed-metaphors for now. I'm still here, still passionate about Oracle and the APEX product, and I have exciting times in my relatively near future.

It's also not the first time I've had setbacks of sorts. There have been significant development works that ended up being permanently parked. These were amazing builds that I had fun being involved with, but for one reason or another they either never ended up in the user's laps, or didn't stay there for long. However, besides feeling like my time was wasted, there wasn't really a direct impact on me.

Stepping away from the front-end and spending far more time in the back-end - or even finding myself updating some Oracle Forms and tweaking their configuration, really makes me appreciate what I've found in the highly productive world of Oracle APEX development.

In the meantime, I find community events like this, and perhaps also the first local conference in some time next month will invigorate me enough to take the time to revive my blogging vibe, and maybe a side project or two that haven't gone completely dormant.

To the reader: how have you handled lulls in your career? Have you found periods of time that, while perhaps still being technically interesting, haven't completely satiated the programmer's need to create? What did you do to quench your thirst?

Sunday, 7 November 2021

APEX in tense. #JoelKallmanDay

Now I feel extremely luck to live in a part of the world that has been relatively free of impact from COVID-19, certainly from a societal health perspective.

That said, I'm fairly certain there has been an indirect impact on my non-billable APEX activities - one only needs to look at my blog history over the past few years. Blogging is an outlet I've always enjoyed, and I miss doing regularly. 'Next week' I'll start doing it more regularly. Next week...

Blog frequency dips

But I was flicking through some tweets and saw Tim's announcement regarding #JoelKallmanDay, an initiative extending from past appreciation days, but now honouring the late great Joel Kallman, who sadly succumbed to COVID-19.

While I may be late to the event, I still feel compelled to contribute in some form. I only had the honour of meeting Joel a few times, but I know he's been an influence in my outreach. And I certainly feel his passion through the extended Oracle APEX team, whom I've also shared some wonderful moments with. I think about him frequently.

Like Tim, I thought I'd do an abridged history of my path to APEX. I had my first exposure to generating HTML from PL/SQL back in University, though too late in my final year project to do anything exciting with it - but I felt back then it seemed quite a powerful concept.

That said, I ended up cutting my programming teeth with Oracle Forms for a good number of years before my employer in ~2008 asked/directed/suggested I learn Oracle APEX while it was v3.2.

I was really given the opportunity at that point to jump in the deep end with APEX and explore what could really be done when it comes to designing applications that help the user get the job done. Not only that, I started the conferencing thing and got exposure to people like me from all over the world.

It wasn't long before I started training other people to use Oracle APEX, and if nothing else, that certainly helps you learn the ins, outs, and shortcomings of your development tool. Combined with regular involvment in the online forums, where even answering a question I thought I knew often comes with other people contributing their own perspectives, offering an enhanced method, or other consideration.

I've since had the chance to speak at two Kscopes, where I met Joel and quite a few people in the APEX team. They're all so passionate about the product, and offer their own special skills to help mature the product in the right direction - adding features faster than I can learn them. Not only that, they all know how to have fun outside the technology world. Something particularly important for our mental health in these challenging times.

I've now been on a few projects where we're transitioning Forms application to the web-based world that APEX lives, and now I have the pleasure of helping convert a large Forms application I had a decent part in developing - back before I knew what APEX was.

For me this is a particularly exciting time. It was somewhat of a plunge to leave my previous job during these testing times, but it's opened a raft of new opportunities - all the while I wish I had more time to tinker with my own little APEX side projects. 

Monday, 26 April 2021

Kicking the tyres on Oracle APEX 21.1

 It's lockdown on a long weekend, and Oracle APEX 21.1 has just been deployed to apex.oracle.com, how could I not have a play?

We've been provided a link to New Features, but for some aspects I'll need some help from the documentation, when it becomes available - and perhaps some examples from people more knowledgable than I.

Native Map

This will be one of those features where I'll need some more guidance, and I suspect this AskTom Office Hours session that I haven't watched yet would probably be a good start.

The create page wizard looks promising

Create native map

And after fiddling around with the region attributes, I was able to plot three lat/long addresses onto a map.

Native map runtime

I also noticed there were some native Dynamic Actions associated with the map region, but I'll patiently await further information on this one. 

Good to see it's dark-mode ready, though. 

Lazy Loading

This is one feature I've been waiting to become native, and I probably would have been a little disappointed if it didn't arrive with 21.1, and here it is, nice and simple.

Lazy loading option

We can emphasise the behaviour with the browser's device toolbar options, for instance, throttling to 'Low-end mobile'.

Here I have an IR and Classic Report both using the lazy loading option.

Lazy loading runtime

Custom built solutions can use the no-data-found message to inform the users data is still loading, I would like this feature to offer some facility in that regard.

Code Editor

I like it when we're giving options on what code editor features are available, and it looks like we've been provided a few more keys to the playground with the 'Monaco' based code editor.

Code editor settings

There are some APEX specific improvements, too. For instance, we're now notified when a page item doesn't exist - thought I think it needs a bit more polish. It appears to be case sensitive, and doesn't clean up very well once you've corrected the problem.

Code editor item reference check

It seems we have a few more keyboard shortcuts available now for case transformations. That's always nice.

Universal Theme enhancements

If you like the Redwood Light theme, it seems that's been given more love compared to the first round.

There are some added declarative options, but I'll probably need more context as to how they're used. I don't think the UT application has those guidelines yet, or I didn't see them.

Row CSS classes seems like it should have been there all along with Column CSS classes. What would be an example of it's use?

Grid layout property addition

CSS classes against the Theme Style seems like it will allow more elegance, but again, I'd like to see an example.

Theme style property addition

Having even a cursory look at these new features also made me consider how I've been utilising existing behaviours. The File URL for a theme style seems a better spot than I've been using for custom CSS I've added to fill gaps in the dark mode.

Template Options have always had a few surprises in version upgrades, though I'm not sure what the region Heading Level is supposed to do.

Region template options

Universal Theme application

I notice the UT app has some extra options in the navigation bar.

The version facility sounds like a fair addition for those who may be a version or so behind. I wonder what this changes, exactly. Does it affect content, or just the styling that's applied. Though I notice you can't select an older theme while dark mode style is applied.

UT app navbar

The Style option is pretty cool. I've been playing with a similar feature in my app, but it seems like I've been submitting the page like a chump - I'm curious as to how this work.

Date Picker

It's always good to get improvements on such a common component. The Maximum Item seems like a more declarative facility compared to what we have now, but now it appears to be dynamic - responding to a related item's selection. Perfect for from/to selections.

New date picker settings

Display Inline really stands out, must be for when date selection is rather important.

Now that DanielH is on the team, it almost seemed inevitable that the time picker would be enhanced in some form. This could mean another plugin is no longer required, though I'll reserve judgement until after I play some more.

Time picker enhancement

Import export as ZIP

This seemed inevitable, but I don't think it will impact me so much.

Application Data Loading

I need to spend time to revisit this feature. The column mapping aspect intrigues me.

Faceted Search enhancements.

I haven't used this facility in production yet, but it's good to see it progress as it's such a ubiquitous web feature.

REST Data sources

Schedule frequent loading of CSV data from the web? Getting data into the database easier has gotta be good.
Juergen has a good way of putting this:
"Put your Excel Sheet in your Sharepoint, change it as you like and I give you an real time App on top of it" feature

Markdown upgrades

This will float some people's boat.

Miscellaneous

I like the sound of client side numeric formatting, and improved client side validation.

Conclusion

This release seems in line with the stated roadmap, though as Andre describes, there are also some long standing painpoints that exist for the developer that could use some attention at some point.

The Oracle APEX development team have had some quality additions recently, though the whole COVID situation has potentially slowed some general improvements. 

That said, the product continues to improve, and the team responds well to community feedback. I also look forward to seeing improvements in the feedback application itself.

Get in there, kick the tyres, and give the development team some constructive feedback. We can all help make this an even better product.

Hold the phone! 

Just as I was about to clean the post up for submission, I saw Juergen's tweet about client side conditions on individual dynamic actions. I think the team are underselling that feature on the New Features list!

Client side condition in DA actions

Though as handy as this feature will be, I suspect it could be abused - in regard to maintainability. It could leave to code/behaviour that's a little difficult to follow. We'll have to keep an eye on that.




Monday, 19 April 2021

Dare Mighty Things

As a data engineer (of sorts) I've handled some cool data in my times, and created some interesting plots.

I still remember when I used rpad with stddev() in SQL*Plus to prove the data we had formed a bell curve.

More recently I've used Oracle APEX activity logs to identify bottlenecks and high frequency pages.

But this evening I was in awe as I saw a simple plot appear on my smartphone. This plot used data that spent at least 15 minutes travelling almost twice the distance from the Earth to the Sun to reach us, across an incredible network of computers.

Data from a craft that made history as it made controlled, powered flight on another planet.

First Martian flight plot

Sure, it's no secret I'm a big fan of all things space, and some may say that this achievement is a little overhyped. 

Not me. 

This is one of those moments that's going to inspire little future engineers that see a diverse group of people around the control room creating a moment in history that's justifiably likened to the first powered flight on Earth over 100 years ago.

This event is going to be the baseline for exploring Mars in ways that have only been dreamed about so far. And the drive to improve technology to improve the capability of this exploration is going to continue to benefit those of us living on Earth.

This doesn't mean us humble data engineers crawl deeper into caves of inadequacy. It may have taken a few people to cobble together a small engine on some timber roped together to fly a few hundred feet, but it takes a team of all sorts to send a rocket containing a nuclear powered rover containing a battery powered helicopter to another planet, land it, then fly it in an atmosphere so thin. 

And I feel for that team right now who can't hug their colleagues during tears of triumphant joy at their pent up success. Well done JPL.

We just need to dare mighty things. Even with our little apps - they make a difference to someone.


Thursday, 21 January 2021

2020 Blog Review

Ahem.

select apex_string.format(q'[It's been %s days since my last confession]' 
                         ,trunc(Sysdate) - date '2020-04-14'
) "G'day World" from dual
G'day World
-----------
It's been 282 days since my last confession

It's been so long, the Blogger UI has changed. I don't think I like it. Maybe another thing to consider adjusting in the new year...

It's also been four years since my last blog review, and I promised this one may be a doozy.

2020 was something else, right? I spent a good portion being thankful that I 

  1. kept my job
  2. could work from home
  3. live in such a remote city, which helped keep my family & friends safe

Aside from the APEX@Home event in April, I decided to scale my extra-curricular work right down, hence the lack of blog activity over the past year. I've kept active in the forums, because looking through those helps give my brain a bit of a reset when focus starts wandering.

But I wanted to be sure I had the time, energy, or whatever it was I needed to power through whatever 2020 potentially dished out.

Thankfully, from my end of the world, things are relatively OK. I've been to a few outdoor gigs, and aside from a few regular adjustments, life is kind of normal. Kind of. We're not completely insulated from the outside world, and things could change in a moment.However, I've used this down time to improve my investment game, should my IT career start to falter.

But that leads onto another astonishment for the year. I saw a lot of people I knew outside tech lose their jobs, though thankfully most of them had options elsewhere. Meanwhile, I'm presented with numerous avenues. I happened to choose a new avenue.

As of the end of January 2021, my tenure at Sage Computing Services comes to an end after 13 years. 

When I look back, it's staggering what I've done with the support of Penny at Sage.

  • Transitioned from Forms based development to Oracle APEX.
  • I published a video series using Oracle APEX. 
  • I published a book involving Oracle APEX. 
  • I was recognised as an Oracle ACE.
  • I spoke Kscope. Twice. Well, two cities, 5-6 sessions, I think.
  • Helped create some amazing project work with an amazing team.
  • Found a great work-life balance.

And I still have the yearn for more.  I have two more ideas for video series I still want to explore, and one could work as another book.  

It was a really tough choice leaving Sage, but yet again, Penny supported me through the options, and I'm fairly sure I've found a project that's the perfect fit for me, and it was hard to ignore.

And for a moment there I felt like I was presented with the cliche of red vs blue pill.

Development or ...

I'm not sure which one represents the world of development, but I didn't identify a managerial style job back at University - so while I 'manage' a lot of things as a developer, my passion is cutting code.

Therefore, the coming years are going to be explored as a contractor at a new firm, while I return to a past client to transition them from Forms to Oracle APEX. The good & bad news: I built a bunch of those Forms!

2020 project challenges were tough. I'd be kidding myself if I didn't think 2021 projects at a new location will be any different, but I'll be looking to step up my skills & habits while I'm at it.

Hopefully you'll be hearing more from me via this medium in 2021.
I've missed it, and I'm ready to come back.

And here's to seeing James Webb Space Telescope finally launch this year!

Tuesday, 14 April 2020

How to stay sane ... when things change.

From an e-mail I sent to colleagues, I thought I should also share it here (revised):

I'm known as the office optimist. And I do literally have many things to be grateful for. I still have a job, I’m able to work from home, and I have a decent study setup. And I’m an experienced introvert, this shelter-in-place business is no problem for me. I feel like one of the last people who’d go stir-crazy.

But recently I felt I had a crappy week. Worst in some time, and nothing really to do with current events. A vital piece of software kept flaking out on me, and I felt I didn’t achieve what I was aiming complete.

I opted out of an attempt at a virtual Friday Happy Hour for related reasons, even though I timing worked out that probably could have given it a go.

In hindsight I understand this is also in part due to a number of reasons I just made up for myself, to justify “not coming”, such as feeling like the audio will be awkward, or even just setting up the video/audio feed.

I’ve been listening to a few select podcast to keep up to speed with current events, Deep Background with Noah Feldman being one of them. But this particular episode from 27th March, "How to stay sane during a pandemic", seemed to have been a fly on my wall. I found it really hit the nail on the head, and I feel there’s messages in there that will speak to all of us, from a professor in happiness, no less.

Noah interviews Laurie Santos, from The Happiness Lab. Well worth the listen.
https://podcasts.apple.com/nz/podcast/how-to-stay-sane-during-a-pandemic/id1460055316?i=1000469702285

I hope you’re all doing ok.