Giter Club home page Giter Club logo

paperwork's Introduction

Paperwork

This project is dead: https://マリウス.com/project-updates-q1-2022/?github#paperwork

Follow @mrusme for future updates.

Paperwork is an open-source, self-hosted alternative to services like Evernote®, Microsoft OneNote® or Google Keep®

<iframe src="https://player.vimeo.com/video/401737579" width="640" height="480" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>

Mission

We at Paperwork believe that your private data should be yours and no other person or corporation should be able to access or even benefit from it. Hence it is our goal to build software that enables everyone to store and manage their documents in a cloud that's theirs alone – whether it's a computer scientist working with confidential data, a critical journalist, a freedom-of-speech activist or just your grandparents. Our goal is to be your privacy focused, open-source alternative to Evernote®, Microsoft OneNote® and Google Keep® for capturing ideas and managing documents.

Current State

Paperwork currently is under development. In order to get Paperwork in its current state running, you have to have an understanding for how Docker and DNS works and know the basic concepts of HTTP proxying. Also, experience with Traefik and Minio might come in handy.

If you don't have that, then the current state of Paperwork probably isn't for you. To make it clear: This software is not usable at this moment. It's being worked on to be made usable in the near future. In its current state, Paperwork v2 is targeted to developers that would like to get their hands dirty and contribute to the project.

Live Demo

A live demo of the current Paperwork status is available at:

https://www.demo.paperwork.cloud

This instance won't persist data on the server side, but it does store it inside your browser session. The instance is being destroyed every night at 3am UTC. Therefor all accounts are only valid for maximum one day. Please do not use this instance to store actual data/sensitive information!

If you try the live demo on a regular basis please make sure to clear your local browser cache.

This demo instance is sponsored by twostairs.

Quickstart

This repository is structuring and unifying all required components for Paperwork. It its purpose is to provide an example of how you could host Paperwork yourself.

$ git clone [email protected]:paperwork/paperwork.git

Docker Stack

In order to easily get Paperwork running as a Docker stack, utilising whichever orchestrator you'd like, this repository comes with a handy Makefile. Let's have a look at it:

$ make help

Configuration

Before deploying the Docker stack, you need to configure the environment properly. You can use the existing .env.example files as a template for that:

$ cd env/
$ ls -1 | while read ef; do echo $ef | sed 's/\.example$//g' | xargs -I{} cp {}.example {}; done

With these files, the Docker stack is configured to use www.paperwork.local (for the web UI) and api.paperwork.local (for the API services) by default. Hence you will need to add these to the 127.0.0.1 entry in your /etc/hosts file:

127.0.0.1   localhost paperwork.local api.paperwork.local www.paperwork.local

If you'd want to use a different domain and different hostnames for web and API, make sure to change the values inside env/env.env and env/web.env. For using this stack in a live deployment, you might also want to change passwords, JWT secrets and Erlang cookies across the .env files.

Deployment

Launching the Paperwork can be done by make-ing the deploy` target:

$ make deploy

The Makefile then takes care of initialising Swarm, in case you haven't done that already, creating the encrypted network (papernet or, if you use it from outside the stack, paperwork_papernet) and deploying the Paperwork stack on top of it.

In order to stop/remove the whole stack, simply use the undeploy target:

$ make undeploy

Note: This won't make your Docker host leave Swarm again, in case it wasn't running in Swarm mode before deploying! If you'd like to turn off Swarm, you have to do so manually.

Orchestrator

If you'd like to use a different orchestrator for stack deployment, you can do so by setting the ORCHESTRATOR variable on deploy:

$ make deploy ORCHESTRATOR=kubernetes

For more info, check the official Docker documentation for Mac and Windows.

Usage

As soon as you've finished the setup, you should be able to access your Paperwork deployment through this URL and you should be greeted with the login/registration:

Welcome to Paperwork

In order to use Paperwork, you will need to register a new account.

Development

In case you want to actively start developing on Paperwork, feel free to check out this branch and get involved with what's there already to get an idea of where Paperwork is heading. Also head to the current issues to see what needs to be done and suggest what could be done.

As for now, all tasks/issues are being collected inside this repository, just to keep it simple. On a long term, tasks/issues will be transferred into the related service's repository, in order to be able to reference them through git commits.

Make sure to join the official chatroom as well.

Software Architecture Overview

Paperwork Architecture

The Paperwork project consists of a handful of custom-built API services, which take care of everything related to their specific domain: Configurations, users, notes & attachments. Underneath those, there are various infrastructure services which are either implemented by the Paperwork project (service-gatekeeper) or simply awesome third-party open-source projects that's being made use of (e.g. Minio and Traefik).

The API services provide the core logic that processes domain specific data and persists it on the service's own database. Each API service has its own database that no other services accesses directly. Instead, services communicate with each other through internal HTTP endpoints. The gatekeeper service abstracts the authorisation layer from each individual service by checking and decoding the JWT bearer, so that every service that runs behind service-gatekeeper can be sure that access was validated and session information is forwarded and accessible via HTTP headers. JWT crafting is currently done in service-users. Hence, service-gatekeeper and service-users need to share the same JWT secret. Implementation in this area is kept simple for now but will change with the introduction of OAuth 2.

While the API services are not exchangeable, infrastructure services usually are. For example Traefik could be replaced with NGINX, Minio with a real Amazon S3 storage and even gatekeeper could more or less easily be replaced with Kong or a similar API gateway in future. API services on the other hand are tightly integrated with the business logic and their own databases. Also, because they exchange information with each other through internal endpoints, they depend on each other and (partially) on their peer's data structures. For example the notes service performs an internal request towards the users service when a note is being requested, in order to include user information (first name, last name, etc) for every access definition within that note. This aggregation of data is not necessary form a back-end point of view and is only done in order to make things more comfortable for the UI layer. While, from a separation-of-concerns-perspective this might not be an ideal setup, it reduces complexity for now and allows the project to iterate quite quickly.

On top of the infrastructure and API services there is the UI layer that was just mentioned, which currently consists of the Paperwork Web UI. The web UI is a PWA built on Angular that talks to the API services through the gatekeeper service. It's aimed to provide 100% offline use capabilities, so that it can be worked with in scenarios in which there's no connectivity to the API.

Info: 99% of development happens inside the individual service repositories! This repository only contains the one-click-deployment and the local development environment helper!

Repositories

Here are the main repositories of Paperwork:

  • paperwork: This is the repository you're currently looking at, containing the one-click-deployment and high-level documentation.
  • paperwork.ex: This is the Elixir SDK for building Paperwork services. Every Elixir-based service includes this as a dependency.
  • service-gatekeeper: This is the gatekeeper service that reverse-proxies requests to individual services and takes care of JWT validation/decoding. This service was written in Rust.
  • service-configs: This is the configurations service built in Elixir. It stores configurations and provides internal endpoints for other services to access them.
  • service-users: This is the users service built in Elixir. It stores accounts and profile information and provides internal endpoints for other services as well as external endpoints for user registration, login and profile management.
  • service-notes: This is the notes service built in Elixir. It stores all users' notes and provides external CRUD endpoints.
  • service-storages: This is the storages service built in Elixir. It stores all users' attachments and provides external CRUD endpoints.
  • service-journals: This is the journals service built in Elixir. It stores events that are related to database changes and provides external CRUD endpoints.
  • web: This is the Angular-based web front-end for Paperwork.

Local development environment

This repository not only features a one-click Docker Stack deployment, but also a local development environment which should work on any Linux/Unix platform.

Using the local development environment

In order to launch the local development environment, simply use the same make command you use for running local development instances of Paperwork service: make local-run-develop

$ cd paperwork/
$ make local-run-develop

The local development environment will start up with a short info on what's needed in order for it to function correctly. Please read the instructions provided there and follow them carefully. You will need to have some dependencies (e.g. Docker, Caddy) installed in order for the local development environment to function.

Also make sure to have the following TCP ports free on your system while using the local development environment:

Optionally, if you plan to run any of the following services, you'll need to make sure to have their local development environment ports free as well:

Check this video (38MB) in order to see how easy it is to get your local development up and running with make local-run-develop.

Here's the flow for launching everything that's required for development:

Terminal 1:

$ cd paperwork/
$ make local-run-develop

(follow the instructions given)

Terminal 2:

$ cd service-gatekeeper/
$ make local-run-develop

Terminal 3 and following:

$ cd service-.../
$ make local-run-develop

You should be good to go at this point. The Elixir services use code hot-reloading so you shouldn't need to kill the running process and re-launch it through make local-run-develop for every change you make. However, there are changes that won't get activated through hot-reloading. In that case, simply Ctrl+C and make local-run-develop again for that specific service.

Using the local database

The local development environment brings its own database. It's a vanilla MongoDB container that's being launched on its official port 27017. You can use the mongo shell or a GUI like Robo 3T to connect to it by via localhost:27017.

Every service uses this database to store its data. Each service uses its own collection inside this database. Services will never access other services' collections directly. If service A needs to have some of service B's data changed, it requests service B to do so through internal endpoints. This type of communication is cached and abstracted using paperwork.ex.

Supporting Paperwork

The best way to help this project is by contributing to the code. However, if that should not be possible to you, but you'd still like to help, the Paperwork project gladly accepts support in form of Bitcoins and Ether. Please use the following addresses to direct your donations:

xxxxxx

CAUTION: Do not send any donations to anywhere else but those addresses. Unfortunately we had situations in which random people (that were not affiliated with this project in any kind) posted PayPal addresses inside GitHub issues in order to scam money.

Links

Footnote

This branch contains the second iteration of Paperwork, which is a complete rewrite. Not only is it based on another framework - it is based on a completely different technology stack. It is in its very early development phase and not yet usable.

If you were looking for the Laravel-based version 1 of Paperwork, please check out this branch. Version 1 is not in active development anymore!

<script> (function(f, a, t, h, o, m){ a[h]=a[h]||function(){ (a[h].q=a[h].q||[]).push(arguments) }; o=f.createElement('script'), m=f.getElementsByTagName('script')[0]; o.async=1; o.src=t; o.id='fathom-script'; m.parentNode.insertBefore(o,m) })(document, window, 'https://cdn.usefathom.com/tracker.js', 'fathom'); fathom('set', 'siteId', 'EOJSAIDR'); fathom('trackPageview'); </script>

paperwork's People

Contributors

7brend7 avatar agustaf9 avatar alt-grr avatar andrewleech avatar anlutro avatar aspangaro avatar baldrs avatar bblurock avatar bingooo avatar bit avatar cfj avatar chrislahaye avatar clemlaf avatar codejockey1 avatar dexafree avatar enedil avatar haroenv avatar jamborjan avatar janisz avatar johb avatar joshlemer avatar liongold avatar mrusme avatar primozvanut avatar snowbldr avatar tobiasneidig avatar ulm0 avatar vishalsodani avatar vitorf7 avatar wongalvis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

paperwork's Issues

Enhance "Move Note" dialog

The current "Move Note" dialog looks weird to someone who doesn't know what it does:

screen shot 2015-01-03 at 23 32 12

At least one info text should be added above the list of notebooks, so the user understands what he could do with this.

ckEditor does not apply styles correctly

It looks like the ckEditor sometimes messes up with the styles, resulting in weirdly displayed elements. Test and check all kind of styles within the ckEditor.

Installing on a Windows XAMPP box

I love this project. I am a Codeigniter programmer that was asked to find a local clone of Evernote and I stumbled on this.

I've looked around the site to see how I would install on a server and I don't find anything. Could someone give me a quick instruction?

Thanks!

Reconsider fonts

So far Lato was being used on the web, until I found out that for example the Mozilla Firefox had issues loading the font files. However, I'm not sure, whether it's the perfect font to be used for this topic, though. And I don't know about the native clients as well. Maybe there's a better (in the sense of overall appearance and readability) font that could be used on the web?

Installation help

Hi there. I'm VERY interested in this project, and am trying to get it set up on CentOS 7 (which will be documented and posted to my site). However I'm having a problem getting this set up correctly.

CentOS 7
PHP 5.6
mariaDB
Apache

I have paperwork downloaded at /var/www/html/paperwork, and have run php composer.phar install, which completes without error. I set up the database with the default (db/user/pass all paperwork), and then run php artisan migrate. Everything seems to install without error, apache and mariadb are running, and when I browse to http://server.domain/paperwork, it just shows the directory listing. I don't see any php or html files in the project root, so I'm not sure what page it's supposed to load?

Can you provide some assistance here?

Thanks!
1

API for sharing notebooks to other Paperwork-users

Build APIs that allow sharing of notebooks with other Paperwork-users. The database layout is prepared for this feature and allows multiple many-to-many relations from notebooks to users, containing an "umask" column as well, which defines the users permissions on the related notebook. The values are identical to unix' chmod-values, with read adding 4, write adding 2 and ownership ("execute" in unix) adding 1 - resulting in the highest value of 7. For this purpose a tinyInt variable is being used, although a binary one (unsupported by Laravel) would have fit better.

However, the person creating and sharing a notebook would always have the umask set to 7, while invited people would be getting either 6 (read & write) or 4 (read only). I don't think it'll make sense to allow multiple notebook owners (7).

Notebooks sharing with other Paperwork-users

It should be possible to share notebooks with other Paperwork-users. Therefor, a dialog/page is needed, which lets the user invite someone else to a notebook and define his/her permissions.

Provide LDAP authentication

Paperwork needs to be configurable to allow admins to integrate it with their existing LDAP/AD infrastructure. Therefor, the user authentication back-end needs to be adapted to use some sort of Laravel-Ldap extension.

i18n / Translations

It would be cool to have Paperwork translated in different languages. i18n functionalities are already available, we only need people who could translate the files contained in app/lang//*.php into other languages.

Implement OAuth2 authentication for third-party clients

Paperwork should soon switch from the HTTP Basic Auth it currently uses to OAuth2 while accessing the API. The tricky part probably is, that right now the front-end is using the API itself, but should further on be able to authenticate without OAuth.

Define a common look of mobile clients

After the common UI/common shapes are being defined, there needs to be a common look (and feel) of the mobile clients defined. A user that has used the Android client before, shouldn't have any issues using the iOS or WP client.

This issue depends on #35 and should be worked on hand-in-hand with #36.

Guidelines

Use elements from existing/competing apps so that people can easily adapt. (Evernote, Google Keep and Drive, Office 365 Mobile, Zoho)
There will be small variations between platforms, however, the position of the UI elements should be consistent. e.g. if the search box is located at the top of the screen on Android, it should be there on other platforms too. The exception to this is where 2 platforms have different UX convention.
We therefore aim to use common conventions that applies to most mobile platforms. (e.g. avoid hardware based menu button, iOS doesn't have that).

Evernote Import Fails Silently

Hi,

First off, thanks for such an excellent project -- I think it's great, much-needed, and highly desirable for folks who love the Evernote concept but don't want someone else holding all of their data for them.

I've installed the latest release on my own server (CentOS 6.5), gotten it stood up, and everything seems to be running well. I've exported my Evernote ENEX file and tried importing it, which seems to be silently failing. All permissions seem to be set appropriately as I can create a new note and add an attachment, larevel.log is present in 'logs', et. al. Whenever I try to import the file, the settings page refreshes with the 'Language' tab as active and the 'User Interface Language' element and associated dropdown being colored in red. I even tried changing the ENEX file's extension to 'xml' thinking that might be the issue, but still no dice. The ENEX export file is only 89K -- certainly not large enough to violate any php.ini constraints, so I don't think that is the issue, either.

Neither laravel.log or my httpd's error_log seem to have anything pertaining to an error in them.

Thanks again for a great product,
Brad

Write tests

No tests available. Write unit tests & introduce frontend tests.

Implement "Add to homescreen"

As described here, some things still need to be added to the HTML structure of the layouts and some icons need to be included in order to allow users to add Paperwork (the mobile website) to their homescreens.

Idea: Implement WebDAV interface using sabre

Here's an idea: How about Paperwork would implement a WebDAV interface using sabre (https://github.com/fruux/sabre-dav), which would allow working with Notes and Notebooks as they were files and folders?

Further thoughts: - How would attachments to notes appear? Would they appear at all?

  • What would be the difference between a Notebook enclosing Notes and a Collection enclosing Notebooks only, from a filesystem point of view?
  • Would this really provide a use for people?
  • Would this push Paperwork too much into the "SharePoint" or "Alfresco" area?

Concept: Search

Someone needs to think of a good concept for search. Here are some thoughts on that topic:

Should search be implemented right into the MySQL database or should an Elasticsearch (or whatever) be used? This decision would have a huge impact on the overall complexity of Paperwork. Therefor, maybe abstract the implementation allowing the administrator to decide, whether he'd like to stick with the simple MySQL setup or build a full-blown Elasticsearch solution?

Notes metadata has to be written into the search back-end. In addition, the tesseract OCR would need to write its parsing results into the search back-end as well, to allow the user to search for text that is contained in images he uploads.

Where on the back-end should search be implemented? Is it a task that is being triggered from within the API controller code? Or should it be run as a parallel background job through a job-queue?

How should the search API look like? How will it respond to search requests, if the request would take longer than usual to proceed?

Fix font issues

According to some users, there are some issues with the currently in use webfont.

Write user help

The user help should be written. The format for that is regular markdown with some specialities regarding URLs. Please refer to the current help page, to get more info.

Use first linked image as preview within the notes list (2nd column)

The notes list (second column of the three: [notebooks list][notes list][note view]) needs to be extended to allow displaying an square image on the right quarter of the list entries.

Paperwork then should always display the first image it finds within a note in that image-square. By that, we give the users the ability to find the right now by checking the images within the notes list and, what's even more important, to actually find a note which only contains an image and no text at all.

Document language recognition/guessing?

Right now, there's a "languages" feature implemented, which allows the user to define, in what kind of languages the documents he usually uploads are written in. Under "Settings", each Paperwork user can select the languages he'd like Paperwork to support for his account.

This was being implemented, so that tesseract can be called with the according language option, which helps OCR.

Now, this is not the best way to solve this issue. If a user has "English" and "French" selected but one day uploads a document/image containing Greek words, these won't get parsed correctly by tesseract. Tesseract ran with the english and the french dictionary, but not the greek one.

Therefor, he would either need to enable "Greek" in his settings before uploading the document, resulting in tesseract running on ALL his documents to parse each with the greek dictionary as well (because, we don't know which documents is written in which language, right?).

The quick-fix here would be, to ask the user on each document upload, what language that image he's uploading is written in. So, if he photographs a letter from his french cousin and would like to upload that, he first needs to pick "French" in the document uploader. I personally don't like this solution.

Therefor, I'm wondering, if anybody knows, how language recognition or guessing could be done using tesseract?

Migrate to Laravel 5

This isn't something that needs to be done now, nor tomorrow, nor in a month - it's more of a backlog task that needs to be done someday, when Laravel 5 became available and got mature enough to be used in production.

Getting rid of the "File a bug" window

Hey!

I'm currently testing some self-hosted evernote alternatives to find out, which one fits my needs the best and paperwork really does the (almost) best job!
In order to use it for "productivity" (i know...work in progress) I need to get rid of the "File a bug" window which is really annoying. I can't write a note with this note-taking app because there is this small window overlaying which prevents me from seeing what I'm writing - this doesn't makes sense to me :)

Please make it smaller, hide it in the help menu or somewhere else, but not this way! On my desktop's screen (23") it's ok, but on a 15" laptop - useless..

thanks in advance and for this beatuful app!

Define a common look of desktop clients

After the common UI/common shapes are being defined, there needs to be a common look (and feel) of the desktop clients defined. A user that has used the Linux client before, shouldn't have any issues using the Mac or Windows client.

This issue depends on #35 and should be worked on hand-in-hand with #38.

Tagsinput should not only create tags on keypress ("enter") but also on "blur" (focus-out)

Currently, the bootstrap-tagsinput by @timschlechter only creates tags when the user actually presses the "enter"-key. If he should just click somewhere else on the UI, the tag is not being created, remains pure text and therefor isn't being saved.

Now, this isn't something that needs to be fixed within Paperwork (but could be, although it would be quite a dirty hack), but Unfortunately the bootstrap-tagsinput project kind of fell asleep. Therefor I'd like some help here from anyone who's willing to contribute to Paperwork: Fix this issue and commit it to @timschlechter, so he can merge it into the official bootstrap-tagsinput repo. :-)

Export function

Hey!

are there any plans for implementing an export function in nearer future? Since I see me updating quite frequently, I want to backup my notes outside of the server environment.

best regards!

Implement SJCL and allow client-side note encryption

Using SJCL (http://bitwiseshiftleft.github.io/sjcl/) Paperwork could allow client-side, JavaScript note encryption, so that every note-content could be transferred and stored encrypted within the back-end.

This probably wouldn't work for all notes, like for example shared ones, but we could at least allow the user to specifically encrypt notes separately (not by default!), using a specific per-note-password. If the user then shares the note to someone, he could pass him along the password used for that note.

Fix mobile web-ui

The mobile web-ui currently doesn't neither look nor work the way it should. While browsing from a smartphone, Paperwork should be acting a lot more like a native app. Not sure yet, what the best ui design for this would be, though. It even might be better to use Polymer (or something else) instead of pure Bootstrap to build the mobile UI, although this would result in having a separate mobile layout.

Good ideas, anyone?

Auto Save & Back option.

Autosave feature would be wonderful! That is one of the features of the evernote that I really like.

Having the option to create a nightly backup would also be very nice to have.

Collections

Technically, collections are possible. The thing is, that there is no way to create/edit these collections. Right now, it's impossible to move notebooks into others and by that form a new collection - because that's what collections actually are: Empty notebooks containing more notebooks.

The thing is, that collections can not contain any notes - only notebooks. So if someone would create two notebooks, fill one with notes and then "move" the second one into the former, all notes would become inaccessible. Therefor we need a clear way to create/edit collection and only allow a user to move notebooks into such.

Hide unparsed AngularJS variables on page load

Paperwork needs to hide the "ugly" AngularJS variables on page load, until there's real content inside of them. My quick try with adding ng-cloak didn't work the way I expected. Maybe some AngularJS expert knows the reason / a working way?

Clean up angular.js code

The Angular.js code is yet pretty unstructured and not DRY enough. This should be cleaned soon.

Implement a "guided tour through Paperwork"

To make it even more easy for users to start using Paperwork, something like a "guided tour through Paperwork" would be cool. This should be something similar to what other services do: A message right at the beginning, asking the user whether he'd like a guided tour. If the user accepts, bubble-tooltips should pop up above the UI, showing the user the most important features of Paperwork. These tooltips should appear one after another and advance as soon as the user clicks/taps.

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.