.: HosiriS :.

Informatica e non solo

Archive for marzo 2011

Python and Festival TTS programming

Posted by hosiris su marzo 30, 2011

Bene bene bene… cosa abbiamo oggi?
Mi sono imbarcato in un bel progettino che ha come scopo principale operazioni di sintesi vocale su alcune frasi…
Come cominciare? La prima cosa da fare è di sicuro cercare le librerie (a meno che qualcuno non preferisca scriversele da se – too much work). Girovagando in lungo ed in largo ho trovato pyTTSx, una rapida letta alla documentazione e capisco che è quello che fa al caso mio.
La mia applicazione dovrà essere cross-plattform quindi oggi (in via eccezionale) parlerò anche di come far funzionare il tutto su Win[d|z]o[ws|zz].

Scarichiamo i pacchetti necessari per GNU/Linux e per Win[d|z]o[ws|zz].
L’installazione su Windows è delle più classiche e non spreco parole, su GNU/Linux l’operazione prevede l’installazione di un piccolo applicativo che ci permette di utilizzare il formato “egg” per l’installazione:

$ sudo apt-get install python-setuptool

In questo modo è possibile lanciare:

$ sudo easy_install package_pyttsx.egg

Già so che le vostre menti malvagie stanno pensando che Win[d|z]o[ws|zz] ci ha reso la vita semplice… ma vi siete fatti ingannare 😀 infatti è necessario installare questo programmino.

Ok pronti ad operare… apriamo VI (o blocco note buuuuuuuuuu) e scriviamo il seguente codice:

import pyttsx
tts = pyttsx.init()
tts.say('ciao sono un programma in python e parlo')
tts.runAndWait()

ecco fatto, difficile vero?

PS: probabilmente avrete dei messaggi di warning… purtroppo c’è qualche bug noto sul supporto audio per bluetooth, quindi si risolve facilmente con:

$ sudo apt-get remove --purge bluez-alsa

Buon divertimento!

PS: Sfortunatamente tutto questo sembra non funzionare su Ubuntu… o meglio funziona tutto tranne il fatto che quando si vuole creare l’istanza pyttsx l’interprete vada in tilt… Sto cerca una soluzione, se la conoscete siete “obbligati” a scriverla 😀

Posted in Programmazione, Python | 1 Comment »

Effetto lightbox con i CSS3

Posted by hosiris su marzo 28, 2011

In questo post vedremo come creare un effetto lightbox senza dover per forza usare del codice Javascript, alleggerendo un po’ il carico sul browser. Premetto che non è una mia soluzione (quando vedi certe cose ti dici sempre: “ma perché non ci ho pensato io? in fondo non è difficile”), ma cercherò di tradurre le parti più importanti.

Iniziamo con l’inserire il seguente codice sulla nostra pagina HTML:

<div id="container">
    <div id="header">
        <h1>Lightbox CSS</h1>
    </div>
    <div id="content">
        <h2>Cliccare sui link per vedere l'effetto in azione</h2>
        <p>Questo è un codice di esempio che mostra come lavora l'effetto lightobox. Clicca <a href="#lightbox">qui</a></p>
    </div>
</div>
<!--[if IE]>
<div class="ie-bg"></div>
<![endif]-->

Adesso inseriamo i vari elementi che saranno visualizzati dopo il click, utilizziamo una lista come segue:

<ul id="lightboxes">
    <li id="lightbox">
        <div class="box">
            <h3>Qui</h3>
            <p>
                Dopo il click viene visualizzata questa parte.
            </p>
            <a href="#" class="close" title="close window">x</a>
        </div>
    </li>
</ul>

Adesso non ci resta che creare il nostro foglio di stile. Inseriamo il seguente codice:

#lightboxes {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
list-style-type: none;
text-align: left;
overflow: hidden;}
#lightboxes li {
width: 100%;
height: 9999px;
position: relative;
background: rgba(0,0,0,.5);}
#lightboxes .box {
position: absolute;
width: 400px;
height: 400px;
left: 50%;
top: 50px;
border: 10px solid #999;
margin-left: -230px;
background-color: #fff;
padding: 20px;}
#lightboxes h3 {
font-weight: normal;
font-size: 1.8461em;
margin: 0 0 0.4583em 0;}
#lightboxes a.close {
position: absolute;
top: 20px;
right: 20px;
display: block;
width: 20px;
line-height: 20px;
text-align: center;
background-color: #ddd;
text-decoration: none;
font-weight: bold;
color: #999;
font-size: 1.2em;}
#lightboxes a.close:hover {
background-color: #999;
color: #fff;}
#lightboxes #close {
background-color: transparent;
z-index: -1;}
</style>
<!--[if IE]>
<style type="text/css">
html {
overflow-y: auto;}
#lightboxes {
position: relative;}
#lightboxes .ie-bg {
background: #000;
position: absolute;
z-index: -1;
width: 100%;
height: 100%;
filter: alpha(opacity=75);}
</style>
<![endif]-->

Da notare che come sempre IE deve creare problemi e che quindi è stato necessario aggiungere una parte specifica con un div a parte.
Il codice non mi sembra particolarmente complesso (ecco perchè mi sono detto… ma guarda queste che colpo di genio) ed anche il funzionamento è abbastanza logico: al click del link veniamo indirizzati verso il div associato che anziché venir mostrato a parte (di sotto, di lato…) viene visualizzato sopra il precedente testo.
Come aggiungere più link? Facile capire che ad ogni nuovo link deve corrispondere un elemento nella lista con un elemento class uguale all’ancora del link.

Fonte originale by Jenna Smith con il codice completo per un primo esempio.

Posted in CSS, Programmazione | Leave a Comment »

Analisi della popolarità dei linguaggi

Posted by hosiris su marzo 26, 2011

Voglio presentarvi questo sito: LangPop

Ho trovato molto interessante l’analisi che viene compiuta sull’utilizzo dei vari linguaggi di programmazione, considerando varie fonti dati.
Da notare come il linguaggio di cui più si parla su IRC sia Python 😀 Sapevo che questo linguaggio sarebbe cresciuto e diventato importante!

Posted in Informatica, Programmazione | 1 Comment »

Consigli per creare applicazioni sicure in PHP

Posted by hosiris su marzo 24, 2011

Trattamento degli errori
Nel processo di sviluppo la visualizzazione degli errori ci fornisce un aiuto non indifferente. Ma dopo che il sito è completo, continuare ad utilizzare la visualizzazione degli errori può dare informazioni sul sistema ad un eventuale malintenzionato: software utilizzato, struttura directory, tipologia del server, …
Sarebbe buona norma disattivare tutti gli errori tramite il seguente comando:


error_reporting(0);

In questo modo per trattare gli errori si dovrà far uso della funzione set_error_handler.

Disabilitare le funzionalità inutili di PHP
Register Globals (register_globals)
Questa variabile è stata creata pensando ad una programmazione rapida, ma introduce problemi di sicurezza. Osserviamo il seguente link


http://yoursite.tld/index.php?var=1

register_globals ci permette di accedere alla variabile usando sia la notazione $_GET[‘var’] che $var. Sicuramente è molto comodo, ma vediamo il seguente esempio per capire cosa potrebbe succedere:


if( !empty( $_POST['username'] ) && $_POST['username'] == 'test' && !empty( $_POST['password'] ) && $_POST['password'] == "test123" )
{
    $access = true;
}

Se la variabile è attiva, è sufficiente inserire access=1 in una stringa di request riuscendo ad avere accesso.
Per poter disabilitare questa funzionalità è necessario utilizzare un .htaccess file (o modificando il php.ini):


//Disabling with .htaccess
php_flag register_globals 0


//Disabling with php.ini
register_globals = Off

Magic Quotes (magic_quotes_gpc, magic_quotes_runtime, magic_quotes_sybase)
E’ una caratteristica che evita ai programmatori l’utilizzo di funzioni quali addslashes().
Purtroppo possiamo contare almeno tre problematiche associate a questa caratteristica: in prima analisi il problema è causato dall’utilizzo concomitante di Magic Quotes e addslashes() che porterebbe ad avere degli slash multipli causando degli errori; il secondo problema si verifica se il programmatore assume che Magic Quotes è attivo ed invece non lo è, causando errori nella verifica degli input; infine, bisogna notare che Magic Quotes intercetta solo apici singoli e doppi, ma se stiamo utilizzando dei database risulta necessario trattare ulteriori caratteri.


//Disabling with .htaccess
php_flag magic_quotes_gpc 0 php_flag magic_quotes_runtime 0


//Disabling with php.ini
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off

Validazione dell’input
Oltre l’escape dei caratteri è molto utile validare l’input.
Ad esempio se volessimo validare l’input di una data, potremmo usare il seguente codice:


if ( ! preg_match( "/^[0-9]{1,2}$/", $_GET['month'] ) )
{
    // handle error
}
if ( ! preg_match( "/^[0-9]{1,2}$/", $_GET['day'] ) )
{
    // handle error
}
if ( ! preg_match( "/^[0-9]{4}$/", $_GET['year'] ) )
{
    // handle error
}

Controllare l'inserimento di codice XSS
Nella maggior parte dei casi nell'inserimento di un input è possibile passare del codice HTML, ma questo può causare problemi, specie se i dati vengono memorizzati in un database, perchè esiste la possibilità di far eseguire del codice javascript.
Per poter evitare questo inconveniente la soluzione migliore sarebbe disabilitare del tutto i tag HTML, oppure si può far uso dei BBCode in modo da permettere la formattazione del testo.

Proteggersi dell'SQL Injection
Prima di eseguire le query sarebbe buona norma controllare la stringa per verificare la presenza di caratteri non permessi.
Abbiamo due possibilità per effettuare questo controllo:


$username = mysql_real_escape_string( $GET['username'] );
mysql_query( "SELECT * FROM tbl_members WHERE username = '".$username."'");


$id = $_GET['id'];
$statement = $connection->prepare( "SELECT * FROM tbl_members WHERE id = ?" );
$statement->bind_param( "i", $id );
$statement->execute();

Posted in PHP, Programmazione | 1 Comment »

Il Santa Lucia… e gli altri ospedali

Posted by hosiris su marzo 22, 2011

Tante persone si sono mobilizzate per cercare di cambiare le sorti di numerose strutture ospedaliere… oggi vorrei dare un microscopico contributo, con lo strumento che più so usare, in modo che tutta la Nazione sappia!

Sinceramente ero convinto che la Polverini fosse una quaquaraqua, cioè una che parla parla, ma non agisce. Ed invece mi sono dovuto ricredere… effettivamente trasforma in azioni le 4 parole che butta al vento!

Certo bisognerebbe anche capire quando una qualche azione è totalmente sbagliata.

Quella degli ospedali italiani è una strana realtà… da sempre vanto per la nostra Nazione, diventano l’unica soluzione ai problemi economici causati da precedenti decisioni errate.
Ma perché la Polverini è arrivata a questa conclusione? Beh, potrebbe sembrare tutto senza logica se non si è a conoscenza del fatto che ospedali, come il Santa Lucia, svolgono talmente bene il proprio lavoro (non stiamo parlando di mere strutture ospedaliere con due lettini e 4 infermieri, ma di realtà che possono portare innovazione) e in maniera efficiente che hanno del credito verso la Regione. Ma non parliamo di poche migliaia di euro, ma di alcuni milioni di euro (facciamo circa 90 per il Santa Lucia). Adesso possiamo comprendere bene le decisioni: come può la Regione coprire questi debiti? chiudendo le strutture interessate non ci sarà più nessun debito da pagare.

Personalmente ho avuto modo di interfacciarmi con persone che lavorano al Santa Lucia e ho trovato del personale qualificato, disposto a molti sacrifici per dare il meglio ai pazienti. Non semplici persone che ogni giorno vanno sul posto di lavoro, ma professionisti che hanno a cuore i propri pazienti (non so in quanti ragionerebbero così con il misero stipendio che prendono), che spremono le meningi per riuscire a migliorare le difficili condizioni dei pazienti (che non sono malati di raffreddore), …
Proprio perché ho visto con i miei occhi tutto questo, non riesco a capire dopo quale “moto intestinale” quella sottospecie di politico ha partorito una tale idea!

Siamo convinti che tutto questo sia sbagliato? Io si!
Ma quale può essere la soluzione? Rimane comunque il fatto che non ci sono soldi per pagare il personale… anche qui ci sarebbe da ridire! Sono state fatte tante donazioni al Sistema Sanitario e che sono poco sfruttate (o mal sfruttate). Esempi eclatanti sono alcuni appartamenti di proprietà del ministero che sono affittati al prezzo di 20 euro al mese (qui si aprirebbero altre lamentele… ma è un’altra storia).
Cara la mia Polverini… vuoi metterti a lavorare seriamente? Se ti svegli alle 7.00 e alle 7.30 hai già avuto una idea geniale… forse (e dico forse) questa idea tanto geniale non è! Magari se avessi riflettuto un po’ di più non ti sarebbe sembrato difficile livellare (certo non si deve cadere nell’errore opposto, cioè di far pagare troppo) i livelli degli affitti avendo così introiti maggiori.
Purtroppo non ho conoscenze così vaste da dare la soluzione definitiva, ma credo che oltre la situazione immobiliare ci siano altre considerazioni da poter fare…

Quando cercavo di convincere le persone che conosco che l’unico modo per avere un sistema sanitario perfetto era di rendere privati una parte degli ospedali ho assistito ad una rivolta… viste le reazioni ho dovuto riflettere a lungo affinché capissi che la situazione italiana non permette tale soluzione. La mole delle tasse, gli stipendi non commisurati alla vita sociale e molte altre variabili non permettono di permettersi una assicurazione sanitaria.
Ma adesso che molti ospedali stanno vedendo la fine… comincio a pensare che forse non avevo sbagliato del tutto!

Posted in Attualità | Leave a Comment »

Diamo un aspetto migliore ai nostri DIV

Posted by hosiris su marzo 20, 2011

Sareste interessati a dei div come i seguenti?

Si lo so, può sembrare qualcosa di molto difficile, ma è sufficiente una buona conoscenza dei CSS3 per poterli realizzare senza l’utilizzo di immagini.
In questo PDF ho raccolto una serie di script che ci permettono di realizzare delle soluzioni come quelle nell’immagine.
Tutto quello che vi serve fare è inserire lo script nella home page, e definire un div con class box1… box16 in base a quello che più vi piace.

Buon divertimento!

Posted in CSS, Programmazione | 1 Comment »

Disegnare grafici dinamici con javascript: JSCharts

Posted by hosiris su marzo 18, 2011

Inizialmente non facevo molto uso di javascript, affidavo tutti i compiti a PHP e di conseguenza il server soffriva molto… poi ho scoperto che potevo alleggerire pesantemente il lavoro del server, sfruttando le potenti macchine che oggi vengono usate come client.
Oggi mi occuperò di come generare grafici senza caricare minimamente il server, usando quindi javascript.
JSChart è una libreria javascript per generare in maniera semplice e con poco codice dei grafici.

Una volta scaricato il file js, inseriamolo nella cartella del nostro sito, ed includiamo il codice nella pagina html:

<script type="text/javascript" src="jscharts.js"></script>

Successivamente è necessario inserire un div da utilizzare come contenitore per il grafico:

<div id="chart"></div>

Infine, creiamo un grafico:

<script type="text/javascript">
  var myData = new Array([10, 20], [15, 10], [20, 30], [25, 10], [30, 5]);
  var myChart = new JSChart('chart', 'line');
  myChart.setDataArray(myData);
  myChart.draw();
</script>

E’ possibile scegliere la tipologia di grafico da disegnare, in questo caso una linea, e di utilizzare un file esterno XML che contiene i dati.

Buon divertimento!

Posted in Javascript, Programmazione | 1 Comment »

Memoria Unita…

Posted by hosiris su marzo 17, 2011

Forse oggi sarò l’unico che cercherà una motivazione per questa farsa!

Sarà che mi hanno dato un concetto di unità un po’ differente, ma sono sicuro che quella in cui vivo non è una Italia unita.

  • Nord contro Sud
  • Popolo contro Governo
  • Ricchi contro Poveri

Finzione, come ogni cosa in questa Nazione.
Divertitevi, magari la vostra gioia sarà da carburante per un miglioramento

PS:
che tristezza vedere le persone che mi governano non essere a conoscenza neanche per grandi linee della nostra storia!

Posted in Attualità | Leave a Comment »

Progettiamo e realizziamo la nostra prima interfaccia

Posted by hosiris su marzo 16, 2011

Si lo so: i programmi senza interfaccia sono molto più veloci e consumano meno risorse!
Purtroppo mi sono reso conto che, nonostante tutte le spiegazioni date, il 90% degli utenti vuole vedere qualcosa di colorato…
Ed allora ho iniziato a studiare le WxWidget, da affiancare a C++ o a Python che ci permettono di creare applicazioni compatibili con tutti i sistemi.

Esporrò quello che, secondo il mio modo di lavorare, può essere un buon metodo di progettazione e sviluppo dell’interfaccia.
Gli strumenti di cui ci serviremo sono:

  • Pencil: Applicazione standalone o estensione per Firefox che permette di progettare interfacce grafice;
  • wxGlade: programma per la realizzazione di interfacce grafiche che genera automaticamente i lcodice C++ o Python
  • wxPython: binding delle librerie wxwidget per python

Io ho preferito utilizzare la versione di Pencil standalone, perchè il mio firefox è già troppo carico… Questo programma tramite una semplice interfaccia ci permette di progettare la nostra grafica:

Cosa farà questa prima applicazione? Faremo un programmino che prende in input un indirizzo e restituisce le coordinate. Quindi ho immaginato la mia interfaccia come segue:

Dopo aver realizzato l’interfaccia che più ci piace (facciamolo con calma, perchè è meglio avere una idea chiara su come deve essere il risultato perchè sarà difficile dopo fare grosse modifiche), apriamo wxGlade e realizziamo la vera interfaccia:

Queste operazioni sono poco piacevoli, ma vi assicuro che ne vale la pena: ricordatevi di associare gli eventi ai pulsanti, date le giuste label, posizionate correttamente gli elementi (non scrivo come fare perchè le varie documentazioni sono molto esplicative). Quando abbiamo impostato tutti i parametri, definiamo il file di output su cui salvare il codice e selezioniamo il tast “Generate Code”.

Eseguendo il file generato, vedremo che il programma funziona senza problemi. Non rimane quindi che modificare il comportamento degli elementi. Io ho previsto solo due funzioni “OnLocalize” e “OnCancel”: il primo restituirà le coordinate dell’indirizzo immesso, il secondo cancellerà il contenuto degli elementi.
Apriamo il file sorgente e cerchiamo la definizione delle due funzioni (wxGlade fa tutto per noi, genera gli eventi e li collega ai pulsanti corretti) e modifichiamo il contenuto coem segue:

    def OnLocalize(self, event): # wxGlade: MyFrame.
        URL2 = "http://maps.googleapis.com/maps/api/geocode/json?address=%s&sensor=false" % self.text_ctrl_1.GetValue().replace(" ", "+")
        googleResponse = urllib.urlopen(URL2)
        jsonResponse = json.loads(googleResponse.read())
        pprint.pprint(jsonResponse)
        #data_address = json.dumps([s['formatted_address'] for s in jsonResponse['results']], indent=3)
        data_lat = json.dumps([s['geometry']['location']['lat'] for s in jsonResponse['results']], indent=3)
        data_lon = json.dumps([s['geometry']['location']['lng'] for s in jsonResponse['results']], indent=3)
        self.label_1.SetLabel("Ti trovi alle coordinate:\n latitudine => %s\n longitudine => %s" % (data_lat,data_lon))
        event.Skip()
    def OnCancel(self, event): # wxGlade: MyFrame.
        self.text_ctrl_1.SetValue("")
        self.label_1.SetLabel("")
        event.Skip()

Ricordiamoci di caricare le giuste librerie:

import urllib
import json
import pprint

Non vi rimane che salvare ed eseguire il programma:

Se eseguite il programma da un terminale, vedrete anche l’intero array JSON con tutte le informazioni che potete elaborare, per l’esempio mi è sembrato sufficiente usare solo le coordinate.

Magari tutto questo non rende giustizia ai vari strumenti presentati, ma voglio invitarvi a fare una modifica all’interfaccia… aggiungete un pulsante ad esempio! Rigenerate il codice usando lo stesso file del progetto precedente, cosa notate? Ebbene si: wxGlade ha modificato solo le classi dell’interfaccia, lasciando inalterato il codice aggiunto da noi!

Spero di essere stato esaustivo: Buon divertimento!

Posted in Programmazione, Python | 3 Comments »

Tips: Rimuovere programmi da Wine

Posted by hosiris su marzo 14, 2011

In genere quando si rimuovono programmi installati tramite wine, ne rimane sempre una traccia nel menù.
Per poter ripulire l’installazione è sufficiente lanciare i seguenti comandi:

rm -rf $HOME/.wine
rm -f $HOME/.config/menus/applications-merged/wine*
rm -rf $HOME/.local/share/applications/wine
rm -f $HOME/.local/share/desktop-directories/wine*
rm -f $HOME/.local/share/icons/????_*.{xpm,png}
rm -f $HOME/.local/share/icons/*-x-wine-*.{xpm,png}

Et voilà! Siete finalmente liberi da quella inutile lista di programmi disinstallati

Posted in Informatica, Linux | Leave a Comment »