Author Archives: Gianluca Della Vedova

Our Git branching model

The main inspiration is A successful Git branching model by Vincent Driessen. The main difference is that we do not want (and cannot) manage different releases. Therefore we always have one current and supported version, stored in the master branch.

The main branches

t the core, the development model is greatly inspired by existing models out there. The central repo holds the master branch with an infinite lifetime. At each time master is deployable and must pass all tests.

We consider origin/master to be the main branch where the source code of HEAD always reflects a production-ready state. In fact, each time when changes are merged back into master, this is a new production release by definition. We tend to be very strict at this, so that theoretically, we could use a Git hook script to automatically build and roll-out our software to our production servers everytime there was a commit on master. We plan to integrate Travis CI into our workflow.

Feature branches

Branch off from: master
$ git checkout -b myfeature master
Switched to a new branch "myfeature"
Must merge back into: master
$ git checkout master 
Switched to branch 'master'
$ git merge --no-ff myfeature
Updating ea1b82a..05e9557
(Summary of changes)
$ git branch -d myfeature
Deleted branch myfeature (was 05e9557).
$ git tag -a v1.2.3
Branch naming convention: anything except master

Next to the main branch master, our development model uses only a set of feature branches devoted to the development of distinct features. Unlike the main branch, these branches always have a limited life time.

The essence of a feature branch is that it exists as long as the feature is in development, but will eventually be merged back into master (to definitely add the new feature to the public release) or discarded (in case of a disappointing experiment). Feature branches typically exist in developer repos only, not in origin, except for those features that requires a collaboration between multiple developers.

Incorporating a finished feature

Finished features may be merged into the master branch definitely add them to the upcoming release.

The –no-ff flag causes the merge to always create a new commit object, even if the merge could be performed with a fast-forward. This avoids losing information about the historical existence of a feature branch and groups together all commits that together added the feature.

In the latter case, it is impossible to see from the Git history which of the commit objects together have implemented a feature—you would have to manually read all the log messages. Reverting a whole feature (i.e. a group of commits), is a true headache in the latter situation, whereas it is easily done if the –no-ff flag was used.

Yes, it will create a few more (empty) commit objects, but the gain is much bigger that that cost.

Also, we tag each deployable version according to Semantic Versioning.

Documentation

Update the documentation residing in the gh-pages branch. Remember to bump the version number.

$ git checkout gh-pages
[edit]
$ git commit -a

At the end we push the update versions to the shared repos (usually github under the AlgoLab organization)

$ git push origin; git push --tags

Issue tracker

All defects found must be added to the issue tracker. All possible improvements should be added to the issue tracker.

Bugfix commits can be applied directly to master.

Commit message

The first line of the message must be a capitalized, short (50 chars or less) summary. The first line must be separated from the remaining part by a blank line. The body of the message should be wrapped at 72 chars. The final paragraph should be a line with the list of bugs closed by the commit. I.e. Fix: 1234, 1235

Credits

Heavily inspired from http://nvie.com/posts/a-successful-git-branching-model/ and http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html

Licence

CC-SA

Incontro di Presentazione di Stage e Tesi

Il gruppo di ricerca AlgoLab (http://www.algolab.eu/), principalmente associato con il laboratorio di Bioinformatica e Calcolo Naturale, propone Stage e Tesi riguardanti la gestione e analisi di grandi quantità di dati (big data analysis).
Le proposte permettono agli studenti di acquisire competenze e conoscenze spendibili in ogni ambito professionale, quali Ruby, Ruby on Rails, Hadoop, Puppet, e VirtualBox.
La presentazione delle proposte da parte dei supervisori interni e esterni (Istituto Nazionale di Genetica Molecolare e Parco Tecnologico Padano) sarà:

Martedì 29 Maggio 2012 alle ore 11.30
aula Seminari – Ed. U14

Tutti gli studenti interessati (o semplicemente curiosi) sono invitati a partecipare.
Per informazioni: Gianluca Della Vedova <gianluca.dellavedova@unimib.it>

Alcune proposte sono:

  • Sviluppo ed estensione API per il database Ensembl

  • Puppet per il provisioning in ambiente virtualizzato – cloud

  • Creazione di un’applicazione in Rails per creare automaticamente sistemi di data warehouse per dati biologici

  • Creazione di un’applicazione Rails per l’annotazione e condivisione di dati e informazioni Immunologiche

  • Realizzazione di un ambiente di virtualizzazione per la Bioinformatica

Ph.D. course: Massive data analysis in the Web and post-genomic era

Lectures (April-May 2012):

1. Introduction Part I
April 16th (h. 10.30)
Paola Bonizzoni (Università di Milano-Bicocca)

The first lectures aim to provide the theoretical bases required to face the research topics introduced in  the course, as well as the main technological motivations of big data. The course is oriented to computer scientists, physicists, statisticians, genetic epidemiologists, bioinformaticians,  genome biologists and aims to open a discussion on the challenges and opportunities in next-generation sequencing data analysis and massive data analysis.
Massive data, deep sequencing and indexing techniques. Software tools.

2. Inferring Genetic Diversity from NGS
April 16th (h. 15.30) and 17th (h. 9.30)
Niko Beerenwinkel (ETH Zurich)

With high-coverage next-generation sequencing (NGS), the genetic diversity of mixed samples can be probed at an unprecedented level of detail in a cost-effective manner. However, NGS reads tend to be erroneous and they are relatively short, complicating the detection of low-frequency variants and the reconstruction of long haplotype sequences. In this lecture, I will introduce computational and statistical challenges associated witgenetic diversity estimation from NGS data. I will discuss several approaches to their solution based on probabilistic graphical models and on combinatorial optimization techniques. Two major applications will be presented: the genetic diversity of HIV within patients and the genetic diversity of cancer cells within tumors.
Part 1: Detecting low-frequency single-nucleotide variants (SNVs).
Part 2: Local haplotype inference and global quasispecies assembly.

Slides

3. Introduction Part II
April 23rd (h. 13:00) and 24th (h. 14:00)
Gianluca Della Vedova (Università di Milano-Bicocca)

Moore’s Law: current trends and the big data revolution. Approaches to work splitting: parallel algorithms, map reduce, data streaming.

Slides

4. The Paradigm of Data Stream for Next Generation Internet
May 2nd (14.00-16.00) and 3rd (9.00-11.00)
Irene Finocchi (Università La Sapienza – Roma)

Data stream algorithmics has gained increasing popularity in the last few years as an effective paradigm for processing massive data sets. A wide range of applications in computational sciences generate huge and rapidly changing streams of data that need to be continuously monitored and processed in one or few sequential passes, using a limited amount of working memory. Despite the heavy restrictions on time and space resources imposed by this data access model, major progress has been achieved in the last ten years in the design of streaming algorithms for several fundamental data sketching and statistics problems. The lectures will overview this rapidly evolving area and present basic algorithmic ideas, techniques, and challenges in data stream processing.Slides

5. Next Generation Sequencing analysis
May 8th (9.30-13.30)
Nadia Pisanti (Università di Pisa)

New Sequencing Technologies have dramatically decreased costs and thus opened the way to new challenges in applications such as metagenomics and transcriptome analysis by means of sequences; in particular, low costs of re-sequencing applied to the human genome opens the way to new issued in personalized medicine. As a consequence, a new phase has been opened for genome research. From the point of view of the computer scientist, the management of huge amount of data, the small size of sequenced fragments (with respect to previous technologies), and the new applications that bring down on sequences lots of data that used to be managed with arrays, has led to several new problems in string algorithms. We will try to give an overview on them and on possible approaches to address these problems.

Slides NGS Slides SV e CNV

6. Combinatoria delle parole ed applicazioni alla biologia teorica
May 29th (afternoon)
Giuseppe Pirillo (IASI, CNR)

Incontro di Presentazione di Stage e Tesi

Il gruppo di ricerca AlgoLab (http://www.algolab.eu/), principalmente associato con il laboratorio di Bioinformatica e Calcolo Naturale, propone Stage e Tesi riguardanti la gestione e analisi di grandi quantità di dati (big data analysis).
Le proposte permettono agli studenti di acquisire competenze e conoscenze spendibili in ogni ambito professionale, quali Ruby, Ruby on Rails, Hadoop, Puppet, e VirtualBox.
La presentazione delle proposte da parte dei supervisori interni e esterni sarà:

Giovedì 2 Febbraio 2012 alle ore 14.30
aula T023 – Ed. U14

Tutti gli studenti interessati (o semplicemente curiosi) sono invitati a partecipare.
Per informazioni: Gianluca Della Vedova <gianluca.dellavedova@unimib.it>

Il materiale presentato durante l’incontro è scaricabile:

Tesi: Creazione di un’applicazione Rails per l’annotazione e condivisione di dati e informazioni Immunologiche

Descrizione

Il nostro centro di ricerca ha come risorsa strategica la conoscenza immunologica derivante dall’esperienza dei ricercatori e dalle informazioni che ogni giorno altri laboratori producono sotto forma di articoli scientifici. Diversi database pubblici descrivono gran parte della conoscenza oggi disponibile ma non possono descrivere in dettaglio i singoli esperimenti che vengono condotti e soprattutto non possono rappresentare le informazioni frammentate e dettagliate che i singoli ricercatori hanno in uno specifico campo non ancora ampiamente esplorato oppure pubblicato. L’idea del progetto è quella di costruire uno strumento nella forma di applicazione web, utilizzando il framework Ruby on Rails,  che permetta di catalogare, organizzare e stabilire relazioni per esperimenti, letteratura oppure conoscenza interna. Dovrà essere possibile interrogare lo strumento anche in modo automatico con delle API web-resting, in modo da poter integrare i dati di analisi con quelli pubblici e annotati internamente.

In questo progetto il datastore potrebbe essere anche un sistema NoSQL.

Opzionale: esportazione della base di dati in formato RDF. https://github.com/helios/bioruby-rdf http://it.wikipedia.org/wiki/Resource_Description_Framework

Luogo

Istituto Nazionale di Genetica Molecolare  — Milano — http://www.ingm.org

Requisiti

Conoscenza di base di Ruby, database.

Competenze acquisibili

Capacità di relazionarsi con persone aventi competenze eterogenee, lavoro di team, tempistiche di consegna e valutazione di fattibilità, framework Ruby on Rails per la creazione di applicazioni web e tecniche di meta-programmazione in Ruby, concetti di database documentali (NoSQL)

Risultati attesi

Un applicazione web interna che permetta la catalogazione della conoscenza

Per informazioni contattare

Gianluca Della Vedova <gianluca.dellavedova@unimib.it> oppure Raoul Bonnal <bonnal@ingm.org>

Tempo di realizzazione

6 mesi

Stage: Puppet per il provisioning in ambiente virtualizzato – cloud

Descrizione

Un laboratorio di Bioinformatica è un ambiente dinamico dove nuovi software, librerie e strumenti in genere devono essere aggiornati e disponibili in breve tempo. Inoltre, la possibilità di costruire in casa un sistema Cloud consente di avere un numero variabile di istanze di macchine che devono essere amministrate in modo dinamico. La gestione di queste richieste se non affrontata nel modo opportuno può, a lungo andare, introdurre delle criticità nel comparto IT e conseguentemente nei servizi di calcolo e strategici che questo eroga. Utilizzando tecniche di provisionig: deployment di configurazioni, applicativi e servizi, è possibile rispondere in modo efficiente e elastico a queste esigenze.  Uno strumento di successo in questo ambito, OpenSource e scritto in Ruby, è Puppet che tramite un DSL (Domain Specific Language) permette con estrema semplicità di descrivere e gestire anche situazioni particolarmente complesse. In questo progetto lo studente verrà affiancato al reparto IT e seguirà le fasi di realizzazione di una configurazione base per poi svilupparne una ad hoc.

Luogo

Istituto Nazionale di Genetica Molecolare  — Milano — http://www.ingm.org

Requisiti

Conoscenza di sistemi Linux

Competenze acquisibili

Configurazione e creazione di un sistema di provisioning master slave con Puppet.
Installazione e configurazione automatica di macchine virtuali (Linux)

Risultati attesi

Un sistema Puppet funzionante con una serie di “ricette” per la gestione di differenti situazioni: database, web server e sviluppo.

Per informazioni contattare

Gianluca Della Vedova <gianluca.dellavedova@unimib.it> oppure Raoul Bonnal <bonnal@ingm.org>

Tempo di realizzazione

3 mesi

Tesi: Sviluppo ed estensione della API per il database Ensembl

Descrizione

Il database Ensembl (www.ensembl.org) è uno dei principali database pubblici a livello mondiale che contiene informazioni sulle sequenze genomiche e relativi dati biologici delle principali specie oggetto di studio. L’API storica e ufficiale del database Ensembl è sviluppata da EBI (European Bioinformatics Institute, www.ebi.ac.uk) nel linguaggio Perl. In un processo di aggiornamento e di maggiore facilità d’accesso a questo tipo di informazioni, nel 2011 è stata pubblicata una nuova API per il database Ensembl nel linguaggio Ruby, che si basa sul pacchetto ActiveRecord di Rails. Questo progetto è ufficialmente supportato dalla comunità BioRuby (www.bioruby.org) e nel periodo di stage lo studente avrà la possibilità di lavorare a stretto contatto con gli autori di questo pacchetto e di essere introdotto nella realtà dei progetti OpenBio (www.open-bio.org). Durante il lavoro di stage sarà richiesto di estendere l’API esistente per supportare nuovi database di Ensembl non ancora inclusi, quali Compara e Functional Genomics. Particolarmente critica per questo tipo di API è la parte di testing, poichè il database Ensembl è un punto di riferimento per le analisi bioinformatiche e vi è la necessità di verificare la correttezza dei dati che sono restituiti dall’API. Inoltre, ogni 2-3 mesi circa, viene rilasciata da EBI una nuova versione di questo database, pertanto nel progetto di stage sarà prevista una fase di sviluppo mirata ad aggiungere all’API caratteristiche che consentano un più rapido aggiornamento del codice e una fase di testing più veloce ad ogni nuovo rilascio. A questo scopo lo studente utilizzerà la meta-programmazione offerta dal linguaggio Ruby e da ActiveRecord per generare automaticamente una parte di codice, sulla base dello schema del database Ensembl, e per rendere la suite di testing più flessibile possibile.

Luogo

Parco Tecnologico Padano — Lodi — http://www.tecnoparco.org

Requisiti

Familiarità con il linguaggio Ruby e con i database relazionali.

Competenze acquisibili

Esperienza con la meta-programmazione e lo sviluppo di un’API completa per accedere a dati complessi.

Risultati attesi

Sviluppo dell’API per accedere ai database Ensembl Compara e Ensembl FuncGen.

Per informazioni contattare

Gianluca Della Vedova <gianluca.dellavedova@unimib.it> oppure Francesco Strozzi <Francesco.strozzi@tecnoparco.org>

Tempo di realizzazione: 6 mesi

Stage: Creazione di un’applicazione in Rails per creare automaticamente sistemi di data warehouse per dati biologici.

Nell’ambito dei diversi progetti di ricerca attivi, vi è la necessità di sviluppare un sistema di data warehousing, che possa gestire ed immagazzinare i dati prodotti dalle nuove tecnologie di sequenziamento del genoma. Questo sistema dovrà rispondere a diverse caratteristiche, tra cui flessibilità e scalabilità per adattarsi alle grandi quantità di dati (centinaia di gigabyte) generati dai nuovi sequenziatori. Il sistema di data warehouse dovrà prevedere anche una parte di filtraggio e preprocessing dei dati in ingresso, oltre alla capacità di collegarsi a diversi database esistenti, per poter interrogare, correlare ed aggregare tra loro le informazioni provenienti da diverse fonti e relative ai dati biologici in esame. Durante il periodo di stage, lo studente dovrà sviluppare un’applicazione in Ruby on Rails che consenta di generare automaticamente uno scaffold funzionante per sistemi di data warehouse di questo tipo, inclusa la parte di visualizzazione via web. L’applicazione genererà lo scaffold sulla base di una serie di dati di configurazione iniziali e sarà distribuita tramite la piattaforma RubyGems, in modo che possa essere facilmente riutilizzabile ed applicabile a diversi progetti di ricerca.

Luogo

Parco Tecnologico Padano — Lodi — http://www.tecnoparco.org

Requisiti

Conoscenza DBMS e Linux. Familiarità con Ruby e framework Ruby on Rails.

Competenze acquisibili

Esperienza con la meta-programmazione, lo sviluppo di database e applicazioni web che supportino grandi quantità di dati. Acquisizione di competenze con il framework Ruby on Rails.

Risultati attesi

Sviluppo di un’applicazione in Rails per la creazione automatica di sistemi di data warehouse.

Per informazioni contattare

Gianluca Della Vedova <gianluca.dellavedova@unimib.it> oppure Francesco Strozzi <Francesco.strozzi@tecnoparco.org>

Tempo di realizzazione: 3 mesi

Analisi sperimentale di algoritmi di clustering

Il problema del clustering è uno dei più comuni in Informatica e consiste nel raggruppare elementi “simili” di un insieme, data una opportuna nozione di similarità. Abbiamo disegnato alcuni algoritmi ed effettuato un’analisi di natura teorica per tali algoritmi. Siamo interessati ad implementarli e a analizzare sperimentalmente la bontà di tali algoritmi.