When we talk about program design we're mainly talking about interface design. The interface is the part of our program that the users interact with. Normally discussion of UI focuses on GUI or UX, that is, the interface with the end user of our application.
But developers are users too.
Another developer writing a program which calls a routine in my program is a user of my code (and, I must remember, six months after (more...)
Obviously Interface Segregation is crucial for implementing restricted access. For any given set of data there are three broad categories of access:
- administration and governance
So we need to define at least one interface - packages - for each category in order that we can grant the appropriate access to different groups of users: read-only users, regular users, power users.
But there's more to Interface Segregation. This example is based on a procedure (more...)
Consider a chart with a trend that might be quite jagged across data points (blue line).
What if you would like a smoother version of that line - a moving average
, if you will (red line). This stabilises the results, like looking at climate vs weather
|Oracle APEX Line Chart - 2 series|
It's fairly easy from a SQL point of view - in this case it's another column in the original chart query
Oracle Database 12c enables enhanced security for extproc by authenticating it against a user-supplied credential. This new feature allows the creation of a user credential and links it with a PL/SQL library object. Whenever an application calls an external procedure, the extproc process authenticates the connection before loading the shared library. The DBMS_CREDENTIAL package is … Continue reading
I have been out giving talks again on using agile methods for data warehouse and business intelligence projects, so I thought it was time for me to share my thoughts about the 4 key elements you need to be successful with an Agile DW project in 2016. Adopt an Agile Methodology By this I am talking […]
Recently I saw a simple, accepted answer in the forums that tempted me to provide a small extension to the provided answer. This has since spawned two blog post ideas, here is the first.
The following question asked how to hide the spinner from a particular page full of small reports refreshed on a timer.https://community.oracle.com/thread/3908020
The answer was some basic CSS, which could be placed in a variety of locations depending (more...)
Getting older, it’s getting harder to see and click those tiny checkboxes…
/* Double-sized Checkboxes */
-ms-transform: scale(2); /* IE */
-moz-transform: scale(2); /* FF */
-webkit-transform: scale(2); /* Safari and Chrome */
-o-transform: scale(2); /* Opera */
CAN YOU SEE THEM NOW? Ah, good. That’s all right then.
Brought to you by dept-of-coding-by-copy-and-paste.
Filed under: APEX
Recently I got involved in a question on Temporal Validity Periods together with Chris Saxon, one of the askTom-answer team.
The question was along the lines of: "What if I have a single start date but two possible end dates. One of the end dates is filled automatically by a background proces (could be a job) while the other one is to signal that the end date is set manually by the user. Could you (more...)
Designing PL/SQL Programs is a succession of articles published the articles in a nonlinear fashion. Eventually it will evolve into a coherent series. In the meantime this page serves as a map and navigation aid. I will add articles to it as and when I publish them.
IntroductionDesigning PL/SQL Programs
Principles and PatternsIntroducing the SOLID principlesIntroducing the RCCASS principlesThe Dependency Inversion Principle: a practical example
Tools and Techniques
These design principles may seem rather academic, so let's look at a real life demonstration of how applying Dependency Inversion Principle lead to an improved software design.
Here is a simplified version of an ETL framework which uses SQL Types in a similar fashion to the approach described in my blog post here
. The loading process is defined using an abstract non-instantiable Type like this:
create or replace type load_t force as object
( txn_date (more...)
If you need TranslationHub (Windows only) for your forms and reports development and plan to move to one of the following
- 12c Database for your TranslationHub repository
- 12c Forms/Reports (only available for 64 bit Windows)
- higher version of 64 bit 11g Forms/Reports
then please immediately stop! None of this combination works with TranslationHub!
For the last point I had created enhancement request 14155931 back in June 2012!
For the first point I had created a service request (more...)
Looking for way to apply analytical functions to your APEX applications?
I had a classic report where I wanted to dynamically source the column headers from counts in the database (values in brackets).
The ability to do this has been a feature of APEX for a while, but this was the first time I did it in APEX 5.0.
|Customise headers via Region attributes|
With Connor's recent spate of analytics videos
, I thought (more...)
I'm back after one of the best ocean voyages ever - the OUGN Spring Conference 2016
. That conference is arranged by Oracle User Group Norway and is two days from Thursday before lunch-time to Saturday before lunch-time. The special thing is, that it all happens on board a cruise ship that uses 20 hours to sail from Oslo, Norway to Kiel, Germany - stays in Kiel 4 hours - then 20 hours to sail back. (more...)
I posted my Three Laws of Office Life
a long while back. Subsequent experience has revealed another one: Every office kitchen which has a sign reminding people to do their washing-up has a concomitant large pile of unwashed crockery and dirty cutlery.
People wash their own mug and cereal bowl, but are less rigorous with the crockery from the kitchen cupboard. This phenomenon will be familiar to anybody who has shared a house during their (more...)
Rob C Martin actually defined eleven principles for OOP. The first five, the SOLID principles, relate to individual classes. The other six, the RCCASS principles, deal with the design of packages (in the C++ or Java sense, i.e. libraries). They are far less known than the first five. There are two reasons for this:
- Unlike "SOLID", "RCCASS" is awkward to say and doesn't form a neat mnemonic.
- Programmers are far less interested in (more...)