- 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 nodemonto make servers reload on change - Install rethinkdb
- 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 perspectivecurl -o .mrconfig https://raw.github.com/perspective/dev/master/.mrconfig.exampletouch ~/.mrconfig- (review the .mrconfig file)
echo `pwd`/.mrconfig >> ~/.mrtrustTo avoid a warning later.mr checkout
will git clone all modulesmr link
will invokenpm linkin correct order on each module.mr installwill invokenpm installin 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
├── perspective-events - a event backend app
└── startup-scripts - startup scripts for perspective on different os
Other useful mr commands are:
mr updateto rungit pullon all modulesmr statusto rungit statuson all modules- ... you get the point. See
mr helpfor more info.
- Run
rethinkdb cd perspective-jenkins && ./dev.shcd perspective-tasks && ./dev.sh
cd perspective-clientnpm 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.shin 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