[erlang-questions] A Generic API for controlling software components

Frank Mueller frank@REDACTED
Wed Nov 25 11:55:39 CET 2009

Hi Joe,

your idea sounds really good to me, even if I would like some changes.

>     Draft 1 - 25 Nov 2009
>     Rule1: All components are unpacked into the same top-level
>            directory (default $HOME/eComponent) and have the extension
>            .ec (Erlang component)
>            Example: Imagine I have installed mochiweb ejabberd and couchDB
> 	   then after installation I should see the following:
> 	   $pwd
>            /home/joe/eComponents
>            $ls
>            mochiweb.ec ejabberd.ec couchDB.ec

It's OK to have a default value for the directory, but I would like to have a defined variable
named $ECOMPONENT_HOME so that I can easily change it.

Rule 2 and 3 full ack.

>     Rule4: All components C must have a file called
>            $HOME/eComponents/C.ec/Preferences.pl
> 	   The extension .pl means the file contains a property
>            list. Here is an example:
>            {codePath, "/bin"}.
>            {expiryDate, {2009,12,24}}.
> 	   {icon, "/images/myIcon.png"}
> 	   {version,1}
>            {myKey1, ...}
>            The keys codePath, version, and expiryDate are obligatory
>            Why do we need code path? - so that Erlang can find
>            a module called C.erl
>            Expiry date has a "time to live for the component"
>            Version is used for local configuration data (see later)
>            Version numbers should start at one and be increased by one
>            for each new release.

Here I would like to have a consistent naming style. Until today most parts of Erlang don't use
camel case. I like it in Smalltalk, and I like the consistency inside Scheme, and until today I
like the consistency in Erlang. It's not like Python, where you can see which libs are from the
Smalltalk or Java side, from the .NET side or the C side. Awful. So it should be called
preferences.pl with code_path, expiry_date, and so on. Additionally I would like nested
preferences. My Tideland CEL celcfg module handles this well.

>     Rule5: Local configuration data
>            Local configuration data must not be stored under the
>            eComponents directory - (you can't remember we said the
>            component is in a read-only disk area - see rule2)
>            Local data for the component C must be stored
>            in the directory
>            $HOME/eLibrary/ComponentName/Vsn
> 	   Thus local preferences for ejabberd version 1
> 	   would be stored in the file
> 	   $HOME/eLibrary/ejabberd/1/Preferences.pl

Ack, but see comments above about env variable and naming.

Rule 6 and 7 again ack.

Thx for this idea, Joe. I would like to make my Tideland EAS conforming to such a standard.


** Frank Mueller / Oldenburg / Germany

More information about the erlang-questions mailing list