chemerisuk / cordova-plugin-firebase-crash Goto Github PK
View Code? Open in Web Editor NEWCordova plugin for Firebase Crashlytics
License: MIT License
Cordova plugin for Firebase Crashlytics
License: MIT License
Is it possible to include a feature where we can force a crash to validate if the plugin works?
https://firebase.google.com/docs/crashlytics/force-a-crash
Does this plugin support Capacitor?
I'm trying to use but I get an error
Failed to apply plugin
[class 'com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsPlugin']
Hi.
I just installed the plugin in my ionic app with @ionic/angular 5.1.1
, cordova-android 8.1.0
and cordova-ios 6.1.0
. I have accessed the Firebase Crashlytics console and seen that the Android app had communicated with Firebase and Crashlytics is working. But the iOS app has not. I think the problem is that Firebase Crashlytics is not initializing properly. In fact, in order for the "Starting Firebase Crashlytics plugin" log to appear in the Xcode console I have to call the plugin's log
method.
I have tried adding this code to the plugin.xml file:
so that the plugin is automatically initialized and in this way it has successfully communicated with the Firebase Crashlytics console. Why is this plugin not initializing automatically?
Please add javascript method to crash and send report (for testing)
For now the plugin is require cordova-android >= 7.1.0. My project cant update to it ( current is 6.2.3 ) cause some thing... can i apply this plugin and inorge the require version ?
I assume this plugin needs both GoogleService-Info.plist
and google-services.json
in the root of your project? Did I miss the documentation for this somewhere? Does the plugin require any dependencies such as cordova-support-google-services
? I've tried installing it by assuming the previously mentioned files need to be in the root of the ionic/cordova project but I'm still not seeing anything on my fabric dashboard.
com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsPlugin could not resolve mapping file provider
Hi, I noticed the the latest published release doesn't contain a couple of very useful commits that were added after the release of v1.5.1.
Are there any plans on creating and publishing a new release?
Greetings, Dennis
I am experiencing an issue with Firebase Crashlytics on iOS. When the app crashes, I expected to see a message and have the ability to filter by user ID to identify the issue. However, I encountered no message or user ID filter option.
This issue is reproducible by following these steps:
Environment:
Logs or Error Messages:
No error
Additional Information:
For testing purposes having access to crashlytic's crash method (Crashlytics.getInstance().crash(); on Android, [[Crashlytics sharedInstance] crash]; for iOS) (look: https://firebase.google.com/docs/crashlytics/force-a-crash) would help testing the Crashlytic integration.
When I try to call the logError method the following stacktrace will be thrown:
2019-05-03 16:43:15.694 6898-6898/? E/ReflectiveCordovaPlugin: Uncaught exception at #logError
java.lang.IllegalStateException: Must Initialize Fabric before using singleton()
at io.fabric.sdk.android.Fabric.singleton(Fabric.java:301)
at io.fabric.sdk.android.Fabric.getKit(Fabric.java:551)
at com.crashlytics.android.Crashlytics.getInstance(Crashlytics.java:191)
at com.crashlytics.android.Crashlytics.checkInitialized(Crashlytics.java:390)
at com.crashlytics.android.Crashlytics.logException(Crashlytics.java:210)
at by.chemerisuk.cordova.firebase.FirebaseCrashPlugin.logError(FirebaseCrashPlugin.java:24)
at java.lang.reflect.Method.invoke(Native Method)
at by.chemerisuk.cordova.support.ReflectiveCordovaPlugin$1.run(ReflectiveCordovaPlugin.java:56)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
I tried to log in debug mode and in release mode but neither is working.
Furthermore I like to ask the question if crashes in debug mode will be logged?
There's an issue with the pod spec, it displays the following warning:
Installing "cordova-plugin-firebase-crash" for ios
"framework" tag with type "podspec" is deprecated and will be removed.
Please use the "podspec" tag.
Thoughts?
tkx
Closed
hi
With cordova 5.4.1 I add google-services.json instal the plug-in cordova plugin "cordova-plugin-firebase-crash --save" , but then "window.cordova.plugins.firebase.crash.report("BOOM!");" no message on firebase crash console.
I try to put a LOG into FirebaseCrashPlugin.java report method but into logcat I don't see any log message , into logcat I see /PluginManager(13753): exec() call to unknown plugin: FirebaseCrashPlugin .
Then I add callbacks into javascritp report method
window.cordova.plugins.firebase.crash.report("HI",
function(message){
alert(message);
}, function(a){
alert('error:'+a);
});
and error callback say error: class not found.
could you helpme ?
Run the following script as an after_prepare
or after_plugin_install
build hook:
const xcode = require('xcode')
const path = require('path')
const fs = require('fs')
// To run in node repl:
// const f = require('./build/ios/addCrashlyticsBuildPhase')
// f()
module.exports = function (context) {
const projectRoot = context ? context.opts.projectRoot : path.resolve(__dirname, '../../')
const projectDir = path.resolve(projectRoot, './platforms/ios')
const dirContent = fs.readdirSync(projectDir)
const matchingProjectFiles = dirContent.filter(filePath => /.*\.xcodeproj/gi.test(filePath) )
const projectPath = projectDir + '/' + matchingProjectFiles[0] + '/project.pbxproj'
const project = xcode.project(projectPath)
project.parse(error => {
if (error) console.error('failed to parse project', error)
const options = {
shellPath: '/bin/sh',
shellScript: '${PODS_ROOT}/Fabric/run',
inputPaths: ['"$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)"']
}
const comment = 'Initialize Crashlytics'
// Only add if not already there yet
const hasBuildPhase = !!project.getFirstTarget().firstTarget.buildPhases.find(buildPhase => buildPhase.comment === comment)
if (!hasBuildPhase) {
project.addBuildPhase(
[],
'PBXShellScriptBuildPhase',
comment,
project.getFirstTarget().uuid,
options)
fs.writeFileSync(projectPath, project.writeSync())
}
})
}
Hello, I have been using the plugin for a month or two now and it has been great!
Just this week I ran into an strange error, when creating an archive with XCode. The project still builds fine.
XCode gives the following error:
PhaseScriptExecution [CP]\ Embed\ Pods\ Frameworks /Users/himmelattack/Library/Developer/Xcode/DerivedData/CRISPR_Crunch-ggemguvemsossmfkywknjigwzbdv/Build/Intermediates.noindex/ArchiveIntermediates/CRISPR\ Crunch/IntermediateBuildFilesPath/CRISPR\ Crunch.build/Release-iphoneos/CRISPR\ Crunch.build/Script-FF6907187E777743164AB6FA.sh (in target 'CRISPR Crunch' from project 'CRISPR Crunch')
cd /Users/himmelattack/projects/play-curious/crispr-crunch-cordova/platforms/ios
/bin/sh -c /Users/himmelattack/Library/Developer/Xcode/DerivedData/CRISPR_Crunch-ggemguvemsossmfkywknjigwzbdv/Build/Intermediates.noindex/ArchiveIntermediates/CRISPR\\\ Crunch/IntermediateBuildFilesPath/CRISPR\\\ Crunch.build/Release-iphoneos/CRISPR\\\ Crunch.build/Script-FF6907187E777743164AB6FA.sh
mkdir -p /Users/himmelattack/Library/Developer/Xcode/DerivedData/CRISPR_Crunch-ggemguvemsossmfkywknjigwzbdv/Build/Intermediates.noindex/ArchiveIntermediates/CRISPR Crunch/BuildProductsPath/Release-iphoneos/CRISPR Crunch.app/Frameworks
Symlinked...
rsync --delete -av --filter P .*.?????? --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/FirebaseCore.framework" "/Users/himmelattack/Library/Developer/Xcode/DerivedData/CRISPR_Crunch-ggemguvemsossmfkywknjigwzbdv/Build/Intermediates.noindex/ArchiveIntermediates/CRISPR Crunch/InstallationBuildProductsLocation/Applications/CRISPR Crunch.app/Frameworks"
building file list ... rsync: link_stat "/Users/himmelattack/projects/play-curious/crispr-crunch-cordova/platforms/ios/../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/FirebaseCore.framework" failed: No such file or directory (2)
done
sent 29 bytes received 20 bytes 98.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/97f6331a-ba75-11ed-a4bc-863efbbaf80d/Library/Caches/com.apple.xbs/Sources/rsync/rsync/main.c(996) [sender=2.6.9]
Command PhaseScriptExecution failed with a nonzero exit code
Do I need to do a separate installation of Firebase or something like that?
Thanks!
I'm trying to upgrade to cordova-android 10, and I started getting this error while building:
Crashlytics could not find Google Services plugin task: processReleaseGoogleServices. Make sure com.google.gms.google-services is applied BEFORE com.google.firebase.crashlytics. If you are not using the Google Services plugin, you must explicitly declare googleServicesResourceRoot
inputs for Crashlytics upload tasks.
Here are the cordova plugins, with versions, that I'm using:
com.googlemaps.ios 3.9.0 "Google Maps SDK for iOS"
cordova-android-play-services-gradle-release 4.0.0 "cordova-android-play-services-gradle-release"
cordova-androidx-build 1.0.4 "cordova-androidx-build"
cordova-plugin-app-version 0.1.9 "AppVersion"
cordova-plugin-device 2.0.2 "Device"
cordova-plugin-firebase-analytics 6.1.0 "FirebaseAnalyticsPlugin"
cordova-plugin-firebase-crash 4.1.2 "cordova-plugin-firebase-crash"
cordova-plugin-googlemaps 2.8.0-20200709-2008 "cordova-plugin-googlemaps"
cordova-plugin-idfa 2.0.0 "cordova-plugin-idfa"
cordova-plugin-inappbrowser 4.1.0 "InAppBrowser"
cordova-plugin-ionic-keyboard 2.2.0 "cordova-plugin-ionic-keyboard"
cordova-plugin-ionic-webview 4.2.1 "cordova-plugin-ionic-webview"
cordova-plugin-localization-strings 3.2.1 "Localization"
cordova-plugin-network-information 2.0.2 "Network Information"
cordova-plugin-request-location-accuracy 2.3.0 "Request Location Accuracy"
cordova-plugin-screen-orientation 3.0.2 "Screen Orientation"
cordova-plugin-splashscreen 5.0.2 "Splashscreen"
cordova-plugin-statusbar 2.4.2 "StatusBar"
cordova-sqlite-storage 5.1.0 "Cordova sqlite storage plugin - cordova-sqlite-storage plugin version"
cordova-support-android-plugin 1.0.2 "cordova-support-android-plugin"
es6-promise-plugin 4.2.2 "Promise"
Here's a SO post where it looks like the answer is to fix the ordering gradle plugins are applied:
https://stackoverflow.com/questions/63828003/task-appuploadcrashlyticsmappingfilerelease-failed-expected-file-collection-to
Please let me know if there's any other information that would be helpful for this.
Using the latest version of this plugin v2.0.1 (although, not tried this with a plain Cordova app).
As soon as I'm launching the app, an exception is being thrown:
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: Settings request failed.
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: java.io.InterruptedIOException: timeout
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at okhttp3.RealCall.timeoutExit(RealCall.java:107)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at okhttp3.RealCall.execute(RealCall.java:96)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at com.google.firebase.crashlytics.internal.network.HttpRequest.execute(com.google.firebase:firebase-crashlytics@@17.0.0-beta02:129)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at com.google.firebase.crashlytics.internal.settings.network.DefaultSettingsSpiCall.invoke(com.google.firebase:firebase-crashlytics@@17.0.0-beta02:86)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at com.google.firebase.crashlytics.internal.settings.SettingsController$1.then(com.google.firebase:firebase-crashlytics@@17.0.0-beta02:200)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at com.google.firebase.crashlytics.internal.settings.SettingsController$1.then(com.google.firebase:firebase-crashlytics@@17.0.0-beta02:193)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at com.google.android.gms.tasks.zzp.run(Unknown Source:2)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at com.google.firebase.crashlytics.internal.common.ExecutorUtils$1$1.onRun(com.google.firebase:firebase-crashlytics@@17.0.0-beta02:60)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at com.google.firebase.crashlytics.internal.common.BackgroundPriorityRunnable.run(com.google.firebase:firebase-crashlytics@@17.0.0-beta02:27)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at java.lang.Thread.run(Thread.java:764)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: Caused by: java.io.IOException: Canceled
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:254)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: at okhttp3.RealCall.execute(RealCall.java:92)
03-25 14:33:44.346 18825 18922 E FirebaseCrashlytics: ... 10 more
I checked the release notes, I found that v17.0.0-beta02
was release recently so tried with that as well:
cordova plugin add cordova-plugin-firebase-crash --variable FIREBASE_CRASHLYTICS_VERSION=17.0.0-beta02
Any idea?
I'm using other Firebase plugins:
"cordova-plugin-firebase-analytics": "^4.1.2",
"cordova-plugin-firebase-crash": "^2.0.1",
"cordova-plugin-firebase-dynamiclinks": "^4.2.0",
"cordova-plugin-firebase-inappmessaging": "^3.1.0",
"cordova-plugin-firebase-messaging": "^4.1.1",
I added the cordova-plugin-firebase-crash plugin and also placed google-services.json file in the root as well as project folder.
Then built the app but nothing shows in my firebase console.
Can you please confirm me the basic steps to adding the crash reporting to my app, i did like this:
Added a proejct in Firebase console
Added an app with the id i have in my config.xml
Added the cordova-plugin-firebase-crash Plugin
Downloaded the google-services.json file after setting up for android in firebase console and placed in all likely locations
Built for android
See nothing in console
Firebase Crashlytics now supports NDK crashes:
Hello, I have been using the plugin for a month or two now and it has been great!
Just this week I ran into an strange error, when creating an archive with XCode. The project still builds fine.
XCode gives the following error:
PhaseScriptExecution [CP]\ Embed\ Pods\ Frameworks /Users/himmelattack/Library/Developer/Xcode/DerivedData/CRISPR_Crunch-ggemguvemsossmfkywknjigwzbdv/Build/Intermediates.noindex/ArchiveIntermediates/CRISPR\ Crunch/IntermediateBuildFilesPath/CRISPR\ Crunch.build/Release-iphoneos/CRISPR\ Crunch.build/Script-FF6907187E777743164AB6FA.sh (in target 'CRISPR Crunch' from project 'CRISPR Crunch')
cd /Users/himmelattack/projects/play-curious/crispr-crunch-cordova/platforms/ios
/bin/sh -c /Users/himmelattack/Library/Developer/Xcode/DerivedData/CRISPR_Crunch-ggemguvemsossmfkywknjigwzbdv/Build/Intermediates.noindex/ArchiveIntermediates/CRISPR\\\ Crunch/IntermediateBuildFilesPath/CRISPR\\\ Crunch.build/Release-iphoneos/CRISPR\\\ Crunch.build/Script-FF6907187E777743164AB6FA.sh
mkdir -p /Users/himmelattack/Library/Developer/Xcode/DerivedData/CRISPR_Crunch-ggemguvemsossmfkywknjigwzbdv/Build/Intermediates.noindex/ArchiveIntermediates/CRISPR Crunch/BuildProductsPath/Release-iphoneos/CRISPR Crunch.app/Frameworks
Symlinked...
rsync --delete -av --filter P .*.?????? --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/FirebaseCore.framework" "/Users/himmelattack/Library/Developer/Xcode/DerivedData/CRISPR_Crunch-ggemguvemsossmfkywknjigwzbdv/Build/Intermediates.noindex/ArchiveIntermediates/CRISPR Crunch/InstallationBuildProductsLocation/Applications/CRISPR Crunch.app/Frameworks"
building file list ... rsync: link_stat "/Users/himmelattack/projects/play-curious/crispr-crunch-cordova/platforms/ios/../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/FirebaseCore.framework" failed: No such file or directory (2)
done
sent 29 bytes received 20 bytes 98.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/97f6331a-ba75-11ed-a4bc-863efbbaf80d/Library/Caches/com.apple.xbs/Sources/rsync/rsync/main.c(996) [sender=2.6.9]
Command PhaseScriptExecution failed with a nonzero exit code
Do I need to do a separate installation of Firebase or something like that?
Thanks!
Not Supporting on Windows ?
Please add methods for setting custom keys. This is useful to add key value pairs.
Here is the docs.
Where:
Script 'C:\app\guiafloripa\guia\platforms\android\cordova-support-google-services\CityWatch-build.gradle' line: 16
What went wrong:
A problem occurred evaluating root project 'android'.
Failed to apply plugin [class 'com.google.gms.googleservices.GoogleServicesPlugin']
For input string: "+"
Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
Error: cmd: Command failed with exit code 1 Error output:
FAILURE: Build failed with an exception.
Where:
Script 'C:\app\guiafloripa\guia\platforms\android\cordova-support-google-services\CityWatch-build.gradle' line: 16
What went wrong:
A problem occurred evaluating root project 'android'.
Failed to apply plugin [class 'com.google.gms.googleservices.GoogleServicesPlugin']
For input string: "+"
Ionic 5 using @ionic-native/firebase-crash
Android 9+ SDK v29
`
Crashlytics was applied to an android-library project.
Android-library support is currently an incubating feature.
Contact us at https://firebase.google.com/support/troubleshooter/contact with any issues.
FAILURE: Build failed with an exception.
Where:
Script '..../node_modules/cordova-plugin-firebase-crash/src/android/build.gradle' line: 13
What went wrong:
A problem occurred evaluating script.
Failed to apply plugin [class 'com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsPlugin']
Applying the Firebase Crashlytics plugin to a library project is unsupported. It should only be applied to the application module of your project to enable automatic upload of obfuscation mapping files for your application.
Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output. Run with --scan to get full insights.
Get more help at https://help.gradle.org
BUILD FAILED in 435ms
`
The error message "Upload 1 missing dSYMs required to process 1 crash" is showing the firebase console. The crash count is zero in the event trends, but can see crash count in the latest release page.
I have checked all UUIDs in my system using the command below.
mdfind -name .dSYM | while read -r line; do dwarfdump -u "$line"; done
But the UUID showing in the missing dSYMs table is not in the list produced by the above command. How can I solve this issue?
Does this plugin automatically upload the dSYMs to firebase during build process in CI/CD pipeline? Do I need to set extra task to upload dSYMs to firebase?
cordova-plugin-firebase-crash requires pod: Firebase/Crash
Checking cordova-plugin-firebase-hooks for pods.
Checking cordova-plugin-ios-no-export-compliance for pods.
Error: Invalid character in entity name
Line: 8
Column: 54
Char:
the plugin failed to install with Cordova-IOS 7.0.0.
it is failing on the after_plugin_install.js because "path" is undefined.
Without calling it's window.cordova.plugins.firebase.crash.report
api?
Hi i'm trying to use this plugin, previously installed cordova-support-google-services plugin.
google-services.json is located in the project root folder, and there is a line in config.xml:
<platform name="android"> <resource-file src="google-services.json" target="app/google-services.json" /> </platform>
And when i'm tryign to logError i'm getting the error in logs:
10-21 22:44:18.512: E/ReflectiveCordovaPlugin(6034): Uncaught exception at #logError
10-21 22:44:18.512: E/ReflectiveCordovaPlugin(6034): java.lang.IllegalStateException: Must Initialize Fabric before using singleton()
I also use cordova-plugin-firebase-analytics and it works fine...
What i'm doing wrong? I use 1.5.1 released version of crashlytics plugin.
Hello,
I intend to use this plugin to report crashes in production to firebase console and wanted to know if it is possible to use the performance monitoring too https://firebase.google.com/docs/perf-mon or is it done automatically.
Thank you in advance,
It seems that jcenter has now shut down completly (https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/)
Is it possible to remove it from the repositories list?
How do I install this plugin in parallel to https://github.com/chemerisuk/cordova-plugin-firebase-messaging ?
I get errors that the analytics plugin already exists and the CLI tries to installs it again.
Failed to install 'cordova-plugin-firebase-crash': CordovaError: Uh oh!
"/Users/me/Documents/development/mobile-app/platforms/ios/dummy/Plugins/cordova-plugin-firebase-analytics/FirebaseAnalyticsPlugin.m" already exists!
Hi
I have use this plugin in cordova/ionic application in IOS platform but it's not working
give error like
ERROR: Plugin 'FirebaseCrashPlugin' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
[CDVCommandQueue executePending] [Line 142] FAILED pluginJSON = ["INVALID","FirebaseCrashPlugin","report",["BOOM!"]]
if any one have solution for that then comment.
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.