Train on railsIn questo post vi spiegherò come creare un semplice blog con Ruby on Rails, come tracciare ogni cambiamento con Git e come pubblicarlo da qualche parte per renderlo pubblico, io ho scelto Heroku. Se avete avuto a che fare in passato con questi strumenti o avete qualche nozione di Rails e Git allora andiamo avanti altrimenti seguite i link e buona lettura ;-P. Per prima cosa installate la gemma di Heroku:

$ sudo gem install heroku

Create ora una nuova applicazione Rails, se non l’avete ancora fatta, e gli associamo un nuovo repository git:

$ rails myapp
$ cd myapp
$ rake db:create
$ git init && git add . && git commit -m "il mio primo commit"

Registriamoci sul sito di Heroku scegliendo il piano più semplice e gratuito. Ora creiamo il nostro semplice blog:

$ ruby script/generate scaffold articles title:string author:string description:text published:boolean category:string tag:string
$rake db:migrate

Potete migliorare l’applicazione mettendoci tutto quello che vi serve, potete ad esempio scegliere un template ed inserirlo nei file dei template. A questo punto avviate l’applicazione e guardate se tutto funziona in locale. Finito di sviluppare la vostra applicazione create una nuova applicazione Heroku:

$ heroku create
  Created http://sharp-autumn-42.com/ | git@heroku.com:sharp-autumn-42.git
  Git remote heroku added

Il nome dell’applicazione viene assegnato automaticamente, quindi facciamo il primo upload e rinominiamo la nostra applicazione:

$ git push heroku master
...
$ heroku rake db:migrate
...
$ heroku rename newnameapp
...

Proviamo quindi a visualizzare la nostra applicazione appena pubblicata nel browser, oppure puntiamo il nostro browser all’indirizzo http://newnameapp.heroku.com/:

$ heroku open

Da questo momento in poi potete fare tutte le modifiche che volete sul vostro blog locale, tenetene traccia utilizzando git e quando vorrete aggiornare la versione online allora farete:

$ git status
$ git add .
$ git commit -a -m "your message"
$ git push heroku

Se non avete saltato nulla a questo punto dovreste avere il vostro bel blog online, un esempio lo trovate all’indirizzo giasone.heroku.com. Ovviamente non è completo e ci si potrebbe lavorare tanto su, ma non credo che ci rimetterò le mani per il momento. Se qualcosa non va per il verso giusto oppure avete qualche difficoltà provate a chiedere, il modulo dei commenti qui sotto esiste per questo.

– Fine –
Postato con Kblogo

Da qualche mese ormai lavoro su HTMLExport uno dei Kipi-plugins usato anche da Digikam, KPhotoAlbum, Showimg e GwenView. Le prime due migliorie che ho implementato le ho prese dal file TODO del plaguin e da alcune richieste che venivano a gran voce richieste sul Bugzilla di KDE.
La prima feature implementata è stata quella di vedere una preview del template insieme alla descrizione durante la selezione del tema come si può vedere nello screenshot seguente:

La seconda feature è la possibilità di estrarre i metadata (EXIF/XMP) dalle immagini durante la creazione degli album, al momento il meccanismo di templating per creare le pagine utilizza XSLT rendendolo così uno strumento veramente potente e flessibile, ma nell’ultima versione le informazioni incluse nel file gallery.xml erano veramente poche. Ora si può accedere a molte più informazioni, guardate il file THEME_HOWTO nella cartella di HTMLExport per una lista dettagliata. Per rendere possibile la visualizzazione di questi metadati ho creato un semplice template che permette di testare questa feature, un esempio lo potete vedere nel prossimo screenshot:

Vi prego di scaricare l’ultima versione dal repo SVN ufficiale e di inviare qualsiasi bug a bugs.kde.org.

English version

– Fine –
Postato con Kblogo

I'm going to FOSDEMQuesto post solo per dirvi che questo week-end sarò a Bruxelles al FOSDEM (www.fosdem.org) dve spero di fare buone conoscenze. Se vi trovate li mandatemi una mail magari si puo seguire qualche talk insieme.

A presto

Sis chipQuesta sera avevo intenzione di lavorare un po sui bug di kipi-plugins, in particolare HTMLExport, ma quando ho visto che sul mio piccolo portatile per lo sviluppo (HASEE Q540S), che non usavo da un po, c’era un po da aggiornare tutto allora ho deciso di installare una KUbuntu 9.10 nuova di zecca, ovviamente ho abilitato tutti i repo ma non ho ancora avuto problemi. Nell’installare il tutto pero solo una cosa e andata storta, il video. Senza tirarla per le lunghe la risoluzione massima disponibile era 800×600, quindi potete immaginare cosa significa, icone grandissime e spazio nelle finestre ristretto. Quindi ho pensato che Google avesse tutte le risposte e che in pochi minuti avrei sistemato tutto, ma non è stato così. Dopo aver letto una marea di post sui vari forum ho trovato la soluzione sul forum francese di Ubuntu. Cosa bisogna fare? Come prima cosa bisogna scaricare i nostri driver che troviamo qui, il file si chiama xorg-driver-sisimedia_0.9-1_i386.deb e installarlo con il comando:

# sudo dpkg -i </em><em>xorg-driver-sisimedia_0.9-1_i386.deb

appena installati i driver vi basterà riavviare e tutto dovrebbe funzionare, se non funziona allora avete qualche impostazione particolare nel vostro xorg.conf quindi fatevi un backup di quello attuale e ripristinate quello originale:

# sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.2010.1.17

# sudo cp /etc/X11/xorg.conf.orig /etc/X11/xorg.conf

Per sapere quali risoluzioni sono supportate vi basterà dare un xrandr nella console e vi verrà mostrato quali risoluzioni sono disponibili nel vostro sistema. Per il momento io ho ottenuto una risoluzione di 1280×800 quindi è tutto, fatemi sapere se avete problemi.

AGGIORNAMENTO:

Se avete aggiornato alla 10.04 allora siete in vero pasticcio e state leggendo questo post non sul vostro computer anche io ho perso un po di tempo ma volendo risolvere temporaneamente, almeno nel mio caso, modificate il vostro /etc/X11/xorg.conf, fatevi un backup del file prima di modificarlo e inserite quanto sotto:

<pre>Section "Device"
Identifier      "Configured Video Device"
Boardname       "sis"
Busid           "PCI:1:0:0"
Driver          "vesa"
Screen  0
EndSection

Section "Monitor"
Identifier      "Configured Monitor"
Vendorname      "Generic CRT Display"
Modelname       "Monitor 1366x768"
Horizsync       31.5-107.0
Vertrefresh     50-80
Modeline "800x500_60.00"  31.33  800 824 904 1008  500 501 504 518  -HSync +Vsync
Modeline "800x500_75.00"  40.17  800 832 912 1024  500 501 504 523  -HSync +Vsync
Modeline "800x600_60.00"  38.22  800 832 912 1024  600 601 604 622  -HSync +Vsync
Modeline "800x600_75.00"  48.91  800 840 920 1040  600 601 604 627  -HSync +Vsync
Modeline "1024x768_60.00"  64.11  1024 1080 1184 1344  768 769 772 795  -HSync +Vsync
Modeline "1024x768_75.00"  81.80  1024 1080 1192 1360  768 769 772 802  -HSync +Vsync
Modeline "1280x768_60.00"  80.14  1280 1344 1480 1680  768 769 772 795  -HSync +Vsync
Modeline "1280x768_75.00"  102.98  1280 1360 1496 1712  768 769 772 802  -HSync +Vsync
Modeline "1360x768_60.00"  83.46  1360 1344 1480 1680  768 769 772 795  -HSync +Vsync
Modeline "1360x768_75.00"  107.21  1360 1360 1496 1712  768 769 772 802  -HSync +Vsync
Modeline "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync
Modeline "1368x768_75.00"  109.50  1368 1448 1592 1816  768 771 781 805 -hsync +vsync
EndSection

Section "Screen"
Identifier      "Default Screen"
Device          "Configured Video Device"
Monitor         "Configured Monitor"
Defaultdepth    24
SubSection "Display"
Depth   24
Modes   "1368x768_60" "1368x768_75" "1360x768@50"  "1360x768@60"  "1280x768@60"  "1280x768@75" "1024x768@60"  "1024x768@75"  "800x600@60"   "800x600@75"                "800x500@60"    "800x500@75"
EndSubSection
EndSection

Salvate e riavviate tutto si dovrebbe sistemare, volendo potrete lavorare di fino e togliere le risoluzioni che non supporta il vostro monitor, ma se non sono supportate verranno automaticamente tralasciate.

– Fine –
Postato con Kblogo

SSH FishIn questa breve guida vi illustrerò brevemente come generare delle chiavi SSH per utilizzarle sui vari servizi on-line oppure sui vostri server nel caso vogliate aumentare il grado di sicurezza nella comunicazione.
Generare una chiave SSH su GNU/Linux, MAC OSX o altri *nix based è un processo semplice se si seguono attentamente questi piccoli passi:

1. Apriamo il nostro terminale, ad esempio Konsole se si sta utilizzando GNU/Linux con KDE oppure Terminal.app che trovate in /Applicazioni/Utilità se si sta utilizzando OSX.

2. Verifichiamo che nella nostra home non ci sia di già un portachiavi, se così fosse allora non avete bisogno di leggere questa guida. Se invece nella vostra home, sotto ~/.ssh non c’è nulla o trovate solo un file chiamato known_hosts allora possiamo continuare a leggere.

3. Procediamo con la generazione di un nuovo portachiavi, optiamo per un algoritmo RSA

$ ssh-keygen -t rsa -C "youremail@gmalo.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/youruser/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/youruser/.ssh/id_rsa.
Your public key has been saved in /Users/youruser/.ssh/id_rsa.pub.
The key fingerprint is:
31:af:34:33:cf:dd:a4:82:10:7b:f0:86:e9:40:b2:db youremail@gmalo.com
The key's randomart image is:
+--[ RSA 2048]----+
|     .+   +      |
|       = o O .   |
|        = * *    |
|       o = +     |
|      o S .      |
|     o o =       |
|      o . E      |
|                 |
|                 |
+-----------------+

Alla prima richiesta, riga 3, potete premere invio o specificare un nome e un posto diverso da quello di default che vi viene proposto. Vi verrà poi chiesta una password e la sua conferma, riga 4 e 5, attenzione a scegliere qualcosa di sicuro e complesso, ma non troppo visto che poi dovrete digitarla tutte le volte che usate questo portachiavi. Ovviamente i path sono differenti e variano in base ai sitemi operativi, in questo esempio siamo su un OSX.

4. Ora non vi resta che utilizzare la vostra chiave che trovate nel file ~/.ssh/id_rsa.pub, potete prenderla e copiarla dove vi serve. Nelle oprazioni di copia ed incolla state attenti a non aggiungere spazi o caratteri di nuova riga altrimenti la vostra chiave non sarà valida. Potete usare un strumento come pbcopy (OSX) e xclip (GNU/Linux) per copiare la chiave da terminale.

Come al solito se qualcuno avesse voglia di dire la sua puo usare i commenti, e trattandosi di temi molto delicati questo “articolo” non è e non vuole essere un guida completa pertanto le vostre ricerche non finiscono qui.

– Fine –
Postato con Kblogo

Scrivo questo breve post spinto dalla voglia di provare ciò che ho appena scoperto sul blog di WordPress e cioè come formattare meglio il codice postato, speriamo che funzioni. Tornando al post, come da titolo, sicuramente vi sarà capitato di lanciare dai vostri script qualcosa sulla linea di comando, e chissà quante volte avreste voluto raccogliere l’output, bhe il codice riportato fa esattamente questo:

import popen2
(stdout, stdin, stderr) = popen2.popen3("ls -la")
lines = stdout.readlines()
for line in lines:
    print line

ovviamente dovete installare il plugin, maggiori info sui linguaggi supportati o iparametri opzionali da passare li trovate qui.

CoccinellaL’XML-RPC è un ottimo strumento per stabilire una vasta gamma di connessioni tra i computer, per integrare ambienti e piattaforme diverse, ma senza condividere direttamente strutture di dati complesse, permette dunque di condividere tali connessioni in modo semplice e veloce. Questa tecnologia permette a Python, in questo caso, di parlare con Perl, con Java, con PHP e cosi via. L’XML-RPC da l’opportunità di usare un “vocabolario standard” per lo scambio di informazioni, creando interfacce di programmazione aperte grazie all’utilizzo e alla combinazione ti tecnologie consolidate come l’architettura RPC (Remote Procedure Call) e le tecnologie XML e HTTP permettendo agli utenti accesso diretto alle informazioni richieste per l’elaborazione. Dopo questa breve introduzione passiamo all’attività pratica rimandandovi alla rete per informazioni piu dettagliate sul protocollo (wikipedia, RFC, ecc). Questo fine settimana mi sono messo un po a testare la libreria pySuseStudio che ho creato per vedere di migliorare l’implementazione e volevo avere un ambiente di testing personalizzato senza usare direttamente quello di Suse Studio cosi mi sono creato qualche script ad hoc per il test della libreria. Per creare un server XML-RPC in python è molto semplice visto che dalla versione 2.2 abbiamo il modulo SimpleXMLRPCServer nella libreria standard e come dice il nome stesso serve all’implementazione di un semplice server. Il modulo fornisce una classe con lo stesso nome, SimpleXMLRPCServer, che istanziata con un indirizzo ed una porta crea il nostro server. Un esempio di codice potrebbe essere questo:

from SimpleXMLRPCServer import *

class My_Web_Service:
    def __init__(self):
        pass

    # not callable through XML RPC because starts with '_'
    def _private(self):
        pass
    
    def tellme(self, msg):
        return "You wrote: "+msg

if __name__ == "__main__":
    server = SimpleXMLRPCServer(("localhost", 8080))
    server.register_instance(My_Web_Service())
    print "Starting ..."
    server.serve_forever()

In poche parole istanziamo un oggetto server, registriamo una istanza della nostra classe My_Web_Service e serviamo la nostra funzione tellme().
Ma come si usa questa roba, nel mio caso uso la mia libreria ma nel vostro potreste aver bisogno di un client, se avete letto la documentazione che vi ho consigliato di cercare prima allora saprete che un client non fa altro che chiamare la funzione che mettiamo a disposizione con il nostro server. Per farlo un semplice client potrebbe essere quello che segue:

import xmlrpclib
server = xmlrpclib.Server('http://localhost:8080')
msg = "Ich bin Giasone"
print server.tellme(msg)

Entschuldigung per il mio tedesco, ma se avviamo prima il server e poi il client potremo vedere in azione un sistema XML-RPC funzionante, si spera. Cosa è successo? XML-RPC utilizza come trasporto l’XML trasferito via HTTP, Con questo metodo, il client può chiamare metodi con parametri su server remoti (nel nostro caso localhost) e gli vengono restituiti dei dati strutturati. Visto che gli oggetti XML vengono inviati e gestiti attraverso richieste POST abbiamo una funzione apposita, do_POST(), che fa al caso nostro. Non è implementato però un handler per le richieste di tipo GET, possiamo ovviare al problema semplicemente implementando un nostro handler e passarlo durante la creazione del nostro oggetto server come vediamo in questo esempio:

from SimpleXMLRPCServer import *
class ExtendedXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
    def do_GET(self):
        msg = "This is a GET result!"
        #write the data to the socket along with valid HTTP headers
        res = 'HTTP/1.0 200 OK\r\nDate: %s\r\n\r\n%s' % \
          (self.date_time_string(),msg)
        self.wfile.write(res)
        self.log_request(200)

class My_Web_Service:
    def __init__(self):
        pass

    # not callable through XML RPC because starts with '_'
    def _private(self):
        pass
    
    def tellme(self, msg):
        return "You wrote: "+msg

if __name__ == "__main__":
    server = SimpleXMLRPCServer(('', 8080), ExtendedXMLRPCRequestHandler)
    server.register_instance(My_Web_Service())
    print "Starting ..."
    server.serve_forever()

ora puntate il vostro browser su localhost:8080 ed ecco la vostra richiesta accolta. Se volete maggiori informazioni, e vi consiglio di dargli un’attenta lettura, potete spulciare la documentazione dei due moduli. Come sempre per maggiori informazioni o chiarimenti chiedete pure.

– Fine –
Postato con Kblogo

Apple Mail Client

Apple Mail Client

Finalmente dopo non so quanto tempo ho deciso di riorganizzare i miei Feed RSS, che al momento erano buttati a casaccio in Mail. Ho provato a cliccare qua e là ma alla fine mi è toccto cercare in Google e l’ho trovato. In Leopard (10.5) possiamo organizzare i nostri Feed in cartelle come nella sezione “Sul mio Mac” (“On My Mac” se in inglese), per farlo basta cliccare sul feed che abbiamo inserito e andare nel menù Casella » Nuova Casella… (Mailbox » New Mailbox se in inglese) quindi apparirà la nostra cartella, ora trascina al suo interno tutti i feed che vuoi.. Fatto!!!!

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

my-team-uses-the-pomodoro

Giasone on Twitter

Errore: Twitter non ha risposto. Aspetta qualche minuto e aggiorna la pagina.

Flickr Photos

#goodbye #puglia #thanks #15giugno #terra #ulivi #backtoreality #summer

#ostuni #puglia #salento #sole #oggicosì #apasseggioconilcati @andreacati

#berlinmauer #trabant #berlin #citysightseeing #liveyourlife

#abs #nofilter #naturallife #belly #grid #liveyourlife #berlin #commercial

#relaxing #berlin #nature #naturelovers #tree

#unlucky #ticketjagd at #olimpiastadion

Altre foto