Giter Club home page Giter Club logo

gz-math's People

Contributors

adityapande-1995 avatar adlarkin avatar ahcorde avatar arjo129 avatar azeey avatar boladjivinny avatar caguero avatar ccrean avatar chapulina avatar hidmic avatar iche033 avatar j-rivero avatar jasonzliang avatar jennuine avatar jwnimmer-tri avatar lolasegura avatar luccosta avatar maryab-osr avatar methyldragon avatar mjcarroll avatar mxgrey avatar nkoenig avatar parrotepicuser avatar pchorak avatar peci1 avatar petermitrano avatar pxalcantara avatar scpeters avatar sloretz avatar traversaro 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

gz-math's Issues

Add Numerically Equal and Relatively Equal comparisons in math helper class

Original report (archived issue) by John Hsu (Bitbucket: hsu, GitHub: hsu).


Current comparison strategy math::equal is using primitive absolute magnitude comparison. This may not be sufficient in some cases, for example where relative magnitudes are large, or the values being compared border numerical precision boundaries.

Per @sherm1 recommendation in pull request #82, we should add math::numericallyEqual and math::relativelyEqual.

Also, see issue #42 for extension to Vector3 class.

Question what about SSE?

Original report (archived issue) by Davide Faconti (Bitbucket: facontidavide).


Hi,

just a question/suggestion.
A quick inspection of the code reveals that no SSE or similar vectorization was used.
Being this library a potential building block of several robotic components (kinematics, graphics, dynamics, etc.) I wonder why you need to build from scratch yet another implementation when Bullet 3 has a vectorized one.
Why aren't you using Eigen?
This is of course an observation that I would give to anyone writing somethin like Matrix4x4.h... ;)

Kind regards

Davide

Issue with 2.3.0 release

Original report (archived issue) by Steve Peters (Bitbucket: Steven Peters, GitHub: scpeters).


The 2.3.0 release was tagged from the default branch, not the ign-math2 branch:

There are some things on default that aren't on ign-math2 (though some of them probably should have been on ign-math2 (9e48b64)):

This means that we will have a problem if we tag the next release from ign-math2 (ABI checker).

Allow Vector3::Equal to use vector of tolerances

Original report (archived issue) by John Hsu (Bitbucket: hsu, GitHub: hsu).


Curently, the Vector3::Equal with tolerance check uses a single tolerance for all three elements.

Proposal to extend it by adding:

      /// \brief Equality test with tolerance vector.
      /// \param[in] _v the vector to compare to
      /// \param[in] _tol a vector containing equality tolerances.
      /// \return true if the elements of the vectors are equal within
      /// the tolerence specified by _tol.
      public: bool Equal(const Vector3 &_v, const Vector3 &_tol) const
      {
        return equal<T>(this->data[0], _v[0], _tol[0])
            && equal<T>(this->data[1], _v[1], _tol[1])
            && equal<T>(this->data[2], _v[2], _tol[2]);
      }

Based on discussion in pull request #82, we might need to extend it further with:

      public: bool NumericallyEqual(const Vector3 &_v, const Vector3 &_tol) const;
      public: bool RelativelyEqual(const Vector3 &_v, const Vector3 &_tol) const;

Homebrew: UNIT_Filter_TEST (Failed)

Original report (archived issue) by Jose Luis Rivero (Bitbucket: Jose Luis Rivero, GitHub: j-rivero).


5: Running main() from gtest_main.cc
5: [==========] Running 5 tests from 1 test case.
5: [----------] Global test environment set-up.
5: [----------] 5 tests from FilterTest
5: [ RUN      ] FilterTest.OnePole
5: [       OK ] FilterTest.OnePole (0 ms)
5: [ RUN      ] FilterTest.OnePoleQuaternion
5: [       OK ] FilterTest.OnePoleQuaternion (0 ms)
5: [ RUN      ] FilterTest.OnePoleVector3
5: [       OK ] FilterTest.OnePoleVector3 (0 ms)
5: [ RUN      ] FilterTest.Biquad
5: /Users/jenkins/workspace/ign_math-default-devel-homebrew-amd64/ignition-math/src/Filter_TEST.cc:76: Failure
5: The difference between filterA.GetValue() and 0.0 is 5.0138471862048961e+180, which exceeds 1e-10, where
5: filterA.GetValue() evaluates to 5.0138471862048961e+180,
5: 0.0 evaluates to 0, and
5: 1e-10 evaluates to 1e-10.
5: /Users/jenkins/workspace/ign_math-default-devel-homebrew-amd64/ignition-math/src/Filter_TEST.cc:77: Failure
5: The difference between filterA.Process(1.1) and 0.0 is 3.3896412903724768e+203, which exceeds 1e-10, where
5: filterA.Process(1.1) evaluates to 3.3896412903724768e+203,
5: 0.0 evaluates to 0, and
5: 1e-10 evaluates to 1e-10.
5: /Users/jenkins/workspace/ign_math-default-devel-homebrew-amd64/ignition-math/src/Filter_TEST.cc:80: Failure
5: Value of: 0.66924691484768517
5: Expected: filterA.Process(1.2)
5: Which is: nan
5: /Users/jenkins/workspace/ign_math-default-devel-homebrew-amd64/ignition-math/src/Filter_TEST.cc:83: Failure
5: Value of: 0.96057152402651302
5: Expected: filterA.Process(10.25)
5: Which is: nan
5: [  FAILED  ] FilterTest.Biquad (0 ms)
5: [ RUN      ] FilterTest.BiquadVector3
5: [       OK ] FilterTest.BiquadVector3 (0 ms)
5: [----------] 5 tests from FilterTest (0 ms total)
5: 
5: [----------] Global test environment tear-down
5: [==========] 5 tests from 1 test case ran. (0 ms total)

http://build.osrfoundation.org/job/ign_math-default-devel-homebrew-amd64/1/console

Memory leaks in SignalStats class

Original report (archived issue) by Silvio Traversaro (Bitbucket: traversaro).


The SignalStats class uses the pimpl idiom, but the memory allocated in the constructor is never properly deallocated. Furthermore the copy constructor is used in the code (for example in [1]) but the default copy constructor is used, so multiple SignalStats objects are pointing to the same SignalStatsPrivate struct.

[1] : https://github.com/ignitionrobotics/ign-math/blob/d4d10520ab8755547768a041c7b167c488da3481/include/ignition/math/Vector3Stats.hh#L83 .

Add setter/getter for Pose's each element

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


It would be helpful to be able to do pose.X() instead of pose.Pos.X().

How about this?

  • pose.Pos.X() -> pose.X()
  • pose.Pos.Y() -> pose.Y()
  • pose.Pos.Z() -> pose.Z()
  • pose.Rot.Roll() -> pose.Roll()
  • pose.Rot.Pitch() -> pose.Pitch()
  • pose.Rot.Yaw() -> pose.Yaw()

Matrix4::Translate meaning is confusing

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


The documentation is clear, the function sets the translation. But the function name suggests it would add the translation.

Since we have Matrix4::Translation() to return the translation, wouldn't it make more sense to have a function SetTranslation to set it and have Translate add the translation?

Lines (line segments) have an implicit direction

Original report (archived issue) by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


The current implementation of Line2 (which are actually line segments, i.e. not infinite) has implicit start and end points.

The equality operator for example checks if lineA->pts[0] == lineB->pts[0] && lineA->pts[1] == lineB->pts[1], but not if lineA->pts[0] == lineB->pts[1] && lineA->pts[1] == lineB->pts[0].

Is that done on purpose, that is, we want the start and end points of a line to mean something, or is it something which was overlooked?

Vector3 operator <

Original report (archived issue) by Denys Kotelovych (Bitbucket: ilidar).


This commit caused undefined behavior or even assert for sorting Vector3
1a0288f, e.g.:

v1 = (1.0, 2.0, 3.0), v2 = (3.0, 2.0, 1.0)

Probably would be better to use something like this:

#!c++
bool operator<(const Vector3d &lhs, const Vector3d &rhs) {
  if (lhs.X() < rhs.X())
    return true;
  if (lhs.X() > rhs.X())
    return false;
  return lhs.Y() < rhs.Y();
}

Homebrew: UNIT_Rand_TEST (Failed)

Original report (archived issue) by Jose Luis Rivero (Bitbucket: Jose Luis Rivero, GitHub: j-rivero).


19: [==========] Running 2 tests from 1 test case.
19: [----------] Global test environment set-up.
19: [----------] 2 tests from RandTest
19: [ RUN      ] RandTest.Rand
19: /Users/jenkins/workspace/ign_math-default-devel-homebrew-amd64/ignition-math/src/Rand_TEST.cc:48: Failure
19: The difference between d and 4.72597 is 9.1128212257392374, which exceeds 1e-5, where
19: d evaluates to -4.3868512257392371,
19: 4.72597 evaluates to 4.7259700000000002, and
19: 1e-5 evaluates to 1.0000000000000001e-05.
19: [  FAILED  ] RandTest.Rand (0 ms)
19: [ RUN      ] RandTest.SetSeed
19: [       OK ] RandTest.SetSeed (0 ms)
19: [----------] 2 tests from RandTest (0 ms total)
19: 
19: [----------] Global test environment tear-down
19: [==========] 2 tests from 1 test case ran. (0 ms total)

http://build.osrfoundation.org/job/ign_math-default-devel-homebrew-amd64/1/console

CMAKE_CXX_FLAGS over-ruled

Original report (archived issue) by Steve Peters (Bitbucket: Steven Peters, GitHub: scpeters).


I was trying to use -DCMAKE_CXX_FLAGS=-Werror as a cmake argument in the dronie.io build to make the build fail on compiler warnings, but the CMAKE_CXX_FLAGS variable is over-ruled. I'll just cc @_jrivero_ on this for advice on how to do compiler flags for this project and will possibly mark it wontfix if it turns out to not be a problem.

code_check script doesn't work

Original report (archived issue) by Steve Peters (Bitbucket: Steven Peters, GitHub: scpeters).


It was copied from gazebo, but it needs to be modified for this repository.

$ sh tools/code_check.sh 
find: ./plugins: No such file or directory
find: ./gazebo: No such file or directory
find: ./examples: No such file or directory
find: ./interfaces: No such file or directory
find: ./test/examples: No such file or directory
find: ./test/plugins: No such file or directory
find: ./test/cmake: No such file or directory
find: ./test/pkgconfig: No such file or directory
find: ./test/ServerFixture.*: No such file or directory
find: ./plugins: No such file or directory
find: ./gazebo: No such file or directory
find: ./examples: No such file or directory
find: ./interfaces: No such file or directory
find: ./test/examples: No such file or directory
find: ./test/plugins: No such file or directory
find: ./test/cmake: No such file or directory
find: ./test/pkgconfig: No such file or directory
find: ./test/ServerFixture.*: No such file or directory
cppcheck: No C or C++ source files found.
cppcheck: No C or C++ source files found.
tools/code_check.sh: line 161: ./tools/msg_check.py: No such file or directory

Consider using templates

Original report (archived issue) by Steve Peters (Bitbucket: Steven Peters, GitHub: scpeters).


It's pretty clever the way the Matrix and Vector classes share code across different types. I wonder if we considered using templates instead? I'm not suggesting that we change; I'm just wondering if templates were considered and what are the pros/cons.

K-means test

Original report (archived issue) by Nate Koenig (Bitbucket: Nathan Koenig).


Once k-means has been integrated into ign-math, we should setup more rigorous tests. Just the first two hits on google

1

2

Long double and ARM

Original report (archived issue) by Rich Mattes (Bitbucket: richmattes).

The original report had attachments: ignition-math-2.4.1-arm.patch


It looks like on ARMv7, the "long double" type is the same as the "double" type. This means that the Szudzek pair function (Pair() and Unpair()) don't work as expected, and the unit tests for large numbers fail. I'm seeing the tests in src/Helpers_TEST.cc:411 fail quite badly while building: see "build.log" at http://koji.fedoraproject.org/koji/taskinfo?taskID=14931350 (the log is quite big due to the number of tests that fail)

Attached is a patch that adds an __arm__ check to the _MSC_VER check that downgrades the PairInput and PairOutput data types and blocks the large number unit tests.

Test failures in arquitectures different to amd64

Original report (archived issue) by Jose Luis Rivero (Bitbucket: Jose Luis Rivero, GitHub: j-rivero).


Two different failures appear in debian when building ign-math2 in architectures different than amd64: https://buildd.debian.org/status/package.php?p=ignition-math2

UNIT_Line2_TEST (mostly in 32 bits)

#!bash

/«BUILDDIR»/ignition-math2-2.1.1+dfsg1/src/Line2_TEST.cc:150: Failure
Value of: lineA.Collinear(pt, 1e-4)
  Actual: false
Expected: true
/«BUILDDIR»/ignition-math2-2.1.1+dfsg1/src/Line2_TEST.cc:162: Failure
Value of: lineA.Collinear(pt, 1e-4)
  Actual: false
Expected: true

I suspect that there is some cast problem involved. I was not able to reproduce it on my 64 bits machine running the test with the linux32 command.

UNIT_SignalStats_TEST

No output, but failing on armel and mips.

Examples are not compiling

Original report (archived issue) by Silvio Traversaro (Bitbucket: traversaro).


The CMake of the examples directory need to be updated with a proper find_package(ignition-math2 QUIET REQUIRED) command.

Furthermore, the examples are not linked to the library.

Gazebo needs an operator= from Quaternion3d to Matrix3d

Original report (archived issue) by John Hsu (Bitbucket: hsu, GitHub: hsu).


compiling

ign-math - ign-math2 branch, 1025:73afd4c86ae8ca8d4c97d1567a9682e1e4838624

sdformat - sdf3 branch, 1948:5e77af4e606b

gazebo - gazebo6 branch, 30538:b259500cf75a

encountered error:

[ 53%] Building CXX object gazebo/gui/model/CMakeFiles/gazebo_gui_model.dir/moc_JointMaker.cxx.o
cd /home/hsu/projects/gazebo_6/build_release/gazebo/gui/model && /usr/bin/c++   -DLIBBULLET_VERSION=2.83 -DLIBBULLET_VERSION_GT_282 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -Dgazebo_gui_model_EXPORTS -Wall -Wextra -Wno-long-long -Wno-unused-value -Wno-unused-value -Wno-unused-value -Wno-unused-value -Wfloat-equal -Wshadow -Winit-self -Wswitch-default -Wmissing-include-dirs -pedantic -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -DBUILDING_DLL_GZ_GUI_MODEL  -s -O3 -DNDEBUG -msse4.2 -msse4.1 -mssse3 -msse3 -mfpmath=sse -msse -msse2  -fPIC -I/home/hsu/projects/gazebo_6/test/gtest/include -I/home/hsu/projects/gazebo_6 -I/home/hsu/projects/gazebo_6/build_release -I/home/hsu/projects/gazebo_6/deps -I/home/hsu/projects/gazebo_6/build_release/gazebo/gui/model -I/usr/include/libusb-1.0 -isystem /home/hsu/local_ign-math/include/ignition/math2 -isystem /usr/include/OGRE/RTShaderSystem -isystem /usr/include/OGRE -isystem /usr/include/OGRE/Terrain -isystem /usr/include/OGRE/Paging -isystem /home/hsu/local_sdformat_3/include/sdformat-3.7 -isystem /usr/include/qt4 -isystem /usr/include/qt4/QtGui -isystem /usr/include/qt4/QtCore    -fPIC -std=c++11 -o CMakeFiles/gazebo_gui_model.dir/moc_JointMaker.cxx.o -c /home/hsu/projects/gazebo_6/build_release/gazebo/gui/model/moc_JointMaker.cxx
/home/hsu/projects/gazebo_6/gazebo/sensors/ForceTorqueSensor.cc: In member function ‘virtual void gazebo::sensors::ForceTorqueSensor::Load(const string&, sdf::ElementPtr)’:
/home/hsu/projects/gazebo_6/gazebo/sensors/ForceTorqueSensor.cc:112:29: error: no match for ‘operator=’ (operand types are ‘ignition::math::Matrix3d {aka ignition::math::Matrix3<double>}’ and ‘ignition::math::Quaternion<double>’)
   this->rotationSensorChild = rotationChildSensor.Inverse();
                             ^
/home/hsu/projects/gazebo_6/gazebo/sensors/ForceTorqueSensor.cc:112:29: note: candidate is:
In file included from /home/hsu/local_ign-math/include/ignition/math2/ignition/math/MassMatrix3.hh:28:0,
                 from /home/hsu/local_ign-math/include/ignition/math2/ignition/math.hh:13,
                 from /home/hsu/local_sdformat_3/include/sdformat-3.7/sdf/Param.hh:35,
                 from /home/hsu/local_sdformat_3/include/sdformat-3.7/sdf/Element.hh:25,
                 from /home/hsu/local_sdformat_3/include/sdformat-3.7/sdf/sdf.hh:5,
                 from /home/hsu/projects/gazebo_6/gazebo/physics/World.hh:35,
                 from /home/hsu/projects/gazebo_6/gazebo/sensors/ForceTorqueSensor.cc:25:
/home/hsu/local_ign-math/include/ignition/math2/ignition/math/Matrix3.hh:33:11: note: ignition::math::Matrix3<double>& ignition::math::Matrix3<double>::operator=(const ignition::math::Matrix3<double>&)
     class Matrix3
           ^
/home/hsu/local_ign-math/include/ignition/math2/ignition/math/Matrix3.hh:33:11: note:   no known conversion for argument 1 from ‘ignition::math::Quaternion<double>’ to ‘const ignition::math::Matrix3<double>&’
/usr/bin/cmake -E cmake_progress_report /home/hsu/projects/gazebo_6/build_release/CMakeFiles 
...

following patch fixed the problem:

diff -r 73afd4c86ae8ca8d4c97d1567a9682e1e4838624 include/ignition/math/Matrix3.hh
--- a/include/ignition/math/Matrix3.hh	Wed May 11 09:54:09 2016 -0700
+++ b/include/ignition/math/Matrix3.hh	Thu May 26 16:18:32 2016 -0700
@@ -364,6 +364,22 @@
         return this->Equal(_m, static_cast<T>(1e-6));
       }
 
+      public: Matrix3<T> operator=(const Quaternion<T> &_q)
+      {
+        Quaternion<T> qt = _q;
+        qt.Normalize();
+        this->Set(1 - 2*qt.Y()*qt.Y() - 2 *qt.Z()*qt.Z(),
+                  2 * qt.X()*qt.Y() - 2*qt.Z()*qt.W(),
+                  2 * qt.X() * qt.Z() + 2 * qt.Y() * qt.W(),
+                  2 * qt.X() * qt.Y() + 2 * qt.Z() * qt.W(),
+                  1 - 2*qt.X()*qt.X() - 2 * qt.Z()*qt.Z(),
+                  2 * qt.Y() * qt.Z() - 2 * qt.X() * qt.W(),
+                  2 * qt.X() * qt.Z() - 2 * qt.Y() * qt.W(),
+                  2 * qt.Y() * qt.Z() + 2 * qt.X() * qt.W(),
+                  1 - 2 * qt.X()*qt.X() - 2 * qt.Y()*qt.Y());
+        return *this;
+      }
+
       /// \brief Inequality test operator
       /// \param[in] _m Matrix3<T> to test
       /// \return True if not equal (using the default tolerance of 1e-6)

Consider using eigen

Original report (archived issue) by Steve Peters (Bitbucket: Steven Peters, GitHub: scpeters).


Eigen provides Vector, Matrix, Quaternion, and Affine transform (pose) types. We should consider using it. (Migrated from gazebo issue 929).

It looks like it is portable. One major thing we are missing is the ability to use arbitrary matrices (necessary for Jacobians). Eigen supports arbitrarily-sized matrices, as well as sparse matrices.

ignition-math2.pc should specify -lm

Original report (archived issue) by Victor Mataré (Bitbucket: vmatare).


The generated pkgconfig file ignition-math2.pc should specify -lm under the Libs: section since there are template classes like Quaternion (and probably others) that use cmath functions. When I use those generic classes, my code has to be linked directly against libm, so pkg-config --libs ignition-math2 should output -lm as well.

Pass by reference or value?

Original report (archived issue) by Steve Peters (Bitbucket: Steven Peters, GitHub: scpeters).


There are several places in templated functions where scalar values are passed by reference instead of value (Vector4 constructor for example). @iche033 recently pointed out that it is often better to pass primitive types by value rather than by reference (reference 1 and reference 2).

We can evaluate this sometime if we set up some performance tests. I've marked this as a minor issue for the time being.

Windows: templates pull request #14 broke compilation

Original report (archived issue) by Jose Luis Rivero (Bitbucket: Jose Luis Rivero, GitHub: j-rivero).


As @scpeters commented, the windows compilation is broken from pull request #14.
Changes: http://build.osrfoundation.org/job/ign_math-default-devel-windows7/11/

ctor2_TEST.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall ignition::math::Vector2<double>::Vector2<double>(void)" (__imp_??0?$Vector2@N@math@ignition@@QAE@XZ) referenced in function "private: virtual void __thiscall Vector2Test_Vector2_Test::TestBody(void)" (?TestBody@Vector2Test_Vector2_Test@@EAEXXZ) [C:\Jenkins\workspace\ign_math-default-devel-windows7\build\src\UNIT_Vector2_TEST.vcxproj]
Vector2_TEST.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall ignition::math::Vector2<double>::Vector2<double>(double const &,double const &)" (__imp_??0?$Vector2@N@math@ignition@@QAE@ABN0@Z) referenced in function "private: virtual void __thiscall Vector2Test_Vector2_Test::TestBody(void)" (?TestBody@Vector2Test_Vector2_Test@@EAEXXZ) [C:\Jenkins\workspace\ign_math-default-devel-windows7\build\src\UNIT_Vector2_TEST.vcxproj]
Vector2_TEST.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall ignition::math::Vector2<double>::~Vector2<double>(void)" (__imp_??1?$Vector2@N@math@ignition@@UAE@XZ) referenced in function "private: virtual void __thiscall Vector2Test_Vector2_Test::TestBody(void)" (?TestBody@Vector2Test_Vector2_Test@@EAEXXZ) [C:\Jenkins\workspace\ign_math-default-devel-windows7\build\src\UNIT_Vector2_TEST.vcxproj]
Vector2_TEST.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: double __thiscall ignition::math::Vector2<double>::Distance(class ignition::math::Vector2<double> const &)const " (__imp_?Distance@?$Vector2@N@math@ignition@@QBENABV123@@Z) referenced in function "private: virtual void __thiscall Vector2Test_Vector2_Test::TestBody(void)" (?TestBody@Vector2Test_Vector2_Test@@EAEXXZ) [C:\Jenkins\workspace\ign_math-default-devel-windows7\build\src\UNIT_Vector2_TEST.vcxproj]
... 

http://build.osrfoundation.org/job/ign_math-default-devel-windows7/11/console

Seems to be a problem with linking of all _TEST files.

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.