====== powerplant: GSOC 2018 Ideas List ====== **Prospective students welcome!** Below you will find a list of the ideas that developers and mentors would like you to work on for GSOC 2018. ===== Index ===== * [[powerplant:gsoc2018:ideaslist#administration_interface|Administration Interface]] * [[powerplant:gsoc2018:ideaslist#design_and_implement_weather_api|Design and Implement Weather Data API]] * [[powerplant:gsoc2018:ideaslist#integrate_parts_of_plants_for_a_future_pfaf_database_to_powerplant|Integrate the Plants For A Future database]] * [[powerplant:gsoc2018:ideaslist#enhance_the_crop_relationship_model|Enhance the crop relationship model]] * [[powerplant:gsoc2018:ideaslist#scheduler_frontend|Scheduler Front end]] * [[powerplant:gsoc2018:ideaslist#plant_processor|Plant Processor]] * [[powerplant:gsoc2018:ideaslist#client-server_communication_infrastructure|Client-server communication infrastructure]] * [[powerplant:gsoc2018:ideaslist#project_template|Project template]] ===== Administration Interface ===== You can find this [[https://work.ecohackerfarm.org/issues/1162|task #1162]] on our [[:project_management_system|PMS]] ==== Explanation ==== In general admins need to be able to easily modify the database. Also there should be a way for admins to easily add and edit crop and crop relationship data. Aim of this project is to create such administration interface for the web UI with editors for all database document types. ==== Required skills ==== * JavaScript (preferred ES6) * Node.js preferred experience with: * Express * Mongoose * React * Redux * MongoDB * mocha * supertest ==== Expected results ==== roles field in user schema are defined with at least to different roles "admin" and "user" * Access Control is implemented the way that "user"s can see crop and crop relationship data, but only "admins" can add/remove/edit these data * Should use already defined authentication methods for users Administration interface should be only available to "admin"s. * Administration Interface should include Views for editing: Crops, Crop Relationships, Users (name, emails and roles, depending on encryption: location, gardens, beds) The advanced view should have a generic UI component for editing a list of documents independent from type Every view should have a search feature for easy accessibility of all documents The code should be covered with sufficient unit, integration tests and documentation ==== Code challenge ==== * Write code by using mongoose to call the powerplant API to get all crops beginning with "ap" from powerplant.ecohackerfarm.org/api (or local instance) * create local cache in redux for API calls younger then 30 min * create a view in React that shows the data asked for and gives feedback if the the data came from cache (redux) or directly from the API ==== Mentor ==== [[powerplant:involved|Franz Gatzke]] ---- ===== Design and Implement Weather API ===== You can find this [[https://work.ecohackerfarm.org/issues/1120|task #1120]] on our [[:project_management_system|PMS]] ==== Explanation ==== [[https://en.wikipedia.org/wiki/Growing_degree-day|Measure of heat accumulation]] is a common heuristic for predicting plant growth rates. Prediction of the harvest date (or planting date that corresponds to a given harvest date) of a particular crop is possible when temperature data from previous years, or even other locations, is augmented with dates of the crop's growth stages. Weather forecasts can provide warnings of frost or rain. Aim of this project is to collect weather data from external web services and implement algorithms for calculating heat accumulation, predicting crop growth stages, and providing weather warnings. ==== Web services that provide weather data: ==== * [[https://developer.yahoo.com/weather/|Yahoo Weather API]] * [[http://openweathermap.org/api|OpenWeatherMap]] * [[https://darksky.net/dev/docs|Dark Sky API]] ==== Required skills ==== * JavaScript * Node.js * Express * Mongoose ==== Expected results ==== * Database structure extended to store daily weather data for each garden location * CLI administration commands for seeing and modifying daily weather data * Server periodically fetching weather data from at least two external web services * Internal function (+ unit tests) for calculating heat accumulations * HTTP API call (and CLI command) for predicting growth stages of a crop * HTTP API call (and CLI command) for weather warnings * Extra: UI component for showing graphically the planting date of a crop, current growth stage, and estimation of the harvest date * Extra: UI component for showing weather warnings ==== Code challenge ==== Implement database model, low-level HTTP API, and low-level CLI commands for weather data. ==== Mentor ==== [[powerplant:involved|Petteri Pitkänen]] ---- ===== Enhance the crop relationship model ===== You can find this [[https://work.ecohackerfarm.org/issues/1121|task #1121]] on our [[:project_management_system|PMS]] ==== Explanation ==== Many plants form symbiotic relationships with other plants and organisms. The mechanisms by which two plants interact with each other are varied. They include: * Plant attracts insects that are beneficial for another plant * Plant provides climbing support for another plant * Plants form mycorrhizal networks Aim of this project is to go through scientific publications about plant relationships (companion plant, symbiosis), categorize the different interaction mechanisms, and improve our crop relationship model based on the gathered data. References to scientific articles should also be stored in the database and linked to the corresponding crop relationship documents. ==== Required skills ==== * Knowledge and interest about plants and gardening * JavaScript * Node.js * Express * Mongoose * React * Redux ==== Expected results ==== * Database model for references of scientific articles. * Crop relationship data collected from 50 scientific articles, and the crop relationship model enhanced based on this data. * UI component for adding and editing crop relationship data and saving it to the server. This will be included to the Administration interface (#1162). * UI component for designing a garden bed, making use of the enhanced crop relationship model, especially the information about interaction mechanisms. If possible this should be integrated with existing components. ==== Code challenge ==== Add database model for references of scientific articles, linked with the crop relationship model. Make it possible to add references from the CLI. ==== Mentor ==== [[powerplant:involved|Petteri Pitkänen]] ---- ===== Integrate parts of Plants for a Future (PFAF) database to powerplant ===== You can find this [[https://work.ecohackerfarm.org/issues/1305|task #1305]] on our [[:project_management_system|PMS]] ==== Explanation ==== The [[http://pfaf.org/|Plants For A Future]] database is a permaculture-oriented database that contains information about over 7000 edible plants. Aim of this project is to integrate parts of PFAF database by identifying data that has a functional purpose in powerplant, and then implementing algorithms and UI components that use this data. //Examples of PFAF data:// [[https://en.wikipedia.org/wiki/Hardiness_zone|USDA hardiness zone]] is a classification of plants based on their capability of growing in a geographic location with specified average annual minimum temperature. Hardiness zone can be used to select plants that are capable of growing in a given geographic location. [[https://en.wikipedia.org/wiki/Nitrogen_fixation|Nitrogen fixation]] is the ability of a plant to fix atmospheric nitrogen to soil. By tracking the nitrogen fixers of a garden bed over years, it is possible to plan a crop rotation schedule where the accumulated nitrogen is used by nitrogen consumers during successive growing seasons. Plant habit refers to a coarse type or shape of a plant. Habit can be used to (help) select plants that maximize the habitual diversity of a garden. ==== Required skills ==== * Knowledge and interest about plants and gardening * JavaScript * Node.js * Express * Mongoose * React ==== Expected results ==== === "USDA hardiness zone" integrated to powerplant === * Crop database schema extended with a field for hardiness zone * Internal function (+ unit tests) for calculating the hardiness zone for a given location, utilizing geographic coordinates and temperature data * HTTP API call (and CLI command) for searching crops that match the hardiness zone of the user's location === "Nitrogen fixation" integrated to powerplant === * Database extended so that powerplant is able to track nitrogen fixers of a garden bed over time * CLI administration commands for showing and modifying low-level database documents * Internal function (+ unit tests) for calculating the amount of nitrogen in a garden bed at a given time, when the history of the bed is known * UI component and HTTP API calls (+ corresponding CLI commands) for planning a long-term schedule for a garden bed that utilizes crop rotation === "Plant habit" integrated to powerplant === * Crop database schema extended with a field for plant habits * Internal function (+ unit tests) for searching crops that increase the habitual diversity of the garden * HTTP API call (and CLI command) for searching crops that increase the habitual diversity of the garden, combined with the HTTP API call for searching crops based on hardiness zone ==== Code challenge ==== Identify another piece of data from PFAF database that is functional for powerplant, and plan, discuss and begin its implementation. ==== Mentors ==== [[powerplant:involved|Petteri Pitkänen,Franz Gatzke]] ---- ===== Plant Processor ===== You can find this [[https://work.ecohackerfarm.org/issues/1326|task #1326]] on our [[:project_management_system|PMS]] ==== Explanation ==== For planning the Crops in a beds we need a schedule that shows the period of time of a plant in a bed and the preparation work. The scheduler needs to show free space in a specific bed and time period to optimize the harvest per square meter. It should also take weather data into account and warn the user for example of frost. Additionally it should trigger task like expected harvest and expected care work of a bed/plants. For having a predictive method for growing stages, warnings, tasks the student has to write a module which can trigger these different types ==== Required skills ==== * JavaScript (preferred ES6) * Node.js preferred experience with: * Express * Mongoose * React * Redux * MongoDB * mocha * supertest ==== Expected results ==== * the plant processor should be a light weight component for each plant * the module should fetch the weather and crop data from our API and calculate events that are triggered * other modules should be able to listen to the events * user interactions like pre-/postponing task influence the behavoir * the code should be sufficiently covered with unit tests, and heavily covered with integration tests and documentation since it ==== Code challenge ==== ==== Mentor ==== [[powerplant:involved|Franz Gatzke]] ---- ===== Scheduler Front end ===== You can find this [[https://work.ecohackerfarm.org/issues/1322|task #1322]] on our [[:project_management_system|PMS]] ==== Explanation ==== For planning the Crops in a beds we need a schedule view that shows the period of time of a plant in a bed and the preparation work. The scheduler needs to show free space in a specific bed and time period to optimize the harvest per square meter. It should also take weather data into account and warn the user for example of frost. Additionally it should trigger task like expected harvest and expected care work of a bed/plants. For this we need to create a view that looks like [[https://marvelapp.com/94c4bh4/screen/30181818|this]] for a Garden and a view that looks like [[https://marvelapp.com/94c4bh4/screen/30204755|this]]for a bed. This View needs to be developed and implement different interactions. ==== Required Skills ==== For Development of the frontend architecture the student needs to have a good knowledge of: JS ES6 and a basic knowledge of: * React * Redux * React * Redux * mocha * supertest ==== Expected Results ==== After the student finished implementing the schedule, it has to have a working frontend with following interactions: * add new crops in empty time space * remove Crops from the schedule * add, remove and show logs at specific times (e.g. “Plant Died”, “Replanted”, "Harvest needed") * visualize different stages of plants * add/remove and show tasks to specific times * the code should be covered with sufficient unit, integration tests and documentation ==== Code challenge ==== * Write code by using mongoose to call the powerplant API to get all crops beginning with "ap" from powerplant.ecohackerfarm.org/api (or local instance) * create local cache in redux for API calls younger then 30 min * create a view in React that shows the data asked for and gives feedback if the the data came from cache (redux) or directly from the API ==== Mentor ==== [[powerplant:involved|Franz Gatzke]] ---- ===== Client-server communication infrastructure ===== You can find this [[https://work.ecohackerfarm.org/issues/1315|task #1315]] on our [[:project_management_system|PMS]] ==== Explanation ==== Users should be able to use most powerplant features offline. For this purpose the clients need to cache user data and do calculations on the client machine. Aim of this project is to define and implement the client-server communication infrastructure. This will be achieved by creating an object on the client side that communicates with the server, and separates data processing from the UI components. On the server side we have Processor, so let the name of this object be ClientProcessor. When data on the server changes the clients need to synchronize. On the other hand, when the user has done changes offline and later goes online, the changes need to be pushed to the server for permanent storage. Part of this project is to create the update mechanism between ClientProcessor and Processor by which the clients synchronize with the server. ==== Required skills ==== * JavaScript * Node.js * Express * Mongoose * React * Redux ==== Expected results ==== * Generic synchronization mechanism between clients and server. * Client refactored to use ClientProcessor for all data processing. * Crop and crop relationship data cached on the clients, and related calculations moved from the server to the client side. * CLI refactored to use ClientProcessor (or another class in the same hierarchy), with the goal that all client features are available also from the CLI. * Full integration test suite that uses ClientProcessor (or another class in the same hierarchy). ==== Code challenge ==== Refactor the system to cache crop and crop relationship data on the client, and do the related calculations on the client side instead of using HTTP requests to server. ==== Mentors ==== [[powerplant:involved|Petteri Pitkänen, Franz Gatzke]] ----- ===== Project template ===== Do you have other ideas you would like to propose? Complete the template below and contact the [[powerplant:involved|Organization Administrators]] ==== Project title ==== Please make it simple and self explanatory. ==== Explanation ==== Describe the idea as specifically as possible. ==== Required skills ==== Describe skills required here ==== Expected results ==== Add here expected results ==== Code challenge ==== This will be assigned to the student once the project has been discussed and approved by the mentors. This is generally a short task for an interested student to demonstrate the capabilities with the used tools, e.g. deploying the web server and changing behaviour of feature Z. ==== Mentor/s ==== A mentor or mentors will be assigned to the student once the project has been discussed and approved by the mentors.