mercoledì 19 agosto 2015
Errore collect2.exe: error: ld returned 5 Arduino IDE
Su Arduino IDE 1.6.5 per Windows XP (non ho provato sulle altre piattaforme) in fase di compilazione di un codice leggittimo (che si compilava in precedenza) viene generato il seguente errore
collect2.exe: error: ld returned 5 exit status
Errore durante la compilazione
dopo un po' di prove ho scoperto che la riga incriminata che genera l'errore e' relativa all'istruzione delay (commentata la riga tutto funziona). Non ho trovato soluzione se non installare una versione piu' vecchia dell'IDE
martedì 18 agosto 2015
NFC Mifare e Nexus
Un paio di anni fa mi ero interessato all'uso degli Rfid su Android per un progetto che non e' mai partito ed allo scopo avevo comprato un centinaio di tag solo leggibili ed un tag riscrivibile in formato Mifare Classic 1K (con una memoria di 1024 byte, un po' costoso all'epoca devo ammettere)
Le prove le avevo eseguite con il Nexus S che era all'epoca il telefono di sviluppo
Ho ripreso in mano il progetto per un nuovo possibile utilizzo stavolta utilizzando il Nexus 4.
Con mia sorpresa ho scoperto che il sensore di N4 non ha compatiblita' con il formato Mifare Classic 1K ed ho dovuto ordinare dei nuovi tag Ntag 203 (che dovrebbero essere universali)
NFC e' sempre rimasto un aspetto marginale di Android e di sicuro continuera' ad esserlo se non vengono definiti degli standard stabili nel tempo
Le prove le avevo eseguite con il Nexus S che era all'epoca il telefono di sviluppo
A sinistra Nexus 4, al centro Mifare Classic ed a destra Nexus S |
Con mia sorpresa ho scoperto che il sensore di N4 non ha compatiblita' con il formato Mifare Classic 1K ed ho dovuto ordinare dei nuovi tag Ntag 203 (che dovrebbero essere universali)
NFC e' sempre rimasto un aspetto marginale di Android e di sicuro continuera' ad esserlo se non vengono definiti degli standard stabili nel tempo
lunedì 17 agosto 2015
Salvare pagine html on line per rassegna stampa
Uno dei problemi che si incontrano quando si cercano di salvare pagine html sui vari siti (per esempio per creare una rassegna stampa) e' che la qualita' del risultato e' sempre scarsina, qualunque sia il formato di salvataggio
Per esempio partiamo da uno screenshot di una notizia sulla recensione della mia applicazione Abetone Trail Park
se si salva il contenuto in pdf mediante Chrome il risultato e' questo
Per esempio partiamo da uno screenshot di una notizia sulla recensione della mia applicazione Abetone Trail Park
se si salva il contenuto in pdf mediante Chrome il risultato e' questo
Il tutto e' ovviamente non impaginato
Ho trovato utile usare il software Paparazzi, che riporta una impaginazione decisamente fedele del sito desiderato
venerdì 14 agosto 2015
Musescore e Songbook
Desktop
La versione desktop del programma puo' essere scaricata all'indirizzo https://musescore.org/it,e' opensource e multipiattaforma con sorgenti disponibili
Creando un nuovo spartito (File/Nuovo) viene chiesto il titolo, l'autore, lo o gli strumenti da usare, l'armatura di chiave,l'unita' di tempo (3/4, 4/4 per esempio) ed il numero di battute
Per inserire le note (modalita' di edit) si preme il tasto N oppure l'icona
Le note possono essere inserite dopo aver cliccato nella barra seguente indicando la durata direttamente posizionandole sul pentragramma
per inserire una pausa si entra in modalita' edit, si seleziona la lunghezza della nota e poi si clicca
Attenzione : il programma in corso d'opera cerchera' di far sempre tornare la lunghezza della battuta. Per esempio se si ha una battuta in 4/4 e si e' aggiunta nota (per esempio una minima 1/2) aggiustera' il resto della battuta con una pausa di minima (1/2)
Per aggiungere elementi quali Articolazioni ed Abbellimenti (come staccati, crescenti ed altro) si deve uscire dalla modalita' edit (N) e si trascina l'elemento sulla nota interessata (cosi' come per le alterazioni non in chiave)
In automatico Musescore tende a raggruppare le note (per esempio di solito raggruppa le crome a due a due) . Se non si e' soddisfatti si puo' usare in Tavolozze i comandi Proprieta' Gruppo note. Per raggruppare per esempio di clicca la seconda icona da sinistra nella file in alto e si trascina sulla seconda nota tra quelle che si devono raggruppare
E' possibile effettuare la trasposizione automatica della tonalita' utilizzando il menu' Note/Trasporto
Per esempio dalla tonalita' originale in Do maggiore
a Sol Maggiore
Una volta completato lo spartito (od anche in corso d'opera) si puo' ascoltare il brano con i tasti
(il play corrisponde al tasto spazio sulla tastiera)
Musescore viene distribuito con una libreria di suoni midi. Se si vuole un suono migliore si puo' scaricare una libreria SF2 piu' avanzata come quella per esempio FluidR3 GM2-2.SF2 (144 Mb!!) reperibile qui e qui
Per installare la nuova libreria si devono aggiornare le Preferenze
ed in seguito Visualizza/Sintetizzatore/Aggiungi
(Curiosamente sono costretto ad impostare i suoni personalizzati ogni volta che apro il programma perche' si perdono le impostazioni)
Songbook
L'applicazione Musescore per Android ed IOS e' solo un player e visualizzatore dei file .mscz. Ne esistono due versioni: Musescore e' un programma che non permette di visualizzarea gli spartiti salvati sul proprio dispositivo portatile (ha quindi la necessita' del collegamento di rete per scaricare i dati dal sito di Musescore dopo aver fatto il login) e Songbook che permette di usare i propri file mscz.
Su Songbook non esiste la possibilta' di avere un file manager. Per aggiungere i propri spartiti si deve
- su Android con un file manager si clicca sul .mscz e si indica "Apri con" Musescore Songbook
- su IOS non e' possibile importare i dati mediante ITunes. Il sistema piu' semplice e' allegare i file degli spartiti anche una mail e poi "Apri con" l'allegato verso Musescore Songbook
Un paio di problemi:
- Solo su IOS l'applicazione portatile permette solo la modalita' portrait. Se si ruota lo schermo lo spartito non viene ridimensionato (su Android e' tutto a posto)
- Esistono solo il tasto Play ed il tasto Ritorna all'inizio. Su brani lunghi questa e' una notevole limitazione ed esiste un trucco non immediato. Si deve premere sulla nota da cui si vuole partire in modo prolungato fino a che non viene emesso il suono della nota. A questo punto si puo' premere Play e l'esecuzione inizia dal punto prescelto
giovedì 13 agosto 2015
OpenCL e Mandelbrot
Il calcolo dell'insieme di Mandelbrot e' forse uno dei casi piu' semplici in cui applicare il calcolo parallelo perche' l'elaborazione di ogni cella e' indipendente da quelle vicine.
Ai giorni d'oggi per effettuare il calcolo parallelo, invece di usare un cluster di computer, si possono usare i diversi core del processore oppure usare la scheda grafica con la sua GPU (mediante le librerie CUDA di NVidia o le piu' generiche OpenCL che possono girare su AMD, NVidia e Intel)
La strategia utilizzata in CUDA e OpenCL e' piu' o meno la stessa ovvero si scrive il codice di un kernel, ovvero della elaborazione che verra' eseguita su ogni unita' di elaborazione, e poi il codice che gestisce la coda dei processi e la distribuzione alle varie unita' di elaborazione
Un esempio di kernel per Mandelbrot e' il seguente
-------------------------------------------------------------------
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
double trans_x(int x, int N)
{
return 3.0 * ((double)x / N) - 2.0;
}
double trans_y(int y, int N)
{
return 3.0 * ((double)y / N) - 1.5;
}
double mag2(double r, double i)
{
return r * r + i * i;
}
__kernel void mandel(__global double* out, int N, int depth, double escape2)
{
size_t idx = get_global_id(0);
double z0_r = trans_x(idx % N, N);
double z0_i = trans_y(idx / N, N);
double z_r = 0;
double z_i = 0;
int k = 0;
for(; k <= depth && mag2(z_r, z_i) < escape2 ; ++k)
{
double t_r = z_r; double t_i = z_i;
z_r = t_r * t_r - t_i * t_i + z0_r;
z_i = 2 * t_r * t_i + z0_i;
}
out[idx] = log(k + 1.0 - log(log(max(mag2(z_r, z_i), escape2)) / 2.0) / log(2.0));
}
-------------------------------------------------------------------
Per mettere alla prova quanto vantaggio c'e' nell'usare OpenCL per il calcolo di Mandelbrot ho usato un portatile Surface Pro 2 con scheda video Intel HD 4400 ed il programma reperibile a questo link.
Come test ho provato il Miniset level 2 (1000 iterazioni per punto) con i seguenti risultati
- C float, single thread :1.71 s
- C float, 4 thread : 0.61 s
- C float, 8 thread : 0.59 s
- C fixed-point 128 bit 2 thread : 22.5 s
- OpenCl CPU float : 0.36 s
- OpenCL CPU double : 0.4 s
- OpenCL GPU float : 0.096 s
Ai giorni d'oggi per effettuare il calcolo parallelo, invece di usare un cluster di computer, si possono usare i diversi core del processore oppure usare la scheda grafica con la sua GPU (mediante le librerie CUDA di NVidia o le piu' generiche OpenCL che possono girare su AMD, NVidia e Intel)
La strategia utilizzata in CUDA e OpenCL e' piu' o meno la stessa ovvero si scrive il codice di un kernel, ovvero della elaborazione che verra' eseguita su ogni unita' di elaborazione, e poi il codice che gestisce la coda dei processi e la distribuzione alle varie unita' di elaborazione
Un esempio di kernel per Mandelbrot e' il seguente
-------------------------------------------------------------------
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
double trans_x(int x, int N)
{
return 3.0 * ((double)x / N) - 2.0;
}
double trans_y(int y, int N)
{
return 3.0 * ((double)y / N) - 1.5;
}
double mag2(double r, double i)
{
return r * r + i * i;
}
__kernel void mandel(__global double* out, int N, int depth, double escape2)
{
size_t idx = get_global_id(0);
double z0_r = trans_x(idx % N, N);
double z0_i = trans_y(idx / N, N);
double z_r = 0;
double z_i = 0;
int k = 0;
for(; k <= depth && mag2(z_r, z_i) < escape2 ; ++k)
{
double t_r = z_r; double t_i = z_i;
z_r = t_r * t_r - t_i * t_i + z0_r;
z_i = 2 * t_r * t_i + z0_i;
}
out[idx] = log(k + 1.0 - log(log(max(mag2(z_r, z_i), escape2)) / 2.0) / log(2.0));
}
Per mettere alla prova quanto vantaggio c'e' nell'usare OpenCL per il calcolo di Mandelbrot ho usato un portatile Surface Pro 2 con scheda video Intel HD 4400 ed il programma reperibile a questo link.
Come test ho provato il Miniset level 2 (1000 iterazioni per punto) con i seguenti risultati
- C float, single thread :1.71 s
- C float, 4 thread : 0.61 s
- C float, 8 thread : 0.59 s
- C fixed-point 128 bit 2 thread : 22.5 s
- OpenCl CPU float : 0.36 s
- OpenCL CPU double : 0.4 s
- OpenCL GPU float : 0.096 s
mercoledì 12 agosto 2015
Hyper-V e Virtualbox
Da quando ho installato l'SDK di Windows Phone (e l'annesso emulatore) ho avuto la sgradita sorpresa che Virtualbox (cosi' come WMWare) non risultano piu' funzionanti perche' e' possibile avere in esecuzione un solo hypervisor per volta...peccato che a me serva anche una Linux box anche se virtualizzata
La soluzione del problema e' questa (copiata da qui):
1) Si clicca Tasto Windows+X e si apre una finestra di shell come amministratore
2) Si digita bcdedit /copy {current} /d "No Hyper-V".Questo comando riporta come risposta una stringa tra parentesi graffe. Il testo tra le graffe deve essere copiato perche' sara' utile per il comando successivo
3) Si digita bcdedit /set {inserire_qui_codice_copiato} hypervisorlaunchtype off
4) A questo punto si effettua il logout e si, tenendo premuto il tasto SHIFT, si clicca con il mouse per riavviare il sistema
5) Al reboot sara' presente una nuova opzione (non di default) di boot No Hyper-V che dovra' essere usata se si vuole successivamente impiegare Virtualbox od altro software di virtualizzazione
La soluzione del problema e' questa (copiata da qui):
1) Si clicca Tasto Windows+X e si apre una finestra di shell come amministratore
2) Si digita bcdedit /copy {current} /d "No Hyper-V".Questo comando riporta come risposta una stringa tra parentesi graffe. Il testo tra le graffe deve essere copiato perche' sara' utile per il comando successivo
3) Si digita bcdedit /set {inserire_qui_codice_copiato} hypervisorlaunchtype off
4) A questo punto si effettua il logout e si, tenendo premuto il tasto SHIFT, si clicca con il mouse per riavviare il sistema
5) Al reboot sara' presente una nuova opzione (non di default) di boot No Hyper-V che dovra' essere usata se si vuole successivamente impiegare Virtualbox od altro software di virtualizzazione
lunedì 10 agosto 2015
Abetone Trail Park sulla stampa
Abetone Trail Park e' la mia ultima applicazione ed e' riuscita a ritagliarsi anche un suo piccolo spazio sulla stampa locale
Sviluppata in PhoneGap ha come aspetto tecnico piu' significativo quello di avere una base cartografica per escursionismo completamente integrata senza la necessita' di scaricarla dalla rete (in montagna la connessione dati non e' assolutamente garantita)..un altro aspetto interessante e' che i 625 Kmq di cartografia, originariamente per circa 90Mb, sono riusciti a rientrare in 32 Mb (comprimendo i dati di base ed eliminando i livelli di zoom non di interesse)
In attesa del MarketPlace di Firefox (un po' lentino ad approvare le applicazioni) e di Amazon Store questi sono i link per scaricare l'applicazione
La Nazione ed. Pistoia 8 Agosto 2015 |
Il Tirreno ed. Pistoia 6 Agosto 2015 |
Sviluppata in PhoneGap ha come aspetto tecnico piu' significativo quello di avere una base cartografica per escursionismo completamente integrata senza la necessita' di scaricarla dalla rete (in montagna la connessione dati non e' assolutamente garantita)..un altro aspetto interessante e' che i 625 Kmq di cartografia, originariamente per circa 90Mb, sono riusciti a rientrare in 32 Mb (comprimendo i dati di base ed eliminando i livelli di zoom non di interesse)
In attesa del MarketPlace di Firefox (un po' lentino ad approvare le applicazioni) e di Amazon Store questi sono i link per scaricare l'applicazione
https://play.google.com/store/apps/details?id=com.lucainnocenti.abetonetrailpark&hl=it |
https://itunes.apple.com/us/app/abetone-trail-park/id1014602667?mt=8 |
https://www.microsoft.com/en-us/store/apps/abetone-trail-park/9nblggh1rdq7 |
Iscriviti a:
Post (Atom)
Change Detection with structural similarity
L'idea di base e' quella di cercare le differenze tra le due immagini sottostanti Non e' immediatamente visibile ma ci sono dei ...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...