<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-20567072</atom:id><lastBuildDate>Mon, 21 May 2012 06:11:04 +0000</lastBuildDate><category>LOUD</category><category>APEX 4.0</category><category>Collaborate</category><category>Expert APEX book</category><category>jQuery</category><category>MySQL</category><category>XML-DB</category><category>Designer</category><category>Dublin</category><category>VirtualBox</category><category>APEX 4.0; OGH</category><category>APEX</category><category>Oracle</category><category>ORCAN</category><category>DOAG</category><category>Google</category><category>ODTUG</category><category>KScope; APEX</category><category>APEX 4.0; OBUG</category><category>KScope</category><category>APEXposed</category><category>PlugIn</category><category>OBUG</category><category>AnyCharts</category><category>SQL Developer</category><category>EBS</category><category>UKOUG</category><category>Oracle Scene</category><category>BI Publisher</category><category>Forms</category><category>OOW</category><category>XFILES</category><category>Blog</category><category>HTML5</category><title>Roels Blog</title><description /><link>http://roelhartman.blogspot.com/</link><managingEditor>noreply@blogger.com (Roel)</managingEditor><generator>Blogger</generator><openSearch:totalResults>251</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/RoelsBlog" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="roelsblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-1356929297640556556</guid><pubDate>Tue, 10 Apr 2012 09:44:00 +0000</pubDate><atom:updated>2012-04-10T11:46:43.426+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HTML5</category><category domain="http://www.blogger.com/atom/ns#">APEX</category><title>5 Cool Things you can do with HTML5 (p4)</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-BMkdAe2Vm9Q/T4PyUDVLahI/AAAAAAAAAzw/HB-Tiv5gnuc/s1600/messagescreens.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://3.bp.blogspot.com/-BMkdAe2Vm9Q/T4PyUDVLahI/AAAAAAAAAzw/HB-Tiv5gnuc/s320/messagescreens.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
The fourth part of this series of posts will cover &lt;b&gt;&lt;u&gt;Notifications&lt;/u&gt;&lt;/b&gt;. When you are a user of GMail and using Chrome, you probably are familiar with those little boxes that popup when you've got new mail. Those type of notifications you can create in your APEX application as well - using HTML5!&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;
Alas, at this moment, these type of notifications only work in Chrome. In Firefox you can add &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/html-notifications/" target="_blank"&gt;this extension&lt;/a&gt; so it'll work in that browser as well. The other ones will follow - sooner or later...&lt;br /&gt;
You can also use &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/notification-v-1-0-157692.zip" target="_blank"&gt;this plugin&lt;/a&gt; that mimics this feature - to be safe on every platform, but that one will appear in your browser, so that's not a &lt;b&gt;desktop &lt;/b&gt;notification.&lt;br /&gt;
&lt;b&gt;But how do you create a real desktop notification?&lt;/b&gt;&lt;br /&gt;
As usual with HTML5, you just need a few lines of code. The code below is executed in a Dynamic Action when a button is pressed:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;function RequestPermission (callback) {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;window.webkitNotifications.requestPermission(callback);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;function showNotification(){&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;if (window.webkitNotifications){&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; if (window.webkitNotifications.checkPermission() &amp;gt; 0) {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; RequestPermission(showNotification);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; else {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; window.webkitNotifications.createNotification(&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; "#APP_IMAGES#HTML5.jpg", //Put link to your icon here&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; "Notification",&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; "Now you are notified!").show();&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;else&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;{ alert('Sorry, you have to switch to another browser to use notifications - or use the other button ;-)');&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;//Run:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;showNotification();&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
Just like geoLocations, the browser has to ask the user for permission to use Desktop Notifications (for a domain). Once the permission has been granted you can call the "show()" method, containing an image, the title and the actual message. Easy and cool, huh!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
And you can even get completely wild by creating notifications that contain HTML or adding event listeners to your notifications - for instance doing something when the notification is closed. See &lt;a href="http://www.html5rocks.com/en/tutorials/notifications/quick/" target="_blank"&gt;this &lt;/a&gt;for some more examples.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
See the working APEX example on :&amp;nbsp;&lt;a href="http://apex.oracle.com/pls/apex/f?p=HTML5:NOTIFICATIONS"&gt;http://apex.oracle.com/pls/apex/f?p=HTML5:NOTIFICATIONS&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-1356929297640556556?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2012/04/5-cool-things-you-can-do-with-html5-p4.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-BMkdAe2Vm9Q/T4PyUDVLahI/AAAAAAAAAzw/HB-Tiv5gnuc/s72-c/messagescreens.gif" height="72" width="72" /><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-8341319264996977660</guid><pubDate>Fri, 06 Apr 2012 12:01:00 +0000</pubDate><atom:updated>2012-04-06T14:01:02.100+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HTML5</category><category domain="http://www.blogger.com/atom/ns#">APEX</category><title>5 Cool Things you can do with HTML5 (p3)</title><description>&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" height="212" src="http://1.bp.blogspot.com/-NveCHo1uiGA/T32cuqVB3xI/AAAAAAAAAzo/26keGyjCcXU/s320/Location-map.jpeg" width="320" /&gt;&lt;/div&gt;
&lt;i&gt;Location, location, location, it's all about location...&lt;/i&gt;
&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;
Probably one of the most frequently used HTML5 features is geoLocation. Why? Because it is very easy to use and cool too!&lt;br /&gt;
You can check the corresponding example page on&amp;nbsp;&lt;a href="http://apex.oracle.com/pls/apex/f?p=HTML5:GEOLOCATION" target="_blank"&gt;http://apex.oracle.com/pls/apex/f?p=HTML5:GEOLOCATION&lt;/a&gt;.&lt;br /&gt;
So how does that work?&lt;br /&gt;
In fact it is just a few lines of code. First include the Google Javascript API (&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;). &lt;br /&gt;
The next step (on Page Load) is to actually get the current position of the browser device by&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;if (navigator.geolocation) {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; navigator.geolocation.getCurrentPosition(showLocation, handleError);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;} else {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; error('GeoLocation is not supported in this browser');&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
Where &amp;nbsp;&lt;b&gt;showLocation&lt;/b&gt;&amp;nbsp;specifies the callback method that retrieves the location information. This method is called asynchronously with an object corresponding to the&amp;nbsp;&lt;b&gt;Position&lt;/b&gt;&amp;nbsp;object which stores the returned location information. So you can use this function to actually draw the map and place the marker. And&amp;nbsp;&lt;b&gt;ErrorHandler&lt;/b&gt;&amp;nbsp;is an optional parameter that specifies the callback method that is invoked when an error occurs in processing the asynchronous call. This method is called with the&amp;nbsp;&lt;b&gt;PositionError&lt;/b&gt;&amp;nbsp;object that stores the returned error information. So when somethings goes wrong you can show an alert with your own message.&lt;br /&gt;
Depending on the security settings of the browser, your user might see a message like "apex.oracle.com wants to track your physical location". The user has to accept or deny access to this information. In the privacy settings of your browser you can see what sites have access to your location.&lt;br /&gt;
&lt;br /&gt;
And for actually determining your position, Google uses either your IP-address - so that might be quite inadequate when you use proxies - or the GPS in your (mobile) device. For the latter type of device you can also use&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;navigator.geolocation.watchPosition(showLocation, handleError);.&lt;/span&gt;&amp;nbsp;Then that function will be called every time the Geo of your device changes. So you can draw a map of where the user of your app has been during the period the app is active (like &lt;a href="http://runkeeper.com/" target="_blank"&gt;Runkeeper&lt;/a&gt;&amp;nbsp;does).&lt;br /&gt;
&lt;br /&gt;
You can see the full W3C API description &lt;a href="http://dev.w3.org/geo/api/spec-source.html" target="_blank"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-8341319264996977660?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2012/04/5-cool-things-you-can-do-with-html5-p3.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-NveCHo1uiGA/T32cuqVB3xI/AAAAAAAAAzo/26keGyjCcXU/s72-c/Location-map.jpeg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-3147723078800277661</guid><pubDate>Wed, 04 Apr 2012 13:05:00 +0000</pubDate><atom:updated>2012-04-04T15:08:24.606+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HTML5</category><category domain="http://www.blogger.com/atom/ns#">APEX</category><title>5 Cool Things you can do with HTML5 (p2)</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-Ujdw7Gnzvq8/T3w5x-J65LI/AAAAAAAAAzg/9Ah2aPixuIA/s1600/Webstorage.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="116" src="http://1.bp.blogspot.com/-Ujdw7Gnzvq8/T3w5x-J65LI/AAAAAAAAAzg/9Ah2aPixuIA/s320/Webstorage.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
As promised in the&lt;a href="http://roelhartman.blogspot.co.uk/2012/04/5-cool-things-you-can-do-with-html5-p1.html"&gt; previous post in this series&lt;/a&gt;, this one will be about Web Storage.&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
Before the HTML5 era, you could store information on the client (browser) using a cookie. But that has two disadvantages (or limitations). First of all, a cookie's size is limited to 4096 bytes (but that differs over the different browsers and versions) and secondly - even more important - is that a cookie is always sent with every HTTP request, resulting in more data being sent over the wire. And that reduces scalability and decreases performance.&lt;/div&gt;
&lt;div&gt;
Using HTML5 you can use another type of storage, or even two types: sessionStorage and localStorage. In most browsers the storage is limited to 2.5Mb, but some go up to 5Mb or even unlimited. See &lt;a href="http://dev-test.nemikor.com/web-storage/support-test/" target="_blank"&gt;this page&lt;/a&gt; for all limits per browser. And it is important to know that sessionStorage lives as long as your browser/tab is open - and is deleted on close, while localStorage stays on the client - even after a shutdown of the machine.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
In a storage only key-value pairs are stored - so it's a sort of NOSQL ;-) . You can add or replace a value in your store using&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;localStorage.setItem("test", "12345");&lt;/span&gt; or shorter : &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;localStorage.test="12345";&lt;/span&gt; You can even leave the quotes out, while all values are stored as text anyway.&lt;/div&gt;
&lt;div&gt;
And similar, you can retrieve a value using&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;localStorage.getItem("test");&lt;/span&gt; or &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;localStorage.test;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
One more thing: you can only access contents of the storage in a page when the storage is created from the same domain - so no cross domain sharing of data!&lt;/div&gt;
&lt;div&gt;
You see the contents of the storage from a domain, by opening up the Javascript console and issue the localStorage command and inspect the contents of the object.&lt;i&gt;&amp;nbsp;&lt;/i&gt;Or, in Chrome, open up the Developer Tools (Ctrl-Shift-I) and check the Resources tab. The users of the&lt;a href="http://apex.oracle.com/pls/apex/f?p=APEX_DEVELOPER_ADDON:ABOUT:0:::::" target="_blank"&gt; APEX Developer Addon&lt;/a&gt; will see that this (nice!) tool uses the localStorage feature as well...&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
You see the full W3C defintion on Web Storage&amp;nbsp;&lt;a href="http://dev.w3.org/html5/webstorage/#the-storage-event"&gt;here&lt;/a&gt;.
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;How could this be useful in an APEX environment?&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
When you want to welcome a user back, with a message like "Nice to see you back, we haven't seen you since &amp;lt;some date/time&amp;gt;", you can store that last date in the database. But then a user needs a login, otherwise you wouldn't recognize him. If you store that information in the localStorage, you can use that to say hello again - assuming he didn't remove the localStorage and he uses the same browser ;-)&lt;/div&gt;
&lt;div&gt;
A more sophisticated use could be, when you think of a webshop. A lot of people do "window shopping" on the net: filling up their virtual baskets with stuff...but never proceed to the counter. If you issue some kind of submit or AJAX call, every time a user adds something to his basket, you get a lot of network traffic and database processing for...what? For nothing actually. So when you keep this shopping on the client side, and submit the contents of the localStorage.basket to the database if &amp;nbsp;and only if the user presses the [proceed to checkout] button, you maximize the use of your resources. Positive impact on scalability and performance!&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
See a working example on :&amp;nbsp;&lt;a href="http://apex.oracle.com/pls/apex/f?p=HTML5:LOCALSTORAGE" target="_blank"&gt;http://apex.oracle.com/pls/apex/f?p=HTML5:LOCALSTORAGE&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Next post will be about ... GeoLocation!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-3147723078800277661?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2012/04/5-cool-things-you-can-do-with-html5-p2.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-Ujdw7Gnzvq8/T3w5x-J65LI/AAAAAAAAAzg/9Ah2aPixuIA/s72-c/Webstorage.jpg" height="72" width="72" /><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-3008766752640958894</guid><pubDate>Mon, 02 Apr 2012 14:03:00 +0000</pubDate><atom:updated>2012-04-02T16:05:04.186+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HTML5</category><category domain="http://www.blogger.com/atom/ns#">APEX</category><title>5 Cool Things you can do with HTML5 (p1)</title><description>Recently I did a presentation with the title "&lt;i&gt;5 cool things you can do with HTML 5&lt;/i&gt;". I even did that presentation 3 times within a week: OUG Ireland had the premiere, then OUG Norway and OGH APEX Day as the last one of the week. I've planned the same - or similar - presentation for the upcomig Collaborate&amp;nbsp;and OUG Bulgaria conferences.&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
As the most stuff I present is demo (the slide deck is just 5 pages), people frequently ask whether I could write blogpost on one of the subjects. So why not create a sequence of 5 posts....that should make sense.&lt;/div&gt;
&lt;div&gt;
So this is that first of five posts. I hope, not promise, to finish it within a week or two...&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;Cool thing 1 - Input Types&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-gz8rIGymC7I/T3ibUcjBycI/AAAAAAAAAzU/FcH2m5v4EC8/s1600/IMG_0190.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-gz8rIGymC7I/T3ibUcjBycI/AAAAAAAAAzU/FcH2m5v4EC8/s320/IMG_0190.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;
With HTML5, you can use both new Input Types as well as additional Attributes. New Input Types are &amp;nbsp;URL, email, number, search and more - see&amp;nbsp;&lt;a href="http://www.w3schools.com/html5/html5_form_input_types.asp"&gt;http://www.w3schools.com&lt;/a&gt; for a complete list. The definition is very straightforward. In your HTML, replace type="text" with type="email". So the definition is something like :&amp;nbsp;&amp;lt;input type="email" &amp;nbsp;value="" size="30"&amp;gt;.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
In a regular, desktop, browser that change doesn't seem to do anything, but if you visit that page using a mobile browser, you definitely notice the difference: (On an iPad/Phone/Pod) the virtual keyboard changes and will contain a "@" sign. And something similar happens for URL's (a ".com" key will appear) and numeric fields. And that's all without any coding!&lt;/div&gt;
&lt;div&gt;
But in an APEX environment you can't natively use these kind of fields - unless you write all the code the retrieve and store the information yourselves. Luckily there is a plugin available (on&amp;nbsp;&lt;a href="http://apex-plugin.com/"&gt;http://apex-plugin.com/&lt;/a&gt;) that bridges that gap. And even better...in APEX 4.2 these item types will be 100% native available!&lt;/div&gt;
&lt;div&gt;
Apart from the new input types, you can also use the new attributes as defined on &lt;a href="http://www.w3schools.com/html5/tag_input.asp"&gt;http://www.w3schools.com&lt;/a&gt;. Two of those new attributes are particulary cool : Placeholder and Required. The "placeholder" attribute specifies a short hint that describes the expected value of an input field (e.g. a sample value or a short description of the expected format).&amp;nbsp;The hint is displayed in the input field when it is empty, and disappears when the field gets focus.&lt;br /&gt;
The "required" attribute - not surprisingly - specifies that an input field must be filled out before submitting the form. You can set these attributes using the "HTML Form Element Attributes" property of any (text) field. And when you combine that with a CSS3 style setting using a pseudo class ":required" selector, like&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; :required {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; border-color: #88a;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; -webkit-box-shadow: 0 0 3px rgba(0, 0, 255, .5);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
you get the red boxes around the input field.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Custom data attributes&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
Another new HTML5 feature is the support for custom attributes inside HTML elements. In the old world you could add an item using:&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;input&amp;nbsp;type="text"&amp;nbsp;id="Roel"&amp;nbsp;value="Roel Hartman"&amp;nbsp;book="Expert Oracle APEX" twitter="RoelH"&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;br /&gt;
So you could use any custom attribute name you can come up with. In HTML5 however, you should prefix your custom attributes with "data-". So the HTML for the example above should be:&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;input&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;type="text"&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;id="Roel"&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;value="Roel Hartman"&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;data-&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;book="Expert Oracle APEX" data-t&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;witter="RoelH"&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;/&amp;gt;&lt;/span&gt;
&lt;br /&gt;
Having done that, you can easily access your custom attributes in Javascript:&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;$("#Roel").data().twitter;
&lt;/span&gt;&lt;br /&gt;
And you can also create, change or remove the data-values by something similar to:&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;$("#Roel").data().testing="Test123";&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;(or using the &lt;i&gt;setAttribute, getAttribute &lt;/i&gt;and &lt;i&gt;removeAttribute&lt;/i&gt; methods).&lt;br /&gt;
&lt;br /&gt;
The last thing I would like to mention is the "speech" option, see a previous blogpost (&lt;a href="http://roelhartman.blogspot.co.uk/2012/01/wouldnt-you-like-to-talk-to-your-apex.html"&gt;http://roelhartman.blogspot.co.uk/2012/01/wouldnt-you-like-to-talk-to-your-apex.html&lt;/a&gt;) for more info on that one!&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
You can see them all in action (and whether your browser supports it or not) on :&amp;nbsp;&lt;a href="http://apex.oracle.com/pls/apex/f?p=HTML5:INPUTTYPES"&gt;http://apex.oracle.com/pls/apex/f?p=HTML5:INPUTTYPES&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The next post will cover &lt;b&gt;Web Storage&lt;/b&gt;!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-3008766752640958894?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2012/04/5-cool-things-you-can-do-with-html5-p1.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-gz8rIGymC7I/T3ibUcjBycI/AAAAAAAAAzU/FcH2m5v4EC8/s72-c/IMG_0190.jpg" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>7431 Diepenveen, The Netherlands</georss:featurename><georss:point>52.2915271 6.1485912</georss:point><georss:box>52.2526791 6.0696272 52.330375100000005 6.2275552</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-4336849066951152899</guid><pubDate>Fri, 17 Feb 2012 13:42:00 +0000</pubDate><atom:updated>2012-02-17T14:52:34.031+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">BI Publisher</category><category domain="http://www.blogger.com/atom/ns#">APEX</category><title>Create a PDF document containing dynamic images</title><description>For a current project we had the requirement to publish a more or less "glossy" PDF document containing all information about a certain object. One of the bits of information was...an image.&amp;nbsp;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
The first trial we used the&amp;nbsp;APEX_WEB_SERVICE.BLOB2CLOBBASE64 function to convert a Blob to clob with base64 encoding. In the RTF Template (used in Word with the BI Publisher plugin) you can reference it using this code :&lt;/div&gt;
&lt;div&gt;
&lt;div class="p1"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;fo:instream-foreign-object content-type="image/jpg"&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xsl:value-of select=".//PHOTO"/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/fo:instream-foreign-object&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
(where PHOTO is the alias of the clob column).&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
This works....until you're using a slightly bigger picture than a tiny thumbnail. In that case you hit the 32K limit per report column. Although Marc Sewtz (from the APEX Development Team) sort of "promised" to lift this limit in his blogpost of Jun 13 2008 (!) (&lt;a href="http://marcsewtz.blogspot.com/2008/06/one-question-about-pdf-printing-feature.html"&gt;http://marcsewtz.blogspot.com/2008/06/one-question-about-pdf-printing-feature.html&lt;/a&gt;), it is still the current limit.&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
The workaround - or other approach - is to call an image with a http request in the report definition. Therefore you have to create your own "display_image" procedure that downloads the image. Be sure to grant execute on this procedure to APEX_PUBLIC_USER or ANONYMOUS (depending on your configuration), and modify the WWV_FLOW_EPG_INCLUDE_MOD_LOCAL function when you're using the EPG&amp;nbsp;(see &lt;a href="http://daust.blogspot.com/2006/04/xe-calling-stored-procedures.html"&gt;http://daust.blogspot.com/2006/04/xe-calling-stored-procedures.html&lt;/a&gt;).&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
Next, change your query with a call to that procedure:&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;apex_application.get_g_base_href||&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;'#OWNER#.DISPLAY_IMAGE?P_OBJECT_ID'||ID as IMAGE_URL&lt;/span&gt;&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="p1"&gt;
In your RTF Template you have to embed a dummy image and set the "Alt-Text" (via Size in the Image menu) to url:{IMAGE_URL}.&lt;br /&gt;
&lt;br /&gt;
The first result was : It works for HTML output and Excel output...but not for Word (RTF) or PDF. Why this difference? No idea!&lt;br /&gt;
My setting was like this:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-8tqCzCXAWus/Tz5Wgv0RQ8I/AAAAAAAAAyg/mZ7peAxoMCg/s1600/Doesntwork.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="228" src="http://1.bp.blogspot.com/-8tqCzCXAWus/Tz5Wgv0RQ8I/AAAAAAAAAyg/mZ7peAxoMCg/s400/Doesntwork.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
So the "POPULAIRE_NAAM" was visible on the report, but the image wasn't. And everything else below - all 8 ROWSETS - were visible as well. FYI: The grey border above with the text "Geen afbeelding beschikbaar" is an image itself, so it's not some image missing from this blogpost ;-)&lt;br /&gt;
After a lot of trial and error and Googling around, I called to the OTN Forum for help (see thread here : &lt;a href="https://forums.oracle.com/forums/thread.jspa?threadID=2347610&amp;amp;tstart=0"&gt;https://forums.oracle.com/forums/thread.jspa?threadID=2347610&amp;amp;tstart=0&lt;/a&gt;). After a few hours Carsten Czarski of Oracle Germany pointed to an elaborated example he put on the web - a long time ago, looking at the screen prints : &lt;a href="http://www.oracle.com/webfolder/technetwork/de/community/apex/tipps/pdf-dyn-images/index.html"&gt;http://www.oracle.com/webfolder/technetwork/de/community/apex/tipps/pdf-dyn-images/index.html&lt;/a&gt;. Because it was in German, it never popped up in my Google search..while all the components where in there! So I created a very very simple example to mimic his case. And then the image did show up!&lt;br /&gt;
So what did I do wrong?&lt;br /&gt;
&lt;br /&gt;
It seems that the [for-each ROWSET1_ROW] loop must be defined &lt;b&gt;&lt;u&gt;before&lt;/u&gt;&lt;/b&gt; the image (although in my case that rowset always contains just one entry). It didn't matter for the "POPULAIRE_NAAM" field, but it did for the image (in Word/PDF, not in HTML/Excel).&lt;br /&gt;
So the correct setting is:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-Ohc0OnmbAo0/Tz5Yk1VcXAI/AAAAAAAAAyo/EQMvqjN-4B0/s1600/Works.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="211" src="http://3.bp.blogspot.com/-Ohc0OnmbAo0/Tz5Yk1VcXAI/AAAAAAAAAyo/EQMvqjN-4B0/s400/Works.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
and now the PDF can contain images of any size....&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-4336849066951152899?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2012/02/create-pdf-document-containing-dynamic.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-8tqCzCXAWus/Tz5Wgv0RQ8I/AAAAAAAAAyg/mZ7peAxoMCg/s72-c/Doesntwork.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-791469337467008898</guid><pubDate>Mon, 23 Jan 2012 12:39:00 +0000</pubDate><atom:updated>2012-01-23T13:41:29.986+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">APEX</category><title>Create a calendar item returning week numbers</title><description>&lt;a href="http://1.bp.blogspot.com/-8WxOdsUPpT0/Tx1UUFGGcWI/AAAAAAAAAyM/WSCZtOPHlgA/s1600/calendar.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="132" src="http://1.bp.blogspot.com/-8WxOdsUPpT0/Tx1UUFGGcWI/AAAAAAAAAyM/WSCZtOPHlgA/s200/calendar.jpg" width="200" /&gt;&lt;/a&gt;When you use the built-in jQuery UI datepicker in your APEX page, you choose from a number of different format masks...but something with "week" is not one of them. And guess what I needed for recent project...&lt;br /&gt;
But, the good news is, you can (rather easy) use the jQuery framework to tweak the result that's returned from the datepicker.&lt;br /&gt;
Just create a Dynamic Action that fires on load of the page, and add these line of Javascript:&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;//Show the week number as the first column&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$( ".datepicker" ).datepicker( "option", "showWeek", true );&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;//Set Monday as the first day of the week&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$( ".datepicker" ).datepicker( "option", "firstDay", 1 );&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;//Return yyyy-ww instead of the actual date&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$(".datepicker").datepicker("option", "onSelect",&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function(value, date)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { var week=$.datepicker.iso8601Week (&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new Date(date.selectedYear,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.selectedMonth,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.selectedDay));&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(this).val(date.selectedYear+'-'+(week&amp;lt;10?'0':'')+week);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;);&lt;/span&gt;&lt;br /&gt;
That's it. Of course you have to replace the jQuery selector - $(".datepicker") - with the one that matches your selection.&lt;br /&gt;
You can also substitute the function that generates the week number with your own one. And, yes, you could turn this into a plug-in if you like... (maybe I will when I've got the time, but no guarantee).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-791469337467008898?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2012/01/create-calendar-item-returning-week.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-8WxOdsUPpT0/Tx1UUFGGcWI/AAAAAAAAAyM/WSCZtOPHlgA/s72-c/calendar.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-5089828346484270523</guid><pubDate>Tue, 10 Jan 2012 13:28:00 +0000</pubDate><atom:updated>2012-01-10T14:30:21.435+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HTML5</category><category domain="http://www.blogger.com/atom/ns#">APEX</category><title>Wouldn't you like to talk to your APEX app?</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-eZkYL18p54g/Tww9QpU1aTI/AAAAAAAAAyA/8TsFnMUpkcc/s1600/742microphone.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="100" src="http://3.bp.blogspot.com/-eZkYL18p54g/Tww9QpU1aTI/AAAAAAAAAyA/8TsFnMUpkcc/s200/742microphone.gif" width="80" /&gt;&lt;/a&gt;&lt;/div&gt;
Of course you are familiar with Martin Giffy D'Souza's blog &lt;a href="http://www.talkapex.com/"&gt;talkapex.com&lt;/a&gt;&amp;nbsp;(if you're not, check it out - it's really worthwhile). But wouldn't it be nice to not only talk &lt;b&gt;about &lt;/b&gt;APEX, but also &lt;b&gt;to &lt;/b&gt;APEX?&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
The only thing you need is a recent version of Chrome (11 or up) and a microphone. And then...just by entering "x-webkit-speech" to the HTML Form Element Attributes of your input item, you have speech-enabled your application!&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-KL6FWK3At8s/Tww7JtcoRDI/AAAAAAAAAxo/9vsw7jFK2e0/s1600/speech001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="119" src="http://2.bp.blogspot.com/-KL6FWK3At8s/Tww7JtcoRDI/AAAAAAAAAxo/9vsw7jFK2e0/s320/speech001.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
All "speech enabled" items will get a little mic at the end. When you click on it, you can say what you like. Oh yeah..and it works for number and date fields as well!&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-JZhLiEL6fn8/Tww7YqozQGI/AAAAAAAAAxw/LDpy_ytDQ74/s1600/speech02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="81" src="http://4.bp.blogspot.com/-JZhLiEL6fn8/Tww7YqozQGI/AAAAAAAAAxw/LDpy_ytDQ74/s320/speech02.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
One remark : Whatever you enter will go through Google's voice recognition ... so Big Brother is listening in on you!&lt;/div&gt;
&lt;div&gt;
Try it out yourself on :&amp;nbsp;&lt;a href="http://apex.oracle.com/pls/apex/f?p=HTML5:SPEAK"&gt;http://apex.oracle.com/pls/apex/f?p=HTML5:SPEAK&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-5089828346484270523?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2012/01/wouldnt-you-like-to-talk-to-your-apex.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-eZkYL18p54g/Tww9QpU1aTI/AAAAAAAAAyA/8TsFnMUpkcc/s72-c/742microphone.gif" height="72" width="72" /><thr:total>3</thr:total><georss:featurename>7431 Diepenveen, The Netherlands</georss:featurename><georss:point>52.2915271 6.1485912</georss:point><georss:box>52.2526791 6.0696272 52.330375100000005 6.2275552</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-2759516843536575735</guid><pubDate>Wed, 28 Dec 2011 11:11:00 +0000</pubDate><atom:updated>2011-12-30T12:13:12.664+01:00</atom:updated><title>APEX app running native on iPhone - the details</title><description>&lt;div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-8snkW1UxyBo/Tvr5t5itfTI/AAAAAAAAAxU/LaPhJxXhlsk/s1600/pg1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="112" src="http://1.bp.blogspot.com/-8snkW1UxyBo/Tvr5t5itfTI/AAAAAAAAAxU/LaPhJxXhlsk/s400/pg1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
A (rather long) time ago, I wrote a blog post showing a demo of &lt;a href="http://roelhartman.blogspot.com/2011/11/apex-application-running-native-on.html" target="_blank"&gt;an APEX application running native on an iPhone&lt;/a&gt;. Now, finally, the moment is there to explain how I did it ;-)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The key part of this demo, is the use of &lt;a href="http://phonegap.com/" target="_blank"&gt;PhoneGap&lt;/a&gt;. PhoneGap "wraps" any HTML5 code, thereby giving you access to the native API's of your device. This solution is also used by the upcoming &lt;a href="http://www.oracle.com/technetwork/developer-tools/adf/overview/adf-mobile-096323.html" target="_blank"&gt;ADF Mobile&lt;/a&gt; solution, but can already be used now for any HTML5 web application..including your APEX application.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
Start with downloading the PhoneGap sources from their site and install it in your development environment (I used Apple's Xcode) - see the documentation on the PhoneGap site on the how-to.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
Within Xcode, you'll get an index.html, which is the starting point of your application. In this, simplified, example, my index.html only contains the following code:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;title&amp;gt;&lt;span class="s1"&gt;APEX DEMO&lt;/span&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;meta &lt;/span&gt;&lt;span class="s3"&gt;name&lt;/span&gt;&lt;span class="s2"&gt;=&lt;/span&gt;"viewport"&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="s3"&gt;content&lt;/span&gt;&lt;span class="s2"&gt;=&lt;/span&gt;"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;"&lt;span class="s2"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;/span&gt;&amp;lt;meta &lt;span class="s3"&gt;charset&lt;/span&gt;=&lt;span class="s4"&gt;"utf-8"&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;body &lt;/span&gt;&lt;span class="s3"&gt;onload&lt;/span&gt;&lt;span class="s2"&gt;=&lt;/span&gt;&lt;span class="s4"&gt;"window.location.href='&lt;a href="http://apex.oracle.com/pls/apex/f?p=ROELSMOBILEAPP';"&gt;&lt;span class="s5"&gt;http://apex.oracle.com/pls/apex/f?p=ROELSMOBILEAPP';&lt;/span&gt;&lt;/a&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s1"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
So the only thing it does, is a redirect to my APEX application. Nothing more, nothing less.&lt;/div&gt;
&lt;div class="p1"&gt;
In the page template of the APEX application I included the&amp;nbsp;phonegap-1.2.0.js script file (currently 1.3.0 is the latest version).&amp;nbsp;&lt;/div&gt;
&lt;div class="p1"&gt;
Before any features can be used, PhoneGap has to be started. In my example, I added a Dynamic Action on Page 0, that runs on Page Load, with as contents&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;document.addEventListener("deviceready",onDeviceReady,false);&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
And from that point on, any PhoneGap feature can be used. In the example in the blogpost mentioned above, I added a button on a form page, that executes the following snippet of Javascript:&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;var contact = navigator.contacts.create();&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;var name = new ContactName();&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;name.givenName = $v('P9_CUST_FIRST_NAME');&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;name.familyName = $v('P9_CUST_LAST_NAME');&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;contact.name = name;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;contact.save(onSaveSuccess,onSaveError);&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;function onSaveSuccess( contact )&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;navigator.notification.alert("Contact saved on your device");&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;function onSaveError(contactError)&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;alert("Error = " + contactError.code);&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1" style="font-family: Times, 'Times New Roman', serif;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="p1"&gt;
And that's it! When pressing the button, the contact - just the first and last name - is added to your contact list on your device. Of course you can add addresses, telephone numbers etc as well. And use other native device functionalities, like the camera or the compass as well. &amp;nbsp;See the &lt;a href="http://docs.phonegap.com/en/1.3.0/index.html" target="_blank"&gt;API documentation&lt;/a&gt; for all the details.&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
The only "problem" will be, that this native iPhone "application" - which is just the index.html file - will never be accepted in the Apple store, just because it hasn't enough content to act on it's own. So you have to build an app with more content, and use your APEX application just to fill in some "gaps". But there are of course more ways to get data from your database to your native application, like web services.&amp;nbsp;&lt;/div&gt;
&lt;div class="p1"&gt;
Please, let me know whenever you get an app in the store with some APEX content!&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
Happy PhoneGapping!&lt;/div&gt;
&lt;/div&gt;
&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-2759516843536575735?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/12/apex-app-running-native-on-iphone.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-8snkW1UxyBo/Tvr5t5itfTI/AAAAAAAAAxU/LaPhJxXhlsk/s72-c/pg1.png" height="72" width="72" /><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-4731436953941523257</guid><pubDate>Fri, 09 Dec 2011 19:21:00 +0000</pubDate><atom:updated>2011-12-09T20:36:29.661+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">UKOUG</category><title>UKOUG2011 Retrospective</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/--aPwsD5Vgw0/TuJfoRGR_II/AAAAAAAAAw8/kAtCt2IZMYU/s1600/we-were-wrong.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/--aPwsD5Vgw0/TuJfoRGR_II/AAAAAAAAAw8/kAtCt2IZMYU/s320/we-were-wrong.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;
Looking back at this weeks UKOUG Conference, a few things strike my mind. At first, there was no snow this time! A lot of wind to make my flight back quite wobbly, but no snow - like last year - that would make travelling very hard (up to almost impossible).&lt;br /&gt;
Second, there were - again - lots of good sessions to choose from. Several time slots had two or even three sessions I would like to attend. And another pro - as strange as it may sound from an APEX geek - there are not that many APEX sessions. That gives me the chance - or the obligation - to look into other corners of the Oracle ecosystem. So I actually did learn something!&lt;br /&gt;
And I saw some "ok" sessions, some good ones and a few excellent ones - like Doug's SPM, Connor's Partitioning and Slavik's SQL Injection. But... there was only one really impressive one: Cary's keynote. In a very emotional and personal way, he took the audience by the hand - telling some touching real life stories about his private life and work. &lt;i&gt;You were right&lt;/i&gt;, Cary, to take this next step. Thanks a lot!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-4731436953941523257?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/12/ukoug2011-retrospective.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/--aPwsD5Vgw0/TuJfoRGR_II/AAAAAAAAAw8/kAtCt2IZMYU/s72-c/we-were-wrong.jpg" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Birmingham, West Midlands, UK</georss:featurename><georss:point>52.486243 -1.890401</georss:point><georss:box>52.331536 -2.206258 52.640950000000004 -1.574544</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-6690587630580352320</guid><pubDate>Fri, 18 Nov 2011 14:42:00 +0000</pubDate><atom:updated>2011-11-18T16:17:07.391+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">DOAG</category><title>I've been to DOAG!</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-NbHVV9Uj3J8/TsZvFEGI5lI/AAAAAAAAAw0/RNsupKq9xmI/s1600/doag.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-NbHVV9Uj3J8/TsZvFEGI5lI/AAAAAAAAAw0/RNsupKq9xmI/s320/doag.jpg" width="212" /&gt;&lt;/a&gt;&lt;/div&gt;
This week I attended my first DOAG (German Oracle User Group) Conference. The conference was hosted in a part of the&amp;nbsp;Nürnberg Conference Centre. The venue was excellent : All sessions where in the same area on three different levels - so everything was in a short walking distance. The conference rooms itself where very good as well: a stage, just slightly higher than the audience, perfect lighting, good sound and screen quality and a wireless mic.&amp;nbsp;Everything a presenter - and an attendee as well - needs!&lt;br /&gt;
Something else that DOAG does better (not necessary healthier) than most other conferences: you can have food, snacks and drinks all day long. Not only during "coffee break" or lunch you can have slices of pizza, hot dogs or sweet cakes, but really all day long. And the quality of lunch and dinner was excellent as well: three courses and plenty stuff to choose from. &lt;br /&gt;
Then onto the content itself. There were 20 concurrent sessions, all started right at the hour (with a bell sign!), in al lot of different tracks, like: Database, Datawarehouse, BI, Development, Java, MySQL etc. Apart from some sidesteps now and then, I mainly focussed on the APEX Development area (no surprises here). I was very curious what the German speaking community does with APEX, as I wasn't familiar with most speakers. And I guess I am being spoilt by conferences like KScope, as a lot of the content couldn't adhere to those (high) standards. But the audience seemed to like it, so it probably complies with the overall expectations... (And I should more often go to sessions where I know nothing about!)&lt;br /&gt;
And what about my own presentation? I think it went pretty well, although I ended somewhat early. I rushed a bit though the first part, because a slot lasts "only" 45 minutes, so I had some time left in the end. But I think it came across quite well. Not that I got that many questions during my presentations (usually Germans don't interrupt the speaker) and just a few at the end - maybe due to the fact they thought they had to ask their question in English, which wasn't necessary of course. But in the next few days I got more questions during or between other sessions ;-).&lt;br /&gt;
Another minor thing, while I can understand German pretty well (about 95%), I really do prefer English for these kind of tech conferences... But still I might come back next year!!&lt;br /&gt;
So, next on the agenda, in a few weeks...UKOUG in Birmingham!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-6690587630580352320?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/11/ive-been-to-doag.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-NbHVV9Uj3J8/TsZvFEGI5lI/AAAAAAAAAw0/RNsupKq9xmI/s72-c/doag.jpg" height="72" width="72" /><thr:total>1</thr:total><georss:featurename>Nuremberg, Germany</georss:featurename><georss:point>49.45052 11.08048</georss:point><georss:box>49.285357499999996 10.764623 49.6156825 11.396336999999999</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-6420169812291940404</guid><pubDate>Wed, 09 Nov 2011 20:21:00 +0000</pubDate><atom:updated>2011-11-09T21:25:47.237+01:00</atom:updated><title>APEX Application running native on an iPhone</title><description>This video shows how native an APEX application can run on iPhone. And yes, it is really an APEX application you see. And the whole movie is just one take.&lt;br /&gt;
You can see how a customer from the standard APEX Demo Application - "re-templated" to an Mobile APEX Application - is stored as a regular contact on your iPhone. 
&lt;br /&gt;
&amp;nbsp; 
&lt;iframe allowfullscreen="" frameborder="0" height="480" src="http://www.youtube.com/embed/VpG6GVFtn6Y?rel=0" width="300"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-6420169812291940404?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/11/apex-application-running-native-on.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/VpG6GVFtn6Y/default.jpg" height="72" width="72" /><thr:total>7</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-1852028838464429285</guid><pubDate>Tue, 08 Nov 2011 09:20:00 +0000</pubDate><atom:updated>2011-11-08T10:33:09.501+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">KScope</category><title>The "blind auditions": Evaluating Kscope12 abstracts...</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-SChgbYsmfSE/Trjycf6Ik1I/AAAAAAAAAwk/gnS8Y0DuN_U/s1600/7449716-rubber-stamp-marked-with-excellent.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-SChgbYsmfSE/Trjycf6Ik1I/AAAAAAAAAwk/gnS8Y0DuN_U/s1600/7449716-rubber-stamp-marked-with-excellent.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span class="fullpost"&gt;Last week (and both weekends) I evaluated all the abstracts for &lt;a href="http://kscope12.com/" target="_blank"&gt;ODTUG KScope12&lt;/a&gt; in two tracks: APEX and Developer's Toolbox. In the APEX track 76 abstracts where submitted, Developer's Toolbox has just a few more, 82. All the abstracts will be evaluated by a team of (around) 8 people, so it doesn't all depend on my rating ;-)&lt;/span&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;For the first time, the abstracts where anonymous. So you don't know who wrote the abstract when rating it. In some cases, you can guess (and some had their own name in the abstract or summary, so that's easy). But I have to say, it makes it more difficult to evaluate. Because, for some people it doesn't really matter what the abstract says, you know it will be good anyhow (and for other ones, it is just the other way round). But luckily we have to rate the presenters as well - as far as you know them.&lt;/span&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;We had to rate every abstract between 0 and 5, where 5 is a top one. My totals are: little under 20% I rated as 5, almost 40% got a 4, 30% received a 3 and the rest is 2 or lower.&lt;/span&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt; The hottest subject in the APEX track is, without any doubt, mobile development. Seems like a lot of presenters are anxiously awaiting the next APEX release. In Developer's Toolbox, the subjects are more diverse, but, to my surprise, analytic functions are a trending topic! Not that these are new, but there seems to be a more general adoption and interest in this feature.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="fullpost"&gt;And what did I learn from these "blind auditions"?&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;That it is very hard to write a good abstract. And when you submit one, there always a line saying: Don't copy your abstract as a summery (or the other way round). They have two different goals. The abstract should convince the evaluator to select your presentation, while the summary should convince the conference attendee to attend your session. So you should give away more in the abstract - but please, not pages long - and maybe just make people curious in the summary part.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;But seeing all these great abstracts, I am really sure that Kscope12 will be even better than this years!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-1852028838464429285?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/11/blind-auditions-evaluating-kscope12.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-SChgbYsmfSE/Trjycf6Ik1I/AAAAAAAAAwk/gnS8Y0DuN_U/s72-c/7449716-rubber-stamp-marked-with-excellent.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-7235043145078811887</guid><pubDate>Tue, 08 Nov 2011 08:54:00 +0000</pubDate><atom:updated>2011-11-08T09:54:03.982+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Blog</category><title>I revamped my blog</title><description>&lt;a href="http://3.bp.blogspot.com/-R3DLkmX992Y/Trjtn0XBVmI/AAAAAAAAAwc/ZiIL1ZT202g/s1600/Screen%2BShot%2B2011-11-08%2Bat%2B09.50.11.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="148" src="http://3.bp.blogspot.com/-R3DLkmX992Y/Trjtn0XBVmI/AAAAAAAAAwc/ZiIL1ZT202g/s200/Screen%2BShot%2B2011-11-08%2Bat%2B09.50.11.png" width="200" /&gt;&lt;/a&gt;I revamped my blog recently by enabling the latest Blogger feature: &lt;b&gt;&lt;i&gt;Dynamic Views&lt;/i&gt;&lt;/b&gt;.&amp;nbsp; You can pick your own view using the "&lt;i&gt;Magazine&lt;/i&gt;" menu on top.&lt;br /&gt;
I hope you like it. I do ;-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-7235043145078811887?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/11/i-revamped-my-blog.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-R3DLkmX992Y/Trjtn0XBVmI/AAAAAAAAAwc/ZiIL1ZT202g/s72-c/Screen%2BShot%2B2011-11-08%2Bat%2B09.50.11.png" height="72" width="72" /><thr:total>1</thr:total><georss:featurename>7431 Diepenveen, The Netherlands</georss:featurename><georss:point>52.2915271 6.1485912</georss:point><georss:box>52.2526791 6.0696272 52.330375100000005 6.2275552</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-5425185180521901669</guid><pubDate>Mon, 31 Oct 2011 10:04:00 +0000</pubDate><atom:updated>2011-11-08T10:33:25.478+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">DOAG</category><title>In two weeks: My first DOAG Conference</title><description>From November 15 to 17, the annual DOAG (German Oracle User Group) Conference will be held in Nuremberg. I've never attended this conference before, so I am really curious how my experience will be - especially compared to the other big European Oracle event, the UKOUG conference three weeks later.
The agenda looks very promising. A very neat and tight three full days, with a new 45 minute session starting on the hour. Just like you expect from Germans ;-). And with 20 parallel sessions it seems about the same size as the UKOUG. The nice thing is, there are a lot of (German) speakers on the list, I've never seen before. So that could be interesting. And there are a lot of APEX sessions as well - see my schedule below, where I colored all the APEX sessions in blue! 
Some sessions will be translated - from German to English, some of them will be in English, but the majority will be in German. So a good opportunity to dust off my German... In the &lt;a href="http://mydoag.doag.org/formes/servlet/DocNavi?action=getFile&amp;amp;did=2793574&amp;amp;file=2011_K_Programmflyer.pdf"&gt;flyer&lt;/a&gt;, sessions are marked when they're in English. Mine isn't but I wasn't planning on doing it in German... But we'll see, maybe I'll end up in "&lt;i&gt;Genglish&lt;/i&gt;" or "&lt;i&gt;Engman&lt;/i&gt;"...&lt;br /&gt;
You can take a look at the whole program &lt;a href="http://www.doag.org/en/events/konferenzen/doag-2011/das-programm.html"&gt;here&lt;/a&gt;.&lt;br /&gt;
Oh, yeah, one shameless plug : My session on the &lt;b&gt;XFILES &lt;/b&gt;(about the power of XML-DB used for creating an APEX Application - and with version control for APEX itself as an example) is Tuesday at 4PM...&amp;nbsp; &lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-mr5TpvNazL8/Tq5xxwrflcI/AAAAAAAAAt8/jrVeliy8fZU/s1600/DOAG.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" src="http://3.bp.blogspot.com/-mr5TpvNazL8/Tq5xxwrflcI/AAAAAAAAAt8/jrVeliy8fZU/s400/DOAG.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-5425185180521901669?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/10/in-two-weeks-my-first-doag-conference.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-mr5TpvNazL8/Tq5xxwrflcI/AAAAAAAAAt8/jrVeliy8fZU/s72-c/DOAG.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-8065684668240601795</guid><pubDate>Tue, 25 Oct 2011 08:21:00 +0000</pubDate><atom:updated>2011-10-25T10:21:41.285+02:00</atom:updated><title>Analytic function to the rescue! Again.</title><description>&lt;span class="fullpost"&gt;My current APEX project has a requirement to show a chart on one of the pages. No big deal. Usually. Because it should represent some value over time and that value would be stored in the database....could be every second, this chart could contain 10,000's, if not 100,000's points.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;So generating the XML, transferring the XML to the browser and interpreting the XML by the chart engine....was slow...&lt;/span&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;So I had to come up with a solution to reduce the number of points, without destroying the goal of the chart. Oh, and did I mention that the value could be stored every second, but could also be every minute, hour, whatever?&lt;/span&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;The first thing I came up with was the SAMPLE clause. Never heard of it and never used it before. You can just do a SELECT * FROM EMP SAMPLE(10) and as a result, you'll get 10% of the rows of the EMP table. The only withdrawal with that was, the result could be different every time. So when refreshing a chart, the chart could look really different. Another, more minor, hiccup was, the sample size&amp;nbsp; should be hard-coded and couldn't be parametrised (another "smaller" subrequirement).&lt;/span&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;So after some research I stumbled upon an Analytic Function, that might do the trick: &lt;a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions101.htm"&gt;NTILE( number )&lt;/a&gt;. This function &lt;/span&gt;"divides an ordered data set into a number of buckets indicated by the number parameter and assigns the appropriate bucket number to each row" (quote from the documentation - couldn't say it better). So using this function, you can equally divide 100,000 records in 25 buckets - order by timestamp. And once you've done that you can easily calculate the average value per bucket. And the average timestamp as well. And just use these values to generate a more minimalistic XML document... O, and another fine thing: you can pass any number parameter to NTILE, so using the same query, generate either 10 or 10,000 points...&lt;br /&gt;
&lt;br /&gt;
As a - functionally useless - example a query to generate 15 rows with the average object_id and the average create date of all_objects: &lt;br /&gt;
&lt;pre name="code" class="SQL"&gt;select  to_char( startdate + ( enddate - startdate )/2
               , 'YYMMDD HH24:MI:SS' ) label
,       average
from
(
select min(created)  startdate
,      max(created)  enddate
,      avg(value)    average
from
(
select object_id value
,      created
,      ntile( 15 ) over ( order by created ) as bucket
from all_objects
)
group by bucket
order by 1
)
&lt;/pre&gt;
&lt;span class="fullpost"&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-8065684668240601795?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/10/analytic-function-to-rescue-again.html</link><author>noreply@blogger.com (Roel Hartman)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-5641585942018445588</guid><pubDate>Thu, 20 Oct 2011 10:46:00 +0000</pubDate><atom:updated>2011-10-20T12:46:43.211+02:00</atom:updated><title>"I am running for the ODTUG Board of Directors"</title><description>No, not it's not about myself, but that's what my dear friend Martin Giffy D'Souza told me during last Oracle Open World. And I support his nomination whole hearted!&amp;nbsp;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
I know Martin since about 4 years since we met at one of the KScope conferences. Since then we'll meet each other twice a year, but are in touch more frequently by email, twitter and other social networks. Martin is passionate about his job and, knows really a lot about APEX and is always willing to share his thoughts, ideas and vision with others. And I think nobody is better suited for the ODTUG Board as Martin is!&lt;/div&gt;
&lt;div&gt;
If you wonder what Martin looks like...see the picture below, taken during the OOW Appreciation Event. He is the guy with the blue circle around his head ;-)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-d_06QsSXBfk/Tp_7GbvQFSI/AAAAAAAAAtk/6Y4eIkL6vlE/s1600/IMG_0410.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="297" src="http://4.bp.blogspot.com/-d_06QsSXBfk/Tp_7GbvQFSI/AAAAAAAAAtk/6Y4eIkL6vlE/s400/IMG_0410.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If you are an ODTUG member, you can vote &lt;a href="http://www.odtug.com/apex/f?p=500:235:0::::P235_NEWS_ID:3661."&gt;here&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
You can read Martin's official campaign and bio below...&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: 'Segoe UI', Helvetica, Arial, sans-serif;"&gt;&lt;span style="font-family: Arial; font-size: xx-small;"&gt;&lt;span style="background-color: white; font-size: 13px;"&gt;&lt;b&gt;Campaign Statement&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="background-color: transparent;"&gt;
&lt;span style="background-color: transparent;"&gt;&lt;span style="color: black; font-family: Arial; font-size: x-small;"&gt;&lt;span style="background-color: white; font-size: 10pt; font-variant: normal;"&gt;&lt;i&gt;I have attended ODTUG Kaleidoscope for several consecutive years and have been a presenter for the last three. The conference has allowed me to develop strong relationships with many others in the community, and the importance of these relationships has proven invaluable. I continually strive to give back to the community, using my personal time to answer questions through email, blogs, the Oracle forums, and by writing technical books. I would like to continue this spirit of giving back by joining the ODTUG Board of Directors.&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black; font-family: Arial; font-size: x-small;"&gt;&lt;span style="background-color: white; font-size: 10pt; font-variant: normal;"&gt;&lt;i&gt;As a new board member I will bring a fresh perspective and out-of-the-box ideas to help promote ODTUG and deliver our message to the world. I am fortunate enough to have a successful blog with several thousand unique monthly visitors. It is through this platform, along with other opportunities such as my consulting firm blog, social networking, and the multiple annual conferences that I attend from which I intend to help share the ODTUG mission and values.&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black; font-family: Arial; font-size: x-small;"&gt;&lt;span style="background-color: white; font-size: 10pt; font-variant: normal;"&gt;&lt;i&gt;The Board plays a pivotal leadership role as both a driving force and a face of the ODTUG community. I feel that my professional experience as a leader and mentor will help the Board guide and develop ODTUG for the future. The Board has responsibility to its most important group - the members. I will help ensure that the Board serves as both a voice and an ear for the entire ODTUG community; developers, DBAs, and technical experts of all things Oracle.&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black; font-family: Arial; font-size: x-small;"&gt;&lt;span style="background-color: white; font-size: 10pt; font-variant: normal;"&gt;&lt;i&gt;Many thanks for your consideration.&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-family: Arial; font-size: x-small;"&gt;&lt;span style="background-color: white; font-size: 10pt; font-variant: normal;"&gt;&lt;b&gt;Biographical Statement&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black; font-family: Arial; font-size: x-small;"&gt;&lt;span style="background-color: white; font-size: 10pt; font-variant: normal;"&gt;&lt;i&gt;Martin Giffy D’Souza is an Oracle ACE and award winning presenter and speaker. Most recently Martin was honored with the ODTUG Kaleidoscope 2011 Presenter of the Year award. Martin also serves as a Co-founder &amp;amp; CTO at ClariFit Inc., a consulting firm specializing in Oracle solutions. Martin’s career has seen him hold a range of positions within award winning companies and his experience in the technology industry has been focused on developing database-centric web applications using the Oracle technology stack. Martin is the author of the highly recognized blog&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="https://mail.logica.com/owa/redir.aspx?C=a16b15f1bfa24c20ae015c4f9c546275&amp;amp;URL=http%3a%2f%2fwww.talkapex.com%2f" target="_blank"&gt;&lt;span style="font-family: 'Times New Roman'; font-size: small;"&gt;&lt;span style="color: #0000cc; font-family: Arial; font-size: x-small;"&gt;&lt;span style="background-color: white; font-size: 10pt; font-variant: normal;"&gt;&lt;i&gt;www.TalkApex.com&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="color: black; font-family: Arial; font-size: x-small;"&gt;&lt;span style="background-color: white; font-size: 10pt; font-variant: normal;"&gt;&lt;i&gt;, and he has co-authored several APEX books including Expert Oracle Application Express, a collaboration of some of the most renowned APEX developers in the industry. He has presented at numerous international conferences such as ODTUG, APEXposed, and COUG. Martin holds a Computer Engineering degree from Queen’s University in Ontario, Canada.&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-5641585942018445588?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/10/i-am-running-for-odtug-board-of.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-d_06QsSXBfk/Tp_7GbvQFSI/AAAAAAAAAtk/6Y4eIkL6vlE/s72-c/IMG_0410.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-5382674855858643983</guid><pubDate>Thu, 06 Oct 2011 20:42:00 +0000</pubDate><atom:updated>2011-11-08T10:33:54.721+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">APEX</category><title>OOW2011 - Announcing the APEX Marketplace</title><description>With the Oracle Database Cloud Service, Oracle also announced the APEX marketplace - a sort of App Store for APEX or APpEX Store if you like. When the Cloud Service is released, there will be number of free APEX Applications available for install. These are all created by Oracle itself and are very similar to the "Packaged Applications" that where available on OTN earlier. So if you're wondering why they're not available up there anymore and where they are gone: You got your answer now! &lt;br /&gt;
Just like any other APEX Application you can (probably) still export that application and install it on your own environment. But they will ne "locked down", although it's not quite clear what that actually means. Probably, to prevent support issues due to your own changes, you aren't allowed to make changes. BTW, not all Markterplace Applications will be available on OTN, some will, others won't .. &lt;br /&gt;
Another, not yet implemented, idea is that you can also upload your own application into the Marketplace. The application will be reviewed by Oracle before it's made available. Your application won't actually be up there, but an interested user will be redirected to your own site and be able to download it from there. And the idea is that you can either provide these applications for free or charge for it. Don't expect it to make you a millionaire, but, hey, that should go dollar-by-dollar anyway...&lt;br /&gt;
As a teaser a screenshot of the applications that will be available from the start: &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-y23UxlKtLy8/TpLBSILLmgI/AAAAAAAAAtY/_JpD8EWlfGw/s1600/productivity_apps.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="286" src="http://2.bp.blogspot.com/-y23UxlKtLy8/TpLBSILLmgI/AAAAAAAAAtY/_JpD8EWlfGw/s400/productivity_apps.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;center&gt;&lt;/center&gt;&lt;br /&gt;
&lt;div class="blogpress_location"&gt;
Location:&lt;a href="http://maps.google.com/maps?q=Ellis%20St,San%20Francisco,United%2States%4037.785369%2C-122.410099&amp;amp;z=10"&gt;Ellis St,San Francisco,United States&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-5382674855858643983?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/10/oow2011-announcing-apex-marketplace.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-y23UxlKtLy8/TpLBSILLmgI/AAAAAAAAAtY/_JpD8EWlfGw/s72-c/productivity_apps.jpg" height="72" width="72" /><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-641326134802211456</guid><pubDate>Thu, 06 Oct 2011 18:28:00 +0000</pubDate><atom:updated>2011-10-06T20:28:30.741+02:00</atom:updated><title>Five things you (probably) don't know about PL/SQL</title><description>This post is a (live) report from Tom Kyte's session with the title above he did in a packed room on Thursday morning on OOW2011.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Trigger trickery&lt;/b&gt;&lt;br /&gt;A before row trigger uses consistent read. So it uses the situation as it was when the statement started. So during long running updates the actual situation might differ from the 'consistent read' situation. That might lead to a rollback and re-fire of the statement, and thus the trigger as well. So every before statement and row level trigger (apart from the last row) might fire twice!&lt;br /&gt;So don't do anything you can't roll back in a trigger. If you call some autonomous auditing function in a trigger, you might encounter rows in your auditing table that didn't actually happen...&lt;br /&gt;Direct path loads bypass triggers...so triggers don't always fire!&lt;br /&gt;So, if you can avoid triggers...please avoid triggers.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Ignore errors&lt;/b&gt;&lt;br /&gt;Error handling is done wrong more often than it's done right. Only catch exceptions that you are expecting - which means they aren't real exceptions anymore (like a NO_DATA_FOUND, but then in the same block as the SQL statement itself and not a general one at the end of your code). All the other ones should be raised, either immediately or at a later moment in the transaction. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Elaboration code&lt;/b&gt;&lt;br /&gt;You can use instantiation code in a package body, by defining an anonymous block within the body. It runs one time only per session (and after ever reinstantiation). &lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Implicit conversions&lt;/b&gt;&lt;br /&gt;Always use explicit conversions. Especially when you're relying on specific NLS settings, for example when converting dates! Implicit conversions might even lead to SQL injection by tweaking the NLS_DATE setting!!! &lt;br /&gt;Relying on implicit conversion also might have a performance penalty, because the conversion takes CPU time and has impact on the access path the optimizer comes up with. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. Roles&lt;/b&gt;&lt;br /&gt;You need direct grants on an object in order to use that object in a PL/SQL object, roles don't work - on purpose. If you use "invoker rights", your code uses the roles and grants of the user who runs the code. Default code is created using "defined rights" and then the code uses the grants of the definer. Especially when you use invoker rights, you could encounter unexpected results, because table T of the definer might not be the same table T of the invoker....&lt;br /&gt;&lt;p class='blogpress_location'&gt;Location:&lt;a href='http://maps.google.com/maps?q=Cyril%20Magnin%20St,San%20Francisco,United%20States%4037.785651%2C-122.409078&amp;z=10'&gt;Cyril Magnin St,San Francisco,United States&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-641326134802211456?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/10/five-things-you-probably-don-know-about.html</link><author>noreply@blogger.com (Roel Hartman)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-3083515957223052589</guid><pubDate>Wed, 05 Oct 2011 23:02:00 +0000</pubDate><atom:updated>2011-10-06T01:02:06.931+02:00</atom:updated><title>OOW2011 - Announcing SQL Developer 3.1 New Features</title><description>&lt;a href='https://picasaweb.google.com/110887914562564459264/DropBox?authkey=Gv1sRgCIiem77Ese3GsAE#5658636558149521650'&gt;&lt;img src='http://lh6.ggpht.com/-93mafzZhiIk/ToeD-AmKkPI/AAAAAAAAAs8/LSTiskG7uQA/s288/0.jpg' border='0' width='88' height='88' align='left' style='margin:5px'&gt;&lt;/a&gt;The new SQL Developer version 3.1, contains a lot of new functionality. For instance a lot of DBA functionality that was already available within Enterprise Manager is exposed in SQL Developer. The developers are using the exact same code, but with a SQL Developer skin on top of it. &lt;br /&gt;Another very neat feature is the SQL Developer Cart. You can  drag and drop any object in the cart and it will automagically create a sql script file and zip it. I see certainly a use for that, for instance to deploy an new version of an application : all files neatly packed together...&lt;br /&gt;And of course, there is the Cloud Services. You can connect to your Oracle Database Cloud Service from within SQL Developer. Under the covers a RESTful web service is called and the results are processed. There is also functionality implemented to transfer data to and from the cloud, using DataPump. If you upload data into the cloud, the data pump file is automatically created, uploaded en processed. Very neat!&lt;br /&gt;&lt;br /&gt;&lt;p class='blogpress_location'&gt;Location:&lt;a href='http://maps.google.com/maps?q=Ellis%20St,San%20Francisco,United%20States%4037.785369%2C-122.410099&amp;z=10'&gt;Ellis St,San Francisco,United States&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-3083515957223052589?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/10/oow2011-announcing-sql-developer-31-new.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-93mafzZhiIk/ToeD-AmKkPI/AAAAAAAAAs8/LSTiskG7uQA/s72-c/0.jpg" height="72" width="72" /><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-6195300324100539382</guid><pubDate>Wed, 05 Oct 2011 22:45:00 +0000</pubDate><atom:updated>2011-10-09T11:24:47.931+02:00</atom:updated><title>OOW2011 - Announcing the Oracle Public Cloud</title><description>&lt;a href='https://picasaweb.google.com/110887914562564459264/DropBox?authkey=Gv1sRgCIiem77Ese3GsAE#5658627244277380610'&gt;&lt;img src='http://lh3.ggpht.com/-2rIOUXqdQP4/Tod7f3uANgI/AAAAAAAAAs0/3fniTdNs8p4/s288/0.jpg' border='0' width='281' height='195' align='left' style='margin:5px'&gt;&lt;/a&gt;Until this Wednesday, Oracle`s statement was "&lt;i&gt;use Oracle systems to build your own cloud&lt;/i&gt;", but this is changed drastically now! Starting November 1, Oracle does this for you. Just subscribe and within 20 minutes you are up and running in the brand new "&lt;b&gt;&lt;i&gt;Oracle Public Cloud&lt;/i&gt;&lt;/b&gt;".&lt;br /&gt;So what do you get after this 20 minutes of waiting? It depends on what you ordered ;-). Within the Oracle Public Cloud (OPC), the following options are available:&lt;br /&gt;- an Oracle Database Cloud Service&lt;br /&gt;- a Java Cloud Service&lt;br /&gt;- a Social Connect Cloud Service, based on WebCenter&lt;br /&gt;- some Fusion Applications Cloud Services: CRM and HCM.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Oracle Database Cloud Service&lt;/b&gt;&lt;br /&gt;The Oracle Database runs on Exadata. Within a database you get your own schema(s) and tablespace(s), so while the database itself is shared with others, all data is partitioned and caged. To enhance security, Transparent Data Encryption will be switched on, and DataVault might also be used (still under consideration). You can connect to the database over http, rest and JDBC. You can order a small, medium or large service - ranging from 50 up to 250 GB storage space. The data transfer is limited to 6 times the storage.&lt;br /&gt;When using this service it might be important where your data is stored (for instance when you don`t want to expose your data under the American Patriot Act). Therefore, next to the current datacenter in Austin (TX), an European center will be opened in Edinburgh, and more local centers are planned.&lt;br /&gt;You can access the database via the APEX Listener, using RESTful web services. So any language that "speaks" REST, can use this service. Another option is to sign up for an APEX environment. Within a few minutes, you can start developing or deploying your APEX application in the cloud. Similar to apex.oracle.com, but in this environment you are allowed to run production applications!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Oracle Java Cloud Service&lt;/b&gt;&lt;br /&gt;With the Oracle Java Cloud Service (OJCS) you get your own - prebuilt - Oracle Virtual Machine on an ExaLogic server. This OVM contains one or more WebLogic 11g servers. Just like the database counterpart, this environment will be (almost) instantly available and easy to use and manage. When signing up, or later, you can associate your OJCS with an Oracle Database Cloud Service or a Fusion Application Cloud Service. There will be a pre-built integration with Fusion Apps.&lt;br /&gt;&lt;br /&gt;When signing up for one or more of these services, you can have a onetime free trial for 30 days. After that trial period (or immediately if you like), you will be charged per month for the services you`re signed up for. Both the Java and the Oracle Cloud Service comes in small, medium and large - and it is possible to up or downgrade. According to Oracle the pricing will be "competitive" - whatever that may mean...&lt;br /&gt;Before this all goes live, there will be an Early Access period.&lt;br /&gt;&lt;br /&gt;Apart from the Cloud Services itself, also a lot of tools will be "cloud enabled". There will be cloud add-ons for Eclipse and JDeveloper, Enterprise Manager will get a Cloud Control feature and SQL Developer 3.1 will have cloud support as well for up- and downloading data (using REST web services or using the new "Data Pump for the cloud".&lt;br /&gt;&lt;br /&gt;So who`s this all for? I think the small version of the services could be very interesting for setting up a development environment within minutes. No need to order hard- an software when starting a project, or to reserve your space in the "private cloud" of your own company.&lt;br /&gt;The medium and large versions are targeted at test or production systems. But with the current size limit, only small and medium businesses - or isolated departmental applications, can use this. And therefore it`s not only a competitor for Google and Amazon, but also for the smaller hosting companies. But that will be dependent on the price...&lt;br /&gt;&lt;br /&gt;More information an sign up - when the time is there - on &lt;a href="http://cloud.oracle.com"&gt;cloud.oracle.com&lt;/a&gt;!&lt;br /&gt;&lt;center&gt;&lt;a href='https://picasaweb.google.com/110887914562564459264/DropBox?authkey=Gv1sRgCIiem77Ese3GsAE#5660141512097650626'&gt;&lt;img src='http://lh5.ggpht.com/-6yHJFGwWCzA/Tozct28F18I/AAAAAAAAAtI/ErXu4a1v_XY/s288/0.jpg' border='0' width='420' height='562' style='margin:5px'&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class='blogpress_location'&gt;Location:&lt;a href='http://maps.google.com/maps?q=Ellis%20St,San%20Francisco,United%20States%4037.785369%2C-122.410099&amp;z=10'&gt;Ellis St,San Francisco,United States&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-6195300324100539382?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/10/oow2011-announcing-oracle-public-cloud.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-2rIOUXqdQP4/Tod7f3uANgI/AAAAAAAAAs0/3fniTdNs8p4/s72-c/0.jpg" height="72" width="72" /><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-318587439876437599</guid><pubDate>Tue, 04 Oct 2011 20:31:00 +0000</pubDate><atom:updated>2011-11-08T10:33:54.717+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">APEX</category><title>New APEX feature regarding RESTful web services</title><description>&lt;a href='https://picasaweb.google.com/110887914562564459264/DropBox?authkey=Gv1sRgCIiem77Ese3GsAE#5659737372249799138'&gt;&lt;img src='http://lh6.ggpht.com/-ijwlNlb30ns/TottJ0rzueI/AAAAAAAAAtE/T4h37WW8p1Q/s288/0.jpg' border='0' width='281' height='145' align='left' style='margin:5px'&gt;&lt;/a&gt;The upcoming Application Express version 4.2 - date not announced yet - will (or might), amongst other features regarding mobile support, also contain the functionality for managing the Apex Listener Resource Templates. From the SQL Workshop you can access the RESTful web services. And so create new or manage existing services of the APEX Listener. So therefore keep all stuff within one IDE. &lt;br /&gt;Very nice. It will enhance the use of the Resource Templates enormously! &lt;br /&gt;&lt;p class='blogpress_location'&gt;Location:&lt;a href='http://maps.google.com/maps?q=Howard%20St,San%20Francisco,United%20States%4037.784317%2C-122.401484&amp;z=10'&gt;Howard St,San Francisco,United States&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-318587439876437599?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/10/new-apex-feature-regarding-restful-web.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-ijwlNlb30ns/TottJ0rzueI/AAAAAAAAAtE/T4h37WW8p1Q/s72-c/0.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-6963637715445029888</guid><pubDate>Tue, 04 Oct 2011 00:14:00 +0000</pubDate><atom:updated>2011-10-04T02:30:57.998+02:00</atom:updated><title>Know your code : Automate PL/SQL standard enforcement</title><description>&lt;a href='https://picasaweb.google.com/110887914562564459264/DropBox?authkey=Gv1sRgCIiem77Ese3GsAE#5659427369559151762'&gt;&lt;img src='http://lh6.ggpht.com/-cCMr4f29vY8/TopTNSqyVJI/AAAAAAAAAtA/WfKTdPoGr9s/s288/0.jpg' border='0' width='224' height='281' align='left' style='margin:5px'&gt;&lt;/a&gt;This is a report of Lewis Cunningham's session at OOW11 on the subject t mentioned above.&lt;br /&gt;For code you not only need coding and naming standards, but performance and testing standards as well. And of course you need to check wether your code complies with your standards. For analysis you can either do static or dynamic analysis (and instrumentation as well). For static analysis you can use the data dictionary, PL/Scope and the source code itself. For dynamic analysis you have to use profilers. &lt;br /&gt;For retrieving the data dictionary you can query the _SOURCE, _DEPENDENCIES, _PROCEDURES and related views. When using PL/Scope you have to recompile the code with a "identifier:all" setting switched on. Then the results are retrievable from the _IDENTIFIERS view.&lt;br /&gt;Analysis should be done at the earliest stage, that is during coding. PL/Scope can be very handy for validating naming conventions, impact analysis and identifying scoping issues. &lt;br /&gt;For dynamic analysis, you have to set a baseline first. Save the timings for that baseline and check that after you made changes. Code coverage is also useful to detect pieces of dead code. You can get this by subtracting the dynamic, executed, code from the static, available, code. Alas code coverage is not 100%, because PL/Scope doesn't detect SQL. &lt;br /&gt;All this stuff should and can be automated....&lt;br /&gt;All details are in the Expert PL/SQL book. &lt;br /&gt;&lt;p class='blogpress_location'&gt;Location:&lt;a href='http://maps.google.com/maps?q=Howard%20St,San%20Francisco,United%20States%4037.784317%2C-122.401484&amp;z=10'&gt;Howard St,San Francisco,United States&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-6963637715445029888?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/10/know-your-code-automate-plsql-standard.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-cCMr4f29vY8/TopTNSqyVJI/AAAAAAAAAtA/WfKTdPoGr9s/s72-c/0.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-8383675058891721652</guid><pubDate>Mon, 03 Oct 2011 16:27:00 +0000</pubDate><atom:updated>2011-10-03T18:27:12.233+02:00</atom:updated><title>OOW2011 - Announcing Oracle`s Big Data Appliance</title><description>During the Oracle ACE Director briefing, Mark Townsend, VP Database Product Management, did "&lt;i&gt;State of the Union&lt;/i&gt;" on the Oracle database. This post is my report of his talk...&lt;br /&gt;At this moment around 55% of the installed base of the Oracle database is on 11.2. Last year, Oracle made more money from selling more database licenses and more options on existing installations.&lt;br /&gt;Mark mentioned that there are customers with 1,000`s of databases (and even one with 80,000!) - all using different versions of the database, of the operating system, storage etc. This situation is very hard to maintain and to keep up and running. Inn Oracle`s view, consolidation into a "private cloud" is the solution, and therefore Oracle offers Exadata. One (or less) databases are easier to secure, easier to make high available and easier to upgrade. And when you use Oracle software troughout your application stack, why not use Oracle hardware as well? So Oracle is striving towards a "&lt;i&gt;red stack&lt;/i&gt;" (i.e. all Oracle). &lt;a href='https://picasaweb.google.com/110887914562564459264/DropBox?authkey=Gv1sRgCIiem77Ese3GsAE#5658617086027063330'&gt;&lt;img src='http://lh3.ggpht.com/-O_F6dvRfqZk/TodyQlSZYCI/AAAAAAAAAss/sL_S0NPk0cM/s288/0.jpg' border='0' width='281' height='210' align='left' style='margin:5px'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The latest version of the Oracle database is 11.2.0.3. 11.2.0.4 is planned for somewhere next year. After that, Oracle 12 will replace the "&lt;i&gt;g&lt;/i&gt;" with a "&lt;i&gt;c&lt;/i&gt;" - for "&lt;i&gt;cloud&lt;/i&gt;" of course! - and should be available somewhere next year as well. Oracle 12c is not a subject on this OpenWorld. You can sign up for the beta test, which will start in November.&lt;br /&gt;Last week, the Oracle Database Appliance (ODA) was announced. The ODA comes with standard 24 cores, but you can license per core - completely different from the current licensing where you have to pay for all cores that are available in your hardware. In Oracle`s terminology, an "&lt;b&gt;&lt;i&gt;Appliance&lt;/i&gt;" is engineered for simplicity, anything called "&lt;i&gt;Exa-whatever&lt;/i&gt;" is engineered for speed&lt;/b&gt;. Next to the ODA, Oracle announced this Monday the "&lt;i&gt;Big Data Appliance&lt;/i&gt;", using a (new) Oracle NoSQL database (based on the Berkeley DB). This appliance will do massively parallel batch processing with Hadoop. Therefore Oracle will distribute Hadoop (and support it as well). There will be an Oracle Data Integrator (ODI) to get the data from Hadoop into a relational Oracle database. Another new product in this appliance is "&lt;i&gt;&lt;b&gt;Oracle R&lt;/b&gt;&lt;/i&gt;". "&lt;i&gt;R&lt;/i&gt;" is open source replacement for SAS - a statistical tool for data-analysts (like the software used by the female computer wizard in the tv-series Criminal Minds). So the BDA consists of this whole stack (as I understood it). The BDA solution (or framework or architecture) is aimed at processing huge bulks of no-SQL data (key-value pairs), like user clicks on website, phone calls etc, but is good for oldfashioned ETL too!&lt;br /&gt;&lt;br /&gt;&lt;p class='blogpress_location'&gt;Location:&lt;a href='http://maps.google.com/maps?q=Ellis%20St,San%20Francisco,United%20States%4037.785369%2C-122.410099&amp;z=10'&gt;Ellis St,San Francisco,United States&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-8383675058891721652?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/09/oow2011-database-update.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-O_F6dvRfqZk/TodyQlSZYCI/AAAAAAAAAss/sL_S0NPk0cM/s72-c/0.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-4439540418561391158</guid><pubDate>Mon, 03 Oct 2011 16:21:00 +0000</pubDate><atom:updated>2011-10-03T18:25:27.863+02:00</atom:updated><title>OOW2011 - Announcing Oracle NoSQL</title><description>&lt;a href='https://picasaweb.google.com/110887914562564459264/DropBox?authkey=Gv1sRgCIiem77Ese3GsAE#5658617713402735442'&gt;&lt;img src='http://lh6.ggpht.com/-k6gJypICV5g/Tody1Gcaa1I/AAAAAAAAAsw/pg7Dz_09oqQ/s288/0.jpg' border='0' width='281' height='166' align='left' style='margin:5px'&gt;&lt;/a&gt;&lt;br /&gt;NoSQL databases have already been around for a long time. Even Oracle owns one: Berkeley DB. Other well known databases are Voldemort, MongoDB and Cassandra.&lt;br /&gt;A NoSQL database contains only key-value pairs and targets on only simple operations: store and retrieve data. Any relationships and other rules should be enforced by the application itself. A NoSQL databases has a small footprint, is embeddable, (very) fast, scalable and easy to use and usually runs on a lot of operating systems.&lt;br /&gt;Therefore the sweet spot of NoSQL databases is processing loads of simple and unstructured data, like messaging, queueing and user web clicks. Not surprising that the big social networks, like LinkedIn, Facebook, Google and Amazon are heavy users of NoSQL databases. For some more advanced use some NoSQL databases have options for concurrency, transactional processing and high availability. Of course you can store this kind of data in a relational database, like the "regular" Oracle database as well, but that comes with a much higher price tag. An Oracle database can do so much more than just store data, but even if you don`t need those features, you still have to pay for them...&lt;br /&gt;This Monday Oracle announced their knew Big Data Appliance in order to acquire, organize and analyze large volumes of simple, unstructured data in ann easy way. Part of this appliance is the new Oracle NoSQL database, which is - surprise, surprise - based on Berkeley DB. But, unlike most competitors, an Oracle NoSQL has, next to a C++ and Java API, also a SQL API! So NoSQL doesn`t mean no SQL at all, but &lt;b&gt;Not Only SQL&lt;/b&gt;...&lt;br /&gt;Oracle NoSQL will be available in two versions: a Community Edition which is free and open source and an Enterprise Edition. The functionality is the same, there is only a difference in the licensing... I am very curious how this will land in the, usually very independent and open source minded, NoSQL world!&lt;br /&gt;More info on &lt;a href="http://www.oracle.com/technetwork/database/nosqldb/overview/index.html"&gt;Oracle OTN&lt;/a&gt;&lt;br /&gt;&lt;p class='blogpress_location'&gt;Location:&lt;a href='http://maps.google.com/maps?q=Ellis%20St,San%20Francisco,United%20States%4037.785369%2C-122.410099&amp;z=10'&gt;Ellis St,San Francisco,United States&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-4439540418561391158?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/10/oow2011-announcing-oracle-nosql.html</link><author>noreply@blogger.com (Roel Hartman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-k6gJypICV5g/Tody1Gcaa1I/AAAAAAAAAsw/pg7Dz_09oqQ/s72-c/0.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20567072.post-7549713533658224046</guid><pubDate>Mon, 03 Oct 2011 01:45:00 +0000</pubDate><atom:updated>2011-10-03T03:52:36.376+02:00</atom:updated><title>OOW2011 - Announcing the Exalytics machine</title><description>After a long rerun about Exadata, Exalogic and the Supercluster, during Sunday`s keynote, Larry finally announced the new &lt;b&gt;Exalytics&lt;/b&gt; machine. Extreme speed, due to 1 TB DRAM (holding 5 to 19 TB of compressed data) and 40 cores of Xeon CPUs. It is using a new version of TimesTen - the in memory database - and/or an new version of Essbase (for OLAP) and a new OBIEE. It not only handles relational and multidimensional data, but also "unstructured" data. You should connect the Exalytics machine to your Exadata machine with Infiniband. Then load (all) data into the Exalytics machine and start analyzing and processing in memory. It uses a "&lt;i&gt;Heuristic Adaptive In-Memory Cache&lt;/i&gt;", so data changes are detected and refreshed in the machine. Oracle claims it is around 20 times faster than their current configurations.&lt;br /&gt;Price tag? Not mentioned...&lt;br /&gt;&lt;br /&gt;&lt;p class='blogpress_location'&gt;Location:&lt;a href='http://maps.google.com/maps?q=Howard%20St,San%20Francisco,United%20States%4037.782809%2C-122.403532&amp;z=10'&gt;Howard St,San Francisco,United States&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20567072-7549713533658224046?l=roelhartman.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://roelhartman.blogspot.com/2011/10/oow2011-announcing-exalytics-machine.html</link><author>noreply@blogger.com (Roel Hartman)</author><thr:total>0</thr:total></item></channel></rss>

