Code Monkey home page Code Monkey logo

luapanda's Introduction

LuaPanda

LuaPanda 是一个基于 VS Code 的 lua 代码工具,设计目标是简单易用。它支持多种开发框架,主要提供以下功能:

  • 代码补全(code completion)
  • 代码片段(snippet completion)
  • 定义跳转(definition)
  • 生成注释(comment generation)
  • 类型推断(limited type inference)
  • 代码格式化(formatting): 依赖 lua-fmt
  • 代码诊断(linting):依赖 luacheck
  • 调试器(debugger)

功能详情可以参考项目介绍。LuaPanda 支持 lua5.1- 5.4,调试器运行环境需要包含 luasocket

文档

接入和使用文档

项目介绍 | 快速试用指引 | 调试器接入指引 | 真机调试 | 其他调试能力 | 升级说明 | FAQ

更多文档

全部文档

特性

  • 支持常用的代码补全,代码片段,定义跳转,生成注释,符号列表等功能

  • 支持单步调试,断点调试,条件断点,协程调试

  • 支持lua5.1 - 5.4, win/mac 平台,支持 slua/xlua/slua-unreal 等框架

  • 支持REPL : 在断点处可以监视和运行表达式,并返回执行结果

  • 可以根据断点密集程度自动调整 hook 频率,有较好的效率

  • 支持 attach 模式,lua 运行过程中可随时建立连接

  • 使用 lua / C 双调试引擎。lua 部分可动态下发,避免打包后无法调试。C 部分效率高,适合开发期调试。

  • 支持多目标调试(multi target) ,可以同时调试多个 lua 进程。

近期更新

​ 3.2.0 版本因依赖库太旧,无法在 VSCode 1.82 上运行,可更新 3.3.0 解决此问题,详见 #171

  • V3.3.0

    • 修复了 VSCode 1.82 下插件执行错误的问题
    • lua 504 下 mac arm / win x64 已支持 chook,其他平台没有机器测试,所以未出 libpdebug 库。有需要大家可以自行打包 plibdebug 库,也可提 mr。
    • 更新了版本间的 mr
      • #108 调试启动比较晚时,已经创建的协程无法调试 / 调试堆栈碰到c函数被打断
      • #114 修复调试栈中有C函数时,监听的变量获取错误的bug
      • #109 无法动态attach到debug
      • #139 做了 5.4.3 下 luasocket sock:receive() 默认行为不一致导致的错误
      • #152 launch.json 启动参数 program 路径带有空格则启动失败
    • 因依赖库版本太旧无法兼容新版本 VSCode,删除了导出符号用于代码提示功能
  • V3.2.0

    • 代码提示支持大小写不敏感,无论输入大小写都能提示对应的符号。
    • 支持多端调试(multi target), 在一个VSCode面板中可以启动多个不同port的调试端,连接多个lua进程。
    • 支持反转client-server。目前 vscode 插件作为 server , lua 进程作为 client。支持通过设置反转,方便真机调试。
    • 支持require 路径中含有 . , 目前只支持require("A/B"), 后续支持require("A.B")的形式,无需设置
    • 在autoPath模式支持同名文件
    • 重新测试和优化真机调试,修复真机调试socket连接可能存在的问题
  • 更多更新记录

依赖和适用性

调试器功能依赖 luasocket , 可运行于 slua,slua-unreal ,xlua 等已集成 luasocket 的开发环境,在其他环境(如 console)中运行时,需要用户自行保证 luasocket 可用 。

其他依赖项目(插件中已包含,无需用户手动安装):

参与贡献

我们非常期待您的贡献,无论是完善文档,提出、修复 Bug 或是增加新特性。 如果您在使用过程中发现文档不够完善,欢迎记录下来并提交。 如果发现 bug,请通过 issues 来提交并描述相关的问题,您也可以在这里查看其它的 issue,通过解决这些 issue 来贡献代码。

请将pull request提交在 dev 分支上,经过测试后会在下一版本合并到 master 分支。更多规范请看CONTRIBUTING

腾讯开源激励计划 鼓励开发者的参与和贡献,期待你的加入。

技术支持

如有问题可以先参阅 文档, 可以使用 issues ,我会关注和回复。

luapanda's People

Contributors

dependabot[bot] avatar ericddk avatar findix avatar flashlm avatar grandzhuo avatar jashking avatar jqknono avatar stuartwang avatar wzhengsen avatar yyp009 avatar zjhongxian 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  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

luapanda's Issues

关于3.1.0版本和后续维护的想法

今天是2020年的第一个工作日,我们发布了 3.1.0 版本。 这个版本主要重构了代码,提升了lua分析工具的效率和准确度,并修复了一些bug。重构的目的是希望代码有较为清晰的模块和层级,方便其他同学加入项目。但是因为lua分析工具中有很多递归函数,从阅读的角度不是很友好,我后面尽量把注释写的清楚一点。

LuaPanda 开源有近一年的时间了。感谢大家提了很多 issues 和 pr ,帮助完善这个项目。
我目前的想法是,后续维护主要集中在修复bug,增加易用性,提升运行效率。也欢迎大家继续把使用中遇到的问题提到issue上, 我们会尽量解决。

安卓下可以attach调试,IOS下不可以

Describe the bug
上次反馈无法attach调试的问题(issue#20),当时是用的IOS模拟器,而最近需要经常打安卓包,发现同样的配置,在安卓下是没问题的。

Additional context
另外,我们的IOS包打完之后,在修改包外工作目录的代码,改动会直接对运行中的游戏生效,修改包内的代码反而不生效,不知道用了什么技术,这个会不会有影响?

Unlua与Luapanda调试时卡死的问题

复现方法:
1.启动vacode选择项目中的lua文件debug进入LuaPanda Script模式,等待UnLua项目的工程运行
2.启动UE项目,在编辑器Play
这是正常流程没有问题,在运行之后在UE中按ESC退出,此时VSC中的luapanda调试模式也退出了。
3.然后直接在UE中再次点play,此时VSC中的luapanda debug模式自动启动,但不会命中断点,UE卡住。
4.只有在VSC中把luapanda的调试重启或者停止,UE的编辑器才会恢复运行。
之后不管怎么运行都不能在vsc中断点,完全重启vsc和ue之后才可以恢复。

我觉得应该是在esc退出ue的play之后luapanda的监听进程没有关闭?

断点调试时无法识别当前的沙箱环境

用load和pcall来创建沙箱环境调用一段lua代码,在该段代码中断点时,调试时WATCH的环境仍然是全局环境,而不是沙箱环境,无法读到沙箱内部的变量

lualint在处理比较多的lua代码的时候会无法工作

目录中有代码量比较大的Lua代码的时候Lualint无法工作

如题,具体情况如下

我的项目里面存在一些从excel表导出的Lua文件,这些文件是简单的KeyValue表,数据量比较大,Key是又臭又长的驼峰命名的字符串,当数据多到一定行数后,lualint就无法工作,并且会影响所有的lua文件。

對於同一個 working dictionary,無法跨文件跳轉到自定義的 function

Describe the bug
定義跳轉功能的問題

  • 可以跳轉到 lua 原生 function,例如 require()
  • 可以跳轉到同一個文件內的自定義 function
  • 不能跳轉到不同文件內的自定義 function(在同一個 working dictionary)

To Reproduce
Steps to reproduce the behavior:

  1. 在自定義 function 上按右鍵,點「移至定義」
  2. 顯示找不到 XXX() 的定義,但 XXX() 是宣告在同一個 working dictionary 甚至是同一個 dictionary 內的 *.lua。

Expected behavior
如同跳轉到 Lua 原生 function 一樣,游標自動到達定義處。

Screenshots
image

Desktop (please complete the following information):

  • OS: macOS
  • Visual Studio

版本: 1.42.1
日期: 2020-02-11T14:44:27.652Z
Electron: 6.1.6
Chrome: 76.0.3809.146
Node.js: 12.4.0
V8: 7.6.303.31-electron.0
OS: Darwin x64 19.3.0

  • LuaPanda Version: 3.1.0
  • Framework: Nakama

Additional context

Lua Version: 5.3.5

這裡提及的 *.lua 皆能在 VSCode 上被辨認出正確格式:

  • 訊息欄有LuaPanda👍圖標
  • 右下角有image圖示

package.json配置有误。

Describe the bug
npm install安装vscode模块后无法自动下载vscode.d.ts文件,导致工程中找不到vscode模块。

To Reproduce

  1. 下载工程,运行npm install。
  2. 打开工程编译出错,找不到模块vscode。

Expected behavior
工程可以正常编译运行。

Additional context
bug原因:package.json中缺失了"postinstall": "node ./node_modules/vscode/bin/install"

Support MoonJIT as a LuaJIT successor

Since Mike Pall stepped down in LuaJIT development, project largely stalled. Soon, number of forks appeared, but the most promising one is MoonJIT. They strive to keep the compatibility, but also add a newer Lua (5.2, 5.3) features. Also they work hard on adding more platforms for JIT compilation.

https://github.com/moonjit/moonjit

Some Linux distributions already use some patches from the MoonJIT in their LuaJIT packages, e.g. Fedora and Debian.

关于代码智能提示的BUG

比如我的函数名叫GetAccount,在我输入到get之前都是正常的,我再输入a,代码提示会关闭,需要ctrl+space重新唤醒才行

LuaPanda调试UnLua时,查看TArry时会断开连接。

环境:UE4 + VSCode + LuaPanda
问题:调试UnLua时,查看C++的TArry时会断开连接,并且无法查看TArry的值。

1.我用了原版Unlua进行测试https://github.com/Tencent/UnLua
2.增加了LuaSocket库,然后在TPSCharacter.cpp里新增了一个:
UPROPERTY(BlueprintReadOnly)
TArray TestArray;
3.在BP_PlayerCharacter_C.lua中增加对TestArray存取操作,然后断点打在存取操作上。
4.开始调试,运行UE4 PIE,然后断住,尝试悬停查看TestArray数值。
5.据异常抛出应该是:
LogUnLua: Error: [Plugins/UnLua/Source/UnLua/Private/LuaCore.cpp:2647] Lua error message: [string "Common/LuaPanda.lua"]:2344: '__index' chain too long; possible loop
stack traceback:
[string "Common/LuaPanda.lua"]:2344: in function 'Common/LuaPanda.getVariableRef'
[string "Common/LuaPanda.lua"]:963: in function 'Common/LuaPanda.dataProcess'
[string "Common/LuaPanda.lua"]:1288: in function 'Common/LuaPanda.receiveMessage'
[string "Common/LuaPanda.lua"]:1331: in function 'Common/LuaPanda.debugger_wait_msg'
[string "Common/LuaPanda.lua"]:1142: in function 'Common/LuaPanda.dataProcess'
[string "Common/LuaPanda.lua"]:1288: in function 'Common/LuaPanda.receiveMessage'
[string "Common/LuaPanda.lua"]:1331: in function 'Common/LuaPanda.debugger_wait_msg'
[string "Common/LuaPanda.lua"]:999: in function 'Common/LuaPanda.dataProcess'
[string "Common/LuaPanda.lua"]:1288: in function 'Common/LuaPanda.receiveMessage'
[string "Common/LuaPanda.lua"]:1331: in function 'Common/LuaPanda.debugger_wait_msg'
...
[string "Common/LuaPanda.lua"]:999: in function 'Common/LuaPanda.dataProcess'
[string "Common/LuaPanda.lua"]:1288: in function 'Common/LuaPanda.receiveMessage'
[string "Common/LuaPanda.lua"]:1331: in function 'Common/LuaPanda.debugger_wait_msg'
[string "Common/LuaPanda.lua"]:1900: in function 'Common/LuaPanda.SendMsgWithStack'
[string "Common/LuaPanda.lua"]:1804: in function 'Common/LuaPanda.real_hook_process'
[string "Common/LuaPanda.lua"]:1710: in function 'Common/LuaPanda.debug_hook'

[开发中]新特性: 自动路径处理

路径是接入调试器时比较麻烦的一项配置。如果cwd路径配置错误,可能出现VSCode找不到文件或者断点不停地问题。

之所以需要路径配置,是因为调试器通过对比 VScode断点路径当前文件运行路径(getinfo)来判断断点是否命中。我们当前使用的策略是进行完整的路径匹配:使用cwd+getinfo和VSCode传来的断点路径作对比,完全一致才算命中。这种策略的虽然准确,但是配置较麻烦,适配性差。

我们正在开发新的路径匹配模式,暂时称为自动路径处理。原理是用getinfo获得的非完整路径和断点路径进行匹配,以判断是否命中。显而易见,这种对比策略相对宽泛,易于配置使用,也有利于真机调试。但需要用户保证工程中不存在两个同名文件,否则断点可能会指向错误。

新版本还在开发中,大家如有想法可以在这里留言。

一个说不上来是不是bug的bug

重现步骤

  1. 将“随调试器启动的可执行文件路径”配置后,如下:
    "program": "${workspaceRoot}/XXX.exe"
  2. 按F5调试,
  3. XXX.exe确实运行成功并正确调试了,
  4. 关闭XXX.exe,
  5. 多重复几次2-4步骤,
  6. 发现右下角终端窗口不会自动关闭,并且会越来越多:
    1

一个在不合理的时机随调试器启动可执行程序的问题

描述
program配置所指向的可执行程序在不合理的时机启动了

重现

  1. program指向xxx.exe;
  2. autoReconnect配置为true;
  3. 按F5启动,此时,调试是正常的;
  4. 在lua端关闭调试器连接;
  5. 此时,调试器确实重启并等待连接了;
  6. 但是,调试器又启动了一个新的xxx.exe

调试luac文件出现的问题

环境:

win10 64位
LuaPanda 3.10

重现:

1.有文件如下,且工作目录为xxx:
main.lua
xxx/src/Application.lua

2.在main中:

require("src.LuaPanda").start()
package.path = package.path .. ";src/?.lua";
require("Application")

3.在进入"Application"文件后,查看LuaPanda.getInfo():
debugger: xxx/src/LuaPanda.lua
cwd: xxx/
getinfo: @src/Application.lua
format: xxx/src/Application.lua

到现在为止,一切正常。

4.将Application.lua替换为Application.luac,重新开始1-3步骤:
debugger: xxx/src/LuaPanda.lua
cwd: xxx/
getinfo: @Application.lua <- 这里的src的目录消失了。
format: xxx/Application.lua <- 这个文件不存在,无法调试。

调试时,鼠标悬停变量显示问题

版本
LuaPanda 2.3.0
重现

local t = { x = "1"}
print("2"..t.x.."3")
print("2" .. t.x .. "3")

如:

  • 第一个print中的t.x和字符串连接符之间没有空格时,鼠标悬停时无法正确获取变量值;
  • 第二个print中的t.x和字符串连接符之间存在空格时,鼠标悬停时可以正确获取变量值。

另:
number/boolean等类型的字面常量值,鼠标悬停时可以取得字面值;而字符串类型的字面常量,无法获取字面常量值。

Assets/Game/Lua\libpdebug.lua, file is not existed

按照教程的流程走了一遍,在运行时会自动打一行断点并提示该错误,即使是我把该so文件放到plugins下并导入也是不行。但后续的断点都可以正常打到

后续测试:so文件放到Assets/Game/Lua路径下也是不行的。

环境是Unity+xlua。

关于getInfo(),能否增加一个目录映射的配置?

缘由
由于打包时候的目录名和开发时候不一样,导致无法找到断点的文件。现在是通过建立一个新的文件夹解决的,这个文件夹和打包后的文件夹同名,里面是所有源代码的拷贝,但是这样使用起来比较麻烦,比如在vscode里面打开文件、修改文件的时候要特别注意,不能打开错了文件。还有就是改完代码后,要拷贝到另一个目录。

想法
能不能增加一个目录映射的配置,例如把aaaa/bbbb与xxxx/yyyy/zzzz作映射,这样在查找文件位置时,遇到aaaa/bbbb目录就自动替换为xxxx/yyyy/zzzz,然后再查找,不知道是不是可行?

UE4编辑器play时卡住.

在VScode打开时,UE4编辑器点play,偶现会卡住,调试发现一直在等待socket,关闭vscode后,编辑器可以继续运行

不能触发_gc元方法函数中的断点的问题

环境
windows 10 64
vscode 1.36.1
标准lua5.3.4

重现
local t = {x = "on gc"}
setmetatable(t,{__gc = function (o)
print(o.x)--此处打断点
end})
t = nil
collectgarbage()

可以预见,会输出 on gc,而事实也是如此。但是,这个断点却不会触发。

报错

[Debugger Log]:Require clib failed, use Lua to continue debug. Set logLevel to 0 and view the debugger log for more information.
这是什么意思

使用luapanda调试unlua工程时候,偶现crash

使用luapanda调试unlua工程时候,有时会出现如下错误
UE4Editor_UnLua!FVector::ToString()
然后unreal就自动关闭了

环境:
操作系统 win10
unreal 4.22.3
luapanda 3.0.1

偶现,但出现概率挺高,看能否解决

开启useCHook并且关闭stopOnEntry会导致Unity关闭的一个问题

环境:
Unity:2018.4.0f1
XLua:2.1.14
vscode:1.35.1

重现步骤:
1、开启useCHook,关闭stopOnEntry
2、Unity中点击Play
3、vscode中按F5启动调试器
4、停止Unity并重新Play
此时Unity卡死,在vscode中停止调试后Unity恢复,但是点击能触发断点的地方会直接关闭Unity。经过测试,如果关闭useCHook或者开启stopOnEntry,以上步骤就不会导致Unity关闭。

调试单文件报 reGetSock fail

[LuaPanda] [Error] reGetSock fail
[LuaPanda] [Error] reGetSock fail
D:\lua.exe: ...ions/stuartwang.luapanda-2.2.0/Debugger/LuaPanda.lua:743: attempt to index upvalue 'sock' (a nil value)
stack traceback:
...ions/stuartwang.luapanda-2.2.0/Debugger/LuaPanda.lua:743: in function 'reConnect'
...ions/stuartwang.luapanda-2.2.0/Debugger/LuaPanda.lua:1607: in function <...ions/stuartwang.luapanda-2.2.0/Debugger/LuaPanda.lua:1606>
[C]: in function 'sethook'
...ions/stuartwang.luapanda-2.2.0/Debugger/LuaPanda.lua:1853: in function 'changeHookState'
...ions/stuartwang.luapanda-2.2.0/Debugger/LuaPanda.lua:181: in function 'start'
(command line):1: in main chunk
[C]: ?
[LuaPanda] [Error] reGetSock fail
D:\lua.exe: ...ions/stuartwang.luapanda-2.2.0/Debugger/LuaPanda.lua:743: attempt to index upvalue 'sock' (a nil value)

这个调试器挺棒的,腾讯为何不做一个编辑器功能

这个调试器挺棒的,腾讯为何不做一个编辑器功能
现在能找到的lua开发工具,都不是很好用,有的甚至要卖钱收费

腾讯这么强啊 ,咋不干脆做一个lua ide(哪怕是基于vscode插件的也行)

能造福千万个luaer

能不能支持luajit

用来调试时getinfo出现libpdebug加载失败,跟踪调试,发现luajit没有导出lua_version这个函数,在luajit 动态库中导出这个函数, libpdebug加载成功,还是不能调试,不知道为什么

多文件夹支持?

一般在写一些Steam上的游戏的MOD的时候,MOD代码和游戏主文件夹是不在一个地方的,这个时候调试器就没法正常运行的
是否可以设置多个搜寻路径,或者搜寻所有workspace下的路径
此外我在MOD的游戏里面有多种后缀(.lua, .con .module 等等),但是这个调试器只允许我配置一种后缀,是否可以增加多种后缀的支持?

或者能不能有一个fallback模式,如果callstake里面的文件找不到就忽略,直接定位到可以找到的一层?像C++调试的时候那样,外面的库没有符号库的话就不管了?

子目录的Lua文件断点没用

之前只是测试了单文件,调试没什么问题。这次项目真的需要调试了,发现除了lua代码入口文件里require同目录的lua可以断点调试,只要在别的目录的,断点都没用。

Lua入口放在Main.lua里面,在main()里面require "Test",这个同目录的Test脚本是可以被调试的,但是require "Game/Director" ,调用它的start()就不能调试。我猜是接入文档里说的"第二步 路径规范",print(debug.traceback("debug test"))打印出来的日志:
LUA: debug test
stack traceback:
Game.Director:89: in method 'start'
Main:38: in function Main:18
[C]: in function 'xpcall'
Main:43: in main chunk
[C]: in function 'require'
[string "chunk"]:3: in main chunk
UnityEngine.Debug:Log(Object)

文档里说的那几个“测试通过 ”结果都不一样,所以调试器没法定位代码了?看文档,我不能理解,哪一条说明是解决这个问题的。

PS:我们项目是用的Lua文件,没有放在Unity工程里,而且有2个代码目录,为了调试我把其中一个文件夹拷贝到另一个去了,然后在cwd只配一个路径。

关于 cocos2dx 下无法 attach 的问题

环境:mac os 10.15
调试器版本: 3.1.0

最近有同学反馈cocos2dx下可以调试,但无法attach连接。我们测试了一下,发现在attach时LuaPanda.lua 文件 reConnect() 函数中

local sockSuccess, status = sock:connect(connectHost, connectPort);

一直是连接失败,提示是参数错误。

image

但事实上传入的参数是正确的,不知道是否和cocos2dx以及其中集成的luasocket有关,如果有了解的同学欢迎讨论。


具体的复现方法是:

  1. 打开日志
    LuaPanda.lua 文件头部, consoleLogLevel = 2 修改为 consoleLogLevel = 0
    在printToConsole(), 打印到console的日志实际调用的是print方法,可以改为用户自定义函数。
  2. 修改hook步长(可选)
    LuaPanda.lua 文件 changeHookState() 中
if hookLib then hookLib.lua_set_hookstate(hookState.DISCONNECT_HOOK); else debug.sethook(this.debug_hook, "r", 1000000); end

其中的 1000000 是默认attach步长。因为纯lua环境没有定时器,所以表示每 1000000 次调用后发起以此attach连接。这个步长过短的话, 会造成等待attach时用户进程卡顿,过长又会造成长时间不发起attach。根据用户lua代码执行的频度可以尝试修改。
3. 关注reconnect
attach的实现是在LuaPanda.lua的reConnect() 函数,可以打一些日志,关注这一行的执行结果

local sockSuccess, status = sock:connect(connectHost, connectPort);

如果connect成功,应该就可以进行attach (我的测试结果是cococs2dx只有启动时可以连接成功,之后一直提示参数错误失败,造成无法attach)

试用了新的docPathReplace配置功能,反馈一个问题

Describe the bug
在被替换的A目录打断点,会在替换后的B目录触发断点。直接在B目录打断点,不触发。

To Reproduce
Steps to reproduce the behavior:

  1. 配置替换路径"docPathReplace": ["A", "B"]
    2.在A目录1.lua设置断点,会在B目录1.lua的相同行触发断点

Expected behavior
在B目录的文件打断点,可以在该文件触发断点

关于代码提示工具的性能优化

近期我们会关注下性能问题。
优化目标是含有大量lua的项目(2000个以上的lua文件),将会对代码提示和定义跳转的性能进行优化,加快提示速度和准确性,避免插件出现异常。预计完成后随下个版本发布。

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.