Hacking per l’umanità nella Silicon Valley e in tutto il mondo

Due anni fa i rappresentanti di Google, Microsoft, Yahoo, Hewlett-Packard, la NASA e la Banca mondiale si sono riuniti per formare il programma del Random Hacks of Kindness (RHoK). L’idea era semplice: la tecnologia può e deve essere utilizzata per il bene. RHoK riunisce esperti in materia, sviluppatori di software e progettisti di software open source. Il 4-5 Giugno 2011 terranno il terzo Random Hacks pieno di eventi globali con la collaborazione di 5 città degli Stati Uniti e 13 siti internazionali, dando alla comunità di sviluppatori locali l’opportunità di collaborare sui problemi delle persone.

“La comunità RHoK ha già sviluppato alcune applicazioni incentrata sulla risposta alla crisi, come I’mOK , una applicazione di messaggistica mobile di risposta alle catastrofi che è stata utilizzata sul campo ad Haiti e in Cile, e CHASM, uno strumento visivo per vedere la mappa del rischio da frane attualmente in fase di sperimentazione da parte della Banca mondiale in zone colpite da frane nei Caraibi. Persona Finder , uno strumento creato dalla reazione alle crisi di team di Google per aiutare le persone a trovare amici e parenti dopo un disastro naturale, è stato anche perfezionato in occasione di eventi RHoK e utilizzate in modo efficace ad Haiti, Cile e Giappone.

Stiamo invitando tutti i designer, sviluppatori, e chiunque altro che vuole aiutare “hack per l’umanità”, per assistere ad uno degli eventi locali il 4-5 giugno. Lì, potrete incontrare altri sviluppatori open source, lavorare con esperti di clima e problemi di catastrofe e contribuire al codice di interessanti progetti che fanno la differenza. Se siete nel nord della California, Come unirsi a noi nella Valle RHoK evento Silicon Valley a quartier generale di Google.

E se fai parte di un’organizzazione che lavora nel campo della risposta alle crisi o i
al cambiamento climatico, è possibile inviare una definizione del problema online , in modo che gli sviluppatori e i volontari possono lavorare sullo sviluppo di tecnologie per affrontare la sfida.

Visita http://www.rhok.org/ per ulteriori informazioni e per firmare per il vostro evento locale, e arrivare insieme a mettere le vostre abilità di hacking buon uso.”

Fonte: Hacking for humanity in Silicon Valley and around the globe

CodEmotion: L’evento aperto a tutti i linguaggi di programmazione e tecnologie

Il Javaday cambia e diviene Codemotion

Per quattro anni il Javaday Roma ha offerto un evento unico in Italia per contenuti, affluenza e spirito. L’atmosfera trascinante del Javaday ha saputo conquistare e coinvolgere i partecipanti e gli sponsor. Per continuare ad essere la manifestazione di riferimento degli sviluppatori, il  Javaday si evolve e diviene Codemotion.

Codemotion compie un grande salto rispetto al Javaday: apre a tutti i linguaggi e tecnologie, catalizzando ancora di più sorgenti di creatività e opportunità di lavoro. Infine, sposta l’attenzione da un prodotto (Java, a suo tempo di Sun, ora di Oracle) ad una disciplina: la programmazione, a vantaggio di tutti.

Il Codemotion si terrà a Roma il 5 marzo 2011.

L’ingresso all’evento è come sempre gratuito.

Per ogni informazione: http://www.codemotion.it

Che cos’è Codemotion

Il programma di Codemotion verrà definito tramite Call for Paper pubblica e aperta a tutti. La selezione delle proposte avverrà mediate una valutazione a cura dei rappresentanti delle community ufficiali, sia legate ai diversi linguaggi che allo sviluppo del software.

Durante Codemotion si potrà consegnare alle aziende Sponsor il proprio curriculum vitae per avere nuove opportunità professionali. 

L’agenda della giornata prevede una intensa mattina di talk tecnici e un pomeriggio dove verranno organizzate sessioni di Ignite.

E’ in fase di definizione un concorso per premiare le migliori idee innovative sviluppate da giovani studenti Universitari di tutta Italia.

L’ingresso al Codemotion è come sempre gratuito.

Per ogni informazione: http://www.codemotion.it

Contribuire al programma del Codemotion

Fino al 18 gennaio 2011 sarà possibile inviare le proprie proposte di talk per partecipare al programma della prima edizione del Codemotion, l’evento aperto a tutti i linguaggi e tecnologie.

La selezione delle proposte, pervenute tramite l’apposito modulo sul sito dell’evento, avverrà con una valutazione a cura dei rappresentanti delle community ufficiali italiane, legate ai diversi linguaggi e allo sviluppo del software, che collaborano con il Codemotion. Le proposte selezionate saranno rese pubbliche nel mese di febbraio e verranno inserite nel programma ufficiale del Codemotion.

Codemotion è l’evoluzione del Javaday Roma e si svolgerà nell’unica giornata di sabato 5 marzo 2011 a Roma.  Durante la manifestazione i partecipanti potranno prendere parte ad un’intensa mattinata di talk tecnici mentre nel pomeriggio sono previsti sessioni di presentazione di idee innovative e workshop tecnici. 

Codemotion compie un grande salto rispetto al Javaday: apre a tutti i linguaggi e tecnologie, catalizzando ancora di più sorgenti di creatività e opportunità di lavoro. Infine, sposta l’attenzione da un prodotto ad una disciplina: la programmazione, a vantaggio di tutti.

L’ingresso all’evento è come sempre gratuito.

Per ogni informazione: http://www.codemotion.it

Video: The most powerful computer is in your heart

Emozioni digitali.

Il computer e l’immaginazione, codice e creatività, emozione.

Quest’anno per l’evento Codemotion, abbiamo voluto regalare un tuffo nella bellezza, nella nostalgia, con il nostro video emozionale pubblicato su youtube.

Prodotto da Macaroni Bros e diretto da Fabio Fidanza, il nostro spot gioca e ironizza su due miti del computing: Commodore e Apple.

Come sarebbe stato presentato il Commodore 64 da Apple, nel suo stile fascinosamente minimalista?

Abbiamo raccolto non pochi commenti di lacrime di nostalgia, ricordi di joystick e amici, last ninja, emozioni a 320×200 pixel.

Anche questo è Codemotion!

Vi aspettiamo il 5 marzo a Roma per l’evento aperto a tutti i linguaggi e tecnologie!

L’ingresso al Codemotion è come sempre gratuito.

Per ogni informazione: http://www.codemotion.it

Il programma del Codemotion, più di 65 interventi in agenda

Chi partecipa al Codemotion sa  che prenderà parte ad una maratona tecnica davvero unica.

Il programma del Codemotion prevede più di 65 interventi distribuiti in 7 parallele, sessioni di Ignite e un laboratorio sul mobile.

Il Codemotion è l’evoluzione del Javaday Roma, da questa edizione l’evento si apre a tutti i linguaggi e tecnologie.

Sono tanti i temi caldi affrontanti: Html5, Twitter, Database No-Sql, sviluppo di videogiochi, creazione di applicazioni mobile, comparazione e nuovi linguaggi. Si parlerà anche di Android, Sistemi Operativi, architetture… lo scopo del Codemotion è quello di stimolare la comunità a creare software migliori che possano reggere meglio l’inevitabile impatto del tempo.

Ogni intervento del Codemotion vuole emozionare i partecipanti. Suscitare l’interesse del pubblico e alimentarne la passione sono gli obiettivi che contraddistinguono l’evento. I talk non pretendono di insegnare, ma di rendere più facile il successivo processo di imparare.

Il programma del Codemotion è stato realizzato con una Call For Paper pubblica.

Durante il Codemotion i partecipanti potranno consegnare alle aziende Sponsor il curriculum vitae per avere nuove opportunità professionali. 

Il Codemotion si terrà a Roma il 5 marzo 2011.

L’ingresso all’evento è come sempre gratuito.

Per ogni informazione: http://www.codemotion.it

[VIDEO] Impara a programmare in C#: 3 Lezione – WinForms

Dopo giorni in cui ho avuto un calo di voce tremendo e quindi impossibilitato a realizzare le mie lezioni per i miei corsi, riprendo oggi le lezioni del corso in C#.

In questa lezione andremo avanti ad analizzare gli oggetti grafici disponibili in Visual Studio C# Express 2010 ed in particolar modo le WinForms.

Come sempre per una migliore visione vi consiglio di vedere il video a tutto schermo cliccando sul bottone di youtube con le 4 frecce.

Leggi tutto “[VIDEO] Impara a programmare in C#: 3 Lezione – WinForms”

Il Javaday cambia e diviene Codemotion: il 5 Marzo a Roma IO CI SARO’

Codemotion

Segnaliamo questo evento che è un occasione per studenti e non per approfondire tematiche legate all’ITC e poter presentare il proprio CV alle aziende sponsor dello stesso.

Per quattro anni il Javaday Roma ha offerto un evento unico in Italia per contenuti, affluenza e spirito. L’atmosfera trascinante del Javaday ha saputo conquistare e coinvolgere i partecipanti e gli sponsor. Per continuare ad essere la manifestazione di riferimento degli sviluppatori, il Javaday si evolve e diviene Codemotion.

Codemotion compie un grande salto rispetto al Javaday: apre a tutti i linguaggi e tecnologie, catalizzando ancora di più sorgenti di creatività e opportunità di lavoro. Infine, sposta l’attenzione da un prodotto (Java, a suo tempo di Sun, ora di Oracle) ad una disciplina: la programmazione, a vantaggio di tutti.

Il Codemotion si terrà a Roma il 5 marzo 2011. L’ingresso all’evento è come sempre gratuito.

Leggi tutto “Il Javaday cambia e diviene Codemotion: il 5 Marzo a Roma IO CI SARO’”

[Video] Impara a programmare in C#: 1 Lezione – Come Iniziare ?

Con questo ScreenCast che è una registrazione digitale dell’output dello schermo (Come uno screenshot è un’istantanea del monitor dell’utente, lo screencast è un insieme di fotogrammi, registrato in un video, di ciò che l’utente visualizza sul proprio monitor…Fonte: WikiPedia) inizia il corso per imparare a programmare in C#.

Pubblicherò ogni nuova lezione a metà settimana (con questa lezione sono andato lungo perchè ho avuto problemi tecnici di pubblicazione del video ed un virus intestinale che mi ha messo KO) in cui affronterò un passo per volta tutte le tappe per imparare a programmare in Visual Studio C#. Dopo il salto troverete i Video/ScreenCast della prima lezione.

Leggi tutto “[Video] Impara a programmare in C#: 1 Lezione – Come Iniziare ?”

LINQ to SQL: Disegnare gli oggetti in C#, prima di creare il DB

Non sto dicendo che si dovrebbe eliminare la pianificazione del database dai documenti di progettazione di un nuovo applicativo. Niente affatto. La progettazione del database è una parte importante della processo di sviluppo e non dovrebbe mai essere trascurato, se necessario. Allo stesso tempo, a volte è più facile iniziare il processo di progettazione in un altro modo – la meno comune.

Dalla mia esperienza, nella progettazione di un database fin dall’inizio si dà una struttura piuttosto rigida. Dopo aver definito le tabelle e creato alcune stored procedure, gli sviluppatori iniziano a lavorare sulle loro applicazioni cercando di adattare l’applicazione alle condizioni esistenti del DB e spesso essi devono raggiungere compromessi perché una piccola modifica a una tabella di DB può rovinare tutta una catena di relazioni tra tabelle.

Leggi tutto “LINQ to SQL: Disegnare gli oggetti in C#, prima di creare il DB”

Come creare in PHP una tabella in un database MySQL

In questo articolo vedremo come in Php si può creare una tabella di un database MySQL. Prima affronteremo il file config.php in cui ci sono i parametri di connessione al server MySQL e la funzione di php per la connessione e poi affronteremo il file per la creazione della tabella, alla fine del post troverai lo zip con all’interno i 2 file php che puoi scaricare per fare tutte le prove che vuoi.

Leggi tutto “Come creare in PHP una tabella in un database MySQL”

WordPress: Modificare il plugin transposh per le traduzioni automatiche

Nel mio blog utilizzo il plugin transposh per le traduzioni automatiche della homepage, dei post e delle pagine. Mi succedeva che a fianco delle bandierine in home page comparisse la scritta Edit Translation che volevo nascondere allora ho deciso di mettere mani direttamente nel codice php del plugin.

Ho modificato il file transposh_widget.php che si trova /wordpress/wp-content/plugins/transposh-translation-filter-for-wordpress/wp e nella classe transposh_plugin_widget ho modificato la funzione transposh_widget($args) commentando questa parte di codice:

 // add the edit checkbox only for translators for languages marked as editable
 // if ($this->transposh->is_editing_permitted()) {
 //     echo 'transposh->edit_mode ? 'checked="checked"' : '') .
//      ' onclick="this.form.submit();"/> Edit Translation';
//}

[AGGIORNAMENTO]
Parlando nei commenti con il realizzatore del plugin Ofer Wald, ho scoperto che si poteva fare il tutto senza toccare una linea di codice. Andando nella sezione Impostazioni->Transposh e settando nell’area Transalation Settings, l’opzione Who can translate ? solo per Amministratore e non Anonymous.

WordPress: personalizzare l’area quickpress della bacheca

Quando mi vengono delle idee per nuovi argomenti/post per il mio blog me li appunto salvando una bozza tramite l’area quickpress della bacheca di wordpress.

Recentemente mi è capitato per errore che invece di cliccare il bottone Salva Bozza ho cliccatto il bottone Pubblica rendendo pubblico un articolo non finito che è solo una bozza. Se lo leggeva qualcuno tramite i miei feed o direttamente sul blog facevo una figuraccia.

Allora ho deciso di modificare il codice php dell’area quickpress della bacheca di wordpress per nascondere il bottone Pubblica e per evitare questi errori in futuro.

Ho preso il file dashboard.php che si trova nella cartella \wp-admin\includes\ e nella funzione wp_dashboard_quick_press_output() ho commentato la parte di codice che aggiungeva il bottone pubblica in questo modo:


Ho solo commentato e non cancellato le righe di codice così in futuro posso riabilitare il bottone Pubblica. Adesso non c’è più pericolo di sbagliare.

[Sondaggio] Se dovessi imparare 3 linguaggi di programmazione quale sceglieresti?

Dopo circa 3 settimane il sito dzone.com ,che si occupa di programmazione e che frequento tutti i giorni, ha raccolto 2300 risposte per il suo sondaggio. Mi stupisce il fatto che Php sia solo al 9 posto con il 15% e invece colpisce il 3 posto di python che si prefigura sempre di più come il linguaggio di programmazione del futuro.

Io per fortuna sono messo bene perchè conosco e continuo a studiare parecchi di questi linguaggi come: Java, Python, C# e Php.

Ecco i risultati:

dzone.com risultato sondaggio scelta linguaggi di programmazione

Programmazione in Php: 7 funzioni che probabilmente non hai mai usato

Quando programmiamo in PHP, spesso ci limitiamo ad un numero limitato di funzioni API: quelli comuni, come il print (), header (), definire (), isset (), htmlspecialchars (), ecc Se alcune funzionalità necessarie non esistono, spesso ne scriviamo delle nuove facendo uso di questi componenti di base che conosciamo. Le API di PHP in realtà offrono un sacco di funzionalità, alcune inutili e qualcuna utile, che vengono usate raramente. Ho cercato tra le funzioni disponibili e mi sono interessato a trovarne qualcuna di cui davvero ho bisogno. Ecco, condivido con voi le mie scoperte.

1. sys_getloadavg ()
sys_getloadvg () è una funzione che restituisce tre misure del “carico” su un sistema. Il carico è il numero di processi in coda di esecuzione del sistema. I 3 elementi della matrice sono il carico medio per gli ultimi 1, 5 e 15 minuti.

$carico = sys_getloadavg(),
se ($carico[0] > 80) {
    header('HTTP/1.1 503 Troppo occupato, riprovare più tardi');
    die('Il server è occupato più tardi. Riprova.');
}

Piuttosto che avere il servizio Web non più disponibile (offline) semplicemente perché è crollato tutto dopo aver ricevute troppe richieste, questo codice permetterà in maniera preventiva di accettare alcune richieste e di negarsi ad altre. Questo codice però non funziona su Windows.

2. cal_days_in_month ()
cal_days_in_month () restituisce il numero di giorni in un dato mese:

$giorni = cal_days_in_month(CAL_GREGORIAN, date("m"), date("Y")); / / 31
echo($giorni - data("d") + 1 )."giorni fino a quando".date("F", mktime(0, 0, 0, data("m") + 1, 1, 1970));

3. get_browser ()
Non sarebbe bello scoprire che cosa può fare il browser di un utente prima di inviare la pagina? Beh, si può con get_browser (). Avrete bisogno di php_browscap.ini prima, e il punto di direttiva browscap al file. Si potrebbe avere qualcosa di simile a questa:

$browser = get_browser(null, true);
if(!$browser["frames"] | | !$ browser["cookies"])
      echo "Si prega di aggiornare il browser o usare un browser più moderno ed attivare i cookies perchè alcune sezioni di questo sito potrebbero essere inaccessibili";

Questo non è in grado di rilevare le singole configurazioni di browser, tuttavia, non può essere utilizzato per rilevare se è abilitato JavaScript, per esempio. Questa funzione può essere utile per sapere quale browser si usa e quale piattaforma viene utilizzata.

4. debug_print_backtrace ()
Può essere molto difficile da rintracciare un errore nel codice in particolare quando si cerca un errore logico, invece grazie a debug_print_backtrace() potrebbe essere molto più facile. Come ad esempio:

$a = 0; 

function iterate() 
{ 
      global $a; 
      if( $a < 10 ) recur(); 
      echo $a.", "; 
} 

function recur() 
{ 
     global $a; 
     $a++; 
     // how did I get here? 
     echo " \n \n \n "; 
    debug_print_backtrace(); 
    if ( $a < 10 ) iterate (); 
}   

iterate (); 
# OUTPUT: #0 recur() called at [C:\htdocs\php_stuff\index.php:8] #1 iterate() called at [C:\htdocs\php_stuff\index.php:25] #0 recur() called at [C:\htdocs\php_stuff\index.php:8] #1 iterate() called at [C:\htdocs\php_stuff\index.php:21] #2 recur() called at [C:\htdocs\php_stuff\index.php:8] #3 iterate() called at [C:\htdocs\php_stuff\index.php:25] #0 recur() called at [C:\htdocs\php_stuff\index.php:8] #1 iterate() called at [C:\htdocs\php_stuff\index.php:21] #2 recur() called at [C:\htdocs\php_stuff\index.php:8] #3 iterate() called at [C:\htdocs\php_stuff\index.php:21] #4 recur() called at [C:\htdocs\php_stuff\index.php:8] #5 iterate() called at [C:\htdocs\php_stuff\index.php:25] [ ... ]

5. natsort()
natsort() è una funzione che ordina elementi di una matrice in maniera naturale (cioè, in un ordine che sembra logico a una persona), piuttosto che un ordine di tipo alfabetico. Prendete, per esempio:

$items = array("100 mele", "5 mele", "110 mele", "55 mele");
 
/ / normale ordinamento:
sort($items);
print_r($items);

# Il risultato:
Array #
# (
# [0] => 100 mele
# [1] => 110 mele
# [2] => 5 mele
# [3] => 55 mele
#)

natsort($items);
print_r($items);

# Il risultato:
# Array
# (
# [2] => 5 mele
# [3] => 55 mele
# [0] => 100 mele
# [1] => 110 mele
#)

6. Levenshtein()
Levenshtein() è una funzione che aiuta a trovare la miglior somiglianza tra 2 parole. Prendiamo, per esempio, il codice seguente:

$dictionary = array( "php" , "javascript" , "css" ); 
$word = "japhp"; 
$best_match = $dictionary[0]; 
$match_value = levenshtein ($dictionary[0] , $word); 

foreach($dictionary as $w) 
{ 
     $value = levenshtein($word , $w); 
     if( $value < $match_value) 
     { 
          $best_match = $w; 
          $match_value = $value; 
     } 
} 

echo "Forse cercavi la categoria ' $best_match ' ?";

In questo caso, l'utente è stato chiesto di fornire un nome di categoria. Ha scritto "japhp", che non è valido. Poiché questo è probabile che sia un errore di digitazione, grazie a questa funzione riusciamo a trovare la categoria più somigliante ("Forse cercavi categoria 'php'?").

7. glob()
glob() , vi farà sentire stupidi dopo l'uso di opendir(), readdir() e closedir() per cercare un file. La procedura è semplicissima:

foreach (glob("*. php") as $file)
    echo "$ file\ n";

Di Più?
Ci sono un sacco di funzioni utili e sconosciute là fuori come http_build_query(), register_shutdown_function() e pspell_suggest, quali sono le vostre preferite?

Fonte: infinity-infinity.com

Quali sono gli errori di programmazione più pericolosi?

Così come accaduto lo scorso anno, oltre trenta organizzazioni internazionali che si occupano di sicurezza, si sono sedute attorno ad un tavolo per stilare la lista dei 25 errori di programmazione più pericolosi. Si tratta di “leggerezze” che sono considerate particolarmente gravi perché possono esporre le applicazioni sviluppate ad attacchi esterni favorendo, ad esempio, attività criminali e sottrazione di dati.

Il documento che illustra gli errori di programmazione più deleteri è consultabile facendo riferimento a questa pagina. Ogni errore è stato commentato, valutato in termini di criticità e suddiviso in categorie.

Nella sezione “insecure interaction” sono raccolti gli errori che possono condurre all’iniezione di codice dannoso, nell’area “risky resource management” sono esposte problematiche di programmazione che possono portare ad attacchi di tipo buffer overflow o risultati non validi mentre nella sezione “porous defenses” vengono affrontate le “falle” nelle procedure di autenticazione o crittografia.

Per ciascun errore, viene indicata anche la semplicità nell’individuazione dello stesso, i costi per la risoluzione del problema, la frequenza di attacchi ed il livello di conoscenza generale del problema da parte degli aggressori.

In testa alla classifica, per gravità del problema, ci sono sempre le vulnerabilità che espongono un sito web ad attacchi “cross-site scripting” (XSS); al secondo posto la mancata “pulizia”, effettuata dal programmatore, delle stringhe ricevute in ingresso dall’utente ed utilizzate all’interno delle interrogazioni SQL. Seguono, al terzo e quarto posto, le classiche vulnerabilità di “buffer overflow” (la copia di un dato ricevuto in input senza verificarne la corretta dimensione) e le “cross-site request forgery” (CSRF).

Appena un paio degli errori descritti nel documento di pubblica consultazione, sarebbero responsabili – secondo le stime – di quasi due milioni di attacchi sferrati nei confronti di siti web.

Tutorial Java: copiare un array/vettore in Java

Il vettore o array in informatica o matematica si può immaginare come una sorta di casellario, le cui caselle sono dette celle dell’array stesso, clicca qui per leggere l’intera voce su wikipedia.

Questo tutorial in Java mostrerà come usare il metodo System.arraycopy() per copiare un vettore/array in java. Il metoto System.arraycopy() permette di copiare un intero vettore oppure una parte di esso.

Naturalmente per copiare l’array, l’array di destinazione deve avere la stessa grandezza (lo stesso numero di caselle) dell’array sorgente.

Ecco un esempio con del codice Java:

String[] sorgente = { “gatto”, “cane”, “uccello” }; // Definisco l’array sorgente con 3 caselle di tipo stringa cioè variabili con del testo

String[] destinazione = new String[sorgente.length]; // Definisco l’array di destinazione vuoto e con lunghezza uguale all’array sorgente ricorda devono avere la stessa lunghezza sorgente e destinatario

System.arraycopy(sorgente , 0, destinazione , 0, sorgente.length); // Infine utilizzo il metodo System.arracopy dando come parametri l’array sorgente, la posizione in cui iniziare a copiare, l’array di destinazione, la posizione in cui devo mettere la copia e la lunghezza

Articolo correlato: java: convertire una variabile di tipo String in Date

Abbonati ai miei feed RSS: https://www.marcobruni.info/it/feed

Python: come trasformare la rubrica di thunderbird in un semplice elenco di indirizzi mail

Python è un linguaggio di programmazione ad alto livello interpretato, orientato agli oggetti, adatto, tra gli altri usi, per sviluppare applicazioni distribuite, scripting e computazione numerica.

Considero python un linguaggio di programmazione molto potente e versatile ed è per questo che l’ho usato per trasformare la rubrica degli indirizzi di posta elettronica di mozilla thunderbird in un elenco usabile in una newsletter.

Ecco il mio primo screencast del mio blog così puoi capire meglio di cosa parlo, cliccate sul bottone a forma di quadrato in basso a destra del video a sinistra del volume per vederlo a tutto schermo…Buona Visione e dimmi cosa ne pensi.

Get the Flash Player to see this content.

Codice:

 
from string import *

def findrev(stro,strf,pos):
    i = pos
    while stro[i]!=strf:
        i = i - 1
    return i

fn = open("rubrica.csv")
fm = open("NewsLetter.txt","w")

while 1:
    line = fn.readline()
    if not line:
            break
    else:
            posc = find(line,"@",0)
            posv1 = find(line,",",posc)
            posv = findrev(line,",",posc)

            fm.writelines(line[posv+1:posv1]+','+'\n')

pass # do something

fm.writelines("bruni.marco@gmail.com")
fm.close()
fn.close()

print "Finito, ho creato la NewsLetter"