Coder Social home page Coder Social logo

cpptcl's People

Contributors

wsong83 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

cpptcl's Issues

Error while compiling attached examples - can you confirm with latest tcl8.6.9.1 version

/tmp/ccDeR3P5.o: In function Tcl::details::result::operator bool() const': cpptcl.cc:(.text+0x34): undefined reference to Tcl_GetObjResult'
cpptcl.cc:(.text+0x52): undefined reference to Tcl_GetBooleanFromObj' /tmp/ccDeR3P5.o: In function Tcl::details::result::operator double() const':
cpptcl.cc:(.text+0xde): undefined reference to Tcl_GetObjResult' cpptcl.cc:(.text+0xfc): undefined reference to Tcl_GetDoubleFromObj'
/tmp/ccDeR3P5.o: In function Tcl::details::result::operator int() const': cpptcl.cc:(.text+0x18c): undefined reference to Tcl_GetObjResult'
cpptcl.cc:(.text+0x1aa): undefined reference to Tcl_GetIntFromObj' /tmp/ccDeR3P5.o: In function Tcl::details::result::operator long() const':
cpptcl.cc:(.text+0x230): undefined reference to Tcl_GetObjResult' cpptcl.cc:(.text+0x24e): undefined reference to Tcl_GetLongFromObj'
/tmp/ccDeR3P5.o: In function Tcl::details::result::operator long long() const': cpptcl.cc:(.text+0x2d6): undefined reference to Tcl_GetObjResult'
cpptcl.cc:(.text+0x2f4): undefined reference to Tcl_GetWideIntFromObj' /tmp/ccDeR3P5.o: In function Tcl::details::result::operator std::string() const':
cpptcl.cc:(.text+0x37e): undefined reference to Tcl_GetObjResult' cpptcl.cc:(.text+0x39a): undefined reference to Tcl_GetString'
/tmp/ccDeR3P5.o: In function Tcl::details::result::operator Tcl::object() const': cpptcl.cc:(.text+0x403): undefined reference to Tcl_GetObjResult'
/tmp/ccDeR3P5.o: In function Tcl::details::set_result(Tcl_Interp*, bool)': cpptcl.cc:(.text+0x43c): undefined reference to Tcl_NewIntObj'
cpptcl.cc:(.text+0x44e): undefined reference to Tcl_SetObjResult' /tmp/ccDeR3P5.o: In function Tcl::details::set_result(Tcl_Interp*, int)':
cpptcl.cc:(.text+0x469): undefined reference to Tcl_NewIntObj' cpptcl.cc:(.text+0x47b): undefined reference to Tcl_SetObjResult'
/tmp/ccDeR3P5.o: In function Tcl::details::set_result(Tcl_Interp*, long)': cpptcl.cc:(.text+0x499): undefined reference to Tcl_NewLongObj'
cpptcl.cc:(.text+0x4ab): undefined reference to Tcl_SetObjResult' /tmp/ccDeR3P5.o: In function Tcl::details::set_result(Tcl_Interp*, long long)':
cpptcl.cc:(.text+0x4c9): undefined reference to Tcl_NewWideIntObj' cpptcl.cc:(.text+0x4db): undefined reference to Tcl_SetObjResult'
/tmp/ccDeR3P5.o: In function Tcl::details::set_result(Tcl_Interp*, double)': cpptcl.cc:(.text+0x500): undefined reference to Tcl_NewDoubleObj'
cpptcl.cc:(.text+0x512): undefined reference to Tcl_SetObjResult' /tmp/ccDeR3P5.o: In function Tcl::details::set_result(Tcl_Interp*, std::string const&)':
cpptcl.cc:(.text+0x549): undefined reference to Tcl_NewStringObj' cpptcl.cc:(.text+0x55b): undefined reference to Tcl_SetObjResult'
/tmp/ccDeR3P5.o: In function Tcl::details::set_result(Tcl_Interp*, void*)': cpptcl.cc:(.text+0x5f0): undefined reference to Tcl_NewStringObj'
cpptcl.cc:(.text+0x605): undefined reference to Tcl_SetObjResult' /tmp/ccDeR3P5.o: In function Tcl::details::set_result(Tcl_Interp*, Tcl::object const&)':
cpptcl.cc:(.text+0x688): undefined reference to Tcl_SetObjResult' /tmp/ccDeR3P5.o: In function (anonymous namespace)::post_process_policies(Tcl_Interp*, Tcl::policies&, Tcl_Obj* const*, bool)':
cpptcl.cc:(.text+0xb3e): undefined reference to Tcl_GetObjResult' cpptcl.cc:(.text+0xb46): undefined reference to Tcl_GetString'
cpptcl.cc:(.text+0xb6c): undefined reference to Tcl_CreateObjCommand' cpptcl.cc:(.text+0xbcf): undefined reference to Tcl_GetString'
cpptcl.cc:(.text+0xbe4): undefined reference to Tcl_DeleteCommand' cpptcl.cc:(.text+0xc1f): undefined reference to Tcl_GetString'
cpptcl.cc:(.text+0xc34): undefined reference to Tcl_DeleteCommand' /tmp/ccDeR3P5.o: In function callback_handler':
cpptcl.cc:(.text+0xe0f): undefined reference to Tcl_SetResult' cpptcl.cc:(.text+0xe37): undefined reference to Tcl_GetString'
cpptcl.cc:(.text+0xf4f): undefined reference to Tcl_SetResult' cpptcl.cc:(.text+0x1054): undefined reference to Tcl_SetResult'
cpptcl.cc:(.text+0x1120): undefined reference to Tcl_SetResult' cpptcl.cc:(.text+0x1222): undefined reference to Tcl_SetResult'
cpptcl.cc:(.text+0x127f): undefined reference to Tcl_SetResult' /tmp/ccDeR3P5.o: In function object_handler':
cpptcl.cc:(.text+0x16e3): undefined reference to Tcl_GetString' cpptcl.cc:(.text+0x1767): undefined reference to Tcl_GetString'
cpptcl.cc:(.text+0x18b1): undefined reference to Tcl_SetResult' cpptcl.cc:(.text+0x1902): undefined reference to Tcl_SetResult'
/tmp/ccDeR3P5.o: In function constructor_handler': cpptcl.cc:(.text+0x1a95): undefined reference to Tcl_SetResult'
cpptcl.cc:(.text+0x1abd): undefined reference to Tcl_GetString' cpptcl.cc:(.text+0x1bde): undefined reference to Tcl_SetResult'
cpptcl.cc:(.text+0x1ca4): undefined reference to Tcl_SetResult' cpptcl.cc:(.text+0x1d1e): undefined reference to Tcl_GetObjResult'
cpptcl.cc:(.text+0x1d26): undefined reference to Tcl_GetString' cpptcl.cc:(.text+0x1d4c): undefined reference to Tcl_CreateObjCommand'
cpptcl.cc:(.text+0x1dc1): undefined reference to Tcl_SetResult' cpptcl.cc:(.text+0x1e1e): undefined reference to Tcl_SetResult'
/tmp/ccDeR3P5.o: In function Tcl::object::object()': cpptcl.cc:(.text+0x22dd): undefined reference to Tcl_NewObj'
/tmp/ccDeR3P5.o: In function Tcl::object::object(bool)': cpptcl.cc:(.text+0x231c): undefined reference to Tcl_NewIntObj'
/tmp/ccDeR3P5.o: In function Tcl::object::object(char const*, unsigned long)': cpptcl.cc:(.text+0x2368): undefined reference to Tcl_NewByteArrayObj'
/tmp/ccDeR3P5.o: In function Tcl::object::object(double)': cpptcl.cc:(.text+0x23af): undefined reference to Tcl_NewDoubleObj'
/tmp/ccDeR3P5.o: In function Tcl::object::object(int)': cpptcl.cc:(.text+0x23eb): undefined reference to Tcl_NewIntObj'
/tmp/ccDeR3P5.o: In function Tcl::object::object(long)': cpptcl.cc:(.text+0x242a): undefined reference to Tcl_NewLongObj'
/tmp/ccDeR3P5.o: In function Tcl::object::object(long long)': cpptcl.cc:(.text+0x246a): undefined reference to Tcl_NewWideIntObj'
/tmp/ccDeR3P5.o: In function Tcl::object::object(char const*)': cpptcl.cc:(.text+0x24af): undefined reference to Tcl_NewStringObj'
/tmp/ccDeR3P5.o: In function Tcl::object::object(std::string const&)': cpptcl.cc:(.text+0x2507): undefined reference to Tcl_NewStringObj'
/tmp/ccDeR3P5.o: In function Tcl::object::object(std::vector<std::string, std::allocator<std::string> > const&)': cpptcl.cc:(.text+0x25c0): undefined reference to Tcl_NewStringObj'
cpptcl.cc:(.text+0x2621): undefined reference to Tcl_NewListObj' /tmp/ccDeR3P5.o: In function Tcl::object::init(Tcl_Obj*, bool)':
cpptcl.cc:(.text+0x2734): undefined reference to Tcl_DuplicateObj' /tmp/ccDeR3P5.o: In function Tcl::object::~object()':
cpptcl.cc:(.text+0x2788): undefined reference to TclFreeObj' /tmp/ccDeR3P5.o: In function Tcl::object::assign(bool)':
cpptcl.cc:(.text+0x27b0): undefined reference to Tcl_SetIntObj' /tmp/ccDeR3P5.o: In function Tcl::object::resize(unsigned long)':
cpptcl.cc:(.text+0x27dd): undefined reference to Tcl_SetByteArrayLength' /tmp/ccDeR3P5.o: In function Tcl::object::assign(char const*, unsigned long)':
cpptcl.cc:(.text+0x2814): undefined reference to Tcl_SetByteArrayObj' /tmp/ccDeR3P5.o: In function Tcl::object::assign(double)':
cpptcl.cc:(.text+0x2847): undefined reference to Tcl_SetDoubleObj' /tmp/ccDeR3P5.o: In function Tcl::object::assign(int)':
cpptcl.cc:(.text+0x2871): undefined reference to Tcl_SetIntObj' /tmp/ccDeR3P5.o: In function Tcl::object::assign(long)':
cpptcl.cc:(.text+0x289e): undefined reference to Tcl_SetLongObj' /tmp/ccDeR3P5.o: In function Tcl::object::assign(long long)':
cpptcl.cc:(.text+0x28ca): undefined reference to Tcl_SetWideIntObj' /tmp/ccDeR3P5.o: In function Tcl::object::assign(char const*)':
cpptcl.cc:(.text+0x28fb): undefined reference to Tcl_SetStringObj' /tmp/ccDeR3P5.o: In function Tcl::object::assign(std::string const&)':
cpptcl.cc:(.text+0x2944): undefined reference to Tcl_SetStringObj' /tmp/ccDeR3P5.o: In function bool Tcl::object::get(Tcl::interpreter&) const':
cpptcl.cc:(.text+0x2b13): undefined reference to Tcl_GetBooleanFromObj' /tmp/ccDeR3P5.o: In function double Tcl::object::get(Tcl::interpreter&) const':
cpptcl.cc:(.text+0x2c4d): undefined reference to Tcl_GetDoubleFromObj' /tmp/ccDeR3P5.o: In function int Tcl::object::get(Tcl::interpreter&) const':
cpptcl.cc:(.text+0x2cf9): undefined reference to Tcl_GetIntFromObj' /tmp/ccDeR3P5.o: In function long Tcl::object::get(Tcl::interpreter&) const':
cpptcl.cc:(.text+0x2d9b): undefined reference to Tcl_GetLongFromObj' /tmp/ccDeR3P5.o: In function long long Tcl::object::get(Tcl::interpreter&) const':
cpptcl.cc:(.text+0x2e3f): undefined reference to Tcl_GetWideIntFromObj' /tmp/ccDeR3P5.o: In function std::vector<std::string, std::allocatorstd::string > Tcl::object::get<std::vector<std::string, std::allocatorstd::string > >(Tcl::interpreter&) const':
cpptcl.cc:(.text+0x2f33): undefined reference to Tcl_ListObjLength' cpptcl.cc:(.text+0x2fde): undefined reference to Tcl_ListObjIndex'
cpptcl.cc:(.text+0x2ff6): undefined reference to Tcl_GetString' /tmp/ccDeR3P5.o: In function Tcl::object::get_string() const':
cpptcl.cc:(.text+0x30fb): undefined reference to Tcl_GetStringFromObj' /tmp/ccDeR3P5.o: In function Tcl::object::get() const':
cpptcl.cc:(.text+0x3181): undefined reference to Tcl_GetString' /tmp/ccDeR3P5.o: In function Tcl::object::get(unsigned long&) const':
cpptcl.cc:(.text+0x31aa): undefined reference to Tcl_GetByteArrayFromObj' /tmp/ccDeR3P5.o: In function Tcl::object::length(Tcl::interpreter&) const':
cpptcl.cc:(.text+0x31f7): undefined reference to Tcl_ListObjLength' /tmp/ccDeR3P5.o: In function Tcl::object::at(Tcl::interpreter&, unsigned long) const':
cpptcl.cc:(.text+0x32b0): undefined reference to Tcl_ListObjIndex' /tmp/ccDeR3P5.o: In function Tcl::object::append(Tcl::interpreter&, Tcl::object const&)':
cpptcl.cc:(.text+0x3425): undefined reference to Tcl_ListObjAppendElement' /tmp/ccDeR3P5.o: In function Tcl::object::append_list(Tcl::interpreter&, Tcl::object const&)':
cpptcl.cc:(.text+0x34d3): undefined reference to Tcl_ListObjAppendList' /tmp/ccDeR3P5.o: In function Tcl::object::replace(Tcl::interpreter&, unsigned long, unsigned long, Tcl::object const&)':
cpptcl.cc:(.text+0x35a4): undefined reference to Tcl_ListObjReplace' /tmp/ccDeR3P5.o: In function Tcl::object::replace_list(Tcl::interpreter&, unsigned long, unsigned long, Tcl::object const&)':
cpptcl.cc:(.text+0x3661): undefined reference to Tcl_ListObjGetElements' cpptcl.cc:(.text+0x36ea): undefined reference to Tcl_ListObjReplace'
/tmp/ccDeR3P5.o: In function Tcl::interpreter::interpreter()': cpptcl.cc:(.text+0x37dc): undefined reference to Tcl_CreateInterp'
/tmp/ccDeR3P5.o: In function Tcl::interpreter::~interpreter()': cpptcl.cc:(.text+0x38b2): undefined reference to Tcl_DeleteInterp'
/tmp/ccDeR3P5.o: In function Tcl::interpreter::make_safe()': cpptcl.cc:(.text+0x391f): undefined reference to Tcl_MakeSafe'
/tmp/ccDeR3P5.o: In function Tcl::interpreter::tcl_init()': cpptcl.cc:(.text+0x39a3): undefined reference to Tcl_Init'
/tmp/ccDeR3P5.o: In function Tcl::interpreter::eval(std::string const&)': cpptcl.cc:(.text+0x3a95): undefined reference to Tcl_Eval'
/tmp/ccDeR3P5.o: In function Tcl::interpreter::eval(Tcl::object const&)': cpptcl.cc:(.text+0x3c40): undefined reference to Tcl_EvalObjEx'
/tmp/ccDeR3P5.o: In function Tcl::interpreter::pkg_provide(std::string const&, std::string const&)': cpptcl.cc:(.text+0x3d0f): undefined reference to Tcl_PkgProvideEx'
/tmp/ccDeR3P5.o: In function Tcl::interpreter::create_alias(std::string const&, Tcl::interpreter&, std::string const&)': cpptcl.cc:(.text+0x3dd7): undefined reference to Tcl_CreateAlias'
/tmp/ccDeR3P5.o: In function Tcl::interpreter::clear_definitions(Tcl_Interp*)': cpptcl.cc:(.text+0x3efc): undefined reference to Tcl_DeleteCommand'
cpptcl.cc:(.text+0x41d4): undefined reference to Tcl_UntraceVar2' cpptcl.cc:(.text+0x423d): undefined reference to Tcl_UntraceVar2'
cpptcl.cc:(.text+0x4481): undefined reference to Tcl_UntraceVar2' cpptcl.cc:(.text+0x44fa): undefined reference to Tcl_UntraceVar2'
cpptcl.cc:(.text+0x46a3): undefined reference to Tcl_DeleteCommand' /tmp/ccDeR3P5.o: In function Tcl::interpreter::add_function(std::string const&, boost::shared_ptrTcl::details::callback_base, Tcl::policies const&, void*)':
cpptcl.cc:(.text+0x4842): undefined reference to Tcl_CreateObjCommand' /tmp/ccDeR3P5.o: In function Tcl::interpreter::add_trace(std::string const&, unsigned int*, std::string const&, boost::shared_ptrTcl::details::trace_base, void*, int)':
cpptcl.cc:(.text+0x4b22): undefined reference to Tcl_TraceVar2' cpptcl.cc:(.text+0x4b87): undefined reference to Tcl_TraceVar2'
/tmp/ccDeR3P5.o: In function Tcl::interpreter::remove_trace(std::string const&, unsigned int*, std::string const&, int)': cpptcl.cc:(.text+0x4ee3): undefined reference to Tcl_UntraceVar2'
cpptcl.cc:(.text+0x4f5a): undefined reference to Tcl_UntraceVar2' cpptcl.cc:(.text+0x4fe6): undefined reference to Tcl_UntraceVar2'
cpptcl.cc:(.text+0x506d): undefined reference to Tcl_UntraceVar2' cpptcl.cc:(.text+0x52c2): undefined reference to Tcl_UntraceVar2'
/tmp/ccDeR3P5.o:cpptcl.cc:(.text+0x5355): more undefined references to Tcl_UntraceVar2' follow /tmp/ccDeR3P5.o: In function Tcl::interpreter::add_constructor(std::string const&, boost::shared_ptrTcl::details::class_handler_base, boost::shared_ptrTcl::details::callback_base, Tcl::policies const&)':
cpptcl.cc:(.text+0x56d4): undefined reference to Tcl_CreateObjCommand' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast::from(Tcl_Interp*, Tcl_Obj*)':
cpptcl.cc:(.text+0x579a): undefined reference to Tcl_GetIntFromObj' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast::to(Tcl_Interp*, int const&)':
cpptcl.cc:(.text+0x581d): undefined reference to Tcl_NewIntObj' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast::from(Tcl_Interp*, Tcl_Obj*)':
cpptcl.cc:(.text+0x584a): undefined reference to Tcl_GetLongFromObj' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast::to(Tcl_Interp*, long const&)':
cpptcl.cc:(.text+0x58cf): undefined reference to Tcl_NewLongObj' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast::from(Tcl_Interp*, Tcl_Obj*)':
cpptcl.cc:(.text+0x58fc): undefined reference to Tcl_GetWideIntFromObj' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast::to(Tcl_Interp*, long long const&)':
cpptcl.cc:(.text+0x5981): undefined reference to Tcl_NewWideIntObj' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast::from(Tcl_Interp*, Tcl_Obj*)':
cpptcl.cc:(.text+0x59ae): undefined reference to Tcl_GetBooleanFromObj' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast::to(Tcl_Interp*, bool const&)':
cpptcl.cc:(.text+0x5a39): undefined reference to Tcl_NewIntObj' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast::from(Tcl_Interp*, Tcl_Obj*)':
cpptcl.cc:(.text+0x5a66): undefined reference to Tcl_GetDoubleFromObj' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast::to(Tcl_Interp*, double const&)':
cpptcl.cc:(.text+0x5afb): undefined reference to Tcl_NewDoubleObj' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_caststd::string::from(Tcl_Interp*, Tcl_Obj*)':
cpptcl.cc:(.text+0x5b2b): undefined reference to Tcl_GetString' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_caststd::string::to(Tcl_Interp*, std::string const&)':
cpptcl.cc:(.text+0x5b9d): undefined reference to Tcl_NewStringObj' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast<char const*>::from(Tcl_Interp*, Tcl_Obj*)':
cpptcl.cc:(.text+0x5bbc): undefined reference to Tcl_GetString' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast<char const*>::to(Tcl_Interp*, char const* const&)':
cpptcl.cc:(.text+0x5be2): undefined reference to Tcl_NewStringObj' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast<std::vector<std::string, std::allocatorstd::string > >::from(Tcl_Interp*, Tcl_Obj*)':
cpptcl.cc:(.text+0x5c12): undefined reference to Tcl_ListObjLength' cpptcl.cc:(.text+0x5ca7): undefined reference to Tcl_ListObjIndex'
cpptcl.cc:(.text+0x5cbf): undefined reference to Tcl_GetString' /tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast<std::vector<std::string, std::allocatorstd::string > >::to(Tcl_Interp*, std::vector<std::string, std::allocatorstd::string > const&)':
cpptcl.cc:(.text+0x5e2e): undefined reference to Tcl_NewStringObj' cpptcl.cc:(.text+0x5e8f): undefined reference to Tcl_NewListObj'
/tmp/ccDeR3P5.o: In function Tcl::details::tcl_cast<Tcl::object>::to(Tcl_Interp*, Tcl::object const&)': cpptcl.cc:(.text+0x5f6a): undefined reference to Tcl_DuplicateObj'
/tmp/ccDeR3P5.o: In function Tcl::tcl_error::tcl_error(Tcl_Interp*)': cpptcl.cc:(.text._ZN3Tcl9tcl_errorC2EP10Tcl_Interp[_ZN3Tcl9tcl_errorC5EP10Tcl_Interp]+0x25): undefined reference to Tcl_GetObjResult'
cpptcl.cc:(.text._ZN3Tcl9tcl_errorC2EP10Tcl_Interp[_ZN3Tcl9tcl_errorC5EP10Tcl_Interp]+0x2d): undefined reference to Tcl_GetString' /tmp/ccDeR3P5.o: In function Tcl::object& Tcl::object::assign<Tcl_Obj* const*>(Tcl_Obj* const*, Tcl_Obj* const*)':
cpptcl.cc:(.text.ZN3Tcl6object6assignIPKP7Tcl_ObjEERS0_T_S7[ZN3Tcl6object6assignIPKP7Tcl_ObjEERS0_T_S7]+0x81): undefined reference to `Tcl_SetListObj'
collect2: error: ld returned 1 exit status
make: *** [example2] Error 1

Tcl Packages & auto_path

First of all, I'd like to thank you for continuing the development of this. It's a really useful library.

The issue I found is that if you are using an embedded Tcl::interpreter, then try to import a package, this doesn't work. An Example:

Tcl::interpreter i;
i.eval("package require Expect"); //throws a tcl_error

The solution I found, through use of this forum thread: http://objectmix.com/tcl/15810-finding-expect-package-using-embedded-tcl-c-application.html

is to add this line:

Tcl_Init(interp_);

to all the constructors for Tcl::interpreter around line 937 in cpptcl.cc, directly after the call:

interp_ =  Tcl_CreateInterp();

I think what happens is the auto_path Tcl variable isn't set unless this call is made.

I added the line to the following functions:

  • void object::set_interp(Tcl_Interp *interp)
  • interpreter::interpreter()
  • interpreter::interpreter(Tcl_Interp *interp, bool owner)

I am not certain that's all the locations that require this, but I'm fairly sure this is the case.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.