Giter Club home page Giter Club logo

arnold's Introduction

ARNOLD

A Recurring Neat Occasion Likelihood Decider

ARNOLD is an application for scheduling recurring meetings. The inspiration came from a group of friends that used to meet every week, but with the progress of personal and professional lives found it hard to keep having these meetings.

Obviously, the friends also used to enjoy the wonderful action movies of the 80's starring Arnold Schwarzenegger, leading to the naming of this magnificent piece of sofware.

Project overview

At this moment, not much of the application has actually been designed or even defined. Have a look at the open issues tagged with design to see what the latest ideas are and see the features/ folder for what has been specified so far.

Whatever the requirements turn out to be, this project is meant to be a bit of a sandbox for development. If someone would like to master a new programming language or approach, why not use it to write another ARNOLD-implementation? As a consequence, there might be several different versions of the program in the future. Making sure all past and future implementations will be compatible with each other should therefore be part of the design criteria.

Contributions

You are welcome to leave any ideas, suggestions, complaints or bug reports you might have. Just open an issue, and we'll get the discussion going. Of course, adding a pull request with your feature or fix will greatly enhance the chance of it ever getting integrated.

arnold's People

Contributors

duncanvr avatar

Watchers

 avatar  avatar

arnold's Issues

Major architecture

Seeing that this will be a multi-user application, I'd opt for a client-server architecture. This has the added benefit that we can write/replace both sides separately and play around with different approaches.

A simple RESTful service using JSON messages should do the trick for the server side. A client implementation could be done as a website or console application, or perhaps even a mobile app if someone is feeling generous.

Given the premise from the readme, that backwards and forwards compatibility should be part of the design criteria, I'd suggest versioning the APIs from the start. I'm not entirely sure how to best incorporate that with the statelessness of the REST principles though; any thoughts?

Basic functionality

Let's start thinking about what ARNOLD should actually do. Below is my vision, but feel free to comment or question any assumptions I made.

The problem ARNOLD is trying to solve is to make regular meetings happen more regularly. The reason this doesn't happen right now is that with reduced availability of every member, these meetings actually started requiring planning. A mundane task that is best left to computers.

For ARNOLD to calculate the optimal meeting dates, it requires some input:

  • the availability of each member;
  • the minimum number of members that should be available to hold a meeting.

Because some days are more preferable than others (e.g. weekends are more suitable than week days), I suppose the availability should not be a simple boolean, but should be able to represent preference.

The availability should obviously be provided by the users through one of the clients.

Then at a set interval ARNOLD calculates the next date for a meeting and asks each member to confirm the date. If everyone accepts the date, then everything is OK and beer, stories and Arnold movies will be enjoyed. If someone rejects the date, ARNOLD calculates the next best date. If ARNOLD is incapable of calculating a date because not all criteria are met, a failure notification will be sent to each member and the meeting will be postponed to the next period.

Any suggestions, additions, etc.?

POWEERRR!!

Seeing that I'm the only one with +/- 16 hours a day to program, I will take on me the responsibility to create the first implementation.

To stay true to the original intent of the application, I will build it using Clojure for the backend-end, Datomic as database and ClojureScript as front-end. This will ensure that the project will be completely over-engineered and never to be completed.

I leave all design-documents, documentation and architectural decisions to be written by people with actual CS degrees, and to be completely ignored by me.

Also I recommend changing the application name to the:
Clojure Language Amazing Recurrent Known Scheduled Occasion Notifier, or CLARKSON for short.

Love,
Dzjon

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.