This page explains about how to go about finding out how your own programs fit in with what already exists and how to integrate them.
Planning what you want to do
The first thing you need to do is ask yourself when and under what circumstances you want your Program to be run. Is it useful as an intermediate Program that should be called indirectly by other Rules and Programs? Should it be run automatically when a keyword is recognized, or should it be offered to the user as one possible Option to select?
Once you know when you want your Program to run, check what Elody currently does in this situation. Do related Rules and Programs already exist, or do you have to create something completely new? Be sure to also test some variations on your idea so you don't miss anything.
If something similar does already exist, use Developer Mode to look at what happens in detail. Read the description of existing Rules and Programs to find out how your Program would best fit in.
Most importantly, contact the authors of the existing Rules and Programs and ask for advice on the forum. If you aren't sure about something, maybe someone more experienced can help you. If you already know what to do, it still helps to get in contact with other people who you can cooperate with. Elody exists to connect people, so you don't have to do everything on your own.
You can start creating new Rules without having to worry that they will break the experience for other users.
Elody only uses Rules if their ratings are high enough. If you create a new Rule, its rating will start at 0 so it won't be used by other people. By default, Elody will always use Rules you created yourself as if they had the maximum rating. This is one of the settings.
Therefore, you can experiment with different Rules until everything works the way you want it to. Since your rules are new and have no ratings yet, this won't bother anyone else.
What to do if your Rules and Programs aren't working the way you want them to?
You can use Developer Mode for debugging.
If the control flow is different than expected, the Decision Process Messages should be your first point of reference: They explain why Elody chose which Rule or Option to run and have tooltips for further details. You can use the filters in Developer Mode to display only Decision Process Messages, which allows you to quickly get an overview of what happened.
You can also configure Developer Mode to turn objects invisible but make it still show objects connected to the object you have currently selected with your mouse. This helps you figure out the relations between objects. You can click on the first object you are interested in, then click on the next object using it, then on one of the ones using that one, and so on until you find what you are looking for. You can also repeatedly click on the 'created by' field (on the right side of the screen, among the details of the selected object) to trace back the route by which an object was created.
If all of this is not enough, consider adding some debugging Tags to your Rules. Simply create Tags with a special Symbol and use the Developer Mode filters to find those Tags. Make sure to create some new Symbols that start with 'debug_' for these Tags, to make it clear for anyone else that these Tags exist only for debugging purposes.
Publishing and getting exposure
Once you are done and you are satisfied with the Rules and Programs you created, all you need to do to make them work for everyone else is to get positive ratings for your rules. Once they are rated highly enough, Elody will automatically start using them.
To get positive feedback for your Rules, you can ask your friends or other developers on the forum to have a look at what you created. While this website is in its Beta phase and we don't have many developers, you can also feel free to contact us directly so that our admins can have a look at it and manually approve your Rules.
Of course, Elody won't use your Rules before they have a high enough rating, so other people won't be able to test them. To make it possible for other people to test your Rules, you can just create a Scenario Plan and explicitly set yourself, or the Rules you created, as trusted. You can then just copy the url of the Scenario Plan to let other people test it without any hassle.
Examples for Improvements
You should now know everything you need to contribute new features to Elody.
If you already have an idea for something you would like to do, go ahead and do it.
If not, take a look at these potential tasks for inspiration:
Upload a Program you already wrote and make a Demo for it.
If you are an active developer you probably have a Program you wrote some time ago that you always wanted people to use, but that never got popular. Go ahead and upload it with a simple Demo- Rule, like shown in the first example.
Elody offers to show a list of all implemented features when you start a new Scenario. You can add your own Programs to it using a rule like this: Recognize-task-hierarchy-datascience-offer-timeseries-prediction
You can upload any Program you want, but programs related to Machine Learning and Data Science are preferred.
This is because Elody will grow more quickly if it has a focus area, and Machine Learning and Data Science are a topic with lots of demand that is currently completely inaccessible to non-technical people.
Integrate a Program that was originally written for a single preconfigured Scenario Plan into a more complex task.
Any contributor can connect the Rules and Programs of any other contributor.
If you are implementing a complex task and see that someone else has a cool program, you can write Rules to call it.
If you have a cool program that you think would be helpful for an existing task, but you don't know how or don't want to to integrate it yourself, just contact the people responsible for the task on the forum and ask them if they want to integrate your program.
Maybe you would like some practice?
Here are some ways the Rules and Programs of the tutorial could be improved further. Try making one of these improvements as a challenge, and compare your results to those of other developers:
Implement a better prediction algorithm.
The one in the tutorial just uses linear regression, so it shouldn't be hard to improve on that.
Implement a specialized prediction algorithm.
Check the timeseries for special properties and suggest the use of specialized algorithms if they can be found.
For example: Does the timeseries give special treatment to weekends and holidays?
Don't forget: Use one Program to create Tags for these properties and one to run the prediction. That way other developers can build on your contributions more easily.
Implement a different kind of operation on a timeseries, like e.g. an outlier detection.
You could offer this task based on keywords entered by the user, or you could offer it to the user as an "You might also like..." message when a related task is completed, like the prediction.
Refactor some Rules to make them more readable.
The Rules Enrich-extract-required-timeseries-from-file, Enrich-extract-required-timeseries-from-excel-file and Do-beautify-options-to-select-input-timeseries all have a cleanup Option. If there are too many Rules like this, it might save some time to summarize these:
Just create a single Rule that deactivates all Options that are marked as an !offer of the requirement tag. Once such a Rule exists, all of these other Rules can stop using a cleanup-option of their own, which makes things more readable.
Implement a better NLP algorithm.
This one is really important because so many other things rely on it.
More than for other tasks, make sure to discuss things on the forum. If you think you have what it takes, give it a shot.
If you succeed, your NLP program could form the backbone of Elody's decision making
Find a better way to determine what the user wants than a simple keyword analysis.
User interactions are tricky because there are so many special cases. There are a lot of ways in which the user could interrupt or repeat things, and the Rules you write should not get confused by this.
Combine all the separate file parsing Programs from the tutorial into a single one.
Implement a single Program that shows the user an interactive HTML window where they can pick exactly which rows and columns they want to use for the prediction.
In fact, you could make a separate task_ out of this: anything-to-anything file format conversion.
A Data Scientist frequently has a file in an unknown format and figuring out how to parse it and clean up corrupted values is often more work than the actual analysis and prediction.
If you find a way to solve a task like this automatically, it could be used as a subtask by a lot of other Data Science tasks, and you would gain a lot fo exposure for your Programs that way.