Archivio mensile:Novembre 2009

Maroni vuole censurare Internet per contrastare il terrorismo

Roberto Maroni

Ha capito tutto!
Il Ministro dell’Interno ha ribadito la necessità di esercitare un controllo maggiore sulla Rete.
Non ci mollano.
Non la conoscono, la rete. La screditano e basta, non sanno di cosa parlano. Prima che il sangue mi giunga alla testa con eccessiva pressione, pubblico lo splendido commento di ruppolo scritto su Punto Informatico.

Impedire l’ideologia terrorista?

Ma Maroni, che hai dentro la crapa? Ma ti pare che si possano combattere le ideologie con le armi convenzionali? Hai dimenticato che Internet è uno strumento militare progettato per resistere ad attacchi nucleari? E tu pensi di fare cosa? Di lottare come? Con la censura?
POVERO ILLUSO!!!! Avresti più fortuna censurando la Luna!

Non esiste la censura su Internet, mettitelo in testa! L’unico risultato che ottieni è rompere i coglioni alla gente onesta e far rimanere il paese arretrato rispetto al resto del mondo. Altro non ottieni.
Tralasciando che il web non è certamente l’unico modo per diffondere ideologie (ci sono le darknet, i newsgroup e qualsiasi altra comunicazione cifrata, anche semplici email), se anche un gruppo terroristico fosse tanto sfacciato da mettere su un sito web convenzionale, lo metterebbe dove né tu né i tuoi compagni (si fa per dire) gli potrete mai fare un baffo, se non inviando truppe militari in paese estero: vuoi scatenare guerre? Poi guarda quello che è successo con Napster prima e Pirate Bay dopo… ne chiudi uno e non fai tempo a togliere la chiave dal lucchetto che se ne sono aperti decine, centinaia, migliaia dietro di te, dislocati in ogni angolo del mondo.
No, mio caro Maroni, l’era della censura è tramontata. Ora i problemi si AFFRONTANO ALLA RADICE: chi fa terrorismo invece di picnic sui prati è perché ha subito TORTI A PROFUSIONE. Allora si deve iniziare a NON ROMPERE I COGLIONI in giro per il mondo sfruttando la povera gente. Da li si deve iniziare, per combattere le ideologie. Fai star bene la gente, dagli da mangiare e un tetto sulla testa, falli divertire, e vedrai che del terrorismo resterà solo un parola nel dizionario.

Conversione da Binary 32 bit a Float IEEE754 in PHP

bit byte

Non è stato semplice saltarci fuori, per una serie di motivi. La conversione di un numero binario (o esadecimale) ad un numero in virgola mobile non l’avevo mai affrontato perchè in PHP, solitamente, si lavora con numeri “definitivi” (integer, float, ecc). Tale conversione può dipendere da diversi fattori.

Per prima cosa ho dovuto studiarmi un pò lo standard IEEE 754, in particolare i numeri a precisione singola (32 bit). Su Wikipedia è spiegato molto bene il metodo con cui effettuare la trasformazione (esponente, mantissa, ecc). Devo ammettere che prima di trovare il codice “giusto” mi sono imbattuto in diverse librerie che non davano l’esito atteso. Alla fine ho trovato una semplice funzione sul sito PHP nella pagina dedicata al Floating point numbers. Leggendo un po’ di commenti ho trovato l’ottimo intervento di info at forrest79 dot net.

Riporto qui di seguito la funzione completa:

function binToFloat($bin) {
if(strlen($bin) > 32) {
return false;
} else if(strlen($bin) < 32) {
$bin = str_repeat('0', (32 - strlen($bin))) . $bin;
}
$sign = 1;
if(intval($bin[0]) == 1) {
$sign = -1;
}
$binExponent = substr($bin, 1, 8);
$exponent = -127;
for($i = 0; $i < 8; $i++) {
$exponent += (intval($binExponent[7 - $i]) * pow(2, $i));
}
$binBase = substr($bin, 9);
$base = 1.0;
for($x = 0; $x < 23; $x++) {
$base += (intval($binBase[$x]) * pow(0.5, ($x + 1)));
}
$float = (float) $sign * pow(2, $exponent) * $base;
return $float;
}

Per testare il tutto dovreste poter effettuare la seguente conversione:

Bin: 1000011100010111110001111010101
(Bin Corretto: 01000011100010111110001111010101)
Float: 279.77993774414

N.B.: Come potete vedere la funzione aggiunge il primo bit (0) nel caso in cui l’intero binario sia composto da 31 bit e non 32.

Tutorial per uso multilingua del Payment Gateway del Consorzio Triveneto

e-commerce payment gateway

Ho appena aggiornato la classe PgConsTriv che implementa una serie di metodi utili alla realizzazione di siti e-commerce che necessitano di interfacciarsi al Payment Gateway del Consorzio Triveneto S.p.A.

E’ stata migliorato il file di configurazione in modo che si possa passare più facilmente dall’ambiente di Test a quello di Produzione e viceversa. Ora il file include i seguenti paramentri:

  • _PG_ID_Merchant_Test
  • _PG_Password_Test
  • _PG_ID_Merchant_Production
  • _PG_Password_Production

Il passaggio da un ambiente all’altro avviene semplicemente settando il parametro _PG_System_Environment al quale è possibile assegnare uno dei due valori: Test o Production.

La classe inoltre è stata migliorata sull’aspetto multi-lingua. Nelle precedenti versioni era necessario infatti passare alcuni parametri ai metodi per ottenere i diversi URL in base alla lingua selezionata. Ora basta inizializzare la classe con la lingua (se necessario) e tutti i metodi si comporteranno di conseguenza.

// init PgConsTriv Class
$pg = new PgConsTriv('en');
$pg->setAction('Purchase');
$pg->setVal_NM($_POST);

Le lingue dell’interfaccia del Payment Gateway attualmente gestite e configurabili sono:

  • ITA = Italiano(valore da impostare it)
  • USA = Inglese (valore da impostare en)
  • FRA = Francese (valore da impostare fr)
  • DEU = Tedesco (valore da impostare de)
  • ESP = Spagnolo (valore da impostare es)
  • SLO = Sloveno (valore da impostare sl)

Qui sopra la classe viene inizializzata con la lingua inglese (en è l’impostazione per l’inglese, come da codifica ISO 639-1). Questo vuol dire che la HPP (Home Page Payment) che verrà presentata all’utente sarà in lingua inglese. In realtà il parametro da passare al Gateway per l’inglese sarebbe USA (vedi Documentazione Rif. 1.4.4) ma la classe gestisce una conversione automatica grazie ad un array (questo solo dalla versione 1.3 in poi!). Non solo, anche i diversi URL (errorURL, responseURL, goodURL)  presenteranno lo stesso parametro se la lingua viene impostata.

Nel file di configurazione infatti abbiamo:

/*
* E' possibile aggiungere %s
* %s verrà valorizzato se viene passata una lingua in fase di inizializzazione della classe
*     (Vedi __construct)
*/
define("_PG_responseURL", "responseURL.php");
define("_PG_errorURL", "errorURL.php");
define("_PG_goodURL", "goodURL.php");

Come descritto nel commento è possibile inserire il valore %s per aggiungere il parametro della lingua. Esempio:

define("_PG_responseURL", "/payment/%s/responseURL/");
define("_PG_errorURL", "/payment/%s/errorURL/");
define("_PG_goodURL", "/payment/%s/goodURL/");

N.B.: Nel caso qui sopra utilizziamo il modulo mod_rewrite di Apache per convertire gli url.

I valori %s, se la lingua viene impostata in fase di inizializzazione classe, verranno sostituiti dal valore stesso. Nel nostro caso quindi verrà inserito en. In questo modo potremo facilmente agganciare tale parametro nel nostro codice PHP e convertire i contenuti (testo, immagini, ecc.) nella lingua selezionata.

Se utilizzo codici diversi per le lingue?

Dalla versione 1.3 in poi la conversione di tali codici avviene in automatico (se necessario impostare i valori nell’array $arLingue impostato come proprietà della classe).

Se si utilizza una versione precedente alla 1.3 è possibile risolvere il problema in questo modo:

Nel mio caso, ad esempio, su un sito multilingua, preferisco utilizzare codici standard (it=italiano, en=english, es=spagnolo, ecc). Vi è quindi discordanza tra i due parametri della lingua. Per ovviare a questo problema, per prima cosa, a monte di tutto, è stato creato un Array per l’associazione tra i diversi codici lingua utilizzati.

// Array Lingue per Payment Gateway
$ArLinguePG = array(
'it' => 'ITA',
'en' => 'USA',
'es' => 'ESP',
'de' => 'DEU',
'fr' => 'FRA',
);

Poi ho aggiunto, in cima alle pagine che possono ricevere entrambi i parametri (es: USA ed en), il seguente codice che mi riconosce quale dei due parametri (codifica Consorzio o Standard) mi è stato passato tramite il valore $_REQUEST[“lingua”]:

// Set lingua PG secondo la mia codifica
$lngDefault = "it";
if( isset($_REQUEST["lingua"]) )
{
// Codifica Consorzio
if( strlen($_REQUEST["lingua"]) == 3 )
{
$keyLng = array_search($_REQUEST["lingua"], $ArLinguePG);
$lingua = ($keyLng !== false) ? $keyLng : $lngDefault;
}
// Codifica mia
if( strlen($_REQUEST["lingua"]) == 2 )
{
$lingua = array_key_exists($_REQUEST["lingua"], $ArLinguePG) ? $_REQUEST["lingua"] : $lngDefault;
}
} else {
$lingua = $lngDefault;
}
// Set Lingua secondo la codifica utilizzata dal Consorzio Triveneto
$lngPG = $ArLinguePG[$lingua];

In questo modo, nel codice che seguirà, avrò a disposizione entrambe le variabili:

$lingua = codifica Standard della lingua richiesta
$lngPG = codifica Consorzio della lingua richiesta

Un pò arrangiato ma funzionante, che poi è quello che conta 😉

Be moov, un nuovo progetto sui micropagamenti. Quanto costerà?

Ho letto dell’annuncio di un nuovo progetto per i micropagamenti col cellulare: be moov.
Un progetto che vede coinvolti il Politecnico di Milano con il suo Osservatorio sul Mobile, Telecom Italia, Nokia e tanti piccoli esercenti che fanno capo a Movincom (il consorzio degli esercenti stessi).

I costi, la cosa più importante, non sono ancora chiari.
Vedremo di che si tratta…

Nuovi dati aziendali da inserire sul sito Web

gazzetta ufficiale

Nel 2005 arrivò l’obbligo di esporre il numero di Partita IVA (ovviamente per chi lo possiede) sul proprio sito web. La normativa lasciava ampio spazio ad ambiguità ma, nonostante ciò, le multe arrivarono lo stesso.

Oggi è la volta della nuova Legge comunitaria 2008, recepita nel nostro ordinamento con la Legge 7 luglio 2009, n. 88 e pubblicata sulla Gazzetta Ufficiale del 14 luglio 2008, n. 161, Supplemento Ordinario n. 110. Nell’art. 42 vengono indicati i nuovi obblighi a cui sono soggette le imprese.

L’art. 42 Legge n. 88/2009, infatti, modificando l’art. 2250 del Codice Civile, introduce nuovi obblighi di comunicazione via Web per le imprese; le società per azioni, le società in accomandita per azioni e le società a responsabilità limitata che dispongono “di uno spazio elettronico destinato alla comunicazione collegato ad una rete telematica ad accesso pubblico” devono fornire – attraverso tale mezzo – le seguenti informazioni:

a) la sede sociale, l’ufficio del registro delle imprese presso il quale la società è iscritta e il numero di iscrizione;
b) il capitale sociale, indicato secondo la somma effettivamente versata e quale risulta esistente dall’ultimo bilancio;
c) l’eventuale stato di liquidazione della società;
d) se, in caso di SpA o di Srl, la società ha un socio unico.

Dal momento che la Legge n. 88/2009 è già in vigore, le società che non vi abbiano provveduto dovranno senza indugio aggiornare i propri siti Web con le informazioni innanzi indicate. Ma l’aggiornamento del sito Internet aziendale non appare sufficiente ad adempiere al dettato normativo; infatti, l’espressione “spazio elettronico destinato alla comunicazione collegato ad una rete telematica ad accesso pubblico” ricomprende sicuramente i siti Web,  ma anche tutti gli altri luoghi virtuali di comunicazione, ivi compresi i profili delle società sui social networks.

[Via Diritto 2.0]

E questo non lo condivido per nulla. Se da una parte potrebbe avere anche un senso l’obbligo di esporre i dati aziendali sul sito web ufficiale dell’azienda, non vedo perchè questo debba essere fatto anche sui Social networks. In Twitter, ad esempio, vorrei mi spiegassero dove metto questi dati, visto che gli spazi a disposizione, si sa, sono estremamente ridotti!

Facebook, aggiornamenti di stato via SMS. In Italia no, grazie!

Digital divide Italia

Sulle pagine di Facebook ho visto una novità che mi era sfuggita fino ad oggi: Attiva aggiornamenti di stato sul cellulare. In pratica si tratta di un servizio interessante che permette di ricevere tutti gli aggiornamenti dello stato di una pagina via SMS sul proprio cellulare. Purtroppo però in Italia il servizio non è attivo, strano!

Non ci sarà anche qui lo zampino dei soliti noti?

Del resto in un paese dove si congelano 800 milioni destinati alla banda larga cosa ci si deve aspettare?
La crisi ha messo in ginocchio il paese e quindi i fondi servono ad altro, una strategia molto opinabile. Credo infatti che l’Italia avrebbe bisogno dell’esatto contrario: investimenti per abbattere il digital divide!

Sembra quindi che solo nel 2011 si inizierà a investire seriamente per dare agli utenti italiani un velocità di navigazione tra 2 e 20 mbps. Una banda sì larga, ma non paragonabile a quella che avranno presto a disposizione gli utenti svedesi e finlandesi. In Finlandia si parla di Diritto alla Rete e ci sono progetti per far arrivare 100 mbps in ogni abitazione, mentre dall’altra parte del Golfo di Botnia entro il 2020 almeno il 90 per cento della popolazione navigherà anch’essa a 100 mbps.
[Via PI]

E’ interessante l’elenco dei paesi in cui il servizio di aggiornamento dello stato via SMS di Facebook è attivo. Noi tra questi non ci siamo:

  • Argentina
  • Austria
  • Bolivia
  • Canada
  • Cile
  • Colombia
  • Emirati Arabi Uniti
  • Filippine
  • Germania
  • Guatemala
  • Honduras
  • India
  • Indonesia
  • Lituania
  • Macedonia
  • Maldive
  • Malesia
  • Montenegro
  • Nuova Zelanda
  • Pakistan
  • Paraguay
  • Regno Unito
  • Serbia
  • Sri Lanka
  • Stati Uniti d’America
  • Sud Africa
  • Uruguay

Modbus e PHP

Sono alle prese da diversi giorni con un problema da risolvere per un nuovo progetto che porterò avanti nei prossimi mesi. Dopo aver sbattuto un po’ la testa sul Modbus, il protocollo di comunicazione dei PLC, sono alla ricerca di una soluzione che mi permetta di effettuare chiamate ad uno slave da ambiente PHP. Il risultato della chiamata Modbus quindi deve essere disponibile direttamente nel codice PHP.

Le diverse soluzioni che sto analizzando sono:

  1. Scrivere un’estensione per PHP che, grazie ad una libreria Libmodbus, possa effettuare chiamate direttamente dal codice PHP
  2. Utilizzare un Gateway Modbus TCP/IP- RTU. In pratica dal codice PHP potrei effettuare una chiamata al gateway tramite socket. Il gateway a sua volta gestirebbe la chiamata al device via Modbus e restituirebbe i dati alla mia procedura PHP.
  3. Utilizzare un software open source tipo SCADA. Ad esempio Likindoy o OpenSCADA.

La soluzione migliore, in termini di sviluppo, come sempre deve essere la più semplice da implementare e manutenere. Al momento sono orientato sulla 1, la 2 ho problemi a compilarla e la 3 l’ho parcheggiata in attesa di testarla.
Vi farò sapere…

Aggiornamento del 03/01/2011

Avendo ricevuto richieste di maggiori dettagli sull’estensione ho deciso di rilasciarla sotto licenza GPL v2, si sa mai che qualche altro sviluppatore si unisca al progetto per migliorarla.

Al momento l’estensione PHP implementa solo una parte delle funzioni Modbus esistenti:

  • Read holding registers (func. 03)
  • Read input registers (func. 04)
  • Write (func. 16, sviluppo terminato ma non testato)

Il tutto è implementato secondo il formato RTU.

Link al progetto su Google Code: Estensione PHP per Modbus – Wiki Reference

Aggiornamento del 11/10/2016

Il progetto è stato spostato su GitHub: https://github.com/Jazzo/PHP-Extension-Modbus