// fixme
mihailris / voxelengine-cpp Goto Github PK
View Code? Open in Web Editor NEWMinecraft-like game engine in C++ with OpenGL
Minecraft-like game engine in C++ with OpenGL
// fixme
Я попытался собрать v16, получил следующую ошибку:
/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/api_lua.cpp.o: в функции «l_block_name(lua_State*)»:
api_lua.cpp:(.text+0xa): неопределённая ссылка на «lua_tointeger»
/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/api_lua.cpp.o: в функции «l_is_solid_at(lua_State*)»:
api_lua.cpp:(.text+0x5d): неопределённая ссылка на «lua_tointeger»
/usr/bin/ld: api_lua.cpp:(.text+0x6d): неопределённая ссылка на «lua_tointeger»
/usr/bin/ld: api_lua.cpp:(.text+0x7d): неопределённая ссылка на «lua_tointeger»
/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/api_lua.cpp.o: в функции «l_set_block(lua_State*)»:
api_lua.cpp:(.text+0xf1): неопределённая ссылка на «lua_tointeger»
/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/api_lua.cpp.o:api_lua.cpp:(.text+0x100): далее есть ещё неопределённые ссылки на «lua_tointeger»
/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/api_lua.cpp.o: в функции «l_set_player_pos(lua_State*)»:
api_lua.cpp:(.text+0x2ee): неопределённая ссылка на «lua_tonumber»
/usr/bin/ld: api_lua.cpp:(.text+0x301): неопределённая ссылка на «lua_tonumber»
/usr/bin/ld: api_lua.cpp:(.text+0x329): неопределённая ссылка на «lua_tonumber»
...
/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/scripting.cpp.o: в функции «scripting::on_block_broken(Player*, Block const*, int, int, int)»:
scripting.cpp:(.text+0xd7a): неопределённая ссылка на «lua_pcall»
/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/scripting.cpp.o:scripting.cpp:(.text+0xeda): далее есть ещё неопределённые ссылки на «lua_pcall»
/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/scripting.cpp.o: в функции «scripting::load_block_script(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::filesystem::__cxx11::path, block_funcs_set*)»:
scripting.cpp:(.text+0x110d): неопределённая ссылка на «luaL_loadbuffer»
/usr/bin/ld: scripting.cpp:(.text+0x116b): неопределённая ссылка на «lua_pcall»
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
gmake[2]: *** [CMakeFiles/VoxelEngine.dir/build.make:1449: VoxelEngine] Ошибка 1
gmake[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/VoxelEngine.dir/all] Ошибка 2
gmake: *** [Makefile:91: all] Ошибка 2
Сижу на Fedora Linux, версии библиотек (и прочего):
cmake - 3.27.7
g++ - 13.2.1 20231011
gcc - 13.2.1 20231011
glew-devel - 2.2.0
glfw - 3.3.8
glfw-devel - 3.3.8
glm-devel - 0.9.9.8
libpng-devel - 1.6.37
glew-devel - 2.2.0
glfw - 3.3.8
glfw-devel - 3.3.8
libpng-devel - 1.6.37
Как пофиксить ошибку? Возможно, я не установил какие-то либы?
Upgrade the existing memory management in the project by replacing the usage of raw pointers, new, and delete operators with modern C++ smart pointers, specifically std::unique_ptr and std::shared_ptr.
The current codebase utilizes manual memory management through the use of new and delete operators, which can lead to potential memory leaks, dangling pointers, and increased code complexity. By transitioning to smart pointers, we aim to enhance code safety, readability, and maintainability while reducing the risk of memory-related issues.
Связан ли ваш запрос на добавление функции с проблемой? Пожалуйста, опишите.
Хотелось бы иметь возможность влиять на генерацию мира из контент-паков
Опишите желаемое решение
С помощью шума перлина разбить мир на биомы. Выполнить LUA функцию из файла для этого биома на каждом столбце в области биома. Добавить в стандартную библиотеку функции шума перлина и псевдослучайных чисел
Пытался запустить на FreeBSD 13.2-RELEASE
Билдится, но при запуске выдает segfault и все.
По стандарту размеры блока ограничены 1х1х1, если выставить размер хитбокса блока например 2х2х2 то он будет выталкивать только до края хитбокса, при этом если выставить монструозные значения, как показано на видео, откинет настолько далеко, что мира там даже не существует.
Планируется версия под макос?
Можно использовать "actions/upload-artifact@v3" для сохранения результата сборки workflow. Что бы можно было скачать билд конкретного коммита и протестировать именно его.
Добавить копию workflow сборки проекта на linux и переделать её под windows.
Так же можно добавить workflow для автоматической сборки проекта и создания релиза (пример)
Шаги для воспроизведения поведения:
Ожидаемое поведение
Свободное покорение лимитов long long
Видео с багом:
https://youtu.be/AK0_RpJBDFU
Тех. информация:
что с проектом?
Стоит добавить лицензию к проекту - MIT, GPL2, etc.
https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/licensing-a-repository
Если в ноуклипе залететь в землю и выключил ноуклип пойти в какую то из сторон, начинает относить до 4096 координаты по x.
Когда релиз под линукс:)????
Не читал пока особо код фронтенда, но надеюсь там есть что-то вроде updateMenu().
p.s. tested on x64 Windows 10
Вулкан – прямое продолжение OpenGL, но более оптимизирован под многоядерность, быстрее рендерит но, кажется, многословнее в написании. Зато простор для оптимизации и более современные технологии.. worth it? думаю, что да
В данный момент реализация выглядит так:
Таким образом подгрузка чанков происходит не самым оптимальным образом.
Я считаю, что подгрузка чанков должна быть приоритезована по следующей схеме:
Кроме того, функция, которая определяет подгрузку чанков так и названа ChunkController::loadVisible()
, что расходится с реализацией.
Я попробовал сделать черновой набросок того, как я думаю должно выглядеть исправление, правда пришлось добавить супер костыль, для доступа к классу WorldRenderer
из метода ChunkController::loadVisible()
. Вот что у меня примерно получилось:
------------------------ src/frontend/WorldRenderer.cpp ------------------------
index 8ae83df..c5d7d37 100644
@@ -39,6 +39,23 @@ using glm::mat4;
using std::string;
using std::shared_ptr;
+static WorldRenderer* renderer_;
+bool WorldRenderer::isChunkVisible(int cx, int cz)
+{
+ return renderer_->isChunkVisible_(cx, cz);
+}
+bool WorldRenderer::isChunkVisible_(int cx, int cz)
+{
+ vec3 min(cx * CHUNK_W,
+ 0,
+ cz * CHUNK_D);
+ vec3 max(cx * CHUNK_W + CHUNK_W,
+ CHUNK_H,
+ cz * CHUNK_D + CHUNK_D);
+
+ return frustumCulling->IsBoxVisible(min, max);
+}
+
WorldRenderer::WorldRenderer(Engine* engine, LevelFrontend* frontend)
: engine(engine),
level(frontend->getLevel()),
@@ -57,6 +74,7 @@ WorldRenderer::WorldRenderer(Engine* engine, LevelFrontend* frontend)
auto assets = engine->getAssets();
skybox = new Skybox(settings.graphics.skyboxResolution,
assets->getShader("skybox_gen"));
+ renderer_ = this;
}
WorldRenderer::~WorldRenderer() {
------------------------- src/frontend/WorldRenderer.h -------------------------
index bb500c3..3f06ef8 100644
@@ -41,6 +41,9 @@ public:
void drawDebug(const GfxContext& context, Camera* camera);
void drawBorders(int sx, int sy, int sz, int ex, int ey, int ez);
+ static bool isChunkVisible(int cx, int cz);
+ bool isChunkVisible_(int cx, int cz);
+
static float fog;
};
------------------------ src/logic/ChunksController.cpp ------------------------
index 3f6f006..4997aa2 100644
@@ -17,6 +17,7 @@
#include "../world/World.h"
#include "../maths/voxmaths.h"
#include "../util/timeutil.h"
+#include "../frontend/WorldRenderer.h"
const uint MAX_WORK_PER_FRAME = 64;
@@ -61,6 +62,7 @@ bool ChunksController::loadVisible(){
int minDistance = ((w-padding*2)/2)*((w-padding*2)/2);
for (uint z = padding; z < d-padding; z++){
for (uint x = padding; x < w-padding; x++){
+ if (!WorldRenderer::isChunkVisible(x+ox, z+oz)) continue;
int index = z * w + x;
auto chunk = chunks->chunks[index];
if (chunk != nullptr){
Стоит отметить, что моя реализация не подгружает чанки за зоной видмости, хотя возможно стоило бы погрузить хотя бы ближайшие к камере чанки (например в радиусе 2 чанков). Кроме того, текущая версия isChunkVisible
не корректно возвращает результат для пограничных чанков (см не прогруженные чанки слева и справа на скриншоте).
Как резульатат при черновой реализации я отметил существенное ускорение прогрузки чанков, попадающих в зону видимости камеры, что улучшает комфорт. Кроме того, игра стала потреблять кратно меньше количество памяти, т.к. теперь она не подгружает чанки находящиеся за пределами видимости, таким образом мне удалось поднять дальность прорисовки до максимума на моём ноутбуке со встроенной графикой и не слишком большом количестве ОЗУ.
$ sudo apt install libglfw3-dev libglfw3 libglew-dev libglm-dev # установка зависимостей
$ vi ./src/voxels/../files/WorldFiles.h # я как тру хацкер редактрую в vi
$ cd Debug
$ make # компилим
$ cd ..
$ ./Debug/voxel_engine # запускаем!
P.S: у меня дистр kali linux ARM64
Собираю проект, Windows MSYS2 MinGW:
User@pe4Ka-PC MINGW64 /c/Users/User/Desktop/VoxelEngine-Cpp
$ rm -r build
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ..
make
rm: cannot remove 'build': No such file or directory
-- The C compiler identification is GNU 13.2.0
-- The CXX compiler identification is GNU 13.2.0
System is unknown to cmake, create:
Platform/MINGW64_NT-10.0-22621 to use this system, please post your config file on discourse.cmake.org so it can be added to cmake
-- Detecting C compiler ABI info
System is unknown to cmake, create:
Platform/MINGW64_NT-10.0-22621 to use this system, please post your config file on discourse.cmake.org so it can be added to cmake
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /mingw64/bin/gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
System is unknown to cmake, create:
Platform/MINGW64_NT-10.0-22621 to use this system, please post your config file on discourse.cmake.org so it can be added to cmake
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /mingw64/bin/g++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY)
Call Stack (most recent call first):
/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake/Modules/FindOpenGL.cmake:545 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
CMakeLists.txt:48 (find_package)
-- Configuring incomplete, errors occurred!
make: *** No targets specified and no makefile found. Stop.
Не находит опен жи эль, помогите добрые люди!!!
скачал готовый exe с гугл драйва, передвигаются все норм. лкм работает, но не двигается камера
I found it pretty useful to use Docker containers for building/testing/running projects. It allows to build project on any linux sytem without installing any external library to the system and it is guaranteed to be working on it. I will create and commit it in 10 minutes, so I will just create a ticket to document it :)
Хочу спросить, будет ли в этом проекте мультиплеер, как и в майнкрафте собственно
Нет ни make ни cmake ни vs code ни launch.json, просто код. Тяжело скомпилироватб не зная как
При попытке запустить ./run.sh
начинается сборка, которая обрывается на этом моменте:
In file included from /home/kort/VoxelEngine-Cpp/src/logic/scripting/api_lua.cpp:1:
/home/kort/VoxelEngine-Cpp/src/logic/scripting/api_lua.h:7:57: замечание: «#pragma message: better use LuaJIT instead of plain Lua»
7 | #pragma message("better use LuaJIT instead of plain Lua")
| ^
/home/kort/VoxelEngine-Cpp/src/logic/scripting/api_lua.cpp: In function «int luaopen_world(lua_State*)»:
/home/kort/VoxelEngine-Cpp/src/logic/scripting/api_lua.cpp:50:5: ошибка: «luaL_openlib» was not declared in this scope; did you mean «luaL_openlibs»?
50 | luaL_openlib(L, "world", worldlib, 0);
| ^~~~~~~~~~~~
| luaL_openlibs
/home/kort/VoxelEngine-Cpp/src/logic/scripting/api_lua.cpp: In function «int luaopen_player(lua_State*)»:
/home/kort/VoxelEngine-Cpp/src/logic/scripting/api_lua.cpp:108:5: ошибка: «luaL_openlib» was not declared in this scope; did you mean «luaL_openlibs»?
108 | luaL_openlib(L, "player", playerlib, 0);
| ^~~~~~~~~~~~
| luaL_openlibs
make[2]: *** [CMakeFiles/VoxelEngine.dir/build.make:944: CMakeFiles/VoxelEngine.dir/src/logic/scripting/api_lua.cpp.o] Ошибка 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/VoxelEngine.dir/all] Ошибка 2
make: *** [Makefile:91: all] Ошибка 2
Попытка заменить luaL_openlib
на luaL_openlibs
, понятное дело, не помогла.
Upd: установка luajit
из репозитория extra, luajit-git
из AUR или через команды из README также не помогли.
Немного о себе:
./run.sh
Не нашёл такой issue ранее, поэтому создаю новую. Если такая уже решена, пожалуйста, укажите.
Опишите ошибку
Тут сразу две проблемы:
Не правильное отображение верхней грани блока на 256 высоте: она полностью прозрачна.
Для воспроизведения
Шаги для воспроизведения поведения:
Ожидаемое поведение
Блок должен отрисовываться корректно.
Техническая информация (заполните следующую информацию):
Дополнительный контекст
(отсутствует)
В проекте уже есть способ создания Docker образа из которого можно делать контейнеры. Почему бы не добавить автоматическую публикацию образа в GitHub Registry через GitHub Actions? Тогда пользователям, как в #133 не надо будет собирать контейнеры самостоятельно.
Можно добавить дополнительную инструкцию по получению образа и запуска игры из контейнера (инструкция для запуска игры из контейнера уже есть). По сути инструкция будет состоять из двух шагов.
LevelController::LevelController(EngineSettings& settings, Level* level)
: settings(settings), level(level) {
blocks = new BlocksController(level, settings.chunks.padding);
chunks = new ChunksController(level, settings.chunks.padding);
player = new PlayerController(level, settings, blocks);
scripting::on_world_load(level);
}
LevelController::~LevelController() {
scripting::on_world_quit();
delete player;
delete chunks;
}
На данный момент в движке включен не весь набор стандартных библиотек, что мешает разработчикам модов.
Предлагаю добавить оставшиеся библиотеки, отключив в них небезопасные функции, которые позволяют вызывать сторонний c-код.
Данная мера направлена не на замену кастомных библиотек. Например, подключение библиотеки io не призвано заменить file, так как её api более удобно для использования в движке.
Добавление оставшихся библиотек нацелено на предоставление возможности использования уже существующих инструментов, которые опираются на стандарт языка. Это даст мододелам возможность улучшить процесс написания кода и создавать контент, вместо изобретения многочисленных "велосипедов".
В новой версии(17) всё лагает, раньше было лучше.
Опишите ошибку
После перезахода в мир (не перезапуска игры, это важно!) инвентари блоков получают состояние, которое было до запуска игры
Для воспроизведения
Шаги для воспроизведения поведения:
Ожидаемое поведение
Изменения сохранятся, как происходит, если после шага №5 перезапустить игру
Техническая информация (заполните следующую информацию):
Опишите ошибку
Ошибка компиляции xml.cpp:
/project/src/coders/xml.cpp:30:75: error: no matching function for call to 'from_chars(const char*, const char*, double&)'
30 | auto res = std::from_chars(text.data(), text.data()+text.size(), value);
| ^
In file included from /project/src/coders/xml.cpp:3:
/usr/include/c++/10/charconv:595:5: note: candidate: 'template<class _Tp> std::__detail::__integer_from_chars_result_type<_Tp> std::from_chars(const char*, const char*, _Tp&, int)'
595 | from_chars(const char* __first, const char* __last, _Tp& __value,
| ^~~~~~~~~~
/usr/include/c++/10/charconv:595:5: note: template argument deduction/substitution failed:
In file included from /usr/include/c++/10/bits/move.h:57,
from /usr/include/c++/10/bits/stl_pair.h:59,
from /usr/include/c++/10/bits/stl_algobase.h:64,
from /usr/include/c++/10/bits/char_traits.h:39,
from /usr/include/c++/10/string:40,
from /project/src/coders/xml.h:4,
from /project/src/coders/xml.cpp:1:
/usr/include/c++/10/type_traits: In substitution of 'template<bool _Cond, class _Tp> using enable_if_t = typename std::enable_if::type [with bool _Cond = false; _Tp = std::from_chars_result]':
/usr/include/c++/10/charconv:584:11: required by substitution of 'template<class _Tp> using __integer_from_chars_result_type = std::enable_if_t<std::__or_<std::__or_<std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, signed char>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, short int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, long int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, long long int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, __int128> >, std::__or_<std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, unsigned char>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, short unsigned int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, unsigned int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, long unsigned int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, long long unsigned int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, __int128 unsigned> >, std::is_same<char, typename std::remove_cv< <template-parameter-1-1> >::type> >::value, std::from_chars_result> [with _Tp = double]'
/usr/include/c++/10/charconv:595:5: required by substitution of 'template<class _Tp> std::__detail::__integer_from_chars_result_type<_Tp> std::from_chars(const char*, const char*, _Tp&, int) [with _Tp = double]'
/project/src/coders/xml.cpp:30:75: required from here
/usr/include/c++/10/type_traits:2554:11: error: no type named 'type' in 'struct std::enable_if<false, std::from_chars_result>'
2554 | using enable_if_t = typename enable_if<_Cond, _Tp>::type;
| ^~~~~~~~~~~
gmake[2]: *** [CMakeFiles/VoxelEngine.dir/build.make:254: CMakeFiles/VoxelEngine.dir/src/coders/xml.cpp.o] Error 1
Для воспроизведения
Шаги для воспроизведения поведения:
docker run --rm -it -v$(pwd):/project voxel-engine /bin/bash -c "cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=Release -Bbuild && cmake --build build"
Ожидаемое поведение
Компиляция без ошибок
Техническая информация (заполните следующую информацию):
Дополнительный контекст
Мне кажется, что проблема в использовании auto
в следующей функции:
double Attribute::asFloat() const {
double value;
auto res = std::from_chars(text.data(), text.data()+text.size(), value);
if (res.ptr != text.data()+text.size()) {
throw std::runtime_error("invalid number format "+escape_string(text));
}
return value;
}
Предлагаемое решение:
Заменить использование std::from_chars
на std::stod
, которая автоматически выбрасывает исключение с описанием ошибки:
double Attribute::asFloat() const {
- double value;
- auto res = std::from_chars(text.data(), text.data()+text.size(), value);
- if (res.ptr != text.data()+text.size()) {
- throw std::runtime_error("invalid number format "+escape_string(text));
- }
- return value;
+ return std::stod(text);
}
Похоже, я заметил некоторые недочеты в языковых пакетах, которые могут возникнуть из-за использования символов из различных стран. Вероятно, проблема кроется в папке с шрифтами, и, возможно, стоит создать шрифт для соответствующего языка. Было бы замечательно, если бы шрифт проверялся, и в случае отсутствия шрифта для конкретной страны использовался стандартный шрифт.
Сейчас это какая-то каша без разделения на категории.
Выдаёт четыре ошибки об отсутствии данных файлов: OpenAL32.dll, VCRUNTIME140D.dll, ucrtbased.dll
OS: Void linux
Linux: 6.6.2
Собрал через llvm/clang 17.0.3
pre_configure() {
export CC=clang
export CXX=clang++
export AR=llvm-ar
export NM=llvm-nm
export RANLIB=llvm-ranlib
export CFLAGS="${CFLAGS} -O3 -mtune=native -march=native"
export CXXFLAGS="${CXXFLAGS} -O3 -mtune=native -march=native"
}
При сборке каждого объекта возникает предупреждение:
clang++: warning: -lstdc++fs: 'linker' input unused [-Wunused-command-line-argument]
При запуске:
Failed to initialize GLEW
-- loading assets
loading res/shaders/main as main
loading res/shaders/lines as lines
loading res/shaders/ui as ui
loading res/textures/blocks as blocks
loading res/textures/menubg.png as menubg
loading res/fonts/font as normal
max mono sources: 255
-- initializing finished
-- preparing systems
zsh: segmentation fault ./VoxelEngine
Связан ли ваш запрос на добавление функции с проблемой? Пожалуйста, опишите.
Звуков не хватает
Опишите желаемое решение
Добавить в контент-паки звуки, так же как и текстуры
Если создать мир с русским названием, а затем попытаться "Save and quit", то либо падение, либо выход в меню, но в любом случае название кодируется-декодируется некорректно, так что затем зайти в мир невозможно и есть большая вероятность упасть при инициализации main_menu (если в названии есть буква ц, например)
хитбокс и текстура не совпадают, скорее всего отсчёт по x начинается не там. с z всё нормально.
содержимое файла:
{ "texture-faces": [ "pipe_side", "pipe_side", "pipe_hole", "pipe_hole", "pipe_side", "pipe_side" ], "model": "aabb", "hitbox": [0.5, 0.0, 0.0, 0.5, 0.5, 0.5], "light-passing": true, "rotation": "pipe" }
Предлагаю сделать что-то типо чата из майна, но пока мультиплеера нет, чат будет использоваться для выполнения "консольных команд", которые можно будет биндить (назначать) через скрипты Lua.
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.