lorcalhost / btb-manager-telegram Goto Github PK
View Code? Open in Web Editor NEWA feature packed but easy-to-use Telegram bot for remotely managing Binance Trade Bot instances
License: MIT License
A feature packed but easy-to-use Telegram bot for remotely managing Binance Trade Bot instances
License: MIT License
This can be achieved by:
git pull
$(which python3) -m pip install -r requirements.txt
Change to
$(which python3) -m btb_manager_telegram -p "{settings.ROOT_PATH}" &
Use this project by user @madnesspie to automatically populate the supported_coin_list
file with good coins.
TSIA
The logs can sometimes eat up a lot of space, so it'll be nice to have a way to purge logs.
Maybe this can be coupled with Delete Database? I don't know if there's a valid use case where you will want to purge db, but not the logs.
This is due to their value being very small compared to BTC, resulting in the btc_price
attribute in the coin_value
table being saved as NULL
and read by the sqlite3
module as None
.
Right now it is not clear why do we have 4096
and not 5014
or another number.
We need to refactor that line
telegram.constants.MAX_MESSAGE_LENGTH
and of course rename function (something like telegram_text_truncator
)Hey there, thank you for the wonderful bot! Trying to understand where my issue lies here.
Every button (except 'Read last log lines') throws an error like this:
Traceback (most recent call last):
File "C:\Users\Anthony\AppData\Local\Programs\Python\Python39\lib\site-packages\psutil\_pswindows.py", line 780, in cmdline
ret = cext.proc_cmdline(self.pid, use_peb=True)
PermissionError: [WinError 5] Access is denied: '(originated from OpenProcess)'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Anthony\AppData\Local\Programs\Python\Python39\lib\site-packages\psutil\_pswindows.py", line 679, in wrapper
return fun(self, *args, **kwargs)
File "C:\Users\Anthony\AppData\Local\Programs\Python\Python39\lib\site-packages\psutil\_pswindows.py", line 695, in wrapper
return fun(self, *args, **kwargs)
File "C:\Users\Anthony\AppData\Local\Programs\Python\Python39\lib\site-packages\psutil\_pswindows.py", line 783, in cmdline
ret = cext.proc_cmdline(self.pid, use_peb=False)
PermissionError: [WinError 5] Access is denied: '(originated from OpenProcess)'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Anthony\AppData\Local\Programs\Python\Python39\lib\site-packages\telegram\ext\dispatcher.py", line 442, in process_update
handler.handle_update(update, self, check, context)
File "C:\Users\Anthony\AppData\Local\Programs\Python\Python39\lib\site-packages\telegram\ext\conversationhandler.py", line 549, in handle_update
new_state = handler.handle_update(update, dispatcher, check_result, context)
File "C:\Users\Anthony\AppData\Local\Programs\Python\Python39\lib\site-packages\telegram\ext\handler.py", line 160, in handle_update
return self.callback(update, context)
File "C:\Users\Anthony\Desktop\Binance Trade Bot\BTB-manager-telegram\btb_manager_telegram\handlers.py", line 148, in menu
re = buttons.edit_coin()
File "C:\Users\Anthony\Desktop\Binance Trade Bot\BTB-manager-telegram\btb_manager_telegram\buttons.py", line 364, in edit_coin
if not get_binance_trade_bot_process():
File "C:\Users\Anthony\Desktop\Binance Trade Bot\BTB-manager-telegram\btb_manager_telegram\utils.py", line 82, in get_binance_trade_bot_process
name in proc.name() or name in " ".join(proc.cmdline())
File "C:\Users\Anthony\AppData\Local\Programs\Python\Python39\lib\site-packages\psutil\__init__.py", line 677, in cmdline
return self._proc.cmdline()
File "C:\Users\Anthony\AppData\Local\Programs\Python\Python39\lib\site-packages\psutil\_pswindows.py", line 681, in wrapper
raise convert_oserror(err, pid=self.pid, name=self._name)
psutil.AccessDenied: psutil.AccessDenied (pid=116, name='csrss.exe')
I can't decypher what it means myself, but maybe you can help.
Thank you so much in advance!
Update README.md
file with some intstructions or comments.
When sending last 20 lines of log file eroor telegram.error.BadRequest: Message is too long
sometimes occurs.
This seems due to the fact that Telegram's api only supports 4096 bytes per message.
Find a way to avoid this error and still display something useful.
Data visualization matters when talking about money.
Adding the ability to have different plots on demand will take the bot to the next level.
Please comment below what kind of graphs you believe would be best to implement.
Hey mate!
Thanks for your AWESOME work with this bot! Is amazing!
I run the bot well, all is working except the all commands relating to files or processes.
I attach you the error code, im not just asking, i tried everything, trying to debug in stackoverflow....
I know is a permission problem, i tried running as administrator binance_bot and telegram_bot with the same errors.
I hope you can help me friend
Thanks another time
MUCHAS GRACIAS AMIGO ITALIANO!
2021-04-15 20:38:28,571 - __main__ - INFO - Menu selector. (โ Edit user.cfg)
2021-04-15 20:38:28,571 - __main__ - INFO - Edit user configuration button pressed.
2021-04-15 20:38:28,579 - telegram.ext.dispatcher - ERROR - No error handlers are registered, logging exception.
Traceback (most recent call last):
File "C:\Users\tiwes\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\psutil\_pswindows.py", line 780, in cmdline
ret = cext.proc_cmdline(self.pid, use_peb=True)
PermissionError: [WinError 5] Acceso denegado: '(originated from OpenProcess)'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\tiwes\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\psutil\_pswindows.py", line 679, in wrapper
return fun(self, *args, **kwargs)
File "C:\Users\tiwes\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\psutil\_pswindows.py", line 695, in wrapper
return fun(self, *args, **kwargs)
File "C:\Users\tiwes\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\psutil\_pswindows.py", line 783, in cmdline
ret = cext.proc_cmdline(self.pid, use_peb=False)
PermissionError: [Errno 13] assume access denied (originated from NtQueryInformationProcess(ProcessBasicInformation) -> STATUS_NOT_FOUND)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\tiwes\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\telegram\ext\dispatcher.py", line 442, in process_update
handler.handle_update(update, self, check, context)
File "C:\Users\tiwes\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\telegram\ext\conversationhandler.py", line 549, in handle_update
new_state = handler.handle_update(update, dispatcher, check_result, context)
File "C:\Users\tiwes\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\telegram\ext\handler.py", line 160, in handle_update
return self.callback(update, context)
File "C:\Users\tiwes\desktop\CRIPTO APPS\BTB-manager-telegram\BTBManagerTelegram.py", line 242, in __menu
re = self.__btn_edit_user_cfg()
File "C:\Users\tiwes\desktop\CRIPTO APPS\BTB-manager-telegram\BTBManagerTelegram.py", line 728, in __btn_edit_user_cfg
if not self.__find_process():
File "C:\Users\tiwes\desktop\CRIPTO APPS\BTB-manager-telegram\BTBManagerTelegram.py", line 457, in __find_process
p.cmdline()
File "C:\Users\tiwes\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\psutil\__init__.py", line 677, in cmdline
return self._proc.cmdline()
File "C:\Users\tiwes\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\psutil\_pswindows.py", line 681, in wrapper
raise convert_oserror(err, pid=self.pid, name=self._name)
psutil.AccessDenied: psutil.AccessDenied (pid=124, name='Registry')
Hi I have install the bot on my raspberry pi with python 3.7.3 but I get this error:
2021-04-27 06:40:14,524 - btb_manager_telegram_logger - INFO - Retrieving Telegram token and chat_id from apprise.yml file.
2021-04-27 06:40:14,540 - btb_manager_telegram_logger - INFO - Successfully retrieved Telegram configuration. The bot will only respond to user in the chat with chat_id 1321341011
2021-04-27 06:40:15,542 - btb_manager_telegram_logger - INFO - Checking for updates.
2021-04-27 06:40:17,000 - btb_manager_telegram_logger - INFO - BTB Manager Telegram update found.
2021-04-27 06:40:21,123 - btb_manager_telegram_logger - INFO - Binance Trade Bot update found.
Traceback (most recent call last):
File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/pi/binance/BTB-manager-telegram/btb_manager_telegram/__main__.py", line 126, in <module>
pre_run_main()
File "/home/pi/binance/BTB-manager-telegram/btb_manager_telegram/__main__.py", line 70, in pre_run_main
scheduler.run(blocking=False)
File "/usr/lib/python3.7/sched.py", line 151, in run
action(*argument, **kwargs)
File "/home/pi/binance/BTB-manager-telegram/btb_manager_telegram/utils.py", line 174, in update_checker
bot.close()
File "/home/pi/.local/lib/python3.7/site-packages/telegram/bot.py", line 127, in decorator
result = func(*args, **kwargs)
File "/home/pi/.local/lib/python3.7/site-packages/telegram/bot.py", line 4966, in close
return self._post('close', timeout=timeout) # type: ignore[return-value]
File "/home/pi/.local/lib/python3.7/site-packages/telegram/bot.py", line 260, in _post
f'{self.base_url}/{endpoint}', data=data, timeout=effective_timeout
File "/home/pi/.local/lib/python3.7/site-packages/telegram/utils/request.py", line 354, in post
**urlopen_kwargs,
File "/home/pi/.local/lib/python3.7/site-packages/telegram/utils/request.py", line 265, in _request_wrapper
message = str(self._parse(resp.data))
File "/home/pi/.local/lib/python3.7/site-packages/telegram/utils/request.py", line 223, in _parse
raise RetryAfter(retry_after)
telegram.error.RetryAfter: Flood control exceeded. Retry in 598.0 seconds
How do I fix it?
Hello,
Follow the instructions and run the script, first part is working (connection with Telegram).
But when there must be a interaction with the binance trader bot I get a permission error.
2021-03-29 20:48:29,614 - telegram.ext.dispatcher - ERROR - No error handlers are registered, logging exception. Traceback (most recent call last): File "C:\Python\lib\site-packages\psutil\_pswindows.py", line 780, in cmdline ret = cext.proc_cmdline(self.pid, use_peb=True) PermissionError: [WinError 5] Access denied: '(originated from OpenProcess)'
I have already try to run with the admin rights but unfortunately it doesn't work.
Are there any suggestions to try?
Thanks a lot.
Users should be able to define their own bash scripts inside a chosen file.
The bot will give the possibility to select between them and execute the content.
The custom_scripts.json
file could look like this:
{
"Test script 1": "echo hello",
"Test script 2": "echo world"
}
Traceback (most recent call last):
File "BTBManagerTelegram.py", line 4, in <module>
pre_run_main()
File "/home/manager/binance-trade-bot/BTB-manager-telegram/btb_manager_telegram/__main__.py", line 49, in pre_run_main
setup_telegram_constants()
File "/home/manager/binance-trade-bot/BTB-manager-telegram/btb_manager_telegram/utils.py", line 27, in setup_telegram_constants
parsed_urls = yaml.load(f, Loader=yaml.FullLoader)["urls"]
TypeError: 'NoneType' object is not subscriptable
Check every N hours if a new update is available via the command
git remote update && git status -uno
If an update is available, send a message to the chat to notify the user.
Hi @lorcalhost ,
That project started to grow and more and more users will ask to add features which only to them related.
I guess we should keep the balance of the requested features and needed functionality.
Hello, I had to restart the bot so I killed it and run it again, but now I'm having this error:
2021-04-27 16:35:52,906 - telegram.ext.updater - ERROR - Error while getting Updates: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running
2021-04-27 16:35:52,906 - telegram.ext.dispatcher - ERROR - No error handlers are registered, logging exception.
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/ext/updater.py", line 516, in _network_loop_retry
if not action_cb():
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/ext/updater.py", line 467, in polling_action_cb
updates = self.bot.get_updates(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/bot.py", line 127, in decorator
result = func(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/bot.py", line 2761, in get_updates
result = self._post(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/bot.py", line 259, in _post
return self.request.post(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/utils/request.py", line 349, in post
result = self._request_wrapper(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/utils/request.py", line 276, in _request_wrapper
raise Conflict(message)
telegram.error.Conflict: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running
Do you have any idea how to kill the other instance ? Thanks
Let's imagine that we have installed 2nd bot on the same VPS server.
So right now when we will try to stop bot from 2nd bot, it will stop also from 1st bot.
More details about impelemention of finding and killing processes which is used in stop_bot function
Since you've got a mechanism to update both this manager and the bot itself, perhaps we should be monitoring the Binance API package as well?
http://github.com/sammchardy/python-binance.git
pip install --upgrade --no-deps --force-reinstall git+git://github.com/sammchardy/python-binance.git
Potentially linked to #35
On "Current Value", wrong ratios are displayed for the previously bough ratios.
As we can see, the bot thinks doge was at 0.03, but the value hasn't changed much from 0.06 lately (the bot only ran for a few hours). This may be due to me buying coins, stopping the bot, manually doing some transactions which changed the coin's amount, then resuming the bot. I'm not sure how the ratio is computed, but it might be that the bot assumes that the amount did not change when computing the old ratio instead of directly storing the old ratio.
It'll be great if the bot can respond to multiple people, in a group, etc.
Can you add before deleting database: "Do you want to delete the database?" ?
The mysqlalchemy session implementation used in Binance Trade Bot only updates the database file every now and then and at the end of the session.
To fetch good data switch to their database API.
Thanks @DmytroLitvinov for finding the cause of the slow data update problem.
Thank for great effort ! Could you please add "fresh start" features ?
Its mean clean/delete all database, cancel all wating orders. its will help.
Hello, I tried to run the bot for the first time and got these errors
2021-04-27 14:36:17,369 - btb_manager_telegram_logger - INFO - Retrieving Telegram token and chat_id from apprise.yml file.
2021-04-27 14:36:17,370 - btb_manager_telegram_logger - INFO - Successfully retrieved Telegram configuration. The bot will only respond to user in the chat with chat_id XXXXXXX
2021-04-27 14:36:18,372 - btb_manager_telegram_logger - INFO - Checking for updates.
2021-04-27 14:36:20,754 - apscheduler.scheduler - INFO - Scheduler started
2021-04-27 14:36:28,630 - btb_manager_telegram_logger - INFO - Started conversation.
2021-04-27 14:36:28,818 - telegram.ext.dispatcher - ERROR - No error handlers are registered, logging exception.
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/ext/dispatcher.py", line 442, in process_update
handler.handle_update(update, self, check, context)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/ext/conversationhandler.py", line 549, in handle_update
new_state = handler.handle_update(update, dispatcher, check_result, context)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/ext/handler.py", line 160, in handle_update
return self.callback(update, context)
File "/Users/XXXXXX/BTB-manager-telegram/btb_manager_telegram/handlers.py", line 251, in start
update.message.reply_text(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/message.py", line 689, in reply_text
return self.bot.send_message(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/bot.py", line 127, in decorator
result = func(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/bot.py", line 475, in send_message
return self._message( # type: ignore[return-value]
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/bot.py", line 296, in _message
result = self._post(endpoint, data, timeout=timeout, api_kwargs=api_kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/bot.py", line 259, in _post
return self.request.post(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/utils/request.py", line 349, in post
result = self._request_wrapper(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telegram/utils/request.py", line 272, in _request_wrapper
raise BadRequest(message)
telegram.error.BadRequest: Can't parse entities: character '-' is reserved and must be escaped with the preceding '\'
Have you ever seen this error ?
Cheers
Hi, I just install the Telegram Bot on my Debian 10 VPS with Python 3.9.4 but I get this error:
2021-04-26 23:55:14,370 - telegram.ext.dispatcher - ERROR - No error handlers are registered, logging exception.
Traceback (most recent call last):
File "/home/me/environments/binance39/lib/python3.9/site-packages/telegram/ext/dispatcher.py", line 442, in process_update
handler.handle_update(update, self, check, context)
File "/home/me/environments/binance39/lib/python3.9/site-packages/telegram/ext/conversationhandler.py", line 549, in handle_update
new_state = handler.handle_update(update, dispatcher, check_result, context)
File "/home/me/environments/binance39/lib/python3.9/site-packages/telegram/ext/handler.py", line 160, in handle_update
return self.callback(update, context)
File "/home/me/BTB-manager-telegram/btb_manager_telegram/handlers.py", line 251, in start
update.message.reply_text(
File "/home/me/environments/binance39/lib/python3.9/site-packages/telegram/message.py", line 689, in reply_text
return self.bot.send_message(
File "/home/me/environments/binance39/lib/python3.9/site-packages/telegram/bot.py", line 127, in decorator
result = func(*args, **kwargs)
File "/home/me/environments/binance39/lib/python3.9/site-packages/telegram/bot.py", line 475, in send_message
return self._message( # type: ignore[return-value]
File "/home/me/environments/binance39/lib/python3.9/site-packages/telegram/bot.py", line 296, in _message
result = self._post(endpoint, data, timeout=timeout, api_kwargs=api_kwargs)
File "/home/me/environments/binance39/lib/python3.9/site-packages/telegram/bot.py", line 259, in _post
return self.request.post(
File "/home/me/environments/binance39/lib/python3.9/site-packages/telegram/utils/request.py", line 349, in post
result = self._request_wrapper(
File "/home/me/environments/binance39/lib/python3.9/site-packages/telegram/utils/request.py", line 272, in _request_wrapper
raise BadRequest(message)
telegram.error.BadRequest: Can't parse entities: can't find end of bold entity at byte offset 9
I have also tried with Python 3.7 (which is the default in Debian 10) without chance. What I do wrong?
Thanks for any advice.
Dav
Update is only checked on bot startup
Might have to put a sleep timer before scheduling a new event, further inspection needed.
Right now the bot is tailored towards the default, one-coin strategy.
This could be done using Binance Trade Bot's api (which requires it to be running) or by directly interacting with the database.
Manually updating and copying the BTBManagerTelegram.py
every time there is an update is becoming an issue.
Find a solution that makes the installation more stress-free
Integrate black
and isort
as minimum.
Also, we can add flake8
with plugins.
As user @Brackyt suggested on Discord, add option to run the bot using screen
/Docker
instead of directly running with python
/nohup
I think it's a good idea to have the price of the buying order on the current value command, so you could check how well the coin is doing and take any decisions, and don't need to write down each order, or save the bot chat history.
Now that BTB-manager-telegram
transitioned from being a one-file utility to a project on its own, good coding practices should be followed.
Split the (almost 1000 lines) file into separate classes.
Better to pin dependencies in requirements.txt
file and add DependaBot for updating it.
As user @ienthach suggested on Discord, add the ability to only delete the current_coin_history
table from the db.
If a full path (e.g. /root/bot/install/dir
) is passed as argument -p
instead of a relative one (e.g. ../bot/install/dir
) BTBMT
is unable to start BTB
.
It might be due to this function:
BTB-manager-telegram/btb_manager_telegram/utils.py
Lines 75 to 86 in 50932ec
@DmytroLitvinov do you know more about this?
This PR will soon be merged into the main branch.
Compatibility issues should be investigated and fixed.
edeng23/binance-trade-bot#211
When I started the BTB-manager-telegram
project my goal was to give easy access to autmated trading to people who are not familiar with terminals and such.
I had chats with many of this project's users and many of them don't seem to be native english speakers.
I believe adding mulitple language support will be another step into the right direction and will provide even easier access to automated trading technology to people from anywhere in the world.
Separating current value
and current ratio
is a good idea as well as separating all those buttons in two pages.
The only changes to your PR I would suggest are:
Current ratio
to Current ratios
Configurations
sub-menu is pressed, stay in the Configurations
sub-menu after button action completition instead of going back to the main sub-menu__btn_current_ratio
and __btn_current_value
methodsThanks for the contributions!
Originally posted by @lorcalhost in #11 (comment)
Something along the lines of:
- Change: 1.38 (1.23%)
- Total change: 23.4 (42%)
Also, don't show change since last time for each coin but cumulative.
Not sure if this fully belongs here or not, but if the market suddenly tanks it could be nice to have some sort of "panic button" that sells the current coin (with option of either at a limit you choose or market sell, risky though) and stops the bot.
You can then restart the bot later when the market stabilises.
This may break if the script is run from a directory other than the project-directory.
A solution to this may be using os
and pathlib
to change the path to the project-directory.
Originally posted by @NovusEdge in #7 (comment)
Right now when I click on "Current ratios" I receive an error.
When I am trying to checkout logs from nohup.out
- there is no logging for the error.
So I manually added logging error and checked the error - I got: list index out of range
. But this is another issue I guess related to function text_4096_cutter
I think it's great to have a order history command, with the response.
Coin from, coin to
Coin value bought
Coin amount bought
Date of order placement
Order is done
Type of order
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.