yaribz / spads Goto Github PK
View Code? Open in Web Editor NEWSpringRTS Perl Autohost for Dedicated Server
License: GNU General Public License v3.0
SpringRTS Perl Autohost for Dedicated Server
License: GNU General Public License v3.0
Currently, I believe it's this plugin that's preventing muted players from being able to vote, yet they are still included as part of the vote participation pool.
My suggestion would be to trim the optional message arg from any commands that have them and forward the bare command for muted players. e.g.
!stop haha u suck
-> !stop
Hi ! How ya ?
Fonction restoreDefaultPresetDelay:30
[11:31:23] <*> [ACE]Sure * Battle empty for 30 seconds, restoring default settings
This cannot be executed in [ACE]Pirine
due to the presence of a bot.
Is it possible to restore defaults settings, even with presence of specs (or bots...) ?
Or eventually the possibility to choose restoring with or without specs...
Thx !
When SL users check their auto-unspectate box, the next time a free slot appears in a SPADS hosted battle, they will all momentarily autounspectate (unless the battle is full, which is not necessarily the same thing as having reached the autohosts self-imposed max player count). Almost immediately after, all but one of the clients is returned to being a spectator. When this happens each SL client thinks it became a player, and unchecks its auto-unspectate box.
The result is that (I don't know about other lobbies) it appears as though SLs auto-unspectate function only tries to unspectate once on SPADS hosts.
I don't know if this is genuinely a SPADS issue or a limitation of the lobby protocol, but it seems it cannot be cleanly addressed in SL (springlobby/springlobby#365).
not sure for what its needed but update, etc. seems to rely on it.
since the lobby server update spads reports "Spring crashed" when starting a game:
[06:41:39] * [BA]Peewee * Launching game...
[06:41:45] * [BA]Peewee * Spring crashed ! (running time: 6 seconds)
an idea why this happens?
the dev server which uses the updated version is running at lobby.springrts.com:7000
most spads autohosts seems to fail to upload demo. i don't have access to a full log file, but very likely its caused by the update to spring 98.0 with this in changelog:
! demofile string in infolog changed "recording demo: %s" -> "Recording demo to: %s"
see also http://springrts.com/phpbb/viewtopic.php?f=64&t=32653
Probably triggered by lobby server upgrade. Other two SPADS instances were unaffected and this one starts normally without problems after killing it.
Use of uninitialized value $bot in hash element at ./spads.pl line 3826.
Use of uninitialized value $groupNb in array element at ./spads.pl line 3824.
Use of uninitialized value $groupNb in array element at ./spads.pl line 3825.
Use of uninitialized value $bot in hash element at ./spads.pl line 3825.
Use of uninitialized value in addition (+) at ./spads.pl line 3825.
Use of uninitialized value $bot in hash element at ./spads.pl line 3826.
Use of uninitialized value $groupNb in array element at ./spads.pl line 3826.
Use of uninitialized value $bot in hash element at ./spads.pl line 3826.
Use of uninitialized value $groupNb in array element at ./spads.pl line 3824.
Use of uninitialized value $groupNb in array element at ./spads.pl line 3825.
Use of uninitialized value $bot in hash element at ./spads.pl line 3825.
Use of uninitialized value in addition (+) at ./spads.pl line 3825.
Use of uninitialized value $bot in hash element at ./spads.pl line 3826.
Use of uninitialized value $groupNb in array element at ./spads.pl line 3826.
Use of uninitialized value $bot in hash element at ./spads.pl line 3826.
Use of uninitialized value $groupNb in array element at ./spads.pl line 3824.
Use of uninitialized value $groupNb in array element at ./spads.pl line 3825.
...
http://springrts.com/phpbb/viewtopic.php?f=64&t=31984
Apparently a known issue :-(
[1:58:08 PM] Shock_Wave hi
[1:58:18 PM] about the cpu usage of spring-dedicated
[1:58:32 PM] there is a wrong argue passing somewhere
[1:58:47 PM] the scheduler yeld is called with 1 nanosecond, instead of 1 millisecond
[1:59:01 PM](i think should be 1 msec)
[1:59:22 PM] [Evo]Forboding_Angel How to fix?
[1:59:36 PM] Shock_Wave recompiling the engine
[1:59:50 PM] should not cause desync errors
[2:00:20 PM] but i don't know where is the bug, just launched a debugging session
[2:00:36 PM] *** The time is now 2:00:36 PM PDT
[2:01:30 PM] [Evo]Forboding_Angel :-/
[2:01:30 PM] Shock_Wave maybe at the end of this week we'll look into the engine, for a workaroud
[2:01:42 PM] [Evo]Forboding_Angel Are you bibim?
[2:01:45 PM] Shock_Wave no
[2:01:49 PM] we are waiting bibim
[2:01:55 PM] for spads eating all RAM
[2:02:03 PM] [Evo]Forboding_Angel Ok, so it's not jsut me then
[2:02:20 PM] Shock_Wave yep that is an huge problem for our machines
[2:02:26 PM] :(
[2:02:36 PM] [Evo]Forboding_Angel With all these players, It's pwning my server
[2:02:45 PM] Shock_Wave i had to kill 6 rooms
[2:02:53 PM] otherwise the OOM killer starts
[2:03:16 PM] with unpredictable and undesiderable effects :(
[2:03:29 PM] [Evo]Forboding_Angel Thanks for the info :-/
[2:03:39 PM] Much appreciated. I thought it was jsut me.
[2:03:42 PM] Shock_Wave you are not alone :(
Hi
I have upgraded one of my servers to ubuntu 16.10 and comes with gcc g++ 6.20
this error is shown when generating unitsync
`1/3 - Please enter the absolute path of the unitsync library (libunitsync.so) [] ? /home/spring/.spring/engine/103.0.1-273-gb0974d8 develop/libunitsync.so
NOTICE - [SpadsInstaller] Generating Perl Unitsync interface module
In file included from /usr/include/c++/6/cmath:42:0,
from /usr/include/c++/6/math.h:36,
from PerlUnitSync_wrap.c:732:
/usr/include/c++/6/bits/cpp_type_traits.h:145:12: error: redefinition of ‘struct std::__is_integer<char>’
struct __is_integer<char>
^~~~~~~~~~~~~~~~~~
/usr/include/c++/6/bits/cpp_type_traits.h:138:12: error: previous definition of ‘struct std::__is_integer<char>’
struct __is_integer<bool>
^~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/bits/move.h:57:0,
from /usr/include/c++/6/bits/stl_pair.h:59,
from /usr/include/c++/6/bits/stl_algobase.h:64,
from /usr/include/c++/6/bits/char_traits.h:39,
from /usr/include/c++/6/string:40,
from unitsync.h:6,
from PerlUnitSync_wrap.c:1548:
/usr/include/c++/6/type_traits:224:12: error: redefinition of ‘struct std::__is_integral_helper<char>’
struct __is_integral_helper<char>
^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/6/type_traits:220:12: error: previous definition of ‘struct std::__is_integral_helper<char>’
struct __is_integral_helper<bool>
^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/exception:170:0,
from /usr/include/c++/6/new:40,
from /usr/include/c++/6/ext/new_allocator.h:33,
from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33,
from /usr/include/c++/6/bits/allocator.h:46,
from /usr/include/c++/6/string:41,
from unitsync.h:6,
from PerlUnitSync_wrap.c:1548:
/usr/include/c++/6/bits/exception_ptr.h: In member function ‘std::__exception_ptr::exception_ptr::operator char() const’:
/usr/include/c++/6/bits/exception_ptr.h:141:16: error: invalid conversion from ‘void*’ to ‘char’ [-fpermissive]
{ return _M_exception_object; }
^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/exception:171:0,
from /usr/include/c++/6/new:40,
from /usr/include/c++/6/ext/new_allocator.h:33,
from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33,
from /usr/include/c++/6/bits/allocator.h:46,
from /usr/include/c++/6/string:41,
from unitsync.h:6,
from PerlUnitSync_wrap.c:1548:
/usr/include/c++/6/bits/nested_exception.h: In member function ‘void std::nested_exception::rethrow_nested() const’:
/usr/include/c++/6/bits/nested_exception.h:73:11: error: invalid user-defined conversion from ‘const std::__exception_ptr::exception_ptr’ to ‘bool’ [-fpermissive]
if (_M_ptr)
^~~~~~
In file included from /usr/include/c++/6/exception:170:0,
from /usr/include/c++/6/new:40,
from /usr/include/c++/6/ext/new_allocator.h:33,
from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33,
from /usr/include/c++/6/bits/allocator.h:46,
from /usr/include/c++/6/string:41,
from unitsync.h:6,
from PerlUnitSync_wrap.c:1548:
/usr/include/c++/6/bits/exception_ptr.h:140:16: note: candidate is: std::__exception_ptr::exception_ptr::operator char() const <near match>
explicit operator bool() const
^~~~~~~~
/usr/include/c++/6/bits/exception_ptr.h:140:16: note: return type ‘char’ of explicit conversion function cannot be converted to ‘bool’ with a qualification conversion
In file included from /usr/include/c++/6/bits/basic_string.h:5628:0,
from /usr/include/c++/6/string:52,
from unitsync.h:6,
from PerlUnitSync_wrap.c:1548:
/usr/include/c++/6/bits/functional_hash.h: At global scope:
/usr/include/c++/6/bits/functional_hash.h:111:3: error: redefinition of ‘struct std::hash<char>’
_Cxx_hashtable_define_trivial_hash(char)
^
/usr/include/c++/6/bits/functional_hash.h:108:3: error: previous definition of ‘struct std::hash<char>’
_Cxx_hashtable_define_trivial_hash(bool)
^
CRITICAL - [SpadsInstaller] Error during Unitsync wrapper compilation
spring@sserver:~/spads-dev$
thx!
I wasn't here, and infolog.txt was overwritted with next game on server's side.
I did play replay and open the client's side infolog.txt, but It would be so better to have the infolog.txt on server's side.
Maybe it doesn't worth it because it's 97% the same that on client ?
In such a case https://springrts.com/phpbb/viewtopic.php?f=16&t=36547#p584103 , not sure maybe......
Can you 👍
Maybe it is more relevant to spring new feature ENGINE ?
If yes, close it plz and I will mantis or GIT Engine feature.
I recompiled perl with thread support so that I could get the IRC Bridge.
Now spads won't start. Error below
I tried to recompile without threads in an attempt to revert but a test failed - far below. I'm not experienced with perl so I'm not sure which is best to fix
Version
This is perl 5, version 28, subversion 1 (v5.28.1) built for x86_64-linux-thread-multi
Spads Error
NOTICE - [SPADS] Initializing SPADS 0.12.6
CRITICAL - [SPADS] Unable to load PerlUnitSync module (Can't load '/home/uberserver/builds/spads/PerlUnitSync.so' for module PerlUnitSync: /home/uberserver/builds/spads/PerlUnitSync.so: undefined symbol: PL_sv_immortals at /usr/local/lib/perl5/5.28.1/x86_64-linux-thread-multi/DynaLoader.pm line 193.
at /home/uberserver/builds/spads/PerlUnitSync.pm line 11.
Compilation failed in require at (eval 28) line 1.
BEGIN failed--compilation aborted at (eval 28) line 1.
)
Failed Test
t/op/exec ...................................................... # Failed test 17 - at op/exec.t line 114
# $! eq 20, 'Not a directory'
FAILED at test 17
I tried looking through the source, and it seems that the catdir func is not getting anything for instanceDir, so it is trying to create a temp directory in root (which naturally wont succeed :) ). InstanceDir is defined in my main spads.conf as:
Line 54 in e258204
My spads.conf:
etcDir:etc
varDir:var
instanceDir:spads_host14
logDir:log
the spads_host14 folder exists and is rwxrwxrwx
Thank you for looking into this!
There are no plans to forcibly require it any time soon, but it has a few features you might like:
https://springrts.com/phpbb/viewtopic.php?f=64&t=38984&p=589873#p589873
normally playerid s are given to the highest ranked players and then to the lower ones. But this is not the case when teams have more than 8 players
See advplayerlist ingame:
https://i.imgur.com/hB9PtBA.png
for ((;;)); do find-latest .; done
2017-04-19+22:33:29.1996291220 ./install/103.0/SpadsUpdater.lock
2017-04-19+22:33:29.1996291220 ./install/103.0/SpadsUpdater.lock
2017-04-19+22:33:30.1129624620 ./install/103.0/SpadsUpdater.lock
2017-04-19+22:33:30.1129624620 ./install/103.0/SpadsUpdater.lock
2017-04-19+22:33:31.0862958020 ./install/103.0/SpadsUpdater.lock
2017-04-19+22:33:31.1162958020 ./install/103.0/SpadsUpdater.lock
2017-04-19+22:33:31.1162958020 ./install/103.0/SpadsUpdater.lock
2017-04-19+22:33:32.2896291430 ./install/103.0/SpadsUpdater.lock
2017-04-19+22:33:32.2896291430 ./install/103.0/SpadsUpdater.lock
2017-04-19+22:33:32.2896291430 ./install/103.0/SpadsUpdater.lock
2017-04-19+22:33:33.3029624820 ./install/103.0/SpadsUpdater.lock
2017-04-19+22:33:33.3029624820 ./install/103.0/SpadsUpdater.lock
2017-04-19+22:33:34.3062958220 ./install/103.0/SpadsUpdater.lock
...
iotop is hinting at spads.pl as the top writer at ~78 KB/s
seems to be related to unitsync deprecated functions
Previously spads was using 10-30MB ram, constantly. Recently, the usage has risen to 150-200MB ram. i am unsure if it's a memory leak, or some abnormally large file being loaded in ram. I tried to delete chat log, which was the biggest file, but the usage remained the same. User database is only 2 MB large, so i'd tend to exclude it.
SPADS doesn't use the quantization parameter of map/mod options, instead it relies on the minimum and maximum number format: if at least one of the minimum and maximum values contains a ".", then it will allow decimal values. Otherwise it will only allow integers.
This is not correct, instead it should read the "step" value and use it in conjunction with the default and min/max values to deduce the allowed values.
Would it be possible to add a balance "command" that completely bypasses the autobalancer?
e.g. !balance {player1, player2, player3} {player4, player5 + player6}
This would achieve: players 1,2,3 on ally team 1
player 4,5,6 on ally team 2, players 5 and 6 share team-id
game results shouldn't be used when cheating was enabled
(and spads should print an info about this)
fails with error
CRITICAL - [SpadsInstaller] Unable to load Perl Unitsync interface module (Can't locate PerlUnitSync.pm in @inc (you may need to install the PerlUnitSync module) (@inc contains: /home//Desktop/t/spadsInstaller . /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.24.1 /usr/local/share/perl/5.24.1 /usr/lib/x86_64-linux-gnu/perl5/5.24 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.24 /usr/share/perl/5.24 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at (eval 44) line 2, line 3.
BEGIN failed--compilation aborted at (eval 44) line 2, line 3.
CRITICAL - [SpadsInstaller] Unable to load Perl Unitsync interface module (Can't locate PerlUnitSync.pm in @inc (you may need to install the PerlUnitSync module) (@inc contains: /home/*/Desktop/t/spadsInstaller . /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.24.1 /usr/local/share/perl/5.24.1 /usr/lib/x86_64-linux-gnu/perl5/5.24 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.24 /usr/share/perl/5.24 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at (eval 44) line 2, line 3.
BEGIN failed--compilation aborted at (eval 44) line 2, line 3.
I do have PerlUnitSyncInternal.pm but not PerlUnitSync.pm
So I had a strange setting:
I had this setting on:
[ffa]
description:FFA Game Global Settings
battlePreset:ffa
autoBalance:advanced|off|on
nbTeams:16-32
And this caused the spads error below
NOTICE - [SpringLobbyInterface] Connecting to server3.beyondallreason.info:8200
NOTICE - [SpringLobbyInterface] TLS enabled (TLSv1_3,TLS_AES_256_GCM_SHA384)
ERROR - [SPADS] PERL WARNING: Argument "16-32" isn't numeric in multiplication (*) at ../spads.pl line 2413.
ERROR - [SPADS] PERL WARNING: main::getTargetBattleInfo called at ../spads.pl line 2464
ERROR - [SPADS] PERL WARNING: main::updateBattleInfoIfNeeded called at ../spads.pl line 6195
ERROR - [SPADS] PERL WARNING: main::applySettingChange called at ../spads.pl line 6264
ERROR - [SPADS] PERL WARNING: main::applyAllSettings called at ../spads.pl line 6276
ERROR - [SPADS] PERL WARNING: main::applyPreset called at ../spads.pl line 10259
ERROR - [SPADS] PERL WARNING: main::hPreset called at ../spads.pl line 3082
ERROR - [SPADS] PERL WARNING: main::executeCommand called at ../spads.pl line 3009
ERROR - [SPADS] PERL WARNING: main::handleRequest called at ../spads.pl line 13806
ERROR - [SPADS] PERL WARNING: ...
WARNING - [SPADS] Unable to update battle skill of player AKU for new game type, no cached skill available!
Changing this to
[ffa]
description:FFA Game Global Settings
battlePreset:ffa
autoBalance:advanced|off|on
nbTeams:16|16-32
Made things work, and also allowed me to set 17+ players in FFA mode.
Thank you for spads <3
SPADS clients all login to the lobbyserver without using TLS, it would be great if they could make a secure connection? (For host<->engine comms, I don't expect TLS will ever be implemented.)
Hey !
What about adding «pr-downloader
» "exe/bin" into var/spring/10x path in your automanagement ENGINE system for using it ?
I use (actually 103) pr-downloader
with a cron job for automatic MOD update.
Yes I know I can get 104 ENG package 7zip on springrts.com, extracting it somewhere, and make a link. This is what a do actually with 103 ENG.
It's just a question ! ;)
As discussed - KICKFROMBATTLE now exists not just in the host->server direction but also in the server->host direction (currently only on the test lobbyserver)
https://github.com/spring/uberserver/blob/master/protocol/Protocol.py#L2757
The installer fails in non-interactive mode due to the last 3 questions:
$conf{lobbyLogin}=promptString("$currentStep/$nbSteps - Please enter the autohost lobby login (the lobby account must already exist)");
$currentStep++;
$conf{lobbyPassword}=promptString("$currentStep/$nbSteps - Please enter the autohost lobby password");
$currentStep++;
$conf{owner}=promptString("$currentStep/$nbSteps - Please enter the lobby login of the autohost owner");
$currentStep++;
These statements should be run only if the $conf entries are empty and the installer is running in interactive mode. So that we can pass them as arguments or edit the config file afterwards.
number 10000.000000 option limitscore exceeds boundaries 500.000000 5000.000000
today i was trying to move my spads setup from debian to Arch so I started over instead of just copy and paste the files
but I hit this error
$ ./spadsInstaller.pl
This program will install SPADS in the current working directory, overwriting files if needed.
The installer will ask you 14 questions to customize your installation and pre-configure SPADS.
You can stop this installation at any time by hitting Ctrl-c.
Note: if SPADS is already installed on the system, you don't need to reinstall it to run multiple autohosts. Instead, you can share SPADS binaries and use multiple configuration files and/or configuration macros.
1/14 - Which SPADS release do you want to install (stable,testing,unstable,contrib) [testing] ?
NOTICE - [SpadsInstaller] SPADS components are up to date, proceeding with installation...
2/14 - Please enter the absolute path of the unitsync library (libunitsync.so) [] ? /home/spring/.spring/engine/103.0/libunitsync.so
NOTICE - [SpadsInstaller] Generating Perl Unitsync interface module
In file included from /usr/include/c++/6.1.1/cmath:42:0,
from /usr/include/c++/6.1.1/math.h:36,
from PerlUnitSync_wrap.c:734:
/usr/include/c++/6.1.1/bits/cpp_type_traits.h:145:12: error: redefinition of 'struct std::__is_integer<char>'
struct __is_integer<char>
^~~~~~~~~~~~~~~~~~
/usr/include/c++/6.1.1/bits/cpp_type_traits.h:138:12: error: previous definition of 'struct std::__is_integer<char>'
struct __is_integer<bool>
^~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6.1.1/bits/move.h:57:0,
from /usr/include/c++/6.1.1/bits/stl_pair.h:59,
from /usr/include/c++/6.1.1/bits/stl_algobase.h:64,
from /usr/include/c++/6.1.1/bits/char_traits.h:39,
from /usr/include/c++/6.1.1/string:40,
from unitsync.h:6,
from PerlUnitSync_wrap.c:1550:
/usr/include/c++/6.1.1/type_traits:217:12: error: redefinition of 'struct std::__is_integral_helper<char>'
struct __is_integral_helper<char>
^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/6.1.1/type_traits:213:12: error: previous definition of 'struct std::__is_integral_helper<char>'
struct __is_integral_helper<bool>
^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6.1.1/exception:170:0,
from /usr/include/c++/6.1.1/new:40,
from /usr/include/c++/6.1.1/ext/new_allocator.h:33,
from /usr/include/c++/6.1.1/x86_64-pc-linux-gnu/bits/c++allocator.h:33,
from /usr/include/c++/6.1.1/bits/allocator.h:46,
from /usr/include/c++/6.1.1/string:41,
from unitsync.h:6,
from PerlUnitSync_wrap.c:1550:
/usr/include/c++/6.1.1/bits/exception_ptr.h: In member function 'std::__exception_ptr::exception_ptr::operator char() const':
/usr/include/c++/6.1.1/bits/exception_ptr.h:141:16: error: invalid conversion from 'void*' to 'char' [-fpermissive]
{ return _M_exception_object; }
^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6.1.1/exception:171:0,
from /usr/include/c++/6.1.1/new:40,
from /usr/include/c++/6.1.1/ext/new_allocator.h:33,
from /usr/include/c++/6.1.1/x86_64-pc-linux-gnu/bits/c++allocator.h:33,
from /usr/include/c++/6.1.1/bits/allocator.h:46,
from /usr/include/c++/6.1.1/string:41,
from unitsync.h:6,
from PerlUnitSync_wrap.c:1550:
/usr/include/c++/6.1.1/bits/nested_exception.h: In member function 'void std::nested_exception::rethrow_nested() const':
/usr/include/c++/6.1.1/bits/nested_exception.h:73:11: error: invalid user-defined conversion from 'const std::__exception_ptr::exception_ptr' to 'bool' [-fpermissive]
if (_M_ptr)
^~~~~~
In file included from /usr/include/c++/6.1.1/exception:170:0,
from /usr/include/c++/6.1.1/new:40,
from /usr/include/c++/6.1.1/ext/new_allocator.h:33,
from /usr/include/c++/6.1.1/x86_64-pc-linux-gnu/bits/c++allocator.h:33,
from /usr/include/c++/6.1.1/bits/allocator.h:46,
from /usr/include/c++/6.1.1/string:41,
from unitsync.h:6,
from PerlUnitSync_wrap.c:1550:
/usr/include/c++/6.1.1/bits/exception_ptr.h:140:16: note: candidate is: std::__exception_ptr::exception_ptr::operator char() const <near match>
explicit operator bool() const
^~~~~~~~
/usr/include/c++/6.1.1/bits/exception_ptr.h:140:16: note: return type 'char' of explicit conversion function cannot be converted to 'bool' with a qualification conversion
In file included from /usr/include/c++/6.1.1/bits/basic_string.h:5628:0,
from /usr/include/c++/6.1.1/string:52,
from unitsync.h:6,
from PerlUnitSync_wrap.c:1550:
/usr/include/c++/6.1.1/bits/functional_hash.h: At global scope:
/usr/include/c++/6.1.1/bits/functional_hash.h:111:3: error: redefinition of 'struct std::hash<char>'
_Cxx_hashtable_define_trivial_hash(char)
^
/usr/include/c++/6.1.1/bits/functional_hash.h:108:3: error: previous definition of 'struct std::hash<char>'
_Cxx_hashtable_define_trivial_hash(bool)
^
CRITICAL - [SpadsInstaller] Error during Unitsync wrapper compilation
... otherwise the losing team can call a stop vote and if they are lucky, the winning team will be too busy winning to vote no.
Is there a way to assign required minimum participation per specific vote?
this is not supported by lobbyserver/lobbyprotocol, this is what it sends for example:
user EvoRTSDedicated3 in this case.
SAYPRIVATE SpringLobbyMonitor � ���� SZ€³����startTs SZ†›����endTs�Team����type undecided����result����������bots�96����engine�����������������allyTeam�����loseTime90.209.151.42����ip�254340��� accountId�€����winDemoner450����name�����team�������3����team�greenys6����name�908068��� accountId�‚����win�1����allyTeam�����loseTime105.236.96.55����ip�������€����win�260762��� accountId�_Fire����name�����team�����ip�����loseTime�����allyTeam�������907154��� accountId�‚����win�2����team yellowguy����name�����loseTime41.135.106.12����ip�1����allyTeam�����������loseTime2.234.141.78����ip�0����allyTeam�TheCazziator33����name�0����team�261133��� accountId�‚����win����players ��������duration 18815a53534ebbc90ddf560d1cdf4421����gameId�1v2��� structure
BAR uses two sets of command files, both start with importing the entire {commands.conf}
https://github.com/beyond-all-reason/spads_config_bar/blob/main/etc/commands_default.conf
commands_default.conf
is used by the global default preset [team], thus I assume it is also picked up for the presets [ffa], [coop], [duel] and [tourney] as well. This uses the usual regular command permissions.
[kick]
battle,pv,game:player:|100:0
::|100:
https://github.com/beyond-all-reason/spads_config_bar/blob/main/etc/commands_custom.conf
commands_custom.conf
is used only in the global preset [custom], and is intended to make sure that non-bossed players cannot vote out the boss, and cant vote for kick or other commands, so their votelevel is set to 0.
[kick]
battle,pv,game:player:|100:10
::|100:
Expected behavior:
[custom]
!kick commands from the boss should not trigger a vote.
[all others]
!kick commands from the boss should not trigger a vote.
Observed behavior
[team]
Boss saying !kick triggers a vote
[ffa]
Boss saying !kick triggers a vote
[coop]
Boss saying !kick triggers a vote
[duel]
Boss saying !kick triggers a vote
[tourney]
Boss saying !kick triggers a vote
[custom]
Boss saying !kick does not trigger a vote
Hi
My autohost worked fine with my maps <---- ( not true anymore) (based on map-blueprint and mapconvng)
but having some other maps like "TMA-0 v1_1" break the bot
starting the bot:
NOTICE - [SPADS] Initializing SPADS 0.11.39
/usr/bin/perl: symbol lookup error: /home/spring/spads-develop/PerlUnitSync.so: undefined symbol: GetMapWidth
thx!
Gets stuck doing this:
jools@spring1:~/berries$ perl spads.pl etc/semprini.conf
NOTICE - [SPADS] Initializing SPADS 0.12.2a
NOTICE - [SPADS] Loading Spring archives using unitsync library version 98 ..
Also when reinstalling it gets stuck on loading this:
ble,testing,unstable,...) [104.0] ? 103.0
NOTICE - [SpadsInstaller] Spring 103.0 is already installed
NOTICE - [SpadsInstaller] SPADS components are up to date, proceeding with installation...
NOTICE - [SpadsInstaller] Perl Unitsync interface module already exists, skipping generation (use "-g" flag to force generation)
7/15 - Please enter the absolute path of the Spring data directory containing the games and maps hosted by the autohost, or enter "new" to use a new directory instead [/home/jools/.spring] ? /ho^[OD^[OD^[OD^H^H^H^H^H^H
7/15 - Please enter the absolute path of the Spring data directory containing the games and maps hosted by the autohost, or enter "new" to use a new directory instead [/home/jools/.spring] ? /home/jools/data
NOTICE - [SpadsInstaller] Checking Perl Unitsync interface module...
I have 4 autohosts using the same etc and var conf, but different instances.
https://springrts.com/phpbb/viewtopic.php?f=88&t=42658
Spads 64bit
Post by Forboding Angel » Fri Jan 01, 2021 2:19 pm
Awesome. Lost my entire post. Thanks tab suspender that isn't smart enough not to close tabs on pages with forms.
So long story short. Moving to 64bit. Uninstall strawberry perl 32bit, install strawberry perl 64bit. Look in documentation for if I need to do anything for spads 64bit. Can't find anything. Run spads with no issues. Spads auto managed stuff is set to 105.0. Downloads 32bit. Ruh roh. So I go looking again for threads on 64bit spads and come up mostly empty.
Switch to non-automanaged spring version pointing to 105.0 64bit dedicated. Server starts with zero issues.
Am I missing something here?
/-//-//-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/
Re: Spads 64bit
Post by abma » Fri Jan 01, 2021 9:45 pm
assuming you are using spads on windows: a quick look into the source code of spads leads to this:
https://github.com/Yaribz/SPADS/blob/1a ... ter.pm#L40
it seems spads has a hardcoded 32 bit windows: i guess because when this code was written, the win64 bit executable didn't exist:
either hope that bibim sees this thread or create an issue please at https://github.com/Yaribz/SPADS/issues
(I cannot find the replay_upload.py file in the repo, or I'd made a PR.)
Please ship a updated version of replay_upload.py: dansan/spring-replay-site@f6d48f5
Thank you
It looks to me as though https://github.com/Yaribz/SPADS/blob/master/src/spads.pl#L2045 will trigger and autolock the battle whenever nbClients > conf{autoLockClients}, even if conf{autoLock} itself is set to off. By default, according to http://planetspads.free.fr/spads/doc/spadsDoc.html this will bite as soon as there are 32 or more clients connected.
I'm not sure if this effect was intended, but if I'm right then I think it has confused the current BA hosters.
ubutnu 16.04 + docker-ce
here is the DockerFile
FROM alpine
MAINTAINER TurBoss
RUN apk add --update perl perl-dev swig g++
RUN mkdir -p /opt/spads
RUN wget https://github.com/Yaribz/SPADS/raw/master/src/spadsInstaller.pl -P /opt/spads/
RUN wget https://github.com/Yaribz/SPADS/raw/master/src/SpadsUpdater.pm -P /opt/spads/
RUN wget https://github.com/Yaribz/SPADS/raw/master/src/PerlUnitSync.pm -P /opt/spads/
RUN wget https://github.com/Yaribz/SimpleLog/raw/master/SimpleLog.pm -P /opt/spads/
RUN wget https://github.com/Yaribz/SimpleEvent/raw/master/SimpleEvent.pm -P /opt/spads/
RUN wget https://github.com/Yaribz/SpringLobbyInterface/raw/master/SpringLobbyInterface.pm -P /opt/spads/
RUN wget https://github.com/Yaribz/SpringAutoHostInterface/raw/master/SpringAutoHostInterface.pm -P /opt/spads/
RUN perl /opt/spads/spadsInstaller.pl
CMD perl /opt/spads/spads.pl /opt/spads/etc/spads.conf
~
and the resulting error
Step 12/13 : RUN perl /opt/spads/spadsInstaller.pl
---> Running in 9c6f8ee07765
This program will install SPADS in the current working directory, overwriting files if needed.
The installer will ask you 15 questions maximum to customize your installation and pre-configure SPADS.
You can stop this installation at any time by hitting Ctrl-c.
Note: if SPADS is already installed on the system, you don't need to reinstall it to run multiple autohosts. Instead, you can share SPADS binaries and use multiple configuration files and/or configuration macros.
1/15 - Which SPADS release do you want to install (stable,testing,unstable,contrib) [testing] ?
20171229022946 - INFO - [SpadsUpdater] Updating package "getDefaultModOptions.pl" to "getDefaultModOptions_0.6.pl"
20171229022946 - INFO - [SpadsUpdater] Updating package "help.dat" to "help_0.13.1.dat"
20171229022946 - INFO - [SpadsUpdater] Updating package "helpSettings.dat" to "helpSettings_0.6.0.dat"
20171229022946 - INFO - [SpadsUpdater] Updating package "SpringAutoHostInterface.pm" to "SpringAutoHostInterface_0.11.pm"
20171229022946 - INFO - [SpadsUpdater] Updating package "SpringLobbyInterface.pm" to "SpringLobbyInterface_0.23.pm"
20171229022946 - INFO - [SpadsUpdater] Updating package "SimpleEvent.pm" to "SimpleEvent_0.1c.pm"
20171229022947 - INFO - [SpadsUpdater] Updating package "SimpleLog.pm" to "SimpleLog_0.7.pm"
20171229022947 - INFO - [SpadsUpdater] Updating package "spads.pl" to "spads_0.12.2a.pl"
20171229022947 - INFO - [SpadsUpdater] Updating package "SpadsConf.pm" to "SpadsConf_0.12.0a.pm"
20171229022947 - INFO - [SpadsUpdater] Updating package "spadsInstaller.pl" to "spadsInstaller_0.21.pl"
20171229022947 - INFO - [SpadsUpdater] Updating package "SpadsUpdater.pm" to "SpadsUpdater_0.13a.pm"
20171229022948 - INFO - [SpadsUpdater] Updating package "SpadsPluginApi.pm" to "SpadsPluginApi_0.22a.pm"
20171229022948 - INFO - [SpadsUpdater] Updating package "update.pl" to "update_0.11.pl"
20171229022948 - INFO - [SpadsUpdater] Updating package "argparse.py" to "argparse-1.2.1.py"
20171229022948 - INFO - [SpadsUpdater] Updating package "replay_upload.py" to "replay_upload_0.6.py"
20171229022948 - INFO - [SpadsUpdater] Updating package "7za" to "7za-16.2"
20171229022949 - NOTICE - [SpadsUpdater] 16 package(s) updated
20171229022949 - NOTICE - [SpadsInstaller] Restarting installer after update...
20171229022951 - NOTICE - [SpadsInstaller] SPADS components are up to date, proceeding with installation...
2/15 - Please choose the directory where SPADS configuration files will be stored [etc] ?
20171229022951 - NOTICE - [SpadsInstaller] Directory "/opt/spads/etc" created
20171229022951 - NOTICE - [SpadsInstaller] Directory "/opt/spads/etc/templates" created
3/15 - Please choose the directory where SPADS dynamic data will be stored [var] ?
20171229022951 - NOTICE - [SpadsInstaller] Directory "/opt/spads/var" created
20171229022951 - NOTICE - [SpadsInstaller] Directory "/opt/spads/var/plugins" created
20171229022951 - NOTICE - [SpadsInstaller] Directory "/opt/spads/var/spring" created
4/15 - Please choose the directory where SPADS will write the logs [log] ?
20171229022951 - NOTICE - [SpadsInstaller] Directory "/opt/spads/var/log" created
20171229022951 - NOTICE - [SpadsInstaller] Directory "/opt/spads/var/log/chat" created
5/15 - Do you want to use official Spring binary files (auto-managed by SPADS), or a custom Spring installation already existing on the system? (official,custom) [official] ?
20171229022951 - NOTICE - [SpadsInstaller] Checking available Spring versions...
Available Spring versions:
104.0.1
104.0.1-448-g243c5dd [UNSTABLE] (latest develop version)
104.0.1-446-gcb2e6d5
104.0.1-445-g6d402aa
104.0.1-443-ga67d7cc
104.0.1-442-gd5228b6
[...]
104.0 [STABLE] (recommended release) + [TESTING] (next release candidate)
103.0
102.0
101.0
100.0
[...]
Please choose the Spring version which will be used by the autohost.
If you choose "stable", "testing" or "unstable", SPADS will stay up to date with the corresponding official Spring release by automatically downloading and using new Spring binary files when needed.
If you choose a specific Spring version number ("104.0", "104.0.1-448-g243c5dd", ...), SPADS will stick to this version until you manualy change it in the configuration file.
6/15 - Which Spring version do you want to use (104.0,104.0.1-448-g243c5dd,stable,testing,unstable,...) [104.0] ?
20171229022952 - INFO - [SpadsUpdater] Created new directory "/opt/spads/var/spring/104.0-linux64" for Spring installation
20171229022952 - NOTICE - [SpadsUpdater] Installing Spring 104.0 into "/opt/spads/var/spring/104.0-linux64"...
20171229022954 - NOTICE - [SpadsUpdater] Spring 104.0 installation complete.
20171229022955 - NOTICE - [SpadsInstaller] SPADS components are up to date, proceeding with installation...
20171229022955 - NOTICE - [SpadsInstaller] Generating Perl Unitsync interface module...
7/15 - Please enter the absolute path of the Spring data directory containing the games and maps hosted by the autohost, or press enter to use a new directory instead [new] ?
20171229022957 - NOTICE - [SpadsInstaller] Retrieving the list of games available for download...
20171229022959 - WARNING - [SpadsInstaller] Unable to retrieve archives list for game Zero-K
20171229022959 - NOTICE - [SpadsInstaller] Directory "/opt/spads/var/spring/data/games" created
Directory "/opt/spads/var/spring/data/games" has been created to store the games used by the autohost.
You can download one of the following games in this directory automatically by entering the corresponding game abreviation, or you can choose to manually place some games archives there then enter "none" when finished:
ba : Balanced Annihilation V9.46
bac : BA Chicken Defense V3.23
evo : Evolution RTS v10.97
jauria : Jauria RTS 0.6.7
metalfactions : Metal Factions v0.991
nota : NOTA 1.92
phoenix : Phoenix Annihilation V1.01
s44 : Spring: 1944 3.00
swiw : Imperial Winter b63
tard : Robot Defense v3.05.7
tc : The Cursed 1.437
techa : Tech Annihilation v3.05.0
xta : XTA 9.752
8/15 - Which game do you want to download to initialize the autohost "games" directory (ba,bac,evo,jauria,metalfactions,nota,phoenix,s44,swiw,tard,tc,techa,xta,none) [ba] ?
20171229022959 - NOTICE - [SpadsInstaller] Downloading Balanced Annihilation V9.46...
20171229023002 - NOTICE - [SpadsInstaller] File ba-V9.46.sdz downloaded.
20171229023002 - NOTICE - [SpadsInstaller] Directory "/opt/spads/var/spring/data/maps" created
Directory "/opt/spads/var/spring/data/maps" has been created to store the maps used by the autohost.
You can download a minimal set of 3 maps ("Red Comet", "Comet Catcher Redux" and "Delta Siege Dry") in this directory automatically, or you can choose to manually place some maps archives there then enter "no" when finished.
9/15 - Do you want to download a minimal set of 3 maps to initialize the autohost "maps" directory (yes,no) [yes] ?
20171229023002 - NOTICE - [SpadsInstaller] Downloading maps...
20171229023005 - NOTICE - [SpadsInstaller] Checking Perl Unitsync interface module...
20171229023005 - CRITICAL - [SpadsInstaller] Unable to load Perl Unitsync interface module (Can't locate Win32.pm in @INC (you may need to install the Win32 module) (@INC contains: /opt/spads /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.24.1 /usr/local/share/perl/5.24.1 /usr/lib/x86_64-linux-gnu/perl5/5.24 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.24 /usr/share/perl/5.24 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /opt/spads/PerlUnitSync.pm line 26.
BEGIN failed--compilation aborted at /opt/spads/PerlUnitSync.pm line 26.
Compilation failed in require at (eval 22) line 2.
BEGIN failed--compilation aborted at (eval 22) line 2.
)
The command '/bin/sh -c perl /opt/spads/spadsInstaller.pl' returned a non-zero code: 1
Thanks
https://paste.pound-python.org/show/gNaNgr4XylqQENWBgpXX/
spads should report the reason why it thinks the connection is broken with the default logging level. without its not possible to investigate fix / change / improve something.
When numbers of players are reached from nbTeams / Teamsize exactly.
With this, it avoids %p (nil) value taking a blank space in the message, like on BlackHoleHost2 for instance below :
[16:53:55] * BlackHoleHost2 * player(s) needed for battle "The BlackHoleHost - Revenge" [Balanced Annihilation V9.43, DeltaSiegeDry] ([AFUS]Ares)
[16:54:32] * [FAST]AutoHost1 * 60 player(s) needed for battle "** Tech Annihilation **" [Tech Annihilation v2.41.0, techno lands 3v3 v2] ([DIE]Vatermoerder)
You can, for instance, reject !promote command with a message like :
Promote command is not needed, game is already full.
Reported ("talked" exactly) here > https://springrts.com/phpbb/viewtopic.php?f=92&t=36420&p=583721#p583721
Originally posted in https://springrts.com/mantis/view.php?id=4362, relayed over here:
The issue is that the autohost (it seems) sometimes shuts down the server too soon, it doesn't give enough time for explosions to calm down even after the game has declared game over.
Is this controllable from spads with some setting?
Why does this number have to be greater than 2? Does it take gaia team into account? I am opening this issue as it did not print statistics after multiple 1v1 games and there are no comments near that line explaining the >2.
https://github.com/Yaribz/SPADS/blob/master/src/spads.pl#L12733
spads.pl(stable):12653 if($nbTeamStats > 2 && $conf{endGameAwards}) {
when and why does this happens?
log of such an event:
Would it be possible to add a command to adjust resource bonuses? I haven't found a way to do so yet (without adding code).
Negative bonuses as well if possible.
In console, I discover that Spads gave me back the prompt :
NOTICE - [SPADS] Spring archives have been modified 1 minute and 26 seconds ago, auto-reloading archives...
Can't use an undefined value as an ARRAY reference at ./spads.pl line 1234.
Last line in spads.log :
20170930160204 - NOTICE - [SPADS] Spring archives have been modified 1 minute and 26 seconds ago, auto-reloading archives...
And the line on spads.pl 0.12.2 (or 0.12.2a) is
return 0 unless @{$r_availableMods};
hello:
Today I upgraded my Arch server
seems that new perl is used and is not able to locate local modules like SimpleEvent and SimpleLog when launching spads
This is perl 5, version 26, subversion 0 (v5.26.0) built for x86_64-linux-thread-multi
spads shows
Can't locate SimpleEvent.pm in @INC (you may need to install the SimpleEvent module) (@INC contains: /usr/lib/perl5/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/core_perl /usr/share/perl5/core_perl) at ./spads.pl line 38.
BEGIN failed--compilation aborted at ./spads.pl line 38.
Thanks
In console, I discover some Perl' Spads warnings in the console :
ERROR - [SPADS] PERL WARNING: Use of uninitialized value $data{"access"} in string eq at .../SpadsServeur/SpadsConf.pm line 537.
ERROR - [SPADS] PERL WARNING: Use of uninitialized value $data{"country"} in string eq at .../SpadsServeur/SpadsConf.pm line 537.
ERROR - [SPADS] PERL WARNING: Use of uninitialized value $data{"cpu"} in string eq at .../SpadsServeur/SpadsConf.pm line 537.
ERROR - [SPADS] PERL WARNING: Use of uninitialized value $data{"bot"} in string eq at .../SpadsServeur/SpadsConf.pm line 537.
WARNING - [SPADS] Disconnecting from lobby server (broken connection detected)
NOTICE - [SPADS] Lobby server default engine is Spring 104, UnitSync is using Spring 103
NOTICE - [SPADS] TrueSkill service available
WARNING - [SPADS] Disconnected from lobby server (timeout)
NOTICE - [SPADS] Lobby server default engine is Spring 104, UnitSync is using Spring 103
NOTICE - [SPADS] TrueSkill service available
NOTICE - [SPADS] Spring archives have been modified 1 minute and 19 seconds ago, auto-reloading archives...
Last lines in spads.log :
20171004033722 - ERROR - [SPADS] PERL WARNING: Use of uninitialized value $data{"access"} in string eq at .../SpadsServeur/SpadsConf.pm line 537.
20171004033722 - ERROR - [SPADS] PERL WARNING: Use of uninitialized value $data{"country"} in string eq at .../SpadsServeur/SpadsConf.pm line 537.
20171004033722 - ERROR - [SPADS] PERL WARNING: Use of uninitialized value $data{"cpu"} in string eq at .../SpadsServeur/SpadsConf.pm line 537.
20171004033722 - ERROR - [SPADS] PERL WARNING: Use of uninitialized value $data{"bot"} in string eq at .../SpadsServeur/SpadsConf.pm line 537.
20171004033722 - INFO - [SPADS] Request to join battle denied for user wen001
20171004033723 - WARNING - [SPADS] Disconnecting from lobby server (broken connection detected)
20171004033723 - NOTICE - [SpringLobbyInterface] Disconnecting from lobby.springrts.com:8200
20171004033724 - NOTICE - [SpringLobbyInterface] Connecting to lobby.springrts.com:8200
20171004033724 - NOTICE - [SPADS] Lobby server default engine is Spring 104, UnitSync is using Spring 103
And the line on spads.conf is
next if($data{$field} eq '');
Seems that happened because the connexion to lobby were falling down or it's for another reason maybe ?
I reported it here because I saw this log on only 1 of the 16 hosts.
Some of the others showed broken connexion detected
messages, some others with extra message
ERROR - [SPADS] Unable to open battle (To few arguments: 4)
Yop !
Today, I restarted autohost [ACE]Ticots (remind : ustable), and I received an error in the console at the end :
NOTICE - [SPADS] Initializing SPADS 0.12.2a
NOTICE - [SPADS] Loading Spring archives using unitsync library version 104 ...
WARNING - [SPADS] Spring archives loading process took 2 minutes and 32 seconds
NOTICE - [SPADS] Spring server mode: dedicated
NOTICE - [SimpleEvent] Event loop initialized using internal model
NOTICE - [SPADS] <AutoSpec> Plugin loaded (version 0.1)
NOTICE - [SPADS] <CustomAliases> Plugin loaded (version 0.1): 77 aliases configured
NOTICE - [SPADS] <DownloadArchives> Plugin loaded (version 0.1)
NOTICE - [SPADS] <Resign> Plugin loaded (version 0.2)
NOTICE - [SPADS] <InGameMute> Plugin loaded (version 0.4)
NOTICE - [SPADS] <Poke> Plugin loaded (version 0.2)
NOTICE - [SPADS] <PreventVoteExploit> Plugin loaded (version 0.4)
NOTICE - [SimpleEvent] Starting event loop...
NOTICE - [SPADS] TrueSkill service available
ERROR - [SPADS] PERL WARNING: Use of uninitialized value in string eq at /home/.../SpadsConf.pm line 2235.
If you want me publishing extra logs, plz remind me how to enable, I will post it back as soon as I can.
spads fails to boot with spring version later than 104.0.1-413-gd902a7b maintenance
Spring 104.0.1-430-g4bab202 maintenance, unitsync.log:
https://pastebin.com/5NqEzUYj
Spring 104.0.1-427-g4757d3c maintenance, unitsync.log:
https://pastebin.com/EABJAABN
Spring 104.0.1-413-gd902a7b maintenance , unitsync.log:
https://pastebin.com/Qj1Prtmr
Spring 104.0.1-287-gf7b0fcc maintenance, unitsync.log:
https://pastebin.com/LfqszLrQ
In Spring context where anyone can create any number of accounts easily, it's hard to ensure vote uniqueness: players can exploit the vote system easily by creating multiple accounts and then using them to vote in SPADS autohosts.
It should be quite easy to make a small plugin to prevent multiple votes from same IP address for newbie ranked accounts (i.e. if any account with a given IP address has already voted, all other newbie ranked accounts from same IP address are removed from the list of remaining voters).
This would NOT prevent vote system exploits, it would just make them a bit harder, forcing exploiters to use several VPNs at the same time for example.
Could something be done about these messages? I doubt any newbie would know that in some context
"you are not allowed to call command "start" in current context."
means "you are not allowed to call command "start" while being a spectator"
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.