venerdì 25 gennaio 2013

Sqliteman in Debian

Al contrario di Ubuntu o di altre distro, non esiste un pacchetto gia' pronto per installare Sqliteman in Debian testing


La soluzione e' scaricare il pacchetto del sorgente del programma da Sourceforge (al momento la versione piu' recente e' sqliteman-1.2.2.tar.bz2)

dopo aver spacchettato l'archivio si entra nella directory e si procede con i seguenti comandi

apt-get install cmake
apt-get install libqscintilla2-8 libqscintilla2-dev
apt-get install sqlite3

cmake . (notare il punto dopo cmake)
make
make install


Sostituire HD con SSD su IBM X40

Per provare (ed anche perche' il disco fisso tradizionale stava dando segni di cedimento) mi sono comprato su Amazon un disco SSD Kingspec per sostituire il disco tradizionale dell'IBM X40

Lo smontaggio e' banale  dato che il disco fisso e' fissato da una sola vite e si sfila mediante un sistema a slitta dopo aver rovesciato il portatile


Alloggiamento disco fisso su IBM X40

La dimensione del disco fisso e' da 1.8 pollici. Nella foto sottostante si vede sopra a sinistra il disco originale, in alto a destra un disco derivante da un Ipod sempre in formato 1.8 pollici ma con un diverso sistema di connessione (flat e non PATA) mentre sotto il nuovo disco SSD




L'unico aspetto da considerare e' che il disco SSD ha bisogno della presenza del jumper che lo setti come Master del canale PATA (nel disco fisso originale non era presente nessun jumper e probabilmente era settato come cable select)

giovedì 24 gennaio 2013

Leggere XML/KML con Qt

Lo scopo di questo programma e' estrarre i valori di latitudine e longitudine da un file kml (Google Earth) popolato di placemarks

Per prima cosa una precisazione: esistono due modi per creare file xml, nella prima il tag contiene l'informazione mentre nella seconda l'informazione e' racchiusa tra i tag

per esempio
caso 1 : <tag id="0"/>
caso 2 : <id>0</tag>

Caso 1

Caso 2 (KML)

Il secondo caso corriponde a come sono formati i file xml per esempio dei servizi RSS e di Google Earth
Il motivo di questa precisazione risiede nel fatto che il metodo di lettura non e' valido per tutti i formati
Il tutorial di http://www.voidrealms.com (tutorial Qt 95) non interpreta correttamente il formato 2

kml.pro (importante modificare il file di progetto perche' si usa la libreria QtXml che non e' normalmente linkata)
-----------------------------------
#-------------------------------------------------
#
# Project created by QtCreator 2013-01-23T10:12:21
#
#-------------------------------------------------

QT       += core
QT       += xml



TARGET = untitled
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp
--------------------------

main.cpp
--------------------------
#include <QtCore>
#include <QtXml>
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString filename("C:/Casa.kml");
        QTextStream cout(stdout);
        QFile file(filename);
        bool open = file.open(QIODevice::ReadOnly | QIODevice::Text);
        if (!open)
        {
            cout << "Couldn't open file" << endl;
            return 1;
        }
        else
        {
            cout << "File opened OK" << endl;
       }
    QXmlStreamReader xml(&file);
    qDebug() << "Encoding: " << xml.documentEncoding().toString() << endl;
        while (!xml.atEnd() && !xml.hasError())
        {
            xml.readNext();
            if (xml.isStartElement())
            {
                QString name = xml.name().toString();
                if ((name=="longitude") || (name == "latitude"))
                {
                    qDebug() << "element name: '" << xml.name().toString() << "'" << ", text: '" << xml.readElementText() << "'" << endl;
                }
            }
            else if (xml.hasError())
            {
                qDebug() << "XML error: " << xml.errorString() << endl;
            }
            else if (xml.atEnd())
            {
                qDebug() << "Reached end, done" << endl;
            }
        }
    return a.exec();
}
--------------------------

cout in Qt

per avere un output su consolle da Qt si puo' procedere come segue

metodo C++
------------------------------------
#include <iostream>
using namespace std;


int main(int argc, char *argv[])
{
    cout << "Test cout";
    return a.exec();
}

-------------------------------------

metodo Qt
-------------------------------------
#include <QTextStream>
int main(int argc, char *argv[])
{
  QTextStream cout(stdout);
  cout << "Couldn't open file" << endl;
}



QDebug

Simile a Log.d di Android, in Qt esiste la possibilita' di mandare messaggi di debug durante l'esecuzione di un programma

L'utilizzo e' piuttosto semplice, per prima cosa si deve includere


#include <QDebug>



di seguito nel corpo del programma si puo' richiamare la funzione


qDebug() << "Errore " << endl;

con la stessa sintassi di cout

Documentazione di Qt

La documentazione di Qt in Linux si ottiene includendo i pacchetti

apt-get install qt4-doc
apt-get install qtcreator-doc

dall'interno di QtCreator si accede alla documentazione con l'apposito pulsante sulla barra di sinistra



puo' accadere, come indicato nell'immagine, che il file della documentazione non sia indicizzato.
E' sufficiente attendere e riprovare per ottenere la ricerca per argomento su tutta la documentazione

Giove Luna ed Aldebaran nello stesso spicchio di cielo

In questi giorni nel cielo e' carino vedere la Luna insieme a Giove ed in basso la luce tremolante e rossastra di Aldebaran




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...