Git Product home page Git Product logo

node-spdlog's Introduction

node-spdlog

Spdlog bindings for Node.js

Build Status

Build Status

npm version

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

node-spdlog's People

Contributors

blackhole1 avatar cplepage avatar deepak1556 avatar dependabot[bot] avatar hsfzxjy avatar hyoshioka0128 avatar joaomoreno avatar microsoft-github-policy-service[bot] avatar microsoftopensource avatar mjbvz avatar msftgits avatar rzhao271 avatar sandy081 avatar tylerleonhardt 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

Watchers

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

node-spdlog's Issues

Enable wchar_t for file names

From @gnaggnoyil

It seems to be a node-spdlog issue as it does not define SPDLOG_WCHAR_FILENAMES macro in binding.gyp which is required by spdlog backend to be compiled with wchar filename support since Windows assumes locale-specific multibyte encoding for C's char [] Null-Terminated Character Type String by default while node.js assumes UTF-8 if I did not get it wrong.

Ref:
https://github.com/Microsoft/node-spdlog/blob/master/binding.gyp
https://github.com/gabime/spdlog/blob/v1.x/include/spdlog/details/os.h#L158

Broken in VS Code

It looks like perhaps some changes here broke VS Code. Perhaps related to how this is being built not on yarn anymore? I'm not sure, but the library is not being compiled correctly anymore and is missing symbols. I notice changes to the install script

Error relocating /root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/node_modules/spdlog/build/Release/spdlog.node: _ZSt28__throw_bad_array_new_lengthv: symbol not found
    at Object.Module._extensions..node (node:internal/modules/cjs/loader:1187:18)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.m._load (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:125:14199)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at bindings (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/node_modules/bindings/bindings.js:112:48)
    at Object.<anonymous> (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/node_modules/spdlog/index.js:3:35)
    at Module._compile (node:internal/modules/cjs/loader:1103:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.m._load (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:125:14199)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at i (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:5:98)
    at n.load (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:4:1651)
    at _.load (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:3:9105)
    at u (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:5:9325)
    at Object.errorback (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:5:9444)
    at _.triggerErrorback (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:3:9399)
    at /root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:3:9150
    at n.load (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:4:1668)
    at _.load (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:3:9105)
    at u (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:5:9325)
    at h._loadModule (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:5:9453)
    at h._resolve (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:6:452)
    at h.defineModule (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:5:5548)
    at h._relativeRequire (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:5:6172)
    at e (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/loader.js:5:8503)
    at R.C (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:88:8815)
    at new Promise (<anonymous>)
    at R (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:88:8795)
    at D.n (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:88:9925)
    at new D (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:88:9795)
    at P.m (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:106:954)
    at P.createLogger (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:88:5469)
    at new P (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:91:13841)
    at S.j (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:84:1296)
    at /root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:84:3032
    at z.a (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:66:48073)
    at z.get value [as value] (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:66:48227)
    at Object.get (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:84:3438)
    at new u (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:115:1150)
    at c (/root/.vscode-server-insiders/bin/f31dffc7f9b93a1cdef21243ec30dea7d489a615-insider/out/vs/workbench/api/node/extensionHostProcess.js:125:18641)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

microsoft/vscode#178748 (comment)

Creating a rotating logger is blocking long time

Re microsoft/vscode#70998

Expose following functions that creates rotating logger sync and async, former does not create the parent directory and later does.

  • createRotatingLogger - Creates the logger without checking and creating parent directory

  • createRotatingLoggerAsync - Creates the logger by checking and creating parent directory

Test suite fails on ppc64le

niko@talos2 ~/devel/node-spdlog $ git submodule update --init --recursive
Submodule 'deps/spdlog' (https://github.com/gabime/spdlog.git) registered for path 'deps/spdlog'
Cloning into '/home/niko/devel/node-spdlog/deps/spdlog'...
Submodule path 'deps/spdlog': checked out 'ad0e89cbfb4d0c1ce4d097e134eb7be67baebb36'
niko@talos2 ~/devel/node-spdlog $ npm_config_nodedir=/usr/include/electron-26/node npm install

> @vscode/[email protected] install
> node-gyp rebuild

gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | linux | ppc64
gyp info find Python using Python version 3.11.5 found at "/usr/lib/python-exec/python3.11/python3"
gyp info spawn /usr/lib/python-exec/python3.11/python3
gyp info spawn args [
gyp info spawn args   '/home/niko/.local/share/fnm/node-versions/v18.17.1/installation/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/home/niko/devel/node-spdlog/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/niko/.local/share/fnm/node-versions/v18.17.1/installation/lib/node_modules/npm/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/usr/include/electron-26/node/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/usr/include/electron-26/node',
gyp info spawn args   '-Dnode_gyp_dir=/home/niko/.local/share/fnm/node-versions/v18.17.1/installation/lib/node_modules/npm/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/usr/include/electron-26/node/$(Configuration)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/home/niko/devel/node-spdlog',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/home/niko/devel/node-spdlog/build'
  CXX(target) Release/obj.target/spdlog/src/main.o
In file included from /usr/include/electron-26/node/include/node/v8-object.h:10,
                 from /usr/include/electron-26/node/include/node/v8-array-buffer.h:13,
                 from /usr/include/electron-26/node/include/node/v8.h:24,
                 from /usr/include/electron-26/node/include/node/node.h:79,
                 from ../node_modules/nan/nan.h:60,
                 from ../src/main.cc:7:
/usr/include/electron-26/node/include/node/v8-persistent-handle.h:245:44: warning: ‘template<class T> struct v8::CopyablePersistentTraits’ is deprecated: Use v8::Global instead [-Wdeprecated-declarations]
  245 |   using CopyablePersistent = Persistent<T, CopyablePersistentTraits<T>>;
      |                                            ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/electron-26/node/include/node/v8-persistent-handle.h:244:48: note: declared here
  244 | struct V8_DEPRECATED("Use v8::Global instead") CopyablePersistentTraits {
      |                                                ^~~~~~~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h:206:16: warning: ‘template<class T> struct v8::CopyablePersistentTraits’ is deprecated: Use v8::Global instead [-Wdeprecated-declarations]
  206 |     public v8::CopyablePersistentTraits<T> {};
      |                ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/electron-26/node/include/node/v8-persistent-handle.h:244:48: note: declared here
  244 | struct V8_DEPRECATED("Use v8::Global instead") CopyablePersistentTraits {
      |                                                ^~~~~~~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h: In function ‘bool Nan::IdleNotification(int)’:
../node_modules/nan/nan.h:686:63: warning: ‘bool v8::Isolate::IdleNotificationDeadline(double)’ is deprecated: Use MemoryPressureNotification() to influence the GC schedule. [-Wdeprecated-declarations]
  686 |     return v8::Isolate::GetCurrent()->IdleNotificationDeadline(
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
  687 |         idle_time_in_ms * 0.001);
      |         ~~~~~~~~~~~~~~~~~~~~~~~~                               
In file included from /usr/include/electron-26/node/include/node/v8-initialization.h:13,
                 from /usr/include/electron-26/node/include/node/v8.h:34:
/usr/include/electron-26/node/include/node/v8-isolate.h:1297:8: note: declared here
 1297 |   bool IdleNotificationDeadline(double deadline_in_seconds);
      |        ^~~~~~~~~~~~~~~~~~~~~~~~
../src/main.cc: At global scope:
/usr/include/electron-26/node/include/node/node.h:1010:7: warning: cast between incompatible function types from ‘void (*)(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE)’ {aka ‘void (*)(v8::Local<v8::Object>)’} to ‘node::addon_register_func’ {aka ‘void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, void*)’} [-Wcast-function-type]
 1010 |       (node::addon_register_func) (regfunc),                          \
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/electron-26/node/include/node/node.h:1044:3: note: in expansion of macro ‘NODE_MODULE_X’
 1044 |   NODE_MODULE_X(modname, regfunc, NULL, 0)  // NOLINT (readability/null_usage)
      |   ^~~~~~~~~~~~~
../src/main.cc:18:1: note: in expansion of macro ‘NODE_MODULE’
   18 | NODE_MODULE(spdlog, Init)
      | ^~~~~~~~~~~
  CXX(target) Release/obj.target/spdlog/src/logger.o
In file included from /usr/include/electron-26/node/include/node/v8-object.h:10,
                 from /usr/include/electron-26/node/include/node/v8-array-buffer.h:13,
                 from /usr/include/electron-26/node/include/node/v8.h:24,
                 from /usr/include/electron-26/node/include/node/node.h:79,
                 from ../node_modules/nan/nan.h:60,
                 from ../src/logger.h:10,
                 from ../src/logger.cc:12:
/usr/include/electron-26/node/include/node/v8-persistent-handle.h:245:44: warning: ‘template<class T> struct v8::CopyablePersistentTraits’ is deprecated: Use v8::Global instead [-Wdeprecated-declarations]
  245 |   using CopyablePersistent = Persistent<T, CopyablePersistentTraits<T>>;
      |                                            ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/electron-26/node/include/node/v8-persistent-handle.h:244:48: note: declared here
  244 | struct V8_DEPRECATED("Use v8::Global instead") CopyablePersistentTraits {
      |                                                ^~~~~~~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h:206:16: warning: ‘template<class T> struct v8::CopyablePersistentTraits’ is deprecated: Use v8::Global instead [-Wdeprecated-declarations]
  206 |     public v8::CopyablePersistentTraits<T> {};
      |                ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/electron-26/node/include/node/v8-persistent-handle.h:244:48: note: declared here
  244 | struct V8_DEPRECATED("Use v8::Global instead") CopyablePersistentTraits {
      |                                                ^~~~~~~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h: In function ‘bool Nan::IdleNotification(int)’:
../node_modules/nan/nan.h:686:63: warning: ‘bool v8::Isolate::IdleNotificationDeadline(double)’ is deprecated: Use MemoryPressureNotification() to influence the GC schedule. [-Wdeprecated-declarations]
  686 |     return v8::Isolate::GetCurrent()->IdleNotificationDeadline(
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
  687 |         idle_time_in_ms * 0.001);
      |         ~~~~~~~~~~~~~~~~~~~~~~~~                               
In file included from /usr/include/electron-26/node/include/node/v8-initialization.h:13,
                 from /usr/include/electron-26/node/include/node/v8.h:34:
/usr/include/electron-26/node/include/node/v8-isolate.h:1297:8: note: declared here
 1297 |   bool IdleNotificationDeadline(double deadline_in_seconds);
      |        ^~~~~~~~~~~~~~~~~~~~~~~~
  SOLINK_MODULE(target) Release/obj.target/spdlog.node
  COPY Release/spdlog.node
make: Leaving directory '/home/niko/devel/node-spdlog/build'
gyp info ok 

added 83 packages, and audited 84 packages in 35s

20 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
niko@talos2 ~/devel/node-spdlog $ ELECTRON_RUN_AS_NODE=1 /usr/lib64/electron-26/electron ./node_modules/.bin/mocha


  API
    ✔ Version
    ✔ Logger is present
Segmentation fault (core dumped)
talos2 ~ # coredumpctl list
TIME                             PID  UID  GID SIG     COREFILE EXE                                                                                  SIZE
Wed 2023-09-06 10:19:13 CEST   17392 1000 1000 SIGSEGV present  /usr/lib64/electron-26/electron                                                      7.0M
talos2 ~ # coredumpctl gdb 17392
           PID: 17392 (electron)
           UID: 1000 (niko)
           GID: 1000 (niko)
        Signal: 11 (SEGV)
     Timestamp: Wed 2023-09-06 10:19:12 CEST (26s ago)
  Command Line: /usr/lib64/electron-26/electron ./node_modules/.bin/mocha
    Executable: /usr/lib64/electron-26/electron
 Control Group: /user.slice/user-1000.slice/[email protected]/session.slice/vte-spawn-bc9c63ba-b11d-4ae2-a027-0dcdc029825a.scope
          Unit: [email protected]
     User Unit: vte-spawn-bc9c63ba-b11d-4ae2-a027-0dcdc029825a.scope
         Slice: user-1000.slice
     Owner UID: 1000 (niko)
       Boot ID: a573b4c3072b46e6abcf694bbc2c58d5
    Machine ID: b3e834569b8ff461391f5ac061feb773
      Hostname: talos2
       Storage: /var/lib/systemd/coredump/core.electron.1000.a573b4c3072b46e6abcf694bbc2c58d5.17392.1693988352000000.zst (present)
  Size on Disk: 7.0M
       Message: Process 17392 (electron) of user 1000 dumped core.

GNU gdb (Gentoo 13.2 vanilla) 13.2
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "powerpc64le-unknown-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://bugs.gentoo.org/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/lib64/electron-26/electron...
[New LWP 17392]
[New LWP 17394]
[New LWP 17395]
[New LWP 17397]
[New LWP 17396]
[New LWP 17393]
[New LWP 17399]
[New LWP 17401]
[New LWP 17398]
[New LWP 17402]
[New LWP 17403]
[New LWP 17400]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib64/libthread_db.so.1".
Core was generated by `/usr/lib64/electron-26/electron ./node_modules/.bin/mocha '.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00003fff74e224d4 in Nan::imp::FunctionCallbackWrapper(v8::FunctionCallbackInfo<v8::Value> const&) () from /home/niko/devel/node-spdlog/build/Release/spdlog.node
[Current thread is 1 (Thread 0x3fff8127b040 (LWP 17392))]
(gdb) backtrace
#0  0x00003fff74e224d4 in Nan::imp::FunctionCallbackWrapper(v8::FunctionCallbackInfo<v8::Value> const&) () at /home/niko/devel/node-spdlog/build/Release/spdlog.node
#1  0x0000000132818c34 in v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo) (this=0x3fffffa68018, handler=...) at ../../v8/src/api/api-arguments-inl.h:99
#2  v8::internal::(anonymous namespace)::HandleApiCallHelper<true>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, unsigned long*, int)
    (isolate=0x17d401140000, new_target=..., fun_data=..., receiver=..., argv=<optimized out>, argc=<optimized out>) at ../../v8/src/builtins/builtins-api.cc:113
#3  0x00000001328181c4 in v8::internal::Builtin_Impl_HandleApiConstruct(v8::internal::BuiltinArguments, v8::internal::Isolate*) (args=..., isolate=<optimized out>) at ../../v8/src/builtins/builtins-api.cc:144
#4  v8::internal::Builtin_HandleApiConstruct(int, unsigned long*, v8::internal::Isolate*) (args_length=10, args_object=<optimized out>, isolate=0x17d401140000) at ../../v8/src/builtins/builtins-api.cc:135
#5  0x000000013392b880 in Builtins_CEntry_Return1_ArgvOnStack_BuiltinExit ()
(gdb)

See also microsoft/vscode#182743

@madscientist159

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.