zorab47 / active_admin-sortable_tree Goto Github PK
View Code? Open in Web Editor NEWShow ActiveAdmin index as a nested tree with drag'n'drop
License: MIT License
Show ActiveAdmin index as a nested tree with drag'n'drop
License: MIT License
I tried to install this plugin for first time, so I'm getting this error:
couldn't find file 'jquery.ui.sortable'
(in /Users/leabdalla/.rvm/gems/ruby-1.9.3-p448/bundler/gems/activeadmin-sortable-tree-46bd17031e50/app/assets/javascripts/active_admin/sortable.js.coffee:1)
Ah, there seems to be a bit more to installing that just adding the gem and bundling. I need jquery.ui.sortable, and even though I've added it to my application.js and application.css along with the jquery-ui-rails gem it's still not working.
Starting with a completely clean installation, what's the secret to installing your gem?
Is it possible to scope children without scoping roots_collection?
When trying to view a tree in ActiveAdmin, this is throwing error:
undefined method `sort_option' for :ancestry:Symbol
This doesn't work with the combination: Mongoid, mongoid-ancestry and active_admin-sortable_tree
But works fine with ActiveRecord, Ancestry and active_admin-sortable_tree
Sample source code is at: https://github.com/nahankid/community
Creating a node in active admin the ancestry root?
method is correctly set to true
. Adding a second node, and dragging it as a child of the first node, root?
stays true although it should be false
since it has a parent.
Is it possible to have this gem update the is_root?
method when a child is created through the gem?
I have a model Pages::News, index route for this model will be "news_index_path".
When I registering sortable in ActiveAdmin…
ActiveAdmin.register Pages::News do
sortable
index as: :sortable do
label :title
end
end
…I'm getting following error:
NoMethodError - undefined method `sort_admin_pages_news_path' for #<#<Class:0x007f974b9a4888>:0x007f974edb84a8>:
actionpack (4.0.0) lib/action_dispatch/routing/polymorphic_routes.rb:129:in `polymorphic_url'
actionpack (4.0.0) lib/action_dispatch/routing/polymorphic_routes.rb:135:in `polymorphic_path'
actionpack (4.0.0) lib/action_view/routing_url_for.rb:87:in `url_for'
arbre (1.0.1) lib/arbre/element.rb:175:in `method_missing'
() Users/AntonAL/.rvm/gems/ruby-1.9.3-p448/bundler/gems/activeadmin-sortable-tree-53e60889f3c7/lib/active_admin/views/index_as_sortable.rb:50:in `build_list'
() Users/AntonAL/.rvm/gems/ruby-1.9.3-p448/bundler/gems/activeadmin-sortable-tree-53e60889f3c7/lib/active_admin/views/index_as_sortable.rb:24:in `build'
This is because, instead of "sort_admin_pages_news_path", "sort_admin_pages_news_index_path" should be used.
Bundler could not find compatible versions for gem "jquery-ui-rails":
In snapshot (Gemfile.lock):
jquery-ui-rails (= 6.0.1)
In Gemfile:
jquery-ui-rails
active_admin-sortable_tree was resolved to 0.3.0, which depends on
jquery-ui-rails (~> 5.0)
Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
First, let me say thanks for the gem. It's very handy.
I just dragged one node so that its parent is now another node in the tree. I notice two things:
UPDATE "ingredients" SET "ancestry" = $1, "name" = $2, "updated_at" = $3 WHERE "ingredients"."id" = 25 [["ancestry", "24"], ["name", 1], ["updated_at", "2014-07-15 21:11:22.834266"]]
The "name" field (my sort attribute) was the name of an ingredient before the move, so something like "nutmeg". The move caused every record in my table to be updated with names that are sequential integers. So the first record is now named "0", the second "1", the third "2", etc. This happened to all 20 records I had in the table.
Anyone have any idea what I'm doing wrong?
I'm using Acts as List + Ancestry to create a sortable tree for my model, and I'm using this gem to generate a drag-and-drop sortable index.
Relevant code here:
# model
has_ancestry cache_depth: true, orphan_strategy: :rootify
acts_as_list scope: [:ancestry], top_of_list: 0
# active_admin
sortable tree: true, max_levels: 2
index :as => :sortable do
label :name
actions
end
Based on that combination, I expect that when I create a bunch of records, indices will be calculated starting at 0 in each subnode of my tree structure. So if I start with this:
{
{ id: 0, ancestry: nil, position: 0, name: "Beatles"} => {
{ id: 1, ancestry: "0", position: 0, name: "John Lennon" } => {},
{ id: 2, ancestry: "0", position: 1, name: "Paul McCartney" } => {},
{ id: 3, ancestry: "0", position: 2, name: "Ringo Star" } => {},
{ id: 4, ancestry: "0", position: 3, name: "George Harrison" } => {}
},
{ id: 5, ancestry: nil, position: 1, name: "Kate Bush" } => {
# Empty
},
{ id: 6, ancestry: nil, position: 2, name: "Pink Floyd" } => {
{ id: 7, ancestry: "6", position: 0, name: "Syd Barett" } => {},
{ id: 8, ancestry: "6", position: 1, name: "Roger Waters" } => {},
{ id: 9, ancestry: "6", position: 2, name: "David Gilmour" } => {}
}
}
I can then call this:
Node.find(0).move_to_bottom
Node.find(9).move_to_top
And end up with this:
{
{ id: 5, ancestry: nil, position: 1, name: "Kate Bush" } => {
# Empty
},
{ id: 6, ancestry: nil, position: 2, name: "Pink Floyd" } => {
{ id: 9, ancestry: "6", position: 2, name: "David Gilmour" } => {},
{ id: 7, ancestry: "6", position: 0, name: "Syd Barett" } => {},
{ id: 8, ancestry: "6", position: 1, name: "Roger Waters" } => {}
},
{ id: 0, ancestry: nil, position: 0, name: "Beatles" } => {
{ id: 1, ancestry: "0", position: 0, name: "John Lennon" } => {},
{ id: 2, ancestry: "0", position: 1, name: "Paul McCartney" } => {},
{ id: 3, ancestry: "0", position: 2, name: "Ringo Star" } => {},
{ id: 4, ancestry: "0", position: 3, name: "George Harrison" } => {}
}
}
The acts_as_list methods are correctly executing the move commands within the context of the scope, AND the positions within each level of the tree are calculated correctly, starting at 0 within each ancestry depth.
However, when I revert to the original ordering and perform the same operations within my admin panel, I end up with this:
{
{ id: 5, ancestry: nil, position: 0, name: "Kate Bush" } => {
# Empty
},
{ id: 6, ancestry: nil, position: 1, name: "Pink Floyd" } => {
{ id: 9, ancestry: "6", position: 2, name: "David Gilmour" } => {},
{ id: 7, ancestry: "6", position: 3, name: "Syd Barett" } => {},
{ id: 8, ancestry: "6", position: 4, name: "Roger Waters" } => {}
},
{ id: 0, ancestry: nil, position: 5, name: "Beatles" } => {
{ id: 1, ancestry: "0", position: 6, name: "John Lennon" } => {},
{ id: 2, ancestry: "0", position: 7, name: "Paul McCartney" } => {},
{ id: 3, ancestry: "0", position: 8, name: "Ringo Star" } => {},
{ id: 4, ancestry: "0", position: 9, name: "George Harrison" } => {}
}
}
As you can see, active_admin-sortable_tree is generating positions without regard to scope. This hoses the position sequence of my entire model because when I use acts_as_list methods directly in the future, it assumes the indices will be relative to scope: :ancestry.
Am I doing something wrong in configuring my admin panel? Or is this a bug? Please advise.
NoMethodError in Admin::LocationsController#sort
undefined method `each_pair' for nil:NilClass
Extracted source (around line #28):
#26
#27 records = []
*28 params[resource_name].each_pair do |resource, parent_resource|
#29 parent_resource = resource_class.find(parent_resource) rescue nil
#30 records << [resource_class.find(resource), parent_resource]
#31 end
In this case I've extracted that resource_name
is set to "location"
which is correct, however these are the parameters sent:
{"location_8210a9d8-fc26-406f-b38a"=>{"282ca5116e0f"=>"null"}, "location_9bccc054-7515-427b-b7b4"=>{"7f054d2d18ed"=>"282ca5116e0f"}, "location_594b7e0d-59f2-4870-9ae5"=>{"92588723f6a1"=>"7f054d2d18ed"}, "location_eb46c8a6-1ca7-4fbd-866d"=>{"a81396ac35d4"=>"92588723f6a1"}, "location_a56f88ea-e891-4819-bf43"=>{"0e61ac2baf34"=>"a81396ac35d4"}, "location_509cc151-e133-45e9-9f9a"=>{"e8a89dffb09e"=>"0e61ac2baf34"}, "location_53a20efe-d2ed-4886-8312"=>{"2422179a7855"=>"0e61ac2baf34"}, "location_dfff7b16-f585-4c9d-9502"=>{"6f18ea408ca2"=>"0e61ac2baf34"}, "location_eabf1bef-f884-428f-94ce"=>{"7e84a90b3c3d"=>"0e61ac2baf34"}, "location_debf16b0-58dd-4816-9fa9"=>{"cd6b779c5a38"=>"0e61ac2baf34"}, "location_7e6b0130-0848-4620-b823"=>{"f7c2805a7e55"=>"0e61ac2baf34"}, "controller"=>"admin/locations", "action"=>"sort"}
As you can see there is no parameter for "location"
but a number of parameters prefixed with location_
and then the identifier for the model instance.
Is there something I've configured incorrectly?
Hi!
I've got next problem: how can I enable sorting in a default index view?
I'm using sortable tree in a ActiveAdmin, in Rails 4.2, with the following:
sortable tree: true,
roots_collection: -> { Taxon.categories.roots },
max_levels: 2
But when visit the index, I see all levels, which are 3. Looking at the HTML, the data-* attributes were set appropriately:
<ol
class="ui-sortable"
data-sortable-type="tree"
data-sortable-url="/admin/contexts/1/categorias/sort"
data-max-levels="2">
Is there any problem with the options I passed?
Migrate from Travis to GitHub Actions?
Hi. First of all I would like to thank you for this gem, it saves me a lot of time. But I faced problem of huge amount of items (~7400 with complex structure). So I think that lazy load with start_collapsed: true is only reliable solution. Are you planning on implementing this feature? I'm going to try it myself but it will be very useful to read your opinion.
Hi,
After I bundled install this gem, I went to /admin page and i got an error message "Webpacker can't find active_admin/sortable.js" . May I know how to solve this?
Rails Version: 6.0.1
Ruby: 2.7.0
ActiveAdmin: 2.8.0
It looks like the edge version of active_admin has styles for ordered lists included. Since it's a quick change, I haven't made a pull request, but basically we just need to override:
list-style-type: none;
padding: 0;
on the ordered lists. There might be more, I've not run the sortable tree module in an older version of active_admin so I'm not 100% sure what should be overridden :)
I do have some weird spacing in the .cell.left div before the label div since I don't use checkbox selection.
I'm trying to make a menu management system for aa using your (awesome) gem. It should be simple enough, however I've hit a snag where the sortable view is showing all of the records, not just the ones for the nested resource.
Is that my user error or is this something the gem doesn't provide? (yet?)
ActiveAdmin.register MenuItem do
config.filters = false
config.paginate = false
belongs_to :menu
sortable tree: true,
collapsible: true, # hides +/- buttons
start_collapsed: true
permit_params :title, :url, :menu_id
index as: :table do
column :title
end
index as: :sortable do
label "Title" do |menu_item|
link_to menu_item.title, edit_admin_menu_menu_item_path( menu_item.menu, menu_item )
end
actions defaults: false do |menu_item|
link_to "Delete", admin_menu_menu_item_path( menu_item.menu, menu_item ), method: "delete", confirm: "Are you sure?"
end
end
form do |f|
f.inputs "Details" do
f.input :title
f.input :url
f.input :menu_id, :as => :hidden
end
f.actions
end
controller do
def create
create! do |format|
format.html { redirect_to_index }
end
end
def update
update! do |format|
format.html { redirect_to_index }
end
end
private
def redirect_to_index
@menu = Menu.find params[:menu_id]
redirect_to admin_menu_menu_items_path( @menu )
end
end
end
Hi, I'm using ActiveAdmin 1.0 with Rails 4.1. I tried to replace the following in my Gemfile
gem "activeadmin-sortable-tree", github: "nebirhos/activeadmin-sortable-tree"
which was removed with this one using:
gem "activeadmin-sortable-tree", github: "zorab47/activeadmin-sortable-tree"
However I get the following error from Bundler when I run bundle update activeadmin-sortable-tree
:
Could not find gem 'activeadmin-sortable-tree (>= 0) ruby' in
git://github.com/zorab47/activeadmin-sortable-tree.git (at master).
Source does not contain any versions of 'activeadmin-sortable-tree (>= 0) ruby'
When we use ancestry gem, this gem use ancestry field as string, so #sort_by
method trouble problems when compare strings with ids
I'm using this sortable configuration
sortable \
tree: true,
sorting_attribute: :ancestry,
parent_method: :parent,
children_method: :children,
roots_method: :roots,
roots_collection: proc { collection.where(ancestry: nil) }
And I change this line.
Instead of
def build(page_presenter, collection)
# ...
@collection = @collection.sort_by do |a|
a.send(options[:sorting_attribute]) || 1
end
# ...
end
I fix this problem with #to_i
def build(page_presenter, collection)
# ...
@collection = @collection.sort_by do |a|
a.send(options[:sorting_attribute].to_i) || 1
end
# ...
end
this will be deprecated. CSS should be directly included.
Hello,
I didn't find an issue like mine and couldn't find help in the repo so I'm asking here.
I need to track what part of the tree was expanded, so that as the user goes back and forth on the index, the tree can keep the same state.
i.g
I don't recall seeing a method that allows us to do it right now unless i'm missing something ?
My first idea would be to do it with JS and use session tokens to manipulate css classes maybe, but maybe there is something better
rails 5.1.4
activeadmin 1.2.0
active_admin-sortable_tree 1.0.0
Showing /home/ap/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/activeadmin-1.2.0/app/views/active_admin/resource/index.html.arb where line #2 raised:
File to import not found or unreadable: bourbon.
ActiveAdmin.register Page do
sortable tree: true
...
index as: :sortable do
label :title
actions
end
I am using acts_as_paranoid and when its calculating position its not adding the deleted_at default scope added by acts_as_paranoid. Which causing wrong position if there are any deleted columns
I want to implement child-level filter but I understand tree structure is not for this purpose.
But is there any way to pass the argument in children_method? If I can pass an argument, then I can probably filter from children_method based on the argument.
Eg. children_method: method(arg1)
Thank you
Because the assets are compiled into acitve_admin.js and active_admin.css the original files (sortable.css, sortable.js) are not available in production. This causes additional requests and 404 errors.
My environment :
-Ruby 2.4.0
-Rails 5.0.1
ArgumentError in Admin::Tasks#index
Showing /home/kevin/.rvm/gems/ruby-2.4.0/bundler/gems/activeadmin-6463e2b717b2/app/views/active_admin/resource/index.html.arb where line #2 raised:
comparison of Integer with String failed
@collection = @collection.sort_by do |a|
a.send(options[:sorting_attribute]) || 1
end
@resource_name = active_admin_config.resource_name.to_s.underscore.parameterize('_')
It only displays the first label. Was hoping it would work like the default AA columns
index :as => :sortable do
label "Logo" do |company|
image_tag company.logo, width: 75
end
label :name
label :slug
label "profile" do |company|
if company.profile
link_to company.profile.name, admin_profile_path(company.profile)
end
end
actions
end
hi
i tried to use the gem in gemfile after bundle install it says:
Using activeadmin-sortable-tree (0.0.1) from git://github.com/nebirhos/activeadmin-sortable-tree.git (at master)
activeadmin-sortable-tree at /Users/op/.rvm/gems/ruby-1.9.2-p320/bundler/gems/activeadmin-sortable-tree-fc19db6cf38f did not have a valid gemspec.
This prevents bundler from installing bins or native extensions, but that may not affect its functionality.
The validation message from Rubygems was:
"FIXME" or "TODO" is not a description
any ideas?
thanks in advance
oliver
This is more of a feature request than an issue.
It would be fantastic if there were an implementation for table_for rather than just index.
The use cases are as tree display on the dashboard, and on #show to show a list restricted to an item's children. If this is already possible, please let me know.
I'm having that issue when I run bundle
I can't point to the branch directly because of deployment issues with this technique.
Any ideas on how to get this ActiveAdmin version on 'master' ?
Thanks!
I am confused, where should I put this?
ActiveAdminSortableEvent.add('ajaxDone', function (){
// do what you want
})
I added new javascript in initializers/active_admin.rb
but its still loaded before sortable tree javascripts.
Hi
I am currently using this gem to list pages on the website in a hierarchy and it works great. I would also like to use it to manage multiple websites from the same admin. But I would need this to work with scopes, since I would need to make a scope per website to manage the sites and structures for each site.
Is this possible? I have a hard time grasping how I would make it work...
Hi,
This gem is great - however I'd really to use a rubygems version when I deploy.
Could you please publish this?
Thanks,
It's probably me since I'm fairly new to rails; but this allows drag and drop but doesn't save new positions upon drop, correct? Is there any tutorial or example to show me how to resave the new collection in the proper order?
I just used this gem with closure_tree and It works like a charm. But it would be perfect to display success or error message, esp. the error message. It should notice user that the drag action failed if the ajax request did not success.
In terminal, what seems the be the error below prevents me from running the sever successfully.
Any clue? Thanks!
/Users/masakioeda/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/active_admin-sortable_tree-1.0.0/lib/active_admin/sortable_tree/engine.rb:11:in `jquery_ui_six?': uninitialized constant Jquery::Ui (NameError)
have a good day!
so, i'd found that sometimes it's really required to pass callbacks before sorting and after sorting callbacks or fully override sort logic (for example if i want to sort nested sets or i want to set up lock / unlock before and after sort).
is there any ideas how can i do it?
may be, add possibility to pass callback function instead of default implementation in collection_action :sort, :method => :post ?
ActiveAdmin.register MyItem, :class => Item do
the lib trying to update positions for MyItem.
I'm using ActiveAdmin 0.6 and I can't seem to get it to load the supplied sortable.js or sortable.css. I have manually included the code so the functionality still works but I still get a 404 on every request.
Started GET "/assets/active_admin/sortable.css" for 127.0.0.1 at 2013-06-10 17:10:20 -0500
Served asset /active_admin/sortable.css - 404 Not Found (3ms)
ActionController::RoutingError (No route matches [GET] "/assets/active_admin/sortable.css"):
actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
railties (3.2.13) lib/rails/rack/logger.rb:32:in `call_app'
railties (3.2.13) lib/rails/rack/logger.rb:16:in `block in call'
activesupport (3.2.13) lib/active_support/tagged_logging.rb:22:in `tagged'
railties (3.2.13) lib/rails/rack/logger.rb:16:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/request_id.rb:22:in `call'
rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
rack (1.4.5) lib/rack/runtime.rb:17:in `call'
activesupport (3.2.13) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.4.5) lib/rack/lock.rb:15:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/static.rb:63:in `call'
rack-cache (1.2) lib/rack/cache/context.rb:136:in `forward'
rack-cache (1.2) lib/rack/cache/context.rb:245:in `fetch'
rack-cache (1.2) lib/rack/cache/context.rb:185:in `lookup'
rack-cache (1.2) lib/rack/cache/context.rb:66:in `call!'
rack-cache (1.2) lib/rack/cache/context.rb:51:in `call'
rack-mini-profiler (0.1.26) Ruby/lib/mini_profiler/profiler.rb:188:in `call'
railties (3.2.13) lib/rails/engine.rb:479:in `call'
railties (3.2.13) lib/rails/application.rb:223:in `call'
rack (1.4.5) lib/rack/content_length.rb:14:in `call'
railties (3.2.13) lib/rails/rack/log_tailer.rb:17:in `call'
rack (1.4.5) lib/rack/handler/webrick.rb:59:in `service'
/Users/digitaltraffic/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
/Users/digitaltraffic/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
/Users/digitaltraffic/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'
This project made my night.
I was dreading how I would come up with a draggable tree implementation for a client's ActiveAdmin interface. This fits in perfectly.
I'll close this in 24 hours, I just wanted to say thank you.
My use case is that I would like a tree structure, but to have each level always sorted by name. I'd like to have the tree editor still work for easily setting parent/child relationships.
Currently I have to override the "sort" controller action so that it does not update the "position" field (which I have set to 'name'), or else all my objects get their name changed to numbers:
# Override the one provided by ActiveAdminSortable, since we want it to ignore updates to the sort order
collection_action :sort, :method => :post do
resource_name = ActiveAdmin::SortableTree::Compatibility.normalized_resource_name(active_admin_config.resource_name)
records = []
params[resource_name].each_pair do |resource, parent_resource|
parent_resource = resource_class.find(parent_resource) rescue nil
records << [resource_class.find(resource), parent_resource]
end
errors = []
ActiveRecord::Base.transaction do
records.each_with_index do |(record, parent_record), position|
# record.send "#{options[:sorting_attribute]}=", position
if options[:tree]
record.send "parent=", parent_record
end
errors << {record.id => record.errors} if !record.save
end
end
if errors.empty?
head 200
else
render json: errors, status: 422
end
end
Could we have a config option that allows us to disable the record.send "#{options[:sorting_attribute]}=", position
?
Have a good day!
I've found that active admin scopes are ignored in sortable tree mode. Am I doing something wrong or is it a bug?
Hi, thanks for your effort making this gem. I'm just wondering if there is a way to display other fields of an Object. For example, my object have: title, note, tag and I want to display them all. But right now, it looks like I can display only one of them with "label :field"
index :as => :sortable do
label :title # item content
actions
end
Whenever i try to bundle with rails 4.0.1 gem I get dependency error:
Bundler could not find compatible versions for gem "actionpack":
In Gemfile:
activeadmin-sortable-tree (>= 0) ruby depends on
actionpack (~> 3.0.0.rc2) ruby
rails (= 4.0.1) ruby depends on
actionpack (4.0.1)
active admin v 0.6
Hey sorry to keep reporting issues - but I am unable to use active admin filters when implementing your gem. All records show up regardless of what filter is selected. Here's some code.
When i revert back to stock the stock index view the filters work as they should.
ActiveAdmin.register AssetCollection do
filter :brand, :collection => Brand.all.map{|b| ["#{b.name} #{b.business_unit.name}", b.id]}
sortable
sortable tree: true,
sorting_attribute: :position
index :as => :sortable do
label :name
default_actions
end
.......
end
activeadmin upgraded to jquery-ui-rails 5.0 in activeadmin/activeadmin@7b9ad75
The change should be as simple as:
Rename jquery.ui..{js,css} to jquery-ui/.{js,css}
If you aren't ready to track master activeadmin, please add < 5.0 jquery-ui-rails version constraint.
Thanks!
lib/active_admin/resource/page_presenters.rb:23:in set_page_presenter': undefined method
index_name' for Admin::CategoriesController:Class (NoMethodError)
Hey, while this looks great in theory this is all I get when I try and use it. I think I have the latest of both active admin and sortable tree. Noticed an old issue very similar to this and wonder if the same issue has snuck back in with another active admin update.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.