Log on:
Powered by Elgg

Matthew Weaver :: Feeds

September 08, 2009

Data Applications and Aesthetics for iPhone

Media Dojo speaks with Roambi, a cloud-based data visualization application for iPhone. Roambi transforms numeric data such as Excel, PDF and others into unique visualizations that are specifically designed to be viewed on an iPhone. The solution runs completely in the cloud, tying into SalesForce.com as well as other enterprise systems such as SAP and Oracle.

read more


Is AT&T Apple's Achilles Heel?

There is no secret that I love my iPhone. I really do - I written several articles about how cool it is. So why am I thinking of getting rid of it. The answer: AT&T. Bit-O history here. I was one of the first few idiots who purchased iPhone 1.0 the same week it came out. Yes, I shelled out $600. I thought it was a good deal as I was writing about the phone and could (in my head, not so much my wife's) justify the cost. I also had to purchase the $85/mth plan from AT&T. So, now it is over two years later and I still have the same phone and I am still paying $85/mth. And I want to stop paying the man.

read more


The Mother of all Windows Error Messages

This is from an Apple fanboy blog, so they are particularly filled with glee about this latest boo-boo involving the new home to the Dallas Cowboys football team. First the punter drilled one into the LED board that wasn't as high as it apparently needs to be. Now the ribbon board meant to whip up fan  excitement instead beats up on Microsoft, all at no cost to Apple.

From TUAW:

It's one thing to have your computer crash. It's another to have it crash in front of thousands of sports fans. This latest humiliation took place Saturday at the pre-game festivities for the Oklahoma/Brigham Young game at the at the brand new $1.15 billion Cowboys Stadium in Arlington, Texas. Reader Jeff tells us that they had a breakdown on the scoreboard screens: first, the screens went blank, then displayed some odd ASCII gibberish, then announced to the assembled crowd that things weren't going so well in Microsoft land.

Jeff was there with his trusty iPhone to capture the moment for us, and we present it to you on this day when you're not working, either.

Oh, bother. 

read more


September 06, 2009

Chiefs

http://www.pbs.org/independentlens/ - CHIEFS explores the struggles of Native American basketball players at Wyoming Indian High School.


via


Extreme Sleepwalking

Science suggests people can carry out extremely complicated tasks while asleep - but what about murder?


via


September 04, 2009

ParaScale Founder & CTO to Speak at 4th Cloud Computing Expo

According to Cameron Bahar, Founder and CTO of ParaScale, hundreds of definitions from swarms of providers "have created confusion and devalued the cloud storage landscape." At his breakout session at SYS-CON's upcoming 4th International Cloud Computing Conference & Expo, being held November 2-4 in the Santa Clara Convention Center, Bahar will he says skip to the real questions, who is using cloud storage and why? His session will detail cloud storage customer examples and the benefits achieved by leveraging this technology. "No boring definitions or hand waving technology pitches, instead real-world use cases complete with lessons learned and best practices," adds Bahar.

read more


September 03, 2009

Jimi Hendrix: The Uncut Story [1/3]

1942-1961. With the blessings of Jimi's biological family and many of his closest friends, Passport brings the life of Jimi Hendrix to light as never before. From his upbringing in Seattle to his final days in London, JIMI HENDRIX: THE UNCUT STORY goes beyond all previously released documentaries to explore the complete life-story behind the legendary artist. Episode 3: 1967 - 1970 Part three highlights the culmination of Jimi's musical career. It was the peak of the counter-culture era and the world was changing at an incredible pace. Jimi's music and lifestyle were no exception. Here is where we follow Jimi to the height of his creative powers, both in the studio and on the road?only to watch it all come crashing down upon him. Through exclusive interviews, we get the facts behind Jimi's demise and examine the events surrounding his controversial death. But more than that - we come to know the spiritual message behind Jimi's work and celebrate the final stage of his life in music.


via


Jimi Hendrix: The Uncut Story [2/3]

1961-1967. With the blessings of Jimi's biological family and many of his closest friends, Passport brings the life of Jimi Hendrix to light as never before. From his upbringing in Seattle to his final days in London, JIMI HENDRIX: THE UNCUT STORY goes beyond all previously released documentaries to explore the complete life-story behind the legendary artist. Episode 3: 1967 - 1970 Part three highlights the culmination of Jimi's musical career. It was the peak of the counter-culture era and the world was changing at an incredible pace. Jimi's music and lifestyle were no exception. Here is where we follow Jimi to the height of his creative powers, both in the studio and on the road?only to watch it all come crashing down upon him. Through exclusive interviews, we get the facts behind Jimi's demise and examine the events surrounding his controversial death. But more than that - we come to know the spiritual message behind Jimi's work and celebrate the final stage of his life in music.


via


Jimi Hendrix: The Uncut Story [3/3]

1967-1970. With the blessings of Jimi's biological family and many of his closest friends, Passport brings the life of Jimi Hendrix to light as never before. From his upbringing in Seattle to his final days in London, JIMI HENDRIX: THE UNCUT STORY goes beyond all previously released documentaries to explore the complete life-story behind the legendary artist. Episode 3: 1967 - 1970 Part three highlights the culmination of Jimi's musical career. It was the peak of the counter-culture era and the world was changing at an incredible pace. Jimi's music and lifestyle were no exception. Here is where we follow Jimi to the height of his creative powers, both in the studio and on the road?only to watch it all come crashing down upon him. Through exclusive interviews, we get the facts behind Jimi's demise and examine the events surrounding his controversial death. But more than that - we come to know the spiritual message behind Jimi's work and celebrate the final stage of his life in music.


via


September 02, 2009

JDev 11gR1 - af:tree mashup – Using Hierarchical Tables and Drag-n-Drop

This blog post demonstrates creating an ADF Faces RC af:tree component that sources its data from a hierarchical database table, and supports drag n drop of the nodes.

Both these topics have been discussed and demonstrated by other excellent bloggers, the core of this post is to bring both concepts together, with my usual own proof of concept documentation that may be useful to readers.

The ADF Faces RC support for hierarchical data sources was defined by Chandu Bhavsar.

The drag and drop support for af:trees was documented by Luc Bors.

(Definitely the kudos for this post must go to both Chandu and Luc for their posts that sparked the inspiration for mine)

Data model

In this example we'll use the following table:

CREATE TABLE organisations
(org_id NUMBER(4,0) NOT NULL
,parent_org_id NUMBER(4,0)
,name VARCHAR2(35) NOT NULL
,CONSTRAINT org_pk PRIMARY KEY (org_id)
,CONSTRAINT org_parent_fk
FOREIGN KEY (parent_org_id)
REFERENCES organisations (org_id));
Note the FK between the table and itself, essentially modelling that an organisation has sub-organisations (or agencies).

The data:
ORG_ID  PARENT_ORG_ID  NAME
------ ------------- -------------------------------
1000 (null) Sage Computing Services
1010 1000 Training Division
1030 1010 Self Study Program
1040 1010 Classroom Training
2264 (null) Australian Medical Systems
3210 (null) Conservation Society
3214 3210 Forests Division
3216 3210 Rivers Division
4394 (null) Newface cosmetics
3842 (null) Institute of Business Services
3843 3842 Marketing Services
3844 3842 Financial Services
Hierarchical af:tree

This details the steps to setup an ADF BC layer and ADF Faces RC bindings to support the af:tree with hierachical data from the organisations table, as previously described in Chandu Bhavsar post.

Note the following steps are well documented on Chandu's post, though you will find slightly more detail on creating the correct bindings below:

1) Create a Fusion Web App with an ADF BC Model project and ADF Faces RC ViewController.

Model project

2) In the Model project create an empty Application Module (AM)

3) Create an Entity Object (EO) based on your organisations table in the database.

4) Create two View Objects (VO) based off the same EM. Name the first ParentOrgView and the second LeafOrgView.

5) Modify the ParentOrgView query as follows:
SELECT Organisations.ORG_ID, 
Organisations.PARENT_ORG_ID,
Organisations.NAME
FROM ORGANISATIONS Organisations
WHERE Organisations.PARENT_ORG_ID IS NULL
6) You don't need to modify the LeafOrgView query. For completeness it's described as follows:
SELECT Organisations.ORG_ID, 
Organisations.PARENT_ORG_ID,
Organisations.NAME
FROM ORGANISATIONS Organisations
7) Create a VO Link between the ParentOrgView and LeafOrgView as follows:

Essentially:

ParentOrgView.OrgId = LeafOrgView.ParentOrgId

8) Create a second VO Link between the LeafOrgView to itself as follows:

Essentially:

LeafOrgView (source).OrgId = LeafOrgView (dest).ParentOrgId

9) Externalize the VOs through the AM using the following model:

Essentially:

ParentOrgView1
- LeafOrgView1
- - LeafOrgView2

ViewController project

10) In your ViewController project create a new blank JSF page called treeMashupDemo.jspx.

11) From the Data Control Palette drag the ParentOrgView onto the page as a tree. In the Edit Tree Binding you should see the following:

Note the first level of the tree has been defined as model.ParentOrgView.

12) For clarity when testing later, ensure both the OrgId and Name are included in the Display Attributes.

13) With the model.ParentOrgView node selected in the Tree Level Rules, select the green plus (+) button and select LeafOrgView:


14) With the LeafOrgView node selected in the Tree Level Rules, ensure both the OrgId and Name are included in the Display Attributes.

15) Again with the LeafOrgView node selected in the Tree Level Rules, again select the green plus (+) button, and select LeafOrgView__2:

Note how the Tree Level Rules only has 2 nodes, but to the right of each node is the child of the current node. Of specific interest in the hierarchical relationship between LeafOrgView and LeafOrgView__2.

16) For reference the JSF af:tree code is as follows:
         var="node"
selectionListener="#{bindings.ParentOrgView1.treeModel.makeCurrent}"
rowSelection="single"
id="t1">



...the bindings look as follows:

..and the page def XML file as follows:

Package="view.pageDefs">




























Testing

On running our web page we see the following:

Note that the tree is happily showing the hierarchical data based on our tree bindings.

Adding drag n drop to the tree

The next set of functionality we wish to add is the ability to drag and drop nodes, or in our case organisations, in the tree. This involves adding support for drag n drop to the tree, as well as behind the scenes updating the dropped organisation's parent_org_id to that of the org_id of the organisation the original was dropped on.

The inspiration of this section comes from Luc Bors blog post, with slight difference in mine some of the supporting code is further spelt out:

1) As a reminder at the moment our af:tree code looks as follows:
         var="node"
selectionListener="#{bindings.ParentOrgView1.treeModel.makeCurrent}"
rowSelection="single"
id="t1">



2) We then introduce a collectionDragSource and a collectionDropTarget to support the drag and drop within the tree:
         var="node"
selectionListener="#{bindings.ParentOrgView1.treeModel.makeCurrent}"
rowSelection="single"
id="t1">
modelName="DnDOrganisations"/>
modelName="DnDOrganisations"
dropListener="#{treeBean.dragAndDrop}"/>



Note both support the MOVE action, they both specify a matching modelName DnDOrganisations, and finally the dropListener maps to a backing bean method we'll define in a moment. It's essential the modelName's match including the case of the name, and we'll be referring to this in the dragAndDrop backing bean treeBean method in a moment.

3) In your adfc-config.xml file declare a bean treeBean of class view.TreeBean:


4) And create a Java class TreeBean in your view package within the ViewController project.
package view;

public class TreeBean {

}
The real work for drag and drop is done in the backing bean method. However in order for the code to work there are a couple of items we need to configure in the Model project:

5) Create an AppModuleImpl for the AM

6) Create a LeafOrgViewImpl for the VO

7) Create a LeafOrgViewRowImpl for the VO and ensure to include the accessors

8) In the AM expose the LeafOrgView VO one more time as its own node (not a child), and call the usage LeafOrgViewAll as follows:


9) Finally the dragAndDrop code is as follows. Note the code includes inline documentation comments that explains what is occurring:
package view;

import model.AppModuleImpl;
import model.LeafOrgViewImpl;
import model.LeafOrgViewRowImpl;
import model.ParentOrgViewRowImpl;
import oracle.adf.model.BindingContext;
import oracle.adf.view.rich.component.rich.data.RichTree;
import oracle.adf.view.rich.datatransfer.DataFlavor;
import oracle.adf.view.rich.datatransfer.Transferable;
import oracle.adf.view.rich.dnd.DnDAction;
import oracle.adf.view.rich.event.DropEvent;
import oracle.adfinternal.view.faces.model.binding.FacesCtrlHierNodeBinding;
import oracle.jbo.Key;
import oracle.jbo.uicli.binding.JUCtrlHierNodeBinding;
import org.apache.myfaces.trinidad.model.CollectionModel;
import org.apache.myfaces.trinidad.model.RowKeySet;

public class TreeBean {

public DnDAction dragAndDrop(DropEvent dropEvent) {
// The default action - do nothing
DnDAction result = DnDAction.NONE;

// Represents the object that was dropped
Transferable draggedTransferObject = dropEvent.getTransferable();

// The data in the draggedTransferObject "Transferrable" object is the row key for the dragged component.
// Note how the DnDOrganisations value in the call to getDataFlavor() matches the collectionDragSource
// and collectionDropTarget tags model attributes in our page. It's essential the strings exactly match.
DataFlavor draggedRowKeySetFlavor = DataFlavor.getDataFlavor(RowKeySet.class, "DnDOrganisations");
RowKeySet draggedRowKeySet = draggedTransferObject.getData(draggedRowKeySetFlavor);

if (draggedRowKeySet != null) {
// We grab the tree's data model, essentially the CollectionModel that stores the complete tree of nodes
CollectionModel treeModel = draggedTransferObject.getData(CollectionModel.class);

// Ask the collection model to set the current row/node to that of the transferrable object that was dropped
Object draggedKey = draggedRowKeySet.iterator().next();
treeModel.setRowKey(draggedKey);

// Grab that current row (thanks to the last statements work) and get the row's OrgId. It's essential the
// OrgId is one of the displayed attributes in the tree binding.
FacesCtrlHierNodeBinding draggedTreeNode = (FacesCtrlHierNodeBinding)treeModel.getRowData();
oracle.jbo.domain.Number draggedTreeNodeId = (oracle.jbo.domain.Number)draggedTreeNode.getAttribute("OrgId");

// The dropEvent carries the target/location's row key where the dropped organisations was dropped
Object serverRowKey = dropEvent.getDropSite();
RichTree richTree = (RichTree)dropEvent.getDropComponent();
// This time we use the tree itself to make it's current row that of the server row key (ie. the destination)
richTree.setRowKey(serverRowKey);
// And we retrieve that row's index
int rowIndex = richTree.getRowIndex();

// The rich tree based on the index allows us to retrieve that current row/organisation's OrgId
oracle.jbo.domain.Number targetNodeId = (oracle.jbo.domain.Number)((JUCtrlHierNodeBinding)richTree.getRowData(rowIndex)).getAttribute("OrgId");

// At this point we now have the OrgId of the dropped organisation (draggedTreeNodeId) and the OrgId of the
// organisation that is the target. From here we simply want to update the dropped organisations' ParentOrgId
// to the OrgId of the target. This is best done through the model layer.
//
// Normally this would be best done by fetching the appropriate iterator bindings and making the changes through
// the bindings. However in this case the tree doesn't expose any iterator for the leaf nodes, so we need to
// resort to retrieve the Model project's objects and do the work ourself.

// Retrieve the AM and then a handle on the LeafOrgViewAll - this gives us access to all rows regardless of
// where they exist in the hierarchy
AppModuleImpl am = (AppModuleImpl)BindingContext.getCurrent().getDefaultDataControl().getApplicationModule();
LeafOrgViewImpl leafOrgView = (LeafOrgViewImpl)am.getLeafOrgViewAll();

// Given the dragged organisation's OrgId, construct a key object, and then retrieve that row from the VO using
// the key
Object[] nodeObjectKey = new Object[] {draggedTreeNodeId};
Key nodeKey = new Key(nodeObjectKey);
LeafOrgViewRowImpl nodeRow = (LeafOrgViewRowImpl)leafOrgView.getRow(nodeKey);

// See below
boolean parentNode = nodeRow.getParentOrgId() == null;

// Finally update that organisaiton's ParentOrgId to that of the target organisation's OrgId
nodeRow.setParentOrgId(targetNodeId);

// And commit the changes – obviously this has side effects on any other uncommitted data, be careful
am.getDBTransaction().commit();

// If we've moved a parent node to become a leaf, we need to force the parent VO to requery itself to correctly
// reflect the data change. This is destructive on the current expand/collapsed state of the tree.
// I'm not overly sure of a solution for this; maybe a reader can suggest one.
if (parentNode) {
am.getParentOrgView1().clearCache();
am.getParentOrgView1().executeQuery();
}

// Indicate to the dragEvent that the operation was succesful and visually the move should occur in the tree
result = DnDAction.MOVE;
}
return result;
}
}
You'll note in the code I take pains to mention it's essential the OrgId is one of the displayed attributes for the tree. If you fail to supply this the routine has no OrgId attribute to fetch the OrgId value from.

This does pose a problem, because while during testing it's fine to show the OrgId and Name of the organisations in the tree, for production we might not want to show these meaningless internal ID numbers to the user. The simple fix for this is to return to the af:tree and update the af:outputText component who is responsible for what values to show for each node in the tree, changing the EL expression from #{code} to #{code.Name}:
         var="node"
selectionListener="#{bindings.ParentOrgView1.treeModel.makeCurrent}"
rowSelection="single"
id="t1">
modelName="DnDOrganisations"/>
modelName="DnDOrganisations"
dropListener="#{treeBean.dragAndDrop}"/>



This ensures only the name attribute is displayed:

read more


September 01, 2009

Intalio Acquires Webtide, Developer of the Jetty Application Server

Intalio, The Enterprise Cloud Company, has announced the acquisition of Webtide, the team behind the Jetty open source Java application server. Jetty is currently used on millions of web servers, and powers products such as Cisco SESM, Google AppEngine, Google GWT, HP OpenView, IBM Tivoli NetView, Oracle WebLogic Business Connect, Sybase EAServer, and Yahoo! Zimbra. Jetty has become the most popular application server for embedding into other open source projects, including ActiveMQ, Alfresco, Eclipse, Felix, FUSE, Geronimo, GigaSpaces, JBoss, JRuby, Liferay, Maven, Nuxeo, OFBiz, Tungsten, and Ubuntu. Jetty is also used as a standard Java application server by many open source projects for cloud computing, including Eucalyptus and Hadoop.

read more


JSR Watch: Summer Housekeeping

It's summer. JavaOne is behind us, and much of Europe is on holiday :) At this time of year life in the JCP slows down somewhat. Nevertheless JSRs continue to move through the process, and this month I'll discuss several of these, and demonstrate how their progress has been facilitated by some of the housekeeping changes we've recently made in our processes.

read more


KonaKart v4.1.0.0 Released

DS Data Systems UK Ltd. is pleased to announce the release of KonaKart v4.1.0.0, a Java-based eCommerce shopping cart application that provides an extensive set of features to enable retailers to successfully sell their products over the Internet. KonaKart is a Java / JSP / XML based solution with easy-to-use Java APIs and a SOAP Web Service interface that allow you to quickly integrate eCommerce functionality into your existing systems.

read more


August 31, 2009

Sun Loses Another $147M

Sun tiptoed out its June results. No press release and certainly no conference call, only a SEC filing and a posting on its web site last Friday, covering what will probably be its last quarter as an independent company before it collapses into Oracle’s waiting arms – that is unless the European regulators screw it over. The erstwhile high flyer lost another $147 million, 20 cents a share, with sales down 31% to $2.63 billion, more than the $2.37 billion financial analysts expected and towards the high end of Sun’s guidance.

read more


A Simple Java Class for Amazon SimpleSQS

A very simple POJO Java class for accessing all of the features of Amazon's SQS web service. Full API support. No dependencies. Just use it.

read more


August 30, 2009

Are Websites Becoming Irrelevant?

Recently, I came across an article, 4 reasons websites are becoming irrelevant by Adam Broitman for iMediaConnection.com. Many things the article says are true, but when it comes to innovative new services like the AR app, the author offers no solution to the fragmentation problem we all face in mobile. Only companies that aim to have a extremely innovative, first mover kind of image, will go this way, because those apps won’t reach beyond the platform they were created for (e.g. iPhone). Of course, the iPhone has reached a critical mass in some markets (mainly US), but I’d share Google’s analysis, that even Google won’t be rich enough to support apps for all the different platforms out there.

read more


ParaScale Named “Bronze Sponsor” of Cloud Computing Expo

SYS-CON Events announced today that ParaScale, the leader in cloud storage software, was named "Bronze Sponsor" of SYS-CON's 4th International Cloud Computing Conference & Expo (www.CloudComputingExpo.com), which will take place on November 2 - 4, 2009, Santa Clara Convention Center, in Santa Clara, California. The event is expected to attract over 1,500 developers, engineers, architects, IT managers, and hardware and software professionals of every stripe.

read more


August 29, 2009

Anarchism in America

A colorful and provocative survey of anarchism in America, the film attempts to dispel popular misconceptions and trace the historical development of the movement. The film explores the movement both as a native American philosophy stemming from 19th century American traditions of individualism, and as a foreign ideology brought to America by immigrants.


via


Mao's Bloody Revolution Revealed

The first half of the documentary covers the course of the Chinese revolution up to the the Great Proletarian Cultural Revolution. The second half covers what is referred to as the Cultural Revolution decade of 1966 to 1976.


via


August 28, 2009

Cisco’s WebEx Boss Moves to Salesforce.com

Salesforce.com has poached Cisco mandarin Doug Dennerline, the head of Cisco’s Collaboration Software Group, the repository of its WebEx widgetry and its cloud and SaaS ambitions – like the idea of taking on Microsoft’s $60 billion Office franchise with some Google Apps-like mojo that could be shared through WebEx – and made him head of enterprise sales in the Americas, reporting to worldwide sales chief Frank van Veenendaal.

read more


Jobs Reported Micromanaging Tablet Development

Since he returned to work in June from his liver transplant, Apple CEO Steve Jobs has been micromanaging the development and positioning of a new widely rumored tablet device and apparently driving his staff nuts, according to the Wall Street Journal, whose reporter got Jobs to e-mail her back saying “much of your information is incorrect.”

read more


Apple to Spring Snow Leopard on August 28

Apple said its Snow Leopard Mac OS X 10.6 upgrade would go on sale Friday, August 28, at its retail stores and authorized resellers, a tad earlier than expected and two months before Windows 7 is supposed to be generally available. Apple’s online store started accepting pre-orders Monday. The operating system, thin on new features and more focused on fine-tuning, has built-in support for Microsoft Exchange Server 2007, which means Mac could theoretically replace PCs with Mac OS X Mail, Address Book and iCal being used for e-mail, calendars and contacts.

read more


Tranxition Named “Wireless Network Sponsor” of Virtualization Conference

SYS-CON Events announced today that Tranxition, a leading provider of PC personality management, was named "Wireless Network Sponsor" of SYS-CON's 7th International Virtualization Conference & Expo (www.VirtualizationConference.com), which will take place on November 2 - 4, 2009, Santa Clara Convention Center, in Santa Clara, California.

read more


OpenXava 3.1.4 Released

OpenXava 3.1.4 is a framework focused in productivity for developing business Java applications. The idea is that you write only your POJOs annotated with JPA and you get an application ready for production. With OpenXava, you only need to write your model, POJOs and Java annotations. You do not need to write the view, and the controller (for CRUD, printing, etc) is reused. And from that you'll have an application for CRUD, report generation in PDF, export to Excel, searching, sorting, validations etc. You only need to write a simple Java class, no XMLs, no JSPs and no code generation.

read more


Visual Studio IDE Productivity Tools

DevExpress technologies for Visual Studio help you build your best, reduce the amount of code you write, increase your productivity, and create stunning applications for Windows and the Web in the shortest possible time. CodeRush for Visual Studio® .NET helps you create sophisticated code blocks in seconds and extend code templates instantly. CodeRush completes identifiers as you type and expand or contract selections logically. With CodeRush, you will be able to instantly place selected code inside Try/Catch blocks, Regions and your own custom wrappers with ease. You can even reverse the logic of selected code and revisit important points within your code instantly (and effortlessly swap between locations).

read more


<< Back Next >>