Posted in JavaScript

DateRangePicker: change language strings

In order to show italian strings into Date Range Picker component (sample here):

a. Create a locale json object


    // Imposta la lingua italiana per il componente del calendario (daterangepicker di Bootstrap)
    var italian_daterangepicker = {
        "direction": "ltr",
        "format": "DD/MM/YYYY",
        "separator": " - ",
        "applyLabel": "Applica",
        "cancelLabel": "Annulla",
        "fromLabel": "Da",
        "toLabel": "A",
        "customRangeLabel": "Personalizzata",
        "daysOfWeek": [
            "Do",
            "Lu",
            "Ma",
            "Me",
            "Gi",
            "Ve",
            "Sa"
        ],
        "monthNames": [
            "Gennaio",
            "Febbraio",
            "Marzo",
            "April",
            "Maggio",
            "Giugno",
            "Luglio",
            "Agosto",
            "Settembre",
            "Ottobre",
            "Novembre",
            "Dicembre"
        ],
        "firstDay": 1
    };

b. Use locale object


$('#my_input_text_id').daterangepicker({
	locale : italian_daterangepicker,
	singleDatePicker: true,
}, function (dt1, dt2) {
	// Using moment js
	var start = dt1.format('YYYY-MM-DD');
});

Now your component is ready to show italian strings. Well done!

Posted in Utility

Dukto – an intranet app

I’ve discovered Dukto R6 on http://www.msec.it/blog/?page_id=11 – a cross-platform software to transfer files, clipboard text and folder between PCs and devices in a single LAN.

UI is similar to Windows 8 design. But you peek on GitHub https://github.com/guilhem/dukto you can easily clone the code and see an amazing thing for a developer:

– Dukto is a C++ software
– it uses QML as interface language
– it parses QML files (written in a JSON format)
– it works on MAC, linux and Windows
– files transfers are so quick

Posted in PHP, wordpress

Wordcamp 2013

I miei appunti del Wordcamp 2013 (9 feb 2013), una bellissima esperienza di condivisione.

* Temi e framework

– Genesis e Thesis sono strutture – a pagamento – su cui costruire dei Temi.

– Bootstrap: framework frontend

– “Zurb Foundation” ottimo per protoripi e pronto per la produzione. Griglia 12 colonne su cui lavorare. Utile per creare i temi. Usa SASS / Compass e si puó lavorare con Ruby:

$ gem install ..

$ compass ..

– SASS permette di applicare l’OOP ai CSS, container vs contanet, nidificazione, mixin

* Sicurezza e comandi

– WPScan, tool di sicrezza su linux che cerca exploit in base allo storico degli Advisory pubblicati dalla comunitá

– BeFf per testare vulnerabilitá

wp_nonce_field() nei form per evitare le Cross request

$wpdb->prepare() per evitare sql-injection

wp_handle_sideload( .. )
wp_handle_sideload

wp_get_image_editor()

wp_parse_args()

__() __e() __n() // per i plurali

define(‘WP_DEBUG’, true);

In produzione:
define(‘WP_DEBUG’, false);
define(‘WP_DEBUG’_LOG, true);

$error = new WP_Error( .. )
if (isset($error) && is_wp_error( $error )) { .. }

site_url()
home_url()
plugins_url(‘a.php’, __FILE__)
define(‘MY_PLUGIN_URL’, dirname( __FILE__ )) // nel bootstrap

* Oltre

– wp-cli
Command line interface

– wpshell:
altra command line interface piú potente

– Phing

– “Debug Bar”, “Debug Bar Extender”, “Debug Bar Console” (plugin di sviluppo)

– progetto “jobs system” per i deferred works, evitare di caricare il thread sulla UI principale.

* Cache

Plugin per cache fullpage, per utenti non loggati e non autenticati:
– WP-SuperCache
– batcache
– w3 total cache

Plugin per la cache degli oggetti:
– wp total cache
– wp file cache
– apc
– memcached object cache

* MySQL

– Tuning molto importante, se aumenti la RAM di una macchina devi poi configurare anche l’engine di MySQL in maniera coerente.

– Read Replica: metodo semplice per scalare su MySQL, uno é il master, gli altri gli slave in sola lettura.

* PHP

– PUG php user group di torino http://torino.grusp.org

* Riferimenti

[1] Sito ufficiale del Wordcamp
http://2013.bologna.wordcamp.org

[2] Differenze tra LESS e SASS
http://coding.smashingmagazine.com/2011/09/09/an-introduction-to-less-and-comparison-to-sass/

[3] less.app per MAC
http://incident57.com/less/

[4] WPScan
http://wpscan.org

[5] BEef – Browser Exploitation Framework
http://www.bindshell.net/tools/beef.html
http://beefproject.com/

 

Posted in Android, python

Android and Importing Contacts

Goal of the tutorial: “import contacts from a text file to an Android > 2.2

Follow these steps:

– Create a plain text file with all your contacts in this format:

name
number
name
number
etc..

– Use the Python script decribed to generate a .vcf file containing multiple VCF contact items.

– Turn on your Android device but first remove the SIM Card. If you don’t remove SIM Card.

– Put generated .vcf file into SDCARD, go to the Contacts list on the phone > Settings > Import from SDCARD
(note: if you don’t remove SIM Card the option will be “Import from SIM Card”)

This is the Python script you can use to convert the plain text file into cumulative .vcf file:


# Open the plain text file and load all content into memory
linestring = open('plain_text_contact_list.txt', 'r').read()
lines = linestring.split('\n')

# VCF format
fmt = """
BEGIN:VCARD
VERSION:2.1
N:%NOME_COGNOME%
FN:%NOME_COGNOME%
TEL;CELL:%NUM%
END:VCARD
"""

# Loop onto the contact list to create a single vcf file
export = ""
i=0
while i < len(lines)-1:
  print( "linea ", i)
  nome = lines[i]
  num = lines[i+1]
  contact = fmt.replace('%NOME_COGNOME%', nome)
  contact = contact.replace('%NUM%', num)
  i += 2
  export += contact

# File saving
out_file = open("generate_file_for_android.vcf","w")
out_file.write(export)
out_file.close()

A good Python language reference: http://rgruet.free.fr/PQR26/PQR2.6.html [^]

Posted in Android

AsyncTask in Android

Incollo di seguito la mail di Giuseppe Migliore, dove spiega come annullare un task asincrono in corso e cancellare la progress dialog:

“..Quindi, per chi volesse leggere 😀 , condivido quanto ho imparato oggi pom, riassumendo e sperando di essere il più chiaro possibile

E’ possibile invocare su un oggetto AsyncTask il metodo “cancel(boolean mayInterruptIfRunning)”

Questa chiamata fa si che il thread del “doInBackground” non parta proprio nel caso l’asyncTask è ancora fermo nella coda, o viceversa lo segna come cancellato; però se vogliamo EFFETTIVAMENTE che il lavoro che stavamo facendo nel doInBackground venga fermato bisogna controllare (direttamente nel doInBackground) con la chiamata “isCancelled()” e mettere ad esempio un break, o annullare variabili, o fare quello che cacchio serve. La certezza è che il metodo “onPostExecute” non viene mai eseguito!

(dalla documentazione: “Calling this method – stiamo parlando di cancel(boolean) – will result in onCancelled(Object) being invoked on the UI thread after doInBackground(Object[]) returns. Calling this method guarantees that onPostExecute(Object) is never invoked. After invoking this method, you should check the value returned by isCancelled() periodically from doInBackground(Object[]) to finish the task as early as possible.”)

Quindi non è che la chiamata “cancel” fermi il thread in esecuzione come pensavo all’inizio, ma dal momento in cui si è fatta la chiamata, se voglio effettivamente prendere provvedimenti allora lo faccio controllando il valore di ritorno della “isCancelled”
(esempio: il mio doInBackground fa un while(true), però ad ogni iterazione controllo if(isCancelled()) break )

In conclusione la cosa importante per me è che il postExecute non venga mai eseguito.

🙂 Dopo questo sproloquio, probabilmente inutile e confusionario, vi illustro i “pattern” che sto usando, e magari se ritenete opportuno/comodo potete fare cosi anche voi 🙂

1) le funzioni sincrone di libreria le eseguo in un AsyncTask

2) tutte le dialog di cui ho bisogno (che siano progressDialog o di altro tipo) le lascio gestire al sistema facendo l’overriding di “onCreateDialog” e “onPrepareDialog”

Quindi lancio il mio simpatico AsyncTask, nel suo “onPreExecute” mostro la progressDialog, ed in “onPostExecute” ne faccio il dismiss  e successivamente tutte le altre operazioni che mi servono. TUTTO QUI!

Spesso capita che debba fare una catena di chiamate ….quindi lancio un asyncTask, e nel suo onPostExecute ne lancio un altro, e cosi via…  in questo caso la progressDialog la si mostra all’inizio e la si dimette alla fine della catena di chiamate.. eventualmente è possibile cambiare durante i vari step il messaggio da mostrare..

Tornando a noi, l’ utente che avvia una operazione e si stufa di una ProgressDialog con il messaggio “attendere” che dura troppo a causa di ritardi di rete (per poter fare le mie prove ho messo in ogni asyncTask una sleep di x secondi) preme back (o tocca all’esterno della mia progress) per cancellarla;  tutto ok, la cancella e l’utente riprende il controllo; a questo punto interviene l’onDismissListener al quale faccio invocare il famoso “cancel(true)” di cui sopra sulla istanza di AsyncTask che in quel momento è in corso, e cosi sono sicuro che il postExecute non venga eseguito, interrompendo la eventuale catena di chiamate ad altri asyncTask.

Inoltre se ci sono casi in cui l’utente (..o la scimmietta che farà il test di stress) non può annullare l’operazione (nel mio caso la fase di acquisto di un contenuto), nel corrispondente asyncTask.onPreExecute rendo la dialog non cancellabile, e nell’onPostExecute la rendo nuovamente cancellabile..”

Posted in LAMP

MySQL e Script di Import Pesanti

Obiettivo:

Lo script SQL da importare in mysql è troppo pesante in termini di dimensioni. PhpMyAdmin non riesce a caricarlo perchè la connessione va in Timeout.

Soluzione:

  1. Usare XAMPP
  2. aggiornare il config di phpmyadmin con questa riga:
    $cfg[‘UploadDir’] = ‘./upload’;
  3. nella folder [c:\xampp\phpmyadmin\upload] incollare lo script da importare nel db
  4. aprire la pagina di phpmyadmin
  5. andare nella schermata di Import
  6. Compare quindi un’opzione aggiuntiva: ovvero la possibilità di importare i dati dallo script già presente nella folder upload su Filesystem

Posted in Apple, mobile

1 Tip about JavaScript and iPad

I’m developing on HTML for mobile devices.

Safari and Apple devices offer a wide range of features of UI interactivity (transitions, gestures..).

Question: Can I use OOP in JavaScript to manage gestures and runtime resize of images?

Answer #1: No, because browser’s performance cannot perform – in a nicely way – all operations (scale, rotation and translation) if there are objects in JavaScript.

Answer #2: I use .addEventListener() directly on the specific element for the event management and NOT jQuery new .on(..) method.

Posted in Silverlight

StackPanel e Click Event – Microsoft Silverlight

Silverlight  4

Alcune volte è utile gestire l’evento di Click su un intero StackPanel.

Un link [1] utile dove spiega che è necessario impostare

<StackPanel Backround="Transparent" .. />

Per poter catturare gli eventi click sull’oggetto StackPanel.

[1] Ivan Dragoev e l’evento Click sullo StackPanel http://www.silverlightshow.net/items/Tip-Force-firing-MouseLeftButtonDown-event-on-any-place-in-a-StackPanel.aspx