/usr/share/doc/gnumed/user-manual/Gnumed/DevelopmentGuidelines.html is in gnumed-doc 1.4.6+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 | <!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" xml:lang="en_US" lang="en_US">
<head>
<title> DevelopmentGuidelines < Gnumed < Foswiki</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta name="robots" content="noindex" /> <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss.html" />
<link rel="icon" href="../rsrc/System/ProjectLogos/favicon.ico" type="image/x-icon" /> <link rel="shortcut icon" href="../rsrc/System/ProjectLogos/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="http://wiki.gnumed.de/bin/edit/Gnumed/DevelopmentGuidelines?t=1391005508" type="application/x-wiki" title="edit DevelopmentGuidelines" />
<meta name="description" content="DevelopmentGuidelines" />
<!--[if IE]></base><![endif]-->
<style type="text/css" media="all">
@import url('../rsrc/System/SkinTemplates/base.css');
</style>
<style type="text/css" media="all">
@import url('../rsrc/System/SkinTemplates/default.css');
</style>
<!--[if IE]><style type="text/css" media="screen">
pre {
overflow-x:auto;
padding-bottom:expression(this.scrollWidth > this.offsetWidth ? 16 : 0);
}
</style>
<![endif]-->
<meta name="foswiki.PUBURL" content="http://wiki.gnumed.de/pub" /> <!-- PUBURL -->
<meta name="foswiki.PUBURLPATH" content="/pub" /> <!-- PUBURLPATH -->
<meta name="foswiki.SCRIPTSUFFIX" content="" /> <!-- SCRIPTSUFFIX -->
<meta name="foswiki.SCRIPTURL" content="http://wiki.gnumed.de/bin" /> <!-- SCRIPTURL -->
<meta name="foswiki.SCRIPTURLPATH" content="/bin" /> <!-- SCRIPTURLPATH -->
<meta name="foswiki.SERVERTIME" content="29%20Jan%202014%20-%2015:25" /> <!-- SERVERTIME -->
<meta name="foswiki.SKIN" content="twikinet%2c%20pattern" /> <!-- SKIN -->
<meta name="foswiki.SYSTEMWEB" content="System" /> <!-- SYSTEMWEB -->
<meta name="foswiki.TOPIC" content="DevelopmentGuidelines" /> <!-- TOPIC -->
<meta name="foswiki.USERNAME" content="KarstenHilbert" /> <!-- USERNAME -->
<meta name="foswiki.USERSWEB" content="Main" /> <!-- USERSWEB -->
<meta name="foswiki.WEB" content="Gnumed" /> <!-- WEB -->
<meta name="foswiki.WIKINAME" content="KarstenHilbert" /> <!-- WIKINAME -->
<meta name="foswiki.WIKIUSERNAME" content="Main.KarstenHilbert" /> <!-- WIKIUSERNAME -->
<meta name="foswiki.NAMEFILTER" content="%5b%5cs%5c*%3f~%5e%5c%24%40%25%60%22'%26%3b%7c%3c%3e%5c%5b%5c%5d%23%5cx00-%5cx1f%5d" /> <!-- NAMEFILTER --><!--JQUERYPLUGIN::FOSWIKI::META-->
<script type='text/javascript' src='../rsrc/System/JQueryPlugin/jquery-1.4.3.js'></script><!--JQUERYPLUGIN-->
<script type='text/javascript' src='../rsrc/System/JQueryPlugin/plugins/livequery/jquery.livequery.js'></script><!--JQUERYPLUGIN::LIVEQUERY-->
<script type='text/javascript' src='../rsrc/System/JQueryPlugin/plugins/foswiki/jquery.foswiki.js'></script><!--JQUERYPLUGIN::FOSWIKI-->
<script type='text/javascript' src='../rsrc/System/JSTreeContrib/jquery.jstree.js'></script><!--JQUERYPLUGIN::JSTREE-->
</head>
<body class=""><div class="foswikiPage">
<a name="PageTop"></a>
<p></p>
<p></p>
<h1><a name="Development_Guidelines"></a> Development Guidelines </h1>
<p></p>
<h2><a name="Coding_and_Module_45design_guidelines"></a> Coding and Module-design guidelines </h2>
<p></p>
<h4><a name="string_handling_47encoding"></a> string handling/encoding </h4>
<p></p> <ul>
<li> there is no such thing as <em>plain text</em>
</li> <li> always use Unicode internally
</li> <li> appropriately encode()/decode() at IO boundaries <ul>
<li> DB connection (gmPG2.py consumes/produces unicode)
</li> <li> files (use codecs.open(..., encoding=...)
</li> <li> user input (wxPython consumes/produces u'' unicode strings)
</li></ul>
</li> <li> what is on offer by psycopg2 isn't perfect, but is the recommended way of quoting when outside-of-query parameter passing isn't available and in this way affords some protection against SQL injection attacks (see <a href="http://www.codinghorror.com/blog/archives/000275.html" target="_top">here</a> and <a href="http://stackoverflow.com/questions/681583/sql-injection-on-insert" target="_top">here too</a>): do <strong>not</strong> create queries by string concatenation but rather always use %s + query arguments (gmPG2.py offers convenience on that)
</li></ul>
<p></p>
<h4><a name="i18n"></a> i18n </h4>
<p></p> <ul>
<li> wrap all UI strings in _()
</li> <li> always use <em>%(tag)s</em> instead of <em>%s</em> only for replacement <ul>
<li> that way, the order of replacements can be changed in the target language
</li></ul>
</li> <li> for timestamp formatting use gmDateTime.py::pydt_strftime()
</li> <li> mistakes to avoid are explained at the <a href="http://techbase.kde.org/Development/Tutorials/Localization/i18n_Mistakes" target="_top">KDE project</a>
</li></ul>
<p></p>
<h4><a name="backend_access"></a> backend access </h4>
<p></p> <ul>
<li> always use the middleware
</li> <li> do not put SQL directly in the frontend code - except for match providers
</li> <li> due to limitations in PostgreSQL's inheritance implementation, never ever <strong>write</strong> to clin_root_item or risk data corruption <ul>
<li> we have put in rules disallowing write access to this parent table, to prevent this and if we should have an unprotected parent table elsewhere in the schema, let us know
</li></ul>
</li></ul>
<p></p>
<h4><a name="more"></a> more </h4>
<p></p> <ul>
<li> do <strong>NOT</strong> mix tabs and spaces when indenting (tabs preferred, pure space acceptable)
</li></ul>
<p></p> <ul>
<li> try providing <em>docstrings</em> (see <a href="http://www.python.org/doc/current/tut/node6.html#SECTION006760000000000000000" target="_top">Python tutorial reference</a>), preferably in EpyDoc style
</li> <li> comment your code
</li> <li> use <a href="NamingConventions.html">NamingConventions</a>
</li></ul>
<p></p> <ul>
<li> each GUI panel should be a black box, communicating with other panels via messages
</li></ul>
<p></p> <ul>
<li> using exceptions: suggested to follow <ul>
<li> <a href="http://www.javaworld.com/javaworld/jw-07-1998/jw-07-techniques_p.html" target="_top">guidelines</a>
</li> <li> <a href="http://www.nedbatchelder.com/text/exceptions-vs-status.html" target="_top">http://www.nedbatchelder.com/text/exceptions-vs-status.html</a> and links from there
</li> <li> in Python there is no checked vs unchecked exceptions plus
</li> <li> <strong>not</strong> using the string interface, but only the class interface, on exceptions
</li> <li> related email thread <a href="http://lists.gnu.org/archive/html/gnumed-devel/2005-12/msg00296.html" target="_top">here</a>
</li></ul>
</li></ul>
<p></p> <ul>
<li> wxwindows guidelines at <a href="http://wxguide.sourceforge.net/guidelines/content.html" target="_top">http://wxguide.sourceforge.net/guidelines/content.html</a>
</li></ul>
<p></p>
<h2><a name="Key_area_coordinators"></a> Key area coordinators </h2>
<p></p>
<table rules="none" border="1" class="foswikiTable">
<thead>
<tr class="foswikiTableOdd foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0">
<th class="foswikiTableCol0 foswikiFirstCol"> <a rel="nofollow" href="/bin/rest/PublishPlugin/publish?validation_key=b6adb20ba63cfbada77bacf048ebff7c;topic=Gnumed.PublishManual;ping=29%20Jan%202014%20-%2015:24;sortcol=0;table=3;up=0#sorted_table" title="Sort by this column">area</a> </th>
<th class="foswikiTableCol1 foswikiLastCol"> <a rel="nofollow" href="/bin/rest/PublishPlugin/publish?validation_key=b6adb20ba63cfbada77bacf048ebff7c;topic=Gnumed.PublishManual;ping=29%20Jan%202014%20-%2015:24;sortcol=1;table=3;up=0#sorted_table" title="Sort by this column">coordinators</a> </th>
</tr>
</thead>
<tbody>
<tr class="foswikiTableEven foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0">
<td class="foswikiTableCol0 foswikiFirstCol"> database schema </td>
<td class="foswikiTableCol1 foswikiLastCol"> <a href="../Main/KarstenHilbert.html">KarstenHilbert</a> </td>
</tr>
<tr class="foswikiTableOdd foswikiTableRowdataBgSorted1 foswikiTableRowdataBg1">
<td class="foswikiTableCol0 foswikiFirstCol"> schema bootstrapping </td>
<td class="foswikiTableCol1 foswikiLastCol"> <a href="../Main/KarstenHilbert.html">KarstenHilbert</a> </td>
</tr>
<tr class="foswikiTableEven foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0">
<td class="foswikiTableCol0 foswikiFirstCol"> i18n issues </td>
<td class="foswikiTableCol1 foswikiLastCol"> <a href="../Main/KarstenHilbert.html">KarstenHilbert</a> </td>
</tr>
<tr class="foswikiTableOdd foswikiTableRowdataBgSorted1 foswikiTableRowdataBg1">
<td class="foswikiTableCol0 foswikiFirstCol"> middleware/business objects </td>
<td class="foswikiTableCol1 foswikiLastCol"> <a href="../Main/KarstenHilbert.html">KarstenHilbert</a>, <a href="../Main/CarlosMoro.html">CarlosMoro</a> </td>
</tr>
<tr class="foswikiTableEven foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0">
<td class="foswikiTableCol0 foswikiFirstCol"> GUI conceptual design </td>
<td class="foswikiTableCol1 foswikiLastCol"> Richard Terry </td>
</tr>
<tr class="foswikiTableOdd foswikiTableRowdataBgSorted1 foswikiTableRowdataBg1">
<td class="foswikiTableCol0 foswikiFirstCol"> packaging (Debian) </td>
<td class="foswikiTableCol1 foswikiLastCol"> Andreas Tille </td>
</tr>
<tr class="foswikiTableEven foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0">
<td class="foswikiTableCol0 foswikiFirstCol"> packaging (Gentoo) </td>
<td class="foswikiTableCol1 foswikiLastCol"> <a href="../Main/DavidGrant.html">DavidGrant</a> </td>
</tr>
<tr class="foswikiTableOdd foswikiTableRowdataBgSorted1 foswikiTableRowdataBg1">
<td class="foswikiTableCol0 foswikiFirstCol"> Wiki </td>
<td class="foswikiTableCol1 foswikiLastCol"> Jim Busser </td>
</tr>
<tr class="foswikiTableEven foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0">
<td class="foswikiTableCol0 foswikiFirstCol"> <a href="http://www.gnumed.org" target="_top">website</a> </td>
<td class="foswikiTableCol1 foswikiLastCol"> Tony Lembke </td>
</tr>
<tr class="foswikiTableOdd foswikiTableRowdataBgSorted1 foswikiTableRowdataBg1">
<td class="foswikiTableCol0 foswikiFirstCol foswikiLast"> release management </td>
<td class="foswikiTableCol1 foswikiLastCol foswikiLast"> <a href="../Main/SebastianHilbert.html">SebastianHilbert</a> </td>
</tr>
</tbody></table>
<p></p> <ul>
<li> demographics & contacts: contact Ian, Richard
</li> <li> see <a href="RoadMap.html">RoadMap</a> for a listing of required / desired / planned functions
</li> <li> a historical post on this is at: http://mail.gnu.org/archive/html/gnumed-devel/2003-11/msg00119.html
</li> <li> <a href="DevelopmentProcess.html">DevelopmentProcess</a> gives an overview of just how people's ideas and needs should come together into the project
</li></ul>
<p></p>
<p></p>
<hr />
<p></p>
<h2><a name="rarely_needed_guidelines"></a> rarely needed guidelines </h2>
<p></p>
<h2><a name="VCS_Guidelines"></a> VCS Guidelines </h2>
<p></p> <ul>
<li> Code, test, retest, make sure you did not introduce new bugs, if unsure contact the author of that code or admininistator.
</li> <li> For anything significant, if you do not receive sufficient feedback within a reasonable timeframe inquire again. Do not assume saying nothing means approval.
</li> <li> Please, preferably put a README explaining how to run your code into the test directory as soon as you think your code can be tried out by others e.g. if it doesn't run within the otherwise unmodified gnumed framework or is otherwise self-explanatory. Please <strong>communicate</strong> with us. Your code may be excellent, and it would be a shame if we wouldn't use it because we don't know about it or how to use it.
</li> <li> take a close look at what code is already in VCS, use existing code whenever possible, enhance existing code whenever necessary
</li> <li> comment your code (meaning comment everything, even if it might seem stupid to you! ); uncommented code (new files etc. ) will not make it into the main trunk. Some info on commenting limitations of Epydoc <a href="http://lists.gnu.org/archive/html/gnumed-devel/2004-06/msg00211.html" target="_top">here</a>
</li> <li> submit early and often PROVIDED the code runs, and announce changes to the list
</li></ul>
<p></p> <ul>
<li> If you code like crazy in test-area and add new functions to files you are not responsible for (you did not append it initially or have not take over the duty of maintaining the file) do not commit substantial changes without contacting the guy that is responsible for the file.
</li> <li> original gnumed-devel <a href="http://mail.gnu.org/archive/html/gnumed-devel/2003-11/threads.html#00126" target="_top">thread</a>
</li></ul>
<p></p>
<h2><a name="Artwork_Handling"></a> Artwork Handling </h2> <ul>
<li> a topic has been initiated at <a href="ArtworkHandling.html">Artwork Handling</a>
</li></ul>
<p></p>
<h2><a name="Packaging_information"></a> Packaging information </h2> <ul>
<li> a topic has been initiated at <a href="BinaryPackages.html">BinaryPackages</a>
</li></ul>
<p></p>
<h2><a name="Performance_design"></a> Performance design </h2> <ul>
<li> a topic has been initiated at <a href="PerformanceDesign.html">PerformanceDesign</a>
</li></ul>
<p></p>
-- <a href="../Main/JamesBusser.html">JamesBusser</a> - 24 Sep 2004
<a name="TopicEnd"></a>
<p></p>
<p></p>
<p></p>
<p></p>
</div>
</body></html>
|