powerplant:gsoc2018:ideaslist

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
powerplant:gsoc2018:ideaslist [2018/01/17 23:57] – [Mentors] aimeejuliapowerplant:gsoc2018:ideaslist [2018/01/28 12:45] (current) – [Explanation] aimeejulia
Line 10: Line 10:
         * [[powerplant:gsoc2018:ideaslist#design_and_implement_weather_api|Design and Implement Weather Data API]]            * [[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#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#enhance_the_crop_relationship_model|Enhance the crop relationship model]]        
-        * [[powerplant:gsoc2018:ideaslist#ux_design_analyse_ux_improve_ux|UX Design/ Analyse UX / Improve UX]]     +        * [[powerplant:gsoc2018:ideaslist#scheduler_frontend|Scheduler Front end]]  
-        * [[powerplant:gsoc2018:ideaslist#schedule|Schedule]] +        * [[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]]          * [[powerplant:gsoc2018:ideaslist#project_template|Project template]] 
  
- 
-  
  
 ===== Administration Interface ===== ===== Administration Interface =====
Line 30: Line 29:
 ==== Required skills ==== ==== Required skills ====
  
-  *     JavaScript +  * JavaScript (preferred ES6) 
-  *     Node.js +  * Node.js
-  *     Express +
-  *     Mongoose +
-  *     React +
-  *     Redux+
  
 +preferred experience with: 
 +
 +  * Express
 +  * Mongoose
 +  * React
 +  * Redux
 +  * MongoDB
 +  * mocha
 +  * supertest
 +  
 + 
 ==== Expected results ==== ==== Expected results ====
  
-=== Boolean "admin" field added to the User database document. ===+roles field in user schema are defined with at least to different roles "admin" and "user"
  
-  * Access control implemented so that everybody can see crop and crop relationship data, but only admins can add/remove/edit it. +  * Access Control is implemented the way that "user"can see crop and crop relationship data, but only "adminscan add/remove/edit these data
-  * Administration interface should be only available to admins.+
  
-=== Editors for database document types: users, cropscrop relationships ===+  * 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: locationgardensbeds)
  
-  * Generic UI component for editing a list of documents +The advanced view should have a generic UI component for editing a list of documents independent from type 
-  * Easily navigable with search features+ 
 +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 ==== ==== Code challenge ====
  
-Add "adminfield to the User database document, and implement access control for crop and crop relationship data. Test it with the CLI.+ 
 +  * Write code by using mongoose to call the powerplant API to get all crops beginning with "apfrom 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 ==== ==== Mentor ====
Line 212: Line 227:
  
  
-===== UX Design/ Analyse UX / Improve UX =====+===== Plant Processor =====
    
-You can find this [[https://work.ecohackerfarm.org/issues/1321|task #1321]] on our [[:project_management_system|PMS]]+You can find this [[https://work.ecohackerfarm.org/issues/1326|task #1326]] on our [[:project_management_system|PMS]]
  
 ==== Explanation ==== ==== 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 ==== ==== Required skills ====
  
 +  * JavaScript (preferred ES6)
 +  * Node.js
 +
 +preferred experience with:
 +  * Express
 +  * Mongoose
 +  * React
 +  * Redux
 +  * MongoDB
 +  * mocha
 +  * supertest
  
 ==== Expected results ==== ==== 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
  
  
Line 230: Line 266:
 ==== Mentor ==== ==== Mentor ====
  
-[[powerplant:involved:franz|Franz Gatzke]]+[[powerplant:involved|Franz Gatzke]]
  
  
 ---- ----
  
-===== Schedule =====+===== Scheduler Front end =====
  
 You can find this [[https://work.ecohackerfarm.org/issues/1322|task #1322]] on our [[:project_management_system|PMS]] You can find this [[https://work.ecohackerfarm.org/issues/1322|task #1322]] on our [[:project_management_system|PMS]]
Line 241: Line 277:
 ==== Explanation ==== ==== Explanation ====
  
-For planning the Crops in a bed 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 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 ==== ==== Required Skills ====
Line 249: Line 287:
 ES6  ES6 
  
-and a basic knowledge of:  +and a basic knowledge of:   
-  * mongodb +
-  * nodejs +
-  * mongoid+
   * React   * React
   * Redux   * Redux
-  * React-Redux+  * React 
 +  * Redux 
 +  * mocha 
 +  * supertest
  
 ==== Expected Results ==== ==== Expected Results ====
Line 261: Line 299:
 After the student finished implementing the schedule, it has to have a working frontend with following interactions: After the student finished implementing the schedule, it has to have a working frontend with following interactions:
  
-  * Add new crops in empty time space in the bed +  * add new crops in empty time space 
-  * Adding Logs e.g. “Plant Died”, “Replanted” +  * remove Crops from the schedule 
-  * React to weather data input with warnings or defined tasks +  * add, remove and show logs at specific times (e.g. “Plant Died”, “Replanted”, "Harvest needed") 
-  * Show planted crops as time period and expected growing stages+  * 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
  
-Also we expect to have an implemented architecture for the frontend dataflow that collects the data from+==== Code challenge ====
  
-  * the backend 
-  * Weather API 
  
-and calculates actions e.g. “Needs to be replanted”, “Needs to be trimmed”, “Need water”. Also the results have to be synchronization with the database in the backend to a defined API. +  * 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 
-==== Code challenge ====+  * 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
  
  
Line 283: Line 321:
  
 ---- ----
 +
 +===== 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 ===== ===== Project template =====
  • powerplant/gsoc2018/ideaslist.1516229865.txt.gz
  • Last modified: 2018/01/17 23:57
  • by aimeejulia