GithubHelp home page GithubHelp logo

w3c / presentation-api Goto Github PK

View Code? Open in Web Editor NEW
71.0 41.0 49.0 3.76 MB

Presentation API

Home Page: https://www.w3.org/TR/presentation-api/

License: Other

Makefile 0.04% HTML 99.96%
second-screen

presentation-api's Introduction

presentation-api's People

Contributors

anssiko avatar autokagami avatar avayvod avatar chrisn avatar dontcallmedom avatar dret avatar foolip avatar hongkicha avatar hsablonniere avatar hyunjunekim avatar kenchris avatar lauweijie avatar louaybassbouss avatar mfoltzgoogle avatar mounirlamouri avatar plehegar avatar schien avatar tagawa avatar tidoust avatar tomoyukilabs avatar youkinjoh avatar youri-jeong 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

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

presentation-api's Issues

Review the use cases and requirements

The Presentation API attempts to address the use cases and requirements outlined in the specification at: http://w3c.github.io/presentation-api/#use-cases-and-requirements-0

We should evaluate the UCs and Reqs we laid out initially, and based on group discussion and consensus see if changes are needed. For example, people working on the implementations may have discovered new requirements that we did not anticipate initially that would be in scope for the group. I propose we discuss this at F2F time permitting, and to make for a productive session, more complete proposals for new use cases and requirements should be provided before the meeting.

Finalize specification for reconnecting to existing presentations

From http://lists.w3.org/Archives/Public/public-webscreens/2014Aug/0003.html and replies:

Proposed is a mechanism for reconnecting to existing presentations, either when the controlling page navigates, or a page is notified of the existence of a presentation via some out-of-band means (cookies, a server, etc.).

One option considered:

partial interface NavigatorPresentation : EventTarget {
  PresentationSession requestSession(DOMString url,
                                     optional DOMString presentationId,
                                     optional boolean onlyReconnect);
}

This would reconnect to the presentation identified by the url and presentationId; if onlyReconnect is set to 'true', the user would not be prompted to start a new presentation with those parameters.

Another option:

partial interface NavigatorPresentation {
  PresentationSession startSession(DOMString url, DOMString sessionId);
  PresentationSession joinSession(DOMString url, DOMString sessionId);
}

Which makes the choice of starting vs. reconnecting more explicit.

Add facility for the opening page to add cloud paired screens as presentation targets

The assumption thus far is that the user agent is the only entity that can determine what screens are available for presentation. However, some sites will be able to access screens entirely based on interaction over the Internet, i.e. using XHR or WebSockets to a server, or perhaps WebRTC. Ideally these should be offered to the user as presentation targets alongside browser-discovered screens, so that the site author doesn't have to offer two distinct presentation mechanisms.

Considerations:

  • The browser would only be responsible for offering the screen as a choice, and informing the app that it was chosen for presentation. It would not be responsible for any further interaction.
  • These screens would need to be clearly and distinctly labeled as belonging to the site, and not part of the automatic discovery process by the browser.

I think this is a useful enhancement that would allow innovation and extension over browser-provided presentation capabilities.

Screen availability mechanism for multiple sessions

Description

A user may have more than one second screen available and an application may want to take advantage of all these screens at once. However, as things stand, such an application:

  1. cannot tell whether there is another unused screen available
  2. cannot force the user to select another unused screen when it calls startSession a second time
  3. cannot tell the user that it wants to connect to multiple screens at once (but note that is covered by #1)

Proposal

Improve the screenavailable mechanism so that the flag reflects the presence of unused second screens at any time?

References

See initial discussion in https://lists.w3.org/Archives/Public/public-secondscreen/2015Jan/0012.html
See also #1 (multi-display support) and #39 (resumption of multiple sessions)

Multi-display support

The current spec considers only one connected display. From my point of view I think it is better to support multiple displays that can be connected to the same Browser. Example: Presentation with slides view on one screen and notes view on another screen and mobile device as input device.

Define lifetime of the presented document; when can the user agent close the document

Presumably the user agent will provide the ability for the browser with the initiating page to close the presented document (local or remote). However we may want the user agent to close it on the user's behalf when:

(1) There are no controlling sessions connected for some period of time (e.g., idle timeout)
(2) The presentation is being rendered locally (1-UA) and the media stream has has been terminated permanently.
(3) The presentation is being rendered locally and the user wishes to exit the user-agent.
(4) The presentation wishes to terminate itself.

Some of these scenarios can be implemented by the app developer; if so the behavior of e.g. window.close() should be defined in the presentation context.

How to filter available screens according to the content being presented

If we allow the page to filter the set of presentation screens based on capabilities, then more bits of more information would be revealed. This feature, if implemented, should take privacy into consideration.

It is an open issue whether to provide filter information as part of the request for notification of available screens. This could be useful when a particular application or capability is needed in order to display the contents of a presentation. One possible approach to this could be to provide the URL for the presentation and / or required options as part of the request for notification of available screens. If this was supported, only screens that satisfied the filter would trigger a notification.

The difference between index.html & Overview.src.html

Hi, all.
I would like to make some minor editorial changes on our document.
I see two very simliar looking files at the master directory: index.html & Overview.src.html
Could anybody tell me the difference between these two?
To be more precise,
Why do we need the spec source (Overview.src.html) and the generated spec (index.html) separately?
Thanks in advance!

Define exceptions to be thrown in startSession and joinSession rejection

The algorithms for startSession and joinSession indicate that specific error types like PermissionDenied and NoPresentationFound should be used when rejecting the Promises returned to the caller. However @avayvod has pointed out these types are not part of the DOMException list for WebIDL.

If we wish to use these types we should define our own PresentationError object with Presentation-API specific error types.

Alternatively, we could try to re-use existing DOMException types, which seems to be done in other specs (Push API, Service Workers API).

Also see:

Define reconnection for cross-page navigation on presenting user agent

Via http://lists.w3.org/Archives/Public/public-webscreens/2014Aug/0003.html

The specification does not define when the user agent rendering the presentation will be able to access the session across page navigation.

One proposal is to have the PresentationSession implement Transferable so it can be passed to and from a SharedWorker.

Another option would be for the presented page to reconnect to the session in a manner similar to the controlling page (see https://github.com/webscreens/presentation-api/issues/15).

A third option is for navigation to always terminate the presentation. This simplifies the API and gives the session a well defined lifetime, but may be limiting to some developers.

Define user agent context for rendering the presentation

The spec should specify any restrictions on the presenting browsing context when the opening browsing context is in "incognito" mode.

From public-webscreens and related threads:

The specification should define the behavior of the following Web features for the presenting page across presentation sessions. The goals are the following:

  1. Ensure that the same presentation will behave correctly in the 1-UA and 2-UA cases
  2. Information does not leak from presentation session to session in cases where the controlling pages may represent different authorization domains (e.g., logged-in users).

The following Web features have been discussed (and there may be others to consider):

  • Cookies and local storage
  • Sensor APIs (geo, orientation, etc.)
  • Browser extensions
  • HTTP Cache
  • Shared Workers

Specify 1:n communication between a PresentationSession and multiple connected PresentationSession

In some scenarios the presented page may have active connections to multiple PresentationSessions on other pages. In a gaming scenario, each connected session would represent a game player. Some information (like dealing a card into the hand) should be sent to one player, while other information (playing a card face up) should be sent to all players.

We need to specify:
(1) How the presented page may communicate to a specific connected page
(2) How the presented page may broadcast - communicate to all specific connected pages

Resumption of multiple sessions

Description

If a page created two different sessions for the same URL and presentation ID on two different screens, how can it reconnect to both sessions?

The current algorithm for reconnecting sessions returns the session that was most recently connected to.

Proposal

Should joinSession rather return an array of PresentationSession objects?
Should the page rather use different presentation IDs?

References

See initial discussion in https://lists.w3.org/Archives/Public/public-secondscreen/2015Jan/0012.html

Define security requirements for messaging channel between secure origins

public-secondscreen thread:

While discussing the Hbb 2.0 TV standard, the issue of how WebSockets would be used to communicate between the controlling Web application and the presenting TV Web application.

If these Web applications are provided on secure (https://) origins, some guarantees of message confidentiality and authenticity of either party should be made to meet the standards set out by the Mixed Content proposal.

This issue will be addressed by a spec change to spell out the security requirements for the messaging channel as part of the Security and Privacy sections of the spec.

Presenting the content of an <audio> or <video> element

From, e.g. http://lists.w3.org/Archives/Public/public-webscreens/2014May/0061.html and replies:

Requesting display of non HTML content


The second issue at stake is about specifying what happens when a call such as the following is issued:

navigator.presentation.requestShow('video.mp4');

The main problem is that, regardless of where this runs, this does not create a "browsing context" as such since a video is not an HTML document.

While it's easy to see how a browser could create a fake browsing context for the video (as is done in practice when you open a link to a video in your browser), it's hard to see how the initiating page can communicate with the created browsing context to control video playback.

The proposed solution would involve the

This issue tracks the work needed to specify this behavior.

Make the Example section more concise

As we make progress with the spec and the normative sections begin to be self-contained, we may want to carve out the now very extensive Requirements and Example sections into its own "Use Cases and Requirements (and Examples)" document we can evolve in tandem with the API specification at a later stage, referenced from the API spec. Perhaps leave one concise example in the spec.

Adding an asynchronous getter (Promise) for screen availability status

From http://webscreens.github.io/presentation-api/#open-questions:

If there are already connected screens when the page subscribes to the onavailablechange event, we can handle this in two ways: We can synthesize one initial event to notify the page about available screens as soon as the first event handler is installed (as described). Or we can add another message like navigator.presentation.getAvailable(function(available) { } ); to notify the page about available screens using this one-time asynchronous getter. Which way should we go?

Also see: https://github.com/webscreens/presentation-api/issues/8

[meta] First Public Working Draft publication requirements

This is the meta issue to ensure we meet the W3C Process requirements for the First Public Working Draft publication.

Per the W3C Process [1], to publish the First Public Working Draft of a document, a Working Group must meet the applicable general requirements for advancement, enumerated below:

  • must record the group's decision to request advancement.
    • CfC ended without concerns
  • must obtain Director approval.
  • must provide public documentation of all substantive changes to the technical report since the previous publication.
    • not applicable, since this is a FPWD
  • must formally address all issues raised about the document since the previous maturity level.
    • not applicable, since this is a FPWD
  • must provide public documentation of any Formal Objections.
    • no FOs
  • should provide public documentation of changes that are not substantive.
  • should report which, if any, of the Working Group's requirements for this document have changed since the previous step.
  • should report any changes in dependencies with other groups.
  • should provide information about implementations known to the Working Group.

[1] http://www.w3.org/2014/Process-20140801/#first-wd

Define whether multiple simultaneous calls are permitted to startSession()

[email protected]:
Are multiple simultaneous calls permitted to startSession()? My intuition is "no", but I would like to ask the group if there are any use cases where this is necessary. If the answer is "yes" it adds some constraints and complexity to the user interface for screen selection in the browser. In particular if we return a Promise from startSession() then I am not sure how we would enforce one-at-a-time.

Use the latest general W3C Document License

@tidoust noted that the newly updated W3C Document License [1](effective 1 February 2015) affects all publications, including specs that have already been published, so our spec will de facto adopt that updated license. The custom text defined in the WG's charter (that landed recently) has become redundant with the license.

TL;DR - we should update the license boilerplate again (sorry for the boilerplate churn).

[1] http://www.w3.org/Consortium/Legal/2015/doc-license

URL schemes supported in presentation API

Presentation API addresses currently presentation of hosted web content (e.g. accessible via http:// or https://). According to the spec, presentation URLs follows the URL Standard. Questions is: are there other relevant URL schemes for Presentation API? for example data: scheme can be used in the following way:

var presentationUrl = 'data:text/html,<!DOCTYPE html><html><body><p>Test</p><script>/* inline JavaScript that may use navigator.presentatoion.session */</script></body></html>';
var session = navigator.presentatoion.startSession(presentationUrl);

Also the file:// protocol could be relevant for non-hosted web content for example for Packaged Web Application like W3C Widgets.

All relevant schemes need to be evaluated regarding limitations, security implications, performance etc. for usage in Presentation API. Also use cases to derive requirements are needed.

Presentations from within nested browsing contexts

[Carved out into its own issue from https://github.com//issues/26#issuecomment-91708418]

@mfoltzgoogle says:

@avayvod In Chrome have been discussing how browser-initiated
presentation interacts with multiple <iframe>s embedded in the
controlling page. For now, we are only enabling browser-initiated
presentation from the default presentation URL set in the top level
document. However, there is a use case for allowing it from an
embedded <iframe> for sites using a third party player to show a
single piece of video (or other) content.

We have discussed possible solutions, including:

  1. Having the <iframe> pass a URL to the parent document to set as the
    default presentation URL. The problem here is that the
    browser-initiated presentation session would go to the parent
    document, not the <iframe> that has the presentation control logic for
    the video player.
  2. Picking an <iframe> DPU if none is set at in the parent. This may
    lead to surprising behavior for the user, since the user is expecting
    to present content related to the parent document, which cannot
    directly control the behavior of the <iframe>.
  3. Allowing the user to choose from a list of default presentation
    URLs in the document. This complicates the UX for starting a
    presentation and it will be difficult for the user to make a
    meaningful choice (who provides the URL is an implementation detail of
    the webapp).

Instead we are considering adding a capability to the <iframe>'s
sandbox attribute, "allow-default-presentation", that would allow the
parent page to designate up to one iframe per document as the source
of the default presentation URL for browser initiated presentation.
This attribute would be respected only for <iframes> one level deep.

Security and privacy considerations

We should complete the Security and privacy considerations section to the Presentation API once we're better aware of the threats.

The spec has been evaluated against Self-Review Questionnaire: Security and Privacy, with results documented in this issue. Furthermore, the Privacy Interest Group (PING) has produced documentation that may be helpful, namely Fingerprinting Guidance for Web Specification Authors and Privacy Considerations for Web Protocols. The Web Security IG review and PING review of the specification have been initiated. This sections should be crafted based on feedback from the respective reviews.

Conformance classes definition

The Presentation API distinguishes between the two sides of the equation: the opening browsing context and the presenting browsing context. The interfaces that user agents need to implement are different depending on which side you consider. Also, I think we envision user agents that can run an opening browsing context but cannot run a presenting browsing context, and conversely user agents that can run a presenting browsing context but cannot run an opening browsing context.

In spec parlance, this means that there exists (at least) two different classes of products that can claim conformance against the Presentation API specification. The specification should be explicit about this in the Conformance section and clearly identify the interfaces, algorithms and normative statements that apply to a given class of products.

This is somewhat different from most other JavaScript APIs that target a single user agent and thus can remain pretty laconic on the definition of classes of products. As a counter example, the HTML5 specification defines different classes of products, including Conforming documents, Web browsers and other interactive user agents and Conformance checkers [html5].

The definition of classes of products can remain pretty simple. As a starting point, I would suggest to reference the definitions of opening browsing context and presenting browsing context with wording in the Conformance section such as:

[[
This specification describes conformance criteria for two classes of products:

  • An opening user agent is a user agent that can initiate or resume a presentation session, thus creating an opening browsing context. An opening user agent must implement the interfaces defined in sections (to be completed).
  • A presenting user agent is a user agent that can run a presenting browsing context. A presenting user agent must implement the interfaces defined in sections (to be completed).

A user agent may act both as an opening user agent and as a presenting user agent, provided it implements all the required interfaces. This happens, e.g. when the opening user agent runs the presenting browsing context locally, or when the presenting user agent wants to allow a presenting browsing context to initiate or resume a presentation session on its own.
]]

We could also treat the 1UA case as a separate class of products but I am not yet clear whether we will need to define normative statements that will only apply to the presenting browsing context when it runs in the opening user agent.

Having clear classes of products is good practice (see relevant guideline in "QA Framework: Specification Guidelines" [qa]). It is useful to make conformance claims but note it also helps with testing (see "A Method for Writing Testable Conformance Requirements" [test]) and specification authoring (once you have clear classes of conformance, you will probably want to separate interfaces as suggested in #91 to make it easier for readers/developers).

Feel free to suggest better definitions. The main point in this issue is not the text in itself but the fact that the spec needs to define the conformance classes.

[html5] http://www.w3.org/TR/html5/infrastructure.html#conformance-classes
[test] http://www.w3.org/TR/test-methodology/
[qa] http://www.w3.org/TR/2005/REC-qaframe-spec-20050817/#what-conform

Refine how to do session teardown/disconnect/closing

There are rough edges when it comes to closing the session, resuming it. We need to gain experience from implementations what happens, when the session is disconnected, user-closed, remote-end closed etc.

This section is one aspect of this, but probably the example section needs to shed more light on how expected and unexpected disconnects are handled.

Define a Multiplayer Gaming Use Case

Poker

Bob enters an online poker site on his smartphone to play poker with friends. He selects the option "create new game" to start a game session for two players. The poker site detects that there is display available and asks Bob to extend the game UI by keeping his personal cards and control UI on the smartphone and displaying the poker table on the large display. Bob confirms and waits for other players to join. Alice is visiting Bob and decides to join the game. She opens the same poker site in the browser on her smartphone and selects the option "join game". The browser shows a dialog with a list of running poker sessions. She selects the session started by Bob and joins the game. The game starts immediately after two players are joined. Now Alice and Bob can see their personal cards on their smartphones and the large screen displays the poker table with shared cards, current bets, and remaining money of each player.

Poker Player View

player1

Poker Table Screen

table1

Specify the NavigatorPresentation.session attribute and its related algorithms

[Migrating the following inline issue from the spec into the issue tracker:]

The purpose of the session attribute is to provide the presented page with access to the PresentationSession without allowing a potential race condition between the registration of an event handler and the firing of an event, or complicating the browser implementation to fix this case. It should be null in an opening context and non-null in a presented document.

Rethinking availability monitoring

The current events-based API for availability monitoring relies on the following side-effect: adding/removing a listener for the availablechange event starts/stops discovery. This is discouraged (see the historical discussion [1], also implementability concerns [2]).

A promise-based API is proposed as the solution [2][3].

[1] https://lists.w3.org/Archives/Public/public-device-apis/2011Sep/0025.html
[2] https://lists.w3.org/Archives/Public/public-secondscreen/2015Apr/0079.html
[3] https://lists.w3.org/Archives/Public/public-secondscreen/2015Apr/0068.html

Allow page to turn itself into a presentation session

Proposal

Enable a Web application to turn itself into a Presentation session so that it can be discovered by others. A possible technical solution would be to use a meta element.

For instance, to turn a Web application into a public Presentation Session:
<meta name="presentation" />

To turn a Web application into a private (or invitation-only) Presentation Session:
<meta name="presentation" content="[[presentationId]]" />

Use case

A user starts a Web application on her Smart TV from the usual TV remote that displays family pictures and videos in the background. While the application runs, her child opens the same application on his tablet, joins the running presentation application on the Smart TV and adds pictures and comments to the slideshow.

What is not possible right now

The Web application started on the Smart TV cannot advertise itself as a presentation session since it got started as a "regular" application.

Note it becomes possible as soon as the Web application on the Smart TV is started from another device using the Presentation API, but the goal is to avoid that step.

Could this be implemented at the UA level?

Not likely in the generic case.

The UA could propose a "start this application as a presentation session" menu item, but this is unlikely to serve any useful purpose in most of the cases as applications that will be able to be started as such will be exceptions-to-the-rule (at least for some time to come!).

The UA could perhaps detect whether the JavaScript of the application makes use of Presentation API interfaces before proposing that choice, but it's easy to use obfuscate code in JavaScript and hide the code to Presentation API interfaces.

In a packaged app environment, the application could also perhaps request to be run as a Presentation session in a manifest file.

Requirement

The receiving UA must provide a means for a Web application to turn itself into a presentation session that may discovered by others.

A few open questions

  • The UA only becomes a "receiving" UA once a Presentation session is started. Question is whether any browser implementing the Presentation API should also support becoming a receiving end (linked to the definition of "conformance classes" in the spec). Probably not.
  • Should the page also have a programmatic way of requesting to be turned into a presentation session (to prevent connection attempts as long as they are not wanted) or should that be left to the app itself?
  • The feature has security implications. The user may not want to advertise an app as discoverable on a public network for instance.

References

See initial email on Second Screen Presentation WG mailing-list:
http://lists.w3.org/Archives/Public/public-webscreens/2014Nov/0011.html

Allow page to designate a default presentation URL

Some user agents may wish to allow the user to initiate presentation from the browser instead of by triggering it via an action on the page. This is analogous to choosing "Print" from the browser menu instead of calling window.print().

In this scenario, the page should be able to designate a default presentation URL that will be shown when the user initiates presentation via the browser. This issue tracks the work to define the specification and the user-agent behavior around this URL.

Make the "set of presentations" variable global

We refer to the variable D in the "Starting a presentation session" algorithm [1] without first declaring and initializing it:

Add (S.url, S.id, S) to D.

Since we refer to D in many places and it holds global state, we should define D as a global variable, and refer to the global from within related algorithms. Something like:

Each XXXX has a <dfn>set of presentations<dfn>.

And then link to the global definition from within the algorithms, e.g.:

Add (S.url, S.id, S) to <a>set of presentations</a>.

What would be XXXX above i.e. what do we mean by "known by the user agent" specifically? Is the set of presentations associated with the document's origin similarly to e.g. Web Storage [2]? If so, we could reuse some of the prose from that spec and adapt.

[1] http://w3c.github.io/presentation-api/#starting-a-presentation-session
[2] http://www.w3.org/TR/webstorage/#the-sessionstorage-attribute

Multiple presentation devices

Media flinging use case requires Presentation API to support multiple presentation devices at the same time [1].
Specification has to be updated to reflect that in different sections:

  • new requirement to be added
  • methods for starting/joining session to support startup of a session on multiple screens
  • screen selection algorithm and possibly UI to indicated that screen is already in use

[1] http://w3c.github.io/presentation-api/#use-cases-0

Separate interface for controlling page and presenting page

Currently we mix the API for controlling page and presenting page in NavigatorPresentation and developer will use navigator.presentation as the entry point.

Since we are providing more and more advance feature in this API (see #19), it's cumbersome to provide statement on the usage of each attribute/function.

Therefore I propose to move all presenting page APIs into a different interface, called PresentingContext. The example definition will looks like:

interface PresentingContext : EventTarget {
  Promise<PresentationSession> getSession();
  Sequence<PresentationSession> getSessions();
  attribute EventHandler onsessionavailable;
};

partial interface Navigator {
  readonly attibute PresentingContext presentingContext; // null if not presenting page
};

Provide session lifecycle management for presenting page

Currently we only provide the session initial/resumption/teardown algorithm for controlling page. Since Mozilla is the first implementation that use HTML5 in presenting side, we'd like to contribute the session management algorithm to spec.

Define reconnection for cross-page navigation of presented page

Via http://lists.w3.org/Archives/Public/public-webscreens/2014Aug/0003.html

The specification does not define when the presenting user agent will be able to access the presentation session across page navigations.

One proposal is to have the PresentationSession implement Transferable so it can be passed to and from a SharedWorker.

Another option would be for the page to use session reconnection in a manner similar to the presenting page (see https://github.com/webscreens/presentation-api/issues/15).

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.