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

Joe Armstrong <>
Wed Nov 25 12:54:16 CET 2009


On Wed, Nov 25, 2009 at 11:55 AM, Frank Mueller <> wrote:
> 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.

Yes

>
> 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.

I use names_like_this for function and module names but namesLikeThis
for atoms in code


>>     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.

Great - I'm going to write a generic manager to support this. But I'd
like some discussion
in the list first.

>
> mue
>
> --
> **
> ** Frank Mueller / Oldenburg / Germany
> **
>
>
>
> ________________________________________________________________
> erlang-questions mailing list. See http://www.erlang.org/faq.html
> erlang-questions (at) erlang.org
>
>


More information about the erlang-questions mailing list