Con l'andar del tempo e' sempre piu' semplice installare l'SDK di Android
E' da poco uscito l'ADT Bundle, un pacchetto piuttosto pesante (oltre i 400 Mb nelle sue varie versioni) che al suo interno contiene pero' una bella sorpresa
Una volta spacchettato il file ci troviamo con Eclipse, il plugin ADT e l'SDK di Android gia' pronti ad essere utilizzati senza ulteriori configurazioni e download. E' sufficiente entrare nella directory eclipse e lanciare l'ambiente di sviluppo con il comando
./eclipse
rimane solo da configurare un AVD e poi si puo' iniziare a sviluppare
martedì 15 gennaio 2013
Errore su punto di ingresso Qt4Core.dll
Una volta scritta e testata una applicazione in Qt su Windows ho voluto provare a fare una build release per provare a lanciare direttamente il file eseguibile dall'esterno dell'ambiente di sviluppo
Il risultato e' stato a dir poco scoraggiante "Impossibile trovare il punto di ingresso della procedura nella libreria a collegamento dinamico QtCore4.dll"
Dopo qualche ricerca su Internet ho trovato che il problema deriva dal fatto che il fatto eseguibile cerca di eseguire una Dll QtCore4 differente da quella con cui e' stato compilato all'interno dell'ambiente di sviluppo
Certo che imbroccare quale sia la libreria QtCore4.dll che crea confusione e quale sia l'ordine preciso con cui Windows elegge la prima della lista e' piuttosto problematico e non e' possibile tentare un approccio di tipo try and test (sospetto comunque che sia quella legata a Python)
Ovviamente questo problema non si presenta in Linux :>>>
Il risultato e' stato a dir poco scoraggiante "Impossibile trovare il punto di ingresso della procedura nella libreria a collegamento dinamico QtCore4.dll"
Dopo qualche ricerca su Internet ho trovato che il problema deriva dal fatto che il fatto eseguibile cerca di eseguire una Dll QtCore4 differente da quella con cui e' stato compilato all'interno dell'ambiente di sviluppo
Certo che imbroccare quale sia la libreria QtCore4.dll che crea confusione e quale sia l'ordine preciso con cui Windows elegge la prima della lista e' piuttosto problematico e non e' possibile tentare un approccio di tipo try and test (sospetto comunque che sia quella legata a Python)
![]() |
| Elenco delle librerie QtCore4.dll installate sul mio sistema |
Ovviamente questo problema non si presenta in Linux :>>>
Creare eseguibile da QT/QML
I programmi scritti in QtQuick sono visibili all'interno di Qmlviewer
C'e' pero' la possbilita' di creare delle applicazioni stand-alone creando una applicazione Qt che di fatto e' un viewer per QtQuick
questa procedura e' resa automatica all'interno di Qt SDK creando un Nuovo progetto e selezionando Qt Quick Application.
Viene cosi' creato in automatico un progetto che ha come funzione main la seguente
----------------------------------
----------------------------------
si vede chiaramente il funzionamento del programma e dove viene referenziato il file qml
C'e' pero' la possbilita' di creare delle applicazioni stand-alone creando una applicazione Qt che di fatto e' un viewer per QtQuick
questa procedura e' resa automatica all'interno di Qt SDK creando un Nuovo progetto e selezionando Qt Quick Application.
Al termine della procedura guidata viene chiesto di selezionare il file qml di interesse (o di crearne uno nuovo)
Viene cosi' creato in automatico un progetto che ha come funzione main la seguente
----------------------------------
#include <QtGui/QApplication>
#include "qmlapplicationviewer.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QmlApplicationViewer viewer;
viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
viewer.setMainQmlFile(QLatin1String("qml/gg/gg.qml"));
viewer.showExpanded();
return app.exec();
}
----------------------------------
si vede chiaramente il funzionamento del programma e dove viene referenziato il file qml
Montare SD Card su Linux
in alcuni casi il montaggio automatico di una SD Card su Linux non funziona
si procede quindi assicurandosi di avere il modulo installato mediante
modprobe mmc_block
a questo punto si inserisce la SD Card nel lettore e leggendo le ultime righe di /var/log/messages si deve trovare qualcosa del tipo
mmcblk0:mmc0:ebaf SR01G 945 MiB
mmcblk0: p1
in particolare si deve fare attenzione alla seconda riga
a questo punto
mkdir /media/sdcard
mount -t vfat /dev/mmcblk0p1 /media/sdcard
dove il nome del device e' composto dalla somma di mmcblk0 e p1 come indicato in /var/log/messages (ovviamente tali valori possono mutare a seconda delle impostazioni)
IBM X40
Mi sono comprato usato un IBM X40 2371-67U...ed ho violato la legge che dice di non comprare mai computer usati ma riceverli solo come regalo.
La spesa di 150 euro e' ridicola ai 2200 euro necessari nel 2004 per comprare la macchina nuova ma purtroppo il portatile e' molto rovinato dato che
Ho provato in prima istanza ad installare una CrunchBang, tutto e' andato a buon fine e tutto l'hardware e' stato riconosciuto al volo. Purtroppo i repository di CrunchBang non sono granche' ed in fondo se voglio una Debian e' bene che installi una Debian e poi la personalizzi
Quindi sono passato ad un Debian Testing con XFCE e sono ovviamente iniziati i problemi
La scheda di rete wireless, una Intel 2000 Pro, non e' configurata in fase di installazione a causa di firmware proprietari per cui dopo aver installato il sistema di devono aggiungere i repository contrib non-free e poi si aggiorna il sistema come segue
apt-get update
apt-get install firmware-ipw2x00
modprobe ipw2100
Una volta installato stranamente si e' spenta la retroilluminazione (che puo' essere riattivata con il tasto FN e Home ed End)
Per finire fighissima la combinazione FN+PgUp che accende una lucetta che illumina la tastiera per la scrittura al buio
La spesa di 150 euro e' ridicola ai 2200 euro necessari nel 2004 per comprare la macchina nuova ma purtroppo il portatile e' molto rovinato dato che
- ha battuto almeno una volta con lo spigolo anteriore destro
- connettendo l'alimentazione si sente un sinistro sibilo che scompare solo dopo aver aggeggiato sul connettore
- l'hard disk ha diversi settori rotti ed emette qualche click (si consideri che questa macchina utilizza dei quasi introvabili dischi da 1.8 pollici per cui la riparazione e' piuttosto difficile)
- lo schermo occasionalmente lampeggia
- la tastiera non e' italiana
- solo 512 Mb di Ram (mi e' stato venduto per un 1 Giga ma quando lo ho aperto e' risultato chiaro che non e' espandibile....256 Mb sono saldati alla scheda madre)
pero' cosa dire di
- uno schermo da 12.1 pollici con risoluzione XGA (dimensione praticamente perfetta)
- un peso di 1.2 Kg
- uno chassis con materiali al magnesio per aumentare resistenza e diminuire il peso
- una tastiera IBM e quindi fantastica
- una porta Ethernet da Gb ed un ingresso per SD Card (quando e' uscito era il 2004 e tale dotazione era letteralmente fantascienza)
- una durata della batteria di oltre 4 ore reali
- disco da 40 gb (un lusso all'epoca)
- Pentium M Centrino da 1.2 GHz (Cpu Family 6 Model 9 Stepping 5 1196 BogoMips)
Tra le curiosita' c'e' una porta speciale che assomiglia ad una USB per connettere un disco ottico esterno in formato proprietario
Ho provato in prima istanza ad installare una CrunchBang, tutto e' andato a buon fine e tutto l'hardware e' stato riconosciuto al volo. Purtroppo i repository di CrunchBang non sono granche' ed in fondo se voglio una Debian e' bene che installi una Debian e poi la personalizzi
Quindi sono passato ad un Debian Testing con XFCE e sono ovviamente iniziati i problemi
La scheda di rete wireless, una Intel 2000 Pro, non e' configurata in fase di installazione a causa di firmware proprietari per cui dopo aver installato il sistema di devono aggiungere i repository contrib non-free e poi si aggiorna il sistema come segue
apt-get update
apt-get install firmware-ipw2x00
modprobe ipw2100
Una volta installato stranamente si e' spenta la retroilluminazione (che puo' essere riattivata con il tasto FN e Home ed End)
Per finire fighissima la combinazione FN+PgUp che accende una lucetta che illumina la tastiera per la scrittura al buio
lunedì 14 gennaio 2013
Hacking IRig per Ipod Touch 2 Gen
Mi sono comprato su un sito cinese l'IRig, un connettore che permette di utilizzare l'Ipod Touch/IPhone come Stomp Box ed amplificatore per chitarra utilizzando il software Amplitube. L'affare era conveniente perche', spese di spedizione inclusa, il costo e' stato di circa 1/3 inferiore a quello di negozio
Il problema e' che una volta collegata al mio IPod Touch il software non riconosceva l'ingresso microfonico a cui e' attaccata di fatto la chitarra
Lasciata passare una notte di pensatoio ho inserito il jack di un auricolare di un telefono Samsung ed improvvisamente il software ha individuato il nuovo ingresso...era rotto l'IRig????
dal confronto della foto sottostante si vede che il jack dell'IRig (a sinistra) e dell'auricolare (a destra) sono differenti e considerando la curvatura dello chassis dell'Ipod Touch questo poteva dare qualche problema
Mi sono dotato quindi di un taglierino ed ho tagliato circa 3 mm di plastica al jack dell'IRig (fortunatamente la plastica e' di tipo morbido e quindi non ci sono stati problemi)
Una volta collegato l'IRig modificato all'Ipod Touch l'ingresso della chitarra viene riconosciuto con la richiesta se utilizzare le cuffie o lo speaker dell'Ipod
Ed ecco alla fine il tutto assemblato
![]() |
| IRig |
Lasciata passare una notte di pensatoio ho inserito il jack di un auricolare di un telefono Samsung ed improvvisamente il software ha individuato il nuovo ingresso...era rotto l'IRig????
dal confronto della foto sottostante si vede che il jack dell'IRig (a sinistra) e dell'auricolare (a destra) sono differenti e considerando la curvatura dello chassis dell'Ipod Touch questo poteva dare qualche problema
![]() |
| Confronto tra jack (notare la differente lunghezza della parte metallica) |
Una volta collegato l'IRig modificato all'Ipod Touch l'ingresso della chitarra viene riconosciuto con la richiesta se utilizzare le cuffie o lo speaker dell'Ipod
Ed ecco alla fine il tutto assemblato
All'interno di un IPod 5 Generazione
Mi e' stato regalato, ovviamente rotto, un Ipod Video 5 generazione (A1136) da 30 Gb peraltro gia' aperto da qualcuno nella speranza di capirci qualcosa
Ovviamente non emette segni di vita ad eccezione di un lampeggio al momento di connettere l'alimentazione.
E' comunque una occasione per vedere cosa c'e' dentro
La maggior parte dello spazio e' occupata dall'hard disk e ci sono tre flat cable di lunghezza tale che non e' possibile esporre completamente l'interno senza disconnetterli
Il sistema di aggancio dei gusci e' completamente a scatto
Giusto per avere un'idea delle dimensioni dello schermo metto per confronto la foto del mio funzionante A1059 (Ipod 4° generazione da 20 Gb) modello U2
Ovviamente non emette segni di vita ad eccezione di un lampeggio al momento di connettere l'alimentazione.
E' comunque una occasione per vedere cosa c'e' dentro
La maggior parte dello spazio e' occupata dall'hard disk e ci sono tre flat cable di lunghezza tale che non e' possibile esporre completamente l'interno senza disconnetterli
Il sistema di aggancio dei gusci e' completamente a scatto
| Il posteriore |
| L'elettronica di controllo interna |
| Hard Disk |
| Visione Frontale (ampiamente graffiata) |
| La batteria con il suo circuito di controllo |
Giusto per avere un'idea delle dimensioni dello schermo metto per confronto la foto del mio funzionante A1059 (Ipod 4° generazione da 20 Gb) modello U2
giovedì 10 gennaio 2013
Errore session bus in Debian con utente root
Mi e' capitato, usando l'utente root da shell e lanciando un programma (nello specifico Gedit) di incorrere nell'errore sotto riportato
----------------------------------------------
root@debian:/var/www/hello/touch# gedit
** (gedit:3364): WARNING **: Could not connect to session bus
----------------------------------------------
root@debian:/var/www/hello/touch# gedit
** (gedit:3364): WARNING **: Could not connect to session bus
----------------------------------------------
come indicato qui la soluzione consiste nell'utilizzare il comando (da utente normale)
gksu gedit
dato che l'utente root non puo' utilizzare una sessione grafica
QT5
Sono uscite le librerie (e relativo SDK) Qt5 stabili
Purtroppo permane l'errore sull'editor visuale di Qt Creator
Purtroppo permane l'errore sull'editor visuale di Qt Creator
martedì 8 gennaio 2013
Qt Desktop Components in QtQuick/Qt4.7 Debian
Come gia' visto in precedenza QtQuick non ha molti componenti visuali di default ed Ubuntu ha risolto il problema aggiungendo le proprie estensioni per Ubuntu for Phones
Per l'ambiente Desktop, e piu' in dettaglio Qt 4.7, sono disponibili i Qt Desktop Components che possono essere scaricati in sorgente da qui
Dopo aver scaricato il file tgz del master si scompatta e da root si digita
qmake
make install
terminata la compilazione si puo' avere un riassunto dei componenti visuali entrando nella directory examples e digitando
qmlviewer Gallery.qml
Questo esempio funziona con Qt 4.7 ma non con Qt 5.0 Beta 2
Per l'SDK Qt5 Beta 2 i componenti di QtQuick 2.0 si trovano gia' in
/opt/qt5/examples/qtdeclarative/demos
Per l'ambiente Desktop, e piu' in dettaglio Qt 4.7, sono disponibili i Qt Desktop Components che possono essere scaricati in sorgente da qui
Dopo aver scaricato il file tgz del master si scompatta e da root si digita
qmake
make install
terminata la compilazione si puo' avere un riassunto dei componenti visuali entrando nella directory examples e digitando
qmlviewer Gallery.qml
![]() |
| Gallery.qml in esecuzione |
Questo esempio funziona con Qt 4.7 ma non con Qt 5.0 Beta 2
Per l'SDK Qt5 Beta 2 i componenti di QtQuick 2.0 si trovano gia' in
/opt/qt5/examples/qtdeclarative/demos
![]() |
| Esempio della calcolatrice di QtQuick 2.0 |
lunedì 7 gennaio 2013
SG-5570i ed Android 4.1.1
Aggiornamento del 30/1/2013
------------------------------------------
In data odierna ho rimosso la ROM JellyBlast in quanto crea piu' problemi dei vantaggi che apporta
Nel dettaglio
1) il telefono, nonostante sembri connesso alla rete telefonica e mostri anche 3-4 tacche di segnale, occasionalmente senza nessun sintomo non riceve le telefonate
2) il telefono occasionalmente effettua un reboot quando si riceve una telefonata
3) Android 4.1 e' carino ma forse e' troppo pesante per il processore del 5570i. La fluidita' dei comandi non e' eccezionale
4) ultimo aspetto abbastanza trascurabile non e' possibile aggiornare, per problemi alla firma digitale del pacchetto l'app di Youtube
------------------------------------------
Tempo fa mi sono comprato un Samsung Galaxy Next Turbo (SG-5570i) causa malfunzionamento dell'Ideos. Il telefono funziona benino peccato che in alcuni momenti, indipendentemente dalle tacchette presenti sul display, perda il segnale ... quindi la gente mi telefona e trova occupato quando io credo di essere raggiungibile.
Mi sono accorto che cio' e' generalmente associato all'uso dell'Airplane Mode. Nell'Ideos disattivando l'Airplane Mode mi veniva richiesto di nuovo il Pin mentre sul Galaxy no.
Un aggiornamento mediante il programma Kies ufficiale di Samsung non ha prodotto i risultati sperati
Dato che e' un telefono deve funzionare principalmente da telefono ho deciso di flashare la Rom dato che ragionevolmente il problema e' di tipo software e dopo varie ricerche ho deciso di provare la Jelly Blast 3.0 (Link) dato che promette una versione avanzata di Android (4.1.1) quando gli aggiornamenti ufficiali risultano fermi ad Android 2.3
Per prima cosa si devono copiare sulla SD card i seguenti file
Next_Turbo_ROOT.zip
CWM_GT-S5570i
S5570i-JBlastv303.signed
CorPlenusv2.02-randomboot
L'ordine delle operazione e'
1) guadagnare i privilegi di Root (con il primo file)
2) installare la ClockWorkMod Recovery
3) installare il sistema operativo ed il nuovo kernel
quindi si deve spengere il telefono ed accenderlo in Recovery Mode (Tasto Home/Tasto Volume +/Tasto Accensione)
si accede alla schermata da cui con i tasti volumi per salire e scendere ed il tasto home per selezionare si deve installare il file zip di root (update zip from sd card)...fatto cio' si fa il reboot e si attende il caricamento
Dopo che tutto e' andato a buon fine si rispenge il telefono e si attiva di nuovo il Recovery Mode e con la stessa procedura precedente si seleziona il file CWM_GT-S5570i.zip ...adesso si e' attivata la ClockWorkMod e si seleziona Wipe data and cache and Dalvik cache ed in seguito Install zip from sd card selezionando S5570i-JBlastv303.signed.zip.
Si attende l'installazione e si fa reboot..quasi finito
Si ritorna di nuovo in Recovery Mode, si seleziona di nuovo CWM e da dentro CWM si fa Install zip from sd card selezionando CorPlenusv2.02-randomboot.zip
Si fa l'ennesimo reboot ed e' finita
La prima cosa che risulta critica e' l'aggiornamento di Youtube. Google Play non riconosce la firma digitale del pacchetto di Youtube e non lo aggiorna.
------------------------------------------
In data odierna ho rimosso la ROM JellyBlast in quanto crea piu' problemi dei vantaggi che apporta
Nel dettaglio
1) il telefono, nonostante sembri connesso alla rete telefonica e mostri anche 3-4 tacche di segnale, occasionalmente senza nessun sintomo non riceve le telefonate
2) il telefono occasionalmente effettua un reboot quando si riceve una telefonata
3) Android 4.1 e' carino ma forse e' troppo pesante per il processore del 5570i. La fluidita' dei comandi non e' eccezionale
4) ultimo aspetto abbastanza trascurabile non e' possibile aggiornare, per problemi alla firma digitale del pacchetto l'app di Youtube
------------------------------------------
Tempo fa mi sono comprato un Samsung Galaxy Next Turbo (SG-5570i) causa malfunzionamento dell'Ideos. Il telefono funziona benino peccato che in alcuni momenti, indipendentemente dalle tacchette presenti sul display, perda il segnale ... quindi la gente mi telefona e trova occupato quando io credo di essere raggiungibile.
Mi sono accorto che cio' e' generalmente associato all'uso dell'Airplane Mode. Nell'Ideos disattivando l'Airplane Mode mi veniva richiesto di nuovo il Pin mentre sul Galaxy no.
Un aggiornamento mediante il programma Kies ufficiale di Samsung non ha prodotto i risultati sperati
Dato che e' un telefono deve funzionare principalmente da telefono ho deciso di flashare la Rom dato che ragionevolmente il problema e' di tipo software e dopo varie ricerche ho deciso di provare la Jelly Blast 3.0 (Link) dato che promette una versione avanzata di Android (4.1.1) quando gli aggiornamenti ufficiali risultano fermi ad Android 2.3
Per prima cosa si devono copiare sulla SD card i seguenti file
Next_Turbo_ROOT.zip
CWM_GT-S5570i
S5570i-JBlastv303.signed
CorPlenusv2.02-randomboot
L'ordine delle operazione e'
1) guadagnare i privilegi di Root (con il primo file)
2) installare la ClockWorkMod Recovery
3) installare il sistema operativo ed il nuovo kernel
quindi si deve spengere il telefono ed accenderlo in Recovery Mode (Tasto Home/Tasto Volume +/Tasto Accensione)
si accede alla schermata da cui con i tasti volumi per salire e scendere ed il tasto home per selezionare si deve installare il file zip di root (update zip from sd card)...fatto cio' si fa il reboot e si attende il caricamento
Dopo che tutto e' andato a buon fine si rispenge il telefono e si attiva di nuovo il Recovery Mode e con la stessa procedura precedente si seleziona il file CWM_GT-S5570i.zip ...adesso si e' attivata la ClockWorkMod e si seleziona Wipe data and cache and Dalvik cache ed in seguito Install zip from sd card selezionando S5570i-JBlastv303.signed.zip.
Si attende l'installazione e si fa reboot..quasi finito
Si ritorna di nuovo in Recovery Mode, si seleziona di nuovo CWM e da dentro CWM si fa Install zip from sd card selezionando CorPlenusv2.02-randomboot.zip
Si fa l'ennesimo reboot ed e' finita
La prima cosa che risulta critica e' l'aggiornamento di Youtube. Google Play non riconosce la firma digitale del pacchetto di Youtube e non lo aggiorna.
Gli aspetti immediatamente positivi sono la presenza di Chrome (con il vecchio kernel Google Play ne impediva l'installazione)
| Installazione del root |
| Wipe dei dati |
| Android installato (manca il nuovo kernel) |
| Schermata di avvio del nuovo Andoird |
| Partenza del nuovo kernel con Cyanogen |
| Ed alla fine |
venerdì 4 gennaio 2013
Ubuntu for Phone SDK
Per il nuovo SDk di Ubuntu Phone Canonical si e' basata su QML aggiungendo una propria estensione di componenti visuali (che in QML originale sono praticamente assenti)
Per poter iniziare a sviluppare e' necessario installare le QT5 Beta 1 mediante il comando
sudo add-apt-repository ppa:canonical-qt5-edgers/qt5-beta1 && sudo apt-get update && sudo apt-get install qt5-meta-full && echo 'export PATH=/opt/qt5/bin:$PATH' >> ~/.bashrc
il repository di Ubuntu al momento riporta la versione Beta 1 mentre dal sito di Digia e' gia' disponibile la versione Beta 2 che puo' essere installata mediante il proprio installer
A questo punto si installano le estensioni dei componenti di Ubuntu a QML
sudo add-apt-repository ppa:ui-toolkit/ppa && sudo apt-get update && sudo apt-get install qt-components-ubuntu qt-components-ubuntu-demos qt-components-ubuntu-examples qt-components-ubuntu-doc notepad-qml
in maniera opzionale si puo' scaricare QtCreator per scrivere le applicazioni in QML ma in linea di principio si puo' usare qualsiasi editor di testo (anche perche', come scritto nel precedente post, l'editor visuale di QtCreator non funziona con QtQuick 2.0 ed in ogni caso non sono riconosciuto i componenti di Ubuntu)
apt-get install qtcreator
Per avere una panoramica dei componenti di Ubuntu si puo' lanciare il comando
qmlscene /usr/lib/qt-components-ubuntu/demos/ComponentShowcase.qmldsf
altrimenti degli esempi dei singoli componenti si trovano in
/usr/lib/qt-components-ubuntu/demos
Per poter iniziare a sviluppare e' necessario installare le QT5 Beta 1 mediante il comando
sudo add-apt-repository ppa:canonical-qt5-edgers/qt5-beta1 && sudo apt-get update && sudo apt-get install qt5-meta-full && echo 'export PATH=/opt/qt5/bin:$PATH' >> ~/.bashrc
il repository di Ubuntu al momento riporta la versione Beta 1 mentre dal sito di Digia e' gia' disponibile la versione Beta 2 che puo' essere installata mediante il proprio installer
A questo punto si installano le estensioni dei componenti di Ubuntu a QML
sudo add-apt-repository ppa:ui-toolkit/ppa && sudo apt-get update && sudo apt-get install qt-components-ubuntu qt-components-ubuntu-demos qt-components-ubuntu-examples qt-components-ubuntu-doc notepad-qml
in maniera opzionale si puo' scaricare QtCreator per scrivere le applicazioni in QML ma in linea di principio si puo' usare qualsiasi editor di testo (anche perche', come scritto nel precedente post, l'editor visuale di QtCreator non funziona con QtQuick 2.0 ed in ogni caso non sono riconosciuto i componenti di Ubuntu)
apt-get install qtcreator
Per avere una panoramica dei componenti di Ubuntu si puo' lanciare il comando
qmlscene /usr/lib/qt-components-ubuntu/demos/ComponentShowcase.qmldsf
altrimenti degli esempi dei singoli componenti si trovano in
/usr/lib/qt-components-ubuntu/demos
Aggiungere Shared Folder a VirtualBox
Nel caso in esame si scambiano file tra una macchina virtuale Guest Ubuntu e una macchina reale Host Windows Xp
Per permettere lo scambio dei file e' necessario in modo preliminare installare le Guest Additions.
In seguito si definisce sul computer Windows una directory condivisa (in questo caso con grande sforzo di fantasia chiamata scambio.....attenzione a non mettere caratteri speciali) e la si definisce nel menu Dispositivi\Cartelle Condivise di VirtaulBox
Alla fine il risultato deve essere cosi'
una ultima avvertenza: i nomi dei file che si intendono scambiare non devono contenere caratteri speciali
Per permettere lo scambio dei file e' necessario in modo preliminare installare le Guest Additions.
In seguito si definisce sul computer Windows una directory condivisa (in questo caso con grande sforzo di fantasia chiamata scambio.....attenzione a non mettere caratteri speciali) e la si definisce nel menu Dispositivi\Cartelle Condivise di VirtaulBox
Alla fine il risultato deve essere cosi'
Per finire si deve montare la cartella condivisa dentro Ubuntu con i comandi
mkdir /mnt/scambio
mount -t vboxsf scambio /mnt/scambio
una ultima avvertenza: i nomi dei file che si intendono scambiare non devono contenere caratteri speciali
giovedì 3 gennaio 2013
Aggiunge PPA ad Ubuntu dietro ad un proxy
Installare repository PPA ad Ubuntu da una rete protetta da un proxy web non e' banale
per prima cosa si devono configurare le due variabili di ambiente
export http_proxy=http://mioproxy:8080
export https_proxy=http://mioproxy:8080
questo perche' parte delle connessioni avviene sulla porta 80 e parte sul SSL
puo' accadere che quando si tentano di scaricare le chiavi GPG dal server di Ubuntu si incorra in questo messaggio
------------------------------------------
keyserver.ubuntu.com: Connection timed out
gpgkeys: HTTP fetch error 7: couldn't connect: Connection timed out
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0
------------------------------------------
per scaricare il ppa desiderato ci si deve annotare la key che contraddistingue il PPA e poi si importa a parte la chiave GPG mediante il comando
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 EFF8D5ED
che utilizza espressamente la porta 80 per la connessione risolvendo i problemi del proxy
Hello World in QML
E' di oggi la notizia dell'uscita di Ubuntu for Phones e devo ammettere che la cosa mi incuriosisce soprattutto per l'SDK che inizia a venire distribuito
Il linguaggio di programmazione previsto per Ubuntu for Phones e' QML (Qt Modelling Language) che e' incluso nell'SDK di Qt
Con l'occasione mi sono scaricato anche l'ambiente di sviluppo delle Qt 5.0 Beta 2
Ho deciso quindi di fare qualche prova iniziando dal classico Hello World
Per prima cosa si deve creare un nuovo progetto dentro QtCreator selezionando QtQuick 2 UI (per usare le Qt 5.0) e si accede quindi alla finestra di programmazione che e' divisa come al solito in un editor ed in una interfaccia visuale
e si inizia subito con un bug; infatti aprendo l'editor visual e dichiarando l'uso di QtQuick 2.0 (la versione legata a Qt 5.0) viene presentato un errore non risolvibile
Scriviamo un po' di codice..il programma mostra semplicemente la scritta Hello World quando si clicca sul pulsante rosso
------------------------------------------------------------
------------------------------------------------------------
Ok tutto funziona ma.......c'e' un problemino. Per sviluppare sotto Ubuntu for Phones e' necessario importare la seguente libreria
import Ubuntu.Components 0.1
Il linguaggio di programmazione previsto per Ubuntu for Phones e' QML (Qt Modelling Language) che e' incluso nell'SDK di Qt
Con l'occasione mi sono scaricato anche l'ambiente di sviluppo delle Qt 5.0 Beta 2
Ho deciso quindi di fare qualche prova iniziando dal classico Hello World
Per prima cosa si deve creare un nuovo progetto dentro QtCreator selezionando QtQuick 2 UI (per usare le Qt 5.0) e si accede quindi alla finestra di programmazione che e' divisa come al solito in un editor ed in una interfaccia visuale
![]() |
| Editor del codice |
![]() |
| Editor della parte visuale |
Scriviamo un po' di codice..il programma mostra semplicemente la scritta Hello World quando si clicca sul pulsante rosso
------------------------------------------------------------
import QtQuick 1.0
Rectangle {
width: 160; height: 160
Rectangle {
id: redSquare
width: 80; height: 80
anchors.top: parent.top; anchors.margins: 10; anchors.horizontalCenter: parent.horizontalCenter
color: "red"
Text { text: "Click Me"; font.pixelSize: 16; anchors.centerIn: parent }
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.AllButtons
onPressed: {
hello.text = 'Hello World'
}
onReleased: {
hello.text = ''
}
}
}
Text {
id: hello
anchors.bottom: parent.bottom; anchors.horizontalCenter: parent.horizontalCenter; anchors.margins: 20
text: ""
}
}
------------------------------------------------------------
Ok tutto funziona ma.......c'e' un problemino. Per sviluppare sotto Ubuntu for Phones e' necessario importare la seguente libreria
import Ubuntu.Components 0.1
in conclusione si puo' sviluppare praticamente solo usando il sistema operativo Ubuntu (o meglio Ubuntu ToolKit) e non impiegando il generico SDK di Qt (e di solito io non uso Ubuntu)
mercoledì 2 gennaio 2013
Uso di JFreeChart in Java/NetBeans
L'utilizzo di JFreeChart in NetBeans/Java e' sostanzialmente identico a quello di Android
Per prima cosa si deve creare un progetto come New Java Application e poi si devono linkare le librerie jcommon e jfreechart (le altre librerie comprese nel file zip si possono omettere)
In seguito si deve editare la funzione main come segue
Barre
----------------------------------------
package barre;
import java.awt.Color;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
/**
*
* @author l.innocenti
*/
public class Barre {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.setValue(2, "classe1", "1");
dataset.setValue(7, "classe1", "2");
dataset.setValue(4, "classe1", "3");
dataset.setValue(9, "classe1", "4");
dataset.setValue(6, "classe1", "5");
JFreeChart chart;
chart = ChartFactory.createBarChart
("Grafico a barre","Classe", "Valore", dataset,
PlotOrientation.VERTICAL, false,true, false);
//chart.setBackgroundPaint(Color.yellow);
//chart.getTitle().setPaint(Color.blue);
CategoryPlot p = chart.getCategoryPlot();
p.setRangeGridlinePaint(Color.red);
ChartFrame frame1=new ChartFrame("Bar Chart",chart);
frame1.pack();
frame1.setVisible(true);
// frame1.setSize(400,350);
}
}
----------------------------------------
Linee
----------------------------------------
package javaapplication7;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
/**
*
* @author l.innocenti
*/
public class JavaApplication7 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
XYSeries series = new XYSeries("XYGraph");
series.add(1, 1);
series.add(1, 2);
series.add(2, 1);
series.add(3, 9);
series.add(4, 10);
// Add the series to your data set
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
// Generate the graph
JFreeChart chart;
chart = ChartFactory.createXYLineChart(
"Grafico XY", // Title
"asse X", // x-axis Label
"asse Y", // y-axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
false, // Show Legend
false, // Use tooltips
false // Configure chart to generate URLs?
);
ChartFrame frame = new ChartFrame("Esempio", chart);
frame.pack();
frame.setVisible(true);
}
}
----------------------------------------
Per prima cosa si deve creare un progetto come New Java Application e poi si devono linkare le librerie jcommon e jfreechart (le altre librerie comprese nel file zip si possono omettere)
In seguito si deve editare la funzione main come segue
Barre
----------------------------------------
package barre;
import java.awt.Color;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
/**
*
* @author l.innocenti
*/
public class Barre {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.setValue(2, "classe1", "1");
dataset.setValue(7, "classe1", "2");
dataset.setValue(4, "classe1", "3");
dataset.setValue(9, "classe1", "4");
dataset.setValue(6, "classe1", "5");
JFreeChart chart;
chart = ChartFactory.createBarChart
("Grafico a barre","Classe", "Valore", dataset,
PlotOrientation.VERTICAL, false,true, false);
//chart.setBackgroundPaint(Color.yellow);
//chart.getTitle().setPaint(Color.blue);
CategoryPlot p = chart.getCategoryPlot();
p.setRangeGridlinePaint(Color.red);
ChartFrame frame1=new ChartFrame("Bar Chart",chart);
frame1.pack();
frame1.setVisible(true);
// frame1.setSize(400,350);
}
}
----------------------------------------
Linee
----------------------------------------
package javaapplication7;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
/**
*
* @author l.innocenti
*/
public class JavaApplication7 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
XYSeries series = new XYSeries("XYGraph");
series.add(1, 1);
series.add(1, 2);
series.add(2, 1);
series.add(3, 9);
series.add(4, 10);
// Add the series to your data set
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
// Generate the graph
JFreeChart chart;
chart = ChartFactory.createXYLineChart(
"Grafico XY", // Title
"asse X", // x-axis Label
"asse Y", // y-axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
false, // Show Legend
false, // Use tooltips
false // Configure chart to generate URLs?
);
ChartFrame frame = new ChartFrame("Esempio", chart);
frame.pack();
frame.setVisible(true);
}
}
----------------------------------------
FFT in Android e Java/NetBeans
Per elaborare i dati derivanti dai sensori posti sul telefono puo' essere utile una elaborazione della trasformata in Fourier; per il caso in esame sara' impiegata la libreria JTransform
La libreria si inserisce normalmente all'interno del progetto di NetBeans od Android
Per l'esempio non sono stati usati dati reali ma quelli calcolati dalla funzione
10sin(x)+5sin(x/2(
il codice Java (quello Android e' identico) e'
------------------------------
package javaapplication1;
import edu.emory.mathcs.jtransforms.fft.DoubleFFT_1D;
/**
*
* @author l.innocenti
*/
public class JavaApplication1 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int k;
// numero dei dati
int N = 1002;
DoubleFFT_1D dfft = new DoubleFFT_1D(N);
double[] data = new double[N];
double[] outputData = new double[N];
//crea il segnale
for (k=0;k<N-1;k++) {
data[k] = 10*Math.sin(Math.toRadians(k))+5*Math.sin(Math.toRadians(k/2));
//System.out.println(k+";"+data[k]);
}
// si usa Real FFT perche' dati sono reali
dfft.realForward(data);
// il risultato viene messo nella matrice dei risultati secondo il formato
// data[0] = somma di tutti gli input
// se il numero di dati e' pari a partire dall'indice data[2] si ha la parte reale nell'indice pari e
// la parte immaginaria nell'indice dispari
// data[2*k] = Re[k], 0 <= k < n / 2
// data[2*k+1] = Im[k], 0 < k < n / 2
// altrimenti se i dati sono dispari
// data[2*k] = Re[k], 0 <= k < (n+1)/2
// data[2*k+1] = Im[k], 0 < k< (n-1)/2
// per calcolare il valore di frequenza di ogni array
// Fs = valore di campionamento in Hz
// N = numero di punti
// k = indice della matrice
// Frequenza = (k*Fs) / n
//
//La potenza dello spettro e' data da
//sqrt(parte_reale*parte_reale+parte_immaginaria*parte_immaginaria)
if(data.length%2==0){
for(int i = 0; i < data.length/2; i++){
outputData[i]= (float) Math.sqrt((Math.pow(data[2*i],2))+(Math.pow(data[2*(i)+1], 2)));
}
}else{
for(int i = 0; i < data.length/2-1; i++){
outputData[i]= (float) Math.sqrt((Math.pow(data[2*i],2))+(Math.pow(data[2*i+1], 2)));
}
}
}
}
La libreria si inserisce normalmente all'interno del progetto di NetBeans od Android
Per l'esempio non sono stati usati dati reali ma quelli calcolati dalla funzione
10sin(x)+5sin(x/2(
![]() |
| Grafici da WolframAlpha |
il codice Java (quello Android e' identico) e'
------------------------------
package javaapplication1;
import edu.emory.mathcs.jtransforms.fft.DoubleFFT_1D;
/**
*
* @author l.innocenti
*/
public class JavaApplication1 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int k;
// numero dei dati
int N = 1002;
DoubleFFT_1D dfft = new DoubleFFT_1D(N);
double[] data = new double[N];
double[] outputData = new double[N];
//crea il segnale
for (k=0;k<N-1;k++) {
data[k] = 10*Math.sin(Math.toRadians(k))+5*Math.sin(Math.toRadians(k/2));
//System.out.println(k+";"+data[k]);
}
// si usa Real FFT perche' dati sono reali
dfft.realForward(data);
// il risultato viene messo nella matrice dei risultati secondo il formato
// data[0] = somma di tutti gli input
// se il numero di dati e' pari a partire dall'indice data[2] si ha la parte reale nell'indice pari e
// la parte immaginaria nell'indice dispari
// data[2*k] = Re[k], 0 <= k < n / 2
// data[2*k+1] = Im[k], 0 < k < n / 2
// altrimenti se i dati sono dispari
// data[2*k] = Re[k], 0 <= k < (n+1)/2
// data[2*k+1] = Im[k], 0 < k< (n-1)/2
// per calcolare il valore di frequenza di ogni array
// Fs = valore di campionamento in Hz
// N = numero di punti
// k = indice della matrice
// Frequenza = (k*Fs) / n
//
//La potenza dello spettro e' data da
//sqrt(parte_reale*parte_reale+parte_immaginaria*parte_immaginaria)
if(data.length%2==0){
for(int i = 0; i < data.length/2; i++){
outputData[i]= (float) Math.sqrt((Math.pow(data[2*i],2))+(Math.pow(data[2*(i)+1], 2)));
}
}else{
for(int i = 0; i < data.length/2-1; i++){
outputData[i]= (float) Math.sqrt((Math.pow(data[2*i],2))+(Math.pow(data[2*i+1], 2)));
}
}
}
}
-------------------------------------
Il risultato e' il seguente
Iscriviti a:
Post (Atom)
FigSpec FS-60CL
A lavoro mi hanno rifilato questo sensore iperspettrale cinese (pushbroom 400-1000 nm con larghezza di banda di 0.5 nm compatibile con DJI M...
-
Aggiornamento questo e' la risposta degli sviluppatori First of all, almost all operating systems on both mobile and laptop/desktop n...
-
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...

































