martedì 13 novembre 2012

Slax

Sempre alla ricerca di creare un sistema Linux da portarmi a giro come Live Cd mi sono imbattuto in SLAX una derivata da Slackware


Boot di Slax

la caratteristica piu' interessante e' quella di non fornire una ISO prestabilita ma di poter creare la propria Linux Box con la funzione Slax Build

In estrema sintesi si puo' partire da un sistema di base ed aggiungere i vari moduli di interesse (io mi sono creato un sistema per la programmazione) fino ad scaricare un file .iso con tutto montato
Il sistema non e' perfetto e le dipendenze devono essere in qualche caso corrette a mano ma in fin dei conti e' poca cosa

Il modulo CodeBlocks aggiunto alla ISO
Interessante e' anche la possibilita' di salvare la configurazione dei moduli su un file per poterlo correggere o riprendere la selezione in un secondo tempo

Creare una Live-Cd partendo da una installazione funzionante

Una delle cose che ho sempre desiderato e' quella di potermi portare dietro i programmi e le impostazioni che mi servono anche se non ho dietro il portatile

Ho cosi' provato un po' di soluzioni per poi decidere il sistema riportato da Remastersys

Non volendo sacrificare il portatile mi sono creato una macchina virtuale minimale partendo da una installazione standard di Ubuntu Server 12.04 (Remastersys non gestisce Debian Testing e quindi ho escluso di provare su Debian) per poi aggiungere openbox

apt-get install openbox obconf obmenu openbox-themes startx xterm

in questo modo si ha un ambiente grafico minimale
E' giunto il momento di creare una iso del nuovo sistema prima aggiungendo ad apt la chiave del repository di Remastersys

wget -O - http://www.remastersys.com/ubuntu/remastersys.gpg.key | apt-key add -

dopo si modifica il file /etc/apt/sources.list aggiungendo la riga
deb http://www.remastersys.com/ubuntu precise main

seguito dall'aggiornamento di apt
apt-get update
e
apt-get install remastersys

e' giunto il momento di creare il file iso includendo anche i file personali (e non solo quelli di sistema)
remastersys backup nome_file.iso

il file viene generato nella directory /home/remastersys

dopo un (bel) po' viene creato il file iso che puo' essere masterizzato o messo su chiavetta USB e distribuito
Al riavvio si presenta questo menu


e tutto funziona magnificamente

lunedì 12 novembre 2012

Wget dietro proxy server

Per utilizzare il comando wget in una rete schermata da un proxy server non e' sufficiente impostare la variabile bash http_proxy con il comando

export http_proxy=http://myproxy:8080

perche' il programma di fatto non legge questa impostazione

la soluzione piu' semplice e' creare un file .wgetrc inserendo la stringa
http_proxy=http://myproxy:8080

sabato 10 novembre 2012

Installa Ruby on Rails su Debian per Passbook Server



per questa installazione si e' partiti da una Debian Testing netinstall perche' la versione Stable ha come pacchetti Ruby 1.8 mentre a me serve la versione piu' recente di Ruby (la 1.9) accoppiata al piu' recente Rails (3)

Esiste un Live Cd di TurnKey che propone un ambiente Ruby On Rails gia' configurato ma essendo un derivato da Debian Stable anche in questo caso si trovano pacchetti datati

Lo scopo finale e' quello di settare un ambiente di sviluppo/test per i Passbook di Apple

una volta installato il sistema in modalita' server (quindi niente ambiente desktop) si procede con
apt-get update
apt-get upgrade
apt-get install build-essential apache2 libapache2-mod-passenger
apt-get install rdoc ruby1.9.1-full
apt-get install ruby1.9.1-dev libopenssl-ruby rubygems1.8
gem install fastthread
apt-get install ruby-rails-3.2
gem install coffee-rails uglifier
con queste impostazioni si ha un ambiente di svliluppo generico che permette di usare gli esempi riportati a questo link

a questo punto si inizia a settare le dipendenze per il Passbook Server
gem install sinatra sequel sqlite3 rubyzip rack json terminal-table

si scompattano gli esempi Passbook che si trovano su Apple Developer e ci si posiziona nella directory ServerReference/pass_server e si lancia
gem install lib/sign_pass-1.0.0.gem
chmod 755 lib/pass_server_ctl 
lib/pass_server_ctl -s







martedì 6 novembre 2012

Menuet Os

Un progetto interessante ma sostanzialmente inutile....un sistema operativo scritto interamente in Assembler con Fasm

Menuet OS si scarica da qui e l'immagine e' grande quanto un disco da 1.44 Mb
Per utilizzarla con QEmu si usa la seguente stringa

qemu -localtime -m 768 -fda M32-085B.IMG -L . -net user -net nic

la prima schermata e' per settare alcuni parametri della scheda video


e dopo si ha il desktop con alcune utility (a dire il vero molto scarne)


lunedì 5 novembre 2012

Primi passi in Assembler su Linux


piu' che altro per divertimento ho provato a riscrivere qualcosa in assembler..era dai tempi del DOS e di Int 21h che non usavo piu' l'assembler
E' curioso ritrovare che anche Linux come Dos usa un interrupt (80h) per la gestione del sistema ed e' anche curioso di come si possano usare le chiamate alle funzioni C (in questo caso printf) dall'Assembler (di solito e' il linguaggio di piu' alto livello che sfrutta quello di livello piu' basso)

Tutti gli esempi sono compilati con nasm

Il primo esempio stampa una scritta a video usando l'Int 80h
Per la compilazione si devono dare i seguenti comandi
nasm -f elf32 scrivi.asm
ld -o scrivi scrivi.o

scrivi.asm
-------------------------------------------------------
global _start

section .text
_start:
    mov eax,4
    mov ebx,1
    mov ecx,messaggio
    mov  edx,lunghezza
    int 80h

    mov eax,1
    mov ebx,0
    int 80h

section .data
    messaggio: db 'Hello ',0x0a
    lunghezza: equ $-messaggio


-------------------------------------------------------
come output si ha
Hello

Per il secondo esempio si usa invece la chiamata esterna printf per stampare il valore di una variabile

In questo caso la catena di compilazione e' differente per venire incontro alla chiamata esterna che e' risolta da gcc
nasm -f elf32 -l scrivi2.lst scrivi2.asm
gcc -o scrivi2 scrivi2.o

scrivi2.asm
-------------------------------------------------------
 extern printf

section .text

    global main
main:
    push ebp
    mov ebp,esp


    push dword [a]
    push dword formato
    call printf

    add esp,12

    mov esp,ebp
    pop ebp

    mov eax,0
    ret

section .data
    a: dd 5
    formato: db "a=%d",10,
0

-------------------------------------------------------
come output si ha
a=5

Molto simile al precedente il terzo esempio mostra un ciclo

nasm -f elf32 -l scrivi3.lst scrivi3.asm
gcc -o scrivi3 scrivi3.o

scrivi3.asm
-------------------------------------------------------
 extern printf

section .text

    global main
main:
    push ebp
    mov ebp,esp

    mov ebx,10
gira:
    push ebx
    push dword formato
    call printf
    dec ebx
    jnz gira
  

    mov esp,ebp
    pop ebp

    mov eax,0
    ret

section .data
    formato: db "ciclo=%d",10,0

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

produce come output
ciclo=10
ciclo=9
ciclo=8
ciclo=7
ciclo=6
ciclo=5
ciclo=4
ciclo=3
ciclo=2
ciclo=1





Array a dimensione variabile in Android

Uno degli aspetti piu' divertenti dei linguaggi di programmazionee evoluti e' la possibilita' di gestire degli array a dimensione non predefinita (a partire dalla STL di C++)

In Java ed Android vi sono ben due possibilita' date dal formato Vector ed ArrayList

Nei due esempi gli array vengono popolati con i valori della funzione Seno.
Dal punto di vista operativo le differenze sono veramente minime.
  1. i metodi del Vector sono sincroni mentre gli ArrayList non sono sincroni
  2. i Vector sono thread-safe ma sono piu' lenti nell'aumentare le dimensioni
  3. ad ogni add Vector raddoppia le dimensioni disponibili mentre ArrayList aumenta le dimensioni di meta' della propria dimensione

Vettore
-------------------------------------------------------
v = new Vector<Float>();
for (int t=0;t<360;t++)
        {
            v.add((float) Math.sin(Math.toRadians(t)));
        }
int length = v.size();
Log.d("lenght_t", Integer.toString(length));

-------------------------------------------------------
ArrayList
-------------------------------------------------------
al = new ArrayList<Float>();
for (int s=0;s<360;s++)
        {
            al.add((float) Math.sin(Math.toRadians(s)));
        }
length_s = al.size();
Log.d("length_s", Integer.toString(length_s));
Iterator<Float> it = al.iterator();
    while (it.hasNext()) {
            System.out.println("Data is "+ it.next());
    }

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

Change Detection with structural similarity

L'idea di base e' quella di cercare le differenze tra le due immagini sottostanti Non e' immediatamente visibile ma ci sono dei ...