Feed aggregator

Oracle Develop hits the road

Clemens Utschig - Tue, 2007-04-10 23:33

Oracle Develop: The Premier Conference for Developers

This spring, Oracle Develop—the premier conference for developers—is coming to a city near you. Don't miss it. You'll experience two days of expert-led, in-depth technical sessions, hands-on labs, advanced how-tos, and detailed tutorials. Work alongside the world's leading experts to expand your knowledge of popular technologies like Enterprise Java, SOA, .NET, Databases and PL/SQL, as well as Ajax, PHP, Spring, and more. This is your opportunity to network with local technologist while learning from the world's best.

More information can be found here

Oracle Develop is coming to Europe and Asia! Sign up now!

Christian Shay - Mon, 2007-04-09 13:53
Following up on the tremendous success of our San Francisco Oracle Develop conference, we are bringing Oracle Develop on the road to Europe and Asia in May and June. We will have in-depth technical sessions as well as hands on labs where you can get your hands dirty with the latest and greatest Oracle products.

Click here to go to the main Oracle Develop web page to read more and to sign up.

Here's are some of the planned .NET sessions:
Getting Started with Oracle and .NET
New Features in Oracle Database 11g for .NET Developers
PL/SQL Programming for .NET Developers: Tips, Tricks, and Tools
Best Practices for .NET Developers
Hands-on Lab: Building .NET Applications with Oracle


There will also be many sessions on Enterprise Java, SOA, Databases and PL/SQL, as well as Ajax, PHP, Spring, and more.

Dates and locations:
May 14-15 Seoul, Lotte Jamsil
May 17-18 Bangalore, The Grand Ashok
May 22-23 Beijing, China World Hotel
June 18-19 Munich, Arabella Sheraton
June 21-22 Prague, Prague Conference Center
June 26-27 London, ExCeL


Here's a couple photos I took at the San Francisco Oracle Develop .NET Hands on Lab, showing some pretty intense learning going on!





See you there!

Safari on Solaris!!

Siva Doe - Sun, 2007-04-08 23:49

Well, got your attention didn't I. Not exactly Safari, but got GTK-Webcore ported and running in Solaris (Nevada). Obligatory screenshot here.

It is crashing on clicking any link, though. You can type in some  URL (SWAN), and it works okay.

I have to say, this is very fast. Takes about 2 seconds for the screen to show up from the moment I type in the command. Would be interesting to see the development.

Dial 1-800-GOOG-411

Omar Tazi - Sun, 2007-04-08 20:43

This might not be open source but it is FREE. If you are tired of being charged $1.5 by your cellular carrier for every 411 call, try Google's Voice Local Search. It is still experimental but we know what Google means by experimental or beta. It's usually pretty darn good. Although it was released earlier this month I just had a chance to try it today and I it worked just fine. About 75% of my attempts worked, when I'm not lucky I just say "back" and I get another chance. This service doesn't include residential requests but you can use it to find businesses. You can try "San Francisco California" and "Mas Sake Sushi" and it'll connect you or just say "text message" and it'll send you an sms (both free of charge).

This is a $7B/year market, more than 2.5 billion 411 calls are made every year in America. AT&T is toying with the free 411 calls but competition for this service comes from Jingle Networks which seems to have captured more than 5% of the 411 U.S. market in 2006. Another serious player is TellMe which was recently acquired by guess who... Microsoft of course.

DATE comparisons: the scenic route

Oracle WTF - Sun, 2007-04-08 07:37

Need to calculate the number of minutes between two dates? Yes, the dull way is to subtract one from the other and multiply by 1440. But why do that, when you can simply convert each date into Julian format by converting it into a string and then back to a date, and converting the resulting date into a Julian string, and (in a separate step) applying TO_NUMBER to the result to get an integer, so that you can simply subtract one from the other and multiply by 1440.

Except that rounds to the nearest day, so an additional step is to calculate the minutes since midnight for each of the two dates, which you can do by simply converting each date into an 'HH:MI AM' string, then back to a date, then back to an 'SSSSS' string, converting it to a number, dividing by 60 and adding it to the result of the first calculation. I think.

Anyway, consider the following library of handy date functions our Oracle WTF Easter gift to you, the online development community.

CREATE PACKAGE dates_pkg
AS
    FUNCTION julian_date
        ( date_to_convert DATE )
        RETURN NUMBER;

    FUNCTION minutes_since_midnight
        ( timevalue DATE )
        RETURN NUMBER;

    FUNCTION minutes_elapsed
        ( lowdate DATE
        , highdate DATE )
        RETURN NUMBER;

END dates_pkg;
/

CREATE PACKAGE BODY dates_pkg
AS
    FUNCTION julian_date
        ( date_to_convert DATE)
        RETURN NUMBER
    IS
        varch_value VARCHAR (10);
        num_value NUMBER (20);
    BEGIN
        SELECT TO_CHAR
               ( TO_DATE(TO_CHAR(date_to_convert,'MM/DD/YYYY'),'MM/DD/YYYY')
               , 'J')
        INTO   varch_value
        FROM   dual;

        SELECT TO_NUMBER (varch_value)
        INTO   num_value
        FROM   dual;

        RETURN (num_value);
    END julian_date;


    FUNCTION minutes_since_midnight (
        timevalue DATE)
        RETURN NUMBER
    IS
        secs_elapsed NUMBER (20);
        mins_elapsed NUMBER (20);
    BEGIN
        SELECT TO_NUMBER
               ( TO_CHAR(TO_DATE(TO_CHAR(timevalue,'HH:MI AM'),'HH:MI AM')
               , 'SSSSS') )
        INTO   secs_elapsed
        FROM   dual;

        SELECT (secs_elapsed / 60)
        INTO   mins_elapsed
        FROM   dual;

        RETURN (mins_elapsed);
    END minutes_since_midnight;


    FUNCTION minutes_elapsed
        ( lowdate DATE
        , highdate DATE )
        RETURN NUMBER
    IS
        final_number NUMBER (20);
        low_julian NUMBER (20);
        high_julian NUMBER (20);
        num_days NUMBER (20);
        num_minutes NUMBER (20);
        temp_mins NUMBER (20);
        min_low NUMBER (20);
        min_high NUMBER (20);
    BEGIN
        SELECT julian_date (lowdate)
        INTO   low_julian
        FROM   dual;

        SELECT julian_date (highdate)
        INTO   high_julian
        FROM   dual;

        SELECT (high_julian - low_julian)
        INTO   num_days
        FROM   dual;

        SELECT (num_days * 1440)
        INTO   num_minutes
        FROM   dual;

        SELECT minutes_since_midnight (lowdate)
        INTO   min_low
        FROM   dual;

        SELECT minutes_since_midnight (highdate)
        INTO   min_high
        FROM   dual;

        SELECT (min_high - min_low)
        INTO   temp_mins
        FROM   dual;

        SELECT (num_minutes + temp_mins)
        INTO   final_number
        FROM   dual;

        RETURN (final_number);

    END minutes_elapsed;
END dates_pkg;

Just for fun, let's test it:

CREATE TABLE wtf_test (start_date NOT NULL, end_date NOT NULL) AS
SELECT DATE '2006-12-25' + DBMS_RANDOM.VALUE(1,365)
     , DATE '2007-12-25' + DBMS_RANDOM.VALUE(1,365)
FROM   dual CONNECT BY LEVEL <= 1000;

-- ...several runs here to allow for caching etc, last set of results shown...

SQL> set timing on autotrace traceonly stat

SQL> SELECT dates_pkg.minutes_elapsed(start_date,end_date) FROM wtf_test;

1000 rows selected.

Elapsed: 00:00:03.96

Statistics
----------------------------------------------------------
  16000  recursive calls
      0  db block gets
     74  consistent gets
      0  physical reads
      0  redo size
   9330  bytes sent via SQL*Net to client
    809  bytes received via SQL*Net from client
     68  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
   1000  rows processed

SQL> SELECT (end_date - start_date) * 1440 FROM wtf_test;

1000 rows selected.

Elapsed: 00:00:00.16

Statistics
----------------------------------------------------------
      0  recursive calls
      0  db block gets
     74  consistent gets
      0  physical reads
      0  redo size
  25485  bytes sent via SQL*Net to client
    809  bytes received via SQL*Net from client
     68  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
   1000  rows processed

So the handy package version takes 25 times as long as the 1-line SQL version.

And in the interests of fairness, in case you're thinking perhaps that is just the normal overhead of calling PL/SQL functions in SQL, let's try our own function:

CREATE FUNCTION minutes_elapsed
    ( lowdate DATE
    , highdate DATE )
    RETURN NUMBER
AS
BEGIN
    RETURN (highdate - lowdate) * 1440;
END minutes_elapsed;
/

SQL> SELECT minutes_elapsed(start_date,end_date) FROM wtf_test;

1000 rows selected.

Elapsed: 00:00:00.26

Statistics
----------------------------------------------------------
     21  recursive calls
      0  db block gets
    107  consistent gets
      0  physical reads
      0  redo size
  25496  bytes sent via SQL*Net to client
    809  bytes received via SQL*Net from client
     68  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
   1000  rows processed

Still 15 times faster.

Many thanks to Padders for sharing this one.

Oracle Beefs

Robert Vollman - Thu, 2007-04-05 15:20
I've got very few beefs with Oracle. It is extremely complicated and tough to learn compared to other relational databases, but that's partially offset by the tremendous documentation, and the huge Oracle community.Don't get me wrong, I love Oracle. I'm regularly impressed by the sophisticated and often clever ways it handles the requirements of an RDBMS, and quick to recommend its use. But Robert Vollmanhttp://www.blogger.com/profile/08275044623767553681noreply@blogger.com5

Learn about .NET and Oracle at Collaborate07 in Las Vegas

Christian Shay - Thu, 2007-04-05 09:27
The International Oracle Users Group (IOUG) will hold its Collaborate 07 conference in Las Vegas (April 15-17). If you attend, be sure to check out the .NET session and demonstration kiosk to hear more about new .NET features for Oracle Database 11g.

Session: Oracle Database 11g: What's New for Java, JDBC, .NET, PHP, and OCI

This session will be hosted by myself and Kuassi Mensah.

We will also have a "Application Development Tools" booth in the exhibit hall where you can see demos of Oracle Developer Tools for Visual Studio .NET, ODP.NET and .NET Stored Procedures in Oracle, SQL Developer, Application Express, and JDBC.

Exhibit Hall: Oracle Database 11g - Application Development Tools booth (DB-007)

See you there!

Oracle Application Express 3.0 a credible alternative to Microsoft Access?

Donal Daly - Wed, 2007-04-04 10:45
I hope most people know by now that Oracle Application Express (APEX) 3.0 has gone production, is available for download from OTN and our hosted instance, apex.oracle.com had also been upgraded to 3.0. There has been some positive reviews in the press recently, here are links to a number of them:

Oracle Updates Application Express Tool
Oracle updates free Web development tool
Oracle has big ambitions for Application Express
Oracle improves free tool for building Web Applications
Oracle Application Express 3.0 Touts Access Migration


Most customers I talk with have problems with Access and are looking at alternatives, which I guess is the reason I am talking with them in the first place. However, Microsoft Access is a popular desktop database and was updated recently as part of the Office 2007. That said, it is desktop centric and more suited (optimized?) for productivity applications used by individuals or small groups.

On our OTN page about the Application Migration Workshop we have published a high level feature comparison of Access and Oracle APEX.

Is Oracle Application Express 3.0 a credible alternative to Microsoft Access?

What do you think?

Sjoerd Michels contributes to SOA Best Practice Series, on automated deployment

Clemens Utschig - Sun, 2007-04-01 21:00
I am very happy (and proud) that I managed to get Sjoerd Michels (AMIS), one of our fellow SOA champions in europe, on board to contribute a new chapter to my SOA Suite Best Practice Series on OTN.

"In this Technical Note, you will learn to set up an automated build and deployment environment for your Oracle SOA Suite project. (Release 10.1.3.1 of Oracle SOA Suite features improved automated build capabilities; instead of the Oracle-specific obant Ant tool, plain-vanilla Ant is now used for building and deploying BPEL suitcases.) The goal is to automatically build Oracle's SOA Suite Order Booking demo application and deploy it to an Oracle Application Server instance that runs Oracle SOA Suite. Oracle's demo application is ideal here because it uses all the components in Oracle SOA Suite: Oracle Enterprise Service Bus (ESB), Oracle BPEL Process Manager, and Oracle Business Rules. The demo application also includes a number of Web services that are programmed in Java."

The whole article can be found here and while this one just got published there is lot more to come, especially around BPA, end to end design, and governance.

The next month will bring me back to europe to visit customers, help reviewing architectures, as well as speaking at several conferences throughout. Here is a sneak preview
  • SOA Telecom conference, Paris
    • Where I'll deep dive into implementing SOA in large enterprises and the many caveats when doing so

  • JAX (EAKON) 2007, Wiesbaden
    • After last year, I am happy to be back - this time on the SOA Management track, to evangelize together with a couple of good friends on the importance of the human factor

  • EOUC 2007, Amsterdam
    • The first year, the emea oracle user conference takes place, and it will be a blast - looking through the agenda, the lineup of sessions is unbelievable. I am happy to be part of it. This time it will be about technology, and the advanced concepts of the BPEL language.
If you are around, just send a ping, or come by the SOA booth after the session to say hello ..

IBM wants to finish JBoss

Omar Tazi - Thu, 2007-03-29 18:07
After losing its founder and leader to music and other personal interests shortly after being acquired by Red Hat, JBoss has a new set of issues to deal with. Marc Fleury left after sharing with his colleagues how he felt about working with Red Hat: "I am increasingly experiencing diminishing returns on my emotional and professional investments at Red Hat."

The new danger comes from outside. IBM and Covalent announced today that they had each contributed a significant amount of IP to Apache's Geronimo to help users migrate from JBoss to Geronimo. Although I personally consider this a serious attack on JBoss, Shaun Connolly (VP of product management in the JBoss division of Red Hat) begs to differ calling the IBM-Covalent initiative "uninteresting". I still think that JBoss today is far more superior than Geronimo if they play a feature war. But we all know the better products don't always win. I also believe that existing JBoss customers may not want to switch to a less performant application server if they are already in production. If it works why fix it? But I still think that when giants like IBM or Microsoft go after a much smaller company, we know how that movie ends.

Speaking of movies let's rewind the JBoss/IBM movie. Let me refresh your memory on a few events that put together are confusing to say the least:

- In September of 2003, JBoss and IBM team up to cool off the growing popularity of Microsoft's C#
- Not too long after this Marc Fleury started bashing BEA and IBM on his blog
- In May of 2005 IBM purchases Gluecode a company that employed most Apache Geronimo contributors and positions this acquisition as their entry level, lightweight application server. They later called the Geronimo-based product WAS Community Edition.
- Exactly two years after deciding IBM was nice and C#/Microsoft evil, Marc Fleury partners with Microsoft (Sept 2005). Their partnership shocked me (and I was not the only one) but I thought it was pretty clever after all. Marc described that day as his best day ever.
The idea there was that half JBoss servers were running on Windows so let's work together on making JBoss work even better on Windows and SQL Server,
Active Directory and single sign-on, etc.
- Then Red Hat buys JBoss, Microsoft becomes great friends with Novell and Fleury doesn't like working for Red Hat, fakes a paternity leave and never comes back to work. [Sorry I had to compress the story]
- Next IBM feels JBoss is kind of vulnerable and decides to partner with Covalent to hurt them even more, hence the announcement.

Concretely IBM
(which roughly employs half of Geronimo's committers) and Covalent (which already provides support for Apache's Tomcat, HTTP Server and Axis) are getting together to provide quality support for Geronimo and lure people away from JBoss. Paul Buck, director of IBM WebSphere open source said that they were going to provide a migration tool that would go through the J2EE application itself and look for any required changes at the source that we know are different between JBoss and Geronimo.

I am interested in your thoughts, do you think IBM with this move is going hurt JBoss' business in a significant way? Can somebody tell me why we never see Glassfish in these battles? It's also a Java EE open source application server but no one seems to take it seriously. I'd be interested to hear from anybody who reads this blog who uses Glassfish in the enterprise.

Oracle on The Linux Foundation Board

Omar Tazi - Thu, 2007-03-29 13:21
It's no news that Oracle has been a serious player in the Linux community. Our commitment to the Linux community started way back in 1998 when we released the industry's first commercial database on Linux. We also like Linux because we run our own IT systems on Linux and realize first-hand the benefit of lower IT costs from using Linux in a grid computing infrastructure. Additionally, Oracle's Linux kernel team contributed a cluster file system OCFS to the Linux kernel under the GPL license. OCFS2 was the first ever cluster file system in the mainline Linux kernel. Finally we recently announced Oracle Unbreakable Linux 2.0 which is a support program that provides enterprises with world-class global support for Linux.

All this to say that Oracle/Wim's nomination on the Linux Foundation board is no accident. Who better than Wim Coekaerts to represent Oracle on that diverse board?

Congrats Wim!

Programmatically removing all entities from a view object

Brenden Anstey - Tue, 2007-03-27 20:56
Recently I had a case where I needed to remove all rows from a view object and found that there was no existing method to do this.
The case for doing such an action is where there is a Master-Detail relationship and the detail relation is used only of there is a certain condition met in the master. If the condition is met then the detail is required, however if the user changes their mind then we need a way of removing any records that may have been created in the detail.

By adding the following method in the View Object Implementation class we can safely delete all records in the view object:

    public void removeAllRows(){
// rangeSize is -1
Row[] rows = getAllRowsInRange();
for (int r = 0; r < rows.length; r++)
if (rows[r] != null)
rows[r].remove();

}

Apache Trinidad version 1.0.0-incubating

Omar Tazi - Mon, 2007-03-26 19:24

A little more than a year ago Oracle donated a rich set of UI components based on the JavaServer Faces specification to the Apache Software Foundation under the Apache 2.0 license. The donation was originally part of Oracle ADF and the community chose the name it Apache Trinidad. Today we’re excited to announce that we reached another milestone: the release of Apache Trinidad Core version 1.0.0-incubating.

Both binary and source code are available at the Apache Incubator Trinidad Podling page.

Live demos and release notes are also available.

Enjoy!

Application Express 3.0

Herod T - Mon, 2007-03-26 09:03

We have eagerly been waiting for the release of APEX 3.0 , Last week, APEX 3.0 was made available for download. We use APEX extensively for internal application development and are porting many oracle forms applications that were internally developed to APEX. The users love APEX, the IT people love APEX, I as a DBA love APEX. We were looking forward to the PDF printing most of all, the ability to build PDF reports in APEX was going to be a huge feather in the cap for oracle and there was serious talk about having a vendor port a major application from a Delphi fat client to APEX, the vendor was on board, everything seemed to line up.

Then we installed APEX 3.0, the upgrade and installation on our test environment went perfectly, no problems at all. We start to read the documentation about the PDF printing, and we realize. We need to install XML/BI publisher to take advantage of the robust PDF printing that was all the rage. Well, that burnt us. Yes we can install the FOP stuff and do really basic reporting, but we had hoped the PDF generation was part of APEX 3.0.

We have had XML/BI publisher on the radar for awhile, knowing we will have to go to it with our Oracle E-Business suite upgrade later this year. I guess I had upgrade our evaluation copy to the newest version and see what has changed and try and figure out some business cases for spending the C$45,872 per CPU for XML/BI publisher.


We still love APEX 3.0, wonderful product, if your not using it, you should figure out a reason to.



Call PL/SQL from OAF

Andries Hanekom - Mon, 2007-03-26 04:33
In many situations developers need to execute PL/SQL code from there OAF application, be it legacy code or complex database manipulation better suited for PL/SQL.

The following example calls a PL/SQL procedure, passing in and receiving back parameter values. To ensure we athere to the MVC architecture, you must execute this code from your Application Module (AM). The method returns a HashMap object containing the two return values from the procedure, the HashMap can be returned to your controller, and used to raise a message for the user.

The following code is placed in your region or page controller, to call the method from your AM:

// Invoke the method
HashMap returnValues = (HashMap) am.invokeMethod(
"executePlsql");

// Get the returned values from the method
String status = (String) returnValues.get("Status");
String message = (String) returnValues.get("Message");

if (!status.equals("SUCCESS"))
{
am.invokeMethod("rollback");

// ERRORS from executePlsql
MessageToken[] tokens =
{
new MessageToken("STATUS", status),
new MessageToken("MESSAGE", message),
};

OAException errorMessage = new OAException("XX",
"XX_PLSQL_ERR", tokens,
OAException.ERROR, null);

pageContext.putDialogMessage(errorMessage);

The method to call your PL/SQL code, created in your page or regions AM:


import com.sun.java.util.collections.HashMap;
import java.sql.CallableStatement;
import java.sql.SQLException;
import java.sql.Types;

public HashMap executePlsql(String objectId, String objectSubType)
{
CallableStatement st = null;
HashMap returnValues = new HashMap(2);

try
{
String stmt = "BEGIN xx_pkg.xx_procedure( " +
"p_object_id => :1, " +

"p_object_sub_type => :2, " +
"p_status => :3, " +

"p_message => :4); END;";

OADBTransaction tr = getOADBTransaction();

st = tr.createCallableStatement(stmt, 1);


// Bind the input parameters
st.setInt(1, Integer.parseInt(objectId));
st.setString(2, objectSubType);


// Register return variables
st.registerOutParameter(3, Types.VARCHAR);
st.registerOutParameter(4, Types.VARCHAR);

st.execute();

// Assign returned values to variables
String status = st.getString(3);
String message = st.getString(4);

st.close();

// Populate HashMap with return variables
returnValues.put("Status", status);
returnValues.put("Message", message);

OAExceptionUtils.checkErrors(tr);
}
catch (SQLException sqle)
{
throw OAException.wrapperException(sqle);
}

return returnValues;
}

OAF White Paper

Andries Hanekom - Mon, 2007-03-26 03:58

I recently presented a white paper at the 2006 South African Oracle User Group, an introduction to OAF development called: Oracle Applications Development Framework - The New Frontier

I hope this will help new comer's to get a good introduction to OAF development, extension and personalization. If there are any questions related to the white paper, please drop me a comment and I will reply a.s.a.p.

Please leave me a comment with your e-mail address and will get the document to you.

How to reduce coding by extending Managed Beans

Brenden Anstey - Sun, 2007-03-25 01:43
After coding many backing/managed beans it became clear to me that there were a few things that I seem to be doing over and over, these were:
  • Getting values from the binding layer
  • Setting values in the binding layer
  • Executing operation bindings
  • Using a combination of the above in a backing bean method

The logical thing to do was be to but my code for doing this into a class and extend this class for all of my managed beans. The class is called JSFBean and uses the binding "#{bindings}" to access the binding container. The three methods in the class (so far) are: execute, getValue and setValue.

The bean which I have called JSFBean includes these three methods and some basic error handling. When creating a backing bean simply add "extends JSFBean" to the class definition.

JSFBean.java:
package com.delexian.ui.backing;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import oracle.adf.model.binding.DCBindingContainer;
import oracle.binding.OperationBinding;

public class JSFBean {

public JSFBean() {
}

public DCBindingContainer getBindings() {
FacesContext fc = FacesContext.getCurrentInstance();
ValueBinding vb = fc.getApplication().createValueBinding("#{bindings}");
DCBindingContainer dc = (DCBindingContainer) vb.getValue(fc);

return dc;
}

public boolean execute(String operation){
DCBindingContainer bindings = getBindings();
OperationBinding operationBinding = bindings.getOperationBinding(operation);
if (operationBinding == null){
FacesContext fc = FacesContext.getCurrentInstance();
fc.addMessage("Invalid Operation", new FacesMessage(operation + " is not a valid operation for this page"));
return true;
}

operationBinding.execute();

return operationBinding.getErrors().isEmpty();
}

public Object getValue(String el){
FacesContext fc = FacesContext.getCurrentInstance();
ValueBinding expr = fc.getApplication().createValueBinding(el);
return expr.getValue(fc);
}

public void setValue(String el, Object value){
FacesContext fc = FacesContext.getCurrentInstance();
ValueBinding expr = fc.getApplication().createValueBinding(el);
expr.setValue(fc, value);

}

}



An example usage in a backing bean Employees.java, extends JSFBean:
package com.delexian.ui.backing;

public class Employees extends JSFBean {
public Employees() {
}

public String calculate_action() {
execute("CalculateCommission");
execute("Commit");
return null;
}
}


Question

Robert Baillie - Fri, 2007-03-23 02:44
I've had this conversation a couple of time with people, and I've realised that I can't get to a satisfactory answer without some research. And I'm lazy. So I'm going to pose a question... and if I don't get a satisfactory answer here I might well send it to The New Scientist in the hope that they'll answer it. Assuming that the cost of setting up and maintaining the infrastructure is already taken care of, which is more energy efficient: an electric kettle or a stove top kettle?

Question

Rob Baillie - Fri, 2007-03-23 02:40
I've had this conversation a couple of time with people, and I've realised that I can't get to a satisfactory answer without some research. And I'm lazy. So I'm going to pose a question... and if I don't get a satisfactory answer here I might well send it to The New Scientist in the hope that they'll answer it.

Assuming that the cost of setting up and maintaining the infrastructure is already taken care of, which is more energy efficient: an electric kettle or a stove top kettle?

Oracle sues SAP

Herod T - Thu, 2007-03-22 22:26

Interesting


http://www.theregister.co.uk/2007/03/22/oracle_sues_sap/


I had seen some rumours floating around that Oracle was going to try and take over parts of SAP, guess the rumours were wrong, but some legal work was brewing. Makes you wonder who stated the rumours to begin with.



Pages

Subscribe to Oracle FAQ aggregator