home.html 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614
  1. <!DOCTYPE html>
  2. <!--
  3. Metrix++, Copyright 2009-2013, Metrix++ Project
  4. Link: http://metrixplusplus.sourceforge.net
  5. This file is part of Metrix++ Tool.
  6. Metrix++ is free software: you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation, version 3 of the License.
  9. Metrix++ is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with Metrix++. If not, see <http://www.gnu.org/licenses/>.
  15. -->
  16. <html lang="en">
  17. <head>
  18. <meta charset="utf-8">
  19. <title>Metrix++ Project</title>
  20. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  21. <meta name="description" content="">
  22. <meta name="author" content="">
  23. <!-- Le styles -->
  24. <!--
  25. <link href="../../style.css" rel="stylesheet">
  26. -->
  27. <link href="assets/css/bootstrap.css" rel="stylesheet">
  28. <link href="assets/css/bootstrap-responsive.css" rel="stylesheet">
  29. <link href="assets/css/docs.css" rel="stylesheet">
  30. <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet">
  31. <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
  32. <!--[if lt IE 9]>
  33. <script src="assets/js/html5shiv.js"></script>
  34. <![endif]-->
  35. <!-- Le fav and touch icons -->
  36. <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png">
  37. <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png">
  38. <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png">
  39. <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png">
  40. <link rel="shortcut icon" href="assets/ico/favicon.png">
  41. <!--
  42. <script type="text/javascript">
  43. var _gaq = _gaq || [];
  44. _gaq.push(['_setAccount', 'UA-146052-10']);
  45. _gaq.push(['_trackPageview']);
  46. (function() {
  47. var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  48. ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  49. var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  50. })();
  51. </script>
  52. -->
  53. </head>
  54. <body data-spy="scroll" data-target=".bs-docs-sidebar">
  55. <!-- Navbar
  56. ================================================== -->
  57. <div class="navbar navbar-link navbar-fixed-top">
  58. <div class="navbar-inner">
  59. <div class="container">
  60. <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
  61. <span class="icon-bar"></span>
  62. <span class="icon-bar"></span>
  63. <span class="icon-bar"></span>
  64. </button>
  65. <a class="brand" href="./index.html">Metrix++</a>
  66. <div class="nav-collapse collapse">
  67. <ul class="nav">
  68. <li class="">
  69. <a href="./index.html">Home</a>
  70. </li>
  71. <li class="">
  72. <a href="./workflow.html">Workflow</a>
  73. </li>
  74. <li class="">
  75. <a href="./extend.html">Create plugin</a>
  76. </li>
  77. </ul>
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. <!-- Subhead
  83. ================================================== -->
  84. <header class="jumbotron" id="overview">
  85. <div id="myCarousel" class="carousel slide">
  86. <div class="carousel-inner">
  87. <div class="item active">
  88. <img src="assets/img/slide-01.jpg" alt="">
  89. <div class="container">
  90. <div class="carousel-caption">
  91. <h2>Multiple languages</h2>
  92. <p class="lead">&middot; C/C++, C# and Java.</p>
  93. <p class="lead">&middot; Recognises classes, interfaces, namespaces, functions, comments, preprocessor and much more.</p>
  94. </div>
  95. </div>
  96. </div>
  97. <div class="item">
  98. <img src="assets/img/slide-02.jpg" alt="">
  99. <div class="container">
  100. <div class="carousel-caption">
  101. <h2>Multiple metrics</h2>
  102. <p class="lead">&middot; Complexity, size and other.</p>
  103. </div>
  104. </div>
  105. </div>
  106. <div class="item">
  107. <img src="assets/img/slide-03.jpg" alt="">
  108. <div class="container">
  109. <div class="carousel-caption">
  110. <h2>High performance and scalability</h2>
  111. <p class="lead">&middot; Applicable to huge code bases: thousands of files per minute.</p>
  112. <p class="lead">&middot; Ultra-fast feedback on iterative re-run.</p>
  113. </div>
  114. </div>
  115. </div>
  116. <div class="item">
  117. <img src="assets/img/slide-01.jpg" alt="">
  118. <div class="container">
  119. <div class="carousel-caption">
  120. <h2>Effortless application to legacy code</h2>
  121. <p class="lead">&middot; Recognises legacy, modified and new code.</p>
  122. <p class="lead">&middot; Prevents from negative trends. Encourages positive.</p>
  123. </div>
  124. </div>
  125. </div>
  126. <div class="item">
  127. <img src="assets/img/slide-02.jpg" alt="">
  128. <div class="container">
  129. <div class="carousel-caption">
  130. <h2>Configurable</h2>
  131. <p class="lead">&middot; Define and apply your rules and policies.</p>
  132. <p class="lead">&middot; Integrate with your workflow.</p>
  133. </div>
  134. </div>
  135. </div>
  136. <div class="item">
  137. <img src="assets/img/slide-03.jpg" alt="">
  138. <div class="container">
  139. <div class="carousel-caption">
  140. <h2>Extendable via plugins</h2>
  141. <p class="lead">&middot; Define your custom metric.</p>
  142. <p class="lead">&middot; Add new language parser.</p>
  143. <p class="lead">&middot; Create advanced post-analysis tool.</p>
  144. </div>
  145. </div>
  146. </div>
  147. </div>
  148. <a class="left carousel-control" href="#myCarousel" data-slide="prev">&lsaquo;</a>
  149. <a class="right carousel-control" href="#myCarousel" data-slide="next">&rsaquo;</a>
  150. </div>
  151. <div class="container">
  152. <div class="row">
  153. <div class="span3">
  154. </div>
  155. <div class="span9">
  156. <h5 class="text-right">Management of source code quality is possible.</h5>
  157. <p class="text-right">
  158. <a href="https://sourceforge.net/projects/metrixplusplus/files/latest/download" target="blank"
  159. ><button type="button"class="btn btn-danger">Download</button></a>
  160. <!--
  161. <button type="button"class="btn btn-warning">Donate</button>
  162. -->
  163. </p>
  164. </div>
  165. </div>
  166. </div>
  167. </header>
  168. <div class="container"><div class="row">
  169. <!-- Docs nav
  170. ================================================== -->
  171. <div class="span3 bs-docs-sidebar">
  172. <ul class="nav nav-list bs-docs-sidenav">
  173. <!--<li><img src="../../logo_project.png"/><p>&nbsp;</p></li>-->
  174. <li><a href="#overview_section"><i class="icon-chevron-right"></i> Overview</a></li>
  175. <li><a href="#overview_languages_section"><i class="icon-hand-right"></i> &middot; languages</a></li>
  176. <li><a href="#overview_metrics_section"><i class="icon-hand-right"></i> &middot; metrics</a></li>
  177. <li><a href="#download_section"><i class="icon-chevron-right"></i> Download &amp; Install</a></li>
  178. <li><a href="#workflow_section"><i class="icon-chevron-right"></i> Getting started</a></li>
  179. <li><a href="#extend_section"><i class="icon-chevron-right"></i> Extending the tool</a></li>
  180. <li><a href="#contribute_section"><i class="icon-chevron-right"></i> Feedback &amp; Contribute</a></li>
  181. </ul>
  182. </div>
  183. <!-- Sections
  184. ================================================== -->
  185. <div class="span9">
  186. <section id="overview_section">
  187. <div class="page-header">
  188. <h1>Overview</h1>
  189. </div>
  190. <h2>Highlights</h2>
  191. <p>Metrix++ is a tool to collect and analyse code metrics. Any metric is useless if it is not used.
  192. Metrix++ offers ease of introduction and integration with a variety of application use cases.</p>
  193. <ul>
  194. <li>Monitoring trends (eg. on <strong>daily</strong> basis. In order to take actions or make right decisions earlier.)</li>
  195. <li>Enforcing trends (eg. on <strong>hourly</strong> basis, at every commit of code changes.)</li>
  196. <li>Automated asistance to review agains standards (eg. on <strong>per minute</strong> basis during code refactoring and code development.)</li>
  197. </ul>
  198. <p>The workflow sections below demonstarate these basic application usecases.</p>
  199. </section>
  200. <section id="overview_languages_section">
  201. <h2>Languages supported</h2>
  202. <p>The tool can parse C/C++, C# and Java source code files. The parser identifies certain regions in the code,
  203. such as classes, functions, namespaces, interfaces, etc. It detects comments, strings and code for the preprocessor.
  204. The identified regions form a tree of nested source code blocks, which are subsequently refered to and scanned by metrics plugins.
  205. Thus the tool attributes metrics to regions, which provides fine grained data to analysis tools.
  206. The following example demonstrates the regions concept.</p>
  207. <table class="table">
  208. <thead>
  209. <tr>
  210. <th>Source code</th>
  211. <th>Regions tree [type: name: content type]</th>
  212. </tr>
  213. </thead>
  214. <tbody>
  215. <tr>
  216. <td>
  217. <pre class="prettyprint linenums">
  218. // simple C++ code
  219. #include &lt;myapi.h&gt;
  220. // I explain the following class
  221. class MyClass {
  222. public:
  223. int m_var; // some member
  224. // I explain the following function
  225. MyClass(): m_var(0) {
  226. char str[] = "unused string"
  227. // nested region for good measure
  228. struct MyStruct {};
  229. }
  230. // Do not judge ugly code below
  231. #define get_max(a,b) ((a)>(b)?(a):(b))
  232. set_max(int b) {
  233. m_var = get_max(m_var, b);
  234. }
  235. };
  236. // this is the last line
  237. </pre>
  238. </td>
  239. <td>
  240. <pre class="prettyprint linenums">
  241. file: __global__: comment
  242. file: __global__: code
  243. file: __global__: preprocessor
  244. file: __global__: code
  245. class: MyClass: comment
  246. class: MyClass: code
  247. class: MyClass: code
  248. class: MyClass: code, comment
  249. class: MyClass: code
  250. function: MyClass: comment
  251. function: MyClass: code
  252. function: MyClass: code, string
  253. function: MyClass: code
  254. struct: MyStruct: comment
  255. struct: MyStruct: code
  256. function: MyClass: code
  257. class: MyClass: code
  258. function: set_max: comment
  259. function: set_max: preprocessor
  260. function: set_max: code
  261. function: set_max: code
  262. function: set_max: code
  263. class: MyClass: code
  264. file: __global__: comment
  265. </pre>
  266. </td>
  267. </tr>
  268. </tbody>
  269. </table>
  270. </section>
  271. <section id="overview_metrics_section">
  272. <h2>Metrics</h2>
  273. <p>The metrics highlighed in blue are <strong>per file</strong> metrics. The other metrics are <strong>per region</strong> metrics.</p>
  274. <table class="table table-bordered">
  275. <thead>
  276. <tr>
  277. <th>Metric (enable option)</th>
  278. <th>Brief description</th>
  279. <th>Motivation / Potential use</th>
  280. </tr>
  281. </thead>
  282. <tbody>
  283. <tr class="info">
  284. <td>std.general.size</td>
  285. <td>Size of a file in bytes.</td>
  286. <td rowspan="6"><ul><li>Monitoring the growth of source code base.</li>
  287. <li>Normalizing other metrics.</li>
  288. <li>Preventing large files and regions (large things are difficult to maintain).</li>
  289. <li>Predicting delivery dates by comparing
  290. <a href="http://www.compaid.com/caiInternet/casestudies/kanarticle2.pdf" target="blank">S-shaped code base growth / change curves</a>.</li></ul></td>
  291. </tr>
  292. <tr>
  293. <td>std.code.length.total</td>
  294. <td>The same as 'std.general.size' metric, but attributed to code regions.</td>
  295. </tr>
  296. <tr class="info">
  297. <td>std.code.filelines.total</td>
  298. <td>Number of non-blank lines of code of any content type (exectuable, comments, etc.) per file</td>
  299. </tr>
  300. <tr>
  301. <td>std.code.lines.total</td>
  302. <td>Number of non-blank lines of code of any content type (exectuable, comments, etc.) per region</td>
  303. </tr>
  304. <tr class="info">
  305. <td>std.code.filelines.code</td>
  306. <td>Number of non-blank lines of code excluding preprocessor and comments per file.</td>
  307. </tr>
  308. <tr>
  309. <td>std.code.lines.code</td>
  310. <td>Number of non-blank lines of code excluding preprocessor and comments per region.</td>
  311. </tr>
  312. <tr class="info">
  313. <td>std.code.filelines.preprocessor</td>
  314. <td>Number of non-blank lines of preprocessor code per file.</td>
  315. <td rowspan="2"><ul><li>Enforcing localisation of preprocessor code in a single place.</li>
  316. <li>Encouraging usage of safer code structures instead of the preprocessor.</li></ul></td>
  317. </tr>
  318. <tr>
  319. <td>std.code.lines.preprocessor</td>
  320. <td>Number of non-blank lines of preprocessor code per region.</td>
  321. </tr>
  322. <tr class="info">
  323. <td>std.code.fileslines.comments</td>
  324. <td>Number of non-blank lines of comments per file.</td>
  325. <td rowspan="2"><ul><li>Low number of comments may indicate maintainability problems.</li></ul></td>
  326. </tr>
  327. <tr>
  328. <td>std.code.lines.comments</td>
  329. <td>Number of non-blank lines of comments per region.</td>
  330. </tr>
  331. <tr>
  332. <td>std.code.complexity.cyclomatic</td>
  333. <td>McCabe cyclomatic complexity metric.</td>
  334. <td colspan="2"><ul><li>Identification of highly complex code for review and refactoring.</li>
  335. <li>Preventing complex functions (complexity is a reason of many defects and a reason of expensive maintaintenance).</li></ul></td>
  336. </tr>
  337. <tr>
  338. <td>std.code.complexity.maxindent</td>
  339. <td>Maximum level of indentation of blocks within a region. For example, the following class has got
  340. the metric equal to 1 and the function has got it equal to 2:
  341. <pre class="prettyprint">
  342. class WeekClass {
  343. int isWeekend(int day) {
  344. if (day == SATURDAY ||
  345. day == SUNDAY) {
  346. return true;
  347. }
  348. return false;
  349. }
  350. }
  351. </pre>
  352. </td>
  353. </tr>
  354. <tr>
  355. <td>std.code.magic.numbers</td>
  356. <td>Number of magic numbers. There is an option to exclude 0, -1 and 1 numbers from counting.</td>
  357. <td>Magic numbers are dangerous.
  358. The <a href="http://stackoverflow.com/questions/47882/what-is-a-magic-number-and-why-is-it-bad" target="blank">
  359. discussion on stackoverflow</a> explains why.</td>
  360. </tr>
  361. <tr>
  362. <td>std.code.todo.comments, std.code.todo.strings</td>
  363. <td>Number of TODO/FIXME/etc markers in comments and strings accordingly.
  364. There is an option to configure a list of markers.</td>
  365. <td>Manage potentially incomplete work. If project manager dispatches issues only in a tracker tool,
  366. todo markers are lost in the source code. The metric could make these 'lost' issues visible.</td>
  367. </tr>
  368. <tr>
  369. <td>std.code.maintindex.simple</td>
  370. <td>Simple variant of maintainability index - a measure of maintainability.
  371. It uses std.code.lines:code and std.code.complexity:cyclomatic
  372. metrics to evaluate level of maintainability. Lower value of this index indicates
  373. better level maintainability</td>
  374. <td>Identify code, which may benefit the most from refactoring.</td>
  375. </tr>
  376. <tr>
  377. <td>std.suppress</td>
  378. <td>An option enables collection of Metrix++ suppressions and 2 metrics: 'std.suppress:count' and
  379. 'std.suppress.file:count'. The first is number of suppressions per region.
  380. The second is the same but applies for file-scope metrics.</td>
  381. <td><ul><li>Suppressing false-positives.</li>
  382. <li>Managing the amount of suppressions. There should be no false-positives to suppress with the right metric,
  383. but there could be exceptions in specific cases. Managing suppressions is about managing exceptions.
  384. If there are many exceptional cases, maybe something is wrong with a metric or the application of a metric.</li></ul></td>
  385. </tr>
  386. <tr class="info">
  387. <td>std.general.procerrors</td>
  388. <td>Number of errors detected by Metrix++ code parser.</td>
  389. <td><ul><li>Cleaning up errors to ensure reliable code scanning.</li>
  390. <li>Errors, like mismatched brackets, may result in bad identification of regions.</li>
  391. </ul></td>
  392. </tr>
  393. <tr class="info">
  394. <td>std.general.proctime</td>
  395. <td>Seconds spent on processing a file.</td>
  396. <td><ul><li>Monitor and profile Metrix++ tool's performance.</li></ul></td>
  397. </tr>
  398. </tbody>
  399. </table>
  400. </section>
  401. <section id="download_section">
  402. <div class="page-header">
  403. <h1>Download &amp; Install</h1>
  404. </div>
  405. <p>In order to get the tool working, <a href="https://sourceforge.net/projects/metrixplusplus/files/latest/download" target="blank">dowload the archive</a> with the latest stable version
  406. and unpack it to some folder. The first run of the tool will trigger the installation within the folder,
  407. where it was launched.</p>
  408. <p>In order to checkout the latest released version from the <a href="https://sourceforge.net/p/metrixplusplus/code" target="blank">version control system</a> use this command:</p>
  409. <pre>svn checkout <a href="https://sourceforge.net/p/metrixplusplus/code" target="blank">svn://svn.code.sf.net/p/metrixplusplus/code</a>/releases/latest Metrix++</pre>
  410. <p>In order to checkout the latest version under development, use this command:</p>
  411. <pre>svn checkout <a href="https://sourceforge.net/p/metrixplusplus/code" target="blank">svn://svn.code.sf.net/p/metrixplusplus/code</a>/mainline Metrix++</pre>
  412. <h4>Change and Release Notes</h4>
  413. <p>Change and release notes are available <a href="https://sourceforge.net/p/metrixplusplus/wiki/ChangeLog/" target="blank">here</a>.</p>
  414. <h4>Prerequisites</h4>
  415. <p>Python Runtime Environment (version 2.7.* or later. Version 3.* has not been tested)</p>
  416. <h4>License</h4>
  417. <p>This program is free software; you can redistribute it and/or modify it
  418. under the terms of the GNU General Public License as published by the
  419. Free Software Foundation; version 3 of the License.</p>
  420. <p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  421. without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  422. See the GNU General Public License for more details.</p>
  423. <p>You should have received a copy of the GNU General Public License along with the Metrix++;
  424. if not, contact <a href="mailto:avkonst@users.sourceforge.net?subject=Metrix%2B%2B License">Project Administrator</a></p>
  425. </section>
  426. <section id="workflow_section">
  427. <div class="page-header">
  428. <h1>Getting started</h1>
  429. </div>
  430. <p>The tool is relatively simple to use. There are 3 fundamental steps:</p>
  431. <ul>
  432. <li>Collect the data, for example:</li>
  433. <pre>
  434. &gt; python "/path/to/metrix++.py" collect --std.code.lines.code --std.code.complexity.cyclomatic
  435. </pre>
  436. </ul>
  437. <ul>
  438. <li>View the data, for example:</li>
  439. <pre>
  440. &gt; python "/path/to/metrix++.py" view
  441. </pre>
  442. </ul>
  443. <ul>
  444. <li>Apply thresholds, for example:</li>
  445. <pre>
  446. &gt; python "/path/to/metrix++.py" limit --max-limit=std.code.complexity:cyclomatic:7
  447. </pre>
  448. </ul>
  449. <p>Please, check the advanced <a href="workflow.html">description of the workflow</a> with real examples.</p>
  450. </section>
  451. <section id="extend_section">
  452. <div class="page-header">
  453. <h1>Extending the tool</h1>
  454. </div>
  455. <p>Want to enable a new metric or a language, need advanced post-analysis tool?
  456. Please, check the <a href="extend.html">plugin development tutorial</a>.</p>
  457. </section>
  458. <section id="contribute_section">
  459. <div class="page-header">
  460. <h1>Feeback and contribute</h1>
  461. </div>
  462. <p>Now it is your turn. There are multiple ways how you can contribute and help to improve and progress Metrix++ project:</p>
  463. <ul>
  464. <li>Try Metrix++ and <a href="https://sourceforge.net/projects/metrixplusplus/reviews/new">post review</a></li>
  465. <li><a href="https://sourceforge.net/p/metrixplusplus/tickets/new/">Submit new feature request or bug report</a></li>
  466. <li><a href="https://sourceforge.net/p/metrixplusplus/tickets/new/">Ask a question</a></li>
  467. <li>Share your patch files and ideas, colloborate by email to
  468. <a href="mailto:avkonst@users.sourceforge.net?subject=Metrix%2B%2B Project Request" target="blank">project administrator</a></li>
  469. <li>Create and publish your plugin.
  470. <a href="mailto:avkonst@users.sourceforge.net?subject=Metrix%2B%2B Plugin Reference" target="blank">Request to refer</a>
  471. to it from Metrix++ project space.</li>
  472. <li><a href="mailto:avkonst@users.sourceforge.net?subject=Metrix%2B%2B Plugin Submission" target="blank">Submit your plugin</a>
  473. to include to the standard set</li>
  474. <li>... and consider to
  475. <a href="mailto:avkonst@users.sourceforge.net?subject=Metrix%2B%2B Join Request" target="blank">join the project</a>!</li>
  476. </ul>
  477. </section>
  478. </div> <!-- end for sections -->
  479. </div></div> <!-- end for row and container -->
  480. <!-- Footer
  481. ================================================== -->
  482. <footer class="footer">
  483. <div class="container">
  484. <div class="row">
  485. <div class="span3">
  486. <p><a href="http://sourceforge.net/projects/metrixplusplus/"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=275605&amp;type=3"
  487. alt="Get Metrix++ at SourceForge.net. Fast, secure and Free Open Source software downloads" border="0"></a></p>
  488. <p>&middot;</p>
  489. <p>&middot; &middot;<script type="text/javascript" src="http://www.ohloh.net/p/485947/widgets/project_users_logo.js"></script></p>
  490. <p><a href="http://freecode.com/projects/metrix"><img src="assets/img/fm_logo.png" width="130"></a></p>
  491. <p>&middot;</p>
  492. <p><a href="http://www.softpedia.com/progClean/Metrix-Clean-241097.html"><img src="assets/img/softpedia_free_award_f.gif" width="147" /></a></p>
  493. </div>
  494. <div class="span9">
  495. <p>Copyright <strong>&copy;</strong> 2009 - 2013, <a href="mailto:avkonst@users.sourceforge.net"><span class="normalImportance">Metrix++</span> Project</a></p>
  496. <p>Code licensed under <a href="http://www.gnu.org/licenses/gpl.txt" target="_blank">GPL 3.0</a>, documentation under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p>
  497. <ul class="footer-links">
  498. <li><a href="https://sourceforge.net/p/metrixplusplus/tickets/new/">Ask question</a></li>
  499. <li class="muted">&middot;</li>
  500. <li><a href="https://sourceforge.net/p/metrixplusplus/tickets/new/">Report defect</a></li>
  501. <li class="muted">&middot;</li>
  502. <li><a href="https://sourceforge.net/p/metrixplusplus/tickets/new/">Feature request</a></li>
  503. <li class="muted">&middot;</li>
  504. <li><a href="https://sourceforge.net/p/metrixplusplus/tickets/search/?q=%21status%3Awont-fix+%26%26+%21status%3Aclosed">Open issues</a></li>
  505. <li class="muted">&middot;</li>
  506. <li><a href="https://sourceforge.net/p/metrixplusplus/wiki/ChangeLog/">Changelog</a></li>
  507. </ul>
  508. </div>
  509. </div>
  510. </div>
  511. </footer>
  512. <!-- Le javascript
  513. ================================================== -->
  514. <!-- Placed at the end of the document so the pages load faster -->
  515. <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
  516. <script src="assets/js/jquery.js"></script>
  517. <script src="assets/js/bootstrap-transition.js"></script>
  518. <script src="assets/js/bootstrap-alert.js"></script>
  519. <script src="assets/js/bootstrap-modal.js"></script>
  520. <script src="assets/js/bootstrap-dropdown.js"></script>
  521. <script src="assets/js/bootstrap-scrollspy.js"></script>
  522. <script src="assets/js/bootstrap-tab.js"></script>
  523. <script src="assets/js/bootstrap-tooltip.js"></script>
  524. <script src="assets/js/bootstrap-popover.js"></script>
  525. <script src="assets/js/bootstrap-button.js"></script>
  526. <script src="assets/js/bootstrap-collapse.js"></script>
  527. <script src="assets/js/bootstrap-carousel.js"></script>
  528. <script src="assets/js/bootstrap-typeahead.js"></script>
  529. <script src="assets/js/bootstrap-affix.js"></script>
  530. <script>
  531. !function ($) {
  532. $(function(){
  533. // carousel demo
  534. $('#myCarousel').carousel()
  535. })
  536. }(window.jQuery)
  537. </script>
  538. <script src="assets/js/holder/holder.js"></script>
  539. <script src="assets/js/google-code-prettify/prettify.js"></script>
  540. <script src="assets/js/application.js"></script>
  541. <script>
  542. </script>
  543. <!-- Analytics
  544. ================================================== -->
  545. <!--
  546. <script>
  547. var _gauges = _gauges || [];
  548. (function() {
  549. var t = document.createElement('script');
  550. t.type = 'text/javascript';
  551. t.async = true;
  552. t.id = 'gauges-tracker';
  553. t.setAttribute('data-site-id', '4f0dc9fef5a1f55508000013');
  554. t.src = '//secure.gaug.es/track.js';
  555. var s = document.getElementsByTagName('script')[0];
  556. s.parentNode.insertBefore(t, s);
  557. })();
  558. </script>
  559. -->
  560. </body>
  561. </html>