SlideShare a Scribd company logo
1 of 25
Download to read offline
Scrip&ng	
  e	
  RailsEngines	
  possono	
  
             coesistere	
  ?	
  
   Ruby	
  Social	
  Club	
  
                                                       Raoul	
  J.P.	
  Bonnal	
  
                                                         r@bioruby.org	
  
                                           h=ps://github.com/helios/bioruby-­‐gem	
  
                                                     h=p://bioruby.open-­‐bio.org/	
  	
  
   Milano,	
  24	
  Febbraio	
  2011	
  
Ruby,	
  dove?	
  
                 Web	
  




              Ambien&	
  
                 di	
  
               U&lizzo	
  
Scienza	
                    Admin	
  
Ruby,	
  dove?	
  

                          Web	
  
                             Web	
  


Rails	
  
                          Ambien&	
  
                             di	
                    Cool.io	
  
                           U&lizzo	
  
            Scienza	
                    Admin	
  




                 Sinatra	
  
Ruby,	
  dove?	
  
                      Web	
  




                   Ambien&	
  
                      di	
  
                    U&lizzo	
  
     Scienza	
                    Admin	
  
                                   Admin	
  




Capistrano	
  
Ruby,	
  dove?	
  
                                Web	
  
                             BioRuby	
  

SciRuby	
  
                             Ambien&	
  
                                di	
  
                              U&lizzo	
  
              Scienza	
  
               Scienza	
                      Admin	
  




                                            Graphics/
                                             PloPng	
  
BioRuby	
  
                               conceP	
  
•  La	
  bioinforma&ca	
  è	
  una	
  disciplina	
  scien&fica	
  
   dedicata	
  alla	
  risoluzione	
  di	
  problemi	
  biologici	
  a	
  
   livello	
  molecolare	
  con	
  metodo	
  informa&ci	
  	
  
•  BioRuby	
  è	
  una	
  libreria,	
  scri=a	
  completamente	
  
   in	
  Ruby,	
  il	
  cui	
  scopo	
  è	
  quello	
  di	
  ges&re	
  alcuni	
  
   aspeP	
  della	
  bioinforma&ca	
  

                                                     h=p://it.wikipedia.org/wiki/Bioinforma&ca	
  
                                                                   h=p://bioruby.open-­‐bio.org/	
  
BioRuby	
  
contribuire	
  
BioRuby	
  
                   contribuire	
  




       Sviluppatori	
  molto	
  conserva&vi	
  
in	
  realtà	
  acce=ano	
  ma	
  ci	
  vuole	
  tempo	
  
Il	
  proge=o	
  BioGem	
  

Maggiore	
  necessità	
  di	
  apertura	
  verso	
  il	
  fresh	
  
 code,	
  che	
  non	
  sarà	
  bug	
  free	
  ma	
  almeno	
  c’è	
  
Script	
  e	
  Engine	
  
In	
  BioInforma&ca	
  spesso	
  chi	
  produce	
  da&	
  non	
  si	
  
	
  preoccupa	
  di	
  come	
  ques&	
  verranno	
  visualizza&	
  
Script	
  e	
  Engine	
  
In	
  BioInforma&ca	
  spesso	
  chi	
  produce	
  da&	
  non	
  si	
  
	
  preoccupa	
  di	
  come	
  ques&	
  verranno	
  visualizza&,	
  
	
  almeno	
  non	
  subito…	
  
geek.take_rest if boss.watch? results!
class Boss!
  def watch?(result)!
     result.fancy?!
  end!
end!
class Result!
  def fancy?!
   (kind_of? GorgeousImage) || has_cool_interface? !
  end!
end!
Script	
  e	
  Engine	
  
Oppure	
  li	
  analizza	
  con	
  strumen&	
  differen&,	
  che	
  
 però	
  spesso	
  non	
  offrono	
  molta	
  flessibilità	
  
Script	
  e	
  Engine	
  
                             Quindi	
  che	
  fare	
  ?	
  
                               30	
  +	
  1	
  =	
  31	
  

Solo	
  che	
  quell’	
  UNO	
  crea	
  mol&	
  più	
  problemi	
  di	
  
  quanto	
  si	
  pensi	
  
    –  Web	
  Applica&on,	
  che	
  richiede	
  tempo	
  
    –  Riusabilità:	
  possibile	
  proliferazione	
  di	
  applicazioni	
  
    –  Mantenibilità	
  
    –  E’	
  slegato	
  dalla	
  libreria	
  che	
  produce/ges&sce	
  i	
  da&?	
  
Perché	
  mischiare	
  Script	
  e	
  Engine?	
  
•  U&lizzare	
  database	
  sia	
  da	
  parte	
  di	
  script	
  che	
  da	
  
   parte	
  di	
  uten&	
  “web”.	
  
    –  script:	
  solitamente	
  macinano	
  da&	
  
    –  web:	
  	
  
         •  vuole	
  esplorare	
  i	
  da&	
  sia	
  quelli	
  in	
  input	
  che	
  il	
  risultato	
  
         •  Services	
  	
  
•  Credo	
  che	
  mantenere	
  tu=o	
  in	
  un	
  unico	
  posto	
  sia	
  
   meno	
  dispersivo	
  e	
  di	
  solito	
  chi	
  sviluppa	
  il	
  livello	
  di	
  
   analisi/database	
  POI	
  si	
  preoccupa	
  anche	
  di	
  
   sviluppare	
  l’interfaccia	
  
Il	
  Generatore1	
  
Il	
  Generatore1	
  
Il	
  Generatore1	
  




 Bundler,	
  Jeweler	
  	
  
        +	
  
    Hacking	
  
Il	
  Generatore2	
  

$ biogem --with-engine=joke fake!                                                      !create !config/routes.rb!
   !create !.gitignore!                                                             Jeweler has prepared your gem in bioruby-fake!
   !create !Rakefile!                                                               Fetching source index for http://rubygems.org/!
   !create !Gemfile!                                                                Could not reach rubygems repository http://
   !create !LICENSE.txt!                                                                rubygems.org/!
   !create !README.rdoc!                                                            Using rake (0.8.7) !
   !create !.document!                                                              Using bio (1.4.1) !
   !create !lib!                                                                    Using bundler (1.0.10) !
   !create !lib/bio-fake.rb!                                                        Using git (1.2.5) !
   !create !test!                                                                   Using jeweler (1.5.2) !
   !create !test/helper.rb!                                                         Using rcov (0.9.9) !
   !create !test/test_bio-fake.rb!                                                  Using shoulda (2.11.3) !
   !create !db!                                                                     Your bundle is complete! Use `bundle show
                                                                                        [gemname]` to see where a bundled gem is
   !create !app!                                                                        installed.!
   !create !app/controllers!                                                        rake version:write!
   !create !app/views!                                                              (in /Users/bonnalraoul/Documents/Develop/
   !create !app/helpers!                                                                prototypes/bioruby-fake)!
   !create !config!                                                                 Updated version: 0.0.0!
   !create !lib/bio-fake-engine.rb!                                                 rake gemspec!
   !create !lib/bio-fake.rb!                                                        (in /Users/bonnalraoul/Documents/Develop/
********************************************************************************!       prototypes/bioruby-fake)!
*                                                                              *!
*    Remember to require this library in the Gemfile of your Rails applicat    *!   Generated: bio-fake.gemspec!
*    ion.                                                                      *!   bio-fake.gemspec is valid.!
*    Please take a look at bioruby-fake/lib/bio-fake-engine.rb file for an     *!
*    example of how integrate your engine into a rails application.            *!
*    Thanks!                                                                   *!
*                                                                              *!
********************************************************************************!
Engine	
  
require 'bio-fake'!
require 'rails'!

module BioFake!
  class Engine < Rails::Engine!
  # Config defaults!
       config.widget_factory_name = "default factory name"!
       config.mount_at = '/'!

  # # Load rake tasks!
  # rake_tasks do!
  #   load File.join(File.dirname(__FILE__), 'rails/railties/tasks.rake')!
  # end   !
  # Check the gem config!

       initializer "check config" do |app|!
       # make sure mount_at ends with trailing slash!
         config.mount_at += '/'               unless config.mount_at.last == '/'!
       end!

    initializer "static assets" do |app|!
       app.middleware.use ::ActionDispatch::Static, "#{root}/public"!
    end!
    paths.app.models            << "lib"!
  end!
end!                                                                 h=p://keithschacht.com/crea&ng-­‐a-­‐rails-­‐3-­‐engine-­‐plugin-­‐gem/	
  
Engine	
  Rou&ng	
  
Rails.application.routes.draw do |map|!

    mount_at = BioFake::Engine.config.mount_at!

#ROUTES from code below:!
# YourPathToTheControllerFiles = “bio/kb/gex”!
# OtherControllerName = slice!
# !
#               gex     /gex(.:format)                          {:controller=>"bio/kb/gex/populations", :action=>"index"}!
# filter_population GET /gex/populations/:id/filter(.:format)   {:action=>"filter", :controller=>"bio/kb/gex/populations"}!
#       populations GET /gex/populations(.:format)              {:action=>"index", :controller=>"bio/kb/gex/populations"}!
#        population GET /gex/populations/:id(.:format)          {:action=>"show", :controller=>"bio/kb/gex/populations"}!
#           samples GET /gex/samples(.:format)                  {:action=>"index", :controller=>"bio/kb/gex/samples"}!
#            sample GET /gex/samples/:id(.:format)              {:action=>"show", :controller=>"bio/kb/gex/samples"}!
#            slices GET /gex/slices(.:format)                   {:action=>"index", :controller=>"bio/kb/gex/slices"}!
#             slice GET /gex/slices/:id(.:format)               {:action=>"show", :controller=>"bio/kb/gex/slices”}!

  scope mount_at, :module=>'SUBSITITUTE YourPathToTheControllerFiles'do                                           !
     resources :ControllerName, :only => [ :index, :show] do !
       member do !
         get :example!
       end #member      !
     end #resource!
     resources :SUBSTITUTEOtherControllerName, :only => [ :index, :show]!
  end #scope!
end!
Rails	
  Ini&alizer	
  
Codice	
  che	
  deve	
  essere	
  aggiunto	
  all’applicazione                                       	
  

# config/initializers/bio-fake.rb!
#   create a file called bio-fake.rb!
#   you can change the mount point of you engine, using option!
#   --with_engine=namespace like http://YourDomain:port/YourMountPoint!
#   Otherwise, if you want your RailsEngine to be called at root level, leave everything as it now,
     without that file.!

 module BioFake!
    class Engine < Rails::Engine!
      config.mount_at = '/joke’!
    end!
 end!
Scrip&ng	
  e	
  RailsEngines	
  possono	
  
             coesistere	
  ?	
  
                    SI	
  
Da	
  risolvere	
  
•  Come	
  posso	
  ges&re	
  le	
  interdipendenze	
  tra	
  
   database	
  in	
  gemme	
  differen&?	
  
•  I/O	
  di	
  da&	
  in	
  formato	
  tabellare:	
  tab,	
  csv	
  
    –  Conviene	
  me=ere	
  in	
  db	
  classici	
  ?	
  
    –  NOSQL	
  ?	
  
    –  Tenere	
  I	
  file?	
  
•  I	
  database	
  spesso	
  sono	
  legacy	
  e	
  devono	
  
   interagire	
  tramite	
  le	
  gemme	
  
    –  SQLite3	
  per	
  la	
  distribuzione	
  
Ringraziamen&	
  
Bioruby	
                        P.T.P.	
  
•  Toshiaki	
  Katayama	
        •  Francesco	
  Strozzi	
  
•  Pjotr	
  Prins	
  

Fondazione	
  INGM	
  
•  Massimiliano	
  Pagani	
  
•  Riccardo	
  L.	
  Rossi	
  
•  Valeria	
  Ranzani	
  
Domande	
  ?	
  

More Related Content

Viewers also liked

Krebscycle 100410033222-phpapp01
Krebscycle 100410033222-phpapp01Krebscycle 100410033222-phpapp01
Krebscycle 100410033222-phpapp01Prince Anwar Ali
 
Slideshare (adab-2013)lesson#-8(e)-adab-towards-the-prophet-[the-prophet-and-...
Slideshare (adab-2013)lesson#-8(e)-adab-towards-the-prophet-[the-prophet-and-...Slideshare (adab-2013)lesson#-8(e)-adab-towards-the-prophet-[the-prophet-and-...
Slideshare (adab-2013)lesson#-8(e)-adab-towards-the-prophet-[the-prophet-and-...Zhulkeflee Ismail
 
[Slideshare] tafaqqahu-(2015)-#9c- daily-application- -enhancing-divine-conne...
[Slideshare] tafaqqahu-(2015)-#9c- daily-application- -enhancing-divine-conne...[Slideshare] tafaqqahu-(2015)-#9c- daily-application- -enhancing-divine-conne...
[Slideshare] tafaqqahu-(2015)-#9c- daily-application- -enhancing-divine-conne...Zhulkeflee Ismail
 
[Slideshare] akhlaq- (january-2015) -lesson # 6 -types-of-nafs-[contn'd]-(25-...
[Slideshare] akhlaq- (january-2015) -lesson # 6 -types-of-nafs-[contn'd]-(25-...[Slideshare] akhlaq- (january-2015) -lesson # 6 -types-of-nafs-[contn'd]-(25-...
[Slideshare] akhlaq- (january-2015) -lesson # 6 -types-of-nafs-[contn'd]-(25-...Zhulkeflee Ismail
 
Nafs philosphy of islam
Nafs   philosphy of islamNafs   philosphy of islam
Nafs philosphy of islamSahrish Darjat
 
Rooh,Nafs aur Jism Quran ki roshni main ( Urdu )
Rooh,Nafs aur Jism Quran ki roshni main ( Urdu )Rooh,Nafs aur Jism Quran ki roshni main ( Urdu )
Rooh,Nafs aur Jism Quran ki roshni main ( Urdu )yoursincerefriend
 
[Slideshare] our muslim identity(ntums-eleven-launch)-3-aug-2015
[Slideshare] our muslim identity(ntums-eleven-launch)-3-aug-2015[Slideshare] our muslim identity(ntums-eleven-launch)-3-aug-2015
[Slideshare] our muslim identity(ntums-eleven-launch)-3-aug-2015Zhulkeflee Ismail
 

Viewers also liked (9)

Krebscycle 100410033222-phpapp01
Krebscycle 100410033222-phpapp01Krebscycle 100410033222-phpapp01
Krebscycle 100410033222-phpapp01
 
Slideshare (adab-2013)lesson#-8(e)-adab-towards-the-prophet-[the-prophet-and-...
Slideshare (adab-2013)lesson#-8(e)-adab-towards-the-prophet-[the-prophet-and-...Slideshare (adab-2013)lesson#-8(e)-adab-towards-the-prophet-[the-prophet-and-...
Slideshare (adab-2013)lesson#-8(e)-adab-towards-the-prophet-[the-prophet-and-...
 
[Slideshare] tafaqqahu-(2015)-#9c- daily-application- -enhancing-divine-conne...
[Slideshare] tafaqqahu-(2015)-#9c- daily-application- -enhancing-divine-conne...[Slideshare] tafaqqahu-(2015)-#9c- daily-application- -enhancing-divine-conne...
[Slideshare] tafaqqahu-(2015)-#9c- daily-application- -enhancing-divine-conne...
 
Intro ahlul yameen
Intro ahlul yameenIntro ahlul yameen
Intro ahlul yameen
 
[Slideshare] akhlaq- (january-2015) -lesson # 6 -types-of-nafs-[contn'd]-(25-...
[Slideshare] akhlaq- (january-2015) -lesson # 6 -types-of-nafs-[contn'd]-(25-...[Slideshare] akhlaq- (january-2015) -lesson # 6 -types-of-nafs-[contn'd]-(25-...
[Slideshare] akhlaq- (january-2015) -lesson # 6 -types-of-nafs-[contn'd]-(25-...
 
Nafs philosphy of islam
Nafs   philosphy of islamNafs   philosphy of islam
Nafs philosphy of islam
 
Personal muhasabah
Personal muhasabahPersonal muhasabah
Personal muhasabah
 
Rooh,Nafs aur Jism Quran ki roshni main ( Urdu )
Rooh,Nafs aur Jism Quran ki roshni main ( Urdu )Rooh,Nafs aur Jism Quran ki roshni main ( Urdu )
Rooh,Nafs aur Jism Quran ki roshni main ( Urdu )
 
[Slideshare] our muslim identity(ntums-eleven-launch)-3-aug-2015
[Slideshare] our muslim identity(ntums-eleven-launch)-3-aug-2015[Slideshare] our muslim identity(ntums-eleven-launch)-3-aug-2015
[Slideshare] our muslim identity(ntums-eleven-launch)-3-aug-2015
 

Similar to BioRuby e gli Engines di Rails -ITA-

Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkGiovanni Buffa
 
Come costruire un Fablab @ Mak-ER Bologna 04/06/2014
Come costruire un Fablab @ Mak-ER Bologna 04/06/2014Come costruire un Fablab @ Mak-ER Bologna 04/06/2014
Come costruire un Fablab @ Mak-ER Bologna 04/06/2014Massimo Menichinelli
 
Infrastrutture web e Ruby on Rails
Infrastrutture web e Ruby on RailsInfrastrutture web e Ruby on Rails
Infrastrutture web e Ruby on Railsguestfe3e15
 
AngularJS On Rails by Daniele Spinosa
AngularJS On Rails by Daniele SpinosaAngularJS On Rails by Daniele Spinosa
AngularJS On Rails by Daniele SpinosaCommit University
 
Introduzione a Ruby On Rails
Introduzione a Ruby On RailsIntroduzione a Ruby On Rails
Introduzione a Ruby On RailsLuca Mearelli
 
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailDotNetMarche
 
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8Wellnet srl
 
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8DrupalDay
 
Antichi Generazione Web - part 5 Tools Aggregare risorse
Antichi Generazione Web - part 5 Tools Aggregare risorseAntichi Generazione Web - part 5 Tools Aggregare risorse
Antichi Generazione Web - part 5 Tools Aggregare risorseLaura Antichi
 
Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017Fabrizio Bernabei
 
Adhearsion @ Ruby Social Club 3 Maggio 2012
Adhearsion @ Ruby Social Club 3 Maggio 2012Adhearsion @ Ruby Social Club 3 Maggio 2012
Adhearsion @ Ruby Social Club 3 Maggio 2012Luca Pradovera
 
Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Fabio Mora
 
I tool owasp per la sicurezza del software 20110315
I tool owasp per la sicurezza del software 20110315I tool owasp per la sicurezza del software 20110315
I tool owasp per la sicurezza del software 20110315Paolo Perego
 
Frontend Development with Blazor
Frontend Development with BlazorFrontend Development with Blazor
Frontend Development with BlazorMichele Aponte
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaXPeppers
 

Similar to BioRuby e gli Engines di Rails -ITA- (20)

Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
 
Link. javascript ajax
  Link. javascript ajax  Link. javascript ajax
Link. javascript ajax
 
Node and the Cloud
Node and the CloudNode and the Cloud
Node and the Cloud
 
Come costruire un Fablab @ Mak-ER Bologna 04/06/2014
Come costruire un Fablab @ Mak-ER Bologna 04/06/2014Come costruire un Fablab @ Mak-ER Bologna 04/06/2014
Come costruire un Fablab @ Mak-ER Bologna 04/06/2014
 
Infrastrutture web e Ruby on Rails
Infrastrutture web e Ruby on RailsInfrastrutture web e Ruby on Rails
Infrastrutture web e Ruby on Rails
 
AngularJS On Rails by Daniele Spinosa
AngularJS On Rails by Daniele SpinosaAngularJS On Rails by Daniele Spinosa
AngularJS On Rails by Daniele Spinosa
 
Introduzione a Ruby On Rails
Introduzione a Ruby On RailsIntroduzione a Ruby On Rails
Introduzione a Ruby On Rails
 
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle Monorail
 
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
 
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
 
Antichi Generazione Web - part 5 Tools Aggregare risorse
Antichi Generazione Web - part 5 Tools Aggregare risorseAntichi Generazione Web - part 5 Tools Aggregare risorse
Antichi Generazione Web - part 5 Tools Aggregare risorse
 
Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017
 
Portofino per Jug Padova
Portofino per Jug PadovaPortofino per Jug Padova
Portofino per Jug Padova
 
Adhearsion @ Ruby Social Club 3 Maggio 2012
Adhearsion @ Ruby Social Club 3 Maggio 2012Adhearsion @ Ruby Social Club 3 Maggio 2012
Adhearsion @ Ruby Social Club 3 Maggio 2012
 
Silex, iniziamo
Silex, iniziamoSilex, iniziamo
Silex, iniziamo
 
Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2
 
BEEing
BEEingBEEing
BEEing
 
I tool owasp per la sicurezza del software 20110315
I tool owasp per la sicurezza del software 20110315I tool owasp per la sicurezza del software 20110315
I tool owasp per la sicurezza del software 20110315
 
Frontend Development with Blazor
Frontend Development with BlazorFrontend Development with Blazor
Frontend Development with Blazor
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastruttura
 

BioRuby e gli Engines di Rails -ITA-

  • 1. Scrip&ng  e  RailsEngines  possono   coesistere  ?   Ruby  Social  Club   Raoul  J.P.  Bonnal   r@bioruby.org   h=ps://github.com/helios/bioruby-­‐gem   h=p://bioruby.open-­‐bio.org/     Milano,  24  Febbraio  2011  
  • 2. Ruby,  dove?   Web   Ambien&   di   U&lizzo   Scienza   Admin  
  • 3. Ruby,  dove?   Web   Web   Rails   Ambien&   di   Cool.io   U&lizzo   Scienza   Admin   Sinatra  
  • 4. Ruby,  dove?   Web   Ambien&   di   U&lizzo   Scienza   Admin   Admin   Capistrano  
  • 5. Ruby,  dove?   Web   BioRuby   SciRuby   Ambien&   di   U&lizzo   Scienza   Scienza   Admin   Graphics/ PloPng  
  • 6. BioRuby   conceP   •  La  bioinforma&ca  è  una  disciplina  scien&fica   dedicata  alla  risoluzione  di  problemi  biologici  a   livello  molecolare  con  metodo  informa&ci     •  BioRuby  è  una  libreria,  scri=a  completamente   in  Ruby,  il  cui  scopo  è  quello  di  ges&re  alcuni   aspeP  della  bioinforma&ca   h=p://it.wikipedia.org/wiki/Bioinforma&ca   h=p://bioruby.open-­‐bio.org/  
  • 8. BioRuby   contribuire   Sviluppatori  molto  conserva&vi   in  realtà  acce=ano  ma  ci  vuole  tempo  
  • 9. Il  proge=o  BioGem   Maggiore  necessità  di  apertura  verso  il  fresh   code,  che  non  sarà  bug  free  ma  almeno  c’è  
  • 10. Script  e  Engine   In  BioInforma&ca  spesso  chi  produce  da&  non  si    preoccupa  di  come  ques&  verranno  visualizza&  
  • 11. Script  e  Engine   In  BioInforma&ca  spesso  chi  produce  da&  non  si    preoccupa  di  come  ques&  verranno  visualizza&,    almeno  non  subito…   geek.take_rest if boss.watch? results! class Boss! def watch?(result)! result.fancy?! end! end! class Result! def fancy?! (kind_of? GorgeousImage) || has_cool_interface? ! end! end!
  • 12. Script  e  Engine   Oppure  li  analizza  con  strumen&  differen&,  che   però  spesso  non  offrono  molta  flessibilità  
  • 13. Script  e  Engine   Quindi  che  fare  ?   30  +  1  =  31   Solo  che  quell’  UNO  crea  mol&  più  problemi  di   quanto  si  pensi   –  Web  Applica&on,  che  richiede  tempo   –  Riusabilità:  possibile  proliferazione  di  applicazioni   –  Mantenibilità   –  E’  slegato  dalla  libreria  che  produce/ges&sce  i  da&?  
  • 14. Perché  mischiare  Script  e  Engine?   •  U&lizzare  database  sia  da  parte  di  script  che  da   parte  di  uten&  “web”.   –  script:  solitamente  macinano  da&   –  web:     •  vuole  esplorare  i  da&  sia  quelli  in  input  che  il  risultato   •  Services     •  Credo  che  mantenere  tu=o  in  un  unico  posto  sia   meno  dispersivo  e  di  solito  chi  sviluppa  il  livello  di   analisi/database  POI  si  preoccupa  anche  di   sviluppare  l’interfaccia  
  • 17. Il  Generatore1   Bundler,  Jeweler     +   Hacking  
  • 18. Il  Generatore2   $ biogem --with-engine=joke fake! !create !config/routes.rb! !create !.gitignore! Jeweler has prepared your gem in bioruby-fake! !create !Rakefile! Fetching source index for http://rubygems.org/! !create !Gemfile! Could not reach rubygems repository http:// !create !LICENSE.txt! rubygems.org/! !create !README.rdoc! Using rake (0.8.7) ! !create !.document! Using bio (1.4.1) ! !create !lib! Using bundler (1.0.10) ! !create !lib/bio-fake.rb! Using git (1.2.5) ! !create !test! Using jeweler (1.5.2) ! !create !test/helper.rb! Using rcov (0.9.9) ! !create !test/test_bio-fake.rb! Using shoulda (2.11.3) ! !create !db! Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is !create !app! installed.! !create !app/controllers! rake version:write! !create !app/views! (in /Users/bonnalraoul/Documents/Develop/ !create !app/helpers! prototypes/bioruby-fake)! !create !config! Updated version: 0.0.0! !create !lib/bio-fake-engine.rb! rake gemspec! !create !lib/bio-fake.rb! (in /Users/bonnalraoul/Documents/Develop/ ********************************************************************************! prototypes/bioruby-fake)! * *! * Remember to require this library in the Gemfile of your Rails applicat *! Generated: bio-fake.gemspec! * ion. *! bio-fake.gemspec is valid.! * Please take a look at bioruby-fake/lib/bio-fake-engine.rb file for an *! * example of how integrate your engine into a rails application. *! * Thanks! *! * *! ********************************************************************************!
  • 19. Engine   require 'bio-fake'! require 'rails'! module BioFake! class Engine < Rails::Engine! # Config defaults! config.widget_factory_name = "default factory name"! config.mount_at = '/'! # # Load rake tasks! # rake_tasks do! # load File.join(File.dirname(__FILE__), 'rails/railties/tasks.rake')! # end ! # Check the gem config! initializer "check config" do |app|! # make sure mount_at ends with trailing slash! config.mount_at += '/' unless config.mount_at.last == '/'! end! initializer "static assets" do |app|! app.middleware.use ::ActionDispatch::Static, "#{root}/public"! end! paths.app.models << "lib"! end! end! h=p://keithschacht.com/crea&ng-­‐a-­‐rails-­‐3-­‐engine-­‐plugin-­‐gem/  
  • 20. Engine  Rou&ng   Rails.application.routes.draw do |map|! mount_at = BioFake::Engine.config.mount_at! #ROUTES from code below:! # YourPathToTheControllerFiles = “bio/kb/gex”! # OtherControllerName = slice! # ! # gex /gex(.:format) {:controller=>"bio/kb/gex/populations", :action=>"index"}! # filter_population GET /gex/populations/:id/filter(.:format) {:action=>"filter", :controller=>"bio/kb/gex/populations"}! # populations GET /gex/populations(.:format) {:action=>"index", :controller=>"bio/kb/gex/populations"}! # population GET /gex/populations/:id(.:format) {:action=>"show", :controller=>"bio/kb/gex/populations"}! # samples GET /gex/samples(.:format) {:action=>"index", :controller=>"bio/kb/gex/samples"}! # sample GET /gex/samples/:id(.:format) {:action=>"show", :controller=>"bio/kb/gex/samples"}! # slices GET /gex/slices(.:format) {:action=>"index", :controller=>"bio/kb/gex/slices"}! # slice GET /gex/slices/:id(.:format) {:action=>"show", :controller=>"bio/kb/gex/slices”}! scope mount_at, :module=>'SUBSITITUTE YourPathToTheControllerFiles'do ! resources :ControllerName, :only => [ :index, :show] do ! member do ! get :example! end #member ! end #resource! resources :SUBSTITUTEOtherControllerName, :only => [ :index, :show]! end #scope! end!
  • 21. Rails  Ini&alizer   Codice  che  deve  essere  aggiunto  all’applicazione   # config/initializers/bio-fake.rb! # create a file called bio-fake.rb! # you can change the mount point of you engine, using option! # --with_engine=namespace like http://YourDomain:port/YourMountPoint! # Otherwise, if you want your RailsEngine to be called at root level, leave everything as it now, without that file.! module BioFake! class Engine < Rails::Engine! config.mount_at = '/joke’! end! end!
  • 22. Scrip&ng  e  RailsEngines  possono   coesistere  ?   SI  
  • 23. Da  risolvere   •  Come  posso  ges&re  le  interdipendenze  tra   database  in  gemme  differen&?   •  I/O  di  da&  in  formato  tabellare:  tab,  csv   –  Conviene  me=ere  in  db  classici  ?   –  NOSQL  ?   –  Tenere  I  file?   •  I  database  spesso  sono  legacy  e  devono   interagire  tramite  le  gemme   –  SQLite3  per  la  distribuzione  
  • 24. Ringraziamen&   Bioruby   P.T.P.   •  Toshiaki  Katayama   •  Francesco  Strozzi   •  Pjotr  Prins   Fondazione  INGM   •  Massimiliano  Pagani   •  Riccardo  L.  Rossi   •  Valeria  Ranzani