juliarobotics / lcmcore.jl Goto Github PK
View Code? Open in Web Editor NEWLow-level Julia bindings for the LCM communications library
License: Other
Low-level Julia bindings for the LCM communications library
License: Other
Hi Robin,
We are fussing with build.jl, because we don't want to use system Python when installing lcm
.
We came onto this because we would like to use python provided by .julia/v0.5/Conda
. I think this is not happening. The possibly offending line above is grabbing system python via BinDeps.library_dependency
.
please see output from @pvazteixeira below...
Curious, is Python still needed for LCMCore? I know it was a while back but thought it was removed.
It seems to still be in the deps though: https://github.com/JuliaRobotics/LCMCore.jl/blob/master/deps/build.jl#L24
Line 8 in d474c5e
julia> using LCMCore
INFO: Recompiling stale cache file /Users/twan/code/julia/RigidBodyDynamics/lib/v0.6/LCMCore.ji for module LCMCore.
ERROR: LoadError: ArgumentError: Module Dates not found in current path.
Run `Pkg.add("Dates")` to install the Dates package.
Stacktrace:
[1] _require(::Symbol) at ./loading.jl:435
[2] require(::Symbol) at ./loading.jl:405
[3] include_from_node1(::String) at ./loading.jl:576
[4] include(::String) at ./sysimg.jl:14
[5] anonymous at ./<missing>:2
while loading /Users/twan/code/julia/RigidBodyDynamics/v0.6/LCMCore/src/LCMCore.jl, in expression starting on line 8
ERROR: Failed to precompile LCMCore to /Users/twan/code/julia/RigidBodyDynamics/lib/v0.6/LCMCore.ji.
Stacktrace:
[1] compilecache(::String) at ./loading.jl:710
[2] _require(::Symbol) at ./loading.jl:463
[3] require(::Symbol) at ./loading.jl:405
This issue is used to trigger TagBot; feel free to unsubscribe.
If you haven't already, you should update your TagBot.yml
to include issue comment triggers.
Please see this post on Discourse for instructions and more details.
If you'd like for me to do this for you, comment TagBot fix
on this issue.
I'll open a PR within a few hours, please be patient!
cc @tkoolen just so we don't forget that this is an issue
The URL of this package does not match that stored in METADATA.jl.
cc: @rdeits
Hi,
We had a little trouble with getting LCMCore
to buildon 18.04. Turns out it was a simple fix:
sudo apt-get install libglib2.0-dev
Not sure if the dev
package is needed, but that worked for me.
cc @GearsAD
After #64, add LCMCore
in a fresh project results in
ERROR: LoadError: SystemError: opening file "/Users/tkoolen/.julia/packages/LCMCore/6Feiw/deps/Project.toml": Permission denied
This is because deps/Project.toml
is read-only, like every file unpacked from an add
ed package, and write access to Project.toml
is required to run update
when the deps project is instantiated when there's no Manifest.toml
.
Right now there's no call to liblcm
implementation of lcm_eventlog_free_event
.
I've currently manually implemented it as:
function lcm_event_destroy(event::Ptr{LCMCore.lcm_eventlog_event_t})
ccall(
(:lcm_eventlog_free_event, LCMCore.liblcm),
Cvoid,
(Ptr{LCMCore.lcm_eventlog_event_t}, ),
event
)
end
But otherwise, when iterating event by event through a log file, the allocated memory is never cleared.
We should release a new version with the updated LCMType interface. @tkoolen the old API of defining fingerprint(), resize!(), etc. still works, right? So I think this can be a patch release rather than a minor version.
When I use LCMCore with the latest code and I use the log playback, it throws an error when decoding the UInt array:
ERROR: LoadError: MethodError: no method matching decode(::UnsafeArrays.UnsafeArray{UInt8,1}, ::Type{brookstone_supertype_t})
Closest candidates are:
decode(::Array{UInt8,1}, ::Type{T<:LCMType}) where T<:LCMType at /home/gearsad/.julia/dev/LCMCore/src/lcmtype.jl:355
Stacktrace:
[1] onresponse(::LCMCore.RecvBuf, ::Ptr{UInt8}, ::LCMCore.SubscriptionOptions{brookstone_supertype_t,getfield(Main, Symbol("##9#10"))}) at /home/gearsad/.julia/dev/LCMCore/src/core.jl:154
[2] handle(::LCMLog) at /home/gearsad/.julia/dev/LCMCore/src/readlog.jl:97
[3] top-level scope at ./none:0
[4] include_string(::Module, ::String, ::String) at ./loading.jl:1005
...
Ran the tests and they pass. I've jumped back to v0.5.1 and the issue goes away.
I'll try take a look this afternoon, but wanted to check if this rings any bells? It seems to be related to the new UnsafeArrays code.
The URL of this package does not match that stored in METADATA.jl.
cc: @rdeits
The build fails on ArchLinux :(
I get
Package python was not found in the pkg-config search path.
Perhaps you should add the directory containing `python.pc'
to the PKG_CONFIG_PATH environment variable
No package 'python' found
It seems that pkg-config
does not work for python
but works for python3
and python2
.
$ pkg-config --cflags python
Package python was not found in the pkg-config search path.
Perhaps you should add the directory containing `python.pc'
to the PKG_CONFIG_PATH environment variable
No package 'python' found
$ pkg-config --cflags python3
-I/usr/include/python3.6m
$ pkg-config --cflags python2
-I/usr/include/python2.7
If I remove the validator for python
then the build completes successfully.
Would it be appropriate to check for python
, python2
and python3
in the validator and return true
if at least one works ?
Hi @rdeits ,
Have you maybe seen an LCM compile issue with the hamcrest
dependency? As far as I can trace it maybe an openjdk-7or 8
issue. Are you on openjdk-6 or later?
EDIT: I should add, I tried this for several lcm-proj/lcm master branches from March 2017 through August, but they all have the same issue.
Please see the issue I posted at lcm-proj/lcm#192.
This is what I get for a new LCMCore.jl install.
$ uname -r
4.10.0-33-generic
$ sudo update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-9-openjdk-amd64/bin/java 1091 auto mode
* 1 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 manual mode
2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
3 /usr/lib/jvm/java-9-openjdk-amd64/bin/java 1091 manual mode
julia> versioninfo()
Julia Version 0.6.0
Commit 9036443 (2017-06-19 13:05 UTC)
Platform Info:
OS: Linux (x86_64-pc-linux-gnu)
CPU: Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz
WORD_SIZE: 64
BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Prescott)
LAPACK: libopenblas64_
LIBM: libopenlibm
LLVM: libLLVM-3.9.1 (ORCJIT, broadwell)
julia> Pkg.build("LCMCore")
INFO: Building CMakeWrapper
INFO: Building LCMCore
WARNING: Compat.ASCIIString is deprecated, use String instead.
likely near /home/dehann/.julia/v0.6/LCMCore/deps/build.jl:72
INFO: Attempting to Create directory /home/dehann/.julia/v0.6/LCMCore/deps/downloads
INFO: Directory /home/dehann/.julia/v0.6/LCMCore/deps/downloads already created
INFO: Downloading file https://github.com/lcm-proj/lcm/archive/9e53469cd0713ca8fbf37a968f6fd314f5f11584.zip
INFO: Done downloading file https://github.com/lcm-proj/lcm/archive/9e53469cd0713ca8fbf37a968f6fd314f5f11584.zip
INFO: Attempting to Create directory /home/dehann/.julia/v0.6/LCMCore/deps/src
INFO: Directory /home/dehann/.julia/v0.6/LCMCore/deps/src already created
INFO: Attempting to Create directory /home/dehann/.julia/v0.6/LCMCore/deps
INFO: Directory /home/dehann/.julia/v0.6/LCMCore/deps already created
INFO: Path /home/dehann/.julia/v0.6/LCMCore/deps/src/lcm-9e53469cd0713ca8fbf37a968f6fd314f5f11584 already created
INFO: Attempting to Create directory /home/dehann/.julia/v0.6/LCMCore/deps/builds/lcm
INFO: Directory /home/dehann/.julia/v0.6/LCMCore/deps/builds/lcm already created
INFO: Changing Directory to /home/dehann/.julia/v0.6/LCMCore/deps/builds/lcm
INFO: Changing Directory to /home/dehann/.julia/v0.6/LCMCore/deps/builds/lcm
org/hamcrest/core/AllOf.java:60: error: no suitable method found for allOf(List<Matcher<? super T#1>>)
return allOf(Arrays.asList(matchers));
^
method AllOf.<T#2>allOf(Iterable<Matcher<? super T#2>>) is not applicable
(inference variable T#3 has incompatible bounds
equality constraints: Matcher<? super CAP#1>
lower bounds: Matcher<? super T#1>)
method AllOf.<T#1>allOf(Matcher<? super T#1>...) is not applicable
(no instance(s) of type variable(s) T#3 exist so that List<T#3> conforms to Matcher<? super T#1>)
method AllOf.<T#4>allOf(Matcher<? super T#4>,Matcher<? super T#4>) is not applicable
(cannot infer type-variable(s) T#4
(actual and formal argument lists differ in length))
method AllOf.<T#5>allOf(Matcher<? super T#5>,Matcher<? super T#5>,Matcher<? super T#5>) is not applicable
(cannot infer type-variable(s) T#5
(actual and formal argument lists differ in length))
method AllOf.<T#6>allOf(Matcher<? super T#6>,Matcher<? super T#6>,Matcher<? super T#6>,Matcher<? super T#6>) is not applicable
(cannot infer type-variable(s) T#6
(actual and formal argument lists differ in length))
method AllOf.<T#7>allOf(Matcher<? super T#7>,Matcher<? super T#7>,Matcher<? super T#7>,Matcher<? super T#7>,Matcher<? super T#7>) is not applicable
(cannot infer type-variable(s) T#7
(actual and formal argument lists differ in length))
method AllOf.<T#8>allOf(Matcher<? super T#8>,Matcher<? super T#8>,Matcher<? super T#8>,Matcher<? super T#8>,Matcher<? super T#8>,Matcher<? super T#8>) is not applicable
(cannot infer type-variable(s) T#8
(actual and formal argument lists differ in length))
where T#1,T#2,T#3,T#4,T#5,T#6,T#7,T#8 are type-variables:
T#1 extends Object declared in method <T#1>allOf(Matcher<? super T#1>...)
T#2 extends Object declared in method <T#2>allOf(Iterable<Matcher<? super T#2>>)
T#3 extends Object declared in method <T#3>asList(T#3...)
T#4 extends Object declared in method <T#4>allOf(Matcher<? super T#4>,Matcher<? super T#4>)
T#5 extends Object declared in method <T#5>allOf(Matcher<? super T#5>,Matcher<? super T#5>,Matcher<? super T#5>)
T#6 extends Object declared in method <T#6>allOf(Matcher<? super T#6>,Matcher<? super T#6>,Matcher<? super T#6>,Matcher<? super T#6>)
T#7 extends Object declared in method <T#7>allOf(Matcher<? super T#7>,Matcher<? super T#7>,Matcher<? super T#7>,Matcher<? super T#7>,Matcher<? super T#7>)
T#8 extends Object declared in method <T#8>allOf(Matcher<? super T#8>,Matcher<? super T#8>,Matcher<? super T#8>,Matcher<? super T#8>,Matcher<? super T#8>,Matcher<? super T#8>)
where CAP#1 is a fresh type-variable:
CAP#1 extends Object super: T#1 from capture of ? super T#1
org/hamcrest/core/AnyOf.java:50: error: no suitable method found for anyOf(List<Matcher<? super T#1>>)
return anyOf(Arrays.asList(matchers));
^
method AnyOf.<T#2>anyOf(Iterable<Matcher<? super T#2>>) is not applicable
(inference variable T#3 has incompatible bounds
equality constraints: Matcher<? super CAP#1>
lower bounds: Matcher<? super T#1>)
method AnyOf.<T#1>anyOf(Matcher<? super T#1>...) is not applicable
(no instance(s) of type variable(s) T#3 exist so that List<T#3> conforms to Matcher<? super T#1>)
method AnyOf.<T#4>anyOf(Matcher<T#4>,Matcher<? super T#4>) is not applicable
(cannot infer type-variable(s) T#4
(actual and formal argument lists differ in length))
method AnyOf.<T#5>anyOf(Matcher<T#5>,Matcher<? super T#5>,Matcher<? super T#5>) is not applicable
(cannot infer type-variable(s) T#5
(actual and formal argument lists differ in length))
method AnyOf.<T#6>anyOf(Matcher<T#6>,Matcher<? super T#6>,Matcher<? super T#6>,Matcher<? super T#6>) is not applicable
(cannot infer type-variable(s) T#6
(actual and formal argument lists differ in length))
method AnyOf.<T#7>anyOf(Matcher<T#7>,Matcher<? super T#7>,Matcher<? super T#7>,Matcher<? super T#7>,Matcher<? super T#7>) is not applicable
(cannot infer type-variable(s) T#7
(actual and formal argument lists differ in length))
method AnyOf.<T#8>anyOf(Matcher<T#8>,Matcher<? super T#8>,Matcher<? super T#8>,Matcher<? super T#8>,Matcher<? super T#8>,Matcher<? super T#8>) is not applicable
(cannot infer type-variable(s) T#8
(actual and formal argument lists differ in length))
where T#1,T#2,T#3,T#4,T#5,T#6,T#7,T#8 are type-variables:
T#1 extends Object declared in method <T#1>anyOf(Matcher<? super T#1>...)
T#2 extends Object declared in method <T#2>anyOf(Iterable<Matcher<? super T#2>>)
T#3 extends Object declared in method <T#3>asList(T#3...)
T#4 extends Object declared in method <T#4>anyOf(Matcher<T#4>,Matcher<? super T#4>)
T#5 extends Object declared in method <T#5>anyOf(Matcher<T#5>,Matcher<? super T#5>,Matcher<? super T#5>)
T#6 extends Object declared in method <T#6>anyOf(Matcher<T#6>,Matcher<? super T#6>,Matcher<? super T#6>,Matcher<? super T#6>)
T#7 extends Object declared in method <T#7>anyOf(Matcher<T#7>,Matcher<? super T#7>,Matcher<? super T#7>,Matcher<? super T#7>,Matcher<? super T#7>)
T#8 extends Object declared in method <T#8>anyOf(Matcher<T#8>,Matcher<? super T#8>,Matcher<? super T#8>,Matcher<? super T#8>,Matcher<? super T#8>,Matcher<? super T#8>)
where CAP#1 is a fresh type-variable:
CAP#1 extends Object super: T#1 from capture of ? super T#1
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors
make[2]: *** [test/java/hamcrest-core-1.3/CMakeFiles/hamcrest-core.dir/java_compiled_hamcrest-core] Error 1
make[1]: *** [test/java/hamcrest-core-1.3/CMakeFiles/hamcrest-core.dir/all] Error 2
make: *** [all] Error 2
===========================================================================[ ERROR: LCMCore ]============================================================================
LoadError: failed process: Process(setenv(`/home/dehann/.julia/v0.6/CMakeWrapper/deps/usr/bin/cmake --build . --target install`,String["PATH=/home/dehann/.julia/v0.6/LCMCore/deps/usr/bin:/home/dehann/bin:/home/dehann/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "DEFAULTS_PATH=/usr/share/gconf/ubuntu.default.path", "QT_ACCESSIBILITY=1", "UPSTART_SESSION=unix:abstract=/com/ubuntu/upstart-session/1000/1157", "UPSTART_JOB=unity-settings-daemon", "DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-hscsYw6aFK", "XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0", "XDG_SESSION_DESKTOP=ubuntu", "XDG_SESSION_TYPE=x11", "USER=dehann", "XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg", "QT_IM_MODULE=ibus", "LESSCLOSE=/usr/bin/lesspipe %s %s", "SESSIONTYPE=gnome-session", "INSTANCE=Unity", "GDMSESSION=ubuntu", "CLUTTER_IM_MODULE=xim", "XDG_DATA_DIRS=/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop", "LESSOPEN=| /usr/bin/lesspipe %s", "SHELL=/bin/bash", "XDG_SEAT=seat0", "XAUTHORITY=/home/dehann/.Xauthority", "INTELOPENCLSDK=/opt/intel/opencl/SDK", "GTK_MODULES=gail:atk-bridge:unity-gtk-module", "GNOME_KEYRING_PID=", "GTK_IM_MODULE=ibus", "QT_QPA_PLATFORMTHEME=appmenu-qt5", "XMODIFIERS=@im=ibus", "TERM=xterm-256color", "HOME=/home/dehann", "VTE_VERSION=4205", "GTK2_MODULES=overlay-scrollbar", "IM_CONFIG_PHASE=1", "COMPIZ_CONFIG_PROFILE=ubuntu", "UPSTART_INSTANCE=", "XDG_CURRENT_DESKTOP=Unity", "LANG=en_US.UTF-8", "SHLVL=1", "GNOME_DESKTOP_SESSION_ID=this-is-deprecated", "LOGNAME=dehann", "XDG_RUNTIME_DIR=/run/user/1000", "SSH_AUTH_SOCK=/run/user/1000/keyring/ssh", "DESKTOP_SESSION=ubuntu", "GDM_LANG=en_US", "OLDPWD=/home/dehann/.julia/lib", "_=/usr/bin/julia060", "GPG_AGENT_INFO=/home/dehann/.gnupg/S.gpg-agent:0:1", "PWD=/home/dehann/.julia/lib/v0.6", "DISPLAY=:0", "UPSTART_EVENTS=started starting", "LANGUAGE=en_US", "XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/dehann", "XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0", "XDG_VTNR=7", "WINDOWID=67148653", "MANDATORY_PATH=/usr/share/gconf/ubuntu.mandatory.path", "XDG_SESSION_ID=c2", "PKG_CONFIG_PATH=/opt/intel/opencl:", "QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1", "QT4_IM_MODULE=xim", "LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:", "GNOME_KEYRING_CONTROL=", "JOB=gnome-session", "OPENBLAS_MAIN_FREE=1"]), ProcessExited(2)) [2]
while loading /home/dehann/.julia/v0.6/LCMCore/deps/build.jl, in expression starting on line 72
=========================================================================================================================================================================
============================================================================[ BUILD ERRORS ]=============================================================================
WARNING: LCMCore had build errors.
- packages with build errors remain installed in /home/dehann/.julia/v0.6
- build the package(s) and all dependencies with `Pkg.build("LCMCore")`
- build a single package by running its `deps/build.jl` script
=========================================================================================================================================================================
Thanks for any input!
I have the following two message types:
mutable struct polynomial_t <: LCMType
timestamp::Int64
num_coefficients::Int32
coefficients::Vector{Float64}
end
@lcmtypesetup(polynomial_t,
(coefficients, 1) => num_coefficients,
)
mutable struct polynomial_matrix_t <: LCMType
timestamp::Int64
rows::Int32
cols::Int32
polynomials::Vector{Vector{polynomial_t}}
end
@lcmtypesetup(polynomial_matrix_t,
(polynomials, 1) => rows,
(polynomials, 2) => cols
)
If I try to resize a polynomial_matrix_t
as follows:
m = LCMPolynomials.polynomial_matrix_t()
m.rows = 1
m.cols = 1
LCMCore.resize!(m)
then I get this error:
UndefRefError: access to undefined reference
Stacktrace:
[1] resizevec! at /home/rdeits/.julia/v0.6/LCMCore/src/lcmtype.jl:181 [inlined]
[2] macro expansion at /home/rdeits/.julia/v0.6/LCMCore/src/lcmtype.jl:172 [inlined]
[3] resize!(::LCMPolynomials.polynomial_matrix_t) at /home/rdeits/.julia/v0.6/LCMCore/src/lcmtype.jl:166
[4] LCMPolynomials.polynomial_matrix_t(::Array{TypedPolynomials.Polynomial{Int64,TypedPolynomials.Term{Int64,TypedPolynomials.Monomial{(t,),1}},Array{TypedPolynomials.Term{Int64,TypedPolynomials.Monomial{(t,),1}},1}},2}, ::Int64) at /home/rdeits/.julia/v0.6/LCMPolynomials/src/LCMPolynomials.jl:58
[5] LCMPolynomials.polynomial_matrix_t(::Array{TypedPolynomials.Polynomial{Int64,TypedPolynomials.Term{Int64,TypedPolynomials.Monomial{(t,),1}},Array{TypedPolynomials.Term{Int64,TypedPolynomials.Monomial{(t,),1}},1}},1}) at /home/rdeits/.julia/v0.6/LCMPolynomials/src/LCMPolynomials.jl:67
[6] include_string(::String, ::String) at ./loading.jl:522
@tkoolen should I just not be doing that? Or is this a bug?
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.