beat issueshttps://gitlab.idiap.ch/groups/beat/-/issues2018-11-03T15:23:12Zhttps://gitlab.idiap.ch/beat/beat.core/-/issues/9Versionning support2018-11-03T15:23:12ZAndré AnjosVersionning supportAutomatic versionning suport should be implemented through out the platform. I'm putting this bug here, but surely this affects most packages in the project. I detail our existing workplan and some key behavioral aspects.
- Each objec...Automatic versionning suport should be implemented through out the platform. I'm putting this bug here, but surely this affects most packages in the project. I detail our existing workplan and some key behavioral aspects.
- Each object in the system (databases, toolchains, dataformats, algorithms, attached documentation strings, environments) should be version-able. Every time the user uploads or changes that object, the version number of that object is bumped.
- Each time a new version is entered, the user should be able to attach a version comment, which is independent from the object documentation itself.
- For the platform, the combination of the object name and the version determines the uniqueness of such object.
- The sharing, usage and tagging status of each unique object (name/version) should be tracked independently. This outdates the usage of "/private" paths which seems to be a bit confusing for some users.
- While visualizing the object, the user by defaults accesses the latest version to which it has access to. This should be made consistent through the platform.
- There is always an option to see/use an earlier version of an object, but that requires the user to specify it explicitly. For example, in the command-line utilities, a "--version=xxx" could be passed. On the web interface, the version of a certain object is chosen automatically as the latest, but a field allows the user to browse for an earlier version.Biometrics Center Kickoff Meeting and BEAT Reviewhttps://gitlab.idiap.ch/beat/beat.web/-/issues/8Deletion of objects by the user2015-08-19T07:50:38ZAndré AnjosDeletion of objects by the userUsers need to be able to delete (private) objects using the web interface. So far, this is only possible through the command-line. The following objects should be deletable:
- [x] experiments, if not certified (public or private, w/o ...Users need to be able to delete (private) objects using the web interface. So far, this is only possible through the command-line. The following objects should be deletable:
- [x] experiments, if not certified (public or private, w/o distinction)
- [x] toolchains, if not used on any experiment. If so, then the experiments must be deleted before the toolchain becomes deletable. I'm not sure what to do with the forking status of forked toolchains.
- [x] algorithms, if not used on any experiment. If so, follow the same rules as for toolchains.
- [x] dataformats, the same as for toolchains and algorithmsBTAS TutorialPhilip ABBETPhilip ABBEThttps://gitlab.idiap.ch/beat/beat.web/-/issues/7Integration with the new scheduler2016-06-24T10:33:06ZAndré AnjosIntegration with the new schedulerHere is a task list with topics that require attention for the integration:
- [X] The most important feature to be integrated is the ability to start/stop the experiment. This has been implemented in the scheduler.
- [X] When deletin...Here is a task list with topics that require attention for the integration:
- [X] The most important feature to be integrated is the ability to start/stop the experiment. This has been implemented in the scheduler.
- [X] When deleting an experiment, if the experiment is still running, then the experiment must be cancelled by the scheduler
- [X] The update of the dataflow drawing while the toolchain executes should respect the new abilities of the scheduler to report start/end of each block and for the experiment as they arrive. There is no need anymore for the platform to guess that certain blocks are being executed.
- [ ] There should be an administrative page on the beat web site that allows for:
- [X] Viewing the current scheduler state through the `/state` API call
- [X] Cancel all running experiments
- [X] Clean the cache content
- [ ] Change the scheduling policy
- [ ] Change the debugging level
- [X] Change the queue/environment/worker/slot configuration.
- [X] The web server should hold and allow for administrative change of queue/environment/worker/slot properties
- [x] For each block of the experiment, the user should be allowed to select:
- [x] Processing queue to use, following user rights
- [x] Processing environment to use
- [x] Number of slots to occupy
These information should be transmitted to the scheduler.
Hints on behavior and implementation details:
### Use Cases
1. Simple xp submission by an user with no particular rights
2. A xp submission with a user which has 1000 points of reputation
3. A xp submission with a user that has priority on a given queue
### New Tables on the Django DB:
We must first define an "environment". The environment has a name (e.g. "Python"), a version (e.g. "2.7.3"), a OS (e.g. "Debian Wheezy 7.2 (x86_64)"), a rich description string which defines all properties of that environment, including installed packages.
Each "queue" in the system is defined with a name (e.g. "3 hours/4G on Python"), a memory limit (e.g. "4096Mb"), a time limit (e.g. "3 hours"), an environment (e.g. "Python") and the number of slots the queue can occupy, at most, on every machine available in the system.)
Each user "library" consists of a bunch of files that are packaged together and put on a certain directory. Their organisation follows the same strategies as for algorithms. The sole exception is that each library is represented by a directory rather than a single file. The "library" is defined with a name (e.g. "lbp"), a version (e.g. "1.0"), an environment compatibility list and a list of other libraries this library depends on.
We must also define another table called "GroupQueueRights" in which we are going to track 4 aspects: queue - group - max slots - priority. For example: a user belonging to group "default" may be able to use 5 slots on queue "3 hours/4G on Python" with priority 0.
A user may belong to several groups. In this case, the platform should only consider the maximum slots/priority for each Queue when submitting the job to the scheduler.
E.g.: on GroupQueueRights table (queue name, group name, slots, priority):
```text
Row 1: Q1 - default - 2 - 0
Row 2: Q1 - special - 1 - 1
Row 3: Q1 - super - 3 - 1
User "A" belongs to group "default": Computed user queue rights are (Q1 - 2 - 0)
User "B" belongs to groups "default" and "super": Computed user queue rights are (Q1 - 3 - 1)
User "C" belongs to groups "default" and "special": Computed user queue rights are (Q1 - 2 - 1)
```
### Worker Perspective
The worker installed in each machine knows where each local environment with a given name and version is installed and how to execute user programs using that environment.
The program execution receives as parameters:
1. the environment
2. the parameters to call the environment executable with
> N.B.: The parameter list API for all environment executables defines our so-called Sandboxing
> API. It has to be respected for all environment implementations.
The worker is just told what to do - it does not check for rights or know any of that.
### User Perspective Operation
The user selects an overall execution queue for that experiment. It may also specify individual queues for individual blocks. The platform only allows the user to select queues in which the user has at least 1 slot for processing (other queues, even if they exist, are suppressed from the selection box).
After basic queue selection, every block on the toolchain executes in a single slot for the selected queues. If the algorithm does support a multi-slot operation, then the platform will allow the user to select how many slots (max'ed at the user rights) to use for a given block.
Users can submit as many jobs as they want. They will be treated according to queue rights and farm availability.
### Web Platform
In possession of all this information, the web platform will submit to the scheduler, the experiment for execution. Each request for execution contains 4 components:
* Toolchain
* Configuration, containing the queues, libraries and slots the user wants to deploy
* Username or ID
* User queue rights - computed from the max of all the groups the user belongs to
> NB: The reputation can be implemented as a multiplying factor. (ceilled at the total # of slots for a
> particular queue). For example, a user with Reputation = 200 has 2x more processing power than the established
> User queue rights.
### Scheduler
The scheduler will receive run-xp requests and breaks down the experiments in jobs (representing the blocks) with dependencies.
At each queue loop it must decide what to execute based on:
* Current slot availability for the different queues/users (user-queue occupation state needs to be stored)
* Job queueing time (how old is the job?)
* User queue rights/priority
> N.B.: If the Scheduler receives a second job for the same user, the queue rights for that user will be updated
> with the new values, in case they differ.
### Simplifications for first implementation
1. There is only 1 environment installed, based on Python/"execute_single_algorithm.py".
2. All queue priorities are set to 0 (i.e. the scheduler can ignore it)
3. #slots/memory goes in pairs until we understand all this a bit better
4. The scheduler implements only a FIFO (first queued/runnable is run) strategy based on the job submission age
5. Libraries must be written in pure Python
6. No reputation system is in place just yetOpen-source Releasehttps://gitlab.idiap.ch/beat/beat.web/-/issues/6Small fixes to the web interface2014-09-04T13:41:08ZAndré AnjosSmall fixes to the web interfaceThis is a collection of small fixes to the web interface, to make it more coherent. Some of these suggestions are temporary. Feel free to edit this bug and mark items as outdated (use a ~~strikethrough syntax~~), fixed (just put an `x` o...This is a collection of small fixes to the web interface, to make it more coherent. Some of these suggestions are temporary. Feel free to edit this bug and mark items as outdated (use a ~~strikethrough syntax~~), fixed (just put an `x` on its checkbox) or add new items.
- [X] ~~In the user algorithms page, it would be nice for the time being to gray out the "New" button so it is clear the user cannot create a new algorithm from the web just yet.~~ Display a warning about the online edition of algorithms
- [X] Same as above, but for data formats
- [X] If I log-in as user "anjos" and search for "eigenface", the results page show me private results from the user "tutorial". This must be fixed!
- [X] When I add one block and try to edit any information of the block (the name or the connectors), the information only persists if I type <enter>. If I click in any point outside the block, I loose what I typed. The expected behavior should be: if you type and loose focus, whatever you typed persists.
- [X] The save button on the toolchain editor should give the user some feedback that the toolchain has been saved. This relates directly to issue #3. When it is done, it should also be closed.
- [X] When you try to create a second connection in a block (toolchain editor), the channel is automatically null.
- [X] In the edition mode of the toolchain, the "fork it" is enabled and doesn't execute any action
- [X] It is not possible to change the status (private to public, private to public for some users) of a data format
- [X] In a failed experiment, the "Cancel it" button appears instead of a "Delete" button.RP Conference, Darmstadt, DEPhilip ABBETPhilip ABBEThttps://gitlab.idiap.ch/beat/beat.web/-/issues/5Some key web pages result in a 404 error2014-09-04T14:21:49ZAndré AnjosSome key web pages result in a 404 errorThis is a list of web pages that result in a 404 error presently.
- [X] If you search for a user and click on the resulting page at the "Users" box, the presented link to the user is missing the initial URL path. The end result is a 4...This is a list of web pages that result in a 404 error presently.
- [X] If you search for a user and click on the resulting page at the "Users" box, the presented link to the user is missing the initial URL path. The end result is a 404. The link says `/user/<username>` instead of `/platform/user/<username>`.
- [ ] If you search for a database and click on the resulting page at the "Database" box, the presented link to the database results in a 404. This page should be filled with the database description and characteristics extracted from the database itself. A starting point is this description: https://gitlab.idiap.ch/biometric/beat.databases/wikis/homeRP Conference, Darmstadt, DELaurent EL SHAFEYLaurent EL SHAFEYhttps://gitlab.idiap.ch/beat/beat.web/-/issues/4Changes to the TOS web site behavior2015-03-18T13:16:48ZAndré AnjosChanges to the TOS web site behaviorBased on discussions with our lawyers and legal partner (Els), I've updated the ToS documentation that is required for Users (i.e. people registering into the platform). Things to do:
1. [x] @Kanma: **URGENT**: Update the ToS using th...Based on discussions with our lawyers and legal partner (Els), I've updated the ToS documentation that is required for Users (i.e. people registering into the platform). Things to do:
1. [x] @Kanma: **URGENT**: Update the ToS using the new `tos.rst` in `docs`.
2. [x] In the ToS, a "Contact Form" is mentioned. This form should be used to notify Idiap of problems with the use or management of the BEAT platform. Currently, this contact form does not exist in our platform. It must be created (with a captcha to avoid spamming). Once that is established, one should replace the placeholder for the contact form in the ToS with the final address. Currently it is set to https://beat-eu.org/platform/contact
3. [x] In discussion with our lawyers, it became clear we need to establish a feature that identifies if a certain **Visitor** (this is != User) is a first time visitor or a recurrent visitor (possibly using cookies). If the visitor is a first time visitor, a banner should pop-up (discretely) and say: "The BEAT Platform, like other sites on the internet, uses cookies to customise your interaction with the platform itself. By visiting the IDIAP BEAT Platform you implicitly acknowledge our Legal Disclaimer." At this point, the words "Legal Disclaimer" should be clickable and point to the `legal_disclaimer.rst` file in the `docs` directory. The file should be displayed like the ToS, as a pop-up. *Users that dismiss the banner, get a cookie indicating they have accepted the disclaimer, with a given version number*.
4. [x] In the Legal Disclaimer, a link to the ToS should be made available. A place holder pointing to "https://beat-eu.org/platform/tos" is there, but should be updated if that changes. Action Point: We should create a URL that points to the ToS like stated.
5. [x] Both the "ToS" and our "Legal Disclaimer" have a version number. Users that access the platform **after** the ToS has been updated, should get a banner pointing to the new ToS. Visitors that access the platform **after** the "Legal Disclaimer" has been updated should also check it again. Note that **Users** don't need to go through the "Legal Disclaimer", just visitors. *This feature can be achieved by comparing the cookie established on the user browser with the current version of the ToS/Legal Disclaimer and showing/updating it*.
6. [x] While we can make sure that a person that does not accept the ToS cannot register, we cannot make sure that a Visitor that does not agree with the Legal Disclaimer will not continue visiting the website. By clicking on the "banner close" button or by popping up the "Legal Disclaimer", the user implicitly agrees with what is said in there. If they don't agree, then they should just leave the website. At this point, creating a mechanism to block the contents may be tricky (@Kanma: what do you think about this?)
After all these items have been implemented, I think we can finally close this issue.Tutorial for the FG2015 ConferenceAndré AnjosAndré Anjoshttps://gitlab.idiap.ch/beat/beat.web/-/issues/3Toolchain editor - Save modifications of the display of a toolchain2014-09-04T13:40:51ZAndré AnjosToolchain editor - Save modifications of the display of a toolchainThis has now been implemented.
The save button though, could be improved so that it shows when the system last saved the toolchain being edit. This would given the user some feedback.This has now been implemented.
The save button though, could be improved so that it shows when the system last saved the toolchain being edit. This would given the user some feedback.RP Conference, Darmstadt, DEPhilip ABBETPhilip ABBEThttps://gitlab.idiap.ch/beat/beat.web/-/issues/2Login box <TAB> behavior is a bit unintuitive2014-09-22T09:01:35ZAndré AnjosLogin box <TAB> behavior is a bit unintuitiveToday, while trying to login, I realised that if a push TAB just after typing the password and then ENTER, I'd reset my password.
Maybe it would be better we move the "Password reset" link away from the login so people don't push it b...Today, while trying to login, I realised that if a push TAB just after typing the password and then ENTER, I'd reset my password.
Maybe it would be better we move the "Password reset" link away from the login so people don't push it by mistake. By "away" I mean both graphically and keyboard-wise.Biometrics Center Kickoff Meeting and BEAT ReviewAndré AnjosAndré Anjoshttps://gitlab.idiap.ch/beat/beat.web/-/issues/1Logo modifications on front page2014-09-02T15:40:14ZAndré AnjosLogo modifications on front pageWe should change the FP7 logo on the BEAT platform website (http://ec.europa.eu/research/fp7/index_en.cfm?pg=logos). Apparently the logo has to be replaced by the EU logo. It would be better that, if the user hovers over the EU logo, the...We should change the FP7 logo on the BEAT platform website (http://ec.europa.eu/research/fp7/index_en.cfm?pg=logos). Apparently the logo has to be replaced by the EU logo. It would be better that, if the user hovers over the EU logo, the following text is displayed:
```text
This project has received funding from the European Union’s Seventh Framework Programme for research, technological development and demonstration under grant agreement no 284989.
```
Furthermore, the VS state logo should be added to the BEAT platform site:
![logo-valais](https://gitlab.idiap.ch/uploads/biometric/beat.web/7930e7339c/logo-valais.png)
(AA: Note this is a bit bigger than the others. Is there a smaller version? Otherwise it will not look nice.)https://gitlab.idiap.ch/beat/beat.core/-/issues/8Old scripts lingering at beat git2014-09-22T14:36:37ZAndré AnjosOld scripts lingering at beat gitI just realized that the following scripts are still available on `./bin`:
- generate_single_integers.py
- check_dataformat.py
- synchronize.py
- run_toolchain.py
- generate_integers_database.py
- check_toolchain.py
- display_da...I just realized that the following scripts are still available on `./bin`:
- generate_single_integers.py
- check_dataformat.py
- synchronize.py
- run_toolchain.py
- generate_integers_database.py
- check_toolchain.py
- display_data.py
If they are not useful anymore (i.e. have been integrated into the `beat` general command-line program), could you please remove them not to create any confusion?Biometrics Center Kickoff Meeting and BEAT ReviewAndré AnjosAndré Anjoshttps://gitlab.idiap.ch/beat/beat.core/-/issues/7Improvements to the beat command-line tool (migrated from github)2015-03-25T07:37:09ZAndré AnjosImprovements to the beat command-line tool (migrated from github)- [x] Pull a configuration
- [x] Push a configuration
- [x] Edition/Pull/Push of descriptions associated to different objects
- [x] Color configuration
- [x] Check of a toolchain `beat toolchain check ...`
- [x] Algorithm changes de...- [x] Pull a configuration
- [x] Push a configuration
- [x] Edition/Pull/Push of descriptions associated to different objects
- [x] Color configuration
- [x] Check of a toolchain `beat toolchain check ...`
- [x] Algorithm changes detection when running an experiment
- [x] Check user existence in commands like: `beat algorithms pull --user ADHDAHGDGAHSGHDAGHSDGH`. Presently, this is silently ignored.
- [x] While running locally, it would be nice that this package printed out more information about data input and output. It is currently very summarized.
Tutorial for the FG2015 ConferenceAndré AnjosAndré Anjoshttps://gitlab.idiap.ch/beat/beat.core/-/issues/6Support for enumerations (migrated from github)2014-09-22T14:36:49ZAndré AnjosSupport for enumerations (migrated from github)I have not seen how to declare an enumeration. Is this possible at all? We do have use cases where we could benefit from this. E.g., client data migth belong to the "train", "devel" or "test" datasets. These could be implemented as enume...I have not seen how to declare an enumeration. Is this possible at all? We do have use cases where we could benefit from this. E.g., client data migth belong to the "train", "devel" or "test" datasets. These could be implemented as enumerations. Currently, in the UBM-GMM, I implement this field as an unchecked string.
Biometrics Center Kickoff Meeting and BEAT ReviewPhilip ABBETPhilip ABBEThttps://gitlab.idiap.ch/beat/beat.core/-/issues/5Plotting library request (migrated from github)2014-09-05T12:58:54ZAndré AnjosPlotting library request (migrated from github)It would be useful if the platform provided a set of library functions to allow the creation of charts in easier terms, instead of everyone re-implementing theirs. Bob already provides APIs for plotting. It would make sense that BEAT pro...It would be useful if the platform provided a set of library functions to allow the creation of charts in easier terms, instead of everyone re-implementing theirs. Bob already provides APIs for plotting. It would make sense that BEAT provided a similar API for functionality in Bob:
A good starting point for this API is Bob's plotting API, [which is available here](http://www.idiap.ch/software/bob/docs/nightlies/last/bob/sphinx/html/measure/index.html).
A tricky plot to perform is a DET curve. I hope this is still possible using RGraph's API.https://gitlab.idiap.ch/beat/beat.core/-/issues/4Binary data format (migrated from github)2018-07-30T08:57:48ZAndré AnjosBinary data format (migrated from github)The current data format of choice uses the Python pickling system. This is highly subjective to the project module structure. I'm not sure it is a good idea to keep it hanging around for long.
Our group had a (very good) experience wi...The current data format of choice uses the Python pickling system. This is highly subjective to the project module structure. I'm not sure it is a good idea to keep it hanging around for long.
Our group had a (very good) experience with HDF5. This is a binary format that is quite flexible, fast to read, compact and universally compatible with all major software suites. I believe we should port the data format
system to use data instead of Python pickle.
To get started, I'd go for incorporating a dependence on the excellent python package `h5py`. It does already bring support for all Python/NumPy basic types and is extensible to different data types.
At this point, it would be also nice to introduce data versioning somewhere. Maybe on the "dataformat" descriptors (not sure).
> Note: Philip/François are not sure on HDF5. Before discarding it the possibility to use it, it would be interesting to
> understand why.
> Note: Another useful tool would be an automatic converter, that takes HDF5 files and transforms that into JSON
> descriptors of that format. One can convert HDF5 files to simple data descriptors and, from there, into BEAT's
> JSON format if necessary.
> Note: While debugging, it should be possible to inspect the cache. We currently have no tools to do so,
> but if we address this item with HDF5, then this should come for free.
Second BEAT ReviewLaurent EL SHAFEYLaurent EL SHAFEYhttps://gitlab.idiap.ch/beat/beat.core/-/issues/3Repeated connection is not detected on toolchain JSON (migrated from github)2015-03-06T08:04:27ZAndré AnjosRepeated connection is not detected on toolchain JSON (migrated from github)By mistake, I created a repeated connection from one block to another, on my list of connections. The platform has signaled the toolchain to be valid, but when running, the following error occurred:
```python
File "/remote/filer.gx...By mistake, I created a repeated connection from one block to another, on my list of connections. The platform has signaled the toolchain to be valid, but when running, the following error occurred:
```python
File "/remote/filer.gx/user.active/aanjos/work/projects/beat/beat/eggs/ipdb-0.7-py2.7.egg/ipdb/__main__.py", line 138, in main
pdb._runscript(mainpyfile)
File "/usr/lib/python2.7/pdb.py", line 1233, in _runscript
self.run(statement)
File "/usr/lib/python2.7/bdb.py", line 400, in run
exec cmd in globals, locals
File "<string>", line 1, in <module>
File "./bin/run_toolchain.py", line 3, in <module>
import sys
File "/remote/filer.gx/user.active/aanjos/work/projects/beat/beat/src/beat.core/beat/core/scripts/run_toolchain.py", line 186, in main
if isinstance(connection.output.block, Database):
AttributeError: 'NoneType' object has no attribute 'output'
Uncaught exception. Entering post mortem debugging
```
I guess that should be relatively easy to fix.Tutorial for the FG2015 ConferenceAndré AnjosAndré Anjoshttps://gitlab.idiap.ch/beat/beat.core/-/issues/2Warning for unconnected/multiply connected blocks (migrated from github)2015-03-06T08:05:11ZAndré AnjosWarning for unconnected/multiply connected blocks (migrated from github)Along the same lines as #39, it would be convenient that both `check_toolchain.py` and `run_toolchain.py` would check for unconnected blocks and issue a **warning** in case one is detected. It would be an immense helper for debugging new...Along the same lines as #39, it would be convenient that both `check_toolchain.py` and `run_toolchain.py` would check for unconnected blocks and issue a **warning** in case one is detected. It would be an immense helper for debugging new toolchains.Tutorial for the FG2015 ConferenceAndré AnjosAndré Anjoshttps://gitlab.idiap.ch/beat/beat.core/-/issues/1createDataFromJSON() is failing with dataformats which are arrays of dictiona...2014-08-28T11:34:02ZLaurent EL SHAFEYcreateDataFromJSON() is failing with dataformats which are arrays of dictionaries of dictionariesIt seems that the method createDataFromJSON() from the DataFormatSerializer does not work well when we have a dataformat, which is a list of dictionaries of dictionaries.
E.g.:
```
{
"objs": [2,
{
"id": "int...It seems that the method createDataFromJSON() from the DataFormatSerializer does not work well when we have a dataformat, which is a list of dictionaries of dictionaries.
E.g.:
```
{
"objs": [2,
{
"id": "int32",
"coordinates": {"x": "int32",
"y": "int32"
}
}
]
}
```
In this case, the method returns None and the associated error string is:
Data instance has no attribute 'coordinates'
I've pushed a 'failing' unit test in the repository (b8d4d1bc3 and e489e67f5)https://gitlab.idiap.ch/beat/beat.examples/-/issues/3Databases have no version number2017-10-04T21:58:17ZLaurent EL SHAFEYDatabases have no version numberThe current databases (JSON declaration) have no version number. This should be integrated.The current databases (JSON declaration) have no version number. This should be integrated.Biometrics Center Kickoff Meeting and BEAT Reviewhttps://gitlab.idiap.ch/beat/beat.examples/-/issues/2Automation of database deployment2017-10-04T21:58:17ZLaurent EL SHAFEYAutomation of database deploymentThere is currently no easy way to deploy a new BEAT database into a running platform.
Several issues require addressing:
1. The JSON file describing the database view and the root URL needs to be copied and edited manually.
2. The...There is currently no easy way to deploy a new BEAT database into a running platform.
Several issues require addressing:
1. The JSON file describing the database view and the root URL needs to be copied and edited manually.
2. There is currently no script give a new database JSON file to automatically instantiate the database into the Django database.RP Conference, Darmstadt, DEhttps://gitlab.idiap.ch/beat/beat.examples/-/issues/1Remove dependence of beat.env.* to this package2017-10-04T21:58:17ZLaurent EL SHAFEYRemove dependence of beat.env.* to this packageThe existing environments currently depend on this package. This implies that adding a new database requires redeploying all existing environments. To remove the dependence of this package from beat.env.* requires a process separation fr...The existing environments currently depend on this package. This implies that adding a new database requires redeploying all existing environments. To remove the dependence of this package from beat.env.* requires a process separation from the data sources linked to databases to the data sinks used by the experiments.Tutorial for the FG2015 ConferenceAndré AnjosAndré Anjos