Code Monkey home page Code Monkey logo

countly-sdk-react-native-bridge's Introduction

Codacy Badge

Countly React Native Bridge SDK

This repository contains the Countly React Native Bridge SDK, which can be integrated into React Native mobile applications. The Countly React Native Bridge SDK is intended to be used with Countly Lite or Countly Enterprise.

What is Countly?

Countly is a product analytics solution and innovation enabler that helps teams track product performance and customer journey and behavior across mobile, web, and desktop applications. Ensuring privacy by design, Countly allows you to innovate and enhance your products to provide personalized and customized customer experiences, and meet key business and revenue goals.

Track, measure, and take action - all without leaving Countly.

Integrating Countly SDK in your projects

For a detailed description on how to use this SDK check out our documentation.

For information about how to add the SDK to your project, please check this section of the documentation.

You can find minimal SDK integration information for your project in this section of the documentation.

For an example integration of this SDK, you can have a look here.

This SDK supports the following features:

Acknowledgements

From 2014 to 2020 it was maintained by Trinisoft Technologies developers ([email protected]).

Security

Security is very important to us. If you discover any issue regarding security, please disclose the information responsibly by sending an email to [email protected] and not by creating a GitHub issue.

Badges

If you like Countly, why not use one of our badges and give a link back to us so others know about this wonderful platform?

Countly - Product Analytics

<a href="https://count.ly/f/badge" rel="nofollow"><img style="width:145px;height:60px" src="https://count.ly/badges/dark.svg" alt="Countly - Product Analytics" /></a>

Countly - Product Analytics

<a href="https://count.ly/f/badge" rel="nofollow"><img style="width:145px;height:60px" src="https://count.ly/badges/light.svg" alt="Countly - Product Analytics" /></a>

How can I help you with your efforts?

Glad you asked! For community support, feature requests, and engaging with the Countly Community, please join us at our Discord Server. We're excited to have you there!

Also, we are on Twitter and LinkedIn if you would like to keep up with Countly related updates.

countly-sdk-react-native-bridge's People

Contributors

arifburakdemiray avatar arturskadikis avatar dependabot-preview[bot] avatar dklymenk avatar gorkem-cetin avatar i1skn avatar ijunaid avatar mikhailkorotkov-tomtom avatar nicolsondsouza avatar osoner avatar pembeci avatar peterbrxwn avatar trinisofttechnologies avatar turtledreams avatar zakharchenkoandrii avatar

Stargazers

 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

countly-sdk-react-native-bridge's Issues

setupPush is not a function

I am setting push notification using countly on react native and on android i am facing this error

Screenshot_1574775182

I followed the guide provided in the guide here

I further goes to the library code and i can see that there is no setupPush function is available in the library

thanks

module doesn't implement `requiresMainQueueSetup`

I got the message when running my app:

Module CountlyReactNative requires main queue setup since it overrides `init` but doesn't implement `requiresMainQueueSetup`. In a future release React Native will default to initializing all native modules on a background thread unless explicitly opted-out of.

I can ignore it for now but it will be a bug in the next version of RN in the future.

ReferenceError: Property 'eventEmitter' doesn't exist (new Countly.feedback interface)

Hello,

I wanted to remove deprecated code after SDK upgrade (23.8.0) in my app, but looks like the new Feedback interface is causing some issues.

I switched Countly.presentFeedbackWidgetObject to Countly.feedback.presentFeedbackWidget and now I get an error:

ReferenceError: Property 'eventEmitter' doesn't exist

Looks like widgetShownCallback and widgetClosedCallback are not handled properly.

Checked on Android and iOS.
react: 18.2.0
react-native: 0.71.7
countly-sdk-react-native-bridge: 23.8.0
Countly server: enterprise 23.06.6

Foreground Push Notifications (Android)

In an Expo project I am working on, foreground Push Notifications are "hijacked" by countly-sdk-react-native-bridge on Android. After removing countly-sdk-react-native-bridge, foreground Push Notifications on Android work as expected.

We only want to use certain parts of Countly, but not Push Notifications. I did not find any option to disable Push Notifications from within the countly-sdk-react-native-bridge package.? I tried to disable it by patching the module itself but it seems the initialization is done in the Countly Android SDK.

It would be nice to be able to opt-in to the Countly Push Notifications service.

Breaking change w/ handling user login / logout

Presently the bridge does not expose the userLoggedIn and userLoggedOut methods of the iOS SDK. Thus, we have been duplicating the iOS SDK implementation of the userLoggedOut convenience method as follows:

Countly.changeDeviceId(null, false);

Recently, the iOS SDK changed their implementation to:

- (void)userLoggedOut
 {
    [self setNewDeviceID:CLYDefaultDeviceID onServer:NO];
 }

This resulted in an undocumented breaking change. To avoid similar issues in the future, it may be wise to wrap the userLoggedIn and userLoggedOut in the bridge as well as expose the CLYDefaultDeviceID constant.

Additionally, user login and logout are not addressed in the bridge documentation.

Thanks.

Changing iOS device IDs on the server with the React Native Bridge SDK is not working.

Passing true to Countly.changeDeviceId() for onServer has no effect on iOS. After looking at the Objective-C code, the problem may be caused by line 171 in ios/src/CountlyReactNative.m within the changeDeviceId method...

RCT_EXPORT_METHOD(changeDeviceId:(NSArray*)arguments)
{
  NSString* newDeviceID = [arguments objectAtIndex:0];
  NSString* onServerString = [arguments objectAtIndex:0];
  if ([onServerString  isEqual: @"1"]) {
    [Countly.sharedInstance setNewDeviceID:newDeviceID onServer: YES];
  }else{
    [Countly.sharedInstance setNewDeviceID:newDeviceID onServer: NO];
  }
}

onServerString should be pulled from index 1, not index 0...

NSString* onServerString = [arguments objectAtIndex:1];

Message from Google Play: Your app is vulnerable to Intent Redirection

I submitted my app update to Google Play and received a message that my app is vulnerable to Intent Redirection. I'm still waiting on additional details from the Google Play Developer Support team, but the only change to my app was the addition of Countly analytics.

I followed the setup instructions here: React Native Bridge

Countly version: 20.4.7

I don't know much about this vulnerability, but I'm happy to provide any additional information to help debug the issue.

Infinite loop with 301 redirect

Noticed this while using Flipper while developing.

The countly server url we were using had a redirect. In this case it was a http to https redirection.

image

The sequence above was being logged once every few miliseconds resulting in an infinite loop. This completely kills the app's performance and I suspect results in high battery usage.

We're using 20.4.9. We'll update to the latest version and report if the problem still exists.

[Android] - RemoteConfig is not working

Hi there ๐Ÿ‘‹

After updating countly-sdk-react-native-bridge to (latest) 23.6.0 remoteConfig fetching stopped to work for Android only.

(server version is "23.06.13")

After getting the key either by

Countly.getRemoteConfigValueForKey("KeyName", function(data){
console.log(data);
});

or

var data = await Countly.getRemoteConfigValueForKeyP("KeyName");

I am receiving the value that looks like internal access key for the value: ly.count.android.sdk.RCData@<someGeneratedId>

Android build crash after updating from 23.02.0 to 23.2.3

Execution failed for task ':app:checkDevDebugDuplicateClasses'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
   > Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)
     Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)
     Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations$ReflectSdkVersion found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20)
     Duplicate class kotlin.internal.jdk8.JDK8PlatformImplementations found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)
     Duplicate class kotlin.internal.jdk8.JDK8PlatformImplementations$ReflectSdkVersion found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk

ReferenceError: setUserData is not defined

After upgrading to the latest sdk-version (20.11.13), we get the following error when calling serUserData :

ExceptionsManager.js:179 Unhandled promise rejection ReferenceError: setUserData is not defined
    at _callee13$ (Countly.js:520:32)
    at tryCatch (runtime.js:63:40)
    at Generator.invoke [as _invoke] (runtime.js:293:22)
    at Generator.next (runtime.js:118:21)
    at tryCatch (runtime.js:63:40)
    at invoke (runtime.js:154:20)
    at runtime.js:189:11
    at new Promise (es6.promise.js:177:7)
    at callInvokeWithMethodAndArg (runtime.js:188:16)
    at AsyncIterator.enqueue [as _invoke] (runtime.js:211:13)

As a result, no user properties are sent to Countly. Presumably the problem was introduced with the changes in version 20.11.12?

Attempt to invoke virtual method 'android.app.Application android.app.Activity.getApplication()' on a null object reference

Hi.

I have this error in Crashlytics, and some users are reporting that the app is crashing.
It happens sometimes, on various versions of Android (7, 8, 9...)

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.Application android.app.Activity.getApplication()' on a null object reference
       at ly.count.android.sdk.react.CountlyReactNative.init(CountlyReactNative.java:123)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
       at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:151)
       at com.facebook.react.bridge.queue.NativeRunnable.run(NativeRunnable.java)
       at android.os.Handler.handleCallback(Handler.java:873)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
       at android.os.Looper.loop(Looper.java:193)
       at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:226)
       at java.lang.Thread.run(Thread.java:764)

I tried Pokemon programming but it doesn't help (see the code).

try {

  Countly.init(COUNTLY_SERVER_URL, COUNTLY_APP_KEY, deviceId)
    .then(() => {
      Countly.start();
    })
    .catch(e => console.log(e));

} catch (e) {
  console.log(e)
}

Zero interaction with development build / Typescript types

I'm using development build and when I tried to integrate this package I had to see that nothing happened. I couldn't see any active users, or send events either.

The other problem that I had, that there are no typescript type declarations. This also made my debugging hours longer, cause I had to find everything in the installed package.

NullPointerException when using disableLocation on Android

Here is part of the stacktrace:

NullPointerException: Attempt to invoke virtual method 'void ly.count.android.sdk.ModuleLocation$Location.disableLocation()' on a null object reference
    at ly.count.android.sdk.Countly.disableLocation(Countly.java:1125)
    at ly.count.android.sdk.react.CountlyReactNative.disableLocation(CountlyReactNative.java:324)
    at java.lang.reflect.Method.invoke(Method.java)
    at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
    at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:151)
...
(7 additional frame(s) were not displayed)

When I remove Countly.disableLocation(); it works on Android. I don't have any problems on iOS.

I am using version 20.11.5.

Malformed GET requests sent to the API?

After upgrading to 20.4.9, our Countly server no longer receives data from our app. Looking at the iOS console, if appears that malformed GET requests are being generated, resulting in a server error of "App does not exist":

13:27:56.481122-0500	My CEP Beta		default	My CEP Beta	[Countly] Request <0x60000b399120> started:
[GET] https://countly.ipat.gatech.edu/i?app_key=APP_KEY_REDACTED202320My<decode: mismatch for [%20C] got [OBJECT private sz:520]>EP20Beta20key&device_id=0033F00000RSFI2QAP&timestamp=1604094249254&hour=17&dow=5&tz=-240&sdk_version=20.04.9&sdk_name=js-rnb-ios&begin_session=1&metrics=7B22_device22<decode: missing data><decode: missing data>86_6422<decode: missing data>22_os_version22<decode: missing data>2214.122<decode: missing data>22_locale22<decode: missing data><decode: missing data>n_US22<decode: missing data>22_density22<decode: missing data>22<decode: missing data>22<decode: missing data>22_app_version22<decode: missing data>220.9.022<decode: missing data>22_resolution22<decode: missing data><decode: missing data>216022<decode: missing data>22_os22<decode: missing data><decode: missing data>OS22<decode: missing data>
13:27:56.551418-0500	My CEP Beta		default	My CEP Beta	[Countly] Request <0x60000b399120> failed!
Server reply: {"result":"App does not exist"}

Also: Since we need to get a new version of our app out ASAP, what version of the bridge would you consider stable and recommend? Thanks!

Build error: Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported`

Getting this error after making the necessary adjustments to a project to use RN 0.67:

node_modules/countly-sdk-react-native-bridge/android/src/main/AndroidManifest.xml Error:
        Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.

FAILURE: Build failed with an exception.

Unclear param type for `configureIntentRedirectionCheck`

your doc comment says:

   /**
    * Method to configure intent redirection check
    *
    * @param {String} allowedIntentClassNames allowedIntentClassNames
    * @param {String} allowedIntentPackageNames allowedIntentPackageNames
    */
    configureIntentRedirectionCheck(allowedIntentClassNames, allowedIntentPackageNames) {
        this.allowedIntentClassNames = allowedIntentClassNames;
        this.allowedIntentPackageNames = allowedIntentPackageNames;
        return this;
    }

previously allowedIntentClassNames, allowedIntentPackageNames were String[] type. Now you say that it is just String
however naming is still plural allowedIntentClassNameS.

I could create PR and change either type to array of Strings or change naming to be singular but I don't know what was your intention during this refactoring.

Also, what happened with useAdditionalIntentRedirectionChecks param? is it gone and will be by default true always?

podspec version needs to be updated when native code changes

The version given in the CountlyReactNative.podspec file hasn't been updated as there have been changes to the iOS native module. Thus, when we try to build different branches of our app using different versions of the Countly SDK, the pod install step does not necessarily install the correct version of CountlyReactNative. E.g. 20.4.4 and 20.4.9 both version CountlyReactNative as 20.4. Install 20.4.4 and then 20.4.9-- the latter will then be using the wrong CountlyReactNative module.

Not able to send any info to server using sdk

I tried the example provided, but not able to send any info to the Countly server. Here are my steps:

  1. I followed the instruction here:
    https://github.com/Countly/countly-sdk-react-native-bridge/tree/master/example

  2. I replaced the server url and app_key with the correct values.

  3. I am running ios

I am pretty sure my Countly server is set up correctly, because I am able to use the REST API to send the info. I use Postman.
Could you please take a look?
Please let me know what other info I need to provide.

The app crashes and exits on startup after calling Countly.init(), ios emulator, RN 0.62

`
import Countly from 'countly-sdk-react-native-bridge';

import { REACT_APP_COUNTLY_URL, REACT_APP_COUNTLY_APP_KEY } from 'react-native-dotenv';

console.log({ REACT_APP_COUNTLY_URL, REACT_APP_COUNTLY_APP_KEY });

// initialize
var deviceId = null; // or use some string that identifies current app user
Countly.init(REACT_APP_COUNTLY_URL, REACT_APP_COUNTLY_APP_KEY, deviceId);

// configure other Countly parameters if needed
Countly.enableLogging();

// start session tracking
Countly.start();
`

Error: Permission is only granted to system apps

Error: Permission is only granted to system apps [ProtectedPermissions]
      <uses-permission android:name="android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS" android:maxSdkVersion="30" />
                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
     Explanation for issues of type "ProtectedPermissions":
     Permissions with the protection level signature, privileged or
     signatureOrSystem are only granted to system apps. If an app is a regular
     non-system app, it will never be able to use these permissions.

When I try to get build on android, I get an error like this.

"react": "18.2.0",
"react-native": "0.72.3",

Error: FeedbackWidget id should not be null or empty (new Countly.feedback interface)

Hello,

I wanted to remove deprecated code after SDK upgrade (23.8.0) in my app, but looks like the new Feedback interface is causing some issues.

I switched Countly.presentFeedbackWidget to Countly.feedback.presentFeedbackWidget and now I get an error:

[CountlyReactNative] presentFeedbackWidget, FeedbackWidget id should not be null or empty

By passing id and type in the exact same way (as string) I can see the deprecated method works fine, but the new one throws the error. It also doesn't matter if it's a survey or nps type.

Checked on Android and iOS.
react: 18.2.0
react-native: 0.71.7
countly-sdk-react-native-bridge: 23.8.0
Countly server: enterprise 23.06.6

Make normalized versioning

Can you please do no use leading zeros in version?
Because all users would get this as output of npm outdated command:
image

Breaks other push notifications libraries

I've been troubleshooting a problem with react-native-notifications behaving erratically and tracked it down to a conflict with countly-sdk-react-native-bridge

The problem seems to be related to:

BOOL enablePushNotifications = true;

if(enablePushNotifications) {
[self addCountlyFeature:CLYPushNotifications];
}

The above lines seem to be ran on startup, without any way to prevent the hijack from ocurring.

I originally tried using COUNTLY_EXCLUDE_PUSHNOTIFICATIONS (as per Countly/countly-sdk-ios@2b89dc1) but enabling it resulted in compilation errors inside CountlyReactNative.m because the implementation was missing.

Even providing COUNTLY_EXCLUDE_PUSHNOTIFICATIONS is a bit unintuitive:

  post_install do |installer|
    installer.pods_project.targets.each do |target|
      if target.name == "CountlyReactNative"
        target.build_configurations.each do |config|
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'COUNTLY_EXCLUDE_PUSHNOTIFICATIONS=1']
        end
      end
    end

    react_native_post_install(installer)
  end

Original report in:
wix/react-native-notifications#561 (comment)

iOS - String sent via setEventSendThreshold not converted to Unsigned Int

at

https://github.com/Countly/countly-sdk-react-native-bridge/blob/master/ios/src/CountlyReactNative.m#L586

RCT_EXPORT_METHOD(setEventSendThreshold:(NSArray*)arguments)
{
  NSString* size = [arguments objectAtIndex:0];
  if (config == nil){
    config = CountlyConfig.new;
  }
  config.eventSendThreshold = size;
}

config.eventSendThreshold is expecting a NSUInteger, not a string

calling Countly.setEventSendThreshold(1); from react-native appears to make no difference

(not sure if this is also a potential area to investigate in Java / Android)

Can you add a way to turn off push notification app delegate methods swizzling, please?

We can't quite use Firebase for push notifications on iOS because Countly swizzles push notification methods after the Firebase setup. We'd like to turn off push notifications for the Countly SDK from the react native side.

It is turned on in CountlyReactNative.m:62 and there is no way to avoid swizzling. Can we make it configurable? Or at least maybe there is a way to avoid swizzling?

[iOS] push notifications are not received on 23.x.x version

Countly.pushTokenType method has been deprecated
in favor of CountlyConfig.pushTokenType

The method from CountlyConfig is not working on iOS while the deprecated one from Countly.js works fine.
I am receiving the following error:

image

From our side, we are setting this method right and values are set correctly.
{...other fields
"channelDescription": "", "channelName": "Our Channel name", "consents": ["users", "remote-config", "apm", "events", "location", "sessions", "views", "push"], "deviceID": "my device ID", "enableApm": true, "tokenType": "1"}

Notes:
We call Countly.askForNotificationPermission() after initialization with config so our steps are correct as previous implementation worked fine (on 22.6.5) + Android works fine even with setting pushTokenType via config

TypeScript types

This library should provide its own typescript types for ease of use by developers.

Ideally, the JS part of the library would be written in TypeScript to get these by default.

We're currently adding them one at a time to our own typings file, but an official solution would be much better.

interface EventData {
  eventName: string;
  eventCount: number;
  eventSum?: string;
  segments?: {};
}

declare module 'countly-sdk-react-native-bridge' {
  export function init(
    serverURL: string,
    appKey: string,
    deviceId: string | null,
  ): void;
  export function enableLogging(): void;
  export function enableParameterTamperingProtection(salt: string): void;
  export function start(): void;
  export function sendEvent({eventName, eventCount, eventSum}: EventData): void;
  export function recordView(view: string): void;
  export function isInitialized(): Promise<boolean>;
}

Document breaking changes in README

Please add a section to the main README that documents breaking changes. (We ran into an issue setViewTracking() being removed, however this was not documented.)

Android builds don't compile with SDK version 20.4.8

See below for message thrown during build:

/Users/jackleupin/SerenityRN/node_modules/countly-sdk-react-native-bridge/android/src/main/java/ly/count/android/sdk/react/CountlyReactNative.java:893: error: no suitable method found for log(String)
        log("recordAttributionID: Not implemented for Android");

I think a fix might look something like this:

    @ReactMethod
    public void recordAttributionID(ReadableArray args, LogLevel logLevel){
        String attributionID = args.getString(0);
        log("recordAttributionID: Not implemented for Android", logLevel.DEBUG);

Requests URLs are not properly logging to iOS console

Request URLs logged to the iOS Console contain decode: missing data error messages:

13:27:56.481122-0500	My CEP Beta		default	My CEP Beta	[Countly] Request <0x60000b399120> started:
[GET] https://countly.ipat.gatech.edu/i?app_key=APP_KEY_REDACTED202320&device_id=0033F00000RSFI2QAP&timestamp=1604094249254&hour=17&dow=5&tz=-240&sdk_version=20.04.9&sdk_name=js-rnb-ios&begin_session=1&metrics=7B22_device22<decode: missing data><decode: missing data>86_6422<decode: missing data>22_os_version22<decode: missing data>2214.122<decode: missing data>22_locale22<decode: missing data><decode: missing data>n_US22<decode: missing data>22_density22<decode: missing data>22<decode: missing data>22<decode: missing data>22_app_version22<decode: missing data>220.9.022<decode: missing data>22_resolution22<decode: missing data><decode: missing data>216022<decode: missing data>22_os22<decode: missing data><decode: missing data>OS22<decode: missing data>
13:27:56.551418-0500	My CEP Beta		default	My CEP Beta	[Countly] Request <0x60000b399120> failed!
Server reply: {"result":"App does not exist"}

SDK version: 20.4.9

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.