Showing posts with label Mobile. Show all posts
Showing posts with label Mobile. Show all posts

Monday, 12 March 2018

Emulating touch devices for Oracle APEX

In my Exploring AJAX presentation I had a frame that mentioned the ability for the Chrome browser to emulate the behaviour of a mobile device.

Open up the browser tools, I use F12. I spend a fair it of time in the Elements + Console tabs of these tools.
Then find the relevant icon, that will no doubt change location in future. Ctrl+Shift+M does the trick when the browser tools are open.

This mode allows you to change the type (size) of the device you're emulating; the orientation; and the network speed. Even the cursor changes to a shaded circle, to more closely simulate a (thicker) finger press.

Second icon from the left - follow the blue arrow

If you open your APEX login page when the emulator is already turned on, the user_agent will be spoofed accordingly. You could use Christian Rokitta's adaptation of categorizr to determine if you are on a 4" device, and populate an application item. That way, if certain regions don't fold well into small devices, you could conditionally replace them with more appropriate regions.

For example, I had a badge list of 5 values that didn't squeeze well into 4 inches, so I replaced it with a simpler value attribute pair region when my IS_MOBILE application item was set.
Note: don't forget to use declarative conditions where you can.

The 5.0 Universal Theme actually does a good job rendering regions responsively. Issues usually arise when there's simply too many columns to fit. I'm very much looking forward to the 5.1 OracleJET charts cathing up to to the touch behaviour. AnyChart prior to HTML5 doesn't adjust well.

Also available is the ability to throttle the connection. No doubt you have a pretty fine connection where you're developing, but the users on devices out in the field might not have the best connection. This setting allows you check your application's behaviour as if it were on a slower connection, highlighting any asynchronous issues, or lag that affects the user experience.

Nothing is ever the same as the real thing, so while it's a practical unit testing tool, you should still thrash out mission critical devices on the real McKoy.

I hear whispers that APEX 5.2 is going to potentially shake up the User Interfaces a little, with the removal of the jQuery Mobile User Interface. Perhaps there will be accommodations here to help our applications transition between screens, without needing dedicated pages?
I haven't seen any of the sessions delivered by the Oracle team talking up 5.2, so I'll have to wait and see.

Update -  I wrote this last paragraph a while back, though I don't think the early adopter covers any changes in this regard.

Wednesday, 26 November 2014

Chrome Device Mode and Mobile Emulation

Recently a colleague suggested I take a fresh look at the mobile emulation button in Chrome's developer tools.

Apparently this was upgraded earlier in the year and it's a shame I didn't have this a year ago!

Chrome Developer Tools Mobile Emulation
Some immediate advantages I see for APEX development:




  • Specify the device you'd like to emulate from a decent range of contemporary devices
    • This viewport can then be easily scaled to suit whatever monitor you're using
  • Apply network throtttling to simulate access on a mobile network
  • Use the emulation tab to define a media type to render as - I've been using 'print' to test how certain pages look when printed
  • The cursor changes, indicating the behaviour will emulate finger touches on a touchscreen
    • touch & drag emulated perfectly - I removed touchpunch from my page and sliders stopped working as expected without jQuery mobile
    • scrolling drifts instead of static desktop movement (happy to improve terminology here)
Full details on how to use these features are available here: developer.chrome.com

Tomomi also has a great write up on the topic.

Nice work Chrome, nice work.




Friday, 16 May 2014

Millions of big androids

This latest analysis on the population of mobile device technology got me thinking more about the typical sized screen you might encounter as a global web developer.
So it's looking at 2014 Quarter 1 shipment of nearly 280 million smartphones. 81% are now android, only 16% related to Apple - that next iPhone better be a seller!

The telling statement for me was regarding a third of those shipped:
Smartphones with 5″ and larger screens grew 369 percent, substantially faster than the overall market
I've been working on an APEX project for delivery on an Apple Air - building for a table sized interface has been fascinating. I can only imagine how different a functional APEX application for a 5" screen would need to be.

Friday, 2 May 2014

Thursday Thought: Are web clients getting thick?

I stumbled across this great post from a non-Oracle specific developer, and I thought I'd mention it here because it's worth a read.

http://zderadicka.eu/web-clients-are-getting-thick/

I've re-posted my comment here because they were thoughts rattling in my brain that I was going to rabble on about one day.
I've been thinking the same thing recently in regard to requests for Oracle APEX pages to not rely on connection to the database in order to operate for a time - using HTML5 storage in the meantime, then synchronising once connection is established. 
Essentially native mobile app behaviour in a web/hybrid application. 
I've also noticed issues in performance during my general mobile usage, particularly when it comes to web surfing. If you visit a news site in desktop format with your smartphone (particularly earlier models) it takes a while to render, yet open the same pages on your laptop using the phone as a data tether (to facilitate same download speed) - I've noticed rendering is much faster. 
The front end will also have to do rendering work, and browsers have been competing against each other for rendering speed for ages, but yes - they're getting thick again.

Is this the circle of life?

Friday, 3 January 2014

PhoneGap 3 ebook winners

Late last year Packt Publishing offered 3 e-books to help promote Giorgio's revised edition of PhoneGap 3. People who commented or tweeted the blog post received entries to win.

While I prepared some SQL to randomise selection of winners, I didn't get a chance to arrange the job to be executed at midnight on new year's eve.

I still wanted to schedule a job as not to be biased with results, so I picked another abitruary date instead, one that might excite the numerologists out there - Jan 2nd, 2014 at 3:45 - yep, there's a sequence in there.

Here is the code the scheduled the job, which created a table with entries in random order.

begin
sys.dbms_scheduler.create_job(
  job_name => 'SW_PACKT_WINNERS'
  ,job_type => 'PLSQL_BLOCK'
  ,start_date => to_date('201301020345pm','yyyymmddhhmipm')
  ,enabled => TRUE
  ,job_action => q'{
begin
execute immediate q'[
  create table  packt_contest_winners as
  with data as (select name, case when linked='Y' then 3
        when tweet='Y' and post='Y' then 2
        when tweet='Y' then 1
        when post = 'Y' then 1
        else 0 end entry_qty
        ,null rn2
       from packt_contest)
  select xz.rn entry, entry_qty, d.name ,dbms_random.value() rnd
    ,case xz.rn when 1 then 'Posted comment'
     when 2 then 'Tweeted post'
     when 3 then 'Included backlink' end reason
    ,case when row_number () over (order by dbms_random.value())  <= 3 then 'winner!' end prize
    ,sysdate ts
  from 
    (select  rownum rn
    from dual
    connect by level <= 50) xz
    join
    (select rownum rn, name, entry_qty from data) d
    on xz.rn <= d.entry_qty
  order by rnd
]'; end; }');
end;
/

You can see the results on this page http://apex.oracle.com/pls/apex/f?p=73000:22

The first three won - so congratulations to


I have contact information for all three winners, so I'll hunt you down when I have further information from Packt.

I've been busy building an APEX website over the holiday season so I haven't had a chance to try out the examples from the book yet - but I really look forward to it!
My first read showed it was really promising for Oracle Developers to really take advantage of PhoneGap as a tool to make our mobile applications even better.
As I mentioned, I'll write a fuller review once I've had a play - and I'll see how people's comments regarding the chapters of interest come through.


Here's to a productive 2014.

Scott

Wednesday, 18 December 2013

Win a free ebook of PhoneGap 3 by Packt

PhoneGap 3 Beginner's Guide
Packt publishing have generously given me the opportunity to give away 3 copies of their e-book PhoneGap 3 Beginner's Guide, by Giorgio Natili.

Details on how to enter are further below.

Update (2013-12-19): Created APEX page displaying current entrants and puzzle regarding selection process.

You don't think you need to be an APEX developer to appreciate this book, but I will be reviewing this book in greater detail over the new year as I plan to use it to help me deploy Oracle APEX applications as a hybrid mobile application.

Looking through the contents, I see plenty opportunities to improve your APEX applications by using PhoneGap - a free, open licensed distribution of Apache Cordova.

Chapter 1: Getting Started with PhoneGap
Exactly that - understand what PhoneGap is and what you need depending on your device.

Chapter 2: Building and Debugging on Multiple Platforms
A little deeper preparation for how we might debug issues, even desktop debugging since APEX developers are building hybrid applications.

Chapter 3: Getting Started with Mobile Applications
A good look at some web development basics everyone should be familiar with - JavaScript, CSS.

Chapter 4: Architecting Your Mobile App
Might be a bit heavy for us APEX developers, but we may end up being able to hook in our APEX landing page using this information.

Chapter 5: Improving the User Interface and Device Interaction
I think some lessons in here will be deeper than we might get out of an Oracle-centric book.

Chapter 6: Using Device Storage and the Contacts API
Even though we're database developers, I think we're going to be able to provide some clever ideas with HTML5 storage. The Contacts API looks like a great lead in to communicating with the device.

Chapter 7: Accessing Device Sensors
The clear advantage your hybrid APEX applications will have over web deployments - access to hardware sensors.

Chapter 8: Using Location Data with PhoneGap
I think this is more functional than current HTML5 capabilities.

Chapter 9: Manipulating Files
As interesting as this looks - don't jump the gun, I think the chapter you're really interested in is next up.

Chapter 10: Capturing and Manipulating Device Media
Another marquee features for APEX applications - eg: easily uploading photos taken with the device.

Chapter 11: Working with PhoneGap Plugins
Just like APEX has some awesome plugins, so does Phonegap.
They'll probably feed your APEX application ideas even further.

Appendix A: Localizing Your App
We may get away with not needing this, but handy nonetheless. Besides, I've had limited exposure to localisation requirements.

Appendix B: Publishing Your App
No point having an app you can't publish, right? Luckily with our APEX hybrid, this may be a process that can be avoided after initial release.
All versioning can be done within your APEX environment.

Appendix C: Pop Quiz Answers
Pop quiz, hot shot - have you been comprehending what you're reading?

For your chance to win


1) Please post a comment below and mention which chapter you think would help you the most.

2) Double your chances by tweeting about this giveaway.

3) If you include a link to your tweet in the comments, I'll give you three entries.

I'll feed all entries into an Oracle table and run some SQL to randomly determine the three winners
- as oppopsed to using Random.org - come on, I'm an Oracle geek!
I'll post the method I will use to deduce the winners sometime soon, possibly over the new year.

Note: the closing date for this giveaway is 31st Dec 2013

Don't forget to include some form of contact information so I can contact you if you've won the prize.

Good luck!

Friday, 10 May 2013

Review: Oracle APEX for Mobile Web Applications

Oracle Application Express for Mobile Web Applications

If you haven't heard about this book yet, you're not reading enough media on-line.

APEX regulars Roel Hartman, Christian Rokitta and APEX product manager David Peake are the published authors, but I think it’s safe to say we can also thank Dan McGhan for starting the project.
(I mention Roel explicitly a few times where I'm pretty sure he was involved, sorry if I apply undue credit anywhere!)

I've been meaning to write this review for quite some time - I had the pleasure of technical reviewing this book & from the first chapter I knew this was going to be a winner - something very popular for anyone with half a brain that can bust out an APEX application.

Introduction to APEX for Mobile Development

Let’s be honest, the title alone sold the book for me. Mobile development is apparently kinda popular right now, as is APEX - so it seemed the perfect pair.

I think it was a great introduction to what’s expected out of mobile development, particularly through the eyes of an APEX developer. It details issues such as web vs native & responsive design. It should whet your appetite, if not - you’re in the wrong game ;-)

Creating Mobile Pages

This chapter starts of by de-constructing a basic jQuery Mobile page, which sets the scene well for the type of HTML to expect from these pages.
You are then walked through the creating of your ‘first’ mobile page using a list view and a basic form. The author then uses these to illustrate the many ways you can define navigation between pages, including a mobile dialog.
He then finishes with an intro to transitions, loading widgets and templates.

Highlights - realising the programmatic flexibility APEX can provide.

Presenting Data through List Views

As I’ve learned in a current project developing an application for a tablet - list views are a fundamental cultural shift from the desktop, providing a standard workflow construct.
This chapter details the various options APEX provides when defining these lists views.
The author also includes some sample CSS to help show how to identify then manipulate components on the page - it’s not too hard once you are shown some examples.

Highlights - advanced formatting with CSS examples; swipe to delete

Accepting Input via Forms

This chapter starts with the simplest, most common form ever - the login page. The author notes how bland the stock form is, and uses the power of CSS to tart it up.

The next most important aspect of mobile development is discussed - grid layout.
Screen real estate is also precious, so there are some examples of collapsible content.

Also included are discussions regarding HTML5 input options such as the slider & toggle switch, and ways to enhance existing selectors such as radio groups and select lists.

I keep saying things are important, but mobile is a whole new world and notifications are another example of a fundamental product feature that needs re-addressing in the mobile world.
If you’re a fan of iOS, Roel continues the chapter by showing how to customise the delete dialog box with a native looking popup; then follows it up with a much nicer success confirmation.

If that’s not enough, the chapter puts finishing touches on your ‘first’ form to make it look ultra professional - and we’re only four chapters in!

Highlights - more CSS examples, grid layout, notifications

Displaying Calendars and Charts

As if your application isn't looking sexy enough already, we can also add various charts and calendars.

Out of the box calendar’s are not too bad - but again Roel takes things a few steps further with some inspiration from iOS.

He doesn't go into too much detail with charts - they’re already pretty nifty and the APEX team are constantly working with AnyChart to ensure greater capability and conformity with various devices. Later in the chapter though he demonstrates some of the other options out there such as Highcharts & Flotcharts - which includes an example of a RESTful web-service.

The surface is also skimmed with mapping options, but I think again it’s because of the reliance on external interfaces.

Highlights - calendar enhancement

Implementing a Navigation Springboard

This chapter starts with an obvious lean towards Apple devices, but springs back to setting up a very nifty iconic menu (see what I did there?).

Roel then shows how to add tab navigation across the footer of your page - useful for certain applications but it could be considered dead real estate.
Shortly after he does detail how to move away from the typical HTML style buttons to iconic buttons in your header that you’d expect from a mobile application.

The coolest part of this chapter is a slide menu just like the one you see in Facebook mobile. He really puts list templates to work - one of my favourite APEX constructs.

Highlights - iconic menu with notification counters; sliding menu

Theming Your Mobile Application

This is a small but useful chapter describing how to turn your application from a royal blue to something more suitable to your client’s needs.

It’s also a chapter where I’ll claim a little credit for improvement. Changing swatches within templates can be tedious, so I suggested the author provide instructions to parameterise the templates with some form of substitution string - thereby making it easier to switch between swatches.

It finishes with a short piece on managing icons between devices using CSS media queries.

Highlights - media query example

Working with Dynamic Actions

Let’s face it, dynamic actions are one of the top 3 features of APEX. This is why I'm a little torn with the approach of this chapter - the first half is a simple breakdown of how dynamic actions work and how to use them, something that seemed a little below the target audience and previously presumed skill level of the reader (my perspective). I do, however, feel they’re vital to good applications and I'm glad there is another chance to show the community how they work.

The second half shows how dynamic actions have been modified for APEX 4.2, and introduces the new declarative events such as orientation change, scrolling, tapping & touching & swipes.
The author provides a few mobile specific examples of dynamic actions, then details some advanced topics such as non-standard selection types, event scope & custom events - all of which are also useful in desktop environments.

Given the style of the book so far, I was a little disappointed with this chapter - I think it had more potential than was delivered, with respect to whoever wrote this chapter.

Highlights - advanced dynamic action techniques.

Deploying Applications Natively

If you want to interact with the hardware of your device using a toolkit such as PhoneGap, you should buy this book for this chapter alone.
HTML5 is still catching up with hardware capability, and the various browsers are even further behind - so these types of interfaces allow you to embed your APEX application in a lower layer within a mobile device.

The chapter starts with a good philosophical discussion on native vs web vs hybrid applications, then describes the PhoneGap architecture.
From there it’s a step-by-step guide on configuring an Android Development environment for Cordova. iPhone users - there is also a section on cross-platform support.
It then shows how to use the PhoneGap APIs in your APEX pages using the device’s camera as an example.

Unfortunately I didn't have the time to implement an application natively during the technical review, partially because I had some laptop issues myself when this chapter was ready. The chapter is very detailed, however, and it will be front row & centre very shortly for when I do.

Highlights - all of it - I believe you can thank Christian for this one

Securing your Mobile Application

I wouldn’t consider myself an expert in security, but I have a high level of interest - a presentation I wrote on the topic won me best paper in 2011. So I was looking forward to reading the implications for mobile.

It’s a fairly concise chapter, covering SSL, idle sessions, encryption & session state protection. I think the best pages discuss application & schema splitting, getting the reader to think about these implications, but doesn’t go into a large amount of detail.

Highlights - timeout messaging techniques

Conclusion

I think the book is excellent. It covers all the topics you think you’ll need for mobile development, and packs a whole bunch more.

I will say it started strong, but tapered off towards the end - but I think that may be due to the fact books are difficult to manage, author & produce while still maintaining some sort of life. Kudos to the authors involved.

It’s a little biased towards iPhones - evident because I own an Android, but there isn't much content that requires such a device. Of course, this is the nature of the real world, and considerations need to be made when developing applications for mobile devices - what is your target market?

You will also need patience. It’s bleeding edge material that sometimes requires supplementary files or Oracle database adjustments. If you’re still learning the power of jQuery & CSS (aren't we all?) then there may be times your code isn't quite right and it might take some time to work out, but it’s part of the learning process - it just demonstrates how valuable this book is.

Well done gang.

If you're interested in more of my reviews, check this out.

Thursday, 10 January 2013

Thursday Thought: YouTube video statistics

Ever watch a YouTube video and check out the statistics to see how it ended up on your screen?

I did this recently with an amazing video taken on a scary looking bridge in Norway (Slartibartfast would be happy)
Mobile is on the brain, so what initially struck me was the amount of views reported by a mobile device vs something like Facebook.

Looking further, what really got the graph moving was when it was first embedded in yahoo web mail. I interpret this as when it really started to spread between family & friends and traveled through the regions of Norway, Poland & Canada.

Despite the younger generation, social media, and views of some - email still has a long way to go before dying. Ever tried to set up any form of account for kids? Everything needs an e-mail address!

And don't underestimate where mobile is going. It hit Zynga fast, crippling a company that had it all.






Wednesday, 9 January 2013

APEX 4.2 User Interface Detection

The User Interfaces that have been added to APEX 4.2 have a few properties to help define what URL should be resolved - hence whether you see a page designed for a mobile or desktop.

After testing these to determine behaviours as the values change, I find it would make an easier flow chart to follow.

User Interface Properties
If Auto Detect is off, it will render the default UI
If Auto Detect is on, and hardware matches UI, this will override default.

Should auto detect fail, or no default are specified when auto detect is off for both interfaces, APEX will display the following page.
Page seen when no default and auto detect is off
This page was also displayed when auto detect was on for both UIs on a Samsung tablet, so probably best to define at least on default.

Order of the list is defined by UI Sequence - which is the only display this property seems to affect - nothing within the builder.

This screenshot captures the default appearance, but you can override the stylesheet used by using the User Interface Detection CSS File URLs property, under application properties.

ADMIN 01 - User Interface Selection

Please select a user interface from the list below:
Media queries are also accetable
[media="only screen and (max-device-width: 480px)"]/mycss/smartphone.css
So those with good CSS kung fu could really make that a page professional looking entry point, should your application require it. Of course, you could build your own page using the dictionary view  APEX_APPL_USER_INTERFACES, and make it look however you want declaratively.

And of course, the page that initially opens will be the relevant home page URL for the user interface used, and the relevant login page should authentication be required.

The exact mechanics behind the detection is not known - David Peake wasn't sure off the top if his head when I asked him about it in Melbourne. If anyone knows, I'd be interested.
What he did suggest, however, is that Tablets will be available as a User Interface option in a future APEX release. I predict perhaps SmartTVs will also be a future option.

Scott

Thursday, 3 January 2013

2012 Blog Review

Last year I reviewed the outcomes of my blog, so I've decided to make it an annual event.

I tried hard this year to become a regular blogger, despite many things getting in the way. The key is certainly setting time aside and writing a bunch at the same time, scheduling them for later. This only takes me so far, since I have many ideas labelled in my e-mail, yet only a dozen or so currently in the schedule.

I've certainly found it rewarding. Blogging about Oracle has opened up a number of opportunities for me. It's also a useful way to affirm knowledge, and be a great reference for the future. I'm sure a number of hits are from me looking up information I know exists!

A telling metric is a comparison to last year - thank you to all my readers, old & new!
It seems late December is a quiet time...
According to Google Analytics, these are the top viewed pages for 2012

  1. APEX 4.2 Wish List - It seems a lot of people wanted a say in this, bring on APEX5
  2. Wrong number or types of arguments - a common error, perhaps?
  3. Modifying your APEX login page - simple post, but popular concept.
  4. APEX Tutorial - Form & Report sharing same page - another "grassroots" post
  5. Automating APEX backups from DB - I'm glad this one's popular
Notably, #3 & #4 were written in second half of 2011, and #5 was from February 2010.

Most visits were from (what I interpret to be) Google search, then direct. About the same from feedburner & apexblogs.info, and a fast growing number from Twitter - but a mere dent compared to Google search.
Notably, Bing is down the list - below ODTUG!

Again, the US constitutes most of my readers, with India becoming a new player. UK & Germany now rank above Australian visits, which is a pleasing sign to me that it's useful to others and not just friends of friends in my home country.

Browsers: Firefox, Chrome, IE respectively

Three times as many mobile devices as the year before, but still only a fraction. iPad by far most popular, followed closely by iPhone.

Search terms were interesting, and may help drive what I write about in 2013. I've tried to be more aware of SEO issues when constructing the posts and preparing meta-data. "oracle pivot" was most popular; searches involving upcoming versions always a mainstay; "pls-306" explains my 2nd most popular page; "apex tutorial" is what caught my eye; "paul verevis" from those searching for details of our fallen friend; "oracle apex performance" is down the list, something I'd like to see more frequent, along with "apex security"
Finally, I can see what would be mainly me: "site:grassroots-oracle.com some keywords"

Responsive Web Design
At some point we should also see APEX5, but potentially before that I might suggest another release that allows for a third user interface, allowing for design that suits the three major screen sizes shown above. 3-4", 7-10", and desktops - mobile, tablet, desktop.

So in 2013, keep an eye out for many little APEX tips; continued commentary in Thursday Thought; continued Oracle Community announcements; and my prediction - plenty of posts regarding APEX mobile and Responsive Web Design.
Should I find the time to mitigate ongoing frustrations, I will also increase the frequency of the Ubuntu tag. I also see a presentation coming out of this.

Scott

Monday, 17 December 2012

Webinar reminder - APEX Mobile

Just a quick reminder about a coming webinar on APEX mobile on 18th/19th December.

If the time zone suits you, it would be wonderful if you could join in

  • US west coast - noon
  • US east coast - arvo
  • Europe/Africa - PM
  • Australia east cost - AM
  • Australia west coast - too early, and you probably saw it at the Perth Conference ;-)
  • any other suitable regions I neglected to mention, my apologies

Register via ODTUG.

Scott

Wednesday, 28 November 2012

APEX 5.0 Statement of Direction

The Oracle Application Express statement of direction was just announce by David Peake, I thought I'd share some initial thoughts.
  1. Modal dialog - the use of Dan McGan's modal dialog plug-in has been an integral part of a recent project. For me the ability to declaratively define these would be akin to what dynamic actions has over writing JavaScript. I think it will important for workflow design particularly in tablet applications - but mobile/desktop will benefit in the reach-ability.
  2. Drag and Drop Layout Editor - Introduced in 3.0, removed in 4.2 (probably as a result of component view re-design) I didn't use this much, but with the advent of the grid layout, this feature will probably evolve into something quite useful.
  3. HTML5 Capabilities - many mobile presentations last year rightly commented on the importance of HTML5. The 4.2 release is a little under-cocked when it comes to native capabilities, so it will be interesting to see what they include. 
  4. PDF Printing - external reporting options have always been lean with APEX. It seems now the APEX Listener is evolving, so can the cohesiveness for FOP support.
  5. Web Services Support - another area that improves with the growth of the APEX Listener.
  6. Tablet User Interface - perhaps I was too forward thinking when I suggested TVs might be the next interface. Tablets are seemingly more ubiquitous than laptops these days, and it seems the three major devices sizes (in regard to screen/workflow design) are mobile; tablet; desktop - so it seems prudent to have a UI and features applicable to tablet devices.
  7. Packaged Applications - going hand-in-hand with the Oracle Cloud Service, of course this will improve. No doubt the APEX team also uses these applications as practice/alpha testing for future releases.
  8. New multi-row region type - wow. I'm racking my brain trying to imagine what this may look like - I have a few ideas, but I'll just keep re-reading their sentence: "Define a new region type with a modern UI for updating multiple rows of data and allow multiple regions on one page"
  9. Master / Detail / Detail - provid the ability declaratively define these - sure, why not. David seems to like them.
  10. Multiple Interactive Reports - I think this has been a long time coming for a few people, and it was only yesterday I imagined an a need that interested me - multiple smaller regions utilising only the Detail View.
  11. Application Builder Security - I heard David mention this at the APEXposed conference in Melbourne. I can see the yearn, but I don't particularly care. Though I'm sure I'd use it if it was there.
  12. Numerous functional improvements - they're usually the ones that quietly surprise us as we move around the builder.
Another thing to consider as David mentioned, if you have any particular features you would like in the next release - there is a APEX Feature Request application. Get in there - I've submitted a few myself. Maybe hit up the wish list forum thread for ideas.

If you read the PDF document linked on the SOD page, it also talks about Future Investment. Oracle APEX is the standard development tool included with Database Cloud Service, so APEX has an important future within Oracle. That an the ability for Larry to analyse his yachts...
BMW Oracle Racing Trimaran 
What happens when someone uses ADF on the boat </joke>
APEX is also a standard feature of the Oracle Database, therefore the support guidelines for APEX are similar to those for the DB.

Check out the support policy, too - for example, premier support for APEX 3.x expired in Feb 2012.

If you're interested, I've commented previously on this for 4.2 and 4.1, since this is now my predominant tool of choice. Maybe I'll look at those later and see how things have panned out.

Happy APEXing!

Scott

Monday, 19 November 2012

Webinar: A foray into APEX mobile

If you missed it, it's going to be ok!

For those unable to make it to the Perth conference this year, I will be presenting my session as a webinar on  the 18th December 2012 at
4pm - New York
9pm - UTC / London
(19th December)
5am - Perth (yes, I'm getting up early)
8am - Sydney/Melbourne
(timeanddate.com)

Register via ODTUG.

I've modified the abstract slightly considering the accompanying application was designed for the conference - feel free to have a play now - even play the buzzwords game.

A foray into APEX mobile

Mobile development had beginnings even prior to Oracle Application Express 4.x, but with 4.1 itching to be a true mobile development platform - only held back by the jQuery library - APEX 4.2 has arrived with it as standard armoury in the utility belt.

We asked delegates prior to the 2012 Perth AUSOUG Conference to visit the following site either on desktop or mobile device apex.oracle.com/pls/apex/f?p=SW2012 (via tinyurl.com/SW2012AUSOUG)

We encouraged them to register interest in presentations, then provide feedback on each session. It is essentially a prototype built specifically for the purpose of this presentation, but it became a valuable tool for the conference organisers, and will be improved & polished for next year.

Listen to this presentation to see how the sausage was made; what you may expect to see out of APEX mobile development in the future; and what you need to consider learning before putting on the stetson!
It will be interesting to see how the prezi style works as a webinar, because in person I find it's more engaging than powerpoint - as long as you don't make the movements too much.


Scott

Sunday, 4 November 2012

Presentation : A foray into APEX mobile

Here is the link for presentation I did at the 2012 Perth AUSOUG Conference - A foray into APEX mobile.

It will link you to Prezi, where you just click the arrow through.
(single frame from my Prezi)
It works better with a voice to go with, I might screen-cast it over YouTube sometime. I received some great feedback, thank you.

With this new style, I have more ideas to come - not limited to purely Oracle.

Scott

Categorizr for APEX - extended

Software evolves.

And I think it's going on right now. In April, Christian Rokitta blogged about Categorizr.

He adapted some PHP code from Brett Jankord and suited it to PL/SQL.

When I was building the mobile application for my AUSOUG presentation, I found it useful for statistics gathering... but I wanted more.

I added a few more functions, and included an object type to allow queries shown further below.
These functions broke/butchered the agent string further into
  • OS 
  • OS Version
  • Browser
  • Browser version
I think I've done well to cover the major data sets.
CREATE TYPE categorizr_agent_details IS OBJECT (
     agent                 VARCHAR2 (2000)
    ,device                VARCHAR2 (2000)
    ,os                    VARCHAR2 (2000)
    ,os_version            VARCHAR2 (2000)
    ,browser               VARCHAR2 (2000)
    ,browser_version       VARCHAR2 (2000)
   );
/

CREATE OR REPLACE PACKAGE categorizr
AS
   /******************************************************************************
      NAME:       categorizr
      PURPOSE:    detect web user agent device type

      Based on:
      Categorizr Version 1.1
      http://www.brettjankord.com/2012/01/16/categorizr-a-modern-device-detection-script/
      Written by Brett Jankord - Copyright © 2011

      REVISIONS:
      Ver        Date        Author           Description
      ---------  ----------  ---------------  ------------------------------------
      0.1        30- 3-2012  crokitta         Created this package.
      0.2        24-10-2012  swesley          Included browser/os gets
                                              With inspiration from http://barakhshan.wetpaint.com/page/detecting+os+and+browser+pl-sql
                                              and help from my own dataset. Doubtful all scenarios considered
   ******************************************************************************/
   g_tablets_as_desktops   BOOLEAN := FALSE; --If TRUE, tablets will be categorized as desktops
   g_smarttv_as_desktops   BOOLEAN := FALSE; --If TRUE, smartTVs will be categorized as desktops
   g_user_agent            VARCHAR2 (2000); -- User Agent String used for detection

   g_agent_details  categorizr_agent_details;

   FUNCTION get_agent_details(p_user_agent  VARCHAR2)
      RETURN categorizr_agent_details;

   FUNCTION get_category
      RETURN VARCHAR2;

   FUNCTION get_browser
      RETURN VARCHAR2;

   FUNCTION get_os
      RETURN VARCHAR2;

   FUNCTION isdesktop
      RETURN BOOLEAN;

   FUNCTION istablet
      RETURN BOOLEAN;

   FUNCTION istv
      RETURN BOOLEAN;

   FUNCTION ismobile
      RETURN BOOLEAN;

   /*
    The package is initialized automatically when called, trying to fetch the value of
    the HTTP_USER_AGENT, which naturally only succeeds when called through a web gateway.
    Additionally the package just offers a mean to test a user agent strings manually by
    passing the string with a procedure call
   */

   PROCEDURE set_user_agent (http_user_agent_string VARCHAR2 DEFAULT NULL);
END categorizr;
If you're interested in the package body, click as instructed
CREATE OR REPLACE PACKAGE BODY categorizr AS
   /******************************************************************************
      NAME:       categorizr
      PURPOSE:    detect web user agent device type

      REVISIONS:
      Ver        Date        Author           Description
      ---------  ----------  ---------------  ------------------------------------
      1.0        30-3-2012   crokitta         Created this package.
      0.2        24-10-2012  swesley          Included browser/os gets
   ******************************************************************************/


   FUNCTION preg_match (pattern    VARCHAR2,
                        subject    VARCHAR2,
                        switch     VARCHAR2 DEFAULT NULL)
      RETURN BOOLEAN
   IS
      l_pattern   VARCHAR2 (32767) := pattern;
      l_subject   VARCHAR2 (32767) := subject;
   BEGIN
      IF LOWER (switch) = 'i'
      THEN
         l_pattern := LOWER (l_pattern);
         l_subject := LOWER (l_subject);
      END IF;

      IF REGEXP_INSTR (l_subject, l_pattern) = 0
      THEN
         RETURN FALSE;
      ELSE
         RETURN TRUE;
      END IF;
   END;

   PROCEDURE set_category
   IS
   BEGIN
      CASE
         -- Check if user agent is a smart TV - http://goo.gl/FocDk
         WHEN preg_match ('GoogleTV|SmartTV|Internet.TV|NetCast|NETTV|AppleTV|boxee|Kylo|Roku|DLNADOC|CE\-HTML', g_user_agent, 'i')
         THEN
            g_agent_details.device := 'tv';
         -- Check if user agent is a TV Based Gaming Console
         WHEN preg_match ('Xbox|PLAYSTATION.3|Wii', g_user_agent, 'i')
         THEN
            g_agent_details.device := 'tv';
         -- Check if user agent is a Tablet
         WHEN (preg_match ('iP(a|ro)d', g_user_agent, 'i')
               OR preg_match ('tablet|tsb_cloud_companion', g_user_agent, 'i'))
              AND (NOT preg_match ('RX-34', g_user_agent, 'i')
                   OR preg_match ('FOLIO', g_user_agent, 'i'))
         THEN
            g_agent_details.device := 'tablet';
         -- Check if user agent is an Android Tablet
         WHEN preg_match ('Linux', g_user_agent, 'i')
              AND preg_match ('Android', g_user_agent, 'i')
              AND (NOT preg_match ('Fennec|mobi|HTC.Magic|HTCX06HT|Nexus.One|SC-02B|fone.945', g_user_agent, 'i')
               --or preg_match ('GT-P1000', g_user_agent, 'i')
               )
         THEN
            g_agent_details.device := 'tablet';
         -- Check if user agent is a Kindle or Kindle Fire
         WHEN preg_match ('Kindle', g_user_agent, 'i')
              OR preg_match ('Mac.OS', g_user_agent, 'i')
                AND preg_match ('Silk', g_user_agent, 'i')
         THEN
            g_agent_details.device := 'tablet';
         -- Check if user agent is a pre Android 3.0 Tablet
         WHEN preg_match (
                 'GT-P10|SC-01C|SHW-M180S|SGH-T849|SCH-I800|SHW-M180L|SPH-P100|SGH-I987|zt180|HTC(.Flyer|\_Flyer)|Sprint.ATP51|ViewPad7|pandigital(sprnova|nova)|Ideos.S7|Dell.Streak.7|Advent.Vega|A101IT|A70BHT|MID7015|Next2|nook',
                 g_user_agent,'i')
              OR preg_match ('MB511', g_user_agent, 'i')
                AND preg_match ('RUTEM', g_user_agent, 'i')
         THEN
            g_agent_details.device := 'tablet';
         -- Check if user agent is unique Mobile User Agent
         WHEN preg_match ('BOLT|Fennec|Iris|Maemo|Minimo|Mobi|mowser|NetFront|Novarra|Prism|RX-34|Skyfire|Tear|XV6875|XV6975|Google.Wireless.Transcoder', g_user_agent, 'i')
         THEN
            g_agent_details.device := 'mobile';
         -- Check if user agent is an odd Opera User Agent - http:--goo.gl/nK90K
         WHEN preg_match ('Opera', g_user_agent, 'i')
              AND preg_match ('Windows.NT.5', g_user_agent, 'i')
              AND preg_match ('HTC|Xda|Mini|Vario|SAMSUNG\-GT\-i8000|SAMSUNG\-SGH\-i9', g_user_agent, 'i')
         THEN
            g_agent_details.device := 'mobile';
         -- Check if user agent is Windows Desktop
         WHEN preg_match ('Windows.(NT|XP|ME|9)', g_user_agent, 'i')
              AND NOT preg_match ('Phone', g_user_agent, 'i')
              OR preg_match ('Win(9|.9|NT)', g_user_agent, 'i')
         THEN
            g_agent_details.device := 'desktop';
         -- Check if agent is Mac Desktop
         WHEN preg_match ('Macintosh|PowerPC', g_user_agent, 'i')
              AND NOT preg_match ('Silk', g_user_agent, 'i')
         THEN
            g_agent_details.device := 'desktop';
         -- Check if user agent is a Linux Desktop
         WHEN preg_match ('Linux', g_user_agent, 'i')
              AND preg_match ('X11', g_user_agent, 'i')
         THEN
            g_agent_details.device := 'desktop';
         -- Check if user agent is a Solaris, SunOS, BSD Desktop
         WHEN preg_match ('Solaris|SunOS|BSD', g_user_agent, 'i')
         THEN
            g_agent_details.device := 'desktop';
         -- Check if user agent is a Desktop BOT/Crawler/Spider
         WHEN preg_match ('Bot|Crawler|Spider|Yahoo|ia_archiver|Covario-IDS|findlinks|DataparkSearch|larbin|Mediapartners-Google|NG-Search|Snappy|Teoma|Jeeves|TinEye', g_user_agent, 'i')
              AND NOT preg_match ('Mobile', g_user_agent, 'i')
         THEN
            g_agent_details.device := 'desktop';
         -- Otherwise assume it is a Mobile Device
         ELSE
            g_agent_details.device := 'mobile';
      END CASE;

      -- Categorize Tablets as desktops
      IF g_tablets_as_desktops
      AND g_agent_details.device = 'tablet'
      THEN
         g_agent_details.device := 'desktop';
      END IF;

      -- Categorize TVs as desktops
      IF g_smarttv_as_desktops
      AND g_agent_details.device = 'tv'
      THEN
         g_agent_details.device := 'desktop';
      END IF;
   END;

   PROCEDURE set_browser
   IS
   BEGIN
      IF preg_match ('Opera', g_user_agent, 'i') THEN
        g_agent_details.browser := 'Opera';
        g_agent_details.browser_version := SUBSTR(g_user_agent, INSTR(g_user_agent, 'Opera/')+6);
        g_agent_details.browser_version := SUBSTR(g_agent_details.browser_version, 1, INSTR(REGEXP_REPLACE(g_agent_details.browser_version,'[.;]',')'), ')')-1);

      ELSIF preg_match ('MSIE', g_user_agent, 'i') THEN
        g_agent_details.browser := 'Internet Explorer';
        g_agent_details.browser_version := SUBSTR(g_user_agent, INSTR(g_user_agent, 'MSIE ')+5);
        g_agent_details.browser_version := SUBSTR(g_agent_details.browser_version, 1, INSTR(REGEXP_REPLACE(g_agent_details.browser_version,'[.;]',')'), ')')-1);

      ELSIF preg_match ('Chrome', g_user_agent, 'i') THEN
        g_agent_details.browser := 'Chrome';
        g_agent_details.browser_version := SUBSTR(g_user_agent, INSTR(g_user_agent, 'Chrome/')+7);
        g_agent_details.browser_version := SUBSTR(g_agent_details.browser_version, 1, INSTR(REGEXP_REPLACE(g_agent_details.browser_version,'[.;]',')'), ')')-1);

      ELSIF preg_match ('Firefox', g_user_agent, 'i') THEN
        g_agent_details.browser := 'Firefox';
        g_agent_details.browser_version := SUBSTR(g_user_agent, INSTR(g_user_agent, 'Firefox/')+8);
        g_agent_details.browser_version := SUBSTR(g_agent_details.browser_version, 1, INSTR(REGEXP_REPLACE(g_agent_details.browser_version,'[.;]',')'), ')')-1);

      ELSIF preg_match ('Safari', g_user_agent, 'i') THEN
        g_agent_details.browser := 'Safari';
        g_agent_details.browser_version := SUBSTR(g_user_agent, INSTR(g_user_agent, 'Safari/')+7);
        g_agent_details.browser_version := SUBSTR(g_agent_details.browser_version, 1, INSTR(REGEXP_REPLACE(g_agent_details.browser_version,'[.;]',')'), ')')-1);

      ELSE
        g_agent_details.browser := 'Other';
        g_agent_details.browser_version := NULL;
      END IF;
   END set_browser;

   PROCEDURE set_os
   IS
   BEGIN
      IF preg_match ('iPad|iPod|iPhone', g_user_agent, 'i') THEN
        g_agent_details.os := 'iOS';
        g_agent_details.os_version := SUBSTR(g_user_agent, INSTR(g_user_agent, ' OS ')+4);
        g_agent_details.os_version := SUBSTR(g_agent_details.os_version, 1, INSTR(g_agent_details.os_version, ' ')-1);

      ELSIF preg_match ('Windows', g_user_agent, 'i') THEN
        g_agent_details.os := 'Windows';
        g_agent_details.os_version := SUBSTR(g_user_agent, INSTR(g_user_agent, 'Windows ')+8);
        g_agent_details.os_version := SUBSTR(g_agent_details.os_version, 1, INSTR(REPLACE(g_agent_details.os_version,';',')'), ')')-1);

      ELSIF preg_match ('Mac OS', g_user_agent, 'i') THEN
        g_agent_details.os := 'Macintosh';
        g_agent_details.os_version := SUBSTR(g_user_agent, INSTR(g_user_agent, 'Mac OS X ')+9);
        g_agent_details.os_version := SUBSTR(g_agent_details.os_version, 1, INSTR(REPLACE(g_agent_details.os_version,';',')'), ')')-1);

      ELSIF preg_match ('RIM Tablet', g_user_agent, 'i') THEN
        g_agent_details.os := 'RIM';
        g_agent_details.os_version := SUBSTR(g_user_agent, INSTR(g_user_agent, 'RIM Tablet OS ')+13);
        g_agent_details.os_version := SUBSTR(g_agent_details.os_version, 1, INSTR(REPLACE(g_agent_details.os_version,';',')'), ')')-1);

      ELSIF preg_match ('Android', g_user_agent, 'i') THEN
        g_agent_details.os := 'Android';
        g_agent_details.os_version := SUBSTR(g_user_agent, INSTR(g_user_agent, 'Android ')+8);
        g_agent_details.os_version := SUBSTR(g_agent_details.os_version, 1, INSTR(REPLACE(g_agent_details.os_version,';',')'), ')')-1);

      ELSIF preg_match ('Linux', g_user_agent, 'i') THEN
        g_agent_details.os := 'Linux';
        g_agent_details.os_version := SUBSTR(g_user_agent, INSTR(g_user_agent, 'Linux ')+6);
        g_agent_details.os_version := SUBSTR(g_agent_details.os_version, 1, INSTR(REPLACE(g_agent_details.os_version,';',')'), ')')-1);

      ELSE
        g_agent_details.os := 'Other';
        g_agent_details.os_version := NULL;
      END IF;
   END set_os;

   FUNCTION get_agent_details(p_user_agent  VARCHAR2)
      RETURN categorizr_agent_details IS
   BEGIN
     -- override package initialisation
     set_user_agent(p_user_agent);
     RETURN g_agent_details;
   END get_agent_details;

   PROCEDURE set_user_agent (http_user_agent_string VARCHAR2 DEFAULT NULL)
   IS
   BEGIN
     g_agent_details := NEW categorizr_agent_details(null,null,null,null,null,null);
      g_user_agent := http_user_agent_string;

      IF g_user_agent IS NULL
      THEN
         BEGIN
            g_user_agent := OWA_UTIL.get_cgi_env ('HTTP_USER_AGENT');
         EXCEPTION
            WHEN OTHERS
            THEN
               g_user_agent := NULL;
         END;
      END IF;

      set_category;
      set_os;
      set_browser;
      g_agent_details.agent := g_user_agent;
   /*EXCEPTION
      WHEN OTHERS
      THEN
         g_user_agent := null;*/
   END;

   FUNCTION get_category
      RETURN VARCHAR2
   IS
   BEGIN
      RETURN g_agent_details.device;
   END;

   FUNCTION get_browser
      RETURN VARCHAR2
   IS
   BEGIN
      RETURN g_agent_details.browser;
   END;

   FUNCTION get_os
      RETURN VARCHAR2
   IS
   BEGIN
      RETURN g_agent_details.os;
   END;

   -- Returns true if desktop user agent is detected
   FUNCTION isdesktop
      RETURN BOOLEAN
   IS
   BEGIN
      IF g_agent_details.device = 'desktop'
      THEN
         RETURN TRUE;
      END IF;

      RETURN FALSE;
   END;

   -- Returns true if tablet user agent is detected
   FUNCTION istablet
      RETURN BOOLEAN
   IS
   BEGIN
      IF g_agent_details.device = 'tablet'
      THEN
         RETURN TRUE;
      END IF;

      RETURN FALSE;
   END;

   -- Returns true if SmartTV user agent is detected
   FUNCTION istv
      RETURN BOOLEAN
   IS
   BEGIN
      IF g_agent_details.device = 'tv'
      THEN
         RETURN TRUE;
      END IF;

      RETURN FALSE;
   END;

   -- Returns true if mobile user agent is detected
   FUNCTION ismobile
      RETURN BOOLEAN
   IS
   BEGIN
      IF g_agent_details.device = 'mobile'
      THEN
         RETURN TRUE;
      END IF;

      RETURN FALSE;
   END;
BEGIN
   set_user_agent;
   null;
END categorizr;
I've created an interactive report on visits data from that application: http://apex.oracle.com/pls/apex/f?p=SW2012:CATEGORIZR


This query used to generate that report
select 
   cnt
  ,categorizr.get_agent_details(v.agent).browser browser
  ,categorizr.get_agent_details(v.agent).browser_version b_version
  ,categorizr.get_agent_details(v.agent).os os
  ,categorizr.get_agent_details(v.agent).os_version os_version
  ,categorizr.get_agent_details(v.agent).device device
  ,categorizr.get_agent_details(v.agent).agent the_agent
from 
  (select agent, count(*) cnt from am_visits group by agent) v

If you were to utilise this package for production code, I would first check it for defects - then question your need to set the user agent in the package body.

I might also suggest that as this code matures, it could be added to the Alexandra PL/SQL Library, administered by Morten, expanded/updated by the masses, encouraging other utilities to come visiting.

Let me know if you find it handy or have any feedback. Thank you Christian & Brett for the boost.

Scott

Friday, 26 October 2012

Easter egg added to mobile app


I've added an easter egg to the mobile application that's accompanying my presentation at the Perth #AUSOUG conference.

If you can find it you will see the answer to an eyebrow-raising trivia question I'll ask at the end of my session. I'll try find something to give away.

At the SAGE booth We'll also have a game you can play with a mobile web browser - more details to come!


Monday, 22 October 2012

Demo Mobile APEX application for AUSOUG

The 2012 Perth AUSOUG Conference is less than a week away and it's time for an announcement.

This year I'm presenting "A Foray into APEX mobile", which will be a look into the 4.2 release. Accompanying this will be a demonstration application (apex.oracle.com/pls/apex/f?p=SW2012) that allows you to explore the conference sessions from your desktop or mobile device.

My presentation will investigate how this sausage was made; then talk about some of the considerations you'll need to take when exploring the world of mobile development. It will also be powerpoint free :-)

The application isn't super beautiful, I only use the stock theme - and I won't guarantee the application is defect free - in fact you may even encounter some APEX 4.2 bugs. I will however do my best to ensure the session times are up-to-date.

Please feel free to explore the application before & during the conference - in fact, I encourage all of you attending the conference to do three things

  1. explore the application to help decide which sessions to attend
  2. use the links to indicate which sessions you are interested in (or not interested)
  3. after you attend each session, use the links to provide feedback on what you thought
The conference committee will be interested in the results. We will be promoting the application during the conference & reminding delegates after each session to provide feedback. We plan to formalise & extend the application for next year and integrate it with other services. 

To those not fortunate enough to be in Perth for the conference this year, I welcome your ideas & hope to see you in the future.

Scott Wesley
Program Chair
2012 Perth AUSOUG Conference

Friday, 5 October 2012

Create Mobile Accordion with APEX 4.2

It's been a while since I posted some developer content, and I've been playing with APEX 4.2 a fair bit recently - preparing for my conference presentation.

I thought I'd share how I implemented a mobile (smartphone/gadget) accordion sourced from SQL.

I say the because you can do it out of the box using region templates, but only compressing multiple regions together, not rows from a query
Region options
APEX 4.2 Mobile Region templates
There seems to be many ways to skin the cat in APEX 4.2, and this is one way to do it - I'm happy to learn easier ways - I'm sure I will do that for a few things along the mobile journey!
Samsung 3 Screenshot of collapsible accordion
Samsung 3 Screenshot
Consider the following SQL as my list, where column am_info_vw.header shows the accordion heading, and am_info_vw.my_html is the content.
select 
  null lvl
 ,header label
 ,my_html target
 ,decode(rn,1,'YES') is_current
 ,header image
 ,my_html image_attrib
 ,null img_alt
FROM am_info_vw
order by rn
The List Template image shows me commandeering the image attributes, but the same result can be made with the #TEXT# & #LINK# substitution strings.
Template properties
List Template
List Template Current:
<div data-collapsed="false" data-role="collapsible" data-collapsed="false">
<h3>
<code>#TEXT#</code></h3>
<code>#LINK#</code></div>
List template non-current (just excludes the data-collapsed):
<div data-collapsed="false" data-role="collapsible">
<h3>
<code>#TEXT#</code></h3>
<code>#LINK#</code></div>
Before List Entry:
<div data-role="collapsible-set">
After List Entry closes the </div>

Then I just had to define the region on my mobile page utilising that template for the list with a plain region template, job done.

I'm still learning various options in the 4.2 environment, but this may seem like an easier method to create dynamic content lists instead of using the Advanced Attributes option in the List View built-in plug-in.

To help me out with the required syntax, I used the jQuery Mobile Docs.

Friday, 20 January 2012

2012 - Preparation meets opportunity

"Luck is what happens when preparation meets opportunity." - Seneca

This came on the back of a conversation today with a friend of mine, he sent me an e-mail with another quote from Seneca, a 1st century Roman philosopher - and as I started to write this post I thought it tied in well this post from Michael Crump that I found in my twitter feed - 11 Things every Software Developer should be doing in 2012.

I thought I'd add my mentations...

  1. Get on Twitter - I did this in 2011. I was reluctant at first - another social media stream? Twitter, really? I was slow at first, but now I'm seeing it's value. Aside from the reasons Michael provided, it's a great networking tool.
  2. Read StackOverflow daily - I haven't been able to get into StackOverflow. I think I'm getting plenty of that information from other sources when I can. Certainly as a beginner I would recommend sites like that, but as the cynical "Dirt" commenter suggested - asking is good, answers - not so much. I can't say I'm fluent enough to know how much chaff is in the responses, but when I was learning I went to an authoritative source - AskTom.
  3. Start a blog - I'm not sure if I'm prepared to do that ;-)
  4. Get out there - I agree 100% Your local user group is a great start. Here in Australia, AUSOUG holds regular events in many states. In WA we try to have a seminar once a month, and we have our annual conference series. Networking gold - plus you learn stuff alone the way and get free beer & pizza ;-)
  5. Carry around a modern phone - While I don't agree with the judgement of people based on what they own, use or wear, it is certainly a useful device in many ways - and just another way to help stay in touch with the industry.
  6. Embrace mobile - His comments about every developer will create a mobile app - really? I don't want to sound lacking in foresight, but surely with the vast array of programming languages around (pardon the pun), many programmers will be successful without going near a contemporary phone. That being said, in the Oracle world - 2012 will be the year of the mobile - think about what's coming in Apex 4.2
  7. Learn at least one design pattern - I'm not sure how applicable this is to the Oracle world. Instead, perhaps study database design a little closer.
  8. Set reachable goals each and every year - Goal setting is a big can of worms. True, I set myself goals, but I don't beat myself up if something gets in the way. Last year I aimed to learn Ubuntu, that's been very slow going. However, along the way I've taken grasp of many other opportunities. And I might look at it more this year, along with plug-ins and mobile.
  9. Learn a different programming language - This could be tough, however I encountered Code Academy recently, and if I get into gear I might use it to become more proficient with JavaScript.
  10. Boost your confidence - I agree with "Dirt" - no brainer. Trouble is, for some it isn't. I was adolescent once battling depression, and it doesn't necessarily come easy. The first time I changed employer I wasn't confident either - just keep your eyes open and be aware.
  11. Read blogs/programming books/magazines - Highly recommended. I have a collection of RSS feeds now, or you could just visit aggregators such as apexblogs.info or orana.info. I have a few programming books on the go, including technical reviews which are win-win. And surely you've subscribed to the Oracle magazine in some form? Don't limit yourself to Oracle or programming sources either. I have many feeds related to my science based interests, and I learn writing skills from them also - besides they can be fun to read.
What do you reckon? Any other big ones not listed?

Scott


And no, the world will not end this year.

Friday, 18 November 2011

APEX 4.2 Statement of Direction

At the end of September the Oracle APEX development team updated the statement of direction for Application Express 4.2

Update
APEX 4.2 wishlist on Oracle Forums, monitored by APEX product development.
My 2012 new year blog post on the topic.

The list is somewhat smaller than the SOD for 4.1, but it seems like it will be a release that will tie off some loose ends, perhaps allowing the development team to think of grander plans for 5 - or is that wishful thinking?
No, I wouldn't be surprised if there is a 4.3 and maybe a 4.4 first...

Not forgetting the fact that version numbers are probably quite arbitrary and assist marketing more than being a true reflection of functional content. (There are no hard facts here, in fact I couldn't find the article I was going to link to suggesting this notion...)

As for the points in the SOD:
  • Mobile applications - the only delay in this being included in 4.1 was Oracle waiting for jQuery Mobile to be production ready (announcement of readiness made today!) - not Apex. This is a switch waiting to be flicked.
    I saw someone recently suggest 4.2 will be released in first half of 2012 - but do you think I can remember which particular social media mentioned that?
  • Charts - I'm not currently a heavy user of charts, but I'm sure the newer HTML 5 features will be a dream for many. I wonder though if the Apex team will add more declarative options for the AnyChart features - instead of forcing the developer to rely on customising the XML.
  • Web services - I'm not currently a heavy user of web services, either. But I know many clients who would love a more declarative & secure nature to web services within Apex.
  • Application Deployment - to me, this is what desperately needs the most attention in Apex. I have some thoughts on this that I may share in a future post.
  • Functional/performance improvements - aren't there always? I must say I like discovering the random little features dotted around the development environment.
    And I simply won't say no to even better performance.
If the APEX line-up in KScope 12 is any indication, I think next year is going to be when I really get into mobile programming with APEX.

Scott