blueMarine photographic workflow with Java

61

description

 

Transcript of blueMarine photographic workflow with Java

Page 1: blueMarine photographic workflow with Java
Page 2: blueMarine photographic workflow with Java

blueMarinephotographic workflow with Java

or Why You Should Really Ship

Swing Applications

Fabrizio GiudiciSenior Java Architect

Page 3: blueMarine photographic workflow with Java

www.javapolis.com

Overall Presentation Goal

Talk about issues withJava Rich Client Applications

A real project perspective

Enumerate and introduce solutions

Page 4: blueMarine photographic workflow with Java

www.javapolis.com

Speaker’s Qualifications

Senior Java Architect with 12 years of Java experience

Project leading, mentoring, teaching Member of JUG Milano, NetBeans Dream

Team Speaker at JavaPolis, Jazoon, JavaOne,

Jini Meeting Writer for NetBeans Magazine, Mokabyte Blogger at Java.Net

Page 5: blueMarine photographic workflow with Java

www.javapolis.com

Java is mature forRich Desktop Applications.

Just look beyond Swing.

Page 6: blueMarine photographic workflow with Java

www.javapolis.com

Java is mature forRich Desktop Applications.

Just look beyond Swing.

(beyond - not in another direction)

Page 7: blueMarine photographic workflow with Java

www.javapolis.com

The blueMarine project

Whole photographic workflow Be creative with technology Be open - more than some scripting APIs

FLOSS is not (only) a matter of freedom... ... but of better stuff

Do special things for special communities e.g. amateur astrophotographers, birdwatchers, ...

It all started in 2003

Page 8: blueMarine photographic workflow with Java

DEMO

Splash

Page 9: blueMarine photographic workflow with Java

www.javapolis.com

Java for Desktop Readiness Phases

Phase -1: prior 2005 Slow, poorly integrated, ugly L&F

Phase 0: 2005 JDK 5 spreads, “Extreme GUI Makeover” starts

Phase +1: 2006-2007 JDK 6, Aerith, SwingLabs matures TimingFramework, Nimbus, Filthy Rich Clients

Phase +2: 2008 Add NetBeans RCP: Filthy Rich Platform Clients Ready for complex applications - anyone?

Page 10: blueMarine photographic workflow with Java

www.javapolis.com

Java for Desktop Readiness Phases

Phase -1: prior 2005 Slow, poorly integrated, ugly L&F

Phase 0: 2005 JDK 5 spreads, “Extreme GUI Makeover” starts

Phase +1: 2006-2007 JDK 6, Aerith, SwingLabs matures TimingFramework, Nimbus, Filthy Rich Clients

Phase +2: 2008 Add NetBeans RCP: Filthy Rich Platform Clients Ready for complex applications - anyone?

blueMarine 0.8

died here

Page 11: blueMarine photographic workflow with Java

www.javapolis.com

Java for Desktop Readiness Phases

Phase -1: prior 2005 Slow, poorly integrated, ugly L&F

Phase 0: 2005 JDK 5 spreads, “Extreme GUI Makeover” starts

Phase +1: 2006-2007 JDK 6, Aerith, Swing TimingFramework, Nimbus, Filthy Rich Clients

Phase +2: 2008 Add NetBeans RCP: Filthy Rich Platform Clients Ready for complex applications - anyone?

blueMarine 0.8

died here

blueMarine 0.9

reborn here

Page 12: blueMarine photographic workflow with Java

www.javapolis.com

Problems

Page 13: blueMarine photographic workflow with Java

www.javapolis.com

Solutions

Page 14: blueMarine photographic workflow with Java

www.javapolis.com

If you can just remember four points...

NetBeans RCP NetBeans Visual Library SwingLabs NASA World Wind for Java

Page 15: blueMarine photographic workflow with Java

www.javapolis.com

OpenBlueSky

Where generic stuff spins off blueMarine Can be used for other applications Consolidated stuff will be submitted for

standard APIs enhancement

Page 16: blueMarine photographic workflow with Java

www.javapolis.com

References

weblogs.java.net/blog/fabriziogiudici bluemarine.tidalwave.it openbluesky.dev.java.net mistral.tidalwave.it forceten.tidalwave.it

Page 17: blueMarine photographic workflow with Java

www.javapolis.com

References

www.netbeans.org/features/platform www.netbeans.org/community/magazine graph.netbeans.org www.swinglabs.org timingframework.dev.java.net worldwind.arc.nasa.gov/java quaqua.dev.java.net nimbus.dev.java.net personales.ya.com/nimrod

Page 18: blueMarine photographic workflow with Java

www.javapolis.com

NetBeans RCP

Page 19: blueMarine photographic workflow with Java

www.javapolis.com

Question

What do you expect from a (desktop) framework?

Page 20: blueMarine photographic workflow with Java

20

Desktop frameworks

Solid foundation to base your application APIs working together, well tested Service discovery and provider Plugin support Messaging infrastructure (via events) Integrated help system And more

Page 21: blueMarine photographic workflow with Java

21

Swing is not a framework

Missing sophisticated components date picker, tree+table, etc...

Neither service discovery nor providers No plugins No messaging (only simple listeners) Threading issues JSR-296 (Swing Application Framework) not

good for large applications

Page 22: blueMarine photographic workflow with Java

22

What is NetBeans RCP?

NetBeansNetBeans IDE

NetBeans RCP{

Page 23: blueMarine photographic workflow with Java

23

What is NetBeans RCP?

NetBeansNetBeans IDE

NetBeans RCP{

Page 24: blueMarine photographic workflow with Java

24

What is NetBeans RCP?

NetBeansNetBeans IDE

NetBeans RCP{Your Desktop Application

Page 25: blueMarine photographic workflow with Java

25

NetBeans RCP

You start with a skeleton application You populate it

panels, views actions, menus, toolbars etc..

Often declaratively Based on Swing

You can integrate third parties' components You can control the Look&Feel

Page 26: blueMarine photographic workflow with Java

26

Most important NetBeans RCP APIs

Actions DataObjects Dialogs Explorer FileSystem Lookup

Modules Nodes Options Progress Visual Library Windowing/docking

Page 27: blueMarine photographic workflow with Java

DEMO

Explorers, Viewers, Actions

Page 28: blueMarine photographic workflow with Java

28

Lookup

Plays a fundamental role in many APIs Repository for a bag of objects Locator for services

Service service = Lookup.getDefault().lookup(Service.class);

Fires events “Global” lookup can be used as a simple

“event bus”

Page 29: blueMarine photographic workflow with Java

29

DataObject represents a file-based entity

Page 30: blueMarine photographic workflow with Java

30

You can extend DataObject

Page 31: blueMarine photographic workflow with Java

31

Lookup holds “capabilities”

Page 32: blueMarine photographic workflow with Java

32

A Node “represents” a DataObject

Page 33: blueMarine photographic workflow with Java

33

A Node has “capabilities” too

Page 34: blueMarine photographic workflow with Java

34

Representing set of selected (etc) Nodes

\

Page 35: blueMarine photographic workflow with Java

35

A View renders Nodes

Page 36: blueMarine photographic workflow with Java

36

An Action can be automatically enabled

Page 37: blueMarine photographic workflow with Java

37

Some points

You don't need to always use everything E.g. just Nodes, no DataObjects Can use them “incrementally”

NetBeans RCP keeps objects in sync E.g. updating a DataObject bound → Nodes E.g. Nodes bound to the same DataObject

Page 38: blueMarine photographic workflow with Java

38

NetBeans RCP stuff can be extended

What about a “cover flow” view? Use JOGL for fast 3D Just extend and create a new View TimingFramework for animating stuff

Page 39: blueMarine photographic workflow with Java

DEMO

CoverFlowView

Page 40: blueMarine photographic workflow with Java

40

Update Centers

NetBeans components (.nbm) can be added / removed on the fly can declare dependencies can be versioned can add actions, menus, toolbars

Pretty good for plugins (See demo in a few minutes)

Page 41: blueMarine photographic workflow with Java

www.javapolis.com

NetBeans Visual Library

Page 42: blueMarine photographic workflow with Java

42

NetBeans Visual Library

Support for graph-oriented modeling Nodes Arcs Routing Interaction

Can be creatively used Whiteboard paradigm Use interactivity: touch, drag, change objects

PS Can be used with plain Swing apps

add screenshotfrom UML or MIDPdesigner

Page 43: blueMarine photographic workflow with Java

DEMO

LightTable

Page 44: blueMarine photographic workflow with Java

www.javapolis.com

GeoSpatial Components

Page 45: blueMarine photographic workflow with Java

www.javapolis.com

JXMapViewer

A generic 2D, tile-based map renderer See Joshua Marinacci's blog Retrieves tiles from the web (or locally) Part of Swing-WS (SwingLabs) Can stick objects

to the map

Hint: integrate it with the Visual Library

Page 46: blueMarine photographic workflow with Java

DEMO

GeoViewer

Page 47: blueMarine photographic workflow with Java

47

NASA World Wind for Java

Java version of NASA World Wind 3D software that renders the Earth NASA terrain imagery Other data sets can be plugged in

if legal stuff is ok... Based on JOGL

Page 48: blueMarine photographic workflow with Java

DEMO

GeoViewer 3D

Page 49: blueMarine photographic workflow with Java

www.javapolis.com

Java Imaging APIs

Page 50: blueMarine photographic workflow with Java

www.javapolis.com

Java Imaging APIs

Many options (and dispersive?) Java2D, JAI, ImageJ, JMagick, JHLabs, ...

Some too difficult Wild behaviour and performance differences Parallel Computing is a must

Multi Core Small, local mini-grids Massive Grid Computing

There's not a global community

Page 51: blueMarine photographic workflow with Java

www.javapolis.com

Mistral: fix 'em up

Imaging meta-framework Multiple APIs can

be used together Simplifies APIs Supports multicore,

Jini, Sun Grid

Page 52: blueMarine photographic workflow with Java

52

Open Problems for blueMarine

Java still misses something on the desktop e.g. video streaming, USB support Can be worked around with JNI/JNA Java 7 is not too far

Some NB RCP stuff not fully customizable Better integration NB RCP ↔ SwingLabs Compliance to Apple HIG Linux + JOGL issues No JAI native support for Mac OS X

Page 53: blueMarine photographic workflow with Java

www.javapolis.com

A final point

Page 54: blueMarine photographic workflow with Java

54

Be efficient with innovation

“Cool stuff„ often means complexity Go quickly from idea to prototype Integrate easily others' stuff NIH isn't a killer-idea, but an idea-killer

Build cool demonstrators ... and cool applications soon after

(stay tuned for some new cool stuff)

Page 55: blueMarine photographic workflow with Java

www.javapolis.com

Concluding statement

Most showstoppers are history now.

Page 56: blueMarine photographic workflow with Java

www.javapolis.com

Concluding statement

Most showstoppers are history now.You CAN ship destkop apps.

Page 57: blueMarine photographic workflow with Java

www.javapolis.com

Concluding statement

Most showstoppers are history now.You CAN ship destkop apps.

There's a world beyond Swing.

Page 58: blueMarine photographic workflow with Java

www.javapolis.com

Concluding statement

Most showstoppers are history now.You CAN ship destkop apps.

There's a world beyond Swing.(SwingLabs, NetBeans RCP, etc...)

Page 59: blueMarine photographic workflow with Java

www.javapolis.com

Concluding statement

Most showstoppers are history now.You CAN ship destkop apps.

There's a world beyond Swing.(SwingLabs, NetBeans RCP, etc...)

Be creative. Mix 'em up.

Page 60: blueMarine photographic workflow with Java

Q&AView JavaPolis talks @ www.parleys.com

Page 61: blueMarine photographic workflow with Java

Thank you for your attention