Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [Ajax] Formaldehyde PHP Debugger

    Salve a tutti
    Qualcuno avrà notato nella mia sign un link che parla di Formaldehyde, il più basilare e presumo completo, nella sua semplicità, debugger per interazioni PHP e JavaScript.

    Siccome mi è stato chiesto di spiegare bene cosa faccia, come si usa, e a cosa serve, ho deciso di dedicare un post in italiano su questa mia ultima creazione.

    Perchè Formaldehyde
    Perchè mi ero rotto le scatole di ritrovarmi nel bel mezzo di una sessione di testing senza capire che diavolo era successo. Perchè il php spara errori su uno status 200, qualcosa praticamente inconcepibile per sviluppatori Java, C#, o altro.
    Perchè PHP ha diversi livelli di error reporting, e in fine perchè una sezione Ajax si testa via browser e non sempre c'è il tempo, o la voglia se parliamo di performances, di mettere controlli ovunque.
    Seppure avere controllo del proprio codice sia una priorità assoluta per qualunque progetto (per me più che mai, sono maniaco, per questo evito volentieri frameworks che per la maggiore mi fanno sorridere al primo sorgente aperto, anche i più blasonati ...) l'errore inaspettato è sempre dietro l'angolo.
    Specialmente in applicazioni dove l'uso di Ajax è massiccio, estremamente massiccio, inclusi progetti in intranet, sistemi di amministrazione, etc etc, può risultare quasi impossibile o semplicemente andare contro la policy aziendale, riproporre l'errore, chiedere aiuto sullo stesso, capire cosa sia andato male e perchè.
    Ebbene, invece di procedere per le solite vie, ricerca in console JavaScript della chiamata che ha prodotto l'errore, eventuale lettura dei logs con post spulciamento codice, ho ben pensato di creare uno script stra-compatibile, da PHP 4 fino al 5.3, capace di integrarsi a sforzo zero in qualunque ambiente di sviluppo, che sia appunto un framework, un'applicazione personale, o un vattelapesca in PHP.

    Come Usare Formaldehyde
    Formaldehyde richiede la semplice inclusione in qualunque punto del nostro applicativo creato appositamente per gestire richieste e/o risposte Ajax.
    In soldoni, per avere Formaldehyde è sufficiente scrivere:
    codice:
    require_once 'formaldehyde.php';
    Ovviamente se la pagina contiene porzioni di codice capaci di interagire sia con ajax che con chiamate dirette, è consigliato in generale includere formaldehyde prima di qualunque altro script, altrimenti si rischia di perderne i vantaggi.

    Cosa Fa Formaldehyde
    Il mio script si appropria 100% dell'output, rilasciandolo normalmente qualora tutto sia andato bene, al fine di proseguire con interazioni e debug, modificandolo ma rispettando il livello di error_reporting predefinito, in status 500 a risposta in plain/text e JSON per far si che qualunque browser sia in grado di verificare uno status di errore server, appunto lo status 500, e mostrare opzionalmente un oggetto JavaScript.
    codice:
    if(xhr.status === 500 && xhr.getResponseHeader("X-Formaldehyde") != null) {
        console.log(eval("(" + xhr.responseText + ")"));
    }
    Grazie ad un'istruzione server, e due linee client, il nostro panorama di sviluppo passerà da una situazione confusionale tipo questa:

    appunto difficile da trovare in mezzo a chissà quante interazioni tutte andate a buon fine grazie allo status 200, ad una situazione ordinata e facile da "sfogliare" come questa:


    Ma "A Me Mi Piace FirePHP"
    Ecco, a parte alcune pratiche secondo me discutibilissime adottate dallo sviluppatore di FirePHP, motivo per il cui non ho nemmeno provato il file prima di sfornare Formaldehyde, il famoso plug-in con server code non è in grado di fare debug, poichè tutti gli errori più gravi non sono gestiti ... lo sarà probabilmente dopo che l'autore avrà letto il singolo sorgente di Formaldehyde ...
    Inoltre FirePHP richiede:
    • un plug-in su Firefox, dando per scontato gli altri browser debbano implementarsi il debug a mano
    • cambiamento del codice poichè FirePHP è uno strumento di logging, più che uno sturmento di debug
    • manutenzione del codice qualora un domani cambiassero API, considerando anche che ha la più inconsistente implementazione Singleton che io abbia mai visto, con una istanza protetta che si sovrascrive passando un true al costruttore, ed un metodo init sempre e comunque chiamato dal costruttore ma pubblico ... vabbeh, chi sa qualcosa di OOP mi ha capito ...


    Ma Da Me C'è Già FirePHP
    Poco importa, se includete Formaldehyde avrete tutto il controllo logging che avevate prima via FirePHP più uno strato di controllo debug grazie a Formaldeyde.

    Ma Io FirePHP Non Lo Uso
    Poco male, via Formaldeyde è possibile loggare qualsivoglia chiave valore dove i logs verranno restituiti sotto forma di headers e quindi è possibile leggeri, usarli, o fare altro direttamente via JavaScript. In più, a differenza di FirePHP e non so quanti altri applicativi sui generis, Formaldehyde non soffre problemi di ricorsività, infatti tra le proprietà ritornate qualora dovesse esserci un errore abbiamo debug_backtrace, la funzione più utile nel mondo di PHP assieme ad Exception->getTrace qualora la versione di PHP sia la 5 o superiore.
    Per finire, questo è un esempio di come si può loggare qualcosa via Formaldehyde:
    codice:
    formaldehyde_log('chiave', $valore1);
    formaldehyde_log('chiave', $valore2);
    formaldehyde_log('altra_chiave', $altro_valore);
    per ottenere un oggetto JavaScript con proprietà chiave, ed altra_chiave, ed uno o più valori all'interno dell'array presente in ogni chiave.

    E La Sicurezza?
    Come spiegato nella pagina dedicata, Formaldehyde non dovrebbe mai essere attivato in produzione (on-line, dove ravana la gente) poichè il debug è il debug, e dovrebbe essere solo interno.
    Per fare questo è sufficiente impostare la costante FORMALDEHYDE su false, in modo da evitare in toto la gestione automatizzata.
    QUalora utilizziate Formaldehyde anche per fare logging, consiglio di creare una funzione wrapper capace di semplificarci la vita
    codice:
    function header_log($key, $value){
        if(defined('FORMALDEHYDE') && FORMALDEHYDE)
            formaldehyde_log($key, $value);
        ;
    }
    Un domani potremo semplicemente modificare il corpo di questa funzione qualora Formaldehyde non ci serva più o qualora si voglia basare il logging su altre classi o funzioni.

    Link Esterni
    Presentazione sul mio blog: WebReflection
    Open Source Google Project Code


    Credo sia tutto
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  2. #2
    Utente di HTML.it L'avatar di r1cky`
    Registrato dal
    Feb 2007
    Messaggi
    432
    Grazie mille, molto interessante

  3. #3
    Coem ho gia' scritto anche su Ajaxian:
    http://ajaxian.com/archives/formalde...he-client-side

    stasera dovrei riuscire a metter su anche un file cross-browser e client capace di rendere formaldehyde completo e totalmente automatico
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    Vorrei annunciaro il rilascio della seconda parte di Formaldehyde, quella lato client, con la stessa filosofia Zero Config così da poterna includere in development, e togliere in produzione, senza che il vostro codice JavaScript, o quello di librerie di terzi, venga intaccato.

    L'annuncio: Formaldehyde JS - The Circle Is Close
    E il solito link alla pagina dove troverete il nuovo file JavaScript


    come si usa? lo mettete nella pagina che usate per le interazioni Ajax come primo script, tutto quà
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    riassumendo, scrivo un blog in inglese e tutti si lamentano della mia scelta perche' sono italiano, mi prendo del tempo per tradurre in italiano la descrizione di un progetto, dell'idea, del come si usa, e il risultato e' zero feedback ... richiedetemi perche' mi sono trasferito in UK ed ho un blog in inglese ora ...

    zero domande per qualcosa che praticamente nessuno aveva fatto prima, incluso catching di errori in core e fatal errors ... bah!
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #6


    andrew, la cosa è fighissima, veramente, e a lavoro vorrei vedere di integrarla con il mio framework, ma spero tu ti renda conto che hai creato un mostro troppo pro per il 99% degli utenti di html.it

  7. #7
    l'ho consigliato ad un amico programmatore ex-collega, chissà magari lo userà visto che la settimana scorsa mi rompeva le palle con dell'ajax ( scritto coi piedi... non mandava neanche gli header corretti )

    prossimo progetto ajax vedo di usarlo/ farlo usare

    at: at:

  8. #8
    grazie
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #9
    ti ho lasciato un commento sulla pagina della sicurezza (lo riporto qui in italiano):

    Il controllo che fai per la costante di abilitazione/disabilitazione del sistema di debugging può essere utile se il tutto gira su un sito web, ma se il software gira su un'intranet la costante verrà valorizzata positivamente!

    Per completezza, non tutti gli indirizzi del range 10.x.x.x e 192.x.x.x sono della classe c (ovvero privati), dovresti applicare delle maschere a SERVER_ADDR e verificare se una di queste corrisponde ... solo in quel caso l'indirizzo è privato effettivamente.

    Un'altra soluzione potrebbe essere controllare la persenza di un file ed abilitare, o meno, il debugger in modo da non dover tenere codice diverso tra produzione e sviluppo (o per lo meno questo è quello che faccio ad esempio con il mio framework ... se esiste il file __DEBUG__ abilito la visualizzazione degli errori, la registrazione degli stack delle chiamate, ove possible, e via dicendo)!

  10. #10
    Ciao.
    Se non ricordo male avevi già fatto qc del genere
    ( mi avevi risparmiato dei bei mal di test )
    anche se non così fighetto
    Semplice da utilizzare e per la prima occhiata molto utile.
    Well done !



    Ps
    Potresti spendere due parole su questo punto

    incluso catching di errori in core e fatal errors ... bah
    Grazie.


    PPS
    Spulciando ho trovato error_get_last() ma non è
    solo per il PHP 5 >= 5.2.0 magari ti è sfuggito.
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.