Giter Club home page Giter Club logo

pcrc's Introduction

PCRC

English | 中文

PyCraft based Replay Client

A Minecraft client that can record a replay file (*.mcpr) which can be recognized by Replay Mod

Great thanks to SARC for the replay logic stuffs and pyCraft for the minecraft client stuffs

Environment

Python version should be python3 and at least it works on Python 3.6 and Python 3.8

Python modules

  • cryptography
  • requests
  • pynbt
  • redbaron
  • colorlog
  • ruamel.yaml

The requirements are also stored in requirements.txt

Minecraft server

PCRC currently supports connecting to vanilla Minecraft server. Supported versions:

  • 1.12 / 1.12.2
  • 1.14.4
  • 1.15.2
  • 1.16.1 ~ 1.16.5
  • 1.17.1
  • 1.18 ~ 1.18.2

Advantage

  • Can be hosted server side for 24/7 recording
  • Has way less performance usage than a regular Minecraft client
  • It can be set to record only when the player is nearby
  • Multiple options can be set for custom recording
  • Restart after raw file size reaches 2048MB or recording time reaches 5 hours to prevent oversize recording
  • Since the virtual player (bot) doesn't move, the recording file will not include unnecessary packets related to chunk loading, which can significantly reduce recording file size

Usage

Direct Launch

  1. Download and unzip the latest PCRC in Release page
  2. Run python PCRC.pyz or PCRC.exe
  • On first start, PCRC will generate default config file and exit. Fill in the config file on demand before launch it again
  1. Input start in the console to start PCRC
  2. (Recommand) Set the gamemode of the PCRC bot to spectator
  3. Use console or chat in game to control PCRC

As a MCDR plugin

Requires MCDReforged >= 2.0

Put the PCRC.pyz downloaded from Release into the plugin folder of MCDR and that's it

NOTE: Unloading the plugin will cause PCRC to stop recording and exit the game

Config

The config file is config.json. All settings can be changed in it. Those which are similar to ABC inside it are just comments, don't need to modify them

When used as a plugin for MCDR, the path to the configuration file will be config/pcrc/config.json, and config/pcrc/mcdr_config.json store the configuration related to MCDR

Base

language: The language that the PCRC bot will speak in the game. Language file should be in folder lang/

recording_temp_file_directory: Path to the directory where PCRC will store its temporary recording files in

recording_storage_directory: Path to the directory where PCRC will save its finished recording files

debug_mode: Whether outputs debug info or not

Account and Server

authenticate_type: The way for PCRC to login your account. It can be offline, mojang or microsoft, respectively corresponding to offline account, Mojang account login and Microsoft account login

If you use Microsoft account login, when you connect to the server for the first time after startup, you need to log in with your Microsoft account according to the console output

username: The username for offline mode login, or the email address of the Minecraft account if you are using mojang type online mode login

password: The password of the Minecraft account if you are using mojang type online mode login

store_token: When set to true and the authenticate_type is microsoft, the microsoft login token will be saved to file token.json. When launching PCRC the stored token will be loaded and used if it's not expired. Noted: The login token will be stored in plaintext

Examples for those account related config entries:

// Log in with offline mode
{
    "authenticate_type": "offline",
    "username": "MyPlayerName",  // the player name you want to use
    "password": "",  // This entry will not be used and will be ignored
}
// Log in with mojang account
{
    "authenticate_type": "mojang",
    "username": "[email protected]",  // your mojang account email address
    "password": "mypassword",  // your mojang account password
}
// Log in with microsoft account
{
    "authenticate_type": "microsoft",
    "username": "",  // This entry will not be used and will be ignored
    "password": "",  // This entry will not be used and will be ignored
}

address: IP Address of the Minecraft server

port: Port of the Minecraft server

server_name: The server name showed in replay viewer

initial_version: The preferred Minecraft version that used to connect to bungeecord like server

PCRC Control

file_size_limit_mb: The limit of size of the .tmcpr file. Every time it is reached, PCRC will restart. Default: 2048

file_buffer_size_mb: The limit of size of file buffer. Every time it is reached, PCRC will flush all content in the buffer into .tmcpr file. Default: 8

time_recorded_limit_hour: The limit of actual recording time. Every time it is reached, PCRC will restart. Default: 12

delay_before_afk_second: The time delay between every player leaving and PCRC pausing recording. Default: 15

afk_ignore_spectator: If set to true, PCRC will ignore all packets from spectator players when determining if it should pause recording due to all players have left. Default: true

record_packets_when_afk: If set to false, PCRC will ignore almost every incoming packets when PCRC pauses recording (SARC's behavior). This can decrease the replay file size a lot but might cause block / entity desync if there will be something happening after player leaves. Default: true

auto_relogin: If this option is enabled, and the client gets disconnected, PCRC will automatically try to reconnect

auto_relogin_attempts: The maximum amount of relogin attempts before login success . Default: 5

chat_spam_protect: Automatically delay between sending chat messages if necessary to prevent being kicked for spamming

command_prefix: Any chat message starts with command_prefix will be recognize as a command to control PCRC. Default: !!PCRC

PCRC Features

daytime: Sets the daytime once to the defined time in the recording and ignores all further changes from the server. If set to -1 the normal day/night cycle is recorded

weather: Turns weather in the recording on or off

with_player_only: If set to true, PCRC only record packets if there are players nearby

remove_items: If set to true, all dropped items wont be recorded

remove_bats: If set to true, bats won't be recorded

remove_phantoms: If set to true, phantoms won't be recorded

on_joined_commands: A string list storing the commands that the PCRC bot will enter in sequence after it joins the game. You might need this if the server has some kind of login plugin etc.

// on_joined_commands example
{
    "on_joined_commands": [
        "/login myPassword",
        "/server myServer"
    ],
}

PCRC Whitelist

enabled: Whether to enable whitelist

whitelist: Whitelist player list

Command

Command prefix !!PCRC can be customized in the config file

Console Command

Available if launched directly

help: Show the list of console command

start: Start PCRC and start recording

stop: Stop PCRC and stop recording

restart: Restart PCRC

exit: Exit the program

reload: Reload the config file. Notes that not all config entries support hot-reload, e.g. authenticate_type is not hot-reload-able

auth: Authenticate with minecraft again. Used when the previous authentication failed

say <text>: Send text <text> to the server as a chat message

set <option> <value> Set option to value of PCRC and in the config file

whitelist [on|off] Switch the whitelist switch

whitelist [add|del] <player> Add or delete a player to(from) the whitelist

whitelist status To view the status of the whitelist and the whitelisted player(s)

status: Show the status of PCRC

list: Show the player list in the server if connected

MCDR Plugin command

Available if used as a MCDR plugin

!!PCRC start: start PCRC and start recording

!!PCRC stop: stop PCRC and stop recording. Only works with console command input

!!PCRC reload: Reload the config for PCRC and the config file for MCDR. Notes that not all PCRC config entries support hot-reload

!!PCRC set_redirect_url <url>: Input the url used in microsoft logging in

Requires permission level 1 to use these commands. The minimum required permission level can be set in the config file for MCDR

In Game Command

Using normal in game chatting to trigger

!!PCRC: show help

!!PCRC status: show status

!!PCRC here: emit a "!!here" command

!!PCRC pos: show position, might not be 100% accurate

!!PCRC spec: use the teleport ability in spectator mode to teleport to the player who sent this command

!!PCRC stop: stop PCRC

!!PCRC restart: restart PCRC

!!PCRC set: print all settable option

!!PCRC set <option> <value>: set the value of <option> to <value> which won't write to config file

!!PCRC name <filename>: set recording file name to <filename>

!!PCRC respawn: let PCRC bot try to respawn

Notes

  • There's not any code for processing game content in PCRC so if you want to move the PCRC bot you can only use teleport command like !!PCRC spec or /tp. You can not use stuffs like piston to move the bot otherwise some wired behaviors like the bot become invisible may occur
  • The file size that PCRC shows when recording is the size of .tmcpr file, the uncompressed raw packet file size. It's not the size of the final recording file .mcpr. The final file size is about 10% to 40% of the original packet file size, depending on the situation

pcrc's People

Contributors

alex3236 avatar da-dog avatar fallen-breath avatar gamernotitle avatar mccube2000 avatar pixeils 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

pcrc's Issues

BungeeGuard support

Since PCRC has an offline mode I was hoping I could use it in tandem with a Bungee network by directly connecting to the networked servers and adding my IP to a whitelist. The issue is that my host doesn't support per-server firewalls and recommended BungeeGuard for setting up a network. To be honest that seems to be a better option in general but it removes the ability to use tools like this without an official account.

While I have 4 other accounts I can use with PCRC I'd rather not store the password in plaintext and need to use them now and then for other tasks. BungeeGuard links between the servers on the network by looking for a token sent by the BungeeCord server and rejecting any connections that don't have a matching token. It would be amazing if I were to add the token to the PCRC conf and use offline mode accounts as cameras for server projects.

The link to their GitHub is here, I'm very new to anything network related and haven't used python in any serious way so I'm not sure how difficult of a task this would be.

回放时,时间仍然变化

使用PCRC1.0以上版本,无论是连接开放局域网的单人游戏,或是服务端,回放文件并未按照config文件中设定的固定游戏时间。回放中太阳等依旧东升西落而不是固定不动。
读取回放文件的客户端为安装fabric的1.16.5版本

在MCDR里 "remove_items": false 以及其他命令不生效

系统: Centos 7.8.2003
Pyhton版本: 3.7.7
Java版本: openjdk 1.8.0_252
服务端版本: Paperclip-284 (1.15.2) & 1.15.2 原版服务端
MCDR版本: 0.9.2-alpha
PCRC版本: 0.10.0-alpha
PCRC-MCDR版本: 直接clone仓库,d3b891a commit
现象: 仅有!!PCRC start!!PCRC stop有效果,其他命令组合都没有反馈(包括!!PCRC),也不生效。config.json里设置"remove_items": false也不生效,录制出来的回放并没有掉落物,也没有飞行中的箭、投掷药水、末影珍珠。【以上命令均是在控制台中输入】

无法执行玩家发送的命令

image
服务端是1.18.2的spigot
正常mc也是1.18.2版本
bot无法接受或执行玩家发送的命令
image
白名单已加入玩家用户名

启动时的未知错误

无法启动 报错咱也看不懂hmm 已经用这个指令设置了microsoft的url

!!PCRC set_redirect_url https://login.live.com/oauth20_desktop.srf?code=M.R3_BAY.a07eeb69-8e63-47ad-13e6-8ce405f402da&lc=xxxx

config如下
"2": "-------- Account and Server --------",
"authenticate_type": "microsoft",
"username": "a6513375",
"password": "",
"store_token": true,
"address": "localhost",
"port": 25565,
"server_name": "SnowTown",
"initial_version": "1.18.2",

日志如下
[PCRC@2010] [18:48:51] [ReplaySaver/INFO]: Starting PCRC
[PCRC@2010] [18:48:51] [ReplaySaver/INFO]: Allow versions of the server: {736, 578, 335, 751, 753, 498, 754, 340, 756, 757, 758}
[PCRC@2010] [18:48:51] [ChatManager/INFO]: Chat thread started
[PCRC@2010] [18:48:51] [Networking Thread/INFO]: Allow versions of the server: {758}
[PCRC@2010] [18:48:51] [Networking Thread/INFO]: Connecting using protocol version 758, mc version = 1.18.2
[Server] [18:48:51] [User Authenticator #44/INFO]: Disconnecting /127.0.0.1:11450: Failed to verify username!
[Server] [18:48:51] [User Authenticator #44/ERROR]: Username 'bot_PCRC' tried to join with an invalid session
[PCRC@2010] [18:48:51] [Networking Thread/ERROR]: Exception in network thread: The server rejected our login attempt with: "{"translate":"multiplayer.disconnect.unverified_username"}". (LoginDisconnect)
Traceback (most recent call last):
File "plugins\PCRC.pyz\pycraft\minecraft\networking\connection.py", line 592, in run
self._run()
File "plugins\PCRC.pyz\pycraft\minecraft\networking\connection.py", line 630, in _run
self.connection._react(packet)
File "plugins\PCRC.pyz\pycraft\minecraft\networking\connection.py", line 567, in _react
self.reactor.react(packet)
File "plugins\PCRC.pyz\pcrc\connection\patch.py", line 120, in patched_network_thread_run
original_login_reactor_react(self, packet)
File "plugins\PCRC.pyz\pycraft\minecraft\networking\connection.py", line 768, in react
raise LoginDisconnect('The server rejected our login attempt '
minecraft.exceptions.LoginDisconnect: The server rejected our login attempt with: "{"translate":"multiplayer.disconnect.unverified_username"}".
[PCRC@2010] [18:48:51] [Networking Thread/INFO]: Stopping PCRC, auto restart = True, by_user = False
[PCRC@2010] [18:48:51] [Networking Thread/INFO]: Stop recording
[PCRC@2010] [18:48:51] [ReplaySaver/WARNING]: Recording has not started yet, abort creating replay recording file
[Server] [18:48:51] [Server thread/INFO]: /127.0.0.1:11450 lost connection: Failed to verify username!
[PCRC@2010] [18:48:51] [ChatManager/INFO]: Chat thread stopped
[PCRC@2010] [18:48:51] [ReplaySaver/INFO]: PCRC stopped

1.16.4 packets error

Error when starting PCRC. I tried this on linux and windows both connected to server with carpet and vanilla - same issue in all of situations.
Log:

[2021-01-03 14:57:40 INFO] [PCRC-Recorder] Starting PCRC
[2021-01-03 14:57:40 INFO] [PCRC-Recorder] Allow versions of the server: {736, 578, 335, 751, 753, 498, 754, 340}
[2021-01-03 14:57:40 INFO] [PCRC] Recorder started, success = True
[2021-01-03 14:57:40 INFO] [PCRC-Recorder] Allow versions of the server: {754}
[2021-01-03 14:57:40 INFO] [PCRC-Recorder] Connecting using protocol version 754, mc version = 1.16.4
[2021-01-03 14:57:41 INFO] [PCRC-Recorder] Connected to the server, start recording
[2021-01-03 14:57:41 INFO] [PCRC-Recorder] [Thread Chat] Chat thread started
[2021-01-03 14:57:41 ERROR] [PCRC-Recorder] Error when processing packet
[2021-01-03 14:57:41 ERROR] [PCRC-Recorder] Packet id = 2; Packet name = Spawn Living Entity
[2021-01-03 14:57:41 ERROR] [PCRC-Recorder] Exception in network thread: Server sent a varint that was too big!
[2021-01-03 14:57:41 DEBUG] [PCRC-Recorder] Traceback (most recent call last):
File "PCRC\utils\pycraft\networking\connection.py", line 564, in run
File "PCRC\utils\pycraft\networking\connection.py", line 603, in _run
File "PCRC\utils\pycraft\networking\connection.py", line 540, in _react
File "PCRC\utils\pycraft\networking\packets\packet_listener.py", line 15, in call_packet
File "PCRC\utils\recorder.py", line 110, in onPacketReceived
File "PCRC\utils\recorder.py", line 234, in processPacketData
File "PCRC\utils\packet_processor.py", line 29, in process
File "PCRC\utils\packet_processor.py", line 174, in _process
File "PCRC\utils\packet_processor.py", line 106, in processSpawnEntity
File "PCRC\utils\SARC\packet.py", line 50, in read_varint
OSError: Server sent a varint that was too big!

[2021-01-03 14:57:41 ERROR] [PCRC-Recorder] Stopping the recorder since PCRC has not been stopped by user
[2021-01-03 14:57:41 INFO] [PCRC-Recorder] Stopping PCRC, restart = True, by_user = False
[2021-01-03 14:57:41 WARN] [PCRC-Recorder] [Thread File] Size of "recording.tmcpr" too small (0.00KB < 10.00KB), abort creating replay file
[2021-01-03 14:57:41 INFO] [PCRC-Recorder] [Thread File] File operations finished, disconnect now
[2021-01-03 14:57:41 INFO] [PCRC-Recorder] [Thread File] PCRC stopped
[2021-01-03 14:57:41 INFO] [PCRC-Recorder] [Thread Chat] Chat thread stopped
[2021-01-03 14:57:41 INFO] [PCRC-Recorder] [Thread File] ---------------------------------------

Offline Mode?

I'm not able to use offline mode. Can you specify the instructions for offline mode, should I use the username of an alt account? Online mode works great but I only have one official account so I can't get it to work

PCRC PCRC keeps outputting "Set self's position to PositionAndLook"

PCRC keeps outputting "[Networking Thread/INFO]: Set self's position to PositionAndLook (xyz position information)" and there is no output for keywords entered in the game, but it can be reborn through keywords

PCRC持续输出“[Networking Thread/INFO]: Set self's position to PositionAndLook(xyz位置信息)”且游戏中输入关键词无输出,但可以通过关键词重生

2022-08-13-4.zip

bot处理收到的副标题处消息时报错

debugmode下刷屏显示如下内容

[15:12:51] [Networking Thread/DEBUG]: Cannot resolve chat json data: {"extra":[{"color":"red","text":"❤ "},{"color":"white","text":"20"},{"color":"dark_gray","text":"/"},{"color":"white","text":"20                 "},{"color":"#e884b0","text":"🛡 "},{"color":"white","text":"0 "},{"color":"dark_gray","text":"| "},{"color":"#db0000","text":"🗡 "},{"color":"white","text":"0 "},{"color":"dark_gray","text":"| "}
,{"color":"#40ffe6","text":"✦ "},{"color":"white","text":"2"}],"text":""}
[15:12:51] [Networking Thread/DEBUG]: Traceback (most recent call last):
  File "pcrc\pcrc_client.py", line 345, in on_chat_message_packet
KeyError: 'translate'

在处理副标题时出现
正常mc看到的是这样的
image

Update to 1.20

Is there any uptade to 1.20 planned or do you 100% depend on pyCraft

无法连接至BungeeCord群组服

我在配置PCRC后,start显示连接超时(BC控制台显示了此连接请求,但是显示“超时”)
如下是PCRC报错
[12:30:28] [Networking Thread/ERROR]: Exception in network thread: Unexpected end of message. (EOFError) Traceback (most recent call last): File "minecraft\networking\connection.py", line 592, in run self._run() File "minecraft\networking\connection.py", line 626, in _run self.connection.file_object, timeout=read_timeout) File "<string>", line 23, in read_packet File "minecraft\networking\types\basic.py", line 156, in read raise EOFError("Unexpected end of message.") EOFError: Unexpected end of message
如下是BC端报错
12:30:28 [警告] [/127.0.0.1:58667] <-> InitialHandler - read timed out
登录服无任何消息
配置文件中的内容我填写的是BC的IP(本地)和端口,连接BC端会导致问题吗?
我正在使用的BC端版本是BungeeCord-Bootstrap:1.20-R0.1-SNAPSHOT:9f5ace9:1718
子服默认登录到了简幻欢的Spigot 1.19.4服务器(加入了via三件套)
望尽快解决
感谢

PCRC支持1.19.2版本吗?

PCRC支持1.19.2版本吗?如不支持请问什么时候可以适配或支持呢?
感谢您的回答!!!!

加载录像文件卡在loading terrain.

使用离线模式进行录制。加载录像文件是卡在loading terrain,会反复弹出来然后消失(正版不知道,因为没有多余的正版号

PCRC timing out

I'm using PCRC in 1.18.2 to record a world eater, i dont actually know if the world eater is related to the issue though.

Here's the error PCRC is providing me.
image

also, when i try to reinstall pcrc, i install the exe, then run it, change the config and when i restart the exe it shuts down without saying anything, any fixes for that too?

Unknown reason always disconnect randomly

I met unknown reason that PCRCbot always disconnect randomly
I think this may be because worldeater has too many blocks updates , so PCRC run out of it's memory?
Here is PCRC's log at that time : https://pastebin.com/yh0yVQrZ
I found this in the log
Exception in network thread: <class 'builtin_function_or_method'> Unexpected end of message.

[SUGGESTION] 关于微软登录

是否有必要增加一个机制,以类似启动器的方式在本地保存登录凭据用以刷新OAuth登录状态
目前在MCDR或PCRC进程结束后再重启之后登录状态会丢失需要到后台重新登录

stop关闭后,循环等待开启吗这是

[PCRC-Recorder] [Thread Chat] Sent chat message "o/ bye~" to the server
[2020-04-27 11:16:08 INFO] [PCRC-Recorder] [Thread File] PCRC stopped
[2020-04-27 11:16:08 ERROR] [PCRC-Recorder] Exception in network thread: [WinError 10058] 由于以前的关闭调用,套接字在那个方向已经关闭,发送或接收数据的请求没有被接受。
[2020-04-27 11:16:08 INFO] [PCRC-Recorder] Don't panic, that's Works As Intended
[2020-04-27 11:16:08 INFO] [PCRC-Recorder] [Thread Chat] Chat thread stopped
[2020-04-27 11:16:08 INFO] [PCRC] Recorder stopped
[2020-04-27 11:16:08 INFO] [PCRC-Recorder] Starting PCRC
[2020-04-27 11:16:08 INFO] [PCRC-Recorder] Connecting using protocol version 498, mc version = 1.14.4
[2020-04-27 11:16:09 ERROR] [PCRC-Recorder] Exception in network thread: [403] ForbiddenOperationException: 'Invalid token'
[2020-04-27 11:16:09 ERROR] [PCRC-Recorder] Stopping the recorder since PCRC has not been stopped by user
[2020-04-27 11:16:09 INFO] [PCRC-Recorder] Stopping PCRC, restart = True, by_user = False
[2020-04-27 11:16:09 INFO] [PCRC-Recorder] [Thread File] Recording has not started yet, abort creating replay recording file
[2020-04-27 11:16:09 INFO] [PCRC-Recorder] [Thread File] File operations finished, disconnect now
[2020-04-27 11:16:09 INFO] [PCRC-Recorder] [Thread File] PCRC stopped
[2020-04-27 11:16:09 INFO] [PCRC-Recorder] [Thread File] ---------------------------------------
[2020-04-27 11:16:09 INFO] [PCRC-Recorder] [Thread File] PCRC restarting in 3s
[2020-04-27 11:16:10 INFO] [PCRC-Recorder] [Thread File] PCRC restarting in 2s
[2020-04-27 11:16:11 INFO] [PCRC-Recorder] [Thread File] PCRC restarting in 1s
[2020-04-27 11:16:12 INFO] [PCRC-Recorder] Starting PCRC
[2020-04-27 11:16:12 INFO] [PCRC-Recorder] Connecting using protocol version 498, mc version = 1.14.4
[2020-04-27 11:16:12 ERROR] [PCRC-Recorder] Exception in network thread: [403] ForbiddenOperationException: 'Invalid token'
[2020-04-27 11:16:12 ERROR] [PCRC-Recorder] Stopping the recorder since PCRC has not been stopped by user
[2020-04-27 11:16:12 INFO] [PCRC-Recorder] Stopping PCRC, restart = True, by_user = False
[2020-04-27 11:16:12 INFO] [PCRC-Recorder] [Thread File] Recording has not started yet, abort creating replay recording file
[2020-04-27 11:16:12 INFO] [PCRC-Recorder] [Thread File] File operations finished, disconnect now
[2020-04-27 11:16:12 INFO] [PCRC-Recorder] [Thread File] PCRC stopped

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.