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.