Design patterns

Webtreats Free Tileable Tropical Abstract Patterns Part 1-5Ho raccolto e organizzato un po’ di materiale per studiare una prassi progettuale, quella degli schemi architetturali (design patterns), ormai consolidata (a partire dagli anni ’70) nell’ingegneria del software.

Durante la mia visita da osservatore al CERN nell’estate 1991, il prof. Morando, mentre ci guidava in una visita al progetto ALEPH, mi disse “Il software di solito ce lo scriviamo da soli, noi fisici, ma è scritto così male che quando lo diamo in mano agli ingegneri questi si mettono le mani nei capelli”.

Ecco, i design patterns sono gli strumenti che evitano di metterci le mani nei capelli quando dobbiamo far funzionare un software.

Link al Wiki

Installazione di Oracle 11g su Ubuntu 14.04 su macchina 64 bit

 

Ubuntu Wallpaper Plain

logo-oracle-large

Ho scritto un howto sull‘installazione di Oracle 11g su Ubuntu 14.04 64 bit nel mio Wiki per chi dovesse essere interessato.

Ho preso spunto dall’ottimo blog: http://meandmyubuntulinux.blogspot.it, i particolari nel Wiki

 

Nightmare before (the night before) Christmas

ubuntu-trusty-logoAvanzamento a Ubuntu 14.04 LTS Trusty Tahr, da 13.10 Saucy Salamander, mi ha provocato un bel po’ di guai.

Dopo il primo riavvio dal termine dell’installazione (e dopo tutti i riavvii seguenti) Il pc si arresta una volta nella schermata di login.

Cercando di seguire i log (Alt+F2 dopo il boot) vedo che /val/log/syslog mi riporta righe simili alla seguente:

[timestamp] BUG: soft lockup - CPU#1 stuck fopr 22s! [procname]

Googleando un po’ mi pare di capire che il problema sia molto serio. A quanto pare si tratta della versione del Kernel.

Ho risolto in modo provvisorio selezionando il kernel all’avvio (SHIFT premuto dopo il boot) e rilanciando il 3.11.

La mia CPU:

Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 37
Stepping: 5
CPU MHz: 1197.000
BogoMIPS: 5053.50
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3

Il kernel attualmente operativo:

Linux js 3.11.0-26-generic #45-Ubuntu SMP Tue Jul 15 04:02:06 UTC 2014 
 x86_64 x86_64 x86_64 GNU/Linux

La versione di Ubuntu:

LSB Version: core-2.0-amd64:core-2.0-noarch:core-3.0-amd64:core-3.0-noarch:
 core-3.1-amd64:core-3.1-noarch:core-3.2-amd64:core-3.2-noarch:
 core-4.0-amd64:core-4.0-noarch:core-4.1-amd64:core-4.1-noarch
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty

Che dire?

Buon Natale!

PS Angelo Branduardi lo dice meglio di me in questa canzone:

Aggiornamento

Il problema era più serio e la soluzione poteva essere da molte parti, ma alla fine si trattava della scheda video. Praticamente non potevo lavorare con la versione vecchia del kernel. Quindi ho dovuto fare un full backup e reinstallare il sistema operativo (con la complicazione che potevo lavorare solo da linea di comando, per cui mi sono aiutato con il Macbook per masterizzare l’immagine iso del disco di installazione).

Reinstallato il sistema operativo, non funziona ancora: soltanto in modalità debug.

Ho chiesto aiuto alla comunità in questo thread e mi sono stati forniti parecchi suggerimenti, tra cui quello corretto: installare i driver proprietari per la scheda video (questo mi ricorda qualcosa…)

$ sudo apt-get install nvidia-331

Dopo tre riavvii mi sento confidente per dire che il problema è risolto. Mi ricorderò del Natale 2014.

Campionato internazionale di innovazione per PHP e JS

elePHPant reading php|architectIl premio Innovazione è una iniziativa nata nel 2004 dal sito PHP Classes. Lo scopo è incoraggiare più sviluppatori a creare e condividere componenti innovative, come anche fornire componenti che hanno lo stesso scopo a riguardo di altre già pubblicate in passato. L’iniziativa è stata estesa anche al sito JSClasses nel 2013.

La novità per quest’anno è questa: è proprio l’Italia in testa alla classifica, con 8 pacchetti rilasciati, 56 punti totalizzati davanti a Iran e Francia. La blasonata India è solo all’ottavo posto.

Leggi l’articolo completo di Manuel Lemos sul sito PHPClasses

Il sorriso di Samantha Cristoforetti

Impagabile la realizzazione del sogno di una bambina.

CryptoPHP – backdoor infestante per CMS come Joomla, Drupal e WordPress

Black Hat SEO and CryptoPHPQuesto articolo, prodotto da FoxIt NV (una società olandese) e rilasciato il 20 novembre 2014, riporta lo studio di un software malevolo scaricabile come se si trattasse di un prodotto per la sicurezza di Joomla (jSecurity) ma che include una backdoor, che è stato battezzato CryptoPHP, il cui cuore si trova in un file che apparentemente è una immagine PNG ed invece contiene un frammento PHP oscurato con le istruzioni per effettuare la comunicazione fraudolenta con i server di riferimento. La comunicazione avviene su una connessione cifrata con l’adozione dello schema RSA (crittografia asimmetrica) con una chiave a 2048 bit. Il plugin è scaricabile da una ventina di siti, ovviamente una versione gratuita del vero jSecurity che invece prevede il pagamento di un costo licenza.

Il software di backdoor è ben scritto e si adatta ad una varietà di scenari diversi; innanzitutto funziona su tre CMS molto diffusi; comunica con il server di comando e controllo usando crittografia a chiave pubblica; prevede meccanismi di invio posticipati, come l’email, nel caso non riuscisse ad aprire una connessione SSL; automantiene una lista dei server di comando e controllo disponibili.

Lo scopo di questa backdoor è di consentire ad operatori remoti di falsare i dati dei Search Engine Optimization (SEO) tramite la pratica malevola del BlackhatSEO.

Leggi il report completo di Fox-IT BV

Fabiola Gianotti nuovo Direttore Generale del CERN di Ginevra.

Che bello 🙂

Una donna, una fisica, dirigerà il CERN di Ginevra dal 2016, ricevendo il testimone dall’attuale direttore Rolf Heuer. Il quale ha dichiarato:

Fabiola Gianotti è una scelta eccellente come mio succesore. È stato un piacere lavorare con lei per molti anni. Non vedo l’ora di lavorare con lei per la transizione nel 2015, e sono certo che il CERN sarà davvero in buone mani.

Fabiola Gianotti ha conseguito il PhD in Fisica a Milano nel 1989, presso l’Università Statale (anche all’epoca era d’uso non parlare bene dell’Università italiana, però a quanto pare le eccellenze le ha sapute dare lo stesso).

È diplomata in pianoforte.

La Gianotti ha dichiarato:

Il CERN è un centro di eccellenza scientifica e una fonte di orgoglio e ispirazione per i fisici da tutto il mondo, CERN è anche una culla per la tecnologia e l’innovazione, una sorgente di conoscenza ed istruzione, e un luminoso, concreto esempio di cooperazione scientifica mondiale e di pace.

In mezzo a questa umanità che sta impazzendo abbiamo bisogno di figure come te.

Attendevo la pletora di politicanti che si sperticasse in esagerati complimenti e inopportune note scioviniste come “successo dell’eccellenza italiana”, “trionfo del made in Italy” (forse questa non l’ho ancora sentita, ma è di sicuro dietro l’angolo) e simili. Non sono stati inaugurati tunnel per l’occasione.

E quindi ben venga questa doverosa precisazione di Andrea Aparo Von Flüe. Che condivido dalla prima all’ultima riga.

Pillole Java/Oracle

Oracle HQUn problema, usando le connessioni in pool:

org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (IO Error: NL Exception was generated)

Nel sito di Tom Burleson e nella Oracle Community il suggerimento è di aggiungere una direttiva nella stringa di connessione:

(SERVER=DEDICATED)

In realtà, nel mio caso il problema è molto più banale, ma sufficiente a farmi perdere un po’ di tempo. Nel descrittore jdbc:

(
    description=
    (
        address_list=
        (
            address=
            (protocol=tcp)
            (host=dbtest.mydomain.it)
            (port=1521)
        )
    )
    (
        connect_data=
        (
            service_name=ora.mydomain.it
         )
     )
 )

manca la parentesi segnata in rosso

Responsive Web Design

Responsive Web design LayoutNato nel 2012, è una delle maggiori tendenze nel web design che si è trovato a dover affrontare un problema nuovo: come visualizzare bene pagine web in una miriade di scelte tra tipi di piattaforma (pc, tablet, smartphone), dimensioni dei monitor e risoluzioni diverse.

Il 29 agosto 2012 il W3C ha pubblicato una bozza con la proposta “HTML Responsive Images Extension”, documento non normativo nel quale vengono affrontati i nodi della questione e vengono proposti sia degli ulteriori attributi per il tag <img>, sia dei nuovi tag come <picture> che consentano al browser, in fase di download del materiale, di selezionare le immagini che meglio si adattano al dispositivo.

I quattro punti di miglioramento proposti sono

  • device-pixel-ratio
  • viewport-based selection
  • image format-based selection
  • Art direction-based selection

Device pixel ratio per tenere conto della diversa densità di pixel se le dimensioni dell’immagine sono fisse

Viewport based selection per poter scegliere immagini in dimensioni diverse (diversa larghezza in pixel ad esempio)

Image format based selection: il browser, se è capace di trattarli, sceglie i formati con maggiore compressione (JPEG XR al posto di JPEG ad esempio; JPEG XR ha una capacità di compressione maggiore)

Art direction based selection: L’immagine viene mostrata tutta se dimensioni del viewport e capacità di risoluzione dello schermo lo consentono, oppure ne viene mostrata solo una parte, dichiarata più importante dall’autore (art director), se l’immagine non ci sta.

 

Pillole di PHP e Yii

Yii è un framework di sviluppo PHP secondo il pattern MVC di cui ho parlato qui e qui. Il sito (fornitissimo) è qui.

La pillola riguarda la gestione dei campi data, campi testo (in html < 5 non esistono i campi data) ai quali Yii aggiunge funzionalità tipiche di un controllo per le date:

Il frammento con cui si definisce questo comportamento è il seguente

    $this->widget('zii.widgets.jui.CJuiDatePicker',array(
        'name'=>'Payment[deadline]',
        'model'=>$model,
        'attribute'=>'deadline',
        'value'=>$model->deadline,

        'options'=>array(
            'showAnim'=>'slide',
            'dateFormat' => 'yy-mm-dd',
            'defaultDate'=>$model->deadline,
        ),
        'language'  => 'it',
        'htmlOptions'=>array(
            'style'=>'height:20px;background-color:lightgreen;color:white;',
        ),
    ));

Attenzione all’array passato come argomento al widget(), evidenziato in grassetto:

  • ‘name’ => ‘Payment[deadline]’ ← è il nome della classe [nome dell’attributo], in questo caso classe = Payment, attributo = deadline
  • ‘model’=>$model,                       ← modello a cui fa riferimento la view
  • ‘attribute’=>’deadline’,                ← nome dell’attributo
  • ‘value’=>$model->deadline,     ←valore dell’attributo

Quest’ultimo attributo (value) fa in modo che venga visualizzata la data nel campo testo.

Invece l’attributo

'defaultDate'=>$model->deadline

invece fa in modo che nel calendario drop down venga evidenziata con un rettangolino la data come si vede in figura:

Yii-cjuiDatePicker