[Fun] "Il cane con la bomba"

Quest'estate siamo stati dalle parti di Fondi, Terracina e Sperlonga a trovare la nostra amica Carla.

Sono stati dei bei giorni, il tempo era perfetto e il mare bello.
La mozzarella di bufala era qualcosa di trascendentale, non si può capire se si è rimasti a quella che vendono alla Coop/Slunga & Co.

E Mila, il jack russell di Carla, è una bomba. Una bomba di vivacità che...ama le bombe  :-D Di fatto da quelle parti sono soliti chiamare "bombe" i bomboloni alla crema (dalle parti di Bergamo - detta anche "Sassonia dell'est" da qualcuno :-D, li chiamiamo anche Krapfen).

Ecco una prova (sfuocata, è troppo veloce per l'obiettivo) della voracità della bestiola:

bomba

Morale della favola: mai lasciare incustodite le bombe.

[Firefox] Tomfox: note Tomboy da Firefox

Ho utilizzato per un po' Note Adesive 2.22.2 perchè mi ricordava ATNotes di Windows, sebbene non fosse allo stesso livello.
Ad ogni modo ho potuto constatare la maggior potenza di Tomboy, che oltre a permettere la interrelazione delle note impostando dei collegamenti, possiede un'estensione, TomFox, che permette di creare al volo una nota Tomboy da Firefox cliccando con il tasto destro su del testo selezionato.
Da non sottovalutare alcuni plugin di terze parti che mi riserverò di provare in futuro magari.

Essendo un'estensione sperimentale, è richiesta la registrazione.

[Javascript] Trasformare dinamicamente un documento XML in HTML attraverso XSL

Visto il post di ieri riguardo alle trasformazioni XSL in PHP, oggi altro breve post su come effettuare tali trasformazioni con javascript attraverso un codice cross-browser.
Cominciamo con la funzione deputata al caricamento sincrono del documento XML e relativo documento di stile XSL:


function loadDocument(fileName)
{
/* a seconda che il borwser sia IE o Firefox, si crea un oggetto
* MSXML2.DOMDocument oppure un Document object nativo per Firefox. */
var xmlDoc = window.ActiveXObject ? new ActiveXObject("MSXML2.DOMDocument.3.0") : document.implementation.createDocument("","",null);
xmlDoc.async = false;
xmlDoc.load(fileName);
return xmlDoc;
}
Vediamo la funzione che effettua la trasformazione XSL del documento XML:

function getTransformedHTML(xmlDoc, xslDoc) {

var html = "";

/* Implementazione per Firefox */
if (window.XSLTProcessor)
{
var xsltProc = new XSLTProcessor(); // creazione di un'istanza del processore XSLT
xsltProc.importStylesheet(xslDoc); // importazione del foglio di stile
var fragment = xsltProc.transformToFragment(xmlDoc, document);
html = new XMLSerializer().serializeToString(fragment); // serializzazione del codice HTML in una stringa prima di aggiugnerla alla pagina
}
else if (window.ActiveXObject) /* Implementazione IE */
{
html = xmlDoc.transformNode(xslDoc);
}
return html;
}

Ammettiamo ora di avere una pagina HTML di appoggio che includa le funzioni precedentemente illustrate in uno script esterno e un foglio di stile CSS per abbellire la presentazione.

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<script type="text/javascript"
src="StaticXSLT.js"></script>
<link id="Link1" rel="stylesheet" href="cart.css" type="text/css" />
</head>
<body>
<a href="javascript:GenerateCart();">Aggiungi al carrello</a>
<br /><br />
<span id="cart" ></span>
</body>
</html>
Cliccando sul link "Aggiungi al carrello", si richiamerà la funzione GenerateCart() che caricherà il documento XML effettuando la trasformazione XSL e mettendo l'output risultante nel elemento con id cart. La funzione GenerateCart() (presente nell oscript incluso nella pagina HTML) è così composta:

function GenerateCart()
{
var xmlDoc = loadDocument("cart.xml");
var xslDoc = loadDocument("cart.xsl");
document.getElementById("cart").innerHTML = getTransformedHTML(xmlDoc, xslDoc);
}

[PHP] Effettuare dinamicamente trasformazioni XSL a file XML

Breve post per illustrare come usare le funzioni XSL in PHP5. L'architettura di riferimento è LAMP (con Ubuntu come distro) per cui tutto è già automagicamente disponibile, poichè l'estensione XSL è già inclusa in PHP5.

Sia dato il seguente file, collection.xml:


<collection>
<cd>
<title>Fight for your mind</title>
<artist>Ben Harper</artist>
<year>1995</year>
</cd>
<cd>
<title>Electric Ladyland</title>
<artist>Jimi Hendrix</artist>
<year>1997</year>
</cd>
</collection>
e il suo foglio di stile, collection.xsl, deputato al parsing del documento XML per la generazione del codice HTML:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="owner" select="'Nicolas Eliaszewicz'"/>

<xsl:output method="html" encoding="iso-8859-1" indent="no"/>
<xsl:template match="collection">
Hey! Welcome to <xsl:value-of select="$owner"/>'s sweet CD collection!
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="cd">
<h1><xsl:value-of select="title"/></h1>
<h2>by <xsl:value-of select="artist"/> - <xsl:value-of select="year"/></h2>
; <hr />
</xsl:template>
</xsl:stylesheet>
Vediamo il codice PHP che ci serve per effettuare dinamicamente la trasformazione:

$doc = new DOMDocument();
$xsl = new XSLTProcessor();

$doc->load('collection.xsl');
$xsl->importStyleSheet($doc);

$doc->load('collection.xml');
echo $xsl->transformToXML($doc);
Il risultato dovrebbe essere simile al seguente:

"[Spazio Artistico] "L'orgasmo di Anna"

ana_orgasm

Autrice: Arianna Milesi

[Mozilla] Le password in Thunderbird e Firefox

Breve post per appuntarmi come resettare la password di sicurezza globale impostabile con Firefox/thunderbird e come proteggere un profilo con una password.
Per il primo caso Mozillazine riporta:

If you have lost or forgotten your Master Password or you want to disable the feature, you can reset your master password. Upon resetting, you will lose all the stored information in the Password Manager as this is a built-in security feature to prevent people from simply resetting your Master Password to gain access to your passwords.
For Firefox you can also look at the Troubleshooting section in Password Manager.

  • Firefox: Enter "chrome://pippki/content/resetpassword.xul" in the Location Bar, press Enter, then click "Reset"
  • Thunderbird 1.5: "Tools -> Options -> Advanced -> Saved Passwords -> Master Password -> Reset Password".
  • Thunderbird 2: Choose Tools – Error Console, paste the expression: openDialog("chrome://pippki/content/resetpassword.xul") and press the Evaluate button. That will open a dialog asking you if you want to reset your password.
  • For Mozilla Suite: "Edit -> Preferences -> Privacy & Security -> Master Passwords -> Reset Password".
Questo sottolinea come le password globali non siano di grande efficacia se sono così facilmente resettabili.
Per quanto riguarda la protezione di un profilo con una password, sembrano esistere le estensioni Profile Password di Kaosmos (non le ho testate).

Word replacing: servizio web e codice JS

Via Infowwweb (blog che mi pare molto attivo sebbene abbia appena iniziato, lo seguirò via google reader quando ho tempo...) scopro un servizio carino, Word Replacer, il quale permette la sostituzione di alcune parole di una pagina Web riproponendo infine il risultato finale con le sostituzioni, facendo il deep linking delle varie risorse web (immagini, css, js, ecc).

Diamo uno sguardo alla pagina di Google "pre Word Replacer":

Google_before

Ecco qui di seguito il form di Word Replacer che permette la sostituzione delle parole. Si noti che è possibile inserire entità HTML (come &egrave;) e alcuni tag HTML, precisamente quelli che non richiedono il corrispondente tag di poichè, ad uno sguardo veloce, mi è sembrato venisse eseguito l'escaping del carattere backslash di chiusura dei tag, quindi non credo ci siano minacce XSS.

Word Replacer_1219145262466

E infine il risultato finale (il quale viene mantenuto in cache dal servizio Web per non so quanto tempo a dire il vero, non viene detto nulla a riguardo). Non badate alla correttezza grammaticale della frase con quel "però" in fondo, che ho messo per vedere se riconosceva le entità HTML

Google_after

Altri modi per modificare una pagina

Se volessimo solamente apportare delle modifiche al design e al contenuto della pagina senza che questa sia attiva (ovvero non è possibile sottomettere form, cliccare sui link e via discorrendo), possiamo recarci sulla pagina da modificare e inserire nella barra degli indirizzi del browser i lseguente codice javascript:

javascript:document.body.contentEditable='true'; document.designMode='on'; void 0 

Il codice funziona con Firefox, non l'ho testatto su IE 7. Per averlo sempre a disposizione conviene trascinarlo nella barra dei segnalibri al di sotto della barra degli indirizzi.

Infine vi è GreaseMonkey, un'estensione per Firefox che consente attraverso del codice Javascript di modificare le pagine Web. Non ho alcuna esperienza nell'uso di questa estensione, potete consigliarmi buoni tutorial lasciando un commento, grazie :)

[Grafica] Risorse per GIMP

Sotto Linux utilizzo sporadicamente GIMP per brevi ritocchi fotografici (niente di eccelso dal momento che non sono un grafico).

Ho voluto raccogliere in questo post un po' di risorse del Web sull'argomento. E' più che gradito un vostro contributo aggiungendo altre risorse tramite un commento a questo post :)

Vai al sito ufficiale - http://www.gimp.org/

Lista

Frullato di iPhone

Fonte: iPhone ti odio

[PHP/SQL] Generare grafici a partire dallo schema SQL di un database

Può esser sicuramente interessante avere una visualizzazione grafica di uno schema SQL, in grado di evidenziare i legami fra le varie tabelle a colpo d'occhio. Infatti non sempre creiamo noi delle basi di dati e alle volte abbiamo a disposizione solo un dump del database.

Fonte immagine: A Ovest di Paperino SQL

Ho visto che MySQL Workbench è in grado di importare uno script SQL e di generare il grafico che evidenzia le tabelle e i legami fra di esse.

In aggiunta ho trovato uno script PHP, Visualize, il quale facendo uso di Graphviz, può generare grafici in formato PNG degli script SQL rappresentanti lo schema di un database.
Sul sito è possibile scaricare uno screencast che mostra tale script in funzione, per comodità ho eseguito l'upload di tale filmato su Youtube e ve lo mostro di seguito (quanto l'autore scrive nella shell è maggiormente visibile nel filmato originale).

[CRM] Vulnerabilità XSS in vTiger 5.04-

Scorrendo il forum italiano dedicato a vTiger, incappo in un post che presenta delle vulnerabilità XSS per l'ultima versione (e non solo) di questo CRM. La prima riguarda la variabile parenttab, che si riferisce al modulo di riferimento per una sottosezione. Ad esempio Vendite > Opportunità ha come parenttab Vendite per l'appunto. Ecco un esempio di esecuzione di codice arbitraria:

http://www.sito.com/vtiger/index.php?module=Accounts&action=index&parenttab=Sales"<script>alert('ciao')</script>

L'altra falla di sciurezza riguarda l'autenticazione: mentre per il campo username caratteri particolari come le parentesi angolari, vengono convertiti nelle rispettive entità HTML, ciò non accade per il campo password. Esempio:

// da inserire nel campo password nella pagina di login
"<script>alert('ciao')</script>

L'ultima falla riguarda il mancato controllo sul valore che si può assegnare alla variabile query_string, che non ho ancora ben capito quando viene utilizzata. Ad ogni modo essendo una variabile presente in ogni header di qualsiasi tema di default per vTiger, qualsiasi pagina può utilizzare tale codice:

http://www.sito.com/vtiger/index.php?action=index&module=Home&query_string="<script>alert('ciao')</script>
Per risolvere tali falle, fare riferimento al post linkato per patchare il codice.

[Linux] Tabella "equivalenze" software fra Windows e Linux

Quest'immagine realizzata dal GULP mette a confronto i possibili software che possono andare a sostituire quelli a cui si è abituati ad usare sotto Windows.

linux_not_windows2

Ad ogni modo è bene precisare che Linux NON è Windows, per cui è bene sapersi adattare al nuovo sistema usando quello che esso ci mette a disposizione nativamente.

Se qualcun'altro di voi ha redatto una lista più completa o ha altre segnalazioni da fare, oltre a proporle al GULP, sentitevi liberi di comunicarlo nei commenti qui sotto (eventualmente linkando il vostro sito/blog dove si trova la lista, se ne avete una).

[CRM] Ricerche globali in vTiger

Leggendo il manuale di CRMVillage (che fa riferimento alla versione 5.04 di vTiger), mi accorgo che vi è un'inesattezza alla pagina 16:

Nota:
Il carattere % può essere usato come “jolly” per la funzione di ricerca. Per esempio, per cercare due contatti come "Meyer" e "Mayer" è possibile digitare "M%yer".

Tuttavia inserendo ad esempio Ma% (e avendo a disposizione i dati di default di vtiger), non ottengo alcun risultato (sebbene ci siano contatti che iniziano con Ma). Non credo quindi sia fattibile quanto scritto nel manuale, alla luce anche di come è strutturata la funzione deputata al controllo del valore di query_string passata alla funzione seguente in include > utils > utils.php:

function formatForSqlLike($str, $flag=0) {
if (isset($str)) {
$str = str_replace('%', '\%', $str);
$str = str_replace('_', '\_', $str);

if ($flag == 0) {
$str = '%'. $str .'%';
} elseif ($flag == 1) {
$str = '%'. $str;
} elseif ($flag == 2) {
$str = $str .'%';
}
}
return mysql_real_escape_string($str);
}

Tuttavia è possibile impostare il flag a 2 di modo che sia possibile ricercare le parole che iniziano in un certo modo e rendere più efficace la ricerca di oggetti nel CRM.

Riparare il Tom Tom GO 520

Premessa

Nel mio caso specifico, il dispositivo non rispondeva più correttamente ai comandi: prendeva male gli input via touchscreen, passava continuamente dalla schermata con le istruzioni stradali al menu principale e via discorrendo.

Quanto riportato in questo post riprende la mia esperienza personale con il customer care di Tom Tom.

Soluzione 1: reset del dispositivo

Una prima possibile soluzione ai problemi con TomTom GO 520 (che cito per pura informazione perchè potrebbe risolvere i problemi altrui) potrebbe essere quella di effettuare un reset del dispositivo. E' sufficiente che usiate qualcosa di sottile per premere il punto giusto alla base del TomTom per 15 secondi:

1310gox20

Il dispositivo rimarrà spento. Dopo di che provate a premere il pulsante di accensione in alto a destra per 5 secondi.

Nel mio caso specifico, non ha risolto del tutto il mio problema, poichè TomTom durante l'arco di una mezz'ora di guida passava dalla schermata con le istruzioni a video al menu principale almeno 4 0 5 volte.

Soluzione 2: formattazione completa

1 Fase – Backup manuale.

  • Connettere il dispositivo al computer tramite cavo USB e accenderlo. Windows rileverà TomTom e monterà il dispositivo in risorse del computer.
  • Accedere a risorse del computer.
  • Assicurarsi che nel computer sia attiva l’opzione “Mostra i file nascosti” da 'Strumenti> Opzioni Cartella> Visualizza' e selezionare tutti i files e le cartelle.
  • Copiare tutte le cartelle presenti all’interno del disco rimovibile TomTom in una nuova cartella predefinita sul desktop del suo computer chiamandola ad esempio “Backup”.
  • Se durante la procedura di backup dovessero sorgere dei messaggi di errore, segnalarli all'assitenza specificando i passi intrapresi e i difetti del dispositivo.

2 Fase - Formattare il dispositivo TomTom.

  • Accedere a risorse del computer.
  • Selezionare con il tasto destro del mouse l'icona che riconosce il TomTom come disco rimovibile e scegliere l'opzione "Formatta". Scegliere come file system "FAT 32".

3 Fase - Ripristinare le cartelle nel dispositivo TomTom.

  • Terminata la formattazione, dalla cartella di "backup" selezionare le seguenti cartelle e copiarle ed incollarle nuovamente nel dispositivo:
    - Cartella della mappa ( nominata ad esempio: Italia, Western Europe, etc...);
    - Voices: contiene le voci personalizzate e quelle che avete creato.
    - Loquendo (solo nel caso in cui il vostro TomTom disponga anche di voci "Sintetiche").
    - ASR

4 Fase - Installazione dell’applicazione software.

  • Accedere alla cartella "Documenti" > TomTom > Home > "Download" e cancellarla.
  • Avviare TomTom Home.
  • Home recupererà automaticamente degli aggiornamenti tra cui un "TomTom application".
  • Procedere all'installazione degli aggiornamenti proposti.
  • Appena la procedura di installazione è terminata disconnettere il dispositivo TomTom da "Disconnetti (in alto a sinistra della pagina di TomTom HOME) > Disconnetti dispositivo".
  • Scollegare il cavo Usb.
  • Il TomTom dovrebbe ora funzionare regolarmente.

Soluzione 3: riparazione del dispositivo


Poichè nel mio caso nessuna delle soluzioni precedenti aveva risolto il problema, l'ho segnalato al customer care di TomTom aprendo un ticket sul sito www.tomtom.com.

L'assistenza vi aprirà una pratica in cui dovrete specificare i vostri dati e l'indirizzo di ritiro e recapito del pacco.
Ecco alcune note importanti:

  • comprate una scatoletta di cartone, un foglio pluriball (polietilene a bolle d'aria) e una bustina di plastica per la lettera di vettura da applicare sul pacco. Se siete dalle parti di Pisa, potete trovare tutto quello che vi serve da Pisanpack;
  • Inserite nel pacco SOLO ED ESCLUSIVAMENTE quanto richiesto dall'assistenza (quindi se vi indicano solo il TomTom non inserite cavi, basi di alimentazione o la scatola del prodotto);
  • Scrivete su un foglietto da inserire nella bustina di plastica da applicare sul pacco il vostro indirizzo e quello di destinazione (il numero di pratica ve lo fornisce l'assistenza di TomTom):
  • TT c/o ComServe Network (numero_pratica)
    Ruwekampweg 11
    5222 AT, Den Bosch
    The Netherlands
  • telefonate alla DHL (199 199 345) e mettetevi d'accordo per il ritiro del pacco. NON DOVRETE PAGARE NULLA, ritiro e recapito sono a carico di TomTom, ad ogni modo se il prodotto non è più in garanzia, dovrete ovviamente pagarne le spese;
  • TomTom vi comunicherà via e-mail quando il pacco è stato consegnato per la riparazione e potrete tracciare il pacco registrandovi sul sito della UPS e indicando il numero di tracciamento fornito da TomTom.

Nell'arco di 5 giorni lavorativi il TomTom ritornerà da voi finalmente funzionante, con una lettera d'accompagnamento che vi informerà se è stato riparato oppure se è stato sotituito.

[Fun] Distinguersi dalla massa

Le tag cloud di vTiger

vTiger è un noto CRM open source basato sull'architettura LAMP/WAMP (Linux/Windows, Apache, MySQL e PHP).
Ultimamente mi sto leggendo la documentazione presente su un sito tedesco e sono arrivato alla parte relativa alla tag cloud.
Le tag cloud in vTiger sono uno strumento molto utile: è possibile taggare qualsiasi oggetto all'interno del CRM (un contatto, un'azienda, un preventivo, ecc) e tali tag vengono mostrati nella home page personalizzata.

La tag cloud è privata e un utente può decidere di disabilitarla semplicemente andando a modificare le proprie preferenze cliccando sul collegamento in alto a destra.
Tuttavia ci sono alcune pecche:

  • non è possibile (via GUI) condividere la propria tag cloud con altri utenti o vedere una tag cloud "globale";
  • non è possibile gestire i tag direttamente dalla home page: bisogna ricordarsi per quali oggetti si è impostato il tag e rimuoverlo dalla vista dei dettagli "DetailView" sulla destra (al passaggio del mouse sopra un tag compare una "x" che una volta cliccata rimuove il tag);
  • sembrano esserci problemi relativi alle dimensioni dei tag (da quanto ho letto sul forum di vTiger): quelli che hanno maggiori collegamenti potrebbero scavalcare i tag più piccoli, impedendone la selezione;

Dettagli tecnici

Le funzioni relative alla tag cloud sono gestite dalla classe freetag, presente al percorso vtiger_root > include > freetag > freetag.class.php. Per quanto riguarda le tabelle che la gestiscono, queste sono vtiger_freetagged_objects, che mantiene l'associazione tra i tag e i relativi oggetti, e vtiger_freetags che contiene i tag.
Nel caso si volesse disabilitare le tag clouds per tutti gli utenti del CRM, è sufficiente la seguente query:

UPDATE vtiger_users SET tagcloud_view = 0

Byte Strike Blog - Designed by Posicionamiento Web | Bloggerized by GosuBlogger