sabato 13 agosto 2011

Ottenere il codice SQL diretto verso MySQL

Di recente mi è capitato di dover fare il debug di una query in un ambiente di produzione, quello che volevo era la stringa SQL esatta che veniva inviata a MySQL.
La strada che già conoscevo, cioè quella di abilitare i log non era praticabile in quanto avrei dovuto arrestare il servizio, modificare la sua configurazione, riavviarlo e annullare poi la modifica.
Poi ho scoperto una strada molto più semplice, indolore e che non richiedeva il fermo del servizio...sniffare tutto il traffico ed esportare solo il codice SQL in un file di testo.
Nel mio caso avevo il server mysql in un'altra sede geografica e volevo estrarre le query direttamente nel mio pc, così ho sniffato il traffico diretto al database tramite tcpdump, l'ho memorizzato in un file che poi ho trasferito sul mio pc e grazie ad un tool a riga di comando presente in wireshark ho completato l'opera.

tcpdump -i eth0 -s 0 -w /tmp/mysql.tcp port 3306
-i eth0 sta ad indicare su quale interfaccia di rete catturare il traffico, per acquisire in localhost si può utilizzare -i lo
-s 0 indica che non deve essere scartato niente di quanto catturato
-w /tmp/mysql.tcp è il file in cui verranno registrati i pacchetti
port 3306 è l'espressione che dice di catturare solo ciò che proviene o arriva sulla porta TCP 3306

"C:\Program Files\Wireshark\tshark.exe" -T fields -e mysql.query -r mysql.tcp -d tcp.port==3306,mysql > C:\out.sql
-T fields indica la modalità di esportazione, questo parametro lavora insieme al -e
-e mysql.query quale campo andare ad esportare
-r C:\mysql.tcp il file da cui andare a leggere il traffico catturato
-d tcp.port==3306,mysql in questo caso è una ridondanza, serve a specificare ti considerare solo il traffico mysql sulla 3306
> C:\out.sql Questo è il punto più importante, significa che tutto ciò che tshark produce deve essere scritto in quel file. Esistono anche altri parametri per dirgli dove e come andare a scrivere ma questo è l'unico modo per creare un output di tipo testuale


giovedì 9 giugno 2011

SQL Utile - SQL Server

Visualizzare le query in esecuzione
SELECT sqltext.TEXT, richieste.*
FROM sys.dm_exec_requests richieste
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
ORDER BY total_elapsed_time DESC

giovedì 2 giugno 2011

IE9 Security Zone, che fine ha fatto l'icona?

Di recente mi è capitato di dover risolvere un problema di autenticazione di un PC che aveva Internet Explorer 9, in genere come prima cosa vado a verificare la Security Zone che il browser sta utilizzando in quel momento. Fino alla versione 8 del browser trovavo l'icona nella status bar del browser, ma in questa nuova versione la status bar non è attiva per default e anche attivandola la famosa icona non appare; ma che fine avrà fatto?

La posizione dell'icona in Internet Explorer 7

Purtroppo nel nuovo Explorer non riusciremo più ad avere quell'informazione con un rapido colpo d'occhio come prima, ma dovremo fare un semplice passaggio in più... click con il pulsante destro sulla pagina, Proprietà e nel popup che appare troveremo l'informazione che stavamo cercando.

La finestra delle proprietà in Internet Explorer 9


Se qualche javascript vi blocca l'utilizzo del pulsante destro del mouse, come ad esempio in Microsoft CRM, allora si preme il pulsante "Alt" il quale farà comparire la barra dei menu, selezionando "File", poi "Proprietà" è possibile accedere al medesimo popup.


sabato 28 maggio 2011

Inserire il Datepicker di jQuery UI nella propria pagina web

Vorrei condividere la modalità di integrazione dei widget del progetto jQuery UI.
Spiegazione veloce
  1. Ottenere il pacchetto di jQuery UI
  2. Una volta decompresso il pacchetto, copiare nel proprio progetto web le cartelle css e js
  3. Copiare i file di traduzione desiderati dalla cartella development-bundle/ui/i18n nella cartella js
  4. Referenziare nella propria pagina web
    • il foglio di stile del tema "css/<nome_tema>/jquery-ui-1.8.12.custom.css"
      <link rel="stylesheet" type="text/css" href="css/<nome_tema>/jquery-ui-1.8.12.custom.css"></link>
    • gli script di jQuery, jQuery UI e i file di traduzione
      <script type="text/javascript" src="js/jquery-1.5.1.min.js"></script>
      <script type="text/javascript" src="js/jquery-ui-1.8.12.custom.min.js"></script>
      <script type="text/javascript" src="js/jquery-ui-i18n.js"></script>
  5. Creare un elemento input di tipo text e assegnargli una classe o un id
    <input type="text" class="datepicker" />
  6. Inserire il codice che inizializza il calendario
    <script type="text/javascript">
    $(function(){
         $.datepicker.setDefaults( $.datepicker.regional[ "it" ] );
         $('.datepicker').datepicker();
    });
    </script>

Ottimizzazioni
Se il testo nel calendario è troppo grande, probabilmente non è stato definito il font-size nel proprio css. È possibile rimpicciolirlo correggendo il font-size nella classe CSS ui-datepicker, ad esempio aggiungendo questo frammento subito dopo il tag link  del punto 4
<style type="text/css">
    .ui-datepicker{ font-size: 80%; }
</style>


I file di traduzione
All'interno della cartella development-bundle/ui/i18n sono presenti tutti i file javascript che contengono le traduzioni e i formati per ogni lingua. Tramite il tag <script> è possibile includere solamente i file delle lingue che si desiderano, oppure con un unico file, il jquery-ui-i18n.js è possibile utilizzarle tutte.
jQuery automaticamente non riesce a capire la lingua che deve utilizzare, saremo perciò noi a dover decidere con che lingua deve essere inizializzato e per fare questo abbiamo due possibilità:
  1. Impostare la stessa lingua per tutti i datepicker
    $.datepicker.setDefaults($.datepicker.regional['it']);
  2. Impostare la lingua per il singolo datepicker $(selettore).datepicker($.datepicker.regional['it']);
Pagina di documentazione del Datepicker

domenica 15 maggio 2011

Recuperare il codice di monitoraggio di Google Analytics

Mi è capitato più volte di andare alla ricerca nel mio account Google Analytics del codice da incorporare nella pagina, ogni volta andarlo a cercare è un'impresa biblica perciò questa volta lo appunto qua.

sabato 14 maggio 2011

HTML for Outlook

Con Outlook 2007 e 2010, la Microsoft ha sostituito l'engine per la composizione e la visualizzazione delle email da quello di Internet Explorer a quello di Word. Questo causa un bel problema a tutti quelli che come me, devono creare periodicamente delle email in HTML e fare in modo che queste abbiano la massima compatibilità con i vari client di posta.

Combinazioni tastiera MacBook

Qui di seguito riporto le combinazioni di tastiera del mio MacBook, sia quelle che utilizzo più spesso, sia quelle un po meno frequenti ma che sono difficili da ricordare.