Git Product home page Git Product logo

dotnet-websharper / core Goto Github PK

View Code? Open in Web Editor NEW
583.0 33.0 52.0 26.74 MB

WebSharper - Full-stack, functional, reactive web apps and microservices in F# and C#

Home Page: https://websharper.com

License: Apache License 2.0

F# 94.47% C# 4.38% JavaScript 0.34% Batchfile 0.01% PowerShell 0.08% Shell 0.01% CSS 0.01% HTML 0.29% TypeScript 0.41%
websharper fsharp csharp frp mvu functional fullstack microservices static-site-generator

core's Introduction

WebSharper

Join the chat at https://gitter.im/intellifactory/websharper

WebSharper is an F#-based web programming platform including compilers from F# and C# code to JavaScript.

Building and contributing

This readme is directed to end users. To build the WebSharper compiler and core libraries for yourself, please refer to the contributing guide.

WebSharper is an open-source project, and contributions are welcome!

Also don't hesitate to report issues on the tracker.

Installing

The easiest way to get started is from an application template. You can install the various WebSharper project templates by following the instructions below for:

Alternatively, you can use the F# Yeoman Generator to install template files for your favorite editor. You can then build your project by running msbuild in the project root folder.

Creating WebSharper project by hand

If you are using any one of the available WebSharper project templates, they should compile and run without any modifications.

If you are creating your project files manually, the following is a typical string of steps to get you up and running, although you should really consider starting off of an existing WebSharper template:

  • Start from an ordinary F# library project

  • Install WebSharper using paket. This will include the main WebSharper.targets and the core references in your project file.

  • Add a special project file property to drive how you want to compile your project. These are:

    • <WebSharperProject>Html</WebSharperProject> for HTML Applications
    • <WebSharperProject>Site</WebSharperProject> for Client-Server Applications
    • <WebSharperProject>Bundle</WebSharperProject> for Single-Page Applications
  • Include any further bits in your project file you may need. For instance, you will need to reference Microsoft.WebApplication.targets if you intend to host your application in IIS or the built-in web server in Visual Studio.

Running your applications

With the exception of the self-hosted templates, all WebSharper templates produce applications that can run inside an ASP.NET-compatible container. (HTML applications can be deployed in any web server by copying the contents of the bin\html folder.)

In the examples below, you will see how to create WebSharper sitelets. Sitelets are web applications encoded in the F# type system. They have a set of endpoints (accessed via GET, POST, etc.) to which they respond by serving web content asynchronously. You can run these the following ways:

  • In ASP.NET Core or hosted in IIS or any other compatible container

    Annotate your main sitelet with the [<Website>] attribute:

    [<Website>]
    let MySite = ...
  • As a Suave application

    Suave is a light-weight web server built in F#. You can easily use WebSharper in your existing Suave application, or host your WebSharper applications (which should be a console project) on Suave, by adding WebSharper.Suave to your project and calling the WebSharper adapter to convert your sitelet to a Suave WebPart:

    module WebSharperOnSuave
    
    open WebSharper
    open WebSharper.Sitelets
    
    let MySite =
        Application.Text (fun ctx -> "Hello World")
    
    open global.Suave
    open Suave.Web
    open WebSharper.Suave
    
    startWebServer defaultConfig
        (WebSharperAdapter.ToWebPart(MySite, RootDirectory="../.."))

Hello World!

With WebSharper you can develop pure JS/HTML, and single- and multi-page web applications with an optional server side, all in F#. Unless you are looking for low-level control, we recommend that you start by creating a sitelet.

The simplest sitelet serves text on a single endpoint at the root of the application:

module YourApp

open WebSharper
open WebSharper.Sitelets

[<Website>]
let Main = Application.Text (fun ctx -> "Hello World!")

Single Page Applications

While serving text is fun and often useful, going beyond isn't any complicated. For instance, you can easily construct single-page applications:

module YourApp

open WebSharper
open WebSharper.Sitelets
open WebSharper.UI.Html
open WebSharper.UI.Server

[<Website>]
let Main =
    Application.SinglePage (fun ctx ->
        Content.Page(
            h1 [] [text "Hello World!"]
        )
    )

This code creates an empty HTML document and inserts a header node.

HTML responses

Pages are a special type of content responses, and you can easily finetune them by specifying where you want content to be added, by using an optional Title, Head, Body, and Doctype.

    ...
    Application.SinglePage (fun ctx ->
        Content.Page(
            Title = "My Hello World app",
            Body = [
                h1 [text "Hello World!"]
            ],
            ...
        )
    )

You can construct HTML via the (soon legacy) WebSharper 3.x markup combinators in WebSharper.Html.Server and WebSharper.Html.Client (for client-side markup, see the section below), or using the next generation reactive HTML language from WebSharper UI (as above and in the examples on this page; formerly called UI.Next). A quick syntax guide to the HTML constructors in WebSharper UI:

(TBA)

Custom responses

Content responses are asynchronous. Next to full HTML pages, you can return:

  • Plain text with Content.Text:

    Content.Text "Hello World!"
  • JSON values with Content.Json (visit JSON documentation or JSON cheatsheet for more info):

    type Person = { First: string; Last: string; Age: int}
    
    Content.Json { First="John"; Last="Smith"; Age=30 }
  • Files with Content.File:

    Content.File("Main.fs", ContentType="text/plain")
  • Various error codes:

    • Content.Unauthorized (401)
    • Content.Forbidden (403)
    • Content.NotFound (404)
    • Content.MethodNotAllowed (405)
    • Content.ServerError (500)

    You can also create your own custom error code response:

    Content.Custom(Status=Http.Status.Custom 402 (Some "Payment Required"))
  • Any other custom content with Content.Custom.

Multi-page applications

Multi-page applications have multiple endpoints: pairs of HTTP verbs and paths, and are represented as an annotated union type we typically call Endpoints (or Action in previous terminology). The endpoints, as defined by this union type - given the various annotations on each union case - are mapped to content to be served using Application.MultiPage. Links to endpoints in your site can be calculated from the serving context, so you will never have invalid URLs.

module YourApp

open WebSharper
open WebSharper.Sitelets
open WebSharper.UI
open WebSharper.UI.Html
open WebSharper.UI.Server

type Endpoints =
    | [<EndPoint "GET /">] Home
    | [<EndPoint "GET /about">] About

[<Website>]
let Main =
    Application.MultiPage (fun ctx endpoint ->
        let (=>) label endpoint = a [attr.href (ctx.Link endpoint)] [text label]
        match endpoint with
        | Endpoints.Home ->
            Content.Page(
                Body = [
                    h1 [] [text "Hello world!"]
                    "About" => Endpoints.About
                ]
            )
        | Endpoints.About ->
            Content.Page(
                Body = [
                    p [] [text "This is a simple app"]
                    "Home" => Endpoints.Home
                ]
            )
    )

Adding client-side functionality

WebSharper applications can easily incorporate client-side content, expressed in F#, giving an absolute edge over any web development library. Just mark your client-side functions or modules with [<JavaScript>] and embed them into server side markup using client. Server-side RPC functions are annotated with [<Rpc>].

The example below is reimplemented from the blog entry Deploying WebSharper apps to Azure via GitHub, also available in the main WebSharper templates, and although it omits the more advanced templating in that approach (which is straightforward to add to this implementation), it should give you an recipe for adding client-side functionality to your sitelets easily.

module YourApp

open WebSharper
open WebSharper.Sitelets
open WebSharper.UI
open WebSharper.UI.Html
open WebSharper.UI.Client

module Server =
    [<Rpc>]
    let DoWork (s: string) = 
        async {
            return System.String(List.ofSeq s |> List.rev |> Array.ofList)
        }

[<JavaScript>]
module Client =
    open WebSharper.JavaScript

    let Main () =
        let input = input [attr.value ""] []
        let output = h1 [] []
        div [
            input
            button [
                on.click (fun _ _ ->
                    async {
                        let! data = Server.DoWork input.Value
                        output.Text <- data
                    }
                    |> Async.Start
                )
            ] [text "Send"]
            hr [] []
            h4A [attr.``class`` "text-muted"] [text "The server responded:"]
            div [attr.``class`` "jumbotron"] [output]
        ]

open WebSharper.UI.Server

[<Website>]
let MySite =
    Application.SinglePage (fun ctx ->
        Content.Page(
            Body = [
                h1 [] [text "Say Hi to the server"]
                div [] [client <@ Client.Main() @>]
            ]
        )
    )

Using JavaScript libraries

WebSharper extensions bring JavaScript libraries to WebSharper. You can download extensions or develop your own using WIG, among others. Below is an example using WebSharper.Charting and chart.js underneath.

Note that these and any other dependencies you may be using will be automatically injected into a Content.Page or other sitelet HTML response, and you will never have to deal with them manually.

module YourApp

open WebSharper
open WebSharper.Sitelets
open WebSharper.UI
open WebSharper.UI.Html

[<JavaScript>]
module Client =
    open WebSharper.JavaScript
    open WebSharper.UI.Client
    open WebSharper.Charting

    let RadarChart () =
        let labels =    
            [| "Eating"; "Drinking"; "Sleeping";
               "Designing"; "Coding"; "Cycling"; "Running" |]
        let data1 = [|28.0; 48.0; 40.0; 19.0; 96.0; 27.0; 100.0|]
        let data2 = [|65.0; 59.0; 90.0; 81.0; 56.0; 55.0; 40.0|]

        let ch =
            Chart.Combine [
                Chart.Radar(Seq.zip labels data1)
                    .WithFillColor(Color.Rgba(151, 187, 205, 0.2))
                    .WithStrokeColor(Color.Rgba(151, 187, 205, 1.))
                    .WithPointColor(Color.Rgba(151, 187, 205, 1.))

                Chart.Radar(Seq.zip labels data2)
                    .WithFillColor(Color.Rgba(220, 220, 220, 0.2))
                    .WithStrokeColor(Color.Rgba(220, 220, 220, 1.))
                    .WithPointColor(Color.Rgba(220, 220, 220, 1.))
            ]
        Renderers.ChartJs.Render(ch, Size = Size(400, 400))

open WebSharper.UI.Server

[<Website>]
let MySite =
    Application.SinglePage (fun ctx ->
        Content.Page(
            Body = [
                h1 [] [text "Charts are easy with WebSharper Warp!"]
                div [] [client <@ Client.RadarChart() @>]
            ])
    )

Creating REST applications

TBA.


Links

core's People

Contributors

3dgrabber avatar atadi96 avatar btamas2000 avatar caleb-motivity avatar cata avatar diegopego avatar gitter-badger avatar granicz avatar gygerg avatar isetr avatar jand42 avatar jooseppi12 avatar mrtank avatar panesofglass avatar qwe2 avatar simonjf avatar t0yv0 avatar tahahachana avatar tarmil 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

core's Issues

HasAttribute returning

Quote from: https://bugs.intellifactory.com/websharper/show_bug.cgi?id=505

The following code returns false for an element with the class we were looking
for:

    [<JavaScript>]
    let (|Class|_|) className (elem : Element) =
        if elem.HasAttribute "class" && (elem.GetAttribute "class").Contains
className then Some elem else None

IE7 Gets Script Error (unavailable Json.js/Json.min.js assembly resource)

Line: 17
Error: Object doesn't support property or method 'parse'
File: IntelliFactory.WebSharper.Html.dll.js

The generated script include when IE <= 7.0 fails.

<!--[if lte IE 7.0]>
<script type="text/javascript" src="/r2d2/WebResource.axd?d=oq0oQ09uCt_AlDr2wD1fDTKn3q0T49nzDC9i8U1O_fs5hPRM9JEfljqTCDzBWqs-4DXxgEf7NxFtV3ZrLxgZSaNsNy47Soh5nOvDGiqWRVMnl7xer4lTCCdqX0tzQf790&amp;t=634614713120800000">
</script>
<![endif]-->

with exception:

<title>The resource cannot be found.</title>
...
[HttpException]: This is an invalid webresource request.
   at System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext context)

Investigation suggests a WebResource attribute is missing on the IntelliFactory.WebSharper assembly where Json.js and Json.min.js are embedded.


URL-resolving functions misbehaving on Mono (for Apache use)

I've tried running WebSharper on Apache with mod_mono. Most just worked out
of the box, but I have encountered a problem with Sitelets' links.

My sitelet:

Sitelet.Sum [
    Sitelet.Content "/" Home HomePage
    Sitelet.Content "/About" About AboutPage
]

And I generate such a menu (both in HomePage and AboutPage):

let ( => ) text url =
    A [HRef url] -< [Text text]

let Links (ctx: Context<Action>) =
    UL [
        LI ["Home" => ctx.Link Home]
        LI ["About" => ctx.Link About]
    ]

But both pages have this HTML outputted (only on Apache, IIS version works
just fine):

<ul><li><a href="/">Home</a></li><li><a
href="file:///About">About</a></li></ul

Static Methods/Constructors not triggering needed .js inclusion.

namespace Website

module CollTest = 

    open IntelliFactory.WebSharper
    open IntelliFactory.WebSharper.Html
    open System.Collections.Generic

    [<JavaScript>]
    let private DictPart () =
        // Calling constructors won't include ...Collections.dll.js.
        let d = new Dictionary<string,string>()
        // Calling module methods (static methods) won't.
        let m = [("Aka", "Pizza")] |> Map.ofSeq
        // Calling any instance methods will cause the inclusion of ...Collections.dll.js.
        // Uncomment to make it work.
        // let m = m.Add ("Rosie", "Bagels")
         // Another module method.
        let result = m |> Map.toSeq |> Seq.map (fun (k,v) -> k + " -> " + v)
        Div [
            result 
            |> Seq.map (fun x -> LI [Text x])
            |> OL
        ]
    type CollTestControl () =
        inherit Web.Control ()
        [<JavaScript>]
        override this.Body = DictPart () :> IPagelet

AddColorStop signature in HTML5

Quote from: https://bugs.intellifactory.com/websharper/show_bug.cgi?id=505

Hello,

I would think Html5.CanvasGradient.AddColorStop should have the following
signature: float * string -> unit

The second parameter being the color, as taken from Dive Into HTML5:

Let’s define a gradient that shades from black to white.

my_gradient.addColorStop(0, "black");
my_gradient.addColorStop(1, "white");

Exception in Chrome 17.0.963.79

Uncaught Error: SYNTAX_ERR: DOM Exception 12
$.Define.Website.Canvas.addStopWebsite.dll.min.js:1
$.Define.Website.Client.App.$.Class.get_Body._Website.dll.min.js:1
$.Define.Website.Client.App.$.Class.get_Body.WWebsite.dll.min.js:1
$.Define.IntelliFactory.WebSharper.Html.Events.JQueryEventSupport.$.Class.OnMouse.eeIntelliFactory.WebSharper.Html.dll.min.js:1
a.event.dispatchWebResource.axd:16
a.event.add.j.handle.f

Downcast error on using extensions with offline and mobile sitelets

To reproduce: create an HTML sitelets project, install one of the extension installers (say BING), and reference it, then try to compile:

System.InvalidCastException: Unable to cast object of type 'IntelliFactory.WebSharper.Bing.Resources.Bing' to type 'IResource'.
   at IntelliFactory.WebSharper.Core.Metadata.activate(Resource resource)
   at [email protected](Resource r)
   at Microsoft.FSharp.Primitives.Basics.List.map[T,TResult](FSharpFunc`2 mapping, FSharpList`1 x)
   at IntelliFactory.WebSharper.Core.Metadata.Info.Create(IEnumerable`1 infos)
   at IntelliFactory.WebSharper.Sitelets.Offline.Output.WriteSite[Action](WriteSiteConfiguration`1 conf)
   at [email protected](Unit _arg1)
   at IntelliFactory.WebSharper.Sitelets.Offline.Main.guard(FSharpFunc`2 action)

Issues with VS SHELL installation

Hello!

I'm attempting to install Websharper on my dev machine. Currently I have installed VS 2010 Shell with latest F#. My OS is Win XP SP3.

I run the installer for Websharper 2.4.35, then choose Install Now (the simple install). It prompts me to open the installer executable again (which seems strange, but ok), then in the Installation Progress window, it gives the error dialog -

"An unexpected error has occurred: Win32Exception. The error report has been written to..."

And here's the text from the error report -

1
2
3
4
5
6
7
System.ComponentModel.Win32Exception: The system cannot find the file specified
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at IntelliFactory.WebSharper.Install.Main.Shell(String executable, String arguments)
at [email protected](Unit unitVar0)
at IntelliFactory.WebSharper.Install.Util.Guard[a](FSharpFunc`2 action)

So I don't know how much that would tell you guys. I suspect the issue is related to using Websharper with VS 2010 Shell, but that could be a red herring.

I also tried downloading a fresh copy of the installer, but the results were the same.

If we can't troubleshoot this successfully, could I download an older version of Websharper in the interim? If so, please let me know where to get a hold of it.

Thanks all!

Bryan Edds

See http://fpish.net/topic/Some/0/74439


WebSharper fails to compile calls to abstract methods

See attached solution for full source. Error is:

Error   2   Failed to translate a method call: Test(..) [WS.Controls+Base]. c:\users\administrator\documents\visual studio 2010\Projects\Website1\Website1\Website\Controls.fs  21  1   Website

Relevant code is:

[<AbstractClass>]
type Base [<JavaScript>] () =
    [<JavaScript>] // This doesn't seem to make a difference, here just in case.
    abstract Test : unit -> unit

type Other [<JavaScript>] () =
    inherit Base()
    [<JavaScript>]
    override __.Test() = ignore ()

type Control() =
    inherit Web.Control()

    [<JavaScript>]
    override __.Body =
        let c = Other() :> Base
        c.Test()
        Div [] :> _

Samples compilation error

Hello,

I downloaded latest version of WebSharper and tried to build it's samples to better understand how it works. Html5 sample works fine, but Basic sample fails to build with the following error:

IntelliFactory\WebSharper\Samples\Basic\WebSharperSiteletsProject\HelloWorld.fs(59,0): error : Failed to translate object creation: IntelliFactory.WebSharper.Web.Control.

If I exclude "HelloWorld.fs" from the project, it builds fine.

Best regards
Vagif Abilov

See http://fpish.net/topic/Some/0/74305


Allow to parameterize templates by ApplicationPath

In addition to the built-in "scripts" variable that expands to WebSharper resource imports, it would be helpful to have a "root" variable that would expand to the ApplicationPath. Such a variable would allow templates to work regardless of the deployment path, in both root and virtual-directory deployments. A common situation is the need to reference a CSS file, which could then be accomplished thus:

#!html
<link href="${root}/themes/site.css" rel="stylesheet" type="text/css" />

Sitelet Error Related to StringBuilder

This error comes intermittently when testing and recently brought FPish down consistently.

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: chunkLength
ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: chunkLength]
System.Text.StringBuilder.ToString() +12681331
[email protected](Object value) in lliFactory.WebSharper.Sitelets\UrlEncoding.fs:352
[email protected](Action act) in lliFactory.WebSharper.Sitelets\Router.fs:161
<StartupCode$IntelliFactory-WebSharper-Sitelets>[email protected](Action action) in lliFactory.WebSharper.Sitelets\Router.fs:79
[email protected](Action x) in lliFactory.WebSharper.Sitelets\Router.fs:218
<StartupCode$IntelliFactory-WebSharper-Sitelets>[email protected](Object action) in lliFactory.WebSharper.Sitelets\HttpModule.fs:135
[email protected](IEnumerable`1& next) in D:\if-web-trainings\WebSharperSiteletsProject\Layout.fs:408
Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1.MoveNextImpl() +76
Microsoft.FSharp.Collections.SeqModule.ToList(IEnumerable`1 source) +297
[email protected](IEnumerable`1& next) in D:\if-web-trainings\WebSharperSiteletsProject\Layout.fs:403
Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1.MoveNextImpl() +76
Microsoft.FSharp.Collections.SeqModule.ToList(IEnumerable`1 source) +297
IntelliFactory.Trainings.Layout.DefaultHeader(Action action, Context`1 ctx)
[email protected](Context`1 ctx) in IntelliFactory.Trainings.Templates.Magnifico.MagnificoBody(Context`1 context, MagnificoArgs`1 args) in 
[email protected](Context`1 context) in 
[email protected](Context`1 context) in lliFactory.WebSharper.Sitelets\Controller.fs:144
<StartupCode$IntelliFactory-WebSharper-Sitelets>[email protected](Object sender, EventArgs e) in lliFactory.WebSharper.Sitelets\HttpModule.fs:147
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +270

Extra files in mobile applications

Right now, there isn't a fully automated way to embed "extra" files/artifacts in mobile applications - the tooling only packages the generated scripts and HTML content.

To accommodate this at the moment, one has to do the following:

  1. Do a clean

  2. Create bin/html manually in the F# mobile project

  3. Copy files/folders there

  4. Do a build on the mobile project to get the rest of the files and the final packages.

Now, we would like to eliminate steps 2/3 above. One solution is to modify ws_mobile.exe to copy extra files before it applies the packaging step.

Proposal: add an extra.files to the mobile projects to be processed by ws_mobile.exe to perform this extra copying.

Here is a proposal format for extra.files:

<project-name> {
    <file-pattern>*
}
...

where is any project name in the same solution. Example to copy some artifacts from the associated web project called WebProject:

WebProject {
    css/*
    images/*
}

ASP.NET error: setting does not apply in Integrated mode

Starting a website in VS 2011 sometimes produces this error:

HTTP Error 500.22 - Internal Server Error
An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.

Most likely causes:
This application defines configuration in the system.web/httpModules section.

The error disappears when the following is removed from Web.config:

#!xml
    <httpModules>
      <add name="WebSharper.Remoting" type="IntelliFactory.WebSharper.Web.RpcModule, IntelliFactory.WebSharper.Web" />
      <add name="WebSharper.Sitelets" type="IntelliFactory.WebSharper.Sitelets.HttpModule, IntelliFactory.WebSharper.Sitelets" />
    </httpModules>
  </system.web>

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.