npm / marky-markdown Goto Github PK
View Code? Open in Web Editor NEWnpm's markdown parser
Home Page: https://www.npmjs.com/package/@npmcorp/marky-markdown
npm's markdown parser
Home Page: https://www.npmjs.com/package/@npmcorp/marky-markdown
next version will be p big. let's keep track of the features we add as we move towards parity with github parsing. related: https://github.com/npm/newww/issues/1627 cc @aredridel @rockbot
This causes some readme's to look odd on npmjs.com.
It looks like all html comments are regex'd out before the markdown parser is run (see index.js).
If the sanitize
option is set (true by default), marky-markdown runs sanitize-html which removes html comments as well.
Hi! I've been poking at writing some documentation, and in the course of playing around with another tool I ran into a discrepancy between how GitHub generates heading slugs vs. how npm renders them, in particular when emoji appears in the header.
I've created a test repo and published it. It appears that npm strips emoji from the anchor entirely, while GitHub includes the emoji's GH nickname in the anchor.
This isn't blocking anything for me; this issue is by way of cataloguing the differences between GH's rendering and ours — apologies if this is a known thing. If so, please don't hesitate to close this out!
Thanks, all!
When I try to include marky-markdown in my HapiJS project then the application does not start up anymore. If I remove the require to marky then the application starts as normal.
Let me know what other info is needed.
This is related specifically to superscript tags, but could be related to any other relative safe html tag. I ran into this in the documentation of currency.js (Github vs npm) where a superscript tag is being stripped out which leads to a fundamental difference in how the documentation is read.
This seems like a relative safe tag to include, and it would be nice if npm could also match Github's whitelist of tags in order to have similar formats for readme documentations that are listed in both places.
i really dislike huge files. would like to see the tests broken down by category.
i want to use greenkeeper and this gets in the way
related #86
https://www.npmjs.com/package/benchmark has a sufficiently shitty readme.
Compare tape readme on github to tape readme on npm.
Even though these URLs aren't explicit links in the markdown, Github detects that they're links and makes them clickable automatically. It would be ideal if npmjs.com
did this as well.
we should have tests that let us know if new features create a performance cut/improvement.
I have published the following package: https://www.npmjs.com/package/hubot-slack-relay and the README markdown does not seem to be parsed correctly and the content is not visible.
The html looks like this:
<div id="readme" class="markdown">
<h1 id="user-content-hubot-slack-relaya-script-to-relay-messages-from-a-local-channel-to-a-remote-channel-on-a-separate-slack-server-without-an-account-this-script-is-designedspecifically-for-use-with-hubot-and-the-slack-adapter-features-multiple-local-channels-can-relay-to-multiple-remote-channels-no-need-for-additional-bots-accounts-not-required-on-each-slack-server-installationnpm-install-hubot-slack-relaythen-add-hubot-slack-relay-to-external-scripts-json-commands-adding-relaysadds-a-relay-from-the-local-channel-to-the-remote-channel-the-remote-token-will-be-the-same-token-as-the-remote-hubot-slack-token-note-tokens-are-private-and-this-should-be-setup-via-direct-messaging-hubot-relay-add-local-channel-remote-channel-remote-token-remove-relaysremoves-relays-from-the-local-channel-specified-all-remote-channels-can-be-removed-or-single-remote-channels-can-be-removed-one-by-one-hubot-relay-remove-local-channel-remote-channel-list-relaysshow-all-existing-local-server-to-remote-server-relay-mappings-and-a-partial-token-listing-in-case-of-duplicates-hubot-relay-list" class="deep-link package-name-redundant"><a href="#hubot-slack-relaya-script-to-relay-messages-from-a-local-channel-to-a-remote-channel-on-a-separate-slack-server-without-an-account-this-script-is-designedspecifically-for-use-with-hubot-and-the-slack-adapter-features-multiple-local-channels-can-relay-to-multiple-remote-channels-no-need-for-additional-bots-accounts-not-required-on-each-slack-server-installationnpm-install-hubot-slack-relaythen-add-hubot-slack-relay-to-external-scripts-json-commands-adding-relaysadds-a-relay-from-the-local-channel-to-the-remote-channel-the-remote-token-will-be-the-same-token-as-the-remote-hubot-slack-token-note-tokens-are-private-and-this-should-be-setup-via-direct-messaging-hubot-relay-add-local-channel-remote-channel-remote-token-remove-relaysremoves-relays-from-the-local-channel-specified-all-remote-channels-can-be-removed-or-single-remote-channels-can-be-removed-one-by-one-hubot-relay-remove-local-channel-remote-channel-list-relaysshow-all-existing-local-server-to-remote-server-relay-mappings-and-a-partial-token-listing-in-case-of-duplicates-hubot-relay-list">Hubot Slack RelayA script to relay messages from a local channel to a remote channel on a separate slack server without an account. This script is designedspecifically for use with Hubot and the Slack adapter.## Features* Multiple local channels can relay to multiple remote channels* No need for additional bots* Accounts not required on each slack server## Installation<code>npm install hubot-slack-relay</code>Then add <code>"hubot-slack-relay"</code> to <code>external-scripts.json</code>## Commands### Adding RelaysAdds a relay from the local channel to the remote channel. The remote token will be the same token as the remote HUBOT_SLACK_TOKEN.<em>NOTE:</em> Tokens are private and this should be setup via Direct Messaging.<code>hubot relay add <local-channel> <remote-channel> <remote-token></code>### Remove RelaysRemoves relays from the local channel specified. All remote channels can be removed or single remote channels can be removed one by one.<code>hubot relay remove <local-channel> [<remote-channel>]</code>### List RelaysShow all existing local server to remote server relay mappings and a partial token listing in case of duplicates.<code>hubot relay list</code></a></h1>
</div>
I'm not sure exactly where the problem lies, I found the following function in the website repository: https://github.com/npm/newww/blob/c4818328d5e936f359b587d340d8a3b821026672/presenters/package.js#L173
which led me to:
https://github.com/npm/marky-markdown/blob/master/lib/packagize.js#L48
There's a lot of conditional logic I'm not familiar with used here, but I'm assuming that at some point we return the description as-is, instead of un-encoding it and rendering it appropriately.
it is out of date
marky-markdown/lib/sanitize.js
Lines 57 to 59 in b6e752b
The comment says that it allows only iframes from youtube. In fact, it allows iframes from anywhere, as long as the URL contains //youtube.com
.
marky-markdown's API is currently synchronous, and might be slow when syntax highlight larger files. Supporting an async API that use these pygmentize libraries instead of highlight.js might be worth investigating:
https://www.npmjs.com/package/pygmentize-bundled
https://www.npmjs.com/package/pygmentize-bundled-cached
I am working on the following issue for npm/newww.
I was thinking I would approach this issue by requiring Markdown-It-Emoji in marky-markdown (which already requires Markdown-It).
waiting to merge #60
this will be a fun one and maybe worth an announcement
We're not actually using the generated meta tags, and it's causing problems: https://github.com/npm/newww/issues/850
I'm managing a package on npm: https://www.npmjs.com/package/glou.
As you can see on this page, the subtitle of the package is « Complete pipelining system compatible Gulp ». My problem is that in my markdown the subtitle is « Complete pipelining system compatible with Gulp » (there is « with » in the correct sentence but not on npm).
You can check this in the repository…
https://www.npmjs.com/package/@sindresorhus/df
Not sure why. Maybe because of the short header.
this is new. seems to be with oniguruma
(dep of highlights), because issues with nan
and node-gyp
working on in #67
Been trying to figure out why I see lines of equal signs among package descriptions, and realized this style of markdown heading is not currently supported (although it is on github).
Examples derived from the list of chokidar dependents. Arguably, the impact of this issue is worse on the list pages than the actual package description pages.
https://www.npmjs.com/package/fat-watchy
https://www.npmjs.com/package/madeye
https://www.npmjs.com/package/node-server-1412
https://www.npmjs.com/package/vsd
https://www.npmjs.com/package/quiver-file-component
Maybe a separate issue, but there are also still examples like this with the redundant heading:
https://www.npmjs.com/package/vmd
When I try and use Marky-Markdown with Browserify I get the following error
>> SyntaxError: Unexpected character '�' (2:2) while parsing C:\Users\noahh_000
Noah\Programing\Polymer\Polymer-Markdown-Tag\node_modules\marky-markdown\node_m
dules\highlights\node_modules\first-mate\node_modules\oniguruma\build\Release\o
ig_scanner.node while parsing file: C:\Users\noahh_000\Noah\Programing\Polymer\
olymer-Markdown-Tag\node_modules\marky-markdown\node_modules\highlights\node_mo
ules\first-mate\node_modules\oniguruma\build\Release\onig_scanner.node
This appears to be an issue with a dependency of Marky-Markdown.
OS: Windows 8.1
I've noticed this in a handful of packages on npm and it seems a bit weird and edge case-y, and confusing.
https://www.npmjs.com/package/subschema
Note how the headings aren't properly parsing because the Markdown seems to be a bit "incorrect" and missing a space after the ###
and Install
(and Example
):
###Install
...
###Example You provide the schema and subschema renders it. Keeping the values, and errors in check.
GitHub is clever enough to parse the headings at https://github.com/jspears/subschema/blob/master/Readme.md but looks like [the excellently named] marky-markdown just ignores the sketchy Markdown. Sadly, the Markdown spec doesn't explicitly mention that there needs to be a space after the hashes, although the examples all use it. Amazingly, it looks like the reference Markdown dingus correctly converts the headings though: http://daringfireball.net/projects/markdown/dingus. But sadly it doesn't look like the Commonmark dingus does the same: http://spec.commonmark.org/dingus/, although the Commonmark spec is a lot clearer: http://spec.commonmark.org/0.17/#atx-headers
"The opening sequence of # characters cannot be followed directly by a non-space character."
Long story longer, should marky-markdown be handling apparently controversial edge cases like ###Install
, or just give up and display the unparsed Markdown?
see #90, stop gap measure
In https://github.com/npm/newww/issues/487#issuecomment-68662039 @kenany recommended to forward issue to your repo.
Consider switch to markdown-it - much more safe than current one.
https://www.npmjs.com/package/clean-whitespace doesn't look right:
"description": "normalize whitepsace characters to \t \n and space",
I'd like to use some markdown-it plugins (hashtag, emoji, etc) but I don't see any easy way to sneak into the render function and modify the markdown-it instance it uses. Perhaps it could expose an option to pass in your own markdown-it instance?
npm WARN deprecated [email protected]: the module is now available as 'css-select'
npm WARN deprecated [email protected]: the module is now available as 'css-what'
not urgent, but worth fixing.
https://www.npmjs.com/package/slug takes a long time to install because it does some UTF-8 mumbo jumbo. We don't need it. Let's use something smaller...
markdown-it
freaks out on malformed/spec-incompliant multiline HTML comments:
A while back I added some code to marky-markdown that removed HTML comments from strings before passing them to the markdown-it
parser. This solved the problem for the above-mentioned READMEs, but introduced new problems in other places. Some READMEs contain HTML comments within code blocks, and those should not be removed. For example:
There are at least two possible solutions to this:
markdown-it
npmjs.com seems to have no problem showing the README from the zunda
package:
https://www.npmjs.com/package/zunda
However, if I try to parse the file in that repo with marky-markdown, my node process pegs the cpu at 100% and the command never terminates.
// basically, i do this:
require("marky-markdown")(fs.readFileSync("README.md", { encoding: "utf-8" }))
pretty
is the CLI. The main stuff does not depend on it.marky-markdown
+ pretty
rather than for marky-markdown
alone (which it should be).pretty
or any other program. Combining programs in this way is more configurable and robust.Sometimes marky-markdown needs to parse content from trusted sources, like:
https://github.com/npm/static-pages/blob/master/private-npm.md
https://raw.githubusercontent.com/npm/static-pages/master/private-npm.md
https://www.npmjs.com/private-npm
It would be nice to be able to do this:
marky(content, {allowScripts: true})
or perhaps a whitelisted tags option for flexibility beyond just script
tags.
5.0.2
2.0.1
2.1.0
I have discovered a number of Markdown rendering bugs on npmjs.com, which I have compiled into a package with examples:
https://www.npmjs.com/package/npm-markdown-bugs
Compare this to the same exact Markdown syntax on GitHub, and you can see the issues:
https://github.com/jhuckaby/npm-markdown-bugs
I figured this would be better than entering 5 separate issues. But if you would prefer that, please let me know.
Thanks!
Install & require markdown-it-emoji for Issue #59 & npm/newww's Issue #463.
The only thing, i think, i need to do to complete this PR is write the test.
From https://github.com/npm/newww/issues/1644:
According to the spec, setext headers do not have to be followed by a blank line.
As per npm/newww#463 emoticons are being rendered into markdown which doesn't match Github's method. Emoji substitution ideally would only replace colon-wrapped items, e.g. [colon]+1[colon] -> 👍
Example error: https://www.npmjs.com/package/rumpus
undefined
tokens can't make it through sanitization phase.
$ cat m.md
```js
null==undefined
```
$ ./bin/marky-markdown.js m.md
<pre><code class="highlight js"><pre class="editor editor-colors"><div class="line"><span class="source js"><span class="constant language null js"><span>null</span> </span> <span class="keyword operator js"><span>==</span> </span> <span class="constant language js"><span></span> </span> </span> </div></pre>
</code>
</pre>
See it live: http://npm.im/gather
Hi, I got an error during installation marky-markdown
. I noticed that an error is generated when installing the first-mate
module. Here is the npm-debug.log
arkadiusz@arkadiusz-ThinkPad-X200:~/Projects/sealhub$ npm install marky-markdown --save
npm WARN package.json [email protected] No repository field.
npm WARN deprecated [email protected]: the module is now available as 'css-select'
npm WARN deprecated [email protected]: the module is now available as 'css-what'
-
> [email protected] install /home/arkadiusz/Projects/sealhub/node_modules/marky-markdown/node_modules/highlights/node_modules/first-mate/node_modules/oniguruma
> node-gyp rebuild
make: Entering directory `/home/arkadiusz/Projects/sealhub/node_modules/marky-markdown/node_modules/highlights/node_modules/first-mate/node_modules/oniguruma/build'
CC(target) Release/obj.target/oniguruma/deps/onig/regcomp.o
CC(target) Release/obj.target/oniguruma/deps/onig/regenc.o
CC(target) Release/obj.target/oniguruma/deps/onig/regerror.o
CC(target) Release/obj.target/oniguruma/deps/onig/regexec.o
CC(target) Release/obj.target/oniguruma/deps/onig/regext.o
CC(target) Release/obj.target/oniguruma/deps/onig/reggnu.o
CC(target) Release/obj.target/oniguruma/deps/onig/regparse.o
CC(target) Release/obj.target/oniguruma/deps/onig/regposerr.o
CC(target) Release/obj.target/oniguruma/deps/onig/regposix.o
CC(target) Release/obj.target/oniguruma/deps/onig/regsyntax.o
CC(target) Release/obj.target/oniguruma/deps/onig/regtrav.o
CC(target) Release/obj.target/oniguruma/deps/onig/regversion.o
CC(target) Release/obj.target/oniguruma/deps/onig/st.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/ascii.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/big5.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/cp1251.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/euc_jp.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/euc_kr.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/euc_tw.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/gb18030.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_1.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_2.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_3.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_4.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_5.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_6.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_7.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_8.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_9.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_10.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_11.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_13.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_14.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_15.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_16.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/koi8.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/koi8_r.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/mktable.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/sjis.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/unicode.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf16_be.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf16_le.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf32_be.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf32_le.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf8.o
AR(target) Release/obj.target/oniguruma.a
COPY Release/oniguruma.a
CXX(target) Release/obj.target/onig_scanner/src/onig-cache.o
In file included from ../src/onig-reg-exp.h:7:0,
from ../src/onig-cache.h:4,
from ../src/onig-cache.cc:1:
../node_modules/nan/nan.h:260:25: error: redefinition of ‘template<class T> v8::Local<T> _NanEnsureLocal(v8::Local<T>)’
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Local<T> val) {
^
../node_modules/nan/nan.h:255:25: error: ‘template<class T> v8::Local<T> _NanEnsureLocal(v8::Handle<T>)’ previously declared here
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Handle<T> val) {
^
../node_modules/nan/nan.h:660:13: error: ‘node::smalloc’ has not been declared
, node::smalloc::FreeCallback callback
^
../node_modules/nan/nan.h:660:35: error: expected ‘,’ or ‘...’ before ‘callback’
, node::smalloc::FreeCallback callback
^
../node_modules/nan/nan.h: In function ‘v8::Local<v8::Object> NanNewBufferHandle(char*, size_t, int)’:
../node_modules/nan/nan.h:664:50: error: ‘callback’ was not declared in this scope
v8::Isolate::GetCurrent(), data, length, callback, hint);
^
../node_modules/nan/nan.h:664:60: error: ‘hint’ was not declared in this scope
v8::Isolate::GetCurrent(), data, length, callback, hint);
^
../node_modules/nan/nan.h: In function ‘v8::Local<v8::Object> NanNewBufferHandle(const char*, uint32_t)’:
../node_modules/nan/nan.h:671:67: error: call of overloaded ‘New(v8::Isolate*, const char*&, uint32_t&)’ is ambiguous
return node::Buffer::New(v8::Isolate::GetCurrent(), data, size);
^
../node_modules/nan/nan.h:671:67: note: candidates are:
In file included from ../node_modules/nan/nan.h:25:0,
from ../src/onig-reg-exp.h:7,
from ../src/onig-cache.h:4,
from ../src/onig-cache.cc:1:
/home/arkadiusz/.node-gyp/4.0.0/src/node_buffer.h:31:40: note: v8::MaybeLocal<v8::Object> node::Buffer::New(v8::Isolate*, v8::Local<v8::String>, node::encoding) <near match>
NODE_EXTERN v8::MaybeLocal<v8::Object> New(v8::Isolate* isolate,
^
/home/arkadiusz/.node-gyp/4.0.0/src/node_buffer.h:31:40: note: no known conversion for argument 3 from ‘uint32_t {aka unsigned int}’ to ‘node::encoding’
/home/arkadiusz/.node-gyp/4.0.0/src/node_buffer.h:43:40: note: v8::MaybeLocal<v8::Object> node::Buffer::New(v8::Isolate*, char*, size_t) <near match>
NODE_EXTERN v8::MaybeLocal<v8::Object> New(v8::Isolate* isolate,
^
/home/arkadiusz/.node-gyp/4.0.0/src/node_buffer.h:43:40: note: no known conversion for argument 2 from ‘const char*’ to ‘char*’
In file included from ../src/onig-reg-exp.h:7:0,
from ../src/onig-cache.h:4,
from ../src/onig-cache.cc:1:
../node_modules/nan/nan.h: In function ‘v8::Local<v8::Object> NanNewBufferHandle(uint32_t)’:
../node_modules/nan/nan.h:675:61: error: could not convert ‘node::Buffer::New(v8::Isolate::GetCurrent(), ((size_t)size))’ from ‘v8::MaybeLocal<v8::Object>’ to ‘v8::Local<v8::Object>’
return node::Buffer::New(v8::Isolate::GetCurrent(), size);
^
../node_modules/nan/nan.h: In function ‘v8::Local<v8::Object> NanBufferUse(char*, uint32_t)’:
../node_modules/nan/nan.h:682:12: error: ‘Use’ is not a member of ‘node::Buffer’
return node::Buffer::Use(v8::Isolate::GetCurrent(), data, size);
^
make: *** [Release/obj.target/onig_scanner/src/onig-cache.o] Error 1
make: Leaving directory `/home/arkadiusz/Projects/sealhub/node_modules/marky-markdown/node_modules/highlights/node_modules/first-mate/node_modules/oniguruma/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:269:23)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 3.13.0-22-generic
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/arkadiusz/Projects/sealhub/node_modules/marky-markdown/node_modules/highlights/node_modules/first-mate/node_modules/oniguruma
gyp ERR! node -v v4.0.0
gyp ERR! node-gyp -v v2.0.2
gyp ERR! not ok
npm ERR! Linux 3.13.0-22-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "marky-markdown" "--save"
npm ERR! node v4.0.0
npm ERR! npm v2.14.3
npm ERR! code ELIFECYCLE
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! This is most likely a problem with the oniguruma package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get their info via:
npm ERR! npm owner ls oniguruma
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR! /home/arkadiusz/Projects/sealhub/npm-debug.log
Something in this README make marky-markdown hang: https://www.npmjs.com/package/grunt-angular-templates
Reposted from https://github.com/npm/newww/issues/1432
GitHub supports diff
syntax highlighting:
old line
old line
+ insert line
old line
- remove line
old line
But npmjs.com does not. 😢
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.