opmonteam / opmon-archive Goto Github PK
View Code? Open in Web Editor NEWProject moved to https://github.com/OpMonTeam/OpMon
Home Page: https://opmon-game.ga
License: Other
Project moved to https://github.com/OpMonTeam/OpMon
Home Page: https://opmon-game.ga
License: Other
I installed opmon compiling it and generating the .deb in debian 9.
When I play a new game, the character stays locked in the initial position, I can not move anywhere.
Thanks.
I have felt quite a large amount of screen tearing when I played the game, especially when moving up or down in the world map. Screen tearing is usually removed by enbling VSync, but as I saw it in the code, a fixed frame frequency of 30 fps is used for rendering as well as for computing game objects' speeds. I think you should dissociate the game update logic and the rendering, so to let users choose if they want to play with VSync on or with maximum FPS.
Currently, it's one frame by file. In the future, it would be great to have one file for all the frames.
Idéalement, le code HTML et JS contenu dans le dépot devraient être déplacés ailleurs.
L'objectif est de simplifier le dépot github
Je propose de bouger tout ce qu'il y a dans src/jlppc/regimys
directement dans src/
. Le dossier jlppc
n'apporte rien, le code utils
restera dans un dossier séparé.
Au 1er lancement (sous Linux), le programme plante car il n'y a pas de fichiers de log ... mais créé le fichier de log.
Au 2ème lancement, tout va bien puisque le dossier a été créé.
Le programme devrait créer le dossier avant de tester l'ouverture des fichiers de log
This issue is the first of a serie, aiming to improve the code up to a higher standard. Beware @cyrioncentori, the global variables will go through this!
As mentioned several times on Discord, We need to choose a coding style.
First, we need to specify most of the aspects we'd like to keep consistent, in order to define the coding style. It's OK if there is a few things unspecified, but the less there is, the better it is.
Currently, the code is indented with a mix of 2-space indents (me and Cyrion), and 4-space width tabs (Cyrion).
Other people on Discord were in favor of (4 spaces-width) tab indent.
We could also use Smart Tabs (tabs for indent, then spaces to align when needed). Everyone can set the tab width in its editor.
The choices are:
No spaces:
class X{
X();
};
class Y: X{
Y();
}
void f(std::vector<Event&> events){
for(Event *event: events){
if(event->getPosition().x SQUARES == position.x){
toReturn.push_back(event);
}else{
// ... else clause
}
}
}
Spaces everywhere:
class X {
X();
};
class Y: X {
Y();
}
void f(std::vector<Event&> events) {
for (Event *event: events) {
if (event->getPosition().x SQUARES == position.x) {
toReturn.push_back(event);
} else {
// ... else clause
}
}
There are spaces (or not):
if
, for
) and following parenthesisif
, for
, etc.)It's probably the only point we have some coherence. All code use the same style.
class Foo{
public:
void barBaz();
int classVariable;
};
void Foo::barBaz(){
int myVariable;
}
However, we may improve it by using a _
suffix for private and protected variables. In practice, almost all class variables are private or protected.
class Foo{
protected:
int _myVar;
};
case
in switch
statements ?switch(layer){
case 1:
return layer1[pos.x + pos.y * w] - 1;
case 2:
return layer2[pos.x + pos.y * w] - 1;
case 3:
return layer3[pos.x + pos.y * w] - 1;
default:
return 0;
}
switch(layer){
case 1:
return layer1[pos.x + pos.y * w] - 1;
case 2:
return layer2[pos.x + pos.y * w] - 1;
case 3:
return layer3[pos.x + pos.y * w] - 1;
default:
return 0;
}
Should we indent public
, private
and protected
?
class Map {
private:
const int *layer1;
public:
sf::Vector2i getDimensions() const;
};
class Map {
private:
const int *layer1;
public:
sf::Vector2i getDimensions() const;
};
Currently, we do it everywhere, but we may waste less space by removing it.
My preferences:
if
, for
) and following parenthesis: no preferenceif
, for
, etc.): Yes_
prefix for private member variables: Yescase
in switch
statements ? Nopublic
, private
and protected
? no preferenceIn any case, I care way more to keep the code consistent than to use my preferred coding style.
Lorsque le personnage passe la porte de sortie du labo, le TP se fait au mauvaise endroit (1 case en dessous et 1 case sur le coté droit de trop)
This functionality would prevent people pressing escape and closing the game by mistake. But it's also a pretext to create a dialog box system in the game, which would be useful also for asking other kinds of confirmations.
perhaps is because i changed language in the middle of a game?
how can i delete the game and after change the language?
Always have the player character at the center of the screen if possible. Exceptions being when you deem it to be.
Les méthodes up
, down
, left
et right
ont énormément de code en commun. On peut les refactoriser et enlever facilement 100lignes de code.
The character shifts a few pixels that corrupts collisions
This bug is more common on Windows but I managed to do it on Linux too.
A sha256sum or gpg would be nice in order to verify that the downloaded file from opmon-game.ga has not been tampered by a malicious attacker.
While being in the NPC's way, the collision doesn't activate, and the NPC's movement is completely out of sync.
Si on appui sur entrée avant de rentrer une lettre à l'écran de choix de nom, on obtiens un nom "buggé".
If you take your time to talk with Beta, the battle will crash
// Avant:
rlog << PRINT_TICKS << "Log initialisation completed." << endl;
// Après:
log("Log initialisation completed.")
Plus simple à écrire, moins de risque d'erreurs
The compiling instructions for Windows needs a fix. I have tried both Visual Studio and Code::Blocks, and both have not been successful. Some things I found while troubleshooting:
Visual Studio instructions not working
Code::Blocks (for Windows) had to remove a bunch of the SFML related defines to avoid errors
SFML stuff is out of date, I am using the latest version (2.5.1) and all of the unnecessary defines are causing plenty of issues.
config header. This was a nightmare. Why is it in the root dir? Why is it "config.hpp.in" instead of "config.hpp"? Why is it necessary?
Build Errors. After doing quick fixes of the above (for the most part), there are actual building errors that aren't just misconfigurations. Settings are using c++17 with codeblocks 17.12.
I.e. ```
||=== Build: Debug in OpMon (compiler: GNU GCC Compiler) ===|
C:\Users\Pyros\Documents\GitHub\OpMon\src\utils\misc.hpp|14|error: expected '{' before '::' token|
C:\Users\Pyros\Documents\GitHub\OpMon\src\utils\misc.hpp|14|error: 'Misc' in namespace '::' does not name a type|
C:\Users\Pyros\Documents\GitHub\OpMon\src\opmon\model\objects\OpMon.hpp|35|error: 'Utils::Misc' has not been declared|
C:\Users\Pyros\Documents\GitHub\OpMon\src\opmon\model\objects\OpMon.hpp|36|error: 'Utils::Misc' has not been declared|
C:\Users\Pyros\Documents\GitHub\OpMon\src\opmon\model\objects\OpMon.hpp|37|error: 'Utils::Misc' has not been declared|
C:\Users\Pyros\Documents\GitHub\OpMon\src\opmon\model\objects\OpMon.hpp|38|error: 'Utils::Misc' has not been declared|
C:\Users\Pyros\Documents\GitHub\OpMon\src\opmon\model\objects\OpMon.hpp|39|error: 'Utils::Misc' has not been declared|
C:\Users\Pyros\Documents\GitHub\OpMon\src\opmon\model\objects\OpMon.hpp|40|error: 'Utils::Misc' has not been declared|
C:\Users\Pyros\Documents\GitHub\OpMon\src\opmon\model\objects\OpMon.hpp||In member function 'void Utils::OpMon::Model::OpMon::goToSleep()':|
C:\Users\Pyros\Documents\GitHub\OpMon\src\opmon\model\objects\OpMon.hpp|128|error: 'Utils::Misc' has not been declared|
C:\Users\Pyros\Documents\GitHub\OpMon\src\opmon\model\objects\OpMon.hpp||In member function 'void Utils::OpMon::Model::OpMon::drinkTooMuch()':|
C:\Users\Pyros\Documents\GitHub\OpMon\src\opmon\model\objects\OpMon.hpp|134|error: 'Utils::Misc' has not been declared|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\stl_raw_storage_iter.h|69|error: expected template-name before '<' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\stl_raw_storage_iter.h|69|error: expected '{' before '<' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\stl_raw_storage_iter.h|69|error: expected unqualified-id before '<' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\typeinfo||In member function 'size_t Utils::std::type_info::hash_code() const':|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\typeinfo|144|error: '_Hash_bytes' was not declared in this scope|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\typeinfo|144|note: suggested alternative:|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\hash_bytes.h|47|note: 'std::_Hash_bytes'|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\typeinfo|188|error: expected class-name before '{' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\typeinfo|205|error: expected class-name before '{' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\ext\concurrence.h|68|error: expected class-name before '{' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\ext\concurrence.h|76|error: expected class-name before '{' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\ext\concurrence.h|84|error: expected class-name before '{' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\ext\concurrence.h|92|error: expected class-name before '{' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|71|error: '__void_t' does not name a type|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|71|error: expected '>' before '<' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|77|error: '__void_t' was not declared in this scope|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|77|note: suggested alternative:|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\type_traits|2407|note: 'std::__void_t'|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|77|error: template argument 2 is invalid|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|77|error: expected unqualified-id before '>' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|86|error: template argument 2 is invalid|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|184|error: template argument 1 is invalid|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|193|error: expected nested-name-specifier before 'enable_if'|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|193|error: expected initializer before '<' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|206|error: expected nested-name-specifier before 'enable_if'|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|206|error: expected initializer before '<' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|220|error: expected nested-name-specifier before 'enable_if'|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|220|error: expected initializer before '<' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|271|error: '__void_t' does not name a type|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|271|error: expected '>' before '<' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|271|error: expected class-name before '{' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|271|error: '__void_t' was not declared in this scope|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|271|note: suggested alternative:|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\type_traits|2407|note: 'std::__void_t'|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|271|error: template argument 2 is invalid|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|271|error: expected unqualified-id before '>' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|272|error: '__void_t' does not name a type|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|272|error: expected '>' before '<' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|272|error: expected class-name before '{' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|272|error: '__void_t' was not declared in this scope|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|272|note: suggested alternative:|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\type_traits|2407|note: 'std::__void_t'|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|272|error: template argument 2 is invalid|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|272|error: expected unqualified-id before '>' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|273|error: '__void_t' does not name a type|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|273|error: expected '>' before '<' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|273|error: expected class-name before '{' token|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|273|error: '__void_t' was not declared in this scope|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|273|note: suggested alternative:|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\type_traits|2407|note: 'std::__void_t'|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\functional|273|error: template argument 2 is invalid|
||More errors follow but not being shown.|
||Edit the max errors limit in compiler options...|
||=== Build failed: 50 error(s), 0 warning(s) (0 minute(s), 51 second(s)) ===|
If this would be possible, can the repository be a bit better organized?
For example, have versions be milestones rather than projects. Have projects be big TODO features, such as battle system, engine improvements. Also, having so many tags kinda clutters up the issues and makes them hard to sort. Just having "Enhancements", "Bugs", and "Next Version" are fine.
I believe that organizing the repo will help new contributors find things to help with more effectively.
I was looking through the project, and there weren't any resources for existing OpMon besides a JSON that didn't really have the names. Are there any current resources or example sheets for the creation of OpMon? If not, a simple (even a commandline) tool that exports an OpMon JSON based on given info. I'd make one, but can't seem to find any info on what the format is.
If it hasn't been done already, having a JSON or a custom file format extension PER OpMon would make creation simpler as well.
EG: OpMon/Data/OpMon/*.json (or *.opmn) with a file for each OpMon.
Les escaliers de la maison du personnage principal sont devenus un mur
Les morceaux de code du type:
#ifdef _WIN32
if(!font.loadFromFile("ressources\\fonts\\Default.ttf"))
#else
if(!font.loadFromFile(RESSOURCES_PATH + "fonts/Default.ttf"))
#endif // _WIN32
devarient être remplacé par une fonction:
if(!font.loadFromFile(get_path("fonts/Default.ttf")))
Hello!
It would be super cool that when you create a new release and mention how to install it on different distrubtions that you could also mention the openSUSE distro. We have an always up to date package at: https://build.opensuse.org/package/show/games/opmon :-)
Hi! It seems some of the art used is incorporated from other projects, but I could not find the appropriate credit anywhere.
For example, /data/maps/tileset.png incorporates "Grass, Sand, Snow" by PastTheFuture, which is licensed as CC BY 4.0, and based on "Kyrodian Legends Overworld Tileset" by Midi. The CC BY license requires that you credit the author, but it seems that isn't being done. If this is not done, you have not fulfilled the license requirements, and are infringing on their copyright, for which you could be sued.
This project's /data/maps/tileset.png (relevant portion in the upper-right):
"Grass, Sand, Snow" by PastTheFuture:
To avoid legal headache in the future, I recommend keeping a file similar to the CREDITS.md of the Tuxemon Project (and this project's music readme which lists each external resource used by the project, who made it, and what the license is. I would also recommend only using resources licensed under the CC BY and CC BY-SA licenses.
Also, the license of this project's own art is unclear. The music is CC BY-SA licensed, but nothing is said about the original art. Without an explicit notice, it could be assumed that the art is also GPLv3 licensed, which is less-than-ideal for art. I would recommend licensing all original art under the CC BY-SA (copyleft) or CC BY (permissive) license.
Here is a link to the youtube video of what happens: https://youtu.be/bl_5Ypc3AZw
I noticed that if you stand in front of the windmill and move left and right, the darker, leftmost part of the base is clipping in front of the character's head.
Allow the window to be resized and just viewport accordingly.
I see that this code relies heavily on global variables, and to a lesser extent object-global variables. It hinders readability quite a lot, and opens the door to subtle bugs down the road. I am currently cleaning up parts of the code, so I'll do what I can to removve those I find during my refactoring but a large-scale operation seems necessary
I created an rpm package for openSUSE.
I would like to note it down somewhere in your repo so that users can easily find out about it and install it.
So far it seems you uploaded an Arch PKGBUILD to the releases.
Do you think an INSTALL.md
file would be a good thing? And describing various installation methods and links to available packages there?
I just installed opmon and get a very wird behaviour which might be a problem on my side. But I think I will need your help to track it down.
I launch opmon in a terminal and I get:
$ opmon
Error n°1 : Keys initialization error: keys/english.rkeys
Fatal error.
No window is displayed. Program exits.
Funny enough I have another terminal instance open in which case it launches opmon when I type the name.
For both I get:
which opmon
/usr/bin/opmon
So it's the same executable.
When starting over the desktop file in GNOME3 menu it also doesn't start (which is the reason I went to the terminal in the first place).
So my question: under which circumstance is this error message displayed?
I recommend this one ^
This project could use some external tools to facilitate contribution from non-programmers (or just people who want to avoid dealing with JSON 😝). They will probably require a new repository each, but before we do that we probably should discuss them all here ^^
I think we need tools for creating :
Of course, each editor will have to use data created by the other editors, so we'll need a way to import stuff created in one editor in another.
Currently, Tiled is used for the map in itself, but events like map transition or item drops are added by hand directly in the JSON file. I see that Tiled has custom properties for tiles, we might be able to use that.
Also, the attacks editor will require that each possible effect be created in the main project's code first, then associated with an effect type to be usable from the editor. This means if someone want to create an attack with a weird effect not covered by another existing attack, they won't be able to do it from the editor alone. (or we can make each attack effect load an external script but I think it's way too big of a scope).
For now, the logs
and saves
folders are always created in the current working directory.
The resources
folder is located either in the current working directory or in /usr/share/OpMon
; The path is selected by a macro constant in the code.
The behavior is not standard and not effective (macro must be flipped to compile a package version; install in /usr/local/share doesn't works, ...)
The game should follow the XDG Basedir spec.
saves
and logs
must be created in $XDG_CONFIG_HOME/OpMon/
(or ~/.config/OpMon
if the variable doesn't exists).$XDG_DATA_HOME/OpMon
, then all the location listed by $XDG_DATA_DIRS
.Hi, I have a question about the graphics in the game. They are so good that I can't understand whether they come from a copyrighted game (therefore not free) or if you made them. If you made them compliments! If they are not free I hope they will eventually be replaced by free graphics.
Ajouter un temps d'attente devant la porte avant de rentrer dans un batiment, car on a pas le temps de voir l'animation de la porte. De plus, ce n'est apas très realiste avec le système actuel.
Tout est dans le titre
At the moment opmon-game.ga does not uses HTTPS (not even for the download page). Switching to HTTPS would provide security for the user and would make the site future-proof (both Firefox and Chrome are enabling tactics to warn users against non secure websites).
To futureproof the work the has been done, I believe it would be wise to isolate the engine and the game. The engine has all the game logic and loaders, while the game would be the assets, maps, OpMon, text boxes, etc. The Engine would load a folder which is where the game assets would be placed in a standardized format.
EX: File Structure
----RootFolder
--- / --------
Engine------ Game
--- | ------- | -------
Stuff----Default ---Custom Game
I know this game is far from finished but I think volume control should be added as soon as possible. It's not always convenient to lower the whole system's volume in order not to have the game play at eardrum-tearing levels.
As it stands now, the volume slider is only visual and does nothing, unless I'm missing something.
I'm searching through the directories but I can't find any config file, for example one which would define default values for window size, volume, vsync, fullscreen and others. That could potentially be changed by the player while in the options screen (or manually) and saved for the next time they open the game.
So, for example, if I wanted my game to always open with 25% volume, at fullscreen and with vsync off, the config file would be like:
volume:25
fullscreen:true
vsync:false
"core dumped"
Le retour, épisode 7
L'UTF-8 soit n'est pas activer, soit buguer, soit inexistant
Certaines macros ont un nom qui n'est pas clair.
Je propose de renommer QUIT
en RETURN_ON_CLOSE_EVENT
et ECHAP
en RETURN_ON_ECHAP_EVENT
En plus, ECHAP ne marche que dans un switch. Je propose de changer le comportement pour qu'il prenne l'objet event en paramètre, (plutôt que d'utiliser le mot-clé case
).
The .deb file is not accessible in the downloads section of the web page:
https://github.com/jlppc/OpMon/releases/download/alpha-v0.13/OpMon_0.13-bin.deb
Thanks.
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.