Coder Social home page Coder Social logo

maplibre / maplibre-gl-js Goto Github PK

View Code? Open in Web Editor NEW
5.7K 5.7K 615.0 430.68 MB

MapLibre GL JS - Interactive vector tile maps in WebGL2

Home Page: https://maplibre.org/maplibre-gl-js/docs/

License: Other

JavaScript 0.24% HTML 9.03% CSS 0.60% GLSL 2.26% TypeScript 87.87%
hacktoberfest maplibre maplibre-gl maplibre-gl-js typescript webgl2

maplibre-gl-js's Introduction

MapLibre Organization

https://www.maplibre.org/

This repository contains various documents that define the MapLibre Organization such as the Charter, our Code of Conduct, the list of Voting Members, and more.

You also find here the results of past Governing Board elections.

Formatting

Markdown files in this repo are formatted with markdownlint. If you have formatting problems you can sometimes fix them with:

npx markdownlint-cli *.md --fix

maplibre-gl-js's People

Contributors

1ec5 avatar anandthakker avatar andrewharvey avatar ansis avatar astridx avatar bhousel avatar birkskyum avatar brunoabinader avatar chrisloer avatar dependabot[bot] avatar dmitrig01 avatar harelm avatar jfirebaugh avatar karimnaaji avatar katydecorah avatar kkaefer avatar mikemorris avatar mollymerp avatar mourner avatar pozdnyakov avatar ryanhamley avatar samanpwbb avatar scothis avatar tatsvc avatar tmcw avatar tristen avatar vicapow avatar wipfli avatar yhahn avatar zhangyiatmicrosoft avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

maplibre-gl-js's Issues

Benchmark only compares against mapbox releases

For development, I need to be able to benchmark against maplibre releases (see https://github.com/maplibre/maplibre-gl-js/tree/main/bench for benchmarking mapbox / maplibre). However, as reference, maplibre benchmarks still fetch mapbox releases:

fetch('https://api.github.com/repos/mapbox/mapbox-gl-js/releases/latest')
.then(response => response.json())
.then(pkg => [pkg['tag_name'], 'main']))
.then(versions => {
return versions
.map(v => `https://s3.amazonaws.com/mapbox-gl-js/${v}/benchmarks.js`)
.concat('/bench/versions/benchmarks_generated.js')
.reduce((p, script) => p.then(() => loadScript(script)), Promise.resolve());
})

We can't simply replace this with maplibre specifics, because maplibe does not have any github releases yet:
https://api.github.com/repos/maplibre/maplibre-gl-js/releases/latest returns 404 (at the time of writing).

Even if we explicitly specify versions, there's also no bucket / hosting for maplibre-gl-js benchmark.js: https://s3.amazonaws.com/maplibre-gl-js/main/benchmarks.js

A minor related annoyance: It also still uses mapbox.com for the CSS of the benchmark results page:

<link href='https://www.mapbox.com/base/latest/base.css' rel='stylesheet' />


I have a number of potential performance changes and would like to submit them to maplibre, but I won't be able to test their usefulness if there's no good way to benchmark against the main branch, without convoluted hacks.

When porting my mapbox 1.12.0 changes to maplibre, I noticed that there have already been changes to hot code paths in maplibre or mapbox 1.13.0, so having recent benchmark releases is very much required.

Support custom source

Motivation

Sometimes getting the info to present a tile, whether it's raster or vector is not possible with the current implementation.
In those cases you need to be able to write some code that will return to MapLibre the tile in order to present it.
My example is the following:
I have a Cordova app that uses (or will use in the near future) this library.
I want to allow offline usage of the tiles.
This is currently not possible as far as I know.
I have created a fork of Mapbox-gl and this is in prodcution for almost a year now and is working great.
The only problem I have is that it wasn't merged to Mapbox.
I'm hoping it will find a good home here.
I'll send a pull request shortly.
The changes in the code are relatively small.
The idea came from a solution I did to openlayers (which is a great library but lacks performance when it comes to vector tiles).

Design Alternatives

Another solution to this besides what I will send in the PR is allow deriving from the VectorSource class, add registration somewhere and write a lot of code to accomplish this, which I don't think is the right approach, although might be more OOP.

Design

Very low code footprint for this design will allow it not to be a hassle to maintain and understand.

Mock-Up

No changes to UI/UX besides allowing custom sources

Concepts

Using a source that start with custom:// in the style will allow a developer to integrate a custom source function to facilitate for tile loading.
Tile loading can be from IndexDB for example or even from sqlite (mbtiles) file in a cordova/ionic apps (I have tested this to work).

Implementation

Add the ability to register a custom source function
When fetching a tile call that function.

The PR will shortly follow and this will be a lot easier to understand.
I still don't know how to address this documentation wise, and I'll be glad to get support on that.
I can open another issue in the docs repo for this before/after this is merged.

I know that this might not be a good time for this, I'm just opening this for when you'll have the time to resolve this.

Project does not match click event

I notice that the pixel coordinates that I get from project() do not match the ones from a click event.

mapbox-gl-js version:
1.13.0-rc.4
browser:
chrome

Steps to Trigger Behavior

  1. Pass a lat & lng to project()
  2. Get the coordinates of the same location via click event
  3. See missmatch

Expected Behavior

Pixel coordinates should match or at least be close to each other.

Actual Behavior

Disparity is very large
click: {x: 647, y: 360}
project: {x: 929.5205772562595, y: 28167.563284346284}

Make a basic publish-new-release.dockerfile

Building a release-generating-dockerfile is probably the easiest short-term way to get repeatable "semi-local" builds, deployable by more than just one person. Long term of course, we'd favor git actions or equivalent, but this will only make that step easier.

This is a good step toward #5

Bundle Size, Leaflet integration and more ...

Hi everbody!

Nice to see an effort for an open web!

I don't want to disturb the ongoing efforts for this project, but i had my problems with the original MapBoxGLJs implementation and I wonder what the community thinks about the following suggestions:

1: Leaflet Integration
I like leaflet.js and tried several times to integrate MapBox Tiles into leaflet (tried several plugins), but was not successful.
Why leaflet? Leaflet seems to be active in development and its looks like there are several "reinvention of the wheel" concerning features. Most important (for me), the bundled and gzipped size seems A LOT smaller. Last time I checked: 40 KB vs 220 KB!

2: Bundled size:
I also tried to figure out why leaflet is so much smaller than MapBoxGLJs, but due to the sheer size of MapBoxGLJS, I never had enough time to truly compare both libs. I guess, its just the different programming approach. MapBoxGLJS seems to be overengineered. Or does the webgl stuff take so much size?

3: EcmaScript "import":
I was always wondering why using the "import" is not done according to specs in so many libs and instead relying on a bundler in order to get a lib working. I know why "bundling" is currently common in web development, but http2 and the upcoming http3 makes bundling almost always superfluous and installing more than 20 Megabyte of "Bundler" Software in order to "bundle" seems more than wasteful. I don't want to start bragging about this nonsense and arising problems (like the latest webpack version broke many bundling pipelines.).
To put this in a nutshell: It should (and actually IS) possible to "Just download the source" and use a simple <script src> to integrate the lib. You know, just like jQuery in the old times.

Any feedback and discussion is greatly appreciated!

Greets, Chris

Rename primary build artifact to dist/maplibre-gl.js, but maintain full compat

What I’m planning to do if I find time, and if somebody else finds time I’d encourage them to try this path first, is….

  1. Change the build to output dist/maplibre-gl.js as the primary dist file (css too, but I won’t list it for the rest of this, too much words). This mainly means changing rollup.config.js (https://github.com/maplibre/maplibre-gl-js/blob/main/rollup.config.js#L11:L12), and package.json
  2. Then modify rollup to ALSO generate a wrapper JS in dist/mapbox-gl.js that is the webpack equivalent of export * from ./maplibre-gl.js , and prints a deprecation warning if you import it
  3. Finally, I plan to NOT update the dist/mapbox-gl.js filename in the tests, this will ensure that we are testing the compatibility shim fully for v1.13.0 (which will in turn test ./maplibre-gl.js since it just imports it)

I believe this combination of actions will allow us to have our cake and eat it to:

  • Tested full compat with the existing filepaths
  • Our “real code” is in a separate file under the maplibre-gl.js name
  • Minimal+safe build system change we can be confident in even though we’re relative n00bs at releasing this codebase

I think the biggest question is if we should make this the primary change in v1.14.0, or if we should block release of v1.13.0 on this. I'm leaning toward including this in v1.13.0, but its going to depend on me having time to do it.

Fork mapbox-gl-leaflet plugin and support maplibre

tried several times to integrate MapBox Tiles into leaflet (tried several plugins), but was not successful.

Actually, you can integrate vector tiles from Mapbox (or Maptiler, or your own vector tileserver ) in leaflet with the help of "mapbox-gl-leaflet" plugin: https://github.com/mapbox/mapbox-gl-leaflet

Originally posted by @Jonibigoud in #59 (comment)

Motivation

In order to use maplibre-gl fork, one might need to use it as a Leaflet plugin, like the mapbox-gl-leaflet official plugin

Rename CSS classes from `mapboxgl-*` to `maplibre-*`

Question to @maplibre/core -- should all CSS classes be renamed to maplibregl-*, or do we want to keep the original mapboxgl-* to be compatible with other code? Would this be a stylistic or a legal requirement? My understanding is that this would be part of the API, and thus could stay as is. Also I suspect this change would be a relatively painful for the endusers.

@types/maplibre-gl missing padding field in CameraOptions

Padding is missing in CameraOptions type definitions.

source: https://github.com/maplibre/maplibre-gl-js/blob/main/src/ui/camera.js#L65

export type CameraOptions = {
    center?: LngLatLike,
    zoom?: number,
    bearing?: number,
    pitch?: number,
    around?: LngLatLike,
    padding?: PaddingOptions
};

types: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/maplibre-gl/index.d.ts#L1781

    export interface CameraOptions {
        /** Map center */
        center?: LngLatLike;
        /** Map zoom level */
        zoom?: number;
        /** Map rotation bearing in degrees counter-clockwise from north */
        bearing?: number;
        /** Map angle in degrees at which the camera is looking at the ground */
        pitch?: number;
        /** If zooming, the zoom center (defaults to map center) */
        around?: LngLatLike;
    }

While the types have the padding option for bounds related methods, it looks like the other methods like jumpTo and easeTo take the padding into consideration:

https://github.com/maplibre/maplibre-gl-js/blob/main/src/ui/camera.js#L810

Update documentation to MapLibre

  • Update readme and other text documents to use MapLibre instead of MapBox.
  • Give proper credit to MapBox as the origin of the project

flyTo has discontinuous jump for some motions to points close to 180degrees of longitude.

maplibre-gl-js version:
1.13.0-rc.3
browser:
chrome safari firefox

Steps to Trigger Behavior

Use flyTo from a position of {center: [99.63705, 25.00275], zoom: 2} to {center: [175.3655, 35.7514], zoom: 0} as long as the window containing the map has width to height that is not too large.
See the simple demonstration link below.

Link to Demonstration

Resize the window so that the map is not too elongated and so that the window is large. Then click on ToOne let the motion end, the click on ToTwo
https://codepen.io/funmiles/pen/vYXqPNp

Expected Behavior

When clicking on ToTwo, the map should move left so that the center's longitude goes monotonically between 99 and 175.

Actual Behavior

The center's longitude starts to decrease, going into negative numbers (down to about -18) and then jumps to the final value.

Notes

The problem disappears if the final zoom is 1.
The problem is much less pronounced if the window is small.

Update code to use MapLibre

Update all code to use MapLibre. Fork any libraries that are no longer open source, or keep referencing MapBox's libs if they still are.

Resolve peer dependencies on mapbox-gl-js by packages we depend on

mapbox-gl-js has a circular dep relationship (via peer deps) with @mapbox/mapbox-gl-supported and @mapbox/mapbox-gl-rtl-text.

When we build:

[4/5] Linking dependencies...
warning " > @mapbox/[email protected]" has unmet peer dependency "mapbox-gl@>=0.32.1 <2.0.0".
warning " > @mapbox/[email protected]" has unmet peer dependency "mapbox-gl@>=0.32.1 <2.0.0".

Not sure what effects this will have, it might or might not be a v1.13.0 blocker? Relevant to #5

Remove "mapbox" strings from the codebase

Motivation

There are instances of "mapbox" and "Mapbox" sprinled all throughout the codebase as variable names and in strings.

Also, in the dist directory, the output files still have "mapbox" in them.

The issue is that this suggests some connection to Mapbox, the company.

Design Alternatives

It would be great to replace all instances of

  • "mapbox" with "maplibre"
  • "Mapbox" with "Maplibre"

Implementation

Phases:

  • Update built files published to NPM to not have mapbox in the name.
  • Update internal variable names that would not break anything.
  • Update class names in styles.

Do not remove Mapbox code

I wanted to write an anti-feature request, that is, to please do not remove Mapbox code (as in #21).

Right now, mapbox-gl-js 1.x is an almost perfect library to be used both with Mapbox sources and with independent sources. Setting an API key is 100% optional, it works perfectly without it.

If you do supply the key, then it enables all the mapbox:// specific features.

For example, my project is MapHub (https://maphub.net/), where users can select from multiple basemaps. Some of them are from Mapbox, some of them are from independent sources, and mapbox-gl-js 1.13.x works perfectly as of today.

If you decide to break mapbox:// sources, then using this library wouldn't be a possibility for me, and for many other users who'd like to keep using multiple providers, including Mapbox.

A much better approach would be to leave mapbox:// as it is and introduce alternative urls, like maplibre:// which doesn't apply the API token (today I have to use transformRequest + regex as a hack). Also renaming accessToken -> mapboxAccessToken would be a good thing, but definitely not removing the whole code.

Text is unreadable on some Chrome Android snapdragon devices

Due to poor Android snapdragon GPU driver, the text is unreadable on some devices:

I have this bug with my Nokia 2.1 on Android Go 10 using a Snapdragon 425

It would be awesome if we can work around this bug.

It is reported also in the mapbox-gl-js project:
mapbox/mapbox-gl-js#9370

mapbox-gl-js version:
1.13.0

browser:
Chrome on Android on some snapdragon devices

Link to Demonstration

https://user-images.githubusercontent.com/9271155/75809115-3bcbbd00-5d56-11ea-8750-d1c42716ec07.jpg

Expected Behavior

The text should be black

Actual Behavior

Texts appear white (or behind the white text shadow) so is unreadable

Remove .mapboxgl-canary and associated checks

This seems to be functional bloat at best. There are lots of valid use cases where someone might not want to use the default mapbox-gl css rules. Having a warning in the dev tools doesn't help. If the style is messed it's pretty clear to the developer if there is no css. But creating a dom element and check whether that elements background colour is salmon just for the sake of putting a warning for a missing css which may be intentional seems wasteful.

Basic Starter Example

Motivation

People who want to get started with this do not have a quick startup guide or working example.

Design Alternatives

Add a link in the README to either:

  • Startup guide page / tutorial, or
  • Working starter example in some hosted code place

Implementation

Here's a working basic example: VizHub: MapLibre GL Starter

I welcome you all to link to this, include it in this repo, port it into other platforms, etc.

Support ThreeJS for global coordinate

MapboxGL has a example to render ThreeJS scene by using a CustomLayer. They just transforms the coordinate from global to local ,they used (0,0,0) for one particular latitude and longitude coordinate in world. I know this way they can avoid the accuracy lost in GPU, and it work every very in a small area. But if I want add multiple 3D-Object to map in a very large scale, I have build multiple scene and renderer to CustomLayer. obviously that's very expensive and clearly not the best way.
I try to fix this problem by my own, but I don't have the ability to solve that, so I turn to you gays. If this feature request can't get in to roadmap, please at least show me how to do that, just show me a path is probable enough.
PS: I'm not a native English speaker, so if you see any grammatical errors, please just ignore that, I did my best to write these words.

Migrate to TypeScript

I would like to propose this project is migrated to TypeScript as a goal for v2 or v3 release.
Partially relates to #24

Symbol texts shouldn't rendering above all images on same layer

Motivation

See this issue for context.

I think this should be a priority(ish) for both Mapbox and this fork (issue has been open for 4 years). One of the main reasons to render markers and clusters with WebGL is performance and stuff like generating icon textures on the fly defeats that purpose (which is feasible if you have couple hundred different image-text combinations in the first place).

I think this is quite common use case and I'm very surprised it hasn't been solved yet.

Design Alternatives

AFAIK, issue exists because symbol images are rendered in one pass and texts in another which causes all texts rendered on top of all images on same layer.

I'm not sure what's the great solution to this. ..

  • Render symbols as a single unit (i.e both image and text)?
  • Track relationships and set text "z-index" value to match with related image?

Rendering performance is probably going to get worse (i.e time per 1000 symbols or something) if both images and texts are used in same symbol but it's still a lot better than broken implementation.

Design

Let's discuss.

Mock-Up

Concepts

Implementation

Support non-sprite images

Motivation

When designing a map one needs to place all the icons inside a sprite. Our site provides a way to show custom styles created by users. But the sprite is "hard coded" and updating even the basic site style has to be on two steps: 1. Update sprite, 2. Update style.

Design Alternatives

Should facilitate easier map design.

Design

Allow using icon: url in style spec

Concepts

Implementation

I was thinking of using the loadImage method somehow, still not sure... Need to investigate...

Consider an OSS azure-map-control for maplibre to get higher-level APIs

My team created a wrapper of the Mapbox gl js SDK to create a more enterprise API interface, add better accessibility support and make it easier to create extensions. We had planned to make it open source once there was enough added value in it (we recently started to feel this is the case). Would there be any interest in this if we make this open source. Here is the docs: https://docs.microsoft.com/en-us/azure/azure-maps/how-to-use-map-control and here is the API interface: https://docs.microsoft.com/en-us/javascript/api/azure-maps-control/?view=azure-maps-typescript-latest The Mapbox Map instance can be accessed and used directly for those who want to use the existing Mapbox API through the "map.map" property. This SDK does use Azure Maps services, however, if you set the map style to blank and disable telemetry, the SDK won't make any calls to Azure Maps and you can use any tile service you want, no need for any Azure Maps authentication details either.

WCAG 2.1 Accessibility Evaluation

As a member of the W3C Maps for HTML Community Group I set out to briefly evaluate the state of accessibility in popular web maps tools for the 2020 W3C/OGC Joint Workshop Series on Maps for the Web which included MapBox GL JS, thus the assessments largely apply to MapLibre as well. Some fixes were introduced in mapbox/mapbox-gl-js#9991 which MapLibre inherited. 👍🏼

The evaluation report lives here: https://github.com/Malvoz/web-maps-wcag-evaluation/blob/master/README.md

I'm hopeful that MapLibre will strive to build inclusive components for an accessible experience for its users. I suggest adding an "accessibility" label to issues relating to this topic, to encourage contributors to think about accessibility (and for issue tracking purposes of course).

Accessibility can be hard sometimes, consider adding a section about accessibility in the CONTRIBUTING.md document to advocate for building accessible content, perhaps including useful resources (something a long the lines of what I proposed for Leaflet in Leaflet/Leaflet#7277).

MapLibre is a great initiative!

[Question] Sources tagging

I am wondering if there is any plan to tag sources when releasing npm packages.
This was original Mapbox practice - source code tags were in sync with released npm packages.

Currently there is a problem with maplibre-gl-js-docs. I am trying to migrate mapbox-jl-js submodule to maplibre-gl-js but the pinning test (the submodule-migration branch https://github.com/maplibre/maplibre-gl-js-docs/tree/submodule-migration) is failing currently:

yarn run test

yields

yarn run v1.22.10
$ yarn run lint
$ eslint --ext .html docs/pages/example --ext .js .
$ tape test/*.test.js | tap-min && yarn run lint-md && yarn run test-content && jest

Mapbox GL JS submodule is not pinned to the latest stable release version. Latest: v0.0.0. Currently checked out: v2.0.0. To proceed, pull the latest from publisher-production and merge with "git merge publisher-production" from the feature branch. Or, notify @mapbox/docs.
        at:       '<anonymous> (/Volumes/Src/src/MapTiler/Documentation/maplibre-gl-js-docs/test/latest-version.test.js:24:11)'
        operator: ok
        expected: true
        actual:   false

In the test above the version resolved from npm is:

npm info maplibre-gl versions --json
[
  "0.0.0",
  "1.13.0-rc.0",
  "1.13.0-rc.1",
  "1.13.0-rc.2",
  "1.13.0-rc.3",
  "1.13.0-rc.4",
  "1.13.0-rc.5"
]

And the version resolved from MapLibre repo is

git rev-parse HEAD
# => fdafaf665a9313c5075adfc0248d839eaf34c5d2
git rev-list -n 1 fdafaf665a9313c5075adfc0248d839eaf34c5d2
# => fdafaf665a9313c5075adfc0248d839eaf34c5d2
git tag --contains fdafaf665a9313c5075adfc0248d839eaf34c5d2
# =>
# [email protected]
# [email protected]
# v2.0.0
# v2.0.1

And since the expected tag format is v*.., it resolves to v2.0.0.

I could tweak the tag format in the script but I need source code to be tagged when releasing npm packages.
The pinning test is a good practice I think, it enforces that the submodule is checked out at the latest published version.

Suggest docker solution to help on setting up build/test/run environment

Motivation

As a developer, I'd like to be able to quickly manage environment without changing my own or spending time on it.

Design

Dockerfile and docker-compose.yml setup could help a lot to build with simple commands as:

Build environment: docker-compose build base

Debug: docker-compose run debug

Make packages (single js, minify, and so on): docker-compose run package

Financial Support

We are a Belgian startup relying a lot on MapBox toolset and open libraries.
Like a lot of people, we where surprised by the TOS & License changes in MapBox GL 2.0

We are more than willing to bet on MapLibre, and are in the progress of migrating all our projects towards it — we will probably contribute to the project at some point during this process.

Meanwhile, we would like to financially support the project at our small scale — and I'm pretty sure that would be the case of a lot of other organisations.

Would you open an Patreon or OpenCollective account ?

Logo needed

MapLibre still needs a logo! There are some contributions on Twitter but its seems there is not an obvious winner.

Logo

  • needs to be copyrighted to the MapLibre project
  • needs to be in vector format (e.g. SVG)
  • should also work (partially) in very small and/or quadratic sizes like in favicons

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.