Code Monkey home page Code Monkey logo

libacfutils's People

Contributors

amyinorbit avatar ddunwoody avatar pilsnerish avatar skiselkov avatar twalker314 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

libacfutils's Issues

Libxml build error

On both the Windows and Linux builds.

../libxml2-2.9.4/runtest.c: In function ‘streamProcessTest’:
../libxml2-2.9.4/runtest.c:2145:65: warning: unused parameter ‘options’ [-Wunused-parameter]
2145 | xmlTextReaderPtr reader, const char *rng, int options) {
| ~~~~^~~~~~~
CC testlimits.o
sed -e 's?@XML_LIBDIR@?-L/media/Data/Git_Repos/libacfutils/libxml2/libxml2-linux-64/lib?g'
-e 's?@XML_INCLUDEDIR@?-I/media/Data/Git_Repos/libacfutils/libxml2/libxml2-linux-64/include/libxml2?g'
-e 's?@Version@?2.9.4?g'
-e 's?@XML_LIBS@?-lxml2 -lm ?g'
< ../libxml2-2.9.4/xml2Conf.sh.in > xml2Conf.tmp
&& mv xml2Conf.tmp xml2Conf.sh
CCLD testdso.la
CC testapi.o
cc1: fatal error: testapi.c: No such file or directory
compilation terminated.

Newer versions from Github do not build either because the do not come with a configure script/file.

OS: Arch Linux

GCC 12 warns about possible integer overflow in safe_strdup

Hi I got this build error:
In file included from /usr/include/string.h:535, from ../src/airportdb.c:24: In function ‘memcpy’, inlined from ‘safe_strdup’ at ../src/acfutils/safe_alloc.h:187:2, inlined from ‘parse_apt_dat_1_line’ at ../src/airportdb.c:894:21, inlined from ‘read_apt_dat’ at ../src/airportdb.c:1557:11: /usr/include/x86_64-linux-gnu/bits/string_fortified.h:29:10: error: ‘__builtin_memcpy’ pointer overflow between offset 0 and size 18446744073709551615 [-Werror=array-bounds] 29 | return __builtin___memcpy_chk (__dest, __src, __len, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30 | __glibc_objsize0 (__dest)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~
Fixed it by changing "int l" to "size_t l" in safe_strdup function. Linux xubuntu 22.04 gcc 12.3.0

libacfutils.dll location and loading

When trying to load an X-Plane plugin linked against libacfutils.lib the plugin is not loaded and X-Plane crashes with a Visual C++ Runtime Library error: „This application has requested the Runtime to terminate it in an unusual way.“
Possible error should be missing VC++ Redistributables, but I don‘t know which ones are required for acfutils, actually I have 2008, 2010, 2012, 2013, 2015 and 2017 in 32 and 64 bit versions.

Crash when loading shader and __imp____iob_func

Hey,
I built the dependencies and then build a redist version for Linux with Ubuntu 18.04.After that I put my include directory from acfutils in my include direction for my project and add the libs folder to my library search paths in Visual Studio 2019.When I try to load shaders, xplane just crashes with an abort().I initialized GLEW with glewInit() and after that I tried to load shaders from text with shader_prog_from_text_v(const char *progname, const char *vert_text, const char *frag_text, const shader_attr_bind_t *binds) but then xp just crashes.Another thing is that when I try to use the log class, visual studio throws the error unresolved external symbol __imp____iob_func for the log_backtrace function.Are their any known solutions for my problems ? :)

widget.c : font_face not initialized. When calling tt_render_cb() .. crashing on Linux

tt_render_cb() .. crashing on Linux and may not crash by chance on other platform

tooltip_set_new_native(XPLMWindowID window) is not initializing tts->font_face.
cairo_set_font_face(cr, tts->font_face) will crash if unluckily tts->font_face is not null

proposal :

`tooltip_set_t *
tooltip_set_new_native(XPLMWindowID window)
{
int left, top, right, bottom;
cairo_text_extents_t te;

tooltip_set_t *tts = safe_malloc(sizeof (*tts));
tts->window = window;
list_create(&tts->tooltips, sizeof (tooltip_t),
    offsetof(tooltip_t, node));
list_insert_tail(&tooltip_sets, tts);
XPLMGetWindowGeometry(window, &left, &top, &right, &bottom);
tts->orig_w = right - left;
tts->orig_h = top - bottom;
tts->display_delay = DEFAULT_DISPLAY_DELAY;
tts->surf = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1, 1);
tts->cr = cairo_create(tts->surf);
tts->font_size = TT_FONT_SIZE;
tts->font_face = NULL;                                       <---  NULL = default font face
cairo_set_font_size(tts->cr, tts->font_size);
memcpy(tts->bg_color, (double[4]){TT_BACKGROUND_RGBA},
    sizeof (tts->bg_color));
cairo_text_extents(tts->cr, "X", &te);
tts->line_height = te.height * TT_LINE_HEIGHT_MULT;

return (tts);

}
`

Building errors on Linux Mint/Ubuntu 22.04

Hi,
Running build_redist on the above OS, produced these errors:

../src/conf.c:28:10: fatal error: curl/curl.h: No such file or directory
28 | #include <curl/curl.h>
| ^~~~~~~~~~~~~
compilation terminated.
make[1]: *** [Makefile.Debug:515: debug/conf.o] Error 1
make[1]: *** Waiting for unfinished jobs....
../src/airportdb.c: In function ‘normalize_name’:
../src/airportdb.c:792:15: error: passing argument 2 of ‘libiconv’ from incompatible pointer type [-Werror=incompatible-pointer-types]
792 | iconv(*cd_p, &conv_in, &conv_in_sz, &conv_out, &conv_out_sz);
| ^~~~~~~~
| |
| char **
In file included from ../src/airportdb.c:19:

geographiclib build fails towards end of install stage

Doesn't seem to have any practical consequences on building lacfutils, but I figured it's noteworthy.

Making install in include
make[2]: Nothing to be done for `install-exec-am'.
 /usr/local/bin/gmkdir -p '/Volumes/SSDRIVE/XP.GIT.REPOS/git4github/totoritko/libacfutils/geographiclib/geographiclib-mac-64/include'
 /usr/local/bin/gmkdir -p '/Volumes/SSDRIVE/XP.GIT.REPOS/git4github/totoritko/libacfutils/geographiclib/geographiclib-mac-64/include/GeographicLib'
 /usr/local/bin/ginstall -c -m 644  ../../GeographicLib-1.51/include/GeographicLib/Accumulator.hpp ../../GeographicLib-1.51/include/GeographicLib/AlbersEqualArea.hpp ../../GeographicLib-1.51/include/GeographicLib/AzimuthalEquidistant.hpp ../../GeographicLib-1.51/include/GeographicLib/CassiniSoldner.hpp ../../GeographicLib-1.51/include/GeographicLib/CircularEngine.hpp ../../GeographicLib-1.51/include/GeographicLib/Constants.hpp ../../GeographicLib-1.51/include/GeographicLib/DMS.hpp ../../GeographicLib-1.51/include/GeographicLib/Ellipsoid.hpp ../../GeographicLib-1.51/include/GeographicLib/EllipticFunction.hpp ../../GeographicLib-1.51/include/GeographicLib/GARS.hpp ../../GeographicLib-1.51/include/GeographicLib/GeoCoords.hpp ../../GeographicLib-1.51/include/GeographicLib/Geocentric.hpp ../../GeographicLib-1.51/include/GeographicLib/Geodesic.hpp ../../GeographicLib-1.51/include/GeographicLib/GeodesicExact.hpp ../../GeographicLib-1.51/include/GeographicLib/GeodesicLine.hpp ../../GeographicLib-1.51/include/GeographicLib/GeodesicLineExact.hpp ../../GeographicLib-1.51/include/GeographicLib/Geohash.hpp ../../GeographicLib-1.51/include/GeographicLib/Geoid.hpp ../../GeographicLib-1.51/include/GeographicLib/Georef.hpp ../../GeographicLib-1.51/include/GeographicLib/Gnomonic.hpp ../../GeographicLib-1.51/include/GeographicLib/GravityCircle.hpp ../../GeographicLib-1.51/include/GeographicLib/GravityModel.hpp ../../GeographicLib-1.51/include/GeographicLib/LambertConformalConic.hpp ../../GeographicLib-1.51/include/GeographicLib/LocalCartesian.hpp ../../GeographicLib-1.51/include/GeographicLib/MGRS.hpp ../../GeographicLib-1.51/include/GeographicLib/MagneticCircle.hpp ../../GeographicLib-1.51/include/GeographicLib/MagneticModel.hpp ../../GeographicLib-1.51/include/GeographicLib/Math.hpp ../../GeographicLib-1.51/include/GeographicLib/NearestNeighbor.hpp ../../GeographicLib-1.51/include/GeographicLib/NormalGravity.hpp ../../GeographicLib-1.51/include/GeographicLib/OSGB.hpp ../../GeographicLib-1.51/include/GeographicLib/PolarStereographic.hpp ../../GeographicLib-1.51/include/GeographicLib/PolygonArea.hpp ../../GeographicLib-1.51/include/GeographicLib/Rhumb.hpp ../../GeographicLib-1.51/include/GeographicLib/SphericalEngine.hpp ../../GeographicLib-1.51/include/GeographicLib/SphericalHarmonic.hpp ../../GeographicLib-1.51/include/GeographicLib/SphericalHarmonic1.hpp ../../GeographicLib-1.51/include/GeographicLib/SphericalHarmonic2.hpp ../../GeographicLib-1.51/include/GeographicLib/TransverseMercator.hpp ../../GeographicLib-1.51/include/GeographicLib/TransverseMercatorExact.hpp '/Volumes/SSDRIVE/XP.GIT.REPOS/git4github/totoritko/libacfutils/geographiclib/geographiclib-mac-64/include/GeographicLib'
 /usr/local/bin/gmkdir -p '/Volumes/SSDRIVE/XP.GIT.REPOS/git4github/totoritko/libacfutils/geographiclib/geographiclib-mac-64/include/GeographicLib'
 /usr/local/bin/ginstall -c -m 644  ../../GeographicLib-1.51/include/GeographicLib/UTMUPS.hpp ../../GeographicLib-1.51/include/GeographicLib/Utility.hpp GeographicLib/Config.h '/Volumes/SSDRIVE/XP.GIT.REPOS/git4github/totoritko/libacfutils/geographiclib/geographiclib-mac-64/include/GeographicLib'
ginstall: 'GeographicLib/Config.h' and '/Volumes/SSDRIVE/XP.GIT.REPOS/git4github/totoritko/libacfutils/geographiclib/geographiclib-mac-64/include/GeographicLib/Config.h' are the same file
make[2]: *** [install-nobase_includeHEADERS] Error 1
make[1]: *** [install-am] Error 2
make: *** [install-recursive] Error 1

building on ubuntu linux 18.04

I end up with the following GLXEWContext unknown type error when building:
In file included from ../src/glew_os.c:19:0:
../src/acfutils/glew_os.h:53:21: error: unknown type name ‘GLXEWContext’
extern THREAD_LOCAL GLXEWContext lacf_glxew_per_thread_ctx;

I am using the regular Ubuntuo GLEW implementation. headers are found. So I started to look about your patches. I see that you patch these for Mac:
ctx_funcs_2.patch
ctx_funcs_1.patch

Shouldn't they also be patched for linux?
Reto

Fixing the get_first_monitor_bounds function

libacfutils/src/widget.c

Lines 140 to 168 in 9f4b74e

static monitor_t
get_first_monitor_bounds(void)
{
monitor_t mon;
memset(&mon, 0, sizeof (mon));
XPLMGetAllMonitorBoundsGlobal(find_first_monitor, &mon);
if (mon.left == 0 && mon.right == 0 && mon.top == 0 &&
mon.bottom == 0) {
XPLMGetScreenSize(&mon.right, &mon.top);
} else {
/*
* The modern coordinate system uses the top left corner
* as the origin, instead of the bottom left. So we need
* to flip the coordinates around.
*/
int glob_left, glob_top, glob_right, glob_bottom;
int glob_height;
XPLMGetScreenBoundsGlobal(&glob_left, &glob_top,
&glob_right, &glob_bottom);
glob_height = glob_top - glob_bottom;
mon.top = glob_height - mon.top;
mon.bottom = glob_height - mon.bottom;
}
return (mon);
}

Hi,

I'm nico87 from SimCoders.
I see that you're facing the same issue I faced few months ago while trying to improve the multi-monitor support in my plugin.

I was not actually able to figure out a reliable way to identify the main monitor and its bounds at once. So what I did is provide the user an option to set the proper monitor index that he wants to use as main for my plugin's windows.
Then, here's the simplified code I use to identify the proper coordinates. It worked reliably until now. I see that in your code you're doing more math but the solution is actually straightforward.
The code below is simplified because as I support more SDK versions, I have to use function pointers and figure out the proper SDK functions to use and it makes the code more difficult to read.

static monitor_t
get_first_monitor_bounds(void)
{

     monitor_t monitor;
     XPLMGetAllMonitorBoundsGlobal(find_first_monitor, &monitor);

     // Before XP11.30 there was a ugly bug :-/
     if (outXPlaneVersion < 11300) {
         // Just swap monitor.top and monitor.bottom
         int swap = monitor.top;
         monitor.top = monitor.bottom;
         monitor.bottom = swap;
     }
     return (monitor);
}

Outdated beta XP SDK

The SDK version in this package looks like an old beta version dated from last year when XP12 itself was in beta. There is a newer version 4.0.1 released earlier this year.
XPSDK401.zip

widget.c: tooltip is flashing every 0.1s/1s

The tooltip is appearing only 0.1s every 1s
Proposal
In function tooltip_floop_cb line 551

	if (last_mouse_x != mouse_x || last_mouse_y != mouse_y /*||   <-- removing tooltip_invalid() fix the issue
	    tooltip_invalid()*/) {
		last_mouse_x = mouse_x;
		last_mouse_y = mouse_y;
		mouse_moved_time = now;
		if (cur_tt != NULL)
			destroy_cur_tt();
		return (TOOLTIP_INTVAL);
	}

The drawback is that the tooltip appears if there is an other window over, but according Laminar XPLMIsWindowInFront may return an incorrect value.

Thus, if you have a window at the front of the floating window layer (xplm_WindowLayerFloatingWindows), this will return true even if there is a modal window (in layer xplm_WindowLayerModal) above you. (Not to worry, though: in such a case, X-Plane will not pass clicks or keyboard input down to your layer until the window above stops “eating” the input.)

Is there a float/double comparsion function or macro?

Hi,
Is there a float/double almost equal comparison function or macro in the library or I should implement my own?
I looked but couldn't find one.
It is about this code in OpenWXR
DELAYED_DR_OP(&sys.gain_dr, gain_ctl = dr_getf(&sys.gain_dr.dr)); if (gain_ctl == sys.gain_auto_pos) gain = DFL_GAIN; else gain = wavg(MIN_GAIN, MAX_GAIN, clamp(gain_ctl, 0, 1)); intf->set_gain(wxr, gain);

It is unreliable in setting auto gain after gain dataref was changed and then return to auto position.

Bulid errors mingw

Hi,
there are few build errors that bug me and I will appreciate some help :)

First when running build_deps there is error about geographiclib

/usr/bin/install: 'GeographicLib/Config.h' and '/home/todir/Downloads/GitHub/libacfutils/geographiclib/geographiclib-win-64/include/GeographicLib/Config.h' are the same file
make[2]: *** [Makefile:406: install-nobase_includeHEADERS] Error 1
make[2]: Leaving directory '/home/todir/Downloads/GitHub/libacfutils/geographiclib/geographiclib-win-64/include'
make[1]: *** [Makefile:527: install-am] Error 2
make[1]: Leaving directory '/home/todir/Downloads/GitHub/libacfutils/geographiclib/geographiclib-win-64/include'
make: *** [Makefile:484: install-recursive] Error 1

then when running build_redist there are 2 errors
The first one is that mingw can not find <fontconfig/fontconfig.h> and as expected it is not in /usr/x86_64-w64-mingw32/include folder. Copying the one from usr/include fixes that, but I think it is wrong to do it that way. Any idea how to fix it?
The second one is:

In file included from ../src/acfutils/types.h:26,
                 from ../src/acfutils/sysmacros.h:33,
                 from ../src/acfutils/log.h:24,
                 from ../src/acfutils/assert.h:32,
                 from ../src/mt_cairo_render.c:35:
../src/acfutils/core.h:44:25: error: redefinition of ‘struct __libacfutils_stat’
   44 | #define ACFSYM(__sym__) __libacfutils_ ## __sym__
      |                         ^~~~~~~~~~~~~~
../src/acfutils/core.h:44:25: note: originally defined here
   44 | #define ACFSYM(__sym__) __libacfutils_ ## __sym__
      |                         ^~~~~~~~~~~~~~
../src/acfutils/core.h:44:25: note: in definition of macro ‘ACFSYM’
   44 | #define ACFSYM(__sym__) __libacfutils_ ## __sym__
      |                         ^~~~~~~~~~~~~~
../src/acfutils/helpers.h:472:8: note: in expansion of macro ‘stat’
  472 | struct stat {
      |        ^~~~
../src/acfutils/core.h:44:25: error: conflicting types for ‘__libacfutils_stat’
   44 | #define ACFSYM(__sym__) __libacfutils_ ## __sym__
      |                         ^~~~~~~~~~~~~~
../src/acfutils/core.h:44:25: note: previous declaration of ‘__libacfutils_stat’ was here
   44 | #define ACFSYM(__sym__) __libacfutils_ ## __sym__
      |                         ^~~~~~~~~~~~~~
../src/acfutils/core.h:44:25: note: in definition of macro ‘ACFSYM’
   44 | #define ACFSYM(__sym__) __libacfutils_ ## __sym__
      |                         ^~~~~~~~~~~~~~
../src/acfutils/helpers.h:477:16: note: in expansion of macro ‘stat’
  477 | API_EXPORT int stat(const char *pathname, struct stat *buf);
      |                ^~~~
make[1]: *** [Makefile.Debug:1123: debug/mt_cairo_render.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory '/home/todir/Downloads/GitHub/libacfutils/qmake'
make: *** [Makefile:45: debug] Error 2

Those errors are for mingw only. It compiles fine for linux only with build-win-lin -l
I am on ubuntu 21.04 with mingw gcc version 10-win32 20210408 (GCC)

Strange build error

Hi, here is what it says:
../src/airportdb.c: In function ‘parse_apt_dat_1_line’:
../src/airportdb.c:625:16: error: passing argument 2 of ‘libiconv’ from incompatible pointer type [-Werror=incompatible-pointer-types]
625 | iconv(*cd_p, &conv_in, &conv_in_sz, &conv_out, &conv_out_sz);
| ^~~~~~~~
| |
| char **
In file included from ../src/airportdb.c:19:
/home/todir/Downloads/GitHub/libacfutils/libiconv/libiconv-win-64/include/iconv.h:82:48: note: expected ‘const char **’ but argument is of type ‘char **’
82 | extern size_t iconv (iconv_t cd, const char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);

but if I change conv_in to const char *
../src/airportdb.c: In function ‘parse_apt_dat_1_line’:
../src/airportdb.c:625:16: error: passing argument 2 of ‘libiconv’ from incompatible pointer type [-Werror=incompatible-pointer-types]
625 | iconv(*cd_p, &conv_in, &conv_in_sz, &conv_out, &conv_out_sz);
| ^~~~~~~~
| |
| const char **
In file included from ../src/airportdb.c:19:
/home/todir/Downloads/GitHub/libacfutils/libiconv/libiconv-linux-64/include/iconv.h:82:43: note: expected ‘char **’ but argument is of type ‘const char **’
82 | extern size_t iconv (iconv_t cd, char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);
Building on Mint(ubuntu 18.04) gcc10. gcc8 same err. Libacfutils ver 59727ea
I am lost. WTF?. Of course it builds fine with NOERRORS.

Cairo replacement

Hi,
OpenGL has been removed from X-Plane from X-Plane 12 onwards. It is a vulkan only simulator. As a result, I'd like to know if there is a plan to replaced cairo (which appears to have dropped OpenGL) with a vulkan equivalent. Thanks,

function conf_write is not writing in the conf file

**

  • Writes a conf_t object to a file. Returns B_TRUE if the write was
  • successful, B_FALSE otherwise.
    */
    bool_t
    conf_write(const conf_t *conf, FILE *fp)
    {
    return (conf_write_impl(conf, fp, 0, B_FALSE, B_FALSE)); <-- Last arg should be B_FALSE and not B_TRUE
    }

Acfutils build fails at "TEST_GLSL_VERSION" and "GLEW_ARB_gl_spirv"

After applying bandaids to much of the dependency build process and much of the libacfutils build process (it's been hell on earth so far), I'm stuck.

../src/shader.c: In function ‘shader_from_spirv_fallback’:
../src/shader.c:135:27: error: ‘GLEW_VERSION_4_6’ undeclared (first use in this function); did you mean ‘GLEW_VERSION_4_3’?
135 | TEST_GLSL_VERSION(GLEW_VERSION_4_6, "glsl460");
| ^~~~~~~~~~~~~~~~
../src/shader.c:126:33: note: in definition of macro ‘TEST_GLSL_VERSION’
126 | if (!loaded && (version)) {
| ^~~~~~~
../src/shader.c:135:27: note: each undeclared identifier is reported only once for each function it appears in
135 | TEST_GLSL_VERSION(GLEW_VERSION_4_6, "glsl460");
| ^~~~~~~~~~~~~~~~
../src/shader.c:126:33: note: in definition of macro ‘TEST_GLSL_VERSION’
126 | if (!loaded && (version)) {
| ^~~~~~~
../src/shader.c: In function ‘shader_from_spirv’:
../src/shader.c:237:14: error: ‘GLEW_ARB_gl_spirv’ undeclared (first use in this function)
237 | if (!GLEW_ARB_gl_spirv ||
| ^~~~~~~~~~~~~~~~~
../src/shader.c:238:40: error: ‘GL_SHADER_BINARY_FORMAT_SPIR_V’ undeclared (first use in this function); did you mean ‘GL_SHADER_BINARY_FORMATS’?
238 | !have_shader_binary_format(GL_SHADER_BINARY_FORMAT_SPIR_V) ||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| GL_SHADER_BINARY_FORMATS
../src/shader.c:280:9: error: implicit declaration of function ‘glSpecializeShader’ [-Werror=implicit-function-declaration]
280 | glSpecializeShader(shader, entry_pt, n_spec, spec_indices, spec_values);
| ^~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile.Debug:1362: debug/shader.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory '/media/Data/Git_Repos/libacfutils/qmake'
make: *** [Makefile:45: debug] Error 2

The header file chain does eventually point to GL/glew.h as far as I can see and I've pointed qmake/qmake.pro to INCLUDEPATH += ../glew/glew-1.13.0-linux-64/include and applied that potential fix from another issue, i.e. DEFINES += GLEW_STATIC GLEW_MX, but no success.

All I want is to compile a more up to date release of librain...

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.