Git Product home page Git Product logo

forest's People

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

dhruvj22

forest's Issues

Intellectual property policy - Purdue University

Purdue University's Intellectual Property Policy for open-source software states: "The University permits software code to be contributed to open-source projects upon (1) the authorization of the funding sponsor and principal investigator (if any) for the coding project and (2) the consent of the University administrator(s), if any, who request or direct the coding project."

This project is not funded, thus, there is no need to sign a disclosure with the University or the funding sponsor. However, it will be useful to obtain written authorization from the PI, if any.

This case is similar to a case where a student would write some code for a course and choose to make it open source, and would not require any authorization from Purdue University.

Office of Technology Commercialization's staff, Purdue University can be contacted if we require any further clarification.

I am grateful to Dr. Joseph Kasper, Assistant Director of Business Development, Office of Technology Commercialization, Purdue University for sharing his experience and resources for this issue.

Gather helpful development resources

The wiki needs some solid resources for people wanting to learn more about specific languages/technologies including

  • git (general info)
    • basic usage
    • workflow (Gitflow/trunk-based)
    • recommend any UIs?
  • Language-specific resources (C++, CMAKE, Python, Matlab)
    • best practices
    • standards
    • learning resources
    • pybind11/mex functionality
  • Basic guide for how to get started with contributing

Define event function API

Define the basic inputs/outputs of how event event functions will be implemented, and how they will interact the the propagation method

Outline API structure for dynamical model integration

Sketch out an API structure for how we define dynamical models including (but not limited to):

  • Defining class hierarchy, interfaces, abstract classes
  • How equations of motion are defined / functional dependencies
  • How partials/hessians are defined / functional dependencies
  • How the the propagation method will interact with dynamical models

Set up infrastructure for code documentation

We need documentation that includes both a user guide and C++/Python code documentation. We need to decide

  • Decide where this will be hosted? (Github Pages? readthedocs?)
  • Set up web hook for documentation building
  • Documentation for C++ (Sphinx?)
  • Documentation for Python via pybind11 (Sphinx is supported)
  • Documentation for Matlab functionality (???)
  • Basic Organization
    • Getting started
    • Building from source
    • C++ Docs
    • Python Docs

Set up Wiki

Set up the wiki with some welcome information as well as:

  • Project Tools (wiki, issues, Project, team, discussions, etc)
  • Resources section
    • Getting started with Git
      • Basic usage
      • Workflow (Gitflow/trunk-based)
    • Getting started with CMake
    • Getting started with C++
    • Getting started with Python
    • Pybind11 Usage
    • Mex functionality
  • References
  • Build Instructions
  • Guide for contributing

Each "Getting started" section should include:

  • Basic usage
  • Best practices
  • Recommended developer environments/IDE
  • Learning resources

Detail coding standards (C++/CMAKE/Python/pybind11)

Need a comprehensive set of coding standards to allow for straight-forward committing. Once decided, these should all be listed in the wiki.

C++/CMAKE:

  • Set up the root-level clang format file to enable automatic formatting
  • Set up the root-level clang tidy for naming conventions
  • Identify set of naming conventions and other misc. coding conventions to follow
  • Document conventions
  • Set up CI checks to ensure pull requests are formatted and clang tidy passes

Python:

  • Decide on standards/conventions for pybind11 implementation/enforcement
  • Set up flake8 for PEP 8 checking

Matlab:

  • Define Matlab standards (will these be enforced)?

Select project management/collaboration tools

Checklist

  • Set Up Wiki
    • Create page
    • Link/describe the basic tools
    • Add code standards/resources
  • User guide
    • Select the form/platform/template of the user guide
    • Learn how code documentation can sync with guide
    • Create basic version
  • Create GitHub Project
  • Decide on discussion boards/announcements
  • Basic Issue tags/milestone organization

Some Notes so far:

Current plan is to use the Forest GitHub Project to keep track of issues, tasks, and to organize milestones

  • For now issues are public in the GitHub repo, but the project itself is private (new users must be added to both the organization and project)
  • Labels can help identify current tasks that anyone who wishes can contribute to - let's try to use help wanted and good first issue to tag those
  • Milestones identify task priorities for when we anticipate incorporating into the project
  • We can create several Views in the Project to keep track of tasks. Converting project items to issues is helpful for items that are associated with a particular milestone. These Views also support kanban boards, which may be helpful for tracking progress of individual items.
  • The "prototype built" status is intended to indicate that I have a working prototype for that component (obviously subject to changes/updates as we build the real version of this project)

Discussions unrelated to specific issues can occur within the GitHub discussions page on the forest repository

The wiki will be used to keep track of helpful resources for developers (not users!)

  • For example: resources for learning C++, coding conventions, git workflow etc
  • The wiki should be kept separate from the user-facing documentation
  • need to clarify what goes in the wiki, and what goes in the user guide (see #7 )

Development meta discussions/"announcements" will occur in forest-developers team page.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.