Transparent Development? We Has It.

You may have noticed more talk about what we’re doing and why lately.

Comments are down, so either this is exceedingly dull to you, or you completely agree and have nothing to add. Either way, as we move forward with our plan to deploy Connect as an OpenSocial container and update the UI to support OpenSocial apps, I’m going to keep blogging about our progress.

A few reasons:

  1. Oracle people read here (maybe just the iPhone stuff) and use Connect. I’d like you guys to know what’s coming.
  2. What we deploy to Connect will eventually make it to Mix, and I’d like you guys to know what’s coming too.
  3. I like the transparent model. Involving your users during design and development helps the beta launch get closer to what people really want, or at least what they think they want.
  4. I don’t want to just talk about stuff in a vacuum. This way you can see that we’re actually working, or at least Rich is.
  5. IMHO agile development works even better if you can start the feedback loop earlier, rather than waiting for beta.
  6. Mix and Connect have been out for a while now, so the platform’s core feature set is pretty well known. We’re not starting from scratch, so your feedback will be based on experience.

Rich has been using Skitch to post screen captures of his mockups. Skitch is a great little (Mac only) tool that captures and uploads your shots. You can edit them as well, awesome little tool. The Jing Project provides similar functionality for Windows (and Mac). As for Linux, I’m looking for something, so if you know of a replacement, drop a note in comments.

Anyway, as Rich finishes his mockups, he’s uploading them to Skitch. You can subscribe to his new images feed and leave comments on the image pages. Very cool.

His latest mockup is the OpenSocial app directory page. Check it out here on Skitch.

Rich has great UI chops, which is why he does mockups. He’s overhauling the whole look and feel of Connect. We plan to dump the tabs in favor of an expandable, left-hand nav, similar to what Amazon does here; hover over “Shop All Departments” to open the nav. Nothing wrong with borrowing design elements you admire.

A couple people have commented that the new Connect UI is a step backwards for us. It was thrown together pretty quickly, loosely modeled after the blue Fusion middleware/EBS R12/PeopleSoft color schemes. The only goal I had was to make it obviously different from Mix; the original Connect UI, which was more popular, used a similar red/white motif, making it a bit hard to differentiate for first-timers.

This is more my fault than anyone else’s, since I pushed for the UI to be different. Look for Rich to sharpen up the UI in the next update.

Stay tuned for more mockups as we progress. Find the comments here or over on Skitch to let us know what you think.

This is great chance to help us build the next version of the platform and influence future versions of Connect and Mix.

When you’ve too much time…

On the way back to the hotel I recorded a little video with my camera. As I'm away from family I played around with iMovie (a great product which you get with OSX).

I put some music on it and tried to get it on YouTube. It's a matter of a click in iMovie. I didn't do any fancy thing, but as I found the video funny, I decided to keep it there.

So nothing educational or APEX related, just a man on his Vespa.

The title of the video: "My friend - Rich aka "the Fonz"

Mix Updates and New Features

Recently, even though we’ve been focusing on Connect and OpenSocial, but Mix hasn’t been standing still.

ENTP has been working to fix bugs and build features for Marketing that will be showcased heading into OpenWorld.

Last night, a slew of bug fixes and a new feature or two were deployed to Mix. If you’re a regular Mix user, you might want to bounce over and check out the new stuff, or if you’ve hit any of the bugs listed in the past, rejoice!

New Features
The shiny new feature released last night is group chat. Each group now has a persistent chat room that you can join for ad hoc conversations with anyone who happens to be there.

Also, group administrators can schedule group chats, designate panel members for the chat and invite people to attend.

To check out the chat feature, go to one of your groups and click the Upcoming Chats tab.

A less shiny, but useful new feature is the streamlining of notifications. All notifications (group invitations, network invitations, comments received, requests to join a private group, etc.) now go into your direct message inbox. You can control how often you receive an email reminder of these notifications using the new digest option on your profile.

Bug Fixes
The deploy also fixed a few nagging bugs:

  • Joining a group took a long time and if you clicked multiple times, you joined multiple times.
  • Search results included private group posts in the count, but no private items were displayed. This was a bit confusing if you didn’t have access to the private results.
  • Some questions were redirecting to the Q&A page when you clicked the link.
  • Failing to close an HTML tag inside the comment field caused some interesting behavior.
  • HTML entered into a comment was stripped out when the item showed up in the Activity Log.
  • The Activity Log wasn’t showing group information like other information, e.g. links to profiles and timestamps were missing.
  • People were able to accept invitations to private groups more than once.
  • The Activity Log on a group page wasn’t showing very interesting information.

Expect more frequent changes to Mix over the next few months. We had a long gap between deployments, but I think Marketing’s plan it to deploy Tuesdays and Thursdays, which should keep the new features and bug fixes flowing.

Thanks to Marketing and ENTP for working on Mix while we focus on Connect.

Blogger Meetup - Oracle OpenWorld 2008

Are you an Oracle-related blogger? Are you attending Oracle OpenWorld this year? If you answered yes to both questions, then you are invited to attend the yearly blogger meetup at the ThirstyBear Restaurant and Brewery, Tuesday September 23rd at 7:00 PM.

Mark Rittman has been the person organizing the blogger meetup events for the past few years. Mark passed the torch to me and I gladly volunteered to organize this year’s special event.

Like in 2007, OTN is sponsoring our get-together by establishing a tab at the bar, so there will complementary drinks and appetizers for a while (Thanks Justin, Vikki and Lillian).

If you would like to attend, make sure you RSVP on the event’s page on OracleCommunity.net.

See you…

---
Related Articles at Eddie Awad's Blog:


This Bug Brought To You By The Letter “U”

One silly bug. Ah ah ah ah!

Bugs come in all shapes and sizes. Big bugs, little bugs, bugs that crash your database, bugs that make a query run oddly. Some believe there are even bugs in human existence.

There is a running joke that has been around forever regarding bugs vs. features. I think this picture explains it better than I ever could (artist unknown):

Bug vs. Feature

My Bug Story

So I was working with a client running Oracle 10.2.0.1 on Windows 2003. He informed me that he was having trouble getting DB Control to work. I logged in, took a look, and saw that even though the EM service started, and ‘emctl status dbconsole’ returned successfully, the page was not viewable.

I went through the usual litany. I checked out listeners, looked at IE security settings, made sure it was using a static IP instead of DHCP, tried to telnet to the port, no help at all. I re-configured using EMCA a couple times with different settings, and still, no EM.

Suffice it to say, this was a bit unusual. And so I turned to Metalink. The search terms were tough (’em no workie’?), but I stumbled upon this gem:

Note: 342916.1
Subject: Problem: Startup: Db Control 10.2.0.1 Fails To Start when the hostname begins with the letter “u”

No, I’m not kidding.

It turns out that there is a problem with backslashes in the file “$ORACLE_HOME\host_SID\sysman\config\emd.properties” when using a hostname beginning with the letter “U” for omsRecvDir . To fix the issue, all I had to do was configure EM (emca -config dbcontrol db), wait for the error that the service could not start, and change emd.properties, substituting forward slashes (’/') for backslashes (’\') in the omsRecvDir variable.

And behold, EM started and worked fine!

If you have any funny bug stories of your own, please feel free to share.

A Useful Recruiter’s Blog

LewisC's An Expert's Guide To Oracle Technology

I wrote the other day about how recruiter's and it folk can work together. Tonight I was contacted by a recruiter looking for Java programmers. Besides me already taking another job, I'm not a java guy. I'm a database guy who does some java. So, I wrote hi

Will the Optimizer development team be at Oracle Open World?

The largest gathering of Oracle customers, partners, developers, and technology enthusiasts will happen in September when Oracle will host its annual user conference Open World in San Francisco and the Optimizer development group will be there! You will have two opportunities to meet the team -- attend the technical presentation "Inside the 11g Optimizer - Removing the mystery" on Tuesday morning at 9am or stop by the Oracle demo grounds (in Moscone West) to see all of the demos for the 11g new features and ask the development team any burning questions you may have!

Oracle AppsLab 2008-07-24 22:37:51

So, Noel Portugal is at it again.

He has expanded his pet project, OraTweet, to include OraTweetBot, which he says is:

. . . an XMPP/Jabber bot built with Java that will listen for tweets and post them to Twitter or to a database.

I never use the XMPP/IM Twitter integration, but I know it’s more popular than any client out there. And I know it’s been super flakey for months, even by Twitter standards. Well, apparently, Noel’s OraTweetBot can take its place.

But wait, there’s more. You can hook OraTweetBot to your database, and have it post to Twitter, basically your automating tweets. Noel goes on to say:

The big advantage of this is that you can actually map twitter users to a users table on the db and send on their behalf.

Hmm. I guess if you’re using the bot as a buffer for Twitter, i.e. posting in batch in case Twitter has taken a nap. Posting tweets on people’s behalf seems a bit odd, but I assume he means proxying people’s tweets and not impersonating them )

Anyway, very cool stuff. This is another APEX community contribution, at least OraTweet is, and Noel is an APEX guy. Those APEX people are having a big week.

So, nobody said boo when I talked about OpenSocial earlier this week, but here’s another reason OpenSocial is going to kick ass when we get it deployed. Noel originally approached me to find a home for OraTweet, ideally on Connect, but it’s written in APEX. Connect is JRuby, so we couldn’t really make it work.

Plus, not that many people have Twitter accounts; have a seat, it’s true. So, adding a Twitter client to the platform wouldn’t appeal to that many of our users.

With OpenSocial, Noel can create OraTweet as an app. OpenSocial is language agnostic, so OraTweet doesn’t need to be rewritten. People add apps they want to use, so there’s no impact to the platform. And bonus, all the data for OraTweet stay on Noel’s servers.

This is why OpenSocial makes sense for us. It allows developers to leverage our network and the social effects of it to spread their apps, and it allows them to develop in their language of choice on their own hardware.

Everybody wins.

I noticed David and Frank chimed in on Noel’s OraTweet post asking him for the URL to test it out; as an OpenSocial app, if I installed OraTweet, my Activity Log would show this. David and Frank and all my other contacts would see this. The Twitter users in my contacts would probably be interested to test out OraTweet.

This is the network effect, much more efficient than asynchronous commenting/replying or using email to spread your app.

OpenSocial is the future for our platform. We can’t possibly build all the enhancements people want into the platform, and frankly, this doesn’t make sense. OpenSocial lets other teams add the enhancements they want, leveraging their development skills.

We’re hoping to get all the container, architecture and UI work done sometime in late Fall. We plan to deploy to Connect first, work out the kinks, then move it to Mix.

What do you think? Are you totally geeked out of your mind? Doubtful. Leave a comment anyway. Everyone has an opinion.

I Know Nothing About Data Warehouse Appliances and Now, So Won’t You - Part IV. Microsoft takes over DATAllegro.

It looks like my blog entries about DATAllegro (such as this piece about DATAllegro and magic 4GFC throughput) are going to start to sound a wee bit different: Microsoft buys DATAllegro

Adding New Facts and Dimensions to the BI Apps Data Warehouse

I’ve been working with Informatica 8.1.1, the Oracle BI Applications and the DAC (Data Warehouse Administration) for a while now, and over this time I’ve tried to post a few techniques I’ve picked up whilst putting the tools through their paces. I’m going to round up the current set of postings now with one on how you add completely new facts and dimensions to the BI Apps data warehouse; this is particularly pertinent as the BI Apps data warehouse only really covers a small proportion of the modules available with Oracle E-Business Suite and therefore it’s inevitable that you’re going to want to add data from modules such as Projects into the warehouse. What’s good about the Oracle BI Applications is that there’s a published methodology for doing just that, and if you follow it you can customize your warehouse and still be supported by Oracle.

To take an example, I’m working with the Sales - Order Lines subject area in the BI Applications 7.9.5 with my data being sourced from Oracle e-Business Suite 11.5.10. As well as the standard dimensions of product, customer, time and so on together with my standard Sales Order Lines and Sales Invoice lines fact tables, I now want to add a new fact table called Sales Returns which I’ll be analyzing by Product, and by a new dimension called Return Reasons.

The other day I talked about customizing existing mappings through the use of a “placeholder” column, X_CUSTOM, that marked a spot in each warehouse table where you could safely start adding new columns. Mappings too have an X_CUSTOM placeholder and if you find the route this placeholder takes through the mapping, this marks a “safe path” through the mapping that you can thread your new columns through too. Whereas for customizations of this type you can take existing Source-Dependent Extract (SDE) and Source-Independent Load (SIL) mappings, copy them to a “custom” table and then amend them as needed, if you’re going to add new facts and dimensions to your warehouse you need to create SDE and SIL mappings from scratch.

To take my example, I need to load a dimension called Return Reason with data from my E-Business Suite database. To do this I start off by creating a new mapping called SDE_C_ORA_ReturnReasonDimension and add my source table to the mapping together with what’s called a “Source Qualifier” transformation. In the screenshot below, the yellow mapping object is the source qualifier and in it’s simplest form, it’s a SELET list of all the columns for a particular table and it’s this, rather than the source itself, that you extract from. The source qualifier lets you customize the SELECT statement so that you can add a filter or otherwise modify the source data before it’s processed.

Dim Sde

Next to the source qualifier in the mapping is another transformation, this time an “Expression” transformation. If you’re used to Oracle Warehouse Builder this is more or less the same, but if you notice in the top row of the transformation is a column (or “port” in Informatica terms) called DATASOURCE_NUM_ID. This column is then assigned to a variable called $DATASOURCE_NUM_ID that’s give a value by the DAC when the mapping is called. DATASOURCE_NUM_ID is one of a number of standard columns that you’ll find in all OBI Apps mappings and it’s one of two mandatory columns, the other being INTEGRATION_ID, the business key, that’s required for OBI Apps staging tables.

The Source-Independent Load that takes data from this staging table and loads it into the Return Reason dimension looks in this case fairly similar to the SDE mapping. You’ll notice the source at the start (which is the staging table, which happened to be the target in the previous mapping) together with its source qualifier, but then next to it is an example of a transformation, a lookup in this case, that can be shared amongst other mappings in the same way as pluggable mappings and public transformations in OWB. In fact they’re better than their OWB equivalents as they’re not just restricted to PL/SQL (as transformations are) and they update themselves in mappings whenever the transformation itself is edited (which isn’t the case with OWB pluggable mappings). In this case, the transformation retrieves the ID of the current ETL run which is then inserted, along with the ROW_WID (the standard name for a fact or dimension primary key column), the INTEGRATION_ID and the DATASOURCE_NUM_ID into the dimension table.

Dim Sil

This lookup transformation is another example of the added value you get with the OBI Applications, in that Oracle (or more precisely Siebel, or Informatica before them) have pre-written a number of standard ETL components that you can drop onto your mappings to, for example, make sure you don’t add a source row twice if you’ve had to restart an ETL process. These are things you inevitably end up writing yourself if you’re putting an OWB project together, in this case though they’re written for you and the standard way of constructing OBI Apps ETL processes is to use these bits of reusable ETL code.

Once you’ve picked up the ETL process ID and filtered out any rows that have already been processed for that ETL run ID, there’s another step where you work out whether the row is either a new one (and therefore needs to be INSERTed into the dimension table) or an existing one (which therefore needs to be UPDATEd).

Dim Upd Strategy

Then once you’ve loaded what’s called the “Update Strategy” transformation you then use this to insert or update into the actual dimension table.

Dim Load

Now this is one area I think where Informatica is weaker than OWB. In OWB, loading a table is very simple as you just map the source columns to the target, select either insert, update, insert/update, delete or whatever as the load strategy, and then the data just goes in the table. For facts and dimensions it’s even cooler as OWB takes care of lookup up the surrogate keys and loads these into the fact table, wheareas Informatica makes you do all this yourself. For inserting and updating regular tables though, you have to go through these Update Strategy transformations which to me don’t seem to add anything beyond what OWB does but instead does the same thing in a more convoluted manner. That said though, one thing I will say for Informatica is that the “fit and finish” of the product is way beyond OWB - as it’s a Windows application rather than Java, it’s much snappier, more stable and doesn’t suck all the memory out of your machine as you’re doing your work. Coming from a background of teaching OWB and having to get students used to the regular crashes, reboots and so on that are a standard feature of OWB, using Informatica over the last month has been quite an eye-opener.

Loading data into the fact table, at least from the SDE (extraction) side, is very similar to the dimension table. The SDE mapping takes data from the source table, adds the DATASOURCE_NUM_ID and stores it along with the INTEGRATION_ID in the fact staging table.

Fact Sde

Loading from the fact staging table into the fact table itself is a bit more complex. First off you need to add both the fact staging table, and the two dimension tables to the mapping as sources, then you join them using a single source qualifier transformation. Now the source qualifier transformation to me is one of the major flaws in Informatica; what you use it for is to bring together one or more source tables into a single mapping object which you then use as the source for the rest of your mapping. In a way it’s like an OWB joiner transformation, and in fact the joiner transformations you get in Informatica are actually there for joining data from different data sources, as the source qualifier transformation only allows joins across a single source system.

Fact Sq

So far so good, but the flaw for me in this transformation is that it’s backed up by an SQL statement, that you can edit and in most cases does get edited so that you can fine-tune the join condition, add custom columns in and so on. The problem is that this SQL statement has in my experience been responsible for around 90% of all mapping errors, as the column list in the SQL has to exactly match the column list in the mapping, it’s easy to introduce typos, it’s not that obvious if the join condition is wrong and so on.

Sq Sql

Contrast this with OWB, where you just create input and output groups in a joiner transformation, then drag source columns in to it and just use an SQL expression editor to set the join condition. I’ve had far less errors occur with OWB’s way of doing things and I just can’t see why Informatica have provided a transformation type with so much scope for human error.

Anyway, once you’ve got your source transformation working you can work through the rest of the fact load, again using reusable transformations to retrieve the ETL run ID, get the next surrogate key and so on. Going back to the OWB vs. Informatica subject again, one thing that I found very good about Informatica is that you’ve got more or less complete freedom to construct your ETL process in any way you want, you don’ t have to worry about whether it’d make sense as an SQL SELECT statement or whatever.

Fact Load

Now of course this doesn’t necessarily lead to the most performant of mappings (I couldn’t help noticing that every load took absolutely ages when moving data into the BI Apps data warehouse, but then again I was loading from E-Business Suite) but as a developer it’s a pretty exciting environment with a total absence of strange database error messages when you try and do anything complex. In fact this detachment from the underlying database was in some circumstances pretty good - unlike OWB where every move of the mouse seems to trigger a database transaction, Informatica only interacts with the database when you save mappings, for example, to the repository - although I can’t help thinking that on big data warehouse loads, where you’ve got an experience OWB and database perform creating the mappings, OWB is going to beat Informatica’s row-based approach through its use of set-based SQL. Still, it’s nice to be able to access data from a web service, say, without having to use some mind-bendingly complex internal Oracle database feature and I think Informatica have got a nice balance between developer productivity and leverage of the database, especially in the current release where certain ETL functions can be shipped back to the underlying database, in the same way that the BI Server function-ships calculations back to the underlying database.

The other thing I’ve kept thinking when working with Informatica is, on the one hand, how much it’s like OWB, and on the other, how much it’s not like Oracle Data Integrator, which is slated as being the ETL tool that will replace Informatica once Oracle get around to migrating all the mappings. ODI is strictly set-based and it’s mappings are very simple - just join a number of source tables, perform calculations en-route and load it into a target table, none of these fancy reusable transformations and so on that Informatica uses so widely. Unless Oracle replace all of this advanced ETL functionality with new ODI Knowledge Modules, I’m not quite sure how they’ll make the transition, but then again I’m no wiser than anyone else how this process is going and I guess we’ll hear more at Open World. For the time being though, that’s it for me on the BI Applications; I’m hoping to get the new Essbase 11 tools up and running over the weekend and then I’m starting work on some examples for the DW Seminar I’m running for Oracle in Denmark early in September.