<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -9,18 +9,17 @@
 &lt;/head&gt;
 &lt;body&gt;
 &lt;h1&gt;&lt;a name=&quot;label-0&quot; id=&quot;label-0&quot;&gt;BioRuby Tutorial&lt;/a&gt;&lt;/h1&gt;&lt;!-- RDLabel: &quot;BioRuby Tutorial&quot; --&gt;
-&lt;p&gt;Editor: PjotrPrins &amp;lt;p .at. bioruby.org&amp;gt;&lt;/p&gt;
 &lt;ul&gt;
 &lt;li&gt;Copyright (C) 2001-2003 KATAYAMA Toshiaki &amp;lt;k .at. bioruby.org&amp;gt;&lt;/li&gt;
-&lt;li&gt;Copyright (C) 2005-2008 Pjotr Prins, Naohisa Goto and others&lt;/li&gt;
+&lt;li&gt;Copyright (C) 2005-2009 Pjotr Prins, Naohisa Goto and others&lt;/li&gt;
 &lt;/ul&gt;
-&lt;p&gt;The latest version resides in the CVS repository ./doc/&lt;a href=&quot;http://cvs.open-bio.org/cgi-bin/viewcvs/viewcvs.cgi/*checkout*/bioruby/doc/Tutorial.rd?rev=HEAD&amp;amp;cvsroot=bioruby&amp;amp;content-type=text/plain&quot;&gt;Tutorial.rd&lt;/a&gt;. This one was updated:&lt;/p&gt;
-&lt;pre&gt;$Id: Tutorial.rd,v 1.22 2008/05/19 12:22:05 pjotr Exp $ &lt;/pre&gt;
-&lt;p&gt;in preparation for the &lt;a href=&quot;http://hackathon.dbcls.jp/&quot;&gt;BioHackathlon 2008&lt;/a&gt;&lt;/p&gt;
+&lt;p&gt;This document was last modified: 2009/03/17
+Current editor: Pjotr Prins &amp;lt;p .at. bioruby.org&amp;gt;&lt;/p&gt;
+&lt;p&gt;The latest version resides in the GIT source code repository:  ./doc/&lt;a href=&quot;http://github.com/pjotrp/bioruby/raw/documentation/doc/Tutorial.rd&quot;&gt;Tutorial.rd&lt;/a&gt;.&lt;/p&gt;
 &lt;h2&gt;&lt;a name=&quot;label-1&quot; id=&quot;label-1&quot;&gt;Introduction&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Introduction&quot; --&gt;
 &lt;p&gt;This is a tutorial for using Bioruby. A basic knowledge of Ruby is required.
 If you want to know more about the programming langauge Ruby we recommend the
-excellent book &lt;a href=&quot;http://www.pragprog.com/titles/ruby&quot;&gt;Programming Ruby&lt;/a&gt;
+latest Ruby book &lt;a href=&quot;http://www.pragprog.com/titles/ruby&quot;&gt;Programming Ruby&lt;/a&gt;
 by Dave Thomas and Andy Hunt - some of it is online
 &lt;a href=&quot;http://www.rubycentral.com/pickaxe/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
 &lt;p&gt;For BioRuby you need to install Ruby and the BioRuby package on your computer&lt;/p&gt;
@@ -28,7 +27,7 @@ by Dave Thomas and Andy Hunt - some of it is online
 version it has with the&lt;/p&gt;
 &lt;pre&gt;% ruby -v&lt;/pre&gt;
 &lt;p&gt;command. Showing something like:&lt;/p&gt;
-&lt;pre&gt;ruby 1.8.5 (2006-08-25) [powerpc-linux]&lt;/pre&gt;
+&lt;pre&gt;ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]&lt;/pre&gt;
 &lt;p&gt;If you see no such thing you'll have to install Ruby using your installation
 manager. For more information see the
 &lt;a href=&quot;http://www.ruby-lang.org/en/&quot;&gt;Ruby&lt;/a&gt; website.&lt;/p&gt;
@@ -46,7 +45,8 @@ ruby -I lib bin/bioruby&lt;/pre&gt;
 &lt;p&gt;and you should see a prompt&lt;/p&gt;
 &lt;pre&gt;bioruby&amp;gt;&lt;/pre&gt;
 &lt;p&gt;Now test the following:&lt;/p&gt;
-&lt;pre&gt;bioruby&amp;gt; seq = Bio::Sequence::NA.new(&quot;atgcatgcaaaa&quot;)
+&lt;pre&gt;bioruby&amp;gt; require 'bio'
+bioruby&amp;gt; seq = Bio::Sequence::NA.new(&quot;atgcatgcaaaa&quot;)
 ==&amp;gt; &quot;atgcatgcaaaa&quot;
 
 bioruby&amp;gt; seq.complement
@@ -131,29 +131,32 @@ specify positions smaller than or equal to 0 for either one of the &quot;from&quot; or
 way of writing concise and clear code using 'closures'. Each sliding
 window creates a subsequence which is supplied to the enclosed block
 through a variable named +s+.&lt;/p&gt;
-&lt;p&gt;Show average percentage of GC content for 20 bases (stepping the default one base at a time)&lt;/p&gt;
+&lt;ul&gt;
+&lt;li&gt;&lt;p&gt;Show average percentage of GC content for 20 bases (stepping the default one base at a time)&lt;/p&gt;
 &lt;pre&gt;bioruby&amp;gt; seq = Bio::Sequence::NA.new(&quot;atgcatgcaattaagctaatcccaattagatcatcccgatcatcaaaaaaaaaa&quot;)
 ==&amp;gt; &quot;atgcatgcaattaagctaatcccaattagatcatcccgatcatcaaaaaaaaaa&quot;
 
 bioruby&amp;gt; a=[]; seq.window_search(20) { |s| a.push s.gc_percent } 
 bioruby&amp;gt; a
-==&amp;gt; [30, 35, 40, 40, 35, 35, 35, 30, 25, 30, 30, 30, 35, 35, 35, 35, 35, 40, 45, 45, 45, 45, 40, 35, 40, 40, 40, 40, 40, 35, 35, 35, 30, 30, 30]&lt;/pre&gt;
+==&amp;gt; [30, 35, 40, 40, 35, 35, 35, 30, 25, 30, 30, 30, 35, 35, 35, 35, 35, 40, 45, 45, 45, 45, 40, 35, 40, 40, 40, 40, 40, 35, 35, 35, 30, 30, 30]&lt;/pre&gt;&lt;/li&gt;
+&lt;/ul&gt;
 &lt;p&gt;Since the class of each subsequence is the same as original sequence
 (Bio::Sequence::NA or Bio::Sequence::AA or Bio::Sequence), you can
 use all methods on the subsequence. For example,&lt;/p&gt;
-&lt;p&gt;Shows translation results for 15 bases shifting a codon at a time&lt;/p&gt;
+&lt;ul&gt;
+&lt;li&gt;&lt;p&gt;Shows translation results for 15 bases shifting a codon at a time&lt;/p&gt;
 &lt;pre&gt;bioruby&amp;gt; a = []
-bioruby&amp;gt; seq.window_search(15, 3) do |s|
-bioruby&amp;gt;   a.push s.translate
-bioruby&amp;gt; end
+bioruby&amp;gt; seq.window_search(15, 3) { | s | a.push s.translate }
 bioruby&amp;gt; a
-==&amp;gt; [&quot;MHAIK&quot;, &quot;HAIKL&quot;, &quot;AIKLI&quot;, &quot;IKLIP&quot;, &quot;KLIPI&quot;, &quot;LIPIR&quot;, &quot;IPIRS&quot;, &quot;PIRSS&quot;, &quot;IRSSR&quot;, &quot;RSSRS&quot;, &quot;SSRSS&quot;, &quot;SRSSK&quot;, &quot;RSSKK&quot;, &quot;SSKKK&quot;]&lt;/pre&gt;
+==&amp;gt; [&quot;MHAIK&quot;, &quot;HAIKL&quot;, &quot;AIKLI&quot;, &quot;IKLIP&quot;, &quot;KLIPI&quot;, &quot;LIPIR&quot;, &quot;IPIRS&quot;, &quot;PIRSS&quot;, &quot;IRSSR&quot;, &quot;RSSRS&quot;, &quot;SSRSS&quot;, &quot;SRSSK&quot;, &quot;RSSKK&quot;, &quot;SSKKK&quot;]&lt;/pre&gt;&lt;/li&gt;
+&lt;/ul&gt;
 &lt;p&gt;Finally, the window_search method returns the last leftover
 subsequence. This allows for example&lt;/p&gt;
-&lt;p&gt;Divide a genome sequence into sections of 10000bp and
-output FASTA formatted sequences (line width 60 chars). The 1000bp at the
-start and end of each subsequence overlapped. At the 3' end of the sequence
-the leftover is also added:&lt;/p&gt;
+&lt;ul&gt;
+&lt;li&gt;&lt;p&gt;Divide a genome sequence into sections of 10000bp and
+  output FASTA formatted sequences (line width 60 chars). The 1000bp at the
+  start and end of each subsequence overlapped. At the 3' end of the sequence
+  the leftover is also added:&lt;/p&gt;
 &lt;pre&gt;i = 1
 textwidth=60
 remainder = seq.window_search(10000, 9000) do |s|
@@ -162,24 +165,23 @@ remainder = seq.window_search(10000, 9000) do |s|
 end
 if remainder
   puts remainder.to_fasta(&quot;segment #{i}&quot;, textwidth) 
-end&lt;/pre&gt;
+end&lt;/pre&gt;&lt;/li&gt;
+&lt;/ul&gt;
 &lt;p&gt;If you don't want the overlapping window, set window size and stepping
 size to equal values.&lt;/p&gt;
 &lt;p&gt;Other examples&lt;/p&gt;
-&lt;p&gt;Count the codon usage&lt;/p&gt;
+&lt;ul&gt;
+&lt;li&gt;&lt;p&gt;Count the codon usage&lt;/p&gt;
 &lt;pre&gt;bioruby&amp;gt; codon_usage = Hash.new(0)
-bioruby&amp;gt; seq.window_search(3, 3) do |s|
-bioruby&amp;gt;   codon_usage[s] += 1
-bioruby&amp;gt; end
+bioruby&amp;gt; seq.window_search(3, 3) { |s| codon_usage[s] += 1 }
 bioruby&amp;gt; codon_usage
-==&amp;gt; {&quot;cat&quot;=&amp;gt;1, &quot;aaa&quot;=&amp;gt;3, &quot;cca&quot;=&amp;gt;1, &quot;att&quot;=&amp;gt;2, &quot;aga&quot;=&amp;gt;1, &quot;atc&quot;=&amp;gt;1, &quot;cta&quot;=&amp;gt;1, &quot;gca&quot;=&amp;gt;1, &quot;cga&quot;=&amp;gt;1, &quot;tca&quot;=&amp;gt;3, &quot;aag&quot;=&amp;gt;1, &quot;tcc&quot;=&amp;gt;1, &quot;atg&quot;=&amp;gt;1}&lt;/pre&gt;
-&lt;p&gt;Calculate molecular weight for each 10-aa peptide (or 10-nt nucleic acid)&lt;/p&gt;
+==&amp;gt; {&quot;cat&quot;=&amp;gt;1, &quot;aaa&quot;=&amp;gt;3, &quot;cca&quot;=&amp;gt;1, &quot;att&quot;=&amp;gt;2, &quot;aga&quot;=&amp;gt;1, &quot;atc&quot;=&amp;gt;1, &quot;cta&quot;=&amp;gt;1, &quot;gca&quot;=&amp;gt;1, &quot;cga&quot;=&amp;gt;1, &quot;tca&quot;=&amp;gt;3, &quot;aag&quot;=&amp;gt;1, &quot;tcc&quot;=&amp;gt;1, &quot;atg&quot;=&amp;gt;1}&lt;/pre&gt;&lt;/li&gt;
+&lt;li&gt;&lt;p&gt;Calculate molecular weight for each 10-aa peptide (or 10-nt nucleic acid)&lt;/p&gt;
 &lt;pre&gt;bioruby&amp;gt; a = []
-bioruby&amp;gt; seq.window_search(10, 10) do |s|
-bioruby&amp;gt;   a.push s.molecular_weight
-bioruby&amp;gt; end
+bioruby&amp;gt; seq.window_search(10, 10) { |s| a.push s.molecular_weight }
 bioruby&amp;gt; a
-==&amp;gt; [3096.2062, 3086.1962, 3056.1762, 3023.1262, 3073.2262]&lt;/pre&gt;
+==&amp;gt; [3096.2062, 3086.1962, 3056.1762, 3023.1262, 3073.2262]&lt;/pre&gt;&lt;/li&gt;
+&lt;/ul&gt;
 &lt;p&gt;In most cases, sequences are read from files or retrieved from databases.
 For example:&lt;/p&gt;
 &lt;pre&gt;require 'bio'
@@ -303,12 +305,14 @@ ff.each_entry do |gb|
     puts hash['translation']
   end
 end&lt;/pre&gt;
-&lt;p&gt;Note: In this example Feature#assoc method makes a Hash from a
-feature object. It is useful because you can get data from the hash
-by using qualifiers as keys.
-(But there is a risk some information is lost when two or more
-qualifiers are the same. Therefore an Array is returned by
-Feature#feature)&lt;/p&gt;
+&lt;ul&gt;
+&lt;li&gt;Note: In this example Feature#assoc method makes a Hash from a
+  feature object. It is useful because you can get data from the hash
+  by using qualifiers as keys.
+  (But there is a risk some information is lost when two or more
+  qualifiers are the same. Therefore an Array is returned by
+  Feature#feature)&lt;/li&gt;
+&lt;/ul&gt;
 &lt;p&gt;Bio::Sequence#splicing splices subsequence from nucleic acid sequence
 according to location information used in GenBank, EMBL and DDBJ.&lt;/p&gt;
 &lt;p&gt;When the specified translation table is different from the default
@@ -318,15 +322,19 @@ contains selenocysteine, the two amino acid sequences will differ.&lt;/p&gt;
 feature style location text but also Bio::Locations object. For more
 information about location format and Bio::Locations class, see
 bio/location.rb.&lt;/p&gt;
-&lt;p&gt;Splice according to location string used in a GenBank entry&lt;/p&gt;
-&lt;pre&gt;naseq.splicing('join(2035..2050,complement(1775..1818),13..345')&lt;/pre&gt;
-&lt;p&gt;Generate Bio::Locations object and pass the splicing method&lt;/p&gt;
+&lt;ul&gt;
+&lt;li&gt;&lt;p&gt;Splice according to location string used in a GenBank entry&lt;/p&gt;
+&lt;pre&gt;naseq.splicing('join(2035..2050,complement(1775..1818),13..345')&lt;/pre&gt;&lt;/li&gt;
+&lt;li&gt;&lt;p&gt;Generate Bio::Locations object and pass the splicing method&lt;/p&gt;
 &lt;pre&gt;locs = Bio::Locations.new('join((8298.8300)..10206,1..855)')
-naseq.splicing(locs)&lt;/pre&gt;
+naseq.splicing(locs)&lt;/pre&gt;&lt;/li&gt;
+&lt;/ul&gt;
 &lt;p&gt;You can also use the splicing method for amino acid sequences
 (Bio::Sequence::AA objects).&lt;/p&gt;
-&lt;p&gt;Splicing peptide from a protein (e.g. signal peptide)&lt;/p&gt;
-&lt;pre&gt;aaseq.splicing('21..119')&lt;/pre&gt;
+&lt;ul&gt;
+&lt;li&gt;&lt;p&gt;Splicing peptide from a protein (e.g. signal peptide)&lt;/p&gt;
+&lt;pre&gt;aaseq.splicing('21..119')&lt;/pre&gt;&lt;/li&gt;
+&lt;/ul&gt;
 &lt;h3&gt;&lt;a name=&quot;label-5&quot; id=&quot;label-5&quot;&gt;More databases&lt;/a&gt;&lt;/h3&gt;&lt;!-- RDLabel: &quot;More databases&quot; --&gt;
 &lt;p&gt;Databases in BioRuby are essentially accessed like that of GenBank
 with classes like Bio::GenBank, Bio::KEGG::GENES. A full list can be found in 
@@ -384,23 +392,23 @@ bioruby&amp;gt; a = Bio::Alignment.new(seqs)
 bioruby&amp;gt; a.consensus 
 ==&amp;gt; &quot;a?gc?&quot;
 # shows IUPAC consensus
-a.consensus_iupac 
-==&amp;gt; &quot;ahgcr&quot;
+p a.consensus_iupac       # ==&amp;gt; &quot;ahgcr&quot;
+
 # iterates over each seq
 a.each { |x| p x }
-# ==&amp;gt;
-#    &quot;atgca&quot;
-#    &quot;aagca&quot;
-#    &quot;acgca&quot;
-#    &quot;acgcg&quot;
+  # ==&amp;gt;
+  #    &quot;atgca&quot;
+  #    &quot;aagca&quot;
+  #    &quot;acgca&quot;
+  #    &quot;acgcg&quot;
 # iterates over each site
 a.each_site { |x| p x }
-# ==&amp;gt;
-#    [&quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;]
-#    [&quot;t&quot;, &quot;a&quot;, &quot;c&quot;, &quot;c&quot;]
-#    [&quot;g&quot;, &quot;g&quot;, &quot;g&quot;, &quot;g&quot;]
-#    [&quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;]
-#    [&quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;g&quot;]
+  # ==&amp;gt;
+  #    [&quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;]
+  #    [&quot;t&quot;, &quot;a&quot;, &quot;c&quot;, &quot;c&quot;]
+  #    [&quot;g&quot;, &quot;g&quot;, &quot;g&quot;, &quot;g&quot;]
+  #    [&quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;]
+  #    [&quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;g&quot;]
 
 # doing alignment by using CLUSTAL W.
 # clustalw command must be installed.
@@ -525,9 +533,9 @@ method of the factory object after the &quot;query&quot; method.&lt;/p&gt;
 puts factory.output&lt;/pre&gt;
 &lt;h3&gt;&lt;a name=&quot;label-10&quot; id=&quot;label-10&quot;&gt;using FASTA from a remote internet site&lt;/a&gt;&lt;/h3&gt;&lt;!-- RDLabel: &quot;using FASTA from a remote internet site&quot; --&gt;
 &lt;ul&gt;
-&lt;li&gt;Note: Currently, only GenomeNet (fasta.genome.jp) is&lt;/li&gt;
+&lt;li&gt;Note: Currently, only GenomeNet (fasta.genome.jp) is
+  supported. check the class documentation for updates.&lt;/li&gt;
 &lt;/ul&gt;
-&lt;p&gt;supported. check the class documentation for updates.&lt;/p&gt;
 &lt;p&gt;For accessing a remote site the Bio::Fasta.remote method is used
 instead of Bio::Fasta.local.  When using a remote method, the
 databases available may be limited, but, otherwise, you can do the
@@ -625,7 +633,7 @@ are extracted from the first Hsp (High-scoring Segment Pair).&lt;/p&gt;
 retrieved. For now suffice to state that Bio::Blast::Report has a
 hierarchical structure mirroring the general BLAST output stream:&lt;/p&gt;
 &lt;ul&gt;
-&lt;li&gt;In a Bio::Blast::Report object, @iteratinos is an array of
+&lt;li&gt;In a Bio::Blast::Report object, @iterations is an array of
     Bio::Blast::Report::Iteration objects.
 &lt;ul&gt;
 &lt;li&gt;In a Bio::Blast::Report::Iteration object, @hits is an array of
@@ -642,24 +650,38 @@ hierarchical structure mirroring the general BLAST output stream:&lt;/p&gt;
 you can directly create Bio::Blast::Report objects without the
 Bio::Blast factory object. For this purpose use Bio::Blast.reports,
 which supports the &quot;-m 0&quot; default and &quot;-m 7&quot; XML type output format.&lt;/p&gt;
-&lt;pre&gt;#!/usr/bin/env ruby
-
-require 'bio'
-
-# Iterates over each XML result.
-# The variable &quot;report&quot; is a Bio::Blast::Report object.
-Bio::Blast.reports(ARGF) do |report|
+&lt;ul&gt;
+&lt;li&gt;&lt;p&gt;For example: &lt;/p&gt;
+&lt;pre&gt;bioruby&amp;gt; blast_version = nil; result = []
+bioruby&amp;gt; Bio::Blast.reports(File.new(&quot;../test/data/blast/blastp-multi.m7&quot;)) do |report|
+bioruby&amp;gt;   blast_version = report.version
+bioruby&amp;gt;   report.iterations.each do |itr|
+bioruby&amp;gt;     itr.hits.each do |hit|
+bioruby&amp;gt;       result.push hit.target_id
+bioruby&amp;gt;     end
+bioruby&amp;gt;   end
+bioruby&amp;gt; end
+bioruby&amp;gt; blast_version
+==&amp;gt; &quot;blastp 2.2.18 [Mar-02-2008]&quot;
+bioruby&amp;gt; result
+==&amp;gt; [&quot;BAB38768&quot;, &quot;BAB38768&quot;, &quot;BAB38769&quot;, &quot;BAB37741&quot;]&lt;/pre&gt;&lt;/li&gt;
+&lt;li&gt;&lt;p&gt;another example:&lt;/p&gt;
+&lt;pre&gt;require 'bio'
+Bio::Blast.reports(ARGF) do |report| 
   puts &quot;Hits for &quot; + report.query_def + &quot; against &quot; + report.db
   report.each do |hit|
     print hit.target_id, &quot;\t&quot;, hit.evalue, &quot;\n&quot; if hit.evalue &amp;lt; 0.001
   end
-end&lt;/pre&gt;
+end&lt;/pre&gt;&lt;/li&gt;
+&lt;/ul&gt;
 &lt;p&gt;Save the script as hits_under_0.001.rb and to process BLAST output
-files *.xml, you can&lt;/p&gt;
+files *.xml, you can run it with:&lt;/p&gt;
 &lt;pre&gt;% ruby hits_under_0.001.rb *.xml&lt;/pre&gt;
-&lt;p&gt;Sometimes BLAST XML output may be wrong and can not be parsed. We
-recommended to install BLAST 2.2.5 or later, and try combinations of
-the -D and -m options when you encounter problems.&lt;/p&gt;
+&lt;p&gt;Sometimes BLAST XML output may be wrong and can not be parsed. Check whether 
+blast is version 2.2.5 or later. See also blast --help. &lt;/p&gt;
+&lt;p&gt;Bio::Blast loads the full XML file into memory. If this causes a problem
+you can split the BLAST XML file into smaller chunks using XML-Twig. An
+example can be found in &lt;a href=&quot;http://github.com/pjotrp/biotools/&quot;&gt;Biotools&lt;/a&gt;.&lt;/p&gt;
 &lt;h3&gt;&lt;a name=&quot;label-13&quot; id=&quot;label-13&quot;&gt;Add remote BLAST search sites&lt;/a&gt;&lt;/h3&gt;&lt;!-- RDLabel: &quot;Add remote BLAST search sites&quot; --&gt;
 &lt;pre&gt;Note: this section is an advanced topic&lt;/pre&gt;
 &lt;p&gt;Here a more advanced application for using BLAST sequence homology
@@ -678,11 +700,7 @@ Bio::Blast::Report.new(or Bio::Blast::Default::Report.new):&lt;/p&gt;
 they may be included.&lt;/p&gt;
 &lt;h2&gt;&lt;a name=&quot;label-14&quot; id=&quot;label-14&quot;&gt;Generate a reference list using PubMed (Bio::PubMed)&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Generate a reference list using PubMed (Bio::PubMed)&quot; --&gt;
 &lt;p&gt;Below script is an example which seaches PubMed and creates a reference list.&lt;/p&gt;
-&lt;pre&gt;#!/usr/bin/env ruby
-
-require 'bio'
-
-ARGV.each do |id|
+&lt;pre&gt;ARGV.each do |id|
   entry = Bio::PubMed.query(id)     # searches PubMed and get entry
   medline = Bio::MEDLINE.new(entry) # creates Bio::MEDLINE object from entry text
   reference = medline.reference     # converts into Bio::Reference object
@@ -818,9 +836,6 @@ BioRuby and other projects' members (2002).&lt;/p&gt;
 &lt;/ul&gt;
 &lt;p&gt;Here we give a quick overview. Check out
 &lt;a href=&quot;http://obda.open-bio.org/&quot;&gt;&amp;lt;URL:http://obda.open-bio.org/&amp;gt;&lt;/a&gt; for more extensive details.&lt;/p&gt;
-&lt;p&gt;The specification is stored on CVS repository at cvs.open-bio.org,
-also available via http from:
-&lt;a href=&quot;http://cvs.open-bio.org/cgi-bin/viewcvs/viewcvs.cgi/obda-specs/?cvsroot=obf-common&quot;&gt;&amp;lt;URL:http://cvs.open-bio.org/cgi-bin/viewcvs/viewcvs.cgi/obda-specs/?cvsroot=obf-common&amp;gt;&lt;/a&gt;&lt;/p&gt;
 &lt;h2&gt;&lt;a name=&quot;label-18&quot; id=&quot;label-18&quot;&gt;BioRegistry&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;BioRegistry&quot; --&gt;
 &lt;p&gt;BioRegistry allows for locating retrieval methods and database
 locations through configuration files.  The priorities are&lt;/p&gt;
@@ -1000,13 +1015,35 @@ rtags -R --vi&lt;/pre&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.genome.jp/kegg/soap/&quot;&gt;&amp;lt;URL:http://www.genome.jp/kegg/soap/&amp;gt;&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
-&lt;h2&gt;&lt;a name=&quot;label-30&quot; id=&quot;label-30&quot;&gt;Comparing BioProjects&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Comparing BioProjects&quot; --&gt;
+&lt;h2&gt;&lt;a name=&quot;label-30&quot; id=&quot;label-30&quot;&gt;Ruby Ensembl API&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Ruby Ensembl API&quot; --&gt;
+&lt;p&gt;Ruby Ensembl API is a ruby API to the Ensembl database. It is NOT currently
+included in the BioRuby archives. To install it, see
+&lt;a href=&quot;http://wiki.github.com/jandot/ruby-ensembl-api&quot;&gt;&amp;lt;URL:http://wiki.github.com/jandot/ruby-ensembl-api&amp;gt;&lt;/a&gt;
+for more information.&lt;/p&gt;
+&lt;h3&gt;&lt;a name=&quot;label-31&quot; id=&quot;label-31&quot;&gt;Gene Ontology (GO) through the Ruby Ensembl API&lt;/a&gt;&lt;/h3&gt;&lt;!-- RDLabel: &quot;Gene Ontology (GO) through the Ruby Ensembl API&quot; --&gt;
+&lt;p&gt;Gene Ontologies can be fetched through the Ruby Ensembl API package:&lt;/p&gt;
+&lt;pre&gt;require 'ensembl'
+Ensembl::Core::DBConnection.connect('drosophila_melanogaster')
+infile = IO.readlines(ARGV.shift) # reading your comma-separated accession mapping file (one line per mapping)
+infile.each do |line|
+  accs = line.split(&quot;,&quot;)          # Split the comma-sep.entries into an array
+  drosphila_acc = accs.shift      # the first entry is the Drosophila acc
+  mosq_acc = accs.shift           # the second entry is you Mosq. acc
+  gene = Ensembl::Core::Gene.find_by_stable_id(drosophila_acc)
+  print &quot;#{mosq_acc}&quot;
+  gene.go_terms.each do |go|
+     print &quot;,#{go}&quot;
+  end
+end&lt;/pre&gt;
+&lt;p&gt;Prints each mosq. accession/uniq identifier and the GO terms from the Drosphila
+homologues.&lt;/p&gt;
+&lt;h2&gt;&lt;a name=&quot;label-32&quot; id=&quot;label-32&quot;&gt;Comparing BioProjects&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Comparing BioProjects&quot; --&gt;
 &lt;p&gt;For a quick functional comparison of BioRuby, BioPerl, BioPython and Bioconductor (R) see &lt;a href=&quot;http://sciruby.codeforpeople.com/sr.cgi/BioProjects&quot;&gt;&amp;lt;URL:http://sciruby.codeforpeople.com/sr.cgi/BioProjects&amp;gt;&lt;/a&gt;&lt;/p&gt;
-&lt;h2&gt;&lt;a name=&quot;label-31&quot; id=&quot;label-31&quot;&gt;Using BioRuby with R&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Using BioRuby with R&quot; --&gt;
+&lt;h2&gt;&lt;a name=&quot;label-33&quot; id=&quot;label-33&quot;&gt;Using BioRuby with R&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Using BioRuby with R&quot; --&gt;
 &lt;p&gt;Using Ruby with R Pjotr wrote a section on SciRuby. See &lt;a href=&quot;http://sciruby.codeforpeople.com/sr.cgi/RubyWithRlang&quot;&gt;&amp;lt;URL:http://sciruby.codeforpeople.com/sr.cgi/RubyWithRlang&amp;gt;&lt;/a&gt;&lt;/p&gt;
-&lt;h2&gt;&lt;a name=&quot;label-32&quot; id=&quot;label-32&quot;&gt;Using BioPerl or BioPython from Ruby&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Using BioPerl or BioPython from Ruby&quot; --&gt;
+&lt;h2&gt;&lt;a name=&quot;label-34&quot; id=&quot;label-34&quot;&gt;Using BioPerl or BioPython from Ruby&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Using BioPerl or BioPython from Ruby&quot; --&gt;
 &lt;p&gt;At the moment there is no easy way of accessing BioPerl from Ruby. The best way, perhaps, is to create a Perl server that gets accessed through XML/RPC or SOAP.&lt;/p&gt;
-&lt;h2&gt;&lt;a name=&quot;label-33&quot; id=&quot;label-33&quot;&gt;Installing required external library&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Installing required external library&quot; --&gt;
+&lt;h2&gt;&lt;a name=&quot;label-35&quot; id=&quot;label-35&quot;&gt;Installing required external library&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Installing required external library&quot; --&gt;
 &lt;p&gt;At this point for using BioRuby no additional libraries are needed.
 This may change, so keep an eye on the Bioruby website. Also when
 a package is missing BioRuby should show an informative message.&lt;/p&gt;
@@ -1014,17 +1051,17 @@ a package is missing BioRuby should show an informative message.&lt;/p&gt;
 painful, as the gem standard for packages evolved late and some still
 force you to copy things by hand. Therefore read the README's
 carefully that come with each package.&lt;/p&gt;
-&lt;h2&gt;&lt;a name=&quot;label-34&quot; id=&quot;label-34&quot;&gt;Trouble shooting&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Trouble shooting&quot; --&gt;
+&lt;h2&gt;&lt;a name=&quot;label-36&quot; id=&quot;label-36&quot;&gt;Trouble shooting&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Trouble shooting&quot; --&gt;
 &lt;ul&gt;
 &lt;li&gt;Error: in `require': no such file to load -- bio (LoadError)&lt;/li&gt;
 &lt;/ul&gt;
 &lt;p&gt;Ruby fails to find the BioRuby libraries - add it to the RUBYLIB path, or pass
 it to the interpeter. For example:&lt;/p&gt;
-&lt;pre&gt;ruby -I~/cvs/bioruby/lib yourprogram.rb&lt;/pre&gt;
-&lt;h2&gt;&lt;a name=&quot;label-35&quot; id=&quot;label-35&quot;&gt;Modifying this page&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Modifying this page&quot; --&gt;
-&lt;p&gt;IMPORTANT NOTICE: This page is maintained in the BioRuby CVS
+&lt;pre&gt;ruby -I$BIORUBYPATH/lib yourprogram.rb&lt;/pre&gt;
+&lt;h2&gt;&lt;a name=&quot;label-37&quot; id=&quot;label-37&quot;&gt;Modifying this page&lt;/a&gt;&lt;/h2&gt;&lt;!-- RDLabel: &quot;Modifying this page&quot; --&gt;
+&lt;p&gt;IMPORTANT NOTICE: This page is maintained in the BioRuby source code 
 repository. Please edit the file there otherwise changes may get
-lost. See &lt;!-- Reference, RDLabel &quot;BioRuby Developer Information&quot; doesn't exist --&gt;&lt;em class=&quot;label-not-found&quot;&gt;BioRuby Developer Information&lt;/em&gt;&lt;!-- Reference end --&gt; for CVS and mailing list
+lost. See &lt;!-- Reference, RDLabel &quot;BioRuby Developer Information&quot; doesn't exist --&gt;&lt;em class=&quot;label-not-found&quot;&gt;BioRuby Developer Information&lt;/em&gt;&lt;!-- Reference end --&gt; for repository and mailing list
 access.&lt;/p&gt;
 
 &lt;/body&gt;</diff>
      <filename>doc/Tutorial.rd.html</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>642577ae70647f8bd0ae3bcc8ddc118cecc886c7</id>
    </parent>
  </parents>
  <author>
    <name>Naohisa Goto</name>
    <email>ng@bioruby.org</email>
  </author>
  <url>http://github.com/bioruby/bioruby/commit/dd878d3ecd83ad5e61a21bbf90d27d1c89d5f12d</url>
  <id>dd878d3ecd83ad5e61a21bbf90d27d1c89d5f12d</id>
  <committed-date>2009-03-18T17:44:09-07:00</committed-date>
  <authored-date>2009-03-18T17:44:09-07:00</authored-date>
  <message>doc/Tutorial.rd.html is regenerated</message>
  <tree>b4eb98ad7ed3566ca63b439d1bc90644c7d47bca</tree>
  <committer>
    <name>Naohisa Goto</name>
    <email>ng@bioruby.org</email>
  </committer>
</commit>
