Giter Club home page Giter Club logo

Comments (5)

rtv avatar rtv commented on September 18, 2024

Hi,

The crash seems to be in the GLU tesselation code. As a workaround, try
changing the winding direction of your polygon, and make sure the polygon
does not self-intersect. I suspect the tesselator is fast rather than
robust. Probably Stage should do some checks on your polygon. Let me know
if you figure out if some assumption is violated. I will take a look at
Stage's related code meanwhile in case I can see a bug.

R/

On Fri, Oct 19, 2012 at 3:16 PM, kbogert [email protected] wrote:

I'm seeing a reproducible segfault in libGLU.so when loading a world file
in which a position model has a block. Removing the block prevents the
crash, as does running stage without graphics enabled.

The example world file is at:
https://kforge.ros.org/navigation/tutorials/file/d1f3dda4fd5a/roomba_stage/roomba_lse_arena.world

Starting program: /opt/ros/fuerte/stacks/stage/bin/stageros
/home/ros/fuerte_workspace/navigation_tutorials/roomba_stage/roomba_lse_arena.world
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1".
[New Thread 0x42720b40 (LWP 7706)]
[New Thread 0x42921b40 (LWP 7707)]
[New Thread 0x42d00b40 (LWP 7708)]
[New Thread 0x43200b40 (LWP 7715)]
[New Thread 0x4516db40 (LWP 7719)]
[Loading
/home/ros/fuerte_workspace/navigation_tutorials/roomba_stage/roomba_lse_arena.world][New
Thread 0x45bcab40 (LWP 7720)]
[Image "./maps/lse_arena.pgm"]
warn: worldfile
/home/ros/fuerte_workspace/navigation_tutorials/roomba_stage/roomba_lse_arena.world:22
: property [laser_return] is defined but not used
(/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/worldfile.cc
WarnUnused)
warn: worldfile
/home/ros/fuerte_workspace/navigation_tutorials/roomba_stage/roomba_lse_arena.world:32
: property [color] is defined but not used
(/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/worldfile.cc
WarnUnused)
warn: worldfile
/home/ros/fuerte_workspace/navigation_tutorials/roomba_stage/roomba_lse_arena.world:8
: property [range_max] is defined but not used
(/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/worldfile.cc
WarnUnused)
warn: worldfile
/home/ros/fuerte_workspace/navigation_tutorials/roomba_stage/roomba_lse_arena.world:7
: property [range_min] is defined but not used
(/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/worldfile.cc
WarnUnused)
[ INFO] [1350446716.598520044]: found 1 position/laser pair in the file
[New Thread 0x45dcbb40 (LWP 7727)]

Program received signal SIGSEGV, Segmentation fault.
0x4097c793 in __gl_pqSortInit (pq=0x843f9f8) at libtess/priorityq.c:132
132 j = r + 1;
(gdb) bt
#0 0x4097c793 in __gl_pqSortInit (pq=0x843f9f8) at libtess/priorityq.c:132
#1 #1 0x4097fb2e in InitPriorityQ
(tess=< optimized out>) at libtess/sweep.c:1251
#2 #2 __gl_computeInterior
(tess=0x8666078) at libtess/sweep.c:1321
#3 #3 0x40980900 in
gluTessEndPolygon (tess=0x8666078) at libtess/tess.c:540
#4 #4 0x40273d55 in
Stg::BlockGroup::BuildDisplayList (this=0x864a6d4) at
/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/blockgroup.cc:243
#5 #5 0x40274155 in
Stg::BlockGroup::CallDisplayList (this=0x864a6d4) at
/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/blockgroup.cc:288
#6 #6 0x4028857e in
Stg::Model::DrawBlocks (this=0x864a678) at
/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/model_draw.cc:253
#7 #7 0x402889b2 in
Stg::Model::DrawBlocksTree (this=0x864a678) at
/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/model_draw.cc:235
#8 #8 0x402adc73 in
Stg::Canvas::DrawBlocks (this=0x80bbfd0) at
/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/canvas.cc:717
#9 #9 0x402b5950 in
Stg::Canvas::renderFrame (this=0x80bbfd0) at
/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/canvas.cc:954
#10 #10 0x402ad7e1 in
Stg::Canvas::draw (this=0x80bbfd0) at
/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/canvas.cc:1321
#11 #11 0x40a74197 in
Fl_Gl_Window::flush() () from /usr/lib/i386-linux-gnu/libfltk_gl.so.1.1
#12 #12 0x405e6ee3 in Fl::flush() ()
from /usr/lib/i386-linux-gnu/libfltk.so.1.1
#13 #13 0x405e8645 in
Fl::wait(double) () from /usr/lib/i386-linux-gnu/libfltk.so.1.1
#14 #14 0x08059209 in main (argc=2,
argv=0xbffff004) at
/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/src/stageros.cpp:445

(gdb) info locals
p = 0x8666f20
r = 0x8666f5c
i = 0x8666f5c
j = 0x8666f60
piv = 0x8666eb8
Stack = {{p = 0x8666f20, r = 0x8666f5c}, {p = 0xbfffe6b8, r = 0x404912c1},
{p = 0x866f600, r = 0x43337ff4}, {p = 0x41018899, r = 0x404912c1}, {p =
0x82e3de0, r = 0xb}, {p = 0x80cdd50, r = 0x404912c1}, {
p = 0x268, r = 0x2710}, {p = 0x48, r = 0x405c0470}, {p = 0x405c0478, r =
0x9}, {p = 0x40, r = 0x9}, {p = 0x3d8, r = 0x2710}, {p = 0x40, r =
0x405c0470}, {p = 0x405c0478, r = 0x0}, {p = 0x3c, r = 0x8}, {
p = 0x1, r = 0x50}, {p = 0x0, r = 0x404912c1}, {p = 0x0, r = 0x0}, {p =
0x8, r = 0x39}, {p = 0x5b, r = 0x6e}, {p = 0x77, r = 0x404912c1}, {p = 0x0,
r = 0x30}, {p = 0x0, r = 0x405bfff4}, {p = 0x0,
r = 0x2710}, {p = 0x110, r = 0x405c0470}, {p = 0x5b, r = 0x6e}, {p =
0x108, r = 0x22}, {p = 0x4, r = 0x2710}, {p = 0x88, r = 0x405c0470}, {p =
0x0, r = 0x0}, {p = 0x80, r = 0x11}, {p = 0x2, r = 0x98}, {
p = 0x0, r = 0x0}, {p = 0x0, r = 0x0}, {p = 0x11, r = 0x3a}, {p = 0x5b, r
= 0x6e}, {p = 0x77, r = 0x7c}, {p = 0x8660000, r = 0x86654c0}, {p = 0x0, r
= 0x405bfff4}, {p = 0x405c0440, r = 0x4097a520}, {
p = 0x80, r = 0x40493fec}, {p = 0x0, r = 0x0}, {p = 0x0, r = 0x409d0ff4},
{p = 0x86652c0, r = 0x8666d00}, {p = 0x866f484, r = 0x4097c20a}, {p =
0x108, r = 0x3ff00000}, {p = 0x0, r = 0x4097c993}, {
p = 0x843f9f8, r = 0x4097a520}, {p = 0x86652c0, r = 0x4097c5a0}, {p =
0x80, r = 0x3fc51eb8}, {p = 0x2e5096af, r = 0xdf238d35}}
top = < optimized out>
seed = 1409832680
(gdb) up
#1 #1 0x4097fb2e in InitPriorityQ
(tess=< optimized out>) at libtess/sweep.c:1251
1251 if (v != vHead || !pqInit( pq ) ) { /* _gl_pqSortInit /
(gdb) info locals
pq = 0x843f9f8
v = 0x866f430
vHead = 0x866f430
(gdb) up
#2 #2 __gl_computeInterior
(tess=0x8666078) at libtess/sweep.c:1321
1321 if ( !InitPriorityQ( tess ) ) return 0; / if error */
(gdb) info locals
v = < optimized out>
vNext = < optimized out>
(gdb) up
#3 #3 0x40980900 in
gluTessEndPolygon (tess=0x8666078) at libtess/tess.c:540
540 if ( !_gl_computeInterior( tess ) ) {
(gdb) info locals
mesh = < optimized out>
(gdb) up
#4 #4 0x40273d55 in
Stg::BlockGroup::BuildDisplayList (this=0x864a6d4) at
/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/blockgroup.cc:243
243
/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/blockgroup.cc:
No such file or directory.
(gdb) info locals
tobj = 0x8666078
geom = {pose = {_vptr.Pose = 0x8071dd8, x = 0, y = 0, z = 0, a = 0}, size
= {x = 0.33000000000000002, y = 0.33000000000000002, z =
0.10000000000000001}}
contours = {< std::_Vector_base< std::vector< double, std::allocator<
double> >, std::allocator< std::vector< double, std::allocator< double> > >

= {
_M_impl = {< std::allocator< std::vector< double, std::allocator< double>

= {< __gnu_cxx::new_allocator< std::vector< double, std::allocator<
double> > >> = {< No data fields>}, < No data fields>},
_M_start = 0x866aee8, _M_finish = 0x866aef4, _M_end_of_storage =
0x866aef4}}, < No data fields>}
c = < optimized out>


Reply to this email directly or view it on GitHubhttps://github.com//issues/31.

from stage.

kbogert avatar kbogert commented on September 18, 2024

Hello,

As far as I can tell, the polygon looks ok. I'm testing with:

block
(
points 4
point[0] [0.16 0.16]
point[1] [-0.16 0.16]
point[2] [-0.16 -0.16]
point[3] [0.16 -0.16]

color "red"
)

I still see this crash if I reverse the order.

I'm running this on ubuntu 12.04 32 bit, stage is installed from ros
fuerte. I do not see this crash running ros electric's version on
ubuntu 11.10.

kdb

On 10/26/2012 05:48 PM, Richard Vaughan wrote:

Hi,

The crash seems to be in the GLU tesselation code. As a workaround, try
changing the winding direction of your polygon, and make sure the polygon
does not self-intersect. I suspect the tesselator is fast rather than
robust. Probably Stage should do some checks on your polygon. Let me know
if you figure out if some assumption is violated. I will take a look at
Stage's related code meanwhile in case I can see a bug.

R/

On Fri, Oct 19, 2012 at 3:16 PM, kbogert [email protected]
wrote:

I'm seeing a reproducible segfault in libGLU.so when loading a world
file
in which a position model has a block. Removing the block prevents the
crash, as does running stage without graphics enabled.

The example world file is at:

https://kforge.ros.org/navigation/tutorials/file/d1f3dda4fd5a/roomba_stage/roomba_lse_arena.world

Starting program: /opt/ros/fuerte/stacks/stage/bin/stageros

/home/ros/fuerte_workspace/navigation_tutorials/roomba_stage/roomba_lse_arena.world
[Thread debugging using libthread_db enabled]
Using host libthread_db library
"/lib/i386-linux-gnu/libthread_db.so.1".
[New Thread 0x42720b40 (LWP 7706)]
[New Thread 0x42921b40 (LWP 7707)]
[New Thread 0x42d00b40 (LWP 7708)]
[New Thread 0x43200b40 (LWP 7715)]
[New Thread 0x4516db40 (LWP 7719)]
[Loading

/home/ros/fuerte_workspace/navigation_tutorials/roomba_stage/roomba_lse_arena.world][New
Thread 0x45bcab40 (LWP 7720)]
[Image "./maps/lse_arena.pgm"]
warn: worldfile

/home/ros/fuerte_workspace/navigation_tutorials/roomba_stage/roomba_lse_arena.world:22
: property [laser_return] is defined but not used

(/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/worldfile.cc
WarnUnused)
warn: worldfile

/home/ros/fuerte_workspace/navigation_tutorials/roomba_stage/roomba_lse_arena.world:32
: property [color] is defined but not used

(/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/worldfile.cc
WarnUnused)
warn: worldfile

/home/ros/fuerte_workspace/navigation_tutorials/roomba_stage/roomba_lse_arena.world:8
: property [range_max] is defined but not used

(/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/worldfile.cc
WarnUnused)
warn: worldfile

/home/ros/fuerte_workspace/navigation_tutorials/roomba_stage/roomba_lse_arena.world:7
: property [range_min] is defined but not used

(/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/worldfile.cc
WarnUnused)
[ INFO] [1350446716.598520044]: found 1 position/laser pair in the file
[New Thread 0x45dcbb40 (LWP 7727)]

Program received signal SIGSEGV, Segmentation fault.
0x4097c793 in __gl_pqSortInit (pq=0x843f9f8) at libtess/priorityq.c:132
132 j = r + 1;
(gdb) bt
#0 0x4097c793 in __gl_pqSortInit (pq=0x843f9f8) at
libtess/priorityq.c:132
#1 #1 0x4097fb2e in InitPriorityQ
(tess=< optimized out>) at libtess/sweep.c:1251
#2 #2 __gl_computeInterior
(tess=0x8666078) at libtess/sweep.c:1321
#3 #3 0x40980900 in
gluTessEndPolygon (tess=0x8666078) at libtess/tess.c:540
#4 #4 0x40273d55 in
Stg::BlockGroup::BuildDisplayList (this=0x864a6d4) at

/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/blockgroup.cc:243
#5 #5 0x40274155 in
Stg::BlockGroup::CallDisplayList (this=0x864a6d4) at

/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/blockgroup.cc:288
#6 #6 0x4028857e in
Stg::Model::DrawBlocks (this=0x864a678) at

/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/model_draw.cc:253
#7 #7 0x402889b2 in
Stg::Model::DrawBlocksTree (this=0x864a678) at

/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/model_draw.cc:235
#8 #8 0x402adc73 in
Stg::Canvas::DrawBlocks (this=0x80bbfd0) at

/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/canvas.cc:717
#9 #9 0x402b5950 in
Stg::Canvas::renderFrame (this=0x80bbfd0) at

/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/canvas.cc:954
#10 #10 0x402ad7e1 in
Stg::Canvas::draw (this=0x80bbfd0) at

/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/canvas.cc:1321
#11 #11 0x40a74197 in
Fl_Gl_Window::flush() () from /usr/lib/i386-linux-gnu/libfltk_gl.so.1.1
#12 #12 0x405e6ee3 in
Fl::flush() ()
from /usr/lib/i386-linux-gnu/libfltk.so.1.1
#13 #13 0x405e8645 in
Fl::wait(double) () from /usr/lib/i386-linux-gnu/libfltk.so.1.1
#14 #14 0x08059209 in main
(argc=2,
argv=0xbffff004) at

/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/src/stageros.cpp:445

(gdb) info locals
p = 0x8666f20
r = 0x8666f5c
i = 0x8666f5c
j = 0x8666f60
piv = 0x8666eb8
Stack = {{p = 0x8666f20, r = 0x8666f5c}, {p = 0xbfffe6b8, r =
0x404912c1},
{p = 0x866f600, r = 0x43337ff4}, {p = 0x41018899, r = 0x404912c1}, {p =
0x82e3de0, r = 0xb}, {p = 0x80cdd50, r = 0x404912c1}, {
p = 0x268, r = 0x2710}, {p = 0x48, r = 0x405c0470}, {p = 0x405c0478,
r =
0x9}, {p = 0x40, r = 0x9}, {p = 0x3d8, r = 0x2710}, {p = 0x40, r =
0x405c0470}, {p = 0x405c0478, r = 0x0}, {p = 0x3c, r = 0x8}, {
p = 0x1, r = 0x50}, {p = 0x0, r = 0x404912c1}, {p = 0x0, r = 0x0}, {p =
0x8, r = 0x39}, {p = 0x5b, r = 0x6e}, {p = 0x77, r = 0x404912c1}, {p
= 0x0,
r = 0x30}, {p = 0x0, r = 0x405bfff4}, {p = 0x0,
r = 0x2710}, {p = 0x110, r = 0x405c0470}, {p = 0x5b, r = 0x6e}, {p =
0x108, r = 0x22}, {p = 0x4, r = 0x2710}, {p = 0x88, r = 0x405c0470},
{p =
0x0, r = 0x0}, {p = 0x80, r = 0x11}, {p = 0x2, r = 0x98}, {
p = 0x0, r = 0x0}, {p = 0x0, r = 0x0}, {p = 0x11, r = 0x3a}, {p =
0x5b, r
= 0x6e}, {p = 0x77, r = 0x7c}, {p = 0x8660000, r = 0x86654c0}, {p =
0x0, r
= 0x405bfff4}, {p = 0x405c0440, r = 0x4097a520}, {
p = 0x80, r = 0x40493fec}, {p = 0x0, r = 0x0}, {p = 0x0, r =
0x409d0ff4},
{p = 0x86652c0, r = 0x8666d00}, {p = 0x866f484, r = 0x4097c20a}, {p =
0x108, r = 0x3ff00000}, {p = 0x0, r = 0x4097c993}, {
p = 0x843f9f8, r = 0x4097a520}, {p = 0x86652c0, r = 0x4097c5a0}, {p =
0x80, r = 0x3fc51eb8}, {p = 0x2e5096af, r = 0xdf238d35}}
top = < optimized out>
seed = 1409832680
(gdb) up
#1 #1 0x4097fb2e in InitPriorityQ
(tess=< optimized out>) at libtess/sweep.c:1251
1251 if (v != vHead || !pqInit( pq ) ) { /* _gl_pqSortInit /
(gdb) info locals
pq = 0x843f9f8
v = 0x866f430
vHead = 0x866f430
(gdb) up
#2 #2 __gl_computeInterior
(tess=0x8666078) at libtess/sweep.c:1321
1321 if ( !InitPriorityQ( tess ) ) return 0; / if error */
(gdb) info locals
v = < optimized out>
vNext = < optimized out>
(gdb) up
#3 #3 0x40980900 in
gluTessEndPolygon (tess=0x8666078) at libtess/tess.c:540
540 if ( !_gl_computeInterior( tess ) ) {
(gdb) info locals
mesh = < optimized out>
(gdb) up
#4 #4 0x40273d55 in
Stg::BlockGroup::BuildDisplayList (this=0x864a6d4) at

/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/blockgroup.cc:243
243

/tmp/buildd/ros-fuerte-stage-1.6.6/debian/ros-fuerte-stage/opt/ros/fuerte/stacks/stage/build/stage/libstage/blockgroup.cc:
No such file or directory.
(gdb) info locals
tobj = 0x8666078
geom = {pose = {_vptr.Pose = 0x8071dd8, x = 0, y = 0, z = 0, a = 0},
size
= {x = 0.33000000000000002, y = 0.33000000000000002, z =
0.10000000000000001}}
contours = {< std::_Vector_base< std::vector< double, std::allocator<
double> >, std::allocator< std::vector< double, std::allocator<
double> > >

= {
_M_impl = {< std::allocator< std::vector< double, std::allocator<
double>

= {< __gnu_cxx::new_allocator< std::vector< double,
std::allocator<
double> > >> = {< No data fields>}, < No data fields>},
_M_start = 0x866aee8, _M_finish = 0x866aef4, _M_end_of_storage =
0x866aef4}}, < No data fields>}
c = < optimized out>


Reply to this email directly or view it on
GitHubhttps://github.com//issues/31.


Reply to this email directly or view it on GitHub
#31 (comment).

from stage.

richmattes avatar richmattes commented on September 18, 2024

Try to add the "z" parameter to the points list:

block (
points 4
point[0] [0.16 0.16]
point[1] [-0.16 0.16]
point[2] [-0.16 -0.16]
point[3] [0.16 -0.16]
z [0 .32] # This one seems to be missing from a lot of models
color "red"
)

from stage.

kbogert avatar kbogert commented on September 18, 2024

That seems to fix it, Thanks!

kdb

On 12/12/2012 10:50 PM, Rich wrote:

Try to add the "z" parameter to the points list:

block (
points 4
point[0] [0.16 0.16]
point[1] [-0.16 0.16]
point[2] [-0.16 -0.16]
point[3] [0.16 -0.16]
z [0 .32] # This one seems to be missing from a lot of models
color "red"
)


Reply to this email directly or view it on GitHub
#31 (comment).

from stage.

rtv avatar rtv commented on September 18, 2024

Fixed.

from stage.

Related Issues (20)

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.