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.27.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[i0.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)


Scrivere e leggere file testo in Qt

Un semplice esempio di come scrivere e leggere un file testo in Qt
L'esempio e' ripreso sostanzialmente dall'help in linea per cui non vengono fornite ulteriori spiegazioni



------------------------------------------------
//scrittura
    QFile mfile("/home/luca/prova.txt");
    if (!mfile.open(QFile::WriteOnly | QFile::Text))
        {
        return ;
    }

    QTextStream out(&mfile);
    out << "La risposta e': " << 42 << "\n";
    out << "Ma la domanda quale e'??";
    mfile.flush();
    mfile.close();

//lettura
    QFile rfile("/home/luca/prova.txt");
    if (!rfile.open(QFile::ReadOnly | QFile::Text))
            return;

    QTextStream in(&rfile);
    QString t;
    while (!in.atEnd()) {
            QString line = in.readLine();
            t = t +  line + "\n";
            }
    ui->textEdit->setText(t);

    rfile.close();
-------------------------------------------------

altrimenti in C++ classico

--------------------------------------------------
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
   string line;
   ofstream myfile ("prova.txt");
  if (myfile.is_open()){
    myfile << "This is a line.\n";
    myfile.close();
  }
  else 
    cout << "Unable to open file";
  

  ifstream myfile2 ("prova.txt");
  if (myfile2.is_open())
  {
    while (! myfile2.eof() )
    {
      getline (myfile2,line);
      cout << line << endl;
    }
    myfile2.close();
  }else 
    cout << "Unable to open file"; 
 }
--------------------------------------------------

lunedì 4 febbraio 2013

Modalita' scalata in VirtualBox

Una delle cose piu' fastidiose in VirtualBox e' la modalita' scalata che in pratica fa scomparire il menu' di Virtualbox dalla finestra dell'applicazione (impedendo cosi' di ripristinare la modalita' precedente via mouse)

Modalita' a finestra

Modalita' Scalata


per poter riconquistare il menu si deve premere la combinazione CTRL destro + F

Debian in Android su Samsung GT-5570i

In questo post verra' descritto come ho installato Linux Complete Installer ed una Debian Testing sul mio telefono Samsung GT-5550i con Rom Optimus

Il programma che effettua questo trucco si chiama Complete Linux Installer ed ha bisogno dei privilegi di root per funzionare. La cosa simpatica e' che il programma sfrutta il chroot per creare un ambiente che funziona in parallelo ad Android senza ad andare ad intaccarne la funzionalita' (non e' un dualboot..diciamo che e' piu' simile ad una macchina virtuale)

Dopo di cio' si deve scaricare l'immagine (per Debian ne esistono di tre tipi core=solo interfaccia testuale, Small e Large con Xwindows e XFCE come DM)

le immagini, una volta scompattate si chiamano tutte debian.img quindi non possono risiedere nella stessa sottodirectory. Di default l'immagine di Debian deve essere contenuta nella SD Card nella directory "debian"

Una volta installato il programma si devono installare anche il terminale e VNCClient per Android

A questo punto si clicca Launch e si seleziona Debian.
Si apre il terminale, viene effettuato il check dell'immagine mediante il file md5 allegato e vengono richieste alcune configurazioni (per esempio la nuova password,le dimensioni della  finestra grafica per VNC e se avviare il server SSH)

Se tutto va bene ci si trova in questa condizione
ovvero si leggera' il messaggio X Desktop is localhost:0

Non rimane che minimizzare il terminale e lanciare VncViewer per Android impostando la password come "debian" (attenzione.. quella che e' stata selezionata prima e' relativa all'utente Linux e non a VNC) e la risoluzione a 24 bit



ed ecco il risultato finale





ovviamente piu' il telefono e' veloce migliore sara' il risultato ed altrettanto ovviamente se il telefono e' collegato in rete si potra' usare il VNC client anche su PC od altre piattaforme

PS: una volta terminata la fase di controllo del checksum il file MD5 viene cancellato e viene creato un file di configurazione (file testo) nel quale viene riportata la dimensione del file VNC e quali server (SSH, VNC) sono attivati

venerdì 1 febbraio 2013

Loop mktime in configure/make


tentando di compilare Oleo mi sono imbattuto in un loop infinito nella fase di configure quando viene effettuato il controllo di mktime 

La cosa, estremamente fastidiosa e che riguarda anche altri programmi, sembra essere relativa ad una versione troppo recente di autoconf...al momento non ho trovato soluzioni

Aggiornamento algoritmi di spectral unmxing

Durante il dottorato avevo provato a fare unmixing di suoli naturali Una discreta serie di campioni di suolo naturale era stato raccolto in ...