Pagine

12 marzo 2011

Regole di Traduzione

Dopo essermi addentrata nel mondo PyObjC e aver trovato ben poco materiale a riguardo, ho pensato di tradurre in italiano le "regole" basilari di conversione da Objective-C a Python. Dedicherò un post ad ogni regola di cui verrò a conoscenza, partendo da quelle basilari.
Purtroppo non conosco nel dettaglio la sintassi di Objective-C e quello che presento di seguito è quello che ho capito dalla documentazione (alquanto scarna) che si trova sul sito di PyObjC.
Vi chiedo scusa per le inevitabili imprecisioni e se doveste riscontrare errori, segnalatemelo.
E ora cominciamo.

PRIMA REGOLA(la più importante):

Sintassi Objective-C
metodo: arg1 argomento: arg2;
Sintassi PyObjC
metodo_argomento_(arg1, arg2) 

Per "tradurre" un metodo da Objective-C a Python, PyObjC richiede che il nome del metodo in Python sia composto dal nome del metodo Objective-C e dai nomi degli argomenti, ognuno seguito da un underscore ("_") per indicare al traduttore la posizione originale dei due punti (":"). I valori degli argomenti vanno inseriti ordinatamente all'interno delle parentesi.

Tutto qui, questo è tutto quello che vi serve per cominciare ad utilizzare i framework cocoa all'interno dei vostri programmi scritti in Python. Nient'altro. ^_^

21 febbraio 2011

Internet of things con Massimo Banzi

Giovedì 24 febbraio a Bologna si terrà:
"Internet delle cose - Che futuro ci aspetta"
L'incontro, gratuito, è organizzato da Assi (Associazione Specialisti Sistemi Informativi) e Cofimp. Interverranno Massimo Banzi (co-fondatore del progetto Arduino) e Leandro Agrò (co-fondatore di WideTag e Global Director User Experience di Publicis Healthware International).
Se volete iscrivervi, seguite il link alla pagina dedicata all'evento su EventBrite, ma affrettatevi che al momento sono disponibili solo 5 posti.

9 febbraio 2011

Codemotion 2011

Il 5 marzo si terrà a Roma il primo Codemotion, un evento dedicato a tutti gli appassionati di tecnologia e programmazione.
L'evento, gratuito, è un'evoluzione del JavaDay che dopo 4 anni si apre a tutti i linguaggi di programmazione e diviene appunto Codemotion. L'iniziativa vuole essere una festa dei linguaggi di programmazione: un'occasione per condividere le proprie esperienze e incontrare le aziende sponsor, a cui è possibile lasciare il proprio CV. Tra gli sponsor più conosciuti troviamo Samsung, Oracle, Adobe, Sony Ericsson, IBM e Capgemini.

Il programma si presenta molto ricco, con i primi interventi previsti alle 9.00 e gli ultimi alle 18.00. I talk sono suddivisi in 7 categorie: gaming, mobile, web & beyond, tools & process, hacking & OS e what's hot per un totale di 65 talk spalmati lungo tutto l'arco della giornata.

Durante questo mese di attesa è inoltre possibile iscriversi a due concorsi: Il primo, aperto a tutti, si chiude il 15 febbraio e mette in palio un iPod touch da 32 GB a chi invierà il codice che verrà votato come il più "emozionante". Il secondo invece è aperto solo a studenti universitari e si chiude il 18 febbraio; in questo caso il premio è di 1000€ per i primi tre classificati in grado di creare il processo migliore sulla piattaforma Blueworks Live della IBM.

Personalmente trovo positivo che in Italia si sia riusciti ad organizzare un evento simile, dato che nel nostro paese si fa fatica a scovare eventi di una certa dimensione legati al mondo della tecnologia e della programmazione. Spero vivamente che il tutto si svolga piacevolmente e che il Codemotion diventi un appuntamento fisso.
Ora ho solo un piccolo problema, come faccio a scegliere quali talk seguire? ^_^

Nota: per approfondire, visitate il sito del Codemotion.

8 febbraio 2011

GDD Milano #15 - Data

Piccolo aggiornamento per quanto riguarda la data della quindicesima Girl Geek Dinner Milanese.
L'incontro dal titolo: "User interfaces – Come interagire con la tecnologia e padroneggiarla senza esitazioni" si terrà il 4 marzo in luogo da definirsi.
Se siete una Girl Geek e volete intervenire durante la serata, andate sul sito delle Girl Geek Milanesi, stanno infatti cercando ragazze disponibili a prendere in mano il microfono. Se siete Boy Geek invece, è meglio che cominciate a cercare qualche donzella perché gli uomini accedono solo accompagnati da vere Girl Geek.

OpenMT: Multi-touch DIY

Grazie a twitter ed al blog di Make:, sono venuta a conoscenza di un interessante progetto: OpenMT.
Il progetto è stato sviluppato dalla  Sensible UI, una piccola azienda coreana, che stanca di andare alla ricerca di dispositivi multi-touch adatti ai propri scopi, ha deciso di crearne uno.
La particolarità di questo dispositivo sta nel fatto che è possibile riprodurlo autonomamente grazie al software open-source e ad Arduino. Al momento è disponibile la release 0.1,  che promette di poter operare un trackpad multi-touch 8x8. Il progetto si compone di 3 software (VIS3D, MTView, SGDriver) e di un dispositivo multi-touch basato su Arduino (ArduMT1).
I video mostrano alcuni esempi di funzionamento:




Il software è stato sviluppato per Windows 7, ma confido nel fatto che, se il progetto si dimostrerà valido, presto verrà portato anche su Linux e Mac.
Vi ho stimolato la curiosità? Se volete approfondire potete fare riferimento al sito del progetto OpenMT, al blog ufficiale o alla repository su sourceforge.

7 febbraio 2011

IOBluetoothDeviceInquiry - Ora funziona!

Nonostante avessi richiesto una mano per del codice nel post PyobjC e Cocoa API, sono riuscita in breve a scovare nei meandri della rete qualcuno che come me ha avuto qualche difficoltà a capire il funzionamento della classe IOBluetoothDeviceInquiry e che per questo ha messo a disposizione un esempio corretto. L'esempio originale (lo trovate qui) è stato scritto in objective-c e comprende anche qualche manipolazione dei dispositivi trovati.
Quello che ho fatto è stato semplicemente "tradurre" l'esempio in Python tramite le regole di conversione di PyObjC, eliminare le parti che non mi servivano e personalizzarlo un po':

# Setup the inquiry to search for available devices
inquiry = IOBluetoothDeviceInquiry.alloc().init()
inquiry.start()
NSThread.sleepUntilDate_(NSDate.dateWithTimeIntervalSinceNow_(7))
inquiry.stop()

# Create an array of foundDevices
deviceList = inquiry.foundDevices()
print deviceList.count()

Effettivamente, mi ero già accorta che il mio codice precedente terminava troppo rapidamente, di certo non i 10 secondi cui dovrebbe durare la ricerca, ma non avevo trovato il modo di risolvere la questione e così foundDevices() veniva chiamato troppo presto. Quello che invece non mi è ben chiaro, è perché sia necessario chiamare anche stop(): la ricerca non dovrebbe terminare da sola dopo massimo 10 secondi? C'è ancora qualcosa che mi sfugge?

6 febbraio 2011

Pagamento Sociale

Navigando nella sconfinata rete sono incappata in questo strano modo di farsi pubblicità e "vendere" i propri prodotti. Si chiama Pay with a Tweet e si tratta di rendere disponibili contenuti (libri, mp3, trailer) in cambio di un tweet e nient'altro.
Lo trovo un ottimo modo per farsi pubblicità a patto che i contenuti rilasciati siano di effettiva qualità e non un semplice sotterfugio per diffondere il proprio marchio attraverso i tweet degli utenti.
Al momento il fenomeno non sembra particolarmente diffuso anche se sul sito è scritto che sono stati già creati più di 300.000 tweet-pagamenti. Se vi interessa un elenco dei file "comprabili" andate a dare un occhiata qui. Personalmente sono interessata solo all'offerta dell'Hotel Domspitzen che offre una birra per un tweet, peccato si trovi a Colonia!

5 febbraio 2011

Finiti gli indirizzi IPv4

Appena un paio di anni fa frequentavo il mio primo corso inerente le reti di comunicazione e Internet. In quel corso ci vennero presentati tra le altre cose IPv4, IPv6 e il problema dell'esaurimento di indirizzi pubblici sotto IPv4. Ci venne detto che in realtà da anni esiste un'alternativa, IPv6 appunto, ma che a causa dei costi di aggiornamento delle infrastrutture e della prorogabilità del problema, davvero pochi si erano preoccupati di adeguarsi al nuovo standard.

Bene, è del 3 febbraio scorso la notizia che effettivamente anche gli ultimi indirizzi pubblici sono stati assegnati a vari RIR (per approfondire: qui e qui).

In realtà, per ora, questo non comporta grandi stravolgimenti per gli utenti comuni, ma certo fa pensare, e personalmente mi stupisce, con che rapidità sia cresciuto Internet negli ultimi anni.

PyobjC e Cocoa API

E' da non molto che mi sono avvicinata al mondo Mac e al mondo Python. Le due cose non sono necessariamente legate, ma dato che sto cercando di esplorare le potenzialità del Wiimote e tutti i tutorial e le API che trovo sono o dedicati agli sviluppatori Windows o agli sviluppatori Java, ho pensato di risalire alla fonte e di provare a crearmi una mini libreria personalizzata (forse dovrei chiamarla framework? ^_^) per gestire l'interfaccia bluetooth direttamente da un programma Python.
A dire la verità, esisterebbe già un API scritto proprio per gli utenti della mela, ma è un progetto arrivato alla release 0.4 e mai più toccato dal novembre 2009. La cosa non mi rende molto fiduciosa per quanto riguarda la compatibilità e mi sono quindi detta che avrei speso meglio il mio tempo creandomi un API ad hoc, piuttosto che imparando quella di qualcun'altro e nel frattempo avrei anche preso dimestichezza con Python.

In mio soccorso sono arrivati subito Pyobjc e i framework Cocoa (in particolare IOBluetooth e IOBluetoothUI).
Il primo è un bridge tra Python e Objective-C che si trova direttamente installato in OS X 10.5 o superiori, mentre le seconde sono le API presenti nei sistemi operativi Apple più recenti e sono scritte in Objective-C.

A questo punto, pensavo di avere tutto quello che mi servisse per mettermi a programmare, ed invece sto trovando parecchi intoppi lungo la strada. Il fatto è che trovo pochissima documentazione su Pyobjc, anche se sembrerebbe largamente utilizzato e lodato. Se qualcuno dovesse trovare qualche fonte aggiornata mi farebbe cosa gradita se me la segnalasse, magari in un commento.
Nel frattempo cercherò di raccogliere tutte le informazioni che riesco a trovare in questo e successivi post, in modo che possano essere utili anche ad altri.

Importare un framework in un modulo Python:
Da OS X Leopard per importare un framework in un modulo Python tramite Pyobjc si utilizza:

__bundle__ = objc.initFrameworkWrapper("IOBluetooth",
               frameworkIdentifier="com.apple.IOBluetooth",
               frameworkPath=objc.pathForFramework(
               "/System/Library/Frameworks/
               IOBluetooth.framework"),globals=globals())



E non come suggerito in molti post nella rete:

objc.loadBundle("IOBluetooth", globals(),                 bundle_path=objc.pathForFramework
                (u'/System/Library/Frameworks/
                IOBluetooth.framework'))


il problema a questo punto diventa cercare un device remoto, che nel mio caso è il Wiimote. Ho provato in vari modi, ma il risultato è sempre negativo.
Questo è il codice:

inquiry = IOBluetoothDeviceInquiry.alloc().init()
a = inquiry.start()

if a == 0:

  devices = inquiry.foundDevices()

  print devices.count()

else:

  print "errore"

devices.count() ritorna sempre 0, il che dovrebbe indicare che non è stato trovato nessun device bluetooth. Evidentemente sto sbagliando da qualche parte, ma non riesco a capire dove. Nessuna idea?

Aggiornamento: Ho risolto il problema! Se volete sapere come, leggete questo post.

4 febbraio 2011

Una nuova Girl Geek Dinners Milanese

Sul blog delle Girl Geek Milanesi è di ieri il post che annuncia l'organizzazione di una nuova cena tra geek dal titolo:

"User interfaces: i vari modi per utilizzare il web, i device di nuova generazione e gli strumenti di uso comune in modo semplice e user friendly"

E' da qualche anno ormai che seguo abbastanza assiduamente il blog principale e la sezione milanese, ma solitamente gli argomenti trattati, soprattutto nelle cene, mi hanno sempre interessato marginalmente. Infatti, nonostante apprezzi il lavoro di informazione e networking che svolgono, ho sempre trovato gli argomenti rivolti più ad un pubblico di utilizzatori delle nuove tecnologie che non di sviluppatori. Questa volta invece mi hanno davvero incuriosito e spero di riuscire a presenziare all'incontro.
Per ora non è dato sapere né il giorno, né il luogo della cena, ma è stata presentata una prima scaletta:

-  Interfaccia grafica di un sito web
-  Architettura dell’informazione
-  Usabilità
-  Interazione uomo-macchina
-  Interfaccia game
-  Interfaccia TV
-  Interfaccia mobile

Cercherò di tenervi aggiornati sugli sviluppi della serata e soprattutto spero che per una volta affrontino l'argomento anche dal punto di vista di chi lavora nella tecnologia e non soltanto di chi lavora con essa.