SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Java sul tuo Mac
Marcello Teodori
Java User Group Milano
http://www.jugmilano.it
marcello.teodori@jugmilano.it
Agenda
●   Perché Java sul Mac?
●   Java Standard Edition
●   Integrazione con il Desktop
●   Programmare Cocoa in Java
●   Sviluppo Java ed IDE
●   Java Enterprise Edition
●   Sviluppo su Micro Edition
●   Stato attuale dell'implementazione


                               JUG Milano – Java sul tuo Mac 2
About Marcello
Ingegnere Informatico, appassionato di Java, open source
e programmazione in generale, lavora dal 1997 nello
sviluppo software, principalmente in ambito web e mobile
internet.
Dal 2004 è socio in ExcogitaNet srl e collabora attivamente
con il Java User Group Milano.
      laddove possibile cerca in tutti i modi
            di utilizzare il suo Mac!
Partecipa con impegno molto variabile alla community open
source, principalmente con diverse localizzazioni di
applicazioni Mac che utilizza abitualmente.
                                    JUG Milano – Java sul tuo Mac 3
Perché Mac OS X?
●   Interfaccia utente intuitiva
●   Applicazioni iLife
●   Servizi Applicativi evoluti: AppleScript,
    Spotlight, VoiceOver, Bundle, ecc.
●   Qualità ed ergonomia dell'hardware Apple
●   “it just works”: supporto integrato per gran
    parte di tecnologie e periferiche
●   Unix-based (BSD+Mach)
●   Java runtime integrato

                                JUG Milano – Java sul tuo Mac 4
Perché sviluppare su Mac OS X?
●   Developer Tools inclusi, IDE Xcode
●   Documentazione ADC
●   open source pre-installato e ready-to-go
●   the best Unix developer experience!
●   Architettura a Layer
            http://developer.apple.com/macosx/architecture/




                                          JUG Milano – Java sul tuo Mac 5
Perché Java su Mac?
●   Aqua LAF per Swing, ok anche per applicazioni per Mac
●   Integrazione con il desktop
●   Cocoa API per sviluppare applicazioni Mac-only
●   mindshare: James Gosling, James D. Davidson...

ma...
● WORA è un concetto non sempre rispettato!!!

● librerie con parti native JNI non sempre disponibili

● problematiche allineamento JDK con Sun

● performance inferiori rispetto ad altri OS




                                     JUG Milano – Java sul tuo Mac 6
Java Standard Edition
È un framework standard di Mac OS X, pre-
installato insieme al sistema operativo e situato in:
     /System/Library/Frameworks/JavaVM.framework/
contenente le seguenti versioni della JVM:
● 1.3.1 (in EOL, non disponibile su Intel)

● 1.4.2 (default)

● 5.0 (non pre-installato, ma disponibile come free

  download dal sito Apple)
Implementa anche un Internet Plug-In che rende
Java disponibile all'interno di tutti i browser.
                                JUG Milano – Java sul tuo Mac 7
“it just works”?
Non del tutto, il directory layout di un framework è
completamente diverso da quello tipico della JVM,
ma non è un problema... ci sono solo alcune cose
da sapere...
● JAVA_HOME in /Library/Java/Home

● symlink eseguibili in /usr/bin

● default JVM impostabile da symlink:

    $JAVAVM_FRAMEWORK_HOME/Versions/CurrentJDK
●   caricamento estensioni da:
    (~|/|/System|/Network)/Library/Java/Extensions


                                   JUG Milano – Java sul tuo Mac 8
Altro da installare?
I Developer Tools installano automaticamente la
versione 1.6.5 di Ant, utilizzata da Xcode:
   –   ANT_HOME in /Developer/Java/Ant
   –   symlink in /usr/bin


Attenzione: i javadoc del JDK 1.4.2 sono solo
nell'installazione adhoc, non in quella standard!
Quelli di 1.3.1 e 5.0 invece vanno scaricati da Apple
Developer Connection:
          http://developer.apple.com/java/download/
                                     JUG Milano – Java sul tuo Mac 9
Write Once Run Anywhere?
●   la JVM 1.4.1+ supporta l'esecuzione dei JAR
●   nessun problema per applicazioni command-line
    o server pure Java
●   applicazioni pure Java dotate di installer nativi
    possono essere installate su altro OS e poi
    spostate
●   applicazioni o librerie che fanno uso di JNI
    devono avere la versione binaria adhoc
●   le applicazioni GUI hanno LAF Aqua ma non
    sono automaticamente conformi alle Apple
    Human Interface Guidelines!
                                 JUG Milano – Java sul tuo Mac 10
Apple System Properties
Il metodo più rapido e meno invasivo per adattare
un'applicazione Java a Mac OS X:
     java -D<apple-system-property-key>=<value> ...


Alcuni esempi
●
    apple.laf.useScreenMenuBar
    se impostata a true, imposta la barra dei menu in stile apple
●
    apple.awt.brushMetalLook
    se impostata a true, imposta il look metal su AWT come Safari


Reference
http://developer.apple.com/documentation/Java/Conceptual/JavaPropVMInfoRef/index.html



                                                      JUG Milano – Java sul tuo Mac 11
Apple Virtual Machine Options
Posso fare ancora qualcosa, ad esempio integrare
l'applicazione con il Dock, utilizzando le virtual
machine options specifiche di Mac OS X:
     java -X<apple-virtual-machine-option> ...


Ad esempio:
●
    -Xdock:icon=<percorso-file-icns>
    creo un file .icns in Icon Composer, tool incluso nei Developer Tools, e
    ne imposto il percorso: l'icona apparirà sul Dock al posto di quella
    standard utilizzata dalle applicazioni Java
●
    -Xdock:name=<nome-applicazione>
    utilizza sul dock e sul menu dell'applicazione il nome indicato al posto
    del FQCN della relativa classe Main

ma...
non posso obbligare gli utenti a lanciare le applicazioni da Terminale!

                                                 JUG Milano – Java sul tuo Mac 12
Cosa è un Bundle?
● concetto ereditato da NextStep
● unità indipendente ed autocontenuta


● una directory su filesystem con dato layout


● contiene un descrittore in formato XML plist


● ne esistono diversi tipi: document, framework,

  plugin, e nel nostro caso application, che indica le
  applicazioni registrabili sul sistema
=> costruiamone uno con Jar Bundler,
     presente nei Developer Tools!

                                JUG Milano – Java sul tuo Mac 13
Parametri Java in Info.plist
Tutto ciò che può essere specificato da command-line si
può indicare anche nel descrittore Info.plist, più altro
ancora, come ad esempio la versione di runtime richiesta.
Inoltre tutte i parametri che contengano percorsi possono
utilizzare le variabili $JAVAROOT e $APP_PACKAGE, che
puntano all'interno dello stesso application bundle, con
l'obiettivo di renderlo autocontenuto e relocatable.
ma...
      Info.plist è simile al descrittore JNLP!
 => Java WebStart su Mac OS X può creare un
 application bundle con Info.plist derivato dal
 descrittore JNLP!
                                  JUG Milano – Java sul tuo Mac 14
Apple Java Extensions
Se volessimo andare oltre?
  => si può, ora però bisogna modificare il codice!
Apple fornisce dei package java proprietari che espongono
alcune funzionalità ulteriori, ad esempio:
● collegare menu AWT/Swing ad application menu

● interagire con il file system HFS

● integrare componenti Cocoa in AWT via JNI,

   implementando la abstract base class CocoaComponent
   => siamo arrivati al confine con Cocoa!

Reference (per 1.5.0):
  http://developer.apple.com/documentation/Java/Reference/1.5.0/appledoc/api/index.html

                                                      JUG Milano – Java sul tuo Mac 15
Applicazioni Java Mac: jEdit
jEdit è un editor di testo avanzato opensource
  ● sito del progetto: http://www.jedit.org

  ● la distribuzione Mac è identica alle altre,

    ma include un plugin adhoc ed un
    application bundle

Caratteristiche
  ● integrazione DocumentType e File/Creator

  ● application menu con handler per about,

    preferences, quit
  ● integrazione services menu e dock menu

  ● esecuzione AppleScript

                               JUG Milano – Java sul tuo Mac 16
MRJ Adapter
Problema:
● nomi e supporto delle system properties

  Apple fra le diverse versioni della JVM
● necessità di inserire special cases nel codice

  per gestire l'integrazione con Mac OS X

Soluzione:
 http://homepage.mac.com/sroy/mrjadapter/



                              JUG Milano – Java sul tuo Mac 17
Migliorare il LAF Aqua
Per i “precisini”: alla ricerca del pixel-perfect!

●   LAF Quaqua
    http://www.randelshofer.ch/quaqua/download.html
●   JTable con stripes
    https://renderpack.dev.java.net/
●   JTable con Incremental Search Box
    http://publicobject.com/glazedlists/




                                       JUG Milano – Java sul tuo Mac 18
Sviluppo Java e IDE
Tutti le opzioni più note sono supportate:
● NetBeans (dalla 5.0 sono compresi anche i

  moduli Profiler e Mobility)
● jEdit :D

● IntelliJ IDEA

● Oracle JDeveloper

● Eclipse

● Xcode? È preinstallato e nativo, ma il

  supporto Java non è soddisfacente.

                           JUG Milano – Java sul tuo Mac 19
Eclipse
●   good news: SWT è disponibile per Mac, anche per le
    applicazioni RCP come Azureus, RSSOwl, ecc.
●   bad news:
     – l'implementazione di SWT su Carbon esteticamente non
       è al livello del LAF Aqua
     –   performance non eccelse ed hanging con alcuni plugin
         => consigliati OSX 10.4.3+ e Eclipse 3.1.1
     –   incompatibilità con AWT/Swing
●   [eclipse-mac]: http://groups.google.com/group/eclipse-mac/
     –   VE Support
         http://groups.google.com/group/eclipse-mac/browse_thread/thread/361532f40cf85ac0
     –   Top Ten Eclipse bugs
         http://groups.google.com/group/eclipse-mac/browse_thread/thread/fbea6177b2e4b76c

                                                        JUG Milano – Java sul tuo Mac 20
Cocoa-Java
●   sviluppo GUI con Interface Builder
●   implemento Controller in Java su Xcode
●   accedo a funzionalità di sistema tramite il
    FoundationKit
●   utilizzo AppKit al posto di Swing/AWT
●   template progetti su Xcode

ma...
● le API Java sono un wrapper di quelle ObjC

● le API Java sono un subset di quelle ObjC


                                JUG Milano – Java sul tuo Mac 21
Java vs. Objective-C
●   Tutorial ObjC-Cocoa di Livio Sandel
    http://www.macocoa.omitech.it/
●   I framework Cocoa (ApplicationKit e
    FoundationKit) sono in Objective-C
●   Differenze Principali:
     – gestione memoria senza garbage
        collection => problema weak references
     – dynamic dispatch dei messaggi
     – threading AWT



                                     JUG Milano – Java sul tuo Mac 22
Cocoa-Java deprecation
Dalla documentazione ADC:
“Important: Features added to Cocoa in Mac OS X versions later than 10.4
   will not be added to the Cocoa-Java programming interface. Therefore,
   you should develop Cocoa applications using Objective-C to take
   advantage of existing and upcoming Cocoa features.”

“Important: Cocoa-Java technology is only a learning tool. Applications
   targeted for release to customers must be developed using Objective-C
   to take advantage of all the programming interfaces available in Cocoa.
   Programming interfaces added to Cocoa in Mac OS X versions later
   than 10.4 will not be available to Cocoa-Java applications.”


=> go JNI!

                                              JUG Milano – Java sul tuo Mac 23
Applicazioni Cocoa-Java: Cyberduck
  Cyberduck è un client FTP/SFTP opensource.
    –   Sito del progetto: http://cyberduck.ch/
    –   Cocoa-Java FAQ: http://sudo.ch/~dkocher/cocoa/
    –   Usa JNI laddove Cocoa-Java non basta
  Caratteristiche:
    –   integrazione con Spotlight
    –   gestione DocumentType .duck ed URLType (s)ftp://
    –   integrazione AppleScript con dictionary
    –   integrazione password in Keychain

                                       JUG Milano – Java sul tuo Mac 24
Java Enterprise Edition
●   non è pre-installato alcun server EE, ma non ci sono
    problemi per server pure Java
●   su ADC ci sono diversi tutorial per Tomcat, JBoss, Jetty,
    Struts, ecc.
●   Su Developer Tools c'è un opzione per installare
    WebObjects con developer license
●   per il deployment si può utilizzare launchd

Mac OS X Server include:
● Tomcat 4.1.29 in /Library/Tomcat

● JBoss 3.2.3 in /Library/JBoss/3.2

● WebObjects con licenza deployment

● tool di supporto custom per la gestione


                                      JUG Milano – Java sul tuo Mac 25
Java Mobile Edition
Problema: serve la reference implementation
di MIDP (Wireless Tookit), ma ha parti native,
non è disponibile per OS X e non è open
source...

Soluzione: SDK mpowerplayer
http://mpowerplayer.com/index.php
●   emulatore pure java MIDP 2.0
●   supporta le Bluetooth API anche su Mac
●   fornisce preverifier nativo OSX
●   esempi con Ant forniti insieme all'SDK
                                    JUG Milano – Java sul tuo Mac 26
NetBeans Mobility Pack
●   la versione 5.0 beta2 è compatibile Mac
●   non ci sono release ufficiali!
●   istruzioni dettagliate ed integrazione di
    mpowerplayer sul weblog di Lukas Hasik
    http://blogs.sun.com/roller/page/lukas?entry=mobility_pack_on_mac
●   qualche correzione ai build.xml file generati
     => posso sviluppare in modo visuale
         e fare debugging su applicazioni
         Micro Edition! Proviamo?


                                              JUG Milano – Java sul tuo Mac 27
Conclusioni
●   pro e contro: una scelta molto personale...
●   ultimi aggiornamenti: finalmente default 5.0!
    dalle release notes di J2SE 5.0 Release 4 DP3
    (richiede login in ADC su http://connect.apple.com)
    "Java 2 Standard Edition (J2SE) 5.0 Release 4 delivers improved
    reliability and compatibility for Java 2 Platform Standard Edition 5.0 on
    Mac OS X v10.4.3 and later. This release includes J2SE version
    1.5.0_06. With this update J2SE 5.0 becomes the preferred Java
    version, superseding Java 1.4.2. Java 1.4.2 is still installed on your
    machine, but applications will run with J2SE 5.0 unless they specifically
    request Java 1.4.2.”
●   Mac-Intel? 4 volte più veloce?
●   Mustang, Dolphin...

                                                 JUG Milano – Java sul tuo Mac 28
Riferimenti
●   Java su apple.com
    http://www.apple.com/macosx/features/java/
●   Java su Apple Developer Connection
    http://developer.apple.com/java/
●   Mac Java Community su java.net
    http://community.java.net/mac/
●   Java Programming su O'Reilly
    MacDevCenter
    http://www.oreillynet.com/pub/ct/45


                              JUG Milano – Java sul tuo Mac 29

Mais conteúdo relacionado

Mais procurados

MEAN: il nuovo stack di sviluppo per il futuro del web
MEAN: il nuovo stack di sviluppo per il futuro del webMEAN: il nuovo stack di sviluppo per il futuro del web
MEAN: il nuovo stack di sviluppo per il futuro del webEugenio Minardi
 
Acadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code OverviewAcadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code OverviewFrancesco Sciuti
 
Ionic Cordova vs React Native
Ionic Cordova vs React NativeIonic Cordova vs React Native
Ionic Cordova vs React NativeAntonio Gallo
 
Pietro Brambati: PHP e la piattaforma Microsoft
Pietro Brambati: PHP e la piattaforma MicrosoftPietro Brambati: PHP e la piattaforma Microsoft
Pietro Brambati: PHP e la piattaforma MicrosoftFrancesco Fullone
 
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLSinergia Totale
 
phpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro business
phpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro businessphpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro business
phpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro businessLuca Scarpa
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Eugenio Minardi
 
Sviluppare plugin per google Chrome
Sviluppare plugin per google ChromeSviluppare plugin per google Chrome
Sviluppare plugin per google ChromeCodemotion
 

Mais procurados (9)

MEAN: il nuovo stack di sviluppo per il futuro del web
MEAN: il nuovo stack di sviluppo per il futuro del webMEAN: il nuovo stack di sviluppo per il futuro del web
MEAN: il nuovo stack di sviluppo per il futuro del web
 
Acadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code OverviewAcadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code Overview
 
Ionic Cordova vs React Native
Ionic Cordova vs React NativeIonic Cordova vs React Native
Ionic Cordova vs React Native
 
Pietro Brambati: PHP e la piattaforma Microsoft
Pietro Brambati: PHP e la piattaforma MicrosoftPietro Brambati: PHP e la piattaforma Microsoft
Pietro Brambati: PHP e la piattaforma Microsoft
 
Lucio Zambon: PHP@Elettra
Lucio Zambon: PHP@ElettraLucio Zambon: PHP@Elettra
Lucio Zambon: PHP@Elettra
 
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTML
 
phpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro business
phpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro businessphpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro business
phpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro business
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS
 
Sviluppare plugin per google Chrome
Sviluppare plugin per google ChromeSviluppare plugin per google Chrome
Sviluppare plugin per google Chrome
 

Semelhante a Java sul tuo Mac

Introduzione al java
Introduzione al javaIntroduzione al java
Introduzione al javaGiovanni Pace
 
Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5Gabriele Gaggi
 
Linguaggio Java
Linguaggio JavaLinguaggio Java
Linguaggio JavaGSamLo
 
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld DevicesGWTcon
 
Introduzione alla programmazione Java
Introduzione alla programmazione JavaIntroduzione alla programmazione Java
Introduzione alla programmazione JavaMassimiliano Brolli
 
I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)Diego La Monica
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaMarcello Teodori
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkGiovanni Buffa
 
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinFabio Cozzolino
 
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Romualdo Gobbo
 
Iced tea, la macchina virtuale Java libera
Iced tea, la macchina virtuale Java liberaIced tea, la macchina virtuale Java libera
Iced tea, la macchina virtuale Java liberaVitalij Zadneprovskij
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
 
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web Appdotnetcode
 
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformAngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformGabriele Gaggi
 

Semelhante a Java sul tuo Mac (20)

Java introduzione
Java introduzioneJava introduzione
Java introduzione
 
Introduzione al java
Introduzione al javaIntroduzione al java
Introduzione al java
 
Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5
 
Linguaggio Java
Linguaggio JavaLinguaggio Java
Linguaggio Java
 
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld Devices
 
Android
AndroidAndroid
Android
 
Introduzione alla programmazione Java
Introduzione alla programmazione JavaIntroduzione alla programmazione Java
Introduzione alla programmazione Java
 
I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)
 
Spring e Flex
Spring e FlexSpring e Flex
Spring e Flex
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con Java
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
 
Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazione
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarin
 
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20
 
Link. javascript ajax
  Link. javascript ajax  Link. javascript ajax
Link. javascript ajax
 
Iced tea, la macchina virtuale Java libera
Iced tea, la macchina virtuale Java liberaIced tea, la macchina virtuale Java libera
Iced tea, la macchina virtuale Java libera
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
 
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web App
 
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformAngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
 

Mais de Marcello Teodori

Anatomy of an APS 2 appication
Anatomy of an APS 2 appicationAnatomy of an APS 2 appication
Anatomy of an APS 2 appicationMarcello Teodori
 
JavaScript Power Tools 2015
JavaScript Power Tools 2015JavaScript Power Tools 2015
JavaScript Power Tools 2015Marcello Teodori
 
Wicket from Designer to Developer
Wicket from Designer to DeveloperWicket from Designer to Developer
Wicket from Designer to DeveloperMarcello Teodori
 
m2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDEm2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDEMarcello Teodori
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringMarcello Teodori
 
Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5Marcello Teodori
 

Mais de Marcello Teodori (9)

Anatomy of an APS 2 appication
Anatomy of an APS 2 appicationAnatomy of an APS 2 appication
Anatomy of an APS 2 appication
 
Refactoring to a SPA
Refactoring to a SPARefactoring to a SPA
Refactoring to a SPA
 
JavaScript Power Tools 2015
JavaScript Power Tools 2015JavaScript Power Tools 2015
JavaScript Power Tools 2015
 
Wicket from Designer to Developer
Wicket from Designer to DeveloperWicket from Designer to Developer
Wicket from Designer to Developer
 
Software Factory in a Box
Software Factory in a BoxSoftware Factory in a Box
Software Factory in a Box
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
m2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDEm2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDE
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con Spring
 
Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5
 

Último

Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 

Último (9)

Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 

Java sul tuo Mac

  • 1. Java sul tuo Mac Marcello Teodori Java User Group Milano http://www.jugmilano.it marcello.teodori@jugmilano.it
  • 2. Agenda ● Perché Java sul Mac? ● Java Standard Edition ● Integrazione con il Desktop ● Programmare Cocoa in Java ● Sviluppo Java ed IDE ● Java Enterprise Edition ● Sviluppo su Micro Edition ● Stato attuale dell'implementazione JUG Milano – Java sul tuo Mac 2
  • 3. About Marcello Ingegnere Informatico, appassionato di Java, open source e programmazione in generale, lavora dal 1997 nello sviluppo software, principalmente in ambito web e mobile internet. Dal 2004 è socio in ExcogitaNet srl e collabora attivamente con il Java User Group Milano. laddove possibile cerca in tutti i modi di utilizzare il suo Mac! Partecipa con impegno molto variabile alla community open source, principalmente con diverse localizzazioni di applicazioni Mac che utilizza abitualmente. JUG Milano – Java sul tuo Mac 3
  • 4. Perché Mac OS X? ● Interfaccia utente intuitiva ● Applicazioni iLife ● Servizi Applicativi evoluti: AppleScript, Spotlight, VoiceOver, Bundle, ecc. ● Qualità ed ergonomia dell'hardware Apple ● “it just works”: supporto integrato per gran parte di tecnologie e periferiche ● Unix-based (BSD+Mach) ● Java runtime integrato JUG Milano – Java sul tuo Mac 4
  • 5. Perché sviluppare su Mac OS X? ● Developer Tools inclusi, IDE Xcode ● Documentazione ADC ● open source pre-installato e ready-to-go ● the best Unix developer experience! ● Architettura a Layer http://developer.apple.com/macosx/architecture/ JUG Milano – Java sul tuo Mac 5
  • 6. Perché Java su Mac? ● Aqua LAF per Swing, ok anche per applicazioni per Mac ● Integrazione con il desktop ● Cocoa API per sviluppare applicazioni Mac-only ● mindshare: James Gosling, James D. Davidson... ma... ● WORA è un concetto non sempre rispettato!!! ● librerie con parti native JNI non sempre disponibili ● problematiche allineamento JDK con Sun ● performance inferiori rispetto ad altri OS JUG Milano – Java sul tuo Mac 6
  • 7. Java Standard Edition È un framework standard di Mac OS X, pre- installato insieme al sistema operativo e situato in: /System/Library/Frameworks/JavaVM.framework/ contenente le seguenti versioni della JVM: ● 1.3.1 (in EOL, non disponibile su Intel) ● 1.4.2 (default) ● 5.0 (non pre-installato, ma disponibile come free download dal sito Apple) Implementa anche un Internet Plug-In che rende Java disponibile all'interno di tutti i browser. JUG Milano – Java sul tuo Mac 7
  • 8. “it just works”? Non del tutto, il directory layout di un framework è completamente diverso da quello tipico della JVM, ma non è un problema... ci sono solo alcune cose da sapere... ● JAVA_HOME in /Library/Java/Home ● symlink eseguibili in /usr/bin ● default JVM impostabile da symlink: $JAVAVM_FRAMEWORK_HOME/Versions/CurrentJDK ● caricamento estensioni da: (~|/|/System|/Network)/Library/Java/Extensions JUG Milano – Java sul tuo Mac 8
  • 9. Altro da installare? I Developer Tools installano automaticamente la versione 1.6.5 di Ant, utilizzata da Xcode: – ANT_HOME in /Developer/Java/Ant – symlink in /usr/bin Attenzione: i javadoc del JDK 1.4.2 sono solo nell'installazione adhoc, non in quella standard! Quelli di 1.3.1 e 5.0 invece vanno scaricati da Apple Developer Connection: http://developer.apple.com/java/download/ JUG Milano – Java sul tuo Mac 9
  • 10. Write Once Run Anywhere? ● la JVM 1.4.1+ supporta l'esecuzione dei JAR ● nessun problema per applicazioni command-line o server pure Java ● applicazioni pure Java dotate di installer nativi possono essere installate su altro OS e poi spostate ● applicazioni o librerie che fanno uso di JNI devono avere la versione binaria adhoc ● le applicazioni GUI hanno LAF Aqua ma non sono automaticamente conformi alle Apple Human Interface Guidelines! JUG Milano – Java sul tuo Mac 10
  • 11. Apple System Properties Il metodo più rapido e meno invasivo per adattare un'applicazione Java a Mac OS X: java -D<apple-system-property-key>=<value> ... Alcuni esempi ● apple.laf.useScreenMenuBar se impostata a true, imposta la barra dei menu in stile apple ● apple.awt.brushMetalLook se impostata a true, imposta il look metal su AWT come Safari Reference http://developer.apple.com/documentation/Java/Conceptual/JavaPropVMInfoRef/index.html JUG Milano – Java sul tuo Mac 11
  • 12. Apple Virtual Machine Options Posso fare ancora qualcosa, ad esempio integrare l'applicazione con il Dock, utilizzando le virtual machine options specifiche di Mac OS X: java -X<apple-virtual-machine-option> ... Ad esempio: ● -Xdock:icon=<percorso-file-icns> creo un file .icns in Icon Composer, tool incluso nei Developer Tools, e ne imposto il percorso: l'icona apparirà sul Dock al posto di quella standard utilizzata dalle applicazioni Java ● -Xdock:name=<nome-applicazione> utilizza sul dock e sul menu dell'applicazione il nome indicato al posto del FQCN della relativa classe Main ma... non posso obbligare gli utenti a lanciare le applicazioni da Terminale! JUG Milano – Java sul tuo Mac 12
  • 13. Cosa è un Bundle? ● concetto ereditato da NextStep ● unità indipendente ed autocontenuta ● una directory su filesystem con dato layout ● contiene un descrittore in formato XML plist ● ne esistono diversi tipi: document, framework, plugin, e nel nostro caso application, che indica le applicazioni registrabili sul sistema => costruiamone uno con Jar Bundler, presente nei Developer Tools! JUG Milano – Java sul tuo Mac 13
  • 14. Parametri Java in Info.plist Tutto ciò che può essere specificato da command-line si può indicare anche nel descrittore Info.plist, più altro ancora, come ad esempio la versione di runtime richiesta. Inoltre tutte i parametri che contengano percorsi possono utilizzare le variabili $JAVAROOT e $APP_PACKAGE, che puntano all'interno dello stesso application bundle, con l'obiettivo di renderlo autocontenuto e relocatable. ma... Info.plist è simile al descrittore JNLP! => Java WebStart su Mac OS X può creare un application bundle con Info.plist derivato dal descrittore JNLP! JUG Milano – Java sul tuo Mac 14
  • 15. Apple Java Extensions Se volessimo andare oltre? => si può, ora però bisogna modificare il codice! Apple fornisce dei package java proprietari che espongono alcune funzionalità ulteriori, ad esempio: ● collegare menu AWT/Swing ad application menu ● interagire con il file system HFS ● integrare componenti Cocoa in AWT via JNI, implementando la abstract base class CocoaComponent => siamo arrivati al confine con Cocoa! Reference (per 1.5.0): http://developer.apple.com/documentation/Java/Reference/1.5.0/appledoc/api/index.html JUG Milano – Java sul tuo Mac 15
  • 16. Applicazioni Java Mac: jEdit jEdit è un editor di testo avanzato opensource ● sito del progetto: http://www.jedit.org ● la distribuzione Mac è identica alle altre, ma include un plugin adhoc ed un application bundle Caratteristiche ● integrazione DocumentType e File/Creator ● application menu con handler per about, preferences, quit ● integrazione services menu e dock menu ● esecuzione AppleScript JUG Milano – Java sul tuo Mac 16
  • 17. MRJ Adapter Problema: ● nomi e supporto delle system properties Apple fra le diverse versioni della JVM ● necessità di inserire special cases nel codice per gestire l'integrazione con Mac OS X Soluzione: http://homepage.mac.com/sroy/mrjadapter/ JUG Milano – Java sul tuo Mac 17
  • 18. Migliorare il LAF Aqua Per i “precisini”: alla ricerca del pixel-perfect! ● LAF Quaqua http://www.randelshofer.ch/quaqua/download.html ● JTable con stripes https://renderpack.dev.java.net/ ● JTable con Incremental Search Box http://publicobject.com/glazedlists/ JUG Milano – Java sul tuo Mac 18
  • 19. Sviluppo Java e IDE Tutti le opzioni più note sono supportate: ● NetBeans (dalla 5.0 sono compresi anche i moduli Profiler e Mobility) ● jEdit :D ● IntelliJ IDEA ● Oracle JDeveloper ● Eclipse ● Xcode? È preinstallato e nativo, ma il supporto Java non è soddisfacente. JUG Milano – Java sul tuo Mac 19
  • 20. Eclipse ● good news: SWT è disponibile per Mac, anche per le applicazioni RCP come Azureus, RSSOwl, ecc. ● bad news: – l'implementazione di SWT su Carbon esteticamente non è al livello del LAF Aqua – performance non eccelse ed hanging con alcuni plugin => consigliati OSX 10.4.3+ e Eclipse 3.1.1 – incompatibilità con AWT/Swing ● [eclipse-mac]: http://groups.google.com/group/eclipse-mac/ – VE Support http://groups.google.com/group/eclipse-mac/browse_thread/thread/361532f40cf85ac0 – Top Ten Eclipse bugs http://groups.google.com/group/eclipse-mac/browse_thread/thread/fbea6177b2e4b76c JUG Milano – Java sul tuo Mac 20
  • 21. Cocoa-Java ● sviluppo GUI con Interface Builder ● implemento Controller in Java su Xcode ● accedo a funzionalità di sistema tramite il FoundationKit ● utilizzo AppKit al posto di Swing/AWT ● template progetti su Xcode ma... ● le API Java sono un wrapper di quelle ObjC ● le API Java sono un subset di quelle ObjC JUG Milano – Java sul tuo Mac 21
  • 22. Java vs. Objective-C ● Tutorial ObjC-Cocoa di Livio Sandel http://www.macocoa.omitech.it/ ● I framework Cocoa (ApplicationKit e FoundationKit) sono in Objective-C ● Differenze Principali: – gestione memoria senza garbage collection => problema weak references – dynamic dispatch dei messaggi – threading AWT JUG Milano – Java sul tuo Mac 22
  • 23. Cocoa-Java deprecation Dalla documentazione ADC: “Important: Features added to Cocoa in Mac OS X versions later than 10.4 will not be added to the Cocoa-Java programming interface. Therefore, you should develop Cocoa applications using Objective-C to take advantage of existing and upcoming Cocoa features.” “Important: Cocoa-Java technology is only a learning tool. Applications targeted for release to customers must be developed using Objective-C to take advantage of all the programming interfaces available in Cocoa. Programming interfaces added to Cocoa in Mac OS X versions later than 10.4 will not be available to Cocoa-Java applications.” => go JNI! JUG Milano – Java sul tuo Mac 23
  • 24. Applicazioni Cocoa-Java: Cyberduck Cyberduck è un client FTP/SFTP opensource. – Sito del progetto: http://cyberduck.ch/ – Cocoa-Java FAQ: http://sudo.ch/~dkocher/cocoa/ – Usa JNI laddove Cocoa-Java non basta Caratteristiche: – integrazione con Spotlight – gestione DocumentType .duck ed URLType (s)ftp:// – integrazione AppleScript con dictionary – integrazione password in Keychain JUG Milano – Java sul tuo Mac 24
  • 25. Java Enterprise Edition ● non è pre-installato alcun server EE, ma non ci sono problemi per server pure Java ● su ADC ci sono diversi tutorial per Tomcat, JBoss, Jetty, Struts, ecc. ● Su Developer Tools c'è un opzione per installare WebObjects con developer license ● per il deployment si può utilizzare launchd Mac OS X Server include: ● Tomcat 4.1.29 in /Library/Tomcat ● JBoss 3.2.3 in /Library/JBoss/3.2 ● WebObjects con licenza deployment ● tool di supporto custom per la gestione JUG Milano – Java sul tuo Mac 25
  • 26. Java Mobile Edition Problema: serve la reference implementation di MIDP (Wireless Tookit), ma ha parti native, non è disponibile per OS X e non è open source... Soluzione: SDK mpowerplayer http://mpowerplayer.com/index.php ● emulatore pure java MIDP 2.0 ● supporta le Bluetooth API anche su Mac ● fornisce preverifier nativo OSX ● esempi con Ant forniti insieme all'SDK JUG Milano – Java sul tuo Mac 26
  • 27. NetBeans Mobility Pack ● la versione 5.0 beta2 è compatibile Mac ● non ci sono release ufficiali! ● istruzioni dettagliate ed integrazione di mpowerplayer sul weblog di Lukas Hasik http://blogs.sun.com/roller/page/lukas?entry=mobility_pack_on_mac ● qualche correzione ai build.xml file generati => posso sviluppare in modo visuale e fare debugging su applicazioni Micro Edition! Proviamo? JUG Milano – Java sul tuo Mac 27
  • 28. Conclusioni ● pro e contro: una scelta molto personale... ● ultimi aggiornamenti: finalmente default 5.0! dalle release notes di J2SE 5.0 Release 4 DP3 (richiede login in ADC su http://connect.apple.com) "Java 2 Standard Edition (J2SE) 5.0 Release 4 delivers improved reliability and compatibility for Java 2 Platform Standard Edition 5.0 on Mac OS X v10.4.3 and later. This release includes J2SE version 1.5.0_06. With this update J2SE 5.0 becomes the preferred Java version, superseding Java 1.4.2. Java 1.4.2 is still installed on your machine, but applications will run with J2SE 5.0 unless they specifically request Java 1.4.2.” ● Mac-Intel? 4 volte più veloce? ● Mustang, Dolphin... JUG Milano – Java sul tuo Mac 28
  • 29. Riferimenti ● Java su apple.com http://www.apple.com/macosx/features/java/ ● Java su Apple Developer Connection http://developer.apple.com/java/ ● Mac Java Community su java.net http://community.java.net/mac/ ● Java Programming su O'Reilly MacDevCenter http://www.oreillynet.com/pub/ct/45 JUG Milano – Java sul tuo Mac 29