GithubHelp home page GithubHelp logo

node-console-stamp's Introduction

Console-stamp 3

npm Downloads Build Status

This module lets you take control over the output from console logging methods in Node.js. Such as prefixing the log statement with timestamp information, log levels, add coloured output and much more.

Usage

Install

npm install console-stamp

Patching the console

You need to provide the console object to console-stamp in order to patch the builtin console.

require( 'console-stamp' )( console );

console.log('Hello, World!');

The default behaviour is to add a prefix to each log statement with timestamp information and log level.

[10.02.2019 15:37:43.452] [LOG]   Hello, World!

You can change this by provinding an options object as the second parameter.

require('console-stamp')(console, { 
    format: ':date(yyyy/mm/dd HH:MM:ss.l)' 
} );

console.log('Hello, World!');
[2020/01/19 13:56:49.383] Hello, World!

Notice how the log level is suddenly missing. You need to add it specifically to the format string.

require('console-stamp')(console, { 
    format: ':date(yyyy/mm/dd HH:MM:ss.l) :label' 
} );

console.log('Hello, World!');
[2020/01/19 23:20:30.371] [LOG] Hello, World!

Read more about how to customize the formatting of the log statement below.

Patch your own console

You can also provide a custom console with its own stdout and stderr like this:

const fs = require('fs');
const output = fs.createWriteStream('./stdout.log');
const errorOutput = fs.createWriteStream('./stderr.log');
const logger = new console.Console(output, errorOutput);

require('console-stamp')(logger, {
    stdout: output,
    stderr: errorOutput
});

Everything is then written to the files.

NOTE: If stderr isn't passed, warning and error output will be sent to the given stdout.

Backwards incompatibility with 2.x versions

console-stamp v3 has been rewritten adding tokens as a new and easier way to customize and extend your logging output.

With that in mind, some consessions has been made and you will probably need to update your console-stamp integration.

options.pattern is replaced by options.format

options.format is now the place where you provide the format of the logging prefix using tokens.

For example, { pattern: 'dd.mm.yyyy HH:MM:ss.l'} is replaced by { format: ':date(dd.mm.yyyy HH:MM:ss.l)' }.

PS: Providing a string with a date format based on dateformat as a second parameter is still supported.

options.label is gone

The log level label (INFO, DEBUG etc.) is now only shown if the token :label is part of the format string in options.format. It is part of the default format.

options.labelSuffix and options.labelPrefix are also gone as now you can provide these values directly in the options.format string.

Configuration

Here are some examples on how to customize your log statements with console-stamp.

Only update timestamp format

Without any other customizations you can provide the timestamp format directly.

require('console-stamp')( console, 'yyyy/mm/dd HH:MM:ss.l' );

To set the timestamp format using the options object you can use the date token.

require('console-stamp')(console, { 
    format: ':date(yyyy/mm/dd HH:MM:ss.l)' 
} );

console.log('Hello, World!');
[2020/01/19 23:08:39.202] Hello, World!

Add coloured output

console-stamp uses the excellent chalk library to provide coloured output and other styling.

require( 'console-stamp' )( console, {
    format: ':date().blue.bgWhite.underline :label(7)'
} );

You can also simply place some text in parenthesis, and then add your styling to that.

require( 'console-stamp' )( console, {
    format: '(->).yellow :date().blue.bgWhite.underline :label(7)'
} );

Note that by sending the parameter --no-color when you start your node app, will prevent any colors from console.

$ node my-app.js --no-color

For more examples on styling, check out the chalk documentation.

Tokens

There are only three predefined tokens registered by default. These are:

:date([format][,utc])[.color]
:label([padding])[.color]
:msg[.color]

:date([format][,utc])

  • format {String}
    Containing the date format based on dateformat
    Default: 'dd.mm.yyyy HH:MM:ss.l'
  • utc {Boolean}
    Set to true will return UTC-time
    Default: false

:label([padding])

  • padding {Number}
    The total length of the label, including the brackets and padding
    Default: 7

:msg

  • If the :msg token is provided in format, the output from the console will be returned in its place, otherwise the console output will be added as the last output, with no formatting.

Create a custom token

To define your own token, simply add a callback function with the token name to the tokens option. This callback function is expected to return a string. The value returned is then available as ":foo()" in this case:

require( 'console-stamp' )( console, {
    format: ':foo() :label(7)',
    tokens:{
        foo: () => {
            return '[my prefix]';
        }
    }
} );

console.log("Bar");
[my prefix] [LOG]   Bar

The token callback function is called with one argument, representing an Object with the following properties:

  • method {String}
    The invoked method
  • msg {String}
    The console output as a string
  • params {Array}
    The token parameters (ex: The token call :label(7) will have params [7])
  • tokens {Object}
    All the defined tokens, incl. the defaults
  • defaultTokens {Object}
    Only the default tokens, even if it's been redefined in options
Example

Here we are making a custom date token called mydate using moment.js to format the date

const moment = require('moment');
moment.locale('ja');

require( 'console-stamp' )( console, {
    format: ':mydate() :label(7)',
    tokens:{
        mydate: () => {
            return `[${moment().format('LLLL')}]`;
        }
    }
} );

console.log('This is a console.log message');
console.info('This is a console.info message');
console.debug('This is a console.debug message');
console.warn('This is a console.warn message');
console.error('This is a console.error message');

Result:

[2016年5月12日午前11時10分 木曜日] [LOG]   This is a console.log message
[2016年5月12日午前11時10分 木曜日] [INFO]  This is a console.info message
[2016年5月12日午前11時10分 木曜日] [DEBUG] This is a console.debug message
[2016年5月12日午前11時10分 木曜日] [WARN]  This is a console.warn message
[2016年5月12日午前11時10分 木曜日] [ERROR] This is a console.error message

Custom Methods

The option.extend option enables the extension or modification of the logging methods and their associated log levels:

The default logging methods and their log levels are as follows:

levels = {
    error: 1,
    warn: 2,
    info: 3,
    log: 4,
    debug: 4
};

The extend option enables the usage of custom console logging methods to be used with this module, for example:

// Extending the console with a custom method
console.fatal = function(msg) {
    console.org.error(msg);
    process.exit(1);
}

// Initialising the output formatter
require( 'console-stamp' )( console, {
    extend: {
        fatal: 1
    }
} );

Note how the console.org.error method used in the custom method. This is to prevent circular calls to console.error


API

require( 'console-stamp' )( console, [options] );

console

The global console or custom console.

options {Object|String}

The second parameter is an object with several options. As a feature this parameter can be a string containing the date-format.

  • options.format {String}
    A string with date format based on dateformat
    Default: ':date(dd.mm.yyyy HH:MM:ss.l) :label'

  • options.tokens {Object}
    Containing token-functions. See example here.

  • options.include {Array}
    An array containing the methods to include in the patch
    Default: ["debug", "log", "info", "warn", "error"]

  • options.level {String}
    A string choosing the most verbose logging function to allow.
    Default: log

  • options.extend {Object}
    An object describing methods and their associated log level, to extend the existing method <-> log level pairs.
    For an example see Custom methods.

  • options.stdout {WritableStream}
    A custom stdout to use with custom console.
    Default: process.stdout

  • options.stderr {WritableStream}
    A custom stderr to use with custom console.
    Default: options.stdout or process.stderr

  • options.preventDefaultMessage {Boolean}
    If set to true Console-stamp will not print out the standard output from the console. This can be used in combination with a custom message token.
    Default: false

node-console-stamp's People

Contributors

christiaanwesterbeek avatar dependabot[bot] avatar eredian avatar indeyets avatar jalavik avatar jotham avatar leonluc-dev avatar omgimalexis avatar starak avatar steffandonal avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar

node-console-stamp's Issues

Not able to use custom console.* methods

Hello!

In my code I am extending the console object with custom wrapper functions, such as console.debug(), console.fatal() etc.

Internally they just call console.log() and sometimes some minor extra code.

Now, I tried adding these method names to the options.include array, but since these function names have no levelPriority assigned, they are not returned by the getAllowedLogFunctions() and thus filtered out at https://github.com/starak/node-console-stamp/blob/master/main.js#L67.

Is there a way to amend these filters so that functions that are in the options.include array are always included?

Different colors for LOG | INFO | WARN | ERROR

Idly wondering if it's possible to optionally display different colors by type of console call, like red for error, yellowish for warning, blue for info.

Would this be a doable enhancement?

Thanks for considering it!

Console Logging Not Working

I tried to use this but it does not work. Nothing inside the file stdout.log and stderr.log

`
require('console-stamp')(console, {
format: ':date(yyyy/mm/dd HH:MM:ss.l) :label'
} );

const fs = require('fs');
const output = fs.createWriteStream('./stdout.log');
const errorOutput = fs.createWriteStream('./stderr.log');
const logger = new console.Console(output, errorOutput);

require('console-stamp')(logger, {
stdout: output,
stderr: errorOutput
});

console.log("Sad Life")
console.info("Sad Life")
console.warn("Sad Life")
console.debug("Sad Life")
console.error("Sad Life")
`

format doesn't work.

setup:

require( 'console-stamp' )( console, { format: 'HH:MM:ss' })
console.log( '123' )

result:

HH:MM:ss 123

What am I doing wrong?

[node v10] assert output broken (assert internally calls warn?!)

I have a problem regarding the assert method.

I am using node v10 and according to the docs (https://nodejs.org/api/console.html#console_console_assert_value_message) the implementation of assert did change with v10.0.0.

The following code:

require('console-stamp')(console, { pattern: 'dd/mm/yyyy HH:MM:ss.l' });
console.assert(false, "test");

outputs:

[27/09/2018 20:34:15.680] [ASSERT][27/09/2018 20:34:15.687] [WARN]  Assertion failed: test

whereas expected is something like:

[27/09/2018 20:34:15.680] [ASSERT] Assertion failed: test

Seems like assert internally calls the warn method.

Missing stack traces?

Hi, Am I missing something? It seems if an exception is throw the stack trace is missing. Is there a way to include the stack trace in the case of an error?

Can I use a console method without patching?

For instance, in our cli tool, we would like to print extra with console-stamp patch info when excuting some commands. It works perfect~

[26/11/2018 15:28:47.995] [LOG]    [119ms] finished jsx build
[26/11/2018 15:28:48.216] [LOG]    [350ms] finished js build 

however, we don't want to print the prefix when the cli tool prints a help message:

[26/11/2018 15:28:47.995] [LOG]  Usage: my-cli <command> [options]
[26/11/2018 15:28:47.995] [LOG] 
[26/11/2018 15:28:47.995] [LOG] Options:
[26/11/2018 15:28:47.995] [LOG]   -V, --version  output the version number
[26/11/2018 15:28:47.995] [LOG]   -h, --help     output usage information

we prefer:

Usage: my-cli <command> [options]

Options:
  -V, --version  output the version number
  -h, --help     output usage information

I am wondering how to implement this, and i tried this:

console.commonLog = console.log;
require('console-stamp')(console, options);

but it does not work.

Allow for the disabling of certain logging levels.

I'd love to use this library for controlling how much logging is actually output. Is it possible to add an option similar to include that allows you to disable functions?

If not, I'll make another package that does the same style patching, but for that to work and to maintain compatibility with your implementation I'd need the patched indicator's name to change to include the name of this package or something similar - so they can be double-patched and then unpatched.

Use custom time-stamp library

Hello,

I would like to use moment.js to get a custom timestamp. Is it possible to define a function that returns the timestamp to be used or to remove the timestamp (so that I can add a custom one with the meta-data)

bug when extending console-stamp

When I define:

require('console-stamp')(console, {
 pattern:"dd/mm/yyyy HH:MM:ss.l",
 extend:{debug:5},
 include:["debug", "info", "warn", "error"],
 level:"debug"
});

and use it somewhere:

console.debug('startvalue ' + s.format('HH:mm:ss,SSS') + ' is valid');

I get:

[12/02/2017 22:06:13.938] [DEBUG] /home/pi/escape/node_modules/console-stamp/main.js:153
return org.apply( con, args );
^

TypeError: Cannot read property 'apply' of undefined
at Console.con.(anonymous function) [as debug] (/home/pi/escape/node_modules/console-stamp/main.js:153:23)
at generatefile (/home/pi/escape/countdowngenerator.js:82:25)
at /home/pi/escape/countdowngenerator.js:48:7
at /home/pi/escape/countdowngenerator.js:68:11
at ChildProcess.exithandler (child_process.js:202:7)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:192:7)
at maybeClose (internal/child_process.js:890:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)

I use version:

pi@raspberrypi:~/escape $ npm -v console-stamp
4.1.2

pi@raspberrypi:~/escape $ node -v
v7.5.0

Custom stdout / stderr

The fact that you pass in a console object somewhat implies that you can use this module without messing with any global stuff, however, it always uses process.stdout and process.stderr and not the streams the console object actually uses.

It should ether use the consols own streams or (if it is not possible to get those streams) it should provide options to set them explicitly.

Thanks for your consideration!

console.table

When you try to print to console in a new line, for example table, it adds some spaces in front of log

For example when printing a table is more obvious

image

Try to add an suffix \n or \r\n .. none worked

DST

Hello.

I'm in Italy (CET) and we currently have daylight saving, so it's UTC+2. but console-stamps seems to be ignoring that and shows time as UTC+1.

Sorry if this issue is not related to console-stamp, would appreciate if you can redirect me to the proper place.

Thanks

Correct usage with workers?

What is the correct way to use this with workers? When I use both console.log and console.error (or console.warn) inside a worker, the output appears to be all over the place:

[2021/07/27 12:57:37.738] [LOG] [2021/07/27 12:57:37.739] [ERROR] Log 1 from worker
[2021/07/27 12:57:37.740] [LOG] Log 2 from worker
Error 1 from worker
[2021/07/27 12:57:37.740] [ERROR] Error 2 from worker

test-parent.js

const { Worker } = require('worker_threads')
const worker = new Worker('./test-worker.js')

test-worker.js

require('console-stamp')(console, { format: ':date(yyyy/mm/dd HH:MM:ss.l) :label' })
console.log('Log 1 from worker')
console.error('Error 1 from worker')
console.log('Log 2 from worker')
console.error('Error 2 from worker')

I'm using Ubuntu 20.04 and node v14.15.4. Thanks!

ChainAlert: npm package release (3.0.4) has no matching tag in this repo

Dear console-stamp maintainers,
Thank you for your contribution to the open-source community.

This issue was automatically created to inform you a new version (3.0.4) of console-stamp was published without a matching tag in this repo.

Our service monitors the open-source ecosystem and informs popular packages' owners in case of potentially harmful activity.
If you find this behavior legitimate, kindly close and ignore this issue. Read more

badge

not working in cosole log

customConsole.log.apply( context, arguments );
stream.write( ${generatePrefix( method, config, customConsoleStream.last_msg )} );

in index.js,I think in line 32 is wrong because the arguments should inclue generatePrefix(xxx)....

just like this:
let prefix = ${generatePrefix( method, config, customConsoleStream.last_msg )}
arguments.unshift(prefix)
customConsole.log.apply( context, arguments );

i just fix it with these code .

get timestamp in IST

So using this module with default settings gives me time in UTC.
How can i change and get it in IST format?

Color Options

Is there a way to color code the "label" based on if its a log or error etc..?

[Mon Jun 10 2019 19:41:18] [LOG]
[Mon Jun 10 2019 19:41:18] [ERROR]

It would be cool to see "ERROR" in red so it stands out from all the "LOG"s

Using in conjunction with a logger that creates separate out.log and err.log files

Full disclosure: the logger in question is what comes with a node-windows package that creates a Windows service.

I know. I'm sorry, too. I occasionally think fondly of when I originally set this up on an Ubuntu server...

But anyway, that piece of middleware creates separate log files based on protocol -- error and log. And unfortunately, when I use console-stamp, the timestamp portion winds up in the wrong log file.

.out.log:

[14:09:55.404] Test
[14:09:55.404] [14:09:55.419] Express server listening on port xxxx in development mode.

.err.log:

Test 2

Obviously that middle timestamp should be in the error log.

A quick glance at the source code tells me the issue is that process.stdout is being used to write timestamps; a check to use process.stderr in the event of console.error calls would fix it.

colors module in version 0.2.0-RC1

colors module dependency is not available in package.json. Should be added.

without it getting error as below

Error: Cannot find module 'colors'

default export ts

the type says there is a default export, but runtime doesn't say so.

import console_stamp from 'console-stamp'; (without esModuleInterop)

results into runtime error:
TypeError: console_stamp_1.default is not a function

I guess either the default export is missing, or the types sohould be fixed?

Thanks a lot!

Browser compatibility

It would be cool if this could run in the browser. Then I could tee output from the Karma test runner to a txt file and process the timestamps.

Usage with esm helper

Him how to use node-console-stamp with the esm helper?

require('console-stamp')(myConsole, options);

turnes into:
import * from "console-stamp",

but how to perform console patching?

custom file output (Custom Console)

For whatever reason I am just not getting this where is console_stamp defined?

require('console-stamp')(console, {
    colors: {
        stamp: 'yellow',
        label: 'white',
        metadata: 'green'
    }
});

const output = fs.createWriteStream(`./logs/stdout.${getLogFileDate()}.log`);
const errorOutput = fs.createWriteStream(`./logs/stderr.${getLogFileDate()}.log`);
const logger = new console.Console(output, errorOutput);

console_stamp(logger, {
    stdout: output,
    stderr: errorOutput
});

I thought it might be from const console_stamp = require('console-stamp') but that proved to be incorrect. I keep getting the error TypeError: console_stamp is not a function

It does not print the log by console when I have a file to save it

I make a small introduction to the problem

I have version 3 of console-stamp and I want to save a log file by date.

When I have everything configured ... I see that it is saved in the file (incorrectly ... I explain now why) but it does not print by console. Ideally, the two would work at the same time and the log level could be configured for each of them.

Now I explain the problem that is inside the log file ... I have console-stamp with colors and that is what is saving me in the log

Down here a few pieces of my code

-> Console Output

Starting Script
Environment is 'development'
Connecting to database...
Timeout: 5000
Configure connection...

-> Log File
�[35m[24.03.2020 13:49:51]�[39m �[34m[INFO] �[39m �[35m[24.03.2020 13:49:51]�[39m �[34m[INFO] �[39m �[35m[24.03.2020 13:49:51]�[39m

-> Code

const fs = require('fs');
require('console-stamp')(console, {
  format: ':date(dd.mm.yyyy HH:MM:ss, true).magenta :label(7)',
  tokens: {
    label: ( obj ) => {
      const color = {
        log: 'cyanBright',
        error: 'red',
        info: 'blue',
        warn: 'yellow',
      }[obj.method];

      return require('chalk')`{${color || 'reset'} ${
        obj.defaultTokens.label( obj )
      }}`;
    },
  },
  stdout: fs.createWriteStream(`./stderr-${new Date().getTime()}.log`),
});

Replace chalk by ansis?

I played a bit with colored messages and since I also still have CommonJS projects, and the latest version of chalk no longer supports CommonJS, it was not possible (without using an old chalk version) in the way that was used in your example.

I then solved it with ansis. Wouldn't that also be a good replacement for this project? ansis has a few other advantages besides CommonJS support - check out this comparison.

I could understand if you reject this, as it would probably a breaking change.

Logs errors inside "log"

When I use console-stamp (v2) with console.error in Node.js 12.16.2, I get the error logged inside a "log" entry:

[... timestamp ...] LOG [... timestamp ...] ERROR etc

I assume this is because console.error is using console.log internally, but there must be a way round this because the documentation doesn't look like this. So what am I doing wrong?

Error in "chalk": "^4.0.0"

I am getting the following error when trying to use the latest 4.0.0 version. I have even rolled back and am getting the same issue.

node_modules\chalk\source\templates.js:115
throw new Error('Found extraneous } in Chalk template literal');
^
Error: Found extraneous } in Chalk template literal
at O:\XXXXXX\node_modules\chalk\source\templates.js:115:11
at String.replace ()
at module.exports (O:\XXXXXX\node_modules\chalk\source\templates.js:105:12)
at chalkTag (O:\XXXXXX\node_modules\chalk\source\index.js:212:9)
at chalk.template (O:\XXXXXX\node_modules\chalk\source\index.js:40:38)
at msg (O:\XXXXXX\server.js:14:25)
at O:\XXXXXX\node_modules\console-stamp\lib\utils.js:49:27
at String.replace ()
at O:\XXXXXX\node_modules\console-stamp\lib\utils.js:48:29
at Array.forEach ()

Here is my actual code:

const chalk = require('chalk');
const lMap = {
//log: chalk.hex('#183e69'),
log: '',
error: 'red',
info: 'blue',
warn: 'yellow',
debug: 'cyan'
}
require('console-stamp')(console, {
format: '(#).yellow :date(yy-mm-dd HH:MM:ss.l).green (#).yellow :msg',
tokens: {
msg: ( { method, msg } ) => {
return chalk{${lMap[method] || 'reset'} ${msg}};
}
}
});

global.Log = console.log.bind(console);
global.ILog = console.info.bind(console);
global.WLog = console.warn.bind(console);
global.ELog = console.error.bind(console);
global.DLog = console.debug.bind(console);

Has anyone else run into this issue.

Could you help remove the vulnerability (introduced by package trim-newlines) ?

Hi,

Issue

1 vulnerability (high severity) is introduced in console-stamp:
Vulnerability CVE-2021-33623 (high severity) is detected in package trim-newlines (versions: <3.0.1,>=4.0.0 <4.0.1): https://snyk.io/vuln/SNYK-JS-TRIMNEWLINES-1298042

The above vulnerable package is referenced by console-stamp via:
[email protected][email protected][email protected][email protected]

Solution

Since [email protected].* is transitively referenced by 91 downstream projects (e.g., adr-log 2.2.0 (latest version), bespoken-tools 2.4.94 (latest version), zeebe-node 1.3.2 (latest version), bespoken-batch-tester 0.10.3 (latest version), @devexperts/tools 1.0.0-alpha.14 (latest version))

If [email protected].* removes the vulnerable package from the above version, then its fixed version can help downstream users decrease their pain.

Could you help update packages in this version?

Fixing suggestions

In [email protected].*, you can kindly perform the following upgrades (not crossing their major versions):
dateformat ^1.0.11 ➔ 1.0.11;

Note:
dateformat 1.0.11 transitively depends on [email protected](a vulnerability CVE-2021-33623 patched version)

Thanks for your contributions to the npm ecosystem!

Best regards,
Paimon

Not work on debug mode

I tried this:
require("console-stamp")(console);
It works when I run the node program from the command line, but does not work when I run the program from the VSCode debugger. In debug mode the console prints the regular message without a timestamp.

timezones

we need a way to change the timezone

ps: node seems to have problems with timezone on windows

Chalk Style error

Trying to log out a string that includes a filename and am getting:

deploy/node_modules/console-stamp/node_modules/chalk/source/templates.js:90
			throw new Error(`Unknown Chalk style: ${styleName}`);
			^

Error: Unknown Chalk style: csv
    at buildStyle 

A simple repro case to produce the above:

console.log('Test (1).csv');

Looks like chalk is picking up the (1) and trying to interpret the .csv that follows as a style.

Is there any way to disable the chalk styling?

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.