<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Colabrativ, Inc.</title>
	<atom:link href="http://www.colabrativ.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.colabrativ.com</link>
	<description>An Experiment Documentation and Electronic Notebook Provider</description>
	<lastBuildDate>Fri, 20 Apr 2012 00:09:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>iExperiment Version 1.1 is Now Available</title>
		<link>http://www.colabrativ.com/iexperiment-enterprise-electronic-notebook-version-1-1/</link>
		<comments>http://www.colabrativ.com/iexperiment-enterprise-electronic-notebook-version-1-1/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 20:43:17 +0000</pubDate>
		<dc:creator>Marc Whitlow</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[electronic notebook]]></category>
		<category><![CDATA[ELN]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[iExperiment]]></category>

		<guid isPermaLink="false">http://www.colabrativ.com/?p=430</guid>
		<description><![CDATA[We are pleased to announce the release of version 1.1 of iExperiment, Colabrativ&#8217;s enterprise electronic notebook. Changes to iExperiment an Enterprise Electronic Notebook The following changes have been made to version 1.1 of iExperiment Enterprise Electronic Notebook (ELN): The options &#8230; <a href="http://www.colabrativ.com/iexperiment-enterprise-electronic-notebook-version-1-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We are pleased to announce the release of version 1.1 of iExperiment, Colabrativ&#8217;s enterprise electronic notebook.  </p>
<h3 style="margin: 0">Changes to iExperiment an Enterprise Electronic Notebook</h3>
<p>The following changes have been made to version 1.1 of iExperiment Enterprise Electronic Notebook (ELN): </p>
<ul>
<li>The options for viewing records under the Select tab have been changed.  There are now four &ldquo;List of Records I Can&rdquo; options: read, edit, delete and download.<br />
<table style="border:0px solid white;">
<caption style="font-size: 11pt; padding: 4px;">Figure 1 <br />New View Record Options under Select Tab</caption>
<tr>
<td style="border:0px solid white; padding: 0px; test-align: center;"><img src="http://www.colabrativ.com/images/view_record_read_option_1.1.png" width="622" alt="Top of Select tab in iExperiment, Colabrativ's enterprise electronic notebook, showing the four new &ldquo;List of Records I Can&rdquo; options: read, edit, delete and download. The read option has been selected."/></td>
</tr>
<tr>
<td style="border:1px solid #606060; test-align: center; font-size: 10pt; color: #606060; line-height: 115%;">Top of Select tab in iExperiment showing the four new &ldquo;List of Records I Can&rdquo; options: read, edit, delete and download.  The read option has been selected.</td>
</tr>
</table style="border:0px solid white;">
  </li>
<li>Copy Record, Download Record Archive and Download PDF Archive buttons have been added to the tops of records.<br />
<table style="border:0px solid white;">
<caption style="font-size: 11pt; padding: 4px;">Figure 2 <br />New Copy Record, Download Record Archive and Download PDF Archive Buttons</caption>
<tr>
<td style="border:0px solid white; padding: 0px; test-align: center;"><img src="http://www.colabrativ.com/images/record_buttons_1.1.png" width="624" alt="Copy Record, Download Record Archive and Download PDF Archive buttons at the top of a record in iExperiment, Colabrativ's enterprise electronic notebook. "/></td>
</tr>
<tr>
<td style="border:1px solid #606060; test-align: center; font-size: 10pt; color: #606060; line-height: 115%;">New Copy Record, Download Record Archive and Download PDF Archive buttons at the top of a record in iExperiment.</td>
</tr>
</table>
</li>
<li>Sponsoring Institution options have been added to the experiment properties file.  The options are:
<ul style="list-style-type: circle;">
<li>admin:  Where the sponsored institution will be the primary administrator (institution key = 1).</li>
<li>author:  Where the institution of the author&#8217;s active research period will be used.</li>
<li>key=:  The sponsoring institution key will be identified by its database key; Example key=23</li>
</ul>
<p>      In this AMI the sponsoring institution option is &#8220;admin&#8221;.</li>
<li>Bug Fix: The material Oracle was failing to add materials that lacked a lot or serial number.</li>
<li>Bug Fix: Sections containing no text, such as a Summary section with only the material produced, were not being displayed from a record archive in a web browser, despite being contained in the record archive.</li>
</ul>
<h3 style="margin: 0">Evaluating iExperiment an Enterprise Electronic Notebook</h3>
<p>It&#8217;s easy for you to evaluate iExperiment through <a target="_blank" href="http://aws.amazon.com">Amazon Web Services</a>.  A <a target="_blank" href="http://www.colabrativ.com/free-61-day-trial-of-iexperiment-enterprise-electronic-notebook/">three-part tutorial</a> is available, under the Free Trial tab in the navigation bar above, to guide you through  i) the creation of an <a target="_blank" href="http://aws.amazon.com/ec2/">Amazon Elastic Compute Cloud</a> instance using the <a target="_blank" href="http://www.colabrativ.com/61-day-iexperiment-v1-1-evaluation-ami-4f5c070a/">iExperiment AMI</a>,  ii) configuration of iExperiment, and iii) adding your first researcher.</p>
<h3 style="margin: 0">Browser Compatibility of iExperiment</h3>
<p>iExperiment is built on <a target="_blank" href="http://code.google.com/webtoolkit/overview.html">Google Web Toolkit</a> and is not compatible with all browsers.  Currently, iExperiment works with <a target="_blank" href="http://www.mozilla.org/en-US/firefox/new/">Mozilla&#8217;s FireFox</a> and <a target="_blank" href="https://www.google.com/chrome">Google&#8217;s Chrome</a>, but does not work with Microsoft&#8217;s Internet Explorer or Apple&#8217;s Safari.  Both Safari and Internet Explorer suffer from the same two problems: </p>
<ol>
<li>The text editor fails to maintain preexisting text.</li>
<li>The file drag-and-drop capability introduces characters into the file names in Safari, and does not work at all in Internet Explorer.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.colabrativ.com/iexperiment-enterprise-electronic-notebook-version-1-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Structural Analysis of Supramolecular Assemblies by Hybrid Methods 2012 Meeting</title>
		<link>http://www.colabrativ.com/structural-analysis-of-supramolecular-assemblies-by-hybrid-methods-2012-meeting/</link>
		<comments>http://www.colabrativ.com/structural-analysis-of-supramolecular-assemblies-by-hybrid-methods-2012-meeting/#comments</comments>
		<pubDate>Fri, 30 Mar 2012 16:12:40 +0000</pubDate>
		<dc:creator>Marc Whitlow</dc:creator>
				<category><![CDATA[Science]]></category>
		<category><![CDATA[Biology]]></category>
		<category><![CDATA[hybrid methods]]></category>

		<guid isPermaLink="false">http://www.colabrativ.com/?p=396</guid>
		<description><![CDATA[My interest in protein-protein interactions and kinetics, and work on the solution structure of two biologics for a client brought me to the 6th International Conference on Structural Analysis of Supramolecular Assemblies by Hybrid Methods on March 14-18, 2012. There &#8230; <a href="http://www.colabrativ.com/structural-analysis-of-supramolecular-assemblies-by-hybrid-methods-2012-meeting/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>My interest in protein-protein interactions and kinetics, and work on the solution structure of two biologics for a client brought me to the <a target="_blank" href="http://www.hybridmethodsconference.com/index.html">6th International Conference on Structural Analysis of Supramolecular Assemblies by Hybrid Methods on March 14-18, 2012.</a>  There were many highlights at this meeting, a few of which I will share with you. </p>
<h3 style="margin: 0">Structural Studies of the 26S Proteasome</h3>
<p>Stefan Bohn, Max-Planck Institute of Biochemistry, Martinsried, Germany </p>
<div style="text-align: center; float: left; width:350px; ; line-height: 11pt;">
  <img width="320px" height="240" src="../images/26S_Proteasome_movie_snapshot.png" alt="Image from the Molecular Architecture of the 26S Proteaseome Holocomplex produced at Max Planck Institute of Biocehmistry, Department of Molecular Structural Biology, courtesy Stefan Bohn, Max-Planck Institute of Biochemistry, Martinsried, Germany, based on Lasker K, Förster F, Bohn S, Walzthoeni T, Villa E, Unverdorben P, Beck F, Aebersold R, Sali A, Baumeister W, Molecular architecture of the 26S proteasome holocomplex determined by an integrative approach. Proc. Natl. Acad. Sci. USA. 109:1380-7 (2012), Sakata E, Bohn S, Mihalache O, Kiss P, Beck F, Nagy I, Nickell S, Tanaka K, Saeki Y, Förster F, Baumeister W, Localization of the proteasomal ubiquitin receptors Rpn10 and Rpn13 by electron cryomicroscopy. Proc. Natl. Acad. Sci. USA. 109:1479-84 (2012) and Pathare GR, Nagy I, Bohn S, Unverdorben P, Hubert A, Körner R, Nickell S, Lasker K, Sali A, Tamura T, Nishioka T, Förster F, Baumeister W, Bracher A, The proteasomal subunit Rpn6 is a molecular clamp holding the core and regulatory subcomplexes together. Proc. Natl. Acad. Sci. USA. 109(1):149-54 (2012)." />&nbsp;<br />
  <span style="font-size: 11px; padding: 6px;">Image from the &#8220;Molecular Architecture of the 26S Proteaseome Holocomplex&#8221; produced at Max Planck Institute of Biocehmistry, Department of Molecular Structural Biology, showing the arrangement of the non-ATPase regulatory proteins. </span>
</div>
<p>Dr. Bohn presented their work on the the 26S Proteasome.  The proteasome degrades unfolded proteins that have been tagged with multiple ubiquitins.  The 45 nm long by 20 nm wide rod shaped proteasome is built up of approximately 35 protein subunits.  The poly-ubiquinated proteins are recognized by the Regulatory protein non-ATPase 10 (Rpn-10) near one end of the proteasome and peptides come out the other end.  Crystal structures of many of the proteasome proteins have been solved, including that of the proteolytic core particle (CP) which has 7-fold rotational symmetry.  The overall structure of the S. pombe at approximately 8.4 &#197; resolution was obtained using cryoelectron microscopy and single particle analysis.  A variety of techniques to apply constraints between the subunits of the proteasome, including different labeling techniques of different proteins during the Cryo-EM studies, residue-specific chemical crosslinking, and proteomics methods.  They created a beautiful video showing the showing the structure and how it is assembled, is coming soon to their <a target="_blank" href="http://www.biochem.mpg.de/baumeister/research/Content26S/index.html">Protease</a> website.</p>
<h3 style="margin: 0">Molecular Simulation Methods for Modeling Macromolecular Behavior in Vivo</h3>
<p>Adrian Elcock, University of Iowa</p>
<div style="text-align: center; float: right; width:230px; line-height: 11pt;">
  <img width="200px" height="200" src="../images/Cytoplasm_Picture_400.png" alt="Snapshot of a cytoplasm in a Brownian dynamics simulation courtesy Adrian Elcock, University of Iowa." />&nbsp;<br />
  <span style="font-size: 11px; padding: 6px;">Snapshot of a cytoplasm in a Brownian dynamics simulation courtesy Adrian Elcock, University of Iowa.</span>
</div>
<p>Dr. Elcock&#8217;s group has been working on methods to simulate large multi-component systems, up to and including whole cells.  Given the computational limitations, his group has reduced the number of parameters in these large systems by grouping residues into a single pseudo-atom or treating proteins as rigid bodies.  This has allowed them to take larger time steps, as large as 10-20 ns, a million times longer than what is normally used in a full-atom dynamic simulation.  Dr. Elcock has posted several of these simulations on YouTube including his presentation on <a target="_blank" href="http://www.youtube.com/watch?v=f8kLo-6uMcg">Biological Diffusion and Brownian Dynamics Brainstorm 2</a>, and <a target="_blank" href="http://www.youtube.com/watch?v=zme5VcSYpCg">Cytoplasm Full Energy Model</a>.</p>
<h3 style="margin: 0">Visualizing and Interacting with the Molecular Cell</h3>
<p>Art Olson, The Scripps Research Institute</p>
<div style="text-align: center; float: left; width:230px; ; line-height: 11pt;">
  <img width="224px" height="184" src="../images/PyAutodock_ScreenShot.png" alt="Screen shot of PyAutodock showing an inhibitor in green bound to a protein courtesy Arthur Olson, The Scripps Research Institute." />&nbsp;<br />
  <span style="font-size: 11px; padding: 6px;">ePMV PyAutodock screen shot courtesy Arthur Olson, The Scripps Research Institute.</span>
</div>
<p>Dr. Olson showed the state-of-the-art molecular and cellular graphics that his group has been developing, and demonstrated some of the tools he uses as a researcher and and a educator.  Embedded Python Molecular Viewer (<a target="_blank" href="http://epmv.scripps.edu/">ePMV</a>) is an open-source Python plug-in that runs molecular model tools inside of professional 3D animation applications.  He demonstrated many interactive interfaces, including the docking of an inhibitor into the active site of a protein using <a target="_blank" href="http://epmv.scripps.edu/extensions/pyautodock-cautodock">PyAutodock/cAudodock</a>.  As he pushed the inhibitor into the site, residues that were interacting with the inhibitor would move out of the way in real time.  You can view an ePMV-created video of the <a target="_blank" href="http://www.youtube.com/watch?v=hGTd82Tz5Lo">Fantastic Voyage Part 1: AutoFill on a synaptic vesicle with placeholder proteins and mock bilayer </a> on YouTube.com. </p>
<h3 style="margin: 0">Current State of High-Speed Atomic Force Microscopy: Its Advantages and Limitations</h3>
<p>Toshio Ando, Kanazawa University, Kanazawa, Japan<br />
High-speed Atomic Force Microscopy (AFM) is one of the few methods that allows us to see the dynamic motion of these supramolecular assemblies.  This technique is able to visualize the motions on the subsecond to sub-100 millisecond time scales.  Dr. Ando showed a high-speed AFM movie of myosin V &#8220;walking&#8221; on an actin filament, the stochastic nature of the myosin V step duration and the consistent forward progress of myosin V along the actin filament.  The myosin V/actin system is ideal for these studies because myosin orients itself in such a way that it can be easily seen using the top-down view of the high-speed AFM technique. Several of these movies can be obtained from <a target="_blank" href="http://www.nature.com/nature/journal/v468/n7320/full/nature09450.html#/supplementary-information">Kodera, N. <em>et al.</em> Video Imaging of walking myosin V by high-speed atomic force microscopy.  Nature 486, 72-76 [2010])</a> supplementary material.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.colabrativ.com/structural-analysis-of-supramolecular-assemblies-by-hybrid-methods-2012-meeting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iExperiment Version 1.0 is Now Available</title>
		<link>http://www.colabrativ.com/iexperiment-version-1-0-is-now-available/</link>
		<comments>http://www.colabrativ.com/iexperiment-version-1-0-is-now-available/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 05:16:04 +0000</pubDate>
		<dc:creator>Marc Whitlow</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[digital signature]]></category>
		<category><![CDATA[electronic notebook]]></category>
		<category><![CDATA[ELN]]></category>
		<category><![CDATA[iExperiment]]></category>
		<category><![CDATA[PDF]]></category>

		<guid isPermaLink="false">http://www.colabrativ.com/?p=341</guid>
		<description><![CDATA[We are pleased to announce the release of version 1.0 of iExperiment, Colabrativ&#8217;s enterprise electronic notebook. iExperiment is now capable of creating PDF versions of experiment records, in addition to structured archives containing an XML version of the record, along &#8230; <a href="http://www.colabrativ.com/iexperiment-version-1-0-is-now-available/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We are pleased to announce the release of version 1.0 of iExperiment, Colabrativ&#8217;s enterprise electronic notebook.  iExperiment is now capable of creating PDF versions of experiment records, in addition to structured archives containing an XML version of the record, along with all figures and attachments.  In addition, iExperiment now works with <a target="_blank" href="https://www.google.com/chrome">Google&#8217;s Chrome</a> browser, in addition to <a target="_blank" href="http://www.mozilla.org/en-US/firefox/new/">Mozilla&#8217;s FireFox</a>.</p>
<p>It&#8217;s easy for you to evaluate iExperiment through <a target="_blank" href="http://aws.amazon.com">Amazon Web Services</a>.  A <a target="_blank" href="http://www.colabrativ.com/free-61-day-trial-of-iexperiment-enterprise-electronic-notebook/">three-part tutorial</a> is available, under the Free Trial tab in the navigation bar above, to guide you through  i) the creation of an <a target="_blank" href="http://aws.amazon.com/ec2/">Amazon Elastic Compute Cloud</a> instance using the iExperiment AMI,  ii) configuration of iExperiment, and iii) adding your first researcher.</p>
<h3>Completed PDF Records Implemented in iExperiment</h3>
<p>iExperiment is now capable of generating an Adobe PDF document upon the completion of an experiment record.  On the first page of the PDF record there is a signature area where both the author of the record and a witness can sign; see figure below.  This is suitable for digital signatures, but may not be appropriate if you are still using hand-written signatures.  Fortunately, the PDF creation process can be modified to meet these needs. </p>
<table style="border:1px solid black;">
<caption style="font-size: 14pt; padding: 4px;">Figure:  Top of a Completed PDF Record</caption>
<tr>
<td style="border:1px solid black;"><img src="http://www.colabrativ.com/images/PDF_record_signed.png" width="600" alt="The top of a completed PDF record prepared by iExperiment, Colabrativ's enterprise electronic notebook.  The record has been signed by the author, but has not been witnessed yet."/></td>
</tr>
<tr>
<td style="border:1px solid black; test-align: center; font-size: 10pt; color: #333333; ">The top of a completed PDF record prepared by iExperiment, Colabrativ&#8217;s enterprise electronic notebook.  The record has been signed by the author, but has not been witnessed yet.</td>
</tr>
</table>
<p>The creation of the completed record PDF is controlled by an EXtensible Stylesheet Language transformation (XSLT) file that can be modifed to meet the specific needs of the research organization.  It is possible to change the XSLT file on the iExperiment server to: </p>
<ul>
<li>Add or remove signature lines. </li>
<li>Change the styling for the record, including the font and font size. </li>
<li>Add a watermark. </li>
<li>If the signatures need to be placed on each page, the footer could be changed to contain the signature lines.</li>
</ul>
<h3>Browser Compatibility of iExperiment</h3>
<p>iExperiment is built on <a target="_blank" href="http://code.google.com/webtoolkit/overview.html">Google Web Toolkit</a> and is not compatible with all browsers.  Currently, iExperiment works with <a target="_blank" href="http://www.mozilla.org/en-US/firefox/new/">Mozilla&#8217;s FireFox</a> and <a target="_blank" href="https://www.google.com/chrome">Google&#8217;s Chrome</a>, but does not work with Microsoft&#8217;s Internet Explorer or Apple&#8217;s Safari.  Both Safari and Internet Explorer suffer from the same two problems: </p>
<ol>
<li>The text editor fails to maintain preexisting text.</li>
<li>The file drag-and-drop capability introduces characters into the file names in Safari, and does not work at all in Internet Explorer.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.colabrativ.com/iexperiment-version-1-0-is-now-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Complexity of Biology in the Light of Stefano Rossetto&#8217;s Consolamini</title>
		<link>http://www.colabrativ.com/complexity-of-biology-in-the-light-of-stefano-rossettos-consolamini/</link>
		<comments>http://www.colabrativ.com/complexity-of-biology-in-the-light-of-stefano-rossettos-consolamini/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 03:49:53 +0000</pubDate>
		<dc:creator>Marc Whitlow</dc:creator>
				<category><![CDATA[Observations]]></category>
		<category><![CDATA[Biology]]></category>
		<category><![CDATA[Complexity]]></category>
		<category><![CDATA[Science]]></category>

		<guid isPermaLink="false">http://www.colabrativ.com/?p=324</guid>
		<description><![CDATA[On Friday night I had the pleasure of listening to the first modern performance of Stefano Rossetto&#8217;s Consolamini, consolamini popule meus, a Christmas motet in 50 parts, conducted by Davitt Moroney. The most striking part of this piece of music &#8230; <a href="http://www.colabrativ.com/complexity-of-biology-in-the-light-of-stefano-rossettos-consolamini/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>On Friday night I had the pleasure of listening to the first modern performance of Stefano Rossetto&#8217;s Consolamini, consolamini popule meus, a Christmas motet in 50 parts, conducted by Davitt Moroney. The most striking part of this piece of music is its complexity. With 50 voices it is virtually impossible to separate out any single phrase. Prior to the performance, Davitt Moroney had warned us that it was impossible to do separate out a single phrase, and at the same time assured us that every phrase was present. Yet we know that the composer arranged these voices to have a powerful effect on the audience. At times the only reminder of an individual voice was when a brief &#8220;s&#8221; made by an individual would rise above the massive harmony of this piece. To an untrained listener, such as myself, these brief indications of the presences of individuals appeared randomly during the performance. </p>
<p>The parallels to our understanding of biological processes are enlightening and therapeutic, and certainly not the intended message of the composer Stefano Rossetto. Biology is a complex process with many &#8220;voices&#8221; contributing to an observed behavior, such as disease progression. Modern biology has becoming exceedingly good at separating out the individual voices. But, just as the constructive and destructive harmonization of individual voices leads to an inspiring experience, a multitude of separate biological processes combine to create a limb bud or a disease condition. The challenge for us is to incorporate more of the complexity and dynamic behavior of biology into our thinking, models, diagnosis and treatments of disease.</p>
<p>If you have the opportunity to experience a live performance of a 40 to 50 voice Renaissance motet, I would highly recommend it. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.colabrativ.com/complexity-of-biology-in-the-light-of-stefano-rossettos-consolamini/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>File Drag and Drop onto a Google Web Toolkit Application</title>
		<link>http://www.colabrativ.com/file-drag-and-drop-onto-a-google-web-toolkit-application/</link>
		<comments>http://www.colabrativ.com/file-drag-and-drop-onto-a-google-web-toolkit-application/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 03:29:31 +0000</pubDate>
		<dc:creator>Marc Whitlow</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[drag & drop]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[iExperiment]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[XMLSttpRequest]]></category>

		<guid isPermaLink="false">http://www.colabrativ.com/?p=316</guid>
		<description><![CDATA[Users increasingly expect to be able to drag and drop objects in applications, including web applications. I would like to show you how we recently added the ability to drop files on to our enterprise electronic notebook iExperiment. iExperiment&#8217;s client &#8230; <a href="http://www.colabrativ.com/file-drag-and-drop-onto-a-google-web-toolkit-application/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Users increasingly expect to be able to drag and drop objects in applications, including web applications.  I would like to show you how we recently added the ability to drop files on to our enterprise electronic notebook iExperiment. iExperiment&#8217;s client side is built on Google Web Toolkit (GWT).  GWT currently does not support file drag and drop. </p>
<p>The work flow for file drag and drop is as follows: </p>
<ol>
<li>The user drops a file on to the client.</li>
<li>The client sends the drop element id and the file to the server in a multipart POST for storage and analysis.</li>
<li>The server sends back the POST response to the client with information on how to display the dropped file.</li>
<li>The client presents the uploaded file&#8217;s information to the user.</li>
</ol>
<p>We are using cutting edge HTML5 APIs in our drag and drop implementation.  Support of these APIs is not available in all browsers. </p>
<ul>
<li>This code works today in recent versions of Chrome and FireFox. </li>
<li>In Safari there is an issue with extra characters being added to the file names, which also complicates the file type assignment. </li>
<li>Internet Explorer does not currently support the required APIs. </li>
</ul>
<p>The file drop event is handled by adding an &#8220;ondrop&#8221; attribute to the HTML elements.  The &#8220;ondrop&#8221; attribute calls the droppedFile JavasScript routine that creates and sends an HTTP POST request to the server.  Note that the first argument in the droppedFile JavaScript call is an &#8220;element-id&#8221;, and the event is the second argument.  The drop element ID allows us to identify where the file was dropped on the page.</p>
<div class="codeBox">
  <strong>Example of &#8220;ondrop&#8221; Attribute in an HTML Table Element</strong></p>
<pre>&lt;table ondrop="event.stopPropagation();
               event.preventDefault();
               droppedFile('element-id', event);"&gt;</pre>
</div>
<p>The &#8220;ondrop&#8221; element is created by the static addOnDrop method in a client side class (DropFileConnector). </p>
<div class="codeBox">
  <strong>addOnDrop Method</strong></p>
<pre>/** Add an ondrop attribute to an element in the DOM, for example:
 * ondrop="event.stopPropagation(); droppedFile('element-id', event);"
 *
 * @param element DOM element
 * @param elementID Element Id to be sent to droppedFile routine.
 */
 public static void addOnDrop(Element element, String elementID) {
     element.setAttribute("ondrop",
         "event.stopPropagation(); droppedFile(\'" + elementID + "\', event);");
 }</pre>
</div>
<p>The droppedFile JavaScript routine creates a FormData element which is transferred to the server using a multipart HTTP POST request.  The first two items appended to the form are the drop element ID (dropElementID) and boundary that is used by the request onreadystatechange function.  Two appends are made to the form for each file that is uploaded; the file length (line 16), and the file itself (line 17) are appended to the form.  On lines 20-24 the information needed for the POST is created, and the upload handlers are attached to the request.  Note that by using a FormData element we are able to eliminate the deprecated FireFox specific methods <code>files[i].getAsBinary()</code>, and replace <code>request.sendAsBinary(postContent)</code> with request.send(formData).  These methods were used in our <a target="_blank" href=""http://www.colabrativ.com/drag-and-drop-onto-a-google-web-toolkit-application-utdated">original post</a> to added the files to the POST, and to send the POST, respectively. </p>
<p>The POST responses are handled by the request.onreadystatechange function on line 26-40, and are sent to the client through <code>window.top.dropFileListener.droppedFile method</code> (calls on lines 34 and 38.)  Initially when the read state is 1 (<code>readyState == 1</code>) the file name and the MIME boundary are sent to GWT client application on lines 28-35.  After succesful completion of the POST (<code>readyState == 4</code>), the POST response is forwarded to the GWT client application.</p>
<div class="codeBox">
  <strong>droppedFile JavaScript Routine</strong></p>
<pre>01  var boundary = null;
02
03  function droppedFile(dropElementID, event) {
04      if (window.File &amp;&amp; window.FileList &amp;&amp; window.top.dropFileListener) {
05          if (event.dataTransfer) {
06              url = secureURL + "upload";
07              boundary = "Colabrativ-" + Math.floor(999999999999999 * Math.random());
08
09              var formData = new FormData();
10              formData.append("drop-element-id", dropElementID);
11              formData.append("boundary", boundary);
12
13              var files = event.dataTransfer.files;
14
15              for (var i = 0; i < files.length; i++) {
16                  formData.append("file-length-" + i, files[i].size);
17                  formData.append("file-"        + i, files[i]);
18              }
19
20              var request = new XMLHttpRequest();
21              request.upload.onprogress = updateProgress;
22              request.upload.onload     = loaded;
23              request.upload.onerror    = loadError;
24              request.open("POST", url, true);
25
26              request.onreadystatechange = function() {
27                  if (this.readyState == 1) {
28                      var filesJSON = '"files":[';
29                      for (var i = 0; i < files.length; i++) {
30                          filesJSON = filesJSON + '"' + files[i].name + '"';
31                          if (i < files.length - 1) filesJSON = filesJSON + ', ';
32                      }
33                      filesJSON = filesJSON + ']'
34                      window.top.dropFileListener.droppedFile( '{' +
35                          '"requestBoundary": "' + boundary + '", ' + filesJSON + '}');
36                  }
37                  if (this.readyState == 4) {
38                     window.top.dropFileListener.droppedFile( request.responseText );
39                  }
40              }
41
42              request.send(formData);
43          }
44          else {
45              alert("Your browser does not support file drag and drop.  " +
46                    "We recommend that you upgrade your browser to one that supports HTML5, " +
47                    "such as Mozilla's FireFox or Google's Chrome.");
48          }
49      }
50      else {
51          alert("window.top.dropFileListener not found!");
52      }
53  }</pre>
</div>
<p>The DropFileConnector class connects the dropFileListener in the JavaScript to the GWT code.  The DropFileConnector class has a ClientSideDropFileSupport interface that defines the droppedFile method in the JavaScript.  The observer (theObserver) is a static ClientSideDropFileSupport incidence that connects to the JavaScript droppedFile method to ClientSideDropFile&#8217;s droppedFile method. </p>
<div class="codeBox">
  <strong>DropFileConnector class</strong></p>
<pre>package com.colabrativ.common.client; 

import com.google.gwt.dom.client.Element; 

public class DropFileConnector {
    /** Used to pass information to the GWT application. Register your implementations with
      *  {@link com.colabrativ.common.client.DropFileConnector#connect( ClientSideDropFileSupport)}
      */
    public interface ClientSideDropFileSupport {
        /** The page calls this method to send dropped file information to application
          *
          * @param json JSON string containing the file name information.
          */
        void droppedFile(String json);
    } 

    /** An observer of drop file events, supplied by the GWT application. */
    static private ClientSideDropFileSupport theObserver; 

    /**
      * Connect the GWT application to the drop file JavaScript. The observer is notified
      * whenever the user drops a file on the application area (id="app-area").
      *
      * @param observer
      */
     public static void connect( ClientSideDropFileSupport observer ) {
         theObserver = observer;
         connectToPanel();
     }

     // These methods are "glue" methods that let the simple JNDI call talk to the observer through its interface.
     @SuppressWarnings("all")
     private static void droppedFile(String s) { theObserver.droppedFile(s); }

     private static native void connectToPanel() /*-{
         var listener = new Object();
         listener.droppedFile = function(json) {
             json = unescape( json );
             @com.colabrativ.common.client.DropFileConnector::droppedFile( Ljava/lang/String;)( json );
         };

         $wnd.top.dropFileListener = listener;
     }-*/; 

     /**
       * Add an ondrop attribute to an element in the DOM, for example:
       * ondrop="event.stopPropagation(); droppedFile('element-id', event);"
       *
       * @param element DOM element
       * @param elementId Element Id to be sent to droppedFile routine.
       */
      public static void addOnDrop(Element element, String elementId) {
          element.setAttribute("ondrop",
              "event.stopPropagation(); droppedFile(\'" + elementId + "\', event);");
      }
} </pre>
</div>
<p>Finally, a <code>DropFileConnector.connect</code> call is made in a client class that handles the POST responses.  Our upload servlet adds either an OKAY or a FAIL to the POST response that the DropFileConnector handles.  In our implementation, the POST responses are encapsulated in JSON.  The upload progress monitoring is also handled by the DropFileConnector.  In our implementation, the MIME boundary is used as an Id for the upload, and the monitoring is managed by the singleton of the UploadManager class. </p>
<div class="codeBox">
  <strong>DropFileConnector Connection</strong></p>
<pre>DropFileConnector.connect(
    new DropFileConnector.ClientSideDropFileSupport() {
        public void droppedFile(String response) {
            if (response.startsWith("OKAY:")) {
                String json = response.substring( response.indexOf(": ") + 2); // Remove OKAY:
                determineWhatToDoWithResponse(json);
            }
            else if (response.startsWith("FAIL:")) {
                // Do Nothing?
            }
            else {
                JSONObject responseJSON = (JSONObject) JSONParser.parseStrict( response );
                JSONString boundaryJSON = (JSONString) responseJSON.get( UploadResponse.requestBoundary);

                if (boundaryJSON != null) {
                    String boundary = boundaryJSON.toString();
                    JSONArray filesJSON = (JSONArray) responseJSON.get( UploadResponse.files);

                    if (filesJSON != null) {
                        UploadManager.getInstance().addProgressDialog( boundary, filesJSON);
                    }
                    else {
                        UploadManager.getInstance().update( boundary, responseJSON);
                    }
                }
            }
        }
    }
); </pre>
</div>
<p>Several resources helped us create our file drag and drop; these included: </p>
<ol>
<li>W3C XMLHttpRequest Level 2 <a target="_blank" href="http://www.w3.org/TR/XMLHttpRequest2/">http://www.w3.org/TR/XMLHttpRequest2/</a></li>
<li>W3C File API <a target="_blank" href="http://www.w3.org/TR/file-upload/">http://www.w3.org/TR/file-upload/</a></li>
<li>Using FormData object in Mozilla&#8217;s Developers Network page on Using XMLHttpRequest at <a target="_blank" href="https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Using_FormData_objects">https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Using_FormData_objects</a></li>
<li>How to Use HTML5 File Drag &amp; Drop by Craig Buckler at <a target="_blank" href="http://www.sitepoint.com/html5-file-drag-and-drop/">http://www.sitepoint.com/html5-file-drag-and-drop/</a></li>
<li>XHR progress and rich file upload feedback by Austin King at <a target="_blank" href="http://hacks.mozilla.org/2009/06/xhr-progress-and-richer-file-uploading-feedback/">http://hacks.mozilla.org/2009/06/xhr-progress-and-richer-file-uploading-feedback/</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.colabrativ.com/file-drag-and-drop-onto-a-google-web-toolkit-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Public iExperiment Amazon Machine Image is Now Available</title>
		<link>http://www.colabrativ.com/public-iexperiment-amazon-machine-image-now-available/</link>
		<comments>http://www.colabrativ.com/public-iexperiment-amazon-machine-image-now-available/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 18:14:27 +0000</pubDate>
		<dc:creator>Marc Whitlow</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[Amazon Machine Image]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[Elastic Compute Cloud]]></category>
		<category><![CDATA[electronic notebook]]></category>
		<category><![CDATA[ELN]]></category>
		<category><![CDATA[iExperiment]]></category>

		<guid isPermaLink="false">http://www.colabrativ.com/?p=305</guid>
		<description><![CDATA[We are pleased to announce that we have made public an Amazon Machine Image (AMI) of our enterprise electronic notebook iExperiment. The creation of the iExperiment public AMI is based on two of our earlier posts Setup of Amazon’s Elastic &#8230; <a href="http://www.colabrativ.com/public-iexperiment-amazon-machine-image-now-available/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We are pleased to announce that we have made <strong>public</strong> an <a href="http://aws.amazon.com/amis" target="_blank">Amazon Machine Image</a> (AMI) of our enterprise electronic notebook iExperiment. The creation of the iExperiment public AMI is based on two of our earlier posts <a href="http://www.colabrativ.com/setup-of-amazons-elastic-compute-cloud-ec2-server-for-iexperiment/" target="_blank">Setup of Amazon’s Elastic Compute Cloud (EC2) Server for iExperiment</a> and <a href="http://www.colabrativ.com/setup-of-iexperiment-on-amazons-elastic-compute-cloud-ec2-server/" target="_blank">Setup of iExperiment on Amazon’s Elastic Compute Cloud (EC2) Server</a>. A <a href="http://www.colabrativ.com/free-61-day-trial-of-iexperiment-enterprise-electronic-notebook/" target="_blank">three-part tutorial</a> is available to guide you through the creation of an <a href="http://aws.amazon.com/ec2/" target="_blank">Amazon Elastic Compute Cloud</a> (EC2) instance from the iExperiment AMI, configuration of iExperiment, and adding your first researcher.</p>
<p><strong>iExperiment Public Machine Image on the Amazon Management Console</strong><br />
<img src="http://www.colabrativ.com/images/iExperiment_public_AMI.png" alt="Enterprise Electronic Notebook, iExperiment, Public Machine Image on the Amazon Web Services (AWS) Management Console - US West - Launch Instance Wizard - Community AMIs.  This image has been edited to fit in this post." width="600" /></p>
<h3>Why We Choose to Use Amazon Web Services</h3>
<ol>
<li><strong>Control of Experiment Information:</strong> A research organization&#8217;s experiment records are the foundation of its intellectual property, and, as such, must be stored in a way that allows the research organization to maintain control over these records. We feel that Software as a Service (SAAS) electronic notebook solutions do not offer the same level of control as having your experimental data on a server you control.</li>
<li><strong>Convenience of Cloud Computing:</strong> Using an Amazon Machine Image allows us to set up the iExperiment server for you. All you need to do is configure the instance and start the instance&#8217;s services. In addition, Amazon&#8217;s <a href="http://aws.amazon.com/ec2/" target="_blank">Elastic Compute Cloud (EC2)</a> is one of the lower cost cloud service providers.</li>
<li><strong>Support:</strong> Amazon has one of the largest cloud services user communities to draw upon to answer questions that you may have about running your EC2 instance. You can also always contact us at here at <a href="http://www.colabrativ.com/contact-colabrativ-inc/">colabrativ.com</a>.</li>
<li><strong>Server Security:</strong> Amazon facilities are <a href="http://sas70.com/sas70_overview.html" target="_blank">Statement on Auditing Standard No. 70 (SAS70)</a> compliant. <a href="http://aws.amazon.com/about-aws/whats-new/2009/11/11/aws-completes-sas70-type-ii-audit/" target="_blank">They completed the Type II audit in 2009</a>, so you know they are doing everything they can to keep your data secure.</li>
</ol>
<h3>Other iExperiment Hosting Options</h3>
<p>Amazon Web Services may not be the right solution for you for any number of reasons, including: AWS places the responsibility of the enterprise application setup and maintenance on the client&#8217;s administrator; or, you may not be comfortable with the security in a cloud computing environment. If this is the case, you can <a href="http://www.colabrativ.com/contact-colabrativ-inc/">contact us</a> and we can work with you to install our electronic notebook, iExperiment, either at your facility or at another full-service SAS70-compliant cloud service provider.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.colabrativ.com/public-iexperiment-amazon-machine-image-now-available/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Colabrativ Selects SAFE-BioPharma eToken for Internal Digital Signatures</title>
		<link>http://www.colabrativ.com/colabrativ-selects-safe-biopharma-etoken-for-digital-signatures/</link>
		<comments>http://www.colabrativ.com/colabrativ-selects-safe-biopharma-etoken-for-digital-signatures/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 23:07:20 +0000</pubDate>
		<dc:creator>Marc Whitlow</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[digital signature]]></category>
		<category><![CDATA[identity proofing]]></category>
		<category><![CDATA[SAFE-BioPharma]]></category>
		<category><![CDATA[trusted agent]]></category>
		<category><![CDATA[two factor authentication]]></category>

		<guid isPermaLink="false">http://www.colabrativ.com/?p=264</guid>
		<description><![CDATA[SAFE-BioPharma™ Association The SAFE-BioPharma Association is a non-profit association formed by a group of pharmaceutical companies, including AstraZeneca, Pfizer and Johnson&#38;Johnson, to establish a digital signature standard (SAFE-BioPharma digital signature) for the biopharmaceutical industry that would be accepted by federal &#8230; <a href="http://www.colabrativ.com/colabrativ-selects-safe-biopharma-etoken-for-digital-signatures/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>SAFE-BioPharma™ Association</h3>
<p>The <a target="_blank" href="http://www.safe-biopharma.org/">SAFE-BioPharma Association</a> is a non-profit association formed by a group of pharmaceutical companies, including <a target="_blank" href="http://www.astrazeneca.com/Home">AstraZeneca</a>, <a href="http://www.jnj.com/connect/">Pfizer</a> and <a target="_blank" href="http://www.pfizer.com/home/">Johnson&amp;Johnson</a>, to establish a digital signature standard (SAFE-BioPharma digital signature</a>) for the biopharmaceutical industry that would be accepted by federal agencies, such as the Food and Drug Administration.  The driving force behind the need for digital signatures is cost and time savings that digital records enable.  The acronym SAFE stands for Signatures and Authentication For Everyone.</p>
<h3>Selection of SAFE-BioPharma Digital Signatures</h3>
<p>Colabrativ, Inc. selected SAFE-BioPharma™ Digital Signatures for the following reasons.</p>
<ul>
<li>SAFE-BioPharma digital signatures are accepted by all of United States federal agencies (see <a target="_blank" href="http://www.safe-biopharma.org/crosscertification.htm">SAFE-BioPharma is Cross Certified with Federal Bridge Certificate Authority</a>), regulatory agencies in 27 European Union countries, and a majority of the pharmaceutical industry companies that utilize digital signatures.  They are 21 CFR Part 11 compliant.</li>
<li>SAFE-BioPharma offers both hardware and software based digital certificates.  We were particularly interested in a digital certificate that an individual has control of, i.e. a digital certificate token (<a target="_blank" href="http://www.safenet-inc.com/products/data-protection/two-factor-authentication/etoken-pro/">Aladdin eToken</a>). Many digital signature options are signature services, where an individual&#8217;s certificate is accessed through the internet. </li>
<li>There are three ways of identity proofing:  online, use of a Notary, and Trusted Agent model identity proofing.  We used both the online and a notary to establish the identities of our staff and a service provider.  We felt that it was important to have an independent person establish an individual&#8217;s identity, and therefore we did not establish a SAFE-BioPharma Trusted Agent within Colabrativ, Inc. </li>
<li>The SAFE-BioPharma™ Association has a large collection of information on digital signatures, and their use in their <a target="_blank" href="http://www.safe-biopharma.org/infocenter.htm">Info Center</a>.  In addition, members have access to the SAFE Implementation Toolkit that contains documents supporting the implementation of SAFE digital signatures. </li>
<li>Cost &dash; We found that <a target="_blank" href="http://www.safe-biopharma.org/membership.htm">SAFE-BioPharma membership</a> was one of the least expensive digital signature options.  The cost of a SAFE-BioPharma membership is as little as $50 per user per year.  Membership has a five person, three year minimum. </li>
<li>The SAFE-BioPharma digital identity service is managed by <a target="_blank" href="http://www.verizonbusiness.com/about/news/pr-25770-en-SAFE-BioPharma+Selects+Verizon+To+Manage+Digital+Identity+Services.xml">Verizon Communications Inc.</a> </li>
</ul>
<h3>Documents with Both Digital and Non-digital Signatures</h3>
<p>There are a lot of organizations that we deal with that are not accustomed to digital signatures, and do not understand how they work.  A digital signature is a wrapper around a document that both ensures that the document has not been changed since it was signed, and identifies the individual that signed the document in a verifiable way.  I actually like <a target="_blank" href="http://www.surety.com/">Surety&#8217;s</a> modern-day wax seal analogy.  A nobleman&#8217;s wax seal both identified the sender of the letter and ensured that the envelope containing the letter had not been open or tampered with. </p>
<p>If you are an organization that does not have digital signatures for your staff, and are working with an organization that does, then you should observe the following procedure when jointly signing a document:</p>
<ol>
<li>Printout the signature page and sign it.  <br/>You may need to find an acceptable solution to a situation in which you do not want to sign the document before the other party has signed it.  If you require this of an organization that would like a digitally signed document, you are doing them a disservice, because once you print out and scan the signature page, the digital signature can no longer be validated.</li>
<li>Compile the body of the document and scanned signature page into an electronic version. <br/>We use Adobe Acrobat X Pro to insert the scanned signature into a PDF document.  We typically create a Microsoft Word version of the document without the signature page, open it with Acrobat, and then use the Tools &#8211; Pages &#8211; More Insert Options &#8211; Insert from Clipboard function in Acrobat to add the scanned signature page to the bottom of the document. </li>
<li>Send the document to the other party for their digital signature. </li>
</ol>
<p>What you will get back is a document that has the benefits of a digital signature.  It cannot be changed without invalidating the digital signature.  If it has a SAFE-BioPharma digital signature on it, you will know that it is accepted by all of the federal agencies.</p>
<h3>Digital Signatures Display</h3>
<p>One final note &#8211; digital signatures are large (see below).  They are difficult to read if they are squeezed into a typically signature box.  This is not really an issue, since most programs that recognize and validate digital signatures allow you to examine the signature information.  If for nothing else but esthetics, it is worth considering enlarging the signature area for a document that will be digitally signed. </p>
<h4>Example of a Digital Signature</h4>
<p><img src="http://www.colabrativ.com/images/SAFE-Biopharma_Signature_Example.png" alt="Example of a digital signature, showing that digital signatures are significantly larger than hand signatures."/> </p>
<p>SAFE-BioPharma™ is a trademark of the SAFE-BioPharma Association.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.colabrativ.com/colabrativ-selects-safe-biopharma-etoken-for-digital-signatures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creation of Test Patients Table in Microsoft Excel</title>
		<link>http://www.colabrativ.com/creation-of-test-patients-table-in-microsoft-excel/</link>
		<comments>http://www.colabrativ.com/creation-of-test-patients-table-in-microsoft-excel/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 18:28:58 +0000</pubDate>
		<dc:creator>Marc Whitlow</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[patients]]></category>

		<guid isPermaLink="false">http://www.colabrativ.com/?p=260</guid>
		<description><![CDATA[We are helping Deb Zajchowski at The Clearity Foundation on their patient database. The Clearity Foundation is a non-profit organization dedicated to &#34;improving treatment options for ovarian cancer patients.&#34; To improve treatment they take a personalized medicine approach. They have &#8230; <a href="http://www.colabrativ.com/creation-of-test-patients-table-in-microsoft-excel/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We are helping Deb Zajchowski at <a target="_blank" href="http://www.clearityfoundation.org/default.aspx">The Clearity Foundation</a> on their patient database. The Clearity Foundation is a non-profit organization dedicated to &quot;improving treatment options for ovarian cancer patients.&quot; To improve treatment they take a personalized medicine approach.  They have a privacy-ensured database in which they collect information on the patient’s clinical history, including physician’s diagnosis, diagnostic procedures, treatments and the results from tumor molecular profiling analyses.  The database also records the drugs that are likely to have clinical benefit based on the profile of the patient’s cancer. </p>
<p>Our goal is to enhance the Clearity database ability to track the patient outcomes in a retrospective analysis.  The current database was developed by Michael L. Petka.  It works well for the profiling and reporting needs of the organization.  However, Mike is currently occupied with other aspects of database enhancement. </p>
<p>In order to ensure the privacy of the patient, we needed a test database that did not contain any actual patient information. In this blog I will describe how we created a test Patients table in Excel. </p>
<p>The Patients table was created by Michael L. Petka, and is made up of the following columns:</p>
<table>
<thead>
<caption><strong>Patients Table Columns</strong></caption>
<tr>
<th>Column Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PatientID</td>
<td>Patient Identification Key</td>
</tr>
<tr>
<td>PatientLastName</td>
<td>Last Name</td>
</tr>
<tr>
<td>PatientFirstName</td>
<td>First Name</td>
</tr>
<tr>
<td>PatientMiddleInitial</td>
<td>Middle Initial</td>
</tr>
<tr>
<td>PatAddress</td>
<td>Street Address</td>
</tr>
<tr>
<td>PatCity</td>
<td>City</td>
</tr>
<tr>
<td>PatState</td>
<td>State</td>
</tr>
<tr>
<td>PatZip</td>
<td>5-digit ZIP Code</td>
</tr>
<tr>
<td>SSN</td>
<td>Social Security Number</td>
</tr>
<tr>
<td>DOB</td>
<td>Date of Birth</td>
</tr>
<tr>
<td>Sex</td>
<td>Sex</td>
</tr>
<tr>
<td>PatientTelephoneNumber</td>
<td>Telephone Number</td>
</tr>
<tr>
<td>PatientEmail</td>
<td>Patient Email</td>
</tr>
</tbody>
</table>
<h3>Patient Identification Key</h3>
<p>The patient identification key (PatientID) is a sequential numbering of the patient rows.                </p>
<h3>Patient Name</h3>
<p>We were fortunate to find a table of 10,000 random names at <a target="_blank" href="http://www.opensourcecf.com/1/2009/05/10000-Random-Names-Database.cfm">The ColdFusion Open Source Software Blog.</a>  In addition to the columns we needed, this database has complete name strings, both first name first, and last name first. The first name, last name and middle initial columns were cut and pasted into our test Patients table in Excel. </p>
<h3>Patient Sex</h3>
<p>The sex of the random names was determined in Excel by comparing the first name of a random name with a list of girls&#8217; names from <a target="_blank" href="http://www.randomnames.com/allnames.asp?g=f">RandomNames.com</a>.  If the name matched, F (female) was assigned, otherwise M (male) was assigned, using the function below.</p>
<div class="codeBox">
<p><strong>Sex Determination Based on Name</strong></p>
<pre>=IF(EXACT(A5,LOOKUP(A5,I$2:I$895)),"F","M")</pre>
<p>where column A contains the random first name (above element A5 is being examined), and array I2 to I895 contains the girls&#8217; first names.</p>
</div>
<h3>Street Address</h3>
<p>We found 261 of the most popular neighborhood street names at <a target="_blank" href="http://www.livingplaces.com/streets/most-popular_street_names.html">Living Places</a>.  We generated random house numbers and random street names, then concatenated them together in Excel.</p>
<div class="codeBox">
<p><strong>Random House Number</strong></p>
<pre>=INT(11000*RAND())</pre>
<p><strong>Random Street Name</strong></p>
<pre>=INDIRECT("StreetNames!B"&amp;RANDBETWEEN(2,262))</pre>
<p>where array B2 to B262 in the StreetNames worksheet contains the most-popular neighborhood street names. </p>
<p><strong>Street Address Concatenation</strong></p>
<pre>=CONCATENATE(A5," ", B5)</pre>
<p>In the example above we are working on row 5, where column A contains the random house number and column B contains the random street name.</p>
</div>
<h3>City, State and ZIP code</h3>
<p>A table containing city, state and ZIP codes of 80,810 places was downloaded from <a target="_blank" href="http://federalgovernmentzipcodes.us/">A Free Zip Code Database</a> as the Excel file <a href="http://federalgovernmentzipcodes.us/free-zipcode-database.xlsx">free-zipcode-database.xlsx</a>.  This file has more than just city, state and ZIP codes.  It also includes type (STANDARD, PO BOX ONLY, MILITARY, etc.), county name, latitude, longitude, population, land area and water area.  In Excel, the table was sorted on type, for we only wanted to use types STANDARD and PO BOX ONLY.  After removing everything else, the list was reduced from 80,180 to 73,756 entries.  We then generated 10,000 random ZIP keys to match up with our 10,000 random names in Excel using RANDBETWEEN(2,73757).  All of this was stored in the City worksheet in Excel.  In the Patients table (worksheet), the city, state and ZIP codes were added using arandom ZIP code key.  The city name was capitalized using the PROPER function; see below. </p>
<div class="codeBox">
<p><strong>City, State and ZIP Code</strong></p>
<pre>=PROPER(INDIRECT("City!D"&amp;City!M5))

=INDIRECT("City!E"&amp;City!M5))

=INDIRECT("City!A"&amp;City!M5))</pre>
<p>Where &#8220;City!D&#8221;, &#8220;City!E&#8221; and &#8220;City!A&#8221; are the city, state and ZIP code columns, respectively, in the City worksheet. </p>
</div>
<h3>Social Security Number</h3>
<p>A random social security number (SSN) was generated for each fictitious patient by concatenating three RANDBETWEEN operations together; see below.</p>
<div class="codeBox">
<p><strong>Social Security Number</strong></p>
<pre>=CONCATENATE(RANDBETWEEN(100,999),"-",RANDBETWEEN(10,99),"-",MID((RANDBETWEEN(10000,19999)),2,4))</pre>
</div>
<h3>Date of Birth</h3>
<p>We wanted a normal distribution of birthdays, so we randomly seeded the NORMINV function with random value between 0 and 1.  We used a mean of 21,000 (June 29, 1957) and a standard deviation of 5,000 days (13.7 years) in the NORMINV function to get an acceptable distribution; see below.</p>
<div class="codeBox">
<p><strong>Normally Distributed Date of Birth</strong></p>
<pre>=NORMINV(RAND(),21000,5000)</pre>
</div>
<h3>Telephone Number</h3>
<p>Random telephone numbers were generated in the same manner as the social security numbers, by concatenation of three RANDBETWEEN operations; see below.</p>
<div class="codeBox">
<p><strong>Telephone Number</strong></p>
<pre>=CONCATENATE(INT(RANDBETWEEN(100,999)),"-",INT(RANDBETWEEN(100,999)),"-",MID((RANDBETWEEN(10000,19999)),2,4))</pre>
</div>
<h3>Email Address</h3>
<p>Fictitious patient email addresses were constructed from each fictitious patient&#8217;s first name, last name and the domain name &#8220;@example.com&#8221;; see below.</p>
<div class="codeBox">
<p><strong>Email Address</strong></p>
<pre>=CONCATENATE(C5,".",B5,"@example.com")</pre>
<p>where columns B and C contain the last and first names, respectively.  In the example above we are working on row 5.</p>
</div>
<h3>Stability of the Excel Random Cells</h3>
<p>We found that the randomly created cells in Excel were not stable.  If such a cell were edited, previous random values would be regenerated, effecting all the cell that depended on that random number.  Therefore, the final step was to write out the Patients worksheet as a comma-separated values (CSV) file, and then to read the CSV back into Excel.  In this way we were able to create a stable test Patients table in Excel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.colabrativ.com/creation-of-test-patients-table-in-microsoft-excel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Setup of iExperiment on Amazon&#8217;s Elastic Compute Cloud (EC2) Server</title>
		<link>http://www.colabrativ.com/setup-of-iexperiment-on-amazons-elastic-compute-cloud-ec2-server/</link>
		<comments>http://www.colabrativ.com/setup-of-iexperiment-on-amazons-elastic-compute-cloud-ec2-server/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 05:27:56 +0000</pubDate>
		<dc:creator>Marc Whitlow</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[Elastic Compute Cloud]]></category>
		<category><![CDATA[iExperiment]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://www.colabrativ.com/?p=246</guid>
		<description><![CDATA[A research organization&#8217;s experiment records are the foundation of its intellectual property, and, as such, must be stored in a way that allows the research organization to maintain control over these records. Enterprise electronic notebooks, such as our iExperiment, store &#8230; <a href="http://www.colabrativ.com/setup-of-iexperiment-on-amazons-elastic-compute-cloud-ec2-server/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A research organization&#8217;s experiment records are the foundation of its intellectual property, and, as such, must be stored in a way that allows the research organization to maintain control over these records.  Enterprise electronic notebooks, such as our iExperiment, store their experiment records on a server.  Many organizations, including Colabrativ, Inc., are using cloud computing to lower the cost of a server and IT costs in general.  Amazon&#8217;s <a target="_blank" href="http://aws.amazon.com/ec2/">Elastic Compute Cloud (EC2)</a> is one of the lower cost cloud service providers.  Amazon is <a target="_blank" href="http://sas70.com/sas70_overview.html">Statement on Auditing Standards No. 70 (SAS70)</a> compliant.  They completed the Type II audit in 2009 (see <a target="_blank" href="http://aws.amazon.com/about-aws/whats-new/2009/11/11/aws-completes-sas70-type-ii-audit/">AWS Completes SAS70 Type II Audit</a> announcement).  Thus, one can be comfortable that they are doing everything they can to keep one&#8217;s data secure.  Amazon Web Services places the responsibility of the enterprise application setup and maintenance on the client&#8217;s administrator.  Other full-service SAS70-compliant cloud service providers will happily take on these responsibilities for you, for a fee. </p>
<p>In my previous post, I described the <a traget="_blank" href="./setup-of-amazons-elastic-compute-cloud-ec2-server-for-iexperiment">Setup of Amazon&#8217;s Elastic Compute Cloud (EC2) Server for iExperiment</a>, our enterprise electronic notebook application.  That post covered the following topics:</p>
<ul>
<li><a href="./setup-of-amazons-elastic-compute-cloud-ec2-server-for-iexperiment#requirements">iExperiment Server Requirements</a></li>
<li><a href="./setup-of-amazons-elastic-compute-cloud-ec2-server-for-iexperiment#ec2-instance-setup">Setup of Amazon Web Services EC2 Instance</a></li>
<li><a href="./setup-of-amazons-elastic-compute-cloud-ec2-server-for-iexperiment#attaching-ebs">Creating and Attaching an Elastic Block Storage Volume (optional)</a></li>
<li><a href="./setup-of-amazons-elastic-compute-cloud-ec2-server-for-iexperiment#dns-server">Assigning URL of the iExperiment EC2 Server on the DNS Server</a></li>
</ul>
<p>You may want to take a quick look at <a href="./setup-of-amazons-elastic-compute-cloud-ec2-server-for-iexperiment#requirements">iExperiment Server Requirements</a>. </p>
<p>In this post we will go over the setup and configuration of the EC2 server and the installation and setup of iExperiment on it.  Topics in this post include: </p>
<ul>
<li><a href="#update-server">Updating the EC2 Server</a></li>
<li><a href="#mounting-ebs">Mounting Elastic Block Storage Volume (optional)</a></li>
<li><a href="#installing-MySQL">Installing MySQL</a></li>
<li><a href="#database-setup">iExperiment Database Setup</a></li>
<li><a href="#SSL-certificate">SSL Certificate Creation</a></li>
<li><a href="#apache-tomcat">Set Up of Apache and Tomcat</a></li>
<li><a href="#index-html">Adding index.html</a></li>
<li><a href="#iExperiment-applications">iExperiment Applications Installation</a></li>
<li><a href="#removing-8443">Removing Port 8443 from HTTPS Requests</a></li>
</ul>
<p>The majority of these tasks are preformed on the iExperiment EC2.  Tests of the server&#8217;s operation were made using Firefox 5.  We use <a target="_blank" href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">PuTTY</a> to log onto our EC2 server (Instructions can be found in an Amazon appendix on <a target="_blank" href="http://docs.amazonwebservices.com/AmazonEC2/gsg/2007-01-19/putty.html">PuTTY</a>. </p>
<div class="codeBox">
<h3 id="update-server">Updating the EC2 Server using Amazon&#8217;s Yum repository</h3>
<p>The update of the EC2 server from Amazon&#8217;s <a target="_blank" href="http://yum.baseurl.org/">Yum</a> repository takes only a single command &#8220;sudo yum update&#8221;.  It produces a large output.  During the update you will be asked two yes-no question.  You should answer &#8220;yes&#8221; to both of these questions.  Below I have edited the session to only include the yum command and text around the two questions.</p>
<pre>> sudo yum update
...
===============================================================================
Install       1 Package(s)
Upgrade      47 Package(s)

Total download size: 113 M
Is this ok [y/N]: Y
...
Importing GPG key 0x21C0F39F "Amazon Linux AMI (Beta)
<linux-security@amazon.com>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-amazon-beta
Is this ok [y/N]: Y
</pre>
</div>
<p><!-- codeBox  --></p>
<div class="codeBox">
<h3 id="mounting-ebs">Mounting Elastic Block Storage Volume (optional)</h3>
<p>In order to format the elastic block storage (EBS) volume, we need to install XFS filesystem utilities (xfsprogs) from the Amazon Yum repository.</p>
<p>The /proc/partitions file contains a list of the volumes associated with the EC2 instance.  The /dev/xvda1 device is the system volume.  The other volume is the unformatted EBS volume we associated with the EC2 instance.  The EBS volume has two related device names; the system refers to the device as dev/xvd[f-p], but mkds.xfs takes /dev/sd[f-p].  In the case below, the device names are /dev/xsdf and /dev/sdf, respectively. </p>
<ol>
<li>Format the EBS volume using mkfs.xfs and the device name (/dev/sdf)</li>
<li>Create a mount point for the volume (/ebs1).</li>
<li>Add the mount point to the /etc/fstab file.</li>
<li>Mount the volume. </li>
</ol>
<pre>> sudo yum install xfsprogs
Is this ok [y/N]: y

> more /proc/partitions
major  minor  #blocks  name
 202        1    8388608 xvda1
 202       80   10485760 xvdf

> sudo mkfs.xfs /dev/sdf
meta-data=/dev/sdf               isize=256    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0sudo vi /etc/fstab

> sudo mkdir /ebs1

> sudo cp -p /etc/fstab /etc/fstab.orig
> sudo vi /etc/fstab
> more /etc/fstab
#
LABEL=/     /           ext4    defaults,noatime  1   1
tmpfs       /dev/shm    tmpfs   defaults        0   0
devpts      /dev/pts    devpts  gid=5,mode=620  0   0
sysfs       /sys        sysfs   defaults        0   0
proc        /proc       proc    defaults        0   0
/dev/xvdf   /ebs1       xfs     noatime         0   0

> sudo mount /ebs1
</pre>
<p>After mounting the EBS volume on /ebs1, we create and link both the iExperiment and MySQL directories.  We add the mounts to the /etc/fstab file, then mount the directories.</p>
<pre>> sudo mkdir /ebs1/etc
> sudo mkdir /ebs1/etc/mysql
> sudo mkdir /ebs1/lib
> sudo mkdir /ebs1/lib/mysql
> sudo mkdir /ebs1/log
> sudo mkdir /ebs1/log/mysql
> sudo mkdir /ebs1/log/iexperiment
> sudo mkdir /ebs1/local/iexperiment

> sudo mkdir /etc/mysql
> sudo mkdir /var/lib/mysql
> sudo mkdir /var/log/mysql
> sudo mkdir /var/log/iexperiment
> sudo mkdir /var/local/iexperiment

> sudo vi /etc/fstab
> more /etc/fstab
#
LABEL=/     /           ext4    defaults,noatime  1   1
tmpfs       /dev/shm    tmpfs   defaults        0   0
devpts      /dev/pts    devpts  gid=5,mode=620  0   0
sysfs       /sys        sysfs   defaults        0   0
proc        /proc       proc    defaults        0   0
/dev/xvdf   /ebs1       xfs     noatime         0   0
/ebs1/etc/mysql          /etc/mysql              none    bind
/ebs1/lib/mysql          /var/lib/mysql          none    bind
/ebs1/log/mysql          /var/log/mysql          none    bind
/ebs1/log/iexperiment    /var/log/iexperiment    none    bind
/ebs1/local/iexperiment  /var/local/iexperiment  none    bind

> sudo mount /etc/mysql
> sudo mount /var/lib/mysql
> sudo mount /var/log/mysql
> sudo mount /var/log/iexperiment
> sudo mount /var/local/iexperiment
</pre>
<p>If MySQL has already been installed and setup, then instead of making the /mysql directories, we would move (mv) the existing MySQL directories to the EBS volume.  We continue from the snippet above remaking mysql directories that are used as mount bind points. </p>
<pre>> sudo mkdir /ebs1/etc
> sudo mkdir /ebs1/lib
> sudo mkdir /ebs1/log
> sudo mv /etc/mysql     /vol/etc/
> sudo mv /var/lib/mysql /vol/lib/
> sudo mv /var/log/mysql /vol/log/

> sudo mkdir /etc/mysql
...
</pre>
</div>
<div class="codeBox">
<h3 id="installing-MySQL">Installing MySQL</h3>
<p>MySQL and MySQL Server (mysqld) are available from the Amazon Yum repository.  Like update snippets above, the snippet below has been edited to show only what is necessary.</p>
<pre>> sudo yum install mysql
Is this ok [y/N]: y

> sudo yum install mysql-server
Is this ok [y/N]: y
</pre>
<p>After installing MySQL and MySQL Server, we start the MySQL service. </p>
<pre>
> sudo service mysqld start
Initializing MySQL database:  Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h ip-10-176-31-62 password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &#038;

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

[  OK  ]
Starting mysqld:                                           [  OK  ]
</pre>
<p>Finally the mysql_secure_installation script is run.</p>
<pre>
> /usr/bin/mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!
    </pre>
</div>
<p><!-- codeBox  --></p>
<div class="codeBox">
<h3 id="database-setup">Set Up the iExperiment Database</h3>
<ol>
<li>Log in as root to the MySQl database.  We recommend that you not put the root password in the mysql command, so that it does not end up in .bash_history.</li>
<li>Create a user &lsquo;iexperiment&lsquo;@&lsquo;localhost&lsquo;. </li>
<li>Grant the iexperiment user appropriate privileges.</li>
</ol>
<pre>> mysql -h localhost -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.1.52 Source distribution

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create user 'iexperiment'@'localhost' identified by 'iexperimentpassword';
Query OK, 0 rows affected (0.00 sec)

mysql> grant usage on *.* to 'iexperiment'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on *.* to 'iexperiment'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye
    </pre>
<ol start="4">
<li>Create the /var/log/iexperiment, /var/local/iexperiment and /var/local/iexperiment/ddl directories.</li>
<li>Upload the iExperiment SQL files to the /var/local/iexperiment/ddl directory using an FTP application that supports SSL, such at <a target="_blank" href="http://filezilla-project.org/">FileZilla</a>. </li>
</ol>
<pre>> sudo mkdir /var/log/iexperiment
> sudo mkdir /var/local/iexperiment
> sudo mkdir /var/local/iexperiment/ddl
    </pre>
<ol start="6">
<li>Log in to MySQL as iexperiment.</li>
<li>Create a database named iexperiment. </li>
<li>Load the database by sourcing the initial_setup.sql file. </li>
</ol>
<pre>
> pushd /var/local/iexperiment/ddl
/var/local/iexperiment/ddl ~
> ls -lt
total 136
-rw-rw-r-- 1 root root   917 Jul 17 21:22 initial_setup.sql
-rw-rw-r-- 1 root root  3465 Jul 17 21:08 insert_permissions_START-UP.sql
-rw-rw-r-- 1 root root   944 Jul 17 21:08 insert_admin_START-UP.sql
-rw-rw-r-- 1 root root 22612 Jul 14 17:33 create_tables.sql
-rw-rw-r-- 1 root root 73893 Jul 14 17:09 insert_record_categories.sql
-rw-rw-r-- 1 root root 18355 Jul 14 17:09 create_constraints.sql
-rw-rw-r-- 1 root root   932 Jul 14 17:08 insert_admin.sql

> mysql -h localhost -u iexperiment -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.1.52 Source distribution

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show grants;
+-----------------------------------------------------------------------------------------------------------------------------+
| Grants for iexperiment@localhost                                                                                            |
+-----------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'iexperiment'@'localhost' IDENTIFIED BY PASSWORD '*BAA33824FACE624B5B0AAC8A604733A5648A7A6B' |
+-----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> create database iexperiment;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| iexperiment        |
| mysql              |
+--------------------+
3 rows in set (0.00 sec)

mysql> use iexperiment;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> source initial_setup.sql;

Query OK, 1 row affected (0.00 sec)
.
.
.
Query OK, 1 row affected (0.00 sec)

mysql> show tables;
+------------------------+
| Tables_in_iexperiment  |
+------------------------+
| admin_group_member     |
| ...
| version                |
+------------------------+
55 rows in set (0.00 sec)

mysql> select * from version;
+-------------+----------------------------------+
| version_num | comment                          |
+-------------+----------------------------------+
|           6 | May 25, 2010 - Switch to Records |
+-------------+----------------------------------+
1 row in set (0.00 sec)

mysql> exit
Bye
  </pre>
</div>
<p><!-- codeBox  --></p>
<div class="codeBox">
<h3 id="SSL-certificate">Create SSL Certificate</h3>
<p>iExperiment runs under the secure HTTPS protocol; thus, we need a Secure Sockets Layer (SSL) certificate.  If you already have a wildcard certificate for your domain, then you can skip this step. </p>
<p>Note, that if you use a self-signing certificate, then your iExperiment users will be notified of this.  In FireFox they will see a &#8220;This Connection is Untrusted&#8221; page, in which they will need to open the &#8220;I understand the Risks&#8221; link and click on the &#8220;Add Exception&#8230;&#8221; button. </p>
<ol>
<li>Make a directory for the SSL certificate.</li>
<li>Generate the self-signing SSL certificate.  In the snippet below, the certificate&#8217;s file name, temp.iexperiment.bin, reflects the URL we are using.</li>
</ol>
<pre>
> sudo mkdir /usr/etc/cert
> cd /usr/etc/cert

> sudo keytool -genkey -alias tomcat -keypass sslcert1 -keystore temp.iexperiment.bin -storepass sslcert1
What is your first and last name?
[Unknown]:  Marc Whitlow
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:  Colabrativ, Inc.
What is the name of your City or Locality?
[Unknown]:  El Sobrante
What is the name of your State or Province?
[Unknown]:  California
What is the two-letter country code for this unit?
[Unknown]:  US
Is CN=Marc Whitlow, OU=Unknown, O="Colabrativ, Inc.", L=El Sobrante, ST=California, C=US correct?
[no]:  y

> ls -l
total 4
-rw-r--r-- 1 root root 1292 Jul 18 02:30 temp.iexperiment.bin
    </pre>
<p>Write down the certificate &#8220;keypass&#8221; as you will need it to set up Tomcat.</p>
</div>
<p><!-- codeBox  --></p>
<div class="codeBox">
<h3 id="apache-tomcat">Setup Apache &amp; Tomcat</h3>
<ol>
<li>Install <a target="_blank" href="http://httpd.apache.org/docs/2.0/programs/httpd.html">Apache Hypertext Transfer Protocol Server</a> (httpd), <a target="_blank" href="http://tomcat.apache.org/tomcat-6.0-doc/index.html">Apache Tomcat 6</a> (tomcat6), Tomcat&#8217;s web application service (tomcat6-webapps) and <a target="_blank" href="http://www.modssl.org/">Apache Interface to OpenSSL</a> (mod_ssl) from Amazon&#8217;s Yum repository.</li>
<li>Start the Apache (httpd) and Tomcat (tomcat6) services. </li>
</ol>
<pre>> sudo yum install httpd
Is this ok [y/N]: y

> sudo yum install tomcat6
Is this ok [y/N]: y

> sudo yum install tomcat6-webapps
Is this ok [y/N]: y

> sudo yum install mod_ssl
Is this ok [y/N]: y

> sudo service httpd start
Starting httpd:                                            [  OK  ]
> sudo service tomcat6 start
Starting tomcat6:                                          [  OK  ]
    </pre>
<p>Now we can check to see if the “Amazon Linux AMI Test Page” loads in a Browser using:</p>
<ul>
<li>EC2 Instance&#8217;s public URL that is found in the EC2 Instance information on the AWS Management Console, e.g. http://ec2-204-236-137-138.us-west-1.compute.amazonaws.com</li>
<li>The URL that was assigned to the Elastic IP address associated with the EC2 Instance in the Domain Name Server (DNS), e.g. http://temp.iexperiment.net/</li>
</ul>
<p>Next, we will configure Tomcat to support applications and services under the secure https protocol on port 8443.  We do this by editing the server.xml file in /etc/tomcat.</p>
<pre>
> cd /etc/tomcat6
> sudo cp -p server.xml server.xml.orig
> sudo vi server.xml
> diff server.xml.orig server.xml
83,88c83,92
<     <!--
<     <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
<                maxThreads="150" scheme="https" secure="true"
<                clientAuth="false" sslProtocol="TLS" />
<     -->
<
---
>
>     <Connector port="8443"
>                protocol="HTTP/1.1"
>                SSLEnabled="true"
>                maxThreads="150"
>                scheme="https" secure="true"
>                clientAuth="false" sslProtocol="TLS"
>                keystoreFile="/usr/etc/cert/temp.iexperiment.bin"
>                keystorePass="sslcert1" />

> sudo service tomcat6 restart
Stopping tomcat6:                                          [  OK  ]
Starting tomcat6:                                          [  OK  ]
    </pre>
<p>We should now beable to see the sample web applications supplied with the tomcat6-webapps Yum distribution found in /var/lib/tomcat6/webapps/sample, using the following URLs: </p>
<ul>
<li>&#8220;EC2 Public URL&#8221;:8080/sample e.g. http://ec2-204-236-137-138.us-west-1.compute.amazonaws.com:8080/sample </li>
<li>http://&#8221;iExperiment Domain&#8221;:8080/sample, e.g. http://temp.iexperiment.net:8080/sample</li>
<li>https://&#8221;iExperiment Domain&#8221;:8443/sample, e.g. https://temp.iexperiment.net:8443/sample</li>
</ul>
</div>
<p><!-- codeBox  --></p>
<div class="codeBox">
<h3 id="index-html">Adding index.html</h3>
<p>Upload the iExperiment index.html page and any images associated with the page to the /var/www/html directory.  You can either overwrite the existing index.html page or rename it.
</p></div>
<p><!-- codeBox  --></p>
<div class="codeBox">
<h3 id="iExperiment-applications">iExperiment Applications Installation</h3>
<p>iExperiment has three applications: Admin, Record and ResetPassword.</p>
<ol>
<li>Upload the iExperiment applications .war files (admin.war, record.war and resetPassword.war) to the /var/lib/tomcat6/webapps/ directory in the EC2 server. </li>
<li>Stop the Tomcat service.</li>
<li>Create directories for the attachments and the Lucene search engine index.</li>
<li>For each of the iExperiment applications.
<ol>
<li>Create a directory for the application in /var/lib/tomcat6/webapps/ </li>
<li>Change the group to tomcat.</li>
<p>            li>Unzip the contents of the war file into the newly created directory.</li>
<li>Upload and replace the &#8220;application&#8221;.html file with deployment specific version. </li>
<li>Add deployment specific images to the images directory.</li>
<li>Upload and replace existing iexperiment.properties, dbpool.properties and log4j.properties with files specific for this deployment.</li>
</ol>
</li>
<li>Start the Tomcat service.</li>
</ol>
<pre>> sudo service tomcat6 stop
Stopping tomcat6:                                          [  OK  ]

> sudo mkdir /var/local/iexperiment/attachments
> sudo mkdir /var/local/iexperiment/lucene
> sudo chown -R tomcat:tomcat /var/local/iexperiment/*

> cd /var/lib/tomcat6/webapps/
> ls -lt
total 12
drwxrwxr-x 5 root tomcat 4096 Jul 14 14:53 sample
drwxrwxr-x 5 root tomcat 4096 Jul 14 14:53 examples
drwxrwxr-x 3 root tomcat 4096 Jul 14 14:53 ROOT

> sudo mkdir record
> sudo mkdir admin
> sudo mkdir resetPassword
> sudo chgrp tomcat *

# Begein of admin application configuration.
> pushd admin
> sudo unzip ../admin.war

# After uploading Admin.html
> sudo chown -R root:root *.html

# After uploading deployment specific images to the images diectory.
> pushd images
> sudo chown -R root:root *
> popd

# After uploading the deployment specific properties files
# to the WEB-INF/classes directory
> pushd WEB-INF/classes/
> sudo chown -R root:root *.properties
> ls -lt
total 28
-rw-rw-r-- 1 root root 1287 Jul 14 18:33 log4j.properties
-rw-rw-r-- 1 root root 2020 Jul 14 18:33 iexperiment.properties
-rw-rw-r-- 1 root root 1514 Jul 14 18:33 dbpool.properties
drwxr-xr-x 3 root root 4096 Jul 14 17:49 net
drwxr-xr-x 3 root root 4096 Jul 14 17:49 org
drwxr-xr-x 4 root root 4096 Jul 14 17:49 com
-rw-r--r-- 1 root root 1370 May  3 19:05 mail.properties

# End of admin application configuration.
# Repeat for the record and resetPassword applications. 

> sudo service tomcat6 start
Starting tomcat6:                                          [  OK  ]
    </pre>
</div>
<p><!-- codeBox  --></p>
<div class="codeBox">
<h3 id="removing-8443">Removing Port 8443 from HTTPS Requests</h3>
<p>The final task in setting up the iExperiment Server is to remove the port number from the secure https requests.  We do this by relay the port 443 TCP connections to port 8443 using iptables in the <a target="_blank" href="http://www.netfilter.org/">Netfilter package</a> that already installed on the EC2 instance. </p>
<ol>
<li>Using iptables redirect the incoming port 443 request to port 8443.</li>
<li>Using iptables redirect the output from the incoming port 443 request to port 8443.</li>
<li>We can see these rules in the &#8220;nat&#8221; table using the command &#8220;sudo iptables -t nat -L&#8221;.</li>
<li>Save the iptable in /etc/iptables.conf, and change ownership to root.</li>
<li>Finally, add &#8220;/sbin/iptables-restore &lt; /etc/iptables.conf&#8221; to the bottom to /etc/rc.local file.</li>
</ol>
<pre>> sudo iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
> sudo iptables -t nat -I OUTPUT -p tcp --dport 443 -j REDIRECT --to-ports 8443

> sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere            tcp dpt:https redir ports 8443

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere            tcp dpt:https redir ports 8443

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

> sudo iptables-save > iptables.conf
> more iptables.conf
# Generated by iptables-save v1.4.7 on Thu Sep  8 03:32:23 2011
*nat
&#58;PREROUTING ACCEPT [5:300]
:OUTPUT ACCEPT [50:3801]
&#58;POSTROUTING ACCEPT [50:3801]
-A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8443
-A OUTPUT -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8443
COMMIT
# Completed on Thu Sep  8 03:32:23 2011

> sudo cp -p iptables.conf /etc/.
> sudo chown -R root:root /etc/iptables.conf
> sudo ls -l /etc/iptables.conf
-rw-rw-r-- 1 root root 332 Sep  8 03:32 /etc/iptables.conf

> sudo vi /etc/rc.local
> more /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
/sbin/iptables-restore &lt; /etc/iptables.conf
    </pre>
</div>
<p><!-- codeBox  --></p>
<h3>Closing Remarks</h3>
<p>iExperiment run on a typical AWS Apache Tomcat deployment. </p>
<h3>Resources</h3>
<ol>
<li>&ldquo;Configuring MySQL to use the EBS volume&rdquo; section of Eric Hammond&#8217;s article on <a target="_blank" href="http://aws.amazon.com/articles/1663?_encoding=UTF8&amp;jiveRedirect=1">Running MySQL on Amazon EC2 with EBS (Elastic Block Store)</a>.</li>
<li><a target="_blank" href="http://www.puschitz.com/InstallingTomcat.html">Installing Apache Tomcat on Linux</a> by Werner Puschitz.</li>
<li><a target="_blank" href="http://www.cyberciti.biz/faq/how-do-i-save-iptables-rules-or-settings/">How Do I Save Iptables Rules or Settings?</a> by Vivek Gite. </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.colabrativ.com/setup-of-iexperiment-on-amazons-elastic-compute-cloud-ec2-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setup of Amazon&#8217;s Elastic Compute Cloud (EC2) Server for iExperiment</title>
		<link>http://www.colabrativ.com/setup-of-amazons-elastic-compute-cloud-ec2-server-for-iexperiment/</link>
		<comments>http://www.colabrativ.com/setup-of-amazons-elastic-compute-cloud-ec2-server-for-iexperiment/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 17:37:23 +0000</pubDate>
		<dc:creator>Marc Whitlow</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[Elastic Compute Cloud]]></category>
		<category><![CDATA[electronic notebook]]></category>
		<category><![CDATA[ELN]]></category>
		<category><![CDATA[iExperiment]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://www.colabrativ.com/?p=226</guid>
		<description><![CDATA[A research organization&#8217;s experiment records are the foundation of its intellectual property, and, as such, must be stored in a way that allows the research organization to maintain control over these records. Enterprise electronic notebooks, such as our iExperiment, store &#8230; <a href="http://www.colabrativ.com/setup-of-amazons-elastic-compute-cloud-ec2-server-for-iexperiment/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A research organization&#8217;s experiment records are the foundation of its intellectual property, and, as such, must be stored in a way that allows the research organization to maintain control over these records.  Enterprise electronic notebooks, such as our iExperiment, store their experiment records on a server.  Many organizations, including Colabrativ, Inc., are using cloud computing to lower the cost of a server and IT costs in general.  Amazon&#8217;s <a target="_blank" href="http://aws.amazon.com/ec2/">Elastic Compute Cloud (EC2)</a> is one of the lower cost cloud service providers.  Amazon is <a target="_blank" href="http://sas70.com/sas70_overview.html">Statement on Auditing Standards No. 7 (SAS70)</a> compliant.  <a target="_blank" href="http://aws.amazon.com/about-aws/whats-new/2009/11/11/aws-completes-sas70-type-ii-audit/">They completed the Type II audit in 2009</a>, so you know they are doing everything they can to keep our data secure.  Amazon Web Services places the responsibility of the enterprise application setup and maintenance on the client&#8217;s administrator.  Other full-service SAS70-complaint cloud service providers will happily take on these responsibilities for you, for a fee. </p>
<p>In this post and in the following post, I will show you how we setup our enterprise electronic notebook application, iExperiment, on an Amazon EC2 server.  This first post covers the launch of the Amazon EC2 server and attachment of <a target="_blank" href="http://aws.amazon.com/ebs/">Elastic Block Storage</a> volume to the server.  The cloud equivalent of purchasing a server and disk, plugging it in, and connecting it to the network.  Experienced Amazon EC2 administrators may want to take a quick look at <a href="#requirements">iExperiment Server Requirements</a> and then move on to the second post on the setup and configuring of an EC2 server for iExperiment. </p>
<ul>
<li><a href="#requirements">iExperiment Server Requirements</a></li>
<li><a href="#ec2-instance-setup">Setup of Amazon Web Services EC2 Instance</a></li>
<li><a href="#attaching-ebs">Creating and Attaching an Elastic Block Storage Volume (optional)</a></li>
<li><a href="#dns-server">Assigning URL of the iExperiment EC2 Server on the DNS Server</a></li>
</ul>
<p>In the second post we will go over the setup and configuration of the EC2 server and the installation and setup of iExperiment on it.  Topic in the post include: </p>
<ul>
<li>Updating the Server</li>
<li>Installing MySQL</li>
<li>iExperiment Database Setup</li>
<li>Mounting Elastic Block Storage Volume (optional)</li>
<li>SSL Certificate Creation</li>
<li>Setup Apache &amp; Tomcat</li>
<li>Adding index.html</li>
<li>iExperiment Applications Installation</li>
</ul>
<h3 id="requirements">iExperiment Server Requirements</h3>
<p>The requirements of our enterprise electronic notebook application, iExperiment, are: </p>
<ol>
<li>Linux hosting web environment:  We normally use Apache and Tomcat.</li>
<li>MySQL database.</li>
<li>Mail server:  By default iExperiment uses the iExperiment.net mail server.</li>
</ol>
<p>In addition to these requirements, we recommend that you have the following before setting up iExperiment.</p>
<ol>
<li>A subdomain name under your domain name for iExperiment, for example iexperiment.example.org. </li>
<li>An administrator mail address on your mail server, e.g. admin@example.org.</li>
</ol>
<h3 id="ec2-instance-setup">Setup of Amazon Web Services EC2 Instance</h3>
<p>If you are not familiar with Amazon Web Services, we recommend that you read the <a target="_blank" href="http://docs.amazonwebservices.com/AWSEC2/latest/GettingStartedGuide/">Amazon Elastic Compute Cloud Getting Started Guide</a>.  There you can find instructions on how to sign up for Amazon EC2, which tell you to &#8220;Go to <a target="_blank" href="http://aws.amazon.com/ec2">http://aws.amazon.com/ec2</a>, click on the <strong>Sign Up for Amazon EC2</strong>, and follow the on-screen instructions.&#8221; </p>
<p>After signing on in the <a target="_blank" href="http://aws.amazon.com/console/">Amazon Management Console</a>, and selecting a region, the following tasks are performed. </p>
<ol>
<li>
<h4>Select an Amazon Region for the iExperiment Server</h4>
<p>Select a <strong>Region</strong> from the region pull-down menu at the top of the Navigation panel.  We are in Northern California, so we normally select the <span style="color:#004B91">US West (N. California)</span> region.
  </li>
<li>
<h4>Create Security Group</h4>
<p>Open the <strong>Security Groups</strong> panel by clicking on its link under <span style="color:gray">NETWORK &amp; SECURITY</span> in the Navigation panel. </p>
<ol>
<li>Click on the &#8220;Create Security Group&#8221; button at the top of the Security Group panel.<br />
         This will bring up the &#8220;Create Security Group&#8221; popup.
       </li>
<li>In the &#8220;Create Security Group&#8221; popup, fill in the following information:<br />
<table>
<tr>
<td>Name:</td>
<td>iExperiment</td>
</tr>
<tr>
<td>Description:</td>
<td>iExperiment open ports: 22 (SSH), 80 and 8080 (HTTP), and 443 and 8443 (HTTPS)</td>
</tr>
<tr>
<td>VPC:</td>
<td>No VPC</td>
</tr>
</table>
<p>         Then click on the &#8220;<span style="color:#004B91">Yes, Create</span>&#8221; button.
        </li>
<li>Click on the iExperiment security group, and click on the &#8220;Inbound&#8221; tab.</li>
<li>In the &#8220;Inbound&#8221; tab add the following rules:
<ol>
<li>From the &#8220;Create a new rule&#8221; pull-down menu, select &#8220;SSH&#8221;,<br />
                then click on the &#8220;Add Rule&#8221; button.</li>
<li>From the &#8220;Create a new rule&#8221; pull-down menu, select &#8220;HTTP&#8221;,<br />
                then click on the &#8220;Add Rule&#8221; button.</li>
<li>From the &#8220;Create a new rule&#8221; pull-down menu, select &#8220;HTTPS&#8221;,<br />
                then click on the &#8220;Add Rule&#8221; button.</li>
<li>From the &#8220;Create a new rule&#8221; pull-down menu, select &#8220;Custom TCP rule&#8221;,<br />
                enter the &#8220;port range&#8221; of 8080,<br />
                then click on the &#8220;Add Rule&#8221; button.</li>
<li>From the &#8220;Create a new rule&#8221; pull-down menu, select &#8220;Custom TCP rule&#8221;,<br />
                enter the &#8220;port range&#8221; of 8443,<br />
                then click on the &#8220;Add Rule&#8221; button.<br />
                <br/>The resulting security table contains the following rules: <br/><br />
                <img src="http://www.colabrativ.com/images/iExperiment_EC2_security_group.png" alt="The enterprise iExperiment electronic notebook Amazon EC2 security group." />
            </li>
<li>After adding all of the Rules, click on the &#8220;Apply Rule Changes&#8221; button at the bottom of the Inbound* tab.</li>
</ol>
</li>
</ol>
<p>&nbsp;</p>
</li>
<li>
<h4>Create Key Pair</h4>
<p>Open the <strong>Key Pairs</strong> panel by click on its link under <span style="color:gray">NETWORK &amp; SECURITY</span> in the Navigation panel. </p>
<ol>
<li>Click on the &#8220;Create Key Pair&#8221; button at the top of the Key Pairs panel.<br />
          This will bring up the &#8220;Create Key Pair&#8221; popup.
      </li>
<li>Supply a &#8220;Key Pair Name&#8221;, then click on the &#8220;<span style="color:#004B91">Create</span>&#8221; button.<br />
          Amazon will create the key pair and download the file to you.<br />
          Save the .pem file somewhere accessible to you.
      </li>
</ol>
<p>&nbsp;</p>
</li>
<li>
<h4>Launch EC2 Instance</h4>
<p>Open the <strong>Instances</strong> panel by clicking on its link under <span style="color:gray">INSTANCES</span> in the Navigation panel. </p>
<ol>
<li>Click on the &#8220;Launch Instance&#8221; button at the top of the My Instances panel.<br />
           This will bring up the &#8220;Request Instances Wizard&#8221; popup. </li>
<li>Click the &#8220;Select&#8221; button to the right of the &#8220;Basic 32-bit Amazon Linux AMI 2011.02.1 Beta&#8221; under the &#8220;Quick Start&#8221; tab in the Request Instances Wizard.</li>
<li>Fill in the Instance Details:<br />
<table>
<caption>Instance Details</caption>
<tr>
<td>Number of Instances:</td>
<td>1</td>
</tr>
<tr>
<td>Availability Zone:</td>
<td>us-west-1a</td>
</tr>
<tr>
<td>Instance Type:</td>
<td>Small (m1.small, 1.7 GB)</td>
</tr>
</table>
<p>           Then click on the &#8220;<span style="color:#004B91">Continue</span>&#8221; button at the bottom of the popup.
       </li>
<li>We normally change nothing in the &#8220;<span style="color:#004B91">Advanced Instance Options</span>&#8220;.<br />
           Click on the &#8220;<span style="color:#004B91">Continue</span>&#8221; button at the bottom of the popup. </li>
<li>If you have multiple EC2 instances, you may want to add Tags to the iExperiment instance.<br />
           Click on the &#8220;<span style="color:#004B91">Continue</span>&#8221; button at the bottom of the popup. </li>
<li>Choose the &#8220;Choose from your existing Key Pairs&#8221; option, then select the key pair for iExperiment from a &#8220;Your existing Key Pair&#8221; pull-down menu.<br />
           Click on the &#8220;<span style="color:#004B91">Continue</span>&#8221; button at the bottom of the popup. </li>
<li>Choose the iExperiment security group using the &#8220;Choose one or more of your existing Security Groups&#8221; option from list of security groups, then<br />
           click on the &#8220;<span style="color:#004B91">Continue</span>&#8221; button at the bottom of the popup. </li>
<li>Review the configuration of your EC2 Instance request, then<br />
           click on the &#8220;<span style="color:#004B91">Launch</span>&#8221; button at the bottom of the &#8220;Request Instances Wizard&#8221; popup.<br />
           <img width="580px" src="http://www.colabrativ.com/images/Amazon_EC2_Instance_Review.png" alt="Review section Amazon EC2 Request Instances Wizard popup for a server capable of running Colabrativ's enterprise electronic notebook, iExpertiment." />
        </li>
</ol>
<p>It&#8217;s worth noting the id, Availability Zone, and Public DNS of the EC2 instance you created by clicking on the instance in the &#8220;My Instances&#8221; panel.
  </li>
<li>
<h4>Create an Elastic IP</h4>
<p>Amazon&#8217;s <a target="_blank" href="http://aws.amazon.com/articles/1346">Elastic IP Addresses</a> are static IP addresses that you can associate with an Amazon EC2 server.  Open the Addresses panel by clicking on the <strong>Elastic IPs</strong> link under <span style="color:gray">NETWORK &amp; SECURITY</span> in the Navigation panel. </p>
<ol>
<li>Click on the &#8220;Allocate New Address&#8221; button at the top of the &#8220;Addresses&#8221; panel.<br />
          This will bring up the &#8220;Allocate New Address&#8221; popup.<br />
          Click on the &#8220;<span style="color:#004B91">Yes, Allocate</span>&#8221; button in the popup.<br />
          This will create a new address.
      </li>
<li>Click on the new Elastic IP address and select Associate Address.<br />
          This will bring up the &#8220;Associate Address&#8221; popup.<br />
          Select the iExperiment EC2 Instance from the &#8220;Instance&#8221; pull-down list and<br />
          click on the &#8220;<span style="color:#004B91">Yes, Associate</span>&#8221; button in the popup.
      </li>
</ol>
<p>The eleastic IP address will be needed when setting up the Domain Name Server, below, so make a note of it.
  </li>
</ol>
<h3 id="attaching-ebs">Creating and Attaching an Elastic Block Storage Volume (optional)</h3>
<p>We highly recommend that you place your experiment records created in iExperiment on an EC2 server in an <a target="_blank" href="http://aws.amazon.com/ebs/">Elastic Block Storage (EBS)</a> volume.  EBS isolates your data from the server failures and its scalable.  An existing volume can be copied to a large volume as your iExperiment records increase.  From the Amazon Management Console open the EBS Volumes panel by clicking on the <strong>Volumes</strong> link under <span style="color:gray">ELASTIC BLOCK STORE</span> in the Navigation panel. </p>
<ol>
<li>Click on the &#8220;Create Volume&#8221; button at the top of the &#8220;EBS Volumes&#8221; panel.<br />
      This will bring up the &#8220;Create Volume&#8221; popup.
  </li>
<li>In the &#8220;Create Volume&#8221; popup enter a volume <strong>Size</strong>, and <strong>Availability Zone</strong>.<br />
      The volume <strong>Size</strong> you choose will primarily depend on the size of the figures and attachment the researchers using iExperiment plan to associate with their experiment records.  10 GiB is a good starting size.  The <strong>Availability Zone</strong> must be the same as the iExperiment instance.<br />
      Click on &#8220;<span style="color:#004B91">Yes, Create</span>&#8221; button in the popup.
  </li>
<li>Click on the EBS volume you just created and select &#8220;Attach Volume&#8221;.<br />
      This will bring up the &#8220;Attach Volume&#8221; popup with <strong>Volume</strong> already filled in.<br />
      Select the iExperiment EC2 instance, shown by id, from the <strong>Instances</strong> pull-down menu.<br />
      Click on the &#8220;<span style="color:#004B91">Yes, Attach</span>&#8221; button in the popup to attach the EBS volume to the iExperiment instance.
  </li>
</ol>
<h3 id="dns-server">Assigning URL of the iExperiment EC2 Server on the DNS Server</h3>
<p>Here we will use the domain name temp.iExperiment.net, but you will be using a sub-domain of your domain such as iexperiment.example.com.  We are using Kattare Internet Services for our DNS server.  There we associate the AWS Elastic IP address with both the sub-domain and its secure variant in the iExperiment Zone File:</p>
<table>
<tr>
<td>temp</td>
<td>IN</td>
<td>A</td>
<td>50.18.109.21</td>
</tr>
<tr>
<td>www.temp</td>
<td>IN</td>
<td>A</td>
<td>50.18.109.21</td>
</tr>
<tr>
<td>securetemp</td>
<td>IN</td>
<td>A</td>
<td>50.18.109.21</td>
</tr>
<tr>
<td>www.securetemp</td>
<td>IN</td>
<td>A</td>
<td>50.18.109.21</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.colabrativ.com/setup-of-amazons-elastic-compute-cloud-ec2-server-for-iexperiment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

