Giter Club home page Giter Club logo

backbone-offline's People

Contributors

0rca avatar alekseykulikov avatar danharper avatar ikido avatar sukima 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

backbone-offline's Issues

Allow passing options to the REST server

With the normal backbone ajax sync you could do this

collection.fetch({username: myusername, password: mypassword}); to pass extra params to the jquery.ajax call

This doesn't appear to work with backbone.offline

sync.push error

When using someCollection.storage.sync.push() nothing happens, no Ajax call is made.

Storage.clear() and Storage.isEmpty()

I have a collection 'tasks' with a storage key of 'tasks'.

tasks.storage.clear()
tasks.storage.isEmpty()
# returns false

tasks.storage.getItem('tasks')
# returns '' (empty string)

Surely tasks.storage.getItem('tasks') should return null?

I can't seem to make it so clear() removes the 'tasks' key. It always seems to be reset to an empty string.

It seems like the unit test:

it 'sets collection-key to ""', ->
  @storage.clear()
  expect(localStorage.getItem('dreams')).toEqual('')

Should actually be:

it 'sets collection-key to ""', ->
  @storage.clear()
  expect(localStorage.getItem('dreams')).toBeNull()

Any help with this? Or is clear() not supposed to empty the whole collection from storage? If you could point me in the right direction I could submit a pull request?

Not Syncing Automatically?

I am very new to Backbone.js. So, please excuse my ignorance. From what I understand, the with backbone.offline data in localstorage is supposed to sync automatically when fetch() is called. For some reason, this isn't working for me.

However, when I manually call this.storage.sync.push() or @storage.sync.push it works great. My model without the manual call for the push looks something like this:

class MyApp.Models.MyModel extends Backbone.Model
  paramRoot: 'my_model'

  toJSON: ->
    json = _.clone(this.attributes)
    _.extend(json, {my_model_images_attributes: this.get("my_model_images")})

class MyApp.Collections.MyModelsCollection extends Backbone.Collection
  model: MyApp.Models.MyModel
  url: '/my_models'
  initialize: ->
    @storage = new Offline.Storage('my_models', this, autoPush: true)
    @fetch()

To add the manual call for the push I change my MyModelsCollection to look like this:

class MyApp.Collections.MyModelsCollection extends Backbone.Collection
  model: MyApp.Models.MyModel
  url: '/my_models'
  initialize: ->
    @storage = new Offline.Storage('my_models', this, autoPush: true)
    @fetch()
    setInterval(@pushChanges, 10000)

  pushChanges: =>
    @storage.sync.push()

Backbone is sitting on top of a Rails 3.2 app, and, if it would be helpful at all, I used rails-backbone to generate the initial scaffold for the backbone app.

delete que is never empty

when a delete is captured by "offline" it produces a list of api item id's to delete and these appear to be processed on the next sync event. The system is processing the list of deletes and returning an 200 OK status for each one..but the local-storage list of "to-be-deleted" is never updated. As a result, the next sync event again attempts to delete the same items which have already been removed from the server?

any suggestions?

Unwanted events

Code like

  @collection.items.reset([]) #1 event
  @collection.items.create(item, local: true, regenerateId: true) for item in response #n events
  @collection.items.trigger('reset') #1 event

throws a lot of unwanted events, that browser should process (render views, other bindings)
there should be only 1 event - last

silent:true could help

Object #<Object> has no method 'parse'

I'm getting this error and unsure what I've setup incorrectly. The new model gets saved in localStorage but the error then occurs, I think, when backbone_offline.js calls (line 27):

return options.success((_ref = resp.attributes) != null ? _ref : resp)

which in turn calls (line 454 of backbone.js)

options.success = function(model, resp, options) {...

My page:

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <script src="lib/mvc/foss/jquery/jquery-1.8.3-min.js"></script>
        <script src="lib/mvc/foss/underscore/underscore.js"></script>
        <script src="lib/mvc/foss/backbone/backbone.js"></script>
        <script src="lib/backbone_offline.js"></script>
<script>

var MealModel = Backbone.Model.extend({
    defaults: {
        name: "A New Meal"
    }
});

var MealsCollection = Backbone.Collection.extend({
    model: MealModel,
    url: "/meals",

    initialize: function(){
        this.storage = new Offline.Storage("meals", this);
    }
});

var meals = new MealsCollection();

meals.create({name: "Risotto"})

</script>
    </head>
    <body>
    </body>
</html>

Fetch Local dont work with Backbone 1.0

I just updated to Version 1.0 of Backbone and then fetch({local: true}) does not work anymore.

When running that command, if just add a new instance of the Collection in the collection.

Creates duplicate records if id is string

Creates duplicate records if id is string. we are using id as uuid, which returned as string.

for every fetch it creates a duplicate record.

In the model, if default value for id assigned then it creates only one duplicate record

defaults:
  id: null 

"Record Not Found" when fetching a model

I'm trying to fetch a single model, but I'm running into issues:

var Foo = Backbone.Model.extend({
    initialize: function() {
        this.storage = new Offline.Storage("foo", this);
    },
    url: "foo.json"
});

var bar = new Foo({id: 1});
bar.fetch({error: function(reason) {
    console.error(reason);
}, success: function() {
    console.log(arguments);
}});

This code causes a "Record Not Found" error. Is fetching a single model not supported by Backbone.Offline or am I doing something wrong?

Success callback in sync.incremental never called.

Hi,

The sync.incremental works good in my app but I can not manage to make it do the success call back, is this a bug or its only happening to me?

incrementalReload_clickHandler: (event) ->
console.log 'Incremental load'
@reqOfferCol.storage.sync.incremental
data:
'party': 1
success: (resp) =>
console.log 'Success' <-Never called
error: (error) =>
console.log 'Error' <- Never called

Thanks!!!

id not sent with this.model.save()

Hi there,
I've got a collection that's got the this.storage set with autoPush as per the instructions but when I save an individual model from that collection it sends a PUT without the id attribute. It is looking for the sid - which if I set manually before saving, will successfully be appended to the PUT URL (eg http://res/item/sidvalue) but the sent data doesn't include an id attribute, only an sid (eg {somdata:true, updated_at: datetime, sid: sidvalue} )
Am I meant to be receiving id in the PUT?
thanks

Keys array with self-reference doesn't work

Due to asynchronous requests, replaceKeyFields is called too late, after we have already sent the referenced object to the server. If we make a breakpoint and wait for response, the referenced object is sent to the server correctly.

It would be great if it was possible to have self-reference in keys. For example:
tag:
parent_tag_id -> tag
so we could find all dirty highest level parents, push them, then on success in pushItem recursively push descendants.

Server implementation

Hi! Do you have any server sync implementation to recommend (PHP and mysql, node.js and mongodb, node.js and mysql, ...)?

Regards,
Valérian

error on fetch/pull

When I run @collection.storage.sync.pull() or @collection.fetch() I get the error TypeError: item.id is undefined. Push works fine and posts to my restapi. Any idea what I'm doing wrong?

reference to undefined XML name

This may just me missing something but I added a reference to a test application I am working on and used the sample code but when I try to set a variable like the example @storage = Offline.Storage("questions", this) I get the following: reference to undefined XML name

If I set it to a standard variable it works but I am not sure if this is just me doing something wrong or not.

I am using the current master version of backbone_offline.js and backbone-0.9.2.js

Thanks,
Jeff

Uncaught TypeError: Cannot call method 'toString' of undefined

I'm getting an "Uncaught TypeError: Cannot call method 'toString' of undefined" when I try to fetch a collection with an initialized storage object.

It's originating from line 356:
if (!_.include(this.storage.destroyIds.values, item.id.toString())) {

The API I'm using is REST based, and each model has an ID...do you know what else could be causing the problem? Any insight would be greatly appreciated; really looking forward to using this.

Is this still maintained?

The last commit was over a month ago and i'm wondering if this is still being used.

My needs:

  1. Work completely offline, so create client ids as GUIDs
  2. Sync to the server

Are these handles by this library?

Error handler in collection.fetch() is never called

In Backbone.offline, if I make a call to refresh() to update my collection from the server, the error handler will not get called. (assuming an error did occur and it needed to be called)

collection.fetch({
    success: function(){
        console.log('success');
    },
    error: function(){
        console.log('error');
    }
});

Looking at the code, it's because the options object passed into fetch() is not passed along the chain. There a few functions like this in the code:

Sync.prototype.pull = function(options) {
  var _this = this;
  if (options == null) options = {};
  return this.ajax('read', this.collection.items, {
    success: function(response, status, xhr) {
      var item, _i, _len;
      _this.collection.destroyDiff(response);
      for (_i = 0, _len = response.length; _i < _len; _i++) {
        item = response[_i];
        _this.pullItem(item);
      }
      if (options.success) return options.success();
    }
  });
};

where the options parameter is not passed into the ajax calls. Only a success handler is passed. Which means my error handler will never make it into the call to Backbone.ajaxSync | Backbone.sync, where it needs to be.

Demo app?

It'd be great to see this in action

Remove model doesn't update localstorage?

Currently I'm testing backbone.offline without a real backend. If I do fetch and pass local: true, it works correctly, and also saving models saves correctly.
However if I do:
var model = Logs.get($(this).parent().data('cid')); // this works, returns the correct model
Logs.remove(model);
The model is removed from the collection but upon a refresh the next fetch (local: true) reads it again. How I can make backbone.offline also delete the localstorage model?

Thanks!
Bence

Problem updating model with id from server

Hi,
I'm using backbone.offline with the {autoPush: true} option in my collections. The response from the server on model create is like {id: "xxxxxx-xxxx-xxx...."} but the model sid is not updating with this new value. On inspection the success callback in backbone.offline (line 407) expects arguments (response, status, xhr) but it looks like in my case I'm getting the model as argument 1, and the response as argument 2. Looking at the Backbone.ajaxSync method it's possible that the success callback is being called like this:

    options.success = function(resp) {
      if (success) success(model, resp, options);
      model.trigger('sync', model, resp, options);
    };

which corresponds to what I'm seeing. Any ideas where I might have gone wrong?

Duplicate Add Event

I'm using collections which persist in memory - I.E. not recreated each time I use them.

However, when I fetch a new model from the server, the collection gets 2 add events.

Flow seems to be:

  1. call fetch().
  2. get JSON from server.
  3. save to Localstorage.
  4. collection add event.

Then do something else, and then..

5 call fetch() again.
6 collection add event.

So you get another add event, even though there is no new data.

If you call fetch() a 3rd time, you don't get another add event. I.E. you get the event precisely twice.

Further information :

The model in step 4. has a 'cid', but it doesn't have an 'sid', or internal guid.

The model in step 6. does.

However, at step 3, the object in localstorage does have an 'sid'.

So - the following seems to be happening...

a) download model from server
b) save to localstorage with new attributes
c) add model with server attributes.

Maybe it should add to collection with the same attributes that are saved to localstorage?

Happy to fix this myself. Please direct me to the relevant functions in the source.

Best,

Dalip

Fetch loads data from the remote storage

If I call fetch, backbone.offline calls findAll, so it tries to get data from the server no matter if it has a connection, so the user can't work offline. I think, this method shouldn't sync. It's offline library, so it should fetch from local storage and get data from the server only on the explicit call.

findAll: ->
if this.isEmpty() then @sync.full() else @sync.incremental()
JSON.parse(localStorage.getItem("#{@name}-#{id}")) for id in @allIds.values

Saving a model doesn't sync with server.

Hi there.

First problem:

I have a collection from where I grabbed a single model. I then set a variety of values on said model using the set method supplied by Backbone.

My immediate expectation is that this will automatically dirty the record. Is this in fact expected behaviour if not, how should I dirty a record?

Second problem:

I set the dirty attribute manually in order for the model to be present in the @collection.dirty() collection, and then I call @collection.storage.sync.incremental() (where @collection is the model's collection).

My immediate expectation here is that this would sync the now dirty collection with the backend, but that is not the case.

My code

Here is the code, from the edit view:

@model.set({ some: "attribute", has: "a value" })
@model.save { dirty: true },
  success: =>
    @collection.storage.sync.push()

Am I doing something wrong?

Need help with updating related keys in multiple collections

I have 3 collections

  1. drivers (id, name, address, etc)
  2. facility (id, name, address, etc)
  3. delivery (id, driver_id, facility_id, date, etc)

if offline
(a) I add a new driver..bb-offline creates a local_id and sid:'new'
(b) then create a new delivery using the driver created in (a)...the delivery.driver_id field will have the driver.local_id value

How do I insure that on sync the driver is updated first...and then the delivery.driver_id is updated with the driver.sid value once assigned?

Bug with Storage#clear

https://github.com/Ask11/backbone.offline/blob/master/src/backbone_offline.coffee#L173

The RegExp checking if a localStorage key belongs to the collection being cleared checks whether the key simply contains the collection's name, and not if it begins with it.

So if when clearing a collection named items, it will also remove the localStorage keys for dictionaryitems.

Instead, we should check the key starts with the name:

(new RegExp "^#{@name}").test(key)

This had me scratching my head for days wondering why localStorage was magically losing data before I narrowed it down :)

Wrap existing code with a closure

Hi,

It would be nice to wrap existing code with a closure that uses the following variables: window, _, Backbone.

This approach gives us ability to keep references of original variables and we don't lose them if we try to use "noConflict" function.

((window, _, Backbone) ->
    # Existing code goes here
    return
) window, _, Backbone

want to track the count of un-synced HTTP CRUD events

I am working on an online/offline app which will sync with server when a network is available and operate offline when there is no network. I would like to track how many items or sync events are being held in the queue to offer feedback to my user. any suggestions on where to hook into this?

Backbone.js offline not saving to local storage after fetch

I am fetching data from the server and the collection is updated properly, but I am having problems saving the server data in localStorage. I have tried using all the methods provided by the library, but the only time it is recorded locally is when I save a new model.

In short, I just want to store all existing server data locally after fetch.

Fetch a simple Model ?

I am trying to fetch a simple model (not a collection).
I've added the updated_at field and storage field on my PhotoModel :

var model = Backbone.Model.extend( {
    urlRoot:function() {
        return "eleves/" + this.get('personId')+"/photo";
    },
    initialize: function() {
        this.on('change',
                function(){
                    this.updated_at = new Date();
                }, this);
        this.storage = new Offline.Storage("photo", this);
    }
} );

Then trying to fetch it:
photo = new PhotoModel({personId:personId});
photo.fetch();

Problem :
Object [object Object] has no method 'reset' backbone.offline-0.9.10.js:279

I've inspected a little the offline code.
line 12 : it's the first fetch so my model doesn't have id => store.findAll
line 279 : response is correct : a json object (a single one, not a table) and _this.collection.items seems to be my PhotoModel so doesn't have a reset function.

My question :

Is Backbone.offline able to work with simple model or does it work only with collection ?

Thank you for your work,

Regards

git URL to contribute in README is wrong

"Clone repository from github: git clone git://github.com/documentcloud/backbone.git and switch to new branch git checkout -b new-feature"

I'm guessing you wanted that to be a URL to clone backbone.offline, not backbone itself

Backbone 1.0 and Backbone 0.9.10 compatibility difference

While trying out Backbone.Offline with Backbone 1.0, I uncovered one of the differences. It's nearing the end of the day here, so I won't try to fix and submit a pull request myself, but I thought I'd at least document what I found.

Between 0.9.10 and 1.0, Backbone reverted the API for Backbone.sync success and error callbacks: jashkenas/backbone@6e646f1ba

This this means that with Backbone 1.0, when you run collection.storage.sync.pull(), you get an error such as:

caught TypeError: Cannot use 'in' operator to search for '0' in success 

The problem here of course, is that response ends up being a string "success", not an array of models as the code expects. Unfortunate, because this adds a level of complexity for trying to support both 0.9.10, and 1.0.

What about conflicts?

Just a question: what happens if 2 users use the same app, with same data; one changes a record offline, other changes the same record online. When both are online, app syncs. Which version of changed data will be on server? The one changed offline or the one changed online? Would date be the conflict resolution?

Thanks

amd, require.js javascript example please

Hi, I'd love an example or wiki entry that explains how to use this component with requirejs, or to have an amd compatible version out of the box. is it possible?

Add Django TastyPie support

I found a problem when working with Django-TastyPie, it doesn't store the objects in DB.

The json produced by tasty includes a meta with information and put the information
inside the objects tag (example bellow):

{
"meta": {
"limit": 20,
"next": null,
"offset": 0,
"previous": null,
"total_count": 3
},
"objects": [{
"body": "Welcome to my blog!",
"id": "1",
"pub_date": "2011-05-20T00:46:38",
"resource_uri": "/api/v1/entry/1/",
"slug": "first-post",
"title": "First Post",
"user": "/api/v1/user/1/"
},
So in order to make backbone offline work, I have to do this hack:

Linea ->279
Sync.prototype.full = function(options) {
var _this = this;
if (options == null) {
options = {};
}
return this.ajax('read', this.collection.items, _.extend({}, options, {
success: function(response, status, xhr) {
var item, _i, _len;
//Pablos hack
_this.storage.clear();
_this.collection.items.reset([], {
silent: true
});
for (_i = 0, _len = response.objects.length; _i < _len; _i++) {//how is was: for (_i = 0, _len = response.length; _i < _len; _i++)
item = response.objects[_i]; // How it was: item = response[_i];
_this.collection.items.create(item, {
silent: true,
local: true,
regenerateId: true
});
}
if (!options.silent) {
_this.collection.items.trigger('reset');
}
if (options.success) {
return options.success(response);
}
}
}));
};
Linea -> 308

What do you think about this problem.

Congrats on such a great library.

backbone.Offline is messing with id

So it looks like you copy id into sid and generate a new guid for id. Why is this necessary? I'm asking because I'm not familiar enough with Backbone's source to know.

Changing id loses some useful backbone properties:

  1. Backbone gracefully ignores adding a second model with a duplicate id
    • With Offline, the model will get added anyway since the first id has been changed
  2. Backbone's Collection#get method retrieves a model by its id
    • With Offline, you have to search by sid, which might not exist for newly created models

It's possible I'm taking the wrong approach. Here is my use case:

  • I have an ajax autocomplete field for tags
  • When the ajax request completes, the tag objects are added to a Tags backbone collection
  • If the user enters a tag that does not exist, that tag is locally created and added to the Tags collection; it will be synced later
  • Tags added to the Tag collection are added using the create method

Can you explain why you're modifying id, and not using a client id similar to Backbone's cid? I want to understand so I can submit a patch if needed.

Add IndexedDB support

I want to suggest new big enhancement for this library and full-fledged support of html5-offline.
Library should automatically use IndexedDB if it's possible and switch up to localStorage for older browsers.

Helpful links:

I know that IndexedDB is still draft and API looks strange in some areas, but I think that localStorage is temporary decision for offline-apps and I want look ahead the future.
If someone want to implement this challenge, please contact with me, and we will try to imagine main points together.

Future of backbone.offline

I'm going to use this library in my new project and want to announce new features. It will biggest step:

  • WebWorkers to sync data with server in background and does not lock main UI
  • The polyfill which works with IndexedDB, WebSQL, localStorage for storing data effectively in modern browsers. Best idea is launchair or store.js
  • Ability to sync data using chunks similar to Evernote EDAM
  • Remove strict relation from Backbone.Collection during the sync process.

The main goal is create flexible library for syncing browser's local data with server and make the process of creating offline-applications easier. If someone is solving same problems, you're welcome ;)

Welcome to comments to share your ideas and code examples. All works are going in edge branch.

Collection is empty on fetching. Errors on POST request.

When fetch() method runs, Backbone.Collection performs query to the RESTful service successfully, but eventually collection is empty (contains single empty model). Also following error occurs:

Uncaught TypeError: Converting circular structure to JSON backbone_offline.js:184

When I am trying run create() method of the collection, following errors occur:

Uncaught TypeError: Cannot read property '_listenerId' of undefined backbone.js:219
POST https://api.mongolab.com/api/1/databases/billing-app/collections/invoices/null?apiKey=[key] 405 (Method Not Allowed) jquery.js:8434

Normally my app uses URL https://api.mongolab.com/api/1/databases/billing-app/collections/invoices instead of https://api.mongolab.com/api/1/databases/billing-app/collections/invoices/null to perform CREATE operation.

I am using Backbone 1.0 and MongoLab.com as a RESTful service, _id is replaced to id. Here is my source code:

Backbone.Model.prototype.parse = function(resp, options) {
    if (_.isObject(resp._id))  {
      resp.id = resp._id.$oid;
      delete resp._id;
    }
    return resp;
  }

  Backbone.Model.prototype.toJSON = function() {
    var attrs = _.omit(this.attributes, 'id');
    if (!_.isUndefined(this.id))  {
      attrs._id = { $oid: this.id };
    }
    return attrs;
  }

  // Define configuration.
  var appConfig = {
    baseURL: 'https://api.mongolab.com/api/1/databases/billing-app/collections/',
    addURL: '?apiKey=[key]'
  }


  // Define invoice model.
  var InvoiceModel = Backbone.Model.extend({
    url: function() {
      if (_.isUndefined(this.id)) {
        return appConfig.baseURL + 'invoices' + appConfig.addURL;
      }
      else {
        return appConfig.baseURL + 'invoices/' + encodeURIComponent(this.id) + appConfig.addURL;
      }
    },
  });


  // Define invoice collection.
  var InvoiceCollection = Backbone.Collection.extend({
    model: InvoiceModel,
    url: function() {
      return appConfig.baseURL + 'invoices' + appConfig.addURL;
    },

    // Enable offline storage.
    initialize: function() {
      this.storage = new Offline.Storage('InvoiceCollectionStorage', this, {autoPush: true});
    }
  });

Make backbone.offline compatible with backbone-relational

I'm using this plugin alongside backbone-relational plugin.

It's a little bit tricky, because of the way backbone-offline stores/retrieves the models to/from localStorage.

First let me explain the basic use case in which it does work. In backbone-relational, I can setup relational models like this:

Model A
    |
    |------- Model B
          |
          |------- Model C

I can then apply backbone.offline storage to Model A. This stores Model A in localStorage. Nested within the attributes of Model A, will be the related Model B's and Model C's.

I can sync Model A to the server and it will also sync the related Model B's and Model C's - as backbone-relational overrides toJSON so it creates a big nested object of everything under Model A to be synced. You then just need to code your server endpoint so it can handle the nested data. Which is easy to do if you're using something like Rails.

So that use case works OK. But the problem is there is no way to sync Model B's or Model C's independent of Model A.

If you also apply the backbone.offline storage to Model B, backbone.offline will store the Model B's in a separate localStorage key/value, which is great.

But unfortunately, the actual Model B objects (as created by backbone-relational) are still nested under Model A.

So now you have two copies of the same data in localStorage and the whole thing falls down.

So to be clear, I think the syncing behaviour of backbone.offline is correct, it's just how it stores/retrieves nested models to/from localStorage that is the issue.

Would like to hear if anyone has had this issue, and what some potential solutions could be!

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.