La religiosità non si dovrebbe confondere con la religione. Questa necessaria premessa per precisare che io non sono contro la naturale spinta all'investigazione della realtà che porta alla posizione di particolare domande esistenziali, che chiamo religiosità in un certo senso, ma sono contro alle strutture organizzate di potere e di controllo che si chiamano religioni.In questo blog, con la parola religione si intenderanno le religioni monoteistiche, e in particolare le tre maggiori. In ordine di apparizione: l'ebraismo, il cui mirabolante e violentissimo dio si chiama Jahvè e il cui maggiore profeta si chiama Mosè, un egiziano balbuziente molto cocciuto (XX secolo prima dell'era volgare), il cristianesimo, il cui maggiore profeta è Gesù Cristo e il cui dio si chiama, con somma fantasia Dio (intorno al 30 della nostra era volgare) e ultimo in ordine tempo (VII secolo della nostra era volgare), è l'islam, che significa sottomissione a dio, che per l'islam si chiama Allah, mentre il loro profeta è un certo Maometto (quello della proverbiale montagna che va o non va).
Tali strutture nascono in medio oriente e con il passare dei secoli si sono arrogate il diritto di essere uniche portatrici dell'unica verità e si sono prese la libertà di formulare pensieri per nostro conto, oltre che proibizioni di qualsiasi genere. In questo modo viene garantito un grande controllo ma nello stesso tempo le persone non hanno la possibilità di evolvere il loro pensiero in maniera autonoma. Che bisogno esiste, infatti, di porsi certe domande se poi le risposte sono state preconfezionate in pratici pacchi (vedi Bibbia, Talmud e Corano) e riformulate a piacimento dalle classi dirigenti delle singole entità religiose? Ovvio che se ho già le risposte non investigo più. Ben studiata, devo dire.
Inoltre si pensi alla Verità con la V maiuscola, che è da pensare come assoluta. Se veramente i cristiani, gli ebrei e i musulmani l'avessero, allora queste tre religioni sarebbero la stessa religione, perchè tale verità è unica e indivisibile, assoluta appunto. E allora la possibile soluzione a questa apparente prima illogicità potrebbe essere che sono inevitabilmente false tutte e tre e che non sono altro che, come vedremo, la stessa minestra rimescolata e riscaldata.
Ma da dove arrivano gli dei e le religioni? Capendo questo, sarà più facile seguire lo sviluppo delle moderne religioni. Vediamo, questa è una mia possibile interpretazione, ovviamente semplificata e scherzosa, ma è scherzando che si deve parlare di queste cose, altrimenti si finisce con il dargli troppa importanza.
Io mi immagino le reazione dei primi uomini sapiens sapiens alle catastrofi che la natura ci propone. Ad esempio i tuoni e i fulmini devono essere stati sconvolgenti, come anche i vulcani o i terremoti, per non parlare delle trombe d'aria e dei cicloni, ma anche più semplicemente le piogge e il vento. Tutte manifestazioni autonome della Natura. Per chi non le sapeva spiegare, come gli uomini di allora, si potevano ben associare delle presenze Onnipotenti e Invisibili a tali fenomeni. Quindi ecco nascere religioni naturalistiche i cui dei sono tanti, uno per ognuna di queste immense forze (il dio della pioggia, del vulcano, delle tempeste, dei mari, del tuono, del fulmine) e poi anche altri collegati a qualità umane quali amore, bellezza, fertilità e molti altri. Con il passare del tempo tali dei vengono antropomorfizzati, cioè dotati di fattezze, abitudini e difetti umani, nonchè di elaborate famiglie dinastiche e romanzesche, dai mille intrecci e scandali. E' l'inizio del gossip, un divino gossip, non paragonabile al nostro tra veline e calciatori, ma altrettanto ridicolo.
Allora, c'erano le famiglie di divinità sumere, babilonesi ed egizie, ma anche indiane e poi più tardi quelle greche e romane. Omicidi, tradimenti e altre belle cosucce vengono attribuite alle divinità in qualche modo per fare accettare al popolo la propria condizione. Le classi sacerdotali avevano obbligo di segretezza ed erano i portatori delle conoscenze più avanzate in medicina e in chissà quali altre scienze (seppure ad un livello a noi non noto). Tramite le loro conoscenze erano probabilmente in grado di far credere alle persone ciò che volevano riguardo agli dei. Molto di frequente il re stesso era considerato di natura divina. Un bel guazzabuglio…
Continua in un prossimo post.
mercoledì 27 agosto 2008
Storia alternativa delle religioni (Intro)
venerdì 22 agosto 2008
Tutorial C
Il presente post può essere utile per chi ha necessità di imparare le basi (e non solo) della programmazione in C in ambiente Linux. Si tratta di un tutorial molto completo e piuttosto ben strutturato.
Visitate il sito e mettetelo tra i preferiti:
Tutorial C onLine
oppure scaricate il tutorial in pdf:
Tutorial C in Pdf

Per programmare in C è innanzitutto di fondamentale importanza utilizzare un buon ambiente di sviluppo. Sono disponibili ad esempio degli IDE come Anjuta, ma a mio parere il miglior editor avanzato per programmare è Vim, che non senza fatica ho iniziato ad usare ed apprezzare.
Basti pensare che supporta il syntax highlightning per praticamente tutti i linguaggi di programmazione e scripting che vi possano venire in mente e non solo, idem per l'autoindentazione del codice e udite udite l'autocompletamento automatico di variabili e funzioni di libreria e non.
Buon divertimento allora! Programmare e scrivere codice non è mai stato così facile.
sabato 16 agosto 2008
Kant vs Godel
Godel, eminente logico matematico del nostro secolo (il XX), ha mostrato, nell'anno 1931, quando aveva venticinque anni, due fondamentali teorema di logica matematica, detti Teoremi di incompletezza di Godel che dicono quanto segue (tratti da Wikipedia):
Primo teorema di incompletezza
In ogni formalizzazione coerente della matematica che sia sufficientemente potente da poter
assiomatizzare la teoria elementare dei numeri naturali — vale a dire, sufficientemente potente da
definire la struttura dei numeri naturali dotati delle operazioni di somma e prodotto — è possibile
costruire una proposizione sintatticamente corretta che non può essere né dimostrata né confutata
all'interno dello stesso sistema.
Secondo teorema di incompletezza
Sia T una teoria matematica sufficientemente espressiva da contenere l'aritmetica: se T è
coerente, non è possibile provare la coerenza di T all'interno di T .
o anche, semplificando:
Nessun sistema coerente può essere utilizzato per dimostrare la sua stessa coerenza.
Il logico matematico italiano Piergiorgio Odifreddi fa notare, nel suo ultimo libro di Longanesi intitolato "Il matematico impenitente" come questi teoremi siano la formalizzazione matematica di alcuni concetti filosofici che Kant ha trattato estesamente nella sua Critica della ragion pura.
L'assunto principale dell'opera di Kant si può riassumere dicendo che se la ragione vuole essere completa, nel senso di poter trattare liberamente idee trascendentali come quelle di Dio, del mondo o dell'anima, allora deve accettare di essere contraddittoria, nel senso che queste idee portano ad antinomie. Queste antinomie vengono discusse da Kant e sono frasi che sono sia vere che false contemporaneamente.
Equivalentemente, se la ragione non vuol essere contraddittoria, allora deve accettare di essere incompleta, rifiutandosi di spingersi oltre le colonne d'Ercole della sensatezza ed evitando di imbarcarsi in discorsi sulle idee trascendentali.
Godel trasporta questo impianto di pensiero dalla filosofia alla matematica dicendo che se un sistema matematico vuol essere completo, nel senso di poter esprimere formule trascendentali come quella che dice di se stessa di non essere dimostrabile, e di poter dimostrare tutte quelle vere, allora deve accettare di essere contraddittorio. Equivalentemente, se un sistema che può esprimere formule trascendentali non vuole essere contraddittorio, allora deve accettare di non poter dimostrare tutte quelle vere.
Interessante no? Spero che qualcuno legga questo post, come prima cosa e che qualcuno abbia voglia di seguirne la logica e di pensarci un po' sopra. Buona vita!!
mercoledì 6 agosto 2008
Passare a Php variabili Javascript con Ajax
Una cosa che forse non tutti sanno è il modo in cui si possono passare al server alcune variabili ricavabili con Javascript ma non con linguaggi server side, come la risoluzione dello schermo oppure la grandezza in pixel di un certo elemento della pagina. In questo articolo spiegherò come passare al server la risoluzione dello schermo, ma il procedimento resta valido anche per altre variabili.
La soluzione si ottiene ad esempio usando le sessioni PHP e Ajax. Supponiamo di avere due pagine: una index.php e una backAjax.php. La pagina index.php fa partire la sessione o continua la precedente tramite la funzione start_session();, ricava la risoluzione dello schermo o qualsiasi altra variabile Javascript e poi le spedisce al server con Ajax, usando una chiamata asincrona tramite l'oggetto XMLHttpRequest e il suo metodo open(method,url,async) dove method può essere 'get' o 'post' e async deve essere impostato a true se vogliamo una chiamata del server asincrona. La pagina backAjax.php inizia con una sessionstart(); per continuare la sessione, riceve le variabili contenenti le informazioni sulla risoluzione e le salva in variabili di sessione. La pagina index.php riceve la risposta dal server, il responseText, e lo usa oppure no a seconda del bisogno. In questo caso non riceve testo ma poco importa. Ora la funzione Javascript che effettua la chiamata asincrona si occupa pure, all'arrivo della risposta dal server, di ricaricare la pagina index.php in modo che le nuove variabili di sessione siano disponibili (infatti da che le variabili di sessione vengono settate si deve richiamare la funzione sessionstart() affinchè esse siano realmente memorizzate). Ma di tutto questo non si ha alcuna percezione in quanto succede al caricare della pagina, quindi l'utente vede la propria pagina caricarsi una sola volta. Vediamo il codice:
Funzioni Javascript: file ajax.js
// funzione per assegnare l'oggetto XMLHttpRequest
// compatibile con i browsers più recenti e diffusi
function assegnaXMLHttpRequest() {
// lista delle variabili locali
var XHR = null, browserUtente = navigator.userAgent.toUpperCase();
// browser standard con supporto nativo non importa il tipo di browser
if( typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object" ){
XHR = new XMLHttpRequest();
}
// browser Internet Explorer è necessario filtrare la versione 4
else if( window.ActiveXObject && browserUtente.indexOf("MSIE 4") < 0 ) {
// la versione 6 di IE ha un nome differente per il tipo di oggetto ActiveX
if(browserUtente.indexOf("MSIE 5") < 0){
XHR = new ActiveXObject("Msxml2.XMLHTTP");
}
// le versioni 5 e 5.5 invece sfruttano lo stesso nome
else{
XHR = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return XHR;
}
// funzione per passare i dati riguardanti la risoluzione al php tramite l'impostazione
//di variabili di sessione nello script php registra_risoluzione.php
function registra_risoluzione() {
res_width = screen.width;
res_height = screen.height;
// DEBUG document.write( res_width + "," + res_height );
var ajax = assegnaXMLHttpRequest();
// DEBUG document.write( ajax );
if(ajax) {
// inizializzo la request
ajax.open( "get" , "registra_risoluzione.php?x=" + res_width + "&y=" + res_height , true );
// invio la richiesta
ajax.send(null);
}
// ricarico la pagina che ha eseguito la richiesta cosi da rendere
// subito disponibili le variabili di sessione impostate
location.reload();
}
Codice pagina index.php
<?php
// Inizio una nuova sessione o proseguo quella già iniziata.
// In questo momento che l'utente esegua il login oppure no
// PHP fornisce un ID di sessione.
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Prova AJAX</title>
<script type="text/javascript" src="ajax.js"></script>
</head>
<?php
// Se le variabili di sessione non sono settate esegui la funzione
// al momento della carica della pagina
if( !isset($_SESSION['x']) ){
echo "<body onLoad = 'registra_risoluzione();'>";
// altrimenti no
} else {
echo "<body>\n";
}
// stampa il risultato
echo $_SESSION['x']." , ".$_SESSION['y'];
?>
</body>
</html>
Codice pagina backAjax.php
<?php
// continuiamo la sessione
session_start();
// eseguiamo il filtraggio dell'input per ovviare ad eventuali XSS
$x = htmlspecialchars( $_GET['x'] );
$y = htmlspecialchars( $_GET['y'] );
// setto le variabili di sessione che contengono la risoluzione dello schermo dell'utente
$_SESSION['x'] = $x;
$_SESSION['y'] = $y;
?>
lunedì 4 agosto 2008
Come recuperare lo stile con il DOM
Ecco il codice di una interessante funzione javascript da usare se si vuole recuperare il valore di una proprietà di stile non settata tramite l'attributo style (inline style), ma settata su fogli esterni, tramite inclusione tipo <link rel=…> oppure con la direttiva @import. Addirittura la proprietà può pure non essere mai stata settata dallo sviluppatore e comunque ne viene recuperato il valore. Molto utile ad esempio per recuperare la larghezza o l'altezza di un paragrafo.
// funzione per recuperare lo stile da fogli di stile esterni o
// se lo stile non e stato proprio settato
// 'el' e l'elemento di cui si vuole conoscere lo stile
// 'propCss' e la proprieta di cui si vuole conoscere il valore
// non funziona con le scorciatoie tipo border o background
function retrieveProperty(el, propCss){
// setto la var con il valore della proprieta
var propVal = null;
// questo per firefox
if(document.defaultView && document.defaultView.getComputedStyle){
// accedo allo stile
var stile = document.defaultView.getComputedStyle(el, null);
// se funziona il recupero
if(stile) {
// recupero il valore della proprieta desiderata
propVal = stile.getPropertyValue(strCssRule);
} else {
propVal = null;
}
}
// questo invece per IE
else if(el.currentStyle){
propCss = propCss.replace(/\-(\w)/g, function (strMatch, p1){
return p1.toUpperCase();
});
// recupero il valore della la proprieta
propVal = el.currentStyle[propCss];
}
// variabile di ritorno
return propVal;
}