Difference between revisions of "Team:UNIFI/Software"

 
(6 intermediate revisions by one other user not shown)
Line 1: Line 1:
 
{{UNIFI}}
 
{{UNIFI}}
 +
 
<html>
 
<html>
 +
<head>
 +
<style>
  
 +
.fisso {
 +
    position: fixed;
 +
    top: 20vh;
 +
    left: 2vw;
 +
    border: 6px solid #087072;
 +
    background-color: #99ffdd;
 +
    font-family: "Playfair Display";
 +
    font-size: 24px;
 +
    font-style: normal;
 +
    font-variant: normal;
 +
}
  
 +
#nav {
 +
background-color: #087072;
 +
font-family: "Luckiest Guy";
 +
font-style: normal;
 +
font-variant: normal;
 +
font-size: 18px;
 +
}
  
<div class="column half_size">
+
#nav_wrapper {
<h1>Software</h1>
+
width: 100%;
<h3>Best Software Tool Special Prize</h3>
+
margin: 0 auto;
<p>Regardless of the topic, iGEM projects often create or adapt computational tools to move the project forward. Because they are born out of a direct practical need, these software tools (or new computational methods) can be surprisingly useful for other teams. Without necessarily being big or complex, they can make the crucial difference to a project's success. This award tries to find and honor such "nuggets" of computational work.
+
text-align: center;
 +
font-family: "Luckiest Guy";
 +
font-style: normal;
 +
font-variant: normal;
 +
font-size: 18px;
  
 +
}
  
<br><br>
+
#nav ul {
To compete for the <a href="https://2017.igem.org/Judging/Awards">Best Software Tool prize</a>, please describe your work on this page and also fill out the description on the <a href="https://2017.igem.org/Judging/Judging_Form">judging form</a>.
+
list-style-type: none;
<br><br>
+
padding: 0;
You must also delete the message box on the top of this page to be eligible for this prize.
+
margin: 0;
</p>
+
position: relative;
 +
font-family: "Luckiest Guy";
 +
font-style: normal;
 +
font-variant: normal;
 +
font-size: 18px;
  
 +
}
  
 +
#nav ul li {
 +
display: inline-block;
 +
font-family: "Luckiest Guy";
 +
font-style: normal;
 +
font-variant: normal;
 +
font-size: 18px;
 +
}
 +
 +
#nav ul li:hover {
 +
background-color: #ff8533;
 +
font-family: "Luckiest Guy";
 +
font-style: normal;
 +
font-variant: normal;
 +
font-size: 18px;
 +
 +
}
 +
 +
#nav ul li a,visited {
 +
display: block;
 +
padding: 15px;
 +
text-decoration: none;
 +
color: #fff8dc;
 +
font-family: "Luckiest Guy";
 +
font-style: normal;
 +
font-variant: normal;
 +
font-size: 18px;
 +
 +
}
 +
 +
#nav ul li a:hover {
 +
color: #087072;
 +
text-decoration: none;
 +
font-family: "Luckiest Guy";
 +
font-style: normal;
 +
font-variant: normal;
 +
font-size: 18px;
 +
 +
}
 +
 +
#nav ul li:hover ul {
 +
display: block;
 +
font-family: "Luckiest Guy";
 +
font-style: normal;
 +
font-variant: normal;
 +
font-size: 18px;
 +
}
 +
 +
#nav ul ul {
 +
display: none;
 +
position: absolute;
 +
background-color: #ff8533;
 +
font-family: "Luckiest Guy";
 +
font-style: normal;
 +
font-variant: normal;
 +
font-size: 18px;
 +
}
 +
 +
#nav ul ul li{
 +
display: block;
 +
font-family: "Luckiest Guy";
 +
font-style: normal;
 +
font-variant: normal;
 +
font-size: 18px;
 +
}
 +
 +
#nav ul ul li a,visited {
 +
color: #fff8dc;
 +
font-family: "Luckiest Guy";
 +
font-style: normal;
 +
font-variant: normal;
 +
font-size: 16px;
 +
}
 +
 +
#nav ul ul li a:hover{
 +
color: #087072;
 +
font-family: "Luckiest Guy";
 +
font-style: normal;
 +
font-variant: normal;
 +
font-size: 16px;
 +
}
 +
.piedino {
 +
    display: -webkit-flex;
 +
    display: flex;
 +
    position: relative;
 +
    bottom: 0px;
 +
    width: 100%;
 +
    height: 210px;
 +
    background-color: #087072;
 +
    flex-direction: column;
 +
    align-items: center;
 +
    color: white;
 +
    margin: 0px;
 +
}
 +
 +
.dito {
 +
display: flex;
 +
align-items: center;
 +
color: white;
 +
 +
}
 +
 +
.unghia {
 +
    background-color: #087072;
 +
    width: auto;
 +
    margin: 5px;
 +
    color: white;
 +
}
 +
 +
</style>
 +
</head>
 +
<body>
 +
<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Luckiest+Guy" />
 +
<div id="nav">
 +
    <div id="nav_wrapper">
 +
<ul>
 +
<li><a href="https://2017.igem.org/Team:UNIFI">HOME</a></li><li>
 +
<a href="#" style="margin-left:13px;">TEAM <img src="https://static.igem.org/mediawiki/2017/0/00/UNIFI_BEU.png"  style=" height:22px; width:22px; margin-right:21px"></a>
 +
<ul>
 +
<li><a href="Team">OUR TEAM</a></li>
 +
<li><a href="Florence">FLORENCE</a></li>
 +
<li><a href="Attributions">ATTRIBUTIONS</a></li>
 +
</ul>
 +
</li><li>
 +
 +
<a href="#" style="margin-left:7px;">RESEARCH<img src="https://static.igem.org/mediawiki/2017/9/9e/UNIFI_ATM.png"  style=" height:22px; width:22px; margin-right:28px"></a>
 +
<ul>
 +
<li><a href="Background">BACKGROUND</a></li>
 +
<li><a href="Theoretical_basis">THEORETICAL BASIS</a></li>
 +
<li><a href="Software">SOFTWARE</a></li>
 +
</ul>
 +
</li><li>
 +
 +
 +
<a href="#" style="margin-left:7px;">PROJECT<img src="https://static.igem.org/mediawiki/2017/5/57/UNIFI_white_dna.png"  style=" height:22px; width:22px; margin-right:8px"></a>
 +
<ul>
 +
<li><a href="Results">RESULTS</a></li>
 +
<li><a href="Contribution">CONTRIBUTION</a></li>
 +
<li><a href="Demonstrate">DEMONSTRATE</a></li>
 +
</ul>
 +
</li><li>
 +
<a href="Journal">JOURNAL</a></li><li>
 +
<a href="Collaborations">COLLABORATIONS</a></li><li>
 +
<a href="#">HUMAN PRACTICES <img src="https://static.igem.org/mediawiki/2017/f/f7/UNIFI_micro.png"  style=" height:22px; width:22px;"></a>
 +
<ul>
 +
<li><a href="Delft" >DELFT</a></li>
 +
<li><a href="HP/Silver" >SILVER</a></li>
 +
<li><a href="HP/Gold_Integrated" >GOLD</a></li>
 +
<li><a href="Engagement" style=" margin-left:10px; margin-right:14px">PUBLIC ENGAGEMENT</a></li>
 +
</ul>
 +
</li>
 +
</ul>
 +
    </div>
 +
</div>
 +
 +
 +
 +
 +
 +
<center> <h1 style="font-size: 4vw; margin: 1.5vw; padding: 2vw;">Our software <h1> </center>
 +
 +
<center> <img src="" style=" width:50vw; eight:60vw; alt="";></center>
 +
 +
<div class="fisso">
 +
<a href="#Introduction" style=" color:black; font-size:20px;"><b>1.Introduction</b></a> <br>
 +
<a href="#Reception" style=" color:black; font-size:20px;"><b>2.Reception</b></a><br>
 +
<a href="#Validation" style=" color:black; font-size:20px;"><b>3.Validation</b></a><br>
 +
<a href="#Elaboration" style=" color:black; font-size:20px;"><b>4.Elaboration</b></a><br>
 +
<a href="#Rendering" style=" color:black; font-size:20px;"><b>5.Rendering</b></a>
 
</div>
 
</div>
  
<div class="column half_size">
+
<a name="Introduction"></a>
<h5> Inspiration </h5>
+
<h2 style="font-size: 25px; margin-left: 13.5vw; padding: 1.5vw;">1. Introduction</h2>
<p>
+
<p style=" font-size: 18px; margin-left: 15vw; margin-right: 15vw;">
Here are a few examples from previous teams:
+
Bachteria isn’t a single piece of code, but an entire ensemble working together to bring light to the hidden music in bioluminescence.<br><br>
 +
 
 +
Keeping in line with the ensemble analogy, these are its sections:<br>
 +
1. Reception<br>
 +
2. Validation<br>
 +
3. Elaboration<br>
 +
4. Rendering<br><br>
 +
 
 +
For each section of this ensemble, a chapter describes the instruments involved.</p>
 +
 
 +
<a name="Reception"></a>
 +
<h2 style="font-size: 25px; margin-left: 13.5vw; padding: 1.5vw;">2. Reception</h2>
 +
<p style=" font-size: 18px; margin-left: 15vw; margin-right: 15vw;">
 +
After bioluminescence measures are taken through a TECAN Infinite Pro 200 apparatus, an XLS file is generated.<br><br>
 +
 
 +
As the ensemble resides within the Google Cloud theatre, it is necessary to convey the output to the system proper: without yielding an inch on security, we found web interfaces to be an extremely more convenient option for the general user than SSH-based transfers, especially in light of the open nature of this project.<br><br>
 +
 
 +
Therefore, two instruments are brought in to feed every other section: nginx (1.10.3) and PHP (7.0). Due to the extremely lightweight nature of this task, no PHP framework was employed to accomplish this step.</p>
 +
 
 +
<a name="Validation"></a>
 +
<<h2 style="font-size: 25px; margin-left: 13.5vw; padding: 1.5vw;">3. Validation</h2>
 +
<p style=" font-size: 18px; margin-left: 15vw; margin-right: 15vw;">
 +
Once the input has reached the system, an entire section makes sure every part keeps the rhythm: it is accomplished once more through PHP, more specifically through PHPExcel, a library licensed under LGPL.<br>
 +
While more recent libraries were available, such as PHPSpreadsheet, they broke compatibility with previous Office Excel versions as to ensure a higher code quality, and many are far from being as stable or complete.</p>
 +
 
 +
<a name="Elaboration"></a>
 +
<h2 style="font-size: 25px; margin-left: 13.5vw; padding: 1.5vw;">4. Elaboration</h2>
 +
<p style=" font-size: 18px; margin-left: 15vw; margin-right: 15vw;">
 +
Now that we’ve made sure every instrument is in tune, it is time to rehearse!<br><br>
 +
 
 +
This is the Python (3.5.3) section, with Python-midi playing as the first cello: released under the MIT license, it allows us to actually write Musical Instrument Digital Interface files (MIDIs!).<br><br>
 +
 
 +
However, to write these files we actually need to parse the data that was previously validated: it’s still in Excel format! Thankfully, this is the jazz Python-xlrd excels at. Released under a BSD-style license, this library allows us to load into memory lists containing every reading by the TECAN apparatus we started with.<br><br>
 +
 
 +
However, to actually explore this data we employ Panda and its powerful dataframes to reduce the reading granularity, down from some 1/40’000 to 1/10.<br><br>
 +
 
 +
This allows us to group together similar readings, and run the MIDI part on a much leaner musical set: once the data is ready, each value is mapped to one of 10 chords which is then written end file (future versions will allow the user to choose the chords, either ad libitum or from different musical theory constructs).</p>
 +
 
 +
<a name="Rendering"></a>
 +
<h2 style="font-size: 25px; margin-left: 13.5vw; padding: 1.5vw;">5. Rendering</h2>
 +
 
 +
<p style=" font-size: 18px; margin-left: 15vw; margin-right: 15vw;">
 +
MIDI files, by their own, have no sound. While this may sound false, as most users have had the opportunity to play one in their favorite software, what actually happened is this: the software picked from a default soundbank the instruments samples to really play the MIDI file out, and then returned that processed output to the user.<br><br>
 +
 
 +
In order to achieve sound, and not a representation of it, the rendering section takes care of the grand finale!<br>
 +
Through FluidSynth, which is released under the GNU Lesser General Public License v2.1, a wav file is generated. Sound, at last!<br><br>
 +
 
 +
However, wav files are heavy: while they are a lossless representation of the sound played by the virtual instrument, for many users a very good lossy compression, such as MP3, will be enough.<br>
 +
The Lame encoder , licensed under GNU Lesser General Public License v2.1, does exactly this, providing a near-true experience thanks to the GPSYCHO psycho-acoutisc and noise model. Furthermore, it is probably the most actively, if not the only, developed MP3 encoder.<br><br>
 +
 
 +
All that is left is for you to enjoy!
 
</p>
 
</p>
<ul>
 
<li><a href="https://2016.igem.org/Team:BostonU_HW">2016 BostonU HW</a></li>
 
<li><a href="https://2016.igem.org/Team:Valencia_UPV">2016 Valencia UPV</a></li>
 
<li><a href="https://2014.igem.org/Team:Heidelberg/Software">2014 Heidelberg</a></li>
 
<li><a href="https://2014.igem.org/Team:Aachen/Project/Measurement_Device#Software">2014 Aachen</a></li>
 
</ul>
 
  
 +
 +
 +
<div class="piedino">
 +
<div class="dito">
 +
  <div class="unghia"> <h2 style=" color:white;"> Team Unifi</h2> </div> 
 
</div>
 
</div>
  
 +
<div class="dito">
 +
  <div class="unghia"> <h3 style=" color:white;"> unifi.igem@gmail.com </a> </div> 
 +
</div>
 +
 +
<div class="dito">
 +
  <div class="unghia">
 +
<a href="https://www.facebook.com/igem.unifi2017/">
 +
        <img src="https://static.igem.org/mediawiki/2017/d/d2/UNIFI_FACEW.png" style="width:65px;height:65px;border:0; margin: 0px 10px 0px 0px;"> </a>
 +
 +
  <a href="https://2017.igem.org/Main_Page">
 +
        <img src="https://static.igem.org/mediawiki/2017/2/23/UNIFI_igem_logo_bianco.png" style="width:75px;height:75px;border:0; margin:5px;"> </a>
 +
 +
<a href="https://twitter.com/Unifi_iGem2017">
 +
        <img src="https://static.igem.org/mediawiki/2017/d/de/UNIFI_TW.png" style="width:85px;height:85px;border:0; margin:10px 0px 0px 10px;"> </a>
 +
 +
 +
</div> 
 +
</div> </div>
 +
 +
</body>
 
</html>
 
</html>

Latest revision as of 00:29, 2 November 2017

Our software

1. Introduction

Bachteria isn’t a single piece of code, but an entire ensemble working together to bring light to the hidden music in bioluminescence.

Keeping in line with the ensemble analogy, these are its sections:
1. Reception
2. Validation
3. Elaboration
4. Rendering

For each section of this ensemble, a chapter describes the instruments involved.

2. Reception

After bioluminescence measures are taken through a TECAN Infinite Pro 200 apparatus, an XLS file is generated.

As the ensemble resides within the Google Cloud theatre, it is necessary to convey the output to the system proper: without yielding an inch on security, we found web interfaces to be an extremely more convenient option for the general user than SSH-based transfers, especially in light of the open nature of this project.

Therefore, two instruments are brought in to feed every other section: nginx (1.10.3) and PHP (7.0). Due to the extremely lightweight nature of this task, no PHP framework was employed to accomplish this step.

<

3. Validation

Once the input has reached the system, an entire section makes sure every part keeps the rhythm: it is accomplished once more through PHP, more specifically through PHPExcel, a library licensed under LGPL.
While more recent libraries were available, such as PHPSpreadsheet, they broke compatibility with previous Office Excel versions as to ensure a higher code quality, and many are far from being as stable or complete.

4. Elaboration

Now that we’ve made sure every instrument is in tune, it is time to rehearse!

This is the Python (3.5.3) section, with Python-midi playing as the first cello: released under the MIT license, it allows us to actually write Musical Instrument Digital Interface files (MIDIs!).

However, to write these files we actually need to parse the data that was previously validated: it’s still in Excel format! Thankfully, this is the jazz Python-xlrd excels at. Released under a BSD-style license, this library allows us to load into memory lists containing every reading by the TECAN apparatus we started with.

However, to actually explore this data we employ Panda and its powerful dataframes to reduce the reading granularity, down from some 1/40’000 to 1/10.

This allows us to group together similar readings, and run the MIDI part on a much leaner musical set: once the data is ready, each value is mapped to one of 10 chords which is then written end file (future versions will allow the user to choose the chords, either ad libitum or from different musical theory constructs).

5. Rendering

MIDI files, by their own, have no sound. While this may sound false, as most users have had the opportunity to play one in their favorite software, what actually happened is this: the software picked from a default soundbank the instruments samples to really play the MIDI file out, and then returned that processed output to the user.

In order to achieve sound, and not a representation of it, the rendering section takes care of the grand finale!
Through FluidSynth, which is released under the GNU Lesser General Public License v2.1, a wav file is generated. Sound, at last!

However, wav files are heavy: while they are a lossless representation of the sound played by the virtual instrument, for many users a very good lossy compression, such as MP3, will be enough.
The Lame encoder , licensed under GNU Lesser General Public License v2.1, does exactly this, providing a near-true experience thanks to the GPSYCHO psycho-acoutisc and noise model. Furthermore, it is probably the most actively, if not the only, developed MP3 encoder.

All that is left is for you to enjoy!

Team Unifi

unifi.igem@gmail.com