lunedì 16 settembre 2013

Guest SO 64 Bit in Virtualbox

Per usare un sistema operativo in modalita' Guest in Virtualbox non e' sufficiente avere il sistema Host a 64 bit.



Devono essere infatti attivate le opzioni AMD-V e VT-x. Esistono infatti alcuni processori (un po' vecchietti ma sono quelli che uso io) che hanno l'estensione 64 bit ma non la virtualizzazione
Inoltre deve essere impostata la giusta versione del SO dal menu a tendina. Come si puo' vedere dalla figura sottostante esistono differenti opzioni per la versione 32 e 64 bit del medesimo SO


The Playground is Open : Nexus 7

E' arrivato il Nexus 7
Si tratta della versione 2012 perche', con l'ingresso del nuovo modello, i prezzi sono piu' accettabili


La confezione e' oramai simile a quella di mille altri prodotti informatici (leggi Apple)

Dotazione minima (niente cuffie)



domenica 15 settembre 2013

Retrogaming con Chameleon PI

Un progetto interessante per trasformare una Raspberry in una piccola stazione di gioco e' Chameleon Pi, una modifica del sistema operativo base con preinstallati alcuni emulatori di consolle di retrogaming ed una interfaccia minimale


L'idea e' molto carina anche se la sostanziale mancanza di documentazione rende un po' difficile l'avvio per un principiante. Di fatto, dopo aver copiato i dati sulla scheda SD ed avviato il sistema si puo' fare ben poco perche' mancano i file ROM per gli emulatori
Sul sito vengono consigliati come sistemi
1) connettersi alla condivizione Samba denominata rpichameleon con username zx e password spectrum
2) connettersi in SSH (stesse credenziali)

per il primo sistema c'e' da dire che Chameleon Pi e' settato in DHCP quindi si deve prima capire quale e' l'IP della Raspberry e poi avviare la condivizione
nel secondo caso invece ci si trova nella home directory dell'utente zx ma non si capisce dove inserire le ROM

Leggendo invece l'help direttamente all'interno dell' SD Card si scopre che le ROM sono contenute in una partizione a se stante. Per cui la cosa piu' comoda e' inserire la SD nel lettore e digitare (nel mio caso)

mount /dev/mmcblk0p3 /media/sdcard

per copiare velocemente le ROM
Attenzione: tra le directory vi e' anche una dir denominata amiga ma non e' presente nessun emulatore Amiga per cui al momento e' inutile copiare 

E si arriva al secondo problema critico ovvero la non uniformita' dei comandi e dei modi per mettere in esecuzione le varie ROM dei giochi. Visto che ogni emulatore e' nato come progetto a se stante i tasti funzione sono sempre differente e non sono documentati all'interno di Chameleon Pi.

Di seguito una breve sintesi

Chameleon Pi
Frecce : per scorrere a destra e sinistra la lista emulatori
Enter : per selezionare
Q : Shutdown della Raspberry
O : entra nella opzioni. da notare quella effettuare il ridimensionamento della partizione delle ROM
T : lancia il terminale (exit per chiudere il terminale)
Molto carino il salvaschermo (raccolta di schermate di errore dei vari SO) anche se ti fa venire un infarto....il primo che si visualizza e' un finto kernel panic




Emulatore NES
i file ROM sono quelli con estensione .nes e vengono direttamente elencati come nell'immagine sottostante
Per iniziare il gioco premere Enter
P = Pausa
Z = Fuoco 1
H = Reset del gioco
Esc = esce dall'emulatore




Arcade (AdvancedMame)
Le varie ROM si possono salvare direttamente in formato ZIP di cui si vede la lista una volta effettuata la selezione Arcade



I Tasti funzione sono
CTRL = Fuoco 1
ALT = Fuoco 2
5 = inserire moneta
1= 1 giocatore
2 = 2 giocatori
P = pausa
Esc = esce dal gioco e due volte esce dall'emulatore

Megadrive (OGEN)
Il formato delle immagini ROM e' .md




Atari 2600 (Stella)
Il formato file per le ROM Atari e' .bin 
I pulsanti sono
Fuoco : CTRL




Gameboy (Gnuboy)
Il formato delle immagini ROM e' .gbc




Commodore 64 (Vice)
non ho ancora capito come funziona. In Vice normalmente c'e' un menu nella finestra ma in questo caso si apre direttamente a tutto schermo. Digitando la combinazione Alt+8 dovrebbe aprirsi la finestra per la selezione dell'immagine disco ma niente compare



giovedì 12 settembre 2013

Emulatori MAC Old World

Per ricorda un po' i vecchi tempi un po' di giochi con l'emulatore per computer Apple della serie 68000 e PowerPC.
Per motivi legali per poter far funzionare l'emulatore (visto che deve essere utilizzato il file ROM) si deve possedere il calcolatore originale ma vista la mia collezione di Apple che parte dal 512K e finisce ad un MacMini G4 non credo che ci siano problemi



L'emulatore piu' completo da usare e' Basilisk che, su Debian, si installa semplicemente con il comando

apt-get install basilisk2

a questo punto si devono inserire i file ROM (che si scaricano in modo piu' o meno legale da Internet o, avendo l'hardware funzionante, possono essere estratti direttamente). Basilisk gestisce ROM fino ai modelli Quadra

Successivamente si deve avere a disposizione il sistema operativo. Fino a qualche tempo fa Apple metteva a disposizione in download gratuito i System da 6 fino a 7.5.5. (attualmente la pagina non funziona piu' ma qualche anno fa mi ero salvato le immagini dei dischetti)...sempre su Internet si trovano le immagini dei System 8 e 9 ma, essendo tuttora coperti da licenza, si deve aver comprato la licenza per poterli usare

A questo punto si e' pronti. Lanciando il comando BasiliskII (attenzione alla maiuscola iniziale) compare la GUI di configurazione

Per il monitor si puo' scegliere fino a 1024x768 ma i primi monitor di Mac erano 512x342.
Per la memoria e' necessario settare almeno 12 Mb per System 8
Per la Rom si deve settare quella disponibile sotto Memory/Misc
Nei Volumes si deve creare un disco vuoto (diciamo di 20 Mb perche' i primi Mac avevano queso taglio di disco fisso) e l'immagine del System
Pronti per lo Start


Una volta avviato compare prima l'Happy Mac, seguito dalla richiesta di formattazione del disco fisso..si puo' procedere. Terminata questa fase si conclude quindi con l'installazione del System






Terminata l'installazione si puo' fare lo shutdown ed eliminare il Volume dell'immagine del System in modo da effettuare il boot dal disco fisso

Attenzione: non sono riuscito a far partire l'emulatore con il display a colori ma e' un mio difetto dato che il software permette di farlo (la GUI sotto Windows presente questa opzione che non e' presente nella versione nei repository Debian)

Come emulatore esiste anche Mini VMac che pero' non e' disponibile nei repository Debian e che e' indirizzato all'emulazione dei modelli piu' vecchi del tipo 68000 (niente PPC) in particolare di un Mac Plus 4 Mb . Si puo' scaricare direttamente il file eseguibile da questo link.
Per funzionare il programma ha bisogno di una Rom che deve essere denominata come vMac.ROM e che deve risiedere nella stessa directory dell'eseguibile.

Una volta avviato il programma si presenta la schermata con l'Happy Mac e poi l'icona del Floppy con il punto interrogativo. Si deve quindi con il drag&drop trascinare sulla finestra dell'emulatore il file immagine del System e quello del disco fisso vuoto (si trovano delle immagini di vario taglio nel file blank.zip



Montare condivisioni Windows su Linux

Come al solito arrivo in ritardo.
Fino a qualche tempo fa montavo le condivisioni Windows mediante smbmount ed oggi che ne avevo bisogno non trovavo piu' il comando nella mia Debian Box



Con un po' di disappunto ho scoperto che il comando e' stato deprecato ed attualmente si deve procedere con

apt-get install cifs-utils

si crea poi la directory dove effettuare il mount
mkdir /mnt/cifs

e poi si usa cifs (le istruzioni sono riprese dal sistema che ho usato per copiare le Rom su ChameleonPi)
mount -t cifs //192.168.0.2/roms /mnt/cifs -o username=xz,password=spectrum

mercoledì 11 settembre 2013

Errore OpenGl (FreeGlut) in Virtualbox

UPDATE 2
------------------------------------------------------------
Dopo un po' di prove ho isolato il problema
Il programma che disegna il cubo e che funzionava in CentOS e non in Debian ha smesso di funzionare nel momento in cui ho installato le Guest Additions alla macchina CentOS.
Per cui il difetto non e' nelle librerie OpenGL ma nell'implementazione OpenGL fatta da Virtualbox nelle Guest Additions
--------------------------------------------------------------

UPDATE
------------------------------------------------------------
ho riprovato dopo un po' di tempo e mi sono reso conto che l'errore di segmentazione su VirtualBox delle OpenGL non e' totalmente a carico di software di virtualizzazione

Infatti questo codice

//////////////////////////////////////////////////////////////
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

void init(void) 
{
   glClearColor (0.0, 0.0, 0.0, 0.0);
   glShadeModel (GL_FLAT);
}

void display(void)
{
   glClear (GL_COLOR_BUFFER_BIT);
   glColor3f (1.0, 1.0, 1.0);
   glLoadIdentity ();             /* clear the matrix */
           /* viewing transformation  */
   gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
   glScalef (1.0, 2.0, 1.0);      /* modeling transformation */ 
   glutWireCube (1.0);
   glFlush ();
}

void reshape (int w, int h)
{
   glViewport (0, 0, (GLsizei) w, (GLsizei) h); 
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity ();
   glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
   glMatrixMode (GL_MODELVIEW);
}

int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
   glutInitWindowSize (500, 500); 
   glutInitWindowPosition (100, 100);
   glutCreateWindow (argv[0]);
   init ();
   glutDisplayFunc(display); 
   glutReshapeFunc(reshape);
   glutMainLoop();
   return 0;
}
//////////////////////////////////////////////////////////////
compilato con 
gcc cubo.cpp -lglut -lGLU
Su Debian Testing in Virtuabox crasha brutalmente




Invece su CentOS , installando le librerie come segue

yum install freeglut freeglut-devel libX11-devel mesa-libGLU-devel

il programma funziona correttamente



c'e' da dire che CentOS usa generalmente librerie e programmi piu' vecchi rispetto a Debian Testing per cui il problema potrebbe essere proprio da ricercare nelle librerie OpenGL ed il non aggiornamento di Virtualbox
------------------------------------------------------------



Tentando di compilare il sorgente sottostante (un esempio di OpenGl) in una Debian Box in VirtualBox e' comparso il seguente messaggio


OpenGL Warning: XGetVisualInfo returned 0 visuals for 0x8807240
OpenGL Warning: Retry with 0x8002 returned 0 visuals


Errore di segmentazione


----------------------------------------
#include "GL/freeglut.h"
#include "GL/gl.h"

/* display function - code from:
     http://fly.cc.fer.hr/~unreal/theredbook/chapter01.html
This is the actual usage of the OpenGL library. 
The following code is the same for any platform */
void renderFunction()
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
    glBegin(GL_POLYGON);
        glVertex2f(-0.5, -0.5);
        glVertex2f(-0.5, 0.5);
        glVertex2f(0.5, 0.5);
        glVertex2f(0.5, -0.5);
    glEnd();
    glFlush();
}

/* Main method - main entry point of application
the freeglut library does the window creation work for us, 
regardless of the platform. */
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(100,100);
    glutCreateWindow("OpenGL - First window demo");
    glutDisplayFunc(renderFunction);
    glutMainLoop();    
    return 0;
}
----------------------------------------

Il problema e' relativo alla software di virtualizzazione (Virtualbox) che, nonostante sia spuntato l'utilizzo dell'accelerazione 3D, non gestisce in modo corretto OpenGL e quindi genera un errore che su una macchina reale sarebbe assente

Big Array in C++

Mentre cercavo di creare un array un po' grandino (6000x6000..dati derivanti da Shuttle Radar Topography Mission) mi sono accorto di una cosa un po' strana.
Il file origine e' composto da un header di 5 righe e poi 6000 righe con 6000 elementi di dati di elevazione

La compilazione del programma sottostante avviene corretamente ma quando viene messo in esecuzione

Errore di segmentazione

L'errore viene creato quando viene creata la matrice bidimensionale
-------------------------
int main()
{

int t;
stringstream textstr;
string s="";
int riga,colonna;
int srtm[6000][6000];

ifstream infile( "E010_N40.asc" );

// salta l'header
for (t = 0; t <= 5; t++)
{
getline(infile, s);
}

riga = 0;
colonna = 0;

while (infile)
  {
    string s;
    if (!getline( infile, s )) break;
    istringstream ss(s);
    colonna = 0;
    while (ss)
    {
      string s;
      if (!getline( ss, s, ' ' )) break;
      cout << riga << ":" << colonna << ":" << atoi(s.c_str()) << endl;
      
      srtm[riga][colonna] = atoi(s.c_str());
      colonna++;
      }
     riga++;
  }
return 0;


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

La soluzione, molto semplice, e' sostituire il tipo dati matrice con un vector
-------------------------
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <stdlib.h> 
#include <vector>    


using namespace std;

int main()
{

int t;
stringstream textstr;
string s="";
int riga,colonna;
vector<int> srtm;

ifstream infile( "E010_N40.asc" );

// salta l'header
for (t = 0; t <= 5; t++)
{
getline(infile, s);
}

while (infile)
  {
    string s;
    if (!getline( infile, s )) break;
    istringstream ss(s);
    colonna = 0;
    while (ss)
    {
      string s;
      if (!getline( ss, s, ' ' )) break;
      cout << riga << ":" << colonna << ":" << atoi(s.c_str()) << endl;
      
      srtm.push_back(atoi(s.c_str()));
     
      }
     
  }
return 0;

Feature Matching OpenCv

Il problema e' il seguente: trovare le differenze tra le due foto. Le due immagini sono state riprese a distanza di oltre un anno ed il ...