mbientlab / metawear-sdk-cpp Goto Github PK
View Code? Open in Web Editor NEWMetaWear C++ SDK - Platform Agnostic - Main lib - No Bluetooth
Home Page: https://mbientlab.com
License: Other
MetaWear C++ SDK - Platform Agnostic - Main lib - No Bluetooth
Home Page: https://mbientlab.com
License: Other
In BLE5, the 2M PHY capability is lowering the bluetooth range
Hi,
I've tried to run the make command after cloning the repo. Unfortunately it ends up in a compiling error. my current clang version is 3.8.0-2 and I'm running a x86 Debian system. My current g++ version is 5.4.0 20160609. While running make (just as well as make CXX=g++) ends with this error:
In file included from src/metawear/dfu/cpp/file_operations.cpp:9:0:
src/metawear/dfu/cpp/miniz.c: In function ‘void tdefl_find_match(tdefl_compressor*, mz_uint, mz_uint, mz_uint, mz_uint*, mz_uint*)’:
src/metawear/dfu/cpp/miniz.c:2264:59: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
#define TDEFL_READ_UNALIGNED_WORD(p) (const mz_uint16)(p)
^
src/metawear/dfu/cpp/miniz.c:2270:19: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]), s01 = TDEFL_READ_UNALIGNED_WORD(s);
^
src/metawear/dfu/cpp/miniz.c:2264:59: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
#define TDEFL_READ_UNALIGNED_WORD(p) (const mz_uint16)(p)
^
src/metawear/dfu/cpp/miniz.c:2281:13: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) break;
^
src/metawear/dfu/cpp/miniz.c:2282:7: note: in expansion of macro ‘TDEFL_PROBE’
TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE;
^
src/metawear/dfu/cpp/miniz.c:2264:59: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
#define TDEFL_READ_UNALIGNED_WORD(p) (const mz_uint16)(p)
^
src/metawear/dfu/cpp/miniz.c:2281:13: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) break;
^
src/metawear/dfu/cpp/miniz.c:2282:20: note: in expansion of macro ‘TDEFL_PROBE’
TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE;
^
src/metawear/dfu/cpp/miniz.c:2264:59: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
#define TDEFL_READ_UNALIGNED_WORD(p) (const mz_uint16)(p)
^
src/metawear/dfu/cpp/miniz.c:2281:13: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) break;
^
src/metawear/dfu/cpp/miniz.c:2282:33: note: in expansion of macro ‘TDEFL_PROBE’
TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE;
^
src/metawear/dfu/cpp/miniz.c:2264:59: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
#define TDEFL_READ_UNALIGNED_WORD(p) (const mz_uint16)(p)
^
src/metawear/dfu/cpp/miniz.c:2294:13: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]);
^
cc1plus: all warnings being treated as errors
Makefile:64: recipe for target 'build/x64/release/src/metawear/dfu/cpp/file_operations.o' failed
make: *** [build/x64/release/src/metawear/dfu/cpp/file_operations.o] Error 1
While running: g++ -MMD -MP -MF "build/x64/release/src/metawear/dfu/cpp/file_operations.d" -c -o build/x64/release/src/metawear/dfu/cpp/file_operations.o -std=c++11 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Werror -Isrc -DMETAWEAR_DLL -DMETAWEAR_DLL_EXPORTS -O3 -m64 src/metawear/dfu/cpp/file_operations.cpp
Since it runs the same command compiling the python wrapper, it has the same problem.
cheers,
ThiefOfTime
Hi, I'm getting this error in macOS Mojave (clang version 7.0.0 (tags/RELEASE_700/final)
Target: x86_64-apple-darwin18.2.0). The same error with "-Wno-strict-aliasing" flag:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/memory:2285:5: error:
delete called on non-final 'DfuOperations' that has virtual functions but
non-virtual destructor [-Werror,-Wdelete-non-virtual-dtor]
delete __ptr;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/memory:2598:7: note:
in instantiation of member function
'std::__1::default_delete::operator()' requested here
_ptr.second()(__tmp);
^
src/metawear/impl/cpp/metawearboard.cpp:850:23: note: in instantiation of member
function 'std::__1::unique_ptr<DfuOperations,
std::__1::default_delete >::reset' requested here
board->operations.reset(new DfuOperations(board, delegate));
^
1 error generated.
make: *** [build/x64/release/src/metawear/impl/cpp/metawearboard.o] Error 1
I am getting this trying to build the latest using g++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
It goes smoothly until this command.
g++ -MMD -MP -MF "build/x64/release/src/metawear/dfu/cpp/miniz.d" -c -o build/x64/release/src/metawear/dfu/cpp/miniz.o -std=c++11 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Werror -Isrc -DMETAWEAR_DLL -DMETAWEAR_DLL_EXPORTS -O3 -m64 src/metawear/dfu/cpp/miniz.cpp
src/metawear/dfu/cpp/miniz.cpp: In function ‘void tdefl_find_match(tdefl_compressor*, mz_uint, mz_uint, mz_uint, mz_uint*, mz_uint*)’:
src/metawear/dfu/cpp/miniz.cpp:1356:60: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
#define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16 *)(p)
^
src/metawear/dfu/cpp/miniz.cpp:1364:21: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]), s01 = TDEFL_READ_UNALIGNED_WORD2(s);
^~~~~~~~~~~~~~~~~~~~~~~~~
src/metawear/dfu/cpp/miniz.cpp:1356:60: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
#define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16 *)(p)
^
src/metawear/dfu/cpp/miniz.cpp:1379:9: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01)
^~~~~~~~~~~~~~~~~~~~~~~~~
src/metawear/dfu/cpp/miniz.cpp:1381:13: note: in expansion of macro ‘TDEFL_PROBE’
TDEFL_PROBE;
^~~~~~~~~~~
src/metawear/dfu/cpp/miniz.cpp:1356:60: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
#define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16 *)(p)
^
src/metawear/dfu/cpp/miniz.cpp:1379:9: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01)
^~~~~~~~~~~~~~~~~~~~~~~~~
src/metawear/dfu/cpp/miniz.cpp:1382:13: note: in expansion of macro ‘TDEFL_PROBE’
TDEFL_PROBE;
^~~~~~~~~~~
src/metawear/dfu/cpp/miniz.cpp:1356:60: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
#define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16 *)(p)
^
src/metawear/dfu/cpp/miniz.cpp:1379:9: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01)
^~~~~~~~~~~~~~~~~~~~~~~~~
src/metawear/dfu/cpp/miniz.cpp:1383:13: note: in expansion of macro ‘TDEFL_PROBE’
TDEFL_PROBE;
^~~~~~~~~~~
src/metawear/dfu/cpp/miniz.cpp:1356:60: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
#define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16 )(p)
^
src/metawear/dfu/cpp/miniz.cpp:1407:19: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]);
^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from src/metawear/dfu/cpp/miniz.cpp:27:0:
src/metawear/dfu/cpp/miniz.cpp: In function ‘mz_bool mz_zip_validate_file(mz_zip_archive, mz_uint, mz_uint)’:
src/metawear/dfu/cpp/miniz.h:531:49: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
#define MZ_READ_LE32(p) *((const mz_uint32 *)(p))
^
src/metawear/dfu/cpp/miniz.cpp:5249:19: note: in expansion of macro ‘MZ_READ_LE32’
has_id = (MZ_READ_LE32(descriptor_buf) == MZ_ZIP_DATA_DESCRIPTOR_ID);
^~~~~~~~~~~~
cc1plus: all warnings being treated as errors
Makefile:65: recipe for target 'build/x64/release/src/metawear/dfu/cpp/miniz.o' failed
make: *** [build/x64/release/src/metawear/dfu/cpp/miniz.o] Error 1
Hi,
Host: Linux 3.10.17-yocto-standard-r2 #7 SMP PREEMPT Thu Feb 26 09:57:06 UTC 2015 i686 GNU/Linux
SDK: 0.5.0 (most recent commit)
Most of times I get MBL_MW_STATUS_ERROR_TIMEOUT (16)
status when calling mbl_mw_metawearboard_initialize()
. I didn't have this issue in 0.4.15
This API was changed from 0.4.15
void mbl_mw_metawearboard_initialize(MblMwMetaWearBoard *board, MblMwFnVoid initialized)
0.5.0
void mbl_mw_metawearboard_initialize(MblMwMetaWearBoard *board, MblMwFnBoardPtrInt initialized)
This is the application logs:
ardhan@clarence:~/Metawear-Cpp-Driver/cpro-driver$ ./cpro-driver_experimental device.conf
Device C0:69:B0:46:03:B5 was connected
write_gatt_char: handle=0x001d uuid=326a9001-85cb-9195-d9dd-464cfbbae75a
write_gatt_char: value: 11 09 08 00 80 0c 00 00 d0 07
read_gatt_char: handle=0x001a uuid=00002a26-0000-1000-8000-00805f9b34fb
Characteristic value/descriptor: 31 2e 32 2e 33
read_gatt_char: handle=0x0014 uuid=00002a24-0000-1000-8000-00805f9b34fb
Characteristic value/descriptor: 32
write_gatt_char: handle=0x001d uuid=326a9001-85cb-9195-d9dd-464cfbbae75a
write_gatt_char: value: 01 80
[ERROR] 2016-09-13_03:59:01.554: Initialization failed (16)...!
I have tried to get the library to build on my Raspberry Pi 2, i.e. on ARM architecture, with little success so far.
For starters, the -m32
/-m64
does not work there, and after removal of them from Makefile it at least builds. Running the make test
command yields the following output:
pi@raspberrypi:~/Repos/Metawear-CppAPI $ make test
python3 -m unittest discover -s test
terminate called after throwing an instance of 'std::out_of_range'
what(): _Map_base::at
Makefile:117: recipe for target 'test' failed
make: *** [test] Aborted
I have tried several other flags (The Rasbian Jessie image has gcc (Raspbian 4.9.2-10) 4.9.2
as default so I was looking through the manual), but also without success. Have tried building with Clang as well, but the apt-get package of it is this:
Raspbian clang version 3.5.0-10+rpi1 (tags/RELEASE_350/final) (based on LLVM 3.5.0)
Target: arm-unknown-linux-gnueabihf
Thread model: posix
Do you have any idea as to what might be done to get it to run? This error is similar to the one in #2, is the cause similar as well do you think?
Create new code for Binding creation
The new functions.py
module imports using absolute paths, which makes it a requirement to have the mbientlab
package as a root package in the Python path (as is done in the Makefile).
In my Python package, I instead include this repository as a Git submodule and copy the entire mbientlab
package so it becomes a subpackage (pymetawear.mbientlab
). Importing the functions
module fails in that case. I propose the following import compromise using relative imports:
from ctypes import *
from .core import *
from .peripheral import Led
The MetaWear-CppAPI tests still pass and I can use the setup_libmetawear
method without modifying the functions.py
file.
I would have sent a pull request, but since it said that the file was autogenerated I felt it better to add this as an improvement issue.
On some platforms (windows visual studio) I run into compiling errors due to this chunk: https://github.com/mbientlab/MetaWear-SDK-Cpp/blob/master/src/metawear/dfu/cpp/file_operations.cpp#L120-L134
specifically these lines:
Error (active) E0350 more than one operator "=" matches these operands: src\metawear\dfu\cpp\file_operations.cpp 127
Error (active) E0350 more than one operator "=" matches these operands: src\metawear\dfu\cpp\file_operations.cpp 130
I am trying to figure out what the non-auto declares are for this function but because i do not use this function I am having a hard time recommending a PR to make this more explicit.
I want to be able to use the SDK to generate an event that is logged to break-up logged data
See Matt's new endpoint for NAND statistics in debug module
I am unable to run the make test
command on a clean cloned repository with the latest version (0.5.0) checked out. Checking out HEAD~1
make the tests work again.
Hello,
I use VS2019, therefore I upgraded to:
PlatformToolset: v142
WindowsTargetPlatformVersion: 10.0.17763.0
When building I get the following two Errors:
"\MetaWear-SDK-Cpp-0.18.4\MetaWear.Win32.vcxproj" (default target) (1) ->
(ClCompile target) ->
\MetaWear-SDK-Cpp-0.18.4\src\metawear\dfu\cpp\file_operations.cpp(127,48): error C2593: 'operator =' is ambiguous [\MetaWea
r-SDK-Cpp-0.18.4\MetaWear.Win32.vcxproj]
\MetaWear-SDK-Cpp-0.18.4\src\metawear\dfu\cpp\file_operations.cpp(131,48): error C2593: 'operator =' is ambiguous [\MetaWea
r-SDK-Cpp-0.18.4\MetaWear.Win32.vcxproj]
Full Output: https://pastebin.com/SCA8NG9e
The build works fine when fixing those two lines.
Hi,
I got a metawear C, I am able to abserve accelerometer, gyroscope and button but I can not access to the magnetometer (I got no notification from it)...
Here are the code I send to the codes that I send to it :
P.S. 1 : I am pretty sure that the magnetometer works (tested with the android App).
P.S. 2 : Btw : there is a typo on the python test for magnetomter, you define twice the test start_accelerometer, the second time should be about stop_accelerometer.
Using the new 0.4.0 API, I tried one of the new battery state methods out. I called the built shared library from Python, in a similar fashion to the tests for this library; see usage for my Python MetaWear client.
Reading battery state with
libmetawear.mbl_mw_settings_read_battery_state(board)
leads to exception in, I think, the C++ library:
terminate called after throwing an instance of 'std::out_of_range'
what(): _Map_base::at
Other points of interest:
color
conductance
proximity
neopixel
metadetect
metaenv
Firmware: 1.2.4
C++ SDK: 5.22
Host: Linux 3.10
BlueZ: 5.39
After several minutes running our program which subscribes to a CPRO accelerometer, gyro and magnetometer sensors, apparently it stop receiving sensor data, in this case all signal handlers were stopped being called. We have had this issue since the previous firmware and SDK. With device reset, the stream shall run again then unfortunately stop after some times.
We tested using latest 1.2.4 firmware since as the release notes say it may have addressed this issue. I believe the problem is identical to this post http://community.mbientlab.com/discussion/1773/board-stops-sending-data-after-few-sequential-connect-disconnect-cycles-possibly-a-firmware-bug#latest
I have been struggling to figure out the best way to include/link this to a project whether by cmake or better yet compiling source to avoid any weird linking issues but the way the source files are organized make this very challenging, was curious if you had a recommendation?
I need to change name of device. I change it using a method in the api, but after the battery runs out, the device name returns to default.
I tried using macro. The macro is recorded successfully, if I call it after recording, the device name changes, but after the battery is discharged, the macro does not start automatically and the script crashes when manually started.
Has anyone experienced this behavior?
Macro example from c++ api:
In this example, we will change the device name permanently:
#include "metawear/core/macro.h"
#include "metawear/peripheral/led.h"
void setup_macro(MblMwMetaWearBoard* board) {
static auto callback = [](MblMwMetaWearBoard* board, int32_t id) {
cout << "Macro ID = " << id << endl;
macro_id = id;
};
// Change on boot
mbl_mw_macro_record(board, 1);
auto new_name = "METAMOO";
mbl_mw_settings_set_device_name(board, new_name, 7);
mbl_mw_macro_end_record(board, callback);
// Change the name now
mbl_mw_macro_execute(macro_id);
}
Hello mbientlab,
there are various occasions of constants that are being declared AND defined inside headers that can externally be included by projects. Examples are the MBL_MW_STATUS constants in core/status.h.
If two separate source files of a project using the metawear API include the same header (e.g. status.h) then these constants are getting redefined, which is not supported by the GNU compiler collection. This problem can not be guarded by the #prage once statement as it only prevents recursive inclusion of headers.
Please, provide information on how to workaround this problem.
Best,
Till
Add next->remove = false;
to line 281 in logging.cpp
In src/metawear/core/cpp/constant.h the value is hard coded to 150. This value is used in mbl_mw_metawearboard_initialize
and makes the initialization fail when I use the library.
During the writing and notification exchange during initialization I get a status 16 response and initialization breaks. When changing the value to >250, then everything works fine and initialization is completed successfully.
Is it possible to make TIME_PER_COMMAND
into parameter to set instead of a constant? Or at least bump it to >250?
Fuser test fails, has been commented out from tests
Hi, In the 0.2.0 and 0.2.2 releases, it looks like the csharp wrappers folder have been removed. Was this intentional? is there somewhere else the c# wrappers are being maintained?
Hi, got this when compiling on x86
g++ = g++ (Debian 4.7.2-5) 4.7.2
make = GNU Make 3.81
Linux elena 3.10.17-yocto-standard-r2 #7 SMP PREEMPT Thu Feb 26 09:57:06 UTC 2015 i686 GNU/Linux
$ make
mkdir -p build/x86/release/src/metawear/platform/cpp
mkdir -p build/x86/release/src/metawear/core/cpp
mkdir -p build/x86/release/src/metawear/peripheral/cpp
mkdir -p build/x86/release/src/metawear/processor/cpp
mkdir -p build/x86/release/src/metawear/sensor/cpp
mkdir -p build/x86/release/src/metawear/impl/cpp
mkdir -p dist/release/lib/x86
g++ -MMD -MP -MF "build/x86/release/src/metawear/platform/cpp/threadpool.d" -c -o build/x86/release/src/metawear/platform/cpp/threadpool.o -std=c++11 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Werror -Isrc -DMETAWEAR_DLL -DMETAWEAR_DLL_EXPORTS -O3 -m32 src/metawear/platform/cpp/threadpool.cpp
In file included from src/metawear/platform/cpp/threadpool.cpp:1:0:
src/metawear/platform/cpp/threadpool.h:8:57: error: ‘int64_t’ has not been declared
src/metawear/platform/cpp/threadpool.cpp:30:7: error: prototype for ‘Task* ThreadPool::schedule(std::function<void()>, int64_t)’ does not match any in class ‘ThreadPool’
In file included from src/metawear/platform/cpp/threadpool.cpp:1:0:
src/metawear/platform/cpp/threadpool.h:8:18: error: candidate is: static Task* ThreadPool::schedule(std::function<void()>, int)
make: *** [build/x86/release/src/metawear/platform/cpp/threadpool.o] Error 1
Add MMS serial state:
0x01: create_string_buffer(b'\x01\x80\x00\x00', 4),
0x02: create_string_buffer(b'\x02\x80\x00\x01\x03\x00', 6),
0x03: create_string_buffer(b'\x03\x80\x04\x00', 4),
0x04: create_string_buffer(b'\x04\x80\x01\x00\x00\x03\x01\x02', 8),
0x05: create_string_buffer(b'\x05\x80\x00\x02\x03\x03\x03\x03\x03\x03\x01', 11),
0x06: create_string_buffer(b'\x06\x80\x00\x00', 4),
0x07: create_string_buffer(b'\x07\x80\x00\x00', 4),
0x08: create_string_buffer(b'\x08\x80\x00\x00', 4),
0x09: create_string_buffer(b'\x09\x80\x00\x03\x1c', 5),
0x0a: create_string_buffer(b'\x0a\x80\x00\x00\x1c', 5),
0x0b: create_string_buffer(b'\x0b\x80\x00\x03\x08\x00\x00\xfb\x03\x00\x02', 11),
0x0c: create_string_buffer(b'\x0c\x80\x00\x00\x08', 5),
0x0d: create_string_buffer(b'\x0d\x80\x00\x01', 4),
0x0e: create_string_buffer(b'\x0e\x80', 2),
0x0f: create_string_buffer(b'\x0f\x80\x00\x02\x08\x00', 6),
0x10: create_string_buffer(b'\x10\x80', 2),
0x11: create_string_buffer(b'\x11\x80\x00\x09\x07\x00', 6),
0x12: create_string_buffer(b'\x12\x80\x00\x00', 4),
0x13: create_string_buffer(b'\x13\x80\x01\x00', 4),
0x14: create_string_buffer(b'\x14\x80\x00\x00', 4),
0x15: create_string_buffer(b'\x15\x80\x00\x02', 4),
0x16: create_string_buffer(b'\x16\x80', 2),
0x17: create_string_buffer(b'\x17\x80', 2),
0x18: create_string_buffer(b'\x18\x80', 2),
0x19: create_string_buffer(b'\x19\x80\x00\x03\x03\x00\x06\x00\x02\x00\x01\x00', 12),
0xfe: create_string_buffer(b'\xfe\x80\x00\x05\x03', 5),
add "steps" uri
The C++ library needs a little more documentation
public func comparatorCreate(op: MblMwComparatorOperation, mode: MblMwComparatorMode, references: [Float])
references should be uint8
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.