oarcinae / factorioscenariomultiplayerspawn Goto Github PK
View Code? Open in Web Editor NEWA custom scenario for Factorio which provides each player a unique starting spawn point in a multiplayer game.
License: MIT License
A custom scenario for Factorio which provides each player a unique starting spawn point in a multiplayer game.
License: MIT License
Add interactive request with approval from spawn host when players request to join.
Possible flow:
Menu navigation will be tricky to make sure there are no edge cases.
This is tricky because extra vanilla spawns need to be set at the start of map gen.
I could pre-allocate a few and the first players to use them get to keep them.
Wild idea, but would be nice to create a mod that is at least compatible with something like RSO...
I haven't done any actual mods before.
Break down map config settings into just the few vars that need configuring.
Build the map_settings table somewhere else.
ore generation overlaps with spawn - Philip017 found this issue.
I have a planned fix to change the RSO spawning.
I will remove a lot of the fluff that I added, cut unused or unnecessary features, possibly trim down GUI as well. Definitely will remove RSO and any most "soft mods".
Not sure if this is possible via the API and if not maybe we can put a request in since there is more chance of it getting added in 0.15.
But I like to see peoples name / color rather then just a red dot.
With shared vision it's not too bad but once I place tons and tons of radars, etc it's almost impossible to find them via the map. I experienced this a lot in 0.15.
It needs a 1 hour cool down.
It should drop ALL items before it teleports you to the new location.
Only enabled after you have been playing for at least 1 hour.
Only can enable others to join you after at least 1 hour.
Questions:
Should I allow changing your respawn point? To another base?
If regrowth is disabled and a player leaves in their first five minutes after creating a new base, separate_spawns.lua will try to mark their base for regrowth cleanup and crash immediately due to referencing a nil index.
Add a configuration option/setting to give player certain items to ensure they can survive when joining at a higher global evolution (late to the game)
Unknown cause, saw this on my server, not sure about the NFO one.
If it gets reproduced in later versions of this scenario, I need to figure out what is causing it and fix it.
Need to find root cause even if it's not in the scenario code
This is an amazing scenario for when I want to play with my friends, so amazing that it's basically essential for us now.
However, we're trying to widen our mod usage to include Angel's mods, which seems to cause some troubles with generating the map because Angel's Refining replaces iron and copper.
Is there a way to add support for it? Can I do it myself?
Thanks!
I like to think I'm not an idiot, but a normal blueprint mod shows up in the top left. All I have is "Tag" and "Spawn" but nothing about a blueprint. Am I missing something?
Screenshot of the error.
Game is: 0.14.23.
Grabbed the locale zip and the scenario zip from the master branch of each.
After installing:
Used default presets; no mods apart from the scenario. Config is modified: disabled long reach, undecorator, regrowth.
Crash log is here
Reduce number of trees.
Reduce biters? Might affect gameplay :(
Remove chunks after a certain period of time? Especially uncharted ones.
Hello,
I have a problem when i restart my server (for updating and backuping) the map is still the same BUT when i respawn it promot me to create a new base but my old base is still there. How can i fix it that after restart i go in my lastest base again?
Thanks
Poli
Hi,
when you disable RSO in the config.lua and you generate a spawn far away the game/server crashes
2018-10-14 12:05:04 [JOIN] xkuyax joined the game
34.702 Error MainLoop.cpp:1035: Exception at tick 1141: Error while running event level::on_tick (ID 0)
...10/factorio/temp/currently-playing/locale/oarc_utils.lua:1091: attempt to index local 'surface' (a nil value)
34.702 Error ServerMultiplayerManager.cpp:96: MultiplayerManager failed: "Error while running event level::on_tick (ID 0)
...10/factorio/temp/currently-playing/locale/oarc_utils.lua:1091: attempt to index local 'surface' (a nil value)"
Configuration: https://hastebin.com/tiduholuta.makefile
And no resources around. Does anyone know how to fix it?
Things have gotten confusing with multiple files calling events.
Using event.lua obscures the handling of functions in event calls.
For example, since both RSO and my separate spawns touch chunk generation, it can be a big problem if RSO is called AFTER my separate spawns chunk generation...
I'm thinking about moving all event calls into control.lua to be in a single place so that multiple functions that need be called in the same event can be ordered correctly.
If a player joins a shared spawn, but the host leaves it within the 5 minute period. I think it might screw up the spawn for the other player. I need to verify this
Having other forces makes GUIs and other functions way too complicated.
If this can be implemented as an optional feature cleanly, I'd still like to include it. But for now, I think I should clean it out since it's not even being used.
Hey bro,
THANKS for your work
Finish :)
Poli
Not sure about this... the "close" spawn option is not very obvious as to what it means.
I'd rather have a main base option, and only a far option?
I'm not sure if this option already exists but if not it would be great to have it.
I'm in a situation where I didn't realize that how hard far spawns are due to biters being so dense and tough. I've passed the 15 minute mark so I can't just leave and have the server erase my character for me. I'm wondering if there's code already written to delete characters and spawns if there would be a way to run that script manually at any time? Sort of like a hard restart button where it erases everything you own and your character and it's like you're entering the server for the very first time?
please
it better to edit default settings
Add config options for shared vision.
Make it so players have an option (only at the start of the game) to join their own team/force so they have their own tech tree.
I had to download a previous locale version (the one before the 0.15 compatibility commit), maybe add some release files for version 0.14?
RSO as a mod doesn't play well with my scenario, it's better to do a custom soft-mod integration.
I need to update it for 0.16 compatibility
Just wondering if anyone ever modified or added bobs ores to start with. I love to start using his set of mods but not quite sure how I go adding them into the lua.
Need to test the new 0.17 vanilla experience, specifically map generation and starting point generation.
just created a new headless server on my local machine and got it working propperly.
after installing this mod the server and all mod features worked but people are unable to rejoin the server, getting following error message:
"Cannot join. The following mod script files are not identical between you and the server: level"
am i doing something wrong or is the mod broken?
Make it easier to adjust starting items in the config file directly instead of in the main code.
^^^
I am getting the horizontal scroll error on our server since 0.16.16 update.
49.281 Error MainLoop.cpp:1013: Exception at tick 13397282: Error while running event level::on_gui_click (ID 1)
LuaGuiElement doesn't contain key can_scroll_horizontally.
stack traceback:
/opt/factorio/temp/currently-playing/locale/oarc_utils.lua:548: in function 'ExpandPlayerListGui'
/opt/factorio/temp/currently-playing/locale/oarc_utils.lua:569: in function 'PlayerListGuiClick'
/opt/factorio/temp/currently-playing/control.lua:175: in function </opt/factorio/temp/currently-playing/control.lua:169>
49.282 Error ServerMultiplayerManager.cpp:95: MultiplayerManager failed: "Error while running event level::on_gui_click (ID 1)
LuaGuiElement doesn't contain key can_scroll_horizontally.
stack traceback:
/opt/factorio/temp/currently-playing/locale/oarc_utils.lua:548: in function 'ExpandPlayerListGui'
/opt/factorio/temp/currently-playing/locale/oarc_utils.lua:569: in function 'PlayerListGuiClick'
/opt/factorio/temp/currently-playing/control.lua:175: in function </opt/factorio/temp/currently-playing/control.lua:169>"
This was fixed in 49e2a79 however I am still getting the error in the map save.
I backed up the world and created a new map to test that the scenario was indeed working after your update and found it was fixed for a new world.
Is there a way to correct the change in the original map save?
So #2 means there will be no PvP possible?
Imho this scenario would be perfect start for PvP mode... and it's awesome with this map in terms that people don't have to install mods to be able to join.
I'd be glad to help coding, but as I'm not a big lua expert and didn't try to build a factorio mod/scenario before I don't really know where to start.
Can you give me some tips how the problem could maybe be solved and "best practices" for developing factorio stuff?
While testing the server before going line. I'm finding that I cant seem to save my spawn position.
I've changed the cooldown in the config file to 1 minute, and clicked on "set New respawn loacation" but then when I leave and reenter, I'm back at the starting position.
Half related. Is this the correct way to load a scenario save on startup?
ExecStart=/opt/factorio/bin/x64/factorio --server-settings /opt/factorio/data/server-settings.json --start-server-load-scenario FactorioScenarioMulti
118397.109 Error MainLoop.cpp:788: Exception at tick 7041658: Error while running event on_gui_click (ID 1)
...factorio/temp/currently-playing/separate_spawns_guis.lua:416: attempt to perform arithmetic on field 'setRespawn' (a nil value)
118397.109 Error ServerMultiplayerManager.cpp:93: MultiplayerManager failed: "Error while running event on_gui_click (ID 1)
...factorio/temp/currently-playing/separate_spawns_guis.lua:416: attempt to perform arithmetic on field 'setRespawn' (a nil value)"
118397.109 Info ServerMultiplayerManager.cpp:658: mapTick(7041658) changing state from(InGame) to(Failed)
Can't figure out how to change corpse timer...
Had a few requests for player ban-chests and player leave-chests.
Me and my friends want to play a scenario where we have to find each-other and work towards each-other as a end-goal. We can work alone and on our bases but be able to eventually connect to each-other.
That said is there a way to combine teams or transfer teams?
Would doing so affect your current base?
Also can these settings be changed part way through the game (or any setting)?
FactorioScenarioMultiplayerSpawn/config.lua
Lines 87 to 88 in 22a691e
Thank you for this scenario btw
Ive been using your awesome script for 0.15 for a public server and has been working great. But obviously things are broken in 0.16.X.
Here are a few ive noted.
oarc_utils.lua
Line 750, 781, 818, 1050 change grass to grass-1
Line 522 use scrollFrame.can_scroll_horizontally = false (I think, it works on client hosted but seems to bug out on headless servers).
separate_spawns_guis.lua
Line 414, 523 same thing need to swap out scroll_horizontal_policy = "never" to can_scroll_horizontally = false (Again seems to work fine on client hosted sessions but bugs out and can crash headless servers)
Theres also a current bug i cant pin down and that is sometimes new people arn't able to interact with the Welcome GUI to create or join a team.
I also havent figured out how to remove cliffs from the spawn area. My best attempts either leave the cliffs in or get an exception. However 0.16.4 has just been released with new lua function to remove cliffs.
"Added 2 optional parameters to LuaSurface::create_entity when creating resource entities: enable_tree_removal and enable_cliff_removal"
Also with the new water/edge tiles your little water strip no longer works. Need to add width to the strip now.
Hope this helps somewhat.
Resources are not generated and spawn is not cleared if player leaves the game in <1 sec after choosing solo spawn
Hello
Just for info here is a crash after sometime on 0.17.4 ;3 good luck and thanks for your work!
12365.726 Info ServerMultiplayerManager.cpp:922: Disconnect notification for peer (14)
12365.726 Info ServerMultiplayerManager.cpp:813: updateTick(736103) received stateChanged peerID(14) oldState(InGame) newState(DisconnectScheduled)
12365.767 Info ServerSynchronizer.cpp:576: nextHeartbeatSequenceNumber(328719) removing peer(14).
12910.206 Error MainLoop.cpp:1092: Exception at tick 768743: The scenario level caused a non-recoverable error.
Please report this error to the scenario author.
Error while running event level::on_built_entity (ID 6)
Unknown item name: raw-wood
stack traceback:
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:873: in function 'TransferItems'
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:894: in function 'TransferItemMultipleTypes'
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:926: in function 'AutoFillVehicle'
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:1320: in function 'Autofill'
/home/fctrserver/temp/currently-playing/control.lua:266: in function </home/fctrserver/temp/currently-playing/control.lua:264>
stack traceback:
[C]: in function 'get_item_count'
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:873: in function 'TransferItems'
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:894: in function 'TransferItemMultipleTypes'
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:926: in function 'AutoFillVehicle'
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:1320: in function 'Autofill'
/home/fctrserver/temp/currently-playing/control.lua:266: in function </home/fctrserver/temp/currently-playing/control.lua:264
12910.232 Error ServerMultiplayerManager.cpp:92: MultiplayerManager failed: "The scenario level caused a non-recoverable error.
Please report this error to the scenario author.
Error while running event level::on_built_entity (ID 6)
Unknown item name: raw-wood
stack traceback:
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:873: in function 'TransferItems'
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:894: in function 'TransferItemMultipleTypes'
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:926: in function 'AutoFillVehicle'
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:1320: in function 'Autofill'
/home/fctrserver/temp/currently-playing/control.lua:266: in function </home/fctrserver/temp/currently-playing/control.lua:264>
stack traceback:
[C]: in function 'get_item_count'
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:873: in function 'TransferItems'
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:894: in function 'TransferItemMultipleTypes'
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:926: in function 'AutoFillVehicle'
/home/fctrserver/temp/currently-playing/lib/oarc_utils.lua:1320: in function 'Autofill'
/home/fctrserver/temp/currently-playing/control.lua:266: in function </home/fctrserver/temp/currently-playing/control.lua:264>
12910.232 Info ServerMultiplayerManager.cpp:714: updateTick(768743) changing state from(InGame) to(Failed)
12910.233 Info GlobalContext.cpp:678: Waiting for child processes to exit:
12911.513 Info ServerMultiplayerManager.cpp:138: Quitting multiplayer connection.
12911.513 Info ServerMultiplayerManager.cpp:714: updateTick(4294967295) changing state from(Failed) to(Closed)
12911.515 Info HttpSharedState.cpp:54: Downloading https://multiplayer.factorio.com/remove-game/4517702
12911.622 Info HttpSharedState.cpp:147: Status code: 200
12911.622 Info UDPSocket.cpp:210: Closing socket
12911.622 Info UDPSocket.cpp:240: Socket closed
12911.622 Info UDPSocket.cpp:210: Closing socket
12911.725 Info UDPSocket.cpp:210: Closing socket
This may be because your scenario is not ready for 16 yet but here is the log while loading the save
Create /opt/factorio/bin/x64/factorio --create /opt/factorio/saves/world2.zip --server-settings /opt/factorio/data/server-settings.json --map-gen-settings /opt/factorio/data/rails-map-gen-settings.json --map-settings /opt/factorio/data/map-settings.example.json --start-server-load-scenario FactorioScenarioMultiplayerSpawn
Command: /opt/factorio/bin/x64/factorio --server-settings /opt/factorio/data/server-settings.json --start-server-load-scenario FactorioScenario
0.000 2017-12-14 16:34:41; Factorio 0.16.2 (build 34253, linux64, headless)
0.036 Operating system: Linux (Ubuntu 16.04)
0.036 Program arguments: "/opt/factorio/bin/x64/factorio" "--server-settings" "/opt/factorio/data/server-settings.json" "--start-server-load-scenario" "FactorioScenarioMultiplayerSpawn"
0.037 Read data path: /opt/factorio/data
0.037 Write data path: /opt/factorio [23910/28093MB]
0.037 Binaries path: /opt/factorio/bin
0.045 System info: [CPU: Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz, 1 core, RAM: 3951MB]
0.045 Running in headless mode
0.049 Loading mod core 0.0.0 (data.lua)
0.059 Loading mod base 0.16.2 (data.lua)
0.159 Loading mod base 0.16.2 (data-updates.lua)
0.195 Checksum for core: 3022494965
0.196 Checksum of base: 2342918391
0.321 Info PlayerData.cpp:65: Local player-data.json available, timestamp 1513297840
0.321 Info PlayerData.cpp:72: Cloud player-data.json unavailable
0.322 Custom inputs active: 0
0.322 Factorio initialised
0.323 Info ServerSynchronizer.cpp:29: nextHeartbeatSequenceNumber(0) initialized Synchronizer nextTickClosureTick(0).
0.323 Info ServerMultiplayerManager.cpp:693: mapTick(4294967295) changing state from(Ready) to(PreparedToHostGame)
0.323 Info ServerMultiplayerManager.cpp:693: mapTick(4294967295) changing state from(PreparedToHostGame) to(CreatingGame)
13.829 Info BlueprintLibrary.cpp:53: Loaded external blueprint storage: playerIndex = 65535, nextRecordID = 0; timestamp = 0; records:
13.890 Loading Level.dat: 918998 bytes.
13.896 Info Scenario.cpp:135: Map version 0.16.2-2
13.968 Info BlueprintLibrary.cpp:232: Loaded library shelves:
13.972 Info BlueprintLibrary.cpp:798: Game shelf: playerIndex = 65535, nextRecordID = 0; timestamp = 0; records:
13.972 Info BlueprintLibrary.cpp:53: Loaded external blueprint storage: playerIndex = 65535, nextRecordID = 0; timestamp = 0; records:
13.983 Checksum for script /opt/factorio/temp/currently-playing/control.lua: 1648085250
14.033 Info UDPSocket.cpp:27: Opening socket at (0.0.0.0:34197)
14.033 Hosting game at 0.0.0.0:34197
14.034 Info HttpSharedState.cpp:54: Downloading https://auth.factorio.com/generate-server-padlock-2
14.348 Info HttpSharedState.cpp:127: Status code: 200
14.348 Info AuthServerConnector.cpp:109: Obtained serverPadlock for serverHash (rn39NcixdJVHgZ1TyrY63Gl0nNcdI79O) from the auth server.
14.348 Info ServerMultiplayerManager.cpp:693: mapTick(0) changing state from(CreatingGame) to(InGame)
14.348 Info ServerRouter.cpp:580: Asking pingpong servers (pingpong1.factorio.com:34197, pingpong2.factorio.com:34197) for own address
14.411 Info UDPSocket.cpp:39: Opening socket for broadcast
14.432 Error InterruptibleStdioStream.cpp:54: Reading stdin failed
14.517 Info ServerRouter.cpp:475: Own address is xxx.xxx.xxx.xxx
14.517 Error ServerMultiplayerManager.cpp:627: Matching server connection failed: Error when creating server game: Missing token.
21.002 ConnectionRequestReplyConfirm (type(ConnectionRequestReplyConfirm) ) from(xxx.xxx.xxx.xxx:57297)
21.002 Refusing connection for address (xxx.xxx.xxx.xxx:57297), username (username). UserVerificationMissing
21.893 ConnectionRequestReplyConfirm (type(ConnectionRequestReplyConfirm) ) from(xxx.xxx.xxx.xxx:56312)
21.894 Refusing connection for address (xxx.xxx.xxx.xxx:56312), username (username). PasswordMissing
21.911 Warning TransmissionControlHelper.cpp:170: Fragment 0001 failed too many times
22.784 Warning TransmissionControlHelper.cpp:170: Fragment 0007 failed too many times
23.844 ConnectionRequestReplyConfirm (type(ConnectionRequestReplyConfirm) ) from(xxx.xxx.xxx.xxx:56315)
23.845 Info ServerRouter.cpp:393: Replying to connectionRequest for address(xxx.xxx.xxx.xxx:56315).
23.845 Info ServerSynchronizer.cpp:557: nextHeartbeatSequenceNumber(280) adding peer(1)
23.862 Info ServerMultiplayerManager.cpp:693: mapTick(0) changing state from(InGame) to(InGameSavingMap)
23.980 Info ServerMultiplayerManager.cpp:789: mapTick(0) received stateChanged peerID(1) oldState(Ready) newState(ConnectedWaitingForMap)
24.018 Info ServerMultiplayerManager.cpp:849: MapTick(0) Serving map(/opt/factorio/temp/mp-save-0.zip) for peer(1) size(712036) crc(4080282363)
24.018 Info ServerMultiplayerManager.cpp:693: mapTick(0) changing state from(InGameSavingMap) to(InGame)
24.186 Info ServerMultiplayerManager.cpp:789: mapTick(0) received stateChanged peerID(1) oldState(ConnectedWaitingForMap) newState(ConnectedDownloadingMap)
25.211 Info ServerMultiplayerManager.cpp:789: mapTick(0) received stateChanged peerID(1) oldState(ConnectedDownloadingMap) newState(ConnectedLoadingMap)
25.229 Error MainLoop.cpp:1010: Exception at tick 0: Error while running event level::on_chunk_generated (ID 12)
The result of this function must be used.
stack traceback:
/opt/factorio/temp/currently-playing/locale/rso/drand.lua:244: in function 'random'
...ctorio/temp/currently-playing/locale/rso/rso_control.lua:1146: in function 'roll_region'
...ctorio/temp/currently-playing/locale/rso/rso_control.lua:1404: in function 'RSO_ChunkGenerated'
/opt/factorio/temp/currently-playing/control.lua:165: in function </opt/factorio/temp/currently-playing/control.lua:155
25.229 Error ServerMultiplayerManager.cpp:95: MultiplayerManager failed: "Error while running event level::on_chunk_generated (ID 12)
The result of this function must be used.
stack traceback:
/opt/factorio/temp/currently-playing/locale/rso/drand.lua:244: in function 'random'
...ctorio/temp/currently-playing/locale/rso/rso_control.lua:1146: in function 'roll_region'
...ctorio/temp/currently-playing/locale/rso/rso_control.lua:1404: in function 'RSO_ChunkGenerated'
/opt/factorio/temp/currently-playing/control.lua:165: in function </opt/factorio/temp/currently-playing/control.lua:155>"
25.230 Info ServerMultiplayerManager.cpp:693: mapTick(0) changing state from(InGame) to(Failed)
25.230 Info GlobalContext.cpp:649: Waiting for child processes to exit:
25.235 Info ServerMultiplayerManager.cpp:141: Quitting multiplayer connection.
25.236 Info ServerMultiplayerManager.cpp:693: mapTick(4294967295) changing state from(Failed) to(Closed)
25.236 Info UDPSocket.cpp:206: Closing socket
25.236 Info UDPSocket.cpp:236: Socket closed
25.236 Info UDPSocket.cpp:206: Closing socket
25.261 Info UDPSocket.cpp:206: Closing socket
25.261 Info UDPSocket.cpp:236: Socket closed
25.262 Goodbye
0.17 has a lot of GUI changes. I'm going to need to fix a ton of it, possibly rewrite it all.
After upgrading 0.16 > 0.17
Hosting new scenario game.
The scenario level caused a non-recoverable error.
Please report this error to the scenario author.
Error while running event level::on_init()
"desert" is not a valid autoplace control name.
stack traceback:
...n/.factorio/temp/currently-playing/locale/oarc_utils.lua:1210: in function 'CreateGameSurface'
/home/unr/.factorio/temp/currently-playing/control.lua:103: in function </home/unr/.factorio/temp/currently-playing/control.lua:91>
stack traceback:
[C]: in function 'create_surface'
...n/.factorio/temp/currently-playing/locale/oarc_utils.lua:1210: in function 'CreateGameSurface'
/home/unr/.factorio/temp/currently-playing/control.lua:103: in function </home/unr/.factorio/temp/currently-playing/control.lua:91>
1955.382 Error MainLoop.cpp:850: Exception at tick 14687: Error while running event level::on_player_left_game (ID 44)
Can't merge a force into its self.
stack traceback:
...factorio_0.15/temp/currently-playing/separate_spawns.lua:87: in function 'FindUnusedSpawns'
/opt/factorio_0.15/temp/currently-playing/control.lua:236: in function </opt/factorio_0.15/temp/currently-playing/control.lua:234>
1955.382 Error ServerMultiplayerManager.cpp:94: MultiplayerManager failed: "Error while running event level::on_player_left_game (ID 44)
Can't merge a force into its self.
stack traceback:
...factorio_0.15/temp/currently-playing/separate_spawns.lua:87: in function 'FindUnusedSpawns'
/opt/factorio_0.15/temp/currently-playing/control.lua:236: in function </opt/factorio_0.15/temp/currently-playing/control.lua:234>"
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.