Wikileaks, App Store, Censura, Disgusto.

Nel tempo record di un paio di ore un’app non ufficiale di wikileaks è stata pubblicata e rimossa dal fantastico, scintillante, perfetto, insostituibile, ma sopratutto controllabile, App Store.

La scusa è molto banale:

… secondo altre fonti potrebbe essere altrettanto plausibile che Apple abbia sanzionato la raccolta fondi attraverso un’app che è a pagamento, cosa non ammessa dalle regole. Per altro chi raccoglie fondi, anche se da un’app gratuita, deve essere parte di un’associazione di volontariato o a sfondo caritativo…

Tutto è ancora più chiaro e delineato quando si legge questo articolo.

Il messaggio è molto chiaro, casi come quelli di wikileaks non dovranno più accadere e questa è opinione comune di tutti i governi, il cui scopo finale, ricordiamoci, è rimanere al potere. Nessuna grande corporazione si può permettere di trovarsi contro i governi, per ora la stessa app su android rimane disponibile ma chissà per quanto. A mio modesto parere, la rivelazione più grossa di wikileaks non è in nessuno degli articoli portati alla luce del pubblico (comunque più preoccupato a scegliere quale cinepanettone vedere per primo), la rivelazione più grossa è semplicemente che il tanto sbandierato primo emendamento, o la presunta libertà americana, è solo una grossissima balla e nel momento del bisogno hanno usato tutti i metodi bizantini tanto criticati quando a farlo sono altri. E’ da qui che arriva “l’ignoranza è forza”, meno sa l’individuo e meno può pensare, viene concessa la libertà di pensiero proprio perché l’individuo non è in grado di pensare e per evitare che lo faccia è sufficiente controllare l’informazione, che di questi tempi si può fare semplicemente cancellando un paio di entry su un dns o modificando il routing, è così facile da essere disarmante.

Continue reading Wikileaks, App Store, Censura, Disgusto.

JDBC, perché usare PreparedStatement invece di Statement

Nel precedente articolo in tema JDBC ho usato java.sql.Statement, sarebbe buona cosa iniziare da subito ad usare java.sql.PreparedStatement, vediamo il perché. Normalmente quando arriva un SQL statement ad un db si scatena la seguente elaborazione:

  • Parsing della query
  • Compilazione della query
  • Generazione del plan ottimizzante il percorso di acquisizione dati
  • Esecuzione della query

Nel caso di java.sql.Statement i quattro passi vengono eseguiti ogni volta all’interno del motore del database, invece con java.sql.PreparedStatement i primi tre step sono pre-eseguiti ancora prima di arrivare al database, minimizzando il carico su quest’ultimo. Nel caso di insert e update massive, o molto frequenti, fornisce anche la possibilità di parametrizzare alcuni campi con le variabili di tipo bind, purtroppo molti programmatori si limitano a guardare il database come un semplice applicativo, senza valutare attentamente l’impatto delle proprie query. Ad esempio, suppiamo di dover fare tre insert del tipo:

Statement stmt;
    ...
    conn.setAutoCommit(false);
    stmt.addBatch("insert into (employees id.nextval, 'Homer')";
    stmt.addBatch("insert into (employees id.nextval, 'Lenny')";
    stmt.addBatch("insert into (employees id.nextval, 'Carl')";
    stmt.executeBatch();
    conn.commit();
    ...

Continue reading JDBC, perché usare PreparedStatement invece di Statement

Mandare messaggi con JMS tra sistemi eterogenei

Di recente mi sono trovato nella necessità di “far parlare” dei sistemi Windows XP con una serie di MDB (Message Driven Bean) Java residenti su un application server Glassfish. Fortunatamente Glassfish include il bellissimo OpenMQ (Open Message Queue) che a sua volta porta in grembo UMS, ovvero Universal Message System.
UMS, tra le sue tante funzionalità, può agire come broker tra sistemi eterogenei, fornendo una conettività a sistemi JMS non raggiungibili normalmente da tecnologie quali C#, VB, .NET e via dicendo.
Certo sarebbe più facile installare una JRE nei client remoti e sviluppare direttamente un piccolo client che accodi su JMS ma non sempre è possibile, o addirittura permesso, installare una JRE, ragion per cui può capitare di doversi arrangiare. UMS arriva proprio a soddisfare questa necessità, utilizzando una semplice applicazione, residente nel web-container. Uno schema preciso si trova qui. Per l’installazione e configurazione del servizio consiglio la lettura di questa eccellente guida (in inglese).

Supponiamo di avere un banale MDB che sta in ascolto su una coda JMS, ogni volta che arriva un messaggio si scatena una precisa elaborazione. Come prima specificato, un programma in C#, VB o simili su una macchina Windows non avrà modo di accordare un messaggio JMS, esistono soluzioni “esotiche” come JMS Courier di Codemesh, alternativamente si possono realizzare strutture CORBA, ma nel caso di messaggi asincroni, JMS rimane la scelta vincente. Ebbene con UMS ogni client in grado i mandare una richiesta HTTP può accodare un messaggio su una coda JMS, siano essi dei semplici messaggi di testo o anche dei SOAP.

Continue reading Mandare messaggi con JMS tra sistemi eterogenei

JDBC, chiudere le connessioni in modo sicuro

Spesso su internet si trovano molti esempi che servono, a chi sta iniziando, ad iniziare ad approcciare le connessioni JDBC. Purtroppo però questi esempi basilari partono sempre dalla forma errata, ovvero senza alcuna gestione delle eccezioni col risultato che il malcapitato database di turno si può trovare dozzine di connessioni appese mentre il novello programmatore fa i suoi test con applicazioni rudimentali.

Normalmente il codice si trova grosso modo così, in questo caso ad esempio con una sessione oracle:

import java.sql.*;
public class JDBCDemo {
    public static void main(String[] args) {
        try {
            // Connect to the database
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            conn = DriverManager.getConnection("jdbc:oracle:thin:@oraserver:1521:XE", "orauser", "orapwd");
            // Execute the SQL statement
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * from oratable");
            System.out.println("Got results!");
            // Loop thru all the rows
            while (rs.next()) {
                String data = rs.getString("some_field");
                System.out.println(data);
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}

Continue reading JDBC, chiudere le connessioni in modo sicuro

I had a dream…

Presto ci sarà qualche evento ben calibrato per far passare al mondo la voglia di wikileccare, magari un conflittino a bassa intensità con la Korea del Nord, qualcosa di molto televisivo, altre immagini IR da mandare alla CNN, qualche fantastica pellicola registrata da un drone e l’attenzione del pubblico si dimentica di quei noiosi, banali, scontati documenti di Wikileaks, dopotutto non raccontano niente di veramente spaventoso, almeno per ora, che tutti i governi si spiassero, che tutti nascondessero coltelli dietro la schiena mentre si danno la mano è cosa che si sa sin dai tempi di Machiaveli.

Buona maggioranza della gente che conosco sostiene che quei documenti non andavano divulgati, che sono cose che già si sapevano e i soliti blahblahblah.

La triste verità di tutta questa faccenda è che ciò che ne esce è che i paesi che tanto sbandierano la costituzione, la libertà di pensiero e di parola si sono comportati esattamente come i tanto criticati Iran, Cina, Arabia Saudita e buon resto dell’allegra combricola. Anche gli stessi metodi bizantini. Quelli dotati di un minimo di spirito critico dovranno guardare sotto tutt’altra prospettiva i servizi al telegiornale che parlano dell’ennesima privazione o censura nel mondo cosidetto “non civilizzato”.

Credevamo di vivere in un mondo libero? Magari sono inguenuo ma credevo di sì. Tutta una grossa balla, “Freedom is Slavery” scrisse qualcuno tanti anni fa, questa è forse la verità sconcertante che Wikileaks ha rivelato a noi tutti.

Ubuntu e Sitecom WL-315

Se utilizzate Ubuntu 10.10 e avete un ricevitore usb wireless Sitecom wl-315 vi sarete accorti che la periferica viene vista dal sistema ma non riesce a collegarsi alla rete.

Per risolvere questo problema basta aggiungere al file /etc/modprobe.d/blacklist.conf la seguente riga :

blacklist rt2800usb

Occorre riavviare il sistema e la periferica funzionerà correttamente.