Giter Site home page Giter Site logo

inn / doubleclick-for-wp Goto Github PK

View Code? Open in Web Editor NEW
25.0 17.0 11.0 1.08 MB

WordPress plugin for serving Google Ad Manager ads

Home Page: https://wordpress.org/plugins/doubleclick-for-wp/

License: GNU General Public License v2.0

PHP 65.89% JavaScript 17.44% Shell 15.35% CSS 1.32%
wordpress-plugin doubleclick

doubleclick-for-wp's Introduction

The Institute for Nonprofit News WordPress Theme

This is the WordPress child theme used for https://inn.org.

As this is a child theme, it depends on the Largo parent theme which you can grab from: https://github.com/INN/Largo.

If you're not familiar with how parent and child themes work, check out: http://codex.wordpress.org/Child_Themes.

Additionally, the ability to import member stories from RSS feeds depends on this plugin: https://github.com/seamusleahy/feedinput (that we're still working on).

doubleclick-for-wp's People

Contributors

aschweigert avatar benlk avatar rclations avatar rnagle avatar wjhdev 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

doubleclick-for-wp's Issues

Widget breaks sidebar items, doesn't close aside

screen shot 2015-12-14 at 2 57 13 pm

DFW Widget is wrapping all subsequent widgets within it's <aside>. =|

  • Compared with Largo widgets for construction
  • Converted Cornell Sun HP Right Rail to use standard main-sidebar and converted styles, adjusted for defaults
  • Checked NPQ.org live version, which is functioning properly using a different version of widget but no maj/min version bump so short of comparing hashes, suffice to say it is older than master and what is on wp.org.
  • When broken widget is active, breaks hard-coded ad placements
  • Doesn't flip console errors.

Will be asking for a second pair of eyes on this one tmw.

Error "Accessing static property DoubleClick::$enqueued as non static"

We're using the DoubleClick for Wordpress plugin on the same site as the WPLR Sync plugin.

When we invoke the WPLR sync plugin it exposes an error in the DoubleClick-for-Wordpress plugin:

The error is Accessing static property DoubleClick::$enqueued as non static it occurs in this code here.

I think the fix is to change the line in question to if(!self::$enqueued) {.

There's also an identical error two lines below.

DoubleClick is renaming to Google Ad Manager

From a Friday, July 20 email:

Hello,
We’re renaming DoubleClick’s publisher platforms ‘Google Ad Manager’ to better reflect how our platform has evolved. Our goal is to help you earn more money and protect your brand wherever your audience is watching, playing and engaging.
What to expect:
Over the course of several months, you’ll start to see improvements to the user interface, but the core product and its functionality will remain the same.
Over the course of several months, you’ll start to see improvements to the user interface, but the core product and its functionality will remain the same.
While we may be bidding a fond farewell to the DoubleClick name, we're excited for a new and rewarding chapter in our journey with you. For the latest updates, follow us on Twitter and LinkedIn.
Until next time,
The Google Ad Manager Team

https://www.blog.google/products/admanager/introducing-google-ad-manager/

So we need to:

  • update the branding
  • keep an eye out for any API changes

Better validation on save for plugin options

It would be nice to do a little checking to make sure the plugin options are valid/sensical before saving.

For example, you can easily add overlapping breakpoints or give them nonsense values. We should check and throw an error if breakpoints overlap or the data otherwise doesn't match what we need here.

If a site's breakpoints change, the widgets break.

Here we see an array of options for a widget:

PHP message: array (
  'identifier' => 'cheese',
  'lazyLoad' => '1',
  'breakpoints' => NULL,
  'sizes' => 
  array (
    'mobile' => '',
    'desktop' => '',
  ),
  'size' => NULL,
  'widget_class' => 'default',
  'hidden_desktop' => 0,
  'hidden_tablet' => 0,
  'hidden_phone' => 0,
  'title_link' => '',
)

And here's what happens on the widget form, when the site has gone from using the named breakpoints "mobile" and "desktop" to using the named breakpoints "one" and "two":

PHP message: PHP Notice:  Undefined index: one in /wp-content/plugins/doubleclick-for-wp/dfw-widget.php on line 111
PHP message: PHP Notice:  Undefined index: two in /wp-content/plugins/doubleclick-for-wp/dfw-widget.php on line 111

The form and the widget should check to make sure that the widget breakpoint saved in the widget settings we're trying to get the sizes for exists in the site's breakpoint settings.

Sites are not likely to constantly change their breakpoints, so this is not a high-priority issue.

Gutenberg support?

Does it make sense to have a DoubleClick ad unit block that can be inserted into posts?

And, if that's an option, can we make it easier for people to have a number of DoubleClick blocks automatically included in a post, with saved settings? This would be a more-flexible approach to what we're currently using SCAIP for.

Run VIP code check, create issues for problems

https://vip.wordpress.com/documentation/vip/code-and-theme-review-process/

Requested by @aschweigert for "a...friend"

Weird bug on initial setup

When configuring the plugin from a blank slate:

  1. fill the blank for the network code
  2. fill the blanks for the breakpoints
  3. press Save Changes
  4. observe that the network code was saved, but the breakpoints are weirdly misconfigured, as if serialized data was split on colons and then smeared across the boxes. { isn't a valid number for a breakpoint pixel count.
  5. re-fill the blanks for the breakpoints
  6. press Save Changes
  7. observe that the network code and the breakpoints are saved correctly.
  8. press Save Changes
  9. the network code and the breakpoints are still saved correctly.

WP Database error in this widget

Seen only on NPQ on vagrant.

[Tue Sep 01 16:29:29 2015] [error] [client 127.0.0.1] WordPress database error You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON DUPLICATE KEY UPDATE `id`=LAST_INSERT_ID(id),`querytime`=values(querytime),`v' at line 27266 for query INSERT INTO `wp_56_analyticbridge_metrics` (page_id,startdate,enddate,querytime,metric,value) VALUES \n( \n\t\t\t\t\t\t\t(SELECT `id` from wp_56_analyticbridge_pages WHERE `pagepath`='/2015/08/28/values-in-your-organization-and-what-they-have-to-do-with-raising-money-part-1/'),\n\t\t\t\t\t\t\t'2015-08-31',\n\t\t\t\t\t\t\t'2015-08-31',\n\t\t\t\t\t\t\t'2015-09-01 17:29:27',\n\t\t\t\t\t\t\t'ga:sessions',\n\t\t\t\t\t\t\t'407')\n\t\t\t\t\t\t, \n( \n\t\t\t\t\t\t\t(SELECT `id` from wp_56_analyticbridge_pages WHERE `pagepath`='/2015/08/28/values-in-your-organization-and-what-they-have-to-do-with-raising-money-part-1/'),\n\t\t\t\t\t\t\t'2015-08-31',\n\t\t\t\t\t\t\t'2015-08-31',\n\t\t\t\t\t\t\t'2015-09-01 17:29:27',\n\t\t\t\t\t\t\t'ga:pageviews',\n\t\t\t\t\t\t\t'536')\n\t\t\t\t\t\t, \n( \n\t\t\t\t\t\t\t(SELECT `id` from wp_56_analyticbridge_pages WHERE `pagepath`='/2015/08/28/

And so on.

Year-old issue from WordPress.org

https://wordpress.org/support/topic/categories-tags-bug-and-solution?replies=1#post-7127312

Great idea for a plugin!

Unfortunately there's a bug with the targeting but I managed to find a solution. Currently the script executes in the footer and tries to obtain the categories using get_the_category() and tags using get_the_tags() but because the footer is outside The Loop, these just return a subset of all categories and tags.

The fix is simple, for categories (around line 230) and tags (around line 247) in dfw-init simply access the wp_query and insert the ID as a parameter. The code should look something like:

global $wp_query;
$current_page_id = $wp_query->get_queried_object_id();
$cats = get_the_category($current_page_id); // Existing line with param added
...
global $wp_query;
$current_page_id = $wp_query->get_queried_object_id();
$tags = get_the_tags($current_page_id); // Existing line with param added
I hope you keep working on this plugin because it's a great idea and otherwise DFP is a headache to implement in WordPress without creating a Custom Theme or Child Theme.

  • is this still a problem?
  • reply to thread

Debug if identifier is left null

If identifier is left null in the widget, the following happens:

[Thu Apr 30 18:28:04 2015] [error] [client 107.2.152.202] PHP Warning: in_array() expects parameter 2 to be array, null given in /nas/wp/www/cluster-10671/largoproject/wp-content/plugins/dfp/dfw-widget.php on line 99, referer: http://npq.largoproject.wpengine.com/wp-admin/widgets.php

prefix options fields

Right now we save the plugin options as option_name = breakpoints and network_code respectively. these should be prefixed with dfw_ for safety's sake.

Unfortunately it looks like this would require some fairly substantial reworking so opening a ticket for now.

Widget should include css for the `.display-none` class used when an ad does not load

In https://github.com/INN/DoubleClick-for-WordPress/blob/master/js/vendor/jquery.dfp.js/jquery.dfp.js#L319, if an ad loads successfully, then the display-none class is removed from the ad.

    $adUnit.removeClass('display-none').addClass('display-' + display);

We don't provide any CSS for that class, and so ads are not getting hidden when they are not loaded.

This issue is probably a good time to tackle #9 as well.

For RNS-167

various targeting fixes

  • allowed posts/pages to be tagged (by changing is_single to is_singular)
  • removed inurl variable from front-page tagging
  • modified conditions for tags and categories tagging
  • fixed $this::enqueued syntax

Address PHPCS errors and warnings for VIP ruleset

FILE: DoubleClick-for-WordPress/dfw-init.php

  • 6 | ERROR | Variable "DoubleClick" is not in valid snake_case format
  • 37 | ERROR | Member variable "networkCode" is not in valid snake_case format.
  • 59 | ERROR | Member variable "adSlots" is not in valid snake_case format.
  • 89 | ERROR | Variable "networkCode" is not in valid snake_case format
  • 91 | ERROR | Object property "networkCode" is not in valid snake_case format
  • 91 | ERROR | Variable "networkCode" is not in valid snake_case format
  • 151 | ERROR | Object property "adSlots" is not in valid snake_case format
  • 158 | ERROR | Object property "networkCode" is not in valid snake_case format
  • 181 | ERROR | Method name "networkCode" in class DoubleClick is not in snake case format, try "network_code"
  • 182 | ERROR | Object property "networkCode" is not in valid snake_case format
  • 182 | ERROR | Object property "networkCode" is not in valid snake_case format
  • 188 | ERROR | Object property "adSlots" is not in valid snake_case format
  • 195 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$this'
  • 283 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$this'
  • 283 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$sizes'
  • 283 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$args'
  • 289 | ERROR | Use Yoda Condition checks, you must
  • 299 | ERROR | Variable "adObject" is not in valid snake_case format
  • 300 | ERROR | Object property "adSlots" is not in valid snake_case format
  • 300 | ERROR | Variable "adObject" is not in valid snake_case format
  • 309 | ERROR | Variable "adObject" is not in valid snake_case format
  • 311 | ERROR | Variable "adObject" is not in valid snake_case format
  • 357 | ERROR | Variable "DoubleClick" is not in valid snake_case format
  • 361 | WARNING | This comment is 63% valid code; is this commented out code?
  • 367 | ERROR | Method name "breakpointIdentifier" in class DoubleClickAdSlot is not in snake case format, try "breakpoint_identifier"
  • 375 | ERROR | Method name "hasMapping" in class DoubleClickAdSlot is not in snake case format, try "has_mapping"
  • 384 | ERROR | Variable "DoubleClick" is not in valid snake_case format
  • 397 | ERROR | Variable "breakpointIdentifier" is not in valid snake_case format
  • 398 | ERROR | Variable "DoubleClick" is not in valid snake_case format
  • 398 | ERROR | Variable "breakpointIdentifier" is not in valid snake_case format
  • 401 | ERROR | Variable "browserHeight" is not in valid snake_case format
  • 402 | ERROR | Variable "browserWidth" is not in valid snake_case format
  • 402 | ERROR | Object property "minWidth" is not in valid snake_case format
  • 404 | ERROR | Variable "sizeStrings" is not in valid snake_case format
  • 405 | ERROR | Variable "sizeArray" is not in valid snake_case format
  • 407 | ERROR | Variable "sizeStrings" is not in valid snake_case format
  • 412 | ERROR | Variable "sizeArray" is not in valid snake_case format
  • 414 | WARNING | This comment is 64% valid code; is this commented out code?
  • 419 | ERROR | Variable "browserWidth" is not in valid snake_case format
  • 419 | ERROR | Variable "browserHeight" is not in valid snake_case format
  • 420 | ERROR | Variable "sizeArray" is not in valid snake_case format
  • 442 | ERROR | Member variable "minWidth" is not in valid snake_case format.
  • 449 | ERROR | Member variable "maxWidth" is not in valid snake_case format.
  • 461 | ERROR | Object property "minWidth" is not in valid snake_case format
  • 465 | ERROR | Object property "maxWidth" is not in valid snake_case format
  • 480 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$this'

FILE: DoubleClick-for-WordPress/dfw-options.php

  • 27 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '__'
  • 54 | WARNING | This comment is 70% valid code; is this commented out code?
  • 62 | WARNING | This comment is 70% valid code; is this commented out code?
  • 70 | WARNING | This comment is 70% valid code; is this commented out code?
  • 79 | WARNING | This comment is 69% valid code; is this commented out code?
  • 88 | WARNING | This comment is 69% valid code; is this commented out code?
  • 110 | ERROR | Variable "DoubleClick" is not in valid snake_case format
  • 112 | ERROR | Variable "DoubleClick" is not in valid snake_case format
  • 112 | ERROR | Object property "networkCode" is not in valid snake_case format
  • 113 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$DoubleClick'
  • 113 | ERROR | Variable "DoubleClick" is not in valid snake_case format
  • 113 | ERROR | Object property "networkCode" is not in valid snake_case format
  • 115 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not 'get_option'
  • 120 | ERROR | Variable "DoubleClick" is not in valid snake_case format
  • 122 | ERROR | Variable "DoubleClick" is not in valid snake_case format
  • 124 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$b'
  • 125 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$b'
  • 125 | ERROR | Object property "minWidth" is not in valid snake_case format
  • 126 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$b'
  • 126 | ERROR | Object property "maxWidth" is not in valid snake_case format
  • 137 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$identifier'
  • 144 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$min_width'
  • 151 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$max_width'

FILE: DoubleClick-for-WordPress/dfw-widget.php

  • 29 | ERROR | Variable "DoubleClick" is not in valid snake_case format
  • 45 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '__'
  • 58 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$args'
  • 62 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$args'
  • 62 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not 'apply_filters'
  • 62 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$args'
  • 66 | ERROR | Variable "DoubleClick" is not in valid snake_case format
  • 68 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$args'
  • 80 | ERROR | Variable "DoubleClick" is not in valid snake_case format
  • 85 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$this'
  • 85 | ERROR | Expected next thing to be an escaping function (like esc_html_e() or esc_attr_e()), not '_e'
  • 86 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$this'
  • 86 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$this'
  • 89 | ERROR | Variable "DoubleClick" is not in valid snake_case format
  • 93 | ERROR | Variable "DoubleClick" is not in valid snake_case format
  • 95 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$b'
  • 95 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$b'
  • 95 | ERROR | Object property "minWidth" is not in valid snake_case format
  • 99 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$this'
  • 99 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$b'
  • 100 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$instance'
  • 115 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$this'
  • 116 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$instance'
  • 127 | ERROR | Expected next thing to be an escaping function (see Codex for 'Data Validation'), not '$this'

Basic docs for DFP setup questions

Where possible, link out to official DFP docs instead of rewriting them. Original INN-written docs should be reserved for plugin functionality or plugin-DFP integration tasks.

Missing setting option

I don't seem to have the settings so I cant place my identifier. I'm using Newspaper - Theme 7.5
image

PHP Notice about missing variable and invalid argument

Warning: Invalid argument supplied for foreach() in /vagrant/wp-content/plugins/DoubleClick-for-WordPress/dfw-init.php on line 390 

Notice: Undefined variable: mapping in /vagrant/wp-content/plugins/DoubleClick-for-WordPress/dfw-init.php on line 422

How should we deal with the new breakpoint settings?

The breakpoint settings have changed in a way that will allow the plugin to be more responsive in the future. For example, it will allow ad placements that are 728x90 size to be replaced with a smaller banner on smaller screens.

However, the new settings will mean anyone using the DFP plugin will need to reconfigure at least some of their currently-deployed DFP widgets.

What are our options for making this as painless as possible?

Invalid arguments: SizeMappingBuilder.addSize(['0', 1], [[320, 50]])

Here's the full set of logs as seen in ?googlfc:

Start   Created slot: /65246486/banner_top_0
Information Start   Google service JS loaded
Information Start   Created service: publisher_ads
Information 1 ms    Associated service "publisher_ads" with slot "/65246486/banner_top".
Warning 2 ms    Invalid arguments: SizeMappingBuilder.addSize(['1220', 1], [[768, 90]])
Warning 2 ms    Invalid arguments: SizeMappingBuilder.addSize(['1040', 1], [[768, 90]])
Warning 2 ms    Invalid arguments: SizeMappingBuilder.addSize(['720', 1], [[320, 50]])
Warning 2 ms    Invalid arguments: SizeMappingBuilder.addSize(['0', 1], [[320, 50]])
Warning 2 ms    Size mapping is null because invalid mappings were added
Warning 4 ms    Error in processing size mapping: Size mapping has to be an array
Information 5 ms    Using single request mode to fetch ads.
Information 5 ms    Setting targeting attribute inURL with value /rivard-the-time-to-invest-in-mass-transit-is-now,/ for service publisher_ads
Information 5 ms    Setting targeting attribute URLIs with value /rivard-the-time-to-invest-in-mass-transit-is-now for service publisher_ads
Information 5 ms    Setting targeting attribute Query with value rivard-the-time-to-invest-in-mass-transit-is-now for service publisher_ads
Information 5 ms    Setting targeting attribute Domain with value rrlargo.wpengine.com for service publisher_ads
Information 5 ms    Setting targeting attribute Page with value single for service publisher_ads
Information 5 ms    Setting targeting attribute Category with value city-planning-development,gov-politics,transportation for service publisher_ads
Information 5 ms    Setting targeting attribute Tag with value brt-in-san-antonio,hov-lanes-in-san-antonio,multimodal-transit-in-san-antonio,sa-tomorrow-multimodal-transportation-plan,via-metropolitan-transit,vias-vision-2040 for service publisher_ads
Information 7 ms    GPT implementation fetched.
Information 10 ms   Calling fillslot.
Information 42 ms   Fetching ad for slot: /65246486/banner_top
Information 58 ms   Invoked queued function. Total: 3. Errors: 0.
Information 1638 ms Page load complete

Ads are failing to load, apparently because something is wrong with the arguments being passed to googletag.SizeMappingBuilder.addSize.

Is this because of a configuration error with the widget, or because of something actually being different?

screen shot 2016-07-26 at 11 35 36 pm

screen shot 2016-07-26 at 11 36 12 pm

sizeMapping issue

I'm using this plugin, working great.

however, when using the sizeMapping for multiple breakpoints.
I had to cast minwidth value as an integer (I see this has been updated already).
however you are providing the browserheight as the second parameter as 1.

it should infact be:

(int)$breakpoint->maxWidth;

please correct me if i'm wrong

standardize on max_width or max-width

we use hyphens in some places and underscores in other places for max_width and min_width.

  • change everything to underscores
    • widgets?
    • settings?
    • js?
    • blocks?
  • migration as necessary for sites currently using dashes in places; depends on #79.

Service Notice: DoubleClick for Publishers & DoubleClick Ad Exchange

An email from DoubleClick [email protected]

Dear Customer,

We’ve identified certain vendor files that may contain XSS vulnerabilities which could pose a security risk. Please check if you are hosting these files and remove them with the help of your webmaster. These are the currently identified third-party vendor files:

  1. adform/IFrameManager.html
  2. admotion/afa-iframe.htm
  3. bonzai/bonzaiBuster.html
  4. exponential/buster.html
  5. eyeblaster/addineyeV2.html
  6. eyewonder/interim.html
  7. flashtalking/ftlocal.html
  8. ipinyou/py_buster.html
  9. jivox/jivoxibuster.html
  10. mediaplex/mojofb_v9.html
  11. mixpo/framebust.html
  12. predicta/predicta_bf.html
  13. rockabox/rockabox_buster.html
  14. liquidus/iframeX.htm
  15. controbox/iframebuster.html
  16. spongecell/spongecell-spongecellbuster.html
  17. unicast/unicastIFD.html
  18. adrime/adrime_burst.2.0.0.htm
  19. revjet/revjet_buster.html
  20. kpsule/iframebuster.html

We have disabled these vendors where possible for all DoubleClick for Publishers and DoubleClick Ad Exchange customers. However, any of the mentioned files hosted on your site may still pose a risk and should be taken down. We will notify you as we learn more.

For more information please refer to this Help Center article.

Regards,
The DoubleClick for Publishers and DoubleClick Ad Exchange Teams

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.