fixed indentation
[psensor-pkg-debian.git] / README.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"\r
2     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
4 <head>\r
5 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
6 <meta name="generator" content="AsciiDoc 8.6.9" />\r
7 <title>Psensor README</title>\r
8 <style type="text/css">\r
9 \r
10 body {\r
11     background: #e2e2e2;\r
12     color: #333333;\r
13     font-family: Ubuntu,Arial,sans-serif;\r
14     line-height: 1.6;\r
15     font-weight: lighter;\r
16     margin: 1em 2em 2em 2em;\r
17     padding: 0 0 0 0;\r
18 }\r
19 \r
20 h1 {\r
21     font-size: 2.813em;\r
22     margin: 0 0 0.267em 0;\r
23     padding: 0 0 0 0;\r
24     font-weight: normal;\r
25 }\r
26 \r
27 h2 {\r
28     font-size: 2em;\r
29     margin: 0 0 0.375em;\r
30     padding: 0 0 0 0;\r
31     font-weight: normal;\r
32 }\r
33 \r
34 h3 {\r
35     font-size: 1.438em;\r
36     margin: 0 0 0.522em;\r
37     padding: 0 0 0 0;\r
38     font-weight: normal;\r
39 }\r
40 \r
41 h4 {\r
42     font-size: 1.219em;\r
43     margin: 0 0 0.615em;\r
44     padding: 0 0 0 0;\r
45     font-weight: normal;\r
46 }\r
47 \r
48 h5 {\r
49     font-size: 1em;\r
50     margin: 0 0 0.75em;\r
51     padding: 0 0 0 0;\r
52     font-weight: bold;\r
53 }\r
54 \r
55 h6 {\r
56     font-weight: normal;\r
57     font-size: 0.813em;\r
58     letter-spacing: 0.1em;\r
59     margin: 0 0 0.923em;\r
60     text-transform: uppercase;\r
61     padding: 0 0 0 0;\r
62 }\r
63 \r
64 li {\r
65     margin: 0 0 0 1em;\r
66     line-height: 1.6;\r
67 }\r
68 \r
69 li p {\r
70     margin: 0 0 0 0;\r
71 }\r
72 \r
73 ul {\r
74     margin: 0 0 0 0;\r
75     padding: 0 0 0 0;\r
76 }\r
77 \r
78 a:link, a:visited {\r
79     color: #19B6EE;\r
80     text-decoration: none;\r
81 }\r
82 \r
83 a:hover {\r
84     text-decoration: underline;\r
85 }\r
86 \r
87 code, pre, tt {\r
88     font-family: "Ubuntu Mono","Courier New",Courier,monospace;\r
89     font-weight: normal;\r
90     color: #333333;\r
91 }\r
92 \r
93 pre {\r
94     background: none repeat scroll 0 0 #e0e0e0;\r
95     border-radius: 4px;\r
96     padding: 0.5em 0.5em;\r
97     margin: 0 0 0 0;\r
98     white-space: pre-wrap;\r
99     word-wrap: break-word;\r
100 }\r
101 \r
102 table {\r
103     width: 100%;\r
104     text-align: left;\r
105 }\r
106 \r
107 #footer {\r
108     margin: 0 0 0 0;\r
109     font-size: 0.8em;\r
110     font-weight: lighter;\r
111     clear: both;\r
112     text-align: right;\r
113 }\r
114 \r
115 #page {\r
116     margin: 0 0 0 0;\r
117     padding: 0 0 0 0;\r
118 }\r
119 \r
120 #main {\r
121     background: #ffffff;\r
122 \r
123    -moz-box-sizing: border-box;\r
124 \r
125     padding: 2em 2em 2em 2em;\r
126 \r
127     -moz-border-radius: 4px;\r
128     -webkit-border-radius: 4px;\r
129     border-radius: 4px;\r
130 \r
131     -webkit-box-shadow: 0 2px 2px 0 #C2C2C2;\r
132     box-shadow: 0 2px 2px 0 #C2C2C2;\r
133 }\r
134 \r
135 #menu {\r
136     background: #ffffff;\r
137    -moz-box-sizing: border-box;\r
138     padding: 2em 2em 2em 2em;\r
139 \r
140     -moz-border-radius: 4px;\r
141     -webkit-border-radius: 4px;\r
142     border-radius: 4px;\r
143 \r
144     -webkit-box-shadow: 0 2px 2px 0 #C2C2C2;\r
145     box-shadow: 0 2px 2px 0 #C2C2C2;\r
146 }\r
147 \r
148 #menu-list, #menu-list > li > ul  {\r
149     list-style-type: none;\r
150 }\r
151 \r
152 /* menu on left col, content on right col */\r
153 \r
154 #menu {\r
155     float: left;\r
156     width: 18%;\r
157 }\r
158 \r
159 #main {\r
160     float: right;\r
161     width: 80%;\r
162 }\r
163 \r
164 /* asciidoc */\r
165 \r
166 #toc, #content {\r
167     margin: 0em 0em 2em 0em;\r
168 \r
169     background: #ffffff;\r
170    -moz-box-sizing: border-box;\r
171     padding: 2em 2em 2em 2em;\r
172 \r
173     -moz-border-radius: 4px;\r
174     -webkit-border-radius: 4px;\r
175     border-radius: 4px;\r
176 \r
177     -webkit-box-shadow: 0 2px 2px 0 #C2C2C2;\r
178     box-shadow: 0 2px 2px 0 #C2C2C2;\r
179 }\r
180 \r
181 \r
182 </style>\r
183 <script type="text/javascript">\r
184 /*<![CDATA[*/\r
185 var asciidoc = {  // Namespace.\r
186 \r
187 /////////////////////////////////////////////////////////////////////\r
188 // Table Of Contents generator\r
189 /////////////////////////////////////////////////////////////////////\r
190 \r
191 /* Author: Mihai Bazon, September 2002\r
192  * http://students.infoiasi.ro/~mishoo\r
193  *\r
194  * Table Of Content generator\r
195  * Version: 0.4\r
196  *\r
197  * Feel free to use this script under the terms of the GNU General Public\r
198  * License, as long as you do not remove or alter this notice.\r
199  */\r
200 \r
201  /* modified by Troy D. Hanson, September 2006. License: GPL */\r
202  /* modified by Stuart Rackham, 2006, 2009. License: GPL */\r
203 \r
204 // toclevels = 1..4.\r
205 toc: function (toclevels) {\r
206 \r
207   function getText(el) {\r
208     var text = "";\r
209     for (var i = el.firstChild; i != null; i = i.nextSibling) {\r
210       if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.\r
211         text += i.data;\r
212       else if (i.firstChild != null)\r
213         text += getText(i);\r
214     }\r
215     return text;\r
216   }\r
217 \r
218   function TocEntry(el, text, toclevel) {\r
219     this.element = el;\r
220     this.text = text;\r
221     this.toclevel = toclevel;\r
222   }\r
223 \r
224   function tocEntries(el, toclevels) {\r
225     var result = new Array;\r
226     var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');\r
227     // Function that scans the DOM tree for header elements (the DOM2\r
228     // nodeIterator API would be a better technique but not supported by all\r
229     // browsers).\r
230     var iterate = function (el) {\r
231       for (var i = el.firstChild; i != null; i = i.nextSibling) {\r
232         if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {\r
233           var mo = re.exec(i.tagName);\r
234           if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {\r
235             result[result.length] = new TocEntry(i, getText(i), mo[1]-1);\r
236           }\r
237           iterate(i);\r
238         }\r
239       }\r
240     }\r
241     iterate(el);\r
242     return result;\r
243   }\r
244 \r
245   var toc = document.getElementById("toc");\r
246   if (!toc) {\r
247     return;\r
248   }\r
249 \r
250   // Delete existing TOC entries in case we're reloading the TOC.\r
251   var tocEntriesToRemove = [];\r
252   var i;\r
253   for (i = 0; i < toc.childNodes.length; i++) {\r
254     var entry = toc.childNodes[i];\r
255     if (entry.nodeName.toLowerCase() == 'div'\r
256      && entry.getAttribute("class")\r
257      && entry.getAttribute("class").match(/^toclevel/))\r
258       tocEntriesToRemove.push(entry);\r
259   }\r
260   for (i = 0; i < tocEntriesToRemove.length; i++) {\r
261     toc.removeChild(tocEntriesToRemove[i]);\r
262   }\r
263 \r
264   // Rebuild TOC entries.\r
265   var entries = tocEntries(document.getElementById("content"), toclevels);\r
266   for (var i = 0; i < entries.length; ++i) {\r
267     var entry = entries[i];\r
268     if (entry.element.id == "")\r
269       entry.element.id = "_toc_" + i;\r
270     var a = document.createElement("a");\r
271     a.href = "#" + entry.element.id;\r
272     a.appendChild(document.createTextNode(entry.text));\r
273     var div = document.createElement("div");\r
274     div.appendChild(a);\r
275     div.className = "toclevel" + entry.toclevel;\r
276     toc.appendChild(div);\r
277   }\r
278   if (entries.length == 0)\r
279     toc.parentNode.removeChild(toc);\r
280 },\r
281 \r
282 \r
283 /////////////////////////////////////////////////////////////////////\r
284 // Footnotes generator\r
285 /////////////////////////////////////////////////////////////////////\r
286 \r
287 /* Based on footnote generation code from:\r
288  * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html\r
289  */\r
290 \r
291 footnotes: function () {\r
292   // Delete existing footnote entries in case we're reloading the footnodes.\r
293   var i;\r
294   var noteholder = document.getElementById("footnotes");\r
295   if (!noteholder) {\r
296     return;\r
297   }\r
298   var entriesToRemove = [];\r
299   for (i = 0; i < noteholder.childNodes.length; i++) {\r
300     var entry = noteholder.childNodes[i];\r
301     if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")\r
302       entriesToRemove.push(entry);\r
303   }\r
304   for (i = 0; i < entriesToRemove.length; i++) {\r
305     noteholder.removeChild(entriesToRemove[i]);\r
306   }\r
307 \r
308   // Rebuild footnote entries.\r
309   var cont = document.getElementById("content");\r
310   var spans = cont.getElementsByTagName("span");\r
311   var refs = {};\r
312   var n = 0;\r
313   for (i=0; i<spans.length; i++) {\r
314     if (spans[i].className == "footnote") {\r
315       n++;\r
316       var note = spans[i].getAttribute("data-note");\r
317       if (!note) {\r
318         // Use [\s\S] in place of . so multi-line matches work.\r
319         // Because JavaScript has no s (dotall) regex flag.\r
320         note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
321         spans[i].innerHTML =\r
322           "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
323           "' title='View footnote' class='footnote'>" + n + "</a>]";\r
324         spans[i].setAttribute("data-note", note);\r
325       }\r
326       noteholder.innerHTML +=\r
327         "<div class='footnote' id='_footnote_" + n + "'>" +\r
328         "<a href='#_footnoteref_" + n + "' title='Return to text'>" +\r
329         n + "</a>. " + note + "</div>";\r
330       var id =spans[i].getAttribute("id");\r
331       if (id != null) refs["#"+id] = n;\r
332     }\r
333   }\r
334   if (n == 0)\r
335     noteholder.parentNode.removeChild(noteholder);\r
336   else {\r
337     // Process footnoterefs.\r
338     for (i=0; i<spans.length; i++) {\r
339       if (spans[i].className == "footnoteref") {\r
340         var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");\r
341         href = href.match(/#.*/)[0];  // Because IE return full URL.\r
342         n = refs[href];\r
343         spans[i].innerHTML =\r
344           "[<a href='#_footnote_" + n +\r
345           "' title='View footnote' class='footnote'>" + n + "</a>]";\r
346       }\r
347     }\r
348   }\r
349 },\r
350 \r
351 install: function(toclevels) {\r
352   var timerId;\r
353 \r
354   function reinstall() {\r
355     asciidoc.footnotes();\r
356     if (toclevels) {\r
357       asciidoc.toc(toclevels);\r
358     }\r
359   }\r
360 \r
361   function reinstallAndRemoveTimer() {\r
362     clearInterval(timerId);\r
363     reinstall();\r
364   }\r
365 \r
366   timerId = setInterval(reinstall, 500);\r
367   if (document.addEventListener)\r
368     document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);\r
369   else\r
370     window.onload = reinstallAndRemoveTimer;\r
371 }\r
372 \r
373 }\r
374 asciidoc.install(2);\r
375 /*]]>*/\r
376 </script>\r
377 </head>\r
378 <body class="article">\r
379 <div id="header">\r
380 <h1>Psensor README</h1>\r
381 <div id="toc">
382   <div id="toctitle">Table of Contents</div>
383   <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
384 </div>\r
385 </div>\r
386 <div id="content">\r
387 <div class="sect1">\r
388 <h2 id="_introduction">1. Introduction</h2>\r
389 <div class="sectionbody">\r
390 <div class="paragraph"><p>Psensor is a graphical hardware monitoring application for Linux.</p></div>\r
391 <div class="paragraph"><p>It draws realtime charts and raises alerts about:</p></div>\r
392 <div class="ulist"><ul>\r
393 <li>\r
394 <p>\r
395 the temperature of the motherboard and CPU sensors (using\r
396    lm-sensors).\r
397 </p>\r
398 </li>\r
399 <li>\r
400 <p>\r
401 the temperature of the NVidia GPUs (using XNVCtrl).\r
402 </p>\r
403 </li>\r
404 <li>\r
405 <p>\r
406 the temperature of the Hard Disk Drives (using hddtemp or libatasmart).\r
407 </p>\r
408 </li>\r
409 <li>\r
410 <p>\r
411 the rotation speed of the fans (using lm-sensors).\r
412 </p>\r
413 </li>\r
414 <li>\r
415 <p>\r
416 the temperature of a remote computer.\r
417 </p>\r
418 </li>\r
419 <li>\r
420 <p>\r
421 the cpu load.\r
422 </p>\r
423 </li>\r
424 </ul></div>\r
425 <div class="paragraph"><p>Alerts are using Desktop Notification and a specific GTK+ status icon.</p></div>\r
426 <div class="paragraph"><p>For Ubuntu users, Psensor is providing an Application Indicator which turns\r
427 red under alert and a menu for quickly check all sensors.</p></div>\r
428 <div class="paragraph"><p>It is possible to monitor remotely a computer:</p></div>\r
429 <div class="ulist"><ul>\r
430 <li>\r
431 <p>\r
432 start <code>psensor-server</code> on the remote computer.\r
433 </p>\r
434 </li>\r
435 <li>\r
436 <p>\r
437 start <code>psensor</code> using: <code>psensor --url=http://hostname:3131</code>.\r
438 </p>\r
439 </li>\r
440 </ul></div>\r
441 <div class="paragraph"><p><code>psensor-server</code> is a minimal Web server, a Web browser can be used to\r
442 monitor the remote computer by opening the URL:\r
443 <code>http://hostname:3131</code>.</p></div>\r
444 <div class="admonitionblock">\r
445 <table><tr>\r
446 <td class="icon">\r
447 <div class="title">Warning</div>\r
448 </td>\r
449 <td class="content"><code>psensor-server</code> does not provide any way to restrict the connection\r
450 to the HTTP server, worst, no effort has been made against malicious\r
451 HTTP attacks.  You should make the <code>psensor-server</code> port available\r
452 only to a network or computer you trust by using the usual network\r
453 security tools of the system (for example:\r
454 <a href="http://www.netfilter.org/projects/iptables/index.html">iptables</a>).</td>\r
455 </tr></table>\r
456 </div>\r
457 </div>\r
458 </div>\r
459 <div class="sect1">\r
460 <h2 id="_installation_using_distribution_packages">2. Installation Using Distribution Packages</h2>\r
461 <div class="sectionbody">\r
462 <div class="sect2">\r
463 <h3 id="_debian">2.1. Debian</h3>\r
464 <div class="paragraph"><p>For Debian, the binary and source packages are available in the\r
465 Wheezy, unstable and testing repositories.</p></div>\r
466 <div class="paragraph"><p>Debian package information is available at:\r
467 <a href="http://packages.qa.debian.org/p/psensor.html">http://packages.qa.debian.org/p/psensor.html</a>.</p></div>\r
468 <div class="paragraph"><p>To do the installation:</p></div>\r
469 <div class="listingblock">\r
470 <div class="content">\r
471 <pre><code>sudo apt-get install psensor psensor-server</code></pre>\r
472 </div></div>\r
473 </div>\r
474 <div class="sect2">\r
475 <h3 id="_ubuntu">2.2. Ubuntu</h3>\r
476 <div class="paragraph"><p>Since Ubuntu Oneiric (11.10), psensor is available in the universe\r
477 repository of Ubuntu.</p></div>\r
478 <div class="paragraph"><p>To install <code>psensor</code> or <code>psensor-server</code>:</p></div>\r
479 <div class="listingblock">\r
480 <div class="content">\r
481 <pre><code>sudo apt-get install psensor\r
482 sudo apt-get install psensor-server</code></pre>\r
483 </div></div>\r
484 <div class="paragraph"><p>Or search them in the Ubuntu Software Center.</p></div>\r
485 <div class="paragraph"><p>For other Ubuntu releases or user the more recent release, the easiest\r
486 way is to use the dedicated PPA.</p></div>\r
487 <div class="paragraph"><p>Last stable version:</p></div>\r
488 <div class="listingblock">\r
489 <div class="content">\r
490 <pre><code>sudo apt-get apt-add-repository ppa:/jfi/psensor\r
491 sudo apt-get update\r
492 sudo apt-get install psensor\r
493 sudo apt-get install psensor-server</code></pre>\r
494 </div></div>\r
495 <div class="paragraph"><p>Last development version which should not contain major bugs:</p></div>\r
496 <div class="listingblock">\r
497 <div class="content">\r
498 <pre><code>sudo apt-get apt-add-repository ppa:/jfi/psensor-unstable\r
499 sudo apt-get update\r
500 sudo apt-get install psensor\r
501 sudo apt-get install psensor-server</code></pre>\r
502 </div></div>\r
503 <div class="paragraph"><p>Daily trunk build which may contain major bugs and partialy\r
504 implemented features:</p></div>\r
505 <div class="listingblock">\r
506 <div class="content">\r
507 <pre><code>sudo apt-get apt-add-repository ppa:/jfi/psensor-daily-trunk\r
508 sudo apt-get update\r
509 sudo apt-get install psensor\r
510 sudo apt-get install psensor-server</code></pre>\r
511 </div></div>\r
512 </div>\r
513 </div>\r
514 </div>\r
515 <div class="sect1">\r
516 <h2 id="_installation_from_source_archive">3. Installation From Source Archive</h2>\r
517 <div class="sectionbody">\r
518 <div class="paragraph"><p><code>psensor</code> and <code>psensor-server</code> can be compiled and installed on any\r
519 modern GNU/Linux distribution.</p></div>\r
520 <div class="sect2">\r
521 <h3 id="_compilation_prerequisites">3.1. Compilation Prerequisites</h3>\r
522 <div class="paragraph"><p>The compilation of <code>psensor</code> requires:</p></div>\r
523 <div class="ulist"><ul>\r
524 <li>\r
525 <p>\r
526 make\r
527 </p>\r
528 </li>\r
529 <li>\r
530 <p>\r
531 gcc (or llvm)\r
532 </p>\r
533 </li>\r
534 <li>\r
535 <p>\r
536 lm-sensors\r
537 </p>\r
538 </li>\r
539 <li>\r
540 <p>\r
541 library sensors4\r
542 </p>\r
543 </li>\r
544 <li>\r
545 <p>\r
546 library gtk3 &gt;=3.4\r
547 </p>\r
548 </li>\r
549 <li>\r
550 <p>\r
551 help2man\r
552 </p>\r
553 </li>\r
554 <li>\r
555 <p>\r
556 asciidoc (optional, required to produce the html version of the\r
557    faq)\r
558 </p>\r
559 </li>\r
560 <li>\r
561 <p>\r
562 cppcheck (optional, static source checker)\r
563 </p>\r
564 </li>\r
565 <li>\r
566 <p>\r
567 library libnotify (optional)\r
568 </p>\r
569 </li>\r
570 <li>\r
571 <p>\r
572 library libappindicator (optional)\r
573 </p>\r
574 </li>\r
575 <li>\r
576 <p>\r
577 library libXNVCtrl (optional)\r
578 </p>\r
579 </li>\r
580 <li>\r
581 <p>\r
582 library json-c &gt;= 0.11.99 and curl (optional, required for remote monitoring)\r
583 </p>\r
584 </li>\r
585 <li>\r
586 <p>\r
587 library unity (&gt;=v3.4.2, optional)\r
588 </p>\r
589 </li>\r
590 <li>\r
591 <p>\r
592 library gtop2 (optional, required for CPU usage)\r
593 </p>\r
594 </li>\r
595 <li>\r
596 <p>\r
597 library atasmart (optional, for disk monitoring)\r
598 </p>\r
599 </li>\r
600 </ul></div>\r
601 <div class="paragraph"><p>The specific requirements for <code>psensor-server</code>:</p></div>\r
602 <div class="ulist"><ul>\r
603 <li>\r
604 <p>\r
605 library libmicrohttpd\r
606 </p>\r
607 </li>\r
608 <li>\r
609 <p>\r
610 library json0\r
611 </p>\r
612 </li>\r
613 </ul></div>\r
614 </div>\r
615 <div class="sect2">\r
616 <h3 id="_compilation_and_installation_steps">3.2. Compilation and Installation Steps</h3>\r
617 <div class="olist arabic"><ol class="arabic">\r
618 <li>\r
619 <p>\r
620 download the source archive from: <a href="http://wpitchoune.net/psensor/files">http://wpitchoune.net/psensor/files</a>\r
621 </p>\r
622 </li>\r
623 <li>\r
624 <p>\r
625 Extract files from the source archive\r
626 </p>\r
627 </li>\r
628 <li>\r
629 <p>\r
630 Compilation: <code>./configure;make clean all</code>\r
631 </p>\r
632 </li>\r
633 <li>\r
634 <p>\r
635 Installation:  <code>make install</code> (require to have root permission)\r
636 </p>\r
637 </li>\r
638 <li>\r
639 <p>\r
640 Start the sensor detection script: <code>sensors-detect</code> and follows the\r
641 instructions. Reboot or activate the kernel modules which have\r
642 been found.\r
643 </p>\r
644 </li>\r
645 <li>\r
646 <p>\r
647 To monitor HDDs, the <code>hddtemp</code> daemon must be installed and running.\r
648 </p>\r
649 </li>\r
650 <li>\r
651 <p>\r
652 Run: <code>psensor</code>\r
653 </p>\r
654 </li>\r
655 </ol></div>\r
656 </div>\r
657 <div class="sect2">\r
658 <h3 id="_ati_amd_gpu_support">3.3. ATI/AMD GPU Support</h3>\r
659 <div class="paragraph"><p>When the OpenSource ATI driver is used, the monitoring\r
660 information is available throw lm-sensors and does not require the\r
661 following instructions.</p></div>\r
662 <div class="paragraph"><p>When the proprietary ATI driver(Catalyst) is used, the build is\r
663 requiring an additional library.</p></div>\r
664 <div class="paragraph"><p>Download the\r
665 <a href="http://developer.amd.com/sdks/ADLSDK/Pages/default.aspx">ATI ADL SDK</a>\r
666 and extracts the files of the archive into a directory [dir].</p></div>\r
667 <div class="paragraph"><p>Replace the step 3. of the above section by <code>./configure\r
668 --with-libatiadl=[dir]</code> where <code>[dir]</code> must be the directory where you\r
669 have extracted the ATI ADL SDK. Other steps are indentical.</p></div>\r
670 </div>\r
671 </div>\r
672 </div>\r
673 <div class="sect1">\r
674 <h2 id="_contact">4. Contact</h2>\r
675 <div class="sectionbody">\r
676 <div class="paragraph"><p>Bugs and comments can be sent to <a href="mailto:jeanfi@gmail.com">jeanfi@gmail.com</a>.</p></div>\r
677 <div class="paragraph"><p>Home page: <a href="http://wpitchoune.net/psensor">http://wpitchoune.net/psensor</a></p></div>\r
678 </div>\r
679 </div>\r
680 </div>\r
681 <div id="footnotes"><hr /></div>\r
682 <div id="footer">\r
683 <div id="footer-text">\r
684 Last updated 2014-08-23 13:50:12 CEST\r
685 </div>\r
686 </div>\r
687 </body>\r
688 </html>\r