<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://gvwiki.greenvulcano.com/gvwiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=D.barra</id>
	<title>GreenVulcano Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://gvwiki.greenvulcano.com/gvwiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=D.barra"/>
	<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Special:Contributions/D.barra"/>
	<updated>2026-04-13T04:48:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.7</generator>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Maven&amp;diff=4502</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Maven&amp;diff=4502"/>
		<updated>2016-03-10T16:11:39Z</updated>

		<summary type="html">&lt;p&gt;D.barra: Created page with &amp;quot;The GreenVulcano team maintains a private ''Maven'' repository, where all the GreenVulcano artifacts are published, both in &amp;lt;code&amp;gt;SNAPSHOT&amp;lt;/code&amp;gt; and in &amp;lt;code&amp;gt;RELEASE&amp;lt;/code&amp;gt; vers...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GreenVulcano team maintains a private ''Maven'' repository, where all the GreenVulcano artifacts are published, both in &amp;lt;code&amp;gt;SNAPSHOT&amp;lt;/code&amp;gt; and in &amp;lt;code&amp;gt;RELEASE&amp;lt;/code&amp;gt; version.&lt;br /&gt;
&lt;br /&gt;
== Configuring your &amp;lt;code&amp;gt;pom.xml&amp;lt;/code&amp;gt; to use artifacts from GreenVulcano ==&lt;br /&gt;
Add the following block to your project's &amp;lt;code&amp;gt;pom.xml&amp;lt;/code&amp;gt; in order to access the GreenVulcano Maven Repository.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
    &amp;lt;repositories&amp;gt;&lt;br /&gt;
        &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;nexus-cloud-snapshots&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Cloud Nexus instance - PUBLIC&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://mvn.greenvulcano.com/nexus/content/groups/public&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;releases&amp;gt;&lt;br /&gt;
                &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
            &amp;lt;/releases&amp;gt;&lt;br /&gt;
            &amp;lt;snapshots&amp;gt;&lt;br /&gt;
                &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
            &amp;lt;/snapshots&amp;gt;&lt;br /&gt;
        &amp;lt;/repository&amp;gt;&lt;br /&gt;
    &amp;lt;/repositories&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Maintainers ==&lt;br /&gt;
Maintainers can add the following to their distribution &amp;lt;code&amp;gt;pom.xml&amp;lt;/code&amp;gt; in order to gain upload access (access credentials are not included, ask the [mailto:dictators@greenvulcano.com dictators]):&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	&amp;lt;distributionManagement&amp;gt;&lt;br /&gt;
		&amp;lt;repository&amp;gt;&lt;br /&gt;
			&amp;lt;id&amp;gt;nexus-cloud&amp;lt;/id&amp;gt;&lt;br /&gt;
			&amp;lt;name&amp;gt;Cloud Nexus instance - RELEASES &amp;lt;/name&amp;gt;&lt;br /&gt;
			&amp;lt;url&amp;gt;http://mvn.greenvulcano.com/nexus/content/repositories/releases&amp;lt;/url&amp;gt;&lt;br /&gt;
		&amp;lt;/repository&amp;gt;&lt;br /&gt;
		&amp;lt;snapshotRepository&amp;gt;&lt;br /&gt;
			&amp;lt;id&amp;gt;nexus-cloud&amp;lt;/id&amp;gt;&lt;br /&gt;
			&amp;lt;name&amp;gt;Cloud Nexus instance - SNAPSHOTS&amp;lt;/name&amp;gt;&lt;br /&gt;
			&amp;lt;url&amp;gt;http://mvn.greenvulcano.com/nexus/content/repositories/snapshots&amp;lt;/url&amp;gt;&lt;br /&gt;
		&amp;lt;/snapshotRepository&amp;gt;&lt;br /&gt;
	&amp;lt;/distributionManagement&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4486</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4486"/>
		<updated>2016-01-05T13:21:44Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Do not submit copyrighted material without permission */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
Write to the [[#The_Good_Dictators|dictators]] explaining your proposal, along with the reasons associated to it. It will be much appreciated.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
This section contain general rules, which apply to all areas of software development. They usually fall into the widely accepted definition of ''Common Sense''.&lt;br /&gt;
&lt;br /&gt;
=== Contribute to improve software that does not meet the guidelines ===&lt;br /&gt;
; A.K.A. : Do not look away when seeing badly written code.&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Code tends to live long, especially foundation code. If it's badly written, it has the potential to undermine the overall quality of your software for a very long time (seasoned programmers certainly have their own anecdotes about this). So, whenever you encounter software that doesn't meet one or more of the guidelines in the following document, you definitely should take the time to make it better.&lt;br /&gt;
If you don't feel comfortable modifying the code (because it's too tricky to touch it, or because you do not grasp the specific topics addressed by the software), or you just don't have enough time, open a ticket on the bug-tracking system, referencing the exact location of the offending code, along with your observations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do not submit copyrighted material without permission ===&lt;br /&gt;
; A.K.A. : Check the license of the software tools and libraries upon which you are basing your software.&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Multi-million €/$ lawsuits may arise when powerful companies believe other people have used their own protected assets (such as copyrighted software). It is therefore of vital importance that you make sure you have the right to use somebody else's work for your purposes. OSI-approved licenses ([[https://opensource.org/licenses]]) are generally OK - although they also have their subtle differences between each other - while software licensed under different conditions may be very dangerous. Do write a couple of lines to a [[#The_Good_Dictators|dictator]] if you are unsure.&lt;br /&gt;
&lt;br /&gt;
=== Put a copyright disclaimer and software license in each source file ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : It may happen that a source file is moved somewhere else from where it originally belonged. In such cases, the license originally ''shipped'' with the file might not be available anymore. Putting a short disclaimer on top of the file help keeping track of licensing conditions.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Name classes, functions, and variables as the language of your choice indicates ===&lt;br /&gt;
; A.K.A. : Keep consistent with the naming convention of the language you are using&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Staying consistent with naming helps to improve readability. There's no need for esoteric notations or conventions: all of us are nowadays using IDEs to help us tell static, pointers, constants and the rest apart.&lt;br /&gt;
; Example :&lt;br /&gt;
   (Java)&lt;br /&gt;
   public class MyClass {&lt;br /&gt;
       &lt;br /&gt;
       private static final Object STATIC_FINAL_OBJECT = null;&lt;br /&gt;
       private static       Object staticObject;&lt;br /&gt;
       &lt;br /&gt;
       private              Object instanceObject;&lt;br /&gt;
       &lt;br /&gt;
       public void myMethod() {&lt;br /&gt;
           int methodVariable = 0;&lt;br /&gt;
           // something else here&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   (Python)&lt;br /&gt;
   class MyClass(object):&lt;br /&gt;
       def __init__(self):&lt;br /&gt;
           self.public_variable = 0&lt;br /&gt;
           self._protected_variable = 1&lt;br /&gt;
           self.__private_variable = 2&lt;br /&gt;
       &lt;br /&gt;
       def public_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def _protected_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def __private_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
=== Indent consistently - four spaces, no tabs ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Using tabs makes your code render differently on different devices (e.g. some may have tab stops set at 8 spaces, while yours might be 4 spaces).&lt;br /&gt;
&lt;br /&gt;
=== Remove unused code ===&lt;br /&gt;
; Importance : LOW&lt;br /&gt;
; Reason : Unused / commented code is confusing and complicates reading. Versioning tools are great at restoring deleted code, should you need it back. Unused code also includes unused import/include directives.&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;br /&gt;
&lt;br /&gt;
=== Do not commit broken code ===&lt;br /&gt;
; A.K.A. : Do not break the software build.&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : When you commit broken code (i.e. code that does not work properly, or - even worse - doesn't compile) you are negatively affecting the entire team's productivity. People might be blocked waiting for your fix in order to test their own work, and centralized tools such as code analysis, continuous build and integration testing '''will''' be unreliable for the hours or days to come.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do not commit untested code ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Untested code is not production ready by definition. See related rule for a longer explanation.&lt;br /&gt;
This also matches an analogous [[#Write_tests_for_your_code|rule]] in the [[#Testing]] section.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Write tests for your code ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : Untested code is dangerous for production. The traditional functional testing performed before a release only covers a portion of the software features: there are many more corner cases, which '''will''' happen in production, to be spotted beforehand. Only carefully written test cases, assisted by coverage statistics and code analysis, can really be of help on this account.&lt;br /&gt;
This also matches an analogous [[#Do_not_commit_untested_code|rule]] in the [[#Versioning]] section&lt;br /&gt;
&lt;br /&gt;
=== Make your Unit Tests self-consitent ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : A unit test depending on integration with other systems should probably be called a integration test. When you test a ''unit'', you should test it in isolation. If the unit you are testing requires some ''context'', you have to simulate (i.e. ''mock'') it.&lt;br /&gt;
; Suggestion : for Java, use Mockito/Powermock to simulate the interaction of your class/component with an external system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Use appropriate tooling and facilities for testing ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : Tests are automated nowadays, sometimes ''highly'' automated. You can't expect somebody to call your custom &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;, as if you do so your test simply won't be executed. Vice versa, if you rely on a standard and proven testing framework, running your test in a broader context will be much easier.&lt;br /&gt;
; Suggestion : On Java, use JUnit4 + Mockito/Powermock.&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4485</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4485"/>
		<updated>2016-01-05T13:20:54Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* General */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
Write to the [[#The_Good_Dictators|dictators]] explaining your proposal, along with the reasons associated to it. It will be much appreciated.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
This section contain general rules, which apply to all areas of software development. They usually fall into the widely accepted definition of ''Common Sense''.&lt;br /&gt;
&lt;br /&gt;
=== Contribute to improve software that does not meet the guidelines ===&lt;br /&gt;
; A.K.A. : Do not look away when seeing badly written code.&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Code tends to live long, especially foundation code. If it's badly written, it has the potential to undermine the overall quality of your software for a very long time (seasoned programmers certainly have their own anecdotes about this). So, whenever you encounter software that doesn't meet one or more of the guidelines in the following document, you definitely should take the time to make it better.&lt;br /&gt;
If you don't feel comfortable modifying the code (because it's too tricky to touch it, or because you do not grasp the specific topics addressed by the software), or you just don't have enough time, open a ticket on the bug-tracking system, referencing the exact location of the offending code, along with your observations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do not submit copyrighted material without permission ===&lt;br /&gt;
; A.K.A. : Check the license of the software tools and libraries upon which you are basing your software.&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Multi-million €/$ lawsuits may arise when powerful companies believe other people have used their own protected assets (such as copyrighted software). It is therefore of vital importance that you make sure you have the right to use somebody else's work for your purposes. OSI-approved [[https://opensource.org/licenses|licenses]] are generally OK - although they also have their subtle differences between each other - while software licensed under different conditions may be very dangerous. Do write a couple of lines to a [[The_Good_Dictators|dictator]] if you are unsure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Put a copyright disclaimer and software license in each source file ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : It may happen that a source file is moved somewhere else from where it originally belonged. In such cases, the license originally ''shipped'' with the file might not be available anymore. Putting a short disclaimer on top of the file help keeping track of licensing conditions.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Name classes, functions, and variables as the language of your choice indicates ===&lt;br /&gt;
; A.K.A. : Keep consistent with the naming convention of the language you are using&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Staying consistent with naming helps to improve readability. There's no need for esoteric notations or conventions: all of us are nowadays using IDEs to help us tell static, pointers, constants and the rest apart.&lt;br /&gt;
; Example :&lt;br /&gt;
   (Java)&lt;br /&gt;
   public class MyClass {&lt;br /&gt;
       &lt;br /&gt;
       private static final Object STATIC_FINAL_OBJECT = null;&lt;br /&gt;
       private static       Object staticObject;&lt;br /&gt;
       &lt;br /&gt;
       private              Object instanceObject;&lt;br /&gt;
       &lt;br /&gt;
       public void myMethod() {&lt;br /&gt;
           int methodVariable = 0;&lt;br /&gt;
           // something else here&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   (Python)&lt;br /&gt;
   class MyClass(object):&lt;br /&gt;
       def __init__(self):&lt;br /&gt;
           self.public_variable = 0&lt;br /&gt;
           self._protected_variable = 1&lt;br /&gt;
           self.__private_variable = 2&lt;br /&gt;
       &lt;br /&gt;
       def public_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def _protected_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def __private_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
=== Indent consistently - four spaces, no tabs ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Using tabs makes your code render differently on different devices (e.g. some may have tab stops set at 8 spaces, while yours might be 4 spaces).&lt;br /&gt;
&lt;br /&gt;
=== Remove unused code ===&lt;br /&gt;
; Importance : LOW&lt;br /&gt;
; Reason : Unused / commented code is confusing and complicates reading. Versioning tools are great at restoring deleted code, should you need it back. Unused code also includes unused import/include directives.&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;br /&gt;
&lt;br /&gt;
=== Do not commit broken code ===&lt;br /&gt;
; A.K.A. : Do not break the software build.&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : When you commit broken code (i.e. code that does not work properly, or - even worse - doesn't compile) you are negatively affecting the entire team's productivity. People might be blocked waiting for your fix in order to test their own work, and centralized tools such as code analysis, continuous build and integration testing '''will''' be unreliable for the hours or days to come.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do not commit untested code ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Untested code is not production ready by definition. See related rule for a longer explanation.&lt;br /&gt;
This also matches an analogous [[#Write_tests_for_your_code|rule]] in the [[#Testing]] section.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Write tests for your code ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : Untested code is dangerous for production. The traditional functional testing performed before a release only covers a portion of the software features: there are many more corner cases, which '''will''' happen in production, to be spotted beforehand. Only carefully written test cases, assisted by coverage statistics and code analysis, can really be of help on this account.&lt;br /&gt;
This also matches an analogous [[#Do_not_commit_untested_code|rule]] in the [[#Versioning]] section&lt;br /&gt;
&lt;br /&gt;
=== Make your Unit Tests self-consitent ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : A unit test depending on integration with other systems should probably be called a integration test. When you test a ''unit'', you should test it in isolation. If the unit you are testing requires some ''context'', you have to simulate (i.e. ''mock'') it.&lt;br /&gt;
; Suggestion : for Java, use Mockito/Powermock to simulate the interaction of your class/component with an external system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Use appropriate tooling and facilities for testing ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : Tests are automated nowadays, sometimes ''highly'' automated. You can't expect somebody to call your custom &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;, as if you do so your test simply won't be executed. Vice versa, if you rely on a standard and proven testing framework, running your test in a broader context will be much easier.&lt;br /&gt;
; Suggestion : On Java, use JUnit4 + Mockito/Powermock.&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4484</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4484"/>
		<updated>2016-01-05T12:55:52Z</updated>

		<summary type="html">&lt;p&gt;D.barra: Added new General section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
Write to the [[#The_Good_Dictators|dictators]] explaining your proposal, along with the reasons associated to it. It will be much appreciated.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
This section contain general rules, which apply to all areas of software development. They usually fall into the widely accepted definition of ''Common Sense''.&lt;br /&gt;
&lt;br /&gt;
=== Contribute to improve software that does not meet the guidelines ===&lt;br /&gt;
; A.K.A. : Do not look away when seeing badly written code.&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Code tends to live long, especially foundation code. If it's badly written, it has the potential to undermine the overall quality of your software for a very long time (seasoned programmers certainly have their own anecdotes about this). So, whenever you encounter software that doesn't meet one or more of the guidelines in the following document, you definitely should take the time to make it better.&lt;br /&gt;
If you don't feel comfortable modifying the code (because it's too tricky to touch it, or because you do not grasp the specific topics addressed by the software), or you just don't have enough time, open a ticket on the bug-tracking system, referencing the exact location of the offending code, along with your observations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Name classes, functions, and variables as the language of your choice indicates ===&lt;br /&gt;
; A.K.A. : Keep consistent with the naming convention of the language you are using&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Staying consistent with naming helps to improve readability. There's no need for esoteric notations or conventions: all of us are nowadays using IDEs to help us tell static, pointers, constants and the rest apart.&lt;br /&gt;
; Example :&lt;br /&gt;
   (Java)&lt;br /&gt;
   public class MyClass {&lt;br /&gt;
       &lt;br /&gt;
       private static final Object STATIC_FINAL_OBJECT = null;&lt;br /&gt;
       private static       Object staticObject;&lt;br /&gt;
       &lt;br /&gt;
       private              Object instanceObject;&lt;br /&gt;
       &lt;br /&gt;
       public void myMethod() {&lt;br /&gt;
           int methodVariable = 0;&lt;br /&gt;
           // something else here&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   (Python)&lt;br /&gt;
   class MyClass(object):&lt;br /&gt;
       def __init__(self):&lt;br /&gt;
           self.public_variable = 0&lt;br /&gt;
           self._protected_variable = 1&lt;br /&gt;
           self.__private_variable = 2&lt;br /&gt;
       &lt;br /&gt;
       def public_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def _protected_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def __private_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
=== Indent consistently - four spaces, no tabs ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Using tabs makes your code render differently on different devices (e.g. some may have tab stops set at 8 spaces, while yours might be 4 spaces).&lt;br /&gt;
&lt;br /&gt;
=== Remove unused code ===&lt;br /&gt;
; Importance : LOW&lt;br /&gt;
; Reason : Unused / commented code is confusing and complicates reading. Versioning tools are great at restoring deleted code, should you need it back. Unused code also includes unused import/include directives.&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;br /&gt;
&lt;br /&gt;
=== Do not commit broken code ===&lt;br /&gt;
; A.K.A. : Do not break the software build.&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : When you commit broken code (i.e. code that does not work properly, or - even worse - doesn't compile) you are negatively affecting the entire team's productivity. People might be blocked waiting for your fix in order to test their own work, and centralized tools such as code analysis, continuous build and integration testing '''will''' be unreliable for the hours or days to come.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do not commit untested code ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Untested code is not production ready by definition. See related rule for a longer explanation.&lt;br /&gt;
This also matches an analogous [[#Write_tests_for_your_code|rule]] in the [[#Testing]] section.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Write tests for your code ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : Untested code is dangerous for production. The traditional functional testing performed before a release only covers a portion of the software features: there are many more corner cases, which '''will''' happen in production, to be spotted beforehand. Only carefully written test cases, assisted by coverage statistics and code analysis, can really be of help on this account.&lt;br /&gt;
This also matches an analogous [[#Do_not_commit_untested_code|rule]] in the [[#Versioning]] section&lt;br /&gt;
&lt;br /&gt;
=== Make your Unit Tests self-consitent ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : A unit test depending on integration with other systems should probably be called a integration test. When you test a ''unit'', you should test it in isolation. If the unit you are testing requires some ''context'', you have to simulate (i.e. ''mock'') it.&lt;br /&gt;
; Suggestion : for Java, use Mockito/Powermock to simulate the interaction of your class/component with an external system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Use appropriate tooling and facilities for testing ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : Tests are automated nowadays, sometimes ''highly'' automated. You can't expect somebody to call your custom &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;, as if you do so your test simply won't be executed. Vice versa, if you rely on a standard and proven testing framework, running your test in a broader context will be much easier.&lt;br /&gt;
; Suggestion : On Java, use JUnit4 + Mockito/Powermock.&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4483</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4483"/>
		<updated>2016-01-04T12:36:19Z</updated>

		<summary type="html">&lt;p&gt;D.barra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
Write to the [[#The_Good_Dictators|dictators]] explaining your proposal, along with the reasons associated to it. It will be much appreciated.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Name classes, functions, and variables as the language of your choice indicates ===&lt;br /&gt;
; A.K.A. : Keep consistent with the naming convention of the language you are using&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Staying consistent with naming helps to improve readability. There's no need for esoteric notations or conventions: all of us are nowadays using IDEs to help us tell static, pointers, constants and the rest apart.&lt;br /&gt;
; Example :&lt;br /&gt;
   (Java)&lt;br /&gt;
   public class MyClass {&lt;br /&gt;
       &lt;br /&gt;
       private static final Object STATIC_FINAL_OBJECT = null;&lt;br /&gt;
       private static       Object staticObject;&lt;br /&gt;
       &lt;br /&gt;
       private              Object instanceObject;&lt;br /&gt;
       &lt;br /&gt;
       public void myMethod() {&lt;br /&gt;
           int methodVariable = 0;&lt;br /&gt;
           // something else here&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   (Python)&lt;br /&gt;
   class MyClass(object):&lt;br /&gt;
       def __init__(self):&lt;br /&gt;
           self.public_variable = 0&lt;br /&gt;
           self._protected_variable = 1&lt;br /&gt;
           self.__private_variable = 2&lt;br /&gt;
       &lt;br /&gt;
       def public_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def _protected_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def __private_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
=== Indent consistently - four spaces, no tabs ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Using tabs makes your code render differently on different devices (e.g. some may have tab stops set at 8 spaces, while yours might be 4 spaces).&lt;br /&gt;
&lt;br /&gt;
=== Remove unused code ===&lt;br /&gt;
; Importance : LOW&lt;br /&gt;
; Reason : Unused / commented code is confusing and complicates reading. Versioning tools are great at restoring deleted code, should you need it back. Unused code also includes unused import/include directives.&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;br /&gt;
&lt;br /&gt;
=== Do not commit broken code ===&lt;br /&gt;
; A.K.A. : Do not break the software build.&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : When you commit broken code (i.e. code that does not work properly, or - even worse - doesn't compile) you are negatively affecting the entire team's productivity. People might be blocked waiting for your fix in order to test their own work, and centralized tools such as code analysis, continuous build and integration testing '''will''' be unreliable for the hours or days to come.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do not commit untested code ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Untested code is not production ready by definition. See related rule for a longer explanation.&lt;br /&gt;
This also matches an analogous [[#Write_tests_for_your_code|rule]] in the [[#Testing]] section.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Write tests for your code ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : Untested code is dangerous for production. The traditional functional testing performed before a release only covers a portion of the software features: there are many more corner cases, which '''will''' happen in production, to be spotted beforehand. Only carefully written test cases, assisted by coverage statistics and code analysis, can really be of help on this account.&lt;br /&gt;
This also matches an analogous [[#Do_not_commit_untested_code|rule]] in the [[#Versioning]] section&lt;br /&gt;
&lt;br /&gt;
=== Make your Unit Tests self-consitent ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : A unit test depending on integration with other systems should probably be called a integration test. When you test a ''unit'', you should test it in isolation. If the unit you are testing requires some ''context'', you have to simulate (i.e. ''mock'') it.&lt;br /&gt;
; Suggestion : for Java, use Mockito/Powermock to simulate the interaction of your class/component with an external system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Use appropriate tooling and facilities for testing ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : Tests are automated nowadays, sometimes ''highly'' automated. You can't expect somebody to call your custom &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;, as if you do so your test simply won't be executed. Vice versa, if you rely on a standard and proven testing framework, running your test in a broader context will be much easier.&lt;br /&gt;
; Suggestion : On Java, use JUnit4 + Mockito/Powermock.&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4482</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4482"/>
		<updated>2016-01-04T10:14:30Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
Write to the [[#The_Good_Dictators|dictators]] explaining your proposal, along with the reasons associated to it. It will be much appreciated.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Name classes, functions, and variables as the language of your choice indicates ===&lt;br /&gt;
; A.K.A. : Keep consistent with the naming convention of the language you are using&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Staying consistent with naming helps to improve readability. There's no need for esoteric notations or conventions: all of us are nowadays using IDEs to help us tell static, pointers, constants and the rest apart.&lt;br /&gt;
; Example :&lt;br /&gt;
   (Java)&lt;br /&gt;
   public class MyClass {&lt;br /&gt;
       &lt;br /&gt;
       private static final Object STATIC_FINAL_OBJECT = null;&lt;br /&gt;
       private static       Object staticObject;&lt;br /&gt;
       &lt;br /&gt;
       private              Object instanceObject;&lt;br /&gt;
       &lt;br /&gt;
       public void myMethod() {&lt;br /&gt;
           int methodVariable = 0;&lt;br /&gt;
           // something else here&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   (Python)&lt;br /&gt;
   class MyClass(object):&lt;br /&gt;
       def __init__(self):&lt;br /&gt;
           self.public_variable = 0&lt;br /&gt;
           self._protected_variable = 1&lt;br /&gt;
           self.__private_variable = 2&lt;br /&gt;
       &lt;br /&gt;
       def public_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def _protected_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def __private_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
=== Indent consistently - four spaces, no tabs ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Using tabs makes your code render differently on different devices (e.g. some may have tab stops set at 8 spaces, while yours might be 4 spaces).&lt;br /&gt;
&lt;br /&gt;
=== Remove unused code ===&lt;br /&gt;
; Importance : LOW&lt;br /&gt;
; Reason : Unused / commented code is confusing and complicates reading. Versioning tools are great at restoring deleted code, should you need it back. Unused code also includes unused import/include directives.&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Write tests for your code ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : Untested code is dangerous for production. The traditional functional testing performed before a release only covers a portion of the software features: there are many more corner cases, which '''will''' happen in production, to be spotted beforehand. Only carefully written test cases, assisted by coverage statistics and code analysis, can really be of help on this account.&lt;br /&gt;
&lt;br /&gt;
=== Make your Unit Tests self-consitent ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : A unit test depending on integration with other systems should probably be called a integration test. When you test a ''unit'', you should test it in isolation. If the unit you are testing requires some ''context'', you have to simulate (i.e. ''mock'') it.&lt;br /&gt;
; Suggestion : for Java, use Mockito/Powermock to simulate the interaction of your class/component with an external system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Use appropriate tooling and facilities for testing ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : Tests are automated nowadays, sometimes ''highly'' automated. You can't expect somebody to call your custom &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;, as if you do so your test simply won't be executed. Vice versa, if you rely on a standard and proven testing framework, running your test in a broader context will be much easier.&lt;br /&gt;
; Suggestion : On Java, use JUnit4 + Mockito/Powermock.&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4481</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4481"/>
		<updated>2016-01-04T09:54:30Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Use appropriate tooling and facilities for testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
Write to the [[#The_Good_Dictators|dictators]] explaining your proposal, along with the reasons associated to it. It will be much appreciated.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Name classes, functions, and variables as the language of your choice indicates ===&lt;br /&gt;
; A.K.A. : Keep consistent with the naming convention of the language you are using&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Staying consistent with naming helps to improve readability. There's no need for esoteric notations or conventions: all of us are nowadays using IDEs to help us tell static, pointers, constants and the rest apart.&lt;br /&gt;
; Example :&lt;br /&gt;
   (Java)&lt;br /&gt;
   public class MyClass {&lt;br /&gt;
       &lt;br /&gt;
       private static final Object STATIC_FINAL_OBJECT = null;&lt;br /&gt;
       private static       Object staticObject;&lt;br /&gt;
       &lt;br /&gt;
       private              Object instanceObject;&lt;br /&gt;
       &lt;br /&gt;
       public void myMethod() {&lt;br /&gt;
           int methodVariable = 0;&lt;br /&gt;
           // something else here&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   (Python)&lt;br /&gt;
   class MyClass(object):&lt;br /&gt;
       def __init__(self):&lt;br /&gt;
           self.public_variable = 0&lt;br /&gt;
           self._protected_variable = 1&lt;br /&gt;
           self.__private_variable = 2&lt;br /&gt;
       &lt;br /&gt;
       def public_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def _protected_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def __private_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
=== Indent consistently - four spaces, no tabs ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Using tabs makes your code render differently on different devices (e.g. some may have tab stops set at 8 spaces, while yours might be 4 spaces).&lt;br /&gt;
&lt;br /&gt;
=== Remove unused code ===&lt;br /&gt;
; Importance : LOW&lt;br /&gt;
; Reason : Unused / commented code is confusing and complicates reading. Versioning tools are great at restoring deleted code, should you need it back. Unused code also includes unused import/include directives.&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Use appropriate tooling and facilities for testing ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : Tests are automated nowadays, sometimes ''highly'' automated. You can't expect somebody to call your custom &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;, as if you do so your test simply won't be executed. Vice versa, if you rely on a standard and proven testing framework, running your test in a broader context will be much easier.&lt;br /&gt;
; Example : On Java, use JUnit4 + Mockito/Powermock.&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4480</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4480"/>
		<updated>2016-01-04T09:51:11Z</updated>

		<summary type="html">&lt;p&gt;D.barra: Added Testing section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
Write to the [[#The_Good_Dictators|dictators]] explaining your proposal, along with the reasons associated to it. It will be much appreciated.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Name classes, functions, and variables as the language of your choice indicates ===&lt;br /&gt;
; A.K.A. : Keep consistent with the naming convention of the language you are using&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Staying consistent with naming helps to improve readability. There's no need for esoteric notations or conventions: all of us are nowadays using IDEs to help us tell static, pointers, constants and the rest apart.&lt;br /&gt;
; Example :&lt;br /&gt;
   (Java)&lt;br /&gt;
   public class MyClass {&lt;br /&gt;
       &lt;br /&gt;
       private static final Object STATIC_FINAL_OBJECT = null;&lt;br /&gt;
       private static       Object staticObject;&lt;br /&gt;
       &lt;br /&gt;
       private              Object instanceObject;&lt;br /&gt;
       &lt;br /&gt;
       public void myMethod() {&lt;br /&gt;
           int methodVariable = 0;&lt;br /&gt;
           // something else here&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   (Python)&lt;br /&gt;
   class MyClass(object):&lt;br /&gt;
       def __init__(self):&lt;br /&gt;
           self.public_variable = 0&lt;br /&gt;
           self._protected_variable = 1&lt;br /&gt;
           self.__private_variable = 2&lt;br /&gt;
       &lt;br /&gt;
       def public_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def _protected_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def __private_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
=== Indent consistently - four spaces, no tabs ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Using tabs makes your code render differently on different devices (e.g. some may have tab stops set at 8 spaces, while yours might be 4 spaces).&lt;br /&gt;
&lt;br /&gt;
=== Remove unused code ===&lt;br /&gt;
; Importance : LOW&lt;br /&gt;
; Reason : Unused / commented code is confusing and complicates reading. Versioning tools are great at restoring deleted code, should you need it back. Unused code also includes unused import/include directives.&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Use appropriate tooling and facilities for testing ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : Tests are automated nowadays, sometimes ''highly'' automated. You can't expect somebody to call your custom &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;, as if you do so your test simply won't be executed. Vice versa, if you rely on a standard and proven testing framework, running your test in a broader context will be much easier.&lt;br /&gt;
; Example : On Java, use JUnit + Mockito/Powermock.&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Main_Page&amp;diff=4479</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Main_Page&amp;diff=4479"/>
		<updated>2016-01-03T13:33:58Z</updated>

		<summary type="html">&lt;p&gt;D.barra: Added reference to software development guidelines&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 2em&amp;quot;&amp;gt;Welcome to {{GVESB}} Wiki&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;the place where you can find all information about our [http://en.wikipedia.org/wiki/Enterprise_service_bus ESB].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Start exploring {{GVESB}} '''[[Basic concepts]]''' or follow the links below!&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;'''Core Developers''': check our [[Software Development Guidelines]] ''(draft)''&amp;lt;/p&amp;gt;&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;|&lt;br /&gt;
{{Main Page/Overview}}&lt;br /&gt;
{{Main Page/Installation}}&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot; width=&amp;quot;50%&amp;quot;|&lt;br /&gt;
{{Main Page/VulCon}}&lt;br /&gt;
{{Main Page/GVConsole}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4478</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4478"/>
		<updated>2016-01-03T13:23:52Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Name classes, functions, and variables as the language of your choice indicates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
Write to the [[#The_Good_Dictators|dictators]] explaining your proposal, along with the reasons associated to it. It will be much appreciated.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Name classes, functions, and variables as the language of your choice indicates ===&lt;br /&gt;
; A.K.A. : Keep consistent with the naming convention of the language you are using&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Staying consistent with naming helps to improve readability. There's no need for esoteric notations or conventions: all of us are nowadays using IDEs to help us tell static, pointers, constants and the rest apart.&lt;br /&gt;
; Example :&lt;br /&gt;
   (Java)&lt;br /&gt;
   public class MyClass {&lt;br /&gt;
       &lt;br /&gt;
       private static final Object STATIC_FINAL_OBJECT = null;&lt;br /&gt;
       private static       Object staticObject;&lt;br /&gt;
       &lt;br /&gt;
       private              Object instanceObject;&lt;br /&gt;
       &lt;br /&gt;
       public void myMethod() {&lt;br /&gt;
           int methodVariable = 0;&lt;br /&gt;
           // something else here&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   (Python)&lt;br /&gt;
   class MyClass(object):&lt;br /&gt;
       def __init__(self):&lt;br /&gt;
           self.public_variable = 0&lt;br /&gt;
           self._protected_variable = 1&lt;br /&gt;
           self.__private_variable = 2&lt;br /&gt;
       &lt;br /&gt;
       def public_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def _protected_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
       &lt;br /&gt;
       def __private_method(self, arg):&lt;br /&gt;
           pass&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
=== Indent consistently - four spaces, no tabs ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Using tabs makes your code render differently on different devices (e.g. some may have tab stops set at 8 spaces, while yours might be 4 spaces).&lt;br /&gt;
&lt;br /&gt;
=== Remove unused code ===&lt;br /&gt;
; Importance : LOW&lt;br /&gt;
; Reason : Unused / commented code is confusing and complicates reading. Versioning tools are great at restoring deleted code, should you need it back. Unused code also includes unused import/include directives.&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4477</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4477"/>
		<updated>2016-01-03T13:19:58Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Proposing a New Rule */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
Write to the [[#The_Good_Dictators|dictators]] explaining your proposal, along with the reasons associated to it. It will be much appreciated.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Name classes, functions, and variables as the language of your choice indicates ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Staying consistent with naming helps to improve readability. There's no need for esoteric notations or conventions: all of us are nowadays using IDEs to help us tell static, pointers, constants and the rest apart.&lt;br /&gt;
; Example :&lt;br /&gt;
   (Java)&lt;br /&gt;
   public class MyClass {&lt;br /&gt;
       &lt;br /&gt;
       private static final Object STATIC_FINAL_OBJECT = null;&lt;br /&gt;
       private static       Object staticObject;&lt;br /&gt;
       &lt;br /&gt;
       private              Object instanceObject;&lt;br /&gt;
       &lt;br /&gt;
       public void myMethod() {&lt;br /&gt;
           int methodVariable = 0;&lt;br /&gt;
           // something else here&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
=== Indent consistently - four spaces, no tabs ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Using tabs makes your code render differently on different devices (e.g. some may have tab stops set at 8 spaces, while yours might be 4 spaces).&lt;br /&gt;
&lt;br /&gt;
=== Remove unused code ===&lt;br /&gt;
; Importance : LOW&lt;br /&gt;
; Reason : Unused / commented code is confusing and complicates reading. Versioning tools are great at restoring deleted code, should you need it back. Unused code also includes unused import/include directives.&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4476</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4476"/>
		<updated>2016-01-03T13:10:35Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Name classes, functions, and variables as the language of your choice indicates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Name classes, functions, and variables as the language of your choice indicates ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Staying consistent with naming helps to improve readability. There's no need for esoteric notations or conventions: all of us are nowadays using IDEs to help us tell static, pointers, constants and the rest apart.&lt;br /&gt;
; Example :&lt;br /&gt;
   (Java)&lt;br /&gt;
   public class MyClass {&lt;br /&gt;
       &lt;br /&gt;
       private static final Object STATIC_FINAL_OBJECT = null;&lt;br /&gt;
       private static       Object staticObject;&lt;br /&gt;
       &lt;br /&gt;
       private              Object instanceObject;&lt;br /&gt;
       &lt;br /&gt;
       public void myMethod() {&lt;br /&gt;
           int methodVariable = 0;&lt;br /&gt;
           // something else here&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
=== Indent consistently - four spaces, no tabs ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Using tabs makes your code render differently on different devices (e.g. some may have tab stops set at 8 spaces, while yours might be 4 spaces).&lt;br /&gt;
&lt;br /&gt;
=== Remove unused code ===&lt;br /&gt;
; Importance : LOW&lt;br /&gt;
; Reason : Unused / commented code is confusing and complicates reading. Versioning tools are great at restoring deleted code, should you need it back. Unused code also includes unused import/include directives.&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4475</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4475"/>
		<updated>2016-01-03T13:09:41Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Name classes, functions, and variables as the language of your choice indicates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Name classes, functions, and variables as the language of your choice indicates ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Staying consistent with naming helps to improve readability. There's no need for esoteric notations or conventions: all of us are nowadays using IDEs to help us tell static, pointers, constants and the rest apart.&lt;br /&gt;
; Example :&lt;br /&gt;
   (Java)&lt;br /&gt;
   public class MyClass {&lt;br /&gt;
       &lt;br /&gt;
       private static final Object STATIC_FINAL_OBJECT = null;&lt;br /&gt;
       private static       Object staticObject;&lt;br /&gt;
       &lt;br /&gt;
       private              Object instanceObject;&lt;br /&gt;
       &lt;br /&gt;
       public void myMethod() {&lt;br /&gt;
           // something goes here&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
=== Indent consistently - four spaces, no tabs ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Using tabs makes your code render differently on different devices (e.g. some may have tab stops set at 8 spaces, while yours might be 4 spaces).&lt;br /&gt;
&lt;br /&gt;
=== Remove unused code ===&lt;br /&gt;
; Importance : LOW&lt;br /&gt;
; Reason : Unused / commented code is confusing and complicates reading. Versioning tools are great at restoring deleted code, should you need it back. Unused code also includes unused import/include directives.&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4474</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4474"/>
		<updated>2016-01-03T13:09:17Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Naming and capitalization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Name classes, functions, and variables as the language of your choice indicates ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Staying consistent with naming helps to improve readability. There's no need for esoteric notations or conventions: all of us are nowadays using IDEs to help us tell static, pointers, constants and the rest apart.&lt;br /&gt;
; Example :&lt;br /&gt;
   (Java)&lt;br /&gt;
   public class MyClass {&lt;br /&gt;
&lt;br /&gt;
       private static final Object STATIC_FINAL_OBJECT = null;&lt;br /&gt;
       private static       Object staticObject;&lt;br /&gt;
&lt;br /&gt;
       private              Object instanceObject;&lt;br /&gt;
&lt;br /&gt;
       public void myMethod() {&lt;br /&gt;
           // something goes here&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
=== Indent consistently - four spaces, no tabs ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Using tabs makes your code render differently on different devices (e.g. some may have tab stops set at 8 spaces, while yours might be 4 spaces).&lt;br /&gt;
&lt;br /&gt;
=== Remove unused code ===&lt;br /&gt;
; Importance : LOW&lt;br /&gt;
; Reason : Unused / commented code is confusing and complicates reading. Versioning tools are great at restoring deleted code, should you need it back. Unused code also includes unused import/include directives.&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4473</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4473"/>
		<updated>2016-01-03T12:59:55Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Formatting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
=== Indent consistently - four spaces, no tabs ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Using tabs makes your code render differently on different devices (e.g. some may have tab stops set at 8 spaces, while yours might be 4 spaces).&lt;br /&gt;
&lt;br /&gt;
=== Remove unused code ===&lt;br /&gt;
; Importance : LOW&lt;br /&gt;
; Reason : Unused / commented code is confusing and complicates reading. Versioning tools are great at restoring deleted code, should you need it back. Unused code also includes unused import/include directives.&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4472</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4472"/>
		<updated>2016-01-03T12:59:35Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Formatting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
=== Indent consistently - four spaces, no tabs&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Using tabs makes your code render differently on different devices (e.g. some may have tab stops set at 8 spaces, while yours might be 4 spaces).&lt;br /&gt;
&lt;br /&gt;
=== Remove unused code ===&lt;br /&gt;
; Importance : LOW&lt;br /&gt;
; Reason : Unused / commented code is confusing and complicates reading. Versioning tools are great at restoring deleted code, should you need it back. Unused code also includes unused import/include directives.&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4471</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4471"/>
		<updated>2016-01-03T12:06:46Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Structure of a Rule */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* An '''A.K.A.''' (also known as) for alternative naming of the same rule, or for easier understanding&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4470</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4470"/>
		<updated>2016-01-03T12:05:51Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Naming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming and capitalization ==&lt;br /&gt;
&lt;br /&gt;
=== Use the native capitalization convention for the language you are using ===&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4469</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4469"/>
		<updated>2016-01-03T12:03:49Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''Good Dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Known '''Exceptions''' to that rule. The fact there is a documented exception does not allow you to skip the [[#Exceptions_to_a_Rule|authorization]] process for exceptions.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a Rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
=== Proposing a New Rule ===&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4468</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4468"/>
		<updated>2016-01-03T11:56:44Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Rationale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
=== The ''good dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Allowed '''Exceptions''' to that rule.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4467</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4467"/>
		<updated>2016-01-03T11:55:37Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Structure of a rule */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
'''This is an open, ongoing, collaborative document!''' If you feel like a new guideline is needed for the project, then:&lt;br /&gt;
* Discuss it with senior colleagues to check that it actually makes sense, then&lt;br /&gt;
* Add it to this document, in the relevant section.&lt;br /&gt;
&lt;br /&gt;
=== The ''good dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name''' (= Title)&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Allowed '''Exceptions''' to that rule.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4466</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4466"/>
		<updated>2016-01-03T11:54:23Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* The good dictators */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
'''This is an open, ongoing, collaborative document!''' If you feel like a new guideline is needed for the project, then:&lt;br /&gt;
* Discuss it with senior colleagues to check that it actually makes sense, then&lt;br /&gt;
* Add it to this document, in the relevant section.&lt;br /&gt;
&lt;br /&gt;
=== The ''good dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name'''&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Allowed '''Exceptions''' to that rule.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4465</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4465"/>
		<updated>2016-01-03T11:52:53Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* The good dictators */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
'''This is an open, ongoing, collaborative document!''' If you feel like a new guideline is needed for the project, then:&lt;br /&gt;
* Discuss it with senior colleagues to check that it actually makes sense, then&lt;br /&gt;
* Add it to this document, in the relevant section.&lt;br /&gt;
&lt;br /&gt;
=== The ''good dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at  [[mailto:dictators@greenvulcano.com]].&lt;br /&gt;
&lt;br /&gt;
=== Structure of a rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name'''&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Allowed '''Exceptions''' to that rule.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4464</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4464"/>
		<updated>2016-01-03T11:51:26Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Rationale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
'''This is an open, ongoing, collaborative document!''' If you feel like a new guideline is needed for the project, then:&lt;br /&gt;
* Discuss it with senior colleagues to check that it actually makes sense, then&lt;br /&gt;
* Add it to this document, in the relevant section.&lt;br /&gt;
&lt;br /&gt;
=== The ''good dictators'' ===&lt;br /&gt;
A '''dictator''' is really nothing more than a very senior technical lead. The reason why we use the term '''dictator''' is that we as a community take his/her advice very seriously. In fact, one of the few actions having serious consequences for a community member is to contravene an explicit dictator ruling or warning.&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
* The role of our dictators is to preserve the overall quality of our software over time.&lt;br /&gt;
* Besides spitting out new rules, dictators are usually willing to discuss non-trivial project-related issues. Do not feel afraid to ask if you feel you need some advice.&lt;br /&gt;
* It's a role based on volunteering. Do not voluntarily waste teir time.&lt;br /&gt;
* It's a hard job and takes a lot of time, along with a good deal of experience; do propose yourself as a dictator if you feel you can contribute on this account.&lt;br /&gt;
&lt;br /&gt;
You can contact our dictators at dictators@greenvulcano.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structure of a rule ===&lt;br /&gt;
Each rule has, at least:&lt;br /&gt;
* A '''Name'''&lt;br /&gt;
* An '''Importance''' classification:&lt;br /&gt;
** HIGH&lt;br /&gt;
** MEDIUM&lt;br /&gt;
** LOW&lt;br /&gt;
** COSMETIC&lt;br /&gt;
* A '''Reason''' explaining why you have to comply&lt;br /&gt;
&lt;br /&gt;
And, optionally:&lt;br /&gt;
* '''Suggestions''' on how to comply with the rule&lt;br /&gt;
* Allowed '''Exceptions''' to that rule.&lt;br /&gt;
&lt;br /&gt;
=== Exceptions to a rule ===&lt;br /&gt;
Exceptions are generally said to prove the rule. So there must be a rule for exceptions.&lt;br /&gt;
How exceptions are dealt with depends on the '''Importance''' classification of the rule:&lt;br /&gt;
* '''HIGH''': exceptions are not allowed, in any circumstance. Ok, you can ask a ''dictator'', but expect a NO. If, by chance, you get a YES, or even a MAYBE, then probably the rule's importance needs to be degraded to MEDIUM. However, in case an exception ever gets authorized, the exception rule for MEDIUM applies.&lt;br /&gt;
* '''MEDIUM''': exceptions are allowed only if authorized by a ''dictator'', and such authorization must be referenced in the code where the rule is infringed, along with the reason for infringement. &lt;br /&gt;
* '''LOW''': exceptions are allowed only if authorized by the project's technical lead, and such authorization must be referenced in the code where the rule is infringed.&lt;br /&gt;
* '''COSMETIC''': exceptions are not welcome, but tolerated if kept within reason.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4463</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4463"/>
		<updated>2016-01-03T11:07:32Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Avoid references to your own workspace files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Rationale ==&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
'''This is an open, ongoing, collaborative document!''' If you feel like a new guideline is needed for the project, then:&lt;br /&gt;
* Discuss it with senior colleagues to check that it actually makes sense, then&lt;br /&gt;
* Add it to this document, in the relevant section.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'', ''default'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4462</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4462"/>
		<updated>2016-01-03T11:06:20Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Never hardcode settings or &amp;quot;magic&amp;quot; values */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Rationale ==&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
'''This is an open, ongoing, collaborative document!''' If you feel like a new guideline is needed for the project, then:&lt;br /&gt;
* Discuss it with senior colleagues to check that it actually makes sense, then&lt;br /&gt;
* Add it to this document, in the relevant section.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : You die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4461</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4461"/>
		<updated>2016-01-03T11:00:38Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Avoid references to your own workspace files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Rationale ==&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
'''This is an open, ongoing, collaborative document!''' If you feel like a new guideline is needed for the project, then:&lt;br /&gt;
* Discuss it with senior colleagues to check that it actually makes sense, then&lt;br /&gt;
* Add it to this document, in the relevant section.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : you die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community.&lt;br /&gt;
; Suggestion : In order to avoid this, only place ''common'' settings in the versioned files, and provide a template for unversioned ''user properties''. Then use a smart configuration reader that allows ''user-specific'' properties to override the default ones.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4460</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4460"/>
		<updated>2016-01-03T10:58:38Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Avoid references to your own workspace files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Rationale ==&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
'''This is an open, ongoing, collaborative document!''' If you feel like a new guideline is needed for the project, then:&lt;br /&gt;
* Discuss it with senior colleagues to check that it actually makes sense, then&lt;br /&gt;
* Add it to this document, in the relevant section.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : you die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings and favourite IDE layouts. If such preferences are placed in a shared, versioned file, a ''commit war'' will inevitably start - causing frustration in the entire team/community. In order to avoid this, only place ''common'' settings in the versioned files, and provide a template for unversioned ''user properties''.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4459</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4459"/>
		<updated>2016-01-03T10:55:40Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Rationale ==&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
'''This is an open, ongoing, collaborative document!''' If you feel like a new guideline is needed for the project, then:&lt;br /&gt;
* Discuss it with senior colleagues to check that it actually makes sense, then&lt;br /&gt;
* Add it to this document, in the relevant section.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : you die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: A &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: Besides having a constructor specifying which file to read, a &amp;lt;code&amp;gt;ConfigProperties&amp;lt;/code&amp;gt; reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;lt;code&amp;gt;/home/johndoe/projects&amp;lt;/code&amp;gt; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4458</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4458"/>
		<updated>2016-01-03T10:50:20Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Rationale ==&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
'''This is an open, ongoing, collaborative document!''' If you feel like a new guideline is needed for the project, then:&lt;br /&gt;
* Discuss it with senior colleagues to check that it actually makes sense, then&lt;br /&gt;
* Add it to this document, in the relevant section.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design ===&lt;br /&gt;
; A.K.A. : No business and presentation logic mix-up&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never hardcode settings or &amp;quot;magic&amp;quot; values ===&lt;br /&gt;
; A.K.A. : you die if you do that&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: a ConfigProperties reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software ===&lt;br /&gt;
; A.K.A : Convention Over Configuration&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: besides having a constructor specifying which file to read, a ConfigurationProperties reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files ===&lt;br /&gt;
; A.K.A. : no &amp;quot;/home/johndoe/projects&amp;quot; on SVN or GIT&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4457</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4457"/>
		<updated>2016-01-03T10:47:04Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Rationale ==&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
'''This is an open, ongoing, collaborative document!''' If you feel like a new guideline is needed for the project, then:&lt;br /&gt;
* Discuss it with senior colleagues to check that it actually makes sense, then&lt;br /&gt;
* Add it to this document, in the relevant section.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
This section covers common guidelines concerning the design of our software.&lt;br /&gt;
&lt;br /&gt;
=== Clearly separate concerns in your design (a.k.a. No business and presentation logic mix-up) ===&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Whenever possible, our software has to make no assumptions on the context where it runs. As a matter of example: it happened that software originally targeting the desktop needed to be ported to the cloud - it was a bloodshed to separate the actual processing logic from &amp;quot;buttons&amp;quot;, &amp;quot;text fields&amp;quot; and &amp;quot;properties&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Never (as in: NEVER) hardcode settings or &amp;quot;magic&amp;quot; values (a.k.a. you die if you hardcode settings) ===&lt;br /&gt;
; Importance : HIGH&lt;br /&gt;
; Reason : Your code can (and will) be used in contexts which are totally unknown to you. It will need either to be totally context-independent, or to make all context-related aspects configurable.&lt;br /&gt;
; Example: a ConfigProperties reader '''must''' have a constructor specifying &amp;quot;which&amp;quot; file to read.&lt;br /&gt;
&lt;br /&gt;
=== Provide a reasonable default for configuration-based software (a.k.a. Convention Over Configuration) ===&lt;br /&gt;
; Importance: HIGH&lt;br /&gt;
; Reason : We mainly develop middleware. This usually requires a lot of knowledge about the environment the software runs within, which means a lot of configuration. The user may easily feel overwhelmed by having to configure each and every bit. Therefore, when a &amp;quot;default&amp;quot; behavior just makes sense, in absence of a more specific configuration &lt;br /&gt;
; Example: besides having a constructor specifying which file to read, a ConfigurationProperties reader shall also have a constructor omitting such parameter, which shall search for &amp;quot;config.properties&amp;quot; in the classpath or current working directory. &lt;br /&gt;
&lt;br /&gt;
=== Avoid references to your own workspace files (a.k.a. no &amp;quot;/home/johndoe/projects&amp;quot; on SVN or GIT) ===&lt;br /&gt;
; Importance : MEDIUM&lt;br /&gt;
; Reason : Every developer has his/her own settings.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4456</id>
		<title>Software Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Software_Development_Guidelines&amp;diff=4456"/>
		<updated>2016-01-03T10:16:13Z</updated>

		<summary type="html">&lt;p&gt;D.barra: Rationale written&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Rationale ==&lt;br /&gt;
The GreenVulcano code base has been growing over time. While the code has traditionally been &amp;quot;reviewed&amp;quot; by one or two people (our historical &amp;quot;good dictators&amp;quot;) before submission to public availability, this is becoming less and less the case due to our increasing core development community. Therefore, some self-discipline is needed in order to improve collaboration - and, sometimes, reduce the frustration due to switching from one style to the other between different source files (and often even within the same file).&lt;br /&gt;
&lt;br /&gt;
'''This is an open, ongoing, collaborative document!''' If you feel like a new guideline is needed for the project, then:&lt;br /&gt;
* Discuss it with senior colleagues to check that it actually makes sense, then&lt;br /&gt;
* Add it to this document, in the relevant section.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatting ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=FAQs&amp;diff=4220</id>
		<title>FAQs</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=FAQs&amp;diff=4220"/>
		<updated>2014-05-22T16:32:09Z</updated>

		<summary type="html">&lt;p&gt;D.barra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''May I use the open source version of JDK, OpenJDK, instead of the one provided by Oracle?'''&lt;br /&gt;
&lt;br /&gt;
{{GVESB}} is 100% compatible with the ''Java Virtual Machine'' provided by Oracle.&lt;br /&gt;
We recommend to use the JDK 1.6 version provided by Oracle, although we are aware of {{GVESB}} users that have found no malfunctionings with OpenJDK.&lt;br /&gt;
&lt;br /&gt;
'''I'm unable to start {{GVESB}} because there are some ports already in use on the server. What can I do?'''&lt;br /&gt;
&lt;br /&gt;
The startup script contains the parameter &amp;quot;-Djboss.service.binding.set=ports-default&amp;quot; defined in the variable JB_OPTS.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can modify &amp;quot;ports-default&amp;quot; choosing another portset with one in the following list:&lt;br /&gt;
&lt;br /&gt;
* ports-01; The ports-01 bindings are obtained by taking the base bindings and adding 100 to each port value &lt;br /&gt;
* ports-02; The ports-02 bindings are obtained by taking the base bindings and adding 200 to each port value &lt;br /&gt;
* ports-03; The ports-03 bindings are obtained by taking the base bindings and adding 300 to each port value &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Eg. -Djboss.service.binding.set=ports-01&lt;br /&gt;
&lt;br /&gt;
'''How can I access the {{GVESB}} administration console?'''&lt;br /&gt;
&lt;br /&gt;
The console is available at ''&amp;lt;nowiki&amp;gt;http://SERVER-HOSTNAME:8080/gvconsole&amp;lt;/nowiki&amp;gt;'', where &amp;quot;SERVER-HOSTNAME&amp;quot; should be replaced by the address of the server where {{GVESB}} was installed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''I can't access the administration console. What can I do?'''&lt;br /&gt;
&lt;br /&gt;
Check, in the log file ''server.log'', the correct ''deployment'' of the {{L_GVCONSOLE}}. Check on the console of Jboss ''&amp;lt;nowiki&amp;gt;http://SERVER-HOSTNAME:8080/web-console/&amp;lt;/nowiki&amp;gt;'' in the J2EE Domains if the file ''gvconsole-3.2.0.war'' is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''I don't know the credentials to access the administration console. Where can I find it?'''&lt;br /&gt;
&lt;br /&gt;
The credentials to access the administration console, {{L_GVCONSOLE}}, can be found in the file ''gvesb-users.properties'' present in the directory ''$GV_HOME/xmlconfig''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''I have a problem that I can not solve. How can I contact the {{GVESB}} support?'''&lt;br /&gt;
&lt;br /&gt;
It is possible to contact {{GVESB}} support sending an email to [mailto:support@greenvulcano.com ''support@greenvulcano.com''] containing the details of:&lt;br /&gt;
&lt;br /&gt;
* Version of the Java virtual machine used&lt;br /&gt;
* Operating System&lt;br /&gt;
* Short description of the hardware architecture&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Users are encouraged to attach the log files present in the directories ''$GV_HOME/log'' and ''$GV_SERVER/log''. See also the forum available at http://www.greenvulcano.com/forum/ where it is possible to find any information of a technical nature as well as requesting help from the ''community'' creating a ''thread/post'' with the problem description.&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Roadmap&amp;diff=4129</id>
		<title>Roadmap</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Roadmap&amp;diff=4129"/>
		<updated>2014-05-12T10:01:37Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Version 3.4 (Q2 2014) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Road Map===&lt;br /&gt;
&lt;br /&gt;
The engagement of GreenVulcano is to evolve the integration platform basing on the following criteria:&lt;br /&gt;
&lt;br /&gt;
* Requests / Contributions from the community&lt;br /&gt;
* Specific needs of customers and developers&lt;br /&gt;
* Contributions of partners / System Integrators&lt;br /&gt;
&lt;br /&gt;
Our team adds its experience and expertise by offering innovative solutions in line with the vision that has always pushed us since our birth: simplicity and robustness.&lt;br /&gt;
&lt;br /&gt;
GreenVulcano remains thus attached to the &amp;quot;real world&amp;quot;, not in any way feeling the need to pursue or chasing at all costs the latest fashion trends of other products in the market.&lt;br /&gt;
&lt;br /&gt;
The Roadmap is periodically updated by our software architects.&lt;br /&gt;
&lt;br /&gt;
===Version 3.2 (Q1 2012)===&lt;br /&gt;
&lt;br /&gt;
# “Sub Flow” management&lt;br /&gt;
# BPEL Flows management &lt;br /&gt;
# Every-component-Wizard on [[VulCon]] designer&lt;br /&gt;
# Visual Data Mapper&lt;br /&gt;
# Drools integration&lt;br /&gt;
# HL7 Adapter&lt;br /&gt;
# New Wiki&lt;br /&gt;
&lt;br /&gt;
===Version 3.3 (Q1 2013)===&lt;br /&gt;
&lt;br /&gt;
# Visual Debugger&lt;br /&gt;
# Deploy and test from VulCon&lt;br /&gt;
# GreenVulcano Studio&lt;br /&gt;
&lt;br /&gt;
===Version 3.4 (Q2 2014)===&lt;br /&gt;
&lt;br /&gt;
# Parallel Flow support&lt;br /&gt;
# Extension of VulCon wizards&lt;br /&gt;
&lt;br /&gt;
===Version 4.0 (Q4 2014)===&lt;br /&gt;
# Service High availability and GV propietary cluster management implementation (currently managed by application server)&lt;br /&gt;
# OSGI-based release&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Roadmap&amp;diff=4128</id>
		<title>Roadmap</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Roadmap&amp;diff=4128"/>
		<updated>2014-05-12T09:58:34Z</updated>

		<summary type="html">&lt;p&gt;D.barra: /* Version 3.4 (Q2 2014) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Road Map===&lt;br /&gt;
&lt;br /&gt;
The engagement of GreenVulcano is to evolve the integration platform basing on the following criteria:&lt;br /&gt;
&lt;br /&gt;
* Requests / Contributions from the community&lt;br /&gt;
* Specific needs of customers and developers&lt;br /&gt;
* Contributions of partners / System Integrators&lt;br /&gt;
&lt;br /&gt;
Our team adds its experience and expertise by offering innovative solutions in line with the vision that has always pushed us since our birth: simplicity and robustness.&lt;br /&gt;
&lt;br /&gt;
GreenVulcano remains thus attached to the &amp;quot;real world&amp;quot;, not in any way feeling the need to pursue or chasing at all costs the latest fashion trends of other products in the market.&lt;br /&gt;
&lt;br /&gt;
The Roadmap is periodically updated by our software architects.&lt;br /&gt;
&lt;br /&gt;
===Version 3.2 (Q1 2012)===&lt;br /&gt;
&lt;br /&gt;
# “Sub Flow” management&lt;br /&gt;
# BPEL Flows management &lt;br /&gt;
# Every-component-Wizard on [[VulCon]] designer&lt;br /&gt;
# Visual Data Mapper&lt;br /&gt;
# Drools integration&lt;br /&gt;
# HL7 Adapter&lt;br /&gt;
# New Wiki&lt;br /&gt;
&lt;br /&gt;
===Version 3.3 (Q1 2013)===&lt;br /&gt;
&lt;br /&gt;
# Visual Debugger&lt;br /&gt;
# Deploy and test from VulCon&lt;br /&gt;
# GreenVulcano Studio&lt;br /&gt;
&lt;br /&gt;
===Version 3.4 (Q2 2014)===&lt;br /&gt;
&lt;br /&gt;
# Parallel Flow support&lt;br /&gt;
&lt;br /&gt;
===Version 4.0 (Q4 2014)===&lt;br /&gt;
# Service High availability and GV propietary cluster management implementation (currently managed by application server)&lt;br /&gt;
# OSGI-based release&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
	<entry>
		<id>https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Roadmap&amp;diff=4127</id>
		<title>Roadmap</title>
		<link rel="alternate" type="text/html" href="https://gvwiki.greenvulcano.com/gvwiki/index.php?title=Roadmap&amp;diff=4127"/>
		<updated>2014-05-12T09:52:45Z</updated>

		<summary type="html">&lt;p&gt;D.barra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Road Map===&lt;br /&gt;
&lt;br /&gt;
The engagement of GreenVulcano is to evolve the integration platform basing on the following criteria:&lt;br /&gt;
&lt;br /&gt;
* Requests / Contributions from the community&lt;br /&gt;
* Specific needs of customers and developers&lt;br /&gt;
* Contributions of partners / System Integrators&lt;br /&gt;
&lt;br /&gt;
Our team adds its experience and expertise by offering innovative solutions in line with the vision that has always pushed us since our birth: simplicity and robustness.&lt;br /&gt;
&lt;br /&gt;
GreenVulcano remains thus attached to the &amp;quot;real world&amp;quot;, not in any way feeling the need to pursue or chasing at all costs the latest fashion trends of other products in the market.&lt;br /&gt;
&lt;br /&gt;
The Roadmap is periodically updated by our software architects.&lt;br /&gt;
&lt;br /&gt;
===Version 3.2 (Q1 2012)===&lt;br /&gt;
&lt;br /&gt;
# “Sub Flow” management&lt;br /&gt;
# BPEL Flows management &lt;br /&gt;
# Every-component-Wizard on [[VulCon]] designer&lt;br /&gt;
# Visual Data Mapper&lt;br /&gt;
# Drools integration&lt;br /&gt;
# HL7 Adapter&lt;br /&gt;
# New Wiki&lt;br /&gt;
&lt;br /&gt;
===Version 3.3 (Q1 2013)===&lt;br /&gt;
&lt;br /&gt;
# Visual Debugger&lt;br /&gt;
# Deploy and test from VulCon&lt;br /&gt;
# GreenVulcano Studio&lt;br /&gt;
&lt;br /&gt;
===Version 3.4 (Q2 2014)===&lt;br /&gt;
&lt;br /&gt;
# Parallel Flow and try catch&lt;br /&gt;
&lt;br /&gt;
===Version 4.0 (Q4 2014)===&lt;br /&gt;
# Service High availability and GV propietary cluster management implementation (currently managed by application server)&lt;br /&gt;
# OSGI-based release&lt;/div&gt;</summary>
		<author><name>D.barra</name></author>
		
	</entry>
</feed>