Chi mi conosce sa bene il mio rapporto di amore-odio con Java. Amore perché Java è un linguaggio performante, di alto livello e soprattutto portabile. L’ho usato spesso, lo uso tutt’ora e ci ho fatto addirittura del game development. Odio perché, proprio perché ci ho combattuto tanto, ne conosco tutti i difetti, i limiti e le idiosincrasie. Java è sintatticamente prolisso e ha qualche problema di “vecchiaia” che andrebbe risolto (ed il confronto con C# è impietoso). Continue reading »

 

La notizie e le informazioni in internet vanno sempre verificate. Molte cose infatti si tramandano di bocca in bocca (o di tastiera in tastiera) fino a confondersi. Le senti ripetere talmente tante volte che alla fine te ne convinci e le accetti acriticamente.

Arriva poi il giorno che ti informi e scopri che le cose non sono proprio così o che, in fondo, sono molto più complesse. Fra questo ricade anche l’asserzione Android è scritto in Java.

Continue reading »

 

FirefoxTutti conoscono Firefox. Tutti conoscono l’infinito numerabile dei suoi plugin. Pochi sanno però come cominciare a sviluppare tali plugin. E a questo serve questo piccolo tutorial. Non vedremo ora quali sono i passi per sviluppare un plugin ma vi mostrerò i passi e gli strumenti preliminari che servono a semplificare lo sviluppo. Ma cominciamo subito senza perderci in chiacchiere.

CONFIGURARE L’AMBIENTE

La prima cosa da fare, per evitare di incasinare le configurazioni originali, è quello di creare un nostro profilo di sviluppo. Possiamo lanciarlo semplicemente con:

/usr/bin/firefox -no-remote -P dev

In questo modo avvieremeno un’altro profilo di firefox chiamato dev.

Adesso dobbiamo impostare alcune opzioni che ci permetteranno di ottenere un maggior numero di informazioni sulle attività di firefox e un maggior controllo su di esse. Apriamo il classico about:config e all’interno impostiamo le seguenti variabili:

  • javascript.options.showInConsole = true. Abilita il Log di molti errori.
  • nglayout.debug.disable_xul_cache = true. Disabilita la cache XUL in modo tale che modifiche alla finestra e ai messaggi di dialogo non necessitino di un riavvio dell’applicazione.
  • browser.dom.window.dump.enabled = true. Abilita l’uso di dump() per stampare messaggi sulla standard consol.
  • javascript.options.strict = true. Abilita i warning JavaScript nella Error Console.
  • extensions.logging.enabled = true. Questo invia una valanga di informazioni sulle estensioni alla Error Console.

E’ anche molto utile questa estensione. Essa offre una comoda interfaccia grafica per accedere ad alcune impostazioni nascoste di Firefox.

STRUMENTI UTILI

  • DOM Inspector: Questo strumento ci permette di navigare e modificare strutture XML-Based come lo XUL delle interfaccie di Firefox.
  • Venkman: Un semplice debugger per JavaScript.
  • Console: Una potente console JavaScript.
  • ChromeList: Tool per navigare nei file in chrome://
  • ViewAbout: Permette l’accesso ai vari about: tramite una comoda interfaccia grafica.
  • CrashMe!: Uno strumento per analizzare i report di debug dei chrash di firefox.

 
Aaaaaargh!

Aaaaaargh!

PROTOCOLLO DI TRASFERIMENTO IN PRATICA – INVIO

Per questo punto abbiamo visto che è necessario serializzare il documento XML in uno stream secondario che useremo per calcolare la dimensione dei dati inviati e che poi riverseremo direttamente nello stream di output del socket.

Continue reading »

 

Perché!? Perché!?

Ho perso settimane alla ricerca di un modo elegante e pulito di trasferire informazioni fra server e client tramite un protocollo basato su XML. Possibile che nessuno abbia fatto una classe nelle librerie standard in grado di trasferire facilmente una manciata di tag XML? Non lo so. Fatto sta che il web non conteneva nessuna risposta alla mia domanda, così, domandando in giro sono arrivato a sviluppare 4 classi in grado di trasferire con un solo comando pacchetti XML attraverso un Socket.

Continue reading »

 

Il Java penso sia il linguaggio che più odio. Lo trovo un affarone sconclusionato che unisce la complessità di un linguaggio compilato alla pesantezza di un linguaggio di scripting.

Dopo questa premessa che sa molto di sfogo possiamo arrivare al dunque. Mi è capitato in questi giorni di avere bisogno di gestire dei singoli byte. Il Java ha il tipo byte al suo interno ma li gestisce con il segno, il che è abbastanza stupido dato che di solito uno che lavora con i byte li vuole unsigned. Dire che i byte sono interpretati come signed significa che degli 8bit che costituiscono un byte ne vengono usati 7 per rappresentare il numero e 1 per il segno. Questo causa fondamentalmente due problemi:

  1. Il massimo numero positivo rappresentabile non è più 255 ma 127.
  2. Bisogna stare attenti al segno. Ad esempio non si può fare un ciclo da 0 a 255 che scandisca tutti i possibili byte ma bisogna farlo da -128 a 127. Insomma, una rottura.

In tutti gli altri linguaggi esiste la parola chiave unsigned che permette con facilità di passare da interpretazioni con segno a interpretazioni senza segno. Nel Java NO. In Java tutti i tipi di dato sono sempre considerati signed ad eccezione del tipo char.

Abbiamo quindi bisogno di un modo per utilizzare dati unsigned.

La soluzione consiste nel promuovere il tipo di dato a quello più grande e passarlo in una maschera. Un esempio chiarirà il concetto:

Passare da byte signed a unsigned:

public static int unsignedByte(byte b) {
    int result = b & 0xFF;
    return result;
}

Come vedete basta inserire il byte in un int e fare un and bit-a-bit per annullare tutto all’infuori del byte.

Questo può sembrarvi uno spreco di memoria in quanto memorizzate 1 byte in un int (4 byte).  Invace no. In Java, per questioni prestazionali, il tipo byte occupa comunque 4 byte. Quindi lo spazio utilizzato è sempre lo stesso.

Analogamente potete creare un unsigned int inserendo un int in un long e mettendo in and con 0xFFFFFFFF. Questa volta però un po di spazio lo buttate.

Passare da int signed a unsigned:

public static long unsignedInt(int b) {
    long result = b & 0xFFFFFFFF;
    return result;
}

E’ bene tenere presente però che per molte operazioni l’uso di byte signed o unsigned è del tutto equivalente come ad esempio l’operazione di divisione intera o di modulo.

Ora non vi resta che divertirvi a giocare con i segni nella speranza che vi divertiate più di quanto mi sia divertito io a trovare la soluzione a questo problema.

 

Sto scrivendo la tesi. O almeno ci provo. Vado a rilento anche per colpa del caldo afoso, del condizionatore che si è rotto (in pieno Agosto e con tutti i condizionatorologi in ferie) e del pellegrinaggio continuo che faccio da casa mia a casa della mia ragazza (70km di distanza).

Però cerco di sfruttare a pieno ogni 5 minuti di “concentrazione” che spremo dal giorno.

Per fare questo ho due fidati strumenti: NetBeans 6.7 e Git.

NetBeans è il famoso IDE di sviluppo made in Sun che è una vera manna per gli sviluppatori Java (ma anche C/C++ e Ruby). Molto potente ed estendibile e che mi piacerebbe tanto iniziasse a potenziare anche l’attuale minimale supporto a Python.

Git è invece uno dei tanti sistemi di versioning che popolano il mondo e che ho provato (vi giuro, li ho provati tutti). Ha il pregio di essere dannatamente veloce anche se il prezzo da pagare è una piccola maggiore difficoltà di utilizzo. In realtà non è poi così difficile ma rispetto agli altri (Subversion, Mercurial e Bazar per esempio) si comporta diversamente e può un attimo spiazzare i nuovi arrivati.

Il problema principale è far dialogare NetBeans con Git.

Nei plugin “ufficiali” non c’è nulla: NetBeans supporta tutto tranne Git. Ma esiste la soluzione!

La soluzione è: http://nbgit.org/

NBGit è un plugin che integra Git in NetBeans risolvendoci tutti i problemi e rendendo NB l’IDE che supporta il maggior numero di sistemi di versioning.

Purtroppo almeno a me non funziona molto bene e lo devo “arrangiare” con qualche comando impartito da terminale.

Ma dopotutto è solo alla versione 0.2… diamogli tempo e diventerà essenziale! :)

EDIT: E’ uscita la versione 0.3. Adesso il plugin è veramente completo!

 
ENEA

ENEA

Ho scelto il progetto di reti che porterò come “tesi” della triennale. A dire il vero l’ho scelto già qualche settimana fa ma poichè il suo sviluppo si sta rilevando più interessante e istruttivo del previsto ho deciso, come mio solito, di condividere gran parte del mio lavoro. Come mio solito, inoltre, ho complicato la traccia del progetto per renderlo “più divertente” o quantomeno renderlo qualcosa che possa uscire al dilà della fredda sessione di laurea.

ENEA è l’acronimo di Environmento for Network Applications, ovvero un infrastruttura per l’esecuzioni di applicazioni basate sul Grid Computing e specialmente il Calcolo Distribuito.

L’intera applicazione è scritta in Java (come da buona tradizione universitaria) e fa uso di librerie standard (quindi portabili e multipiattaforma). Per ora non c’è nulla di funzionante in quanto mi sono dedicato per lo più alla fase di analisi e progettazione.

Presto metterò altre informazioni.

 

Posto qui di seguito la prima di una serie di guide pratiche su Java e sul Multithread che sta portando avanti un mio amico di università Dymios sul suo blog. Per ora metto solo la prima parte. Potete continuare la lettura sul suo blog.

Continue reading »

© 2008-2012 SlashCode Suffusion theme by Sayontan Sinha