janvidar / uhub Goto Github PK
View Code? Open in Web Editor NEWA high performance ADC peer to peer message hub.
Home Page: http://www.uhub.org
License: GNU General Public License v3.0
A high performance ADC peer to peer message hub.
Home Page: http://www.uhub.org
License: GNU General Public License v3.0
[07.10.19] 00:45.29 ] *** Parts: andr1961
[07.10.19] 00:45.29 ] *** Joins: andr1961
[07.10.19] 00:46.18 ] *** Parts: trance[]maniac
[07.10.19] 00:46.18 ] *** Joins: trance[]maniac
To avoid a too fast user's reconnection. It can be monitored by the IP address (and may probably be controlled by antiflood timer).
I took the standard Dockerfile and made a docker-compose.yml with the following content:
version: "3"
services:
uhub:
image: uhub
build: ./build/uhub
volumes:
- ./conf:/conf
ports:
- "411:411"
- "1511:1511"
Then I made a uhub.conf:
server_port=411
server_bind_addr=any
server_alt_ports = 1511
# The maximum amount of users allowed on the hub.
max_users=100
# If 1, will show a "Powered by uHub/{VERSION}".
show_banner=1
# If enabled then operating system and cpu architecture is part of the banner.
show_banner_sys_info=1
# Allow only registered users on the hub if set to 1.
registered_users_only=1
# A server name and description.
hub_name=Test Hub
hub_description=Powered by uHub
# Set this to 0, and the hub will disconnect everyone
hub_enabled=1
# Access control list (user database)
file_acl=/conf/users.conf
And an ACL:
user_admin testadm:11admin11
When I want to connect with EiskaltDC++, I get the following messages:
[20:07:54] <Test Hub> Powered by uhub/0.5.1-git-78a7039 on Linux/AMD64
[20:07:54] <Test Hub> Hub is for registered users only
[20:07:54] * Hub is for registered users only
What am I doing wrong?
[ 23%] Building C object CMakeFiles/network.dir/src/network/openssl.c.o
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c: In function 'net_ssl_library_shutdown':
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:94:2: warning: 'ERR_remove_state' is deprecated [-Wdeprecated-declarations]
ERR_remove_state(0);
^~~~~~~~~~~~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from /tmp/makepkg/uhub-git/src/uhub/src/system.h:102,
from /tmp/makepkg/uhub-git/src/uhub/src/uhub.h:28,
from /tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:20:
/usr/include/openssl/err.h:248:1: note: declared here
DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid))
^
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c: In function 'add_io_stats':
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:109:17: error: dereferencing pointer to incomplete type 'BIO {aka struct bio_st}'
if (handle->bio->num_read > handle->bytes_rx)
^~
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c: In function 'get_ssl_method':
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:131:4: warning: 'TLSv1_method' is deprecated [-Wdeprecated-declarations]
return TLSv1_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from /tmp/makepkg/uhub-git/src/uhub/src/system.h:102,
from /tmp/makepkg/uhub-git/src/uhub/src/uhub.h:28,
from /tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:20:
/usr/include/openssl/ssl.h:1612:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */
^
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:133:4: warning: 'TLSv1_1_method' is deprecated [-Wdeprecated-declarations]
return TLSv1_1_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from /tmp/makepkg/uhub-git/src/uhub/src/system.h:102,
from /tmp/makepkg/uhub-git/src/uhub/src/uhub.h:28,
from /tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:20:
/usr/include/openssl/ssl.h:1618:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */
^
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:135:4: warning: 'TLSv1_2_method' is deprecated [-Wdeprecated-declarations]
return TLSv1_2_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from /tmp/makepkg/uhub-git/src/uhub/src/system.h:102,
from /tmp/makepkg/uhub-git/src/uhub/src/uhub.h:28,
from /tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:20:
/usr/include/openssl/ssl.h:1624:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */
^
make[2]: *** [CMakeFiles/network.dir/build.make:255: CMakeFiles/network.dir/src/network/openssl.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:331: CMakeFiles/network.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
greetings
As a new user of uhub I didn't know that admin command is accessed using !
.
It's not even written in the documentation part of the uhub website: https://www.uhub.org/doc/getstarted.php
Thank you
So i'm glad i can post bugs here. In github.
[21:29] VEOC46ZHWQHG6Z2HBCMFV2ARW5M67TWFSIN3NQY, bobby [84.106.136.89] - update error
[21:30] BYFV4RZJDMPFYYBIARYVMW6MIJQTHAUGVUKEPIQ, MORE_2016 [178.140.161.128] - update error
[21:43] MUCEI5TIPH4XYCOP6VC76JATHRARI7EDXCQ5YQY, Aviatorofff [95.27.250.237] - update error
What does it mean?
After instelling uhub (both package and source) it fails to load the mod_welcome.so plugin while sqlite and logging do get loaded. All those files have the same rights on the server and even when giving the files 777 rights the issue remains.
2017-04-13 20:21:05 ERROR: Unable to open file /etc/uhub/users.conf: No such file or directory
2017-04-13 20:21:05 INFO: Starting uhub/0.5.0, listening on :::1511...
2017-04-13 20:21:05 INFO: Loaded plugin: /usr/lib/uhub/mod_auth_sqlite.so: SQLite authentication plugin, version 1.0.
2017-04-13 20:21:05 INFO: Loaded plugin: /usr/lib/uhub/mod_logging.so: Logging plugin, version 1.0.
2017-04-13 20:21:05 ERROR: Unable to load plugin: /usr/lib/uhub/mod_welcome.so - Failed to initialize: Unable to read motd file.
2017-04-13 20:21:05 FATAL: Unable to load plugins.
Compiling from the archlinux aur package gives me the following errors:
-- Checking for one of the modules 'libsystemd-daemon'
CMake Error at /usr/share/cmake-3.4/Modules/FindPkgConfig.cmake:568 (message):
None of the required 'libsystemd-daemon' found
Call Stack (most recent call first):
CMakeLists.txt:59 (pkg_search_module)
-- Checking for one of the modules 'libsystemd-journal'
CMake Error at /usr/share/cmake-3.4/Modules/FindPkgConfig.cmake:568 (message):
None of the required 'libsystemd-journal' found
Call Stack (most recent call first):
CMakeLists.txt:60 (pkg_search_module)
It seems that libsystemd-daemon and libsystems-journal were merged into libsystemd since version 210.
If i replace the following lines:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2f3941d..1d6c1d3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -56,8 +56,8 @@ endif()
if (SYSTEMD_SUPPORT)
INCLUDE(FindPkgConfig)
- pkg_search_module(SD_DAEMON REQUIRED libsystemd-daemon)
- pkg_search_module(SD_JOURNAL REQUIRED libsystemd-journal)
+ pkg_search_module(SD_DAEMON REQUIRED libsystemd)
+ pkg_search_module(SD_JOURNAL REQUIRED libsystemd)
endif()
if (MSVC)
I can compile without problems.
users.conf
#operator "Ник" "Пароль"
#user "Ник" "Пароль"
#admin "Ник" "Пароль"
admin "DCBEELINEKZ" "RAFA"
ERROR: Unknown ACL command on line 4: 'admin "DCBEELINEKZ" "RAFA"'
Currently the uhub module mod_auth_sqlite
stores all user passwords in plaintext. It would be advisable to use a common hashing scheme such as sha256 and salt to avoid having these passwords clear in the database.
Cheers!
After initial successfull uHub install ver. 0.5.1 this happened:
motd.txt was missing in etc/uhub - this caused uHub failure to start - i see this is issue already posted.
I did add motd.txt to that folder manually - and this resolved issue.
Users.conf doesn't exist - also reported here.
Then when trying to make an admin account via command line - error table users doesn't exist.
How do i fix that?
Hey! It would be fantastic if a new "official" release could be published, the latest release (0.5.0) is from 2014.
Thanks for your work!
Client–client secure connections requests should not be broadcasted by the hub (just turn them into regular) if the hub does not have TLS enabled.
That should be made for client TLS version compatibility reasons.
Hi developers:
We made a large scale security static analysis on several open source projects, and found some mistakes in uhub_0.4.1. In the @src/network/openssl.c:328:
ssize_t net_con_ssl_handshake(struct net_connection* con, enum net_con_ssl_mode ssl_mode, struct ssl_context_handle* ssl_ctx)
{
[...]
else
{
handle->ssl = SSL_new(SSL_CTX_new(TLSv1_method()));
SSL_set_fd(handle->ssl, con->sd);
handle->bio = SSL_get_rbio(handle->ssl);
con->ssl = (struct ssl_handle*) handle;
return net_con_ssl_connect(con);
}
You do SSL_connect(ssl) in net_con_ssl_connect(con) and when finish this step,you immedicately start to execute read/write operation without verify certificate,which can lead to MITMattack and cause leakage of sensitive data.We recommand you add verify operation such as SSL_CTX_set_verify or SSL_get_peer_certificate to guarantee the security.We have send the bug report to Ubuntu launchpad,and also inform you of such news.Here are the link:
https://bugs.launchpad.net/ubuntu/+source/uhub/+bug/1677495
I was trying to cross compile uhub for windows, but i ended up with the following error:
[ 53%] Linking C executable autotest-bin.exe
libnetwork.a(connection.c.obj):connection.c:(.text+0x868): undefined reference to `__imp_htons'
libnetwork.a(connection.c.obj):connection.c:(.text+0x8dc): undefined reference to `__imp_htons'
libnetwork.a(dnsresolver.c.obj):dnsresolver.c:(.text+0x353): undefined reference to `__imp_getaddrinfo'
libnetwork.a(dnsresolver.c.obj):dnsresolver.c:(.text+0x47b): undefined reference to `__imp_freeaddrinfo'
libnetwork.a(ipcalc.c.obj):ipcalc.c:(.text+0x36b): undefined reference to `__imp_htons'
libnetwork.a(ipcalc.c.obj):ipcalc.c:(.text+0x41d): undefined reference to `__imp_htons'
libnetwork.a(network.c.obj):network.c:(.text+0x78): undefined reference to `__imp_WSAStartup'
libnetwork.a(network.c.obj):network.c:(.text+0xaf): undefined reference to `__imp_WSACleanup'
libnetwork.a(network.c.obj):network.c:(.text+0x114): undefined reference to `__imp_WSACleanup'
libnetwork.a(network.c.obj):network.c:(.text+0x194): undefined reference to `__imp_WSAGetLastError'
libnetwork.a(network.c.obj):network.c:(.text+0x20e): undefined reference to `__imp_setsockopt'
libnetwork.a(network.c.obj):network.c:(.text+0x271): undefined reference to `__imp_getsockopt'
libnetwork.a(network.c.obj):network.c:(.text+0x2d1): undefined reference to `__imp_ioctlsocket'
libnetwork.a(network.c.obj):network.c:(.text+0x51c): undefined reference to `__imp_closesocket'
libnetwork.a(network.c.obj):network.c:(.text+0x561): undefined reference to `__imp_shutdown'
libnetwork.a(network.c.obj):network.c:(.text+0x588): undefined reference to `__imp_shutdown'
libnetwork.a(network.c.obj):network.c:(.text+0x5af): undefined reference to `__imp_shutdown'
libnetwork.a(network.c.obj):network.c:(.text+0x62f): undefined reference to `__imp_accept'
libnetwork.a(network.c.obj):network.c:(.text+0x7e7): undefined reference to `__imp_connect'
libnetwork.a(network.c.obj):network.c:(.text+0x849): undefined reference to `__imp_socket'
libnetwork.a(network.c.obj):network.c:(.text+0x91d): undefined reference to `__imp_socket'
libnetwork.a(network.c.obj):network.c:(.text+0xa7d): undefined reference to `__imp_WSAAddressToStringA'
libnetwork.a(network.c.obj):network.c:(.text+0xb22): undefined reference to `__imp_WSAStringToAddressA'
libnetwork.a(network.c.obj):network.c:(.text+0xbf0): undefined reference to `__imp_getpeername'
libnetwork.a(network.c.obj):network.c:(.text+0xd02): undefined reference to `__imp_getsockname'
libnetwork.a(network.c.obj):network.c:(.text+0xd93): undefined reference to `__imp_recv'
libnetwork.a(network.c.obj):network.c:(.text+0xe02): undefined reference to `__imp_send'
libnetwork.a(network.c.obj):network.c:(.text+0xe66): undefined reference to `__imp_bind'
libnetwork.a(network.c.obj):network.c:(.text+0xeae): undefined reference to `__imp_listen'
libnetwork.a(select.c.obj):select.c:(.text+0x296): undefined reference to `__imp_select'
libnetwork.a(select.c.obj):select.c:(.text+0x339): undefined reference to `__WSAFDIsSet'
libnetwork.a(select.c.obj):select.c:(.text+0x35c): undefined reference to `__WSAFDIsSet'
collect2: error: ld returned 1 exit status
CMakeFiles/autotest-bin.dir/build.make:563: recipe for target 'autotest-bin.exe' failed
make[2]: *** [autotest-bin.exe] Error 1
CMakeFiles/Makefile2:68: recipe for target 'CMakeFiles/autotest-bin.dir/all' failed
make[1]: *** [CMakeFiles/autotest-bin.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
i tried googling, but the only solution i found - including ws2_32 in the target_link_libraries line - is already present. It seems it somehow doesn't find the ws2_32 lib althrough it is present:
find /usr/x86_64-w64-mingw32/ -name "*ws2_32*"
/usr/x86_64-w64-mingw32/lib/libws2_32.a
Thoughts?
The new "de-improved" GH client for WIN is apparently unable to translate remote repo links such as what you have in the thirdparty folder which is a remote junction to your SQLite repo. This makes it currently impossible (from everything I have tried) to simply clone the repo and keep it up to date, rather than manually downloading the master.zip.
If possible since it has not changed in almost a decade and is only a small handful of files, if you could possibly consider just moving those few SQLite files needed into the thirdparty folder it would greatly simplify things. TIA!
There is a need for 'limit_min_hubs' option meaning minimum user/reg/op hubs combined.
Just because H:0/0/1 or H:0/1/0 are always possible and won't work when limit_min_hubs_user = 1
[17:18:28] limit_min_share still works funny
[17:18:45] you should look at the code for that variable :p
[17:22:31] Dj_Offset@work https://github.com/janvidar/uhub/blob/0.3.x-stable/src/core/inf.c#L491
[17:23:45] where is hub_get_min_share defined?
[17:24:00] Dj_Offset@work in hub.c I guess
[17:24:50] Dj_Offset@work it is 1024_1024_hub->config->limit_min_share
[17:25:19] Dj_Offset@work oh
[17:25:21] Dj_Offset@work that might fail
[17:25:49] could it now? :p
[17:26:10] Dj_Offset@work that should be uint64_t n = hub->config->limit_min_share; n _= (1024_1024); return n;
[17:26:36] Dj_Offset@work otherwise limit_max_share could overflow and set a different limit.
[17:26:53] Dj_Offset@work since it is an int (32 bit)
[17:27:23] right, could that be the bug that i'm dealing with here?
[17:27:34] Dj_Offset@work yep, could be
[17:27:50] Dj_Offset@work or it could be in the check_limits function I linked to above.
Can someone make a pluging for +regme ?? :)
HBRI extension supported by AirDC++: https://forum.dcbase.org/viewtopic.php?t=771
Mixing IPv4/IPv6 users in a single hub is currently somewhat problematic if a user can't be accessible via both IP protocols simultaneously.
Cheers
ACL 'deny_ip' option has no effect.
Uhub has 22 branches 21 are stalled, and 15 have more dev (see the number of commit in parentheses) than the master one:
Maybe should you remove the 6 others, or are there reasons to keep them?
And maybe should you merge some ready-work of theses branches?
Built 0.5.0 on OpenBSD 5.7 and then, after experiencing this issue, built current git. No dice.
Couldn't make it work with LibreSSL, with config files and certificate identical to those used on a Linux server.
Server runs but clients can't connect.
Clientside (eiskalt) error looks like: Fail: SSL Error: error:00000001:lib(0):func(0):reason(1) (0, 1).
With TLS disabled, clients can connect just fine. But of course that's not ok in the present world.
==4470==
==4470== HEAP SUMMARY:
==4470== in use at exit: 8,316 bytes in 416 blocks
==4470== total heap usage: 528,264 allocs, 527,848 frees, 64,064,295 bytes allocated
==4470==
==4470== 16 bytes in 1 blocks are still reachable in loss record 1 of 3
==4470== at 0x402A17C: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==4470== by 0x40F594B: ??? (in /lib/i386-linux-gnu/libcrypto.so.1.0.0)
==4470== by 0x40F5F21: CRYPTO_malloc (in /lib/i386-linux-gnu/libcrypto.so.1.0.0)
==4470== by 0x416DE5F: sk_new (in /lib/i386-linux-gnu/libcrypto.so.1.0.0)
==4470== by 0x409D5DD: ??? (in /lib/i386-linux-gnu/libssl.so.1.0.0)
==4470== by 0x409F6E3: SSL_COMP_get_compression_methods (in /lib/i386-linux-gnu/libssl.so.1.0.0)
==4470== by 0x40A4FAD: SSL_library_init (in /lib/i386-linux-gnu/libssl.so.1.0.0)
==4470== by 0x80627AD: net_ssl_library_init (in /home/dc/src/uhub/uhub)
==4470== by 0x8063A28: net_initialize (in /home/dc/src/uhub/uhub)
==4470== by 0x804F4E6: main_loop (in /home/dc/src/uhub/uhub)
==4470== by 0x804FCEF: main (in /home/dc/src/uhub/uhub)
==4470==
==4470== 20 bytes in 1 blocks are still reachable in loss record 2 of 3
==4470== at 0x402A17C: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==4470== by 0x40F594B: ??? (in /lib/i386-linux-gnu/libcrypto.so.1.0.0)
==4470== by 0x40F5F21: CRYPTO_malloc (in /lib/i386-linux-gnu/libcrypto.so.1.0.0)
==4470== by 0x416DE41: sk_new (in /lib/i386-linux-gnu/libcrypto.so.1.0.0)
==4470== by 0x409D5DD: ??? (in /lib/i386-linux-gnu/libssl.so.1.0.0)
==4470== by 0x409F6E3: SSL_COMP_get_compression_methods (in /lib/i386-linux-gnu/libssl.so.1.0.0)
==4470== by 0x40A4FAD: SSL_library_init (in /lib/i386-linux-gnu/libssl.so.1.0.0)
==4470== by 0x80627AD: net_ssl_library_init (in /home/dc/src/uhub/uhub)
==4470== by 0x8063A28: net_initialize (in /home/dc/src/uhub/uhub)
==4470== by 0x804F4E6: main_loop (in /home/dc/src/uhub/uhub)
==4470== by 0x804FCEF: main (in /home/dc/src/uhub/uhub)
valgrind --leak-check=full --show-leak-kinds=all ./uhub -vvvv
==4470==
==4470== 8,280 bytes in 414 blocks are definitely lost in loss record 3 of 3
==4470== at 0x402A17C: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==4470== by 0x8068C87: hub_malloc_zero (in /home/dc/src/uhub/uhub)
==4470== by 0x8066200: net_con_set_timeout (in /home/dc/src/uhub/uhub)
==4470== by 0x8059443: probe_create (in /home/dc/src/uhub/uhub)
==4470== by 0x80528E1: net_on_accept (in /home/dc/src/uhub/uhub)
==4470== by 0x806599A: net_con_callback (in /home/dc/src/uhub/uhub)
==4470== by 0x8064CFB: net_backend_process_epoll (in /home/dc/src/uhub/uhub)
==4470== by 0x806375B: net_backend_process (in /home/dc/src/uhub/uhub)
==4470== by 0x80583CA: hub_event_loop (in /home/dc/src/uhub/uhub)
==4470== by 0x804F623: main_loop (in /home/dc/src/uhub/uhub)
==4470== by 0x804FCEF: main (in /home/dc/src/uhub/uhub)
==4470==
==4470== LEAK SUMMARY:
==4470== definitely lost: 8,280 bytes in 414 blocks
==4470== indirectly lost: 0 bytes in 0 blocks
==4470== possibly lost: 0 bytes in 0 blocks
==4470== still reachable: 36 bytes in 2 blocks
==4470== suppressed: 0 bytes in 0 blocks
==4470==
==4470== For counts of detected and suppressed errors, rerun with: -v
==4470== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Sets a limit for a minimum possible search request length to avoid high resources use.
Because the sender gets tons of auto-replies.
Message from the hub itself would be better.
When 'chat_is_privileged' set to 1 there is no related info message.
'msg_chat_is_privileged' needed.
This package apparently fails to build on AArch64, with a simple patch to fix the issue.
At NixOS we can confirm that the package at least builds with the patch applied.
Do you think this could get upstream? :)
I: uhub: hyphen-used-as-minus-sign usr/share/man/man1/uhub.1.gz:26
N:
N: This manual page seems to contain a hyphen where a minus sign was
N: intended. By default, "-" chars are interpreted as hyphens (U+2010) by
N: groff, not as minus signs (U+002D). Since options to programs use minus
N: signs (U+002D), this means for example in UTF-8 locales that you cannot
N: cut and paste options, nor search for them easily. The Debian groff
N: package currently forces "-" to be interpreted as a minus sign due to
N: the number of manual pages with this problem, but this is a
N: Debian-specific modification and hopefully eventually can be removed.
N:
N: "-" must be escaped ("-") to be interpreted as minus. If you really
N: intend a hyphen (normally you don't), write it as "(hy" to emphasise
N: that fact. See groff(7) and especially groff_char(7) for details, and
N: also the thread starting with
N: http://lists.debian.org/debian-devel/2003/debian-devel-200303/msg01481.h
N: tml
N:
N: If you use some tool that converts your documentation to groff format,
N: this tag may indicate a bug in the tool. Some tools convert dashes of
N: any kind to hyphens. The safe way of converting dashes is to convert
N: them to "-".
N:
N: Because this error can occur very often, Lintian shows only the first 10
N: occurrences for each man page and give the number of suppressed
N: occurrences. If you want to see all warnings, run Lintian with the
N: -d/--debug option.
N:
N: Refer to /usr/share/doc/groff-base/README.Debian and the groff_char(7)
N: manual page for details.
N:
N: Severity: wishlist, Certainty: possible
N:
N: Check: manpages, Type: binary
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.