developer

Javascript: normalizzazione stringhe con caratteri testuali non-ASCII

javascript

Al giorno d'oggi nei testi online capita a volte di trovare delle frasi scritte con dei caratteri non standard, che assomigliano alle normali lettere dell'alfabeto ma magari con degli "effetti" sopra (sono già in bold, o italico...). Sono caratteri UTF-8 estesi fuori dal set ASCII, e che a volte possono non essere ben digeriti da alcuni sistemi. Questo stesso blog (per questioni di codifica del db) non mi permette di inserirli. Per capire quali sono, metto un allegato con una frase scritta completamente con caratteri estesi.
Se avete la necessità di traslitterare la frase, in javascript, in modo da trasformare ogni carattere in quello standard mantenendo quindi la frase leggibile, potete usare il metodo dell'oggetto String .normalize("NFKC").

"stringa non standard".normalize("NFKC")

PHP: DOMDocument e UTF-8

php

Il modulo DOM di PHP contiene le funzionalità per manipolare gli oggetti dom: la classe radice è "DOMDocument", al quale può essere dato in pasto un testo in formato HTML o XML da decodificare e quindi elaborare come preferiamo.

Questa classe ha purtroppo dei noti problemi con il supporto a testi UTF-8 (e quando mai...).

Provate ad esempio questo codice, che in teoria non dovrebbe fare nulla (decodifica la stringa passata e la ricodifica senza farci nulla).

$content = '<html><body>Verrà il giorno che non ci saranno problemi di encoding</body></html>';
$document = new \DOMDocument('1.0');
$document->loadHTML($content);
$out = $document->saveHTML();

LDD: Capire quali librerie vengono richieste da un programma (o altra libreria)

linux

Può capitare di eseguire un programma che non parte per la mancanza di qualche libreria condivisa, ma magari l'errore mostrato non è sufficientemente chiaro da permetterci di capire quale dipendenza manca. Oppure capiamo quale libreria è cercata, e ci risulta installata, ma il programma riporta comunque errore (Situazione che capita in genere quando usiamo software scaricati già compilati).

Per avere un elenco delle librerie richieste e dove vengono cercate/trovate (o se non sono trovate) è sufficiente usare il comando LDD

ldd [file binario o libreria]
LD_LIBRARY_PATH=mypath/lib ldd lib_test.so

Drupal 7: Aggiungere dei campi calcolati a una entità

drupal

Caso d'uso: state creando un modulo che deve aggiungere dei campi visibili a una entità. Il valore di questi campi è generato dal modulo stesso, e volete che questi campi fittizi siano visti nella pagina "Gestisci visualizzazione" dell'entità in modo da poter definire l'ordinamento, e in generale il layout, della visualizzazione in maniera tradizionale.

Per fare questo dovete usare l'hook hook_field_extra_fields (o l'analogo hook_field_extra_fields_alter).

https://api.drupal.org/api/drupal/modules!field!field.api.php/function/hook_field_extra_fields/7

Drupal: Gestione semplificata invio mail

drupal

In Drupal 7 la gestione mail è flessibile, ma anche un tantino complicata. Sotto una sistema per semplificare l'invio di mail, con alcune features:

  • permette di impostare gli headers velocemente in $params['headers']
  • permette di inviare mail HTML semplicemente impostando l'header Content-Type: text/html [...]

Questo il codice da inserire in un vostro modulo (oppure dentro settings.php):

[php]

Url per la condivisione su facebook

facebook

Problema: vogliamo creare un pulsante o un link per permettere la condivisione su facebook di una pagina web, ma non vogliamo usare i social plugin di facebook (con relativi javascript/iframe/amenità varie da inserire nella pagina). Vogliamo fare un semplice link, senza tanti fronzoli...

Il metodo più semplice, che funziona da una vita e che, nonostante non sia più documento e supportato da Facebook, funziona ancora oggi è questo url:

http://www.facebook.com/sharer.php?u=INDIRIZZO
 
Esempio:
 
<a href="http://www.facebook.com/sharer.php?u=http://myhq.it">Condividi</a>

Caricare una libreria javascript esterna senza bloccare il browser (lazy loading)

javascript

Se abbiamo bisogno di creare un "widget" javascript da inserire in una pagina di un sito esterno, o in generale se desideriamo essere sicuri al 100% che il caricamento di una libreria javascript non rallenti il loading della pagina (ma venga effettuato realmente DOPO il rendering completo della pagina), occorre usare delle tecniche di lazy loading. Con HTML5 è possibile specificare il tag "async" all'elemento <script>, ma non è ancora supportato da tutti i browser, e anche quando lo è ha lo spiacevole incoveniente di bloccare comunque l'esecuzione dell'evento "onload" della pagina.

Occorre quindi usare un pattern più elaborato. Dopo diverse prove il sistema che preferisco è questo:

Javascript: Rilevare il supporto touch del browser

javascript

Il metodo migliore per sapere se l'utente che sta navigando il nostro sito ha un dispositivo touch o meno è usare l'ottima libreria Modernizr (http://modernizr.com), che permette di rilevare parecchie feature di nuova generazione supportate dal browser.

Se ci interessa solo la rilevazione del touch e non vogliamo mettere tutta la libreria (nonostante sia molto piccola e può essere scaricata anche solo con le sezioni che interessano) potete usare il javascript sotto.

Comunque supportate Modernizr!

[javascript]

/* Based on http://modernizr.com */

ADB e errore "no permissions"

android

Se colleghiamo il nostro dispositivo android tramite USB, e se l'opzione "Debug USB" è attivata è possibile interagire con lo smartphone per eseguire vari comandi amministrativi tramite il programma "adb".

E' possibile però che appena adb cerca di connettersi al telefono arrivi l'errore "no permissions".

Un metodo per verificarlo è eseguire il comando:

adb devices

Se il risultato riporta qualcosa del tipo:

List of devices attached 
????????????    no permissions

Significa che adb non ha i permessi sufficienti per accedere via USB al dispositivo.

First Date: Kdevelop

kde

Versione testata: Kdevelop 4.2, KDE 4.7.4, Arch linux su Linux 3.1.8

Nota: uso prevalmente per sviluppo applicazioni PHP/Drupal