lunedì 28 aprile 2014

Caratteristiche dubbie di Java 8

Le prime reazioni pesano rovescio della medaglia del cambiamento, in quanto gli sviluppatori di ottenere reale sulle nuove funzionalità di Java 8

La maggior parte di noi che sviluppano in Java sono generalmente entusiasti per le caratteristiche e miglioramenti che vengono con JDK 8 . Tuttavia, ci sono stati diversi post recenti che hanno sottolineato alcune caratteristiche che possono essere impropriamente utilizzate e abusate e potrebbe portare ad alcuni problemi aggiuntivi nel futuro.Queste caratteristiche, che mi ricordano l'introduzione di autoboxing  in  J2SE 5 , hanno le loro situazioni utili, ma può anche portare a problemi quando non correttamente intesa e applicata. In questo post, io uso i riferimenti a messaggi di altri popoli 'scritto su queste caratteristiche dubbie. Si noti che questo post non si tratta di "normali"  problemi noti  che sono associati con qualsiasi release.

Le espressioni lambda sembrano essere la più grande  novità del JDK 8 , ma  Tal Weiss  ha scritto un post chiamato  The Dark Side Of espressioni lambda in Java 8 . In quel post, Weiss scrive di un "lato oscuro" per le espressioni lambda e  Nashorn JavaScript motore  (che egli sostiene è la caratteristica secondo più grande del JDK 8). Parla della "distanza tra il codice e il runtime" e sottolinea che "stiamo pagando il prezzo per brevi, codice più conciso con il debugging più complesso, e più a lungo gli stack di chiamate sintetico."

In  Amore e odio per Java 8  Andrew C. Oliver  e  Michael Brush  forniscono una bella introduzione ad alcune delle principali nuove funzionalità di JDK 8. Sono sostengono che i  metodi predefiniti sulle interfacce  "consentire una forma di ereditarietà multipla" e sarà "probabilmente [essere] dettaglio che riguarderà maggior parte delle persone in Java 8. " Essi concludono con la valutazione, "La caratteristica che sta per essere pericoloso è interfacce funzionali. Se non vengono utilizzati correttamente, potrebbero causare un sacco di mal di testa."

Peter Verhas  ha scritto una dettagliata analisi dei potenziali problemi con metodi predefiniti sulle interfacce in posti  Java 8 metodi predefiniti: cosa può e non può fare?  e  Come non usare metodi Java 8 di default . In un post, egli afferma, "Aggiunta di un metodo predefinito a un'interfaccia può rendere una classe inutilizzabile." In altro post, aggiunge, "Il metodo predefinito è un errore tecnologico" e fa riferimento al fatto che i metodi predefiniti sono stati aggiunti a interfacce Java per supportare la compatibilità delle implementazioni esistenti, con i metodi che devono essere aggiunti alle interfacce per supportare nuove JDK 8 caratteristiche.

Lukas Eder s '  Il lato oscuro di Java 8  postale esprime diverse preoccupazioni circa i metodi di default: l'incapacità di fare un metodo predefinito  finale  o  sincronizzato e l'introduzione della parola chiave "default". Un altro interessante "caveat", ha sottolineato in questo post sono le espressioni lambda effetto hanno sul sovraccarico.

Un altro post Tal Weiss,  Nuove parallelismo API in Java 8: Behind The Glitz e Glamour , esamina alcune questioni Weiss osservare quando si misurano le prestazioni dei "nuovi Java 8 API funzionamento in parallelo" sotto carico. Weiss osserva ", aggiungendo thread in quello che già è un ambiente multi-threaded non ti aiuta" e ci ricorda: "Mentre questi sono molto forti e le API di facile utilizzo, non sono una  pallottola d'argento . Abbiamo ancora bisogno di applicare il giudizio da quando impiegarli. "

Lukas Krecan  avverte  Pensaci due volte prima di usare Java 8 flussi paralleli  e scrive: "Il problema è che tutti i flussi paralleli utilizzano  la piscina comune filo fork-join  e se si invia un lavoro di lunga durata, si bloccano in modo efficace tutti i thread in piscina. " Per far fronte a questo, Krecan consiglia sia "[garantire] che tutte le attività presentate al comune piscina fork-join non si blocca e si concluderà in un tempo ragionevole" o "non utilizzare flussi paralleli e attendere che Oracle ci permette di specificare l' pool di thread da utilizzare per flussi paralleli ".

Edwin Dalorzo posto s '  Perché c'è Interface Inquinamento in Java 8  esamina come tipo di cancellazione  controllato eccezioni , e la mancanza di  tipi di valore  ( PEC 169 ) ha portato a progettare le decisioni in JDK 8 che dispongono di interfacce Java "inquinati". Il post mescola citazioni da Brian Goetz riguardanti JDK 8 decisioni di progettazione con il proprio commento dell'autore di fare il punto che "ci sono buone spiegazioni per il lato oscuro di esistere."

Ci sono, naturalmente, le questioni tra JDK appena rilasciata 8 e gli strumenti costruiti su Java. Ad esempio, nel post Ciao Java 8 (e come fa GlassFish senza parole ...)  Cay Horstmann  documenti GlassFish 4 non scrivere alcuna traccia dello stack di sorta quando aveva "[redatto] La guerra con la versione sbagliata di Java."

Anche se i posti di riferimento sottolineano questioni legittime di preoccupazione legati ad alcune delle caratteristiche più attesi del JDK 8 come espressioni lambda, ruscelli, metodi predefiniti interfaccia, e il motore di Nashorn JavaScript, io sono ancora entusiasta del  nuovo mondo di sviluppo Java con JDK 8 . I messaggi evidenziati in questo post sono promemoria per utilizzare queste nuove funzionalità attentamente e giudiziosamente modo che godiamo i vantaggi che ne derivano, mentre mitigare il più possibile i nuovi pericoli ed i costi che essi presentano quando viene utilizzato meno saggiamente.

giovedì 17 aprile 2014

JavaFX e Java versione 8 del gioco 2048

 zona DevOps è presentato da Puppet Labs e New Relic . Scopri PuppetLabs '1K + configurazionie utilizzare New Relic gratis - sono la risposta a DevOps 'la mancanza di strumenti di monitoraggio
Sono stato "occupato" questo fine settimana a fare diverse cose. Ma niente di più importante il gioco addictive  2048  (web javascript versione), che  Gabriele Cirulli  ha creato e pubblicato il codice sorgente su GitHub nel  suo repository .  Dopo  diverse ore  alcuni minuti a giocare con essa  sul mio cellulare , ho deciso di scrivere un  JavaFX  versione  denominata  2048FX ,  in modo da poter imparare a codificare un gioco come questo e anche diverse nuove funzionalità di Java SE 8 e JavaFX!
Ora, perché una  versione di JavaFX ? Beh, perché no? Vi darò un paio di motivi per voi a guardare nel codice sorgente della  2048FX :
  • opportunità di imparare Java SE 8
  • imparare le espressioni lambda
  • imparare stream API
  • imparare JavaFX 8
  • imparare JavaFX basi CSS
  • imparare animazioni JavaFX
Ci si va! Un progetto semplice che vi insegnerà tutto ciò che :-)  Buon divertimento!
PS: qualche bug da risolvere e le caratteristiche per attuare, ma sentitevi liberi di  tirare richiesta !

lunedì 14 aprile 2014

Accelerare codice standard con i modelli Eclipse

Prendete il seguente pezzo di codice:
per ( int i = 0 ; i <arguments.length, i + +) {
    Argomento String = argomenti [i];
    / / ... Fai qualcosa con l'argomento ...
}
Quante volte avete digitato su un simile per-loop, argomenti sbagliato il secondo tempo, ha fatto un errore di sintassi dimenticando un punto e virgola, ecc, ecc Lo stesso vale per la scrittura di un metodo principale o di un blocco try-catch. Anche digitando una maggiore for-loop nell'esempio precedente è lento.
Per me sono zombie codice . Nessuno li vuole, tutti vogliono sbarazzarsi di loro appena possibile e proprio quando pensi di aver ucciso uno, si sveglia di nuovo e non si ferma ... mai.
Questo è dove i modelli di bash con i fucili modificati e spillo mazze da baseball / cricket. È possibile utilizzare i modelli per sbarazzarsi di questi zombie di codice, perché la vita è troppo breve e veloce per dover scrivere codice lungo e lento.

Perché utilizzare i modelli?

I modelli sono un modo semplice e veloce per aggiungere comune, codice standard. Sono come pezzi di frammenti, ma di solito più brevi e più generico. Basta digitare il nome del modello, premere un tasto e il codice viene magicamente inserito.
Codice esistente può anche essere influenzata da modelli che supportano selezioni. Ad esempio, è possibile selezionare un blocco di codice e utilizzare il try modello per avvolgere l'intero blocco in un blocco try-catch.
I modelli possono anche contenere variabili per rendere il codice generato un po 'più intelligente. Le variabili sono come segnaposto che consentono di modificare facilmente le varie parti del modello.

Come si utilizzano i modelli?

Guarda il video per avere un'idea di come i modelli funzionano. Essa mostra come aggiungere un metodo main, con un ciclo for che stampa tutti gli argomenti della riga di comando utilizzando i modelli. Si noti il ​​movimento regolare tra le variabili (le scatole verdi):
Alcune note:
  • Per aprire un modello, digitare il nome, quindi premere Ctrl + Spazio , scegliere il modello e premere Invio .
  • Le caselle verdi sono variabili di modello. È possibile utilizzare il Tab chiave per spostarsi da una variabile a un'altra. Dimenticate il mouse oi tasti freccia.
  • Si può anche avvolgere codice esistente nei template (es. una per ciclo). Basta selezionare il codice, premere Ctrl + Spazio per due volte e selezionare il modello.

Come funziona questo ti rende più veloce?

Hai guarda il video, giusto? In 20 secondi abbiamo scritto il codice che normalmente si prende circa 40 a 50 secondi (e questo è, se non facciamo nessun errore). Il video è volutamente rallentato e per chiarezza.Possiamo migliorare che a 10-12 secondi per tutto ciò che il codice.
Quindi, 400% più veloce = tempo per altre 4 tazze di caffè al giorno = 100 x sviluppatore più felice!
I modelli hanno alcune Smarts a loro. Il per-loop nel video subito raccomandato ai matrice args perché era più vicino di raccolta / array di portata. Questo funziona 80% del tempo, in modo che riduce il tempo pure.

Alcuni modelli utili per farti andare

Eclipse ha un sacco di modelli incorporati. Date un'occhiata al loro andando a Finestra> Preferenze> Java> Editor> Modelli .
Per i più pigri, qui sono alcuni tra quelli utili per accelerare le cose un po ':
  • principale - inserisce un metodo main, argomenti e di tutti.
  • per - genera per-loop, ad es. uno con un indice di un array o con una variabile temporanea; può avvolgere un blocco di codice selezionato.
  • foreach - inserisce una maggiore for-loop; può anche avvolgere una selezione esistente in un ciclo for; può avvolgere un blocco di codice selezionato.
  • provare - produce un blocco try-catch, con l'eccezione di default e una todo per ricordare di completare il blocco di eccezione; può anche avvolgere una selezione esistente in un try-catch; può avvolgere un blocco di codice selezionato.
  • passare - aggiunge un'istruzione switch insieme ad un caso isolato e default-block.
  • mentre - inserisce un ciclo while, eventualmente con un enumeratore; può avvolgere un blocco di codice selezionato.

venerdì 11 aprile 2014

Piattaforme Development Mobile App: Quali caratteristiche dovremmo Confronta?

La Zona mobile è presentato da New Relic e Verivo. New Relic è uno strumento di monitoraggio delle prestazioni e dispone di una T-Shirt dati Nerd con il tuo nome su di esso se ti iscrivi. Verivo è un'impresa piattaforma mobile app progettata per semplificare radicalmente la complessità di costruzione, la sicurezza e il controllo applicazioni aziendali personalizzate.
DZone vorrebbe rivelare l'argomento successivo nella nostra nuova serie mensile Rapporti di ricerca ...

Mobile Development


In questo rapporto esploreremo sfide e le soluzioni per lo sviluppo di applicazioni web native e mobili di oggi. Questa guida include confronti delle caratteristiche per i quadri di web mobile (come SenchaTouch e jQuery Mobile) e piattaforme di sviluppo mobile App (come Appcelerator e IBM Worklight).
Se alcuni strumenti MADP avete mai usato o valutato:

  • Inviami una email a mpron a dzone.com   Mi piacerebbe sentire da voi! Vogliamo sapere quali informazioni valutato sulle soluzioni Mobile Application Development Platform, al fine di scegliere il migliore per il vostro caso d'uso. Si potrebbe potenzialmente avere il tuo nome incluso nella sezione Ringraziamenti speciali e ottenere una copia cartacea della guida insieme ad altre chicche.

martedì 8 aprile 2014

Benvenuti al (JCP.next) progetto JSR 348

Questo è il progetto pubblico per JSR 348: Verso una nuova versione del Java Community Process , il primo dei tre JSR per modificare i processi del JCP.
Questo JSR si concentrerà sui cambiamenti relativamente semplici che possono essere implementate rapidamente (speriamo di finire prima di ottobre 2011.) Il secondo JSR - che sarà presentata presto - si concentrerà sulla fusione dei due comitati esecutivi in ​​uno, mentre il terzo JSR affronterà questioni più complesse, comprese le eventuali modifiche necessarie al JSPA.
Dal momento che uno dei temi principali della JSR 348 è la trasparenza, e dal momento che sarà necessario che i futuri JSR essere eseguiti in modo trasparente, il gruppo di esperti è impegnata a eseguire questo JSR base a tali requisiti.
Saremo quindi discutere il nostro business in pubblico, pubblicare tutti i nostri materiali di lavoro ei verbali di riunione e tenere traccia dei problemi a cielo aperto:
  • Per partecipare alias degli osservatori (a rivedere e magari rispondere alle comunicazioni del gruppo di esperti) vai qui . (Avrete bisogno di un account di accesso java.net per iscriverti.)
  • Visita il forum di discussione per commentare il lavoro del gruppo di esperti (noi preferiremmo che si utilizza questo piuttosto che l'alias Observer, per mantenere il traffico di posta in giù.)
  • Per i nostri verbali delle riunioni ei documenti di lavoro, visitare il archivio di documenti .
  • Usiamo l' issue tracker per registrare i vostri commenti e tenere traccia dei problemi.

giovedì 3 aprile 2014

Strumenti essenziali per gestire le dichiarazioni di importazione in Eclipse

E 'una grande seccatura per organizzare manualmente le istruzioni import pacchetto quindi è importante sapere quali strumenti sono disponibili così il vostro IDE in grado di gestire le importazioni più rapidamente e silenziosamente possibile.
Aggiunta di dichiarazioni d'importazione per i riferimenti mancanti e la rimozione delle importazioni non utilizzati può richiedere molto tempo e l'elenco delle importazioni può diventare molto lunga e difficile da gestire. A titolo di esempio, le dichiarazioni di importazione di seguito possono essere costituiti da importazioni statiche / normali e importazioni jolly / classe:
1
2
3
4
5
6
7
8
9
10
11
12
13
/ / L'elenco delle importazioni può diventare davvero lunga ...
importare statiche org.junit.Assert.assertEquals; / / importazioni statiche
import java.util.List;
import java.util.ArrayList;
importare org.apache.commons.lang *,. / / jolly; inutilizzato così deve essere rimosso
...
pubblico class Mytest {
   @ Test
   pubblico nullo testSomething () genera Exception {
      Elenco dei messaggi <String> = nuovo ArrayList <String> ();
      assertEquals ( 1 , 1 );
   }
}
Per rendere la vita più facile, Eclipse ha un mucchio di funzioni che gestiscono automaticamente le istruzioni import, tra cui l'organizzazione di loro quando si salva o quando si preme un tasto di scelta rapida. Si può anche trattare con le importazioni statiche. Questo suggerimento riguarda alcune di queste caratteristiche, iniziando con gli elementi essenziali assoluti che consentono di risparmiare un sacco di tempo e di passare a funzionalità più opzionali che dipenderà dal vostro ambiente e gusti.
Procedura per la gestione delle dichiarazioni di importazione
Ecco una breve panoramica delle funzionalità mi occuperò e l'ordine in cui li consiglierei per la massima produttività, passando da essenziale bello di sapere. Scegliere a proprio piacimento:
  1. Lasciate Eclipse organizzare automaticamente le importazioni ogni volta che si salva un file.(Essential)
  2. Per saperne di scorciatoie da tastiera per quando il formato-on-save non funziona o se si preferisce di non abilitarlo. (Essential)
  3. Configurare le importazioni statiche in modo che Eclipse li suggerisce il completamento automatico o soluzione rapida. (Essential)
  4. Lasciate crollo delle importazioni Eclipse nello stesso pacchetto un carattere jolly (*). O espandere singolarmente. (Buono a sapersi)
  5. Aggiungi filtri tipo per i pacchetti non desiderati, ad esempio. escludere java.awt.List dal completamento automatico. (Buono a sapersi)
  6. Guarda alcune altre caratteristiche come la piegatura e pacchetto di compressione / abbreviazione.(Nizza-per-avere)

1. Organizza automaticamente istruzioni di importazione ogni volta che si salva

Eclipse può formattare automaticamente il codice ogni volta che si salva . Tuttavia, si può anche aggiungere le importazioni mancanti ed eliminare le importazioni inutilizzati quando si salva in modo da non dovete preoccuparvi di ricordare di dire a Eclipse per organizzarlo.
Ecco i passi per organizzare le importazioni ogni volta che si salva:
  1. Vai a Finestra> Preferenze> Java> Editor> Salva azioni .
  2. Selezionare Eseguire le azioni selezionate su save (disattivata per impostazione predefinita).
  3. Assicurarsi che Organizzare importazioni è selezionata (attivata per impostazione predefinita).
Nota: Non è necessario attivare la formattazione automatica del codice per organizzare automaticamente le importazioni. Vedi questo post per ulteriori informazioni sulle altre impostazioni nella finestra di dialogo, in particolare la definizione del codice sorgente opzione.

2. Imparare le scorciatoie da tastiera per organizzare le importazioni

Se si preferisce non organizzare importazioni quando si salva, quindi è possibile organizzare su richiesta da parte utilizzando le scorciatoie da tastiera . Tuttavia, a differenza organizzare-quando-si-salva, dovrete ricordare di premere il tasto di scelta rapida ogni volta che si può avere cambiato la lista di importazione.
ScorciatoiaComandoDescrizione
Ctrl + Shift + OOrganizzare ImportsAggiunge importazioni mancanti e rimuove le importazioni inutilizzati. Nel caso di conflitti di nome (cioè lo stesso nome della classe in diversi pacchetti), appare una finestra che richiede per la classe si intende utilizzare.
Ctrl + SpazioContent Assist (Autocomplete)Mentre si digita un nome di classe, premere Ctrl + Spazio per attivare il completamento automatico di Eclipse. Una volta che si preme Invio per selezionarlo, Eclipse aggiungerà automaticamente un import per la classe.
Ctrl +1Aggiungere Import (Quick Fix)Questo Quick Fix aggiunge un import mancanti per una classe di riferimento con un errore di compilazione (può essere utilizzato solo se c'è un errore di compilazione). Davvero non dovrebbe essere necessario utilizzare questo, che spesso se si utilizzano gli altri tasti.
Mi consiglia di utilizzare il completamento automatico la maggior parte del tempo e con Ctrl + Shift + O nei casi in cui, per esempio, incollate il codice da qualche altra parte o la rara occasione dell'organizzazione di importazione automatica non funziona, ad es. si affronta meglio con errori di compilazione gravi.

3. Configurare le importazioni statiche in modo da Eclipse li suggerisce il completamento automatico

Le importazioni statiche sono necessarie se si desidera utilizzare i metodi statici senza qualifica con il loro nome di classe, per esempio. AssertEquals di JUnit ().
Ho già coperto come generare le importazioni statiche quando si utilizza il completamento automatico , quindi rimando al post per i dettagli. In sintesi, dovrete abilitare le importazioni statiche su autocomplete (eventualmente attivata per impostazione predefinita in Eclipse 4.x) e poi aggiungere le classi che si desidera autocompleted di Eclipse Preferiti.

 4. Lasciate crollo delle importazioni Eclipse nello stesso pacchetto un carattere jolly (*). Oppure espandersi sempre

In realtà non c'è consenso sul fatto che si dovrebbe utilizzare i caratteri jolly sulle importazioni di pacchetti (es. org.eclipse.swt. *) o se per specificare individualmente (es. org.eclipse.swt.SWT).
Per impostazione predefinita, Eclipse importa le classi singolarmente ma si può dire per convertirli sempre in caratteri jolly:
  1. Vai a Finestra> Preferenze> Java> Stile di codice> Organizza Imports .
  2. Modificare il valore del numero di importazioni necessario per. * 0.
  3. (Facoltativo) Modificare il valore di  Numero delle importazioni statiche necessarie per. * 0.

5. Escludere pacchetti indesiderati utilizzando filtri di tipo

È possibile utilizzare filtri Tipo di evitare alcune classi di ottenere nel modo in cui quando si utilizza il completamento automatico o Ctrl + Shift + O (organizzare dialogo importazioni). Ad esempio, per autocompleting List suggerisce java.util.List e java.awt.List . ~ 100% delle volte che si desiderajava.util.List quindi ecco come fare.
  1. Vai a Finestra> Preferenze> Java> Aspetto> Tipo Filters .
  2. Fare clic su Aggiungi ... per aggiungere un pacchetto / classe.
  3. Inserisci java.awt.List (o java.awt. * se non si intende usare tutte le classi AWT).
Nota: Queste classi, inoltre, non appariranno in alcuni altri luoghi come la finestra di dialogo Apri tipo in modo da non essere sorpresi quando non li vedi.

6. Guardare attraverso alcuni queste altre caratteristiche

I seguenti non sono così come le caratteristiche di cui sopra, ma il risparmio di tempo può essere utile per i vostri gusti / ambiente:
  • Pieghevole : per impostazione predefinita, Eclipse pieghe tutte le dichiarazioni di importazione in una linea così la classe occupa meno spazio sullo schermo. È possibile modificare questo andando aFinestra> Preferenze> Java> Editor> pieghevoli e deselezionando Imports .
  • Ordinamento : Se siete veramente particolare circa l'ordine dei pacchetti, si può andare a Finestra> Preferenze> Java> Style Codice> Organizza importazioni e definire l'ordine dei pacchetti che si desidera Eclipse ordinare loro. Non è davvero valsa la pena anche se così mi piacerebbe saltare.
  • Comprimere / abbreviare i nomi dei pacchetti nel Package Explorer ( non in classe, ma nella vista): È possibile visualizzare i pacchetti compressi (es. o ~ e ~ swt.. ) o in forma abbreviata (es.org.eclipse.swt.custom diventa { SWT}. personalizzato ). Vai a Finestra> Preferenze> Java> Aspetto e definire le impostazioni lì. La finestra di dialogo ha esempi decente di come fare questo.