Archivio per il mese di agosto 2007



json_encode: prima che ci caschiate…

Anche se è scritto nella documentazione, se sfruttate il modulo PECL json di PHP fate molta attenzione usando la funzione json_encode poiché essa lavora correttamente solo con stringhe in UTF-8 e UTF-16 (in realtà internamente lavora solo in UTF-8, effettua automaticamente la conversione da UTF-16). Dandogli in pasto stringhe con altri encoding correrete il rischio di ottenere come risultato una stringa json valida ma incompleta. Se fossimo al lavoro con PHP 6 ciò non costituirebbe un problema dal momento che le stringhe vengono gestite internamente in UTF-16, tuttavia Marte è ancora lontano, la nostra navicella è pure un po’ scassata e le stringhe di PHP 5 sono trattate come ISO-8859-1. Ovvero…

json_encode(array('a' => "Questa è una stringa...", 'b' => "... e anche questa")); //=> {"a":"Questa ","b":"... e anche questa"}

Manca un pezzo dato che nel primo valore anziché “Questa è una stringa…” il risultato riporta solo “Questa “, tutto ciò che nella stessa stringa segue la è inclusa viene semplicemente ignorato e la trasformazione prosegue senza potersi accorgere di nulla. Unica soluzione: convertire in UTF-8 qualsiasi stringa dovrà passare per json_encode attraverso funzioni come utf8_encode (ma solo se l’input è in ISO-8859-1), iconv oppure mb_convert_encoding (se le stringhe in input possono avere encoding differenti da quello di default), il tutto con buona pace della comodità e in parte pure delle prestazioni. Semplificando:

json_encode(array(utf8_encode('a') => utf8_encode("Questa è una stringa..."), utf8_encode('b') => utf8_encode("... e anche questa"))); //=> {"a":"Questa \\u00e8 una stringa...","b":"... e anche questa"}

In questo caso nella stringa json il carattere è rappresentato dalla sequenza di escape \u00e8. Ovviamente dovete fare ulteriore attenzione a non convertire in UTF-8 una stringa che già lo è, eventualmente sfruttando qualche funzioni che effettuino la rilevazione dell’encoding, altrimenti il casino è assicurato. Datemi il supporto per Unicode, maledetti…

Qt4, Ruby e Windows

La libreria Qt, attualmente giunta alla major release 4 e denominata di conseguenza Qt4, è molto nota a chi è solito utilizzare sistemi *nix sfruttando il desktop environment KDE poiché esso è interamente costruito intorno a questo toolkit per interfacce grafiche multipiattaforma. Esattamente: multipiattaforma, questo significa che è possibile scrivere programmi con GUI su un sistema per poi poter utilizzare lo stesso codice nella fase di porting su altre piattaforme grazie al supporto per X Window (X11), Mac OS X e Win32. Essendo un toolkit diffusissimo (Google Earth, per la cronaca, è stato realizzato con Qt) esiste una quantità impressionante di binding per i linguaggi di programmazione più disparati e ovviamente non poteva mancare Ruby con qt4-qtruby all’interno del progetto Korundum (binding KDE per Ruby). C’è però un ma: la compilazione in ambiente Windows di qt4-qtruby è una rogna unica, per assurdo compilare l’intero interprete Ruby è una passeggiata. Fortunatamente però jzkey, un’anima pia in quel del Sol Levante, si è smazzato l’impresa rendendo disponibili un archivio compresso con i binari dell’ultima versione dei binding (attualmente sono alla 1.4.9) con tanto di esempi e un archivio separato contenente tutti i file .PDB utili per il debug. Non fatevi spaventare dalla pagina scritta nell’idioma nipponico, in fondo alla stessa sono presenti le poche istruzioni necessarie in inglese per poter sperimentare. Ecco un primo nonché banalissimo test…

require 'Qt4' application = Qt::Application.new(ARGV) hello = Qt::PushButton.new('Premimi...') hello.resize(100, 30) hello.show() Qt::Object.connect(hello, SIGNAL('clicked()'), application, SLOT('quit()')) application.exec()

Che produce…

Esempio con Qt e i binding per Ruby su Windows

In internet è disponibile una quantità industriale di documentazione su Qt ma specificatamente per i binding qt4-qtruby ho trovato interessante per iniziare Qt®4 Tutorial for Ruby, molto pratico nonché “traduzione” in Ruby del tutorial originale di Trolltech.

Microsoft Office Compatibily Pack

Nel caso vi ritrovaste a dover aprire dei documenti DOCX, PPTX o XLSX (ovvero i nuovi formati introdotti in Microsoft Office 2007) su computer con vecchie versioni della suite da ufficio di Microsoft, sul sito esiste un download denominato Microsoft Office Compatibility Pack per formati di file Word, Excel e PowerPoint 2007 che, come da nome, permette di aprire, modificare e salvare documenti nei nuovi formati anche da versioni precedenti di Office 2000, XP e 2003. Tutto questo perché qualche sveglione ha pensato bene di mandare a una collega (entrata in crisi mistica) una serie di DOCX con una serie di roba in stile lista della spesa e senza alcuna formattazione e che quindi poteva benissimo scrivere con blocco note salvando il tutto in un banale file di testo. Per completezza, esiste anche una suite di plugin opensource per lo stesso Office che permette la conversione di formati da OOXML a ODF e viceversa.

Validazione di indirizzi email

Per validare genericamente un indirizzo email, o quantomeno verificarne la correttezza della forma, esistono e sono facilmente reperibili delle espressioni regolari scritte ad hoc, tuttavia è sempre bene verificarle con casi un po’ più estremi di quelli a cui si è solitamente abituati perché non sono molte a prendere in considerazione casistiche insolite ma a quanto pare lecite. Dico “a quanto pare” perché oggi ho scoperto che secondo la RFC 2821 e la RFC 2822 un indirizzo email con l’apostrofo (ma non solo) nella parte dello username può ritenersi valido anche se il suo uso all’atto pratico potrebbe eventualmente creare problemi per motivi legati più alle implementazioni applicative che altro. Il tutto è nato indagando sulle mail di alert provenienti da un nostro servizio che riceve dati utente dalla sede centrale (procedure completamente automatiche), notando che i nostri beneamati negli indirizzamenti email di Lotus Notes (sic) utilizzano l’apostrofo per chi ha nomi contenenti lettere accentate. Inutile dire che non avevo considerato la possibilità, da qui appunto le mail di alert in validazione, per cui ho ovviato modificando l’espressione regolare di verifica dell’email e mi sono riservato ulteriori controlli per i prossimi giorni. Nel caso vogliate approfondire l’argomento o controllare di non aver tralasciato nelle vostre validazioni di indirizzi email casi insospettabili e improbabili ma pur sempre formalmente corretti, sicuramente questo link potrebbe tornarvi molto utile in quanto vengono elencati tutti i caratteri della codifica 7bit ASCII accettati dalle RFC in merito con tanto di campo che indica l’usabilità e le considerazioni pratiche.

Ich bin zurück aus dem Urlaub

Vista del corno di San Genesio con le Dolomiti sullo sfondoIl titolo in tedesco significa sono tornato dalle vacanze e il motivo per questa scelta linguistica è semplice: ho trascorso due settimane in quel del Südtirol a Jenesien o San Genesio Atesino che dir si voglia, un piccolo comune sopra a Bolzano (nel vero senso della parola, sia latitudinalmente che altitudinalmente con i sui 1087 m s.l.m. del centro) di poco più di 2800 anime in cui il 97% della popolazione si dichiara madrelingua tedesca. In Alto Adige quasi il 70% della popolazione si dichiara di madrelingua tedesca e del resto fino a nemmeno 90 anni fa erano effettivamente austriaci, quindi non c’è da stupirsi anche se inizialmente fa un po’ effetto, soprattutto quando si incontra qualcuno che fa veramente fatica a mettere insieme due parole in italiano. Però questa è la loro cultura e la si deve rispettare.

Se per le mie vacanze estive dovessero chiedermi mare o montagna? risponderei con montagna, quasi senza esitazioni. La montagna d’estate mi piace, mi rilassa e offre panorami eccezionali e sempre diversi. Il mare (inteso come andare in spiaggia a oziare, fare il bagno e infine sentire le urla spesso assordanti dei bambini) mi annoia e il suo orizzonte piatto e insignificante di certo non aiuta, riesco a godermelo al massimo 3 giorni in compagnia di amici a fare cavolate ma sinceramente non la considero come una vacanza. De gustibus non disputandum est.

Campanile romano semi-sommerso nel Lago Curon E così, come detto, eccomi in Sud Tirolo a girare per valli e a godermi un po’ di fresco. Jaufenpaß (Passo di Monte Giovo), Penser Joch (Passo di Pennes) e Reschenpaß (Passo di Resia) sono i valichi alpini attraversati. Pochi ma buoni. Il Passo di Pennes, forse per colori e un po’ per conformazione, mi ha ricordato seppur vagamente una vecchia conoscenza lombarda ai confini elvetici dei Grigioni, ovvero il Passo dello Spluga. Con il Passo di Resia invece sono riuscito a togliermi una vecchia fissa: vedere di persona il campanile romano di Curon, quello semi-sommerso dalle acque dell’artificiale Lago di Resia in alta Val Venosta, spesso soggetto di fotografie molto suggestive ma la cui storia è diametralmente opposta alla bellezza degli scatti che tante volte lo hanno immortalato. Potete trovare anche le foto di ieri e di oggi e gli scatti che raccontano la distruzione, lenta ma inesorabile, di Curon vecchia prima del definitivo allagamento.

Non solo montagna ma anche qualche passeggiata nelle cittadine. Il centro storico di Bolzano è carino, ma con tutta la buona volontà non riesce proprio a battere quello di Merano. Il suo duomo, se può incuriosire per la strenazza del campanile, all’interno è talmente scuro da far quasi fatica a vedere cosa c’è dentro. Vipiteno è piccola ma tranquilla, inoltre c’è un caffè-ristorante-hotel-ditutto in una costruzione antica dove fanno un gelato che è la fine del mondo (ne danno tanto ed è buono ma a prezzi con cui qui a Milano se va benne danno tipo 3 palle di gelato in coppetta “al gusto di” e non “fatto con”). Breve visita anche a Bressanone che però non mi ha colpito particolarmente a parte il duomo visto dall’esterno e, anche se per motivi ben diversi, il prezzo del parcheggio da 6.80€ per 3 ore. Merano invece è Merano, con i suoi portici e le case in stile è austriaco-bavarese è forse la città più caratteristica della zona e meriterebbe anche una visita invernale. Incursione anche in quel di Trento: in Trentino, per cui in Italia direbbe qualcuno… e sinceramente non gli darei nemmeno torto, la prima cosa vista sono state scritte sui muri e cartacce o bottigliette per strada, rarità nei centri urbani e nei paesi dell’Alto Adige che ho visitato. A parte questo la città mi ha un po’ deluso, mi aspettavo qualcosa di meglio ma la Piazza Dumo e uno scorcio del Castello del Buonconsiglio sono stati a mio parere gli unici punti veramente caratteristici della città, che però ho visitato veramente di sfuggita per cui potrei anche sbagliarmi.

Abbazia di Santa Maria a Malles Venosta (Val Venosta)I dintorni, in Trentino così come nell’Alto Adige, sono letteralmente costellati da abbazie, chiese e castelli di tutti i tipi, dimensioni ed epoche. Basta vedere solamente l’elenco di quelli presenti in provincia di Bolzano per rendersene conto. Il più vicino al mio “campo base” è Castel Roncolo, ben visibile tra l’altro dall’alto della funivia che collega San Genesio Atesino a Bolzano e facilmente raggiungibile da quest’ultima lungo un breve sentiero che parte da una fermata della circolare linea dell’autobus 12. Un’altra caratteristica di tutta la regione sono le sterminate piste ciclabili che rendono percorribile quasi tutta la regione in bicicletta partendo da Brennero nell’alta Val d’Isarco o da Resia nell’alta Val Venosta scendendo verso Bolzano per poi proseguire verso Trento arrivando infine ai confini con il Veneto. Insomma c’è talmente tanto che probabilmente non basterebbero 6 mesi di visite serrate per vedere tutto.

Quasi sicuramente tornerò in Sud Tirolo e quasi sicuramente lo farò con una macchina fotografica digitale nuova e decente (anche in previsione del viaggio in Giappone rimandato ormai una quantità innumerevole di volte). Ma siccome la pacchia è ormai finita, prepariamoci al ritorno alla vita quotidiana…