- What is perspective?
- What is the goals of perspective?
- How to contribute
- Contribution guidelines pr. role
- Setting up your dev environment
- Design principles
- Architecture
Note: due to dependency on rethinkdb, there's currently no support for running on platforms other than linux/mac.
- Start with an issue. Does the feature/bug you seek exist?
- No? Create a new issue and start a discussion on what you want to implement
- Yes? Is someone working on it already? Contribute in the discussion and see if you can help out
- Look at existing enhancements and issues and contribute with sketches, designs, ideas
- Create issues on existing functionality and upload sketches, designs, ideas
- Analyse what kind of information different stakeholders need on a ongoing project
- Do they need the same information at all times? What's relevant at a given time in the project?
- What can we do to make perspective a suitable application for information sharing in a development project?
- Perspective strategy
- Suggest a new project in the issue list on GitHub
- Get the perspective members to create a repository
- Follow the guidelines below for "existing code"
- Fork the desired repositores you want to improve
- Do your magic
- Open a pull request when:
- The work is stable
- Test coverage is in place
- Install node.js
- Install bower with
npm install -g bower
- Install nodemon with
npm install -g nodemon
to make servers reload on change - Install rethinkdb Note: rethinkdb can only run on linux/mac hosts. On windows, run a virtual server and make sure to expose ports 8080, 28015 and 29015 from this.
- Clone all modules, as described below.
To ease the process of handling multiple repositories, we recommend using myrepos. Simply put mr on your PATH
and you are good to go:
mkdir perspective
curl -o .mrconfig https://raw.github.com/perspective/dev/master/.mrconfig.example
touch ~/.mrconfig
- (review the .mrconfig file)
echo `pwd`/.mrconfig >> ~/.mrtrust
To avoid a warning later.mr checkout
will git clone all modulesmr link
will invokenpm link
in correct order on each module.mr install
will invokenpm install
in correct order on each module.
By now you should have:
perspective
|── dev - development tools and documentation
|── perspective - the website
|── perspective-client - front-end web client connecting to different backend apps (jenkins, tasks)
├── perspective-core - shared core components between web client and backend apps
├── perspective-core-db - component for connecting to the perspective db, uses rethinkdb
├── perspective-core-rest - component for a simplified process of creating REST APIs
├── perspective-core-server - shared core components for every backend apps
├── perspective-core-web-socket - component for a simplified process of creating web-socket support
├── perspective-core-web-socket-helper - shared component between the perspective client and perspective-core-web-socket
├── perspective-jenkins - a jenkins backend app
├── perspective-tasks - a task manager backend app
└── startup-scripts - startup scripts for perspective on different os
Other useful mr
commands are:
mr update
to rungit pull
on all modulesmr status
to rungit status
on all modules- ... you get the point. See
mr help
for more info.
Verify that the settings in perspective-jenkins/dev.sh, perspective-tasks/dev.sh and perspective-client/dev.sh match your environment.
- Run
rethinkdb
cd perspective-jenkins && ./dev.sh
cd perspective-tasks && ./dev.sh
cd perspective-client
npm install
bower install
make.js
./dev.sh
- We strive to follow the principles of 12 factor apps
- Inter-application-communication are treated as attached resources
- Config is stored as environment variables. (see
dev.sh
in perspective-jenkins and perspective-tasks)
- We're inspired by Spotify:
- Application/component silos in backend, with expert teams pr. feature --> apps (perspective-jenkins, perspective-tasks)
- One front-end app pr. platform --> (perspective-client)
- As we're developing a tool for software development teams, we can afford to live on the cutting edge of technology. One of perspective's goals is to be hackable and a fun place to test new technology. Currently we are using:
- Front-end:
- Ractive.js for two-way binding, along with Object.observe (only supported in Chrome with experimental JavaScript features enabled)
- Page.js for simplistic routing
- Superagent for making http requests
- Websockets
- Back-end:
- Node.js as backend language
- RethinkDB for data storage
- Docker for deployment
- Front-end:
The web client is a standalone application that provides perspectives only front-end at the moment. It communicates with back-end applications such as perspective-tasks and perspective-jenkins over HTTP/REST and WebSockets. Back-end applications may rely on several components, such as perspective-core-db and perspective-core-rest.
As both the front-end and back-end is written in JavaScript, we are able to share some code as seen in perspective-core
MIT