jazzband / django-analytical Goto Github PK
View Code? Open in Web Editor NEWAnalytics services for Django projects
License: MIT License
Analytics services for Django projects
License: MIT License
I use TEMPLATE_CONTEXT_PROCESSORS to chuck in some extra context for olark (nickname, email, fullname, translations etc). I have a whole bunch of views that do somthing like this:
def tutorials_view(request):
return render_to_response('tutorials.html', RequestContext(request))
They throw the items error. Those I can fix to use the proper render or context_instance= methods as you recommend in the tutorials but it doesn't fix views I have from external modules and so forth.
However using regex on the context seems to work on all views:
def _get_configuration(self, context):
code = []
matches = re.findall(r"olark_[a-zA-Z_]*", str(context))
for m in matches:
key = m[6:]
if key in MESSAGE_KEYS:
code.append(MESSAGE_CODE % {'key': key, 'msg': context[m]})
return code
instead of
def _get_configuration(self, context):
code = []
for dict_ in context:
for var, val in dict_.items():
if var.startswith('olark_'):
key = var[6:]
if key in MESSAGE_KEYS:
code.append(MESSAGE_CODE % {'key': key, 'msg': val})
return code
Any reason why not to use the regex method (performance???)
While I got around the issue by using PIWIK_DOMAIN_PATH = '127.0.0.1/piwik'
, I get the Exception of PIWIK_DOMAIN_PATH setting: must be a domain name, optionally followed by an URI path, no trailing slash (e.g. piwik.example.com or my.piwik.server/path)
if I have it just set as localhost/piwik. I assume that ^(([^./?#@:]+\\.)+[^./?#@:]+)+(/[^/?#@:]+)*$
wants to see a '.' in there somewhere :P
Hi,
I've ran into a few problems while running django-analytical's test suite. The root of the problems appear to be related settings_manager
and its calling of syncdb
when INSTALLED_APPS
is passed in.
Below, in a freshly created Django 1.3 environment using sqlite3 without South or anything, _get_domain
returns the default Site
object's domain even though the test (analytical.ChartbeatTagTestCase.test_rendering_setup_no_site
) filters out django.contrib.sites
. This causes the test to fail because it isn't expecting domain
in _sf_async_config
.
.....F........................................................................................................
======================================================================
FAIL: test_rendering_setup_no_site (analytical.tests.test_tag_chartbeat.ChartbeatTagTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/eric/scratch/test_chartbeat/lib/python2.6/site-packages/analytical/tests/test_tag_chartbeat.py", line 66, in test_rendering_setup_no_site
self.assertTrue('var _sf_async_config={"uid": "12345"};' in r, r)
AssertionError: False is not True :
<script type="text/javascript">
var _sf_async_config={"domain": "example.com", "uid": "12345"};
(function(){
function loadChartbeat() {
window._sf_endpt=(new Date()).getTime();
var e = document.createElement('script');
e.setAttribute('language', 'javascript');
e.setAttribute('type', 'text/javascript');
e.setAttribute('src',
(("https:" == document.location.protocol) ? "https://a248.e.akamai.net/chartbeat.download.akamai.com/102508/" : "http://static.chartbeat.com/") +
"js/chartbeat.js");
document.body.appendChild(e);
}
var oldonload = window.onload;
window.onload = (typeof window.onload != 'function') ?
loadChartbeat : function() { oldonload(); loadChartbeat(); };
})();
</script>
----------------------------------------------------------------------
Ran 110 tests in 0.334s
FAILED (failures=1)
And in another project with more apps and using South, an attempt is made to create a table that already exists. Here is the output: https://gist.github.com/1051542. settings_manager.syncdb
is in the traceback of each failure, so I'm assuming everything here is related.
Any ideas? Do you get the same test failures?
Installed from master today and ran into this error:
django.core.exceptions.ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named '_sqlite3'
2.3.0 release doesn't seem to have this issue. Looks like commit 347df54 broke the setup.cfg.
Full text of error:
> pip install git+https://github.com/jcassee/django-analytical.git
Collecting git+https://github.com/jcassee/django-analytical.git
Cloning https://github.com/jcassee/django-analytical.git to /tmp/pip-vtw00h9e-build
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "/webapps/bdw3_20171021121342Z/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 31, in <module>
from pysqlite2 import dbapi2 as Database
ModuleNotFoundError: No module named 'pysqlite2'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/webapps/bdw3_20171021121342Z/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 33, in <module>
from sqlite3 import dbapi2 as Database
File "/usr/local/lib/python3.6/sqlite3/__init__.py", line 23, in <module>
from sqlite3.dbapi2 import *
File "/usr/local/lib/python3.6/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-vtw00h9e-build/setup.py", line 49, in <module>
django.setup()
File "/webapps/bdw3_20171021121342Z/lib/python3.6/site-packages/django/__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "/webapps/bdw3_20171021121342Z/lib/python3.6/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models()
File "/webapps/bdw3_20171021121342Z/lib/python3.6/site-packages/django/apps/config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "/webapps/bdw3_20171021121342Z/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 978, in _gcd_import
File "<frozen importlib._bootstrap>", line 961, in _find_and_load
File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "/webapps/bdw3_20171021121342Z/lib/python3.6/site-packages/django/contrib/auth/models.py", line 4, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "/webapps/bdw3_20171021121342Z/lib/python3.6/site-packages/django/contrib/auth/base_user.py", line 52, in <module>
class AbstractBaseUser(models.Model):
File "/webapps/bdw3_20171021121342Z/lib/python3.6/site-packages/django/db/models/base.py", line 124, in __new__
new_class.add_to_class('_meta', Options(meta, app_label))
File "/webapps/bdw3_20171021121342Z/lib/python3.6/site-packages/django/db/models/base.py", line 325, in add_to_class
value.contribute_to_class(cls, name)
File "/webapps/bdw3_20171021121342Z/lib/python3.6/site-packages/django/db/models/options.py", line 214, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
File "/webapps/bdw3_20171021121342Z/lib/python3.6/site-packages/django/db/__init__.py", line 33, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "/webapps/bdw3_20171021121342Z/lib/python3.6/site-packages/django/db/utils.py", line 211, in __getitem__
backend = load_backend(db['ENGINE'])
File "/webapps/bdw3_20171021121342Z/lib/python3.6/site-packages/django/db/utils.py", line 115, in load_backend
return import_module('%s.base' % backend_name)
File "/webapps/bdw3_20171021121342Z/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/webapps/bdw3_20171021121342Z/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 35, in <module>
raise ImproperlyConfigured("Error loading either pysqlite2 or sqlite3 modules (tried in that order): %s" % exc)
django.core.exceptions.ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named '_sqlite3'
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-vtw00h9e-build/
After installing on Ubuntu 14.04 running Python3.5 and Django 1.8.4 I'm getting an ImportError: No module named 'analytical'
error. A similar env running Mac OS 10.10.5 does not experience this issue.
I have added analytical
to my INSTALLED_APPS and added the basic template tags to my base template.
I just used django-analytical to integrate Piwik analytics into a site, using the Piwik-specific template tag as documented here. It works great in production, but unfortunately it causes problems for our development environment.
Obviously we don't want to track visits to the site when it's running on a local development server. It seems like it would be best to simply not embed the tracking code in the templates when we're running in development. Furthermore, it would nice to not be required to set PIWIK_DOMAIN_PATH
or PIWIK_SITE_ID
in the development settings, since they are unnecessary.
The documentation on PIWIK_SITE_ID
says:
If you do not set the site ID the tracking code will not be rendered.
This implies that the {% piwik %}
template tag won't render the tracking code if PIWIK_SITE_ID
is not set, which would be very desirable behavior for the use case of the development environment. In that case, you would only have to set PIWIK_SITE_ID
in settings/production.py
to get the Piwik code to render in production, and it would not be rendered in the development environment.
Unfortunately, this part of the documentation appears to be incorrect. Failing to set PIWIK_DOMAIN_PATH
or PIWIK_SITE_ID
raises an AnalyticalException, which breaks template rendering in the development environment.
For our project, this necessitated an annoying workaround: we set PIWIK_SITE_ID
to 0 (an invalid value) in settings/development.py
, pass that setting to the template context via a context processor, and conditionally render the Piwik template tag based on the value of PIWIK_SITE_ID
. We can't even set the PIWIK_*
values to None, which would be more explicit and therefore preferable, because of the validation in get_required_setting
.
It would be better for the documented behavior to be implemented, because that would make django-analytical work simply in both production and development environments, and would not require the aforementioned workaround. Another option is to simply correct the documentation, although that would leave the annoying behavior in place and still necessitate a workaround.
Am I missing anything here? Are there best practices for using django-analytical in a development environment that I am unaware of?
Yandex.Metrica is an analytics tool like as google analytics.
@jezdez I just like to let you know that I requested access for the Codacy app on GitHub on probably the entire jazzband organization. What I intended was just for this repository.
Background: I'm about to phase out the Landscape service for monitoring our code quality and use Codacy instead. I'm also replacing the related badge at the top of the README.
I hope that's fine.
I will submit a pull
The tracking code for HubSpot is out of date. It is now async and only requires your Hub/Portal ID (no domain). I'm proposing I update the code and remove the HUBSPOT_DOMAIN
variable.
You can see snippet of the new code at the base of http://knowledge.hubspot.com/getting-started-with-hubspot/how-to-install-the-tracking-code-on-a-generic-website
Any objections to writing a PR for this?
Google Analytics has three styles of tracking:
It would be really nice to enable the last two use-cases.
One domain with multiple subdomains adds this to the single-domain code:
_gaq.push(['_setDomainName', 'example.com']);
_gaq.push(['_setAllowHash', false]);
Multiple top-level domains adds this to the single-domain code:
_gaq.push(['_setDomainName', 'example.com']);
_gaq.push(['_setAllowHash', false]);
_gaq.push(['_setAllowLinker', true
Supporting this would mean adding two more optional settings: tracking style, and domain name.
Hi Joost,
I think I've caught a subtle bug in how get_required_setting
handles SETTING_DELETED
.
As I understand it, when you set a settings key to SETTING_DELETED
via @override_settings
you intended for it to raise an AttributeError
when retrieved via get_required_setting
.
However, instead of raising an AttributeError
in the getattr
call -- as I think you intended it -- it's instead failing the regexp check. This line returns a valid DeletedSettingDescriptor
object that then proceeds to raise AnalyticalException
because it never matches the supplied regexp.
The end result is all the tests that rely on a missing settings key raising an AnalyticalException
pass, but not for the intended reasons.
I played around with the code a bit and think I figured out a way around it. You can see the commits here: edavis/django-analytical@master...setting-deleted
2a1e2d3 is the meat of the fix while the other two are more cosmetic but override_settings
related. Basically, I check if a value is set to SETTING_DELETED
and if it is I delattr
it from self.default_settings
which is where the value appears to come from. All the tests still pass and stepping through it with a debugger shows it raising an AttributeError
as expected in the getattr
call in get_required_setting
.
I'm far from an expert on Django's settings machinery, but I think this should do it. If you're interested, feel free to pull from my setting-deleted branch.
Amplitude would be a nice integration. When I have some spare time I'd like to contribute this.
It's been a while since the last release, and the latest master
crashes with django19 (which is at rc, and will be release in less than a couple of weeks).
Can we get a new release (1.0.1?), that's django19-compatible? :)
Django 2.0 breaks if user.is_authenticated():
(utils.py, line 74), which needs to become if user.is_authenticated:
-- this should also work from Django 1.10 onwards, see: https://docs.djangoproject.com/en/2.0/releases/1.10/#using-user-is-authenticated-and-user-is-anonymous-as-methods
[email protected] is an analytics tool like as google analytics.
In Accelerated Mobile Pages, regular javascript is prohibited. Instead, it provides an amp-analytics
tag with a lot of customizability. Are you planning on supporting this?
https://www.ampproject.org/docs/reference/components/amp-analytics
I want to fetch the top posts on my blog based on monthly views and display them on the sidebar, I am not sure if I can do that using django-analytical, can someone confirm?
Rather useful tool. https://www.inspectlet.com/
I dont have time to write a PR for this myself yet, but I'm sure I'll have to clean up my analytics integrations eventually, and such a PR may be the easiest way to do it. In the mean time I'll just leave this here in case anyone else wants to do it before I get to it.
Hello,
Gone through the docs and understand that by default ANALYTICAL_AUTO_IDENTIFY is set to True . I have already integrated django analytical with my project and it has been working fine.. Lately I tried to check for tracking autheticated users by turning on Enable the User-ID feature in my google analytics. But cant see anything in my new userid view. Anything am i missing??
On sites that have a HTTP content security policy that is not "unsafe-inline", the analytics Javascript fails to execute. One solution would be to let users specify a string in the settings that is inserted into the <script> opening tag.
Hey guys,
any support planned for Google Tags Manager?
I just clicked through the Reinvigorate url at https://github.com/jcassee/django-analytical
It goes to Reinvigorate.com, which is not correct, it should be reinvigorate.net
Cheers,
Ben @ Coordinato.com
Hi, since django 1.5 was just released with preliminary python 3 support, i think it's a good time to discuss what python3 support would mean for this app.
There are pieces of code that simply are impossible to do in a way that is supported from python2.5 up to 3.3 :( e.g. exception handling (http://stackoverflow.com/questions/11285313/try-except-as-error-in-python-2-5-python-3-x)
What are your thoughts about this? Is dropping python < 2.7 support even worth considering?
The fact that Django says it has analytics is good, but as a new user, there is no "this is what this analytics" look like so I am forced to read the code and hope that I understand what each module creates?
Couldn't you take a screenshot of what these python files create so we can see if this is what we are looking for?
Setting template context variables and having them output as Javascript is a good solution for events/properties that are triggered by GET requests. For view-based code it makes things a little harder because the POST-Redirect-GET pattern wipes out the context. In the Mixpanel documentation for django-analytical you recommend using something like the mixpanel-celery project to trigger events from view code. This solves the problem for mixpanel but it leaves the other methods unaddressed. There is a (rather spartan) kissmetrics API project that could be used for that one as well, however I think one of the nice things about django-analytical is that it brings all of these into one place. I think there would be value in trying to standardize the event/property triggering API.
Solutions could include:
tasks.py
file to the project with appropriate import tests so that iff the user has celery installed, they may call to have an event registered with the appropriate service and it will be handled async. These tasks could be written to depend on the 'official api' and therefore require a library or be custom written.For now I am going to be implementing the first option in my code since its the easiest option. Are there enough similarities in the other API's to justify one of the other options?
it's not mentioned in the documentation so I'm guessing that it may not yet have been implemented.
You can read more about event tracking in intercome here:
https://www.intercom.com/help/configure-intercom-for-your-product-or-site/customize-intercom-to-be-about-your-users/set-up-event-tracking-in-intercom
According to Piwik's Best Practice for Integration Plugins we should be adding integration of Piwik dashboards into Django's admin.
NOTE: This is a follow-up enhancement request on issue #35
It would be nice if the debug versions of the Google Analytics code can be enabled with a setting.
Details:
Bandit reports that we have potential security issues with the use of mark_safe.
Affected locations:
This should be reviewed and fixed.
When this is fixed allowing the Bandit check to fail should be undone in the Travis configuration.
I was trying to setup analytics for Walik's demo and it doesn't work with python 3.4.
(waliki)tin@morochita:~/lab/waliki$ pip install django-analytics
Downloading/unpacking django-analytics
Downloading django-analytics-0.0.1.tar.gz
Storing download in cache at /home/tin/.pip_download_cache/https%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fd%2Fdjango-analytics%2Fdjango-analytics-0.0.1.tar.gz
Running setup.py (path:/home/tin/.virtualenvs/waliki/build/django-analytics/setup.py) egg_info for package django-analytics
Downloading/unpacking django-geckoboard>=1.1.0 (from django-analytics)
Downloading django-geckoboard-1.2.8.tar.gz
Storing download in cache at /home/tin/.pip_download_cache/https%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fd%2Fdjango-geckoboard%2Fdjango-geckoboard-1.2.8.tar.gz
Running setup.py (path:/home/tin/.virtualenvs/waliki/build/django-geckoboard/setup.py) egg_info for package django-geckoboard
Installing collected packages: django-analytics, django-geckoboard
Running setup.py install for django-analytics
File "/home/tin/.virtualenvs/waliki/lib/python3.4/site-packages/analytics/maintenance.py", line 60
print _("Scanning %(app)s for metrics...") % {'app': import_app}
^
SyntaxError: invalid syntax
File "/home/tin/.virtualenvs/waliki/lib/python3.4/site-packages/analytics/management/commands/metrics.py", line 103
print _("Metric(s) %(metric)s activated.") % {'metric': kwargs['activate']}
^
SyntaxError: invalid syntax
File "/home/tin/.virtualenvs/waliki/lib/python3.4/site-packages/analytics/geckoboard_views.py", line 25
raise Exception, _("No array called '%(varname)s' in GET variables") % {'varname': var_name}
^
SyntaxError: invalid syntax
File "/home/tin/.virtualenvs/waliki/lib/python3.4/site-packages/analytics/calculator.py", line 40
print _("No data for metric %(metric)s, skipping.") % {'metric': metric.title}
^
SyntaxError: invalid syntax
Running setup.py install for django-geckoboard
File "/home/tin/.virtualenvs/waliki/lib/python3.4/site-packages/django_geckoboard/decorators.py", line 348
raise RuntimeError, "Key %s is required" % key
^
SyntaxError: invalid syntax
Extending the tests to Django 1.10 is more than simply updating tox.ini and .travis.yml: A DjangoTemplates backend needs to be configured. A tox run yields errors for Django 1.10:
django.core.exceptions.ImproperlyConfigured: No DjangoTemplates backend is configured.
Hi there,
I have been trying to get django-analytical up with Clicky on my site this weekend. Finally seem to have got it up after putting the tracking code I got form the Clicky site in the click.py in the templatetags folder (it's substantially different).
Maybe they have changed the tracking code recently?
Anyway - looks awesome. Now all I need to do is work out how to integrate usernames! Any help appreciated.
(This is the first github contribution from a self-taught coder so please be nice!)
UPDATE - still having some problems actually. Have had to comment out the following lines to stop an error, but Clicky appears to be working (though can't seem to see any usernames):
The error was "'RequestContext' object has no attribute 'items'". Sorry I don't have more info!
In the noscript
case, the tracking img is served as HTTP only:
https://github.com/jcassee/django-analytical/blob/master/analytical/templatetags/piwik.py#L37
However, if the site is served through HTTPS, this might trigger security warnings.
As a side note, since this is a templatetag
, this could use request context to detect scheme and not rely on javascript to switch between HTTP and HTTPS.
If this makes sense to you, I'll provide a patch.
My guess is clickmap changed their ID format because mine looks like WVXXXWX5UGKXXX0F16021157XXI3PYX8 and your code seems to have a check in place to only accept a numeric ID
Hi,
Is there a way to use analytical (fo piwik) with a require.js enabled site ?
Thanks !
Do you plan to support Piwik? (Has this been requested before?)
An (elderly) example of JavaScript code used for Piwik is available at e.g. django-piwik-analytics
UserVoice: http://uservoice.com/widget/
Certain customizations would also apply: http://feedback.uservoice.com/knowledgebase/articles/16797-how-do-i-customize-and-install-the-uservoice-feedb
As commented in PR #128, Piwik has been renamed to Matomo in the past. This should also reflect in the name of the related module.
Ideally, we should use a deprecation path, duplicating the modules while the deprecation warning is active.
Intercom is (a web analytics and) support chat solution that seems to be getting popular these days. It looks especially nice on your website. Only the web analytics part is free (as a beer), see the range of their product packages.
The documentation on how to integrate Intercom into a website is available when you attempt to sign up for one of their product packages and from their documentation.
Hey,
Thanks for developing django-analytical I think it's great.
Would really love it to have a Heap Analytics integration (http://heapanalytics.com) as their service is excellent.
Would be happy to try contribute it myself if somebody wouldn't mind checking over my code? (open source noob!)
Cheers
Traceback (most recent call last):
File "build/bdist.macosx-10.8-intel/egg/analytical/tests/utils.py", line 80, in inner
return test_func(_args, *_kwargs)
File "build/bdist.macosx-10.8-intel/egg/analytical/tests/test_tag_clicky.py", line 36, in test_no_site_id
self.assertRaises(AnalyticalException, ClickyNode)
AssertionError: AnalyticalException not raised
Traceback (most recent call last):
File "build/bdist.macosx-10.8-intel/egg/analytical/tests/utils.py", line 80, in inner
return test_func(_args, *_kwargs)
File "build/bdist.macosx-10.8-intel/egg/analytical/tests/test_tag_crazy_egg.py", line 29, in test_no_account_number
self.assertRaises(AnalyticalException, CrazyEggNode)
AssertionError: AnalyticalException not raised
Traceback (most recent call last):
File "build/bdist.macosx-10.8-intel/egg/analytical/tests/utils.py", line 80, in inner
return test_func(_args, *_kwargs)
File "build/bdist.macosx-10.8-intel/egg/analytical/tests/test_tag_google_analytics.py", line 35, in test_no_property_id
self.assertRaises(AnalyticalException, GoogleAnalyticsNode)
AssertionError: AnalyticalException not raised
Ran 191 tests in 0.435s
FAILED (failures=3)
Hi team,
I see that the ga.js, has been replaced by a later library, and that is recommended for new implementations. Would be great if you are able to support that also, perhaps in parallel to the ga.js for some time.
https://developers.google.com/analytics/devguides/collection/gajs/
Thanks for all your good work with djang-analytical,
Andy
Hey guys,
I just realized that there is no way to use the "Ask for consent" feature of Matomo (Piwik). This is relevant because of the new GDPR in europe. I'm about to create a pull request for this one, but I want to hear your opinions on my implementation idea.
I want to introduce a PIWIK_ASK_FOR_CONSENT
variable, like PIWIK_DISABLE_COOKIES
.
To make it easy for the user of the consent functionality to integrate the request for consent, I wrote event listeners which are triggered on click and are attached to DOM elements with the following id's:
piwik_deny_consent
piwik_give_consent
What do you think? Do you see any problems with this kind of implementation?
Reinvigorate.net closed about a year ago, so it should be removed from this project.
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.