Firefox/Chrome users are not happy with Windows 10 feature

Which Web browser do you use on your computer? If it’s Firefox or Chrome, you probably won’t appreciate what Windows 10 does when you install it. In fact the CEO of Mozilla, the company that makes Firefox, has penned a scathing open letter to Microsoft CEO Satya Nadella.

Chris Beard, CEO of Mozilla, is irked that when users install Windows 10 using “Express settings,” the new Microsoft operating system makes its new browser, named Edge, the default Web browser.

It doesn’t matter if your default browser was Firefox (or Chrome) prior to the installation; you’re getting Edge. And it’s not as simple to change your default browser as it used to be.

One way to keep (or change) your default browser is to choose “Custom” settings instead of “Express” settings during your Windows 10 installation; this will let you pick your default browser during the installation. But if you’ve already upgraded, you might expect the usual “Firefox is not currently set as your default browser. Would you like to make it your default browser?” prompt. That’s always worked before, but with Windows 10 there are a couple more steps to back away from the Edge.

To change your default browser from Microsoft Edge, open up your browser of choice. When you see the prompt asking if you’d like Firefox or Chrome to be your default browser, affirm that you would by clicking the “Use Firefox/Chrome as my default browser” button.

The “Settings” app will launch with the “Choose default apps” tab open. Scroll down to where it says “Web browser” and click on Microsoft Edge. You’ll then see all the browsers on your PC, and you can choose your favorite as the default.

It doesn’t take much work, really, but the process isn’t exactly intuitive. As the Mozilla chief wrote to the Microsoft chief, “It’s confusing, hard to navigate and easy to get lost.”

Still, it’s understandable that Microsoft wants you to use its new browser on the free operating system it just gave you.

Thanks to KIMKOMANDO

Materialized Views–NO DATA FOUND

Thanks to Alex Nuijten

http://nuijten.blogspot.ae/2015/04/refresh-multiple-materialized-views-in.html

To refresh multiple Materialized Views you can use the DBMS_MVIEW package, with the procedure aptly named Refresh. One method is to provide a comma-separated list of Materialized View names, or you can use an DBMS_UTILITY.UNCL_ARRAY to achieve the same objective.
When using the latter method, I stumbled upon this oddity (which is not in the current documentation, or at least I couldn’t find it).

The procedure that I initially wrote was the following:

1
2
3
4
5
6
7
8
9
10
11
create or replace
procedure refresh_mviews
is
   l_mviews dbms_utility.uncl_array;
begin
   l_mviews(1) := 'ABC_MV';
   l_mviews(2) := 'DEF_MV';
   l_mviews(3) := 'GHI_MV';  
   dbms_mview.refresh (tab => l_mviews);
end refresh_mviews;
/

On line 4 a local variable is declared on the type DBMS_UTILITY.UNCL_ARRAY. The declaration of this type is

1
TYPE uncl_array IS TABLE OF VARCHAR2(227) INDEX BY BINARY_INTEGER;

On lines 6 through 8 the array is filled with the names of the Materialized Views that I want to refresh.
The actual refresh is done on line 9.

When executing the code above, the following exception is raised:

1
2
3
4
5
6
7
8
9
Error report -
ORA-01403: Geen gegevens gevonden.
ORA-06512: in "SYS.DBMS_SNAPSHOT", regel 2809
ORA-06512: in "SYS.DBMS_SNAPSHOT", regel 3025
ORA-06512: in "ALEX.REFRESH_MVIEWS", regel 13
ORA-06512: in regel 2
01403. 00000 -  "no data found"
*Cause:    No data was found from the objects.
*Action:   There was no data from the objects which may be due to end of fetch.

Strange…

After some googling I found some old documentation (from Oracle 9i) describing the functionality of the REFRESH procedure in the DBMS_MVIEW pacakge:

If the table contains the names of n materialized views, then the first materialized view should be in position 1 and the n + 1 position should be set to NULL.

This explains the exception that is being raised.

Adding line 9 in the code below fixes this problem:

1
2
3
4
5
6
7
8
9
10
11
12
create or replace
procedure refresh_mviews
is
   l_mviews dbms_utility.uncl_array;
begin
   l_mviews(1) := 'ABC_MV';
   l_mviews(2) := 'DEF_MV';
   l_mviews(3) := 'GHI_MV';  
   l_mviews(4) := null;
   dbms_mview.refresh (tab => l_mviews);
end refresh_mviews;
/

APEX 5 New Substitution Features

Thanks to Roels Blog

You’ve probably all heard about XSS, a.k.a. Cross Site Scripting. One of the ways you make yourself vulnerable to XSS is by creating JavaScript in your APEX applications that accepts unescaped user input – either direct or data retrieved from the database.

As a – very stupid and simple – example, create a Page with a Text Item (say P3_TEXT).  Next create a Dynamic Action that executes this snippet of Javascript on Page Load :

alert(“You entered &P3_TEXT.”)

When you now enter some text like “Hello world” and submit the page, the response is an alert box with “You entered Hello world“. But now enter something like:

the dark world”);window.open(“http://www.google.com

This looks like half a piece of code – and in fact it is. It is completed by the (other) Javascript snippet that’s using this snippet as input. Now you get an alert saying “You entered the dark world” and an extra window is opened showing the Google search page. That’s quite harmless, but you can invoke any JavaScript – also loading additional data and scripts from other servers etc… So you have to protect your application for this kind of hack. And of course there are many ways to do so, like escaping the value in JavaScript. 

But in APEX 5 you’ve got a new and simple option: Use the Extended Substitution Syntax. So instead of &P3_TEXT. , you should use &P3_TEXT!JS. So including the ampersand the exclamation mark and the dot at the end… Now the input text is properly escaped – and harmless ;-). Just like a call to theapex_escape.js_literal function would do.

There are more variants on this “Extended Substitution Syntax” theme: 

&P3_TEXT!HTML. => escape all HTML, like the apex_escape.html function

&P3_TEXT!ATTR. => escape all HTML attribute values, like the apex_escape.html_attribute function

&P3_TEXT!RAW. => Don’t escape (so dangerous….) 

So in APEX 5 you’ve got even more possibilities to make your application secure – and less excuses 😉