The official repository for Frank has moved to TestingWithFrank/Frank.
Please submit all pull requests to the new location. The frank-cucumber gem will continue to work.
Automated acceptance tests for native iOS apps
Home Page: www.testingwithfrank.com
License: Apache License 2.0
The official repository for Frank has moved to TestingWithFrank/Frank.
Please submit all pull requests to the new location. The frank-cucumber gem will continue to work.
From the Frank mailing list, Dale Emery spake:
If I remember right, that's because the 'Frank' scheme isn't shared, so it isn't stored in the project file. But it does get automatically created when you first build in Xcode.
Something like that.
Pete, any chance of making the scheme shared?
Dale
I would like the ability to do something like this in my env.rb:
Dir[File.join(File.dirname(__FILE__), 'helpers', "/*.rb")].each { |f| require f }
World(LaunchHelper)
So that I can include my own helpers. If you would like to give me some direction on where to do this, I may be able to do it.
In an iPhone project do
This shows the following output:
LAUNCHING IN THE SIMULATOR...
sh: line 1: 1424 Trace/BPT trap: 5 /Users/sdqali/.rvm/gems/ruby-1.9.3-p194@frank/gems/sim_launcher-0.4.0/lib/sim_launcher/../../native/ios-sim "showsdks" 2>&1
sh: line 1: 1427 Trace/BPT trap: 5 /Users/sdqali/.rvm/gems/ruby-1.9.3-p194@frank/gems/sim_launcher-0.4.0/lib/sim_launcher/../../native/ios-sim "launch" "/Users/sdqali/src/play/2012-Olympics-iOS--iPad-and-iPhone--source-code/2012 Olympics/Frank/frankified_build/Frankified.app" "--sdk" "" "--family" "" "--exit" 2>&1
The version of Xcode I am using is Xcode 4.3.2 Build version 4E2002
The error seems to be happening because the xcodebuild version I have does not accept the showsdks switch, but accepts -showsdks
The following frankly step appears to be broken:
Then /^I wait to see a navigation bar titled "([^\"]*)"$/
The error tossed in the console is:
undefined method `include' for ["Accounts"]:Array (NoMethodError)
/Users/adam/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/timeout.rb:57:in `timeout'
Tests/Acceptance/features/list_available_accounts.feature:9:in `And I wait to see a navigation bar titled "Accounts"'
From http://groups.google.com/group/frank-discuss/browse_frm/thread/6895ac4d83638f95
...the marked method in UIQuery does substring matching by default, which is annoying. We inherited this from UISpec, and unfortunately at this point it would break too much stuff if we changed the semantics. I like Stew's suggestion of a new markedExactly: method on UIQuery.
If I run my iPad app using the 3.2 simulator the UISwitch code works but if I run it under 4.3 it doesn't flip it. I haven't had any time to investigate, I just run the Frank tests under the 3.2 simulator, i.e.
simulator = SimLauncher::DirectClient.for_ipad_app( app_path, "3.2" )
The step I'm using is:
When I flip switch "switchName"
Maybe there is something in the Frank copy of UISpec that needs to be updated for 4?
Our app still needs armv6 support, so the distributed .a file doesn't work. It would be great if it was included. I would submit a patch, but it's simple enough, just change:
ARCHS = "$(ARCHS_STANDARD_32_BIT)"
to
ARCHS = "$(ARCHS_STANDARD_32_BIT)" armv6
As a new Frank user
I would like accessibility to be turned on for my automagically
So I don't have to figure out that I need to do it by hand
See Stew's code in this thread for a likely solution:
http://groups.google.com/group/frank-discuss/browse_thread/thread/c4b1ee713a29d4c6
Hi,
I have a UIPopoverController, with a UITableView that has a section header (64px) with two normal UIButtons. Those buttons have an accessibility label (e.g. "Deactivate all"). Also each cell has an accessibility label as well. I know all accessibility labels are set right because they flash correctly placed when I try to access them using symbiote.
However if I execute the step 'When I touch "Deactivate all"' not the button but the first row of the table is selected. Moreover, if I try to select a specific row, not this row but the row next but one is selected (If I try to select the first, the third is selected and so forth).
I have tried all sorts of different semantically equal steps, such as "When I touch the first table view cell vs. When I touch cell marked..." or "When I touch the button marked... vs. When I touch ..." but I encountered the same problem for all of these.
Can you help me out with this one?
Thanks in advance.
Felix
As a test automater
In order to know that I'm not using frankly_map correctly
I would like for it to fail explicitly when I pass the wrong number of arguments
We can tell how many arguments an objective-C method requires based on the method signature (count the number of colons). If the number of arguments being passed doesn't match the number required we should throw an exception, rather than silently failing.
As a test engineer
I would like to be able to tell Frank to simulate pressing keys on the keyboard
So that I can more accurately simulate user interactions with my app
See discussion in https://groups.google.com/d/topic/frank-discuss/eHi4jTHi5Vg/discussion for more details
Browsers often ask for /favicon when visiting a site. Symbiote doesn't supply one, and outputs a noisy 404 error in the logs. We should just add a blank favicon to the symbiote static bundle or something.
something like:
module WaitHelper
TIMEOUT = 15 #seconds
POLL_SLEEP = 0.1 #seconds
def wait_until(opts = {})
timeout = opts[:timeout] || TIMEOUT
message = opts[:message]
begin
Timeout::timeout(timeout) do
until yield
sleep POLL_SLEEP
end
end
rescue Timeout::Error => e
raise message if message
raise
end
end
end
I'm working through the tutorial and running into an error on the first When step:
Feature: Drive our App using Cucumber
Scenario: Plus Button adds timestamp # features/tutorial.feature:3
129:136: execution error: Can’t get project of missing value. (-1728)
PING FAILED!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
I have a similar issue when trying to run cucumber in the example app EmployeeAdmin:
129:136: execution error: Can’t get project of missing value. (-1728)
Given the app has just started # features/step_definitions/employee_admin_steps.rb:1
Scenario: Add test user # features/main.feature:6
When I touch the Add User button # features/step_definitions/employee_admin_steps.rb:5
Connection refused - connect(2) (Errno::ECONNREFUSED)
/Volumes/MacintoshHD/Users/christian/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/net/http.rb:560:in `initialize'
/Volumes/MacintoshHD/Users/christian/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/net/http.rb:560:in `open'
/Volumes/MacintoshHD/Users/christian/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/net/http.rb:560:in `connect'
/Volumes/MacintoshHD/Users/christian/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/timeout.rb:53:in `timeout'
/Volumes/MacintoshHD/Users/christian/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/timeout.rb:101:in `timeout'
/Volumes/MacintoshHD/Users/christian/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/net/http.rb:560:in `connect'
/Volumes/MacintoshHD/Users/christian/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/net/http.rb:553:in `do_start'
/Volumes/MacintoshHD/Users/christian/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/net/http.rb:542:in `start'
../../cucumber/frank_helper.rb:143:in `make_http_request'
../../cucumber/frank_helper.rb:125:in `post_to_uispec_server'
../../cucumber/frank_helper.rb:60:in `frankly_map'
../../cucumber/frank_helper.rb:7:in `touch'
./features/step_definitions/employee_admin_steps.rb:6:in `/^I touch the Add User button$/'
features/main.feature:7:in `When I touch the Add User button'
I'm running xcode4 GM. Could that be causing the problem?
Hi,
I've been looking into some automation solutions and came across Frank. The problem is that all of our projects use AsyncSocket, so I can't get the Frankified targets to build successfully due to the duplicate symbol. I'm assuming I'm not the only one running into this problem. Would it be possible for you to include that as a separate library so we can choose not to use it?
As a contributor to Frank
I would like an easy way to submit UISpec patches
So that I can improve Frank without delay!
I'm thinking about starting up an unofficial UISpec mirror on github. We could create a frank_patches branch on that, and pull that into Frank on a regular basis. It would be trivial to keep the unofficial mirror up to date, and hopefully trivial to keep the frank_patches branch merged with the main mirror branch.
AS A test automater
SO THAT I can experiment with how different selectors might work
I WOULD LIKE to use Symbiote to perform custom operations (not just flash)
The main example would be to call 'touch' rather than 'flash', but there are probably a few others that'd be helpful for testing
Symbiote's "flash" feature is very handy for testing and diagnosing selectors. Currently, the feature works with only the two built-in selector engines, uiquery and shelley_compat.
Please allow Symbiote to use any registered selector engine. Perhaps display a select element with the engines as options.
This feature would be very useful for me, given that I often use an alternative selector engine (Igor).
Frank version (gem): 0.8.2
I have the following step definition
When /^I scroll details to bottom$/ do
tables_scrolled = frankly_map( "tableView", "scrollToBottom", "tag" )
puts tables_scrolled
end
The problem is, nothing happens, it just tells me it was successful even tough I can't see
Anyone figured out how to to do this?
Thanks!
the link to tutorial/Tutorial.md in your readme gives a 404
for some reason if you load symbiote from http://127.0.0.1:37265 rather than http://localhost:37265 then attempts to access the API lead to 405 errors coming back from the server.
Currently tests will silently fail to tap a view if it's outside the bounds of the view (e.g. in a scroll view but not in the viewport). Instead the tests should fail fast with a detailed error describing the issue.
There have been several folks on the list who have had confusing errors because they're trying to launch the simulator with not-quite-the-right-SDK-version. See e.g. http://groups.google.com/group/frank-discuss/msg/d0690eb461d98aa0.
Can we automagically detect the most recent SDK (filesystem sniffing?) and use that unless explicitly told otherwise?
There's an extra comma on line 9 of the keyboard_helper.rb file, hence giving error when i attempt to run a frank-cucumber script. Below is the error from console:
/Users/localuser/.rvm/gems/ruby-1.8.7-p358/gems/frank-cucumber-0.8.14/lib/frank-cucumber/keyboard_helper.rb:10: syntax error, unexpected ')' (SyntaxError)
/Users/localuser/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:55:in gem_original_require' /Users/localuser/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:55:in
require'
/Users/localuser/.rvm/gems/ruby-1.8.7-p358/gems/frank-cucumber-0.8.14/lib/frank-cucumber/frank_helper.rb:5
/Users/localuser/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:55:in gem_original_require' /Users/localuser/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:55:in
require'
/Users/localuser/.rvm/gems/ruby-1.8.7-p358/gems/frank-cucumber-0.8.14/lib/frank-cucumber.rb:2
/Users/localuser/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:60:in gem_original_require' /Users/localuser/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:60:in
require'
/Users/localuser/apps/beaucoo-iphone-app/Frank/features/support/env.rb:1
/Users/localuser/.rvm/gems/ruby-1.8.7-p358/gems/cucumber-1.2.0/bin/../lib/cucumber/rb_support/rb_language.rb:129:in load' /Users/localuser/.rvm/gems/ruby-1.8.7-p358/gems/cucumber-1.2.0/bin/../lib/cucumber/rb_support/rb_language.rb:129:in
load_code_file'
/Users/localuser/.rvm/gems/ruby-1.8.7-p358/gems/cucumber-1.2.0/bin/../lib/cucumber/runtime/support_code.rb:171:in load_file' /Users/localuser/.rvm/gems/ruby-1.8.7-p358/gems/cucumber-1.2.0/bin/../lib/cucumber/runtime/support_code.rb:83:in
load_files!'
/Users/localuser/.rvm/gems/ruby-1.8.7-p358/gems/cucumber-1.2.0/bin/../lib/cucumber/runtime/support_code.rb:82:in each' /Users/localuser/.rvm/gems/ruby-1.8.7-p358/gems/cucumber-1.2.0/bin/../lib/cucumber/runtime/support_code.rb:82:in
load_files!'
/Users/localuser/.rvm/gems/ruby-1.8.7-p358/gems/cucumber-1.2.0/bin/../lib/cucumber/runtime.rb:175:in load_step_definitions' /Users/localuser/.rvm/gems/ruby-1.8.7-p358/gems/cucumber-1.2.0/bin/../lib/cucumber/runtime.rb:40:in
run!'
/Users/localuser/.rvm/gems/ruby-1.8.7-p358/gems/cucumber-1.2.0/bin/../lib/cucumber/cli/main.rb:43:in execute!' /Users/localuser/.rvm/gems/ruby-1.8.7-p358/gems/cucumber-1.2.0/bin/../lib/cucumber/cli/main.rb:20:in
execute'
/Users/localuser/.rvm/gems/ruby-1.8.7-p358/gems/cucumber-1.2.0/bin/cucumber:14
/Users/localuser/.rvm/gems/ruby-1.8.7-p358/bin/cucumber:19:in `load'
/Users/localuser/.rvm/gems/ruby-1.8.7-p358/bin/cucumber:19
Is there any method in Frank similar to UIAutomation's dragInsideWithOptions.
Please suggest
Thanks
Sougata
When the view hierarchy is long (takes up a lot of vertical space), scrolling down the hierarchy scrolls the whole page, so that the simulator image is scrolled out of view.
Proposal: Allow the left and right sections of the Symbiote view (the list tabs and the inspect tabs) to scroll independently.
Hi,
I am having issue of Symbiote does not load, the refresh icon keep spinning.
I am using Frank 0.8.8 with IUQuery
run http://:37265/map, getting error: {"details":"*** -[NSPlaceholderMutableString initWithString:]: nil argument","outcome":"ERROR","reason":"invalid selector"}
Thanks for helping.
Mung
Hi,
First of all thanks for making Frank! It's awesome to use Cucumber for an iOS app!
I tried running the example project's features, and also implemented it into my own project, but for some reason the feature cannot push a button, in this case "Save." I looked through the code a bit, saw that it uses the accessibilityLabel and tried to set one explicitly, but no luck.
Additionally, it complained about not finding the method red
on Object, so I guess the color_helper isn't included properly.
All this is on iOS 4.2, Frank checked out from GitHub today. I also ran the svn updater for uispec, which seemed to have run fine.
I appreciate any help!
Christoph
Have a custom UIview by Name Banner Ad View, it has an UIImageView in that, but touch event does not get invoked, it only flashes the component
Below is the code used,
view accessibilityLabel:'bannerAd' touch
When the app crashes it shows up in the cucumber logs as an EOF exception. Users of Frank have a hard time understanding that that exception actually means "Your app crashed. I don't know why". We should catch that exception and provider more user-friendly feedback.
Hi,
i just installed Frank on Mac OS X Lion and when i try to run cucumber i get the following error:
schle/% cucumber ~/Workspace/bikar
jQuery is not defined (V8::JSError)
at ./Frank/frank_static_resources.bundle/jquery-ui.min.js:10:1
/Library/Ruby/Gems/1.8/gems/cucumber-1.1.4/bin/../lib/cucumber/js_support/js_language.rb:28:in `send'
/Library/Ruby/Gems/1.8/gems/cucumber-1.1.4/bin/../lib/cucumber/js_support/js_language.rb:28:in `method_missing'
/Library/Ruby/Gems/1.8/gems/cucumber-1.1.4/bin/../lib/cucumber/js_support/js_language.rb:118:in `load_code_file'
/Library/Ruby/Gems/1.8/gems/cucumber-1.1.4/bin/../lib/cucumber/runtime/support_code.rb:171:in `load_file'
/Library/Ruby/Gems/1.8/gems/cucumber-1.1.4/bin/../lib/cucumber/runtime/support_code.rb:83:in `load_files!'
/Library/Ruby/Gems/1.8/gems/cucumber-1.1.4/bin/../lib/cucumber/runtime/support_code.rb:82:in `each'
/Library/Ruby/Gems/1.8/gems/cucumber-1.1.4/bin/../lib/cucumber/runtime/support_code.rb:82:in `load_files!'
/Library/Ruby/Gems/1.8/gems/cucumber-1.1.4/bin/../lib/cucumber/runtime.rb:174:in `load_step_definitions'
/Library/Ruby/Gems/1.8/gems/cucumber-1.1.4/bin/../lib/cucumber/runtime.rb:40:in `run!'
/Library/Ruby/Gems/1.8/gems/cucumber-1.1.4/bin/../lib/cucumber/cli/main.rb:43:in `execute!'
/Library/Ruby/Gems/1.8/gems/cucumber-1.1.4/bin/../lib/cucumber/cli/main.rb:20:in `execute'
/Library/Ruby/Gems/1.8/gems/cucumber-1.1.4/bin/cucumber:14
/usr/bin/cucumber:19:in `load'
/usr/bin/cucumber:19
Hi,
Not much of a stacktrace, but I get:
And I touch "Save" # Frank/cucumber/frankly_steps.rb:113
undefined method red' for #<Object:0x80b4c2f8> (NoMethodError) ./Frank/cucumber/frankly_steps.rb:117:in
/^I touch "([^\"]*)"$/'
features/main.feature:11:in `And I touch "Save"'
My guess is the file isn't found, because I can change the helper to extend the String class with methods that definitely work in other apps I've written, and it still can't find it.
We should rotate the live app preview into the same orientation as the device itself.
I can flash any element that starts with UI but cannot flash elements that start with GR. How can I flash elements that start with GR.
Thanks
Hi again!
I tried to hit the delete button on a row using a simple:
And I touch "Confirm Deletion for Foo"
That's the label that shows up when I inspect that button with the Accessibility Inspector, but it doesn't work, though that portion of the feature passes.
Not sure if it's relevant, but I found this post on the UISpec group:
http://groups.google.com/group/uispec/browse_thread/thread/1aba9e25d70bffce/ed446483e9208dd5?lnk=gst&q=delete#ed446483e9208dd5
Thanks!
Heyo,
When my app goes to a particular view it is supposed to hide the nav bar and reappear when the view is tapped. This works, but I'm trying to write an acceptance test for it now. Using "Then /^I wait to not see a navigation bar titled "([^\"]*)"$/" seemed perfect until it didn't work. I get "execution expired (Timeout::Error)" even though I can see that on the simulator the navigation bar hides itself after 3 seconds.
I am pretty clueless about Ruby, but this is the definition that I see in my core_frank_steps.rb:
Then /^I wait to not see a navigation bar titled "([^\"]*)"$/ do |expected_mark|
Timeout::timeout(30) do
values = frankly_map( 'navigationItemView', 'accessibilityLabel' )
while values.include?(expected_mark)
values = frankly_map( 'navigationItemView', 'accessibilityLabel' )
sleep 0.1
end
end
end
Any ideas?
Don't force people to edit launch_steps.rb to change between iPhone/iPad and simulator versions.
e.g.
export SIMULATOR_VERSION=4.3
export SIMULATOR_TYPE=iPhone
Help!
I know that gestures are a new thing with Frank, but has anyone got them to actually work? I'm looking for swiping, in particular. I've got the standard swipe to the right/left to delete function going on in my app, and I want to test the swipe. Am I supposed to add anything special? I've tried adding UISpec to my project, and am getting failed builds. GraphicsServices.framework added nicely, with no problems.
When I run cucumber, I get a passed when, but a failed then (which makes sense, since the delete button doesn't show up).
I'm pretty new to all of this, so take it easy on me. Any help is greatly appreciated!
Thanks!
Cassie :)
When I have a modal navigation view controller with a navigation button "Done", then I cannot touch it using touch( "button marked:'Done'" )
because touch()
fails with the following message:
some views could not be touched (probably because they are not within the current viewport)
It does work however, for non-modal UINavigationControllers.
I investigated a little bit and I found that the problem occurs if I use the UIModalTransitionStyleCoverVertical
style, but not when using UIModalTransitionStyleCrossDissolve
. Adding a breakpoint in - (BOOL) touchPointIfInsideWindow:(CGPoint)point
(UIView+KifAdapter.m) I could see that in fact the point is reported to lie outside the window. Also the superview of the navigation bar (UILayoutContainerView
IIRC) lies outside of the screen (frame is { x = 0.0, y = 480.0, width = 320.0, height = 480.0 }
) but it has an animation set, which I assume transforms the view visually back on the screen.
Also interesting is that the button is in fact touched (as confirmed by a breakpoint in my handler method).
I'm not really sure how this can be fixed, since - [UIView convertPoint:toView:]
reports the wrong value and I didn't find out how to adjust it properly. For now I use a workaround in the touch()
function to check if any touch succeeded instead of checking if any touch failed. But this doesn't look like a good solution to me.
def touch_lenient( uiquery )
touch_successes = frankly_map( uiquery, 'touch' )
raise "could not find anything matching [#{uiquery}] to touch" if touch_successes.empty?
raise "no views could be touched (probably because they are not within the current viewport)" unless touch_successes.include?(true)
end
If anyone has any inputs on how to fix / circumvent this problem I'd be very glad.
Hi,
I have followed the Frank tutorial for my project. When I have done the step which is about modifying main.m. It gives the error that FrankServer.h header not found. This error comes even in compile time. If any body struggled with simillar kind of error please let me know the solution.
thanks
Maybe we can use http://parsekit.com/, or boost::spirit, or something else?
Frank doesn't allow you to directly manipulate the keyboard, which would be useful when doing things like editing text fields. just using methods like setText doesn't fire the same sequence of events, resigning first responder etc. which leads to lots of confusion on the mailing list and hacky work-arounds.
Is it is possible to run in real device, I tried in my IPad but it is failing, the server is not running.
In the list of properties for a view, offer a verbose listing of properties. Perhaps a switch to toggle between the "whitelisted" set of properties and the complete set.
Hi,
,,After upgrade to XCode 4.3, frank-cucumber no longer launch simulator.
Running cucumber show following:
h: line 1: 9190 Trace/BPT trap: 5 /Users/siuying/.rvm/gems/ruby-1.9.3-p125/gems/sim_launcher-0.3.7/lib/sim_launcher/../../native/iphonesim "showsdks" 2>&1
sh: line 1: 9193 Trace/BPT trap: 5 /Users/siuying/.rvm/gems/ruby-1.9.3-p125/gems/sim_launcher-0.3.7/lib/sim_launcher/../../native/iphonesim "launch" "/Users/siuying/Library/Developer/Xcode/DerivedData/MagicTimer-gajumfadzysibzewdxyvagveaupe/Build/Products/Debug-iphonesimulator/MagicTimer Frankified.app" "" "iphone" 2>&1
PING FAILED!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
It worked if I launch the simulator manually. There is a thread talked about this (http://groups.google.com/group/frank-discuss/browse_thread/thread/2a34c5b080ea6b78), it seems there is a workaround there, but it would better if it just work if I install frank.
Thanks.
As a new user of Frank
I would like a clear error warning when my machine isn't configured correctly
So I can fix the problem and start rockin' it with Frank
Frank steps that use AppleScript to automate the Simulator fail in a fairly cryptic way when the machine running the steps doesn't have accessibility turned on in system preferences.
We should have those steps detect that they are failing because accessibility isn't turned on, and have them print a verbose, clear error message telling the user why they are having problems and how to resolve them by turning accessibility on.
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.