GithubHelp home page GithubHelp logo

hypertopic / argos Goto Github PK

View Code? Open in Web Editor NEW
8.0 8.0 10.0 691 KB

Contradictory/complementary categorisations management

Home Page: https://hypertopic.org/

License: GNU Affero General Public License v3.0

JavaScript 100.00%
knowledge-management qualitative-analysis

argos's People

Contributors

benel avatar chao avatar patrickutt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

argos's Issues

Topic broader might be undefined

According to the specification, upper topics should be allowed with no broader members.

It has been reported by @gumn that Argos implementation fails when broader is not defined.

Workaround (till Argos bug is fixed): set broader:[] instead.

Importing viewpoints

Viewpoints exported from Porphyry cannot be imported.
To reproduce the bug:

POST /argos/_design/argos/_update/viewpoint

<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Porphyry -->
<map>
<node TEXT="Age du fer (Mountjoy)">
<node ID="topic_6523" TEXT="FORMES">
<node ID="topic_6526" TEXT="Skyphoi" FOLDED="true">
<node LINK="http://steatite.hypertopic.org/entity/5fedf5dadacc522830df46b770741f89966856ac"/>
<node LINK="http://steatite.hypertopic.org/entity/c7444166ef62f09411eccebffa08b52992bb6dd1"/>
<node LINK="http://steatite.hypertopic.org/entity/5aba9e77f4f9f369b5ca76d51c15d4d3a1ac88f1"/>
<node LINK="http://steatite.hypertopic.org/entity/7702903c0793a63583cb09aa0cf348d97453fe4f"/>
<node LINK="http://steatite.hypertopic.org/entity/0a46ad7785ba6a391b709c6bc556a6b77e64a48d"/>
<node LINK="http://steatite.hypertopic.org/entity/8d20fcdfaf9f6ec2b6a72776157f23e761e48d1e"/>
<node LINK="http://steatite.hypertopic.org/entity/46dd68ec939ef71fa3599a2b26a3c4fe3a8c2ce8"/>
</node>
<node ID="topic_6527" TEXT="Amphores à étriers" FOLDED="true">
<node LINK="http://steatite.hypertopic.org/entity/31c0a98126d087507f64485e384bba6ddd9cf59c"/>
<node LINK="http://steatite.hypertopic.org/entity/8d1da7c38350b047f9f4d6d8cbc1bb581c0d0fc8"/>
<node LINK="http://steatite.hypertopic.org/entity/1316429dd580e2054c4ef4ea68e169dbb78e363e"/>
<node LINK="http://steatite.hypertopic.org/entity/d0cd1162f8e712198e0b42f94bdecddd15563012"/>
<node LINK="http://steatite.hypertopic.org/entity/70c745e3663ed969c865b305166171677e7bdb01"/>
<node LINK="http://steatite.hypertopic.org/entity/7b43001c42be09f12cb26aa520dccde8bf77306b"/>
<node LINK="http://steatite.hypertopic.org/entity/35a65ec01f0882d8f6e4767a5da8428beb8e5036"/>
<node LINK="http://steatite.hypertopic.org/entity/4cc63ec983b90e6f9fc842ba6e50dc18084f31e9"/>
<node LINK="http://steatite.hypertopic.org/entity/03bf0abd5b1f949c8f43d3a8ffee772b4f0bd00f"/>
<node LINK="http://steatite.hypertopic.org/entity/00bcf6ec9d4729fda9ac5aef64d75ae84d689428"/>
<node LINK="http://steatite.hypertopic.org/entity/189017062cb3e9b1af449302b72f3c47febce4bf"/>
<node LINK="http://steatite.hypertopic.org/entity/eb9dddce8bbc11f0a44a78e36559c694f25efaec"/>
<node LINK="http://steatite.hypertopic.org/entity/194b48bd78a73166d2717e126cb85d6e15e28334"/>
<node LINK="http://steatite.hypertopic.org/entity/97e2136162d7ac573fbc9f306eaae85dc1c96477"/>
<node LINK="http://steatite.hypertopic.org/entity/6a8cb6c325b36e7670686c85d4d198b3c65c98ec"/>
<node LINK="http://steatite.hypertopic.org/entity/95dd9d56775f9cdf8721d2c2083b4434c91cae8d"/>
<node LINK="http://steatite.hypertopic.org/entity/adf05e4263a32b4241fdc342772d3fba09601a8a"/>
<node LINK="http://steatite.hypertopic.org/entity/cc50a8397eb0a08eb45f3e3fbd829f8091e3470e"/>
<node LINK="http://steatite.hypertopic.org/entity/268095fd794eac6dd2c4ea44d0f765e672f357d6"/>
<node LINK="http://steatite.hypertopic.org/entity/989a58689fe44d2e81af8abc3023477386d96a10"/>
<node LINK="http://steatite.hypertopic.org/entity/6d1966646b0f7ff83a1a0d0fb215a6be9d4e3175"/>
<node LINK="http://steatite.hypertopic.org/entity/e003281e700e0d0275a33d32f75d09450cf3c315"/>
<node LINK="http://steatite.hypertopic.org/entity/a4e86bcf676ab644af8d6f80bc4d0eb767b93a2b"/>
<node LINK="http://steatite.hypertopic.org/entity/67bb3b4b4352b1e52e94fb7ae4ad5cf0fd1ff1e0"/>
<node LINK="http://steatite.hypertopic.org/entity/8d68a0ba65ad53bdf017f36b9cde158cad5cc6ef"/>
</node>
<node ID="topic_6528" TEXT="Lécythes" FOLDED="true">
<node LINK="http://steatite.hypertopic.org/entity/c78a310a6413a5e7ed047f7c6e37ae592dc5ee6b"/>
<node LINK="http://steatite.hypertopic.org/entity/a1235480e1f7ee6ea162e0bd82b7662c61d34938"/>
<node LINK="http://steatite.hypertopic.org/entity/ed646e517a1da630f850dd68537633f905852cca"/>
<node LINK="http://steatite.hypertopic.org/entity/adf78a21ad8a62b44b27cddffac4ba98f03f9644"/>
<node LINK="http://steatite.hypertopic.org/entity/f3b93668b994c6a35e0b722a83a865d415b54691"/>
<node LINK="http://steatite.hypertopic.org/entity/662c65683157513082f12f69bf6a18a6873f0980"/>
<node LINK="http://steatite.hypertopic.org/entity/5e4c155a199856144d3ce21e78e03872f240df36"/>
</node>
<node ID="topic_6525" TEXT="Amphorisques" FOLDED="true">
<node LINK="http://steatite.hypertopic.org/entity/8672e567497c1a00e3266be9baf6b3d60d22dac3"/>
<node LINK="http://steatite.hypertopic.org/entity/6e8689f6dc7f6be0029cf80a03312e750488947d"/>
<node LINK="http://steatite.hypertopic.org/entity/3959c1c26e403962a91333933cba6082218877d9"/>
<node LINK="http://steatite.hypertopic.org/entity/bfb3286d5817a5e1b3905adeab15f5b739187891"/>
<node LINK="http://steatite.hypertopic.org/entity/65c4148218d39b126ee6530a20d6e0a5aeef9675"/>
<node LINK="http://steatite.hypertopic.org/entity/afc69430563e7f550789308742e08784de9294ba"/>
<node LINK="http://steatite.hypertopic.org/entity/942e22c366351b7981af56ddf70f08a5ecaeca08"/>
<node LINK="http://steatite.hypertopic.org/entity/9184269bd2fa923b679dd3ee9bc0cc72ca1810c6"/>
<node LINK="http://steatite.hypertopic.org/entity/10a69f97ad23eaec87e510db3fb2fb7a4846c653"/>
<node LINK="http://steatite.hypertopic.org/entity/6ada6660703777e26e3a0d75a4406729e578097c"/>
<node LINK="http://steatite.hypertopic.org/entity/4fed192610af24b625514269f1b2034d59d796a9"/>
<node LINK="http://steatite.hypertopic.org/entity/a512bce722c8b6f9103d08a1bcd1b4fdcc0fbd77"/>
<node LINK="http://steatite.hypertopic.org/entity/654986a1c79c7b0d3abd514eb3384592c99b685a"/>
<node LINK="http://steatite.hypertopic.org/entity/03a1549d62586619170337b403f4d3376ef9df3f"/>
<node LINK="http://steatite.hypertopic.org/entity/90cbda1c05b0c469ef32876bbd60a4b9081bede5"/>
<node LINK="http://steatite.hypertopic.org/entity/924acab9a935262f22ab3cf671f151aff0f8a011"/>
<node LINK="http://steatite.hypertopic.org/entity/15c94a091a3d3022b7be29eabf476c5b4dcf5399"/>
</node>
<node ID="topic_6524" TEXT="Cruches" FOLDED="true">
<node LINK="http://steatite.hypertopic.org/entity/a5a8d3f576f3cbfdd2a9361eb1afc806fb3e7f33"/>
<node LINK="http://steatite.hypertopic.org/entity/14811a3cb2325755834ca5bb1e7f54150541178f"/>
<node LINK="http://steatite.hypertopic.org/entity/b9ac91ef408f0ae0fcf4c813b3236ced4685a620"/>
<node LINK="http://steatite.hypertopic.org/entity/12415421a21d111195d1907a41b2c348a39f29d0"/>
</node>
</node>
<node ID="topic_6529" TEXT="Submycénien" FOLDED="true">
<node LINK="http://steatite.hypertopic.org/entity/c7444166ef62f09411eccebffa08b52992bb6dd1"/>
<node LINK="http://steatite.hypertopic.org/entity/6e8689f6dc7f6be0029cf80a03312e750488947d"/>
<node LINK="http://steatite.hypertopic.org/entity/31c0a98126d087507f64485e384bba6ddd9cf59c"/>
<node LINK="http://steatite.hypertopic.org/entity/5aba9e77f4f9f369b5ca76d51c15d4d3a1ac88f1"/>
<node LINK="http://steatite.hypertopic.org/entity/3959c1c26e403962a91333933cba6082218877d9"/>
<node LINK="http://steatite.hypertopic.org/entity/65c4148218d39b126ee6530a20d6e0a5aeef9675"/>
<node LINK="http://steatite.hypertopic.org/entity/8d1da7c38350b047f9f4d6d8cbc1bb581c0d0fc8"/>
<node LINK="http://steatite.hypertopic.org/entity/8d20fcdfaf9f6ec2b6a72776157f23e761e48d1e"/>
<node LINK="http://steatite.hypertopic.org/entity/afc69430563e7f550789308742e08784de9294ba"/>
<node LINK="http://steatite.hypertopic.org/entity/942e22c366351b7981af56ddf70f08a5ecaeca08"/>
<node LINK="http://steatite.hypertopic.org/entity/662c65683157513082f12f69bf6a18a6873f0980"/>
<node LINK="http://steatite.hypertopic.org/entity/9184269bd2fa923b679dd3ee9bc0cc72ca1810c6"/>
<node LINK="http://steatite.hypertopic.org/entity/a5a8d3f576f3cbfdd2a9361eb1afc806fb3e7f33"/>
<node LINK="http://steatite.hypertopic.org/entity/7b43001c42be09f12cb26aa520dccde8bf77306b"/>
<node LINK="http://steatite.hypertopic.org/entity/7702903c0793a63583cb09aa0cf348d97453fe4f"/>
<node LINK="http://steatite.hypertopic.org/entity/654986a1c79c7b0d3abd514eb3384592c99b685a"/>
<node LINK="http://steatite.hypertopic.org/entity/12415421a21d111195d1907a41b2c348a39f29d0"/>
<node LINK="http://steatite.hypertopic.org/entity/5e4c155a199856144d3ce21e78e03872f240df36"/>
<node LINK="http://steatite.hypertopic.org/entity/194b48bd78a73166d2717e126cb85d6e15e28334"/>
<node LINK="http://steatite.hypertopic.org/entity/8672e567497c1a00e3266be9baf6b3d60d22dac3"/>
<node LINK="http://steatite.hypertopic.org/entity/97e2136162d7ac573fbc9f306eaae85dc1c96477"/>
<node LINK="http://steatite.hypertopic.org/entity/6a8cb6c325b36e7670686c85d4d198b3c65c98ec"/>
<node LINK="http://steatite.hypertopic.org/entity/bfb3286d5817a5e1b3905adeab15f5b739187891"/>
<node LINK="http://steatite.hypertopic.org/entity/95dd9d56775f9cdf8721d2c2083b4434c91cae8d"/>
<node LINK="http://steatite.hypertopic.org/entity/f3b93668b994c6a35e0b722a83a865d415b54691"/>
<node LINK="http://steatite.hypertopic.org/entity/989a58689fe44d2e81af8abc3023477386d96a10"/>
<node LINK="http://steatite.hypertopic.org/entity/4fed192610af24b625514269f1b2034d59d796a9"/>    
<node LINK="http://steatite.hypertopic.org/entity/a512bce722c8b6f9103d08a1bcd1b4fdcc0fbd77"/>
<node LINK="http://steatite.hypertopic.org/entity/adf78a21ad8a62b44b27cddffac4ba98f03f9644"/>
<node LINK="http://steatite.hypertopic.org/entity/67bb3b4b4352b1e52e94fb7ae4ad5cf0fd1ff1e0"/>
</node>
<node ID="topic_6522" TEXT="HRIIIC récent" FOLDED="true">
<node LINK="http://steatite.hypertopic.org/entity/a1235480e1f7ee6ea162e0bd82b7662c61d34938"/>
<node LINK="http://steatite.hypertopic.org/entity/ed646e517a1da630f850dd68537633f905852cca"/>
<node LINK="http://steatite.hypertopic.org/entity/d0cd1162f8e712198e0b42f94bdecddd15563012"/>
<node LINK="http://steatite.hypertopic.org/entity/1316429dd580e2054c4ef4ea68e169dbb78e363e"/>
<node LINK="http://steatite.hypertopic.org/entity/14811a3cb2325755834ca5bb1e7f54150541178f"/>
<node LINK="http://steatite.hypertopic.org/entity/70c745e3663ed969c865b305166171677e7bdb01"/>
<node LINK="http://steatite.hypertopic.org/entity/6ada6660703777e26e3a0d75a4406729e578097c"/>
<node LINK="http://steatite.hypertopic.org/entity/10a69f97ad23eaec87e510db3fb2fb7a4846c653"/>
<node LINK="http://steatite.hypertopic.org/entity/35a65ec01f0882d8f6e4767a5da8428beb8e5036"/>
<node LINK="http://steatite.hypertopic.org/entity/03bf0abd5b1f949c8f43d3a8ffee772b4f0bd00f"/>
<node LINK="http://steatite.hypertopic.org/entity/00bcf6ec9d4729fda9ac5aef64d75ae84d689428"/>
<node LINK="http://steatite.hypertopic.org/entity/0a46ad7785ba6a391b709c6bc556a6b77e64a48d"/>
<node LINK="http://steatite.hypertopic.org/entity/189017062cb3e9b1af449302b72f3c47febce4bf"/>
<node LINK="http://steatite.hypertopic.org/entity/90cbda1c05b0c469ef32876bbd60a4b9081bede5"/>
<node LINK="http://steatite.hypertopic.org/entity/15c94a091a3d3022b7be29eabf476c5b4dcf5399"/>
<node LINK="http://steatite.hypertopic.org/entity/eb9dddce8bbc11f0a44a78e36559c694f25efaec"/>
<node LINK="http://steatite.hypertopic.org/entity/884e45f2300f2b3b59c6cf117e1f358aa6548d92"/>
<node LINK="http://steatite.hypertopic.org/entity/5fedf5dadacc522830df46b770741f89966856ac"/>
<node LINK="http://steatite.hypertopic.org/entity/c78a310a6413a5e7ed047f7c6e37ae592dc5ee6b"/>
<node LINK="http://steatite.hypertopic.org/entity/adf05e4263a32b4241fdc342772d3fba09601a8a"/>
<node LINK="http://steatite.hypertopic.org/entity/cc50a8397eb0a08eb45f3e3fbd829f8091e3470e"/>
<node LINK="http://steatite.hypertopic.org/entity/b9ac91ef408f0ae0fcf4c813b3236ced4685a620"/>
<node LINK="http://steatite.hypertopic.org/entity/6d1966646b0f7ff83a1a0d0fb215a6be9d4e3175"/>
<node LINK="http://steatite.hypertopic.org/entity/a4e86bcf676ab644af8d6f80bc4d0eb767b93a2b"/>
<node LINK="http://steatite.hypertopic.org/entity/03a1549d62586619170337b403f4d3376ef9df3f"/>
<node LINK="http://steatite.hypertopic.org/entity/924acab9a935262f22ab3cf671f151aff0f8a011"/>
<node LINK="http://steatite.hypertopic.org/entity/b1581a3cc7146e52785c1b83ccf31c89ebe489cb"/>
<node LINK="http://steatite.hypertopic.org/entity/46dd68ec939ef71fa3599a2b26a3c4fe3a8c2ce8"/>
<node LINK="http://steatite.hypertopic.org/entity/8d68a0ba65ad53bdf017f36b9cde158cad5cc6ef"/>
</node>
</node>
</map>

Errors:

  • xml is a reserved identifier
  • There is a cycle in the viewpoint between topics!

Provide reusable Hypertopic Widgets

... that could be used in both external applications (MediaWiki, Moodle, etc.) and in the Hypertopic Suite (LaSuli, Agorae, Tiré-à-part, Steatite, etc.).

From my notebook (july 2013):

item
viewpoint_item
viewpoint_topic_item
integration

Reduce corpus payload on Argos

Some corpora are very long. Vitraux - Bénel for example – with 1.3 Mb and 7k lines – takes approximately 1.2s to load.

Hypertopic views use a ternary model such as this:

{"rows":[
  {"key":["C"], "value":{"name":"N1"}},
  {"key":["C"], "value":{"user":"U1"}},
  {"key":["C"], "value":{"user":"U2"}},
  {"key":["C","I"], "value":{"name":"N2","resource":"http://acme/bar"}},
  {"key":["C","I"], "value":{"A":"V"}},
  {"key":["C","I"], "value":{"topic":{"viewpoint":"V1","id":"T1"}}},
  {"key":["C","I", "H"], "value":{"coordinates":[123,240], "topic":{"viewpoint":"V2", "id":"T2"}}}
]}

However other triples serialization are also equivalent such as:

{"rows":[
  {"key":["C"], "value":{"name":"N1", "user":["U1", "U2"]}},
  {"key":["C","I"], "value":{"name":"N2","resource":"http://acme/bar", "A":"V"}},
  {"key":["C","I"], "value":{"topic":{"viewpoint":"V1","id":"T1"}}},
  {"key":["C","I", "H"], "value":{"coordinates":[123,240], "topic":{"viewpoint":"V2", "id":"T2"}}}
]}

Or even:

{"rows":[
  {"key":["C"], "value":{"name":"N1", "user":["U1", "U2"]}},
  {"key":["C","I"], "value":{"name":"N2","resource":"http://acme/bar", "A":"V", "topic":{"viewpoint":"V1","id":"T1"}}},
  {"key":["C","I", "H"], "value":{"coordinates":[123,240], "topic":{"viewpoint":"V2", "id":"T2"}}}
]}

Such a compact syntax could reduce payload by 1/3 or even 1/2.

Possible negative impacts:

  • on the memory used by CouchDB to write and read the index (server lag),
  • on compatibility with clients :
    • Porphyry and LaSuli should be OK since this abstraction is handled by Hypertopic node library,
    • Agorae may not handle this until it uses the Hypertopic node library (@cahier @mTixier).

Bind items together with a bidirectional link

Related items existed in a prior version of Porphyry and Agorae (for the iSemantec project) whereas version 1 of the Hypertopic Protocol didn't specify it. The implementation was finally dropped when version 2 came out saying:

Item-Item will remain unspecified until we have more real cases for it.
Source: Hypertopic Protocol Specification v2

The need for this feature emerges again among Porphyry contributors (see Hypertopic/Porphyry#188):

  • as "suggested" by project "stained glasses" in 2019 and 2020 (@Hypertopic/visite-sur-site-de-vitraux),
  • as "suggested" by project "studying abroad" in 2020 (@Hypertopic/etudes-a-l-etranger),
  • as "to do" by project "skills" in 2020 (@Hypertopic/approche-par-competences-de-la-formation).

Until it is specified in a future version of the protocol, this feature will be considered as "experimental" (formats and behaviours could change in the future).

The link will be stored in the item object which has the following format:

{
  "item_name": "N0", 
  "item_corpus": "C0", 
  "resource": "http://acme/bar", 
  "A": "V", 
  "topics": {
    "T1": {"viewpoint":"V1"}
  },
  "highlights": {
    "H": {
      "coordinates": [X,Y],
      "viewpoint": "V2",
      "topic": "T2"
    }
  }
}

In order to be coherent with this format, it will be stored as:

  "items":{
    "I3": {"corpus": "C3"}
  },

where I3 is the identifier and C3 the corpus of the related item.

For now, the relation is unspecified (or équivalent to related), but it could be typed in an improved version.

In the item and corpus view. It will be added to the existing format:

{"rows":[
  {"key":["C0","I0"], "value":{"name":"N2","resource":"http://acme/bar"}}, 
  {"key":["C0","I0"], "value":{"A":"V"}},
  {"key":["C0","I0"], "value":{"topic":{"viewpoint":"V1","id":"T1"}}},
  {"key":["C0","I0","H"], "value":{"coordinates":[X,Y], "topic":{"viewpoint":"V2", "id":"T2"}}}
]}

For coherence with topic, it could be:

  {"key":["C0","I0"], "value":{"item":{"corpus":"C3","id":"I3"}}},

Please note that being bidirectional the link will also be displayed as:

  {"key":["C3","I3"], "value":{"item":{"corpus":"C0","id":"I0"}}},

Reduce viewpoint payload on Argos

Some viewpoint payload are long. Histoire des religions for example – with 226 Kb and 1k lines – takes approximately 440ms to load.

Hypertopic views use a ternary model such as this:

{"rows":[
  {"key":["C"], "value":{"name":"N1"}},
  {"key":["C"], "value":{"user":"U1"}},
  {"key":["C"], "value":{"user":"U2"}},
  {"key":["C","I"], "value":{"name":"N1"},
  {"key":["C","I"], "value":{"broader":{"id":"B1","name":"N2"}},
  {"key":["C","I"], "value":{"narrower":{"id":"W1","name":"N3"}},
  {"key":["C","I"], "value":{"narrower":{"id":"B2","name":"N4"}}
]}

The objective is to reduce the number of lines returned and consequently the size of the file uploaded by the client.

{"rows":[
  {"key":["C"], "value":{"name":"N1", "user":["U1", "U2"]}},
  {"key":["C","I"], "value":{"name":"N1", "broader":[{"id":"B1","name":"N2"}, {"id":"B2","name":"N4"}], "narrower":[{"id":"W1","name":"N3"}] }}},
]}

A compact syntax could reduce payload by 1/4.

Note that given the algorithm, some groupings do not pose any problem (all users at once, or the name and broader(s) of a topic at once). On the other hand, for upper and narrower it would be counterproductive not to take advantage of MapReduce.

Tests should pass on Travis CI

A security fix for CouchDB (1.6.0 -> 1.6.1) broke the continuous integration of Argos.
The reason for that is that using HTTP for settings is now disabled.

In Travis docs, I found no other way to change the settings of CouchDB.

A solution could be to use a dockerized version of CouchDB instead of the default one.

Purge unused viewpoints

When 100 students used Argos with LaSuli, they created far more viewpoints that what they needed.
One of them even created 250 viewpoints himself!

An easy way to purge most of those viewpoints would be:

  1. to generate a view of all viewpoints having no topics,
  2. to build a list of this view conforming to the bulk delete API of CouchDB,
  3. to post this list with JQuery.

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.