Pagine

giovedì 3 dicembre 2009

CDRTools - utility per masterizzare e lavorare con CD, DVD, BluRay

Premessa

Il termine "masterizzare" significa memorizzare su un supporto ottico (quali, ad oggi, CD/DVD/BluRay) file di varia natura e genere. La masterizzazione può essere permanente o, nel caso dei riscrivibili, si possono cancellare i dati e sostituirli.
Quando si parla di masterizzazione, la maggior parte degli utenti associa, a questa parola, un famoso software denominato Nero Burning Rom (chiamato per brevità "Nero").
Questo programma indubbiamente molto valido gira esclusivamente su windows (anche se da qualche tempo ho visto che hanno fatto anche la versione alpha per linux) e soprattutto non è gratuito.
Nell'articolo che segue vi propongo un metodo alternativo di gestire i supporti ottici con alcuni strumenti creati su sistemi *unix ma utilizzabili anche su windows (e senza le cygwin...).
I cdrtools sono utility a riga di comando create nel lontano 1996 ed evolute nel tempo.
Esistono svariate interfacce grafiche (GUI) che aiutano l'utente ad utilizzarle senza dover imparare lunghe stringhe di comandi.
In questo articolo, tuttavia, ci concentreremo sulla riga di comando e in prossimi articoli vedremo alcune GUI.

Cdrtools


Copiando direttamente dal sito di riferimento di questo strumento, possiamo vedere che cdrtools è composto dai seguenti software:
  • cdrecord Il programma per masterizzare un CD/DVD/BD
  • readcd Un programma per leggere e clonare CD/DVD/BD multimediali
  • cdda2wav Il più evoluto estrattore CD-audio con il supporto di "paranoia"
  • mkisofs Un programma per creare filesystems ibridi ISO9660/JOLIET/HFS con attributi Rock Ridge opzionali
  • isodebug Un programma per stampare le informazioni di debug di mkisofs
  • isodump Un programma per fare il dump di ISO-9660
  • isoinfo Un programma per analizzare e verificare filesystems ISO/9660/Joliet/Rock-Ridge
  • isovfy Un programma per verificare le strutture ISO-9660
  • rscsi Un demone per abilitare il Remote SCSI

Mkisofs

Questo comando permette di creare delle immagini ISO. Tali immagini sono quelle che il comando successivo, cdrecord, riesce a masterizzare su disco.
Dopo aver raccolto i files e le directory da masterizzare in una unica cartella, è possibile procedere alla creazione della ISO con il seguente comando:
mkisofs -r -o immagine.iso cartellaconfiles
L'opzione -r permette, fedelmente al protocollo Rock Ridge, di memorizzare dentro l'immagine anche informazioni aggiuntive sui files, preservando il nome originario ed impostando i permessi in maniera ottimale per un CD: read/execute globale, write cancellato e i bits special mode sono cancellati perchè inutilizzabili su un CDROM.
Molti CDROM sono avviabili o, per dirla all'inglese, bootable. Questa possibilità è uno standard chiamato “El Torito”.
El Torito gestisce il CD come se fosse un floppy ed il BIOS può avviarlo in fase di boot.
Se si vuole rendere avviabile il CD si necessita di una immagine di floppy adatta.
Qualsiasi CD di una distribuzione linux come Debian, RedHat o altre hanno questa immagine nel proprio CD pronta all'uso: si chiama boot.img.
Prima di creare l'immagine da masterizzare si aggiunga una cartella di nome boot dentro la directory che contiene tutti i files. Si metta il file boot.img in questa sottocartella e si crei l'immagine finale con il seguente comando:
mkisofs -r -b boot/boot.img -c boot/boot.cat -o immagine.iso cartella
Ovviamente l'opzione -b seguita dall'immagine avviabile dichiara cosa deve essere avviato in fase di boot mentre l'opzione -c indica il nome del catalogo (automaticamente creato da mkisofs) richiesto da El Torito.

Mount di una immagine

A questo punto è possibile visualizzare ciò che c'è dentro l'immagine appena creata (o, ovviamente, in una immagine qualsiasi).
Per fare questo bisogna "montare" l'immagine dentro una directory con il seguente comando:
mount -r -t iso9660 -o loop cdimage.iso /mnt 
L'immagine sarà, a questo punto, navigabile come se il suo filesystem fosse dentro /mnt.

Cdrecord

E' senza dubbio il software più interessante della suite.
Prima di tutto è necessario conoscere il bus del masterizzatore. Se questa informazione non è in nostro possesso basta digitare il seguente comando:
cdrecord -scanbus
L'output del comando varia da situazione a situazione e a seconda del supporto usato. In generale dovrebbe assomigliare alla seguente riga
0,4,0  4) 'HP  ' 'CD-Writer+ 9600 ' '1.0a' Removable CD-ROM
A questo punto usando la prima informazione 0,4,0 che ci indica il bus del masterizzatore trovato, siamo in grado di masterizzare una immagine ISO:

cdrecord -v speed=8 dev=0,4,0 immagine.iso
Leggermente diverso il caso in cui, al posto di creare un cd di dati si voglia masterizzare un cd con tracce audio da ascoltare su uno stereo. In tal caso, si devono avere una serie di file in formato WAV in una cartella e digitare il seguente comando (si noti che molti lettori non leggono i CDRW; meglio usare dei CDR):
cdrecord -v dev=0,0 -dummy -dao -useinfo -pad -audio *.wav
Il software restituisce una serie di informazioni estremamente utili per l'analisi dell'esito del comando che riportiamo di sotto:

Cdrecord 2.0 (i686-suse-linux) Copyright (C) 1995-2002 Jörg Schilling
TOC Type: 1 = CD-ROM
cdrecord: Warning: not running as root user, fs= option ignored.
scsidev: '0,4,0'
scsibus: 0 target: 4 lun: 0
Linux sg driver version: 3.1.24
Using libscg version 'schily-0.7'
cdrecord: Warning: using inofficial libscg transport code version
(okir@suse.de-scsi-linux-sg.c-1.75-resmgr-patch '@(#)scsi-linux-sg.c
1.75 02/10/21 Copyright 1997 J. Schilling').
atapi: 0
Device type : Removable CD-ROM
Version : 4
Response Format: 2
Capabilities : SYNC
Vendor_info : 'HP '
Identifikation : 'CD-Writer+ 9600 '
Revision : '1.0a'
Device seems to be: Generic mmc CD-RW.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).
Driver flags : MMC-2 SWABAUDIO
Supported modes: TAO PACKET SAO SAO/R96R RAW/R96R
Drive buf size : 4183552 = 4085 KB
FIFO size : 4194304 = 4096 KB
Track 01: data 648 MB
Total size: 745 MB (73:50.37) = 332278 sectors
Lout start: 745 MB (73:52/28) = 332278 sectors
Current Secsize: 2048
ATIP info from disk:
Indicated writing power: 7
Is not unrestricted
Is not erasable
ATIP start of lead in: -11597 (97:27/28)
ATIP start of lead out: 336601 (74:50/01)
Disk type: Short strategy type (Phthalocyanine or similar)
Manuf. index: 20
Manufacturer: Princo Corporation
Blocks total: 336601 Blocks current: 336601 Blocks remaining: 4323
RBlocks total: 346489 RBlocks current: 346489 RBlocks remaining: 14211
Starting to write CD/DVD at speed 12 in real TAO mode for single
session.
Last chance to quit, starting real write 0 seconds. Operation
starts.
Waiting for reader process to fill input buffer ... input buffer ready.
Performing OPC...
Starting new track at sector: 0
Track 01: 648 of 648 MB written (fifo 100%) [buf 99%] 12.1x.
Track 01: Total bytes read/written: 680501248/680501248 (332276
sectors).
Writing time: 400.168s
Average write speed 11.9x.
Min drive buffer fill was 99%
Fixating...
Fixating time: 22.958s
cdrecord: fifo had 10719 puts and 10719 gets.
cdrecord: fifo was 0 times empty and 10592 times full, min fill was 93%.

Tra le informazioni di maggiore importanza c'è l'ultima riga che informa se la coda FIFO è sempre vuota. Se questo numero è sempre basso o si abbassa durante il processo, è necessario chiudere le applicazioni che occupano troppa CPU durante la masterizzazione.

Conclusioni


Molte persone, per pigrizia, tendono a snobbare i software senza interfaccia grafica. C'è da dire che i CDRTools sono dei programmi potentissimi sui quali tutte le interfacce di masterizzazione presenti su linux si basano.
Inoltre, se usati su un PC vecchio, si può trasformarlo in stazione di masterizzazione sempre pronta ed evitare di aggiungere masterizzatori sulla macchina usata tutti i giorni.

lunedì 30 novembre 2009

TechnoRiver: creare codici a barre su windows

Per creare codici a barre esistono moltissimi plugin, software per qualsiasi sistema operativo.

Per windows la maggior parte dei software è shareware o in versione demo.

TechnoRiver è un piccolo plugin; una volta installato, se si apre wordpad o un qualsiasi altro software di gestione testi, è possibile andare nel menù Inserisci->Oggetto.

A questo punto nella lista degli oggetti troverete anche la voce "TechnoRiver Freebar component" come in figura.

Una volta selezionato potete scrivere il vostro codice in formato CODE39.

Semplice e veloce può essere una buona alternativa gratuita ad altri software di questo genere.

venerdì 27 novembre 2009

Arduino e lettore RFID ID-12 Innovations

Premessa: RFID

RFID significa Radio Frequency IDentification ed è un sistema di identificazione di oggetti, animali e persone.
Questo sistema richiede un lettore ed uno o più TAG (o transponder) che non sono altro che oggetti "montati" in qualche modo sull'oggetto da riconoscere.
Quando il TAG passa in prossimità del lettore invia un identificativo univoco (solitamente in formato esadecimale).
La portata di questo sistema è di pochi centimetri ma, grazie ad antenne, è possibile anche arrivare a distanza di qualche metro: tale caratteristica rende questa tecnologia particolarmente interessante.
Facciamo un paio di esempi per semplificare il tutto: un utilizzo classico può trovarsi in fabbrica.
Quando arrivano dei rotoli di metallo ci applico un tag rfid e lo registro. Tutte le volte che un rotolo di metallo esce dal magazzino passa sotto un lettore rfid che identifica l'uscita del rotolo stesso (non DI UN rotolo ma proprio DI QUEL rotolo...) aggiornando la quantità nel database...
Un altro esempio può essere un sistema di tibratura aziendale: all'ingresso dell'ufficio metto un lettore RFID e metto a disposizione di ciascun dipendente un badge che non è altro che un TAG RFID: quando il dipendente entra o esce passa il badge sul lettore che registra ingresso e uscita.
In questo articolo vedremo come montare un lettore RFID su arduino e inviare il segnale al computer. Questo esperimento è stato fatto in collaborazione con Enkel.

Componenti

Gli elementi che servono sono i seguenti:

  • Un arduino da usare come gestore di input ed output tra il lettore, il led ed il PC
  • Un modulo lettore RFID: io ho scelto l'Innovations ID-12
  • Un adattatore di piedinatura per il modulo necessario perchè l'ID-12 ha una piedinatura non compatibile per una breadboard.
  • Uno o più TAG a 125kHz a forma di badge, disco, portachiavi o altro.
  • Componentistica varia (led, buzzer, resistenze)

Procedimento

Prima di tutto occorre saldare il modulo ID-12 (di cui potete trovare il datasheet) sull'adattatore di piedinatura per renderlo compatibile con i fori della breadboard.
Successivamente bisogna collegare i piedini come l'immagine che segue. Alcuni esempi, compreso il datasheet, propone anche di utilizzare un BJT sul piedino del led in modo da amplificare il segnale.
Così facendo, oltre al LED disegnato in figura, è possibile anche inserire un buzzer che permette, nel momento in cui si avvicina il TAG, di segnalare il recepimento della informazione sia in modo visivo (LED), sia in modo sonoro (BUZZ).

Usando una foto effettuata da noi:


La cosa più interessante è stato il codice utilizzato. Abbiamo usato lo sketch per arduino in questa pagina: http://www.arduino.cc/playground/Code/ID12.
Lo riporto di seguito per completezza:

// RFID reader ID-12 for Arduino
// Based on code by BARRAGAN
// and code from HC Gilje - http://hcgilje.wordpress.com/resources/rfid_id12_tagreader/
// Modified for Arudino by djmatic
// Modified for ID-12 and checksum by Martijn The - http://www.martijnthe.nl/
//
// Use the drawings from HC Gilje to wire up the ID-12.
// Remark: disconnect the rx serial wire to the ID-12 when uploading the sketch


void setup() {
Serial.begin(9600); // connect to the serial port
}

void loop () {
byte i = 0;
byte val = 0;
byte code[6];
byte checksum = 0;
byte bytesread = 0;
byte tempbyte = 0;

if(Serial.available() > 0) {
if((val = Serial.read()) == 2) { // check for header
bytesread = 0;
while (bytesread < 12) { // read 10 digit code + 2 digit checksum
if( Serial.available() > 0) {
val = Serial.read();
if((val == 0x0D)||(val == 0x0A)||(val == 0x03)||(val == 0x02)) { // if header or stop bytes before the 10 digit reading
break; // stop reading
}

// Do Ascii/Hex conversion:
if ((val >= '0') && (val <= '9')) {
val = val - '0';
} else if ((val >= 'A') && (val <= 'F')) {
val = 10 + val - 'A';
}

// Every two hex-digits, add byte to code:
if (bytesread & 1 == 1) {
// make some space for this hex-digit by
// shifting the previous hex-digit with 4 bits to the left:
code[bytesread >> 1] = (val | (tempbyte << 4));

if (bytesread >> 1 != 5) { // If we're at the checksum byte,
checksum ^= code[bytesread >> 1]; // Calculate the checksum... (XOR)
};
} else {
tempbyte = val; // Store the first hex digit first...
};

bytesread++; // ready to read next digit
}
}

// Output to Serial:

if (bytesread == 12) { // if 12 digit read is complete
Serial.print("5-byte code: ");
for (i=0; i<5; i++) {
if (code[i] < 16) Serial.print("0");
Serial.print(code[i], HEX);
Serial.print(" ");
}
Serial.println();

Serial.print("Checksum: ");
Serial.print(code[5], HEX);
Serial.println(code[5] == checksum ? " -- passed." : " -- error.");
Serial.println();
}

bytesread = 0;
}
}
}

L'ouput di questo sketch, passando sopra i vari TAG è stato il seguente:

5-byte code: 01 06 8E 2C 95
Checksum: 30 -- passed.
5-byte code: 01 07 84 6B 3F
Checksum: D6 -- passed.
5-byte code: 01 06 8E 1E DE
Checksum: 49 -- passed.
5-byte code: 01 06 8E 2C 95
Checksum: 30 -- passed.


E per chiudere, una foto con birra sullo sfondo e i TAG in primo piano:

mercoledì 25 novembre 2009

Mouse See&Touch

Premessa

Oggi si parla molto di Software Opensource. Con questo termine si intendono programmi liberamente distribuiti ai quali viene allegato il codice sorgente.
In questo modo ogni persona che conosce adeguatamente il linguaggio con il quale quel software è stato scritto, può modificare, migliorare, plasmare il software (scaricato da internet o acquistato dal fornitore) rispetto i propri gusti ed esigenze. Anche wikipedia, parlando di open source fa riferimento solo al software e mai all'hardware.
In questi ultimi anni, però, la comunità si sta muovendo anche nella direzione del hardware open source. In tal caso il produttore, oltre a vendere l'hardware prodotto mette online o fornisce su supporto magnetico, gli schemi per produrre tale hardware in modo del tutto trasparente. In questo modo, se una persona possiede le adeguate conoscenze, può replicare l'oggetto e crearselo "in casa".
Un esempio di questo è la scheda Arduino, prodotto tutto italiano del quale andare fieri: esso è acquistabile online ma si può autocostruire da zero scaricando gli schemi elettronici messi a disposizione sul sito.
Tralascio in questa sede qualsiasi considerazione su questo modello di business che porterebbe il post in una direzione non desiderata e mi limiterò a parlarvi del Mouse See&Touch.

See&Touch: mouse open source per disabili

Il mouse See&Touch significa letteralmente Guarda e Tocca.
L'esigenza che cerca di soddisfare è quella di alcune persone affette da una forma di deficienza motoria che impedisce loro di effettuare movimenti con il mouse di tipo laterale.
Costoro, infatti, riescono solo a effettuare movimenti verticali con la propria mano e, talvolta, senza nemmeno riuscire a dosare la forza.
Per queste persone due ragazzi di Torino, Giovanni Di Mingo e Bruno Benente, hanno progettato e costruito questo mouse.
La richiesta iniziale era stata fatta da Unisinf (unità di soccorso informatico) al GlugTo (Linux User Group di Torino).
Giovanni Di Mingo, socio del GlugTo, ha iniziato a progettare e costruire il mouse See&Touch, rilasciandolo come progetto open source su SourceForge:
http://sourceforge.net/projects/seetouch/
Unisinf e Datarc hanno annunciato in piu' occasioni che il progetto Mouse See&Touch e' open source, come risulta dai seguenti link:
Per chi volesse provarlo già montato e funzionante senza spenderci del tempo sopra... può pensare di acquistarlo presso questo link.
L'autore ve ne sarà grato e voi avreste un'alternativa opensource ad altre tipologie di mouse che potete modificare a vostro piacimento:
http://stores.shop.ebay.it/openhardwaresoftwaresolutions

martedì 17 novembre 2009

Tiddlywiki: un wiki semplicissimo da usare

Premessa

Un wiki è un sistema di condivisione formidabile che permette a più utenti di modificare le pagine direttamente su web senza programmi esterni, senza dover installare software ma interagendo direttamente con il nostro browser. Esistono diversi esempi di wiki su internet ma, a titolo di esempio, basti citare wikipedia la più famosa enciclopedia online redatta completamente da volontari in tutti il mondo e in diverse lingue grazie al wiki.
La maggior parte dei wiki sebbene del tutto trasparente per l'utente e facile da usare (come la struttura usata da wikipedia denominata mediawiki), richiedono l'installazione di software su un server di diversi software quali un webserver (solitamente apache), un sql server (solitamente Mysql) ed un linguaggio che interpreti le informazioni ed i contenuti (solitamente PHP) restituendo una pagina facilmente fruibile dall'utente.

Tiddlywiki: facilità d'uso prima di tutto

Tiddlywiki, a differenza degli altri strumenti che permettono di creare dei wiki, sfrutta una tecnologia decisamente più semplice.
In parole povere, l'utente deve semplicemente scaricare il file,
aprirlo con il browser e iniziare ad usarlo. Punto. I suoi punti di forza sono che non
è necessaria alcuna installazione, la possibilità di utilizzo è agevole con qualsiasi sistema operativo (Linux, Mac, Windows) e qualsiasi browser (Firefox, Camino, Explorer) e soprattutto, estrema portabilità: si può infatti mettere il file su una chiavetta e portarsela in giro sempre con sè.
Ovviamente, per contro, questo wiki ha un uso prettamente personale o, comunque, non permette l'aggiornamento da parte di troppi utenti contemporaneamente. La sua pretesa, comunque, non va certo in questa direzione.
Andando sul tecnico si può dire che gestisce tutti i contenuti in un unico file html ed il motore che permette la modifica, l'aggiornamento, l'aggiunta e la visualizzazione dei contenuti è una serie di javascript che vengono automaticamente caricati sul browser quando apro il file.

Opzioni, configurazioni, informazioni

Il sito principale è http://www.tiddlywiki.com/. Da qui, premendo il link download, si può scaricare il file.
Se si vuole avere una panoramica dei comandi e della sintassi da usare, è possibile fare riferimento a questa pagina http://tiddlywiki.org/wiki/TiddlyWiki_Markup.
TiddlyWiki mette a disposizione anche dei plugin quali la creazione di feed RSS e altre amenità; non avendone ancora testati, però, non mi esprimo in merito ma se qualche lettore ne avesse provati può scrivermelo volentieri.

venerdì 13 novembre 2009

Presenza al Dorkbot Milano 19/11/2009

Il dorkbot è una manifestazione con cadenza mensile che si propone di fare incontrare persone che "lavorano" con l'elettricità in modo più o meno creativa. Artisti, designer, studenti, hobbisti: tutti possono essere i fruitori o i presentatori in questi incontri se maneggiano l'elettricità...

Il 19 settembre del 2009 parteciperò come oratore: se qualcuno dovesse trovarsi da quelle parti (circolo ARCI Metisagge vicino Porta Garibaldi a Milano) imposterò insieme ad un amico (Enkel) un talk sull'uso di Arduino come programmatore di processori AVR. In passato avevo già parlato di questo argomento in questo blog.

sabato 24 ottobre 2009

Linux Day 2009 Torino

Sabato 24 ottobre 2009 ci sarà il Linux Day in tutta Italia.
Il Linux Day è una giornata dedicata a Linux in cui le associazioni che sponsorizzano questo sistema operativo (i LuG), organizzano eventi a tema ed installazioni gratuite sui computer degli utenti che lo richiedono.

A Torino ci sono due associazioni e questi sono i loro siti di riferimento con informazioni sul tema:
Questo anno terrò un talk tecnico su Arduino e Linux presso Cascina Rocca Franca.
In particolare farò vedere come è possibile hackerare il Linksys NSLU2 come mostrato in un mio precedente articolo su questo blog, installando una debian a bordo.
Successivamente mostrerò come Linux possa interfacciarsi con Arduino per creare anche delle applicazioni a livello aziendale.

Questa è la presentazione del mio talk.