delaford / game Goto Github PK
View Code? Open in Web Editor NEW⚔️ An online JavaScript 2D Medieval RPG.
Home Page: https://play.delaford.com/?useGuestAccount
License: MIT License
⚔️ An online JavaScript 2D Medieval RPG.
Home Page: https://play.delaford.com/?useGuestAccount
License: MIT License
As it stands, the game map of Navarra is currently 1 layer and this has got to change.
It can be so much better. The tileset itself will need to be re-worked and changed to better fit the needs of the game. A lot of it can be extracted into its own layer which would be transparent. The trees, signs, dirt roads and more can be put into a different tileset. Then those tiles can go anywhere in the background which is static and does not change.
This is just a no-brainer and will definitely allow more improvisation as Navarra's game map fleshes itself out. An extra layer can also add the ease of item-to-tile or user-to-tile interaction. Since they're transparent, meaning they go into multiple places and can have dynamic actions and we can locate them.
This will add another layer or two during background image processing but will be well worth the flexibility as Navarra's lore grows to accommodate its narrative.
Luckily, I have (somewhat) experience in Gimp and this will be nothing short of just a time-consuming task. Over 600 or so tiles to go through. With the tileset, the posibilites then will became a lot more than 600.
I'm using Tiled to edit the game-map. Once I get it all sorted out, I'll re-upload it with the .tmx
file along with the new tileset images.
Do you want to request a feature or report a bug?
feature
What is the current behavior?
Explicit declarations to load assets (JSON, graphics, etc.) from both development and production environments.
What is the expected behavior?
Load assets dynamically using path
module and via a method -- would be great.
If this is a feature request, what is motivation or use case for changing the behavior?
It looks gross right now.
In our webpack config: webpack.base.config.js
:
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
}
},
We use @
to state whether the import resolves to the source or not. If not, it is production. For example, right now on game.js
:
https://github.com/Navarra/game/blob/4b05ff7e1612c9bfcbd14136d7cb2f767801c24c/src/core/game.js#L1-L5
I'd like to make this simpler. Prettier, too. If anyone wants to take a shot at fixing this issue, go for it. path
module is your friend here.
What is the current behavior?
The world.items
object on the server (can be accessed via http://localhost:4000/world/items
populates the items on the map. When viewed, some items have extraneous information like so:
[
{
"id": "bronze-pickaxe",
"respawnIn": "8s",
"x": 20,
"y": 112,
"uuid": "26a4ead5-4fd1-49bd-b2bc-6db2d792f613",
"respawn": true,
"pickedUp": false,
"timestamp": 1558666693612
},
{
"id": "bronze-shield",
"respawnIn": "1m 30s",
"x": 18,
"y": 113,
"uuid": "fa4990da-859a-46b3-b2e2-93aa5517933d",
"respawn": true,
"pickedUp": false,
"timestamp": 1558666693612,
"context": "item",
"name": "Bronze Shield",
"examine": "Reliable shield for all-around combat made of Bronze.",
"price": 41,
"type": "armor",
"slot": "left_hand",
"stats": {
"attack": {
"stab": 0,
"slash": 0,
"crush": 0,
"range": 0
},
"defense": {
"stab": 3,
"slash": 5,
"crush": 10,
"range": 6
}
},
"graphics": {
"tileset": "armor",
"row": 6,
"column": 0
},
"actions": [
"take",
"examine",
"drop",
"equip",
"unequip",
"deposit",
"withdraw",
"buy",
"sell",
"value"
]
}
]
If the current behavior is a bug, please provide the exact steps to reproduce.
Drop items. Observe world.items
value. (itemsDropped
)
What is the expected behavior?
To only contain needed information.
Additional context
Add any other context about the problem here.
Problem
If you click really fast, you'll be able to move around the game map fast. This, by far, surpasses the 150
ms tick between each step as player works their way to through the trail formed by the pathfinding algorithm.
It seems like multiple walk-loops are enacted during this process. (not 100% verified but it seems like it.)
Code affected
The Player
class, the walkPath
method would be a good place to start.
Notes
By encapsulating the walk loop in its own IIFE (Immediately-invoked function expression), I thought I could queue up the walk-loop so its not affected by other actions.
I am 100% sure I could improve the walkPath
(walk-loop) method better with some refactoring.
Do you want to request a feature or report a bug?
bug
What is the current behavior?
When you right-click to walk somewhere, your mouse will still show "yellow" when the path finishes and your mouse is hovering on a blocked tile.
If the current behavior is a bug, please provide the exact steps to reproduce.
Make sure that your mouse will land on a blocked tile when player is finished walking.
What is the expected behavior?
For the mouse selection to turn red and thus not click be attempt to walk there.
What mechanics does this feature affect?
The npm scripts dev:node
and any custom script that requires rm -rf
or changing directories.
How hard would it be to implement this feature on a scale of 1-10 (10 = hardest)?
4
What is the feature request?
Change the build process so that the NPM scripts can be run on any OS without a problem. Due to the way Unix and Windows treat folders differently, right now, the current solution is to lean on the Unix side of things but Window devs will encounter errors.
We need to find a way to absolve them of this issue by implementing (probably another NPM script) a way so that all NPM scripts work on any OS and they can buil/develop the game just fine.
I'd like to push two minor changes regarding settings if that's alright:
"dev:node_global": "set NODE_ENV=development && nodemon --exec ./node_modules/.bin/babel-node --no-babelrc server.js --presets @babel/preset-env --plugins @babel/plugin-transform-modules-commonjs"
If you approve this issue I'll add and push the commit.
Thanks
What is the current behavior?
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
The shield on the ground should disappear once picked up
or
The menu should say "You already have the shield"
. . . unless this behavior is related to gameplay
Additional context
I was logged in as a guest, so maybe it affects gusts only (unlikely, though)? 🤔
What mechanics does this feature affect?
code only
How hard would it be to implement this feature on a scale of 1-10 (10 = hardest)?
What is the feature request?
Using an npm package like link-module-alias
or similar, to replace all of the import
or require
statements with proper module aliases.
Right now, we have import statements like import EXAMPLE from '../../../../
, you get the idea. With this change, it would be import EXAMPLE from '@server/test.js
.
What is the current behavior?
When you try to buy an item from a vendor, with no coins in your inventory, the server throws an error.
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
Let the player know, via chat, that their action has resulted in "insufficient funds."
Additional context
During the Shop.buy()
method, we assume that we always have coins on hand because we run this.inventory[this.coinIndex].qty
without regard to seeing if they have coins or not and thus, when you don't, you get the error.
As Delaford slowly grows, its needs for custom design and unique view of a game world grows. We are using Sass (.scss) and thus, slowly we build our stylesheet over at /src/assets/scss
.
What this folder will hold will be pretty much like its own mini-project (maybe even a sub-repo). But basically, it's going the base framework of Delaford and its stylesheet. You know we're going to need to define button
element on how it will look in the UI versus a pop-over pane screen.
What I'd like to mimic and borrow from is Bulma.io's architecture. I feel like they have a strong overview of how to design a SCSS framework. Obviously, not everything there is applicable to what Delaford needs but the base framework of a working one is the one we're aiming for the 0.0.1 launch.
What mechanics does this feature affect?
None (Docs)
How hard would it be to implement this feature on a scale of 1-10 (10 = hardest)?
1
What is the feature request?
Currently there's no player's guide (or if there's one, I couldn't find it). As a result, it confuses as to what the controls are and what's possible in the game world.
What mechanics does this feature affect?
Application architecture (this suggested change has a system-wide effect)
How hard would it be to implement this feature on a scale of 1-10 (10 = hardest)?
7
What is the feature request?
Delaford has a game client with a couple of subs (engine, map) which is an object that is essentially responsible for handling the application state.
The application also uses a Vuex store for state management (I believe it was added later), which also allows persisting the state. It is essentially another object responsible for state and currently handles login and accounts.
Since we have two objects that share some common responsibilities, I suggest merging the client into the store, creating a single source of truth for state.
What will we gain?
@naknode , I'll be happy to hear your thoughts on the matter.
What is the current behavior?
It seems like the scrollbar is getting in the way in Firefox and, I believe, hides some of the graphics in Chrome. We should include some CSS to make this behave correctly.
If the current behavior is a bug, please provide the exact steps to reproduce.
Get more than 4 items in your inventory on Chrome. Observe the last item being cut off. We believe this issue is related to #56.
In Firefox, observe this:
What is the expected behavior?
Not cut off any graphics in the inventory and be pleasantly appealing in Firefox and not show and only when needed.
Additional context
What is the current behavior?
When you sell more than one item to the general store, and they do not have it, you will only sell 1 of it.
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
Sell accordingly.
Additional context
Should be an easy fix.
As of right now, the context-menu items are in the order they are declared in the Action
class.
That means, when more actions are piled on (Mine ore, Trade with, etc.), that the context-menu will need to be shifted to provide great user experience.
The weight will need to be dynamic obviously with Cancel
being always at the bottom and present and Walk here
almost always at the top and also present.
As of right now there is no need to rush this as there are only two playable options (well, really one). But once you monsters come in (soon!) and once the first few skills come in (mining, smithing, fishing, cooking), then it will be needed.
What is the current behavior?
When you click the login button fast twice, the server will login and have two sessions.
If the current behavior is a bug, please provide the exact steps to reproduce.
Player has logged in
twice.What is the expected behavior?
To only allow the player to click login once.
Additional context
You can simply disable the Login button during the POST of login and release it if its successful or errors out.
What is the current behavior?
You hover over an item on the ground. Double or triple click really fast to "Take" the item. Observe your multiple of items.
If the current behavior is a bug, please provide the exact steps to reproduce.
See above.
What is the expected behavior?
Only allow once.
Additional context
Should be really easy to fix.
What is the current behavior?
The view of the inventory item (32x32) is cut off by width on every right-most slot.
If the current behavior is a bug, please provide the exact steps to reproduce.
Get an item on any (4n) 4th slot.
What is the expected behavior?
The item should be fully-visible. All 32 pixels in height and width.
Additional context
Add any other context about the problem here.
What is the current behavior?
The context-menu and actions are built client-side.
If the current behavior is a bug, please provide the exact steps to reproduce.
Right-click or do an action.
What is the expected behavior?
The list should be generated server side and the actions should be executed server-side.
Execute the generation of the context-menu and actions server-side
Additional context
This had to be @done.
What is the current behavior?
Go to another tab that isn't the Inventory tab. Log out. Log back in. The tab is now the Logout tab.
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
When you log back in, the default tab should be the Inventory tab.
Additional context
This should be really easy to fix.
What is the current behavior?
When you logout, you stay painted on the screen on other player's screen.
If the current behavior is a bug, please provide the exact steps to reproduce.
Have two sessions open (one in 1 browser, second one in incognito.)
Log into both players. Log out of player 1. Confirm on player 2 that player 1's session is still painted on.
What is the expected behavior?
For the canvas not to paint the logged out user
Additional context
This should be pretty easy to fix as all the pieces are in place. Not sure why it's happening but you need to send back the new player list upon logout to all other clients.
We are doing that upon login (obviously) so we can start looking there.
What is the current behavior?
Drop a set of 10 coins on map. You will see ONE coin graphic and when you pick it up... no quantity.
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
Show the correct graphic for quantity stated and when you pick up, have that same quantity on the item.
Additional context
This really isn't a bug... more of like: I didn't get time to add this in but if you wanna take a stab! :P
Do you want to request a feature or report a bug?
feature
What is the current behavior?
players cannot connect
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
to allow players to connect
Currently, the world map is using arrays. Egads, right?
For even a 200x200 map, that's still a lot of data that can be compressed and encoded and a lot of bytes to save! Ideally, we can do
And 200x200, or whichever, can be called upon as a nice, compressed string which would be decode and uncompressed. The map editor I am using is Tiled to do the encoding and compression.
There are tons of gzip and base64 libraries on NPM that we can use to get started.
No rush, as I don't see the need for the map to go over 100x100, yet... but there will come a time where this must be done.
I can't seem to figure out what I need to do in order to play this game/ host a server. It would would be helpful I could know the following: What software I need to download in order to do this, and what to do with that software. If there is any software to download. It's just really confusing, and I would like to play.
What mechanics does this feature affect?
Player, Map, Items
How hard would it be to implement this feature on a scale of 1-10 (10 = hardest)?
Describe the solution you'd like
When an item spawns on the floor, and someone picks it up, have the game respawn that same item after a certain amount of time at the same location.
Also, when someone drops an item from their inventory, have it be removed from the game after a period of 1 minute of inactivity on the item.
What is the current behavior?
When you follow the instructions to install on any Windows machine, you go to the webpage after npm run serve
and you get Uncaught SyntaxError: Unexpected token _ in JSON at position 0
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
For the game to run without errors on a Windows machine
Additional context
Add any other context about the problem here.
That is the big question, huh? I'd love to start thinking about how Navarra will handle saving and loading of characters so we can start getting some iron ore in the bank and saving a hard day's work.
I've used NoSQL before with previous games and it's been alright. I've never needed to "scale out" or have too much problem but picking either NoSQL (CouchDB, MongoDB, etc.) or a relational DB is just a big question.
But, I've never been a big fan of document-oriented database -- like MongoDB. In MongoDB, a document is a big JSON blob with no particular format or schema. (yuck)
Personally, my vote is for MySQL. It has rows, columns and it's mature. The game is not that complex (nor do I plan on it being a ULTIMA-like complex).
I like that the data is structured. I like that I can create complex queries because you know that once I can start doing that, I'd love to blast some data-viz on Navarra so that we can figure out who fished the most salmon on Tuesday. (to be honest, 90% of the data-viz will go on the admin panel but that's for another time)
I like data-viz and having structured data and complex queries are a big thing for me. I can't wait to combine it with D3 so players can ooh and ahh over their progress in a sublime graphical layout.
However, my primary job is not a DBA. What is your take on a game like this for game-development? Looking forward to hear your comments.
What is the current behavior?
When you open a popup screen, usually via trading, and you click someone on the edge of the canvas to go somewhere on the map, the popup screen stays connected.
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
When you move somewhere on the map, the online screen should close for an easier UX experience and viability of bug abuse.
What is the current behavior?
If the current behavior is a bug, please provide the exact steps to reproduce.
Pick up ITEM
What is the expected behavior?
For the item to be slotted into your inventory -- if allowed.
Additional context
What is the current behavior?
When you bank items, the player slot does not change.
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
The tab should show immediately Inventory.
Additional context
Add any other context about the problem here.
Do you want to request a feature or report a bug?
bug
What is the current behavior?
When a user attempts to login with invalid username/password -- nothing happens. In the backend, however, a 401 request is returned (unauthenticated.)
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
A message or modal of some kind should appear letting the user know of their attempt
What is the current behavior?
Right-click in-game anywhere to open a context-menu. Now, when you click on, for example, inventory tab or anywhere but the game canvas, the context-menu stays visible.
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
The context-menu in-game should close when the mouse clicks anywhere outside of the game.
Additional context
Add any other context about the problem here.
Do you want to request a feature or report a bug?
bug
What is the current behavior?
NPCs are ignoring whether they should go through blocked foreground objects.
If the current behavior is a bug, please provide the exact steps to reproduce.
Watch an NPC go through a NPC.
What is the expected behavior?
They should stop and not continue forward.
Do you want to request a feature or report a bug?
bug
What is the current behavior?
When you drop items, the order in the context-menu when you right-click the tile is in the wrong order.
If the current behavior is a bug, please provide the exact steps to reproduce.
Drop a a sword, axe, dagger. The order when you right-click is
Sword, Axe, Dagger
What is the expected behavior?
You should see the items in the list in the order you dropped them or rather when they appeared on the map.
What is the current behavior?
You can bank more items than you have via context-menu even if you don't have enough of what you allowed.
If the current behavior is a bug, please provide the exact steps to reproduce.
Deposit-10 of ITEM
of that itemWhat is the expected behavior?
You should only bank no more than what you have in your inventory.
Additional context
This will be revisited when stackable items (coins, arrows, bait) are added in in a few days.
Do you want to request a feature or report a bug?
bug
What is the current behavior?
When you click Cancel
on the login screen -- nothing happens.
If the current behavior is a bug, please provide the exact steps to reproduce.
cancel
buttonWhat is the expected behavior?
The view should take the user back to the main menu.
When you right-click on the game Game.vue
, it emits
the event
and coordinates to ContextMenu.vue
, which then executes openMenu
here:
By this point, the menu is build and just shown to the player.
Once we click on a menu item, we fire off selectAction()
:
The menu is closed and the emitter sends their regards:
and by now, we execute the actionable item on the static
method:
Of course, I passed the Action
object in the selectAction
menthod in ContextMenu.vue
and now gets in the same Action
file. I am not an expert at the lexical scope of Vue.js
and Classes
yet, but I'll look at this whenever I can. If you know how this can be improved -- let me know!
The solution I am trying to do is to be able to access this
correctly as set forth by the constructor
inside the Action.do
method when it gets instructions and I think it may because I am not binding correctly in the Action
class in this line: bus.$on('ITEM:DO', Actions.do);
It is the Vue.js instance.
We have (err, I) have decided to change the name from Navarra to Delaford for a few reasons.
First of all, while I love the name Navarra, I could never justify it as it was somewhat hard to pronounce and harder to spell.
The URL itself was uncannily long. Having a hyphen in a URL always bugged me and not having [gamename].com did as well.
I've been meaning to change the name for a while now and Delaford stuck into my mind. It's gothic, medieval and most of all, it's short. And for you Jane Austen readers, you'll know what it means.
We're now located at delaford.com. Much better.
Now, let's get back to the game developing!
What is the current behavior?
TypeError: string.charAt is not a function at VueComponent.capitalizeFirstLetter
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
Additional context
This error seems to be due to the behavior of the v-for in Stats.vue . My Vue is a little rusty, but I believe the syntax used is suitable for working with object properties, whereas the stats are received as an array.
This results in capitalizeFirstLetter method getting the number 0 and failing.
To fix the issue, the v-for should probably be on skill in skills and the capitalizeFirstLetter method should receive skill.name
*capitalizeFirstLetter should protect itself by addressing cases where non string input is received is not a string. Alternatively we can replace it with css text-transform: capitalize.
@naknode
I'm opening new issues for new things I encounter if I'm submitting a pull request shortly after. I think I read somewhere that pull requests will only be accepted for issues, and even if not, I thought it's a good such things documented. Please let me know if you want me to keep doing that or just submit a pull request.
What is the current behavior?
When a user tries to walk across a (for example) a body of water that is allowed passage through a foreground tile (like a bridge), it will not let it.
If the current behavior is a bug, please provide the exact steps to reproduce.
See this:
What is the expected behavior?
To allow passage.
Browser, OS, and Node version
Additional context
Make the cursor change to yellow to make clickable and change the UI for mouse accordingly as well.
At the moment, in its infancy, Navarra does not have a game-loop and this needs to change. Yes, it's <canvas>
game that is also lacking in bits for graphics, but I think it would be imperative to add a game loop not only for the graphics (which would more than handle it) but also for the readability and logistics of it.
I propose we start using: requestAnimationFrame.
The window.requestAnimationFrame() method tells the browser that you wish to perform an animation and requests that the browser call a specified function to update an animation before the next repaint. The method takes a callback as an argument to be invoked before the repaint.
The <canvas>
will be refreshed and all will be well. The monsters will be in their places, the items dropped will be there and of course, eventually, other connected players.
This means that the game.js
file will slowly be migrated over to engine.js
and that's where the game will kick off in a more apt manner.
Let me know if any of you have any objections. I think this is a step in the right direction.
What is the current behavior?
Examine the world, items or do other stuff. When you logout, and then login again, the chat stays the same.
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
To clear the chatbox every time upon logout.
When you log back in, it should just say Welcome to Delaford.
Additional context
Add any other context about the problem here.
Do you want to request a feature or report a bug?
bug
What is the current behavior?
When a user types on chat, everyone in the map can see it.
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
Player 2 should only see a message from the player who is saying a message if they are theoretically in their viewport. So 15x11 tiles should be their chat range.
Do you want to request a feature or report a bug?
feature
What is the current behavior?
Anytime we reference a backgroundTile
, we have to accomodate the Tiled export. Like this:
https://github.com/Navarra/game/blob/6722b7d5a57643e1020b1078995e6c00d16f064e/src/core/map.js#L305
This is because Tiled has a gid
and if I wanted to have a tile ID start from 0 for each tileset... well, from the creator:
You wouldn't, because you wouldn’t be able to determine from which tileset that particular tile is (not without additional knowledge at least: only you know that you have only two layers that only use a specific tileset for each).
The way to get from 253 to 0 is to subtract the “firstgid” associated with your second tileset. In the general case, this system allows a tile layer to use any number of tilesets. You can read more about this in the documentation1 (the JSON format works the same way).
Because what if each layer has associated with their own tileset?
It doesn’t matter, Tiled supports multiple tilesets per layer so it can’t change its output format to rely on there being only a single tileset per layer. It could be introduced as an option, but Tiled currently has no such option.
But, you can always implement your own map format, and teach Tiled how to read/write it by implementing either a C++ or Python Tiled plugin. Then you can simplify it as much as you like.
If this is a feature request, what is motivation or use case for changing the behavior?
Cleanliness and less-hacky way.
I think the solution may lay in the Tiled editor program that Navarra uses. But my degree of expertise is not as much as I would like. If you know of a solution, send a PR!
Do you want to request a feature or report a bug?
bug
What is the current behavior?
The context-menu color applies same color to the same item on the menu (orange).
If the current behavior is a bug, please provide the exact steps to reproduce.
Find where an item and an NPC are in the same square. Right-click to open context-menu.
What is the expected behavior?
The NPC (Baynard) should be in yellow text instead of orange.
Do you want to request a feature or report a bug?
feature
What is the current behavior?
Color coordinates with the action being taken.
If this is a feature request, what is motivation or use case for changing the behavior?
Color should coordinate with the item instead of the action.
This would better distinguish the impact a player makes when an action takes place. When we right-click we already know what we're looking for so we want to find it quick in the menu. If we have two colors, like 'Take Bronze Sword' and 'Examine Bronze Sword', it can confuse people. If the Bronze Sword
is the same color for whatever action acted upon it, it would be better, I believe.
As it stands this is how it is:
Which, in retrospect, is a bit confusing because it makes me think there are two different items at a cursory glance.
I think a better idea would be to group the items to have their own distinct (bright) color so we know what to look out for. For example:
Items: orange
NPCs: yellow
Players: white
(and so on)
What is the current behavior?
The socket message of a player logging in with wrong password goes back to the first-connected player in the world.
If the current behavior is a bug, please provide the exact steps to reproduce.
What is the expected behavior?
The socket message to go back to the original player.
Browser, OS, and Node version
Additional context
To get a feel of how to solve this.. on the server
folder, look into the fetch:items
handler on how to construct the data.
Do you want to request a feature or report a bug?
bug
What is the current behavior?
Items are not sorted by their attributed weight
property as dictated in src/core/player/data/actions.js
.
That way, you get things like this:
Common game theory dictates that severe (and damaging) action items like Drop
should be at the bottom while popular action items like Equip
should be at the top.
If the current behavior is a bug, please provide the exact steps to reproduce.
Right-click on any place allowed to display the context-menu.
What is the expected behavior?
The action items should be sorted by their weight
property.
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.