Commenti recenti

mercoledì, 17 settembre 2008

Un escape in Oracle

Oggi ho dovuto affrontare un errore in una query per Oracle. L'errore era:

ORA-00907: parentesi chiusa mancante

Non proprio comprensibile...

La prima cosa che ho fatto è stata di controllare tutte le parentesi, tutte correttamente annidate e chiuse. Allora ho provato a indentarla in maniera corretta, visto che nell'errore di Oracle veniva riportata in maniera tutt'altro che leggibile. Ma ancora nulla. Allora ho cominciato a cancellare pezzi singolarmente, in maniera da ridurre il codice sql e individuare quale parte desse l'errore. E poi ho notato una cosa non proprio carina, tre apici in successione. Una cosa di questo tipo:

select * from table where column = replace(string, ''', '');

La funzione replace() ovviamente permette di sostituire un carattere con un altro all'interno di una stringa, ma ovviamente quel ''' da errore. Ho pensato di poter fare l'escape dell'apice interno con un backslace (\). Nulla di fatto.

Allora ho cominciato una piccola ricerca che ha prodotto questo risultato:

www.mydigitallife.info/2007/03/24/how-to-escape-characters-in-oracle-plsql-queries/

In pratica si dice di segnalare nella query stessa qual'è il carattere utilizzato per l'escape:

SELECT * FROM table WHERE column LIKE '%\_%' ESCAPE '\';

Poco sotto, però, viene affermato che questo metodo non funziona per fare l'escape dell'apice singolo. In quel momento m'è venuto in mente di usare un trucchetto per "non far vedere" a Oracle che carattere sto cercando nella mia stringa. E ho trasformato la mia query in questa:

select * from table where column = replace(string, chr(39), '');

chr(code) è la funzione che dice ad Oracle di sostituire il codice con il carattere corrispondente. (trovate una tabella delle corrispondenze qui)

La soluzione prospettata invece nell'articolo è quella di aggiungere un ulteriore apice davanti a quello di cui fare l'escape. Quindi il ''' diventa ''''.
postato da: giafai alle ore 17:51 | link | commenti
categorie: oracle, programmazione
martedì, 16 settembre 2008

Substr() in ColdFusion

Per chi come me proviene da php, si troverà in ColdFusion col dubbio di quale funziona utilizzare per replicare il funzionamento di substr($string, $start, $length). In ColdFusione esistono 3 funzioni: Left(string, count), Mid(string, start, count) e Right(string, count).

Left(string, count)
è equivalente a substr($string, 0, $length)
Right(string, count) è equivalente a substr($string, $start) con $start numero negativo
Mid(string, start, count) è equivalente a substr($string, $start, $length)

Quindi, Left(string, count) restituisce una stringa di count caratteri a partire dall'inizio della stringa; Right(string, count) restituisce una stringa di count caratteri a partire dalla fine della stringa; Mid(string, start, count) restituisce una stringa di count caratteri a partire dalla posizione start.

Onestamente mi piace molto di più la soluzione php, ma... ogni linguaggio ha i suoi pregi e i suoi difetti.
postato da: giafai alle ore 17:10 | link | commenti
categorie: php , programmazione, coldfusion

CMS: l'ora della scelta

Una mia cara amica mi ha chiesto oggi un consiglio su un cms. "Esiste un cms abbastanza semplice e intuitivo che potrei usare anche io per costruire un sito pur non conoscendo niente di cms?" Ovviamente ne esistono a centinaia e volendo scegliere, dobbiamo certamente chiederci quale linguaggio di programmazione prediligiamo e se avremo la possibilità di appoggiarsi ad un database e, cosa ben più importante, che tipo di sito vogliamo realizzare.
Sicuramente un punto di partenza è Open Source CMS che permette di provarne in demo moltissimi.
Altro consiglio nella scelta del CMS è sicuramente la comunity che sta dietro ad esso. Un CMS famoso se da un lato è più soggetto ad attacchi, permette di trovare più facilmente plugin aggiuntivi e template, bug fix e assistenza ai problemi riscontrati.
C'è un ultimo punto, però, su cui vorrei soffermarmi. Di solito si cerca il software migliore per un certo scopo, ma questo non basta. Ogni software risponde ad un certo modo di fare le cose, ogni programmatore investe il suo software col suo modo di ragionare. Ecco, un software non è mai il migliore in assoluto nel fare una certa operazione, ma è un giudizio soggettivo. Perciò molta attenzione, nello scegliere il CMS, anche alla logica sottostante, perché questa si adatti a noi, e non il contrario. Il software dev'essere un aiuto, mai un ostacolo.
postato da: giafai alle ore 15:30 | link | commenti
categorie: software, ricerche
lunedì, 15 settembre 2008

Programmatori...

Ognuno ha il suo stile. Si, esistono linee guida che cercano di uniformare lo stile di scrittura del codice per renderlo facilmente leggibile a chiunque, ma poi lo stile personale, prima o poi, esce fuori.
C'è chi fa largo uso di commenti, magari anche quando non sono necessari e chi non ne usa, neanche quando fa magari una modifica temporanea al codice inserendo una condizione if del tipo "false == false". Ecco, un commento per dire "questa condizione sostituisce la condizione x fin quando il progetto non è sul server di produzione" mi avrebbe risparmiato qualche insulto allo scrittore originario del codice.
Oppure c'è chi fa galleggiare il codice scritto su una quantità di spazi bianchi impressionante e chi tra una riga e l'altra di codice non vuol vedere assolutamente nulla.
Stili diversi che a volte sono totalmente inconciliabili. Ma lavorando accanto ad ognuno è sempre interessante vedere come programma, capire il suo stile, non solo per interpretare correttamente il codice prodotto, ma anche per carpire le caratteristiche migliori e comprendere al meglio quelle criticabili.
E voi? Qual'è il vostro stile di programmazione?
postato da: giafai alle ore 11:09 | link | commenti
categorie: lavoro, programmazione
venerdì, 12 settembre 2008

Aggiornamento Joomla

Ho provveduto ad aggiornare il sito internet della Banda Città del Palio con l'ultima versione di Joomla, la 1.5.7.
Ho eseguito il backup del vecchio sito e ho sovrascritto i file con quelli patchati. Tutto bene, tranne il fatto che appena ho fatto login nella parte pubblica, Joomla mi ha restituito un errore.

Fatal error: Call to undefined function: stripos() in /percorso_home/libraries/joomla/environment/uri.php on line 675

Ho aperto subito il sorgente della nuova pagina e della vecchia, notando l'aggiunta della funzione

isInternal($url)

che fa uso della funzione php stripos(). Questa funzione è stata introdotta con php5, ma ovviamente il server di aruba che ospita il sito ha ancora php4 (allucinante!).

Bene, a questo punto, ecco la mia soluzione. Questa la funzione originaria

    function isInternal($url) {
        $uri =& JURI::getInstance($url);
        $base = $uri->toString(array('scheme', 'host', 'port', 'path'));
        $host = $uri->toString(array('scheme', 'host', 'port'));
        if(stripos($base, JURI::base()) !== 0 && !empty($host)) {
            return false;
        }

        return true;
    }


Che io ho modificato in questo modo:

    function isInternal($url) {
        $uri =& JURI::getInstance($url);
        $base = $uri->toString(array('scheme', 'host', 'port', 'path'));
        $host = $uri->toString(array('scheme', 'host', 'port'));

        if (!function_exists("stripos")) {
          function stripos($str,$needle) {
            return strpos(strtolower($str),strtolower($needle));
          }
        }

       
        if(stripos($base, JURI::base()) !== 0 && !empty($host)) {
            return false;
        }

        return true;
    }


Se scoprirò altri errori e/o problemi, li segnalerò qui sul blog.
postato da: giafai alle ore 09:04 | link | commenti (2)
categorie: programmazione, banda, siena

.Paytowork.net.