Tina la piantina, ovvero far parlare una pianta

Forse chi mi conosce sa gia’ di cosa parlero’…

ma per chi si trova di passaggio in questo blog la cosa potrebbe essere interessante..

Parlo di “TinaLaPiantina” ovvero il mio progetto, per ora in stallo, di dare “voce” ad una pianta con l’ausilio delle nuove tecnologie.

No, non ho scoperto il linguaggio delle piante, purtroppo, ne mi sono svegliato una mattina, all’indomani di un grande incidente magari, con il possesso di strani poteri quasi da medium.

Purtroppo no

La mia idea e’ partita da un semplice progetto di irrigazione… infatti mi sono chiesto, quando esattamente dovrei innaffiare una pianta?

I fattori che influenzano la “sete” di una pianta sono tanti: la temperatura ambientale, l’umidita’ dell’aria e del terreno, la presenza di giornate assolate o coperte, etc..

e poi avrei voluto che fosse un sistema automatico ad avvertirmi delle condizioni e volevo che lo facesse sui maggiori social networ (facebbok, twitter, etc…)

Io mi sono soffermato, per adesso, sul primo aspetto…

La temperatura ambientale

Trovare in rete degli schemi elettronici per fare un monitoring della temperatura e’ stato davvero facile.. non mi dilungo sul circuito perche’ potete trovare tutti i dettagli a questo indirizzo:Β http://www.instructables.com/id/Temperature-sensor–weatherstation/ (da notare l’uso di sensori a tecnologia 1-wire πŸ˜‰ )

Invece forse risulta piu’ interessante il modo con cui TinaLaPiantina comunica con twitter (http://twitter.com/tinapiantina) e facebook(http://www.facebook.com/tinalapiantina):

Ho scritto tutto il codice in python e per la gestione dei post su twitter ho fatto uso della libreria “python-twitter” (http://code.google.com/p/python-twitter/)

per cui l’inserimento di un post risulta molto semplice:

import twitter
self.api=twitter.Api(username=self.name, password=self.passw)

self.api.PostUpdate(message)

Davvero semplice…

Per quanto riguarda Facebook la cosa e’ piu’ complicata in quanto occorre creare una nuova applicazione facebook alla quale agganciarsi per poter postare dei messaggi nella bacheca dell’utente iscritto all’applicazione e consenziente..

A me di sviluppare una app faceook apposta non interessava, quindi mi sono appoggiato ad una app che da proprio questo servizio ed in piu’ offre delle API per postare sulla propria bacheca, si tratta di http://ping.fm/ che offre anche molti altri servizi (andate a curiosare il sito).

Tramite questo servizio occorre solo registrarsi ed usare questa sintassi:

from xml.etree import ElementTree
import urllib,urllib2
import sys
APIURL = ‘http://api.ping.fm/v1/’
#EDIT THE NEXT 2 LINES ACCORDING TO YOUR ACCOUNT
#######################################################
#degug = 1 just dumps the XML…
debug = 0
class FbStatus():
def __init__(self,apikey,userkey):
self.APIKEY = apikey #Get this from http://ping.fm/developers/
self.USERKEY = userkey #get this from http://ping.fm/key

from xml.etree import ElementTreeimport urllib,urllib2import sys
APIURL = ‘http://api.ping.fm/v1/’
#EDIT THE NEXT 2 LINES ACCORDING TO YOUR ACCOUNT
#######################################################
#degug = 1 just dumps the XML…debug = 0
class FbStatus():Β Β  Β def __init__(self,apikey,userkey):

self.APIKEY = apikey #Get this from http://ping.fm/developers/

self.USERKEY = userkey #get this from http://ping.fm/key

def UpdateStatus(self,msg = None, service = “facebook”):

global debug

print “Status message to be updated: “+msg

if service is not None: print “Service to update: “+service

data_to_post = {‘api_key’:self.APIKEY,’user_app_key’:self.USERKEY,’post_method’:’default’,’body’: msg,’debug’: debug}

#If service is provided in the command line parameter, add that service in the data_to_post too…

if service is not None: data_to_post[‘service’] = service

#Encoding the data to send…

data_to_post = urllib.urlencode(data_to_post)

req = urllib2.Request(APIURL + ‘user.post’, data_to_post)

try:

response_page = urllib2.urlopen(req)

#We get the response in XML

responseXML = response_page.read()

#Parsinf the XML

result = ElementTree.XML(responseXML)

if result.attrib is not None:

if result.attrib[‘status’] == ‘OK’:

print ‘Your message has posted successfully!!!’;

else:

print ‘Error: ‘ + result[2].text

if debug: print responseXML

#Exception is handled

except urllib2.URLError, e:

if hasattr(e, ‘reason’):

print ‘Couldnt connect to server.’

print ‘Reason: ‘, e.reason

elif hasattr(e, ‘code’):

print ‘Error code: ‘, e.code

Per ora la creazione ed il supporto di tutti gli altri sensori e’ in standby… ma quando avro’ un po’ di tempo e voglia ho intenzione di finirlo… πŸ˜‰

Purtroppo la tabatura non credo sia corretta… potete scaricare i sorgenti da qui πŸ™‚

My fisheye

My fisheye!

aggiornato 23-05-2010

Ovvero un obiettivo che permetta di fare foto, e filmati, come se tutto fosse visto da un pesce!

chissa’ poi se un pesce vede davvero cosi’…

Dopo aver creato il mio obiettivo MACRO eccomi qui pronto ad ampliare la gamma di obiettivi per la mia compatta.

L’ispirazione e’ venuta dai video di street MTB e skateboard in cui l’iquadratura con obiettivo FishEYE e’ d’obbligo sia per i video che per le foto ed in piu’ vedendo un po’ di foto su flickr mi e’ venuta tanta voglia di sperimentare…

Naturalmente non sono stato il primo a cui e’ saltato in mente l’idea di autocostruirsi un obiettivo fisheye, infatti su www.instructables.com si trovano tante guide proprio su questo argomento.

Veniamo a noi.

Per prima cosa ho comperato un normale spioncino per porte

Quindi l’ho smontato in tutte le sue parti (3) escluso le lenti

le parti fondamentali sono il finale, in cui c’e’ la lente ricurva, ed il tubicino filettato in cui ha sede la lente focale (almeno credo :-p ).

Fancendo delle prove mi sono accorto che la distanza fra la lente nel tubo e quella nel finale era troppo poca per permettere alla macchina fotografica di mettere correttamente a fuoco; cosi’ ho semplicemente avvitato la lente finale dall’altra parte del tubo, aumentando la distanza fra le lenti e permettendo una corretta messa a fuoco.

Poi ho usato uno scatolino di un rullino come adattatore per la macchina fotografica ottenendo un comodo obiettivo.

Ed ecco qui i risultati:

una bella foto in esterna:

ed ovviamente ecco anche il video

[youtube=http://www.youtube.com/watch?v=5BUy9fS8emo]

il mercatino online… comodo eh.. comodo..

clicca per ingrandire
clicca per ingrandire

Comodissimo!!

avete presente l’edizione online de “Il Mercatino”? (giornale dell’usato e non dedicato alla sicilia) http://www.ilmercatinosicilia.it/

Bene.. tale giornale, che in edicola esce il mercoledi’ ed il venerdi’, da’ la possibilita’ online di scaricare la versione della settimana passata gratuitamente…

bello no?

SI!

se non fosse che si puo’ scaricare UNA PAGINA ALLA VOLTA e se uno si fa furbo ed usa programmini (tipo “down them all”) per scaricare si ritrovera’ comunque con un CENTINAIO DI PAGINE con NOMI ORRENDI tipo: “131009qqgwaacsnkfnabit-2652_1.pdf”

Ora… possano cadere dalle scale con le mani in tasca!

come fa una persona sana di mente a consultare un giornale di annunci dovendo aprire ogni file pdf per cercare la sezione desiderata?

dato che sono informatico e non sono tanto fuso da impazzire ho deciso di crearmi uno script appostio…

con questo script e’ possibile passare dai centinaia di file pdf dai nomi osceni ad un solo, e piu’ logico file chiamato mercatino.pdf πŸ™‚

eccolo:

#!/usr/bin/python

#ti serve pdfjoin per unire i pdf

import os

for fname in os.listdir(os.getcwd()):


if (len(fname)>28):

b=fname[28:]


if (len(b)==6):

b=”0″+b

elif(len(b)==5):

b=”00″+b

print fname
print b

os.rename(os.getcwd()+”/”+fname,os.getcwd()+”/”+b)
print “rinominato”

os.system(“pdfjoin *.PDF –outfile mercatino.pdf”)

Potrebbero esserci errori di tabulazione (indispensabili per python), quindi se vi va potete scaricare il file

Giro in Critical Mass, 30-9-2009

critical_mass

Ieri (30 sett 2009) ho partecipato, come ormai ho deciso di fare ogni mercoledi’, alla Critical Mass Catanese.. (ogni mercoledi’, partenza ore 21.30 / 22.00 da piazza Roma)

Ebbene si!

anche a Catania si fa massa critica girando il bici con lo spirito proprio delle piu’ grandi Critical Mass, o quasi…

E’ stata la seconda volta che partecipavo e stavolta il numero e’ stato un po’ piu’ superiore… una cinquantina di persone o forse anche di piu’..

Il gruppo e’ MOLTO eterogeneo ed allegro, di certo non ci si annoia..

Ci sono persone di tutti i tipi con qualunque genere di bici, si fa caciare, ci si fa sentire insomma e si scherza tanto πŸ™‚

Inoltre ieri alcuni ragazzi del gruppo mi hanno insegnato il bunnyhop che io eseguo con la mia bmx!

ovvero ho imparato a saltare alzando prima la ruota davanti e poi quella di dietro, cosa molto utile se si vuole salire un gradino o su una panchina al volo πŸ˜€

Logo Critical Mass

Abbiamo girato per catania per 14km , a dire il vero loro hanno anche continuato per non so quanti altri km ma io mi sono fermato prima per raggiungere la mia ragazza ed amici… πŸ™‚

ecco il percorso della critical al quale io ho partecipato πŸ˜€

[googlemaps http://maps.google.com/maps?f=d&source=s_d&saddr=Unknown+road&daddr=Corso+Italia+to:Corso+Italia+to:Piazza+Galatea+to:Via+Umberto+I+to:Via+Vittorio+Emanuele+II+to:Via+Vittorio+Emanuele+to:Piazza+dei+Martiri+to:Piazza+Papa+Giovanni+XXIII+to:Piazza+Europa+to:Piazza+Europa+to:Viale+Ruggero+di+Lauria+to:Piazza+Consiglio+d’Europa+to:Piazza+Mancini+Battaglia+to:Viale+Alagona+Artale+to:Via+Asiago+to:37.51305,15.08253&hl=en&geocode=FZZnPAIdsiXmAA%3BFYhwPAIdCGHmAA%3BFUxwPAIdWmTmAA%3BFWZqPAIdfHTmAA%3BFeBePAIdSDDmAA%3BFQA_PAIdeDfmAA%3BFU9CPAIdS1bmAA%3BFYZAPAIdU1jmAA%3BFZxPPAIdTGbmAA%3BFUJ1PAIdYn_mAA%3BFVt2PAId84PmAA%3BFX6EPAIdUo_mAA%3BFaiRPAIdyqjmAA%3BFbeuPAIdeJbmAA%3BFSaWPAId3qjmAA%3BFfB2PAIdAH3mAA%3B&mra=mi&mrcr=9&mrsp=16&sz=16&via=2,7,10,11,12,14&dirflg=w&sll=37.51359,15.087941&sspn=0.007778,0.021136&ie=UTF8&ll=37.51359,15.087941&spn=0.007778,0.021136&t=h&output=embed&w=425&h=350]

Robot “bugovo”

Si chiama Bugovo il mio robottino elettico…

tutto e’ iniziato da questa “Insctuction” : http://www.instructables.com/id/How-to-Build-a-Robot-The-BeetleBot-v2-Revisite/

Si lo so… il suo e’ piu’ bello… ma io lo migliorero’!! tranquilli…

Iniziamo dal problema principale che ho riscontrato…

I MOTORI!

Qua a Catania non c’e’ un negozio, dico uno, che venda dei motori da 1.5V al massimo (anzi, al minimo) si trovano i motori delle 4wd Tamiya da 3V… ottimi direte, certo, se non costassero 7 euro cadauno, e considerando che me ne servirebbero 2 dovrei spendere 14 euro di soli motori, piu’ gli altri pezzi…

Per fortuna che a Catania ci sono i Cinesi!!!

infatti in un negozio dei cinesi ho trovato le imitazioni delle 4wd Tamiya… 2 euro!!

ma ora passiamo ai fatti…

ecco le foto!!

angelino con la corrazza
bugovo con la corrazza
angelino "nudo"
bugovo "nudo"
particolare anteriore con i due fine corsa
particolare anteriore con i due fine corsa
particolare di uno dei 2 motori... notare la ruota :-)
particolare di uno dei 2 motori... notare la ruota πŸ™‚

Ed ecco il VIDEO!

[youtube=”http://www.youtube.com/watch?v=M1tXFup-ONk” ]

Macro with Canon A460

La mia canon A460 possiede gia’ una comoda ed efficace funzione MACRO per le inquadrature ravvicinate di oggetti piccoli, ed i risultati sono davvero apprezzabili (le mie macro: http://www.flickr.com/photos/peppeska/sets/72157602046062548/)

Ma…

Ma voglio di piu’!
impossibile aggiungere ottiche ad una compatta, certo, ma ho voluto comuqnue fare questo esperimento.

Ho aggiunto all’obiettivo una lente oculare 10x che possedevo gia’ da tempo (usata per vedere i cristalli di alcune rocce) ed ecco i risultati!

Macro with Canon A460
Macro with Canon A460