Gordon and Go Logo

Gordon and Go Programming language Logo

Ieri, 10 novembre, Google ha anunciato un nuovo linguaggio di programmazione, Go. Non sono riuscito a trovare il link ufficiale e da quanto leggo qua e là mi pare che non sia un progetto ufficiale ma solo di alcuni sviluppatori (Robert Griesemer, Ken Thompson, e Rob Pike) che utilizzano il loro tempo libero, circa il 20% delle loro ore lavorative, per sviluppare altri progetti. Lo sviluppo di Go inizia verso la fine del 2007 ma solo verso la meta del 2008 la sua implementazione iniza a funzionare ed e proprio in quel periodo che Ian Lance Taylor e Russ Cox entrano nel progetto. Anche se non maturo al punto giusto qualche giorno fà il rilascio ufficiale. Il linguaggio si presenta come un C object-oriented molto ottimizzato. Presenta caratteristiche tipiche dei linguaggi dinamici, ma mantiene, quasi immutate, caratteristiche del C. Tutti ci saremmo aspettati un nuovo linguaggio riscritto quasi totalmente e comunque innovativo rispetto a quello che si trova sulla piazza invece l’innovazione forse sta nel tornare indietro, almeno sarà questo che avranno pensato a casa Google. Le caratteristiche principali del linguaggio, come vengono presentate sul sito sono:

  • semplice – presenta una sintassi semplice paragonabile a quella di un C misto a Python
  • veloce – ovviamente essendo un linguaggio compilato avrà delle performance migliori (pragonabile a quelli scritti in C dicono)
  • sicuro – è un linguaggio a tipizzazione statica e un particolare modello di memoria. Ha i puntatori, ma non quelli del C
  • concorrenza – implementata a livello nativo e grazie all’utilizzo delle “goroutine”, semplici funzioni eseguite concorrentemente, possiamo scrivere programmi che sfruttano il parallelismo in tutta tranquillità
  • divertente -  implementa meccanismi di garbage colection, che più che divertente mi sembra necessario per un linguaggio moderno, sintassi pulita, dicono loro, metodi per tutti i tipi e velocita nel deployment di applicazioni.

La ma scotte di Go è quella che vedete in immagine, si chiama Gordon ed è un esemplare di gopher che non so che animale sia e penso nemmeno wordreference.com (http://www.wordreference.com/enit/gopher) sappia esattamente di cosa si tratti.

Al momento Go supporta solo 2 piattafome GNU/Linux e Mac OS e 3 set di istruzioni: amd64, 386 e arm anche se ques’ultima non supportata, non ancora almeno come dicono, su Mac OS. Ha un compilatore nativo specifico per ogni set di istruzioni chiamti 5g, 6g, 8g rispettivamente per arm, amd6a e 386 e prendono il nome dal sistema Plan 9 dei Bell Lab di cui Pike e Thompson erano sviluppatori negli anni ‘80. Mi sorge il dubbio che questa mascotte sia cugina di quella di Plan 9, sembrano essere lo stesso animale amorfo anche se dicono essere un coniglio che si chiama Glenda. Ovviamente esiste anche una versione di GCC apposita per compilare i programmi scritti in Go ed i binari prodotti sembrano essere nativi quindi nulla di pseudo compilato o interpretato da qualche LLVM (Low Level Virtual Machine). Le aspettative per questo linguaggio sembrano essere molte ma qello principale sembra essere quello di scalzare al C++ dal dominio della programmazione concorrente. Il web server che ospita il sito è scritto in Go e solo quello dicono visto che ancora non è pronto per andare in produzione. Bhe che dire io l’ho gia provato e presto postero qualche test ed impressione in merito. ovviamente se ho scritto qualcosa di sbagliato e qualcuno dovesse sentirsi in dovere di smentire me lo faccia sapere, commenti e email sono lì per questo. Per finire in bellezza guardatevi il promo:

– Fine –
Postato con Kblogo

PlanetArduino.org

PlanetArduino.org

Questo brevissimo post per informare, se esistono*, tutti gli assidui lettori di questo blog che mi è venuta l’idea di fare anche questa. Si ho creato un piccolo portale che mira a creare ed identificare una comunità veramente grande e attiva che si diverte e smanetta con il nostro caro Arduino e simili. Quindi se avete un blog o un sito che parlano di Arduino, ma anche un po di altro, e siete interessati ad entrare nella comunità allora utilizzate la procedura per la sottomissione delle candidature. Ovviamente non ci sono parametri al momento per questo una volta controllato il link verrete inseriti nel Planet. Se intanto non avete un blog potete seguire gli aggiornamenti RSS o seguirci su Identi.ca e Twitter. Se poi avete suggerimenti, consigli o volete collaborare in qualche modo basta farmelo sapere, se siete qui avete gia tutti gli strumenti necessari. A guarda quasi dimenticavo di darvi l’indirizzo www.planetarduino.org.

– Fine –
Postato con Kblogo

Sto per realizzare qualcosa con Arduino ed il Wiimote, quindi inizio a postare un po di documentazione che potrebbe servirmi e potrebbe servire anche a voi. Di seguito lo schema del connettore a 6 pin del vostro/mio Wiimote visto di fronte:


Wiimote connector

Wiimote connector

  • 1 (filo rosso) – +3V
  • 2 (filo giallo) – Clk
  • 3 (filo rosso) – controller connesso?
  • 4 (non connesso) – Non usato
  • 5 (filo verde) – Data
  • 6 (filo bianco) – GND

– Fine –
Postato con Kblogo

Happy coding

Happy coding

Se sapete usare Subversion di sicuro non vi serve questo post, ma se non avete ben capito come fare a postare il vostro codice sul vostro repository di Google Code allora forse questo potrà aiutarvi. Ovviamente non è una guida passo passo, se cercate qualcosa di completo la vostra ricerca continua, ma se volete caricare il vostro codice allora è arrivato il momento di iniziare. Per prima cosa registrate il vostro progetto su Google, una volta completata la fase di registrazione andate nella tab Source del vostro progetto autenticatevi e quindi copiate il link per i membri autenticati, qualcosa di simile a questo:

# Project members authenticate over HTTPS to allow committing changes.
$ svn checkout https://your-progect-name.googlecode.com/svn/trunk/ your-progect-name --username youraddress@gmail.com

Ovviamente suppongo che voi abbiate già installato Subversion per la vostra piattaforma, se non l’avete fatto questo è il momento di farlo e ovviamente googlate per trovare qualcosa di adatto alle vostre esigenze. Fatto questo aprite il vostro terminale, console, o qualsiasi forma di riga di comando che avete ed incollateci il link che avete copiato, quello sopra per intenderci. Verrà creata nel vostro computer una cartella con il nome del progetto entrateci dentro ed iniziate ad inserire tutti i vostri file e le vostre cartelle. appena fatto digitate nel vostro terminale un

$ svn status
? file1.c
? file2.py
? cartella1

In questo modo sappiamo quali file sono stati aggiunti e cioè tutti quelli con il punto interrogativo che li precede, ora non ci resta che aggiungere questi file al nostro progetto eseguendo

$ svn add file1.c
$ svn add file2.py
$ svn add cartella1

e continuando per ogni file e/o cartella aggiunta nella cartella principale del nostro progetto. A questo punto abbiamo il nostro progetto in locale, ovviamente possiamo editare i file, aggiungerli ma per toglierli? Possiamo usare un semplice

$ svn delete file3.m

se poi volete potete digitare un svn help per una lista dei comandi, sono semplici da capire e la documentazione di Subversion vi darà consiglio. Ora che abbiamo finito di editare il nostro progeto è arrivata l’ora di aggiornare il nostro progetto anche sul server quindi digitando semplicemente

$ svn commit -m "Messaggio sulle vostre modifiche (aggiunte, cancellazzioni, ecc.)"

A questo punto ci verrà chiesto il nostro nome utente, la parte iniziale del vostro indirizzo Gmail, e una password, che non è quella del vostro account, ma è una password che trovate nelle impostazioni dell’hosting, inseritela e tutto verrà caricato online. Per verificare che tutto sia andato a buon fine potete andare sulle pagine del progetto e controllare che l’upload sia andato a buon fine. Da ora in poi vi basta modificare i vostri file come volete basta che alla fine facciate un commit e anche il vostro progetto online sarà aggiornato. Spero di essere stato chiaro e come al solito vi invito a commentare se avete bisogno.
Happy Coding!!!

– Fine –
Post scritto con KBlogo

Pithone Albino

Pitone Albino

Oggi vediamo un po come utilizzare python con il noto db engine SQLite versione 3. Mi è venuto in mente di fare un post su questo solo perche oggi mi è servito per dei test che stavo facendo. Iniziamo col dire che SQLite è una libreria software che implementa un DBMS SQL incorporabile all’interno di applicazioni e utilizzata in molti grandi ed importanti progetti, Mozilla Firefox per fare un esempio, esistono molti binding per i più diffusi linguaggi di programmazione ed è portabile su molte piattaforme. Detto questo passiamo a python che ovviamente ha un binding per questo db nelle versioni piu nuove dovrebbe esserci gia il supporto per SQLite altrimenti basta installare sqlite3, ovviamente per questo vi basta googlare ma se avete problemi chiedete pure, quindi passiamo subito al vivo dell’attività e cioè per prima cosa creiamo un db con SQLite digitando nel terminale:


$ sqlite3 example_db
SQLite version 3.6.11
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>

Ora creiamo una tabella al suo interno ed inseriamo dei dati di esempio


sqlite> create table tbl1(one varchar(10), two smallint);
sqlite> insert into tbl1 values('hello!',10);
sqlite> insert into tbl1 values('goodbye', 20);

Possiamo ora testare effettivamente il contenuto della nostra tabella


sqlite> select * from tbl1;
hello!|10
goodbye|20
sqlite>

Ora vediamo come possiamo interrogare questo db da python, per prima cosa importiamo il modulo e ci connettiamo:


import sqlite3.dbapi2 as sqlite3

#create connection to db
conn = sqlite3.connect(‘example_db’)

ora abbiamo bisogno di un cursore per poter eseguire le nostre query sul db per crearne uno:


#create cursor
c = conn.cursor()

per eseguire delle query ora dobbiamo semplicemente richiamare


# Create table
c.execute('''create table stocks (date text, trans text, symbol text, qty real, price real)''')
# Insert a row of data
c.execute("""insert into stocks values ('2006-01-05','BUY','RHAT',100,35.14)""")

e per scrivere i cambiamenti sul db basta eseguire


# Save (commit) the changes
conn.commit()

Se volessimo sapere invece quale è stato l’ultimo id inserito potremo usare


lastid = cursor.lastrowid

Se tentate di chiudere una connessione prima che le modifiche siano state salvate con il metodo commit SQLite solleverà un’eccezzione. Se non volete salvare le modifiche appena fatte vi viene messo a disposizione una funzione apposita per tornare indietro, rollback appunto, che ha il potere di cancellare tutte le vostre malefatte dal db


conn.rollback()

Fino ad ora abbiamo visto solo come inserire, ma per leggere? facciamo in questo modo


# Read all the rows from the given table
cursor.execute('SELECT * FROM stocks')
print cursor.fetchall()

Riceveremo una lista di tuple ed ognuna di esse rappresenta una riga, ma se avessimo voluto solo alcune delle righe avremmo potuto usare al posto di fetchall() un bel fetchmany() che prende come unico parametro un integer che definisce il numero di righe da tirare fuori se poi volessimo prendere solo il primo risultato allora potremmo usare un fetchone()


#fetch only 4 row from results
print cursor.fetchmany(4)
#fetch only the first row from results
print cursor.fetchone()

Ovviamente quando abbiamo finito bisogna chiudere il tutto chiamando le funzioni per chiudere il cursore e la connessione


# We can also close the cursor and connection if we are done with it
c.close()
conn.close()

SQLite è un database engine interessante a differenza degli altri non ha bisogno di un database server, infatti funziona come una libreria che utilizza un semplice file come database ed in alcuni casi le prestazioni sono veramente eccellenti. Il binding di Python sfrutta questi benefici e dà la possibilità agli sviluppatori di utlizzarlo facilmente nei propri progetti. Per il momento è tutto sperando di esservi stato d’aiuto.

– Fine –

Post scritto con KBlogo

Scrivo qui solo per tenerne nota, ma magari puo servire anche a voi!!

  1. Using HTTP is not enough. 
  2. Do not overuse POST.
  3. Do not depend on URI’s internal structure. 
  4. Do not put actions in URIs.
  5. Services are seldom resources. 
  6. Sessions are irrelevant.
  7. Do not invent proprietary object identifiers. 
  8. Do not worry about protocol independence.

Se poi volete saperne di piu trovate maggiori info qui.

– Fine –
Post scritto con KBlogo

Identica-php Library Logo

Identica-php Library Logo

Non mi dilungherò tanto nel descrivere cosa sia e a che cosa serve, ma di sicuro troverete tutto quello che vi serve sapere sulle pagine del progetto ospitato da Google. Per farla breve è una piccola libreria scritta in php per interfacciarsi con le api di Identi.ca, piattaforma di microblogging open source basata su Status.net, nuovo nome dato al progetto Laconi.ca. Vediamo un piccolo esempio in grado di postare sul nostro profilo, per prima cosa scaricate la libreria poi aprite il vostro editor preferito e inserite:
require_once("identica.lib.php") or die("Couldn't load Identi.ca library");
$identica = new Identica($username, $password);
$identica->updateStatus('Hello world!');

salvate il tutto e avviatelo noterete che verrà postato sul vostro profilo il mitico Hello World. Per qualsiasi info fate riferimento alla pagina del progetto oppure scrivetemi.
Questo è tutto per ora buon divertimento.

– Fine –
Post scritto con KBlogo

accgraphsimMentre cercavo come utilizzare l’accellerometro del mio MacBook mi sono imbattuto in questo articolo che spiega come simulare l’accelerometro sul nostro IPhone Simulator visto che non c’è di default, senza l’ausilio di un vero IPhone. Come spiega Karan Vasudeva, autore dell’articolo, bisogna scaricare UniMotion che legge l’SMS (Sudden Motion Sensor) del Mac e che ritorna i valori in vari formati. Poi bisogna scaricare un’altro software, scritto da Otto Chrons, e che trovate qui. Quest’ultimo software e diviso in due parti, uno va installato sul simulatore e l’altro va incluso nei vostri programmi sotto forma di libreria semplicemente inserendo un

#import "AccelerometerSimulation.h"

a questo punto, sempre Karan, usa il suo script python che lega i 2 software e passa il risultato di UniMotion all’IPhone Simulator attraverso il codice di Otto. Ma come funziona e cosa centro io? Allora ricapitoliamo: il software di Otto, ACCSim, è diviso in 2 parti, un server e un client, il server sta in ascolto sulla porta 10552 in attesa di una stringa tipo:

ACC: , timestamp, x, y, z

il client invece e costituito in questo caso dallo script di Karan che raccoglie dalla periferica questa stringa e passata al server. A questo punto entro in gioco io, che grazie alla libreria python trovata, PyAppleSMS e di cui parlo nel post precedente, ho modificato lo script di Karan per utilizzare questo modulo in modo da rendere il tutto piu leggero e facile e con l’utilizzo di un unico script.
Per testare il tutto quindi scaricate il software di Otto, copiate ed incollate questo script python nel vostro editor preferito:

import sys, socket, time, traceback
import applesms

kCFAbsoluteTimeIntervalSince1970 = 978307200.0 # from CFDate.c

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('',0))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

while 1:
try:
x, y, z = map(lambda x: -1 * x, applesms.coords())
# change epoch to be compatible with CFAbsoluteTimeGetCurrent()
currentTime = time.time() - kCFAbsoluteTimeIntervalSince1970

accdata = ','.join(map(str,('ACC: 0',currentTime,x,y,z)))

sock.sendto(accdata, ('', 10552))
# print '% .2f % .2f % .2f' % (x, y, z)
except (ValueError, KeyboardInterrupt):
sock.close()
sys.exit(-1)
except applesms.error, e:
print 'An error occurred in PyAppleSMS module: %s' % str(e)
sys.exit(-1)
except:
traceback.print_exc()

che altro non è che lo script di Karan che però utilizza la libreria PyAppleSMS. Avviando AccelerometerGraph, un programma di esempio che trovate nella Knowledge Base di ADC e che vedete nell’immagine sopra, e lo script che trovate sopra vi accorgerete che funziona, non so quanta attendibilità può esserci nel formato fornito, ma so che funziona e legge i dati. Vi rimando alle pagine linkate quà e là per il post per le rispettve informazioni.
Spero di essere stato chiaro, se pero cosi non fosse sentitevi liberi di chiedere delucidazioni in merito, i commenti esistono per questo!!

EDIT: Funziona anche con le nuove versioni dell’IPhone SDK 3.0

– Fine –
Post scritto con KBlogo

untitled imageUna delle cose che mi piacciono di più del mio nuovo MacBook è proprio l’accelerometro (Sudden Motion Sensor) montato ormai su quasi tutti i modelli Mac e che servono a far bloccare le testine dell’hard disk in caso di caduta del portatile. Quello che ho cercato è come usare questo accessorio per qualche altro utilizzo. Cercando un po su Google sono arrivato su questa pagina, in italiano, dove questo ragazzo ha creato un modulo scritto in C per interrogare l’SMS con Python. Vi basta scaricare il modulo, PyAppleSMS, decomprimerlo e installarlo con un semplice

python setup.py install

una volta installato potete leggere i valori dell’SMS semplicemente importando il modulo e chiamare il metodo per leggere le coordinate. Un esempio lo trovate nell’archivio del modulo altrimenti bastano queste due righe di codice:

import applesms
(x, y, z) = applesms.coords()

Ora sta a voi farci qualcosa di utile, potete usarlo nelle vostre applicazioni o nei vostri giochi.
Buon lavoro a tutti!!!

– Fine –
Post scritto con KBlogo

Durante questo fine settimana mi sono un po concentrato sull’utilizzo di python per gestire uno dei database piu famosi al mondo, MySql. Avevo già scritto qualche cosa ma ho voluto creare una interfaccia visuale al semplice e potente client da riga di comando. Il programmino è scritto in python e QT come librerie grafiche, il perché non lo so, forse la settimana prossima faro un porting su GTK. Per il momento il programmino non fa altro che eseguire delle query e fornire i risultati. Ma vediamo velocemente come creare un piccolo script per eseguire delle query su un db Mysql. Per prima cosa abbiamo bisogno del modulo che permette a python di interagire con Mysql, il suo nome è python-MySqldb per installarlo su sistemi Debian based basta digitare, da amministratore:

# apt-get install python-MySqldb

a questo punto abbiamo tutto il necessario per iniziare . Per prima cosa apriamo il nostro nuovo file .py nel nostro editor preferito ed iniziamo con l’importare il modulo:

import MySQLdb

a questo punto non ci resta che creare una connessione con il DB:

 conn = MySQLdb.connect (host = "localhost",
                           user = "testuser",
                           passwd = "testpass",
                           db = "test")

ora abbiamo un oggetto connessione che punta ad un database all’indirizzo “localhost” con utente “testuser” e password “testpassword” ed abbiamo chiesto di utilizzare il database “test”. Una volta ottenuta la connessione abbiamo bisogno di qualcosa che ci indichi sempre come e dove comunicare con il DB quindi creiamo un oggetto cursore:

cursor = conn.cursor()

Fatto questo ora possiamo iniziare ad interrogare il nostro DB lanciando delle query semplicemente lanciandole attraverso il metodo appropriato:

cursor.execute ("SELECT * FROM testtable")

dove estraiamo tutto il contenuto della tabella “testtable” all’interno del DB “test” per vedere il risultato della query abbiamo bisogno di prendercelo:

   row = cursor.fetchone ()
   print row

Quindi avremo stamapato a schermo il risultato dell’interrogazione. Gli statement sopra non sono ilmassimo dato che potremmo avere piu righe e piu colonne per ogni riga quindi sarebbe meglio ciclare, magari con un for, sul risultato e poi utilizzarlo come meglio crediamo.
Possiamo fare tutte le interrogazioni che vogliamo l’importante è lanciarle con il metodo “execute” l’importante è che al termine di tutte le nostre operazioni chiudiamo la connessione con il DB eseguendo un:

   cursor.close()
   conn.close()

Sinceramente la chiusura del cursore al momento mi da errore ma non so non ho letto per bene la documentazione, quindi assicuratevi di chiudere almeno la connessione con il db. Questo e tutto non vi resta che mettervi e provare, per maggiori info potete visitare il sito del modulo su SourceForge.
Se invece volete usare il mio programmino, chiamato QSql potete scaricarlo dal link qui sotto. Ogni commento o critica è benvenuta, per qualsiasi chiarimento non vi resta che chiedere.

QSql v1.0 QSql v 1.0

– Fine –
Post scritto con KBlogo

 

Novembre: 2009
L M M G V S D
« Set    
 1
2345678
9101112131415
16171819202122
23242526272829
30  

Giasone on Twitter

Flickr Photos

93767610f82be1bf467a4e37c8abe60a_mirror_by_cocut.cn

793a998cae773ac1782236e2e29b2c85_mirror_by_cocut.cn

Hydro_Quebec_by_niponwar_mirror_by_cocut.cn

Milostudy_by_DouglasEltz_mirror_by_cocut.cn

zimo_by_zee7_mirror_by_cocut.cn

Eyebrid_by_sinthux_mirror_by_cocut.cn

More Photos