Archivio per la Categoria “Programmazione”

Vorrei tornare a parlare delle Canon SDK ( o EDSDK ), un potente strumento che Canon mette a disposizione dei suoi consumatori. Scrissi qualcosa a riguardo in questo post, ora vi vorrei dare qualche dettaglio in più in merito agli strumenti a disposizione. Una volta aperto il pacchetto delle SDK ( versione per Windows, esiste pure una versione per Mac ) ci troveremo davanti a tre cartelle: Document, EDSDK e Sample. Nella prima troviamo il vademecum del programmatore, con le sue 150 pagine di references. In EDSDK troviamo il fulcro delle SDK, ossia le DLL, le librerie e headers, senza di queste il vostro lavoro non può nemmeno cominciare. Nell'ultima cartella invece troviamo degli esempi, creati da Canon, con lo scopo di darci degli indizi sulla tecnica di programmazione necessaria per controllare da PC la nostra DLSR e capire come utilizzare le API disponibili.

Le attuali EDSDK ci permetto di iniziare a lavorare immediatamente con i seguenti tre linguaggi: C++, Visual Basic .NET e C#. Di questi abbiamo già i wrapper pronti all'uso, dovremmo solo scrivere il nostro codice e fare la chiamata ai metodi ( possibilmente con i parametri giusti :D ). Se invece vogliamo agire fuori dagli schemi, ad esempio creando un applicazione in Java per controllare la camera, avremmo bisogno di creare un wrapper seguendo le specifiche del JNI ( Java Native Interface ), questo permetterà all'applicazione Java di utilizzare le DLL senza problemi. Però il wrapper dovremmo crearcelo noi, una bella seccatura, sempre se non ci ha pensato qualcun altro. Per Java esiste questo progetto, ormai morto, ma chissà, forse si riesce comunque a cavarci fuori qualcosa.

Io personalmente ho optato per la strada più semplice, vado di C# ( o, ironicamente, C Cancelletto :D ). C# è un linguaggio molti simile a Java, anche se ci sono delle belle differenze e non è portabile quanto il fratello. C# infatti è sviluppato da Microsoft e rigorosamente per sistemi Microsoft, tuttavia grazie al progetto Momo, il codice C# può essere reso disponibile per altre piattaforme molto semplicemente. Dato che il mio progettino non prevede l'utilizzo di librerie grafiche il porting dovrebbe essere piuttosto indolore ( fiuuu :D ).

Se nel frattempo vi siete un po' arrugginiti in materia C# vi consiglio di dare una letta a queste guide: Guida C# da html.com, C# Language da redhost.net ed ovviamente non poteva mancare la MSDN.

Per i più curiosi uploado il file EDSDK.cs che è il wrapper utilizzato per dialogare con le dll. Queste ultime però non posso metterle a disposizione, stando alla licenza, dovrete richiederle a Canon ( vd. link alla prima riga ).

EDSDK - File .zip di dimensioni 17.59 kB e scaricato 214 volte.

Al momento però il mio progetto va un po' a rilento, da una parte perchè sto "rispolverando" C# ( grande balla, lo sto imparando :D , non ho mai usato C# ) e da un'altra perchè per ora non posseggo una DSLR Canon EOS, quindi devo "andare a scrocco" per testare l'applicazione. :D 1

Come ultima cosa torno a ribadire un concetto già espresso nel precedete post. E' davvero un peccato che con tutti gli strumenti che Canon mette a disposizione non ci sia nessuna comunità di sviluppatori ben radicata.

  1. Tornerò presto su questo argomento ;) []

Comments Nessun Commento »

Ebbene sì, tra le mie tante passione c'è un posticino riservato alla fotografia. Oggi vi voglio parlare delle SDK ( Software Development Kit) per fotocamere DSLR Canon EOS. Questo kit contiene tonnellate su tonnellate di API utilizzabili per controllare la reflex Canon EOS da un pc tramite cavo USB. Nel mondo pratico, Canon mette a disposizione miglia di blocchetti LEGO che possono essere combinati dal programmatore per realizzare qualsiasi cosa voglia.

Fortunatamente, Canon non ha fatto la bravata di distribuire queste SDK o ED-SDK ( come le chiamano loro, sono come i francesi voglion cambiare nome a tutto :D ) a pagamento, o limitarne la distribuzione solo a personale autorizzato. Per entrarne in possesso vi basterà compilare un piccolo modulo di richiesta sul sito DIDP di Canon. Compilate la richiesta con attenzione ed in lingua inglese, poi dovrete aspettare qualche giorno ( 2 giorni nel mio casi ) per l'attivazione dell'account.

La documentazione allegata al pacchetto è OTTIMA, sono circa 160 pagine in cui viene spiegato tutto esaustivamente. Troveremo quindi la definizione di tutte le API, di tutti gli errori e di tutti i settaggi della DSLR. In poche parole la BIBBIA del programmatore, in gergo il malloppo vien chiamato "Programming Reference".

C'è però il rovescio della medaglia. Da quel che vedo il servizio non è sfruttatissimo, infatti non esiste nessuna community di sviluppatori Canon, e questo mi lascia un po' perplesso. Sono dell'idea che quando una società rilascia le SDK per un proprio prodotto un nuovo mondo si apra, un mondo di possibilità inesplorate.

Probabilmente molti pensano che tutto il software necessario sia incorporato nella fotocamera, ma io mi chiedo perchè accontentarsi! Quando si può avere di più. Cioè lo dice pure lo slogan, "With Canon, You can".

Ora nei momenti morti, in treno, mi sto leggendo attentamente la documentazione per un futuro progetto ( spero non troppo futuro :D ). Vi dico solo che il tutto verterà sull'astrofotografia. Una sorta di progetto personale e per la Rheticus ( associazione astronomica feltrina e fieramente ne faccio parte, troverete il link a destra della pagina ).

Comments 1 Commento »

Devo proprio dirlo, VBScript è un linguaggio di scripting veramente potente, offre moltissime classe che possono manipolare le impostazioni avanzate del sistema operativo. Oggi ho creato un piccolo VBScript che attiva e disattiva il servizio di Hamachi e la scheda di rete virtuale che crea. Il solito prerequisito è che il servizio "Hamachi2Svc" e la scheda di rete "Hamachi Network Interface" siano disattivi.
Lo script è scaricabile a questo indirizzo.

Comments Nessun Commento »

Evidentemente non ho niente di meglio da fare nel giorno di natale. :) Vediamo un po' a cosa serve questo algoritmo.
Se avete un po' di basi di programmazione sapreste che scambiare il valore contenuto in due variabili è un operazione comunissima. Il modo più semplice per effettuare questa operazione è di usare una variabile d'appoggio per contenere uno dei due valori e poi fare lo scambio.

tmp := A
A := B
B := tmp

Direi quasi banale, no? Senonché questo modo prevede la creazione di una variabile temporanea. Esiste tuttavia un algoritmo che fa lo stesso lavoro e non richiede nessuna variabile temporanea. Sto parlando dello Xor Swap, il nome deriva appunto da scambio con OR esclusive ( operazione bit a bit XOR ). Vediamo l'algoritmo:

X := X XOR Y
Y := X XOR Y
X := X XOR Y

Il bello di questo algoritmo è l'efficienza e la facilità nel ricordarlo. Vediamone un'implementazione in Java ed in C.

public static void main(String[] args)
{
	int x = 10;
	int y = 20;
	System.out.println("x = " + x + " y = " + y);

	x = x^y;
	y = x^y;
	x = x^y;

	System.out.println("x = " + x + " y = " + y);
} //[main]
void xorSwap (int *x, int *y)
 {
	 *x ^= *y;
	 *y ^= *x;
	 *x ^= *y;
 }

Comments Nessun Commento »

Le operazioni che coinvolgono i file sul C ogni tanto possono dare qualche problemuccio, ho quindi realizzato questa interfaccia, con lo scopo di facilitare la gestione dei file. Ovviamente se siete dei guru in C questa interfaccia non vi servirà praticamente a niente :D

Per poterla utilizzare basterà copiare il file .c e .h nella cartella in cui si troveranno i file che utilizzeranno le funzioni messe a disposizione dall'interfaccia. Basterà poi includere il file .h nel vostro progetto e potrete usare tutte le funzioni qui elencate:

int FI_INIT ( FI_FILE *file, char *fname, long size );
int FI_OPEN ( FI_FILE *file );
int FI_CLOSE ( FI_FILE *file );
int FI_WRITE ( FI_FILE *file , void *userData );
int FI_READ ( FI_FILE *file , void *userData );
int FI_SEEK ( FI_FILE *file , long rec, int pos );
int FI_EOF ( FI_FILE *file );

Nel file FInt.h ( FInt = File Interface =D ) troverete la spiegazione ed un esempio di cosa fa ciascuna funzione.

Ultima cosa, io l'interfaccia la ho realizzata utilizzando il Dev-c++, dovrebbe andare anche con gcc e altri compilatori.

rar_icon FInt.rar

Comments Nessun Commento »