<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>ChronoZoom Wiki Rss Feed</title><link>http://chronozoom.codeplex.com/</link><description>ChronoZoom Wiki Rss Description</description><item><title>Updated Wiki: Home</title><link>https://chronozoom.codeplex.com/wikipage?version=35</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;span style="font-size:x-large"&gt;See &lt;a href="https://github.com/alterm4nn/ChronoZoom"&gt;
ChronoZoom on Github&lt;/a&gt; for source code and&amp;nbsp;bugs, and &lt;a href="https://trello.com/chronozoom"&gt;
ChronoZoom on Trello&lt;/a&gt; for feature planning. &lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Welcome to ChronoZoom &lt;br&gt;
&lt;/strong&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley, University of Washington and Moscow State
 University.&lt;/p&gt;
&lt;p&gt;Please be advised that this project is no longer active on CodePlex.&lt;br&gt;
ChronoZoom has been moved to Github: &lt;a href="https://github.com/alterm4nn/ChronoZoom"&gt;
https://github.com/alterm4nn/ChronoZoom&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>Pax_Equus</author><pubDate>Wed, 24 Apr 2013 00:12:00 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130424121200A</guid></item><item><title>Updated Wiki: How to be a Developer on ChronoZoom</title><link>https://chronozoom.codeplex.com/wikipage?title=How to be a Developer on ChronoZoom&amp;version=3</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;ChronoZoom is an open source project. Our team welcomes you support to make ChronoZoom a better, more exciting product.&lt;/p&gt;
&lt;p&gt;Please be advised that this project is no longer active on CodePlex.&lt;br&gt;
ChronoZoom has been moved to Github: &lt;a href="https://github.com/alterm4nn/ChronoZoom"&gt;
https://github.com/alterm4nn/ChronoZoom&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can go to Github and contribute, we look forward to seeing you!&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>Pax_Equus</author><pubDate>Wed, 24 Apr 2013 00:03:32 GMT</pubDate><guid isPermaLink="false">Updated Wiki: How to be a Developer on ChronoZoom 20130424120332A</guid></item><item><title>Updated Wiki: Home</title><link>https://chronozoom.codeplex.com/wikipage?version=34</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;span style="font-size:x-large"&gt;See &lt;a href="https://github.com/alterm4nn/ChronoZoom"&gt;
ChronoZoom on Github&lt;/a&gt; for source code and&amp;nbsp;bugs, and &lt;a href="https://trello.com/chronozoom"&gt;
ChronoZoom on Trello&lt;/a&gt; for feature planning. &lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Please be advised that this project is no longer active on CodePlex.&lt;br&gt;
ChronoZoom has been moved to Github: &lt;a href="https://github.com/alterm4nn/ChronoZoom"&gt;
https://github.com/alterm4nn/ChronoZoom&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>Pax_Equus</author><pubDate>Wed, 24 Apr 2013 00:00:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130424120001A</guid></item><item><title>Updated Wiki: Documentation</title><link>https://chronozoom.codeplex.com/documentation?version=29</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Welcome to ChronoZoom &lt;br&gt;
&lt;/strong&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley, University of Washington and Moscow State
 University.&lt;/p&gt;
&lt;p&gt;Please be advised that this project is no longer active on CodePlex.&lt;br&gt;
ChronoZoom has been moved to Github: &lt;a href="https://github.com/alterm4nn/ChronoZoom"&gt;
https://github.com/alterm4nn/ChronoZoom&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>Pax_Equus</author><pubDate>Tue, 23 Apr 2013 23:50:35 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20130423115035P</guid></item><item><title>Updated Wiki: Home</title><link>https://chronozoom.codeplex.com/wikipage?version=33</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;span style="font-size:x-large"&gt;See &lt;a href="https://github.com/alterm4nn/ChronoZoom"&gt;
ChronoZoom on Github&lt;/a&gt; for new development and &lt;a href="https://trello.com/chronozoom"&gt;
ChronoZoom on Trello&lt;/a&gt; for our plans for the future. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Project Overview&lt;/strong&gt;&lt;br&gt;
ChronoZoom is an intuitive on-line tool used to visualize all of time, from the Big Bang to today, using the concept of zooming along the timeline to express distance to highlight the scope of time.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When you see ChronoZoom zoom from the Industrial Revolution all the way back to the Big Bang, you can visualize time in a new way.&amp;nbsp; You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia.&amp;nbsp;&amp;nbsp;
 ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively known as Big History.&lt;/p&gt;
&lt;p&gt;The regimes of Big History are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cosmos &lt;/li&gt;&lt;li&gt;Earth &lt;/li&gt;&lt;li&gt;Life &lt;/li&gt;&lt;li&gt;Human Pre-History &lt;/li&gt;&lt;li&gt;Human History. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;By drawing upon the latest discoveries from many different disciplines, you can visualize the temporal relationships between events, trends, and themes. Some of the disciplines that contribute information to ChronoZoom include biology, astronomy, geology,
 climatology, prehistory, archeology, anthropology, economics, cosmology, natural history, and population and environmental studies.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://chronozoomproject.org/"&gt;ChronoZoom&lt;/a&gt; is a collaborative effort of the Department of Earth and Planetary Science at UC Berkeley, Microsoft Research, and originally Microsoft Live Labs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Detailed Project Description&lt;br&gt;
&lt;/strong&gt;The last 20 years has seen the emergence of a new discipline invented by the Australian historian, David Christian, called Big History.&amp;nbsp; The aim of Big History is to&amp;nbsp;unify all knowledge of the past into a single field of study. Big History
 invites humanistic scholars and historical scientists from fields like geology, paleontology, evolutionary biology, astronomy, and cosmology to work together in developing the broadest possible view of the past.&lt;/p&gt;
&lt;p&gt;Big History is proving to be an excellent framework for designing undergraduate synthesis courses that attract outstanding students. A serious problem in teaching such courses is conveying the vast stretches of time from the Big Bang, 13.7 billion years
 ago to the present, and clarifying the wildly different time scales of cosmic history, Earth and life history, human prehistory, and human history.&lt;/p&gt;
&lt;p&gt;Our first conception of ChronoZoom was that it should dramatically convey the scales of history, and the first version does in fact do that. To display the scales of history from a single day to the age of the Universe requires the ability to zoom smoothly
 by a factor of ~1013, and doing this with raster graphics was a remarkable achievement of the team at Live Labs. The immense zoom range also allows us to embed virtually limitless amounts of text and graphical information&lt;/p&gt;
&lt;p&gt;ChronoZoom, by letting us move effortlessly through this enormous wilderness of time, getting used to the differences in scale, should help to break down the time-scale barriers to communication between scholars.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Future of ChronoZoom&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We envision a world where scientists, researchers, students, and teachers collaborate through ChronoZoom to share information via data, tours, and insight.&lt;/p&gt;
&lt;p&gt;Imagine a world where the leading academics publish their findings to the world in a manner that can easily be accessed and compared to other data.&lt;/p&gt;
&lt;p&gt;Imagine a tool that allows teachers to generate tours specific to their classroom needs.&lt;/p&gt;
&lt;p&gt;This can happen with your support.&amp;nbsp;&amp;nbsp; As ChronoZoom through the beta release, we need your feedback and support to continue to mold this project to suit your needs.&lt;/p&gt;
&lt;p&gt;Help ChronoZoom evolve by take this survey so we can provide the best possible future features:
&lt;br&gt;
&lt;a href="http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/"&gt;Click here to take our survey&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Roland Saekow, David Shimabukuro&amp;nbsp;and&amp;nbsp;Walter Alvarez&lt;br&gt;
University of California Berkeley&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altermann</author><pubDate>Mon, 22 Apr 2013 20:09:50 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130422080950P</guid></item><item><title>Updated Wiki: Home</title><link>https://chronozoom.codeplex.com/wikipage?version=32</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;See &lt;a href="https://github.com/alterm4nn/ChronoZoom"&gt;ChronoZoom on Github&lt;/a&gt; for new development and
&lt;a href="https://trello.com/chronozoom"&gt;ChronoZoom on Trello&lt;/a&gt; for our plans for the future.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Project Overview&lt;/strong&gt;&lt;br&gt;
ChronoZoom is an intuitive on-line tool used to visualize all of time, from the Big Bang to today, using the concept of zooming along the timeline to express distance to highlight the scope of time.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When you see ChronoZoom zoom from the Industrial Revolution all the way back to the Big Bang, you can visualize time in a new way.&amp;nbsp; You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia.&amp;nbsp;&amp;nbsp;
 ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively known as Big History.&lt;/p&gt;
&lt;p&gt;The regimes of Big History are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cosmos &lt;/li&gt;&lt;li&gt;Earth &lt;/li&gt;&lt;li&gt;Life &lt;/li&gt;&lt;li&gt;Human Pre-History &lt;/li&gt;&lt;li&gt;Human History. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;By drawing upon the latest discoveries from many different disciplines, you can visualize the temporal relationships between events, trends, and themes. Some of the disciplines that contribute information to ChronoZoom include biology, astronomy, geology,
 climatology, prehistory, archeology, anthropology, economics, cosmology, natural history, and population and environmental studies.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://chronozoomproject.org/"&gt;ChronoZoom&lt;/a&gt; is a collaborative effort of the Department of Earth and Planetary Science at UC Berkeley, Microsoft Research, and originally Microsoft Live Labs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Detailed Project Description&lt;br&gt;
&lt;/strong&gt;The last 20 years has seen the emergence of a new discipline invented by the Australian historian, David Christian, called Big History.&amp;nbsp; The aim of Big History is to&amp;nbsp;unify all knowledge of the past into a single field of study. Big History
 invites humanistic scholars and historical scientists from fields like geology, paleontology, evolutionary biology, astronomy, and cosmology to work together in developing the broadest possible view of the past.&lt;/p&gt;
&lt;p&gt;Big History is proving to be an excellent framework for designing undergraduate synthesis courses that attract outstanding students. A serious problem in teaching such courses is conveying the vast stretches of time from the Big Bang, 13.7 billion years
 ago to the present, and clarifying the wildly different time scales of cosmic history, Earth and life history, human prehistory, and human history.&lt;/p&gt;
&lt;p&gt;Our first conception of ChronoZoom was that it should dramatically convey the scales of history, and the first version does in fact do that. To display the scales of history from a single day to the age of the Universe requires the ability to zoom smoothly
 by a factor of ~1013, and doing this with raster graphics was a remarkable achievement of the team at Live Labs. The immense zoom range also allows us to embed virtually limitless amounts of text and graphical information&lt;/p&gt;
&lt;p&gt;ChronoZoom, by letting us move effortlessly through this enormous wilderness of time, getting used to the differences in scale, should help to break down the time-scale barriers to communication between scholars.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Future of ChronoZoom&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We envision a world where scientists, researchers, students, and teachers collaborate through ChronoZoom to share information via data, tours, and insight.&lt;/p&gt;
&lt;p&gt;Imagine a world where the leading academics publish their findings to the world in a manner that can easily be accessed and compared to other data.&lt;/p&gt;
&lt;p&gt;Imagine a tool that allows teachers to generate tours specific to their classroom needs.&lt;/p&gt;
&lt;p&gt;This can happen with your support.&amp;nbsp;&amp;nbsp; As ChronoZoom through the beta release, we need your feedback and support to continue to mold this project to suit your needs.&lt;/p&gt;
&lt;p&gt;Help ChronoZoom evolve by take this survey so we can provide the best possible future features:
&lt;br&gt;
&lt;a href="http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/"&gt;Click here to take our survey&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Roland Saekow, David Shimabukuro&amp;nbsp;and&amp;nbsp;Walter Alvarez&lt;br&gt;
University of California Berkeley&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JayBeavers</author><pubDate>Sun, 17 Feb 2013 17:05:32 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130217050532P</guid></item><item><title>Updated Wiki: Home</title><link>https://chronozoom.codeplex.com/wikipage?version=31</link><description>&lt;div class="wikidoc"&gt;
&lt;hr&gt;
&lt;p&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;em style="font-size:10pt"&gt;&lt;strong&gt;FOR ALL DOCUMENTATION ON HOW TO USE CHRONOZOOM, PLEASE VISIT
&lt;a href="http://chronozoom.codeplex.com/documentation"&gt;DOCUMENTATION. &lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;em style="font-size:10pt"&gt;&lt;strong&gt;&lt;em&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Project Overview&lt;/strong&gt;&lt;br&gt;
ChronoZoom is an intuitive on-line tool used to visualize all of time, from the Big Bang to today, using the concept of zooming along the timeline to express distance to highlight the scope of time.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When you see ChronoZoom zoom from the Industrial Revolution all the way back to the Big Bang, you can visualize time in a new way.&amp;nbsp; You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia.&amp;nbsp;&amp;nbsp;
 ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively known as Big History.&lt;/p&gt;
&lt;p&gt;The regimes of Big History are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cosmos &lt;/li&gt;&lt;li&gt;Earth &lt;/li&gt;&lt;li&gt;Life &lt;/li&gt;&lt;li&gt;Human Pre-History &lt;/li&gt;&lt;li&gt;Human History. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;By drawing upon the latest discoveries from many different disciplines, you can visualize the temporal relationships between events, trends, and themes. Some of the disciplines that contribute information to ChronoZoom include biology, astronomy, geology,
 climatology, prehistory, archeology, anthropology, economics, cosmology, natural history, and population and environmental studies.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://chronozoomproject.org/"&gt;ChronoZoom&lt;/a&gt; is a collaborative effort of the Department of Earth and Planetary Science at UC Berkeley, Microsoft Research, and originally Microsoft Live Labs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Detailed Project Description&lt;br&gt;
&lt;/strong&gt;The last 20 years has seen the emergence of a new discipline invented by the Australian historian, David Christian, called Big History.&amp;nbsp; The aim of Big History is to&amp;nbsp;unify all knowledge of the past into a single field of study. Big History
 invites humanistic scholars and historical scientists from fields like geology, paleontology, evolutionary biology, astronomy, and cosmology to work together in developing the broadest possible view of the past.&lt;/p&gt;
&lt;p&gt;Big History is proving to be an excellent framework for designing undergraduate synthesis courses that attract outstanding students. A serious problem in teaching such courses is conveying the vast stretches of time from the Big Bang, 13.7 billion years
 ago to the present, and clarifying the wildly different time scales of cosmic history, Earth and life history, human prehistory, and human history.&lt;/p&gt;
&lt;p&gt;Our first conception of ChronoZoom was that it should dramatically convey the scales of history, and the first version does in fact do that. To display the scales of history from a single day to the age of the Universe requires the ability to zoom smoothly
 by a factor of ~1013, and doing this with raster graphics was a remarkable achievement of the team at Live Labs. The immense zoom range also allows us to embed virtually limitless amounts of text and graphical information&lt;/p&gt;
&lt;p&gt;ChronoZoom, by letting us move effortlessly through this enormous wilderness of time, getting used to the differences in scale, should help to break down the time-scale barriers to communication between scholars.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Future of ChronoZoom&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We envision a world where scientists, researchers, students, and teachers collaborate through ChronoZoom to share information via data, tours, and insight.&lt;/p&gt;
&lt;p&gt;Imagine a world where the leading academics publish their findings to the world in a manner that can easily be accessed and compared to other data.&lt;/p&gt;
&lt;p&gt;Imagine a tool that allows teachers to generate tours specific to their classroom needs.&lt;/p&gt;
&lt;p&gt;This can happen with your support.&amp;nbsp;&amp;nbsp; As ChronoZoom through the beta release, we need your feedback and support to continue to mold this project to suit your needs.&lt;/p&gt;
&lt;p&gt;Help ChronoZoom evolve by take this survey so we can provide the best possible future features:
&lt;br&gt;
&lt;a href="http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/"&gt;Click here to take our survey&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Roland Saekow, David Shimabukuro&amp;nbsp;and&amp;nbsp;Walter Alvarez&lt;br&gt;
University of California Berkeley&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JayBeavers</author><pubDate>Sun, 17 Feb 2013 17:04:13 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130217050413P</guid></item><item><title>Updated Wiki: ChronoZoom Developer's Guide</title><link>http://chronozoom.codeplex.com/wikipage?title=ChronoZoom Developer's Guide&amp;version=9</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;&lt;span style="color:#808080"&gt;&lt;strong&gt;Note: &lt;/strong&gt;As of 4/7/2012 this guide was revised. The code base was also modified to support easier adoption. If you downloaded the source code before 4/7/2012, please download again if you plan to use this guide.
 A new sql script has been submitted (4/25/2012) that eliminates the&amp;nbsp; large number of empty timelines.&lt;/span&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;a name="_Toc318457665"&gt;&lt;/a&gt;&lt;a name="_Toc318452320"&gt;Disclaimer&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This document is provided &amp;ldquo;as-is&amp;rdquo;. Information and views expressed in this document, including URL and other Internet Web site references, may change without notice. You bear the risk of using it.&lt;/p&gt;
&lt;p&gt;This document does not provide you with any legal rights to any intellectual property in any Microsoft product. You may copy and use this document for your internal, reference purposes.&lt;/p&gt;
&lt;p&gt;&amp;copy; 2012 The Outercurve Foundation.&lt;/p&gt;
&lt;p&gt;Distributed under Creative Commons Attribution 3.0 Unported License.&lt;/p&gt;
&lt;p&gt;Microsoft, Visual Studio, and Windows are trademarks of Microsoft, Inc. All other trademarks are property of their respective owners.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457666"&gt;Introduction&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley and Moscow State University.&lt;/p&gt;
&lt;p&gt;You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia. ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively known as Big
 History.&lt;/p&gt;
&lt;p&gt;This guide is designed to walk developers through the installation process. Some of the APIs for ChronoZoom are not yet available for the public.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457667"&gt;Prerequisites&lt;/a&gt;&lt;/h3&gt;
&lt;h5&gt;&lt;a name="_Toc318457668"&gt;Hardware Requirements:&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;A computer that can run Visual Studio 2010. &lt;/li&gt;&lt;li&gt;Optionally, a network connection for the content links. &lt;/li&gt;&lt;/ul&gt;
&lt;h5&gt;&lt;a name="_Toc318457669"&gt;Software Requirements:&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Visual Studio 2010 with Service Pack 1 (Check &amp;ldquo;Help&amp;rdquo; and &amp;ldquo;About&amp;rdquo; to determine if you have SP1 installed. If you don&amp;rsquo;t, you can get it
&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=23691"&gt;here&lt;/a&gt;.) &lt;/li&gt;&lt;li&gt;Installation of Azure SDK (.net)
&lt;ul&gt;
&lt;li&gt;Recommend installing from this page: &lt;a href="http://www.windowsazure.com/en-us/develop/downloads/"&gt;
http://www.windowsazure.com/en-us/develop/downloads/&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;SQL Data Tools (Click this link to begin download &lt;a href="http://msdn.microsoft.com/en-us/data/hh297027" target="_blank"&gt;
SQL Data Tools&lt;/a&gt;) Service pack 2 of Visual Studio must be installed before you attempt this install.
&lt;/li&gt;&lt;li&gt;SQL Server 2008 or later Standard, Express, Developer, or Enterprise Edition &lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;&lt;a name="_Toc318457670"&gt;Project setup instructions&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Here are the steps to get the source code and prepare for execution:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download the code as zip file from Codeplex at &lt;a href="http://chronozoom.codeplex.com/"&gt;
http://chronozoom.codeplex.com/&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Extract the zip into a folder. &lt;/li&gt;&lt;li&gt;Open the chronozoom.sln under the source folder (double-click on the file in windows explorer).
&lt;/li&gt;&lt;li&gt;Right-click the Chronozoom.Database in Visual Studio Solution Explorer and click
&lt;strong&gt;Publish.&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;In the dialog box, select the target database connection string to deploy to.
&lt;/li&gt;&lt;li&gt;Click Publish. &lt;/li&gt;&lt;li&gt;In the chronozoom.UI project, under the scripts folder, locate the cz.settings.js
&lt;/li&gt;&lt;li&gt;Replace current value of this with contentItemThumbnailBaseUri = 'http://127.0.0.1:10000/devstoreaccount1/images/';
&lt;/li&gt;&lt;li&gt;Replace the text [Your domain] in the chronozoom.svc.cs file with localhost:4949 address. Also replace [Your domain] in &amp;ldquo;var req= WebRequest.Create&amp;rdquo;.
&lt;ul&gt;
&lt;li&gt;Replace the text [Your domain] in the ChronozoomRelay.cs file with localhost:4949
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Connect ChronoZoom to the database in the Chronozoom UI project, edit web.config:
&lt;ol&gt;
&lt;li&gt;Go to server explorer &lt;/li&gt;&lt;li&gt;Add connection to the database we published before &lt;/li&gt;&lt;li&gt;Right clicked on the newly selected connection &lt;/li&gt;&lt;li&gt;Select properties &lt;/li&gt;&lt;li&gt;Copy connection string from the properties &lt;/li&gt;&lt;li&gt;Paste into Web.config &amp;ldquo;data source = {insert your data source and add &amp;ldquo;;&amp;rdquo;
&lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;Now go to the Authoring.Azure project and edit Web.config
&lt;ul&gt;
&lt;li&gt;Find connection string and inster the data source as before. &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Configure thumbnail generation
&lt;ol&gt;
&lt;li&gt;Under ThumbGenApp open app.config &lt;/li&gt;&lt;li&gt;Change [add your connection string here] to the connection string you got above.
&lt;/li&gt;&lt;li&gt;Change [add your blob url here] to 'http://127.0.0.1:10000/devstoreaccount1/images/'
&lt;/li&gt;&lt;li&gt;Change [add your azure connection string] to &amp;ldquo;UseDevelopmentStorage=true&amp;rdquo;
&lt;/li&gt;&lt;li&gt;Build under configuration &amp;ldquo;Dev Preview&amp;rdquo; for platform &amp;ldquo;X86&amp;rdquo;
&lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;Set ChronoZoom.UI as the startup project. Right click on Chronozoom.UI project and select &amp;ldquo;set as startup project&amp;rdquo;. To run authoring tools:
&lt;ol&gt;
&lt;li&gt;Set Authoring.Azure as startup project. &lt;/li&gt;&lt;li&gt;Run. Login as &amp;ldquo;admin&amp;rdquo; password:&amp;rdquo;admin$&amp;rdquo; &lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;Right click on cz.htm and select &amp;ldquo;Set as startup page&amp;rdquo; You may get a storage emulator error. If so, please see
&lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/gg433134.aspx"&gt;http://msdn.microsoft.com/en-us/library/windowsazure/gg433134.aspx&lt;/a&gt; for an easy fix
&lt;/li&gt;&lt;li&gt;Run and execute. &lt;/li&gt;&lt;li&gt;To generate thumbnails (required after adding content items) set ThumbGenApp as startup project.
&lt;/li&gt;&lt;/ol&gt;
&lt;h4&gt;How to Submit Code to the Project&lt;/h4&gt;
&lt;p&gt;After you have completed the code you want to add to the project, there are a few steps to follow to get your submission to the project team:&lt;/p&gt;
&lt;p&gt;1. &lt;strong&gt;Document the code &lt;/strong&gt;Comment code so that testers and future developers will clearly understand what you have done. It is recommended to create a unit test to cover the fixed functionality and include it in the appropriate test project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. &lt;/strong&gt;&lt;strong&gt;Create a zipped file with your changed code&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a. &lt;/strong&gt;Include any source files that have your changes. &lt;strong&gt;Please surround your changes/additions with comments that clearly explain what you are doing.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b. &lt;/strong&gt;Provide a document that explains what you did and how it works.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. &lt;/strong&gt;&lt;strong&gt;Submit your changes on Codeplex:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Click &amp;ldquo;Submit a patch&amp;rdquo; on the &lt;a href="http://chronozoom.codeplex.com/SourceControl/list/changesets"&gt;
chronozoom.codeplex.com&lt;/a&gt; site. &lt;/li&gt;&lt;li&gt;On the &amp;ldquo;Upload a Patch&amp;rdquo; page, use the the &amp;ldquo;Browse&amp;rdquo; button to find your zipped file.
&lt;/li&gt;&lt;li&gt;In the description box, describe your patch, suggest a unit test if your can.
&lt;/li&gt;&lt;li&gt;Please note the work item that this patch fixes &lt;/li&gt;&lt;li&gt;Click Submit.&lt;strong&gt;&lt;/strong&gt; &lt;/li&gt;&lt;/ol&gt;
&lt;h3&gt;Coding Guidelines&lt;/h3&gt;
&lt;p&gt;One of the key components to delivering that higher productivity is by providing a consistent approach to the programming model and stylistic conventions used throughout the development of the project. Consistency reduces distractions and surprises.&lt;/p&gt;
&lt;p&gt;Our intent is to follow the guidelines laid out by the designers of the .NET Framework class library as detailed in the book
&lt;em&gt;&amp;quot;Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries&amp;quot;&lt;/em&gt; by Krzysztof Cwalina and Brad Abrams, published by Addison-Wesley in 2005 and described in the MSDN documentation delivered with Visual Studio (found online
&lt;a href="http://msdn.microsoft.com/en-us/library/ms229042(VS.100).aspx"&gt;here&lt;/a&gt;). While we principally follow the guidelines above, conversations and styles from many other projects and developers have had influence on this document.&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc265502898"&gt;&lt;/a&gt;&lt;a name="_Toc256702183"&gt;&lt;/a&gt;&lt;a name="_Toc318457672"&gt;Coding Conventions&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;&lt;a name="_Toc318457673"&gt;Document Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Just as writing code in a consistent style makes the code easier to read, this document uses words and formatting to ensure clarity and comprehension. The conventions used herein are recommendations and should be followed in most situations; however, we
 recognized that there are situations we may not be able to anticipate. Thus our recommendations are stated with a &amp;lsquo;strength&amp;rsquo; context verb to help you decide how to apply them in your situation. Our terminology is consistent with the Framework Design
 Guidelines.&lt;/p&gt;
&lt;p&gt;Our strongest recommendations are &lt;strong&gt;DO&lt;/strong&gt; and &lt;strong&gt;DO NOT&lt;/strong&gt;.
&lt;strong&gt;DO&lt;/strong&gt; and &lt;strong&gt;DO NOT&lt;/strong&gt; recommendations should be followed 99.999% of the time to obtain the benefits of a consistent coding style. For example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DO&lt;/strong&gt; use descriptive parameter names.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DO NOT&lt;/strong&gt; require user to explicitly instantiate more than one type in the most basic scenarios.&lt;/p&gt;
&lt;p&gt;Our general recommendations are &lt;strong&gt;CONSIDER&lt;/strong&gt; and &lt;strong&gt;AVOID&lt;/strong&gt;. These guidelines should generally be followed, but we are aware of circumstances where they may not make sense. If you understand the reasoning for the general recommendation
 and you fully understand your situation and the reasons you need to violate the recommendation are clear, then go ahead. For example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CONSIDER&lt;/strong&gt; defining interfaces to achieve a similar effect to that of multiple inheritances.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AVOID&lt;/strong&gt; using out or ref parameters.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457674"&gt;&lt;/a&gt;&lt;a name="_Toc265502900"&gt;&lt;/a&gt;&lt;a name="_Toc256702185"&gt;Naming Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Identifier&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Public&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Protected&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Internal&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Private&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Project File&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO match Assembly and Namespace.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Source File&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO match Class name.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Namespace&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO use Project/Assembly name.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Class or Struct&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;CONSIDER adding suffix of sub-class.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Interface&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO prefix Interfaces with capital I.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Generic Class&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO use T or K as type identifier.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Method&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;CONSIDER using Verb or Verb-Object pair.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Property&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO NOT prefix with Get or Set.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Field&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;AVOID use of public Fields.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Static Field&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Constant&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Enum&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Delegate&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Event&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Local variable&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Parameter&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;&lt;a name="_Toc318457675"&gt;&lt;/a&gt;&lt;a name="_Toc265502901"&gt;&lt;/a&gt;&lt;a name="_Toc256702186"&gt;Coding Style and Language Usage Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Coding Style Issue&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Style Guideline&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Source Files&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO have only one Namespace and one Class per file.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Curly Braces&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO have braces on a new line.&lt;/p&gt;
&lt;p&gt;DO use a brace, even if syntactically optional.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Indentation&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;Do indent is 4 and convert tabs to spaces.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Comments&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;Do use // or ///.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Native Data Types&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO use built-in C# data types.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Enums&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;AVOID changing the default type.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Generics&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;CONSIDER generic types before standard or strong-typed classes.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Methods&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;AVOID large parameter lists (over 7). Use an array or object instead.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;foreach&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT modify enumerated objects within the body of the foreach loop.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Conditionals&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT test against true or false.&lt;/p&gt;
&lt;p&gt;DO NOT embed code with side effects within a conditional.&lt;/p&gt;
&lt;p&gt;DO NOT embed an assignment.&lt;/p&gt;
&lt;p&gt;DO NOT embed a method invocation.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Exceptions&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT use exceptions for normal flow control.&lt;/p&gt;
&lt;p&gt;DO NOT use &amp;ldquo;throw e;&amp;rdquo; when re-throwing, use &amp;ldquo;throw;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;DO avoid exceptions by validating pre/post conditions prior to the exception.&lt;/p&gt;
&lt;p&gt;DO derive from Exception, not ApplicationException.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;&lt;a name="_Toc318457676"&gt;&lt;/a&gt;&lt;a name="_Toc265502902"&gt;&lt;/a&gt;&lt;a name="_Toc256702187"&gt;Naming Conventions&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Consistent naming procedures applied across all the various identifier types in a project goes a long way to making code more accessible to people that use the library or join the project after you.&lt;/p&gt;
&lt;p&gt;The CLR supports both case-sensitive and case-insensitive languages. If you want to write libraries that are accessible to both types, you are restricted from on creating names that are identical except for case. Even so, appropriate and consistent capitalization
 enhances readability and comprehension of code.&lt;/p&gt;
&lt;p&gt;Capitalization is used to make identifiers more readable. There are two capitalization conventions in general use for identifier names throughout the library, PascalCase and camelCase. PascalCase capitalizes every word of the descriptive identifier whereas
 the camelCase does not capitalize the initial word of the identifier but does capitalize every word
&lt;span style="text-decoration:underline"&gt;after&lt;/span&gt; the initial one. There are some instances where a PascalCase or camelCase identifier may have a &amp;lsquo;_&amp;rsquo; or a capital &amp;lsquo;I&amp;rsquo; prefix added.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457677"&gt;&lt;/a&gt;&lt;a name="_Toc265502903"&gt;&lt;/a&gt;&lt;a name="_Toc256702188"&gt;General Naming Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;DO use PascalCasing for type and method names and constants. &lt;/li&gt;&lt;li&gt;DO use camelCasing for local variable names and method arguments. &lt;/li&gt;&lt;li&gt;DO use &amp;lsquo;I&amp;rsquo; to prefix Interface names. &lt;/li&gt;&lt;li&gt;DO NOT create names that vary only by case. &lt;/li&gt;&lt;li&gt;AVOID creating ALLCAPITALNAMES. &lt;/li&gt;&lt;li&gt;DO use easily readable, descriptive, meaningful, and specific names.
&lt;ul&gt;
&lt;li&gt;AVOID single character names. &lt;/li&gt;&lt;li&gt;AVOID Hungarian notation for public or protected members. &lt;/li&gt;&lt;li&gt;AVOID abbreviations unless the full name is really excessive. &lt;/li&gt;&lt;li&gt;AVOID adding redundant prefixes and suffixes e.g. public enum ColorsEnum {&amp;hellip;}.
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;DO name types with nouns, noun phrases, or adjective phrases using PascalCasing.
&lt;/li&gt;&lt;li&gt;CONSIDER ending the name of a derived classes with the name of the base class.
&lt;/li&gt;&lt;li&gt;DO prefix Interface names with the letter &amp;lsquo;I&amp;rsquo;, to indicate that the type is an interface.
&lt;/li&gt;&lt;li&gt;DO give methods names that are verbs or verb phrases. &lt;/li&gt;&lt;li&gt;DO name properties using a noun, noun phrase, or adjective. &lt;/li&gt;&lt;li&gt;CONSIDER giving a property the same name as its type. &lt;/li&gt;&lt;li&gt;DO name fields using a noun or noun phrase. &lt;/li&gt;&lt;li&gt;CONSIDER using common, well known acronyms, e.g. IO instead of InputOutput. &lt;/li&gt;&lt;li&gt;AVOID acronyms that are not common or widely known. &lt;/li&gt;&lt;li&gt;DO use uppercase for two-letter acronyms and PascalCase for other acronyms. It is acceptable to use &amp;ldquo;BIO&amp;rdquo; rather than &amp;ldquo;Bio&amp;rdquo; in the context of this project.
&lt;/li&gt;&lt;li&gt;CONSIDER using C# types rather than aliases in the System namespace. &lt;/li&gt;&lt;li&gt;DO use capital letters for type placeholders in generics. &lt;/li&gt;&lt;li&gt;CONSIDER prefixing Boolean variables with &amp;ldquo;Can&amp;rdquo;, &amp;ldquo;Is&amp;rdquo;, or &amp;ldquo;Has&amp;rdquo;.
&lt;/li&gt;&lt;li&gt;CONSIDER appending computational variables with the suffix &amp;ldquo;Average&amp;rdquo;, &amp;ldquo;Count&amp;rdquo;, &amp;ldquo;Sum&amp;rdquo;, &amp;ldquo;Min&amp;rdquo;, or &amp;ldquo;Max&amp;rdquo;.
&lt;/li&gt;&lt;li&gt;DO use meaningful namespaces under the &amp;ldquo;Bio&amp;rdquo; root when extending the Framework.
&lt;/li&gt;&lt;li&gt;DO use meaningful namespaces under your Product, Company, or Developer name for tools or code using the project.e.g. namespace MyCompany.MyProduct.MyNamespace;
&lt;/li&gt;&lt;/ol&gt;
&lt;h4&gt;&lt;a name="_Toc318457678"&gt;&lt;/a&gt;&lt;a name="_Toc265502904"&gt;&lt;/a&gt;&lt;a name="_Toc256702189"&gt;Coding Style and Language Usage&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Resolving issues around different coding styles can cause controversy among developers, but consistent layout, format, and organization are key attributes of maintainable code. The following guidelines describe the &amp;lsquo;preferred&amp;rsquo; way to write C#
 code in order to consistently create clear, readable, comprehensible code that you and your team members can maintain over time.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457679"&gt;&lt;/a&gt;&lt;a name="_Toc265502905"&gt;&lt;/a&gt;&lt;a name="_Toc256702190"&gt;General Style Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;DO have a single file contribute to a single namespace. &lt;/li&gt;&lt;li&gt;DO have a single class in a single source file. &lt;/li&gt;&lt;li&gt;DO group all framework &amp;ldquo;using&amp;rdquo; namespaces together before custom or third party namespaces.
&lt;/li&gt;&lt;li&gt;AVOID putting a &amp;ldquo;using&amp;rdquo; statement inside a namespace. &lt;/li&gt;&lt;li&gt;AVOID using fully qualified type names by using the &amp;ldquo;using&amp;rdquo; statement.
&lt;/li&gt;&lt;li&gt;CONSIDER grouping internal class implementation by type in the following order:
&lt;ol&gt;
&lt;li&gt;Member variables. &lt;/li&gt;&lt;li&gt;Constructors &amp;amp; Finalizers. &lt;/li&gt;&lt;li&gt;Nested enums, structs, and classes. &lt;/li&gt;&lt;li&gt;Properties &lt;/li&gt;&lt;li&gt;Methods &lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;DO explicitly declare the access modifier for all identifiers rather than relying on default.
&lt;/li&gt;&lt;li&gt;CONSIDER grouping declarations within each type by their access modifier and visibility:
&lt;ol&gt;
&lt;li&gt;public &lt;/li&gt;&lt;li&gt;protected. &lt;/li&gt;&lt;li&gt;internal &lt;/li&gt;&lt;li&gt;private &lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;DO declare all member variables as private and provide public, protected, or internal property access where required.
&lt;/li&gt;&lt;li&gt;DO declare each variable in its own statement. &lt;/li&gt;&lt;li&gt;DO use white space to organize and separate code. &lt;/li&gt;&lt;li&gt;DO maintain strict indentation of 4 spaces. DO NOT use tab characters in the documents.
&lt;/li&gt;&lt;li&gt;DO indent all code blocks contained within curly braces. &lt;/li&gt;&lt;li&gt;DO place opening curly braces ( { ) on a new line. &lt;/li&gt;&lt;li&gt;DO indent comments to the same level as the code being described. &lt;/li&gt;&lt;li&gt;DO use correct spelling, grammar, and punctuation in all comments. &lt;/li&gt;&lt;li&gt;DO use // or /// for comments. &lt;/li&gt;&lt;li&gt;AVOID /* &amp;hellip; */ for comments. &lt;/li&gt;&lt;li&gt;DO use inline comments to explain assumptions, issues, and algorithmic insights.
&lt;/li&gt;&lt;li&gt;DO NOT use comments to explain obvious code. &lt;/li&gt;&lt;li&gt;DO use Task-List keywords in comments to allow filtering e.g. &lt;br&gt;
// TODO: &lt;br&gt;
// UNDONE: &lt;/li&gt;&lt;li&gt;DO use C# comment blocks for documenting the API. &lt;/li&gt;&lt;li&gt;DO use C# comment blocks for every public, protected, and internal declaration.
&lt;/li&gt;&lt;li&gt;DO include &amp;lt;summary&amp;gt; comments. &lt;/li&gt;&lt;li&gt;DO include &amp;lt;param&amp;gt;, &amp;lt;return&amp;gt;, and &amp;lt;exception&amp;gt; comments where applicable.
&lt;/li&gt;&lt;li&gt;DO declare local variables near their first use. &lt;/li&gt;&lt;li&gt;DO initialize local variables where you declare them. &lt;/li&gt;&lt;li&gt;DO use the simplest data type, collection, or object that meets your requirements.
&lt;/li&gt;&lt;li&gt;AVOID specifying the type of an Enum. Use the default of int unless you have an explicit need for a long.
&lt;/li&gt;&lt;li&gt;DO NOT use inline numeric literals (&amp;lsquo;magic numbers&amp;rsquo;). Use Constant or Enum.
&lt;/li&gt;&lt;li&gt;AVOID declaring string literals. Use Resources, Constants, Configuration Files, Registry or other data sources.
&lt;/li&gt;&lt;/ol&gt;
&lt;h4&gt;&lt;a name="_Toc318457680"&gt;&lt;/a&gt;&lt;a name="_Toc265502906"&gt;&lt;/a&gt;&lt;a name="_Toc256702191"&gt;Library Design&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;A successful framework for biology must be designed for a broad range of developer skills and capabilities. Delivering powerful capabilities with clean, simple abstractions that can be used by the novice, while still allowing the expert to control the details
 underlying the abstraction is a challenging task.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457681"&gt;&lt;/a&gt;&lt;a name="_Toc265502907"&gt;&lt;/a&gt;&lt;a name="_Toc256702192"&gt;General Library Design Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;DO design a framework that is both powerful and easy to use. &lt;/li&gt;&lt;li&gt;DO provide a layered framework with high-level APIs optimized for productivity and low-level APIs optimized for power and expressiveness.
&lt;/li&gt;&lt;li&gt;AVOID mixing low-level and high-level APIs in a single namespace. &lt;/li&gt;&lt;li&gt;DO ensure that layers of a single feature are well integrated and complete. Developers should be able to migrate from one level to another without re-writing the entire application.
&lt;/li&gt;&lt;li&gt;DO base your design on meaningful usage scenarios. &lt;/li&gt;&lt;li&gt;DO ensure scenarios that correspond to an appropriate abstraction level. &lt;/li&gt;&lt;li&gt;DO design APIs by first writing code samples for the main scenario then defining the object model to support the code.
&lt;/li&gt;&lt;li&gt;DO organize usability studies to test API in main scenarios. &lt;/li&gt;&lt;li&gt;DO provide simple overloads of constructors and methods with a small number of primitive parameters.&amp;nbsp;
&lt;/li&gt;&lt;li&gt;DO NOT require user to explicitly instantiate more than one type in the most basic scenarios.
&lt;/li&gt;&lt;li&gt;DO provide good defaults for all properties and parameters if possible. &lt;/li&gt;&lt;li&gt;DO communicate incorrect usage of APIs using exceptions. &lt;/li&gt;&lt;li&gt;DO provide strongly typed APIs if at all possible. &lt;/li&gt;&lt;li&gt;DO NOT create circular references between assemblies. &lt;/li&gt;&lt;li&gt;CONSIDER factoring unsafe code into a separate assembly. &lt;/li&gt;&lt;li&gt;DO use zero-based indexing when developing with the Framework. &lt;/li&gt;&lt;/ol&gt;
&lt;h3&gt;&lt;a name="_Toc318457682"&gt;Azure Deployment Guidelines&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChronoZoom is powered by Windows Azure and SQL Azure. With Team Foundation Server as the source repository for ChronoZoom, there comes an added benefit of build servers. We leverage the build feature of TFS to automatically deploy packages to Azure.&lt;/p&gt;
&lt;p&gt;As part of the Engineering practice, it would be ideal to let TFS handle the deployment to Azure as part of the daily builds. Here are some advantages of doing this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Being able to build, package, and deploy our projects to multiple Windows Azure environments from a build server using MSBuild
&lt;/li&gt;&lt;li&gt;Being able to retain copies of our packages and configurations for our builds in Windows Azure BLOB Storage for safe keeping, history, easy rollback scenarios, etc.
&lt;/li&gt;&lt;li&gt;Having a build number generated for a build and make sure that build number is present in the name of our packages, configs, and deployment labels in Azure for consistency
&lt;/li&gt;&lt;li&gt;Leveraging the Release Configurations in Visual Studio as much as possible as the designation of our different environments, since Web.Config transformations rely on this pattern already
&lt;/li&gt;&lt;li&gt;Being able to still package and deploy locally, in case there is an issue with the build server for some reason
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Greater depth on the deployment can be found here - &lt;a href="http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx"&gt;
http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are some technical requirements to get setup with automatic deployment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install Windows Azure tools on build server &lt;/li&gt;&lt;li&gt;Install Windows Azure powershell cmdlets &lt;/li&gt;&lt;li&gt;Download publish settings from &lt;a href="http://windows.azure.com/downloads/publishprofile.aspx"&gt;
http://windows.azure.com/downloads/publishprofile.aspx&lt;/a&gt; &lt;/li&gt;&lt;li&gt;In MSBuild build definition setting, under process set it to /t:Publish /p:PublishDir=C:\Builds\Drops\;Configuration=DevPreview;AzurePublishProfile=&amp;lt;Your profile&amp;gt;.azurePubxml
&lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;&lt;a name="_Toc318457683"&gt;The Future of ChronoZoom&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We envision a world where scientists, researchers, students, and teachers collaborate through ChronoZoom to share information via data, tours, and insight.&lt;/p&gt;
&lt;p&gt;Imagine a world where the leading academics publish their findings to the world in a manner that can easily be accessed and compared to other data.&lt;/p&gt;
&lt;p&gt;Imagine a tool that allows teachers to generate tours specific to their classroom needs.&lt;/p&gt;
&lt;p&gt;This can happen with your support. As ChronoZoom through the beta release, we need your feedback and support to continue to mold this project to suit your needs.&lt;/p&gt;
&lt;p&gt;Help ChronoZoom evolve by taking this survey so we can provide the best possible future features:
&lt;a href="http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/"&gt;http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altermann</author><pubDate>Tue, 14 Aug 2012 12:44:21 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ChronoZoom Developer's Guide 20120814124421P</guid></item><item><title>Updated Wiki: ChronoZoom Developer's Guide</title><link>http://chronozoom.codeplex.com/wikipage?title=ChronoZoom Developer's Guide&amp;version=8</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;&lt;span style="color:#808080"&gt;&lt;strong&gt;Note: &lt;/strong&gt;As of 4/7/2012 this guide was revised. The code base was also modified to support easier adoption. If you downloaded the source code before 4/7/2012, please download again if you plan to use this guide.
 A new sql script has been submitted (4/25/2012) that eliminates the&amp;nbsp; large number of empty timelines.&lt;/span&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;a name="_Toc318457665"&gt;&lt;/a&gt;&lt;a name="_Toc318452320"&gt;Disclaimer&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This document is provided &amp;ldquo;as-is&amp;rdquo;. Information and views expressed in this document, including URL and other Internet Web site references, may change without notice. You bear the risk of using it.&lt;/p&gt;
&lt;p&gt;This document does not provide you with any legal rights to any intellectual property in any Microsoft product. You may copy and use this document for your internal, reference purposes.&lt;/p&gt;
&lt;p&gt;&amp;copy; 2012 The Outercurve Foundation.&lt;/p&gt;
&lt;p&gt;Distributed under Creative Commons Attribution 3.0 Unported License.&lt;/p&gt;
&lt;p&gt;Microsoft, Visual Studio, and Windows are trademarks of Microsoft, Inc. All other trademarks are property of their respective owners.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457666"&gt;Introduction&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley and Moscow State University.&lt;/p&gt;
&lt;p&gt;You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia. ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively known as Big
 History.&lt;/p&gt;
&lt;p&gt;This guide is designed to walk developers through the installation process. Some of the APIs for ChronoZoom are not yet available for the public.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457667"&gt;Prerequisites&lt;/a&gt;&lt;/h3&gt;
&lt;h5&gt;&lt;a name="_Toc318457668"&gt;Hardware Requirements:&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;&amp;middot; A computer that can run Visual Studio 2010.&lt;/p&gt;
&lt;p&gt;&amp;middot; Optionally, a network connection for the content links.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457669"&gt;Software Requirements:&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;&amp;middot; Visual Studio 2010 with Service Pack 1 (Check &amp;ldquo;Help&amp;rdquo; and &amp;ldquo;About&amp;rdquo; to determine if you have SP1 installed. If you don&amp;rsquo;t, you can get it
&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=23691"&gt;here&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;&amp;middot; Installation of Azure SDK (.net)&lt;/p&gt;
&lt;p&gt;o Recommend installing from this page: &lt;a href="http://www.windowsazure.com/en-us/develop/downloads/"&gt;
http://www.windowsazure.com/en-us/develop/downloads/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;middot; SQL Data Tools (Click this link to begin download &lt;a href="http://www.microsoft.com/web/gallery/install.aspx?appid=SSDT"&gt;
SQL Data Tools&lt;/a&gt;) Service pack 2 of Visual Studio must be installed before you attempt this install.&lt;/p&gt;
&lt;p&gt;&amp;middot; SQL Server 2008 or later Standard, Express, Developer, or Enterprise Edition&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457670"&gt;Project setup instructions&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Here are the steps to get the source code and prepare for execution:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download the code as zip file from Codeplex at &lt;a href="http://chronozoom.codeplex.com/"&gt;
http://chronozoom.codeplex.com/&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Extract the zip into a folder. &lt;/li&gt;&lt;li&gt;Open the chronozoom.sln under the source folder (double-click on the file in windows explorer).
&lt;/li&gt;&lt;li&gt;Right-click the Chronozoom.Database in Visual Studio Solution Explorer and click
&lt;strong&gt;Publish.&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;In the dialog box, select the target database connection string to deploy to.
&lt;/li&gt;&lt;li&gt;Click Publish. &lt;/li&gt;&lt;li&gt;In the chronozoom.UI project, under the scripts folder, locate the cz.settings.js
&lt;/li&gt;&lt;li&gt;Replace current value of this with contentItemThumbnailBaseUri = 'http://127.0.0.1:10000/devstoreaccount1/images/';
&lt;/li&gt;&lt;li&gt;Replace the text [Your domain] in the chronozoom.svc.cs file with localhost:4949 address. Also replace [Your domain] in &amp;ldquo;var req= WebRequest.Create&amp;rdquo;.
&lt;ul&gt;
&lt;li&gt;Replace the text [Your domain] in the ChronozoomRelay.cs file with localhost:4949
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Connect ChronoZoom to the database in the Chronozoom UI project, edit web.config:
&lt;ol&gt;
&lt;li&gt;Go to server explorer &lt;/li&gt;&lt;li&gt;Add connection to the database we published before &lt;/li&gt;&lt;li&gt;Right clicked on the newly selected connection &lt;/li&gt;&lt;li&gt;Select properties &lt;/li&gt;&lt;li&gt;Copy connection string from the properties &lt;/li&gt;&lt;li&gt;Paste into Web.config &amp;ldquo;data source = {insert your data source and add &amp;ldquo;;&amp;rdquo;
&lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;Now go to the Authoring.Azure project and edit Web.config
&lt;ul&gt;
&lt;li&gt;Find connection string and inster the data source as before. &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Configure thumbnail generation
&lt;ol&gt;
&lt;li&gt;Under ThumbGenApp open app.config &lt;/li&gt;&lt;li&gt;Change [add your connection string here] to the connection string you got above.
&lt;/li&gt;&lt;li&gt;Change [add your blob url here] to 'http://127.0.0.1:10000/devstoreaccount1/images/'
&lt;/li&gt;&lt;li&gt;Change [add your azure connection string] to &amp;ldquo;UseDevelopmentStorage=true&amp;rdquo;
&lt;/li&gt;&lt;li&gt;Build under configuration &amp;ldquo;Dev Preview&amp;rdquo; for platform &amp;ldquo;X86&amp;rdquo;
&lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;Set ChronoZoom.UI as the startup project. Right click on Chronozoom.UI project and select &amp;ldquo;set as startup project&amp;rdquo;. To run authoring tools:
&lt;ol&gt;
&lt;li&gt;Set Authoring.Azure as startup project. &lt;/li&gt;&lt;li&gt;Run. Login as &amp;ldquo;admin&amp;rdquo; password:&amp;rdquo;admin$&amp;rdquo; &lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;Right click on cz.htm and select &amp;ldquo;Set as startup page&amp;rdquo; You may get a storage emulator error. If so, please see
&lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/gg433134.aspx"&gt;http://msdn.microsoft.com/en-us/library/windowsazure/gg433134.aspx&lt;/a&gt; for an easy fix
&lt;/li&gt;&lt;li&gt;Run and execute. &lt;/li&gt;&lt;li&gt;To generate thumbnails (required after adding content items) set ThumbGenApp as startup project.
&lt;/li&gt;&lt;/ol&gt;
&lt;h4&gt;How to Submit Code to the Project&lt;/h4&gt;
&lt;p&gt;After you have completed the code you want to add to the project, there are a few steps to follow to get your submission to the project team:&lt;/p&gt;
&lt;p&gt;1. &lt;strong&gt;Document the code &lt;/strong&gt;Comment code so that testers and future developers will clearly understand what you have done. It is recommended to create a unit test to cover the fixed functionality and include it in the appropriate test project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. &lt;/strong&gt;&lt;strong&gt;Create a zipped file with your changed code&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a. &lt;/strong&gt;Include any source files that have your changes. &lt;strong&gt;Please surround your changes/additions with comments that clearly explain what you are doing.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b. &lt;/strong&gt;Provide a document that explains what you did and how it works.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. &lt;/strong&gt;&lt;strong&gt;Submit your changes on Codeplex:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Click &amp;ldquo;Submit a patch&amp;rdquo; on the &lt;a href="http://chronozoom.codeplex.com/SourceControl/list/changesets"&gt;
chronozoom.codeplex.com&lt;/a&gt; site. &lt;/li&gt;&lt;li&gt;On the &amp;ldquo;Upload a Patch&amp;rdquo; page, use the the &amp;ldquo;Browse&amp;rdquo; button to find your zipped file.
&lt;/li&gt;&lt;li&gt;In the description box, describe your patch, suggest a unit test if your can.
&lt;/li&gt;&lt;li&gt;Please note the work item that this patch fixes &lt;/li&gt;&lt;li&gt;Click Submit.&lt;strong&gt;&lt;/strong&gt; &lt;/li&gt;&lt;/ol&gt;
&lt;h3&gt;Coding Guidelines&lt;/h3&gt;
&lt;p&gt;One of the key components to delivering that higher productivity is by providing a consistent approach to the programming model and stylistic conventions used throughout the development of the project. Consistency reduces distractions and surprises.&lt;/p&gt;
&lt;p&gt;Our intent is to follow the guidelines laid out by the designers of the .NET Framework class library as detailed in the book
&lt;em&gt;&amp;quot;Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries&amp;quot;&lt;/em&gt; by Krzysztof Cwalina and Brad Abrams, published by Addison-Wesley in 2005 and described in the MSDN documentation delivered with Visual Studio (found online
&lt;a href="http://msdn.microsoft.com/en-us/library/ms229042(VS.100).aspx"&gt;here&lt;/a&gt;). While we principally follow the guidelines above, conversations and styles from many other projects and developers have had influence on this document.&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc265502898"&gt;&lt;/a&gt;&lt;a name="_Toc256702183"&gt;&lt;/a&gt;&lt;a name="_Toc318457672"&gt;Coding Conventions&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;&lt;a name="_Toc318457673"&gt;Document Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Just as writing code in a consistent style makes the code easier to read, this document uses words and formatting to ensure clarity and comprehension. The conventions used herein are recommendations and should be followed in most situations; however, we
 recognized that there are situations we may not be able to anticipate. Thus our recommendations are stated with a &amp;lsquo;strength&amp;rsquo; context verb to help you decide how to apply them in your situation. Our terminology is consistent with the Framework Design
 Guidelines.&lt;/p&gt;
&lt;p&gt;Our strongest recommendations are &lt;strong&gt;DO&lt;/strong&gt; and &lt;strong&gt;DO NOT&lt;/strong&gt;.
&lt;strong&gt;DO&lt;/strong&gt; and &lt;strong&gt;DO NOT&lt;/strong&gt; recommendations should be followed 99.999% of the time to obtain the benefits of a consistent coding style. For example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DO&lt;/strong&gt; use descriptive parameter names.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DO NOT&lt;/strong&gt; require user to explicitly instantiate more than one type in the most basic scenarios.&lt;/p&gt;
&lt;p&gt;Our general recommendations are &lt;strong&gt;CONSIDER&lt;/strong&gt; and &lt;strong&gt;AVOID&lt;/strong&gt;. These guidelines should generally be followed, but we are aware of circumstances where they may not make sense. If you understand the reasoning for the general recommendation
 and you fully understand your situation and the reasons you need to violate the recommendation are clear, then go ahead. For example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CONSIDER&lt;/strong&gt; defining interfaces to achieve a similar effect to that of multiple inheritances.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AVOID&lt;/strong&gt; using out or ref parameters.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457674"&gt;&lt;/a&gt;&lt;a name="_Toc265502900"&gt;&lt;/a&gt;&lt;a name="_Toc256702185"&gt;Naming Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Identifier&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Public&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Protected&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Internal&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Private&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Project File&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO match Assembly and Namespace.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Source File&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO match Class name.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Namespace&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO use Project/Assembly name.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Class or Struct&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;CONSIDER adding suffix of sub-class.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Interface&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO prefix Interfaces with capital I.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Generic Class&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO use T or K as type identifier.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Method&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;CONSIDER using Verb or Verb-Object pair.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Property&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO NOT prefix with Get or Set.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Field&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;AVOID use of public Fields.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Static Field&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Constant&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Enum&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Delegate&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Event&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Local variable&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Parameter&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;&lt;a name="_Toc318457675"&gt;&lt;/a&gt;&lt;a name="_Toc265502901"&gt;&lt;/a&gt;&lt;a name="_Toc256702186"&gt;Coding Style and Language Usage Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Coding Style Issue&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Style Guideline&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Source Files&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO have only one Namespace and one Class per file.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Curly Braces&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO have braces on a new line.&lt;/p&gt;
&lt;p&gt;DO use a brace, even if syntactically optional.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Indentation&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;Do indent is 4 and convert tabs to spaces.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Comments&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;Do use // or ///.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Native Data Types&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO use built-in C# data types.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Enums&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;AVOID changing the default type.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Generics&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;CONSIDER generic types before standard or strong-typed classes.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Methods&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;AVOID large parameter lists (over 7). Use an array or object instead.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;foreach&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT modify enumerated objects within the body of the foreach loop.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Conditionals&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT test against true or false.&lt;/p&gt;
&lt;p&gt;DO NOT embed code with side effects within a conditional.&lt;/p&gt;
&lt;p&gt;DO NOT embed an assignment.&lt;/p&gt;
&lt;p&gt;DO NOT embed a method invocation.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Exceptions&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT use exceptions for normal flow control.&lt;/p&gt;
&lt;p&gt;DO NOT use &amp;ldquo;throw e;&amp;rdquo; when re-throwing, use &amp;ldquo;throw;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;DO avoid exceptions by validating pre/post conditions prior to the exception.&lt;/p&gt;
&lt;p&gt;DO derive from Exception, not ApplicationException.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;&lt;a name="_Toc318457676"&gt;&lt;/a&gt;&lt;a name="_Toc265502902"&gt;&lt;/a&gt;&lt;a name="_Toc256702187"&gt;Naming Conventions&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Consistent naming procedures applied across all the various identifier types in a project goes a long way to making code more accessible to people that use the library or join the project after you.&lt;/p&gt;
&lt;p&gt;The CLR supports both case-sensitive and case-insensitive languages. If you want to write libraries that are accessible to both types, you are restricted from on creating names that are identical except for case. Even so, appropriate and consistent capitalization
 enhances readability and comprehension of code.&lt;/p&gt;
&lt;p&gt;Capitalization is used to make identifiers more readable. There are two capitalization conventions in general use for identifier names throughout the library, PascalCase and camelCase. PascalCase capitalizes every word of the descriptive identifier whereas
 the camelCase does not capitalize the initial word of the identifier but does capitalize every word
&lt;span style="text-decoration:underline"&gt;after&lt;/span&gt; the initial one. There are some instances where a PascalCase or camelCase identifier may have a &amp;lsquo;_&amp;rsquo; or a capital &amp;lsquo;I&amp;rsquo; prefix added.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457677"&gt;&lt;/a&gt;&lt;a name="_Toc265502903"&gt;&lt;/a&gt;&lt;a name="_Toc256702188"&gt;General Naming Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;DO use PascalCasing for type and method names and constants. &lt;/li&gt;&lt;li&gt;DO use camelCasing for local variable names and method arguments. &lt;/li&gt;&lt;li&gt;DO use &amp;lsquo;I&amp;rsquo; to prefix Interface names. &lt;/li&gt;&lt;li&gt;DO NOT create names that vary only by case. &lt;/li&gt;&lt;li&gt;AVOID creating ALLCAPITALNAMES. &lt;/li&gt;&lt;li&gt;DO use easily readable, descriptive, meaningful, and specific names.
&lt;ul&gt;
&lt;li&gt;AVOID single character names. &lt;/li&gt;&lt;li&gt;AVOID Hungarian notation for public or protected members. &lt;/li&gt;&lt;li&gt;AVOID abbreviations unless the full name is really excessive. &lt;/li&gt;&lt;li&gt;AVOID adding redundant prefixes and suffixes e.g. public enum ColorsEnum {&amp;hellip;}.
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;DO name types with nouns, noun phrases, or adjective phrases using PascalCasing.
&lt;/li&gt;&lt;li&gt;CONSIDER ending the name of a derived classes with the name of the base class.
&lt;/li&gt;&lt;li&gt;DO prefix Interface names with the letter &amp;lsquo;I&amp;rsquo;, to indicate that the type is an interface.
&lt;/li&gt;&lt;li&gt;DO give methods names that are verbs or verb phrases. &lt;/li&gt;&lt;li&gt;DO name properties using a noun, noun phrase, or adjective. &lt;/li&gt;&lt;li&gt;CONSIDER giving a property the same name as its type. &lt;/li&gt;&lt;li&gt;DO name fields using a noun or noun phrase. &lt;/li&gt;&lt;li&gt;CONSIDER using common, well known acronyms, e.g. IO instead of InputOutput. &lt;/li&gt;&lt;li&gt;AVOID acronyms that are not common or widely known. &lt;/li&gt;&lt;li&gt;DO use uppercase for two-letter acronyms and PascalCase for other acronyms. It is acceptable to use &amp;ldquo;BIO&amp;rdquo; rather than &amp;ldquo;Bio&amp;rdquo; in the context of this project.
&lt;/li&gt;&lt;li&gt;CONSIDER using C# types rather than aliases in the System namespace. &lt;/li&gt;&lt;li&gt;DO use capital letters for type placeholders in generics. &lt;/li&gt;&lt;li&gt;CONSIDER prefixing Boolean variables with &amp;ldquo;Can&amp;rdquo;, &amp;ldquo;Is&amp;rdquo;, or &amp;ldquo;Has&amp;rdquo;.
&lt;/li&gt;&lt;li&gt;CONSIDER appending computational variables with the suffix &amp;ldquo;Average&amp;rdquo;, &amp;ldquo;Count&amp;rdquo;, &amp;ldquo;Sum&amp;rdquo;, &amp;ldquo;Min&amp;rdquo;, or &amp;ldquo;Max&amp;rdquo;.
&lt;/li&gt;&lt;li&gt;DO use meaningful namespaces under the &amp;ldquo;Bio&amp;rdquo; root when extending the Framework.
&lt;/li&gt;&lt;li&gt;DO use meaningful namespaces under your Product, Company, or Developer name for tools or code using the project.e.g. namespace MyCompany.MyProduct.MyNamespace;
&lt;/li&gt;&lt;/ol&gt;
&lt;h4&gt;&lt;a name="_Toc318457678"&gt;&lt;/a&gt;&lt;a name="_Toc265502904"&gt;&lt;/a&gt;&lt;a name="_Toc256702189"&gt;Coding Style and Language Usage&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Resolving issues around different coding styles can cause controversy among developers, but consistent layout, format, and organization are key attributes of maintainable code. The following guidelines describe the &amp;lsquo;preferred&amp;rsquo; way to write C#
 code in order to consistently create clear, readable, comprehensible code that you and your team members can maintain over time.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457679"&gt;&lt;/a&gt;&lt;a name="_Toc265502905"&gt;&lt;/a&gt;&lt;a name="_Toc256702190"&gt;General Style Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;DO have a single file contribute to a single namespace. &lt;/li&gt;&lt;li&gt;DO have a single class in a single source file. &lt;/li&gt;&lt;li&gt;DO group all framework &amp;ldquo;using&amp;rdquo; namespaces together before custom or third party namespaces.
&lt;/li&gt;&lt;li&gt;AVOID putting a &amp;ldquo;using&amp;rdquo; statement inside a namespace. &lt;/li&gt;&lt;li&gt;AVOID using fully qualified type names by using the &amp;ldquo;using&amp;rdquo; statement.
&lt;/li&gt;&lt;li&gt;CONSIDER grouping internal class implementation by type in the following order:
&lt;ol&gt;
&lt;li&gt;Member variables. &lt;/li&gt;&lt;li&gt;Constructors &amp;amp; Finalizers. &lt;/li&gt;&lt;li&gt;Nested enums, structs, and classes. &lt;/li&gt;&lt;li&gt;Properties &lt;/li&gt;&lt;li&gt;Methods &lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;DO explicitly declare the access modifier for all identifiers rather than relying on default.
&lt;/li&gt;&lt;li&gt;CONSIDER grouping declarations within each type by their access modifier and visibility:
&lt;ol&gt;
&lt;li&gt;public &lt;/li&gt;&lt;li&gt;protected. &lt;/li&gt;&lt;li&gt;internal &lt;/li&gt;&lt;li&gt;private &lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;DO declare all member variables as private and provide public, protected, or internal property access where required.
&lt;/li&gt;&lt;li&gt;DO declare each variable in its own statement. &lt;/li&gt;&lt;li&gt;DO use white space to organize and separate code. &lt;/li&gt;&lt;li&gt;DO maintain strict indentation of 4 spaces. DO NOT use tab characters in the documents.
&lt;/li&gt;&lt;li&gt;DO indent all code blocks contained within curly braces. &lt;/li&gt;&lt;li&gt;DO place opening curly braces ( { ) on a new line. &lt;/li&gt;&lt;li&gt;DO indent comments to the same level as the code being described. &lt;/li&gt;&lt;li&gt;DO use correct spelling, grammar, and punctuation in all comments. &lt;/li&gt;&lt;li&gt;DO use // or /// for comments. &lt;/li&gt;&lt;li&gt;AVOID /* &amp;hellip; */ for comments. &lt;/li&gt;&lt;li&gt;DO use inline comments to explain assumptions, issues, and algorithmic insights.
&lt;/li&gt;&lt;li&gt;DO NOT use comments to explain obvious code. &lt;/li&gt;&lt;li&gt;DO use Task-List keywords in comments to allow filtering e.g. &lt;br&gt;
// TODO: &lt;br&gt;
// UNDONE: &lt;/li&gt;&lt;li&gt;DO use C# comment blocks for documenting the API. &lt;/li&gt;&lt;li&gt;DO use C# comment blocks for every public, protected, and internal declaration.
&lt;/li&gt;&lt;li&gt;DO include &amp;lt;summary&amp;gt; comments. &lt;/li&gt;&lt;li&gt;DO include &amp;lt;param&amp;gt;, &amp;lt;return&amp;gt;, and &amp;lt;exception&amp;gt; comments where applicable.
&lt;/li&gt;&lt;li&gt;DO declare local variables near their first use. &lt;/li&gt;&lt;li&gt;DO initialize local variables where you declare them. &lt;/li&gt;&lt;li&gt;DO use the simplest data type, collection, or object that meets your requirements.
&lt;/li&gt;&lt;li&gt;AVOID specifying the type of an Enum. Use the default of int unless you have an explicit need for a long.
&lt;/li&gt;&lt;li&gt;DO NOT use inline numeric literals (&amp;lsquo;magic numbers&amp;rsquo;). Use Constant or Enum.
&lt;/li&gt;&lt;li&gt;AVOID declaring string literals. Use Resources, Constants, Configuration Files, Registry or other data sources.
&lt;/li&gt;&lt;/ol&gt;
&lt;h4&gt;&lt;a name="_Toc318457680"&gt;&lt;/a&gt;&lt;a name="_Toc265502906"&gt;&lt;/a&gt;&lt;a name="_Toc256702191"&gt;Library Design&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;A successful framework for biology must be designed for a broad range of developer skills and capabilities. Delivering powerful capabilities with clean, simple abstractions that can be used by the novice, while still allowing the expert to control the details
 underlying the abstraction is a challenging task.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457681"&gt;&lt;/a&gt;&lt;a name="_Toc265502907"&gt;&lt;/a&gt;&lt;a name="_Toc256702192"&gt;General Library Design Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;DO design a framework that is both powerful and easy to use. &lt;/li&gt;&lt;li&gt;DO provide a layered framework with high-level APIs optimized for productivity and low-level APIs optimized for power and expressiveness.
&lt;/li&gt;&lt;li&gt;AVOID mixing low-level and high-level APIs in a single namespace. &lt;/li&gt;&lt;li&gt;DO ensure that layers of a single feature are well integrated and complete. Developers should be able to migrate from one level to another without re-writing the entire application.
&lt;/li&gt;&lt;li&gt;DO base your design on meaningful usage scenarios. &lt;/li&gt;&lt;li&gt;DO ensure scenarios that correspond to an appropriate abstraction level. &lt;/li&gt;&lt;li&gt;DO design APIs by first writing code samples for the main scenario then defining the object model to support the code.
&lt;/li&gt;&lt;li&gt;DO organize usability studies to test API in main scenarios. &lt;/li&gt;&lt;li&gt;DO provide simple overloads of constructors and methods with a small number of primitive parameters.&amp;nbsp;
&lt;/li&gt;&lt;li&gt;DO NOT require user to explicitly instantiate more than one type in the most basic scenarios.
&lt;/li&gt;&lt;li&gt;DO provide good defaults for all properties and parameters if possible. &lt;/li&gt;&lt;li&gt;DO communicate incorrect usage of APIs using exceptions. &lt;/li&gt;&lt;li&gt;DO provide strongly typed APIs if at all possible. &lt;/li&gt;&lt;li&gt;DO NOT create circular references between assemblies. &lt;/li&gt;&lt;li&gt;CONSIDER factoring unsafe code into a separate assembly. &lt;/li&gt;&lt;li&gt;DO use zero-based indexing when developing with the Framework. &lt;/li&gt;&lt;/ol&gt;
&lt;h3&gt;&lt;a name="_Toc318457682"&gt;Azure Deployment Guidelines&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChronoZoom is powered by Windows Azure and SQL Azure. With Team Foundation Server as the source repository for ChronoZoom, there comes an added benefit of build servers. We leverage the build feature of TFS to automatically deploy packages to Azure.&lt;/p&gt;
&lt;p&gt;As part of the Engineering practice, it would be ideal to let TFS handle the deployment to Azure as part of the daily builds. Here are some advantages of doing this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Being able to build, package, and deploy our projects to multiple Windows Azure environments from a build server using MSBuild
&lt;/li&gt;&lt;li&gt;Being able to retain copies of our packages and configurations for our builds in Windows Azure BLOB Storage for safe keeping, history, easy rollback scenarios, etc.
&lt;/li&gt;&lt;li&gt;Having a build number generated for a build and make sure that build number is present in the name of our packages, configs, and deployment labels in Azure for consistency
&lt;/li&gt;&lt;li&gt;Leveraging the Release Configurations in Visual Studio as much as possible as the designation of our different environments, since Web.Config transformations rely on this pattern already
&lt;/li&gt;&lt;li&gt;Being able to still package and deploy locally, in case there is an issue with the build server for some reason
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Greater depth on the deployment can be found here - &lt;a href="http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx"&gt;
http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are some technical requirements to get setup with automatic deployment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install Windows Azure tools on build server &lt;/li&gt;&lt;li&gt;Install Windows Azure powershell cmdlets &lt;/li&gt;&lt;li&gt;Download publish settings from &lt;a href="http://windows.azure.com/downloads/publishprofile.aspx"&gt;
http://windows.azure.com/downloads/publishprofile.aspx&lt;/a&gt; &lt;/li&gt;&lt;li&gt;In MSBuild build definition setting, under process set it to /t:Publish /p:PublishDir=C:\Builds\Drops\;Configuration=DevPreview;AzurePublishProfile=&amp;lt;Your profile&amp;gt;.azurePubxml
&lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;&lt;a name="_Toc318457683"&gt;The Future of ChronoZoom&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We envision a world where scientists, researchers, students, and teachers collaborate through ChronoZoom to share information via data, tours, and insight.&lt;/p&gt;
&lt;p&gt;Imagine a world where the leading academics publish their findings to the world in a manner that can easily be accessed and compared to other data.&lt;/p&gt;
&lt;p&gt;Imagine a tool that allows teachers to generate tours specific to their classroom needs.&lt;/p&gt;
&lt;p&gt;This can happen with your support. As ChronoZoom through the beta release, we need your feedback and support to continue to mold this project to suit your needs.&lt;/p&gt;
&lt;p&gt;Help ChronoZoom evolve by taking this survey so we can provide the best possible future features:
&lt;a href="http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/"&gt;http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altermann</author><pubDate>Tue, 14 Aug 2012 12:40:38 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ChronoZoom Developer's Guide 20120814124038P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://chronozoom.codeplex.com/documentation?version=28</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Welcome to ChronoZoom &lt;br&gt;
&lt;/strong&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley and Moscow State University.&lt;/p&gt;
&lt;p&gt;You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia.&amp;nbsp;&amp;nbsp; ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively
 known as Big History.&lt;/p&gt;
&lt;p&gt;By drawing upon the latest discoveries from many different disciplines, you can visualize the temporal relationships between events, trends, and themes. Some of the disciplines that contribute information to ChronoZoom include biology, astronomy, geology,
 climatology, prehistory, archeology, anthropology, economics, cosmology, natural history, and population and environmental studies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Join the Conversation &lt;br&gt;
&lt;/strong&gt;Let us know what you think; ask questions, make comments, start a new discussion topic. You are very welcome to become an active part of this project.
&lt;a href="http://chronozoom.codeplex.com/discussions"&gt;Click here&lt;/a&gt; to join in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Further Reading &lt;br&gt;
&lt;/strong&gt;There are several documents that provide additional information about ChronoZoom:&lt;/p&gt;
&lt;p&gt;- &lt;a title="QRG" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=349121"&gt;
Quick Reference Guide &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a title="User Guide and lesson plan" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=353253"&gt;
User Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://chronozoom.codeplex.com/wikipage?title=How%20to%20be%20a%20Developer%20on%20ChronoZoom"&gt;
How To Become A Developer For The ChronoZoom Project&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- &lt;a title="Developer's Guide" href="http://chronozoom.codeplex.com/wikipage?title=ChronoZoom%20Developer%27s%20Guide"&gt;
Developer's Guide&lt;/a&gt;&amp;nbsp;&lt;span style="color:#ff0000"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a title="Architecture Guide" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=353169"&gt;
Architecture Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://download.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=392128"&gt;
Authoring ChronoZoom timelines,&amp;nbsp;exhibits, artifacts and tours&lt;/a&gt; &lt;span style="color:#ff0000"&gt;
Updated 6/20/2012&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Frequently Asked Questions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Q: Why does the animation appear slow or choppy on my Computer?&lt;/p&gt;
&lt;p&gt;A: ChronoZoom is designed to support most computers. However, on some machines, the graphics will be slower or less smooth than intended due to limited memory and processor power. ChronoZoom makes extensive use of Javascript and HTML5, so frame rate will
 depend on CPU performance.&lt;/p&gt;
&lt;p&gt;Q. Why do the graphic appear slow or fuzzy in Firefox 10.x ?&lt;/p&gt;
&lt;p&gt;A. Firefox 10.x automatically activates the hardware graphics acceleration even though many computers, including some Mac machines might not be able to properly use this functionality. We
&lt;span style="color:black"&gt;recommend &lt;/span&gt;&lt;a href="http://www.mydigitallife.info/how-to-disable-gpu-hardware-acceleration-in-firefox-4/"&gt;&lt;span style="color:black"&gt;disabling graphics hardware acceleration&lt;/span&gt;&lt;span style="color:black"&gt;.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. I am having issues viewing ChronoZoom through Chrome. Everything is very slow. What can I do?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. This is a known issue for Chrome due to the WebKit canvas performance instability.
&lt;/span&gt;&lt;a href="http://www.html5rocks.com/en/tutorials/canvas/performance/"&gt;Chrome is working on a fix for this issue on their next release.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. ChronoZoom sometimes stops working for me and I can&amp;rsquo;t figure out why.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. ChronoZoom requires network connectivity to work. Sometimes, your browser may cache information that will simulate connectivity, but when you want to access a tour or new information, it will stop without an internet connection.
 Check your internet connection if you are having issues.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. When using Firefox, I am having difficulty with tour audio. What can I do?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. This is a known issue for Firefox. This &lt;/span&gt;&lt;a href="http://kb.mozillazine.org/Mozilla_Suite_:_Issues_:_Sound"&gt;article&lt;/a&gt;&lt;span style="color:black"&gt; might be able to assist you.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>saekow</author><pubDate>Wed, 20 Jun 2012 21:14:38 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20120620091438P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://chronozoom.codeplex.com/documentation?version=27</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Welcome to ChronoZoom &lt;br&gt;
&lt;/strong&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley and Moscow State University.&lt;/p&gt;
&lt;p&gt;You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia.&amp;nbsp;&amp;nbsp; ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively
 known as Big History.&lt;/p&gt;
&lt;p&gt;By drawing upon the latest discoveries from many different disciplines, you can visualize the temporal relationships between events, trends, and themes. Some of the disciplines that contribute information to ChronoZoom include biology, astronomy, geology,
 climatology, prehistory, archeology, anthropology, economics, cosmology, natural history, and population and environmental studies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Join the Conversation &lt;br&gt;
&lt;/strong&gt;Let us know what you think; ask questions, make comments, start a new discussion topic. You are very welcome to become an active part of this project.
&lt;a href="http://chronozoom.codeplex.com/discussions"&gt;Click here&lt;/a&gt; to join in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Further Reading &lt;br&gt;
&lt;/strong&gt;There are several documents that provide additional information about ChronoZoom:&lt;/p&gt;
&lt;p&gt;- &lt;a title="QRG" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=349121"&gt;
Quick Reference Guide &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a title="User Guide and lesson plan" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=353253"&gt;
User Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://chronozoom.codeplex.com/wikipage?title=How%20to%20be%20a%20Developer%20on%20ChronoZoom"&gt;
How To Become A Developer For The ChronoZoom Project&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- &lt;a title="Developer's Guide" href="http://chronozoom.codeplex.com/wikipage?title=ChronoZoom%20Developer%27s%20Guide"&gt;
Developer's Guide&lt;/a&gt;&amp;nbsp;&lt;span style="color:#ff0000"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a title="Architecture Guide" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=353169"&gt;
Architecture Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://download.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=392127"&gt;
Authoring ChronoZoom timelines,&amp;nbsp;exhibits, artifacts and tours&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Frequently Asked Questions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Q: Why does the animation appear slow or choppy on my Computer?&lt;/p&gt;
&lt;p&gt;A: ChronoZoom is designed to support most computers. However, on some machines, the graphics will be slower or less smooth than intended due to limited memory and processor power. ChronoZoom makes extensive use of Javascript and HTML5, so frame rate will
 depend on CPU performance.&lt;/p&gt;
&lt;p&gt;Q. Why do the graphic appear slow or fuzzy in Firefox 10.x ?&lt;/p&gt;
&lt;p&gt;A. Firefox 10.x automatically activates the hardware graphics acceleration even though many computers, including some Mac machines might not be able to properly use this functionality. We
&lt;span style="color:black"&gt;recommend &lt;/span&gt;&lt;a href="http://www.mydigitallife.info/how-to-disable-gpu-hardware-acceleration-in-firefox-4/"&gt;&lt;span style="color:black"&gt;disabling graphics hardware acceleration&lt;/span&gt;&lt;span style="color:black"&gt;.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. I am having issues viewing ChronoZoom through Chrome. Everything is very slow. What can I do?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. This is a known issue for Chrome due to the WebKit canvas performance instability.
&lt;/span&gt;&lt;a href="http://www.html5rocks.com/en/tutorials/canvas/performance/"&gt;Chrome is working on a fix for this issue on their next release.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. ChronoZoom sometimes stops working for me and I can&amp;rsquo;t figure out why.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. ChronoZoom requires network connectivity to work. Sometimes, your browser may cache information that will simulate connectivity, but when you want to access a tour or new information, it will stop without an internet connection.
 Check your internet connection if you are having issues.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. When using Firefox, I am having difficulty with tour audio. What can I do?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. This is a known issue for Firefox. This &lt;/span&gt;&lt;a href="http://kb.mozillazine.org/Mozilla_Suite_:_Issues_:_Sound"&gt;article&lt;/a&gt;&lt;span style="color:black"&gt; might be able to assist you.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>saekow</author><pubDate>Wed, 20 Jun 2012 21:13:52 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20120620091352P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://chronozoom.codeplex.com/documentation?version=26</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Welcome to ChronoZoom &lt;br&gt;
&lt;/strong&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley and Moscow State University.&lt;/p&gt;
&lt;p&gt;You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia.&amp;nbsp;&amp;nbsp; ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively
 known as Big History.&lt;/p&gt;
&lt;p&gt;By drawing upon the latest discoveries from many different disciplines, you can visualize the temporal relationships between events, trends, and themes. Some of the disciplines that contribute information to ChronoZoom include biology, astronomy, geology,
 climatology, prehistory, archeology, anthropology, economics, cosmology, natural history, and population and environmental studies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Join the Conversation &lt;br&gt;
&lt;/strong&gt;Let us know what you think; ask questions, make comments, start a new discussion topic. You are very welcome to become an active part of this project.
&lt;a href="http://chronozoom.codeplex.com/discussions"&gt;Click here&lt;/a&gt; to join in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Further Reading &lt;br&gt;
&lt;/strong&gt;There are several documents that provide additional information about ChronoZoom:&lt;/p&gt;
&lt;p&gt;- &lt;a title="QRG" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=349121"&gt;
Quick Reference Guide &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a title="User Guide and lesson plan" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=353253"&gt;
User Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://chronozoom.codeplex.com/wikipage?title=How%20to%20be%20a%20Developer%20on%20ChronoZoom"&gt;
How To Become A Developer For The ChronoZoom Project&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- &lt;a title="Developer's Guide" href="http://chronozoom.codeplex.com/wikipage?title=ChronoZoom%20Developer%27s%20Guide"&gt;
Developer's Guide&lt;/a&gt;&amp;nbsp;&lt;span style="color:#ff0000"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a title="Architecture Guide" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=353169"&gt;
Architecture Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://download.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=392127"&gt;
Authoring ChronoZoom timelines,&amp;nbsp;exhibits, artifacts and tours&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Frequently Asked Questions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Q: Why does the animation appear slow or choppy on my Computer?&lt;/p&gt;
&lt;p&gt;A: ChronoZoom is designed to support most computers. However, on some machines, the graphics will be slower or less smooth than intended due to limited memory and processor power. ChronoZoom makes extensive use of Javascript and HTML5, so frame rate will
 depend on CPU performance.&lt;/p&gt;
&lt;p&gt;Q. Why do the graphic appear slow or fuzzy in Firefox 10.x ?&lt;/p&gt;
&lt;p&gt;A. Firefox 10.x automatically activates the hardware graphics acceleration even though many computers, including some Mac machines might not be able to properly use this functionality. We
&lt;span style="color:black"&gt;recommend &lt;/span&gt;&lt;a href="http://www.mydigitallife.info/how-to-disable-gpu-hardware-acceleration-in-firefox-4/"&gt;&lt;span style="color:black"&gt;disabling graphics hardware acceleration&lt;/span&gt;&lt;span style="color:black"&gt;.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. I am having issues viewing ChronoZoom through Chrome. Everything is very slow. What can I do?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. This is a known issue for Chrome due to the WebKit canvas performance instability.
&lt;/span&gt;&lt;a href="http://www.html5rocks.com/en/tutorials/canvas/performance/"&gt;Chrome is working on a fix for this issue on their next release.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. ChronoZoom sometimes stops working for me and I can&amp;rsquo;t figure out why.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. ChronoZoom requires network connectivity to work. Sometimes, your browser may cache information that will simulate connectivity, but when you want to access a tour or new information, it will stop without an internet connection.
 Check your internet connection if you are having issues.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. When using Firefox, I am having difficulty with tour audio. What can I do?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. This is a known issue for Firefox. This &lt;/span&gt;&lt;a href="http://kb.mozillazine.org/Mozilla_Suite_:_Issues_:_Sound"&gt;article&lt;/a&gt;&lt;span style="color:black"&gt; might be able to assist you.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>saekow</author><pubDate>Wed, 20 Jun 2012 21:12:28 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20120620091228P</guid></item><item><title>Updated Wiki: Documentation</title><link>https://chronozoom.codeplex.com/documentation?version=25</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Welcome to ChronoZoom &lt;br&gt;
&lt;/strong&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley and Moscow State University.&lt;/p&gt;
&lt;p&gt;You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia.&amp;#160;&amp;#160; ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively
 known as Big History.&lt;/p&gt;
&lt;p&gt;By drawing upon the latest discoveries from many different disciplines, you can visualize the temporal relationships between events, trends, and themes. Some of the disciplines that contribute information to ChronoZoom include biology, astronomy, geology,
 climatology, prehistory, archeology, anthropology, economics, cosmology, natural history, and population and environmental studies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Join the Conversation &lt;br&gt;
&lt;/strong&gt;Let us know what you think; ask questions, make comments, start a new discussion topic. You are very welcome to become an active part of this project.
&lt;a href="http://chronozoom.codeplex.com/discussions"&gt;Click here&lt;/a&gt; to join in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Further Reading &lt;br&gt;
&lt;/strong&gt;There are several documents that provide additional information about ChronoZoom:&lt;/p&gt;
&lt;p&gt;- &lt;a title="QRG" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=349121"&gt;
Quick Reference Guide &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a title="User Guide and lesson plan" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=353253"&gt;
User Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://chronozoom.codeplex.com/wikipage?title=How%20to%20be%20a%20Developer%20on%20ChronoZoom"&gt;
How To Become A Developer For The ChronoZoom Project&lt;/a&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;- &lt;a title="Developer's Guide" href="http://chronozoom.codeplex.com/wikipage?title=ChronoZoom%20Developer%27s%20Guide"&gt;
Developer's Guide&lt;/a&gt;&amp;#160;&lt;span style="color:#ff0000"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a title="Architecture Guide" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=353169"&gt;
Architecture Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://download.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=387826"&gt;
Authoring ChronoZoom timelines, content items, and exhibits&lt;/a&gt;&amp;#160;&lt;strong&gt;&lt;font color="#ff0000"&gt;New 6/7/2012&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#160;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Frequently Asked Questions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Q: Why does the animation appear slow or choppy on my Computer?&lt;/p&gt;
&lt;p&gt;A: ChronoZoom is designed to support most computers. However, on some machines, the graphics will be slower or less smooth than intended due to limited memory and processor power. ChronoZoom makes extensive use of Javascript and HTML5, so frame rate will
 depend on CPU performance.&lt;/p&gt;
&lt;p&gt;Q. Why do the graphic appear slow or fuzzy in Firefox 10.x ?&lt;/p&gt;
&lt;p&gt;A. Firefox 10.x automatically activates the hardware graphics acceleration even though many computers, including some Mac machines might not be able to properly use this functionality. We
&lt;span style="color:black"&gt;recommend &lt;/span&gt;&lt;a href="http://www.mydigitallife.info/how-to-disable-gpu-hardware-acceleration-in-firefox-4/"&gt;&lt;span style="color:black"&gt;disabling graphics hardware acceleration&lt;/span&gt;&lt;span style="color:black"&gt;.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. I am having issues viewing ChronoZoom through Chrome. Everything is very slow. What can I do?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. This is a known issue for Chrome due to the WebKit canvas performance instability.
&lt;/span&gt;&lt;a href="http://www.html5rocks.com/en/tutorials/canvas/performance/"&gt;Chrome is working on a fix for this issue on their next release.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. ChronoZoom sometimes stops working for me and I can’t figure out why.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. ChronoZoom requires network connectivity to work. Sometimes, your browser may cache information that will simulate connectivity, but when you want to access a tour or new information, it will stop without an internet connection.
 Check your internet connection if you are having issues.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. When using Firefox, I am having difficulty with tour audio. What can I do?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. This is a known issue for Firefox. This &lt;/span&gt;&lt;a href="http://kb.mozillazine.org/Mozilla_Suite_:_Issues_:_Sound"&gt;article&lt;/a&gt;&lt;span style="color:black"&gt; might be able to assist you.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bobwalter</author><pubDate>Thu, 07 Jun 2012 20:33:21 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20120607083321P</guid></item><item><title>Updated Wiki: ChronoZoom Developer's Guide</title><link>https://chronozoom.codeplex.com/wikipage?title=ChronoZoom Developer's Guide&amp;version=7</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;&lt;span style="color:#808080"&gt;&lt;strong&gt;Note: &lt;/strong&gt;As of 4/7/2012 this guide was revised. The code base was also modified to support easier adoption. If you downloaded the source code before 4/7/2012, please download again if you plan to use this guide.
 A new sql script has been submitted (4/25/2012) that eliminates the&amp;#160; large number of empty timelines.&lt;/span&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;a name="_Toc318457665"&gt;&lt;/a&gt;&lt;a name="_Toc318452320"&gt;Disclaimer&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This document is provided “as-is”. Information and views expressed in this document, including URL and other Internet Web site references, may change without notice. You bear the risk of using it.&lt;/p&gt;
&lt;p&gt;This document does not provide you with any legal rights to any intellectual property in any Microsoft product. You may copy and use this document for your internal, reference purposes.&lt;/p&gt;
&lt;p&gt;© 2012 The Outercurve Foundation.&lt;/p&gt;
&lt;p&gt;Distributed under Creative Commons Attribution 3.0 Unported License.&lt;/p&gt;
&lt;p&gt;Microsoft, Visual Studio, and Windows are trademarks of Microsoft, Inc. All other trademarks are property of their respective owners.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457666"&gt;Introduction&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley and Moscow State University.&lt;/p&gt;
&lt;p&gt;You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia. ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively known as Big
 History.&lt;/p&gt;
&lt;p&gt;This guide is designed to walk developers through the installation process. Some of the APIs for ChronoZoom are not yet available for the public.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457667"&gt;Prerequisites&lt;/a&gt;&lt;/h3&gt;
&lt;h5&gt;&lt;a name="_Toc318457668"&gt;Hardware Requirements:&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;· A computer that can run Visual Studio 2010.&lt;/p&gt;
&lt;p&gt;· Optionally, a network connection for the content links.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457669"&gt;Software Requirements:&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;· Visual Studio 2010 with Service Pack 1 (Check “Help” and “About” to determine if you have SP1 installed. If you don’t, you can get it
&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=23691"&gt;here&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;· Installation of Azure SDK (.net)&lt;/p&gt;
&lt;p&gt;o Recommend installing from this page: &lt;a href="http://www.windowsazure.com/en-us/develop/downloads/"&gt;
http://www.windowsazure.com/en-us/develop/downloads/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;· SQL Data Tools (Click this link to begin download &lt;a href="http://www.microsoft.com/web/gallery/install.aspx?appid=SSDT"&gt;
SQL Data Tools&lt;/a&gt;) Service pack 2 of Visual Studio must be installed before you attempt this install.&lt;/p&gt;
&lt;p&gt;· SQL Server 2008 or later Standard, Express, Developer, or Enterprise Edition&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457670"&gt;Project setup instructions&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Here are the steps to get the source code and prepare for execution:&lt;/p&gt;
&lt;p&gt;1. Download the code as zip file from Codeplex at http://chronozoom.codeplex.com/&lt;/p&gt;
&lt;p&gt;2. Extract the zip into a folder.&lt;/p&gt;
&lt;p&gt;3. Open the chronozoom.sln under the source folder (double-click on the file in windows explorer).&lt;/p&gt;
&lt;p&gt;4. Right-click the Chronozoom.Database in Visual Studio Solution Explorer and click
&lt;strong&gt;Publish.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;5. In the dialog box, select the target database connection string to deploy to.&lt;/p&gt;
&lt;p&gt;6. Click Publish.&lt;/p&gt;
&lt;p&gt;7. In the chronozoom.UI project, under the scripts folder, locate the cz.settings.js&lt;/p&gt;
&lt;p&gt;8. Replace current value of this with contentItemThumbnailBaseUri = 'http://127.0.0.1:10000/devstoreaccount1/images/';&lt;/p&gt;
&lt;p&gt;a. Replace the text [Your domain] in the chronozoom.svc.cs file with localhost:4949 address. Also replace [Your domain] in “var req= WebRequest.Create”&lt;/p&gt;
&lt;p&gt;9. Replace the text [Your domain] in the ChronozoomRelay.cs file with localhost:4949&lt;/p&gt;
&lt;p&gt;10. Connect ChronoZoom to the database in the Chronozoom UI project, edit web.config&lt;/p&gt;
&lt;p&gt;a. Go to server explorer&lt;/p&gt;
&lt;p&gt;b. Add connection to the database we published before&lt;/p&gt;
&lt;p&gt;c. Right clicked on the newly selected connection&lt;/p&gt;
&lt;p&gt;d. Select properties&lt;/p&gt;
&lt;p&gt;e. Copy connection string from the properties&lt;/p&gt;
&lt;p&gt;f. Paste into Web.config “data source = {insert your data source and add “;”&lt;/p&gt;
&lt;p&gt;11. Now go to the Authoring.Azure project and edit Web.config&lt;/p&gt;
&lt;p&gt;a. Find connection string and inster the data source as before.&lt;/p&gt;
&lt;p&gt;12. Configure thumbnail generation&lt;/p&gt;
&lt;p&gt;a. Under ThumbGenApp open app.config&lt;/p&gt;
&lt;p&gt;b. Change [add your connection string here] to the connection string you got above.&lt;/p&gt;
&lt;p&gt;c. Change [add your blob url here] to 'http://127.0.0.1:10000/devstoreaccount1/images/'&lt;/p&gt;
&lt;p&gt;d. Change [add your azure connection string] to “UseDevelopmentStorage=true”&lt;/p&gt;
&lt;p&gt;e. Build under configuration “Dev Preview” for platform “X86”&lt;/p&gt;
&lt;p&gt;13. Set ChronoZoom.UI as the startup project. Right click on Chronozoom.UI project and select “set as startup project”. To run authoring tools:&lt;/p&gt;
&lt;p&gt;a. Set Authoring.Azure as startup project.&lt;/p&gt;
&lt;p&gt;b. Run. Login as “admin” password:”admin$”&lt;/p&gt;
&lt;p&gt;14. Right click on cz.htm and select “Set as startup page” You may get a storage emulator error. If so, please see
&lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/gg433134.aspx"&gt;http://msdn.microsoft.com/en-us/library/windowsazure/gg433134.aspx&lt;/a&gt; for an easy fix&lt;/p&gt;
&lt;p&gt;15. Run and execute. &lt;a name="_Toc318457671"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;16. To generate thumbnails (required after adding content items) set ThumbGenApp as startup project.&lt;/p&gt;
&lt;h4&gt;How to Submit Code to the Project&lt;/h4&gt;
&lt;p&gt;After you have completed the code you want to add to the project, there are a few steps to follow to get your submission to the project team:&lt;/p&gt;
&lt;p&gt;1. &lt;strong&gt;Document the code &lt;/strong&gt;Comment code so that testers and future developers will clearly understand what you have done. It is recommended to create a unit test to cover the fixed functionality and include it in the appropriate test project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. &lt;/strong&gt;&lt;strong&gt;Create a zipped file with your changed code&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a. &lt;/strong&gt;Include any source files that have your changes. &lt;strong&gt;Please surround your changes/additions with comments that clearly explain what you are doing.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b. &lt;/strong&gt;Provide a document that explains what you did and how it works.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. &lt;/strong&gt;&lt;strong&gt;Submit your changes on Codeplex:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;i. &lt;/strong&gt;Click “Submit a patch” on the &lt;a href="http://chronozoom.codeplex.com/SourceControl/list/changesets"&gt;
chronozoom.codeplex.com&lt;/a&gt; site.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ii. &lt;/strong&gt;On the “Upload a Patch” page, use the the “Browse” button to find your zipped file.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iii. &lt;/strong&gt;In the description box, describe your patch, suggest a unit test if your can.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iv. &lt;/strong&gt;Please note the work item that this patch fixes&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;v. &lt;/strong&gt;Click Submit.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Coding Guidelines&lt;/h3&gt;
&lt;p&gt;One of the key components to delivering that higher productivity is by providing a consistent approach to the programming model and stylistic conventions used throughout the development of the project. Consistency reduces distractions and surprises.&lt;/p&gt;
&lt;p&gt;Our intent is to follow the guidelines laid out by the designers of the .NET Framework class library as detailed in the book
&lt;em&gt;&amp;quot;Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries&amp;quot;&lt;/em&gt; by Krzysztof Cwalina and Brad Abrams, published by Addison-Wesley in 2005 and described in the MSDN documentation delivered with Visual Studio (found
 online &lt;a href="http://msdn.microsoft.com/en-us/library/ms229042(VS.100).aspx"&gt;here&lt;/a&gt;). While we principally follow the guidelines above, conversations and styles from many other projects and developers have had influence on this document.&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc265502898"&gt;&lt;/a&gt;&lt;a name="_Toc256702183"&gt;&lt;/a&gt;&lt;a name="_Toc318457672"&gt;Coding Conventions&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;&lt;a name="_Toc318457673"&gt;Document Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Just as writing code in a consistent style makes the code easier to read, this document uses words and formatting to ensure clarity and comprehension. The conventions used herein are recommendations and should be followed in most situations; however, we
 recognized that there are situations we may not be able to anticipate. Thus our recommendations are stated with a ‘strength’ context verb to help you decide how to apply them in your situation. Our terminology is consistent with the Framework Design Guidelines.&lt;/p&gt;
&lt;p&gt;Our strongest recommendations are &lt;strong&gt;DO&lt;/strong&gt; and &lt;strong&gt;DO NOT&lt;/strong&gt;.
&lt;strong&gt;DO&lt;/strong&gt; and &lt;strong&gt;DO NOT&lt;/strong&gt; recommendations should be followed 99.999% of the time to obtain the benefits of a consistent coding style. For example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DO&lt;/strong&gt; use descriptive parameter names.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DO NOT&lt;/strong&gt; require user to explicitly instantiate more than one type in the most basic scenarios.&lt;/p&gt;
&lt;p&gt;Our general recommendations are &lt;strong&gt;CONSIDER&lt;/strong&gt; and &lt;strong&gt;AVOID&lt;/strong&gt;. These guidelines should generally be followed, but we are aware of circumstances where they may not make sense. If you understand the reasoning for the general recommendation
 and you fully understand your situation and the reasons you need to violate the recommendation are clear, then go ahead. For example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CONSIDER&lt;/strong&gt; defining interfaces to achieve a similar effect to that of multiple inheritances.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AVOID&lt;/strong&gt; using out or ref parameters.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457674"&gt;&lt;/a&gt;&lt;a name="_Toc265502900"&gt;&lt;/a&gt;&lt;a name="_Toc256702185"&gt;Naming Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;&lt;strong&gt;Identifier&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;&lt;strong&gt;Public&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;&lt;strong&gt;Protected&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;&lt;strong&gt;Internal&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;&lt;strong&gt;Private&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Project File&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;DO match Assembly and Namespace.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Source File&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;DO match Class name.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Namespace&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;DO use Project/Assembly name.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Class or Struct&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;CONSIDER adding suffix of sub-class.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Interface&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;DO prefix Interfaces with capital I.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Generic Class&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;DO use T or K as type identifier.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Method&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;CONSIDER using Verb or Verb-Object pair.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Property&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;DO NOT prefix with Get or Set.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Field&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;AVOID use of public Fields.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Static Field&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;&amp;#160;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Constant&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;&amp;#160;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Enum&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;&amp;#160;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Delegate&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;&amp;#160;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Event&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;&amp;#160;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Local variable&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;&amp;#160;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Parameter&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;&amp;#160;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;&lt;a name="_Toc318457675"&gt;&lt;/a&gt;&lt;a name="_Toc265502901"&gt;&lt;/a&gt;&lt;a name="_Toc256702186"&gt;Coding Style and Language Usage Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;&lt;strong&gt;Coding Style Issue&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;&lt;strong&gt;Style Guideline&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Source Files&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;DO have only one Namespace and one Class per file.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Curly Braces&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;DO have braces on a new line.&lt;/p&gt;
&lt;p&gt;DO use a brace, even if syntactically optional.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Indentation&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;Do indent is 4 and convert tabs to spaces.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Comments&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;Do use // or ///.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Native Data Types&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;DO use built-in C# data types.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Enums&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;AVOID changing the default type.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Generics&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;CONSIDER generic types before standard or strong-typed classes.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Methods&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;AVOID large parameter lists (over 7). Use an array or object instead.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;foreach&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;DO NOT modify enumerated objects within the body of the foreach loop.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Conditionals&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;DO NOT test against true or false.&lt;/p&gt;
&lt;p&gt;DO NOT embed code with side effects within a conditional.&lt;/p&gt;
&lt;p&gt;DO NOT embed an assignment.&lt;/p&gt;
&lt;p&gt;DO NOT embed a method invocation.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Exceptions&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;DO NOT use exceptions for normal flow control.&lt;/p&gt;
&lt;p&gt;DO NOT use “throw e;” when re-throwing, use “throw;”.&lt;/p&gt;
&lt;p&gt;DO avoid exceptions by validating pre/post conditions prior to the exception.&lt;/p&gt;
&lt;p&gt;DO derive from Exception, not ApplicationException.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;&lt;a name="_Toc318457676"&gt;&lt;/a&gt;&lt;a name="_Toc265502902"&gt;&lt;/a&gt;&lt;a name="_Toc256702187"&gt;Naming Conventions&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Consistent naming procedures applied across all the various identifier types in a project goes a long way to making code more accessible to people that use the library or join the project after you.&lt;/p&gt;
&lt;p&gt;The CLR supports both case-sensitive and case-insensitive languages. If you want to write libraries that are accessible to both types, you are restricted from on creating names that are identical except for case. Even so, appropriate and consistent capitalization
 enhances readability and comprehension of code.&lt;/p&gt;
&lt;p&gt;Capitalization is used to make identifiers more readable. There are two capitalization conventions in general use for identifier names throughout the library, PascalCase and camelCase. PascalCase capitalizes every word of the descriptive identifier whereas
 the camelCase does not capitalize the initial word of the identifier but does capitalize every word
&lt;span style="text-decoration:underline"&gt;after&lt;/span&gt; the initial one. There are some instances where a PascalCase or camelCase identifier may have a ‘_’ or a capital ‘I’ prefix added.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457677"&gt;&lt;/a&gt;&lt;a name="_Toc265502903"&gt;&lt;/a&gt;&lt;a name="_Toc256702188"&gt;General Naming Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO use PascalCasing for type and method names and constants.&lt;/p&gt;
&lt;p&gt;2. DO use camelCasing for local variable names and method arguments.&lt;/p&gt;
&lt;p&gt;3. DO use ‘I’ to prefix Interface names.&lt;/p&gt;
&lt;p&gt;4. DO NOT create names that vary only by case.&lt;/p&gt;
&lt;p&gt;5. AVOID creating ALLCAPITALNAMES.&lt;/p&gt;
&lt;p&gt;6. DO use easily readable, descriptive, meaningful, and specific names.&lt;/p&gt;
&lt;p&gt;a. AVOID single character names.&lt;/p&gt;
&lt;p&gt;b. AVOID Hungarian notation for public or protected members.&lt;/p&gt;
&lt;p&gt;c. AVOID abbreviations unless the full name is really excessive.&lt;/p&gt;
&lt;p&gt;d. AVOID adding redundant prefixes and suffixes e.g. public enum ColorsEnum {…}.&lt;/p&gt;
&lt;p&gt;7. DO name types with nouns, noun phrases, or adjective phrases using PascalCasing.&lt;/p&gt;
&lt;p&gt;8. CONSIDER ending the name of a derived classes with the name of the base class.&lt;/p&gt;
&lt;p&gt;9. DO prefix Interface names with the letter ‘I’, to indicate that the type is an interface.&lt;/p&gt;
&lt;p&gt;10. DO give methods names that are verbs or verb phrases.&lt;/p&gt;
&lt;p&gt;11. DO name properties using a noun, noun phrase, or adjective.&lt;/p&gt;
&lt;p&gt;12. CONSIDER giving a property the same name as its type.&lt;/p&gt;
&lt;p&gt;13. DO name fields using a noun or noun phrase.&lt;/p&gt;
&lt;p&gt;14. CONSIDER using common, well known acronyms, e.g. IO instead of InputOutput.&lt;/p&gt;
&lt;p&gt;15. AVOID acronyms that are not common or widely known.&lt;/p&gt;
&lt;p&gt;16. DO use uppercase for two-letter acronyms and PascalCase for other acronyms. It is acceptable to use “BIO” rather than “Bio” in the context of this project.&lt;/p&gt;
&lt;p&gt;17. CONSIDER using C# types rather than aliases in the System namespace.&lt;/p&gt;
&lt;p&gt;18. DO use capital letters for type placeholders in generics.&lt;/p&gt;
&lt;p&gt;19. CONSIDER prefixing Boolean variables with “Can”, “Is”, or “Has”.&lt;/p&gt;
&lt;p&gt;20. CONSIDER appending computational variables with the suffix “Average”, “Count”, “Sum”, “Min”, or “Max”.&lt;/p&gt;
&lt;p&gt;21. DO use meaningful namespaces under the “Bio” root when extending the Framework.&lt;/p&gt;
&lt;p&gt;22. DO use meaningful namespaces under your Product, Company, or Developer name for tools or code using the project.e.g. namespace MyCompany.MyProduct.MyNamespace;&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc318457678"&gt;&lt;/a&gt;&lt;a name="_Toc265502904"&gt;&lt;/a&gt;&lt;a name="_Toc256702189"&gt;Coding Style and Language Usage&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Resolving issues around different coding styles can cause controversy among developers, but consistent layout, format, and organization are key attributes of maintainable code. The following guidelines describe the ‘preferred’ way to write C# code in order
 to consistently create clear, readable, comprehensible code that you and your team members can maintain over time.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457679"&gt;&lt;/a&gt;&lt;a name="_Toc265502905"&gt;&lt;/a&gt;&lt;a name="_Toc256702190"&gt;General Style Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO have a single file contribute to a single namespace.&lt;/p&gt;
&lt;p&gt;2. DO have a single class in a single source file.&lt;/p&gt;
&lt;p&gt;3. DO group all framework “using” namespaces together before custom or third party namespaces.&lt;/p&gt;
&lt;p&gt;4. AVOID putting a “using” statement inside a namespace.&lt;/p&gt;
&lt;p&gt;5. AVOID using fully qualified type names by using the “using” statement.&lt;/p&gt;
&lt;p&gt;6. CONSIDER grouping internal class implementation by type in the following order:&lt;/p&gt;
&lt;p&gt;a. Member variables.&lt;/p&gt;
&lt;p&gt;b. Constructors &amp;amp; Finalizers.&lt;/p&gt;
&lt;p&gt;c. Nested enums, structs, and classes.&lt;/p&gt;
&lt;p&gt;d. Properties&lt;/p&gt;
&lt;p&gt;e. Methods&lt;/p&gt;
&lt;p&gt;7. DO explicitly declare the access modifier for all identifiers rather than relying on default.&lt;/p&gt;
&lt;p&gt;8. CONSIDER grouping declarations within each type by their access modifier and visibility:&lt;/p&gt;
&lt;p&gt;a. public&lt;/p&gt;
&lt;p&gt;b. protected&lt;/p&gt;
&lt;p&gt;c. internal&lt;/p&gt;
&lt;p&gt;d. private&lt;/p&gt;
&lt;p&gt;9. DO declare all member variables as private and provide public, protected, or internal property access where required.&lt;/p&gt;
&lt;p&gt;10. DO declare each variable in its own statement.&lt;/p&gt;
&lt;p&gt;11. DO use white space to organize and separate code.&lt;/p&gt;
&lt;p&gt;12. DO maintain strict indentation of 4 spaces. DO NOT use tab characters in the documents.&lt;/p&gt;
&lt;p&gt;13. DO indent all code blocks contained within curly braces.&lt;/p&gt;
&lt;p&gt;14. DO place opening curly braces ( { ) on a new line.&lt;/p&gt;
&lt;p&gt;15. DO indent comments to the same level as the code being described.&lt;/p&gt;
&lt;p&gt;16. DO use correct spelling, grammar, and punctuation in all comments.&lt;/p&gt;
&lt;p&gt;17. DO use // or /// for comments.&lt;/p&gt;
&lt;p&gt;18. AVOID /* … */ for comments.&lt;/p&gt;
&lt;p&gt;19. DO use inline comments to explain assumptions, issues, and algorithmic insights.&lt;/p&gt;
&lt;p&gt;20. DO NOT use comments to explain obvious code.&lt;/p&gt;
&lt;p&gt;21. DO use Task-List keywords in comments to allow filtering e.g. &lt;br&gt;
// TODO: &lt;br&gt;
// UNDONE:&lt;/p&gt;
&lt;p&gt;22. DO use C# comment blocks for documenting the API.&lt;/p&gt;
&lt;p&gt;23. DO use C# comment blocks for every public, protected, and internal declaration.&lt;/p&gt;
&lt;p&gt;24. DO include &amp;lt;summary&amp;gt; comments.&lt;/p&gt;
&lt;p&gt;25. DO include &amp;lt;param&amp;gt;, &amp;lt;return&amp;gt;, and &amp;lt;exception&amp;gt; comments where applicable.&lt;/p&gt;
&lt;p&gt;26. DO declare local variables near their first use.&lt;/p&gt;
&lt;p&gt;27. DO initialize local variables where you declare them.&lt;/p&gt;
&lt;p&gt;28. DO use the simplest data type, collection, or object that meets your requirements.&lt;/p&gt;
&lt;p&gt;29. AVOID specifying the type of an Enum. Use the default of int unless you have an explicit need for a long.&lt;/p&gt;
&lt;p&gt;30. DO NOT use inline numeric literals (‘magic numbers’). Use Constant or Enum.&lt;/p&gt;
&lt;p&gt;31. AVOID declaring string literals. Use Resources, Constants, Configuration Files, Registry or other data sources.&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc318457680"&gt;&lt;/a&gt;&lt;a name="_Toc265502906"&gt;&lt;/a&gt;&lt;a name="_Toc256702191"&gt;Library Design&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;A successful framework for biology must be designed for a broad range of developer skills and capabilities. Delivering powerful capabilities with clean, simple abstractions that can be used by the novice, while still allowing the expert to control the details
 underlying the abstraction is a challenging task.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457681"&gt;&lt;/a&gt;&lt;a name="_Toc265502907"&gt;&lt;/a&gt;&lt;a name="_Toc256702192"&gt;General Library Design Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO design a framework that is both powerful and easy to use.&lt;/p&gt;
&lt;p&gt;2. DO provide a layered framework with high-level APIs optimized for productivity and low-level APIs optimized for power and expressiveness.&lt;/p&gt;
&lt;p&gt;3. AVOID mixing low-level and high-level APIs in a single namespace.&lt;/p&gt;
&lt;p&gt;4. DO ensure that layers of a single feature are well integrated and complete. Developers should be able to migrate from one level to another without re-writing the entire application.&lt;/p&gt;
&lt;p&gt;5. DO base your design on meaningful usage scenarios.&lt;/p&gt;
&lt;p&gt;6. DO ensure scenarios that correspond to an appropriate abstraction level.&lt;/p&gt;
&lt;p&gt;7. DO design APIs by first writing code samples for the main scenario then defining the object model to support the code.&lt;/p&gt;
&lt;p&gt;8. DO organize usability studies to test API in main scenarios.&lt;/p&gt;
&lt;p&gt;9. DO provide simple overloads of constructors and methods with a small number of primitive parameters.&lt;/p&gt;
&lt;p&gt;10. DO NOT require user to explicitly instantiate more than one type in the most basic scenarios.&lt;/p&gt;
&lt;p&gt;11. DO provide good defaults for all properties and parameters if possible.&lt;/p&gt;
&lt;p&gt;12. DO communicate incorrect usage of APIs using exceptions.&lt;/p&gt;
&lt;p&gt;13. DO provide strongly typed APIs if at all possible.&lt;/p&gt;
&lt;p&gt;14. DO NOT create circular references between assemblies.&lt;/p&gt;
&lt;p&gt;15. CONSIDER factoring unsafe code into a separate assembly.&lt;/p&gt;
&lt;p&gt;16. DO use zero-based indexing when developing with the Framework.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457682"&gt;Azure Deployment Guidelines&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChronoZoom is powered by Windows Azure and SQL Azure. With Team Foundation Server as the source repository for ChronoZoom, there comes an added benefit of build servers. We leverage the build feature of TFS to automatically deploy packages to Azure.&lt;/p&gt;
&lt;p&gt;As part of the Engineering practice, it would be ideal to let TFS handle the deployment to Azure as part of the daily builds. Here are some advantages of doing this:&lt;/p&gt;
&lt;p&gt;· Being able to build, package, and deploy our projects to multiple Windows Azure environments from a build server using MSBuild&lt;/p&gt;
&lt;p&gt;· Being able to retain copies of our packages and configurations for our builds in Windows Azure BLOB Storage for safe keeping, history, easy rollback scenarios, etc.&lt;/p&gt;
&lt;p&gt;· Having a build number generated for a build and make sure that build number is present in the name of our packages, configs, and deployment labels in Azure for consistency&lt;/p&gt;
&lt;p&gt;· Leveraging the Release Configurations in Visual Studio as much as possible as the designation of our different environments, since Web.Config transformations rely on this pattern already&lt;/p&gt;
&lt;p&gt;· Being able to still package and deploy locally, in case there is an issue with the build server for some reason&lt;/p&gt;
&lt;p&gt;Greater depth on the deployment can be found here - &lt;a href="http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx"&gt;
http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are some technical requirements to get setup with automatic deployment:&lt;/p&gt;
&lt;p&gt;· Install Windows Azure tools on build server&lt;/p&gt;
&lt;p&gt;· Install Windows Azure powershell cmdlets&lt;/p&gt;
&lt;p&gt;· Download publish settings from &lt;a href="http://windows.azure.com/downloads/publishprofile.aspx"&gt;
http://windows.azure.com/downloads/publishprofile.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;· In MSBuild build definition setting, under process set it to&lt;/p&gt;
&lt;p&gt;o /t:Publish /p:PublishDir=C:\Builds\Drops\;Configuration=DevPreview;AzurePublishProfile=&amp;lt;Your profile&amp;gt;.azurePubxml&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457683"&gt;The Future of ChronoZoom&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We envision a world where scientists, researchers, students, and teachers collaborate through ChronoZoom to share information via data, tours, and insight.&lt;/p&gt;
&lt;p&gt;Imagine a world where the leading academics publish their findings to the world in a manner that can easily be accessed and compared to other data.&lt;/p&gt;
&lt;p&gt;Imagine a tool that allows teachers to generate tours specific to their classroom needs.&lt;/p&gt;
&lt;p&gt;This can happen with your support. As ChronoZoom through the beta release, we need your feedback and support to continue to mold this project to suit your needs.&lt;/p&gt;
&lt;p&gt;Help ChronoZoom evolve by taking this survey so we can provide the best possible future features:
&lt;a href="http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/"&gt;http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bobwalter</author><pubDate>Mon, 30 Apr 2012 21:30:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ChronoZoom Developer's Guide 20120430093001P</guid></item><item><title>Updated Wiki: ChronoZoom Developer's Guide</title><link>http://chronozoom.codeplex.com/wikipage?title=ChronoZoom Developer's Guide&amp;version=6</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;&lt;span style="color:#808080"&gt;&lt;strong&gt;Note: &lt;/strong&gt;As of 4/7/2012 this guide was revised. The code base was also modified to support easier adoption. If you downloaded the source code before 4/7/2012, please download again if you plan to use this guide.&lt;/span&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;a name="_Toc318457665"&gt;&lt;/a&gt;&lt;a name="_Toc318452320"&gt;Disclaimer&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This document is provided &amp;ldquo;as-is&amp;rdquo;. Information and views expressed in this document, including URL and other Internet Web site references, may change without notice. You bear the risk of using it.&lt;/p&gt;
&lt;p&gt;This document does not provide you with any legal rights to any intellectual property in any Microsoft product. You may copy and use this document for your internal, reference purposes.&lt;/p&gt;
&lt;p&gt;&amp;copy; 2012 The Outercurve Foundation.&lt;/p&gt;
&lt;p&gt;Distributed under Creative Commons Attribution 3.0 Unported License.&lt;/p&gt;
&lt;p&gt;Microsoft, Visual Studio, and Windows are trademarks of Microsoft, Inc. All other trademarks are property of their respective owners.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457666"&gt;Introduction&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley and Moscow State University.&lt;/p&gt;
&lt;p&gt;You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia. ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively known as Big
 History.&lt;/p&gt;
&lt;p&gt;This guide is designed to walk developers through the installation process. Some of the APIs for ChronoZoom are not yet available for the public.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457667"&gt;Prerequisites&lt;/a&gt;&lt;/h3&gt;
&lt;h5&gt;&lt;a name="_Toc318457668"&gt;Hardware Requirements:&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;&amp;middot; A computer that can run Visual Studio 2010.&lt;/p&gt;
&lt;p&gt;&amp;middot; Optionally, a network connection for the content links.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457669"&gt;Software Requirements:&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;&amp;middot; Visual Studio 2010 with Service Pack 1 (Check &amp;ldquo;Help&amp;rdquo; and &amp;ldquo;About&amp;rdquo; to determine if you have SP1 installed. If you don&amp;rsquo;t, you can get it
&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=23691"&gt;here&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;&amp;middot; Installation of Azure SDK (.net)&lt;/p&gt;
&lt;p&gt;o Recommend installing from this page: &lt;a href="http://www.windowsazure.com/en-us/develop/downloads/"&gt;
http://www.windowsazure.com/en-us/develop/downloads/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;middot; SQL Data Tools (Click this link to begin download &lt;a href="http://www.microsoft.com/web/gallery/install.aspx?appid=SSDT"&gt;
SQL Data Tools&lt;/a&gt;) Service pack 2 of Visual Studio must be installed before you attempt this install.&lt;/p&gt;
&lt;p&gt;&amp;middot; SQL Server 2008 or later Standard, Express, Developer, or Enterprise Edition&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457670"&gt;Project setup instructions&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Here are the steps to get the source code and prepare for execution:&lt;/p&gt;
&lt;p&gt;1. Download the code as zip file from Codeplex at http://chronozoom.codeplex.com/&lt;/p&gt;
&lt;p&gt;2. Extract the zip into a folder.&lt;/p&gt;
&lt;p&gt;3. Open the chronozoom.sln under the source folder (double-click on the file in windows explorer).&lt;/p&gt;
&lt;p&gt;4. Right-click the Chronozoom.Database in Visual Studio Solution Explorer and click
&lt;strong&gt;Publish.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;5. In the dialog box, select the target database connection string to deploy to.&lt;/p&gt;
&lt;p&gt;6. Click Publish.&lt;/p&gt;
&lt;p&gt;7. In the chronozoom.UI project, under the scripts folder, locate the cz.settings.js&lt;/p&gt;
&lt;p&gt;8. Replace current value of this with contentItemThumbnailBaseUri = 'http://127.0.0.1:10000/devstoreaccount1/images/';&lt;/p&gt;
&lt;p&gt;a. Replace the text [Your domain] in the chronozoom.svc.cs file with localhost:4949 address. Also replace [Your domain] in &amp;ldquo;var req= WebRequest.Create&amp;rdquo;&lt;/p&gt;
&lt;p&gt;9. Replace the text [Your domain] in the ChronozoomRelay.cs file with localhost:4949&lt;/p&gt;
&lt;p&gt;10. Connect ChronoZoom to the database in the Chronozoom UI project, edit web.config&lt;/p&gt;
&lt;p&gt;a. Go to server explorer&lt;/p&gt;
&lt;p&gt;b. Add connection to the database we published before&lt;/p&gt;
&lt;p&gt;c. Right clicked on the newly selected connection&lt;/p&gt;
&lt;p&gt;d. Select properties&lt;/p&gt;
&lt;p&gt;e. Copy connection string from the properties&lt;/p&gt;
&lt;p&gt;f. Paste into Web.config &amp;ldquo;data source = {insert your data source and add &amp;ldquo;;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;11. Now go to the Authoring.Azure project and edit Web.config&lt;/p&gt;
&lt;p&gt;a. Find connection string and inster the data source as before.&lt;/p&gt;
&lt;p&gt;12. Configure thumbnail generation&lt;/p&gt;
&lt;p&gt;a. Under ThumbGenApp open app.config&lt;/p&gt;
&lt;p&gt;b. Change [add your connection string here] to the connection string you got above.&lt;/p&gt;
&lt;p&gt;c. Change [add your blob url here] to 'http://127.0.0.1:10000/devstoreaccount1/images/'&lt;/p&gt;
&lt;p&gt;d. Change [add your azure connection string] to &amp;ldquo;UseDevelopmentStorage=true&amp;rdquo;&lt;/p&gt;
&lt;p&gt;e. Build under configuration &amp;ldquo;Dev Preview&amp;rdquo; for platform &amp;ldquo;X86&amp;rdquo;&lt;/p&gt;
&lt;p&gt;13. Set ChronoZoom.UI as the startup project. Right click on Chronozoom.UI project and select &amp;ldquo;set as startup project&amp;rdquo;. To run authoring tools:&lt;/p&gt;
&lt;p&gt;a. Set Authoring.Azure as startup project.&lt;/p&gt;
&lt;p&gt;b. Run. Login as &amp;ldquo;admin&amp;rdquo; password:&amp;rdquo;admin$&amp;rdquo;&lt;/p&gt;
&lt;p&gt;14. Right click on cz.htm and select &amp;ldquo;Set as startup page&amp;rdquo; You may get a storage emulator error. If so, please see
&lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/gg433134.aspx"&gt;http://msdn.microsoft.com/en-us/library/windowsazure/gg433134.aspx&lt;/a&gt; for an easy fix&lt;/p&gt;
&lt;p&gt;15. Run and execute. &lt;a name="_Toc318457671"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;16. To generate thumbnails (required after adding content items) set ThumbGenApp as startup project.&lt;/p&gt;
&lt;h4&gt;How to Submit Code to the Project&lt;/h4&gt;
&lt;p&gt;After you have completed the code you want to add to the project, there are a few steps to follow to get your submission to the project team:&lt;/p&gt;
&lt;p&gt;1. &lt;strong&gt;Document the code &lt;/strong&gt;Comment code so that testers and future developers will clearly understand what you have done. It is recommended to create a unit test to cover the fixed functionality and include it in the appropriate test project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. &lt;/strong&gt;&lt;strong&gt;Create a zipped file with your changed code&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a. &lt;/strong&gt;Include any source files that have your changes. &lt;strong&gt;Please surround your changes/additions with comments that clearly explain what you are doing.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b. &lt;/strong&gt;Provide a document that explains what you did and how it works.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. &lt;/strong&gt;&lt;strong&gt;Submit your changes on Codeplex:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;i. &lt;/strong&gt;Click &amp;ldquo;Submit a patch&amp;rdquo; on the &lt;a href="http://chronozoom.codeplex.com/SourceControl/list/changesets"&gt;
chronozoom.codeplex.com&lt;/a&gt; site.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ii. &lt;/strong&gt;On the &amp;ldquo;Upload a Patch&amp;rdquo; page, use the the &amp;ldquo;Browse&amp;rdquo; button to find your zipped file.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iii. &lt;/strong&gt;In the description box, describe your patch, suggest a unit test if your can.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iv. &lt;/strong&gt;Please note the work item that this patch fixes&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;v. &lt;/strong&gt;Click Submit.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Coding Guidelines&lt;/h3&gt;
&lt;p&gt;One of the key components to delivering that higher productivity is by providing a consistent approach to the programming model and stylistic conventions used throughout the development of the project. Consistency reduces distractions and surprises.&lt;/p&gt;
&lt;p&gt;Our intent is to follow the guidelines laid out by the designers of the .NET Framework class library as detailed in the book
&lt;em&gt;&amp;quot;Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries&amp;quot;&lt;/em&gt; by Krzysztof Cwalina and Brad Abrams, published by Addison-Wesley in 2005 and described in the MSDN documentation delivered with Visual Studio (found online
&lt;a href="http://msdn.microsoft.com/en-us/library/ms229042(VS.100).aspx"&gt;here&lt;/a&gt;). While we principally follow the guidelines above, conversations and styles from many other projects and developers have had influence on this document.&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc265502898"&gt;&lt;/a&gt;&lt;a name="_Toc256702183"&gt;&lt;/a&gt;&lt;a name="_Toc318457672"&gt;Coding Conventions&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;&lt;a name="_Toc318457673"&gt;Document Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Just as writing code in a consistent style makes the code easier to read, this document uses words and formatting to ensure clarity and comprehension. The conventions used herein are recommendations and should be followed in most situations; however, we
 recognized that there are situations we may not be able to anticipate. Thus our recommendations are stated with a &amp;lsquo;strength&amp;rsquo; context verb to help you decide how to apply them in your situation. Our terminology is consistent with the Framework Design
 Guidelines.&lt;/p&gt;
&lt;p&gt;Our strongest recommendations are &lt;strong&gt;DO&lt;/strong&gt; and &lt;strong&gt;DO NOT&lt;/strong&gt;.
&lt;strong&gt;DO&lt;/strong&gt; and &lt;strong&gt;DO NOT&lt;/strong&gt; recommendations should be followed 99.999% of the time to obtain the benefits of a consistent coding style. For example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DO&lt;/strong&gt; use descriptive parameter names.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DO NOT&lt;/strong&gt; require user to explicitly instantiate more than one type in the most basic scenarios.&lt;/p&gt;
&lt;p&gt;Our general recommendations are &lt;strong&gt;CONSIDER&lt;/strong&gt; and &lt;strong&gt;AVOID&lt;/strong&gt;. These guidelines should generally be followed, but we are aware of circumstances where they may not make sense. If you understand the reasoning for the general recommendation
 and you fully understand your situation and the reasons you need to violate the recommendation are clear, then go ahead. For example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CONSIDER&lt;/strong&gt; defining interfaces to achieve a similar effect to that of multiple inheritances.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AVOID&lt;/strong&gt; using out or ref parameters.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457674"&gt;&lt;/a&gt;&lt;a name="_Toc265502900"&gt;&lt;/a&gt;&lt;a name="_Toc256702185"&gt;Naming Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Identifier&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Public&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Protected&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Internal&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Private&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Project File&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO match Assembly and Namespace.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Source File&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO match Class name.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Namespace&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO use Project/Assembly name.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Class or Struct&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;CONSIDER adding suffix of sub-class.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Interface&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO prefix Interfaces with capital I.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Generic Class&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO use T or K as type identifier.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Method&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;CONSIDER using Verb or Verb-Object pair.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Property&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO NOT prefix with Get or Set.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Field&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;AVOID use of public Fields.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Static Field&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Constant&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Enum&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Delegate&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Event&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Local variable&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Parameter&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;&lt;a name="_Toc318457675"&gt;&lt;/a&gt;&lt;a name="_Toc265502901"&gt;&lt;/a&gt;&lt;a name="_Toc256702186"&gt;Coding Style and Language Usage Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Coding Style Issue&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Style Guideline&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Source Files&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO have only one Namespace and one Class per file.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Curly Braces&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO have braces on a new line.&lt;/p&gt;
&lt;p&gt;DO use a brace, even if syntactically optional.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Indentation&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;Do indent is 4 and convert tabs to spaces.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Comments&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;Do use // or ///.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Native Data Types&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO use built-in C# data types.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Enums&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;AVOID changing the default type.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Generics&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;CONSIDER generic types before standard or strong-typed classes.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Methods&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;AVOID large parameter lists (over 7). Use an array or object instead.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;foreach&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT modify enumerated objects within the body of the foreach loop.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Conditionals&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT test against true or false.&lt;/p&gt;
&lt;p&gt;DO NOT embed code with side effects within a conditional.&lt;/p&gt;
&lt;p&gt;DO NOT embed an assignment.&lt;/p&gt;
&lt;p&gt;DO NOT embed a method invocation.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Exceptions&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT use exceptions for normal flow control.&lt;/p&gt;
&lt;p&gt;DO NOT use &amp;ldquo;throw e;&amp;rdquo; when re-throwing, use &amp;ldquo;throw;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;DO avoid exceptions by validating pre/post conditions prior to the exception.&lt;/p&gt;
&lt;p&gt;DO derive from Exception, not ApplicationException.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;&lt;a name="_Toc318457676"&gt;&lt;/a&gt;&lt;a name="_Toc265502902"&gt;&lt;/a&gt;&lt;a name="_Toc256702187"&gt;Naming Conventions&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Consistent naming procedures applied across all the various identifier types in a project goes a long way to making code more accessible to people that use the library or join the project after you.&lt;/p&gt;
&lt;p&gt;The CLR supports both case-sensitive and case-insensitive languages. If you want to write libraries that are accessible to both types, you are restricted from on creating names that are identical except for case. Even so, appropriate and consistent capitalization
 enhances readability and comprehension of code.&lt;/p&gt;
&lt;p&gt;Capitalization is used to make identifiers more readable. There are two capitalization conventions in general use for identifier names throughout the library, PascalCase and camelCase. PascalCase capitalizes every word of the descriptive identifier whereas
 the camelCase does not capitalize the initial word of the identifier but does capitalize every word
&lt;span style="text-decoration:underline"&gt;after&lt;/span&gt; the initial one. There are some instances where a PascalCase or camelCase identifier may have a &amp;lsquo;_&amp;rsquo; or a capital &amp;lsquo;I&amp;rsquo; prefix added.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457677"&gt;&lt;/a&gt;&lt;a name="_Toc265502903"&gt;&lt;/a&gt;&lt;a name="_Toc256702188"&gt;General Naming Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO use PascalCasing for type and method names and constants.&lt;/p&gt;
&lt;p&gt;2. DO use camelCasing for local variable names and method arguments.&lt;/p&gt;
&lt;p&gt;3. DO use &amp;lsquo;I&amp;rsquo; to prefix Interface names.&lt;/p&gt;
&lt;p&gt;4. DO NOT create names that vary only by case.&lt;/p&gt;
&lt;p&gt;5. AVOID creating ALLCAPITALNAMES.&lt;/p&gt;
&lt;p&gt;6. DO use easily readable, descriptive, meaningful, and specific names.&lt;/p&gt;
&lt;p&gt;a. AVOID single character names.&lt;/p&gt;
&lt;p&gt;b. AVOID Hungarian notation for public or protected members.&lt;/p&gt;
&lt;p&gt;c. AVOID abbreviations unless the full name is really excessive.&lt;/p&gt;
&lt;p&gt;d. AVOID adding redundant prefixes and suffixes e.g. public enum ColorsEnum {&amp;hellip;}.&lt;/p&gt;
&lt;p&gt;7. DO name types with nouns, noun phrases, or adjective phrases using PascalCasing.&lt;/p&gt;
&lt;p&gt;8. CONSIDER ending the name of a derived classes with the name of the base class.&lt;/p&gt;
&lt;p&gt;9. DO prefix Interface names with the letter &amp;lsquo;I&amp;rsquo;, to indicate that the type is an interface.&lt;/p&gt;
&lt;p&gt;10. DO give methods names that are verbs or verb phrases.&lt;/p&gt;
&lt;p&gt;11. DO name properties using a noun, noun phrase, or adjective.&lt;/p&gt;
&lt;p&gt;12. CONSIDER giving a property the same name as its type.&lt;/p&gt;
&lt;p&gt;13. DO name fields using a noun or noun phrase.&lt;/p&gt;
&lt;p&gt;14. CONSIDER using common, well known acronyms, e.g. IO instead of InputOutput.&lt;/p&gt;
&lt;p&gt;15. AVOID acronyms that are not common or widely known.&lt;/p&gt;
&lt;p&gt;16. DO use uppercase for two-letter acronyms and PascalCase for other acronyms. It is acceptable to use &amp;ldquo;BIO&amp;rdquo; rather than &amp;ldquo;Bio&amp;rdquo; in the context of this project.&lt;/p&gt;
&lt;p&gt;17. CONSIDER using C# types rather than aliases in the System namespace.&lt;/p&gt;
&lt;p&gt;18. DO use capital letters for type placeholders in generics.&lt;/p&gt;
&lt;p&gt;19. CONSIDER prefixing Boolean variables with &amp;ldquo;Can&amp;rdquo;, &amp;ldquo;Is&amp;rdquo;, or &amp;ldquo;Has&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;20. CONSIDER appending computational variables with the suffix &amp;ldquo;Average&amp;rdquo;, &amp;ldquo;Count&amp;rdquo;, &amp;ldquo;Sum&amp;rdquo;, &amp;ldquo;Min&amp;rdquo;, or &amp;ldquo;Max&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;21. DO use meaningful namespaces under the &amp;ldquo;Bio&amp;rdquo; root when extending the Framework.&lt;/p&gt;
&lt;p&gt;22. DO use meaningful namespaces under your Product, Company, or Developer name for tools or code using the project.e.g. namespace MyCompany.MyProduct.MyNamespace;&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc318457678"&gt;&lt;/a&gt;&lt;a name="_Toc265502904"&gt;&lt;/a&gt;&lt;a name="_Toc256702189"&gt;Coding Style and Language Usage&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Resolving issues around different coding styles can cause controversy among developers, but consistent layout, format, and organization are key attributes of maintainable code. The following guidelines describe the &amp;lsquo;preferred&amp;rsquo; way to write C#
 code in order to consistently create clear, readable, comprehensible code that you and your team members can maintain over time.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457679"&gt;&lt;/a&gt;&lt;a name="_Toc265502905"&gt;&lt;/a&gt;&lt;a name="_Toc256702190"&gt;General Style Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO have a single file contribute to a single namespace.&lt;/p&gt;
&lt;p&gt;2. DO have a single class in a single source file.&lt;/p&gt;
&lt;p&gt;3. DO group all framework &amp;ldquo;using&amp;rdquo; namespaces together before custom or third party namespaces.&lt;/p&gt;
&lt;p&gt;4. AVOID putting a &amp;ldquo;using&amp;rdquo; statement inside a namespace.&lt;/p&gt;
&lt;p&gt;5. AVOID using fully qualified type names by using the &amp;ldquo;using&amp;rdquo; statement.&lt;/p&gt;
&lt;p&gt;6. CONSIDER grouping internal class implementation by type in the following order:&lt;/p&gt;
&lt;p&gt;a. Member variables.&lt;/p&gt;
&lt;p&gt;b. Constructors &amp;amp; Finalizers.&lt;/p&gt;
&lt;p&gt;c. Nested enums, structs, and classes.&lt;/p&gt;
&lt;p&gt;d. Properties&lt;/p&gt;
&lt;p&gt;e. Methods&lt;/p&gt;
&lt;p&gt;7. DO explicitly declare the access modifier for all identifiers rather than relying on default.&lt;/p&gt;
&lt;p&gt;8. CONSIDER grouping declarations within each type by their access modifier and visibility:&lt;/p&gt;
&lt;p&gt;a. public&lt;/p&gt;
&lt;p&gt;b. protected&lt;/p&gt;
&lt;p&gt;c. internal&lt;/p&gt;
&lt;p&gt;d. private&lt;/p&gt;
&lt;p&gt;9. DO declare all member variables as private and provide public, protected, or internal property access where required.&lt;/p&gt;
&lt;p&gt;10. DO declare each variable in its own statement.&lt;/p&gt;
&lt;p&gt;11. DO use white space to organize and separate code.&lt;/p&gt;
&lt;p&gt;12. DO maintain strict indentation of 4 spaces. DO NOT use tab characters in the documents.&lt;/p&gt;
&lt;p&gt;13. DO indent all code blocks contained within curly braces.&lt;/p&gt;
&lt;p&gt;14. DO place opening curly braces ( { ) on a new line.&lt;/p&gt;
&lt;p&gt;15. DO indent comments to the same level as the code being described.&lt;/p&gt;
&lt;p&gt;16. DO use correct spelling, grammar, and punctuation in all comments.&lt;/p&gt;
&lt;p&gt;17. DO use // or /// for comments.&lt;/p&gt;
&lt;p&gt;18. AVOID /* &amp;hellip; */ for comments.&lt;/p&gt;
&lt;p&gt;19. DO use inline comments to explain assumptions, issues, and algorithmic insights.&lt;/p&gt;
&lt;p&gt;20. DO NOT use comments to explain obvious code.&lt;/p&gt;
&lt;p&gt;21. DO use Task-List keywords in comments to allow filtering e.g. &lt;br&gt;
// TODO: &lt;br&gt;
// UNDONE:&lt;/p&gt;
&lt;p&gt;22. DO use C# comment blocks for documenting the API.&lt;/p&gt;
&lt;p&gt;23. DO use C# comment blocks for every public, protected, and internal declaration.&lt;/p&gt;
&lt;p&gt;24. DO include &amp;lt;summary&amp;gt; comments.&lt;/p&gt;
&lt;p&gt;25. DO include &amp;lt;param&amp;gt;, &amp;lt;return&amp;gt;, and &amp;lt;exception&amp;gt; comments where applicable.&lt;/p&gt;
&lt;p&gt;26. DO declare local variables near their first use.&lt;/p&gt;
&lt;p&gt;27. DO initialize local variables where you declare them.&lt;/p&gt;
&lt;p&gt;28. DO use the simplest data type, collection, or object that meets your requirements.&lt;/p&gt;
&lt;p&gt;29. AVOID specifying the type of an Enum. Use the default of int unless you have an explicit need for a long.&lt;/p&gt;
&lt;p&gt;30. DO NOT use inline numeric literals (&amp;lsquo;magic numbers&amp;rsquo;). Use Constant or Enum.&lt;/p&gt;
&lt;p&gt;31. AVOID declaring string literals. Use Resources, Constants, Configuration Files, Registry or other data sources.&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc318457680"&gt;&lt;/a&gt;&lt;a name="_Toc265502906"&gt;&lt;/a&gt;&lt;a name="_Toc256702191"&gt;Library Design&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;A successful framework for biology must be designed for a broad range of developer skills and capabilities. Delivering powerful capabilities with clean, simple abstractions that can be used by the novice, while still allowing the expert to control the details
 underlying the abstraction is a challenging task.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457681"&gt;&lt;/a&gt;&lt;a name="_Toc265502907"&gt;&lt;/a&gt;&lt;a name="_Toc256702192"&gt;General Library Design Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO design a framework that is both powerful and easy to use.&lt;/p&gt;
&lt;p&gt;2. DO provide a layered framework with high-level APIs optimized for productivity and low-level APIs optimized for power and expressiveness.&lt;/p&gt;
&lt;p&gt;3. AVOID mixing low-level and high-level APIs in a single namespace.&lt;/p&gt;
&lt;p&gt;4. DO ensure that layers of a single feature are well integrated and complete. Developers should be able to migrate from one level to another without re-writing the entire application.&lt;/p&gt;
&lt;p&gt;5. DO base your design on meaningful usage scenarios.&lt;/p&gt;
&lt;p&gt;6. DO ensure scenarios that correspond to an appropriate abstraction level.&lt;/p&gt;
&lt;p&gt;7. DO design APIs by first writing code samples for the main scenario then defining the object model to support the code.&lt;/p&gt;
&lt;p&gt;8. DO organize usability studies to test API in main scenarios.&lt;/p&gt;
&lt;p&gt;9. DO provide simple overloads of constructors and methods with a small number of primitive parameters.&lt;/p&gt;
&lt;p&gt;10. DO NOT require user to explicitly instantiate more than one type in the most basic scenarios.&lt;/p&gt;
&lt;p&gt;11. DO provide good defaults for all properties and parameters if possible.&lt;/p&gt;
&lt;p&gt;12. DO communicate incorrect usage of APIs using exceptions.&lt;/p&gt;
&lt;p&gt;13. DO provide strongly typed APIs if at all possible.&lt;/p&gt;
&lt;p&gt;14. DO NOT create circular references between assemblies.&lt;/p&gt;
&lt;p&gt;15. CONSIDER factoring unsafe code into a separate assembly.&lt;/p&gt;
&lt;p&gt;16. DO use zero-based indexing when developing with the Framework.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457682"&gt;Azure Deployment Guidelines&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChronoZoom is powered by Windows Azure and SQL Azure. With Team Foundation Server as the source repository for ChronoZoom, there comes an added benefit of build servers. We leverage the build feature of TFS to automatically deploy packages to Azure.&lt;/p&gt;
&lt;p&gt;As part of the Engineering practice, it would be ideal to let TFS handle the deployment to Azure as part of the daily builds. Here are some advantages of doing this:&lt;/p&gt;
&lt;p&gt;&amp;middot; Being able to build, package, and deploy our projects to multiple Windows Azure environments from a build server using MSBuild&lt;/p&gt;
&lt;p&gt;&amp;middot; Being able to retain copies of our packages and configurations for our builds in Windows Azure BLOB Storage for safe keeping, history, easy rollback scenarios, etc.&lt;/p&gt;
&lt;p&gt;&amp;middot; Having a build number generated for a build and make sure that build number is present in the name of our packages, configs, and deployment labels in Azure for consistency&lt;/p&gt;
&lt;p&gt;&amp;middot; Leveraging the Release Configurations in Visual Studio as much as possible as the designation of our different environments, since Web.Config transformations rely on this pattern already&lt;/p&gt;
&lt;p&gt;&amp;middot; Being able to still package and deploy locally, in case there is an issue with the build server for some reason&lt;/p&gt;
&lt;p&gt;Greater depth on the deployment can be found here - &lt;a href="http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx"&gt;
http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are some technical requirements to get setup with automatic deployment:&lt;/p&gt;
&lt;p&gt;&amp;middot; Install Windows Azure tools on build server&lt;/p&gt;
&lt;p&gt;&amp;middot; Install Windows Azure powershell cmdlets&lt;/p&gt;
&lt;p&gt;&amp;middot; Download publish settings from &lt;a href="http://windows.azure.com/downloads/publishprofile.aspx"&gt;
http://windows.azure.com/downloads/publishprofile.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;middot; In MSBuild build definition setting, under process set it to&lt;/p&gt;
&lt;p&gt;o /t:Publish /p:PublishDir=C:\Builds\Drops\;Configuration=DevPreview;AzurePublishProfile=&amp;lt;Your profile&amp;gt;.azurePubxml&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457683"&gt;The Future of ChronoZoom&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We envision a world where scientists, researchers, students, and teachers collaborate through ChronoZoom to share information via data, tours, and insight.&lt;/p&gt;
&lt;p&gt;Imagine a world where the leading academics publish their findings to the world in a manner that can easily be accessed and compared to other data.&lt;/p&gt;
&lt;p&gt;Imagine a tool that allows teachers to generate tours specific to their classroom needs.&lt;/p&gt;
&lt;p&gt;This can happen with your support. As ChronoZoom through the beta release, we need your feedback and support to continue to mold this project to suit your needs.&lt;/p&gt;
&lt;p&gt;Help ChronoZoom evolve by taking this survey so we can provide the best possible future features:
&lt;a href="http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/"&gt;http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>BobWalter</author><pubDate>Sat, 14 Apr 2012 02:04:05 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ChronoZoom Developer's Guide 20120414020405A</guid></item><item><title>Updated Wiki: ChronoZoom Developer's Guide</title><link>http://chronozoom.codeplex.com/wikipage?title=ChronoZoom Developer's Guide&amp;version=5</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;&lt;span style="color:#808080"&gt;&lt;strong&gt;Note: &lt;/strong&gt;As of 4/7/2012 this guide was revised. The code base was also modified to support easier adoption. If you downloaded the source code before 4/7/2012, please download again if you plan to use this guide.&lt;/span&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;a name="_Toc318457665"&gt;&lt;/a&gt;&lt;a name="_Toc318452320"&gt;Disclaimer&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This document is provided &amp;ldquo;as-is&amp;rdquo;. Information and views expressed in this document, including URL and other Internet Web site references, may change without notice. You bear the risk of using it.&lt;/p&gt;
&lt;p&gt;This document does not provide you with any legal rights to any intellectual property in any Microsoft product. You may copy and use this document for your internal, reference purposes.&lt;/p&gt;
&lt;p&gt;&amp;copy; 2012 The Outercurve Foundation.&lt;/p&gt;
&lt;p&gt;Distributed under Creative Commons Attribution 3.0 Unported License.&lt;/p&gt;
&lt;p&gt;Microsoft, Visual Studio, and Windows are trademarks of the Microsoft group of companies. All other trademarks are property of their respective owners.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457666"&gt;Introduction&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley and Moscow State University.&lt;/p&gt;
&lt;p&gt;You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia. ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively known as Big
 History.&lt;/p&gt;
&lt;p&gt;This guide is designed to walk developers through the installation process. Some of the APIs for ChronoZoom are not yet available for the public.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457667"&gt;Prerequisites&lt;/a&gt;&lt;/h3&gt;
&lt;h5&gt;&lt;a name="_Toc318457668"&gt;Hardware Requirements:&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;&amp;middot; A computer that can run Visual Studio 2010.&lt;/p&gt;
&lt;p&gt;&amp;middot; Optionally, a network connection for the content links.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457669"&gt;Software Requirements:&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;&amp;middot; Visual Studio 2010 with Service Pack 1 (Check &amp;ldquo;Help&amp;rdquo; and &amp;ldquo;About&amp;rdquo; to determine if you have SP1 installed. If you don&amp;rsquo;t, you can get it
&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=23691"&gt;here&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;&amp;middot; Installation of Azure SDK (.net)&lt;/p&gt;
&lt;p&gt;o Recommend installing from this page: &lt;a href="http://www.windowsazure.com/en-us/develop/downloads/"&gt;
http://www.windowsazure.com/en-us/develop/downloads/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;middot; SQL Data Tools (Click this link to begin download &lt;a href="http://www.microsoft.com/web/gallery/install.aspx?appid=SSDT"&gt;
SQL Data Tools&lt;/a&gt;) Service pack 2 of Visual Studio must be installed before you attempt this install.&lt;/p&gt;
&lt;p&gt;&amp;middot; SQL Server 2008 or later Standard, Express, Developer, or Enterprise Edition&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457670"&gt;Project setup instructions&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Here are the steps to get the source code and prepare for execution:&lt;/p&gt;
&lt;p&gt;1. Download the code as zip file from Codeplex at http://chronozoom.codeplex.com/&lt;/p&gt;
&lt;p&gt;2. Extract the zip into a folder.&lt;/p&gt;
&lt;p&gt;3. Open the chronozoom.sln under the source folder (double-click on the file in windows explorer).&lt;/p&gt;
&lt;p&gt;4. Right-click the Chronozoom.Database in Visual Studio Solution Explorer and click
&lt;strong&gt;Publish.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;5. In the dialog box, select the target database connection string to deploy to.&lt;/p&gt;
&lt;p&gt;6. Click Publish.&lt;/p&gt;
&lt;p&gt;7. In the chronozoom.UI project, under the scripts folder, locate the cz.settings.js&lt;/p&gt;
&lt;p&gt;8. Replace current value of this with contentItemThumbnailBaseUri = 'http://127.0.0.1:10000/devstoreaccount1/images/';&lt;/p&gt;
&lt;p&gt;a. Replace the text [Your domain] in the chronozoom.svc.cs file with localhost:4949 address. Also replace [Your domain] in &amp;ldquo;var req= WebRequest.Create&amp;rdquo;&lt;/p&gt;
&lt;p&gt;9. Replace the text [Your domain] in the ChronozoomRelay.cs file with localhost:4949&lt;/p&gt;
&lt;p&gt;10. Connect ChronoZoom to the database in the Chronozoom UI project, edit web.config&lt;/p&gt;
&lt;p&gt;a. Go to server explorer&lt;/p&gt;
&lt;p&gt;b. Add connection to the database we published before&lt;/p&gt;
&lt;p&gt;c. Right clicked on the newly selected connection&lt;/p&gt;
&lt;p&gt;d. Select properties&lt;/p&gt;
&lt;p&gt;e. Copy connection string from the properties&lt;/p&gt;
&lt;p&gt;f. Paste into Web.config &amp;ldquo;data source = {insert your data source and add &amp;ldquo;;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;11. Now go to the Authoring.Azure project and edit Web.config&lt;/p&gt;
&lt;p&gt;a. Find connection string and inster the data source as before.&lt;/p&gt;
&lt;p&gt;12. Configure thumbnail generation&lt;/p&gt;
&lt;p&gt;a. Under ThumbGenApp open app.config&lt;/p&gt;
&lt;p&gt;b. Change [add your connection string here] to the connection string you got above.&lt;/p&gt;
&lt;p&gt;c. Change [add your blob url here] to 'http://127.0.0.1:10000/devstoreaccount1/images/'&lt;/p&gt;
&lt;p&gt;d. Change [add your azure connection string] to &amp;ldquo;UseDevelopmentStorage=true&amp;rdquo;&lt;/p&gt;
&lt;p&gt;e. Build under configuration &amp;ldquo;Dev Preview&amp;rdquo; for platform &amp;ldquo;X86&amp;rdquo;&lt;/p&gt;
&lt;p&gt;13. Set ChronoZoom.UI as the startup project. Right click on Chronozoom.UI project and select &amp;ldquo;set as startup project&amp;rdquo;. To run authoring tools:&lt;/p&gt;
&lt;p&gt;a. Set Authoring.Azure as startup project.&lt;/p&gt;
&lt;p&gt;b. Run. Login as &amp;ldquo;admin&amp;rdquo; password:&amp;rdquo;admin$&amp;rdquo;&lt;/p&gt;
&lt;p&gt;14. Right click on cz.htm and select &amp;ldquo;Set as startup page&amp;rdquo; You may get a storage emulator error. If so, please see
&lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/gg433134.aspx"&gt;http://msdn.microsoft.com/en-us/library/windowsazure/gg433134.aspx&lt;/a&gt; for an easy fix&lt;/p&gt;
&lt;p&gt;15. Run and execute. &lt;a name="_Toc318457671"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;16. To generate thumbnails (required after adding content items) set ThumbGenApp as startup project.&lt;/p&gt;
&lt;h4&gt;How to Submit Code to the Project&lt;/h4&gt;
&lt;p&gt;After you have completed the code you want to add to the project, there are a few steps to follow to get your submission to the project team:&lt;/p&gt;
&lt;p&gt;1. &lt;strong&gt;Document the code &lt;/strong&gt;Comment code so that testers and future developers will clearly understand what you have done. It is recommended to create a unit test to cover the fixed functionality and include it in the appropriate test project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. &lt;/strong&gt;&lt;strong&gt;Create a zipped file with your changed code&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a. &lt;/strong&gt;Include any source files that have your changes. &lt;strong&gt;Please surround your changes/additions with comments that clearly explain what you are doing.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b. &lt;/strong&gt;Provide a document that explains what you did and how it works.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. &lt;/strong&gt;&lt;strong&gt;Submit your changes on Codeplex:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;i. &lt;/strong&gt;Click &amp;ldquo;Submit a patch&amp;rdquo; on the &lt;a href="http://chronozoom.codeplex.com/SourceControl/list/changesets"&gt;
chronozoom.codeplex.com&lt;/a&gt; site.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ii. &lt;/strong&gt;On the &amp;ldquo;Upload a Patch&amp;rdquo; page, use the the &amp;ldquo;Browse&amp;rdquo; button to find your zipped file.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iii. &lt;/strong&gt;In the description box, describe your patch, suggest a unit test if your can.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iv. &lt;/strong&gt;Please note the work item that this patch fixes&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;v. &lt;/strong&gt;Click Submit.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Coding Guidelines&lt;/h3&gt;
&lt;p&gt;One of the key components to delivering that higher productivity is by providing a consistent approach to the programming model and stylistic conventions used throughout the development of the project. Consistency reduces distractions and surprises.&lt;/p&gt;
&lt;p&gt;Our intent is to follow the guidelines laid out by the designers of the .NET Framework class library as detailed in the book
&lt;em&gt;&amp;quot;Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries&amp;quot;&lt;/em&gt; by Krzysztof Cwalina and Brad Abrams, published by Addison-Wesley in 2005 and described in the MSDN documentation delivered with Visual Studio (found online
&lt;a href="http://msdn.microsoft.com/en-us/library/ms229042(VS.100).aspx"&gt;here&lt;/a&gt;). While we principally follow the guidelines above, conversations and styles from many other projects and developers have had influence on this document.&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc265502898"&gt;&lt;/a&gt;&lt;a name="_Toc256702183"&gt;&lt;/a&gt;&lt;a name="_Toc318457672"&gt;Coding Conventions&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;&lt;a name="_Toc318457673"&gt;Document Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Just as writing code in a consistent style makes the code easier to read, this document uses words and formatting to ensure clarity and comprehension. The conventions used herein are recommendations and should be followed in most situations; however, we
 recognized that there are situations we may not be able to anticipate. Thus our recommendations are stated with a &amp;lsquo;strength&amp;rsquo; context verb to help you decide how to apply them in your situation. Our terminology is consistent with the Framework Design
 Guidelines.&lt;/p&gt;
&lt;p&gt;Our strongest recommendations are &lt;strong&gt;DO&lt;/strong&gt; and &lt;strong&gt;DO NOT&lt;/strong&gt;.
&lt;strong&gt;DO&lt;/strong&gt; and &lt;strong&gt;DO NOT&lt;/strong&gt; recommendations should be followed 99.999% of the time to obtain the benefits of a consistent coding style. For example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DO&lt;/strong&gt; use descriptive parameter names.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DO NOT&lt;/strong&gt; require user to explicitly instantiate more than one type in the most basic scenarios.&lt;/p&gt;
&lt;p&gt;Our general recommendations are &lt;strong&gt;CONSIDER&lt;/strong&gt; and &lt;strong&gt;AVOID&lt;/strong&gt;. These guidelines should generally be followed, but we are aware of circumstances where they may not make sense. If you understand the reasoning for the general recommendation
 and you fully understand your situation and the reasons you need to violate the recommendation are clear, then go ahead. For example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CONSIDER&lt;/strong&gt; defining interfaces to achieve a similar effect to that of multiple inheritances.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AVOID&lt;/strong&gt; using out or ref parameters.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457674"&gt;&lt;/a&gt;&lt;a name="_Toc265502900"&gt;&lt;/a&gt;&lt;a name="_Toc256702185"&gt;Naming Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Identifier&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Public&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Protected&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Internal&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Private&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Project File&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO match Assembly and Namespace.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Source File&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO match Class name.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Namespace&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO use Project/Assembly name.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Class or Struct&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;CONSIDER adding suffix of sub-class.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Interface&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO prefix Interfaces with capital I.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Generic Class&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO use T or K as type identifier.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Method&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;CONSIDER using Verb or Verb-Object pair.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Property&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO NOT prefix with Get or Set.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Field&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;AVOID use of public Fields.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Static Field&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Constant&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Enum&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Delegate&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Event&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Local variable&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Parameter&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;&lt;a name="_Toc318457675"&gt;&lt;/a&gt;&lt;a name="_Toc265502901"&gt;&lt;/a&gt;&lt;a name="_Toc256702186"&gt;Coding Style and Language Usage Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Coding Style Issue&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Style Guideline&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Source Files&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO have only one Namespace and one Class per file.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Curly Braces&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO have braces on a new line.&lt;/p&gt;
&lt;p&gt;DO use a brace, even if syntactically optional.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Indentation&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;Do indent is 4 and convert tabs to spaces.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Comments&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;Do use // or ///.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Native Data Types&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO use built-in C# data types.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Enums&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;AVOID changing the default type.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Generics&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;CONSIDER generic types before standard or strong-typed classes.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Methods&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;AVOID large parameter lists (over 7). Use an array or object instead.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;foreach&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT modify enumerated objects within the body of the foreach loop.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Conditionals&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT test against true or false.&lt;/p&gt;
&lt;p&gt;DO NOT embed code with side effects within a conditional.&lt;/p&gt;
&lt;p&gt;DO NOT embed an assignment.&lt;/p&gt;
&lt;p&gt;DO NOT embed a method invocation.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Exceptions&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT use exceptions for normal flow control.&lt;/p&gt;
&lt;p&gt;DO NOT use &amp;ldquo;throw e;&amp;rdquo; when re-throwing, use &amp;ldquo;throw;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;DO avoid exceptions by validating pre/post conditions prior to the exception.&lt;/p&gt;
&lt;p&gt;DO derive from Exception, not ApplicationException.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;&lt;a name="_Toc318457676"&gt;&lt;/a&gt;&lt;a name="_Toc265502902"&gt;&lt;/a&gt;&lt;a name="_Toc256702187"&gt;Naming Conventions&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Consistent naming procedures applied across all the various identifier types in a project goes a long way to making code more accessible to people that use the library or join the project after you.&lt;/p&gt;
&lt;p&gt;The CLR supports both case-sensitive and case-insensitive languages. If you want to write libraries that are accessible to both types, you are restricted from on creating names that are identical except for case. Even so, appropriate and consistent capitalization
 enhances readability and comprehension of code.&lt;/p&gt;
&lt;p&gt;Capitalization is used to make identifiers more readable. There are two capitalization conventions in general use for identifier names throughout the library, PascalCase and camelCase. PascalCase capitalizes every word of the descriptive identifier whereas
 the camelCase does not capitalize the initial word of the identifier but does capitalize every word
&lt;span style="text-decoration:underline"&gt;after&lt;/span&gt; the initial one. There are some instances where a PascalCase or camelCase identifier may have a &amp;lsquo;_&amp;rsquo; or a capital &amp;lsquo;I&amp;rsquo; prefix added.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457677"&gt;&lt;/a&gt;&lt;a name="_Toc265502903"&gt;&lt;/a&gt;&lt;a name="_Toc256702188"&gt;General Naming Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO use PascalCasing for type and method names and constants.&lt;/p&gt;
&lt;p&gt;2. DO use camelCasing for local variable names and method arguments.&lt;/p&gt;
&lt;p&gt;3. DO use &amp;lsquo;I&amp;rsquo; to prefix Interface names.&lt;/p&gt;
&lt;p&gt;4. DO NOT create names that vary only by case.&lt;/p&gt;
&lt;p&gt;5. AVOID creating ALLCAPITALNAMES.&lt;/p&gt;
&lt;p&gt;6. DO use easily readable, descriptive, meaningful, and specific names.&lt;/p&gt;
&lt;p&gt;a. AVOID single character names.&lt;/p&gt;
&lt;p&gt;b. AVOID Hungarian notation for public or protected members.&lt;/p&gt;
&lt;p&gt;c. AVOID abbreviations unless the full name is really excessive.&lt;/p&gt;
&lt;p&gt;d. AVOID adding redundant prefixes and suffixes e.g. public enum ColorsEnum {&amp;hellip;}.&lt;/p&gt;
&lt;p&gt;7. DO name types with nouns, noun phrases, or adjective phrases using PascalCasing.&lt;/p&gt;
&lt;p&gt;8. CONSIDER ending the name of a derived classes with the name of the base class.&lt;/p&gt;
&lt;p&gt;9. DO prefix Interface names with the letter &amp;lsquo;I&amp;rsquo;, to indicate that the type is an interface.&lt;/p&gt;
&lt;p&gt;10. DO give methods names that are verbs or verb phrases.&lt;/p&gt;
&lt;p&gt;11. DO name properties using a noun, noun phrase, or adjective.&lt;/p&gt;
&lt;p&gt;12. CONSIDER giving a property the same name as its type.&lt;/p&gt;
&lt;p&gt;13. DO name fields using a noun or noun phrase.&lt;/p&gt;
&lt;p&gt;14. CONSIDER using common, well known acronyms, e.g. IO instead of InputOutput.&lt;/p&gt;
&lt;p&gt;15. AVOID acronyms that are not common or widely known.&lt;/p&gt;
&lt;p&gt;16. DO use uppercase for two-letter acronyms and PascalCase for other acronyms. It is acceptable to use &amp;ldquo;BIO&amp;rdquo; rather than &amp;ldquo;Bio&amp;rdquo; in the context of this project.&lt;/p&gt;
&lt;p&gt;17. CONSIDER using C# types rather than aliases in the System namespace.&lt;/p&gt;
&lt;p&gt;18. DO use capital letters for type placeholders in generics.&lt;/p&gt;
&lt;p&gt;19. CONSIDER prefixing Boolean variables with &amp;ldquo;Can&amp;rdquo;, &amp;ldquo;Is&amp;rdquo;, or &amp;ldquo;Has&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;20. CONSIDER appending computational variables with the suffix &amp;ldquo;Average&amp;rdquo;, &amp;ldquo;Count&amp;rdquo;, &amp;ldquo;Sum&amp;rdquo;, &amp;ldquo;Min&amp;rdquo;, or &amp;ldquo;Max&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;21. DO use meaningful namespaces under the &amp;ldquo;Bio&amp;rdquo; root when extending the Framework.&lt;/p&gt;
&lt;p&gt;22. DO use meaningful namespaces under your Product, Company, or Developer name for tools or code using the project.e.g. namespace MyCompany.MyProduct.MyNamespace;&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc318457678"&gt;&lt;/a&gt;&lt;a name="_Toc265502904"&gt;&lt;/a&gt;&lt;a name="_Toc256702189"&gt;Coding Style and Language Usage&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Resolving issues around different coding styles can cause controversy among developers, but consistent layout, format, and organization are key attributes of maintainable code. The following guidelines describe the &amp;lsquo;preferred&amp;rsquo; way to write C#
 code in order to consistently create clear, readable, comprehensible code that you and your team members can maintain over time.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457679"&gt;&lt;/a&gt;&lt;a name="_Toc265502905"&gt;&lt;/a&gt;&lt;a name="_Toc256702190"&gt;General Style Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO have a single file contribute to a single namespace.&lt;/p&gt;
&lt;p&gt;2. DO have a single class in a single source file.&lt;/p&gt;
&lt;p&gt;3. DO group all framework &amp;ldquo;using&amp;rdquo; namespaces together before custom or third party namespaces.&lt;/p&gt;
&lt;p&gt;4. AVOID putting a &amp;ldquo;using&amp;rdquo; statement inside a namespace.&lt;/p&gt;
&lt;p&gt;5. AVOID using fully qualified type names by using the &amp;ldquo;using&amp;rdquo; statement.&lt;/p&gt;
&lt;p&gt;6. CONSIDER grouping internal class implementation by type in the following order:&lt;/p&gt;
&lt;p&gt;a. Member variables.&lt;/p&gt;
&lt;p&gt;b. Constructors &amp;amp; Finalizers.&lt;/p&gt;
&lt;p&gt;c. Nested enums, structs, and classes.&lt;/p&gt;
&lt;p&gt;d. Properties&lt;/p&gt;
&lt;p&gt;e. Methods&lt;/p&gt;
&lt;p&gt;7. DO explicitly declare the access modifier for all identifiers rather than relying on default.&lt;/p&gt;
&lt;p&gt;8. CONSIDER grouping declarations within each type by their access modifier and visibility:&lt;/p&gt;
&lt;p&gt;a. public&lt;/p&gt;
&lt;p&gt;b. protected&lt;/p&gt;
&lt;p&gt;c. internal&lt;/p&gt;
&lt;p&gt;d. private&lt;/p&gt;
&lt;p&gt;9. DO declare all member variables as private and provide public, protected, or internal property access where required.&lt;/p&gt;
&lt;p&gt;10. DO declare each variable in its own statement.&lt;/p&gt;
&lt;p&gt;11. DO use white space to organize and separate code.&lt;/p&gt;
&lt;p&gt;12. DO maintain strict indentation of 4 spaces. DO NOT use tab characters in the documents.&lt;/p&gt;
&lt;p&gt;13. DO indent all code blocks contained within curly braces.&lt;/p&gt;
&lt;p&gt;14. DO place opening curly braces ( { ) on a new line.&lt;/p&gt;
&lt;p&gt;15. DO indent comments to the same level as the code being described.&lt;/p&gt;
&lt;p&gt;16. DO use correct spelling, grammar, and punctuation in all comments.&lt;/p&gt;
&lt;p&gt;17. DO use // or /// for comments.&lt;/p&gt;
&lt;p&gt;18. AVOID /* &amp;hellip; */ for comments.&lt;/p&gt;
&lt;p&gt;19. DO use inline comments to explain assumptions, issues, and algorithmic insights.&lt;/p&gt;
&lt;p&gt;20. DO NOT use comments to explain obvious code.&lt;/p&gt;
&lt;p&gt;21. DO use Task-List keywords in comments to allow filtering e.g. &lt;br&gt;
// TODO: &lt;br&gt;
// UNDONE:&lt;/p&gt;
&lt;p&gt;22. DO use C# comment blocks for documenting the API.&lt;/p&gt;
&lt;p&gt;23. DO use C# comment blocks for every public, protected, and internal declaration.&lt;/p&gt;
&lt;p&gt;24. DO include &amp;lt;summary&amp;gt; comments.&lt;/p&gt;
&lt;p&gt;25. DO include &amp;lt;param&amp;gt;, &amp;lt;return&amp;gt;, and &amp;lt;exception&amp;gt; comments where applicable.&lt;/p&gt;
&lt;p&gt;26. DO declare local variables near their first use.&lt;/p&gt;
&lt;p&gt;27. DO initialize local variables where you declare them.&lt;/p&gt;
&lt;p&gt;28. DO use the simplest data type, collection, or object that meets your requirements.&lt;/p&gt;
&lt;p&gt;29. AVOID specifying the type of an Enum. Use the default of int unless you have an explicit need for a long.&lt;/p&gt;
&lt;p&gt;30. DO NOT use inline numeric literals (&amp;lsquo;magic numbers&amp;rsquo;). Use Constant or Enum.&lt;/p&gt;
&lt;p&gt;31. AVOID declaring string literals. Use Resources, Constants, Configuration Files, Registry or other data sources.&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc318457680"&gt;&lt;/a&gt;&lt;a name="_Toc265502906"&gt;&lt;/a&gt;&lt;a name="_Toc256702191"&gt;Library Design&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;A successful framework for biology must be designed for a broad range of developer skills and capabilities. Delivering powerful capabilities with clean, simple abstractions that can be used by the novice, while still allowing the expert to control the details
 underlying the abstraction is a challenging task.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457681"&gt;&lt;/a&gt;&lt;a name="_Toc265502907"&gt;&lt;/a&gt;&lt;a name="_Toc256702192"&gt;General Library Design Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO design a framework that is both powerful and easy to use.&lt;/p&gt;
&lt;p&gt;2. DO provide a layered framework with high-level APIs optimized for productivity and low-level APIs optimized for power and expressiveness.&lt;/p&gt;
&lt;p&gt;3. AVOID mixing low-level and high-level APIs in a single namespace.&lt;/p&gt;
&lt;p&gt;4. DO ensure that layers of a single feature are well integrated and complete. Developers should be able to migrate from one level to another without re-writing the entire application.&lt;/p&gt;
&lt;p&gt;5. DO base your design on meaningful usage scenarios.&lt;/p&gt;
&lt;p&gt;6. DO ensure scenarios that correspond to an appropriate abstraction level.&lt;/p&gt;
&lt;p&gt;7. DO design APIs by first writing code samples for the main scenario then defining the object model to support the code.&lt;/p&gt;
&lt;p&gt;8. DO organize usability studies to test API in main scenarios.&lt;/p&gt;
&lt;p&gt;9. DO provide simple overloads of constructors and methods with a small number of primitive parameters.&lt;/p&gt;
&lt;p&gt;10. DO NOT require user to explicitly instantiate more than one type in the most basic scenarios.&lt;/p&gt;
&lt;p&gt;11. DO provide good defaults for all properties and parameters if possible.&lt;/p&gt;
&lt;p&gt;12. DO communicate incorrect usage of APIs using exceptions.&lt;/p&gt;
&lt;p&gt;13. DO provide strongly typed APIs if at all possible.&lt;/p&gt;
&lt;p&gt;14. DO NOT create circular references between assemblies.&lt;/p&gt;
&lt;p&gt;15. CONSIDER factoring unsafe code into a separate assembly.&lt;/p&gt;
&lt;p&gt;16. DO use zero-based indexing when developing with the Framework.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457682"&gt;Azure Deployment Guidelines&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChronoZoom is powered by Windows Azure and SQL Azure. With Team Foundation Server as the source repository for ChronoZoom, there comes an added benefit of build servers. We leverage the build feature of TFS to automatically deploy packages to Azure.&lt;/p&gt;
&lt;p&gt;As part of the Engineering practice, it would be ideal to let TFS handle the deployment to Azure as part of the daily builds. Here are some advantages of doing this:&lt;/p&gt;
&lt;p&gt;&amp;middot; Being able to build, package, and deploy our projects to multiple Windows Azure environments from a build server using MSBuild&lt;/p&gt;
&lt;p&gt;&amp;middot; Being able to retain copies of our packages and configurations for our builds in Windows Azure BLOB Storage for safe keeping, history, easy rollback scenarios, etc.&lt;/p&gt;
&lt;p&gt;&amp;middot; Having a build number generated for a build and make sure that build number is present in the name of our packages, configs, and deployment labels in Azure for consistency&lt;/p&gt;
&lt;p&gt;&amp;middot; Leveraging the Release Configurations in Visual Studio as much as possible as the designation of our different environments, since Web.Config transformations rely on this pattern already&lt;/p&gt;
&lt;p&gt;&amp;middot; Being able to still package and deploy locally, in case there is an issue with the build server for some reason&lt;/p&gt;
&lt;p&gt;Greater depth on the deployment can be found here - &lt;a href="http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx"&gt;
http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are some technical requirements to get setup with automatic deployment:&lt;/p&gt;
&lt;p&gt;&amp;middot; Install Windows Azure tools on build server&lt;/p&gt;
&lt;p&gt;&amp;middot; Install Windows Azure powershell cmdlets&lt;/p&gt;
&lt;p&gt;&amp;middot; Download publish settings from &lt;a href="http://windows.azure.com/downloads/publishprofile.aspx"&gt;
http://windows.azure.com/downloads/publishprofile.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;middot; In MSBuild build definition setting, under process set it to&lt;/p&gt;
&lt;p&gt;o /t:Publish /p:PublishDir=C:\Builds\Drops\;Configuration=DevPreview;AzurePublishProfile=&amp;lt;Your profile&amp;gt;.azurePubxml&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457683"&gt;The Future of ChronoZoom&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We envision a world where scientists, researchers, students, and teachers collaborate through ChronoZoom to share information via data, tours, and insight.&lt;/p&gt;
&lt;p&gt;Imagine a world where the leading academics publish their findings to the world in a manner that can easily be accessed and compared to other data.&lt;/p&gt;
&lt;p&gt;Imagine a tool that allows teachers to generate tours specific to their classroom needs.&lt;/p&gt;
&lt;p&gt;This can happen with your support. As ChronoZoom through the beta release, we need your feedback and support to continue to mold this project to suit your needs.&lt;/p&gt;
&lt;p&gt;Help ChronoZoom evolve by taking this survey so we can provide the best possible future features:
&lt;a href="http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/"&gt;http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>BobWalter</author><pubDate>Sat, 14 Apr 2012 02:02:55 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ChronoZoom Developer's Guide 20120414020255A</guid></item><item><title>Updated Wiki: ChronoZoom Developer's Guide</title><link>http://chronozoom.codeplex.com/wikipage?title=ChronoZoom Developer's Guide&amp;version=4</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;&lt;strong&gt;Note: &lt;/strong&gt;As of 4/7/2012 this guide was revised. The code base was also modified to support easier adoption. If you downloaded the source code before 4/7/2012, please download again.&lt;/h3&gt;
&lt;h3&gt;&lt;a name="_Toc318457665"&gt;&lt;/a&gt;&lt;a name="_Toc318452320"&gt;Disclaimer&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This document is provided &amp;ldquo;as-is&amp;rdquo;. Information and views expressed in this document, including URL and other Internet Web site references, may change without notice. You bear the risk of using it.&lt;/p&gt;
&lt;p&gt;This document does not provide you with any legal rights to any intellectual property in any Microsoft product. You may copy and use this document for your internal, reference purposes.&lt;/p&gt;
&lt;p&gt;&amp;copy; 2012 The Outercurve Foundation.&lt;/p&gt;
&lt;p&gt;Distributed under Creative Commons Attribution 3.0 Unported License.&lt;/p&gt;
&lt;p&gt;Microsoft, Visual Studio, and Windows are trademarks of the Microsoft group of companies. All other trademarks are property of their respective owners.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457666"&gt;Introduction&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley and Moscow State University.&lt;/p&gt;
&lt;p&gt;You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia. ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively known as Big
 History.&lt;/p&gt;
&lt;p&gt;This guide is designed to walk developers through the installation process. Some of the APIs for ChronoZoom are not yet available for the public.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457667"&gt;Prerequisites&lt;/a&gt;&lt;/h3&gt;
&lt;h5&gt;&lt;a name="_Toc318457668"&gt;Hardware Requirements:&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;&amp;middot; A computer that can run Visual Studio 2010.&lt;/p&gt;
&lt;p&gt;&amp;middot; Optionally, a network connection for the content links.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457669"&gt;Software Requirements:&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;&amp;middot; Visual Studio 2010 with Service Pack 1 (Check &amp;ldquo;Help&amp;rdquo; and &amp;ldquo;About&amp;rdquo; to determine if you have SP1 installed. If you don&amp;rsquo;t, you can get it
&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=23691"&gt;here&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;&amp;middot; Installation of Azure SDK (.net)&lt;/p&gt;
&lt;p&gt;o Recommend installing from this page: &lt;a href="http://www.windowsazure.com/en-us/develop/downloads/"&gt;
http://www.windowsazure.com/en-us/develop/downloads/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;middot; SQL Data Tools (Click this link to begin download &lt;a href="http://www.microsoft.com/web/gallery/install.aspx?appid=SSDT"&gt;
SQL Data Tools&lt;/a&gt;) Service pack 2 of Visual Studio must be installed before you attempt this install.&lt;/p&gt;
&lt;p&gt;&amp;middot; SQL Server 2008 or later Standard, Express, Developer, or Enterprise Edition&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457670"&gt;Project setup instructions&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Here are the steps to get the source code and prepare for execution:&lt;/p&gt;
&lt;p&gt;1. Download the code as zip file from Codeplex at http://chronozoom.codeplex.com/&lt;/p&gt;
&lt;p&gt;2. Extract the zip into a folder.&lt;/p&gt;
&lt;p&gt;3. Open the chronozoom.sln under the source folder (double-click on the file in windows explorer).&lt;/p&gt;
&lt;p&gt;4. Right-click the Chronozoom.Database in Visual Studio Solution Explorer and click
&lt;strong&gt;Publish.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;5. In the dialog box, select the target database connection string to deploy to.&lt;/p&gt;
&lt;p&gt;6. Click Publish.&lt;/p&gt;
&lt;p&gt;7. In the chronozoom.UI project, under the scripts folder, locate the cz.settings.js&lt;/p&gt;
&lt;p&gt;8. Replace current value of this with contentItemThumbnailBaseUri = 'http://127.0.0.1:10000/devstoreaccount1/images/';&lt;/p&gt;
&lt;p&gt;a. Replace the text [Your domain] in the chronozoom.svc.cs file with localhost:4949 address. Also replace [Your domain] in &amp;ldquo;var req= WebRequest.Create&amp;rdquo;&lt;/p&gt;
&lt;p&gt;9. Replace the text [Your domain] in the ChronozoomRelay.cs file with localhost:4949&lt;/p&gt;
&lt;p&gt;10. Connect ChronoZoom to the database in the Chronozoom UI project, edit web.config&lt;/p&gt;
&lt;p&gt;a. Go to server explorer&lt;/p&gt;
&lt;p&gt;b. Add connection to the database we published before&lt;/p&gt;
&lt;p&gt;c. Right clicked on the newly selected connection&lt;/p&gt;
&lt;p&gt;d. Select properties&lt;/p&gt;
&lt;p&gt;e. Copy connection string from the properties&lt;/p&gt;
&lt;p&gt;f. Paste into Web.config &amp;ldquo;data source = {insert your data source and add &amp;ldquo;;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;11. Now go to the Authoring.Azure project and edit Web.config&lt;/p&gt;
&lt;p&gt;a. Find connection string and inster the data source as before.&lt;/p&gt;
&lt;p&gt;12. Configure thumbnail generation&lt;/p&gt;
&lt;p&gt;a. Under ThumbGenApp open app.config&lt;/p&gt;
&lt;p&gt;b. Change [add your connection string here] to the connection string you got above.&lt;/p&gt;
&lt;p&gt;c. Change [add your blob url here] to 'http://127.0.0.1:10000/devstoreaccount1/images/'&lt;/p&gt;
&lt;p&gt;d. Change [add your azure connection string] to &amp;ldquo;UseDevelopmentStorage=true&amp;rdquo;&lt;/p&gt;
&lt;p&gt;e. Build under configuration &amp;ldquo;Dev Preview&amp;rdquo; for platform &amp;ldquo;X86&amp;rdquo;&lt;/p&gt;
&lt;p&gt;13. Set ChronoZoom.UI as the startup project. Right click on Chronozoom.UI project and select &amp;ldquo;set as startup project&amp;rdquo;. To run authoring tools:&lt;/p&gt;
&lt;p&gt;a. Set Authoring.Azure as startup project.&lt;/p&gt;
&lt;p&gt;b. Run. Login as &amp;ldquo;admin&amp;rdquo; password:&amp;rdquo;admin$&amp;rdquo;&lt;/p&gt;
&lt;p&gt;14. Right click on cz.htm and select &amp;ldquo;Set as startup page&amp;rdquo; You may get a storage emulator error. If so, please see
&lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/gg433134.aspx"&gt;http://msdn.microsoft.com/en-us/library/windowsazure/gg433134.aspx&lt;/a&gt; for an easy fix&lt;/p&gt;
&lt;p&gt;15. Run and execute. &lt;a name="_Toc318457671"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;16. To generate thumbnails (required after adding content items) set ThumbGenApp as startup project.&lt;/p&gt;
&lt;h4&gt;How to Submit Code to the Project&lt;/h4&gt;
&lt;p&gt;After you have completed the code you want to add to the project, there are a few steps to follow to get your submission to the project team:&lt;/p&gt;
&lt;p&gt;1. &lt;strong&gt;Document the code &lt;/strong&gt;Comment code so that testers and future developers will clearly understand what you have done. It is recommended to create a unit test to cover the fixed functionality and include it in the appropriate test project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. &lt;/strong&gt;&lt;strong&gt;Create a zipped file with your changed code&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a. &lt;/strong&gt;Include any source files that have your changes. &lt;strong&gt;Please surround your changes/additions with comments that clearly explain what you are doing.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b. &lt;/strong&gt;Provide a document that explains what you did and how it works.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. &lt;/strong&gt;&lt;strong&gt;Submit your changes on Codeplex:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;i. &lt;/strong&gt;Click &amp;ldquo;Submit a patch&amp;rdquo; on the &lt;a href="http://chronozoom.codeplex.com/SourceControl/list/changesets"&gt;
chronozoom.codeplex.com&lt;/a&gt; site.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ii. &lt;/strong&gt;On the &amp;ldquo;Upload a Patch&amp;rdquo; page, use the the &amp;ldquo;Browse&amp;rdquo; button to find your zipped file.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iii. &lt;/strong&gt;In the description box, describe your patch, suggest a unit test if your can.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iv. &lt;/strong&gt;Please note the work item that this patch fixes&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;v. &lt;/strong&gt;Click Submit.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Coding Guidelines&lt;/h3&gt;
&lt;p&gt;One of the key components to delivering that higher productivity is by providing a consistent approach to the programming model and stylistic conventions used throughout the development of the project. Consistency reduces distractions and surprises.&lt;/p&gt;
&lt;p&gt;Our intent is to follow the guidelines laid out by the designers of the .NET Framework class library as detailed in the book
&lt;em&gt;&amp;quot;Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries&amp;quot;&lt;/em&gt; by Krzysztof Cwalina and Brad Abrams, published by Addison-Wesley in 2005 and described in the MSDN documentation delivered with Visual Studio (found online
&lt;a href="http://msdn.microsoft.com/en-us/library/ms229042(VS.100).aspx"&gt;here&lt;/a&gt;). While we principally follow the guidelines above, conversations and styles from many other projects and developers have had influence on this document.&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc265502898"&gt;&lt;/a&gt;&lt;a name="_Toc256702183"&gt;&lt;/a&gt;&lt;a name="_Toc318457672"&gt;Coding Conventions&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;&lt;a name="_Toc318457673"&gt;Document Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Just as writing code in a consistent style makes the code easier to read, this document uses words and formatting to ensure clarity and comprehension. The conventions used herein are recommendations and should be followed in most situations; however, we
 recognized that there are situations we may not be able to anticipate. Thus our recommendations are stated with a &amp;lsquo;strength&amp;rsquo; context verb to help you decide how to apply them in your situation. Our terminology is consistent with the Framework Design
 Guidelines.&lt;/p&gt;
&lt;p&gt;Our strongest recommendations are &lt;strong&gt;DO&lt;/strong&gt; and &lt;strong&gt;DO NOT&lt;/strong&gt;.
&lt;strong&gt;DO&lt;/strong&gt; and &lt;strong&gt;DO NOT&lt;/strong&gt; recommendations should be followed 99.999% of the time to obtain the benefits of a consistent coding style. For example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DO&lt;/strong&gt; use descriptive parameter names.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DO NOT&lt;/strong&gt; require user to explicitly instantiate more than one type in the most basic scenarios.&lt;/p&gt;
&lt;p&gt;Our general recommendations are &lt;strong&gt;CONSIDER&lt;/strong&gt; and &lt;strong&gt;AVOID&lt;/strong&gt;. These guidelines should generally be followed, but we are aware of circumstances where they may not make sense. If you understand the reasoning for the general recommendation
 and you fully understand your situation and the reasons you need to violate the recommendation are clear, then go ahead. For example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CONSIDER&lt;/strong&gt; defining interfaces to achieve a similar effect to that of multiple inheritances.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AVOID&lt;/strong&gt; using out or ref parameters.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457674"&gt;&lt;/a&gt;&lt;a name="_Toc265502900"&gt;&lt;/a&gt;&lt;a name="_Toc256702185"&gt;Naming Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Identifier&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Public&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Protected&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Internal&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Private&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Project File&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO match Assembly and Namespace.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Source File&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO match Class name.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Namespace&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO use Project/Assembly name.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Class or Struct&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;CONSIDER adding suffix of sub-class.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Interface&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO prefix Interfaces with capital I.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Generic Class&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO use T or K as type identifier.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Method&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;CONSIDER using Verb or Verb-Object pair.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Property&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;DO NOT prefix with Get or Set.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Field&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;
&lt;p&gt;AVOID use of public Fields.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Static Field&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Constant&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Enum&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Delegate&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Event&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Local variable&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="96" valign="top"&gt;
&lt;p&gt;Parameter&lt;/p&gt;
&lt;/td&gt;
&lt;td width="72" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="78" valign="top"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td width="84" valign="top"&gt;
&lt;p&gt;camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td width="239" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;&lt;a name="_Toc318457675"&gt;&lt;/a&gt;&lt;a name="_Toc265502901"&gt;&lt;/a&gt;&lt;a name="_Toc256702186"&gt;Coding Style and Language Usage Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Coding Style Issue&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Style Guideline&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Source Files&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO have only one Namespace and one Class per file.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Curly Braces&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO have braces on a new line.&lt;/p&gt;
&lt;p&gt;DO use a brace, even if syntactically optional.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Indentation&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;Do indent is 4 and convert tabs to spaces.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Comments&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;Do use // or ///.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Native Data Types&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO use built-in C# data types.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Enums&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;AVOID changing the default type.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Generics&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;CONSIDER generic types before standard or strong-typed classes.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Methods&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;AVOID large parameter lists (over 7). Use an array or object instead.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;foreach&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT modify enumerated objects within the body of the foreach loop.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Conditionals&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT test against true or false.&lt;/p&gt;
&lt;p&gt;DO NOT embed code with side effects within a conditional.&lt;/p&gt;
&lt;p&gt;DO NOT embed an assignment.&lt;/p&gt;
&lt;p&gt;DO NOT embed a method invocation.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="135" valign="top"&gt;
&lt;p&gt;Exceptions&lt;/p&gt;
&lt;/td&gt;
&lt;td width="503" valign="top"&gt;
&lt;p&gt;DO NOT use exceptions for normal flow control.&lt;/p&gt;
&lt;p&gt;DO NOT use &amp;ldquo;throw e;&amp;rdquo; when re-throwing, use &amp;ldquo;throw;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;DO avoid exceptions by validating pre/post conditions prior to the exception.&lt;/p&gt;
&lt;p&gt;DO derive from Exception, not ApplicationException.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;&lt;a name="_Toc318457676"&gt;&lt;/a&gt;&lt;a name="_Toc265502902"&gt;&lt;/a&gt;&lt;a name="_Toc256702187"&gt;Naming Conventions&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Consistent naming procedures applied across all the various identifier types in a project goes a long way to making code more accessible to people that use the library or join the project after you.&lt;/p&gt;
&lt;p&gt;The CLR supports both case-sensitive and case-insensitive languages. If you want to write libraries that are accessible to both types, you are restricted from on creating names that are identical except for case. Even so, appropriate and consistent capitalization
 enhances readability and comprehension of code.&lt;/p&gt;
&lt;p&gt;Capitalization is used to make identifiers more readable. There are two capitalization conventions in general use for identifier names throughout the library, PascalCase and camelCase. PascalCase capitalizes every word of the descriptive identifier whereas
 the camelCase does not capitalize the initial word of the identifier but does capitalize every word
&lt;span style="text-decoration:underline"&gt;after&lt;/span&gt; the initial one. There are some instances where a PascalCase or camelCase identifier may have a &amp;lsquo;_&amp;rsquo; or a capital &amp;lsquo;I&amp;rsquo; prefix added.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457677"&gt;&lt;/a&gt;&lt;a name="_Toc265502903"&gt;&lt;/a&gt;&lt;a name="_Toc256702188"&gt;General Naming Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO use PascalCasing for type and method names and constants.&lt;/p&gt;
&lt;p&gt;2. DO use camelCasing for local variable names and method arguments.&lt;/p&gt;
&lt;p&gt;3. DO use &amp;lsquo;I&amp;rsquo; to prefix Interface names.&lt;/p&gt;
&lt;p&gt;4. DO NOT create names that vary only by case.&lt;/p&gt;
&lt;p&gt;5. AVOID creating ALLCAPITALNAMES.&lt;/p&gt;
&lt;p&gt;6. DO use easily readable, descriptive, meaningful, and specific names.&lt;/p&gt;
&lt;p&gt;a. AVOID single character names.&lt;/p&gt;
&lt;p&gt;b. AVOID Hungarian notation for public or protected members.&lt;/p&gt;
&lt;p&gt;c. AVOID abbreviations unless the full name is really excessive.&lt;/p&gt;
&lt;p&gt;d. AVOID adding redundant prefixes and suffixes e.g. public enum ColorsEnum {&amp;hellip;}.&lt;/p&gt;
&lt;p&gt;7. DO name types with nouns, noun phrases, or adjective phrases using PascalCasing.&lt;/p&gt;
&lt;p&gt;8. CONSIDER ending the name of a derived classes with the name of the base class.&lt;/p&gt;
&lt;p&gt;9. DO prefix Interface names with the letter &amp;lsquo;I&amp;rsquo;, to indicate that the type is an interface.&lt;/p&gt;
&lt;p&gt;10. DO give methods names that are verbs or verb phrases.&lt;/p&gt;
&lt;p&gt;11. DO name properties using a noun, noun phrase, or adjective.&lt;/p&gt;
&lt;p&gt;12. CONSIDER giving a property the same name as its type.&lt;/p&gt;
&lt;p&gt;13. DO name fields using a noun or noun phrase.&lt;/p&gt;
&lt;p&gt;14. CONSIDER using common, well known acronyms, e.g. IO instead of InputOutput.&lt;/p&gt;
&lt;p&gt;15. AVOID acronyms that are not common or widely known.&lt;/p&gt;
&lt;p&gt;16. DO use uppercase for two-letter acronyms and PascalCase for other acronyms. It is acceptable to use &amp;ldquo;BIO&amp;rdquo; rather than &amp;ldquo;Bio&amp;rdquo; in the context of this project.&lt;/p&gt;
&lt;p&gt;17. CONSIDER using C# types rather than aliases in the System namespace.&lt;/p&gt;
&lt;p&gt;18. DO use capital letters for type placeholders in generics.&lt;/p&gt;
&lt;p&gt;19. CONSIDER prefixing Boolean variables with &amp;ldquo;Can&amp;rdquo;, &amp;ldquo;Is&amp;rdquo;, or &amp;ldquo;Has&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;20. CONSIDER appending computational variables with the suffix &amp;ldquo;Average&amp;rdquo;, &amp;ldquo;Count&amp;rdquo;, &amp;ldquo;Sum&amp;rdquo;, &amp;ldquo;Min&amp;rdquo;, or &amp;ldquo;Max&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;21. DO use meaningful namespaces under the &amp;ldquo;Bio&amp;rdquo; root when extending the Framework.&lt;/p&gt;
&lt;p&gt;22. DO use meaningful namespaces under your Product, Company, or Developer name for tools or code using the project.e.g. namespace MyCompany.MyProduct.MyNamespace;&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc318457678"&gt;&lt;/a&gt;&lt;a name="_Toc265502904"&gt;&lt;/a&gt;&lt;a name="_Toc256702189"&gt;Coding Style and Language Usage&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Resolving issues around different coding styles can cause controversy among developers, but consistent layout, format, and organization are key attributes of maintainable code. The following guidelines describe the &amp;lsquo;preferred&amp;rsquo; way to write C#
 code in order to consistently create clear, readable, comprehensible code that you and your team members can maintain over time.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457679"&gt;&lt;/a&gt;&lt;a name="_Toc265502905"&gt;&lt;/a&gt;&lt;a name="_Toc256702190"&gt;General Style Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO have a single file contribute to a single namespace.&lt;/p&gt;
&lt;p&gt;2. DO have a single class in a single source file.&lt;/p&gt;
&lt;p&gt;3. DO group all framework &amp;ldquo;using&amp;rdquo; namespaces together before custom or third party namespaces.&lt;/p&gt;
&lt;p&gt;4. AVOID putting a &amp;ldquo;using&amp;rdquo; statement inside a namespace.&lt;/p&gt;
&lt;p&gt;5. AVOID using fully qualified type names by using the &amp;ldquo;using&amp;rdquo; statement.&lt;/p&gt;
&lt;p&gt;6. CONSIDER grouping internal class implementation by type in the following order:&lt;/p&gt;
&lt;p&gt;a. Member variables.&lt;/p&gt;
&lt;p&gt;b. Constructors &amp;amp; Finalizers.&lt;/p&gt;
&lt;p&gt;c. Nested enums, structs, and classes.&lt;/p&gt;
&lt;p&gt;d. Properties&lt;/p&gt;
&lt;p&gt;e. Methods&lt;/p&gt;
&lt;p&gt;7. DO explicitly declare the access modifier for all identifiers rather than relying on default.&lt;/p&gt;
&lt;p&gt;8. CONSIDER grouping declarations within each type by their access modifier and visibility:&lt;/p&gt;
&lt;p&gt;a. public&lt;/p&gt;
&lt;p&gt;b. protected&lt;/p&gt;
&lt;p&gt;c. internal&lt;/p&gt;
&lt;p&gt;d. private&lt;/p&gt;
&lt;p&gt;9. DO declare all member variables as private and provide public, protected, or internal property access where required.&lt;/p&gt;
&lt;p&gt;10. DO declare each variable in its own statement.&lt;/p&gt;
&lt;p&gt;11. DO use white space to organize and separate code.&lt;/p&gt;
&lt;p&gt;12. DO maintain strict indentation of 4 spaces. DO NOT use tab characters in the documents.&lt;/p&gt;
&lt;p&gt;13. DO indent all code blocks contained within curly braces.&lt;/p&gt;
&lt;p&gt;14. DO place opening curly braces ( { ) on a new line.&lt;/p&gt;
&lt;p&gt;15. DO indent comments to the same level as the code being described.&lt;/p&gt;
&lt;p&gt;16. DO use correct spelling, grammar, and punctuation in all comments.&lt;/p&gt;
&lt;p&gt;17. DO use // or /// for comments.&lt;/p&gt;
&lt;p&gt;18. AVOID /* &amp;hellip; */ for comments.&lt;/p&gt;
&lt;p&gt;19. DO use inline comments to explain assumptions, issues, and algorithmic insights.&lt;/p&gt;
&lt;p&gt;20. DO NOT use comments to explain obvious code.&lt;/p&gt;
&lt;p&gt;21. DO use Task-List keywords in comments to allow filtering e.g. &lt;br&gt;
// TODO: &lt;br&gt;
// UNDONE:&lt;/p&gt;
&lt;p&gt;22. DO use C# comment blocks for documenting the API.&lt;/p&gt;
&lt;p&gt;23. DO use C# comment blocks for every public, protected, and internal declaration.&lt;/p&gt;
&lt;p&gt;24. DO include &amp;lt;summary&amp;gt; comments.&lt;/p&gt;
&lt;p&gt;25. DO include &amp;lt;param&amp;gt;, &amp;lt;return&amp;gt;, and &amp;lt;exception&amp;gt; comments where applicable.&lt;/p&gt;
&lt;p&gt;26. DO declare local variables near their first use.&lt;/p&gt;
&lt;p&gt;27. DO initialize local variables where you declare them.&lt;/p&gt;
&lt;p&gt;28. DO use the simplest data type, collection, or object that meets your requirements.&lt;/p&gt;
&lt;p&gt;29. AVOID specifying the type of an Enum. Use the default of int unless you have an explicit need for a long.&lt;/p&gt;
&lt;p&gt;30. DO NOT use inline numeric literals (&amp;lsquo;magic numbers&amp;rsquo;). Use Constant or Enum.&lt;/p&gt;
&lt;p&gt;31. AVOID declaring string literals. Use Resources, Constants, Configuration Files, Registry or other data sources.&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc318457680"&gt;&lt;/a&gt;&lt;a name="_Toc265502906"&gt;&lt;/a&gt;&lt;a name="_Toc256702191"&gt;Library Design&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;A successful framework for biology must be designed for a broad range of developer skills and capabilities. Delivering powerful capabilities with clean, simple abstractions that can be used by the novice, while still allowing the expert to control the details
 underlying the abstraction is a challenging task.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457681"&gt;&lt;/a&gt;&lt;a name="_Toc265502907"&gt;&lt;/a&gt;&lt;a name="_Toc256702192"&gt;General Library Design Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO design a framework that is both powerful and easy to use.&lt;/p&gt;
&lt;p&gt;2. DO provide a layered framework with high-level APIs optimized for productivity and low-level APIs optimized for power and expressiveness.&lt;/p&gt;
&lt;p&gt;3. AVOID mixing low-level and high-level APIs in a single namespace.&lt;/p&gt;
&lt;p&gt;4. DO ensure that layers of a single feature are well integrated and complete. Developers should be able to migrate from one level to another without re-writing the entire application.&lt;/p&gt;
&lt;p&gt;5. DO base your design on meaningful usage scenarios.&lt;/p&gt;
&lt;p&gt;6. DO ensure scenarios that correspond to an appropriate abstraction level.&lt;/p&gt;
&lt;p&gt;7. DO design APIs by first writing code samples for the main scenario then defining the object model to support the code.&lt;/p&gt;
&lt;p&gt;8. DO organize usability studies to test API in main scenarios.&lt;/p&gt;
&lt;p&gt;9. DO provide simple overloads of constructors and methods with a small number of primitive parameters.&lt;/p&gt;
&lt;p&gt;10. DO NOT require user to explicitly instantiate more than one type in the most basic scenarios.&lt;/p&gt;
&lt;p&gt;11. DO provide good defaults for all properties and parameters if possible.&lt;/p&gt;
&lt;p&gt;12. DO communicate incorrect usage of APIs using exceptions.&lt;/p&gt;
&lt;p&gt;13. DO provide strongly typed APIs if at all possible.&lt;/p&gt;
&lt;p&gt;14. DO NOT create circular references between assemblies.&lt;/p&gt;
&lt;p&gt;15. CONSIDER factoring unsafe code into a separate assembly.&lt;/p&gt;
&lt;p&gt;16. DO use zero-based indexing when developing with the Framework.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457682"&gt;Azure Deployment Guidelines&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChronoZoom is powered by Windows Azure and SQL Azure. With Team Foundation Server as the source repository for ChronoZoom, there comes an added benefit of build servers. We leverage the build feature of TFS to automatically deploy packages to Azure.&lt;/p&gt;
&lt;p&gt;As part of the Engineering practice, it would be ideal to let TFS handle the deployment to Azure as part of the daily builds. Here are some advantages of doing this:&lt;/p&gt;
&lt;p&gt;&amp;middot; Being able to build, package, and deploy our projects to multiple Windows Azure environments from a build server using MSBuild&lt;/p&gt;
&lt;p&gt;&amp;middot; Being able to retain copies of our packages and configurations for our builds in Windows Azure BLOB Storage for safe keeping, history, easy rollback scenarios, etc.&lt;/p&gt;
&lt;p&gt;&amp;middot; Having a build number generated for a build and make sure that build number is present in the name of our packages, configs, and deployment labels in Azure for consistency&lt;/p&gt;
&lt;p&gt;&amp;middot; Leveraging the Release Configurations in Visual Studio as much as possible as the designation of our different environments, since Web.Config transformations rely on this pattern already&lt;/p&gt;
&lt;p&gt;&amp;middot; Being able to still package and deploy locally, in case there is an issue with the build server for some reason&lt;/p&gt;
&lt;p&gt;Greater depth on the deployment can be found here - &lt;a href="http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx"&gt;
http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are some technical requirements to get setup with automatic deployment:&lt;/p&gt;
&lt;p&gt;&amp;middot; Install Windows Azure tools on build server&lt;/p&gt;
&lt;p&gt;&amp;middot; Install Windows Azure powershell cmdlets&lt;/p&gt;
&lt;p&gt;&amp;middot; Download publish settings from &lt;a href="http://windows.azure.com/downloads/publishprofile.aspx"&gt;
http://windows.azure.com/downloads/publishprofile.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;middot; In MSBuild build definition setting, under process set it to&lt;/p&gt;
&lt;p&gt;o /t:Publish /p:PublishDir=C:\Builds\Drops\;Configuration=DevPreview;AzurePublishProfile=&amp;lt;Your profile&amp;gt;.azurePubxml&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457683"&gt;The Future of ChronoZoom&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We envision a world where scientists, researchers, students, and teachers collaborate through ChronoZoom to share information via data, tours, and insight.&lt;/p&gt;
&lt;p&gt;Imagine a world where the leading academics publish their findings to the world in a manner that can easily be accessed and compared to other data.&lt;/p&gt;
&lt;p&gt;Imagine a tool that allows teachers to generate tours specific to their classroom needs.&lt;/p&gt;
&lt;p&gt;This can happen with your support. As ChronoZoom through the beta release, we need your feedback and support to continue to mold this project to suit your needs.&lt;/p&gt;
&lt;p&gt;Help ChronoZoom evolve by taking this survey so we can provide the best possible future features:
&lt;a href="http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/"&gt;http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>BobWalter</author><pubDate>Sat, 14 Apr 2012 02:01:59 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ChronoZoom Developer's Guide 20120414020159A</guid></item><item><title>Updated Wiki: Documentation</title><link>http://chronozoom.codeplex.com/documentation?version=24</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Welcome to ChronoZoom &lt;br&gt;
&lt;/strong&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley and Moscow State University.&lt;/p&gt;
&lt;p&gt;You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia.&amp;nbsp;&amp;nbsp; ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively
 known as Big History.&lt;/p&gt;
&lt;p&gt;By drawing upon the latest discoveries from many different disciplines, you can visualize the temporal relationships between events, trends, and themes. Some of the disciplines that contribute information to ChronoZoom include biology, astronomy, geology,
 climatology, prehistory, archeology, anthropology, economics, cosmology, natural history, and population and environmental studies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Join the Conversation &lt;br&gt;
&lt;/strong&gt;Let us know what you think; ask questions, make comments, start a new discussion topic. You are very welcome to become an active part of this project.
&lt;a href="http://chronozoom.codeplex.com/discussions"&gt;Click here&lt;/a&gt; to join in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Further Reading &lt;br&gt;
&lt;/strong&gt;There are several documents that provide additional information about ChronoZoom:&lt;/p&gt;
&lt;p&gt;- &lt;a title="QRG" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=349121"&gt;
Quick Reference Guide &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a title="User Guide and lesson plan" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=353253"&gt;
User Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://chronozoom.codeplex.com/wikipage?title=How%20to%20be%20a%20Developer%20on%20ChronoZoom"&gt;
How To Become A Developer For The ChronoZoom Project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a title="Developer's Guide" href="http://chronozoom.codeplex.com/wikipage?title=ChronoZoom%20Developer%27s%20Guide"&gt;
Developer's Guide&lt;/a&gt;&amp;nbsp;&lt;span style="color:#ff0000"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Revised 4/7/2012&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a title="Architecture Guide" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=353169"&gt;
Architecture Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Frequently Asked Questions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Q: Why does the animation appear slow or choppy on my Computer?&lt;/p&gt;
&lt;p&gt;A: ChronoZoom is designed to support most computers. However, on some machines, the graphics will be slower or less smooth than intended due to limited memory and processor power. ChronoZoom makes extensive use of Javascript and HTML5, so frame rate will
 depend on CPU performance.&lt;/p&gt;
&lt;p&gt;Q. Why do the graphic appear slow or fuzzy in Firefox 10.x ?&lt;/p&gt;
&lt;p&gt;A. Firefox 10.x automatically activates the hardware graphics acceleration even though many computers, including some Mac machines might not be able to properly use this functionality. We
&lt;span style="color:black"&gt;recommend &lt;/span&gt;&lt;a href="http://www.mydigitallife.info/how-to-disable-gpu-hardware-acceleration-in-firefox-4/"&gt;&lt;span style="color:black"&gt;disabling graphics hardware acceleration&lt;/span&gt;&lt;span style="color:black"&gt;.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. I am having issues viewing ChronoZoom through Chrome. Everything is very slow. What can I do?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. This is a known issue for Chrome due to the WebKit canvas performance instability.
&lt;/span&gt;&lt;a href="http://www.html5rocks.com/en/tutorials/canvas/performance/"&gt;Chrome is working on a fix for this issue on their next release.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. ChronoZoom sometimes stops working for me and I can&amp;rsquo;t figure out why.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. ChronoZoom requires network connectivity to work. Sometimes, your browser may cache information that will simulate connectivity, but when you want to access a tour or new information, it will stop without an internet connection.
 Check your internet connection if you are having issues.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. When using Firefox, I am having difficulty with tour audio. What can I do?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. This is a known issue for Firefox. This &lt;/span&gt;&lt;a href="http://kb.mozillazine.org/Mozilla_Suite_:_Issues_:_Sound"&gt;article&lt;/a&gt;&lt;span style="color:black"&gt; might be able to assist you.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>BobWalter</author><pubDate>Sat, 14 Apr 2012 01:59:23 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20120414015923A</guid></item><item><title>Updated Wiki: Documentation</title><link>https://chronozoom.codeplex.com/documentation?version=23</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Welcome to ChronoZoom &lt;br&gt;
&lt;/strong&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley and Moscow State University.&lt;/p&gt;
&lt;p&gt;You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia.&amp;#160;&amp;#160; ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively
 known as Big History.&lt;/p&gt;
&lt;p&gt;By drawing upon the latest discoveries from many different disciplines, you can visualize the temporal relationships between events, trends, and themes. Some of the disciplines that contribute information to ChronoZoom include biology, astronomy, geology,
 climatology, prehistory, archeology, anthropology, economics, cosmology, natural history, and population and environmental studies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Join the Conversation &lt;br&gt;
&lt;/strong&gt;Let us know what you think; ask questions, make comments, start a new discussion topic. You are very welcome to become an active part of this project.
&lt;a href="http://chronozoom.codeplex.com/discussions"&gt;Click here&lt;/a&gt; to join in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Further Reading &lt;br&gt;
&lt;/strong&gt;There are several documents that provide additional information about ChronoZoom:&lt;/p&gt;
&lt;p&gt;- &lt;a title="QRG" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=349121"&gt;
Quick Reference Guide &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a title="User Guide and lesson plan" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=353253"&gt;
User Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://chronozoom.codeplex.com/wikipage?title=How%20to%20be%20a%20Developer%20on%20ChronoZoom"&gt;
How To Become A Developer For The ChronoZoom Project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a title="Developer's Guide" href="http://chronozoom.codeplex.com/wikipage?title=ChronoZoom%20Developer%27s%20Guide"&gt;
Developer's Guide&lt;/a&gt;&amp;#160;&lt;font color="#ff0000"&gt; &lt;/font&gt;&lt;font color="#ff0000"&gt;Revised!&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a title="Architecture Guide" href="http://www.codeplex.com/Download?ProjectName=chronozoom&amp;DownloadId=353169"&gt;
Architecture Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#160;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Frequently Asked Questions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Q: Why does the animation appear slow or choppy on my Computer?&lt;/p&gt;
&lt;p&gt;A: ChronoZoom is designed to support most computers. However, on some machines, the graphics will be slower or less smooth than intended due to limited memory and processor power. ChronoZoom makes extensive use of Javascript and HTML5, so frame rate will
 depend on CPU performance.&lt;/p&gt;
&lt;p&gt;Q. Why do the graphic appear slow or fuzzy in Firefox 10.x ?&lt;/p&gt;
&lt;p&gt;A. Firefox 10.x automatically activates the hardware graphics acceleration even though many computers, including some Mac machines might not be able to properly use this functionality. We
&lt;span style="color:black"&gt;recommend &lt;/span&gt;&lt;a href="http://www.mydigitallife.info/how-to-disable-gpu-hardware-acceleration-in-firefox-4/"&gt;&lt;span style="color:black"&gt;disabling graphics hardware acceleration&lt;/span&gt;&lt;span style="color:black"&gt;.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. I am having issues viewing ChronoZoom through Chrome. Everything is very slow. What can I do?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. This is a known issue for Chrome due to the WebKit canvas performance instability.
&lt;/span&gt;&lt;a href="http://www.html5rocks.com/en/tutorials/canvas/performance/"&gt;Chrome is working on a fix for this issue on their next release.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. ChronoZoom sometimes stops working for me and I can’t figure out why.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. ChronoZoom requires network connectivity to work. Sometimes, your browser may cache information that will simulate connectivity, but when you want to access a tour or new information, it will stop without an internet connection.
 Check your internet connection if you are having issues.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;Q. When using Firefox, I am having difficulty with tour audio. What can I do?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:black"&gt;A. This is a known issue for Firefox. This &lt;/span&gt;&lt;a href="http://kb.mozillazine.org/Mozilla_Suite_:_Issues_:_Sound"&gt;article&lt;/a&gt;&lt;span style="color:black"&gt; might be able to assist you.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bobwalter</author><pubDate>Thu, 05 Apr 2012 19:13:31 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20120405071331P</guid></item><item><title>Updated Wiki: ChronoZoom Developer's Guide</title><link>https://chronozoom.codeplex.com/wikipage?title=ChronoZoom Developer's Guide&amp;version=3</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;&lt;a name="_Toc318457665"&gt;&lt;/a&gt;&lt;a name="_Toc318452320"&gt;Disclaimer&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This document is provided “as-is”. Information and views expressed in this document, including URL and other Internet Web site references, may change without notice. You bear the risk of using it.&lt;/p&gt;
&lt;p&gt;This document does not provide you with any legal rights to any intellectual property in any Microsoft product. You may copy and use this document for your internal, reference purposes.&lt;/p&gt;
&lt;p&gt;© 2012 The Outercurve Foundation. &lt;/p&gt;
&lt;p&gt;Distributed under Creative Commons Attribution 3.0 Unported License.&lt;/p&gt;
&lt;p&gt;Microsoft, Visual Studio, and Windows are trademarks of the Microsoft group of companies. All other trademarks are property of their respective owners.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457666"&gt;Introduction&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChronoZoom is an open source community project dedicated to visualizing Big History that has been funded and supported by Microsoft Research Connections in collaboration with University California at Berkeley and Moscow State University.&lt;/p&gt;
&lt;p&gt;You can browse through history on ChronoZoom to find data in the form of articles, images, video, sound, and other multimedia. ChronoZoom links a wealth of information from five major regimes that unifies all historical knowledge collectively known as Big
 History.&lt;/p&gt;
&lt;p&gt;This guide is designed to walk developers through the installation process. Some of the APIs for ChronoZoom are not yet available for the public.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457667"&gt;Prerequisites&lt;/a&gt;&lt;/h3&gt;
&lt;h5&gt;&lt;a name="_Toc318457668"&gt;Hardware Requirements:&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;· A computer that can run Visual Studio 2010.&lt;/p&gt;
&lt;p&gt;· Optionally, a network connection for the content links.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457669"&gt;Software Requirements:&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;· Visual Studio 2010 with Service Pack 1 (Check “Help” and “About” to determine if you have SP1 installed. If you don’t, you can get it
&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=23691"&gt;here&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;· Installation of Azure SDK (.net)&lt;/p&gt;
&lt;p&gt;o Recommend installing from this page: &lt;a href="http://www.windowsazure.com/en-us/develop/downloads/"&gt;
http://www.windowsazure.com/en-us/develop/downloads/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;· SQL Data Tools (Click this link to begin download &lt;a href="http://www.microsoft.com/web/gallery/install.aspx?appid=SSDT"&gt;
SQL Data Tools&lt;/a&gt;) Service pack 2 of Visual Studio must be installed before you attempt this install.&lt;/p&gt;
&lt;p&gt;· SQL Server 2008 or later Standard, Express, Developer, or Enterprise Edition&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457670"&gt;Project setup instructions&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Here are the steps to get the source code and prepare for execution:&lt;/p&gt;
&lt;p&gt;1. Download the code as zip file from Codeplex at http://chronozoom.codeplex.com/&lt;/p&gt;
&lt;p&gt;2. Extract the zip into a folder.&lt;/p&gt;
&lt;p&gt;3. Open the chronozoom.sln under the source folder (double-click on the file in windows explorer).&lt;/p&gt;
&lt;p&gt;4. Right-click the Chronozoom.Database in Visual Studio Solution Explorer and click
&lt;b&gt;Publish.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;5. In the dialog box, select the target database connection string to deploy to.&lt;/p&gt;
&lt;p&gt;6. Click Publish.&lt;/p&gt;
&lt;p&gt;7. In the chronozoom.UI project, under the scripts folder, locate the cz.settings.js&lt;/p&gt;
&lt;p&gt;8. Replace current value of this with contentItemThumbnailBaseUri = 'http://127.0.0.1:10000/devstoreaccount1/images/';&lt;/p&gt;
&lt;p&gt;a. Replace the text [Your domain] in the chronozoom.svc.cs file with localhost:4949 address. Also replace [Your domain] in “var req= WebRequest.Create”&lt;/p&gt;
&lt;p&gt;9. Replace the text [Your domain] in the ChronozoomRelay.cs file with localhost:4949&lt;/p&gt;
&lt;p&gt;10. Connect ChronoZoom to the database in the Chronozoom UI project, edit web.config&lt;/p&gt;
&lt;p&gt;a. Go to server explorer&lt;/p&gt;
&lt;p&gt;b. Add connection to the database we published before&lt;/p&gt;
&lt;p&gt;c. Right clicked on the newly selected connection&lt;/p&gt;
&lt;p&gt;d. Select properties&lt;/p&gt;
&lt;p&gt;e. Copy connection string from the properties&lt;/p&gt;
&lt;p&gt;f. Paste into Web.config “data source = {insert your data source and add “;”&lt;/p&gt;
&lt;p&gt;11. Now go to the Authoring.Azure project and edit Web.config&lt;/p&gt;
&lt;p&gt;a. Find connection string and inster the data source as before.&lt;/p&gt;
&lt;p&gt;12. Configure thumbnail generation&lt;/p&gt;
&lt;p&gt;a. Under ThumbGenApp open app.config&lt;/p&gt;
&lt;p&gt;b. Change [add your connection string here] to the connection string you got above.
&lt;/p&gt;
&lt;p&gt;c. Change [add your blob url here] to 'http://127.0.0.1:10000/devstoreaccount1/images/'
&lt;/p&gt;
&lt;p&gt;d. Change [add your azure connection string] to “UseDevelopmentStorage=true” &lt;/p&gt;
&lt;p&gt;e. Build under configuration “Dev Preview” for platform “X86”&lt;/p&gt;
&lt;p&gt;13. Set ChronoZoom.UI as the startup project. Right click on Chronozoom.UI project and select “set as startup project”. To run authoring tools:&lt;/p&gt;
&lt;p&gt;a. Set Authoring.Azure as startup project.&lt;/p&gt;
&lt;p&gt;b. Run. Login as “admin” password:”admin$”&lt;/p&gt;
&lt;p&gt;14. Right click on cz.htm and select “Set as startup page” You may get a storage emulator error. If so, please see
&lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/gg433134.aspx"&gt;http://msdn.microsoft.com/en-us/library/windowsazure/gg433134.aspx&lt;/a&gt; for an easy fix&lt;/p&gt;
&lt;p&gt;15. Run and execute. &lt;a name="_Toc318457671"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;16. To generate thumbnails (required after adding content items) set ThumbGenApp as startup project.&lt;/p&gt;
&lt;h4&gt;How to Submit Code to the Project&lt;/h4&gt;
&lt;p&gt;After you have completed the code you want to add to the project, there are a few steps to follow to get your submission to the project team:&lt;/p&gt;
&lt;p&gt;1. &lt;b&gt;Document the code &lt;/b&gt;Comment code so that testers and future developers will clearly understand what you have done. It is recommended to create a unit test to cover the fixed functionality and include it in the appropriate test project.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;Create a zipped file with your changed code&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;a. &lt;/b&gt;Include any source files that have your changes. &lt;b&gt;Please surround your changes/additions with comments that clearly explain what you are doing.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;b. &lt;/b&gt;Provide a document that explains what you did and how it works.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;Submit your changes on Codeplex:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;i. &lt;/b&gt;Click “Submit a patch” on the &lt;a href="http://chronozoom.codeplex.com/SourceControl/list/changesets"&gt;
chronozoom.codeplex.com&lt;/a&gt; site.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;ii. &lt;/b&gt;On the “Upload a Patch” page, use the the “Browse” button to find your zipped file.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;iii. &lt;/b&gt;In the description box, describe your patch, suggest a unit test if your can.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;iv. &lt;/b&gt;Please note the work item that this patch fixes&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;v. &lt;/b&gt;Click Submit.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3&gt;Coding Guidelines&lt;/h3&gt;
&lt;p&gt;One of the key components to delivering that higher productivity is by providing a consistent approach to the programming model and stylistic conventions used throughout the development of the project. Consistency reduces distractions and surprises.&lt;/p&gt;
&lt;p&gt;Our intent is to follow the guidelines laid out by the designers of the .NET Framework class library as detailed in the book
&lt;i&gt;&amp;quot;Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries&amp;quot;&lt;/i&gt; by Krzysztof Cwalina and Brad Abrams, published by Addison-Wesley in 2005 and described in the MSDN documentation delivered with Visual Studio (found
 online &lt;a href="http://msdn.microsoft.com/en-us/library/ms229042(VS.100).aspx"&gt;here&lt;/a&gt;). While we principally follow the guidelines above, conversations and styles from many other projects and developers have had influence on this document.&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc265502898"&gt;&lt;/a&gt;&lt;a name="_Toc256702183"&gt;&lt;/a&gt;&lt;a name="_Toc318457672"&gt;Coding Conventions&lt;/a&gt;&lt;/h4&gt;
&lt;h5&gt;&lt;a name="_Toc318457673"&gt;Document Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Just as writing code in a consistent style makes the code easier to read, this document uses words and formatting to ensure clarity and comprehension. The conventions used herein are recommendations and should be followed in most situations; however, we
 recognized that there are situations we may not be able to anticipate. Thus our recommendations are stated with a ‘strength’ context verb to help you decide how to apply them in your situation. Our terminology is consistent with the Framework Design Guidelines.&lt;/p&gt;
&lt;p&gt;Our strongest recommendations are &lt;b&gt;DO&lt;/b&gt; and &lt;b&gt;DO NOT&lt;/b&gt;. &lt;b&gt;DO&lt;/b&gt; and &lt;b&gt;
DO NOT&lt;/b&gt; recommendations should be followed 99.999% of the time to obtain the benefits of a consistent coding style. For example:
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;DO&lt;/b&gt; use descriptive parameter names.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;DO NOT&lt;/b&gt; require user to explicitly instantiate more than one type in the most basic scenarios.&lt;/p&gt;
&lt;p&gt;Our general recommendations are &lt;b&gt;CONSIDER&lt;/b&gt; and &lt;b&gt;AVOID&lt;/b&gt;. These guidelines should generally be followed, but we are aware of circumstances where they may not make sense. If you understand the reasoning for the general recommendation and you fully
 understand your situation and the reasons you need to violate the recommendation are clear, then go ahead. For example:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;CONSIDER&lt;/b&gt; defining interfaces to achieve a similar effect to that of multiple inheritances.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;AVOID&lt;/b&gt; using out or ref parameters.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457674"&gt;&lt;/a&gt;&lt;a name="_Toc265502900"&gt;&lt;/a&gt;&lt;a name="_Toc256702185"&gt;Naming Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;&lt;b&gt;Identifier&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;&lt;b&gt;Public&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;&lt;b&gt;Protected&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;&lt;b&gt;Internal&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;&lt;b&gt;Private&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;&lt;b&gt;Notes&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Project File&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;DO match Assembly and Namespace.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Source File&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;DO match Class name.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Namespace&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;DO use Project/Assembly name.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Class or Struct&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;CONSIDER adding suffix of sub-class.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Interface&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;DO prefix Interfaces with capital I.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Generic Class&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;DO use T or K as type identifier.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Method&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;CONSIDER using Verb or Verb-Object pair.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Property&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;DO NOT prefix with Get or Set.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Field&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;
&lt;p&gt;AVOID use of public Fields. &lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Static Field&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Constant&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;_camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Enum&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Delegate&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Event&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;PascalCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Local variable&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96"&gt;
&lt;p&gt;Parameter&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="72"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="78"&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="84"&gt;
&lt;p&gt;camelCase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="239"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;&lt;a name="_Toc318457675"&gt;&lt;/a&gt;&lt;a name="_Toc265502901"&gt;&lt;/a&gt;&lt;a name="_Toc256702186"&gt;Coding Style and Language Usage Conventions&lt;/a&gt;&lt;/h5&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;&lt;b&gt;Coding Style Issue&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;&lt;b&gt;Style Guideline&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Source Files&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;DO have only one Namespace and one Class per file.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Curly Braces&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;DO have braces on a new line.&lt;/p&gt;
&lt;p&gt;DO use a brace, even if syntactically optional.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Indentation&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;Do indent is 4 and convert tabs to spaces.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Comments&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;Do use // or ///.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Native Data Types&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;DO use built-in C# data types.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Enums&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;AVOID changing the default type.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Generics&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;CONSIDER generic types before standard or strong-typed classes.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Methods&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;AVOID large parameter lists (over 7). Use an array or object instead.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;foreach&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;DO NOT modify enumerated objects within the body of the foreach loop.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Conditionals&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;DO NOT test against true or false.&lt;/p&gt;
&lt;p&gt;DO NOT embed code with side effects within a conditional.&lt;/p&gt;
&lt;p&gt;DO NOT embed an assignment.&lt;/p&gt;
&lt;p&gt;DO NOT embed a method invocation.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="135"&gt;
&lt;p&gt;Exceptions&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="503"&gt;
&lt;p&gt;DO NOT use exceptions for normal flow control.&lt;/p&gt;
&lt;p&gt;DO NOT use “throw e;” when re-throwing, use “throw;”.&lt;/p&gt;
&lt;p&gt;DO avoid exceptions by validating pre/post conditions prior to the exception.&lt;/p&gt;
&lt;p&gt;DO derive from Exception, not ApplicationException.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;&lt;a name="_Toc318457676"&gt;&lt;/a&gt;&lt;a name="_Toc265502902"&gt;&lt;/a&gt;&lt;a name="_Toc256702187"&gt;Naming Conventions&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Consistent naming procedures applied across all the various identifier types in a project goes a long way to making code more accessible to people that use the library or join the project after you.&lt;/p&gt;
&lt;p&gt;The CLR supports both case-sensitive and case-insensitive languages. If you want to write libraries that are accessible to both types, you are restricted from on creating names that are identical except for case. Even so, appropriate and consistent capitalization
 enhances readability and comprehension of code.&lt;/p&gt;
&lt;p&gt;Capitalization is used to make identifiers more readable. There are two capitalization conventions in general use for identifier names throughout the library, PascalCase and camelCase. PascalCase capitalizes every word of the descriptive identifier whereas
 the camelCase does not capitalize the initial word of the identifier but does capitalize every word
&lt;u&gt;after&lt;/u&gt; the initial one. There are some instances where a PascalCase or camelCase identifier may have a ‘_’ or a capital ‘I’ prefix added.
&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457677"&gt;&lt;/a&gt;&lt;a name="_Toc265502903"&gt;&lt;/a&gt;&lt;a name="_Toc256702188"&gt;General Naming Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO use PascalCasing for type and method names and constants.&lt;/p&gt;
&lt;p&gt;2. DO use camelCasing for local variable names and method arguments.&lt;/p&gt;
&lt;p&gt;3. DO use ‘I’ to prefix Interface names.&lt;/p&gt;
&lt;p&gt;4. DO NOT create names that vary only by case.&lt;/p&gt;
&lt;p&gt;5. AVOID creating ALLCAPITALNAMES.&lt;/p&gt;
&lt;p&gt;6. DO use easily readable, descriptive, meaningful, and specific names.&lt;/p&gt;
&lt;p&gt;a. AVOID single character names.&lt;/p&gt;
&lt;p&gt;b. AVOID Hungarian notation for public or protected members.&lt;/p&gt;
&lt;p&gt;c. AVOID abbreviations unless the full name is really excessive.&lt;/p&gt;
&lt;p&gt;d. AVOID adding redundant prefixes and suffixes e.g. public enum ColorsEnum {…}.&lt;/p&gt;
&lt;p&gt;7. DO name types with nouns, noun phrases, or adjective phrases using PascalCasing.&lt;/p&gt;
&lt;p&gt;8. CONSIDER ending the name of a derived classes with the name of the base class.&lt;/p&gt;
&lt;p&gt;9. DO prefix Interface names with the letter ‘I’, to indicate that the type is an interface.&lt;/p&gt;
&lt;p&gt;10. DO give methods names that are verbs or verb phrases.&lt;/p&gt;
&lt;p&gt;11. DO name properties using a noun, noun phrase, or adjective.&lt;/p&gt;
&lt;p&gt;12. CONSIDER giving a property the same name as its type.&lt;/p&gt;
&lt;p&gt;13. DO name fields using a noun or noun phrase.&lt;/p&gt;
&lt;p&gt;14. CONSIDER using common, well known acronyms, e.g. IO instead of InputOutput.&lt;/p&gt;
&lt;p&gt;15. AVOID acronyms that are not common or widely known.&lt;/p&gt;
&lt;p&gt;16. DO use uppercase for two-letter acronyms and PascalCase for other acronyms. It is acceptable to use “BIO” rather than “Bio” in the context of this project.&lt;/p&gt;
&lt;p&gt;17. CONSIDER using C# types rather than aliases in the System namespace.&lt;/p&gt;
&lt;p&gt;18. DO use capital letters for type placeholders in generics.&lt;/p&gt;
&lt;p&gt;19. CONSIDER prefixing Boolean variables with “Can”, “Is”, or “Has”.&lt;/p&gt;
&lt;p&gt;20. CONSIDER appending computational variables with the suffix “Average”, “Count”, “Sum”, “Min”, or “Max”.&lt;/p&gt;
&lt;p&gt;21. DO use meaningful namespaces under the “Bio” root when extending the Framework.&lt;/p&gt;
&lt;p&gt;22. DO use meaningful namespaces under your Product, Company, or Developer name for tools or code using the project.e.g. namespace MyCompany.MyProduct.MyNamespace;&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc318457678"&gt;&lt;/a&gt;&lt;a name="_Toc265502904"&gt;&lt;/a&gt;&lt;a name="_Toc256702189"&gt;Coding Style and Language Usage&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Resolving issues around different coding styles can cause controversy among developers, but consistent layout, format, and organization are key attributes of maintainable code. The following guidelines describe the ‘preferred’ way to write C# code in order
 to consistently create clear, readable, comprehensible code that you and your team members can maintain over time.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457679"&gt;&lt;/a&gt;&lt;a name="_Toc265502905"&gt;&lt;/a&gt;&lt;a name="_Toc256702190"&gt;General Style Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO have a single file contribute to a single namespace.&lt;/p&gt;
&lt;p&gt;2. DO have a single class in a single source file.&lt;/p&gt;
&lt;p&gt;3. DO group all framework “using” namespaces together before custom or third party namespaces.&lt;/p&gt;
&lt;p&gt;4. AVOID putting a “using” statement inside a namespace.&lt;/p&gt;
&lt;p&gt;5. AVOID using fully qualified type names by using the “using” statement.&lt;/p&gt;
&lt;p&gt;6. CONSIDER grouping internal class implementation by type in the following order:&lt;/p&gt;
&lt;p&gt;a. Member variables.&lt;/p&gt;
&lt;p&gt;b. Constructors &amp;amp; Finalizers.&lt;/p&gt;
&lt;p&gt;c. Nested enums, structs, and classes.&lt;/p&gt;
&lt;p&gt;d. Properties&lt;/p&gt;
&lt;p&gt;e. Methods&lt;/p&gt;
&lt;p&gt;7. DO explicitly declare the access modifier for all identifiers rather than relying on default.&lt;/p&gt;
&lt;p&gt;8. CONSIDER grouping declarations within each type by their access modifier and visibility:&lt;/p&gt;
&lt;p&gt;a. public&lt;/p&gt;
&lt;p&gt;b. protected&lt;/p&gt;
&lt;p&gt;c. internal&lt;/p&gt;
&lt;p&gt;d. private&lt;/p&gt;
&lt;p&gt;9. DO declare all member variables as private and provide public, protected, or internal property access where required.&lt;/p&gt;
&lt;p&gt;10. DO declare each variable in its own statement.&lt;/p&gt;
&lt;p&gt;11. DO use white space to organize and separate code.&lt;/p&gt;
&lt;p&gt;12. DO maintain strict indentation of 4 spaces. DO NOT use tab characters in the documents.&lt;/p&gt;
&lt;p&gt;13. DO indent all code blocks contained within curly braces.&lt;/p&gt;
&lt;p&gt;14. DO place opening curly braces ( { ) on a new line.&lt;/p&gt;
&lt;p&gt;15. DO indent comments to the same level as the code being described.&lt;/p&gt;
&lt;p&gt;16. DO use correct spelling, grammar, and punctuation in all comments.&lt;/p&gt;
&lt;p&gt;17. DO use // or /// for comments.&lt;/p&gt;
&lt;p&gt;18. AVOID /* … */ for comments.&lt;/p&gt;
&lt;p&gt;19. DO use inline comments to explain assumptions, issues, and algorithmic insights.&lt;/p&gt;
&lt;p&gt;20. DO NOT use comments to explain obvious code.&lt;/p&gt;
&lt;p&gt;21. DO use Task-List keywords in comments to allow filtering e.g. &lt;br&gt;
// TODO: &lt;br&gt;
// UNDONE:&lt;/p&gt;
&lt;p&gt;22. DO use C# comment blocks for documenting the API.&lt;/p&gt;
&lt;p&gt;23. DO use C# comment blocks for every public, protected, and internal declaration.&lt;/p&gt;
&lt;p&gt;24. DO include &amp;lt;summary&amp;gt; comments.&lt;/p&gt;
&lt;p&gt;25. DO include &amp;lt;param&amp;gt;, &amp;lt;return&amp;gt;, and &amp;lt;exception&amp;gt; comments where applicable.&lt;/p&gt;
&lt;p&gt;26. DO declare local variables near their first use.&lt;/p&gt;
&lt;p&gt;27. DO initialize local variables where you declare them.&lt;/p&gt;
&lt;p&gt;28. DO use the simplest data type, collection, or object that meets your requirements.&lt;/p&gt;
&lt;p&gt;29. AVOID specifying the type of an Enum. Use the default of int unless you have an explicit need for a long.&lt;/p&gt;
&lt;p&gt;30. DO NOT use inline numeric literals (‘magic numbers’). Use Constant or Enum.&lt;/p&gt;
&lt;p&gt;31. AVOID declaring string literals. Use Resources, Constants, Configuration Files, Registry or other data sources.&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Toc318457680"&gt;&lt;/a&gt;&lt;a name="_Toc265502906"&gt;&lt;/a&gt;&lt;a name="_Toc256702191"&gt;Library Design&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;A successful framework for biology must be designed for a broad range of developer skills and capabilities. Delivering powerful capabilities with clean, simple abstractions that can be used by the novice, while still allowing the expert to control the details
 underlying the abstraction is a challenging task.&lt;/p&gt;
&lt;h5&gt;&lt;a name="_Toc318457681"&gt;&lt;/a&gt;&lt;a name="_Toc265502907"&gt;&lt;/a&gt;&lt;a name="_Toc256702192"&gt;General Library Design Guidelines&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;1. DO design a framework that is both powerful and easy to use.&lt;/p&gt;
&lt;p&gt;2. DO provide a layered framework with high-level APIs optimized for productivity and low-level APIs optimized for power and expressiveness.&lt;/p&gt;
&lt;p&gt;3. AVOID mixing low-level and high-level APIs in a single namespace.&lt;/p&gt;
&lt;p&gt;4. DO ensure that layers of a single feature are well integrated and complete. Developers should be able to migrate from one level to another without re-writing the entire application.&lt;/p&gt;
&lt;p&gt;5. DO base your design on meaningful usage scenarios. &lt;/p&gt;
&lt;p&gt;6. DO ensure scenarios that correspond to an appropriate abstraction level.&lt;/p&gt;
&lt;p&gt;7. DO design APIs by first writing code samples for the main scenario then defining the object model to support the code.&lt;/p&gt;
&lt;p&gt;8. DO organize usability studies to test API in main scenarios.&lt;/p&gt;
&lt;p&gt;9. DO provide simple overloads of constructors and methods with a small number of primitive parameters.&lt;/p&gt;
&lt;p&gt;10. DO NOT require user to explicitly instantiate more than one type in the most basic scenarios.&lt;/p&gt;
&lt;p&gt;11. DO provide good defaults for all properties and parameters if possible.&lt;/p&gt;
&lt;p&gt;12. DO communicate incorrect usage of APIs using exceptions.&lt;/p&gt;
&lt;p&gt;13. DO provide strongly typed APIs if at all possible.&lt;/p&gt;
&lt;p&gt;14. DO NOT create circular references between assemblies.&lt;/p&gt;
&lt;p&gt;15. CONSIDER factoring unsafe code into a separate assembly.&lt;/p&gt;
&lt;p&gt;16. DO use zero-based indexing when developing with the Framework.&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457682"&gt;Azure Deployment Guidelines&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChronoZoom is powered by Windows Azure and SQL Azure. With Team Foundation Server as the source repository for ChronoZoom, there comes an added benefit of build servers. We leverage the build feature of TFS to automatically deploy packages to Azure.
&lt;/p&gt;
&lt;p&gt;As part of the Engineering practice, it would be ideal to let TFS handle the deployment to Azure as part of the daily builds. Here are some advantages of doing this:&lt;/p&gt;
&lt;p&gt;· Being able to build, package, and deploy our projects to multiple Windows Azure environments from a build server using MSBuild
&lt;/p&gt;
&lt;p&gt;· Being able to retain copies of our packages and configurations for our builds in Windows Azure BLOB Storage for safe keeping, history, easy rollback scenarios, etc.
&lt;/p&gt;
&lt;p&gt;· Having a build number generated for a build and make sure that build number is present in the name of our packages, configs, and deployment labels in Azure for consistency
&lt;/p&gt;
&lt;p&gt;· Leveraging the Release Configurations in Visual Studio as much as possible as the designation of our different environments, since Web.Config transformations rely on this pattern already
&lt;/p&gt;
&lt;p&gt;· Being able to still package and deploy locally, in case there is an issue with the build server for some reason&lt;/p&gt;
&lt;p&gt;Greater depth on the deployment can be found here - &lt;a href="http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx"&gt;
http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are some technical requirements to get setup with automatic deployment:&lt;/p&gt;
&lt;p&gt;· Install Windows Azure tools on build server&lt;/p&gt;
&lt;p&gt;· Install Windows Azure powershell cmdlets&lt;/p&gt;
&lt;p&gt;· Download publish settings from &lt;a href="http://windows.azure.com/downloads/publishprofile.aspx"&gt;
http://windows.azure.com/downloads/publishprofile.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;· In MSBuild build definition setting, under process set it to&lt;/p&gt;
&lt;p&gt;o /t:Publish /p:PublishDir=C:\Builds\Drops\;Configuration=DevPreview;AzurePublishProfile=&amp;lt;Your profile&amp;gt;.azurePubxml&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Toc318457683"&gt;The Future of ChronoZoom&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We envision a world where scientists, researchers, students, and teachers collaborate through ChronoZoom to share information via data, tours, and insight.&lt;/p&gt;
&lt;p&gt;Imagine a world where the leading academics publish their findings to the world in a manner that can easily be accessed and compared to other data.&lt;/p&gt;
&lt;p&gt;Imagine a tool that allows teachers to generate tours specific to their classroom needs.&lt;/p&gt;
&lt;p&gt;This can happen with your support. As ChronoZoom through the beta release, we need your feedback and support to continue to mold this project to suit your needs.&lt;/p&gt;
&lt;p&gt;Help ChronoZoom evolve by taking this survey so we can provide the best possible future features:
&lt;a href="http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/"&gt;http://www.zoomerang.com/Survey/WEB22EFZBLQL4B/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bobwalter</author><pubDate>Fri, 30 Mar 2012 21:53:33 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ChronoZoom Developer's Guide 20120330095333P</guid></item></channel></rss>