-
Notifications
You must be signed in to change notification settings - Fork 1
/
Contributing.html
174 lines (172 loc) · 9.93 KB
/
Contributing.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.4"/>
<title>OpenANN: Contributing</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="openann-logo-small.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">OpenANN
 <span id="projectnumber">1.1.0</span>
</div>
<div id="projectbrief">An open source library for artificial neural networks.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.4 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(11)"><span class="SelectionMark"> </span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Contributing </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><b>Table</b> <b>of</b> <b>contents</b> </p>
<ul>
<li><a class="el" href="Contributing.html#ContributingCode">Contributing code</a></li>
<li><a class="el" href="Contributing.html#Directories">Directories</a></li>
<li><a class="el" href="Contributing.html#ImprovingQuality">Improving the code quality</a></li>
<li><a class="el" href="Contributing.html#FAQ">FAQ</a></li>
</ul>
<h1><a class="anchor" id="ContributingCode"></a>
Contributing code</h1>
<p>We use the version control system <a href="http://git-scm.com/" target="_blank">git</a> and the repository is available on github:</p>
<p><a href="https://github.com/OpenANN/OpenANN" target="_blank">https://github.com/OpenANN/OpenANN</a></p>
<p>Contributing code to OpenANN usually works as follows:</p>
<ul>
<li>Fork the repository (you need a github account).</li>
<li>Clone the repository: <div class="fragment"><div class="line">git clone [email protected]:<YourAccount>/OpenANN.git</div>
</div><!-- fragment --></li>
<li>Create a new branch to add new features / fixes / documentation etc.: <div class="fragment"><div class="line">git checkout -b <BranchName></div>
</div><!-- fragment --></li>
<li>Work on the new branch, commit and finally push your changes to your fork: <div class="fragment"><div class="line">git push origin <BranchName></div>
</div><!-- fragment --></li>
<li>Open a pull request to the main repository. A core developer will review and possibly merge your request.</li>
</ul>
<h1><a class="anchor" id="Directories"></a>
Directories</h1>
<ul>
<li>OpenANN - Header files that are exposed to the user</li>
<li>benchmarks - Standard ANN benchmarks</li>
<li>cmake - CMake macros</li>
<li>doc - Additional doxygen documentation files</li>
<li>examples - OpenANN showcase</li>
<li>lib - External libraries</li>
<li>python - Python language bindings</li>
<li>src - Implementation files for libopenann</li>
<li>test - Contains the OpenANN test suite</li>
</ul>
<h1><a class="anchor" id="ImprovingQuality"></a>
Improving the code quality</h1>
<p>There is always a lot of work that can be done to improve the quality of code, e.g.:</p>
<ul>
<li>Writing unit tests: check out the test directory to see how it works</li>
<li>Writing documentation: more API documentation, guides, how-tos, ...</li>
<li>Checking for memory leaks, access of unallocated memory, etc. with <a href="http://valgrind.org/" target="_blank">Valgrind</a></li>
<li>Adding more checks and asserts (note that these checks must not affect the performance of the code)</li>
<li>Profiling and optimizing code for performance</li>
</ul>
<p>Those tasks are great entry points to contribute to the library and we are glad to receive any improvements.</p>
<h1><a class="anchor" id="CodingStyle"></a>
Coding Style</h1>
<p>We have a <a href="https://github.com/OpenANN/OpenANN/wiki/Coding-Style" target="_blank">coding style</a>. To apply that style automatically, you can use the tool <a href="http://astyle.sourceforge.net" target="_blank">Artistic Style</a>. You can run the following command in the OpenANN main directory:</p>
<pre class="fragment">astyle --options=.astylerc --recursive "OpenANN/*.h" "src/*.cpp" "examples/*.h" "examples/*.cpp" "benchmarks/*.h" "benchmarks/*.cpp" "test/*.h" "test/*.cpp"
</pre><h1><a class="anchor" id="TestSuite"></a>
Test Suite</h1>
<p>To build the OpenANN test suite you have to build the target TestSuite: </p>
<pre class="fragment">make TestSuite
</pre><p> You can run the tests with </p>
<pre class="fragment">test/TestSuite
</pre><p> or </p>
<pre class="fragment">test/TestSuite -qt
</pre><p> The latter will only work if Qt and the Qt headers are installed. Usually all tests should be succesful.</p>
<h1><a class="anchor" id="FAQ"></a>
FAQ</h1>
<h2><a class="anchor" id="FAQ1"></a>
What can I do to contribute to OpenANN?</h2>
<p>There is a list of open issues at our github page: <a href="https://github.com/OpenANN/OpenANN/issues?state=open" target="_blank">issues</a>.</p>
<h2><a class="anchor" id="FAQ2"></a>
How can I verify my contribution?</h2>
<ol type="1">
<li>Write unit tests.</li>
<li>Use Cppcheck:<pre class="fragment">cppcheck -q --enable=all <files> </pre>.</li>
<li>Maybe add an example or a benchmark for major components like a new type of learner.</li>
<li>Use valgrind to check for memory leaks etc.</li>
</ol>
<h2><a class="anchor" id="FAQ3"></a>
How can I minimize the time that is required to switch between different build types (Debug and Release)?</h2>
<p>Both build types can be maintained simultanously: </p>
<div class="fragment"><div class="line">mkdir build/Debug</div>
<div class="line">mkdir build/Release</div>
<div class="line">cd build/Debug</div>
<div class="line">cmake -D CMAKE_BUILD_TYPE:String=Debug ../..</div>
<div class="line">make</div>
<div class="line">cd ../Release</div>
<div class="line">cmake -D CMAKE_BUILD_TYPE:String=Release ../..</div>
<div class="line">make</div>
</div><!-- fragment --> </div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Jul 9 2014 08:57:52 for OpenANN by  <a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.4
</small></address>
</body>
</html>