Visualizzazione post con etichetta tech. Mostra tutti i post
Visualizzazione post con etichetta tech. Mostra tutti i post

martedì 11 gennaio 2011

Ubuntu: installare le vecchie versioni di Python

Un po' di pazienza e un po' di google-fu, ho trovato un progetto con relativo repository ppa, che mantiene i pacchetti deb delle vecchie versioni di Python per Ubuntu.

$ sudo add-apt-repository ppa:fkrull/deadsnakes
$ sudo apt-get update
$ sudo apt-get install python2.4 python2.4-dev python2.5 python2.5-dev


Dopodiché si possono utilizzare con virtualenv utilizzando l'opzione --python per indicarne la versione, ad esempio:

$ mkvirtualenv --no-site-packages --python=python2.4



Link e risorse:

https://launchpad.net/~fkrull/+archive/deadsnakes



HTH,
Sani

lunedì 10 gennaio 2011

Ubuntu: setup di un 'virtualenv environment'

Appunti di viaggio per installare e configurare un ambiente Python con virtualenv/virtualenvwrapper.


Prima di tutto installare pip, virtualenv e virtualenvwrapper

$ sudo apt-get install python-virtualenv python-pip
$ mkdir ~/.virtualenvs
$ sudo pip install virtualenvwrapper


Esportiamo le variabili d'ambiente in ~/.bashrc, editando il file con il nostro editor preferito vim ;)

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
export PIP_VIRTUALENV_BASE=$WORKON_HOME


Set ed export del PYTHONPATH nell'ambiente virtualenv editando il file /.virtualenvs/postactivate

export PYTHONPATH=$PYTHONPATH:$VIRTUAL_ENV


Elenco dei comandi di base, con una piccola descrizione.

$ workon myenv # setta l'attuale ambiente virtualenv (myenv)

$ deactivate # Disattiva l'ambiente corrente

$ mkvirtualenv --no-site-packages myenv # Crea un ambiente virtualenv pulito

$ rmvirtualenv myenv # Rimuove l'ambiente

$ cdvirtualenv # Va alla directory dell'ambiente attivo

$ lssitepackages # Elenco dei packages installati nell'ambiente




Setup di un ambiente di esempio:

$ mkvirtualenv --no-site-packages myenv
$ cdvirtualenv



Link e risorse:
http://www.doughellmann.com/projects/virtualenvwrapper/
http://pip.openplans.org/
http://mathematism.com/2009/jul/30/presentation-pip-and-virtualenv/


HTH,
Sani

mercoledì 5 gennaio 2011

Propositi per l'anno 2011

Ieri un amico in chat mi ha chiesto quali sono i miei propositi per il nuovo anno e la mia risposta secca e divertente è stata: 'cambiare lavoro ;)'.
Scherzi a parte, la battuta l'ho fatta perché, vuoi per diletto, vuoi per scelte tecnologiche o forse perché ho ancora voglia di mettermi in gioco, cambio lavoro (datore) più o meno con la stessa frequenza dei rilasci stabili di Ubuntu.

BTW, come si usa, i miei propositi sono per quest anno primo:

  • Non unirmi a loro, ma combatterli, si veda Bastian contrario.

  • Scrivere di più e in italiano 'robe tenniche' nel blog, post in inglese ce ne sono già tanti. Vorrei conservare il mio cervello in Italia, sperando non fugga!

  • Rilasciare qualche riga di codice utile su bitbucket/github...

  • Andare in produzione online con un progetto in Django.

  • /Leggere/Studiare/ Seven Languages in Seven Weeks e qualcosa su mobile e HTML5, CSS3 ecc (ho una serie di libri sulla scrivania...)

  • Utilizzare il più possibile Free e Open Source Software.

  • Perseverare sul fatto che le porte vanno chiuse, altrimenti fa corrente... ma 'sta gente a casa le tiene sempre aperte? :S

  • Varie ed eventuali...

  • Ultimo e non per importanza, ma per sostanza... Cambiare lavoro! :D



Sani

giovedì 12 novembre 2009

Ubuntu Karmic Koala ed Eclipse Galileo

Ubuntu Karmic Koala ed Eclipse Galileo soffrono, per così dire, di problemi di compatibilità con le GTK.
Per risolverli bisogna aggiungere la variabile d'ambiente allo script che lancia eclipse oppure a .basrc, avendo cura, poi, di lanciare eclipse da terminale (così .bashrc viene 'letto').

La variabile da esportare è:


export GDK_NATIVE_WINDOWS=true


Un esempio di script che lancia Eclipse:


#!/bin/sh
export GDK_NATIVE_WINDOWS=true
export ECLIPSE_HOME=/home/utente/bin/packages/eclipse-galileo

$ECLIPSE_HOME/eclipse $* -vmargs -Xms512M -Xmx1024M -XX:PermSize=512M -XX:MaxPermSize=1024M


Dò per scontato che Eclipse sia installato nella directory "~/bin/packages" dell'utente, altrimenti potrebbe essere in "/opt/eclipse", o dovunque l'utente l'abbia installata scaricando il tar.gx. A rigor di logica dovrebbe saperlo.

Per chi ha scaricato il pacchetto deb lo script va cercato con un "dpkg -L eclipse".

Si lo so... se si cerca su google la soluzione si trova... ma volevo dire la mia... e imho, alcune parti si sono perse per strada con la traduzione in italiano, forse anche qui, ma sta ai miei cari lettori giudicarlo :).

Sani

martedì 7 luglio 2009

Mono update!!!

Leggo sul blog di Icaza che Microsoft ha rilasciato una 'Microsoft Community Promise', credo sia una buona risposta al polverone sollevato da Stallman, debian, ubuntu ecc ecc.

Secondo me è molto positiva come notizia!

C'è anche l'update a una nuova release di Mono... tra l'altro :-)

Sani.

mercoledì 1 luglio 2009

Magnolia, custom control, FreeMarker e Javascript

Riporto, tralasciando bestemmie e dati veritieri, una soluzione trovata per un custom control in Magnolia.

Problema
Creare un custom control in Magnolia CMS con due select, la prima con tre option e la seconda con una decina di option, che però non devono essere mostrate tutte, ma solo quelle in relazione con la option selezionata nella prima select.

Soluzione (la mia :-))
Ho creato un custom control utilizzando un template FreeMarker per la prima select, mentre per la seconda un controllo select standard.
Nel template FreeMarker, mi sono inventato a colpi di Javascript, la creazione della seconda select, tenendo conto anche dell'eventuale precedente scelta dell'utente.
Ho risolto con un dizionario chiave valore per le option della seconda select e una serie di array con i valori selezionabili in base alla scelta della prima select... chiaro no?
Un po' di codice per capire meglio, di seguito il dizionario e gli array:

var secondaSelect = { "opt1": "Opzione 1",
"opt2": "Opzione 2",
"opt3": "Opzione 3",
"opt4": "Opzione 4",
"opt5": "Opzione 5",
"opt6": "Opzione 6",
"opt7": "Opzione 7",
"opt8": "Opzione 8",
"opt9": "Opzione 9",
"opt10": "Opzione 10" };

var OptionXPrimaSelect_0 = [ "opt1", "opt2", "opt5", "opt7" ];

var OptionXPrimaSelect_1 = [ "opt2", "opt4", "opt6", "opt8", "opt10" ];

var OptionXPrimaSelect_2 = [ "opt3", "opt6", "opt9" ];


Poi ho creato delle funzioni di init e popolamento per le select:


// add option
function addOption(select, option)
{
try {
select.add(option, null); // standards compliant; doesn't work in IE
}
catch(ex) {
select.add(option); // IE only
}
}

// remove all option
function removeAllOptions(select)
{
for(var i = select.childNodes.length-1; i>=0; i--)
{
select.remove(select.childNodes[i]);
}
}

// init: reset select
function _initOptions(item, listOptions)
{
removeAllOptions(item);
for (var o in listOptions)
{
var opt = document.createElement('option');
opt.text = listOptions[o];
opt.value = o;
addOption(item, opt);
}
}


La funzione all'onchange per la prima select (con codice chiaramente intrusivo), infatti la select è tipo <select id="mySelectId" onchange="changeSelect">...


function changeSelect(option, index)
{

var mySelect;

mySelect = document.getElementById("firstSelect");

if (index === 0)
{
_initOptions(mySelect, secondaSelect);
}

if (option === "uno")
{
showOptions(mySelect, OptionXPrimaSelect_0);
}
else if (option === "due")
{
showOptions(mySelect, OptionXPrimaSelect_1);
}
else if (option === "tre") // else :-)
{
showOptions(mySelect, OptionXPrimaSelect_2);
}
}

Manca la funzione showOptions, il cardine di questo template FreeMarker:


function showOptions(item, optionsToDisplay)
{
var optionsSelect = item.childNodes;
var optionTag;
var find = false;

// Array contenente le option da visualizzare
var newSelectOptions = [];
// Option selezionata, se arrivo da un edit
var selectedValue = "";
for (var i = 0; i < optionsSelect.length; i++)
{
optionTag = optionsSelect[i];
if (optionTag.selected)
{
selectedValue = optionTag.value;
}

for (var j = 0; j < optionsToDisplay.length; j++)
{
if (optionTag != null && optionTag != "" && optionTag.value === optionsToDisplay[j])
{
find = true;
}
}
if (find === true && optionTag != null)
{
newSelectOptions.push(optionTag);
}
find = false;
}

removeAllOptions(item);

// add child
var selected = 0;
var newOpt;
for (var i = 0; i < newSelectOptions.length; i++)
{
newOpt = newSelectOptions[i];
addOption(item, newOpt);
if (newOpt.value === selectedValue)
{
selected = i;
}
newOpt = null;
}
item.selectedIndex = selected;
}


Si noti che utilizzo una variabile per salvare la option selezionata, per poi settare la proprietà selectedIndex.
Infatti, anche se gli oggetti presenti in 'newSelectOptions' sono tutte option, con IE non sono riuscito a leggere l'attributo selected (se presente) e un'eventuale verifica (es. elemento.selected === 'selected', oppure elemento.selected, o (!!((elemento || {}).selected)) ... ecc ecc ) restituisce sempre true, quindi inutilizzabile :-); mentre verificando l'eguaglianza tra le value, sono riuscito a recuperare la option selezionata.
Infine la funzione per caricare tutta questa accozzaglia di Javascript e HTML:


(function doSelectedOptions() {
var oldonload = window.onload;
if(typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
var item = document.getElementById("mySelectId");
changeSelect(item.value);
}
}
})();



Tutto questo post solo per farmi insultare dal buon Calde... ;-), gliel'avevo promesso! Ma anche per condividere con il mondo qualcosa... forse utile... forse no :-).

Domande dubbi perplessità, chiedete e vi sarà dato... sempre se mi è dato sapere (quanto è buono l'equino con le pere (dixit)).

Chiaramente ho tralasciato la creazione dei dialoghi, paragrafi ecc... l'idea era quella di condividere la soluzione e di farmi insultare, chiaro! :-P

Nota a margine... sì, funziona con IE6... per ora!

Sani.

Risorse:
http://stackoverflow.com/questions/386094/javascript-options-selected-ie6-vs-ff2
Magnolia CMS
FreeMarker

sabato 27 giugno 2009

RMS e Mono.

Apprendo da slashdot l'ennesima 'uscita' del nostro profeta RMS e penso che remare contro non sia mai la scelta ottimale.

E' da un po' che non scrivo, ma in questo caso vorrei esprimere la mia personale visione.

Mi ricordo qualche anno fa con degli amici a Trento chiedemmo a RMS cosa pensasse del progetto Mono e lui ci rispose che è software libero, quindi 'approved'.

Oggi però non è così, RMS 'scoraggia' l'utilizzo di C# e delle sue implementazioni.
Imho, si sta implementando uno standard ISO/ECMA e anche M$ lo sa e da quanto mi è dato sapere, sta collaborando con il progetto Mono, ad esempio con IronPython e Moonlight, fornendo codice e aiuto (si ok... c'è anche Novell).

Noi che utilizziamo software libero ci scontriamo spesso con i brevetti?
Sì, quindi si troverà una soluzione alternativa, mi sa che Miguel de Icaza non è così ingenuo :-).
L'informatica si basa nel trovare soluzioni alternative e mi pare ci stiamo riuscendo bene.

A mio parere il fatto sostanziale e da sottolineare è che a GNU/Linux manca un framework con un linguaggio forte e di alto livello: Mono e C# hanno quello che serve per far diminuire il gap tra utenti 'linux', 'win$' e 'mac$'.

Se un giorno M$ si sveglia e dice che tutto è brevettato ecc ecc... penso che si tiri la zappa sui piedi, d'altra parte il 'nemico' non è più lei... e comunque perderebbe ancora terreno e sviluppatori.


Tieni vicino gli amici...
ma ancora più vicino i nemici.


Concludo con la mia visione utopistica, che mi porta a dire che un giorno Mono guadagnerà così tanto terreno da far in modo di avere software multipiattaforma con le caratteristiche (grafica e P/Invoke) proprie del sistema ospitante, anche se... avrei preferito Python :-).

Ai posteri l'ardua sentenza.

Dimenticavo: "Io sto con debian!"

Sani.

lunedì 26 gennaio 2009

From ubuntu-eee to Easy Peasy

Step by step tutorial, my two cents :).

1. Search and replace " hardy" with " intrepid" in the /etc/apt/sources.list file:
$ sudo vim /etc/apt/sources.list

Vim-Tips: :%s/ hardy/ intrepid/g

2. At the bottom of sources.list, add the following repositories:
# Easy Peasy
deb http://packages.ubuntu-eee.com intrepid main
# OpenOffice 3
deb http://ppa.launchpad.net/openoffice-pkgs/ubuntu intrepid main
# Netbook kernel
deb http://www.array.org/ubuntu intrepid eeepc
# Netbook remix
deb http://ppa.launchpad.net/netbook-remix-team/ubuntu intrepid main

3. Update && dist-upgrade:
$ sudo apt-get update && sudo apt-get -f dist-upgrade

Answer 'yes' and wait...

4. Install other packages, some of these are already installed in your system:
$ sudo apt-get install eeepc-config eeepc-tweaks ubuntu-eee cheese go-home-applet \
human-netbook-theme maximus netbook-launcher window-picker-applet skype picasa \
songbird adobe-flashplugin lock-keys-applet gstreamer0.10-ffmpeg gstreamer0.10-pitfdll \
gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly \
gstreamer0.10-plugins-ugly-multiverse libavcodec-unstripped-51 libmp3lame0 sun-java6-plugin unrar

5. Remove f-spot and rhythmbox ... if you want! :)
$ sudo apt-get remove --purge rhythmbox f-spot

6. Remove orphan packages:
$ sudo apt-get autoremove

7. Finished! Enjoy and have a cup of tea! (lemon tea... ;))

Appendix:
my sources.list file:
deb http://it.archive.ubuntu.com/ubuntu/ intrepid main restricted
deb-src http://it.archive.ubuntu.com/ubuntu/ intrepid main restricted

deb http://it.archive.ubuntu.com/ubuntu/ intrepid-updates main restricted
deb-src http://it.archive.ubuntu.com/ubuntu/ intrepid-updates main restricted

deb http://it.archive.ubuntu.com/ubuntu/ intrepid universe
deb-src http://it.archive.ubuntu.com/ubuntu/ intrepid universe
deb http://it.archive.ubuntu.com/ubuntu/ intrepid-updates universe
deb-src http://it.archive.ubuntu.com/ubuntu/ intrepid-updates universe

deb http://it.archive.ubuntu.com/ubuntu/ intrepid multiverse
deb-src http://it.archive.ubuntu.com/ubuntu/ intrepid multiverse
deb http://it.archive.ubuntu.com/ubuntu/ intrepid-updates multiverse
deb-src http://it.archive.ubuntu.com/ubuntu/ intrepid-updates multiverse

# deb http://it.archive.ubuntu.com/ubuntu/ intrepid-backports main restricted universe multiverse
# deb-src http://it.archive.ubuntu.com/ubuntu/ intrepid-backports main restricted universe multiverse

# deb http://archive.canonical.com/ubuntu intrepid partner
# deb-src http://archive.canonical.com/ubuntu intrepid partner

deb http://security.ubuntu.com/ubuntu intrepid-security main restricted
deb-src http://security.ubuntu.com/ubuntu intrepid-security main restricted

deb http://security.ubuntu.com/ubuntu intrepid-security universe
deb-src http://security.ubuntu.com/ubuntu intrepid-security universe

deb http://security.ubuntu.com/ubuntu intrepid-security multiverse
deb-src http://security.ubuntu.com/ubuntu intrepid-security multiverse

# Google repository
deb http://dl.google.com/linux/deb/ stable non-free

# Dropbox
deb http://linux.getdropbox.com/ubuntu intrepid main
deb-src http://linux.getdropbox.com/ubuntu intrepid main

# eeePc

## Easy Peasy
deb http://packages.ubuntu-eee.com intrepid main

## OpenOffice 3
deb http://ppa.launchpad.net/openoffice-pkgs/ubuntu intrepid main

## Netbook kernel
deb http://www.array.org/ubuntu intrepid eeepc

## Netbook remix
deb http://ppa.launchpad.net/netbook-remix-team/ubuntu intrepid main


Disclaimer: I write this tutorial after reading forum and wiki on Easy Peasy website.

Sani

mercoledì 8 ottobre 2008

E' passato un po'...

E torno a scrivere qualcosa sul mio blog :).
Ormai la "Big G" è diventata il mio ufficio... posta, documenti, calendario, rss, chat... Pazzesco! Dà assuefazione!

Poi è arrivato in "famiglia" un bellissimo eeePC 1000H, vi posto due foto.

Prima della cura:



E dopo la cura:



L'installazione di Ubuntu-eee è stata rapida e veloce, tre passi, come indicato anche nel wiki.

L'unico bug rilevato è nel login di gnome-screensaver. Link: https://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/163525, per il resto funzia bene... anzi... un bel CHEESE!



Sani

lunedì 22 settembre 2008

Live from Bolzano...

Dopo anni che esiste twitter, da oggi anch'io ho un account, dove 'twitterò' e darò inizio alle battute ricorsive... quindi 'Laives from Bolzano': http://twitter.com/cstrap

Tutto fatto con eleganza, ma soprattutto all'insegna del Web 2.0 meta semantico, social e C&M.

Sani

sabato 16 agosto 2008

Che cos'è internet?

[...]
- E che cazzo è sto internet?
- Internet è uno strumento di comunicazione mondiale, dove la gente si incontra per lamentarsi dei film e scambiare pornografia... ecco qua... pensare altre soluzioni, pupusuifilm.com (PRRRT)
- Pupù sui film... Potente!
[...]
Jay & Silent Bob... Fermate Hollywood!

E vi lascio con questo brillante video pop porno...

mercoledì 13 agosto 2008

Le ninjate della bash

Non essendo avvezzi al comando svn export, vuoi per il poco tempo, vuoi perché siamo pigri, voui perché ci deve essere un perché, capita (come la merda, ndm) di dover cancellare da terminale le directory .svn.
Di seguito le ninjate (aka vari metodi per):

$ find . -iname ".svn" -type d -exec rm -rf {} \;

$ rm -rf `find . -iname ".svn" -type d`

$ rm -rf $(find . -iname ".svn" -type d)


A questo punto si potrebbe lanciare un contest... altre soluzioni? :)

Per quelli che leggono e dicono se invece di stare qua a scrivere non sono in giro a bere... si avete ragione... stasera non c'ho proprio un cazzo da fare! :D

Attenzione: se non si ha familiarità con bash e relativi comandi e non si sa che cosa fanno e se poi provo è colpa mia e non tua ecc ecc... un man è la prima cosa da fare, altrimenti ci si fa il segno della croce, rm è rm... non si torna indietro... o no? ;)

Sani

domenica 10 agosto 2008

Pocca Toja!!!

Fascist state censors Pirate Bay

We're quite used to fascist countries not allowing freedom of speech. A lot of smaller nations that have dictators decide to block our site since we can help spread information that could be harmful to the dictators.

This time it's Italy. They suffer from a really bad background as one of the IFPIs was formed in Italy during the fascist years and now they have a fascist leader in the country, Silvio Berlusconi. Berlusconi is also the most powerful person in Italian media owning a lot of companies that compete with The Pirate Bay and he would like to stay that way - so one of his lackeys, Giancarlo Mancusi, ordered a shutdown of our domain name and IP in Italy to make it hard to not support Berlusconis empire.

We have had fights previously in Italy, recently with our successful art installation where we had to storm Fortezza in order to get our art done. And as usual, we won. We will also win this time.

We have already changed IP for the website - that makes it work for half the ISPs again. And we want you all to inform your italian friends to switch their DNS to OpenDNS so they can bypass their ISPs filters. This will also let them bypass the other filters installed by the Italian government, as a bonus. And for the meanwhile - http://labaia.org works (La Baia means The Bay in Italian).

And please, everybody should also contact their ISP and tell them that this is not OK and that the ISPs should appeal. We don't want a censored internet! And the war starts here...
Posted Today 00:25 da s23m

Link: http://labaia.org/blog/123

Pesanti... e nel mio caso, mi vergogno di essere italiano.

Ora il famoso, e discusso :), motore di ricerca si trova all'indirizzo http://labaia.org.

Comunque sia, visto che internet è tornata internet ed ad ogni problema si trova una soluzione... basta chiedere no?
Thanks Google :D.

http://www.opendns.org/: sito che fornisce il servizio di DNS... open :)
https://www.torproject.org/: Tor è un progetto software per difendersi dall'analisi del traffico, una forma di sorveglianza della rete che minaccia le libertà personali e la privacy, le attività e le relazioni riservate d'impresa, e la sicurezza di stato.

E per gli utenti 'pigri'... OperaTor il webbrowser Opera Torifizzato (si dirà così no?)

Cito con piacere i link dove ho acquisito la notizia:
Lastknight e Spippolazione.
Una cosa: se ho scritto male i nickname (o name o nick o nik o sbiff o flip... o no?), per esperienza in una qualche mailing list che non cito, forse perché sono in torto marcio o forse perché ho un po' di respect o forse perché ho ancora voglia di divertirmi... ma ho detto che mi dispiace... per certa gente credo sia difficile abbassarsi a compromessi o a mettere una faccina (o emoticons...) per sdrammatizzare... ok basta, il tizo mi pare si sia offeso un tantinello...
Sarà, ma come dice lui... non so né leggere, né scrivere! :D

X - Maledetta ignoranza!
Y - Benedetta ignoranza!

Sani

giovedì 10 luglio 2008

Spam intelligente

Quando saprai la tua frase, mettila nell'oggetto ed inviala a tutti i tuoi amici.

1) LE SCARPE CHE INDOSSI:
jack purcell = ho preso a pugni...
ballerine = ho sognato...
nike = ho baciato...
adidas = ho fumato...
puma = ho ballato con...
tiger = ho chattato con...
all star/converse = ho saltato con...
superga = ho mangiato...
pantofole/ciabatte o babucce = ho scopato selvaggiamente con...
prada = ho leccato...
bikkembergs = ho sputato in faccia a...
gucci = ho bevuto...
sandali = ho corso con...
vans = ho ruttato contro...
piedi scalzi = ho cazzeggiato con...
altro = ho truffato..

2) L'INIZIALE DEL TUO NOME:
A = Willy Wonka
B = Chuck Norris
C = un water
D = Spider Pork
E = Babbo Natale
F = Bender
G = Ronald Mc Donald
H = una mela
I = Mussolini
J = Pamela Anderson
K = una mucca
L = Cicciolina
M = Topolino
N = una tavoletta di finissimo cioccolato
O = la Fata Turchina
P = Goku e Vegeta
Q = Maccio Capatonda
R = una torta
S = una sigaretta
T = Hello Kitty
U = una TV al plasma
V = un buttafuori
W = Moira Orfei
X = Wanna Marchi
Y = Pippo Franco
Z= Homer Simpson

3) LA TUA ETA':
14 = nella borsa
15 = sulla testa
16 = sotto la macchina
17 = in braccio
18 = a Woodstock '69
19 = su un F16
20 = a un concerto
21 = sul banco
22 = nella spazzatura
23 = tra le mani
24 = sull'Apollo 13
25 = a quella cagata di Sanremo
26 = nel letame
27 = in piscina
28 = nel banco frigo del supermercato
29 = in un campo nudisti
30 e più = in mezzo all'Oceano Indiano

4) IL TUO SEGNO ZODIACALE:
Ariete = perchè sono figo/a
Toro = perchè c'ho i soldi
Gemelli = perchè me l'ha detto la mamma
Cancro = perchè sono fetish
Leone = perchè io valgo
Vergine = perchè sono un nudista
Bilancia = perchè sono un serial killer
Scorpione = perchè sono un leso
Sagittario = perchè sono Chuck Norris
Capricorno = perchè è la prima cosa che mi è passata per la testa
Acquario = perchè sono analfabeta
Pesci = perchè era scritto nel destino...

5) IL TUO TELEFONINO :
Nokia = e me ne vanto con gli amici!
Nec = e vaffanculo!
LG = e me ne fotto!
Samsung = e ora sono all'altezza di Chuck Norris!
Siemens = e ora Dio ce l'ha con me!
Sony Ericsson = e ora mi ubriacherò!
Philips = e ora salterò dalla finestra!
Motorola = e ora mi candido a Presidente del Consiglio!
Sharp = e ora mi farò prete/suora!
Altro = e ne vado fiero!


La mia è:
Ho truffato un water in mezzo all'Oceano Indiano perchè è la prima cosa che mi è passata per la testa e vaffanculo!


Grazie Chuck Norris! (dixit)

Sani

domenica 6 luglio 2008

Il lavoro del SEO...

Il tuo blog è al primo posto se cerchi "sboro di sbetti"

Ora lo sarà anche cercando solamente "sboro sbetti".

Mentre il blog di BrC di Ferro è primo cercando "sbetti culo sicilia".

Ringrazio il buon Zeff per le segnalazioni ;)...

Update: Sbetti Contest

Sani
Strap