Code Monkey home page Code Monkey logo

symbol-docs's Introduction

symbol-docs's People

Contributors

44uk avatar ate000 avatar boohi avatar cryptobeliever avatar daoka avatar dependabot[bot] avatar dexterslabor avatar dgarcia360 avatar eltociear avatar fboucquez avatar fullcircle23 avatar godtanu avatar hackmd-deploy avatar ivyfung1 avatar jaguar0625 avatar jontey avatar jorisadri avatar karriz-dev avatar katutoshi avatar klimgeran avatar kyleqchain avatar matthewkim93 avatar mm-s avatar orisdorch avatar rg911 avatar segfaultxavi avatar tajisoft avatar vektrat avatar wayonb avatar xembook 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

Watchers

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

symbol-docs's Issues

Update Namespaces documentation

There is an examples section on https://nemtech.github.io/concepts/namespace.html

Even though I got the general point and it made sense. I want to offer an improved example to make things more clear for the reader.

Scenario 1:
A customer buys a ticket for an event, a ticket sales company sends a ticket to the customer account.

Identifying the Sender
The seller company has bought the namespace "ticketsales" and assigned the namespace “ticketsales” as an alias to its main account. Customers can quickly recognize incoming transactions from the vendor account.

Indentifying Mosaic
The same company sells tickets for an events organized in different venues. The company registers a non-transferable mosaic for each function. A series of subdomains are added on top of the root domain of "ticketsales". The root plus subdomains are "ticketsales.eventname.ticket". The distributor assigns "ticketsales.eventname.ticket" as an alias to their mosaic.

A customer's address can now receive 1 "ticketsales.eventname.ticket" from the account "ticketsales" instead of 1 0xE4EEB491 from SCVG35-ZSPMYP-L2POZQ-JGSVEG-RYOJ3V-BNIU3U-N2E6.

Identifying the Receiver
Furthermore, if Alice is the customer of the ticket and she has registered the namespace "Alice" and assigned it to her account as an alias. Then the transaction on the blockchain can read Alice receives 1 "ticketsales.eventname.ticket" from the account "ticketsales" instead of SAV3MF-KO7RPO-FBBGMS-FDQXJ4-3AF3NO-OFWTCL-PLSA receives 1 0xE4EEB491 from SCVG35-ZSPMYP-L2POZQ-JGSVEG-RYOJ3V-BNIU3U-N2E6.

error installing nem2-cli

Hi,

NPM is throwing an error when installing nem2-cli

I managed to make it work, I think it would be nice to have a look at it and amend the tutorial to make the experience smoother.

CONFIG
-Ubuntu 16.04
-Node v 10.10
-NPM 6.4.1

COMMAND
$> (sudo) npm i -g nem2-cli

ERROR
/usr/bin/nem2-cli -> /usr/lib/node_modules/nem2-cli/bin/nem2-cli

[email protected] install /usr/lib/node_modules/nem2-cli/node_modules/bufferutil
prebuild-install || node-gyp rebuild

prebuild-install WARN install EACCES: permission denied, mkdir '/usr/lib/node_modules/nem2-cli/node_modules/bufferutil/build'
gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, mkdir '/usr/lib/node_modules/nem2-cli/node_modules/bufferutil/build'
gyp ERR! System Linux 4.13.0-36-generic
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /usr/lib/node_modules/nem2-cli/node_modules/bufferutil
gyp ERR! node -v v10.10.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: prebuild-install || node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /home/jls/.npm/_logs/2018-09-09T02_24_58_264Z-debug.log

SOLUTION FOUND
sudo npm install -g nem2-cli --unsafe-perm=true --allow-root

Question About Account Filter

hi guys,

one question about account filter in the following section.
nem2-docs/source/concepts/account-filter.rst

what's the difference between left-side circle and right-side circle in the diagram(concepts-account-properties-array.png)?

both circles show that account receive txs from the addresses in "Allow" circle and don't receive txs from other addresses, right?

would be grateful if you would let me know the difference .

thanks!

i18n strategies

Sphinx enables translating .rst files. By default, the following sections are not possible to be translated:

Each section will require a different translation strategy. The issue has been opened to discuss possible translation approaches.

New landing page proposal

An issue to discuss a possible redesign of the developer's center landing page. We'll start gathering requirements in this issue.

Jeff's comment in Slack:

The Landing Page
The goal is to keep this as beautiful as possible and highlight links, boxes, shortcuts, and provide shortcuts and direct access to the most commonly used docs.
This is done by combining the current landing page which is a great start and References page which is styled similarly.
We can add another section for guides and/or education or other important link categories in the future to compliment the content already there.

[Guide] Add Java code examples to guides

The documentation comes with guides on how to use each built-in feature. These guides show developers how to use built-in Symbol features while following step-by-step use cases.

Previously, most guides had java code examples ready to be used, but they were dropped because the Java SDK was outdated for a while. As the SDK developer, writing code examples will help you compare how the SDK code contrasts with others. Also, you will be helping others to get started with less effort.

Some outdated guides include:

Instructions

  • Fork and clone nem2-docs repository.
  • Create a new folder under source/resources/examples/ called java.
  • Translate each TypeScript code example to Java. If possible, use the same comments.

Deliverables

  • Code examples for each guide.

Dependencies

Resources

Document how to create a non-expirable mosaic

Either Mosaic concept or guides do not define how to create a non-expirable mosaics.

From Slack:
Eternal_Artifact_Duration (0 duration) is default for mosaic and should not be specified in the mosaic definition transaction.

Deliverables

Dependencies

  • The nem2-sdk does not allow to create non-expirable mosaics.

API behavior is different from nem2-doc

API : http://localhost:3000/blocks/{height}/limit/{limit}
https://nemtech.github.io/api/endpoints.html#operation/getBlocksByHeightWithLimit

Two different point about " {limit} ".

  1. Although " limit >= 0 " is described, it operates as limit = 25 except when limit = 25, 50, 75, 100.
  2. There is description " The number of following blocks to be returned. ".
    It can be read that blocks with height height ~ (height + limit -1) can be obtained.
    However, in fact we get the block whose height is (height - limit + 1) ~ height.

environment
catapult-service-bootstrap 77e6cf38a7845194aa2ce72f4ed4d87e5ab791e3

I don't know whether this is the ultimate specification of the API, but it is a fact that the behavior of nem2-doc and API is different.

Fix WARNING: logo file 'logo-nem.svg' does not exist

Error description
When the documentation is built, the terminal raises the following warning:

WARNING: logo file 'logo-nem.svg' does not exist

Steps to reproduce the error:

  1. Clone the repository and install requirements using pip:

pip install -r requirements.txt

  1. Build the docs.

make html

files.lock to be deleted

It would be nice to mention that files.lock have to be deleted before running docker-compose up in the folders:
-data/api-node-0
-data/peer-node-0
-data/peer-node-1

in order to avoid the following error that prevents publishing transctions:
peer-node-1_1 | 2018-09-09 05:02:33.663364 0x00007ff29d98e740: (io::FileLock.cpp@74) LockOpen failed: 2
peer-node-1_1 | 2018-09-09 05:02:33.663546 0x00007ff29d98e740: (server::ServerMain.cpp@91) could not acquire instance lock "/data/file.lock"

This error has also been mentionned on the NEM forum, but the answer is not very clear

[Guide] Public network anchoring

Publish a guide showing how to prove that a block in a private network existed, and this has not been tampered by publishing from time to time the last block hash and height in a public network.

[API Reference] Add Merkle path endpoint

Update the API Reference. Catapult REST 0.7.8 comes with a new API endpoint:

/block/<id>/transction/<id>/merkle.

Returns the Merkle path for this transaction: complementary data for this transaction needed to generate the Merkle root.

From the client side, a dev can generate the Merkle root for this transaction, ensuring:

  • The transaction is inside a determined block.
  • The data inside a block has not been altered.

[Testnet] Integrate catapult test network to docs

NEM Foundation has released a testnet and wallet

At the current moment, the "Getting Started section" will continue referencing to the catapult service bootstrap to test the server until we evaluate how fast the testnet is updated to subsequent releases.

Gradually, we will change the getting started section using a test network, without needing to run a catapult-service bootstrap instance to run catapult.

Deliverables

  • Adapt "Setting up your workstation" from "Getting started" section.
  • Move "Installing catapult-service-bootstrap" from "Getting started" section to a new guide.

Dependencies

  • Evaluate how fast NF testnet is updated.
  • Evaluate how fast NF wallet is updated.
  • The testnet has a maintained faucet.

Resources

Server Reference

NEM developer center will have a section describing how the Catapult-server is organized and guides to launch private networks and public nodes.

Deliverables

Server Reference

[Guide] Learning RxJS (applied to Symbol-SDK)

@jontey proposes on Slack:

We might have to write our own docs on how to use RxJS6. Most of the examples (that are google-able) is still using RxJS5. Maybe something to consider in #sig-docs

Show the best practices and basics of RxJS6 applied to Symbol SDKs.

Outline

  • Introduction to RXJS
  • Why RXJS for blockchain?
  • Observables
  • Basic operators
    • filter
    • map
    • toArray()
  • Advanced operators
    • mergemap (Nesting observables subscription)

Resources

Maximum message length is not 1024 characters

@44uk noticed the documentation states the maximum message length is 1024 characters.

This information is misleading since the node accepts transactions up to 1023 characters:

  • 1 byte for message type
  • 1023 characters

Demo code
https://harigami.net/contents?id=0a2bd371-2b73-4f1e-8af4-c824e8261a93a

Transfer Transction schema
https://github.com/nemtech/nem2-library-js/blob/master/src/schema/TransferTransactionSchema.js#L38
https://github.com/nemtech/catbuffer/blob/master/schemas/transfer.cats#L11

confusing comments in src\model\account\Address.d.ts

/**
 * Create from private key
 * @param publicKey - The account **private** key.
 * @param networkType - The NEM network type.
 * @returns {Address}
 */
static createFromPublicKey(publicKey: string, networkType: NetworkType): Address;

Create from private key
@param publicKey - The account private key.

so is it the public key or private key?

Layout update

Based on feedback received and research, we'll apply the following changes to the NEM Developer Center.

Refactor sidebar

Problem: Adding new references (wallet, tools, catapult-server), will make difficult the sidebar navigation.
Solution: Wrap API, SDK, Client, Libraries and prototyping tool under a "Reference" tab.

Add a secondary sidebar

Problem: It's difficult to navigate through documents, as there is no table of contents.
Solution: At the right part of the screen, we'll have a new sidebar containing the table of contents of the document.

The content will be more centered, enhancing the readability. Furthermore, it will allow merging some documents, for example, Prototyping Tool Overview, Configuration, and Examples can be merged into a single file.

Submitted a PR to enable this feature.

Improve top navbar

Problem: The language selector is hidden (footer), and the search page is not good enough.
Solution: The top bar will include algolia search if we get accepted to the program, and the language selector will be placed in the top sidebar.

Update Footer

The footer will be edited to follow the proposed structure, giving more importance to the community.

  • Documentation
  • References
  • Community

[Swagger] Update namespace endpoints

Catapult REST will introduce the following breaking changes in the next release:

  1. /namespace/names endpoint will be deleted.
  2. /mosaic/names will return the alias names currently attached to an array of mosaicIds.
  3. /account/names will return the alias currently attached to an array of accounts.

[Guide] Improve Debugging transactions

Improve Debugging transactions guide adding the complete transaction cycle.

The current guide only treats how to open different Listeners, but does not guide the developer in which situations each listener should be opened.

Suggestions

  • Announce a transaction first.
  • Listen to all necessary channels.
  • Explain what to do if a WebSocket stops listening.
  • Strategies to retry transactions that failed in client and server side.

Complementary reading

error on pip install -r requirements.txt

Hi,
on windows, git bash, python 3.6.4, pip 9.0.3
on the directory of git clone for nem2docs,
running pip install I receive this

Collecting sphinxcontrib-examplecode==0.1.0 (from -r requirements.txt (line 14))
Using cached sphinxcontrib-examplecode-0.1.0.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "", line 1, in
File "c:\users\mario\appdata\local\programs\python\python36-32\lib\site-pa ckages\setuptools_init_.py", line 10, in
from setuptools.extern.six.moves import filter, filterfalse, map
File "c:\users\mario\appdata\local\programs\python\python36-32\lib\site-pa ckages\setuptools\extern_init_.py", line 1, in
from pkg_resources.extern import VendorImporter
File "c:\users\mario\appdata\local\programs\python\python36-32\lib\site-pa ckages\pkg_resources_init_.py", line 3017, in
@call_aside
File "c:\users\mario\appdata\local\programs\python\python36-32\lib\site-pa ckages\pkg_resources_init
.py", line 3003, in call_aside
f(*args, **kwargs)
File "c:\users\mario\appdata\local\programs\python\python36-32\lib\site-pa ckages\pkg_resources_init
.py", line 3045, in initialize_master_working_set
dist.activate(replace=False)
File "c:\users\mario\appdata\local\programs\python\python36-32\lib\site-pa ckages\pkg_resources_init
.py", line 2577, in activate
declare_namespace(pkg)
File "c:\users\mario\appdata\local\programs\python\python36-32\lib\site-pa ckages\pkg_resources_init_.py", line 2151, in declare_namespace
handle_ns(packageName, path_item)
File "c:\users\mario\appdata\local\programs\python\python36-32\lib\site-pa ckages\pkg_resources_init
.py", line 2091, in _handle_ns
rebuild_mod_path(path, packageName, module)
File "c:\users\mario\appdata\local\programs\python\python36-32\lib\site-pa ckages\pkg_resources_init
.py", line 2120, in _rebuild_mod_path
orig_path.sort(key=position_in_sys_path)
AttributeError: '_NamespacePath' object has no attribute 'sort'

----------------------------------------

Command "python setup.py egg_info" failed with error code 1 in C:\Users\Mario\Ap pData\Local\Temp\pip-build-zad7g0os\sphinxcontrib-examplecode\

[Guide] Avoid fake responses from nodes

Create a guide to check the validity of a response returned by a node (man in the middle attack).

Some ideas:

  • Read from at least two different nodes to avoid fake responses.
  • Validate block correctness using Merkle trees (transactions, receipts, state).

Deliverables

  • Guide
  • Code example

Resources

i can't create namespace and mosaic with multisig

i can't create namespace and monasic with multisig

this code create namespace:
`
const nem2Sdk = require("nem2-sdk");
const operators = require('rxjs/operators');
require('dotenv').load();
const Address = nem2Sdk.Address,
Deadline = nem2Sdk.Deadline,
Account = nem2Sdk.Account,
UInt64 = nem2Sdk.UInt64,
NetworkType = nem2Sdk.NetworkType,
PlainMessage = nem2Sdk.PlainMessage,
TransferTransaction = nem2Sdk.TransferTransaction,
Mosaic = nem2Sdk.Mosaic,
MosaicId = nem2Sdk.MosaicId,
TransactionHttp = nem2Sdk.TransactionHttp,
PublicAccount = nem2Sdk.PublicAccount,
ModifyMultisigAccountTransaction = nem2Sdk.ModifyMultisigAccountTransaction,
MultisigCosignatoryModification = nem2Sdk.MultisigCosignatoryModification,
MultisigCosignatoryModificationType = nem2Sdk.MultisigCosignatoryModificationType,
AccountHttp = nem2Sdk.AccountHttp,
MosaicDefinitionTransaction = nem2Sdk.MosaicDefinitionTransaction,
MosaicSupplyChangeTransaction = nem2Sdk.MosaicSupplyChangeTransaction,
MosaicProperties = nem2Sdk.MosaicProperties,
MosaicSupplyType = nem2Sdk.MosaicSupplyType,
XEM = nem2Sdk.XEM,
AggregateTransaction = nem2Sdk.AggregateTransaction,
LockFundsTransaction = nem2Sdk.LockFundsTransaction,
Listener = nem2Sdk.Listener,
RegisterNamespaceTransaction = nem2Sdk.RegisterNamespaceTransaction,
filter = operators.filter,
mergeMap = operators.mergeMap;

    // 01 - Set up
    const transactionHttp = new TransactionHttp( 'http://localhost:3000');

    const cosignatoryPrivateKey = process.env.COSIGNATORY_1_PRIVATE_KEY;
    const cosignatoryAccount = Account.createFromPrivateKey(cosignatoryPrivateKey, NetworkType.MIJIN_TEST);

    const multisigAccountPublicKey = '8AD114F8B5E15D6E3D6101E4690677498B83759FE9A1D001529508F5EB4D46D6';
    const multisigAccount = PublicAccount.createFromPublicKey(multisigAccountPublicKey, NetworkType.MIJIN_TEST);

const namespaceName = "prachakij"; //Replace with an unique namespace name

const registerNamespaceTransaction = RegisterNamespaceTransaction.createRootNamespace(
Deadline.create(),
namespaceName,
UInt64.fromUint(1000),
NetworkType.MIJIN_TEST);

const signedTransaction = cosignatoryAccount.sign(registerNamespaceTransaction);

transactionHttp
.announce(signedTransaction)
.subscribe(x => console.log(x), err => console.error(err));
`

========================

this code create mosaic:

`const nem2Sdk = require("nem2-sdk");
const operators = require('rxjs/operators');
require('dotenv').load();

const Address = nem2Sdk.Address,
Deadline = nem2Sdk.Deadline,
Account = nem2Sdk.Account,
UInt64 = nem2Sdk.UInt64,
NetworkType = nem2Sdk.NetworkType,
PlainMessage = nem2Sdk.PlainMessage,
TransferTransaction = nem2Sdk.TransferTransaction,
Mosaic = nem2Sdk.Mosaic,
MosaicId = nem2Sdk.MosaicId,
TransactionHttp = nem2Sdk.TransactionHttp,
PublicAccount = nem2Sdk.PublicAccount,
ModifyMultisigAccountTransaction = nem2Sdk.ModifyMultisigAccountTransaction,
MultisigCosignatoryModification = nem2Sdk.MultisigCosignatoryModification,
MultisigCosignatoryModificationType = nem2Sdk.MultisigCosignatoryModificationType,
AccountHttp = nem2Sdk.AccountHttp,
MosaicDefinitionTransaction = nem2Sdk.MosaicDefinitionTransaction,
MosaicSupplyChangeTransaction = nem2Sdk.MosaicSupplyChangeTransaction,
MosaicProperties = nem2Sdk.MosaicProperties,
MosaicSupplyType = nem2Sdk.MosaicSupplyType,
XEM = nem2Sdk.XEM,
AggregateTransaction = nem2Sdk.AggregateTransaction,
LockFundsTransaction = nem2Sdk.LockFundsTransaction,
Listener = nem2Sdk.Listener,
filter = operators.filter,
mergeMap = operators.mergeMap;

// 01 - Set up
const transactionHttp = new TransactionHttp( 'http://localhost:3000');

const cosignatoryPrivateKey = process.env.COSIGNATORY_1_PRIVATE_KEY;
const cosignatoryAccount = Account.createFromPrivateKey(cosignatoryPrivateKey, NetworkType.MIJIN_TEST);

const multisigAccountPublicKey = '8AD114F8B5E15D6E3D6101E4690677498B83759FE9A1D001529508F5EB4D46D6';
const multisigAccount = PublicAccount.createFromPublicKey(multisigAccountPublicKey, NetworkType.MIJIN_TEST);


    // Replace with namespace name and mosaic name

const namespaceName = 'prachakij';
const mosaicName = 'liekcoin';

// 02 - Create Mosaic Definition Transaction
const mosaicDefinitionTransaction = MosaicDefinitionTransaction.create(
Deadline.create(),
mosaicName,
namespaceName,
MosaicProperties.create({
supplyMutable: true,
transferable: true,
levyMutable: false,
divisibility: 0,
duration: UInt64.fromUint(1000)
}),
NetworkType.MIJIN_TEST);

// 03 - Create Supply Change Transaction
const mosaicSupplyChangeTransaction = MosaicSupplyChangeTransaction.create(
Deadline.create(),
mosaicDefinitionTransaction.mosaicId,
MosaicSupplyType.Increase,
UInt64.fromUint(1000000),
NetworkType.MIJIN_TEST);

// 04 - Wrap both transactions inside an aggregate transaction
const aggregateTransaction = AggregateTransaction.createComplete(
Deadline.create(),
[
mosaicDefinitionTransaction.toAggregate(multisigAccount),
mosaicSupplyChangeTransaction.toAggregate(multisigAccount)
],
NetworkType.MIJIN_TEST,
[]);

const signedTransaction = cosignatoryAccount.sign(aggregateTransaction);

transactionHttp
.announce(signedTransaction)
.subscribe(x=> console.log(x),err => console.error(err));
`

Add TravisCI

Deploy the docs to Github Pages automatically using TravisCI.

error status

nem2-cli monitor status
Monitoring SA6NUD-FS2DKX-VTGWFY-FGPVOK-JKCM6N-KBW4CD-JRUN using
Error Error: Invalid URL: /ws
at WebSocket.initAsClient (/usr/local/lib/node_modules/nem2-cli/node_modules/ws/lib/websocket.js:455:11)
at new WebSocket (/usr/local/lib/node_modules/nem2-cli/node_modules/ws/lib/websocket.js:62:20)
at Promise (/usr/local/lib/node_modules/nem2-cli/node_modules/nem2-sdk/dist/src/infrastructure/Listener.js:77:38)
at new Promise ()
at Listener.open (/usr/local/lib/node_modules/nem2-cli/node_modules/nem2-sdk/dist/src/infrastructure/Listener.js:71:16)
at default_1.execute (/usr/local/lib/node_modules/nem2-cli/build/src/commands/monitor/status.js:43:18)
at CLI.executeCommand (/usr/local/lib/node_modules/nem2-cli/node_modules/clime/bld/core/cli.js:226:24)
at CLI. (/usr/local/lib/node_modules/nem2-cli/node_modules/clime/bld/core/cli.js:80:33)
at Generator.next ()
at fulfilled (/usr/local/lib/node_modules/nem2-cli/node_modules/clime/bld/core/cli.js:4:58)

Add internationalization

Enable docs in different languages.

http://www.sphinx-doc.org/en/master/intl.html

Pending Tasks:

  • ✔️ Enable i18n (see i18n branch inspired in @44uk translation)
  • ✔️Add a selector in the navbar or footer to change the language.
  • Add .po files for each language in locale folder. @44uk has started the Japanese docs, see if contributors want to do pull-requests and add .po files to the official repository.
  • ✔️Edit Travis CI to upload all the docs in the same gh-pages.
  • ✔️Publish a guideline to create and maintain translations.

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.