Fixing error 2002 for MySQL installation on Mac OS X

After you've installed MySQL on MacOS X, you will probably encounter this common error while trying to open a connection from a PHP script to your database instance:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

This message tells you that PHP can't find the mysql.sock file into /var/lib/mysql/ directory.

Let's fix it.

First step (if you have not done it, yet) :
PHP should be looking for a php.ini file (and not php.ini.default) to load, so you need to rename php.ini.default to php.ini in /etc.
> cd /etc/
> sudo mv php.ini.default php.ini

Second step:
In Snow Leopard, mysql.sock file has been moved to /var/mysql directory (instead of /tmp directory).
You have two possibilities:

1. (SUGGESTED) create an alias in the location that PHP is looking for the real mysql.sock 
> sudo mkdir /var/mysql
> sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

 
2.  create a my.cnf configuration file in the /etc directory and save it with the following contents:
[client] socket = /var/mysql/mysql.sock
[mysqld] socket = /var/mysql/mysql.sock

and then

> sudo mkdir /var/mysql
> sudo chown _mysql /var/mysql


START or RESTART Apache and voila: les jeux sont faits!

Happy coding!

Global Game Jam: il ritorno 2011!

Il secondo appuntamento con la Global Game Jam per l'anno 2011 è stato rinnovato e confermato, dopo il successo dello scorso anno.
Ecco il sito web in cui potrete leggere tutte le informazioni dettagliate: http://www.globalgamejam.it/.

Lodi e meriti alla facoltà di Ingegneria che ospiterà ancora una volta l'evento (e per il secondo anno mi chiedo perchè il corso di studi in Informatica del DMI sia assente) ed ancor di più, un ringraziamento sentito ad e-Ludo (http://www.e-ludo.it/) che si prodiga per creare sempre nuove occasioni e momenti di incontri tra gli sviluppatori siciliani: l'unione fa la forza!

La GGJ è una bellissima opportunità di incontro e confronto per i giovani della Sicilia e dà voce a chi vorrebbe uscire "fuori dal coro" in un mercato, a mio parere, piuttosto inflazionato. Spiego di seguito la mia tesi.
E' un dato di fatto che l'informatica in Italia, ma soprattutto al Sud, ha come principale applicazione la "realizzazione di software gestionali" quando invece, dimostrato mondialmente, la sezione "videogames" è un'importantissima fetta del mercato informatico: una fetta, se vogliamo, anche molto redditizia.
Si pensi solo a tutte le console per videogames come PlayStation e PSP, XBox, Nintendo e Nintendo DS (etc etc) ed ora, sempre più in crescente espansione, l'avvento dei videogames sugli smartphones, ormai tutti dotati di notevoli schede grafiche per una eccellente "player"-experience. Mi sento anche di affermare che l'aspetto ludico di uno smartphone è ormai più importante della sua funzione di base: il telefono.

Aziende come Sony, Microsoft, Nintendo, Blizzard, Namco, Ubisoft ...  (giusto per citarne qualcuna, ma vi invito a dare un'occhiata qui ) hanno puntato sul settore videogames e ne sono uscite più che vincenti... non sarebbe giusto crederci???

Il protocollo informatico in Sicilia è di lusso!

Ecco il primo articolo che ho letto ieri e l'approfondimento di oggi.

12 miliardi di euro, il costo per il solo protocollo informatico alla Regione Sicilia.
Io non riesco nemmeno a quantificarli tutti 'sti soldi. Apprendo la notizia da www.repubblica.it e rimango senza parole nel leggere come nemmeno la vergogna  per un'operazione così eclatante possa bloccare gli interessi economici di chi sta ai vertici di questo sistema malato.

Si parla di ridurre gli sprechi di licenze Windows, di utilizzare software open source per abbassare i costi (non eliminarli, come qualcuno crede). Esiste anche un osservatorio dell'Open Source al CNIPA, ovvero il Centro Nazione per l'Informatica nelle Pubbliche Amministrazioni)!
Siamo nel 2011 e non è cambiato nulla. Che immenso rammarico vivere in questa Regione.

Migrating from Java to Objective-C: the essentials

In this article, I won't treat in depth how to migrate from Java to Objective-C, but if you are going to do it, it would be helpful to you reading this stuff that simplify the understanding of the new language.
Let's start.
The main difference between Java and Objective-C is the memory management. Java developers may encounter some problems in approaching the concept of "memory release" and "memory leaks" because Java Garbage Collector hides to developers all the mechanisms regarding memory allocation and releasing.
Mastering memory management is, in my opinion, the most difficult thing to learn while starting to code in Objective-C. A general rule could be that for each "alloc" we must have a "release". We will see how and when at the right moment.
Some of the main concepts are similar and I will resume for you just a few common aspects of both languages.

All objects inherit from: 
J - java.lang.Object
O - NSObject

Create a new object using: 
J - MyObject obj = new MyObject();
O - MyObject *obj = [[MyObject alloc] init];

Use instance methods as follows:
J - myObject.doSomething(); (we say: call the method "doSomething" of myObject)
O- [myObject doSomething]; (we say: throw the message "doSomething" to myObject)

Get the string representation of an object:
J - myObject.toString();
O - [myObject description];

Difference between null (Java) and nil (Objective-C):
J - myObject = null;   myObject.doSomething() will throw a NullPointerException
O - myObject = nil; [myObject doSomethin] will do NOTHING, the message doSomething is captured by none.

Manage user interactions on visual objects or capture events  by:
J - Listener: you need to implement all the methods defined in the Listener interface of the object.
O - Delegate: you need to implement all the method defined in the Delegate class for an object. 

Most of the name of user interface object follow those pattern:
J - JSomething, like JButton, JTextField ...
O - UISomething, like UIButton, UITextfield ...

Try/catch construct:
J- is heavily used and necessary to manage exception
O - rarely used. Main of the NSError are passed as pointers in the method that could throw an exception.

Getter/Setter methods:
J - By writing them for each instance variable
O - By using @property and @synthesize keywords

These are just a little part of the concepts but I hope it's a good start.
Happy coding!

(Thanks to my love for the patience!)

Inquadramento contrattuale degli informatici

Oggi ho scritto a diverse associazioni dei lavoratori, nonchè a diverse associazioni di informatici, per porre un problema che riguarda tutti coloro che, in Italia, si occupano del settore informatico.
Come ben saprete non esiste un CCNL per questa categoria, ma da più di 25-30 anni, si fa riferimento ai contratti metalmeccanico e del commercio. Spiego tutto in questa lettera che Vi invito calorosamente a leggere, sperando che possiate condividerla con altri colleghi, per smuovere un pò di coscienza sociale.

Salve,

sono la Dott.ssa Elisa Distefano e lavoro nel settore informatico da 5 anni. Mi rivolgo a Voi per avere informazioni in merito ad una questione "aperta", da troppo tempo, che riguarda l'inquadramento della Ns categoria.


In Italia, la figura professionale dell'informatico non possiede ancora un CCNL proprio, pur essendo ormai una realtà molto diffusa nonchè consolidata nel corso dell'ultimo ventennio.

I Ns contratti lavorativi fanno sempre riferimento al CCNL metalmeccanico o al commercio. Per questo motivo, riuscire ad individure con chiarezza e precisione il livello spettante relativamente alle proprie mansioni lavorative, è difficile o pressochè impossibile.
In Italia esistono diverse associazioni degli informatici, ma non ho mai sentito parlare di una mobilitazione generale allo scopo di iniziare la stesura di un contratto che potesse adeguatamente regolamentare questa di fetta di lavoratori. Una categoria che, cresciuta molto in fretta ed, a mio parere, è lasciata troppo allo sbaraglio (in mano a datori di lavori non esattamente altruisti), senza essere tutelata, soprattutto per quanto concerne i criteri di individuazione dei livelli contrattuali.
Probabilmente sono l'ennesima persona che chiede delucidazioni in merito, ma sarebbe già una gran conquista se si iniziasse a parlare del problema.

Vi ringrazio anticipatamente per il tempo dedicatomi, confidando in una Vs risposta e sperando che questa mia lettera possa contribuire all'inizio di un cambiamento.


Cordiali saluti.

AppStore: tutto ciò che l'utente non sa e che pensa di sapere!

E' vero che il cliente ha sempre ragione ma ...

Troppo spesso, su AppStore, i commenti degli utenti sono completamente fuori luogo nonchè privi di qualsiasi fondamento. Voglio riportare qualche esempio per smentire definitivamente certe "credenze popolari":

1. ADDEBITO SUPERIORE AL COSTO DELL'APP.
Quando un'applicazione costa 0.79€ e, subito dopo aver effettuato il pagamento, la banca vi notifica (magari via SMS) un addebito di 1.59€ ( o qualsiasi altra cifra superiore), è dovuto al fatto che per ogni carta di credito vi è un importo minimo per ogni transazione. L'utente urlerà subito "al ladro!" senza sapere che 2 giorni dopo la Apple gli invierà regolare fattura con l'importo corretto di 0.79€ e che, a fine mese, l'estratto conto della carta di credito conterrà esattamente l'addebito di 0.79€, non un centesimo in più! Non pensate che se così non fosse, Steve Jobs sarebbe stato in manette?

2. CHI SI OCCUPA DEL PAGAMENTO DELL'APP.
Per il punto di cui sopra, vengono sempre additati come LADRI gli sviluppatori dell'applicazione. Mai cosa su più errata. Le transazioni passano SOLO ED ESCLUSIVAMENTE da Apple, e non dagli sviluppatori. Gli sviluppatori riceveranno la loro parte di compenso (il 70% dell'importo) solo dopo un mese e la Apple, DI CERTO, non rischia di farsi denunciare con una cosa così elementare.

3. TEST DELL'APP
La Apple non fa il "test" dell'applicazione. Si accerta esclusivamente che l'app sia conforme formalmente ai requirements dettati per la pubblicazione. Del test, se ne devono occupare gli sviluppatori o chi per loro. Pertanto, non accusate la Apple se l'app ha dei bug.

4. LEGGERE LE ISTRUZIONI PRIMA DELL'UTILIZZO
Prima di acquistare un'applicazione, è necessario leggere la descrizione e la compatibilità con il proprio firmware o altre condizioni relative all'utilizzo. Se non si fa ciò, non possiamo URLARE contro gli sviluppatori se l'app non funziona sul nostro iPhone.

5. SODDISFATTI O RIMBORSATI
Se l'app che avete acquistato non soddisfa le vostre aspettative (secondo oggettivi criteri che Apple potrà accertare), potete immediatamente richiederne il rimborso alla Apple, utilizzando il vostro account su AppStore e segnalando il problema dalla "Cronologia Acquisti". La Apple valuterà se la vostra richiesta è fondata ed, eventualmente, annullerà il vostro ordine e pertanto anche l'addebito sulla carta di credito. Per maggiori informazioni, vi consiglio di leggere questo articolo.

Spero di aver chiarito qualche dubbio per gli utenti più scettici, critici e troppo avventati  nei giudizi. Ed aggiungo un consiglio: contattate l'assistenza dei prodotti per accertarvi di  non aver commesso errori grossolani che compremettono l'utilizzo della vostra app, rendendovi completamente insoddisfatti.

How to change Charset on the fly, via javascript

If you need to ADD OR CHANGE the metatag for charset, on the fly in your web page, you can use the function below, by passing the charset you want as parameter:



For example: setCharset('UTF-8'); or setCharset('ISO-8859-1');

java.sql.Date.valueOf() : comparing Sun vs BEA jRockit JVM

I've noticed two different behaviour of the static method java.sql.Date.valueOf() using Sun JVM instead of BEA jRockit JVM. I share with you this experience.

If you have the following string:

String myStringDate = "2010-01-010";

and apply the above method to get a java.sql.Date from it, as follows:

java.sql.Date date = java.sql.Date.valueOf(myStringDate);

on both Sun and BEA jRockit JVM, the method works fine and return a date.

BUT, if the string date is formatted like this

String myStringDate = "2010-1-10"; //note the month without zero.

 and apply the above method to get a java.sql.Date from it, as follows:

 java.sql.Date date = java.sql.Date.valueOf(myStringDate);

on Sun JVM (i've tried with 1.6 version) , you get the following exception

Exception in thread "main" java.lang.IllegalArgumentException
    at java.sql.Date.valueOf(Unknown Source)

while, using jRockit still works fine. So, pay attention in get date from string using this method, if you don't know on  which JVM your code will be run.

Hope this can be helpful.

Delete monxga32.exe from your PC (removal process)

Today, Avira Antivir notified me a potential malware. Then i made some research and found something strange on my PC.

1. The CPU running permanently over 50%-80%.
2. A "notepad.exe" process active but there weren't related and visible windows.
3. msconfig shows a unusual process at Startup: monxga32.exe. The path of this program was C:\Documents and Settings\user-account-name\Start Menu\Programs\Startup\ but searching this file with Explorer does not produce any results! Seems like this file does not exists, since it's not even hidden.

SOLUTION:

1. Start Windows in Safe Mode.
2. Search the file monxga32.exe. The given results are two:
   - C:\Documents and Settings\user-account-name\Start Menu\Programs\Startup\monxga32.exe
   - C:\WINDOWS\Prefetch\monxga32-"SOME CHARS".pf
Delete both of them.
3. Open regedit and click on Edit > Find. Digit monxga32.exe and delete all occurrences. Then search again to be sure each entry has been deleted. Close regedit.
4. Open msconfig, click on tab Start and uncheck the entry monxga32.exe and close msconfig.
5. It will ask you to restart your PC, then restart Windows normally.
6. To be sure everything has done well, re-open msconfig, on tab Start. No process monxga32.exe should appear in the list.

Hope this can be helpful.

For italian people - per gli italiani (e per chi si scoccia a leggere in inglese) una versione più divertente (e verbosa ) di questo mini-help per distruggere monxga32.exe :
http://toshidex.netsons.org/2010/04/22/win-io-ti-odio-part-iv-delete-monxga32-exe/
Thanks to lightuono ;)

Prepariamoci a sviluppare con Android

Android è uno stack software per dispositivi mobili che include un sistema operativo, middleware e applicazioni chiave. L'SDK di Android fornisce gli strumenti e le API necessarie per iniziare a sviluppare applicazioni per la piattaforma Android utilizzando il linguaggio di programmazione Java.
Per avere un'idea dell'architettura di Android possiamo dare uno sguardo al seguente diagramma:


Il sito di riferimento per gli sviluppatori è http://developer.android.com/index.html

In questo mini-tutorial, prepareremo l'ambiente per la crezione del nostro "Hello World" con Android.

1. Scarichiamo la SDK seguendo le istruzioni riportate qui: http://developer.android.com/sdk/index.htm
2. Scarichiamo ed installiamo Eclipse (consiglio la versione Galileo): http://www.eclipse.org/downloads/
3. Installiamo il plugin dall'url: https://dl-ssl.google.com/android/eclipse/
4. Riavviamo Eclipse
5. Per configurare la piattaforma in Eclipse, nella toolbar di Eclipse dovrebbe apparire un'iconcina come questa oppure cliccate su Window > Android SDK and AVD Manager (dove AVD sta per Android Virtual Device, ovvero l'emulatore per il test delle nostre applicazioni)
6. Nel pannello di sinistra della finestra aperta al passo 5, selezionate la voce "Available packages" e cliccate sul checkbox dell'url mostrato sulla destra, per visualizzare i componenti disponibili per l'installazione.
7. Selezionate almeno una piattaforma da installare, e fare clic su Installa selezionati. Se non siete sicuri che la piattaforma da installare, utilizzare l'ultima versione. Ad esempio:

Il download potrebbe durare diversi minuti
8. Per creare un AVD, in Eclipse, scegliete Finestra> Android SDK e AVD Manager e selezionate la voce "dispositivi virtuali" nel pannello di sinistra, quindi cliccare su "Nuovo".
9. Digitate il nome dell' AVD, ad esempio "AVDTest"
10. Selezionate la versione la versione del SDK di Android che desiderate eseguire su l'emulatore e confermate la creazione con "Crea AVD".


Ora siamo pronti per creare la nostra prima applicazione su piattaforma Android.

Session Timeout in JBOSS

Ci sono due modi per definire la durata massima di una sessione (il suo timeout) per un'applicazione deployata su JBoss.

PER TUTTE LE APPLICAZIONI:
Il session timeout può essere definito per tutte le applicazioni dell'AS nel file web.xml che si trova nella directory {serverdir}\default\deploy\jbossweb-tomcat55.sar\conf, modificando il tag (il valore è espresso in minuti).

Ad esempio:
<session-config>
<session-timeout<30</session-timeout>
</session-config>

PER UNA SINGOLA APPLICAZIONE:
Potrebbe essere necessario definire un session timeout diverso da quello settato a livello di AS, per una singola applicazione. Nel file web.xml all'interno dell'archivio da deployare, faremo l'"override" del session-timeout definito su JBoss.

Ad esempio:
<session-config>
<session-timeout>10</session-timeout>
</session-config>

Le web application per cui non è definito il tag session-timeout nel proprio file web.xml, assumeranno il comportamento standard, pertanto il loro session timeout, sarà di 30 minuti.

Hardware o design?

Driiin driin, scendo giù, il mio spacciatore di hardware Apple (k) mi consegna a domicilio il gioiellino (in tutti i sensi): il topo magico! Mouse wireless/touch pad/che altro? Delux!
Scarico il "Wireless Mouse Software", installo, riavvio, apro System Preferences ed eccolo:

Poi, dò un'occhiata alla mia scrivania e ditemi voi se questa non è classe! Grazie Aerandir!

Java Performance: occhio alla concatenazione delle stringhe.

E' utile prestare l'attenzione alle performance del nostro codice, dato che la concatenazione delle stringhe è una delle operazioni più comuni e frequenti.
Oggi ho letto quest'articolo molto interessante
StringBuilder vs StringBuffer vs String.concat - done right e ne riassumo il contenuto qui di seguito.
Il dilemma è :
operatore "+", StringBuffer o StringBuilder?

Innanzitutto è importante sottolineare che gli oggetti String in Java sono immutabili, ovvero una volta creati non possono essere più modificati. Pertanto "modificare" una stringa significa creare un nuovo oggetto e rendere il nuovo oggetto la referenza alla variabile che stiamo modificando. Quindi, quando si concatenano stringhe, non si fa altro che creare un nuovo oggetto con il contenuto delle stringhe concatenate.

Una volta detto questo le deduzioni sono semplici. Se si utilizza:
  • l'operatore "+" ( o String.concat() ): viene creata una nuova stringa, il valore della vecchia viene copiato nel nuovo oggetto e viene accodata l'altra stringa. Più lunga è la stringa, più lento è il processo (che coinvolge anche il Garbage Collector per la rimozione degli non più utilizzati). Evitate di utilizzare "+" in un loop! Va benissimo per System.out.println("x:"+x+" y:"+y);

  • la classe StringBuffer: è una sequenza di caratteri "thread-safe" (synchronized) e modificabile. In qualsiasi punto ed in ogni momento, il contenuto può essere può essere modificato utilizzando gli appositi metodi ( append, insert ... ).

  • la classe StringBuilder (a partire da Java 1.5): il funzionamento è pressocchè uguale ma è più veloce di StringBuffer, poichè non è synchronized.
IN CONCLUSIONE: And the winner is.... StringBuilder!!!
Se dobbiamo costruire delle stringhe molto lunghe, o all'interno di loop o ancora modificarne frequentemente il contenuto, è senz'altro indispensabile utilizzare StringBuilder. Per semplici concatenazioni di piccole stringhe, utilizziamo il "+" che riduce notevolmente la quantità di codice da scrivere.

Convenzioni per la scrittura di codice Java

Eleganza, ordine, leggibilità e manutenibilità del codice ... chi più ne ha più ne metta... le convenzioni per la scrittura del codice ( Java o qualsiasi altro linguaggio di programmazione) sono fondamentali, specie quando si lavora in team.
Di solito sono concetti assodati, che i programmatori acquisiscono con lo studio e l'esperienza lavorativa, ma purtroppo spesso non sono scontati per tutti.
Un documento che dovremmo leggere tutti è il seguente:

Linee guida della Sun per la scrittura del codice Java

Se invece volete riderci su ed imparare come scrivere codice pessimo, potete leggere questi preziosi consigli (ovviamente sarcastico): http://soft-land.org/cgi-bin/doc.pl?doc=documenti/pessimo (ESILARANTE!!!) :D


Down di Gmail ... di nuovo ...

Google è attualmente l'esempio più macroscopico di Cloud Computing. Indubbiamente ed indiscutibilmente all'avanguardia per la qualità e l'innovazione dei servizi offerti ... ma sempre più spesso siamo i protagonisti di scomodi "down" dei servizi. Oggi Gmail fuori uso ...


AppStatus di Google riporta:

Ed ancora:
- 02 settembre 2009
- 26 febbraio 2009

L.A.P. #1 al DMI

Finalmente anche in ambito accademico si comincia a fare qualcosa di concreto ed innovativo che proietti gli studenti al mondo del lavoro. Ad ottobre, presso il Dipartimento di Matematica ed Informatica di Catania, partirà il nuovo corso universitario di programmazione per iPhone, denominato L.A.P #1 (Laboratorio Avanzato di Programmazione): un corso specifico per la programmazione del nuovo dispositivo di casa Apple.

Il corso di 48 ore è strutturato in moduli didattici da due ore ciascuno. Potete visionare il programma QUI. Docenti del corso sono il prof. Vincenzo Cutello (Ordinario presso il Dipartimento di Matematica ed Informatica) ed il Dott. Costantino Pistagna (ricercatore presso lo stesso dipartimento).
In Italia, solo il Politecnico di Milano, aveva proposto A PAGAMENTO (1000 e rotti €) un corso per programmazione iPhone, pertanto l'iniziativa del C.d.L. in Informatica è certamente degna di nota e l'interesse degli studenti sembra già altissimo.

Obiettivo e' la formazione di nuovi programmatori specializzati in quest'ambito. In tal modo, si vuole offrire agli studenti del corso di laurea, competenze all'avanguardia spendibili sul territorio rilanciando, al contempo, l'ateneo Catanese.

La realtà Apple/iPhone è molto vicina ad i giovani e L.A.P. #1 significa:
- avere un punto di riferimento per iniziare a scoprire la programmazione su Cocoa
- offrire una valida alternativa di lavoro ai neo-laureati
- aprire una nuova porta sull'innovazione e lo sviluppo economico
- iniziare a far crescere un campo di sviluppo ancora "verde" in Italia

Complimenti ed in bocca al lupo ad insegnanti e studenti!

Dead software walking

Come risposta a questo vecchio post "News dalla Compuware", ecco che fine ha fatto OptimalJ:

http://en.wikipedia.org/wiki/OptimalJ

Come un oggetto della storia passata, la biografia di un artista che riporta la data di nascita e la data di morte, è finito su Wikipedia con i miei dolori a seguito ... Aspettative tradite, progetto abbandonato! Ed io? Continuo a mantenere un sistema software massiccio con questo cadavere tra le mani, che si fa sempre più pesante ... Ahimè!

10 Veri Motivi per non aggiustare il pc agli amici!

Scusate se ricopio ... ma è troppo bella per passare inosservata!
(grazie a http://www.baldo.it/update/2009/divertenti/10-veri-motivi-per-non-aggiustare-il-pc-agli-amici/ )
RIPORTO FEDELMENTE:

(1) Diventi automaticamente disponibile sempre e per sempre; a qualunque ora del giorno e della notte, ovunque tu sia: al lavoro, sotto la doccia…
“Pronto, ciao ti disturbo?”
“Beh in questo momento sono in barca in ferie…”
“Ah… ma tanto tu fai presto in queste cose. Senti ho il computer che quando lo accendo mi da errore 000×32F33. Cosa può essere? Sono disperato…”
“Si, ma sono in mezzo al mare”
“Va bene. Dimmi cosa devo fare…”

(2) Diventi oggetto di una catena di passaparola selvaggio.
“Aspetta che lo chiedo a un mio amico, lui di sicuro lo sa. Poi è molto alla mano e se ha tempo ti da una mano volentieri.”

(3) Diventi automaticamente il responsabile e amministratore del PC
“Ti ricordi che l’anno scorso mi avevi installato quel programma per vedere i filmati? Ecco, stamattina, vado ad accendere il PC e non si accende più, cosa può essere successo? Non è che hai fatto qualcosa di strano?”

(4) Devi conoscere tutti i programmi e tutti i sistemi operativi esistenti sul pianeta. Da Blender al GWBASIC, da Windows 95 alle più improbabili distro di Linux. Dovrai saper fare tutto di tutto: non sono ammesse lacune per chi “conosce il computer”
“Senti, scusa se ti disturbo, ma ho un problema: come faccio ad importare un audiolibro con Itunes?”
“Guarda, mi dispiace, ma non ho l’Ipod e Itunes non lo conosco”
“Dai che tu ci capisci di sicuro più di me. In due minuti tu fai tutto…”

(5) Diventi, per esteso, la prima persona da consultare per tutto ciò che funziona a corrente elettrica
“Ciao, scusa se ti disturbo, ma ho l’home theatre della sala che non funziona più bene. Tu guardi anche quelle cose lì? Perchè è da qualche giorno che si sente un fruscio dal vufer e magari bisogna solo cambiare un fusibile…”

(6) Vieni visto come uno spacciatore di hardware
“Ciao, scusa se ti disturbo, volevo comprarmi un PC portatile, tu non è che hai delle bazze?”
“No”
“Come no? Lavorando nei computer vuoi che non ti passi sotto mano qualche occasione? Beh se hai qualcosa fammelo sapere, intanto mi daresti un’occhiata a dei preventivi che mi sono fatto fare?”

(7) Devi sempre navigare nell’ignoto.
“Ciao, scusa se ti rompo, ma il PC non va più”
“Come non va più? Non si accende o cosa?”
“No no, si accende ma poi non va”
“Cos’è che non va? Il sistema operativo?”
“Io non ci capisco mica niente… non va”
“Ma che sistema operativo hai?”
“Cosa vuoi che ne sappia io che sistema operativo ho….cos’è il sistema operativo? Dove devo leggere? Guarda, fai prima se vieni qua a dare un’occhiata, aspetto, vai tranquillo, va bene anche stasera dopo il lavoro…”

(8) Lavorerai sempre gratis… se va bene!
Al di là di qualche caffè offerto, non vedrai mai un soldo. Di sicuro, però, ne spenderai: viaggi, telefonate, probabilmente anche cavetti, vecchi componenti, batterie, viti, ecc…

(9) Grazie alla tua disponibilità, sarai sempre sottovalutato e verrai classificato al massimo come “smanettone”.
I “tecnici”, quelli veri, fanno le stesse cose che fai tu (forse con meno cura), ma prendendo 80 euro all’ora, saranno visti come semidei.

(10) Serve davvero un decimo motivo?

-_-

HttpSessionListener: come gestire gli utenti on line in Java

Scopo di questo articolo è proporre una soluzione semplice ad una delle problematiche più comuni che riguarda un'applicazione web: mantenere la lista degli utenti on line.
Innanzitutto distinguiamo i concetti di HttpSession e ServletContext.
In un'applicazione J2EE, una sessione (tipicamente legata ad un'utente) è rappresentata dalla classe javax.servlet.http.HttpSession e fornisce un'associazione tra il client HTTP ed il web server. Un ServletContext è costituito da un gruppo di servlet, pagine JSP o altre pagine web che condividono tra di loro risorse e dati. Ogni Servlet Context corrisponde, in pratica (a partire dalle specifiche 2.1 sulle Servlet), all'intera applicazione web, al contrario della sessione le cui risorse sono disponibili solo all'interno della sessione stessa.

Pertanto, la lista degli utenti on line (ad esempio un HashMap con chiave = sessionId e valore = username), sarà conservata in ServletContext. Ciò implica che:
1. quando un utente effettua il login sull'applicazione web e viene instanziata una nuova sessione sul web server, aggiungeremo una entry alla lista degli utenti;
2. quando un utente effettua il logout dall'applicazione web oppure la sessione va in timeout e scade, rimuoveremo la relativa entry dalla lista.

Java mette a disposizione degli sviluppatori, un'utilissima interfaccia (un listener) javax.servlet.http.HttpSessionListener che viene notificata con degli eventi ogni volta che la lista delle sessioni attive in una web application subisce un cambiamento.

I metodi da implementare sono :
- void sessionCreated(HttpSessionEvent se) : notifica della creazione di una sessione
- void sessionDestroyed(HttpSessionEvent se) : notifica dell'invalidazione di una sessione

Ad esempio:

package example;

public class MyHttpSessionListener implements HttpSessionListener {

public void sessionCreated(HttpSessionEvent event) {

/* AGGIUNGI QUI L'UTENTE LOGGATO,
ALLA COLLECTION CONSERVATA IN SERVLET CONTEXT */
}

public void sessionDestroyed(HttpSessionEvent event) {
/* RIMUOVI QUI L'UTENTE LOGGATO,
DALLA COLLECTION CONSERVATA IN SERVLET CONTEXT
...
(HashMap)
event.getSession().getServletContext().getAttribute("userList").remove(event.getSession().getSessionId());
*/

}
}


Per attivare il listener, è inoltre necessario aggiungere la seguente voce al file web.xml:

<listener>
<listener-class>
example.MyHttpSessionListener
</listener-class>
</listener>

Riferimenti:

- http://java.sun.com/products/servlet/2.1/api/javax.servlet.http.HttpSession.html
- http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpSessionListener.html
- http://www.mokabyte.it/2002/01/servlet23_2.htm

Campagna Anti - Facebook


E’ da mesi che la gente mi pone sempre la stessa domanda:

“Ma tu … non ci sei su Facebook??? ”

Ebbene NO, NON CI SONO SU FACEBOOK!!!
Dovrei?!? E’ obbligatorio?!?
Sembra diventare il must dei nostri tempi, una specie di ufficio anagrafe mondiale. Se evadi le tasse, nessuno ci fa caso, ma se non hai un account su Facebook, sei davvero una persona strana!

Diventa una droga, un morbo subdolo … cercare, conoscere, pubblicare, apparire: una vita on line.
Ma perchè? Perchè tutti hanno bisogno di comunicare cosa fanno in ogni istante della propria giornata? Perchè tutti devono sapere cosa farò stasera, o dove sono stata ieri mattina? Perchè devo essere “taggata” sulle fotografie, come se avessi dietro paparazzi autorizzati ma senza essere una VIP?

Non ci rendiamo conto di come, inconsciamente, questo meccanismo infernale sta entrando ed invadendo le nostre vite. E a cosa servono le leggi sulla tutela della privacy quando un conoscente, con un solo click, permette a Facebook di inviare una mail di invito a “tutta” la sua rubrica dei contatti? Non pensate che sia ora di svegliarsi?

Non voglio essere assolutamente negativa: indubbiamente, Facebook ha permesso a tantissime persone di ritrovarsi piacevolemente dopo anni ed anni e, per certi aspetti, è davvero un meraviglioso aggregatore sociale che accorcia le distanze e tavolta, ha aiutato tantissime persone a sentirsi meno sole ed a trovare qualcuno con cui scambiare i propri pensieri .
Il problema nasce quando la sottile linea di confine tra il piacere di ritrovarsi con gli “amici” e la “necessità” di conoscere tutti i particolari della vita privata altrui, viene ampiamente oltrepassata.

Si litiga su Facebook, si discute di tutto e di tutti. Se non accetti “l’amicizia” di qualcuno che hai visto solo una sera in tutta la tua vita, magari si offende. Amici di Facebook… possibilmente, gente a cui hai stretto la mano per dire “Molto piacere” si dichiara tuo”AMICO” … 200 amici??? Davvero??? Ma che fortuna ad avere tutti questi amici … ! Non sarebbe forse opportuno chiamarli CONOSCENTI?
Che valore diamo ai veri rapporti? Che prezzo ha un sorriso vero, che possiamo vedere con i nostri occhi?
Riflettiamo, riflettiamo … stiamo perdendo il senso della realtà … viviamo una realtà virtuale. Ma se ci pensate bene … una “realtà”, in quanto reale … non può essere virtuale. Significa che stiamo prendendo in giro noi stessi… quando siamo felici di avere tanti “amici”, ma se l’adsl va giù, ci ritroviamo soli come cani …