Giter Club home page Giter Club logo

zmninja's Introduction

ZoneMinder

Bounty Source Join Slack drawing

All documentation for ZoneMinder is now online at https://zoneminder.readthedocs.org

Overview

ZoneMinder is an integrated set of applications which provide a complete surveillance solution allowing capture, analysis, recording and monitoring of any CCTV or security cameras attached to a Linux based machine. It is designed to run on distributions which support the Video For Linux (V4L) interface and has been tested with video cameras attached to BTTV cards, various USB cameras and also supports most IP network cameras.

Contacting the Development Team

Before creating an issue in our github forum, please read our posting rules: https://github.com/ZoneMinder/ZoneMinder/wiki/Github-Posting-Rules

Our Dockerfile has moved

Please file issues against the ZoneMinder Dockerfile here: https://github.com/ZoneMinder/zmdockerfiles

Installation Methods

Install from a Package Repository

This is the recommended method to install ZoneMinder onto your system. ZoneMinder packages are maintained for the following distros:

If a repository that hosts ZoneMinder packages is not available for your distro, then you are encouraged to build your own package, rather than build from source. While each distro is different in ways that set it apart from all the others, they are often similar enough to allow you to adapt another distro's package building instructions to your own.

Building from Source is Discouraged

Historically, installing ZoneMinder onto your system required building from source code by issuing the traditional configure, make, make install commands. To get ZoneMinder to build, all of its dependencies had to be determined and installed beforehand. Init and logrotate scripts had to be manually copied into place following the build. Optional packages such as jscalendar and Cambozola had to be manually installed. Uninstalls could leave stale files around, which could cause problems during an upgrade. Speaking of upgrades, when it comes time to upgrade all these manual steps must be repeated again.

Better methods exist today that do much of this for you. The current development team, along with other volunteers, have taken great strides in providing the resources necessary to avoid building from source.

Building a ZoneMinder Package

Building ZoneMinder into a package is not any harder than building from source. As a matter of fact, if you have successfully built ZoneMinder from source in the past, then you may find these steps to be easier.

When building a package, it is best to do this work in a separate environment, dedicated to development purposes. This could be as simple as creating a virtual machine, using Docker, or using mock. All it takes is one “Oops” to regret doing this work on your production server.

Lastly, if you desire to build a development snapshot from the master branch, it is recommended you first build your package using an official release of ZoneMinder. This will help identify whether any problems you may encounter are caused by the build process or is a new issue in the master branch.

Please visit our ReadtheDocs site for distro specific instructions.

Package Maintainers

Many of the ZoneMinder configuration variable default values are not configurable at build time through autotools or cmake. A new tool called zmeditconfigdata.sh has been added to allow package maintainers to manipulate any variable stored in ConfigData.pm without patching the source.

For example, let's say I have created a new ZoneMinder package that contains the cambozola javascript file. However, by default cambozola support is turned off. To fix that, add this to the packaging script:

./utils/zmeditconfigdata.sh ZM_OPT_CAMBOZOLA yes

Note that zmeditconfigdata.sh is intended to be called, from the root build folder, prior to running cmake or configure.

Docker

Docker is a system to run applications inside isolated containers. ZoneMinder, and the ZM webserver, will run using the Dockerfile contained in this repository. However, there is still work needed to ensure that the main ZM features work properly and are documented.

Contribution Model and Development

Pull requests are very welcome! If you would like to contribute, please follow the following steps. While step 3 is optional, it is preferred.

  1. Fork the repo
  2. Open an issue at our GitHub Issues Tracker. Follow the issue template to describe the bug or security issue you found. Please note feature requests or questions should be posted in our user forum or Slack channel.
  3. Create your feature branch (git checkout -b 456-my-new-feature)
  4. Commit your changes (git commit -am 'Added some feature') It is preferred that you 'commit early and often' instead of bunching all changes into a single commit.
  5. Push your branch to your fork on github (git push origin 456-my-new-feature)
  6. Create new Pull Request
  7. The team will then review, discuss and hopefully merge your changes.

Analytics

zmninja's People

Contributors

a-pavlov avatar aljabr avatar arjunroychowdhury avatar bklang avatar boskspb avatar catsout avatar civita avatar connortechnology avatar corysanin avatar cryptage21 avatar dado-ca avatar dependabot[bot] avatar florie1706 avatar fxrnando avatar gtozzi avatar jsloyer avatar krive001 avatar ljpinho avatar lucasnz avatar maymaymay avatar mcbittech avatar neillbell avatar nestorwheelock avatar partialvolume avatar phillxnet avatar pliablepixels avatar rombie18 avatar steelyard-nl avatar stevegilvarry avatar webgeek1234 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

zmninja's Issues

apk Download of zmNinja

Hi,
sorry me for opening an issue, but I have not another way to contact you.
I would like to install zmNinja to my Android Tablet and Phone, but I cannot find the apk.
I'm not able to compile my version at this point, I need to invest lot of effort to prepare the enviroment to compile.
Is there a repository where Can I download the apk?

Thanks

Android client: System Status view returns HTTP error

@alager reports that when viewing the "System Status" screen, the HTTP APIs return an "error" like ZM returned nothing. However, he looked at logs of ZM and the request does not get there.

My hypothesis is this:
Chrome has a limit of 6 concurrent connections to one domain - when you view System Status, it shoots off 4 APIs in parallel (4 HTTP connections). In the event there are other HTTP connections that have not yet terminated in zmNinja, this may be resulting in a hang state.

In the past I've observed when you hit this limit, Chrome (the web view the client is using) does not recover well from this. In addition, I make HTTP timeouts for the system status requests long. I don't know if this adds to the issue.

This issue will track this problem as I take @alager's help to characterize this better

When images are loaded over a slow connection, there is a white screen till it loads

When images are loaded over a slow connection, there is a white screen till it loads --> on tracing logs it seems that nph-zms sends a blank HTTP 200 OK immediately and then transmits the image. Switching to just zms (as suggested by @knnniggett) alleviates this issue. The next issue to tackle is the delay in loading of the image - if its a large image, it still takes 4-5 seconds at times, depending on network and zms performance

app causes ZM crash/bad behavior after it's been asleep for a while

This issue is much better now ( it only puts about 1 error message every second or 2 ), but still occurs on a regular bases when I lock my phone while zmNinja is running. Now I have to wait a longer time it seems, but the errors still show up in syslog when I unlock my phone and view the montage. This one even caused a back trace to occur:

Sep 16 15:49:05 myZoneMonitor nph-zms[14021]: ERR [Can't insert log entry: MySQL server has gone away]
Sep 16 15:49:05 myZoneMonitor nph-zms[14021]: INF [Got signal 15 (Terminated), exiting]
Sep 16 15:49:05 myZoneMonitor zms[14018]: INF [Got signal 15 (Terminated), exiting]
Sep 16 15:49:07 myZoneMonitor nph-zms[14040]: ERR [Can't insert log entry: Lost connection to MySQL server during query]
Sep 16 15:49:07 myZoneMonitor nph-zms[14040]: INF [Got signal 15 (Terminated), exiting]
Sep 16 15:49:07 myZoneMonitor nph-zms[14041]: ERR [Can't insert log entry: MySQL server has gone away]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Can't insert log entry: MySQL server has gone away]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: INF [Got signal 15 (Terminated), exiting]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Got signal 6 (Aborted), crashing]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Signal address is 0x21000036dc, from 0x7fbee34e4cc9]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Backtrace 0: /usr/lib/zoneminder/cgi-bin/nph-zms(_Z14zm_die_handleriP9siginfo_tPv+0x72) [0x7fbee70b5e72]]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Backtrace 1: /lib/x86_64-linux-gnu/libpthread.so.0(+0x10340) [0x7fbee5f1c340]]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Backtrace 2: /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x39) [0x7fbee34e4cc9]]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Backtrace 3: /lib/x86_64-linux-gnu/libc.so.6(abort+0x148) [0x7fbee34e80d8]]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Backtrace 4: /lib/x86_64-linux-gnu/libc.so.6(+0x73394) [0x7fbee3521394]]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Backtrace 5: /lib/x86_64-linux-gnu/libc.so.6(+0x7f66e) [0x7fbee352d66e]]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Backtrace 6: /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18(end_server+0x35) [0x7fbee57c8c75]]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Backtrace 7: /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18(mysql_close+0x61) [0x7fbee57cab81]]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Backtrace 8: /usr/lib/zoneminder/cgi-bin/nph-zms(_ZN6Logger9terminateEv+0x79) [0x7fbee7030af9]]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Backtrace 9: /usr/lib/zoneminder/cgi-bin/nph-zms(_ZN6LoggerD1Ev+0x10) [0x7fbee7030e20]]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Backtrace 10: /usr/lib/zoneminder/cgi-bin/nph-zms(_Z7logTermv+0x15) [0x7fbee7031035]]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Backtrace 11: /usr/lib/zoneminder/cgi-bin/nph-zms(main+0x7a9) [0x7fbee7020c49]]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Backtrace 12: /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5) [0x7fbee34cfec5]]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: ERR [Backtrace 13: /usr/lib/zoneminder/cgi-bin/nph-zms(+0x1fb37) [0x7fbee7021b37]]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: INF [Backtrace complete, please execute the following command for more information]
Sep 16 15:49:07 myZoneMonitor nph-zms[14044]: INF [addr2line -e /usr/lib/zoneminder/cgi-bin/nph-zms 0x7fbee70b5e72 0x7fbee5f1c340 0x7fbee34e4cc9 0x7fbee34e80d8 0x7fbee3521394 0x7fbee352d66e 0x7fbee5
7c8c75 0x7fbee57cab81 0x7fbee7030af9 0x7fbee7030e20 0x7fbee7031035 0x7fbee7020c49 0x7fbee34cfec5 0x7fbee7021b37]
Sep 16 15:49:09 myZoneMonitor zms[14074]: INF [Got signal 15 (Terminated), exiting]
Sep 16 15:49:11 myZoneMonitor nph-zms[14098]: INF [Got signal 15 (Terminated), exiting]
Sep 16 15:49:15 myZoneMonitor nph-zms[14142]: ERR [Can't insert log entry: MySQL server has gone away]
Sep 16 15:49:15 myZoneMonitor nph-zms[14142]: INF [Got signal 15 (Terminated), exiting]
Sep 16 15:49:15 myZoneMonitor nph-zms[14148]: ERR [Can't insert log entry: MySQL server has gone away]
Sep 16 15:49:15 myZoneMonitor zms[14143]: INF [Got signal 15 (Terminated), exiting]
Sep 16 15:49:15 myZoneMonitor nph-zms[14154]: ERR [Can't insert log entry: MySQL server has gone away]
Sep 16 15:49:15 myZoneMonitor nph-zms[14154]: INF [Got signal 15 (Terminated), exiting]
Sep 16 15:49:17 myZoneMonitor nph-zms[14183]: ERR [Can't insert log entry: MySQL server has gone away]
Sep 16 15:49:17 myZoneMonitor nph-zms[14183]: INF [Got signal 15 (Terminated), exiting]
Sep 16 15:49:17 myZoneMonitor nph-zms[14187]: ERR [Can't insert log entry: MySQL server has gone away]
Sep 16 15:49:17 myZoneMonitor nph-zms[14187]: INF [Got signal 15 (Terminated), exiting]
Sep 16 15:49:19 myZoneMonitor zms[14222]: INF [Got signal 15 (Terminated), exiting]
Sep 16 15:49:21 myZoneMonitor zms[14252]: INF [Got signal 15 (Terminated), exiting]
Sep 16 15:49:21 myZoneMonitor zms[14256]: INF [Got signal 15 (Terminated), exiting]
Sep 16 15:49:23 myZoneMonitor zms[14287]: INF [Got signal 15 (Terminated), exiting]
S

app gets into weird state that prevents timeline from populating and syslog goes nuts from montage

Here is a 1 second sample of syslog when this is happening:

Aug 26 17:28:18 myZoneMonitor zms[6011]: FAT [Unable to load monitor id 1 for streaming]
Aug 26 17:28:18 myZoneMonitor zms[6012]: FAT [Unable to load monitor id 2 for streaming]
Aug 26 17:28:18 myZoneMonitor zms[6010]: INF [Got signal 15 (Terminated), exiting]
Aug 26 17:28:18 myZoneMonitor zms[6009]: FAT [Unable to load monitor id 3 for streaming]
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12519 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12524 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12515 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12516 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12521 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12523 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor zms[6004]: INF [Got signal 15 (Terminated), exiting]
Aug 26 17:28:18 myZoneMonitor zms[6005]: INF [Got signal 15 (Terminated), exiting]
Aug 26 17:28:18 myZoneMonitor zms[6006]: FAT [Unable to load monitor id 3 for streaming]
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12529 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12526 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor zms[6010]: FAT [Unable to load monitor id 4 for streaming]
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12517 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12522 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor zms[6005]: FAT [Unable to load monitor id 4 for streaming]
Aug 26 17:28:18 myZoneMonitor zms[6004]: FAT [Unable to load monitor id 2 for streaming]
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12520 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12527 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12525 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12528 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor zms[6014]: FAT [Unable to load monitor id 2 for streaming]
Aug 26 17:28:18 myZoneMonitor zms[6013]: FAT [Unable to load monitor id 1 for streaming]
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12531 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12533 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12530 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12532 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor zms[6015]: FAT [Unable to load monitor id 3 for streaming]
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12534 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12535 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor zms[6016]: FAT [Unable to load monitor id 4 for streaming]
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12536 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12537 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor zms[6018]: FAT [Unable to load monitor id 4 for streaming]
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12538 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12542 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor zms[6020]: FAT [Unable to load monitor id 1 for streaming]
Aug 26 17:28:18 myZoneMonitor zms[6019]: FAT [Unable to load monitor id 2 for streaming]
Aug 26 17:28:18 myZoneMonitor zms[6022]: FAT [Unable to load monitor id 2 for streaming]
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12539 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12540 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12545 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12548 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12541 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)
Aug 26 17:28:18 myZoneMonitor mysqld: 150826 17:28:18 [Warning] Aborted connection 12546 to db: 'zm' user: 'zmuser' host: 'localhost' (Unknown error)

Latest Events panel doesn't initialize correctly on first use.

When I bring up the yellow slider for "latest events" I tap on one of the 4 choices (1 hour summary, 1 day summary, 1 week summary or 1 month summary) and nothing happens.
I then tried the '...'->filter by date-> reset and now am presented with camera names under each of the aforementioned summary groups.

Android: Http problem

I'm facing an odd problem - after a while ,http requests don't seem to be reaching my server when using the only Android device I have - Galaxy S3. I have no idea if this is a crosswalk issue or not - need to investigate.

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.