Coder Social home page Coder Social logo

fish-and-plants's Introduction

Hi!

My name is Andrea (user: WinterWind33). I'm a professional software developer.

I'm currently working as a full time C++ developer at Zuru Tech.

fish-and-plants's People

Contributors

winterwind33 avatar

Stargazers

 avatar

Watchers

 avatar  avatar

fish-and-plants's Issues

Setup the basic DevOps infrastructure

Description

The first thing we need to have is a good CI/CD in order to build and test our software, prevent and catch bugs on a daily basis. This implies that the first things that need to be set up are:

  1. A build system, like CMake;
  2. The test application with a good test framework so the software can be tested after it's built during the CI/CD workflow;
  3. The basic entry point for the production application;
  4. (Optional) Possibly an automatic software versioning infrastructure with a well documented rule that describes how the software increases when a new branch is merged into the main one;

[UX.0/B.1] Add input abstraction to the application class

Description

Because the user will send input to the software from different kind of channels, we need our application class to have an injectable input stream where it can read requests from the user/external units.

This will improve testability and it'll follow the DI principle.

Refactor GreenhouseControllerApplication

Description

In order to meet the basic UX MVP, the greenhouse controller application calls was approximated and technical debt was added.

With these refactor we want to remove duplicated code, meet SRP, DIP and improve the current existing tests.

To Dos

  • Centralize UI strings inside a single file. Right now every class that prints the strings of the UI make up their own definition. There should be a file that contains all of this constexpr values;
  • Move option parsers inside the commands and refactor the commands API;
  • Centralize help command output and commands in general if shared between user launch options and execution commands;

[UX.0/B.3] Add or integrate a module that serves as command interpreter

Description

The user needs to interact with the software. The initial idea is that the user will type some command and the application will execute its logic after that.

In order to parse and process the user commands, we need a module that works as an interpreter for the commands.

To Do

  • Add command interpreter module;
  • Add wrapper module for the interpreter;

[CI/CD] Add RPI runner to build and tests

Description

Some of the software included inside this repo needs to be run inside a Raspberry PI 3B+ (e.g. RPI_GC) while others are specific for desktop environments.

For those application that need to be run inside the RPI we want that our build and tests workflow has a RPI runner.

[1.0.0-RC0] Add automatic flush to the logging system

Description

Currently, the logger doesn't automatically flush when a new entry is given but this could cause loss of information when the application crashes.

With this issue, we need to add a way to automatically flush the logging system every time a new entry is added.

[A.3] Add error handling framework

Description

As we wanted to wrap libraries so we can compile the software in every platform, we need an efficient error handling system that can wrap errors that comes from these libraries.

These errors need to be platform-independent and they must be included in the basic framework.

[UX.0] Analyze and implement a termination system

Description

As the greenhouse is a software that runs on a physical hardware, it should be created and designed a termination system, i.e. a set of logics that are capable to terminate the software execution whenever a fatal error is encountered during the normal software flow.

[UX.0/B.5] Add help and version commands support

Description

After the command interpreter is connected to the main flow, the user must be able to:

  • Type "help" or "--help" and receive a page where are displayed all the commands with their description, along with some software information;
  • Type "version" or "--version" and receive a page where it's displayed the current software version;

These two commands must be accepted even when the application is not executed but are passed as arguments to the application launch command, i.e.:

$ rpi_gc --version
$ rpi_gc --help

[UX.0/A.1] Add class that represents the application

Description

We need to add a class that represents the application and that is instanced inside the RPI_GC entry point. This application class will be responsible to handle the application main flow and it will handle user/external requests.

The application class must have an injectable output dependency, i.e. the output produced by the application class and its dependencies mustn't know details about the output streams used, they must be injected from the outside.

This will:

  • Improve the software testability;
  • Follow the DI principle.

[FTS.0/B.3] Add support to feature toggles for enable/disable events

Description

During the application execution, if a request to enable/disable a feature toggle is made to the software then the application must be able to trigger their respective events so that the application can turn on/turn off the requested features.

We need a set of classes/entities inside the feature toggle framework in order to achieve this.

[FTS.0/A.2] Add commands for enabling/disabling feature toggles

Description

The user must be able to turn on/turn off feature toggles during the application execution and during the launch command.

  • When a feature toggle is enabled, the execution flow must start the feature flow;
  • When a feature toggle is disabled, the execution flow must stop the feature flow using a soft teardown, i.e. the resources must be released and the flow must wait the completion of the teardown.

[A.1] Setup third party libraries

Description

In order to start working with a good framework, we need to setup the project dependencies. This means that we need to add third-party libraries that can be used as the starting point for the software development process.

ToDos

  • Make sure that third-party libraries can be compiled only on those platforms where they are intended to be compiled on;
  • Add CMake infrastructures

[BUG] When the user starts the automatic watering system and it stops, the system doesn't go to the stopped state

Description

When the user starts the automatic watering system, the watering system doesn't transit to the stopped state after execution. This can cause the application to crash.

Steps

  1. Starts rpi_gc;
  2. type auto-watering --start;
  3. Wait the system to go up and finish;
  4. Exit the application through the exit command;
  5. The application doesn't notify the user that the system is not running;

Expected result: The system should warn the user that the system is not running when exiting the application and after the watering system has finished its job.

Build references:

  • Version: 0.0.15
  • Build type: Release, Debug

[CI/CD] Improve compilation speed

Description

Right now the repository depends on third-party repos and they are added as submodules. The problem arises when, in the workflows, builds are triggered, as many of these repos are very huge and the compilation is slowed down.

We need to find a solution, like pre-compiled modules, in order to speed up the workflows execution.

[CI/CD] Ease aarch64 compilation workflow on ready-for-review PR

Description

Currently, we have a workflow that is executed when a PR is marked as "Ready for review" where it builds and run tests for the rpi_gc target.

This workflow is particularly heavy, and it takes ~50 minutes to complete. This is not acceptable, as this time increases every time a new feature is added to the software.

The proposal is to add a new workflow that only builds the "rpi_gc" target when the PR is ready, but it runs on a ubuntu-latest workflow where it installs the gcc compiler for aarch64 before compiling the application.

[FTS.0/B.2] Add feature toggle interface

Description

Adds an interface that represents a feature toggle. The interface must provide methods for enabling, disabling and reading the state of the feature toggle at run-time.

Add flush functionality to the logging system

Description

In order to have a better comprehension of what is going on in the greenhouse, the logger should flush the information periodically so the user can see what is happening.

As for now, the flush is done at the end of the process, which may not occur in real life.

[A.2] Add wrapper components for third-party production libraries

Description

In order to create a software that is completely independent from the underlying platform, we need to wrap third party libraries into useful classes and frameworks that can be always compiled.

When a library cannot be compiled on a certain platform, the framework must act as a double. For a first iteration, the framework can have an empty implementation when this happens.

[UX.0/B.2] Add simple input loop to the application

Description

Add a simple input loop logic that will prompt the user to type some command and press enter. The main application thread will wait the user to type something before proceeding with the loop.

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.