Giter Site home page Giter Site logo

expediadotcom / haystack-ui Goto Github PK

View Code? Open in Web Editor NEW
112.0 19.0 24.0 11.89 MB

License: Apache License 2.0

JavaScript 90.23% Makefile 0.03% Shell 0.37% Dockerfile 0.07% HCL 0.30% Smarty 0.22% Pug 0.26% Less 8.51%
haystack nodejs react zipkin

haystack-ui's People

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

haystack-ui's Issues

[Feature Request]: Support for overall Latency and Success% for selected time ranges

As a developer I would like to have the ability to see overall values for latency (for tp50, tp95 and tp99) and success % for the entire population for the selected time range. This would help us understand service/operation performance over long term along with the trend. The single number for each percentile displayed represents the value for the entire population of requests in the selected time range

Span Detail View Improvements

When viewing a detailed view of a merged span, it's not clear what you're actually looking at. Currently, you see a view of merged tags, merged logs, and the (server) raw span. This should be improved so the user knows more clearly what they are viewing.

codegen error : Server not starting

node -v
v11.10.1

npm -v
6.7.0

npm run start:dev --verbose

Output

npm info it worked if it ends with ok
npm verb cli [ '/usr/local/bin/node',
npm verb cli   '/usr/local/bin/npm',
npm verb cli   'run',
npm verb cli   'start:dev',
npm verb cli   '--verbose' ]
npm info using [email protected]
npm info using [email protected]
npm verb run-script [ 'prestart:dev', 'start:dev', 'poststart:dev' ]
npm info lifecycle [email protected]~prestart:dev: [email protected]
npm info lifecycle [email protected]~start:dev: [email protected]

> [email protected] start:dev /Users/prabhakarv/Documents/GitHub/haystack-ui
> npm run clean && npm run codegen && npm run test && concurrently -r "npm run watch" "wait-on public/bundles/report.html && npm run start:devserver"

npm info it worked if it ends with ok
npm verb cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'run', 'clean' ]
npm info using [email protected]
npm info using [email protected]
npm verb run-script [ 'preclean', 'clean', 'postclean' ]
npm info lifecycle [email protected]~preclean: [email protected]
npm info lifecycle [email protected]~clean: [email protected]

> [email protected] clean /Users/prabhakarv/Documents/GitHub/haystack-ui
> rm -rf public/bundles/ && rm -rf static_codegen

npm verb lifecycle [email protected]~clean: unsafe-perm in lifecycle true
npm verb lifecycle [email protected]~clean: PATH: /usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/Users/prabhakarv/Documents/GitHub/haystack-ui/node_modules/.bin:/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/Users/prabhakarv/Documents/GitHub/haystack-ui/node_modules/.bin:/usr/local/bin:/Users/prabhakarv/.rvm/gems/ruby-2.6.3/bin:/Users/prabhakarv/.rvm/gems/ruby-2.6.3@global/bin:/Users/prabhakarv/.rvm/rubies/ruby-2.6.3/bin:/Users/prabhakarv/.nvm/versions/node/v8.0.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Users/prabhakarv/.rvm/bin:/Users/prabhakarv/go/bin
npm verb lifecycle [email protected]~clean: CWD: /Users/prabhakarv/Documents/GitHub/haystack-ui
npm info lifecycle [email protected]~postclean: [email protected]
npm verb exit [ 0, true ]
npm timing npm Completed in 130ms
npm info ok
npm info it worked if it ends with ok
npm verb cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'run', 'codegen' ]
npm info using [email protected]
npm info using [email protected]
npm verb run-script [ 'precodegen', 'codegen', 'postcodegen' ]
npm info lifecycle [email protected]~precodegen: [email protected]
npm info lifecycle [email protected]~codegen: [email protected]

> [email protected] codegen /Users/prabhakarv/Documents/GitHub/haystack-ui
> mkdir -p static_codegen && grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./static_codegen/ --grpc_out=./static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` -I ./haystack-idl/proto/  ./haystack-idl/proto/span.proto && grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./static_codegen/ --grpc_out=./static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` -I ./haystack-idl/proto/api/ -I ./haystack-idl/proto/ ./haystack-idl/proto/api/traceReader.proto && grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./static_codegen/ --grpc_out=./static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` -I ./haystack-idl/proto/api/ -I ./haystack-idl/proto/ ./haystack-idl/proto/api/anomaly/anomalyReader.proto && grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./static_codegen/ --grpc_out=./static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` -I ./haystack-idl/proto/api/ -I ./haystack-idl/proto/ ./haystack-idl/proto/api/subscription/subscriptionManagement.proto

/Users/prabhakarv/Documents/GitHub/haystack-ui/node_modules/grpc-tools/bin/protoc.js:41
    throw error;
    ^

Error: spawn /Users/prabhakarv/Documents/GitHub/haystack-ui/node_modules/grpc-tools/bin/protoc ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:246:19)
    at onErrorNT (internal/child_process.js:427:16)
    at processTicksAndRejections (internal/process/next_tick.js:76:17)
    at process.runNextTicks [as _tickCallback] (internal/process/next_tick.js:51:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:804:11)
    at internal/main/run_main_module.js:21:11
npm verb lifecycle [email protected]~codegen: unsafe-perm in lifecycle true
npm verb lifecycle [email protected]~codegen: PATH: /usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/Users/prabhakarv/Documents/GitHub/haystack-ui/node_modules/.bin:/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/Users/prabhakarv/Documents/GitHub/haystack-ui/node_modules/.bin:/usr/local/bin:/Users/prabhakarv/.rvm/gems/ruby-2.6.3/bin:/Users/prabhakarv/.rvm/gems/ruby-2.6.3@global/bin:/Users/prabhakarv/.rvm/rubies/ruby-2.6.3/bin:/Users/prabhakarv/.nvm/versions/node/v8.0.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Users/prabhakarv/.rvm/bin:/Users/prabhakarv/go/bin
npm verb lifecycle [email protected]~codegen: CWD: /Users/prabhakarv/Documents/GitHub/haystack-ui
npm info lifecycle [email protected]~codegen: Failed to exec codegen script
npm verb stack Error: [email protected] codegen: `mkdir -p static_codegen && grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./static_codegen/ --grpc_out=./static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` -I ./haystack-idl/proto/  ./haystack-idl/proto/span.proto && grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./static_codegen/ --grpc_out=./static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` -I ./haystack-idl/proto/api/ -I ./haystack-idl/proto/ ./haystack-idl/proto/api/traceReader.proto && grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./static_codegen/ --grpc_out=./static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` -I ./haystack-idl/proto/api/ -I ./haystack-idl/proto/ ./haystack-idl/proto/api/anomaly/anomalyReader.proto && grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./static_codegen/ --grpc_out=./static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` -I ./haystack-idl/proto/api/ -I ./haystack-idl/proto/ ./haystack-idl/proto/api/subscription/subscriptionManagement.proto`
npm verb stack Exit status 1
npm verb stack     at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:301:16)
npm verb stack     at EventEmitter.emit (events.js:197:13)
npm verb stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
npm verb stack     at ChildProcess.emit (events.js:197:13)
npm verb stack     at maybeClose (internal/child_process.js:984:16)
npm verb stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:265:5)
npm verb pkgid [email protected]
npm verb cwd /Users/prabhakarv/Documents/GitHub/haystack-ui
npm verb Darwin 18.5.0
npm verb argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "codegen"
npm verb node v11.10.1
npm verb npm  v6.7.0
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] codegen: `mkdir -p static_codegen && grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./static_codegen/ --grpc_out=./static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` -I ./haystack-idl/proto/  ./haystack-idl/proto/span.proto && grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./static_codegen/ --grpc_out=./static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` -I ./haystack-idl/proto/api/ -I ./haystack-idl/proto/ ./haystack-idl/proto/api/traceReader.proto && grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./static_codegen/ --grpc_out=./static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` -I ./haystack-idl/proto/api/ -I ./haystack-idl/proto/ ./haystack-idl/proto/api/anomaly/anomalyReader.proto && grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./static_codegen/ --grpc_out=./static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` -I ./haystack-idl/proto/api/ -I ./haystack-idl/proto/ ./haystack-idl/proto/api/subscription/subscriptionManagement.proto`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] codegen script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm verb exit [ 1, true ]
npm timing npm Completed in 359ms

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/prabhakarv/.npm/_logs/2020-01-21T14_38_59_924Z-debug.log
npm verb lifecycle [email protected]~start:dev: unsafe-perm in lifecycle true
npm verb lifecycle [email protected]~start:dev: PATH: /usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/Users/prabhakarv/Documents/GitHub/haystack-ui/node_modules/.bin:/usr/local/bin:/Users/prabhakarv/.rvm/gems/ruby-2.6.3/bin:/Users/prabhakarv/.rvm/gems/ruby-2.6.3@global/bin:/Users/prabhakarv/.rvm/rubies/ruby-2.6.3/bin:/Users/prabhakarv/.nvm/versions/node/v8.0.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Users/prabhakarv/.rvm/bin:/Users/prabhakarv/go/bin
npm verb lifecycle [email protected]~start:dev: CWD: /Users/prabhakarv/Documents/GitHub/haystack-ui
npm info lifecycle [email protected]~start:dev: Failed to exec start:dev script
npm verb stack Error: [email protected] start:dev: `npm run clean && npm run codegen && npm run test && concurrently -r "npm run watch" "wait-on public/bundles/report.html && npm run start:devserver"`
npm verb stack Exit status 1
npm verb stack     at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:301:16)
npm verb stack     at EventEmitter.emit (events.js:197:13)
npm verb stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
npm verb stack     at ChildProcess.emit (events.js:197:13)
npm verb stack     at maybeClose (internal/child_process.js:984:16)
npm verb stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:265:5)
npm verb pkgid [email protected]
npm verb cwd /Users/prabhakarv/Documents/GitHub/haystack-ui
npm verb Darwin 18.5.0
npm verb argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "start:dev" "--verbose"
npm verb node v11.10.1
npm verb npm  v6.7.0
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start:dev: `npm run clean && npm run codegen && npm run test && concurrently -r "npm run watch" "wait-on public/bundles/report.html && npm run start:devserver"`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] start:dev script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm verb exit [ 1, true ]
npm timing npm Completed in 1135ms

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/prabhakarv/.npm/_logs/2020-01-21T14_38_59_956Z-debug.log```

dead already

fun title in malaysian slang. The zipkin quickstart dies recently. Mind looking into it?

screen shot 2018-12-13 at 4 35 02 pm

Docker container does not respect resource limits

Scenario
Deploy a docker container with the latest haystack ui tag and specify a cpu limit.

Expected
The Node process respects the resource limits and only sees the number of cpus allocated.

Actual
The Node process sees all the cpus of the host.

Notes
The problem affects the performance of the server by doing an unnecessary number of forks here:

cluster.fork();

This is worse when running in a highly virtualized platform like Kubernetes where it's common to define cpu (and memory!) limits for each container.

I believe this is similar to this issue that affects Java containers.

If Node does not provide a solution a possible workaround would be to expose the number of cpus as a property and allow users to override it.

npm install failure

Running npm install in office comes following error, how to fix this:

haystack-ui git:(master) npm install

> [email protected] install /Users/liangwang/Documents/Project/haystack-ui/node_modules/canvas
> node-gyp rebuild

Package cairo was not found in the pkg-config search path.
Perhaps you should add the directory containing `cairo.pc'
to the PKG_CONFIG_PATH environment variable
No package 'cairo' found
gyp: Call to './util/has_lib.sh freetype' returned exit status 0 while in binding.gyp. while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/Users/liangwang/.nvm/versions/node/v8.1.2/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:336:16)
gyp ERR! stack     at emitTwo (events.js:125:13)
gyp ERR! stack     at ChildProcess.emit (events.js:213:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:197:12)
gyp ERR! System Darwin 16.7.0
gyp ERR! command "/Users/liangwang/.nvm/versions/node/v8.1.2/bin/node" "/Users/liangwang/.nvm/versions/node/v8.1.2/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/liangwang/Documents/Project/haystack-ui/node_modules/canvas
gyp ERR! node -v v8.1.2
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] 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!     /Users/liangwang/.npm/_logs/2017-11-06T22_26_15_105Z-debug.log

[Feature Request] Zoom in for trace view

When viewing a trace with a lot of spans, it would be good to be able to zoom into a specific period of time within the trace, filtering only the spans in that specific timeline.

Support for additional comparisons beyond equality in Universal Search

For at least one of the tags that we use, the value of the tag is a numerical value based on a sliding scale rather than a distinct value. It would be great for Universal Search to support the ability to search on all values greater than a given value, or less than a given value, or between two different values.

For example, our tag is something like quality-rating with a scale from -10 to 10, where > 0 is better, and < 0 is worse. Currently, if I wanted to get all the bad ones, I'd have to make 10 different searches for quality-rating = -1, quality-rating = -2, etc.

[Feature Request] Support negation for search

Often when I am doing a search and I have narrowed down to my serviceName I would like to see trends and traces for everything except one specific operationName. Is there anyway that search can support this feature?

serviceName=my-service operationName!=slowCall

Trends, Alerts, and Service Graph tabs disappear

Steps to reproduce:

  1. Navigate to the traces of a service, like https://<haystackUrl>/search?time.preset=1h&serviceName=<serviceName>&tabId=traces
  2. Click a bar in the timeline:
    image

Expected result:
The Trends page opens for the correct time window, with all UI components rendered properly

Actual result:
The Trends page opens, but the tab options are gone (see below)
image

Support wildcards within search

We have a use case where we have a bunch of values for certain tags, and those tags are generally related.

For instance, we have a region tag with values like:
region-a-<uuid1>
region-a-<uuid2>
region-a-<uuid3>
region-b-<uuid4>
region-b-<uuid5>
region-b-<uuid6>

As it exists currently, our users have to keep in mind the UUIDs that they're looking for. It's not unreasonable, but it would make things easier if, seeking all the traces from region a, they could simply put region: region-a-*

npm install error with nodejs 12.13.1

gyp WARN EACCES attempting to reinstall using temporary dev dir "/root/haystack-ui-1.1.8/node_modules/canvas/.node-gyp"
gyp WARN install got an error, rolling back install
gyp WARN install got an error, rolling back install
gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, stat '/root/haystack-ui-1.1.8/node_modules/canvas/.node-gyp/12.13.1'
gyp ERR! System Linux 3.10.0-1062.7.1.el7.x86_64
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 /root/haystack-ui-1.1.8/node_modules/canvas
gyp ERR! node -v v12.13.1
gyp ERR! node-gyp -v v5.0.5
gyp ERR! not ok
npm WARN [email protected] requires a peer of acorn@^6.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN [email protected] requires a peer of ajv@^6.9.1 but none is installed. You must install peer dependencies yourself.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] 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! /root/.npm/_logs/2019-12-06T02_23_16_494Z-debug.log

Change trends-connector to fetch data from MT through tags based query.

We need to change Haystack UI to fetch trends from MT through tags based query instead of metric key query to support ExpediaDotCom/haystack-trends#155 fixes.

Sample curl calls :

http://metrictank:6060/render?target=duration%3Binterval%3DFifteenMinute%3Bmtype%3Dgauge%3BoperationName%3Dc29tZS1zcGFu%3Bproduct%3Dhaystack%3BserviceName%3Dc29tZS1zZXJ2aWNl%3Bstat%3D%2A%3Bunit%3Dmircoseconds&from=-24h&until=now&format=json&maxDataPoints=840

Essentially the target changes to something like this :

For duration :
target=duration;interval=FifteenMinute;mtype=gauge;operationName=sample-operation;product=haystack;serviceName=sample-service;stat=max;unit=mircoseconds

For count :
target=success-span;interval=FifteenMinute;mtype=gauge;operationName=sample-operation;product=haystack;serviceName=sample-service;stat=max;unit=short

Few of the things to keep in mind for query generation:

  1. The target value is url encoded.
  2. serviceName and OperationName would be encoded with MetricPointNameEncoder as it is happening now before URL encoding.

Clicks on bubbles in Service Performance graph sometimes fail

Occasionally, clicking on certain (usually smaller) service bubbles in the Service Performance graph does not trigger a redirect. Repeated clicks (sometimes as many as five or six) are needed to actually get the desired effect of going to the service's page.

We're currently running the following versions:

  • 1.0.3 of haystack-ui (we've seen this in 1.0.1 as well)
  • 1.0.5 of haystack-traces (we've seen this in 1.0.3 as well)
  • 1.0.2 of haystack-trends (we've seen this in 1.0.1 as well)

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.