A Redmine plugin which creates Kanban-style drag and drop taskboards per project.
See Alley's Redmine Task Board illustrated blog post
A Redmine plugin which creates Kanban-style drag and drop taskboards per project.
A Redmine plugin which creates Kanban-style drag and drop taskboards per project.
See Alley's Redmine Task Board illustrated blog post
Using Redmine 2.5.2.devel, I can't seem to create new columns. When I enter a new column name and click the "Create column" button, a progress dial briefly flickers and goes away, and nothing else happens. in web console I see ReferenceError: TaskBoardSettings is not defined
when first loading page.
This is in both Firefox and Chrome.
On the projects/[project_name]/settings/taskboard page for a project it seems like it is possible to move each of the columns and save the new order, but unfortunately it seems the default sort order (by order of creation) is used instead.
I'd like to either be able to re-order the columns, or have the order of the columns be static.
Thanks!
redmine 3.3.2
drag and drop seems no error.
but when refresh, nothing changed.
it seems that change does not apply to database?
So far I like the plugin. Thank you!
Drag and drop is good for saving time, but one thing is missing:
If a user moves a ticket to another column, the assignee of the ticket needs to change to that user. Otherwise I still have to go inside the ticket to change the owner and then I save no time at all. Or the user forgets and the whole kanban system "crashes".
Thanks for your time and work!
I've installed it in Redmine 2.2.1. The taskboard page itself and the settings are displayed OK, but non of the javascript functionality works. I see this is the error console: "Reference error: Class is not defined".
Looking at the supplied task_board.js, it indeed uses Class.create
I guess this was based on some 3rd party lib, which was supplied with earlier versions of Redmine, and not any more.
Can you please provide information about which js is missing?
Thanks
Hi there,
Thanks a lot for this project. For some reasons, i need to let anonymous viewer to view the taskboard but no let them do any change.
I propose you the change bellow:
iff --git a/init.rb b/init.rb
index 3e777bc..383464f 100644
--- a/init.rb
+++ b/init.rb
@@ -20,8 +20,9 @@ Redmine::Plugin.register :redmine_task_board do
project_module :taskboard do
permission :edit_taskboard, {:projects => :settings, :taskboard => [:create_column, :delete_column, :update_columns]}, :require => :member
- permission :view_taskboard, {:taskboard => [:index, :save, :archive_issues, :unarchive_issue]}, :require => :member
+ permission :view_taskboard, {:taskboard => [:index, :archive_issues, :unarchive_issue]}
+ permission :save_taskboard, {:taskboard => [:save]}
end
Thanks
Helmer
Our software development department still uses this useful plugin for managing projects.
Today the hardware design team might also start using it.
The problem is that one of the subprojects ("Customers") is common to both departments, but we still don't want to share taskboards.
We found two possible workarounds which are not satisfying:
Company |-- Software Department R&D | |-- Soft Project1 | |-- Soft Project2 |-- Hardware Department R&D | |-- Hard Project1 | |-- Hard Project1 |-- Customers |-- Client1 |-- Client2 |-- Client3
What we suggest is to add filters for users/groups (e.g. software or hardware people).
So we could only show tasks assigned to software developers or hardware designers.
I'm running Redmine 2.3 and Postgresql 9.1 under Ubuntu 12.04.
I gave a try to your taskboard plugin (master branch) which threw me an error 500.
See stack trace https://gist.github.com/AndreMiras/6192340.
I fixed the issue in plugins/redmine_task_board/app/controllers/my_taskboard_controller.rb
by replacing:
issue_statuses.is_closed = 0
By:
issue_statuses.is_closed = FALSE
I guess fixing it on Postgres would break something else. It would be better to use the ORM but I don't know Ruby much.
Not working with Redmine 2.
Install successfully but the view throws error 404
I'm running Redmine 2.3 on Ubuntu using ppa:ondrej/redmine
and netaustin/redmine_task_board
from master.
Redmine couldn't find redmine_task_board media resources until I made a symlink myself.
/usr/share/redmine/public/plugin_assets$ sudo ln -sfn /usr/share/redmine/plugins/redmine_task_board/assets/ redmine_task_board
Perhaps this instruction should go in the Wiki somewhere.
See stack trace below:
ActionController::RoutingError (No route matches [GET] "/plugin_assets/redmine_task_board/javascripts/task_board.js"):
/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/show_exceptions.rb:56:in `call'
/usr/lib/ruby/vendor_ruby/rails/rack/logger.rb:32:in `call_app'
/usr/lib/ruby/vendor_ruby/rails/rack/logger.rb:16:in `call'
/usr/lib/ruby/vendor_ruby/active_support/tagged_logging.rb:22:in `tagged'
/usr/lib/ruby/vendor_ruby/rails/rack/logger.rb:16:in `call'
/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/request_id.rb:22:in `call'
/usr/lib/ruby/vendor_ruby/rack/methodoverride.rb:21:in `call'
/usr/lib/ruby/vendor_ruby/rack/runtime.rb:17:in `call'
/usr/lib/ruby/vendor_ruby/active_support/cache/strategy/local_cache.rb:72:in `call'
/usr/lib/ruby/vendor_ruby/rack/lock.rb:15:in `call'
/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/static.rb:63:in `call'
/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:136:in `forward'
/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:245:in `fetch'
/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:185:in `lookup'
/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:66:in `call!'
/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:51:in `call'
/usr/lib/ruby/vendor_ruby/rails/engine.rb:479:in `call'
/usr/lib/ruby/vendor_ruby/rails/application.rb:223:in `call'
/usr/lib/ruby/vendor_ruby/rack/content_length.rb:14:in `call'
/usr/lib/ruby/vendor_ruby/rails/rack/log_tailer.rb:17:in `call'
/usr/lib/ruby/vendor_ruby/rack/handler/webrick.rb:59:in `service'
/usr/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
/usr/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
/usr/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
/usr/lib/ruby/1.8/webrick/server.rb:95:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:92:in `each'
/usr/lib/ruby/1.8/webrick/server.rb:92:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:23:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:82:in `start'
/usr/lib/ruby/vendor_ruby/rack/handler/webrick.rb:13:in `run'
/usr/lib/ruby/vendor_ruby/rack/server.rb:265:in `start'
/usr/lib/ruby/vendor_ruby/rails/commands/server.rb:70:in `start'
/usr/lib/ruby/vendor_ruby/rails/commands.rb:55
/usr/lib/ruby/vendor_ruby/rails/commands.rb:50:in `tap'
/usr/lib/ruby/vendor_ruby/rails/commands.rb:50
script/rails:6:in `require'
script/rails:6
When I drag task, jquery try to call url 404.
Plugin try to call http://my_server/projects/16/taskboard
But I use apache, and my url is http://my_server/redmine/.
For the moment I use absolute url, do know variable or something to have the redmine root url in javascript
ActionController::RoutingError (uninitialized constant TaskboardController):
activesupport (3.2.13) lib/active_support/inflector/methods.rb:230:in block in constantize' activesupport (3.2.13) lib/active_support/inflector/methods.rb:229:in
each'
activesupport (3.2.13) lib/active_support/inflector/methods.rb:229:in constantize' actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:69:in
controller_reference'
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:54:in controller' actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:32:in
call'
journey (1.0.4) lib/journey/router.rb:68:in block in call' journey (1.0.4) lib/journey/router.rb:56:in
each'
journey (1.0.4) lib/journey/router.rb:56:in call' actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:612:in
call'
rack-openid (1.3.1) lib/rack/openid.rb:98:in call' actionpack (3.2.13) lib/action_dispatch/middleware/best_standards_support.rb:17:in
call'
rack (1.4.5) lib/rack/etag.rb:23:in call' rack (1.4.5) lib/rack/conditionalget.rb:25:in
call'
actionpack (3.2.13) lib/action_dispatch/middleware/head.rb:14:in call' actionpack (3.2.13) lib/action_dispatch/middleware/params_parser.rb:21:in
call'
actionpack (3.2.13) lib/action_dispatch/middleware/flash.rb:242:in call' rack (1.4.5) lib/rack/session/abstract/id.rb:210:in
context'
rack (1.4.5) lib/rack/session/abstract/id.rb:205:in call' actionpack (3.2.13) lib/action_dispatch/middleware/cookies.rb:341:in
call'
activerecord (3.2.13) lib/active_record/query_cache.rb:64:in call' activerecord (3.2.13) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in
call'
actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb:28:in block in call' activesupport (3.2.13) lib/active_support/callbacks.rb:405:in
_run__97491170270760873__call__4329443950855796459__callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in __run_callback' activesupport (3.2.13) lib/active_support/callbacks.rb:385:in
_run_call_callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:81:in run_callbacks' actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb:27:in
call'
actionpack (3.2.13) lib/action_dispatch/middleware/remote_ip.rb:31:in call' actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb:16: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'
railties (3.2.13) lib/rails/engine.rb:479:in call' railties (3.2.13) lib/rails/application.rb:223:in
call'
railties (3.2.13) lib/rails/railtie/configurable.rb:30:in method_missing' /usr/lib/ruby/vendor_ruby/phusion_passenger/rack/request_handler.rb:96:in
process_request'
/usr/lib/ruby/vendor_ruby/phusion_passenger/abstract_request_handler.rb:516:in accept_and_process_next_request' /usr/lib/ruby/vendor_ruby/phusion_passenger/abstract_request_handler.rb:274:in
main_loop'
/usr/lib/ruby/vendor_ruby/phusion_passenger/rack/application_spawner.rb:206:in start_request_handler' /usr/lib/ruby/vendor_ruby/phusion_passenger/rack/application_spawner.rb:171:in
block in handle_spawn_application'
/usr/lib/ruby/vendor_ruby/phusion_passenger/utils.rb:479:in safe_fork' /usr/lib/ruby/vendor_ruby/phusion_passenger/rack/application_spawner.rb:166:in
handle_spawn_application'
/usr/lib/ruby/vendor_ruby/phusion_passenger/abstract_server.rb:357:in server_main_loop' /usr/lib/ruby/vendor_ruby/phusion_passenger/abstract_server.rb:206:in
start_synchronously'
/usr/lib/ruby/vendor_ruby/phusion_passenger/abstract_server.rb:180:in start' /usr/lib/ruby/vendor_ruby/phusion_passenger/rack/application_spawner.rb:129:in
start'
/usr/lib/ruby/vendor_ruby/phusion_passenger/spawn_manager.rb:253:in block (2 levels) in spawn_rack_application' /usr/lib/ruby/vendor_ruby/phusion_passenger/abstract_server_collection.rb:132:in
lookup_or_add'
/usr/lib/ruby/vendor_ruby/phusion_passenger/spawn_manager.rb:246:in block in spawn_rack_application' /usr/lib/ruby/vendor_ruby/phusion_passenger/abstract_server_collection.rb:82:in
block in synchronize'
internal:prelude:10:in synchronize' /usr/lib/ruby/vendor_ruby/phusion_passenger/abstract_server_collection.rb:79:in
synchronize'
/usr/lib/ruby/vendor_ruby/phusion_passenger/spawn_manager.rb:244:in spawn_rack_application' /usr/lib/ruby/vendor_ruby/phusion_passenger/spawn_manager.rb:137:in
spawn_application'
/usr/lib/ruby/vendor_ruby/phusion_passenger/spawn_manager.rb:275:in handle_spawn_application' /usr/lib/ruby/vendor_ruby/phusion_passenger/abstract_server.rb:357:in
server_main_loop'
/usr/lib/ruby/vendor_ruby/phusion_passenger/abstract_server.rb:206:in start_synchronously' /usr/share/phusion-passenger/helper-scripts/passenger-spawn-server:99:in
I suspect that commit number cf089da from 13 Aug 2012 is still valid for redmine v1.3.2 stable (the one we're currently using)
It would be great if anyone could confirm this?
Regards
Hi,
I will like to use your redmine plugin but I am using version 2.6.0 and your plugin is not working with this version. Are you going to do an update to support the new redmine version?
Thanks!
I think it could be useful to be able to filter tasks by tracker (e.g. Bug, Feature or Support).
In the company I'm working for, we create user stories at the beginning of each sprint (which last 2-3 weeks). A user story is a high level task definition for the sprint and is defined by the "Feature" or the "Support" tracker. User stories are what the client is mainly interested in.
After creating user stories, we often create inheriting sub tasks using the "Bug" tracker. We use bugs as a more formal/technical way for describing a problem or a user story. They are the atomic unit composing a user story (i.e. a user story can be the parent of multiple bugs).
Most often, our taskboard have only few user stories (less than 10), but quite many bugs (more than 30).
Sometimes we may just want to see user stories only for the current sprint, for example when doing the sprint planning or retrospective.
Therefore it could be useful to have a way to filter the taskboard by tracker when the board is full of bugs and features.
Steps to Repeat this problem:
The Result:
Note: This does not happen when selecting a single issue and clicking on the archive button. That is a successful operation. The Edit Selected Issue and Archive Selected Issues buttons are still displayed after archiving the issue, however. The display of this overlay implies that at least one issue on the board remains selected even though nothing is actually selected.
I did not realize that my issues were de-selected because the Archive Selected button was still available. The 500 error occurred when I tried pushing the Archive Selected button again without having any issues selected on the task board.
This might be a permissions issue, since a colleague was able to successfully archive multiple issues.
The controller my_task_controller
work only for MySQL, because this:
.where("assigned_to_id = ? AND issue_statuses.is_closed = 0 AND projects.status = 1", @user.id) \
The issue_statuses.is_closed
is a int
in MySQL and a boolean
in PostgreSQL.
With this change it works:
if ActiveRecord::Base.connection.adapter_name == 'MySQL'
where = "assigned_to_id = ? AND issue_statuses.is_closed == 0 AND projects.status = 1"
else
where = "assigned_to_id = ? AND not issue_statuses.is_closed AND projects.status = 1"
end
...
.where(where, @user.id)
It could be very good to be able to include features from nested projects.
Hi,
I really like this plugin. Infact, after searching for kanban plugins for redmine for a month I found this and I'm pretty happy with this.
One issue that is still blocking us from using this live on our project is below:
The 'Task' type issues are not displayed correctly in the respective columns.This is a UI issue. The 'Task' card occupies the next column if the description is long and clutters the entire board.
In our project, we need to use 'Task' cards and can't convert them to either 'Stories' or 'Bugs'. Please find the attached screenshot on how this looks with our redmine setup.
Our redmine setup is:
Redmine version 2.3.0.devel
Ruby version 1.8.7 (x86_64-linux)
Rails version 3.2.13
Let me know if you need any more information.
Any help would be greatly appreciated.
Thanks
I have Redmine 3.0.3 fresh install.
Several pages present Internal error 500:
Different trackers may have same statuses but be assiged to different columns.
Hi. First at all, very nice development, such a nice idea! and thanks for sharing that with the world. I 'm having an issue saving after have created the colums and associated statuses to my columns:
Started PUT "/redmine/projects/65/taskboard/columns/update" for x.x.x.x at 2013-05-04 15:49:36 +0000
Processing by TaskboardController#update_columns as JS
Parameters: {"utf8"=>"โ", "authenticity_token"=>"/4RptBXg7pZko88FbXjqodPm2QUa6IIxPZo3B57O5cw=", "status"=>{"6"=>"0", "7"=>"0", "1"=>"1", "2"=>"1", "3"=>"2", "5"=>"2", "4"=>"3"}, "column"=>{"1"=>{"max_issues"=>"50", "weight"=>"0"}, "2"=>{"max_issues"=>"50", "weight"=>"0"}, "3"=>{"max_issues"=>"50", "weight"=>"0"}}, "commit"=>"Save Changes", "project_id"=>"65"}
Current user: deedos (id=8)
Completed 500 Internal Server Error in 27ms
thanks in advance
This looks like a great plugin, but I notice that there is no license file or license information associated with this repo.
I'm guessing that it's supposed to be a Free license but which one?
First of all, this is the best kanban/taskboard plugin I've found for Redmine ! thanks for the effort in building it and publishing it.
I noticed that the issues here do not respect Redmine workflow (transition limitation between issue states), associated with that, I see that the issue is not commented with the "user" changed the state from "foo" to "bar", I think both are consequence of not using Redmine own logic to change issue state, but I was not able to find the code were the transition happens either on this plugin, either in redmine.
Hi,
i'm running:
Redmine version -> 2.5.2.stable.13420
Ruby version -> 2.1.5-p273 (2014-11-13) [x86_64-linux]
Rails version -> 3.2.19
Environment -> production
Database adapter -> Mysql2
I have done all the tasks described in the wiki.
I also have done the migration:
Migrating redmine_task_board (Redmine Task Board)...
== CreateTaskBoardIssues: migrating ==========================================
-- create_table(:task_board_issues)
-> 0.0456s
== CreateTaskBoardIssues: migrated (0.0458s) =================================
== CreateTaskBoardColumns: migrating =========================================
-- create_table(:task_board_columns)
-> 0.0065s
-- create_table(:issue_statuses_task_board_columns, {:id=>false})
-> 0.0163s
-- add_index(:issue_statuses_task_board_columns, [:issue_status_id, :task_board_column_id], {:name=>"issue_statuses_task_board_columns_idx"})
-> 0.0353s
== CreateTaskBoardColumns: migrated (0.0585s) ================================
== CreateTaskBoardAssignees: migrating =======================================
-- create_table(:task_board_assignees)
-> 0.0207s
-- add_index(:task_board_assignees, :issue_id)
-> 0.0230s
-- add_index(:task_board_assignees, :assignee_id)
-> 0.0292s
== CreateTaskBoardAssignees: migrated (0.0733s) ==============================
== CreateStatusBuckets: migrating ============================================
-- create_table(:status_buckets)
-> 0.0059s
-- drop_table(:issue_statuses_task_board_columns)
-> 0.0196s
== CreateStatusBuckets: migrated (0.0263s) ===================================
Everything looked fine after that. But when i was going to activate the module in the Settings-Tab, i got on Internal Error. Here's the production.log:
Started GET "/projects/theproject/settings/modules" for 127.0.0.1 at 2016-01-05 11:08:54 +0100
Processing by ProjectsController#settings as HTML
Parameters: {"id"=>"project", "tab"=>"modules"}
Current user: my.nae (id=myid)
Rendered plugins/redmine_dmsf/app/views/hooks/redmine_dmsf/_view_projects_form.html.erb (0.0ms)
Rendered projects/_form.html.erb (86.9ms)
Rendered projects/_edit.html.erb (89.1ms)
Rendered projects/settings/_modules.html.erb (16.7ms)
Rendered projects/settings/_members.html.erb (110.4ms)
Rendered projects/settings/_versions.html.erb (47.9ms)
Rendered projects/settings/_issue_categories.html.erb (3.7ms)
Rendered projects/settings/_wiki.html.erb (3.5ms)
Rendered projects/settings/_repositories.html.erb (2.9ms)
Rendered projects/settings/_boards.html.erb (1.6ms)
Rendered projects/settings/_activities.html.erb (18.8ms)
Rendered plugins/redmine_backlogs/app/views/backlogs/_project_settings.html.erb (2.6ms)
Rendered plugins/redmine_code_review/app/views/code_review_settings/_filters.html.erb (2.0ms)
Rendered plugins/redmine_code_review/app/views/code_review_settings/_show.html.erb (21.9ms)
Rendered plugins/redmine_task_board/app/views/settings/_column_manager.html.erb (73.2ms)
Rendered plugins/redmine_task_board/app/views/settings/_project.html.erb (88.0ms)
Rendered common/_tabs.html.erb (422.0ms)
Rendered projects/settings.html.erb within layouts/base (424.8ms)
Completed 500 Internal Server Error in 440.4ms
ActionView::Template::Error (Mysql2::Error: Unknown column 'task_board_columns.project' in 'where clause': SELECT task_board_columns
.* FROM task_board_columns
WHERE task_board_columns
.project
= 135 ORDER BY weight ASC):
19:
20:
21:
22: <% columns.each do |column| %>
23:
24:
25: <%= column.title %>
app/views/common/_tabs.html.erb:22:in block in _app_views_common__tabs_html_erb___287751597348913041_71868600' app/views/common/_tabs.html.erb:21:in
each'
app/views/common/_tabs.html.erb:21:in _app_views_common__tabs_html_erb___287751597348913041_71868600' app/helpers/application_helper.rb:318:in
render_tabs'
app/views/projects/settings.html.erb:3:in `_app_views_projects_settings_html_erb__2154319618069903484_71997280'
How can i fix this?
Hi there,
Thanks a lot for this project, very interesting and useful. We are currently testing it vs. Trello and we experience an issue with limits. They don't seem to be enforcing.
If setting a limit to N in the configuration,
Do you think it is possible to fix this / make the plugin more enforcing from a redmine PoV?
Thx,
Hi Austin,
I got the following feedback from one or our team member.
Currently,
In Backlog column, we have 'New' and 'Ready for Dev' statuses
In Testing column, we have 'Ready for Deploy', 'Ready for Test' and 'Testing' statuses
However according to our SDLC what will make sense is the following sequence
In Backlog column -- "New" on the top and "Ready for Dev" below that
In Testing column the sequence would be "Ready for Test" --> "Testing" --> "Ready for Deploy"
Is there a way we can customise the sequence of different statuses under one column. The benefit is that our cards can then move from top down in each column, and when it reaches the bottom of the column, it goes to the column on the right.
What do you think about this.
Also let me know if there is a work around for achieving this.
Let me know if you have any questions.
Thanks
kk
I'd like to try, but completely doesn't work on redmine 1.2 (i.e. routes.rb is completely different format, but I guess there's some other differences).
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.