Uno dei problemi maggiori di PhoneGap e' quello di non poter usare il debugger integrato nell'Android SDK in quanto tutto il codice e' Javascript
Per questo motivo puo' essere utile testare il solo codice HTML5 e PhoneGap in un ambiente esterno e la soluzione puo' essere utilizzare Ripple, una estensione per Chrome che permette questo tipo di operazione
Per prova e' stato utilizzato il codice del post precedente ed e' stato configurato un web server locale nel quale sono stati inseriti i file della cartella assets del progetto
Come si puo' vedere e' possibile simulare le accelerazioni e si osserva il programma in esecuzione come se fosse su un telefono reale
giovedì 7 febbraio 2013
PhoneGap
PhoneGap e' un insieme di API che permette di interagire con l'hardware dei dispositivi mobile (Android, IPhone, WebOs ed altri) direttamente da HTML5 ed e' quindi sostanzialmente indipendente dal linguaggio nativo del sistema operativo di ogni telefono
Windows
installare Java JDK (non JRE)
installare Eclipse
installare Android SDK ed ADT
installare Ant
aggiungere alla path le directory platform-tools e tool dell'Android SDK
aggiungere alla path la directory bin del pacchetto ant
eseguire i comandi sottostanti
--------------------------------
C:\>set JAVA_HOME="C:\Programmi\Java\jdk1.7.0_09\bin"
C:\>set PATH=%JAVA_HOME%\bin;%PATH%
--------------------------------
Linux
in Linux (Debian Testing) l'unico problema e' relativo al fatto che stranamento ant non e' incluso in openjdk-7 ma nella versione 6 per cui deve essere scaricato il pacchetto precedente
Una volta configurato il sistema si procede andando nella directory
/phonegap/lib/android/bin
e si lancia il comando
create /directory_lavoro com.prova.test phonegap
che creera' un nuovo progetto nella directory di lavoro.
A questo punto si apre Eclipse e si crea un nuovo progetto da Android Project From Existing code e si punta alla directory create
Il risultato sara' qualcosa di questo tipo
si vede subito che la funzione main e' piuttosto stupida in quanto crea un WebView che punta al contenuto di assets
phonegap.java
-------------------------------------------------------
public class phonegap extends DroidGap
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html");
}
}
----------------------------------------------------------
quindi il codice da mofidicare e' index.html.
Nel seguente esempio ho provato a vedere il risultato dell' accelerometro
Index.html
-------------------------------------------------------
<!DOCTYPE html>
<html>
<head>
<title>Accelerazione</title>
<script type="text/javascript" charset="utf-8" src="cordova-2.3.0.js"></script>
<script type="text/javascript" charset="utf-8">
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
var options = { frequency: 3000 };
navigator.accelerometer.watchAcceleration(onSuccess, onError);
}
// onSuccess: Get a snapshot of the current acceleration
//
function onSuccess(acceleration) {
var accx = document.getElementById('accx');
var accy = document.getElementById('accy');
var accz = document.getElementById('accz');
accx.innerHTML = 'Accelerazione X : ' +acceleration.x;
accy.innerHTML = 'Accelerazione Y : ' +acceleration.y;
accz.innerHTML = 'Accelerazione Z : ' +acceleration.z;
}
// onError: Failed to get the acceleration
//
function onError() {
alert('onError!');
}
</script>
</head>
<body>
<p id="accx">Accelerazione X : </p><br>
<p id="accy">Accelerazione Y : </p><br>
<p id="accz">Accelerazione > : </p><br>
</body>
</html>
ADB in Virtualbox
In alcuni casi puo' essere necessario installare una macchina virtuale per sviluppare in Android senza particolari controindicazione
Qualche problema potrebbe venire dall'utilizzo di Adb con un telefono reale a causa del livello di isolamento derivante dalla macchina virtuale
Nel caso in cui si usi Virtualbox la soluzione e' costuita da installare i driver adb nella macchina host (questo per Windows, in Linux il problema non si pone) e successivamente di aggiungere mediante l'icona con il segno + il device alla macchina virtuale (vedi immagine sottostante)
A questo punto si puo' accendere la macchina virtuale e configurare il dispositivo nella macchina guest
Qualche problema potrebbe venire dall'utilizzo di Adb con un telefono reale a causa del livello di isolamento derivante dalla macchina virtuale
Nel caso in cui si usi Virtualbox la soluzione e' costuita da installare i driver adb nella macchina host (questo per Windows, in Linux il problema non si pone) e successivamente di aggiungere mediante l'icona con il segno + il device alla macchina virtuale (vedi immagine sottostante)
A questo punto si puo' accendere la macchina virtuale e configurare il dispositivo nella macchina guest
Ping su una intera classe di indirizzi
Questo post e' un piu' un promemoria per me stesso che altro
Regolarmente (una volta all'anno) mi trovo a dover tirare fuori dal cassetto qualche apparato di rete (in particolare qualche access point..in particolare un ben preciso access point) di cui mi sono scordato l'ip e che devo riconfigurare
Per questo motivo e' necessario effettuare una scansione completa della rete alla ricerca dell'ip dell'access point...in generale la cosa e' ristretta alla classe 192.168.x.x e 10.0.x.x
Per fare cio' e' molto comodo fping (da installare con apt-get install fping) che automatizza il compito
in generale la sintassi e'
fping -g - a 10.0.2.0/24
per scansionare la classe determinata dalla netmask e visualizzare sotto gli host attivi
ovviamente tutto cio' funziona fino a quando non e' impostato il No Ping ma in generale gli apparati di rete non sono cosi' configurati
Regolarmente (una volta all'anno) mi trovo a dover tirare fuori dal cassetto qualche apparato di rete (in particolare qualche access point..in particolare un ben preciso access point) di cui mi sono scordato l'ip e che devo riconfigurare
Per questo motivo e' necessario effettuare una scansione completa della rete alla ricerca dell'ip dell'access point...in generale la cosa e' ristretta alla classe 192.168.x.x e 10.0.x.x
Per fare cio' e' molto comodo fping (da installare con apt-get install fping) che automatizza il compito
in generale la sintassi e'
fping -g - a 10.0.2.0/24
per scansionare la classe determinata dalla netmask e visualizzare sotto gli host attivi
ovviamente tutto cio' funziona fino a quando non e' impostato il No Ping ma in generale gli apparati di rete non sono cosi' configurati
martedì 5 febbraio 2013
CMake
Guardando un po' a giro mi sono reso conto di quanto sono arretrato ....ero rimasto al fatto che autotools e' una cosa figa mentre e' stata sorpassata da altri concorrenti come CMake ed ho deciso di provarlo con il programma descritto a questo post
Per provare Cmake (che non e' installato di default in Debian) si deve creare il file CMakeLists.txt dove sono contenute le informazioni di compilazione come nel Makefile come il link verso la libreria SDL
CMakeLists.txt
----------------------------------------
cmake_minimum_required(VERSION 2.8)
PROJECT(CMake_TEST)
FIND_PACKAGE(SDL REQUIRED)
ADD_DEFINITIONS(-Wall -O3)
INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR})
ADD_EXECUTABLE(cmake_test test.cpp)
TARGET_LINK_LIBRARIES(cmake_test ${SDL_LIBRARY})
----------------------------------------
a questo punto, con il solo file sorgente e il CMakeLists.txt nella directory, si lancia
cmake . (attenzione al punto)
vengono generati automaticamente altri file e se non ci sono errori si puo' digitare
make
per compilare l'eseguibile
L'aspetto piu' interessante di CMake e' di essere indipendente dalla piattaforma e dal compilatore e puo' generare file di compilazione di Linux e Windows per i diversi compilatori supportati
Ovviamente non ha senso di usare Cmake per un caso cosi' semplice come quello utilizzato nell'esempio (e' sempre piu' veloce utilizzare la linea di comando per lanciare gcc, anche bypassando make)
Scrivere e leggere file binario in Qt
Ed adesso in confronto il metodo Qt ed il metodo standard C++ per leggere un file binario di interi
Qt
-----------------------------------------------------------
#include <QFile>
#include <QDebug>
QFile f("/home/luca/luca.dat");
f.open(QIODevice::WriteOnly | QIODevice::Append);
QDataStream out(&f);
out<<quint16(270);
f.close();
QFile g("/home/luca/luca.dat");
g.open(QIODevice::ReadOnly);
QDataStream in(&g);
qint16 letto;
in >> letto;
qDebug() << letto;
-----------------------------------------------------------
C++
-----------------------------------------------------------
#include <iostream>
#include <fstream>
using namespace std;
int main(void){
float fnum[4] = {42.22, -42.44, 1.2, 7.8};
int i;
ofstream out("numeri.dat", ios::out | ios::binary);
if(!out){
return 1;
}
out.write((char *) &fnum, sizeof(fnum));
out.close();
for (i=0; i<4; i++)
fnum[i] = 0.0;
ifstream in("numeri.dat", ios::in | ios::binary);
if(!in) {
cout << "Cannot open file.";
return 1;
;
}
in.read((char *) &fnum, sizeof(fnum));
cout << in.gcount() << " bytes read." << endl;
for (i=0; i<4; i++)
cout << fnum[i] << " ";
in.close();
cout << endl;
}
----------------------------------------------------------------
-----
Qt
-----------------------------------------------------------
#include <QFile>
#include <QDebug>
QFile f("/home/luca/luca.dat");
f.open(QIODevice::WriteOnly | QIODevice::Append);
QDataStream out(&f);
out<<quint16(270);
f.close();
QFile g("/home/luca/luca.dat");
g.open(QIODevice::ReadOnly);
QDataStream in(&g);
qint16 letto;
in >> letto;
qDebug() << letto;
-----------------------------------------------------------
C++
-----------------------------------------------------------
#include <iostream>
#include <fstream>
using namespace std;
int main(void){
float fnum[4] = {42.22, -42.44, 1.2, 7.8};
int i;
ofstream out("numeri.dat", ios::out | ios::binary);
if(!out){
return 1;
}
out.write((char *) &fnum, sizeof(fnum));
out.close();
for (i=0; i<4; i++)
fnum[i] = 0.0;
ifstream in("numeri.dat", ios::in | ios::binary);
if(!in) {
cout << "Cannot open file.";
return 1;
;
}
in.read((char *) &fnum, sizeof(fnum));
cout << in.gcount() << " bytes read." << endl;
for (i=0; i<4; i++)
cout << fnum[i] << " ";
in.close();
cout << endl;
}
----------------------------------------------------------------
-----
Debian on Android
Esempio di Linux in Android (Debian small image) su un tablet Mediacom 850i
Come si puo' vedere il sistema e' particolarmente lento ed al limite dell'usabile (sarebbe da provare anche con un puntatore ed una tastiera fisica)
Come si puo' vedere il sistema e' particolarmente lento ed al limite dell'usabile (sarebbe da provare anche con un puntatore ed una tastiera fisica)
Iscriviti a:
Post (Atom)
Cheshire Cat Ai
Cheshire Ai e' un progetto italiano che sta crescendo adesso Per provarlo si clona il progetto git clone https://github.com/cheshire-c...
-
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...