Comments (12)
I think those two warnings should be eliminated now. Reopen if you find other problems.
from speedtables.
I don't have permission to reopen. Here is what happens after update:
In file included from stobj/include/ctable.h:37:0,
from stobj/Animinfo/Animinfo-1.1.c:17:
stobj/include/shared.c: In function ‘parse_flags’:
stobj/include/shared.c:1406:15: warning: variable ‘word’ set but not used [-Wunused-but-set-variable]
Thanks
from speedtables.
ok, i pushed another change. try now.
from speedtables.
Ok, this time I got farther. No compile errors. But the generated pkgIndex.tcl file does not have anything in it.
There is a file called 'libAniminfo.so'. When I do "load libAniminfo.so" from tclsh, I get the following:
% load libAniminfo.so
cannot find symbol "Animinfo_Init": /tmp/stobj/Animinfo/libAniminfo.so: undefined symbol: _Animinfo_Init
Animinfo # ldd libAniminfo.so
linux-vdso.so.1 => (0x00007fff7a9ff000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff93bc5b000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff93c242000)
from speedtables.
Can you send me a copy of the generated "Animinfo-1.1.c" file?
On 2012-02-03, at 21:22, ezx wrote:
Hell, I have tried using speedtables several times over the years, could never get it to work on Linux.
I am currently on Linux 64bit using the latest 8.6 Tcl source. Speedtables goes through configure/make/make install routine just fine. 'package require speedtable" also works. But after trying to create the Animinfo package using example from SorceForge docs:package require speedtable
speedtables Animinfo 1.1 {
table animation_characters {
varstring name indexed 1 unique 0
varstring home
varstring show indexed 1 unique 0
varstring dad
boolean alive default 1
varstring gender default male
int age
int coolness
}
}I get the following error (and the package Animinfo is never created):
In file included from stobj/include/ctable.h:37:0,
from stobj/Animinfo/Animinfo-1.1.c:17:
stobj/include/shared.c: In function ‘parse_flags’:
stobj/include/shared.c:1402:11: warning: variable ‘word’ set but not used [-Wunused-but-set-variable]
stobj/Animinfo/Animinfo-1.1.c: In function ‘animation_characters_sanity_check_pointer’:
stobj/Animinfo/Animinfo-1.1.c:590:3: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat]Hopefully this can be resolved.
Thanks
Reply to this email directly or view it on GitHub:
#23
from speedtables.
The file is here: http://38.102.33.30/Animinfo-1.1.c
from speedtables.
What distribution of Linux are you using? Can you also include the version of tcl and gcc that you have installed?
from speedtables.
I am on Linux Mint 12, 64bit, Tcl version 8.6, latest source, 64bit.
uname -a
Linux 4ghz 3.0.0-15-generic #26-Ubuntu SMP Fri Jan 20 17:23:00 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6.1/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.1-9ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++,go --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)
from speedtables.
I can't reproduce any problems on a Mint 12, 64-bit, Tcl version 8.5.10 (from binary apt-get) with the following example, so perhaps it is related to your Tcl version 8.6?
https://gist.github.com/1749935
$ uname -a
Linux bovine-virtual-machine 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:56:25 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
$ gcc --version
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
$ aptitude show tcl8.5-dev
Package: tcl8.5-dev
New: yes
State: installed
Automatically installed: no
Version: 8.5.10-1ubuntu1
$ ./anim.tcl
{Master Shake} {} {Aqua Teen Hunger Force} {} 1 male 4 -5
from speedtables.
Yes, it definitely looks like it is due to Tcl 8.6
I think this may be similar to the issue that is described here:
http://sourceforge.net/tracker/?func=detail&aid=3148192&group_id=10894&atid=110894
After enabling "set showCompilerCommands 1" in ctables/config.tcl, here are the compilation commands between Tcl 8.6 (non-working) vs Tcl 8.5 (working)...
Notably, in the output of "nm" all of the important symbols are "t" instead of "T", which means they are not being exported properly in the shared object file.
myexec {gcc -O2 -fPIC -DPACKAGE_NAME="tcl" -DPACKAGE_TARNAME="tcl" -DPACKAGE_VERSION="8.6" -DPACKAGE_STRING="tcl\ 8.6" -DPACKAGE_BUGREPORT="" -DPACKAGE_URL="" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DTCL_THREADS=1 -DTCL_CFGVAL_ENCODING="iso8859-1" -DHAVE_ZLIB=1 -DMODULE_SCOPE=extern -DTCL_SHLIB_EXT=".so" -DTCL_CFG_OPTIMIZED=1 -DTCL_CFG_DEBUG=1 -DTCL_TOMMATH=1 -DMP_PREC=4 -D_LARGEFILE64_SOURCE=1 -DTCL_WIDE_INT_IS_LONG=1 -DHAVE_GETCWD=1 -DHAVE_MKSTEMP=1 -DHAVE_OPENDIR=1 -DHAVE_STRTOL=1 -DHAVE_WAITPID=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GETADDRINFO=1 -DHAVE_FREEADDRINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_STRUCT_ADDRINFO=1 -DHAVE_STRUCT_IN6_ADDR=1 -DHAVE_STRUCT_SOCKADDR_IN6=1 -DHAVE_STRUCT_SOCKADDR_STORAGE=1 -DHAVE_GETPWUID_R_5=1 -DHAVE_GETPWUID_R=1 -DHAVE_GETPWNAM_R_5=1 -DHAVE_GETPWNAM_R=1 -DHAVE_GETGRGID_R_5=1 -DHAVE_GETGRGID_R=1 -DHAVE_GETGRNAM_R_5=1 -DHAVE_GETGRNAM_R=1 -DHAVE_GETHOSTBYNAME_R_6=1 -DHAVE_GETHOSTBYNAME_R=1 -DHAVE_GETHOSTBYADDR_R_8=1 -DHAVE_GETHOSTBYADDR_R=1 -DUSE_TERMIOS=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_GMTIME_R=1 -DHAVE_LOCALTIME_R=1 -DHAVE_MKTIME=1 -DHAVE_TM_GMTOFF=1 -DHAVE_TIMEZONE_VAR=1 -DHAVE_STRUCT_STAT_ST_BLOCKS=1 -DHAVE_STRUCT_STAT_ST_BLKSIZE=1 -DHAVE_BLKCNT_T=1 -DHAVE_INTPTR_T=1 -DHAVE_UINTPTR_T=1 -DHAVE_SIGNED_CHAR=1 -DHAVE_LANGINFO=1 -DHAVE_MKSTEMPS=1 -DHAVE_SYS_IOCTL_H=1 -DTCL_UNLOAD_DLLS=1 -pipe -fvisibility=hidden -I/usr/local/tcl8.6/include -DHAVE_NETINET_ETHER_H=1 -Istobj/include -Wall -DUSE_TCL_STUBS=1 -c stobj/Animinfo/Animinfo-1.1.c -o stobj/Animinfo/Animinfo-1.1.o}
gcc -O2 -fPIC -DPACKAGE_NAME="tcl" -DPACKAGE_TARNAME="tcl" -DPACKAGE_VERSION="8.6" -DPACKAGE_STRING="tcl\ 8.6" -DPACKAGE_BUGREPORT="" -DPACKAGE_URL="" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DTCL_THREADS=1 -DTCL_CFGVAL_ENCODING="iso8859-1" -DHAVE_ZLIB=1 -DMODULE_SCOPE=extern -DTCL_SHLIB_EXT=".so" -DTCL_CFG_OPTIMIZED=1 -DTCL_CFG_DEBUG=1 -DTCL_TOMMATH=1 -DMP_PREC=4 -D_LARGEFILE64_SOURCE=1 -DTCL_WIDE_INT_IS_LONG=1 -DHAVE_GETCWD=1 -DHAVE_MKSTEMP=1 -DHAVE_OPENDIR=1 -DHAVE_STRTOL=1 -DHAVE_WAITPID=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GETADDRINFO=1 -DHAVE_FREEADDRINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_STRUCT_ADDRINFO=1 -DHAVE_STRUCT_IN6_ADDR=1 -DHAVE_STRUCT_SOCKADDR_IN6=1 -DHAVE_STRUCT_SOCKADDR_STORAGE=1 -DHAVE_GETPWUID_R_5=1 -DHAVE_GETPWUID_R=1 -DHAVE_GETPWNAM_R_5=1 -DHAVE_GETPWNAM_R=1 -DHAVE_GETGRGID_R_5=1 -DHAVE_GETGRGID_R=1 -DHAVE_GETGRNAM_R_5=1 -DHAVE_GETGRNAM_R=1 -DHAVE_GETHOSTBYNAME_R_6=1 -DHAVE_GETHOSTBYNAME_R=1 -DHAVE_GETHOSTBYADDR_R_8=1 -DHAVE_GETHOSTBYADDR_R=1 -DUSE_TERMIOS=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_GMTIME_R=1 -DHAVE_LOCALTIME_R=1 -DHAVE_MKTIME=1 -DHAVE_TM_GMTOFF=1 -DHAVE_TIMEZONE_VAR=1 -DHAVE_STRUCT_STAT_ST_BLOCKS=1 -DHAVE_STRUCT_STAT_ST_BLKSIZE=1 -DHAVE_BLKCNT_T=1 -DHAVE_INTPTR_T=1 -DHAVE_UINTPTR_T=1 -DHAVE_SIGNED_CHAR=1 -DHAVE_LANGINFO=1 -DHAVE_MKSTEMPS=1 -DHAVE_SYS_IOCTL_H=1 -DTCL_UNLOAD_DLLS=1 -pipe -fvisibility=hidden -I/usr/local/tcl8.6/include -DHAVE_NETINET_ETHER_H=1 -Istobj/include -Wall -DUSE_TCL_STUBS=1 -c stobj/Animinfo/Animinfo-1.1.c -o stobj/Animinfo/Animinfo-1.1.o
myexec {gcc -shared -pipe -Wl,--export-dynamic -o stobj/Animinfo/libAniminfo.so stobj/Animinfo/Animinfo-1.1.o -fPIC -L/usr/local/tcl8.6/lib -ltclstub8.6}
gcc -shared -pipe -Wl,--export-dynamic -o stobj/Animinfo/libAniminfo.so stobj/Animinfo/Animinfo-1.1.o -fPIC -L/usr/local/tcl8.6/lib -ltclstub8.6
- pkg_mkIndex -verbose stobj /.tcl /.so
warning: error while loading Animinfo/libAniminfo.so: cannot find symbol "Animinfo_Init": stobj/Animinfo/libAniminfo.so: undefined symbol: _Animinfo_Init
can't find package Animinfo
while executing
"package require Animinfo"
(file "./anim.tcl" line 18)
bovine@bovine-virtual-machine ~/speedtables $ nm Animinfo/libAniminfo.so |grep Init
nm: 'Animinfo/libAniminfo.so': No such file
bovine@bovine-virtual-machine ~/speedtables $ nm stobj/Animinfo/libAniminfo.so |grep Init
0000000000018670 t Animinfo_Init
0000000000018ac0 t Animinfo_SafeInit
000000000000a160 t Shared_Init
0000000000018ae0 t Tcl_InitStubs
000000000000d340 t ctable_InitHashTable
myexec {x86_64-linux-gnu-gcc -O2 -fPIC -DPACKAGE_NAME="tcl" -DPACKAGE_TARNAME="tcl" -DPACKAGE_VERSION="8.5" -DPACKAGE_STRING="tcl\ 8.5" -DPACKAGE_BUGREPORT="" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DHAVE_PTHREAD_ATTR_SETSTACKSIZE=1 -DHAVE_PTHREAD_GETATTR_NP=1 -DGETATTRNP_NOT_DECLARED=1 -DTCL_THREADS=1 -DTCL_CFGVAL_ENCODING="iso8859-1" -DMODULE_SCOPE=extern\ attribute((visibility("hidden"))) -DTCL_SHLIB_EXT=".so" -DTCL_CFG_OPTIMIZED=1 -DTCL_CFG_DEBUG=1 -DTCL_TOMMATH=1 -DMP_PREC=4 -D_LARGEFILE64_SOURCE=1 -DTCL_WIDE_INT_IS_LONG=1 -DHAVE_GETCWD=1 -DHAVE_OPENDIR=1 -DHAVE_STRTOL=1 -DHAVE_WAITPID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETPWUID_R_5=1 -DHAVE_GETPWUID_R=1 -DHAVE_GETPWNAM_R_5=1 -DHAVE_GETPWNAM_R=1 -DHAVE_GETGRGID_R_5=1 -DHAVE_GETGRGID_R=1 -DHAVE_GETGRNAM_R_5=1 -DHAVE_GETGRNAM_R=1 -DHAVE_GETHOSTBYNAME_R_6=1 -DHAVE_GETHOSTBYNAME_R=1 -DHAVE_GETHOSTBYADDR_R_8=1 -DHAVE_GETHOSTBYADDR_R=1 -DUSE_TERMIOS=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_GMTIME_R=1 -DHAVE_LOCALTIME_R=1 -DHAVE_MKTIME=1 -DHAVE_TM_GMTOFF=1 -DHAVE_TIMEZONE_VAR=1 -DHAVE_STRUCT_STAT_ST_BLOCKS=1 -DHAVE_STRUCT_STAT_ST_BLKSIZE=1 -DHAVE_BLKCNT_T=1 -DHAVE_INTPTR_T=1 -DHAVE_UINTPTR_T=1 -DHAVE_SIGNED_CHAR=1 -DHAVE_LANGINFO=1 -DHAVE_SYS_IOCTL_H=1 -DTCL_UNLOAD_DLLS=1 -DTCL_STACK_GROWS_UP=1 -g -O2 -fno-unit-at-a-time -pipe -I/usr/include/tcl8.5 -DHAVE_NETINET_ETHER_H=1 -Istobj/include -Wall -DUSE_TCL_STUBS=1 -c stobj/Animinfo/Animinfo-1.1.c -o stobj/Animinfo/Animinfo-1.1.o}
x86_64-linux-gnu-gcc -O2 -fPIC -DPACKAGE_NAME="tcl" -DPACKAGE_TARNAME="tcl" -DPACKAGE_VERSION="8.5" -DPACKAGE_STRING="tcl\ 8.5" -DPACKAGE_BUGREPORT="" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DHAVE_PTHREAD_ATTR_SETSTACKSIZE=1 -DHAVE_PTHREAD_GETATTR_NP=1 -DGETATTRNP_NOT_DECLARED=1 -DTCL_THREADS=1 -DTCL_CFGVAL_ENCODING="iso8859-1" -DMODULE_SCOPE=extern\ attribute((visibility("hidden"))) -DTCL_SHLIB_EXT=".so" -DTCL_CFG_OPTIMIZED=1 -DTCL_CFG_DEBUG=1 -DTCL_TOMMATH=1 -DMP_PREC=4 -D_LARGEFILE64_SOURCE=1 -DTCL_WIDE_INT_IS_LONG=1 -DHAVE_GETCWD=1 -DHAVE_OPENDIR=1 -DHAVE_STRTOL=1 -DHAVE_WAITPID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETPWUID_R_5=1 -DHAVE_GETPWUID_R=1 -DHAVE_GETPWNAM_R_5=1 -DHAVE_GETPWNAM_R=1 -DHAVE_GETGRGID_R_5=1 -DHAVE_GETGRGID_R=1 -DHAVE_GETGRNAM_R_5=1 -DHAVE_GETGRNAM_R=1 -DHAVE_GETHOSTBYNAME_R_6=1 -DHAVE_GETHOSTBYNAME_R=1 -DHAVE_GETHOSTBYADDR_R_8=1 -DHAVE_GETHOSTBYADDR_R=1 -DUSE_TERMIOS=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_GMTIME_R=1 -DHAVE_LOCALTIME_R=1 -DHAVE_MKTIME=1 -DHAVE_TM_GMTOFF=1 -DHAVE_TIMEZONE_VAR=1 -DHAVE_STRUCT_STAT_ST_BLOCKS=1 -DHAVE_STRUCT_STAT_ST_BLKSIZE=1 -DHAVE_BLKCNT_T=1 -DHAVE_INTPTR_T=1 -DHAVE_UINTPTR_T=1 -DHAVE_SIGNED_CHAR=1 -DHAVE_LANGINFO=1 -DHAVE_SYS_IOCTL_H=1 -DTCL_UNLOAD_DLLS=1 -DTCL_STACK_GROWS_UP=1 -g -O2 -fno-unit-at-a-time -pipe -I/usr/include/tcl8.5 -DHAVE_NETINET_ETHER_H=1 -Istobj/include -Wall -DUSE_TCL_STUBS=1 -c stobj/Animinfo/Animinfo-1.1.c -o stobj/Animinfo/Animinfo-1.1.o
myexec {gcc -shared -pipe -Wl,--export-dynamic -o stobj/Animinfo/libAniminfo.so stobj/Animinfo/Animinfo-1.1.o -fPIC -L/usr/lib -ltclstub8.5}
gcc -shared -pipe -Wl,--export-dynamic -o stobj/Animinfo/libAniminfo.so stobj/Animinfo/Animinfo-1.1.o -fPIC -L/usr/lib -ltclstub8.5
- pkg_mkIndex -verbose stobj /.tcl /.so
bovine@bovine-virtual-machine ~/speedtables $ nm stobj/Animinfo/libAniminfo.so |grep Init
000000000001bf80 T Animinfo_Init
000000000001bf70 T Animinfo_SafeInit
000000000000a1f0 T Shared_Init
000000000001d0b0 T TclTomMathInitializeStubs
000000000001ced0 T Tcl_InitStubs
000000000000be60 T ctable_InitHashTable
from speedtables.
Thank you very much.
It finally works and I am very excited to try it out. There is still a minor issue with a 'make test' case failing for ctable_server, but it seems to be related to test code itself:
cd ctable_server && make test
make[1]: Entering directory /root/speedtables/ctable_server' server/test.tcl /bin/bash: server/test.tcl: No such file or directory make[1]: *** [test] Error 127 make[1]: Leaving directory
/root/speedtables/ctable_server'
make: *** [test] Error 2
from speedtables.
I think this is because the test cases are trying to explicitly use tclsh8.5
I'll look into fixing those later.
from speedtables.
Related Issues (20)
- _dirty field not automatically updated HOT 2
- speedtable thread safety HOT 2
- tclobj HOT 3
- cpp branch will build and install even if boost-libs not present
- Reimplement support for flags to mmap (nosync nocore) HOT 3
- speed tables doesn't work with clang and other non-GCC compilers HOT 10
- ckalloc no longer returns char* in tcl8.6 HOT 2
- Mapped file base address is not honored HOT 3
- compilation issues on Ubuntu HOT 3
- speedtables startup locking sometimes fails to provide mutual exclusion / fails outright HOT 4
- stapi::refresh_ctable doesn't rewrite the TSV cachefile HOT 6
- stapi::refresh_ctable does not clear the initial table if no time column is provided HOT 5
- stapi::refresh_ctable does not handle SQL generation errors HOT 5
- More than one call to stapi::init can confuse existing speedtables HOT 5
- search with match against integer fields will crash HOT 6
- search -code with return statement does not stop proc execution HOT 17
- search fails to fully unset the data in the data array for each loop HOT 30
- Using a speedtable shared library from two interpreters in the same process leads to a crash HOT 1
- Incompatibility between compare "in" operator in native speedtables versus stapi-based postgres version HOT 2
- Pacakge versions for 1.13.18 say 1.13.17 HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from speedtables.