nWire – PHP source navigation made easy

October 18th, 2009

nWire è un plugin per eclipse Galileo e per Zend Studio 7 che offre la possibilità di navigare nel codice in maniera veloce e intuitiva.
Si propone come uno strumento indispensabile per la gestione di grandi progetti con migliaia di file e centinaia di classi da gestire.
Gli IDE di ultima generazione hanno ormai tutti integrati dei sistemi di analisi del codice, che semplificano la navigazione del codice, permettendo ad esempio di saltare con un click al punto in cui una costante è stata definita; oppure di saltare alla definizione di una classe semplicemente cliccando sul nome della classe stessa.
Tutte queste semplificazioni aiutano il programmatore a muoversi con maggiore agilità all‘interno del progetto.
Purtroppo però data l‘incredibile versatilità del php l‘editor non è sempre in grado di capire di che tipo è una determinata variabile;

ZendStudio5.png

In aiuto vengono i commenti nel formato PHPDoc che forniscono preziose informazioni all‘inspector.

ZendStudio13.png

Altri, come Zend Studio ad esempio, propongono anche una sintassi di commenti comprensibile dal suo inspector, in modo da istruirlo sul tipo di variabile:

ZendStudio23.png

Ovviamente tutte queste soluzioni impongono al programmatore uno stile di codice che magari non gli appartiene, ma che è costretto a rispettare se vuole godere dei benefici dell‘inspector.

Proprio qui entra in gioco nWire, che offre molte più possibilità dell‘inspector nativo dell‘editor, ma non obbliga a mantenere uno stile di codifica differente da quello che si è abituati a usare.

Installazione
L‘installazione è semplicissima; grazie anche alle funzionalità (decisamente migliorate) di Eclipse Galileo nella gestione dei repository di plugins.
Basta infatti aggiungere un nuovo sito nella sezione dedicata alla gestione dei siti, ed ecco che le funzionalità di questo plugin sono pronte per essere installate.

ZendStudioadd3.png

Il plugin offre 2 vesti diverse, una specifica per PHP e una specifica per JAVA, ovviamente ho provato quella dedicata a PHP.
Install13.png
Primo impatto
A dire il vero sono rimasto sorpreso, immaginavo che questo plugin una volta installato mi inondasse l‘IDE con pulsanti inutili e con pannelli criptici, e invece non ho notato nessun cambiamento nel‘IDE, tanto da credere che fosse andato qualcosa storto nell‘installazione.
Dopo qualche minuto a spulciare la documentazione ho notato i due pulsanti che erano stati aggiunti nella barra in alto.

ZendStudiobar3.png

Il pulsante a sinistra una volta cliccato apre l‘overview testuale dell‘inspector, quello a destra apre invece la ricerca veloce.
Inoltre è stata aggiunta una nuova voce nel menù contestuale del progetto che permette di abilitare o disabilitare l‘inspector su quel progetto.

ZendStudio203.png

L‘overview
Qui la cosa si fa interessante. L‘overview le legata all‘editor: si aggiorna al volo mostrando il contesto in cui il cursore si trova in quel momento, se ad esempio il cursore si trova all‘interno di una classe, ma all‘esterno dei metodi, l‘overview fa partire la sua analisi dalla classe, mostrandoci l‘elenco dei metodi e delle proprietà, quante volte la classe viene istanziata, il partent. etc. Se ci spostiamo sul nome di un metodo, ecco che la visuale cambia, e il focus si concentra sul metodo, mostrandoci cose come i metodi di cui questo fa l‘override, quante volte è invocato, quali proprietà della classe intacca, etc.

currentline2.png
Una volta indicato cosa ispezionare il plugin fornisce queste informazioni:

  • la classe parent e tutte le eventuali classi che estendono questa
  • quante volte e dove è istanziata una classe
  • quante volte e dove è usata una istanza di quella classe
  • quali metodi (nell‘intero scope del progetto) restituiscono un oggetto che è una istanza di quella classe
  • quante volte e dove un metodo viene invocato
  • quali metodi e funzioni un metodo invoca
  • quante volte e dove un file è incluso
  • quali metodi modificano la proprietà di una classe

modifyed.png

Ovviamente è possibile navigare anche usando l‘overview stessa, basta cliccare l‘elemento che si vuole ispezionare e si apre un nuovo pannello sulla destra che mostra le informazioni desiderate e così via.

Prestazioni
Temevo che l‘indicizazione del progetto da parte di questo plugin inchiodasse l‘IDE, invece impiega un po‘ meno del tempo che ci mette Zend Studio a fare la build del progetto stesso. La parte scocciante è forse solo quando il plugin si accorge di modifiche strutturali al codice e lancia di nuovo l‘indicizazione, questo inchioda l‘editor per qualche secondo; ma è un settaggio che si può modificare nelle preferenze del plugin stesso.
Per completezza riporto un po‘ di dati sullo scenario in cui ho provato nWire:
Grandezza del progetto: +60MB di file sorgenti
Numero di classi: +6.000
Computer: MAC Pro dual Core con 2 GB di ram

Overview Grafica
Sinceramente non l‘ho trovata molto utile. Non è altro che la visualizzazione con blocchi e frecce dell‘overview testuale. Navigabile alla stessa maniera, ma che non offre nulla in più. A mio avviso sarebbe stato un ottimo addon anche senza questa funzionalità

ZendStudiobox.png

Ricerca rapida
L‘ho trovata davvero utile! Un aggiunta molto potente alla ricerca integrata nell‘IDE, la funzionalità che più mi ha colpito è quella che permette la ricerca in base al CameCase dei nomi: basta infatti scrivere nella ricerca “gH“ e è come aver scritto “g*H*“.

ZendStudioquicksearch.png

Conclusioni
Sono convito che se si manutiene un progetto di grosse dimensioni e si intende refattorizzare spesso l‘architettura del codice, questo sia uno strumento più che indispensabile. L‘ho usato per solo 2 ore e ho trovato decide i posti in cui non avevo aggiornato il codice per adeguarlo ad un refactoring recente (si lo so… i tests… ma non tutti i meandri del progetto sono coperti dai tests, non scordate che sono 60MB di sorgenti!).
Sul costo non mi esprimo (59$ per la versione solo PHP), visto che secondo la mia esperienza, se un tool è indispensabile al proprio lavoro.. il costo è l‘ultimo aspetto da considerare. Una nota però va fatta: i ragazzi di nWire offrono una copia gratuita del plugin se si possiede un blog e si scrive un post che lo valuti ;)

Riconoscitore facciale in puro PHP

June 26th, 2009

Ho scovato questo interessante frammento di codice a questo indirizzo.
In sostanza si tratta del porting in php di una routine scritta in javascript che identifica i volti in una foto. Mi vengono in mente decine di interessanti applicazioni (specie nei prossimi tempi) che possono avvalersi di questa interessante tecnologia.

Già google ha introdotto una funzione nella ricerca delle immagini che permette di filtrare le immagini in modo che compaiano sono quelle in cui è presente una faccia (qui un esempio); per ora google si limita a indovinare il nome il tizio nella foto dal nome del file, o dal testo che si trova nella pagina in cui la foto è pubblicata.

Non mi sorprenderei se nel prossimo futuro il Gigate se ne venisse fuori con un prodotto che permette di cercare tutte le foto presenti sulla rete in cui appare il volto di una persona (brrr!)

Utilizzo del codice

Usare questa classe è relativamente semplice, basta istanziarla, passandonle come argomento un file (detection.dat appunto) con le direttive di detecting che si può scaricare a questo indirizzo; si invoca poi la routine su una immagine caricata. Il risultato lo potete vedere imemdiatamente sotto

<?php
$detector = new Face_Detector(‘detection.dat’);
$detector->face_detect(‘maurice_svay_150.jpg’);
$detector->toJpeg();
 

Ecco l’output.

Veniamo al codice

<?php
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.    
//
// @Author Karthik Tharavaad
//         karthik_tharavaad@yahoo.com
// @Contributor Maurice Svay
//              maurice@svay.Com

class Face_Detector {
   
    protected $detection_data;
    protected $canvas;
    protected $face;
    private $reduced_canvas;
   
    public function __construct($detection_file = ‘detection.dat’) {
        if (is_file($detection_file)) {
            $this->detection_data = unserialize(file_get_contents($detection_file));
        } else {
            throw new Exception("Couldn’t load detection data");
        }
        //$this->detection_data = json_decode(file_get_contents(’data.js’));
    }
   
    public function face_detect($file) {
        if (!is_file($file)) {
            throw new Exception("Can not load $file");
        }
       
        $this->canvas = imagecreatefromjpeg($file);
        $im_width = imagesx($this->canvas);
        $im_height = imagesy($this->canvas);

        //Resample before detection?
        $ratio = 0;
        $diff_width = 320$im_width;
        $diff_height = 240$im_height;
        if ($diff_width > $diff_height) {
            $ratio = $im_width / 320;
        } else {
            $ratio = $im_height / 240;
        }

        if ($ratio != 0) {
            $this->reduced_canvas = imagecreatetruecolor($im_width / $ratio, $im_height / $ratio);
            imagecopyresampled($this->reduced_canvas, $this->canvas, 0, 0, 0, 0, $im_width / $ratio, $im_height / $ratio, $im_width, $im_height);
           
            $stats = $this->get_img_stats($this->reduced_canvas);
            $this->face = $this->do_detect_greedy_big_to_small($stats[‘ii’], $stats[‘ii2′], $stats[‘width’], $stats[‘height’]);
            $this->face[‘x’] *= $ratio;
            $this->face[‘y’] *= $ratio;
            $this->face[‘w’] *= $ratio;
        } else {
            $stats = $this->get_img_stats($this->canvas);
            $this->face = $this->do_detect_greedy_big_to_small($stats[‘ii’], $stats[‘ii2′], $stats[‘width’], $stats[‘height’]);
        }
        return ($this->face[‘w’] > 0);
    }
   
   
    public function toJpeg() {
        $color = imagecolorallocate($this->canvas, 255, 0, 0); //red
        imagerectangle($this->canvas, $this->face[‘x’], $this->face[‘y’], $this->face[‘x’]+$this->face[‘w’], $this->face[‘y’]+ $this->face[‘w’], $color);
        header(‘Content-type: image/jpeg’);
        imagejpeg($this->canvas);
    }
   
    public function toJson() {
        return "{’x':" . $this->face[‘x’] . ", ‘y’:" . $this->face[‘y’] . ", ‘w’:" . $this->face[‘w’] . "}";
    }
   
    public function getFace() {
        return $this->face;
    }
   
    protected function get_img_stats($canvas){
        $image_width = imagesx($canvas);
        $image_height = imagesy($canvas);    
        $iis =  $this->compute_ii($canvas, $image_width, $image_height);
        return array(
            ‘width’ => $image_width,
            ‘height’ => $image_height,
            ‘ii’ => $iis[‘ii’],
            ‘ii2′ => $iis[‘ii2′]
        );        
    }
   
    protected function compute_ii($canvas, $image_width, $image_height ){
        $ii_w = $image_width+1;
        $ii_h = $image_height+1;
        $ii = array();
        $ii2 = array();      
                               
        for($i=0; $i<$ii_w; $i++ ){
            $ii[$i] = 0;
            $ii2[$i] = 0;
        }                        
                                   
        for($i=1; $i<$ii_w; $i++ ){  
            $ii[$i*$ii_w] = 0;      
            $ii2[$i*$ii_w] = 0;
            $rowsum = 0;
            $rowsum2 = 0;
            for($j=1; $j<$ii_h; $j++ ){
                $rgb = ImageColorAt($canvas, $j, $i);
                $red = ($rgb >> 16) & 0xFF;
                $green = ($rgb >> 8) & 0xFF;
                $blue = $rgb & 0xFF;
                $grey = ( 0.2989*$red + 0.587*$green + 0.114*$blue )>>0;  // this is what matlab uses
                $rowsum += $grey;
                $rowsum2 += $grey*$grey;
               
                $ii_above = ($i-1)*$ii_w + $j;
                $ii_this = $i*$ii_w + $j;
               
                $ii[$ii_this] = $ii[$ii_above] + $rowsum;
                $ii2[$ii_this] = $ii2[$ii_above] + $rowsum2;
            }
        }
        return array(‘ii’=>$ii, ‘ii2′ => $ii2);
    }
   
    protected function do_detect_greedy_big_to_small( $ii, $ii2, $width, $height ){
        $s_w = $width/20.0;
        $s_h = $height/20.0;
        $start_scale = $s_h < $s_w ? $s_h : $s_w;
        $scale_update = 1 / 1.2;
        for($scale = $start_scale; $scale > 1; $scale *= $scale_update ){
            $w = (20*$scale) >> 0;
            $endx = $width$w1;
            $endy = $height$w1;
            $step = max( $scale, 2 ) >> 0;
            $inv_area = 1 / ($w*$w);
            for($y = 0; $y < $endy ; $y += $step ){
                for($x = 0; $x < $endx ; $x += $step ){
                    $passed = $this->detect_on_sub_image( $x, $y, $scale, $ii, $ii2, $w, $width+1, $inv_area);
                    if( $passed ) {
                        return array(‘x’=>$x, ‘y’=>$y, ‘w’=>$w);
                    }
                } // end x
            } // end y
        }  // end scale
        return null;
    }
   
    protected function detect_on_sub_image( $x, $y, $scale, $ii, $ii2, $w, $iiw, $inv_area){
        $mean = ( $ii[($y+$w)*$iiw + $x + $w] + $ii[$y*$iiw+$x]$ii[($y+$w)*$iiw+$x]$ii[$y*$iiw+$x+$w]  )*$inv_area;
        $vnorm =  ( $ii2[($y+$w)*$iiw + $x + $w] + $ii2[$y*$iiw+$x]$ii2[($y+$w)*$iiw+$x]$ii2[$y*$iiw+$x+$w]  )*$inv_area($mean*$mean);    
        $vnorm = $vnorm > 1 ? sqrt($vnorm) : 1;
       
        $passed = true;
        for($i_stage = 0; $i_stage < count($this->detection_data); $i_stage++ ){
            $stage = $this->detection_data[$i_stage];  
            $trees = $stage[0];  

            $stage_thresh = $stage[1];
            $stage_sum = 0;
                             
            for($i_tree = 0; $i_tree < count($trees); $i_tree++ ){
                $tree = $trees[$i_tree];
                $current_node = $tree[0];    
                $tree_sum = 0;
                while( $current_node != null ){
                    $vals = $current_node[0];
                    $node_thresh = $vals[0];
                    $leftval = $vals[1];
                    $rightval = $vals[2];
                    $leftidx = $vals[3];
                    $rightidx = $vals[4];
                    $rects = $current_node[1];
                   
                    $rect_sum = 0;
                    for( $i_rect = 0; $i_rect < count($rects); $i_rect++ ){
                        $s = $scale;
                        $rect = $rects[$i_rect];
                        $rx = ($rect[0]*$s+$x)>>0;
                        $ry = ($rect[1]*$s+$y)>>0;
                        $rw = ($rect[2]*$s)>>0;  
                        $rh = ($rect[3]*$s)>>0;
                        $wt = $rect[4];
                       
                        $r_sum = ( $ii[($ry+$rh)*$iiw + $rx + $rw] + $ii[$ry*$iiw+$rx]$ii[($ry+$rh)*$iiw+$rx]$ii[$ry*$iiw+$rx+$rw] )*$wt;
                        $rect_sum += $r_sum;
                    }
                     
                    $rect_sum *= $inv_area;
                         
                    $current_node = null;
                    if( $rect_sum >= $node_thresh*$vnorm ){
                        if( $rightidx == -1 )
                            $tree_sum = $rightval;
                        else
                            $current_node = $tree[$rightidx];
                    } else {
                        if( $leftidx == -1 )
                            $tree_sum = $leftval;
                        else
                            $current_node = $tree[$leftidx];
                    }
                }
                $stage_sum += $tree_sum;
            }
            if( $stage_sum < $stage_thresh ){
                return false;
            }
        }
        return true;
    }
}
 

Dwoo Template Engine

June 11th, 2009

Dwoo Template Engine, è un nuovo Template Engine (ma va?!) per PHP.

Perchè un template engine?

Beh se si affronta un progetto un po’ più grande del sito di una salumeria, avere un approccio MVC è quanto mento d’obbligo.

Perchè non Smarty?

Smarty è senza dubbio un ottimo template engine, ed esiste da tanti anni da potersi considerare più che robusto. Tuttavia Smarty non viene aggiornato da parecchio, è basato ancora su PHP4 (che php.net ha dismesso e definito obsoleto!!), ed è rimasto lo stesso da più di due anni (non una sola riga di codice di aggiornamento!!). Va detto per onor di cronaca che la comunità attorno a smarty si è recentemente svegliata, annunciando la versione 3 del motore di templates. Peccato che abbiano rilasciato solo 2 aggiornamenti (il secondo è servito per correggere un bug introdotto nel primo O_o). Le premesse di smarty 3 sono più che ottime, ma è necessario OGGI un template engine al passo con gli aggiornamenti del PHP.

Dwoo?

Un po’ nascosto, ho scovato questo motore, dwoo appunto, di templates, le sue premesse non sono da meno rispetto a quelle di Smarty 3, con la sola differenza che Dwoo è pronto oggi, adesso. Vi riepilogo in breve le caratteristiche principali:

  • scritto interamente from scratch.
  • scritto completamente ad oggetti e in puro php5
  • UTF-8 ready
  • il codice compilato è completamente  E_STRICT compliant (vale a dire che php non lancerà nessun NOTICE durante la sua esecuzione)
  • Utilizza un sistema di cache dei templates simile a smarty
  • ha una sintassi smarty-like (a dirla tutta, riesce a compilare QUASI tutti i template scritti per smarty)
  • introduce una sintassi migliorata per rendere più scorrevole la scrittura del template
  • riconosce da solo i blocchi di javascrip e CSS ( grazie Dwoo!! )
  • implementa l’ereditarietà dei templates (grazie anche per questo)
  • estenderlo con dei plugins è molto semplice.

Scrivere il template è più facile e scorrevole; infatti per chiudere una tag si può usare {/} che ha la magica funzione di chiudere l’ultimo che è stato aperto

{foreach $array item}
  bla bla bla..
{/foreach}
 

oppure

{foreach $array item}
  bla bla bla..
{/}
 

Interessante anche la funzionalità del tag {dynamic} che indica al compilatore dwoo che quel blocco di template va rieseguito ad ogni invocazione e non deve essere cachato.

Questo contentuto sarà messo nella cache di dwoo
{dynamic}
  tutto quello che sta qui dentro non verrà mai cachato ma sarà
  reinterpretato ogni volta, molto utile per la gestione dei banner ad esempio.
{/}
anche questo contenuto finirà nella cache
 

La funzionalità più importante a mio avviso resta la capacità del compilatore di riconoscere javascript e css (per le parentesi graffe).
Con smarty era necessario chiudere il blocchi JS e CSS tra i tag {literal}…{/literal} che disabilitano l’interprete di template.

{literal}
.table {
  color: #FFF;
  border: 1px solid #000;
}
{/literal}
 

che può essere un compromesso accettabile.. ma spesso capita di dover passare in smarty dei valori che devono finire nel CSS o nel JS, e per fare ciò era necessario chiudere il tag {/literal} prima della variabile e riaprirlo subito dopo.

{literal}
.table {
  color: #FFF;
  border: {/literal}{$border_width}{literal}px solid #000;
}
{/literal}
 

Questo è decisamente un compromesso meno facile a cui scendere. Dwoo risolve questo dilemma semplicemente: ignorando i tags che dopo la parentesi quadra hanno uno spazio o un caratte accapo.
Il seguente blocco di codice in Dwoo è perfettamente legittimo.

{literal}
.table {
  color: #FFF;
  border: {$border_width}px solid #000;
}
{/literal}
 

Infine Dwoo introduce l’ereditarietà, che resta la caratteristica più interessante e potente del motore. Seguo un esempio per spiegarlo:


Un file base.tpl con questo contenuto:

<html>
  <head>
    <title>{block "title"}Il mio Sito{/block}</title>
    {* css etc. *}
  </head>
  <body>
    <h1>{block "page-title"}Default page title{/block}</h1>
    <div id="content">
      {block "content"}
        Benvenuto!!
      {/block}
    </div>
  </body>
</html>
 

Viene esteso dal file gallery.tpl, che sovrascrive il blocco “title”

{extends "base.html"}
{block "title"}
Photo Gallery
{/block}
 

Infine il file photo_gallery.tpl estende gallery.tpl sovrascrivendo altri blocchi di contenuto.

{extends "gallery_base.html"}
{block "title"}Home – {$dwoo.parent}{/block}
{block "page-title"}Gallery home{/block}
{block "content"}
  {foreach $images img}
    <img src="{$img.url}" alt="{$img.description}" />
  {/foreach}
{/block}
 

Compilando il file photo_gallery.tpl si ottiene il seguente output:

<html>
  <head>
    <title>Home – Gallery</title>
  </head>
  <body>
    <h1>Gallery home</h1>
    <div id="content">
      <img src="/example.jpg" alt="image" />
      <img src="/example2.jpg" alt="image" />
      <img src="/example3.jpg" alt="image" />
    </div>
  </body>
</html>
 

Ma è un linguaggio di programmazione, non è adatto a un grafico

Questa è l’accusa più ovvia da cui un motore come Dwoo deve difendersi. Tuttavia nei miei anni di lavoro non ho mai incontrato un grafico web (intendo il tizio che scrive HTML e CSS per far somigliare il più possibile una pagina web ad un file fatto con photoshop) che non avesse abbastanza nozioni per capire cosa è una variabile, un ciclo o una inclusione. Non vedo perchè non possa sforzarsi di capire anche cosa è l’ereditarietà.

In conclusione

Ho lavorato usando smarty per tanti anni (5?, 6?) e non lo avrei mai abbandonato se non avessi sentito così forte l’esigenza di un template engine costruito su una piattaforma non obsoleta. l’esigenza di refattorizzare esigeva un’evoluzione.

dell’uguaglianza

January 2nd, 2009

uguaglianza[ragionamento_a_cervello_libero]
Sono cresciuto in una famiglia di cristiani.
Ho frequentato l’asilo presso un istituto religioso.
Ho frequentato le scuole elementari presso un istituto religioso.
Frequento, ad oggi, una associazione religiosa.

In tutti gli insegnamenti cristiani che ricevevo, vi era sempre un precetto semplice, tanto semplice da passare inosservato per quanto fosse scontato:
tutti gli uomini sono uguali.

Oggi classifico questa affermazione come una menzogna.
Gli uomini NON sono tutti uguali, certi sono migliori di altri (questo è innegabile), e non solo per fortuna, o condizioni economiche, ambientali, religiose o familiari; semplicemente certa gente è migliore di altra gente (per grazia ricevuta, per opera dello spirito santo, per quello-che-vi-pare).

Quando sulla terra non vi erano esseri umani, e Dio fece i primi due, si preoccupò di crearne uno subordinato all’altro. Niente uguaglianza. Niente “siete tutti figli miei”.
E quando un po’ di tempo più avanti, arriva Gesù a spiegarci meglio le cose, aggiunge “io sono qui per servire, non per essere servito; sono il servo, non il padrone”, a sottoscrivere l’esistenza di chi comanda e di chi viene servito.
[/ragionamento_a_cervello_libero]

51 risposte a 51 pensieri atei

December 16th, 2008

un po’ di tempo fa postai questa raccolta di aforismi atei.
mi pare giusto, almeno per “par codicio” postare una mia “personalissima” replica ai signori che hanno elargito le loro perle di saggezza.

  1. Io credo in Dio, solo che lo chiamo Natura. – Frank Lloyd Wright
    Beh, alcuni lo chiamano Geova, altri Allha.. non ci vedo niente di male se lo vuoi chiamare Natura.
  2. Fede vuol dire non voler conoscere la verità. – Friedrich Nietzsche
    Fede vuol dire riconoscere di non essere in grado di comprendere la verità.
  3. Un uomo è accettato in chiesa per le cose che crede, ed è cacciato via per le cose che conosce. – Samuel Clemens (Mark Twain)
    Benchè le cose che conosco mi portano a malgiudicare la chiesa a voce alta; non sono mai stato cacciato via (e vi giuro che di cose ne ho dette!).
  4. La religione è considerata vera dalla maggior parte delle persone, falsa dai saggi, e utile dai potenti. – Seneca
    …ed è considerata un buon argomento di discussione da quelli che non sanno come passare la serata.
  5. La filosofia è una domanda a cui non bisognerebbe rispondere. La religione è la risposta alle domande che non si dovrebbero porre. – Anonimo
    La fede è una risposta ad una domanda che non è necessario porre.
  6. Non solo Dio non esiste, ma avete mai provato a trovare un idraulico nel fine settimana? – Woody Allen
    Mio cugino è idraulico… come la mettiamo adesso?
  7. Se non fossi stato ateo, avrei creduto in un Dio che salva le persone non sulla base delle cose che dicono, ma sulla base del loro modo di vivere. Avrei creduto in un Dio che preferisce salvare un onesto e rispettoso ateo e non un predicatore televisivo le cui parole sono DIO DIO DIO ma le cui azioni sono SBAGLIO SBAGLIO SBAGLIO. – Isaac Asimov
    Mi sa che è come dici tu, sai?
  8. Credere nel sopranaturale è il riflesso di uno sbaglio dell’immaginazione. – Edward Abbey
    Credere che il soprannaturale e il divino siano la stessa cosa è un limite dell’immaginazione.
  9. Con o senza religione avremmo avuto lo stesso persone buone che fanno cose buone e persone cattive che fanno cose cattive. Ma per avere persone buone che fanno cose cattive è necessaria la religione. – Steven Weinberg
    Così come serve la comicità per avere persone intelligenti che dicono cose stupide, o la politica per avere persone stupide che dicono cose intelligenti. Ciononostante continuiamo a ridere e a essere governati da migliaia di anni sempre alla stessa maniera.
  10. Al mondo ci sono due categorie di persone: persone intelligenti senza religione e persone religiose senza intelligenza. – Abu’l‐Ala al Ma’arri
    Abbiamo due modi diversi di misurare l’intelligenza
  11. Dato che la chiesa e la bibbia si sono sbagliate dicendoci da dove veniamo, come possiamo credergli quando ci dicono dove stiamo andando?- Anonimo
    Dove è che si sono sbagliate dicendoci da dove veniamo?
  12. Diffido di quelle persone che sanno così bene cosa Dio vuole che loro facciano, perché noto che coincide sempre con quello che loro desiderano fare. – Susan B. Anthony
    In alcune culture Dio si chiama entusiasmo.
  13. Le cose che non si vedono e le cose che non esistono si assomigliano davvero tanto.- Delos B. McKown
    Il vento non si vede, così come il caldo e il freddo; dimmi, neppure questi esistono?
  14. Due mani che lavorano fanno molto di più di mille religiosi in preghiera. – Anonimo
    Sì, possono fare davvero tanto male, ma se mai qualcosa verrà fuori dalla preghiera di mille oratori… di certo non sarà male.
  15. Non è successo come racconta la Bibbia; non è stato Dio a creare l’uomo a sua immagine e somiglianza, ma il contrario. L’uomo ha creato Dio a sua immagine e somiglianza. – Ludwig Feuerbach
    Solo perchè non se lo poteva immaginare diversamente. Prova te a disegnare il tramonto di tre soli, vediamo se non lo fai uguale al tramonto che conosci.
  16. La gente mi chiede cosa ne pensi dei preti donna. Cosa, un prete donna? Donne preti. Grande, magnifico. Così potrò non ascoltare preti di entrambi i sessi. – Bill Hicks
    Sono d’accordo con Bill. Il prete non serve…perchè a essere importante è il messaggio, non il messaggero.
  17. Tutti i miracoli della bibbia alla fine scompariranno col progredire della scenza. – Matthew Arnold
    Sì, è possibile, ma temo che il progredire della scienza non leverà la fede ad un solo credente.
  18. La fede cieca è un ironico regalo da restituire al creatore dell’intelligenza umana. – Anonimo
    La fede è una dimostrazione di successo da ritornare al creatore della SAGGEZZA umana.
  19. Ringraziare di avere una vita è forse il vano e presuntuoso desiderio di volerne una seconda. – Richard Dawkins
    …o forse il modo migliore di ricorda a se stessi che la vita non va sprecata, questione di punti di vista.
  20. Ciò che si può affermare senza prove lo si può anche negare senza prove. – Christopher Hitchens
    Sì, ma che bello quando ti convinci di una cosa e non ti servono prove per crederci.
  21. Nella cristianità né la morale né la religione entrano mai in contatto con la realtà. – Friedrich Nietzsche
    Uhhm… davvero?
  22. Il vanto più grande delle donne è quello di non aver mai contribuito con una sola riga alla Bibbia. – George W. Foote
    …e anche quello di non essere annotate negli annali storici tra il peggiori assasini e dittatori.
  23. Il primo giorno l’uomo creò Dio. – Anonimo
    Facciamo che sono nati nello stesso istante e non se ne parla più…. ok?
  24. Suppongo che siamo entrambi atei. Io semplicemente credo in un dio appena minore del tuo. Quando capirai perché rinneghi tutti gli altri dei possibili capirai perché io rinnego il tuo. – Stephen Roberts
    Ma tu capisci perchè io comprendo che tutti gli altri possibili dei SONO il mio.
  25. Non hai bisogno della bibbia per giustificare l’amore, ma non esiste strumento migliore per giustificare l’odio. – Richard A. Weatherwax
  26. Chi è Dio? Hai presente quando desideri tanto qualcosa che chiudi gli occhi e chiedi di ottenerla? Beh, Dio è il tizio che ti ignora. – Steve Buscemi (Dal film “The Island”)
    I bambini che ottengono sempre quello che chiedono crescono viziati… Questo lo sa ogni genitore, e lo ritiene giusto; tutti i bambini invece concordano che sia ingiusto.
  27. Dai a un uomo un pesce e lui mangerà oggi; insegna ad un uomo a pescare e lui mangerà tutta la vita; dai a un uomo la religione e lui morirà pregando di ottenere un pesce. – Anonimo
    Dai allo stesso uomo la fede e non avrà fame (questa non l’ho capita ancora neppure io.. ma è la risposta più pertinente).
  28. Dire che l’ateismo è una religione è come dire che la calvizie è un colore di capelli. – Don Hirschberg
    L’ateismo NON è una religione, è uno stato passeggero (per i più fortunati).
  29. Dio dovrebbe essere giudicato per crimini contro l’umanità. – Bryan Emmanuel Gutierrez
    Che sarebbe dei giudici se fossero giudicati dai loro imputati?
  30. Non ho paura della morte. Sono stato morto per miliardi e miliardi di anni prima di nascere e non ho sofferto il minimo inconveniente. – Mark Twain
    Ti invidio.
  31. Di tutte le religioni il cristianesimo è senza dubbio quella che instilla la maggiore tolleranza, ciononostante ad oggi i cristiani sono tra i meno tolleranti degli uomini. – Voltaire
    Non saprei… insomma.. pure gli ebrei non sono tanto da meno… e i mussulmani poi… quelli si che sono intolleranti!….. Maddai??!?!? Siamo ancora a questo?
  32. Se ci fosse stato davvero un Dio non credo che l’avrebbe fatta passare tanto liscia a quelli che dubitavano della sua esistenza. – Bertrand Russell
    Dannato libero arbitrio.
  33. Dio ha voglia di eliminare il male ma non ne è capace? Allora non è onnipotente! É capace ma non vuole? Allora è malvagio. É entrambe le cose? Allora da dove viene il male? Non è nessuna delle cose? Allora perchè lo chiamiamo Dio?- Epicuro
    Riguardo al male vedi la domanda 26
  34. Io sono poliateo; ci sono molti Dei in cui non credo. – Dan Fouts
    Basta che ne neghi solo uno a favore degli altri e saresti comunque nello sbaglio.
  35. Una bugia è una bugia, anche se tutti ci credono. La verità è la verità anche se nessuno lo crede.. – David Stevens
    Hai appena detto il contrario di quello che avresti dovuto dire… La verità è tale solo quando TUTTI ci credono.
  36. La religione fa tre cose efficacemente: Divide i popoli, controlla i popoli, delude i  popoli. – Carlespie Mary Alice McKinney
  37. La storia ci insegna che nessuna causa ha fatto tanti morti quanto la parola di Dio. – Giulian Buzila
    è vero.
  38. L’ateismo è una organizzazione non profetica. – George Carlin
    ….
  39. Se letta attentamente la Bibbia è lo strumento più efficace di evangelizzazione Atea. – Isaac Asimov
    Sono daccordo, la bibbia necessita di una riorganizzazione.
  40. Dio non uccide le persone, sono le persone di Dio che uccidono le persone. – David Viaene
    Quannto hai ragione!
  41. La religione è l’oppio delle masse. – Karl Marx
    Se dio ha creato pure l’oppio, una ragione ci sarà.. no?
  42. La religione è come una pillola che deve essere ingoiata senza masticare – Anonymous
    Se l’effetto rimane lo stesso… non vedo il problema
  43. Non è abbastanza vedere un giardino per dire che è meravliglioso? Dobbiamo per forza anche credere che si sono delle fate nascoste tra i cespugli? – Douglas Adams
    Solo pochi sono capaci di stupirsi dell’ordinario.
  44. Per essere davvero liberi è necessaria una mente libera. – Alexander Loutsis
    una mente libera è necessaria anche per comprendere i meccanismi divini.
  45. Gli animali non hanno un Dio, loro sono più astuti. – Ronnie Snow
    Sì, loro sono decisamente più astuti: benchè sappiano che c’è Dio, non hanno sentito la necessità di dargli un nome. Dai un occhio qua.
  46. La morte è la verità più agghiacciante che un uomo deve affrontare. La religione rappresenta la distrazione perfetta. – Anonimo
    una risposta migliore di quella che potrei dare io la trovi qui
  47. L’interpretazione della bibbia dipende dall’ignoranza delle persone che la leggono. – Robert G. Ingersoll
    Qui hai ragione. Ma che ci vuoi fare? non puoi controllare in mano a chi vanno a finire gli scritti, sarà per questo che Gesù preferiva parlare che scrivere.
  48. La fede non da risposte, semplicemente non fa porre la domanda. – Frater Ravus
    Ecco! giusto, non ci poniamo la domanda quando siamo certi della risposta! Dai sempre un occhio qua.
  49. Dio è una cosa fragile, può essere cancellato da un soffio di scienza o da un po’ di buon senso. – Chapman Cohen
  50. Se tutti i cristiani che almeno una volta hanno detto di un altro cristiano:”Quello non è un buon cristiano” scomparissero, non resterebbero più cristiani. – Anonimo
    Ahimè è vero…. il peccato originale ce lo abbiamo tutti…
  51. Il fatto che un credente è più felice di uno scettico è tanto vero quanto il fatto che un ubriaco è più felice di uno sobrio. – George Bernard Shaw
    Cosa ha di meno la felicità di un ebbro rispetto alla felicità di un sobrio?

Tempus Vernum

December 10th, 2008

Tempus vernum è quando vedi il sole lì in fondo, ma non sai se sta salendo o scomparendo.
Tempus vernum è quando il cielo è terso, il sole brilla, ma tu senti freddo.
Tempus vernum è quando una poesia parla di te.
Tempus vernum è quando non sai dove andare, ma non ti senti perso.
Tempus vernum è quando ti riaddormenti sperando che il sogno interrotto continui.
Tempus vernum è quando riesci a vedere un prodigio, ma non lo sai spiegare agli altri.
Tempus vernum è quando al mattino sei di buon umore.
Tempus vernum è quando punti il dito e attorno non c’è niente.
Tempus vernum è quando finalmente apri gli occhi e quello che vedi non ti piace.
Tempus vernum è quando un cantante dice meglio di te come ti senti.
Tempus vernum infondo è un buon augurio… Vernum vuol dire “Cambiamento”.

Linux Day 2008

October 27th, 2008

Lo scorso WeekEnd si è tenuto l’annuale LinuxDay; quest’anno l’evento è stato organizzato con la  collaborazione di 3 LUG campani: IrLUG HCSSLUG e XaLUG, che hanno organizzato una due-giornate all’insegna dell’opensource. La prima (venerdì) nelle aule della facoltà di informatica dell’Università si Salerno, e la seconda (sabato) ad Avellino in un centro sociale.

Il contributo del lug (XaLUG, appunto) di cui faccio parte si è concretizzato in un talk su “Iternet e webservices”. Il talk l’ho tenuto io, che, con questo intervento ho portato la bandiera dello Xalug a questo evento. Su slideshare potete trovare le slides della mia presentazione.

Al prossimo anno.

Cristiano, a qualunque costo!

October 7th, 2008

Diversi anni fa, decisi di trasferirmi a Bologna. Durante i miei raid cittadini alla ricerca di sistemazione, trovai PRIMA la chiesa dove sarei andato a sentire messa e DOPO la casa dove sarei andato a dormire.

Ricordo che alla prima messa a cui partecipai era presente un parroco missionario, che stava ringraziando la platea per la recente raccolta di fondi a favore di una missione in Africa: i soldi raccolti non erano tanti da soddisfare le sue speranze, ma abbastanza per le sue aspettative.

Missione cattolica in Africa in un episodio di SouthPark

Il parroco ci tenne a spiegare l’importanza delle missioni in Africa: “Dovete sapere che l’Africa è piena di popolazioni che non conoscono Dio, che non sanno cosa è il divino o la religione. Questa raccolta di soldi è importante, perchè spesso i testimoni di Geova arrivano prima di noi (!!), e quando un villaggio è stato evangelizzato a Geova poi, è difficilissimo riconvertirlo al vangelo: è importante arrivare prima degli altri“.
So bene che il fine di quelle parole era un altro, ma ascoltandolo, la grottesca immagine qui al lato mi è sembrata quasi verosimile.
Il prete poi continuò: “Sapete, ci sono voluti ben 5 anni per ottenere il battesimo di un nativo“.
Ma come? Ottenere il battesimo?
E le cure? le medicine? l’AIDS? Il cibo? L’acqua? E i pozzi?
In seguito scoprii che tutte queste cose c’erano nel programma della missione, non se ne erano dimenticati, ma non ho mai potuto levarmi dalla mente l’agghiacciante idea che l’efficacia di una missione si misura con la quantità di battesimi fatti, con la quantità di Anime e non di Vite salvate. (sarà per questo che si va a costruire prima la chiesa e poi l’ospedale).

C’è bisogno di cristiani.

Quando il cristianesimo era solo una setta, i fedeli rischiavano la vita per andare a partecipare all’eucarestia, per mantenere viva la “memoria di Lui”. Allora non aveva importanza che la messa si celebrasse in un bosco o in una grotta o nella cantina di qualcuno: un posto valeva l’altro.

Oggi non più.
Mia madre è convinta che ascoltare la messa nella basilica di Pompei valga di più che nella cappelletta sotto casa, e che visitare la Chiesa di Padre Pio valga di più che assistere alla funzione nella basilica di Pompei.
Ogni tanto la prendo in giro chiedendole come sta procedendo la sua raccolta di Bollini Paradiso.

Mi domando: se Padre Pio avesse avuto a disposizione tutti i soldi che ci sono voluti per mettere in piedi la sua chiesa, avrebbe scelto di farla costruire?
Mi sono convinto che per la cristianità (e la chiesa) ha molto più valore l’Immagine di Padre Pio che non le sue idee. (Lo scontro tra l’essenza delle cose e la forma delle cose (essere e apparire) è trattato nella Bibbia, no?).

Quindi, ben vengano paramenti lucciosi e cattedrali enormi, l’aria solenne e le vesti dorate. Se anche un solo profano si lascia affascinare dal luogo e dall’oro; allora il target è raggiunto: un nuovo fedele ingrassa le fila dei cristiani.

Ancora simboli

October 7th, 2008

Ho aggiunto il simbolo che skarabeo mi ha segnalato.

Il numero dei simboli è salito a 12. Sulla mappa trovate i dettagli.

Segni e simboli

September 30th, 2008

In questo ultimo mese nel mio paese: Angri, sono comparsi degli strani segni sui muri e sui marciapiedi.
Non ci facevo caso più di tanto. Ma quando il numero è diventato considerevole mi sono preso la briga di contarli.
E sapete una cosa? Sono davvero tanti!

A prima vista potrebbe sembrare un graffio senza senso, ma in giro ce ne sono troppi (e da troppo tempo).
Non sono un esperto in materia di graffiti, ma non credo neppure che si tratti della TAG di un writer.

Linkata qui in basso trovate la mappa con le posizioni dei simboli che ho notato.

Senza sbilanciarmi più di tanto… direi che questi segni hanno a che vedere con la materia religiosa; non sono un esperto neppure in questa materia, ma ho notato una vaghissima somiglianza con li simbolo dell’Induismo (OM).

PS: Se avete notizia di qualche segno che mi è sfuggito, segnalatemelo.