Finalmente mi e' arrivato dalla Cina l'Mk808, un mediacenter Android dalle dimensioni estremamente ridotte ed una discreta capacita' di calcolo
L'Mk808 ha un processore dual core da 1.6 GHz (processore A9) con 1Gb di Ram e 8 Gb di Rom, Wi-fi, Bluetooth, USB OTG per connettere dischi esterni e connessione HDMI per il televisore
Per interagire con Android, mancando ovviamente il supporto touch, si ha il supporto a mouse e tastiera (meglio wireless da 2.4 GHz come il mouse Logitech in figura)
Le applicazioni installate sono minimali (di cui una in cinese) ma ci sono quelle base di Google
Il tempo di boot e' estremamente veloce e batte di gran lunga il mio Mediacom 810 con cui condivide la versione di sistema operativo
In linea di principio e' possibile montare sul dispositivo anche una versione modificata di Ubuntu come indicato a questo link ma la procedura e' molto complicata (forse e' meglio usare Raspberry se si vuole usare Ubuntu su un ultra compatto Arm)
martedì 29 gennaio 2013
lunedì 28 gennaio 2013
Compilare librerie esterne in Qt/QtCreator
In questo post verra' mostrato come linkare una libreria esterna al pacchetto Qt mediante l'uso di QtCreator.
La libreria di esempio e' costuita dalle Shapefile C Library, una libreria che serve per leggere i file ESRI .shp
Una volta scaricato il file tgz si spacchetta e si digita
make
make test (per controllare che la compilazione sia andata a buon fine)
make install (per installare la libreria ed i file di sviluppo)
al termine la libreria si chiamera' libshp.a e sara' posta in /usr/local/lib mentre i file di include saranno in /usr/local/include
shape.pro
---------------------------------
#-------------------------------------------------
#
# Project created by QtCreator 2013-01-28T12:49:51
#
#-------------------------------------------------
QT += core
QT -= gui
TARGET = shape
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
LIBS += -L/usr/local/lib -lshp
INCLUDEPATH += -I/usr/local/include
per vedere se il programma funziona si puo' rubare parte del codice al programma shpinfo.c che si trova nella sottodirectory contrib del pacchetto shapelib.tgz
main.cpp
--------------------------------
#include "shapefil.h"
#include <QDebug>
#include <iostream>
............................
SHPHandle hSHP;
int nShapeType, nEntities, nVertices, nParts, *panParts, i, iPart;
double *padVertices, adfBndsMin[4], adfBndsMax[4];
hSHP = SHPOpen("/home/luca/shp/test.shp","rb");
if( hSHP == NULL )
{
}
SHPGetInfo( hSHP, &nEntities, &nShapeType, adfBndsMin, adfBndsMax );
qDebug() << nShapeType;
---------------------------------
La libreria di esempio e' costuita dalle Shapefile C Library, una libreria che serve per leggere i file ESRI .shp
Una volta scaricato il file tgz si spacchetta e si digita
make
make test (per controllare che la compilazione sia andata a buon fine)
make install (per installare la libreria ed i file di sviluppo)
al termine la libreria si chiamera' libshp.a e sara' posta in /usr/local/lib mentre i file di include saranno in /usr/local/include
shape.pro
---------------------------------
#-------------------------------------------------
#
# Project created by QtCreator 2013-01-28T12:49:51
#
#-------------------------------------------------
QT += core
QT -= gui
TARGET = shape
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
LIBS += -L/usr/local/lib -lshp
INCLUDEPATH += -I/usr/local/include
---------------------------------
per vedere se il programma funziona si puo' rubare parte del codice al programma shpinfo.c che si trova nella sottodirectory contrib del pacchetto shapelib.tgz
main.cpp
--------------------------------
#include "shapefil.h"
#include <QDebug>
#include <iostream>
............................
SHPHandle hSHP;
int nShapeType, nEntities, nVertices, nParts, *panParts, i, iPart;
double *padVertices, adfBndsMin[4], adfBndsMax[4];
hSHP = SHPOpen("/home/luca/shp/test.shp","rb");
if( hSHP == NULL )
{
}
SHPGetInfo( hSHP, &nEntities, &nShapeType, adfBndsMin, adfBndsMax );
qDebug() << nShapeType;
---------------------------------
Qt Console Application
Oltre alle applicazioni GUI con Qt e' possibile anche creare delle applicazioni da console (anche usando i template di QtCreator)
Lo scheletro dell'applicazione e' il seguente
-------------------------------
Lo scheletro dell'applicazione e' il seguente
-------------------------------
#include <QtCore/QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
return a.exec();
}
-------------------------------Se si esegue il codice si ha la sorpresa di aver una finestra di consolle perennemente apertaCio e' dovuto al fatto che l'applicazione per chiudersi deve ricevere un esplicito messaggio di chiusura che puo' essere effettuato mediante una chiamataQCoreApplication::exit(0)oppure mediante una via piu' complicata------------------------#include <QtCore/QCoreApplication>#include <QTimer>int main(int argc, char *argv[]){QCoreApplication a(argc, argv);QTimer::singleShot(5000, &a, SLOT(quit()));return a.exec();}
Mysql in Qt
In questo post viene mostrata la connessione e l'esecuzione di query da Qt verso un database MysqlS riprendendo le basi gia' poste nel post SQlite
In sostanza deve essere modificata solo la parte relativa alla connessione mentre l'esecuzione delle query e' sostanzialmente identica
(come sempre si deve modificare il file .pro aggiungendo la libreria sql con il comando
QT += core gui sql
)
--------------------------------------------
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("test");
db.setHostName("localhost");
db.setUserName("root");
db.setPassword("");
if (db.open()) {
QSqlQuery query;
query.exec("create table punteggio (id int primary key, "
"nome varchar(20), "
"punti int)");
query.exec("insert into punteggio values(0, 'Luca', 2)");
query.exec("insert into punteggio values(1, 'Federico', 102)");
query.exec("insert into punteggio values(2, 'Alessio', 15)");
db.close();
}
In sostanza deve essere modificata solo la parte relativa alla connessione mentre l'esecuzione delle query e' sostanzialmente identica
(come sempre si deve modificare il file .pro aggiungendo la libreria sql con il comando
QT += core gui sql
)
--------------------------------------------
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("test");
db.setHostName("localhost");
db.setUserName("root");
db.setPassword("");
if (db.open()) {
QSqlQuery query;
query.exec("create table punteggio (id int primary key, "
"nome varchar(20), "
"punti int)");
query.exec("insert into punteggio values(0, 'Luca', 2)");
query.exec("insert into punteggio values(1, 'Federico', 102)");
query.exec("insert into punteggio values(2, 'Alessio', 15)");
db.close();
}
domenica 27 gennaio 2013
Root in read only mode in Debian
Per cercare di migliorare le prestazioni del disco SSD mi sono messo a modificare il file fstab
Disgraziatamente ho scritto
/dev/sda / ext4 noatime,nodirtime,discard,errors=remount-ro 0 1
e non (si noti la mancanza di una a nel secondo parametro)
/dev/sda / ext4 noatime,nodiratime,discard,errors=remount-ro 0 1
al successivo riavvio la macchina e' partita andando pero' in schermo nero al momento di far partire la sessione X. Fortunatamente le shell erano ancora attivi quindi da Alt+F2 e' stato possibile vedere che il filesystem era stato montato come in sola lettura
Dopo vari tentativi la soluzione funzionante e' stata di digitare in consolle di shell il comando
mount -n -o remount,defaults /dev/sda1 /
a questo punto il filesystem e' tornato scrivibile, ho corretto fstab e fatto ripartire la macchina
Tutto e' tornato a funzionare perfettamente
Disgraziatamente ho scritto
/dev/sda / ext4 noatime,nodirtime,discard,errors=remount-ro 0 1
e non (si noti la mancanza di una a nel secondo parametro)
/dev/sda / ext4 noatime,nodiratime,discard,errors=remount-ro 0 1
al successivo riavvio la macchina e' partita andando pero' in schermo nero al momento di far partire la sessione X. Fortunatamente le shell erano ancora attivi quindi da Alt+F2 e' stato possibile vedere che il filesystem era stato montato come in sola lettura
Dopo vari tentativi la soluzione funzionante e' stata di digitare in consolle di shell il comando
mount -n -o remount,defaults /dev/sda1 /
a questo punto il filesystem e' tornato scrivibile, ho corretto fstab e fatto ripartire la macchina
Tutto e' tornato a funzionare perfettamente
Apt dietro ad un proxy server
Per effettuare il download dei pacchetti .deb da dietro ad un http proxy server si deve configurare il file /etc/apt/apt.conf con la seguente riga
/etc/apt/apt.conf
-----------------------------------
Acquire::http::Proxy "http://mioproxy:8080/";
/etc/apt/apt.conf
-----------------------------------
Acquire::http::Proxy "http://mioproxy:8080/";
venerdì 25 gennaio 2013
SQLite in Qt
In questo post verra' presentato un esempio di utilizzo di Qt con Sqlite
Le librerie Qr hanno gia' al loro interno il supporto per Sqlite per cui non e' necessaria l'installazione di nessun componente aggiuntivo
Per prima cosa si deve modificare il file .pro per includere il supporto sql (come evidenziato in giallo nel listato sottostante)
sql.pro
--------------------------------------------
--------------------------------------------
L'esempio effettua tre query
Nella prima viene creata una tabella inserendo tre righe
Nella seconda viene effettuata una SELECT senza vincoli
Nella terza viene effettuata una SELECT condizionata da un WHERE
Il codice e' sostanzialmente autoesplicativo.L'unica cosa da sottolineare e' che in QtCreator sotto Windows si dove dichiarare un include <QtSql> mentre in Linux deve essere modificato in <QtSql\QtSql>
main.cpp
--------------------------------------------
--------------------------------------------
asd
Le librerie Qr hanno gia' al loro interno il supporto per Sqlite per cui non e' necessaria l'installazione di nessun componente aggiuntivo
Per prima cosa si deve modificare il file .pro per includere il supporto sql (come evidenziato in giallo nel listato sottostante)
sql.pro
--------------------------------------------
QT += core
QT += sql
QT -= gui
TARGET = sql
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
--------------------------------------------
L'esempio effettua tre query
Nella prima viene creata una tabella inserendo tre righe
Nella seconda viene effettuata una SELECT senza vincoli
Nella terza viene effettuata una SELECT condizionata da un WHERE
Il codice e' sostanzialmente autoesplicativo.L'unica cosa da sottolineare e' che in QtCreator sotto Windows si dove dichiarare un include <QtSql> mentre in Linux deve essere modificato in <QtSql\QtSql>
main.cpp
--------------------------------------------
#include <QtCore/QCoreApplication>
#include <Qtsql>
//per Linux si deve sostituire la riga precedente con
//#include <QtSql/QtSql>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("c:/punteggio.db");
if (!db.open()) {
return false;
}
QSqlQuery query;
query.exec("create table punteggio (id int primary key, "
"nome varchar(20), "
"punti int)");
query.exec("insert into punteggio values(0, 'Luca', 2)");
query.exec("insert into punteggio values(1, 'Federico', 102)");
query.exec("insert into punteggio values(2, 'Alessio', 15)");
QSqlQuery query2;
query2.prepare( "SELECT * FROM punteggio" );
if( !query2.exec() )
{
qDebug() << "Errore sulla query";
}
while( query2.next() )
{
int punti = query2.value(2).toInt();
QString nome = query2.value(1).toString();
qDebug() << nome << " " << punti << endl;
}
// SELECT CONDIZIONATA DA WHERE
QSqlQuery query3;
query3.prepare( "SELECT * FROM punteggio WHERE punti > ?" );
query3.bindValue(":punti",20);
if( !query3.exec() )
{
qDebug() << "Errore sulla query";
}
while( query3.next() )
{
int punti = query3.value(2).toInt();
QString nome = query3.value(1).toString();
qDebug() << nome << " " << punti << endl;
}
return a.exec();
}
--------------------------------------------
asd
Iscriviti a:
Post (Atom)
Mappa frane da news on line
Correva l'anno 2008 ed il mio direttore di Dipartimento mi aveva chiesto di lavorare sui Big Data per estrarre dati di geolocalizzazione...
-
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...


