erincatto / box2d Goto Github PK
View Code? Open in Web Editor NEWBox2D is a 2D physics engine for games
Home Page: https://box2d.org
License: MIT License
Box2D is a 2D physics engine for games
Home Page: https://box2d.org
License: MIT License
The following functions are lacking definitions.
class b2FrictionJoint{
void SetMaxForce(float32 force);
float32 GetMaxForce() const;
void SetMaxTorque(float32 torque);
float32 GetMaxTorque() const;
}
Original issue reported on code.google.com by [email protected]
on 28 Nov 2009 at 10:55
See http://www.box2d.org/forum/viewtopic.php?f=3&t=3880&view=unread#unread
As discussed there are various reasons for being able to mark bodies and
joints as not participating in any physics.
Original issue reported on code.google.com by [email protected]
on 7 Nov 2009 at 7:04
What steps will reproduce the problem?
1. Do a search for XForm and use the word Transform instead for function
names etc...
What version of the product are you using? On what operating system?
Latest trunk r21
Original issue reported on code.google.com by [email protected]
on 21 Sep 2009 at 7:36
m_v2.a = d12_1 * inv_d12;
in b2Distance.cpp:358 should be
m_v2.a = d12_2 * inv_d12;
If you examine other code blocks starting with //enn for n in 1,2,3, you'll
see it's out of place.
Original issue reported on code.google.com by [email protected]
on 18 Oct 2009 at 5:56
b2AABB::Contains() can become const. It can then process const AABBs of
which there are plenty of floating around!
/// Does this aabb contain the provided AABB.
bool Contains(const b2AABB& aabb) const <-- CONST!
{
bool result = true;
result = result && lowerBound.x <= aabb.lowerBound.x;
result = result && lowerBound.y <= aabb.lowerBound.y;
result = result && aabb.upperBound.x <= upperBound.x;
result = result && aabb.upperBound.y <= upperBound.y;
return result;
}
Original issue reported on code.google.com by [email protected]
on 18 Aug 2009 at 6:43
this patch updates the iPhone code to use r27.
It also includes DistanceTest and BodyTest
Original issue reported on code.google.com by [email protected]
on 20 Nov 2009 at 11:43
Attachments:
What steps will reproduce the problem?
1. Call b2Fixture::GetDensity() anywhere
2. Compile and link, you will get LNK2001: unresolved external symbol
What is the expected output? What do you see instead?
The function declaration b2Fixture::GetDensity() is missing. It looks like
this:
We need to add this to b2Fixture.h:
inline float32 b2Fixture::GetDensity() const
{
return m_density;
}
What version of the product are you using? On what operating system?
Latest from SVN as of Nov27 09.
Original issue reported on code.google.com by [email protected]
on 28 Nov 2009 at 10:31
No one likes .chm files.
Ideally, the latest release's docs should be available online as well. This
helps for perusing a project before you start, and posting references to
others when asked for help in the forums.
Original issue reported on code.google.com by [email protected]
on 23 Aug 2009 at 10:35
I use
world->GetContactCount();
I Get integer number 23
But
when I use
for(b2Contact *c;c;c->GetNext())
{
// do something
}
is Loop again and again
why is anything wrong with me?
or something with Box2D
Original issue reported on code.google.com by [email protected]
on 24 Sep 2009 at 3:59
Please refactor the library to facilitate extra joint types as a runtime
addition.
Details of the proposed implementation can be found here:
http://www.box2d.org/forum/viewtopic.php?f=4&t=3970
Original issue reported on code.google.com by [email protected]
on 17 Nov 2009 at 7:58
What version of the product are you using? On what operating system?
r17, I don't think this has changed since.
Please provide any additional information below.
Would like a `SetDensity` or `SetMassFromDensity` function on either b2Body
or b2Fixture. Setting the mass manually with `SetMassData` is okay, but it
requires us to know how to compute the mass and inertia from only a density
value, which can be confusing.
A case where it would be nice to be able to do this is when a body changes
from one material into another, like in Kirby Super Star, where Kirby
changes into stone, or perhaps when water turns into ice; a user may want
to change its density during run-time.
A code example:
b2BodyDef bd;
b2Body *kirby = world->CreateBody(&bd);
// ... add some fixture data, set density to 0.3 so that kirby is nice and
fluffy
body->SetMassFromDensity(10); // omg, kirby just turned to stone and
suddenly got really heavy so now he can crush his opponents!
Original issue reported on code.google.com by [email protected]
on 22 Sep 2009 at 12:28
What steps will reproduce the problem?
1. Create a body
2. Wait for contacts
3. Call SetFilterData on one of the fixtures
What is the expected output? What do you see instead?
The operation might take some time, but it shouldn't go in an infinite loop.
It seems that SetFilterData() is trying to loop through all contact edges,
but only loop through the first one :
[code]
void b2Fixture::SetFilterData(const b2Filter& filter)
{
m_filter = filter;
if (m_body == NULL)
{
return;
}
// Flag associated contacts for filtering.
b2ContactEdge* edge = m_body->GetContactList();
while (edge)
{
b2Contact* contact = edge->contact;
b2Fixture* fixtureA = contact->GetFixtureA();
b2Fixture* fixtureB = contact->GetFixtureB();
if (fixtureA == this || fixtureB == this)
{
contact->FlagForFiltering();
}
}
}
[/code]
I added this line at the end of the loop and it seems to work well :
[code]
edge = edge->next;
[/code]
I'm using the google repository at revision 22.
I tried to use SetFilterData to modify the categoryBits to prevent
collisions between some objects after they reach a certain state (ie : die).
Maybe that's not even the right way..
Original issue reported on code.google.com by [email protected]
on 27 Oct 2009 at 11:15
Playing around on rev 31, I've found that you can push thin polygons
through a static edge polygon.
Shouldn't CCD prevent this behavior? (Yes, CCD was on.)
Screenshot attached of the Polygon Shapes test. I just moved the square
around and pushed the falling shape through.
Original issue reported on code.google.com by [email protected]
on 8 Dec 2009 at 11:46
Attachments:
1. create a body, with shapes and set fixed rotation to true
2. during runtime, after b2World->Step() call b2Body::SetFixedRotation
the body should rotate if an impulse/force is applied to it, however it will
not.
Box2D Version 2.0.2 running on windows vista, compiled with visual c++ 2008
Original issue reported on code.google.com by [email protected]
on 4 Sep 2009 at 6:07
so that we can use "new b2World (const b2WorldDef& worldDef)" to create a
world. Doing this will make box2d more extensible. The parameter can be
null, in which case b2World will create a default b2WorldDef to use.
Original issue reported on code.google.com by [email protected]
on 1 Oct 2009 at 8:08
What steps will reproduce the problem?
perform a b2World::Query and return false from ReportFixture
What is the expected output? What do you see instead?
expect ReportFixture to only return one fixture (fire once per query)
What version of the product are you using? On what operating system?
box2d 2.0.2, rev4, ubuntu 9.04 64-bit
Please provide any additional information below.
Original issue reported on code.google.com by [email protected]
on 6 Sep 2009 at 2:35
Activate "sleeping" in the test-bed then set the pyramid blocks to have
zero density (see attached file).
Although the body is static, it should perhaps sleep by default upon start-up?
Original issue reported on code.google.com by [email protected]
on 11 Aug 2009 at 10:29
Attachments:
It would be nice if we could query all the *bodies* in a certain area,
rather than just the fixtures (I don't want body dupes). Also, it would be
nice if it were *precise* (doesn't just look at the bounding boxes, but
checks if the actual shape is inside or touches the AABB).
Original issue reported on code.google.com by [email protected]
on 6 Sep 2009 at 2:43
The b2Body constructor sets the velocity members from the body descriptor
but resets their values to zero a few lines later. I've attached a patch
that corrects the problem.
Original issue reported on code.google.com by kennethdmiller3
on 31 Aug 2009 at 2:31
Attachments:
Precise overlap tests are possible using the b2Collide* set of functions,
but this is a little unwieldy to use for something so often desired. Could
this be wrapped in a helper function of signature similar to:
bool b2TestOverlap(b2Transform,b2Shape*,b2Transform,b2Shape*);
Perhaps more information than just a boolean should be made available.
This is mainly useful for use in conjunction with b2World::Query, but is
also useful in its own right.
Original issue reported on code.google.com by [email protected]
on 22 Sep 2009 at 7:32
The DistanceTest has openGL code in it.
Test should not have any openGL code, instead they should call DebugDraw
method instead.
Since DistanceTest uses OpenGL code it can't be used within iPhone since
iPhone doesn't support OpenGL (but OpenGL ES)
Original issue reported on code.google.com by [email protected]
on 21 Sep 2009 at 9:56
As forces are reseted after returning from b2World::Step(), and there is no
way to backup and restore them, is impossible to implement the Glenn
Fiedler's technique "fix your timestep" (used also by Bullet).
The technique allows to use a fixed time step with the physics system
(maintaining a good numerical stability) while having a variable frame-rate
game, keeping the physics in sync with the real clock.
Proposed solutions:
- Add accessors to b2Body to backup and restore applied forces.
- Modify b2World::Step() with a flag to know if it have to reset applied
forces. This allows to perform minor physics logic (as controllers) between
subsequent calls to Step() (in the same game tick).
Some other details in
http://www.box2d.org/forum/viewtopic.php?f=4&t=3973&start=0 .
Original issue reported on code.google.com by [email protected]
on 19 Nov 2009 at 12:47
Files #including Box2D, results in a lot of "Statement has no effect" warnings
due the definition of
"B2_NOT_USED" macro.
The attached patch solves 2 "issues":
- fixes the definition of B2_NOT_USED macro;
- defines B2_NOT_USED and b2Assert macros only if those are not already
defined; this allows to set
those macros at project-level (through external compiler flags) without having
to modify Box2D
source code.
Regards,
Daniele.
Original issue reported on code.google.com by [email protected]
on 30 Nov 2009 at 7:40
Attachments:
If they have no contacts, setting the velocity does nothing. This fixed the
issue for me:
b2Island.cpp, line 323, replace:
if (b->GetType() != b2_dynamicBody)
with:
if (b->GetType() == b2_staticBody)
Original issue reported on code.google.com by [email protected]
on 5 Dec 2009 at 8:12
What steps will reproduce the problem?
1. Create a static body
2. Try to set its transform
3. Transform does not get updated (early return for static entities).
What is the expected output? What do you see instead?
I expect to be able to reposition static bodies. This is key for making a
dynamic live level editor or even controlling physics entities after they
have been created.
What version of the product are you using? On what operating system?
r30 (found this after I ported r30 to Box2D.XNA)
Please provide any additional information below.
It seems like an arbitrary constraint to limit setting transforms on
static entities.
I want zero-mass, zero-velocity body but i want to be able to set it's
position/rotation after it has been created. This comes up in level
editor scenarios or even with our ZoomEngine entity system (we create the
entity, which creates corresponding physics bodies, then later the
position is set). Kinematic bodies reduces the need for us to use static
entities in many cases, but for the zero-velocity case we still want
static, and want to reposition them sometimes.
In my port I removed this early return in Body.SetTransform and I'm back
to the behavior I want without any negative effects on the rest of the
system.
Original issue reported on code.google.com by [email protected]
on 7 Dec 2009 at 2:17
What steps will reproduce the problem?
Create a non-static body. Run a few steps of the simulation. Set it to
static (0 density). Other objects won't collide with it anymore.
What is the expected output? What do you see instead?
Objects should collide; they don't. At least not properly.. they sort of
slow down but pass through like jelly.
What version of the product are you using? On what operating system?
2.1.0; Linux version 2.6.28-15-generic running on amd6
Please provide any additional information below.
Sample code:
void Object::setDensity(qreal dens) {
Q_ASSERT(m_body != NULL);
if(dens != density()) {
for(b2Fixture *f = m_body->GetFixtureList(); f; f = f->GetNext()) {
f->SetDensity(dens);
}
m_body->SetMassFromShapes();
emit propertyChanged();
}
}
Original issue reported on code.google.com by [email protected]
on 6 Sep 2009 at 3:56
What steps will reproduce the problem?
1. Download latest from SVN and try to create any of the included controllers.
2.
3.
What is the expected output? What do you see instead?
The b2World::CreateController / DestroyController functions do not exist.
This means there is no facility for adding controllers to the simulation.
Please provide any additional information below.
I have to go through a lengthy process to patch Box2d to support
b2Controllers everytime I upgrade to the latest source code. It would be
nice if Box2d supported controllers in the trunk version.
Original issue reported on code.google.com by [email protected]
on 28 Nov 2009 at 9:25
What steps will reproduce the problem?
1. Make an edge polygon
2. Trace a ray through it
What is the expected output? What do you see instead?
Test should always pass, but it passes only sometimes.
What version of the product are you using? On what operating system?
rev22, Windows, VC++2008
Please provide any additional information below.
The bug is between the 249 and 252 lines of b2PolygonShape.cpp
if (upper < lower)
{
return;
}
In case of edged polygon upper is equal to lower excluding floating point
error. Due to this error the test passes/fails randomly
Possible solution is to use "upper - level < EPSILON" or to process the
case of 2 vertices (an edge) separately.
Original issue reported on code.google.com by [email protected]
on 15 Oct 2009 at 9:49
Occasionally I am encountering a hard-limit in the dynamic tree which I
believe happens when a query is made when too many objects exist close
together within the dynamic tree? Sometimes this happens when something
has gone wrong on my end (or the users end) of things accidentally causing
objects to coexist close to each other. Getting an assert (and therefore a
crash) in this instance is quite painful to the end-user as well as being
cryptic.
The dynamic tree has a hard limit in both the "Query()" and "RayCast()"
methods of 128 objects in the stack which results (typically) in 1K stack
usage. If I bump this to 512 (4K) then this gets around most problems.
I am requesting that either we remove this hard limit completely or provide
either a central configuration for this value (b2Settings) or remove the
assert and provide some "overflow" feedback.
Original issue reported on code.google.com by [email protected]
on 20 Nov 2009 at 8:51
See http://box2d.org/forum/viewtopic.php?f=4&t=3549
Original issue reported on code.google.com by [email protected]
on 10 Aug 2009 at 5:37
See also: http://www.box2d.org/forum/viewtopic.php?f=4&t=3618
What steps will reproduce the problem?
1. take http://www.box2d.org/wiki/index.php?title=Sample_code
2. create: MyListener.hpp
class MyListener : public b2ContactListener {
public:
void Add(const b2ContactPoint* point) {
// handle add point
}
void Persist(const b2ContactPoint* point) {
// handle persist point
}
void Remove(const b2ContactPoint* point) {
// handle remove point
}
void Result(const b2ContactResult* point) {
// handle results
}
};
3. add to HelloWorld.cpp:
#include "MyListener.hpp"
...
MyListener listener;
world.SetContactListener(&listener);
What is the expected output?
Read collisions from world through MyListener
What do you see instead?
Program crashes when first collision is introduced
What version of the product are you using? On what operating system?
Box2D: 2.0.2 (from svn: branches/groundzero rev. 228)
System: Arch Linux 2.6.30.5-1
Compiler: gcc 4.4.1-1
Original issue reported on code.google.com by [email protected]
on 26 Aug 2009 at 7:42
What steps will reproduce the problem?
1. Create a static body
2. Try to set its transform
3. Transform does not get updated (early return for static entities).
What is the expected output? What do you see instead?
I expect to be able to reposition static bodies. This is key for making a
dynamic live level editor or even controlling physics entities after they
have been created.
What version of the product are you using? On what operating system?
r30 (found this after I ported r30 to Box2D.XNA)
Please provide any additional information below.
It seems like an arbitrary constraint to limit setting transforms on
static entities.
I want zero-mass, zero-velocity body but i want to be able to set it's
position/rotation after it has been created. This comes up in level
editor scenarios or even with our ZoomEngine entity system (we create the
entity, which creates corresponding physics bodies, then later the
position is set). Kinematic bodies reduces the need for us to use static
entities in many cases, but for the zero-velocity case we still want
static, and want to reposition them sometimes.
In my port I removed this early return in Body.SetTransform and I'm back
to the behavior I want without any negative effects on the rest of the
system.
Original issue reported on code.google.com by [email protected]
on 7 Dec 2009 at 2:17
What steps will reproduce the problem?
1. Manually set the angle with SetXForm()
2. use ApplyForce() on the center of mass to avoid torque
The angle should then still be whatever is entered in SetXForm(), but
changes to very different values.
This bug was identified in box2d version 2.0.1 with the attached testbed
example.
Original issue reported on code.google.com by [email protected]
on 12 Oct 2009 at 5:21
Attachments:
although it is weird, it is possible.
It will make problems when destroying this body.
I made a path to fix this problem.
Original issue reported on code.google.com by [email protected]
on 4 Dec 2009 at 10:27
Attachments:
http://box2d.org/forum/viewtopic.php?f=4&t=3636
Original issue reported on code.google.com by [email protected]
on 1 Sep 2009 at 11:38
the iPhone port from r6 is not compiling due to the new directory structure
+ the new API changes.
this patch updates the iPhone port so that it works with the current
directory structure + new API
Original issue reported on code.google.com by [email protected]
on 11 Aug 2009 at 2:08
Attachments:
Missing 't'
Original issue reported on code.google.com by [email protected]
on 13 Sep 2009 at 3:16
This should be <climits> right?
Original issue reported on code.google.com by [email protected]
on 26 Sep 2009 at 7:25
Removed redundant legacy code in "b2World.h":
/// Get the number of controllers.
int32 GetControllerCount() const;
Original issue reported on code.google.com by [email protected]
on 18 Aug 2009 at 6:50
Iterating over b2World::GetContactList(), a b2Contact with a sensor satisfy the
following
assertions:
- IsTouching() returns true
- IsSolid () returns false
The same is true for a disabled contact.
From this is impossible to know if the contact have been disabled or if it's a
normal contact with
a sensor.
As this information is already stored in the protected flags of b2Contact, a
method IsDisabled()
(or IsSensor()) would allow a simple identification of those cases.
Regards,
Daniele.
Original issue reported on code.google.com by [email protected]
on 9 Nov 2009 at 3:29
After performing a world-query and given the returned fixture-set I'd like
to perform a further check to cull fixtures that are not completely
encapsulated by the AABB. To do this quickly, I'd like to gain access to
the fixtures' AABB.
Therefore it would be very handy to be able to gain read-access to the
synchronized AABB for a fixture directly with something like:
inline const b2AABB& b2Fixture::getAABB( void ) const
{
return m_aabb;
}
I have made this modification but it'd be great to have it in the trunk.
Thanks in advance!
Original issue reported on code.google.com by [email protected]
on 18 Aug 2009 at 6:46
The edge is never updated in the b2Fixture::SetFilterData(const b2Filter&
filter) method so it loops continuously in the while statement. The edge
needs to updated at the end of while loop.
Original issue reported on code.google.com by [email protected]
on 3 Nov 2009 at 11:55
What steps will reproduce the problem?
1. Create two overlapped polygonal shapes.
2. Calculate b2TimeOfImpact (I have one static and one moving object)
What is the expected output? What do you see instead?
The documentation of the function states that "fraction=0 means the shapes
begin touching/overlapped", but I get fraction 1.0 when the shapes start
overlapped.
What version of the product are you using? On what operating system?
Latest SVN (rev 31)
Please provide any additional information below.
Original issue reported on code.google.com by [email protected]
on 10 Dec 2009 at 9:29
In b2Body.h on line 334 (in m_flags definition) the following is defined:
e_islandFlag = 0x0001,
e_sleepFlag = 0x0002,
e_allowSleepFlag = 0x0004,
e_bulletFlag = 0x0008,
e_fixedRotationFlag = 0x0010
I believe that "e_fixedRotationFlag = 0x0010" is incorrect as 10 would be
the sum of 2 and 8. Should this be 0x0016 instead?
Original issue reported on code.google.com by [email protected]
on 13 Oct 2009 at 8:43
(as posted on the main forum)
On the latest svn revision, b2PrismaticJoint doesn't provide getter to the
current value of m_maxMotorForce.
The setter, however, is available.
I think this is valuable information and should be added to the API.
I've done it on my local repository, so I'm providing a patch.
Original issue reported on code.google.com by [email protected]
on 16 Nov 2009 at 12:06
Attachments:
http://www.box2d.org/forum/viewtopic.php?f=3&t=3686&sid=93c7be4b866443e7451c17ef
fa91190f
I can't think of any reason anyone would disable a contact, and then want
to re-enable it later (until after an EndContact event). Lets say you try
to make one-sided platforms by inspecting the contact normal and calling
disable(). You'll have to call disable() each timestep, but the contact
normal changes each timestep! I went down this route, but noticed my
objects would "pop" to the other side of the platform once the normal
reversed direction.
Of course I could use SetSensor() to functionally disable the contact, but
that may cause confusion later when mixing this method with genuine
sensors. Perhaps a persistent Disable() along with a persistent Enable()
would be a nice solution?
Original issue reported on code.google.com by [email protected]
on 14 Sep 2009 at 3:37
When porting box2d to actionscript, I found some problems, but because I
didn't study the code deeply, so maybe they are designedly.
1. Possible a contact is passed to contactListerner.BeginContact, but
never passed to contactListerner.EndContact, even if it has been destroyed:
a. one case: the contact is a touched in last step, but in current step,
even the aabbs are not overlapped, then the contact is destroyed, so the
EndContact is not called for this contact.
b. other reasons make the contact destroyed:
- some Destroy (contact)s in contactManager.Collide
- destroy fixtures
2. SyaGoodbye is not called in body.DestroyFixture and body.DestroyJoint.
Maybe this is deliberately.
3. Should "BufferMove (fixture)" also be called when a body become dynamic
from static? Image a situation: in a non-gravity enviroment, two static
shapes are ovelapped, then make one dynamic. Seems now no contacts will be
created between them.
4. Should ContactListener.PreSolve () only be called when (contact.m_flags
& e_touchingFlag) != 0 && newCount > 0
5. If I change the ShouldCollide rules runtimely, how can I make the core
api knows this change and call FlagForFiltering?
6. Can I change joint.m_collideConnected runtimely, if true, how can I
make the core api knows this change and call FlagForFiltering?
7. About the body mass, if there is only one shape with zero density in a
body, then the body is static, but if another shape with non-zero density
is added to the body, the body will become dynamic. If it is the design,
no problems here. I just thnk it is more reasonable to make the body
static only if there is a zero denstiy shape in the body.
That is all, maybe I'm wrong on these points.
btw, I like the new broadphase very much!
Original issue reported on code.google.com by [email protected]
on 29 Sep 2009 at 11:23
Strange bug, using the Box2d template with 0.8.2 build of cocos2d for the
iphone. After a while,
(but not every time) the simulator locks up and the error in the log of:
...
2009-10-23 22:58:07.314 Castle[12599:20b] Add sprite 273.00 x 230
[Session started at 2009-10-23 22:58:17 -0500.]
GNU gdb 6.3.50-20050815 (Apple version gdb-967) (Tue Jul 14 02:11:58 UTC 2009)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-apple-darwin".sharedlibrary apply-load-rules
all
Attaching to process 12599.
Previous frame inner to this frame (gdb could not unwind past this frame)
Previous frame inner to this frame (gdb could not unwind past this frame)
kill
quit
The Debugger has exited with status 0.
The error happens for me about 5% of the time, and seems more likely right when
a box is
added. It also seems to be more likely to happen with more boxes (never seen
it with less than
20). I have never caught it on debug on actually hardware, but I have
experienced the lock.
I have put trace comments in all over the place, and cannot find where it is
happening that way,
but removing the world->step seems to eliminate the error. I have tried to run
with guard
malloc on to find memory issues, but alas it will not crash with guard malloc
on. I have tried
fixed framerate, no help.
Original issue reported on code.google.com by [email protected]
on 24 Oct 2009 at 4:59
While interface objects do work, I suggest using something like <a
href="http://www.codeproject.com/KB/cpp/FastDelegate.aspx">FastDelegate</a>
as it would allow more flexibility when implementing callbacks and reduce
the virtual function call overhead. Delegates would have the advantage of
allowing free functions, static methods, non-virtual methods, and virtual
methods with arbitrary names so long as they match the function signature.
Choice is good. :)
(I use FastDelegate extensively, so I could implement a demonstration
version without too much trouble.)
Original issue reported on code.google.com by kennethdmiller3
on 31 Aug 2009 at 2:50
There should be a spring joint supporting hooke's law, and damping.
Obviously a massively useful component, but I discussion I had with
Chipmunk's slembcke convinced me that the damping part is not well/easily
implemented by users outside of the joint system, as damping is essentially
a velocity constraint, like motors.
Original issue reported on code.google.com by [email protected]
on 29 Nov 2009 at 3:22
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.