SpicyDEV Blog

Feed Rss

Per comprendere l’utilizzo di una tecnologia non c’è nulla di meglio che provarla. Quale migliore esempio se non il classico “Hello, World!”?

Il codice che analizzeremo tra breve è preso direttamente dagli esempi presenti nella guida ufficiale.

HelloWorld.java

package it.spicydev.blog.jna;
 
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
 
/**
 * Date: 1/21/12 7:06 PM
 *
 * @author Mircha Emanuel `ryuujin` D'Angelo
 * @version 1.0
 */
public class HelloWorld {

Learn more

Se è necessario accedere a delle funzionalità offerte da librerie native compilate per il sitema su cui girerà il nostro programma (host), si utlizzano le JNI. Attraverso di esse è possibile scrivere una nostra libreria in codice nativo (C, C++) che fa da ponte tra la nostra class Java e i metodi della libreria nativa che intendiamo utilizzare.

Con la libreria Java Native Access (JNA) non è più necessario. Essa ci consente di accedere alle risorse di una libreria dinamica (ovvero shared) scrivendo solo codice Java.

Per chi conosce Python, avrà sentito parlare di CTypes che realizza qualcosa di molto simile. Vi consiglio anche di dare un’occhiata a SWIG, ma adesso concentriamoci su JNA.

JNA permette di accedere solo alle risorse di librerie shared o dinamiche (.so in Linux, .dll in windows). Il perché non è possibile utilizzare librerie statiche (.a o .lib) è chiaro se si tiene conto del fatto che sono una sorta di archivio che deve essere staticamente linkato nell’eseguibile. Dato che non è possibile caricare una libreria statica a runtime, è chiaro che non è possibile utilizzare le JNA per servirsene.

Le risorse di una libreria nativa vanno mappate all’interno della classe Java tenendo conto di una relazione di equivalenza tra i tipi. Attraverso Learn more

…dopo quasi tre anni di silenzio, riporto online il mio blog.

La veste grafica è provvisoria e presto rimetterò (ndr: lo sto già facendo) su qualche vecchio post, specialmente di quelli tecnici.

Per chi non mi conosce, le presentazioni a dopo…

Non so voi, ma a me capita spesso di trasferire file con scp da e verso un server remoto. La cosa più frustrante succede quando stai trasferendo un file abbastanza grande e la connessione scp cade. Spesso mi son chiesto perché scp non supporti il resume.

La soluzione, comunque, è abbastanza semplice: usare rsync! ;)

Esempio:

Se per trasferire il file abbiamo utilizzato scp:

scp big.file user@someserv.er:~

per ripristinare la connessione:

rsync –partial –progress –rsh=ssh big.file user@someserv.er:~

Ancora più semplice se creiamo un alias all’ultimo comando come scpresume ;) .

I CSS, fogli di stile a cascata (Cascading Style Sheet), permettono di definire la rappresentazione di un documento XHTML. In questo modo i contenuti sono separati dalla formattazione. Una cosa notevole, specie per il fatto che per un file XHTML e’ possibile indicare piu’ file CSS a seconda di chi si occupera’ della visualizzazione. Ad esempio e’ possibile dire di utilizzare un determinato file CSS se il documento sara’ stampato, oppure se sara’ visualizzato da un browser per non vedenti e cosi’ via…

Learn more

Lo scopo del pattern Adapter è convertire l’interfaccia di una classe in un’altra interfaccia che i client si aspettano.

E’ definito anche Wrapper e rientra nella categoria dei pattern strutturali.

Penso non sia raro ritrovarsi con tante belle classi di libreria e non poterle usare perche’ incompatibili con l’interfaccia richiesta. Ecco che interviene l’adapter.

L’adapter va usato quando subentrano queste motivazioni:

  • una classe di una libreria non puo’ essere usata perche’ incompatibile con l’interfaccia richiesta dalla nostra applicazione
  • non e’ possibile (o non conveniente) cambiare l’interfaccia della libreria
  • non e’ possibile (o non conveniente) cambiare l’applicazione.

I partecipanti in questo Design Pattern sono:

Learn more

Lo scopo del pattern Singleton è quello di assicurare che una classe ha una sola istanza e provvedere un unico punto di accesso ad essa.

E’ un pattern molto semplice da implementare, ma e’ bene comprendere che non va abusato! Una cosa che cerco di spiegare sempre e’ che un refactoring del codice non introduce benefici solo perche’ e’ stato utilizzato un pattern.

Il Singleton va usato solo quando si verificano queste condizioni:

Learn more

Chi non l’avesse capita, probabilmente non e’ un vero programmatore  :) .

GoF sta per “Gang Of Four” (no, non loro) e nel gergo informatico viene utilizzato per riferirsi ai 23 design pattern che sono stati definiti per la prima volta da Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides (appunto, la “Gang Of Four”) nel libro “Design Patterns” (era il 1995).

Non sto a dilungarmi su cosa sono i Design Pattern e sulla storia del loro ingresso nel mondo della programmazione, c’e’ gia’ wikipedia che lo spiega egregiamente.

Questi giorni mi e’ tornata la voglia di scrivere e ho pensato di introdurre qualche design pattern fondamentale in JAVA, non solo quelli della GOF.

Una domanda che mi fanno molti o che mi capita di leggere spesso riguardo JAVA e’: “come faccio a passare dei parametri per riferimento?”. La mia risposta e’: “NON SI PUO’!!”.

Ecco un mito da sfatare:

“Gli oggetti sono passati per riferimento, i primitivi per valore” FALSO

In JAVA ogni cosa è passata per valore. Gli oggetti, non vengono passati affatto.
I valori delle variabili sono sempre o primitive o riferimenti, mai oggetti!

Prima di tutto, definiamo cosa significa “passaggio per riferimento”. Una delle definizioni che preferisco e’ quella di Dale King scritta nel ng comp.lang.java.help: “The lvalue of the formal parameter is set to the lvalue of the actual parameter”. Quindi se ad esempio scriviamo questo codice:

Learn more