<?xml version="1.0"?>
<rss version="2.0">
<channel>
<link>http://dev.helma.org/</link>
<title>helma.org</title>
<description>Updates for helma.org</description>
<item>
<link>http://dev.helma.org/ng/Differences+between+Helma+1+and+Helma+NG/</link>
<title>Differences between Helma 1 and Helma NG</title>
<description>&lt;p&gt;It is quite obvious for anybody familiar with Helma 1 that NG is quite different in many fundamental ways. This article highligts some of the  differences, and explains the reasoning behind these changes. I&apos;ve grouped the changes into two groups: the big, obvious ones, and the smaller, not so visible ones. &lt;/p&gt;

&lt;h1&gt;Obvious Changes&lt;a name=&apos;ObviousChanges&apos; href=&apos;http://dev.helma.org/ng/Differences+between+Helma+1+and+Helma+NG/#ObviousChanges&apos;&gt; &lt;/a&gt;&lt;/h1&gt;

&lt;h3&gt;More Javascript, Less Java&lt;a name=&apos;MoreJavascriptLessJava&apos; href=&apos;http://dev.helma.org/ng/Differences+between+Helma+1+and+Helma+NG/#MoreJavascriptLessJava&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;TODO&lt;/p&gt;

&lt;h3&gt;The Helma Shell&lt;a name=&apos;TheHelmaShell&apos; href=&apos;http://dev.helma.org/ng/Differences+between+Helma+1+and+Helma+NG/#TheHelmaShell&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;TODO&lt;/p&gt;

&lt;h3&gt;No HopObjects at the Core&lt;a name=&apos;NoHopObjectsattheCore&apos; href=&apos;http://dev.helma.org/ng/Differences+between+Helma+1+and+Helma+NG/#NoHopObjectsattheCore&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;TODO&lt;/p&gt;

&lt;h1&gt;Non-Obvious Changes&lt;a name=&apos;NonObviousChanges&apos; href=&apos;http://dev.helma.org/ng/Differences+between+Helma+1+and+Helma+NG/#NonObviousChanges&apos;&gt; &lt;/a&gt;&lt;/h1&gt;

&lt;h3&gt;Non-accumulative Repository Chain&lt;a name=&apos;NonaccumulativeRepositoryChain&apos; href=&apos;http://dev.helma.org/ng/Differences+between+Helma+1+and+Helma+NG/#NonaccumulativeRepositoryChain&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Like Helma 1, Helma NG is based on the concept of a list of repositories from which code and other resources are read. In fact, the repository package (contributed to Helma by Daniel Ruthardt) is one of the few larger packages of code Helma NG shares with its predecessor. However, Helma NG treats the repository path quite differently than Helma 1. Helma 1 in many cases treated the repository path in an accumulative way, meaning that things later on in the path could add to things defined in front of them. This was true for all kinds of properties files, scripts and skins. Helma NG, on the other hand, uses a more conservative approach: The first resource found in the repository path is used, and once the resource is found the search is terminated.&lt;/p&gt;

&lt;p&gt;The reasoning behind this change is mostly to reduce complexity. Adding to one logical reource in several places can have terrible effects on clarity. By defining one thing in one place we hope to faciltate separation of concerns and improved molularity.&lt;/p&gt;

</description>
</item>
<item>
<link>http://dev.helma.org/ng/Jala+Test+NG+port/</link>
<title>Jala Test NG port</title>
<description>&lt;p&gt;Jala Test is (somewhat) functional on Helma NG! See attachments for screenshot, diffs and zip file. The changes are not that bad. I used the freshly committed &lt;a href=&quot;http://dev.helma.org/trac/helma/browser/helma-ng/trunk/modules/helma/helma1.js&quot; class=&quot;externalLink&quot;&gt;helma.helma1&lt;/a&gt; compatibilty module for this.&lt;/p&gt;

&lt;p&gt;&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; class=&quot;list&quot; border=&quot;0&quot;&gt;&lt;tr class=&quot;even&quot;&gt;&lt;td class=&quot;caption&quot;&gt;name&lt;/td&gt;&lt;td class=&quot;caption&quot;&gt;type&lt;/td&gt;&lt;td class=&quot;caption&quot;&gt;size&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;odd&quot;&gt;&lt;td&gt;&lt;a href=&quot;http://dev.helma.org/static/files/2733/jalatest-ng.png&quot;&gt;jalatest-ng.png&lt;/a&gt;&lt;/td&gt;&lt;td&gt;image/png&lt;/td&gt;&lt;td&gt;97683 bytes&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;even&quot;&gt;&lt;td&gt;&lt;a href=&quot;http://dev.helma.org/static/files/2733/jalatest.zip&quot;&gt;jalatest.zip&lt;/a&gt;&lt;/td&gt;&lt;td&gt;application/x-zip-compressed&lt;/td&gt;&lt;td&gt;13987 bytes&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;odd&quot;&gt;&lt;td&gt;&lt;a href=&quot;http://dev.helma.org/static/files/2733/jalatest.diff&quot;&gt;jalatest.diff&lt;/a&gt;&lt;/td&gt;&lt;td&gt;text/plain&lt;/td&gt;&lt;td&gt;51321 bytes&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;

&lt;p&gt;To mount the test module&apos;s jala.test action in a Helma NG app as /test/jala.test do something like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  importModule(&apos;jala.test.*&apos;, &apos;test&apos;);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To mount the action as /jala.test do the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  importFromModule(&apos;jala.test.*&apos;, &apos;jala_test_action&apos;, &apos;jala_test_css_action&apos;);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note that the path for the tests directory is currently hard-coded as /home/hannes/svn/helma-ng/modules/tests. You&apos;ll have to edit that path manually in the jala.Test.js file. &lt;/p&gt;
</description>
</item>
<item>
<link>http://dev.helma.org/wiki/Type.properties+Documentation/</link>
<title>Type.properties Documentation</title>
<description>&lt;p&gt;To store your HopObjects into a relational database system you need to define a database mapping. This is done in the type.properties files located in the persistent  HopObject&apos;s prototype directory (e.g. apps/myApp/MyPrototype). The type.properties files contain no JDBC connection information, which is located in the db.properties file in the Helma installation directory.&lt;/p&gt;

&lt;h3&gt;Configuration Settings&lt;a name=&apos;ConfigurationSettings&apos; href=&apos;http://dev.helma.org/wiki/Type.properties+Documentation/#ConfigurationSettings&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt; _db = datasourceName
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The _db entry describes the database source to use for managing objects of this type. datasourcename is the connection&apos;s name defined in the db.properties, which is located in Helma&amp;#8217;s installation directory or the application directory. The db.properties file contains information about the JDBC connections, like the JDBC driver, the connection URL and the database username and password.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; _table = tableName
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The _table entry tells Helma which table to use for objects of this type within the database. To avoid problems with reserved words of SQL or your database system you should prefix your table names. (e.g. T_Story for the Story prototype&amp;#8217;s table)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; _prototype
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; _parent = localPropertyName, localProperty.parentsCollectionName, root.collectionName
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The _parent entry contains a comma-separated list of properties of objects of this type to be used as parent. Objects must know their parent in order to generate correct URLs in their href() function. If a property in the list is null, Helma will look on the following one to fetch a parent object.&lt;/p&gt;

&lt;p&gt;If an entry in the _parent item does not contain a dot, it is interpreted as an object property of the current object that acts as the object&apos;s parent. If an entry contains a dot character, the part after the dot is interpreted as a collection in the parent object in which the current object is contained. If the _parent is specified as &quot;root&quot;, it is not interpreted as a property of the current object. Instead, the application&apos;s root object is used as parent object.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; _id = primaryKeyColumnName
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The _id entry defines the column to use as primary key. Helma requires a single primary key with no other functionality.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; _children
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Simple Attributes&lt;a name=&apos;SimpleAttributes&apos; href=&apos;http://dev.helma.org/wiki/Type.properties+Documentation/#SimpleAttributes&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt; simpleAttributeName = tablecolumnname
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Referenced Objects&lt;a name=&apos;ReferencedObjects&apos; href=&apos;http://dev.helma.org/wiki/Type.properties+Documentation/#ReferencedObjects&apos;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt; obj = object(SomeHopObject)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; obj.local
&lt;/code&gt;&lt;/pre&gt; 

&lt;pre&gt;&lt;code&gt; obj.foreign 
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; obj.local.X 
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; obj.foreign.X 
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; obj.logicalOperator 
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Collections&lt;a name=&apos;Collections&apos; href=&apos;http://dev.helma.org/wiki/Type.properties+Documentation/#Collections&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt; coll = collection(SomeHopObject)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; coll.local
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; coll.foreign 
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; coll.loadmode 
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; coll.cachemode 
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; coll.order 
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; coll.filter 
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; coll.filter.additionalTables 
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; coll.hints 
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; coll.maxSize
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; coll.accessname
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; coll.group 
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; coll.group.order 
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt; coll.group.prototype
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Mountpoints&lt;a name=&apos;Mountpoints&apos; href=&apos;http://dev.helma.org/wiki/Type.properties+Documentation/#Mountpoints&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt; moutpointName = mountpoint(SomeTransientHopObject)
&lt;/code&gt;&lt;/pre&gt;
</description>
</item>
<item>
<link>http://dev.helma.org/wiki/Modules+and+Scopes+in+Helma+NG/</link>
<title>Modules and Scopes in Helma NG</title>
<description>&lt;p&gt;The javascript import features in &lt;a href=&quot;http://dev.helma.org/wiki/Helma+NG/&quot; class=&quot;wikiLink&quot;&gt;Helma NG&lt;/a&gt; try to loosely imitate the &lt;a href=&quot;http://www.effbot.org/zone/import-confusion.htm&quot; class=&quot;externalLink&quot;&gt;semantics of python&apos;s import statement&lt;/a&gt; in order to allow applications to be written in a truly modular way. The magic of python&apos;s import statement is that a script never has to do anything special in order to avoid name clashes with other scripts, because every script lives in its one top level scope by default. &lt;/p&gt;

&lt;p&gt;To sum it up:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;You don&apos;t have to use any special Javascript syntax to denote a namespace. Every script is by its nature a separate scope, assigned to a namespace by the script that imported it.&lt;/li&gt;&lt;li&gt;It&apos;s virtually impossible to produce a name collision, as each script lives in its own scope.&lt;/li&gt;&lt;li&gt;Since scripts live in their own scope, imported scripts are only visible to the scripts that imported them.&lt;/li&gt;&lt;/ol&gt;
&lt;h3&gt;Implementation&lt;a name=&apos;Implementation&apos; href=&apos;http://dev.helma.org/wiki/Modules+and+Scopes+in+Helma+NG/#Implementation&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Helma NG implements this by using a &lt;a href=&quot;http://www.mozilla.org/rhino/scopes.html#sharingscopes&quot;&gt;separate top-level scope&lt;/a&gt; for each loaded script file, using a shared top-level scope as prototype. A simplistic implementation of most of the behaviour described above in the Rhino shell may look like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  // set reference to global object
  var __global__ = __global__ || this;
  
  function include(script, as) {
    var scope = new Object();
    scope.__parent__ = null;
    scope.__proto__ = __global__;
    // scope is now a top level scope that inherits 
    // from the global, shared top level scope
    scope.load(script);
    this[as] = scope;
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Of course, Helma NG also takes care of script reloading and stuff, and the shared module scope is really a per-thread scope that uses a really-shared scope for the really-shared stuff.&lt;/p&gt;

&lt;h3&gt;Example&lt;a name=&apos;Example&apos; href=&apos;http://dev.helma.org/wiki/Modules+and+Scopes+in+Helma+NG/#Example&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Suppose there is a Javascript file called &lt;code&gt;helma/database.js&lt;/code&gt; with the following content:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  function getConnection(...) {
      ....
  }
  
  function Connection(...) {
      ...
  }
  
  function Query(...) {
      ...
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then consider the following statements in another script file:&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;&lt;b&gt;importModule(&quot;helma.database&quot;)&lt;/b&gt;&lt;/dt&gt;
&lt;dd&gt;This makes the functions defined in helma/database.js available in the current scope as 
&lt;pre&gt;&lt;code&gt;  helma.database.getConnection()
  helma.database.Connection()
  helma.database.Query()
&lt;/code&gt;&lt;/pre&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;b&gt;importModule(&quot;helma.database&quot;, &quot;db&quot;)&lt;/b&gt;&lt;/dt&gt;
&lt;dd&gt;This makes the functions defined in helma/database.js available in the current scope as 
&lt;pre&gt;&lt;code&gt;  db.getConnection()
  db.Connection()
  db.Query()
&lt;/code&gt;&lt;/pre&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;b&gt;importFromModule(&quot;helma.database&quot;, &quot;getConnection&quot;, &quot;Query&quot;)&lt;/b&gt;&lt;/dt&gt;
&lt;dd&gt;This makes the functions defined in helma/database.js available in the current scope as 
&lt;pre&gt;&lt;code&gt;  getConnection()
  Query()
&lt;/code&gt;&lt;/pre&gt;
&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Note that the functions in helma/database.js do not care in which namespace they are loaded. They only see what is defined in their local file, and in the global scope shared by all modules. The scope that loaded the module is absolutely invisible to the loaded module! Also note that the getConnection() function in the last example can still access the Connection() constructor although it&apos;s not included in the importFromModule(). That&apos;s the power of closures!&lt;/p&gt;
</description>
</item>
<item>
<link>http://dev.helma.org/wiki/Wiki+Overview+Text+Draft/</link>
<title>Wiki Overview Text Draft</title>
<description>&lt;p&gt;Most activity in the wiki currently revolves around &lt;a href=&quot;http://dev.helma.org/wiki/Documentation+Drafts/&quot; class=&quot;wikiLink&quot;&gt;working drafts for additional documentation&lt;/a&gt; and around &lt;a href=&quot;http://dev.helma.org/wiki/Helma+NG/&quot; class=&quot;wikiLink&quot;&gt;Helma NG&lt;/a&gt; with a newly added dedicated &lt;a href=&quot;http://dev.helma.org/ng/&quot; class=&quot;wikiLink&quot;&gt;Helma NG Wiki&lt;/a&gt; space. &lt;/p&gt;

&lt;p&gt;Other important wiki pages are the lists of &lt;a href=&quot;http://dev.helma.org/wiki/Related+Projects/&quot; class=&quot;wikiLink&quot;&gt;Related Projects&lt;/a&gt; and &lt;a href=&quot;http://dev.helma.org/wiki/Sites+using+Helma/&quot; class=&quot;wikiLink&quot;&gt;Sites using Helma&lt;/a&gt;, to both of which you are welcome to add your own or other missing entries.&lt;/p&gt;

&lt;p&gt;Also helpful to find what you are looking for, may be the &lt;a href=&quot;http://dev.helma.org/search/&quot; class=&quot;wikiLink&quot;&gt;search&lt;/a&gt; page, the &lt;a href=&quot;http://dev.helma.org/updates/&quot; class=&quot;wikiLink&quot;&gt;updates&lt;/a&gt; page, the &lt;a href=&quot;http://dev.helma.org/tags/&quot; class=&quot;wikiLink&quot;&gt;tags&lt;/a&gt; cloud and the &lt;a href=&quot;http://dev.helma.org/wiki/&quot; class=&quot;wikiLink&quot;&gt;list of pages in the general wiki&lt;/a&gt;, which contains ideas, drafts and other miscellaneous bits and serves as an incubation space for new projects and documentation pages that may later be moved to their dedicated spaces.&lt;/p&gt;

&lt;p&gt;Don&apos;t hesitate to just &lt;a href=&quot;http://dev.helma.org/wiki/create&quot; class=&quot;externalLink&quot;&gt;add a new page&lt;/a&gt; if you have something to contribute and are not sure where otherwise to put it.&lt;/p&gt;

</description>
</item>
<item>
<link>http://dev.helma.org/wiki/Documentation+Drafts/</link>
<title>Documentation Drafts</title>
<description>&lt;p&gt;The current plan is to create a second wiki area specifically for the docs. &lt;/p&gt;

&lt;p&gt;If you have ideas for how these documentation and training pages should be structured, the topics they should cover or if you can contribute something yourself, you may do so here in the wiki for brain storming purposes and proposals. Later we can move these bits to the &lt;a href=&quot;http://dev.helma.org/docs/&quot; class=&quot;wikiLink&quot;&gt;new docs section&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Current working drafts in progress: (to propose a new draft, just add it to this list)&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://dev.helma.org/wiki/Type.properties+Documentation/&quot; class=&quot;wikiLink&quot;&gt;Type.properties Documentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://dev.helma.org/wiki/Collection+Mapping/&quot; class=&quot;wikiLink&quot;&gt;Collection Mapping&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://dev.helma.org/wiki/Object+Reference+Mapping+%281%3A1+relation%29/&quot; class=&quot;wikiLink&quot;&gt;Object Reference Mapping (1:1 relation)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;


</description>
</item>
<item>
<link>http://dev.helma.org/wiki/Helma+Roadmap/</link>
<title>Helma Roadmap</title>
<description>&lt;h3&gt;Helma 1.6&lt;a name=&apos;Helma16&apos; href=&apos;http://dev.helma.org/wiki/Helma+Roadmap/#Helma16&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Helma 1.6.2 is the current stable version of Helma and was released on April 7, 2008. You can get it from the &lt;a href=&quot;http://helma.org/download/&quot; class=&quot;externalLink&quot;&gt;download page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See the &lt;a href=&quot;http://dev.helma.org/wiki/Helma+1.6.0+Changelog/&quot; class=&quot;wikiLink&quot;&gt;Helma 1.6.0 Changelog&lt;/a&gt;, &lt;a href=&quot;http://dev.helma.org/wiki/Helma+1.6.1+Changelog/&quot; class=&quot;wikiLink&quot;&gt;Helma 1.6.1 Changelog&lt;/a&gt;  and &lt;a href=&quot;http://dev.helma.org/wiki/Helma+1.6.2+Changelog/&quot; class=&quot;wikiLink&quot;&gt;Helma 1.6.2 Changelog&lt;/a&gt; for new features and bugfixes in Helma 1.6.&lt;/p&gt;

&lt;h3&gt;Helma 1.7&lt;a name=&apos;Helma17&apos; href=&apos;http://dev.helma.org/wiki/Helma+Roadmap/#Helma17&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Helma 1.7.0 is planned for the middle of 2008 and will introduce significant new features to those found in Helma 1.6. See pages tagged with &lt;a href=&quot;http://dev.helma.org/tags/helma+1.7/&quot; class=&quot;wikiLink&quot;&gt;helma 1.7&lt;/a&gt; for a list of planned features and the list of &lt;a href=&quot;http://helma.org/bugs/buglist.cgi?target_milestone=1.7.0&quot; class=&quot;externalLink&quot;&gt;fixes and changes&lt;/a&gt; on track for Helma 1.7. &lt;/p&gt;

&lt;h3&gt;Helma 2.0&lt;a name=&apos;Helma20&apos; href=&apos;http://dev.helma.org/wiki/Helma+Roadmap/#Helma20&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;The roadmap for Helma 2 is being reassessed, since functionality that was intended for Helma 2 has now already been included in the Helma 1.6.0 release and development of Helma 1.x has been reenergized. &lt;/p&gt;

&lt;p&gt;The implementation of Helma 2 has already been started, and is currently continuing under the code name &quot;&lt;a href=&quot;http://dev.helma.org/wiki/Helma+NG/&quot; class=&quot;wikiLink&quot;&gt;Helma NG&lt;/a&gt;&quot;, likely in parallel with the development of future Helma 1.x versions.&lt;/p&gt;

</description>
</item>
<item>
<link>http://dev.helma.org/wiki/Collection+Mapping/</link>
<title>Collection Mapping</title>
<description>&lt;p&gt;&lt;b&gt;Naming conventions&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;All the tables and columns in the database are all lowercase. (Which is quite handy with an Mysql database because the names are case-sensitive if the underlying file system is also case-sensitive. So Mysql Names are case sensitive on Linux but not on Windows.)&lt;/p&gt;

&lt;p&gt;Tablenames are plural.&lt;/p&gt;

&lt;p&gt;Prototype names start with upper case and are camel case. Prototype names are singular.&lt;/p&gt;

&lt;p&gt;Property- Object- and Collection-Mapping start with lower case and are also camel case.&lt;/p&gt;

&lt;p&gt;Foreign keys are prefixed with the name of the table they are referring to.&lt;/p&gt;&lt;br /&gt;


&lt;h2&gt;1:n relation&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;DB schema&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dev.helma.org/static/files/2686/1-to-n-relation.jpg&quot;&gt;&lt;/img&gt;&lt;/p&gt;&lt;br /&gt;


&lt;p&gt;&lt;b&gt;Mapping&lt;/b&gt;&lt;/p&gt;

&lt;b&gt;Gallery/type.properties&lt;/b&gt;
&lt;pre&gt;&lt;code&gt;   images         = Collection(Image)
   images.local   = gallery_id
   images.foreign = galleries_gallery_id
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;


&lt;h2&gt;m:n relation&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;DB schema&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dev.helma.org/static/files/2686/m-to-n-relation.jpg&quot;&gt;&lt;/img&gt;&lt;/p&gt;&lt;br /&gt;


&lt;p&gt;&lt;b&gt;Mapping&lt;/b&gt;&lt;/p&gt;

&lt;b&gt;Image/type.properties&lt;/b&gt;
&lt;pre&gt;&lt;code&gt;   tags                          = Collection(Tag)
   tags.filter                   = ${image_id} = tags2images.images_image_id AND \
                                   tags2images.tags_tag_id = tags.tag_id
   tags.filter.additionalTables  = tags2images
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The Backslash &quot;\&quot; is only necessary when you have a filter that continues in the next line.&lt;/p&gt;</description>
</item>
<item>
<link>http://dev.helma.org/wiki/Object+Reference+Mapping+%281%3A1+relation%29/</link>
<title>Object Reference Mapping (1:1 relation)</title>
<description>&lt;p&gt;&lt;b&gt;Naming conventions&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;All the tables and columns in the database are all lowercase. (Which is quite handy with an Mysql database because the names are case-sensitive if the underlying file system is also case-sensitive. So Mysql Names are case sensitive on Linux but not on Windows.)&lt;/p&gt;

&lt;p&gt;Tablenames are plural.&lt;/p&gt;

&lt;p&gt;Prototype names start with upper case and are camel case. Prototype names are singular.&lt;/p&gt;

&lt;p&gt;Property- Object- and Collection-Mapping start with lower case and are also camel case.&lt;/p&gt;

&lt;p&gt;Foreign keys are prefixed with the name of the table they are referring to.&lt;/p&gt;&lt;br /&gt;


&lt;p&gt;&lt;b&gt;DB schema&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dev.helma.org/static/files/2657/1-to-1-relation.jpg&quot;&gt;&lt;/img&gt;&lt;/p&gt;&lt;br /&gt;


&lt;p&gt;&lt;b&gt;Mapping&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Lets map the image_data to our image!&lt;/p&gt;

&lt;b&gt;Image/type.properties&lt;/b&gt;
&lt;pre&gt;&lt;code&gt;   imageData          = Object(ImageData)
   imageData.local    = image_id
   imageData.foreign  = images_image_id
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This code is in the type.properties file of our Image prototype. We specify which prototype should be mapped with the Object() instruction. You have to specify the name of the prototype here. To the properties.local and .foreign you must assign the names of database columns.&lt;/p&gt;</description>
</item>
<item>
<link>http://dev.helma.org/wiki/Sites+using+Helma/</link>
<title>Sites using Helma</title>
<description>&lt;h3&gt;Some example sites built using Helma:&lt;a name=&apos;SomeexamplesitesbuiltusingHelma&apos; href=&apos;http://dev.helma.org/wiki/Sites+using+Helma/#SomeexamplesitesbuiltusingHelma&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://247street.net/&quot; class=&quot;externalLink&quot;&gt;247street.net&lt;/a&gt; - weblog community&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://alphazoo.at/&quot; class=&quot;externalLink&quot;&gt;alphazoo.at&lt;/a&gt; - weblog community&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://antville.org/&quot; class=&quot;externalLink&quot;&gt;antville.org&lt;/a&gt; - weblog community&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://appjet.com/&quot; class=&quot;externalLink&quot;&gt;appjet.com&lt;/a&gt; - in-browser IDE for building and hosting web apps with javascript&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blogger.de/&quot; class=&quot;externalLink&quot;&gt;blogger.de&lt;/a&gt; - weblog community&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blogmax.at/&quot; class=&quot;externalLink&quot;&gt;blogmax.at&lt;/a&gt; - weblog community&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blogr.com/&quot; class=&quot;externalLink&quot;&gt;blogr.com&lt;/a&gt; - your space for photos, videos, podcasts and your blog&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blogs.macbay.de/&quot; class=&quot;externalLink&quot;&gt;blogs.macbay.de&lt;/a&gt; -  weblog community&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blogs.uni-erlangen.de/&quot; class=&quot;externalLink&quot;&gt;blogs.uni-erlangen.de&lt;/a&gt; - university weblogs&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blogverzeichnis.krone.at/&quot; class=&quot;externalLink&quot;&gt;blogverzeichnis.krone.at&lt;/a&gt; - weblog directory&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.club3k.at/&quot; class=&quot;externalLink&quot;&gt;club3k.at&lt;/a&gt; - webchat community and social media site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://collabor.f4.fhtw-berlin.de/&quot; class=&quot;externalLink&quot;&gt;collabor.f4.fhtw-berlin.de&lt;/a&gt; - education weblog community&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.derwesten.de/&quot; class=&quot;externalLink&quot;&gt;derwesten.de&lt;/a&gt; - media and community site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://dubistnews.at/&quot; class=&quot;externalLink&quot;&gt;dubistnews.at&lt;/a&gt; - weblog community&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://evolver.at/&quot; class=&quot;externalLink&quot;&gt;evolver.at&lt;/a&gt; - webzine&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://fm4.orf.at/&quot; class=&quot;externalLink&quot;&gt;fm4.orf.at&lt;/a&gt; - public broadcast media site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://fritz.salzburg.com/&quot; class=&quot;externalLink&quot;&gt;fritz.salzburg.com&lt;/a&gt; - entertainment community site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://futurezone.orf.at/&quot; class=&quot;externalLink&quot;&gt;futurezone.orf.at&lt;/a&gt; - public broadcast media site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://hausverein.ch/&quot; class=&quot;externalLink&quot;&gt;hausverein.ch&lt;/a&gt; - corporate/association site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://hektor.ch/&quot; class=&quot;externalLink&quot;&gt;hektor.ch&lt;/a&gt; - project site for Hektor, the spray-paint output device&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://helma.org/&quot; class=&quot;externalLink&quot;&gt;helma.org&lt;/a&gt; - project site, wiki, blog&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://henso.com/&quot; class=&quot;externalLink&quot;&gt;henso.com&lt;/a&gt; - personal site, blog&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://ideenbuero.org/&quot; class=&quot;externalLink&quot;&gt;ideenb&amp;uuml;ro.org&lt;/a&gt; - corporate site, wiki, blog&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://knallgrau.at/&quot; class=&quot;externalLink&quot;&gt;knallgrau.at&lt;/a&gt; - corporate site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://kontakt.erstebankgroup.net/&quot; class=&quot;externalLink&quot;&gt;kontakt.erstebankgroup.net&lt;/a&gt; - corporate site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.kontakt-collection.net/&quot; class=&quot;externalLink&quot;&gt;kontakt-collection.net&lt;/a&gt; - corporate site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://lineto.com/&quot; class=&quot;externalLink&quot;&gt;lineto.com&lt;/a&gt; - corporate site and web shop for original digital typefaces&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.meinekleine.at/&quot; class=&quot;externalLink&quot;&gt;meinekleine.at&lt;/a&gt; - media community site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.mumundo.net/&quot; class=&quot;externalLink&quot;&gt;mumundo.net&lt;/a&gt; - project site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://mywoman.at/&quot; class=&quot;externalLink&quot;&gt;mywoman.at&lt;/a&gt; - weblog community&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://myworld.bluewin.ch&quot; class=&quot;externalLink&quot;&gt;myworld.bluewin.ch&lt;/a&gt; - weblog community and social media site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://oe3.orf.at/&quot; class=&quot;externalLink&quot;&gt;oe3.orf.at&lt;/a&gt; - public broadcast media site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://oesterreich.orf.at/&quot; class=&quot;externalLink&quot;&gt;oesterreich.orf.at&lt;/a&gt; - public broadcast media site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blog.p3k.org/&quot; class=&quot;externalLink&quot;&gt;p3k.org&lt;/a&gt; - personal site/blog&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://parq.at/&quot; class=&quot;externalLink&quot;&gt;parq.at&lt;/a&gt; - corporate site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://iphone.boozle.de/&quot; class=&quot;externalLink&quot;&gt;iphone.boozle.de&lt;/a&gt; - ORF.at for iPhone&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://plastikmaedchen.net/&quot; class=&quot;externalLink&quot;&gt;plastikmaedchen.net&lt;/a&gt; - personal site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://politikblogs.at/&quot; class=&quot;externalLink&quot;&gt;politikblogs.at&lt;/a&gt; - weblog directory&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://polylog.tv/&quot; class=&quot;externalLink&quot;&gt;polylog.tv&lt;/a&gt; - social media site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://preachingtheword.net/&quot; class=&quot;externalLink&quot;&gt;preachingtheword.net&lt;/a&gt; - audio sermon archive&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://radiograz.at/&quot; class=&quot;externalLink&quot;&gt;radiograz.at&lt;/a&gt; - media and community site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://shnitzl.org/&quot; class=&quot;externalLink&quot;&gt;shnitzl.org&lt;/a&gt; - add, share, organize and discover great events&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://science.orf.at/&quot; class=&quot;externalLink&quot;&gt;science.orf.at&lt;/a&gt; - public broadcast media site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://scratchdisk.com/&quot; class=&quot;externalLink&quot;&gt;scratchdisk.com&lt;/a&gt; personal portfolio site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://scriptographer.com/&quot; class=&quot;externalLink&quot;&gt;scriptographer.com&lt;/a&gt; - project site for a JavaScript scripting plugin for Adobe Illustrator&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://shapeshifters.net&quot; class=&quot;externalLink&quot;&gt;shapeshifters.net&lt;/a&gt; - community site for creatives&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://sosmitmensch.at/&quot; class=&quot;externalLink&quot;&gt;sosmitmensch.at&lt;/a&gt; - human rights pressure group&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://jugendserver.spinnenwerk.de/spinnix/&quot; class=&quot;externalLink&quot;&gt;spinnenwerk.de&lt;/a&gt; - weblog community&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://tonight.rp-online.de/tonight/&quot; class=&quot;externalLink&quot;&gt;tonight.rp-online.de&lt;/a&gt; - party portal and community&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://twoday.net/&quot; class=&quot;externalLink&quot;&gt;twoday.net&lt;/a&gt; - weblog community&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://twoday.tuwien.ac.at/&quot; class=&quot;externalLink&quot;&gt;twoday.tuwien.ac.at&lt;/a&gt; - university weblogs&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://typolis.net/&quot; class=&quot;externalLink&quot;&gt;typolis.net&lt;/a&gt; - weblog community&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://tz-online.de/&quot; class=&quot;externalLink&quot;&gt;tz-online.de&lt;/a&gt; - media and community site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://vistablog.at/&quot; class=&quot;externalLink&quot;&gt;vistablog.at&lt;/a&gt; - corporate blog&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.webmark.eu/index.php/de/Services/Detail/id/3/webmarkCat/0&quot; class=&quot;externalLink&quot;&gt;Webmark&lt;/a&gt; - Managementinformationssystem&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://weblife.at/&quot; class=&quot;externalLink&quot;&gt;weblife.at&lt;/a&gt; - community and social media site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://weblogs.brandnews.at/&quot; class=&quot;externalLink&quot;&gt;weblogs.brandnews.at&lt;/a&gt; - weblog community&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.westropolis.de/&quot; class=&quot;externalLink&quot;&gt;westropolis.de&lt;/a&gt; - culture community site&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://zumbrunn.com/&quot; class=&quot;externalLink&quot;&gt;zumbrunn.com&lt;/a&gt; - corporate/personal site&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Organizations with projects based on Helma:&lt;a name=&apos;OrganizationswithprojectsbasedonHelma&apos; href=&apos;http://dev.helma.org/wiki/Sites+using+Helma/#OrganizationswithprojectsbasedonHelma&apos;&gt; &lt;/a&gt;&lt;/h3&gt;

&lt;ul&gt;&lt;li&gt;Alliance for Nonprofit Management, Washington DC&lt;/li&gt;&lt;li&gt;AOL, New York&lt;/li&gt;&lt;li&gt;Bauhaus-University of Weimar, Germany&lt;/li&gt;&lt;li&gt;BauMax, Austria&lt;/li&gt;&lt;li&gt;Berliner Jugendserver Spinnenwerk, Germany&lt;/li&gt;&lt;li&gt;Brandenburg University of Applied Sciences, Germany&lt;/li&gt;&lt;li&gt;Canton of Berne, Switzerland&lt;/li&gt;&lt;li&gt;Casa Consult, Switzerland&lt;/li&gt;&lt;li&gt;Chris Zumbrunn Ventures, Switzerland&lt;/li&gt;&lt;li&gt;collettiva design, Austria&lt;/li&gt;&lt;li&gt;Dr. Sauer Group, Washington DC&lt;/li&gt;&lt;li&gt;Electricit&amp;eacute; Plainpalais, Switzerland&lt;/li&gt;&lt;li&gt;Green Party Berne, Switzerland&lt;/li&gt;&lt;li&gt;FHTW University for Applied Sciences Berlin, Germany&lt;/li&gt;&lt;li&gt;Forum for Direct Democracy, Switzerland&lt;/li&gt;&lt;li&gt;Harvard University, Center for Hellenic Studies, Washington DC &lt;/li&gt;&lt;li&gt;Hausverein Schweiz, Switzerland&lt;/li&gt;&lt;li&gt;Ideenb&amp;uuml;ro, Switzerland&lt;/li&gt;&lt;li&gt;IQ-plus Medien, Austria&lt;/li&gt;&lt;li&gt;K12, Virginia&lt;/li&gt;&lt;li&gt;Kleine Zeitung, Austria&lt;/li&gt;&lt;li&gt;Knallgrau New Media Solutions, Austria&lt;/li&gt;&lt;li&gt;Lakeland Catholic Schools, Alberta, Canada&lt;/li&gt;&lt;li&gt;Lineto, Switzerland&lt;/li&gt;&lt;li&gt;MANOVA NetBusiness Solutions GmbH, Austria&lt;/li&gt;&lt;li&gt;Microsoft, Austria&lt;/li&gt;&lt;li&gt;Munich Online, Germany&lt;/li&gt;&lt;li&gt;NAFSA Association of International Educators, Washington DC&lt;/li&gt;&lt;li&gt;National Gallery of Victoria, Australia&lt;/li&gt;&lt;li&gt;National Geographic, Iowa&lt;/li&gt;&lt;li&gt;Netural Communication, Austria&lt;/li&gt;&lt;li&gt;Nuclear Energy Institute, Washington DC&lt;/li&gt;&lt;li&gt;ORF, Austria&lt;/li&gt;&lt;li&gt;Parq, Austria&lt;/li&gt;&lt;li&gt;Rheinische Post Online, Germany&lt;/li&gt;&lt;li&gt;Ringier, Switzerland&lt;/li&gt;&lt;li&gt;Rundfunk Berlin-Brandenburg, Germany&lt;/li&gt;&lt;li&gt;Salzburger Nachrichten, Austria&lt;/li&gt;&lt;li&gt;Shapeshifters information management, Austria&lt;/li&gt;&lt;li&gt;Siteworx, Virginia&lt;/li&gt;&lt;li&gt;SOS Mitmensch, Austria&lt;/li&gt;&lt;li&gt;Sumaato, Ubilabs, Germany&lt;/li&gt;&lt;li&gt;Swiss Army, AFD, Switzerland&lt;/li&gt;&lt;li&gt;Swiss Red Cross, Switzerland&lt;/li&gt;&lt;li&gt;Swisscom, Switzerland&lt;/li&gt;&lt;li&gt;Swisspost, Switzerland&lt;/li&gt;&lt;li&gt;SysEleven, Germany&lt;/li&gt;&lt;li&gt;System One, Austria&lt;/li&gt;&lt;li&gt;Technical University of Vienna, Austria&lt;/li&gt;&lt;li&gt;Telecom Austria, Austria&lt;/li&gt;&lt;li&gt;Unilever, Austria&lt;/li&gt;&lt;li&gt;United Press International, Washington DC&lt;/li&gt;&lt;li&gt;University College of Falmouth, United Kingdom&lt;/li&gt;&lt;li&gt;University of Berne, Switzerland&lt;/li&gt;&lt;li&gt;University of Erlangen, Germany&lt;/li&gt;&lt;li&gt;University of Vienna, Austria&lt;/li&gt;&lt;li&gt;Verlagsgruppe NEWS, Austria&lt;/li&gt;&lt;li&gt;WAZ NewMedia, Germany&lt;/li&gt;&lt;li&gt;ZLB Bioplasma, Switzerland&lt;/li&gt;&lt;/ul&gt;

</description>
</item>
</channel>
</rss>
