openedx-unsupported / edx-app-android Goto Github PK
View Code? Open in Web Editor NEWThe Open edX mobile app for Android!
Home Page: https://docs.google.com/document/d/15MYZ2LAmahB82P5wkPkQOqjszfou0Qkeae3qz7STxUQ/edit
License: Apache License 2.0
The Open edX mobile app for Android!
Home Page: https://docs.google.com/document/d/15MYZ2LAmahB82P5wkPkQOqjszfou0Qkeae3qz7STxUQ/edit
License: Apache License 2.0
The Building guidelines on the page state that use
git clone https://github.com/edx/edx-mobile-android
But actually link to the repo is https://github.com/edx/edx-app-android
So you should use
git clone https://github.com/edx/edx-app-android
Thanks,
Shrey
When I open the edx-app-andoid folder as project on android studio I get following error:
Error:Execution failed for task ':plugins/edx-app-gradle-plugin:compileGroovy'.
Someone can help me?
This error is still showing no matter what Android Studio version you use.
Error:Execution failed for task ':OpenEdXMobile:transformClassesWithJarMergingForProdRelease'. > com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/segment/analytics/Analytics$1.class
help me
When i start android studio, i get this error during build up
Error:Execution failed for task ':buildSrc:plugins/edx-app-gradle-plugin:compileGroovy'.
ANY HELP ??
Where does the edx app download videos to?
Since the app doesn't allow video speed changes, I'd like to use vlc to play the videos, but I can't find the files.
Hi,
We have an Edx platform instance and have been offering courses for some time. Now we are going to modify the Edx Android app and distribute it on Play Store. Regarding this app's license and Edx trademark, would you please help us to see what legal and technical issues should we consider to avoid copyright problems?
Thanks
Dear app authors,
not everyone is using appstore and google services generally.
It would be very convenient to have a direct download on Edx or here.
Could you, please, be so kind and give a link to a recent stable apk?
with this config we have error:
COURSE_ENROLLMENT:
ENABLED: true
TYPE : 'webview'
WEBVIEW :
COURSE_SEARCH_URL: 'http://test.com'
SEARCH_BAR_ENABLED: false
and when change the SEARCH_BAR_ENABLED
to true
problem will be solved
Error:Failed to open zip file.
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)
Re-download dependencies and sync project (requires network)
I am trying to get Google+ sign in working from the android app, but I ended up with a "Sign-in Error" from the app (Unknown error. Please try again later) while the Facebook and username/email sign in works properly.
The server respond to the app's request with a 400 Bad request error: {"error_description": "access_token is not valid", "error": "invalid_grant"}
However, When I try to sign in with Google+ through the web interface, it works perfectly.
I did all of these :
http://edx.readthedocs.io/projects/edx-installing-configuring-and-running/en/latest/mobile.html
I followed this and set up the Google section:
GOOGLE:
ENABLED: true
GOOGLE_PLUS_KEY: <Client ID set up in google API credentials>
I looked the whole code up for GOOGLE_PLUS_KEY
and found no usage for it.
I added the google-oauth2
backend on the LMS side: /admin/third_party_auth/oauth2providerconfig/
I'm not sure what to try next. Is there something I'm missing?
Thanks!
And here's the app's log:
10-06 10:39:44.042 19154-19154/org.edx.mobile D/org.edx.mobile.social.ISocial: Scopes= oauth2:https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email
10-06 10:39:44.042 19154-19154/org.edx.mobile D/org.edx.mobile.view.LoginActivity: network state changed
10-06 10:39:44.043 19154-19957/org.edx.mobile D/org.edx.mobile.social.ISocial: Fetching google oauth2 token ...
10-06 10:39:44.043 19154-19154/org.edx.mobile D/org.edx.mobile.util.NetworkUtil: Wifi is connected
10-06 10:39:44.063 19154-19154/org.edx.mobile I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@391f5fb5 time:189812637
10-06 10:39:45.113 19154-19154/org.edx.mobile D/org.edx.mobile.social.ISocial: Google oauth2: accessToken: *****
10-06 10:39:45.113 19154-19154/org.edx.mobile D/org.edx.mobile.social.SocialLoginDelegate: Google logged in; token= ****
10-06 10:39:45.157 19154-8984/org.edx.mobile D/OkHttp: --> POST https://courses.edraak.org/oauth2/exchange_access_token/google-oauth2/ HTTP/1.1
10-06 10:39:45.157 19154-8984/org.edx.mobile D/OkHttp: Content-Type: application/x-www-form-urlencoded
10-06 10:39:45.157 19154-8984/org.edx.mobile D/OkHttp: Content-Length: 189
10-06 10:39:45.157 19154-8984/org.edx.mobile D/OkHttp: User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; C6602 Build/10.7.A.0.222) Edraak/org.edx.mobile/0.8.2
10-06 10:39:45.157 19154-8984/org.edx.mobile D/OkHttp: Authorization: ******
10-06 10:39:45.157 19154-8984/org.edx.mobile D/OkHttp: access_token=****&client_id=******
10-06 10:39:45.157 19154-8984/org.edx.mobile D/OkHttp: --> END POST (189-byte body)
10-06 10:39:48.362 19154-8984/org.edx.mobile D/OkHttp: <-- 400 BAD REQUEST https://courses.edraak.org/oauth2/exchange_access_token/google-oauth2/ (3204ms)
10-06 10:39:48.362 19154-8984/org.edx.mobile D/OkHttp: Cache-Control: no-store
10-06 10:39:48.362 19154-8984/org.edx.mobile D/OkHttp: Content-Language: ar
10-06 10:39:48.362 19154-8984/org.edx.mobile D/OkHttp: Content-Type: application/json
10-06 10:39:48.362 19154-8984/org.edx.mobile D/OkHttp: Date: Thu, 06 Oct 2016 07:39:38 GMT
10-06 10:39:48.362 19154-8984/org.edx.mobile D/OkHttp: Pragma: no-cache
10-06 10:39:48.362 19154-8984/org.edx.mobile D/OkHttp: Server: nginx
10-06 10:39:48.362 19154-8984/org.edx.mobile D/OkHttp: Set-Cookie: sessionid=*******; Domain=.edraak.org; expires=Thu, 20-Oct-2016 07:39:38 GMT; httponly; Max-Age=1209600; Path=/; secure
10-06 10:39:48.363 19154-8984/org.edx.mobile D/OkHttp: Vary: Accept-Language, Cookie
10-06 10:39:48.363 19154-8984/org.edx.mobile D/OkHttp: X-Frame-Options: SAMEORIGIN
10-06 10:39:48.363 19154-8984/org.edx.mobile D/OkHttp: Content-Length: 76
10-06 10:39:48.363 19154-8984/org.edx.mobile D/OkHttp: Connection: keep-alive
10-06 10:39:48.363 19154-8984/org.edx.mobile D/OkHttp: OkHttp-Sent-Millis: 1475739587778
10-06 10:39:48.363 19154-8984/org.edx.mobile D/OkHttp: OkHttp-Received-Millis: 1475739588362
10-06 10:39:48.363 19154-8984/org.edx.mobile D/OkHttp: {"error_description": "access_token is not valid", "error": "invalid_grant"}
10-06 10:39:48.363 19154-8984/org.edx.mobile D/OkHttp: <-- END HTTP (76-byte body)
10-06 10:39:48.374 19154-19154/org.edx.mobile E/org.edx.mobile.view.LoginActivity: org.edx.mobile.http.HttpResponseStatusException
at org.edx.mobile.authentication.LoginAPI.finishSocialLogIn(LoginAPI.java:112)
at org.edx.mobile.authentication.LoginAPI.logInUsingGoogle(LoginAPI.java:100)
at org.edx.mobile.social.SocialLoginDelegate$ProfileTask.call(SocialLoginDelegate.java:202)
at org.edx.mobile.social.SocialLoginDelegate$ProfileTask.call(SocialLoginDelegate.java:161)
at roboguice.util.SafeAsyncTask$SafeAsyncTaskAndroidCallable.doInBackground(SafeAsyncTask.java:163)
at roboguice.util.AndroidCallableWrapper.doDoInBackgroundThread(AndroidCallableWrapper.java:113)
at roboguice.util.AndroidCallableWrapper.run(AndroidCallableWrapper.java:41)
at roboguice.util.AndroidCallable.run(AndroidCallable.java:20)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
at dalvik.system.VMStack.getThreadStackTrace(Native Method)
at java.lang.Thread.getStackTrace(Thread.java:580)
at roboguice.util.AndroidCallable.<init>(AndroidCallable.java:12)
at roboguice.util.SafeAsyncTask$SafeAsyncTaskAndroidCallable.<init>(SafeAsyncTask.java:160)
at roboguice.util.SafeAsyncTask.newTask(SafeAsyncTask.java:156)
at roboguice.util.SafeAsyncTask.future(SafeAsyncTask.java:66)
at roboguice.util.SafeAsyncTask.execute(SafeAsyncTask.java:94)
at roboguice.util.SafeAsyncTask.execute(SafeAsyncTask.java:90)
at org.edx.mobile.social.SocialLoginDelegate.onSocialLoginSuccess(SocialLoginDelegate.java:133)
at org.edx.mobile.social.SocialLoginDelegate$1.onLogin(SocialLoginDelegate.java:53)
at org.edx.mobile.social.google.GoogleOauth2$FetchGoogleTokenTask.onPostExecute(GoogleOauth2.java:117)
at android.os.AsyncTask.finish(AsyncTask.java:636)
at android.os.AsyncTask.access$500(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5389)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
Hello,
I tried to use the Native Find Courses activity, but I got a 403 response. I also tried to curl /api/courses/v1/courses/?username=staff&mobile=true&page=1
using command line with the provided Authorization: Bearer f7a30affaa193813354137eb47c59cb3f9ac974e, but the same thing happened. However, it works perfectly in the website. Any recommendations?
Here's the logs:
05-10 14:30:04.328 30710-30710/org.edx.mobile D/org.edx.mobile.view.NativeFindCoursesActivity: created
05-10 14:30:04.390 30710-30880/org.edx.mobile W/EGL_emulation: eglSurfaceAttrib not implemented
05-10 14:30:04.390 30710-30880/org.edx.mobile W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x9e833160, error=EGL_SUCCESS
05-10 14:30:04.448 30710-30710/org.edx.mobile D/org.edx.mobile.util.NetworkUtil: Mobile data is connected
05-10 14:30:04.459 30710-17647/org.edx.mobile D/OkHttp: --> GET http://localhost:8000/api/courses/v1/courses/?username=staff&mobile=true&page=1 HTTP/1.1
05-10 14:30:04.459 30710-17647/org.edx.mobile D/OkHttp: User-Agent: Dalvik/2.1.0 (Linux; U; Android 6.0; Android SDK built for x86 Build/MASTER) edx/org.edx.mobile/0.7.8
05-10 14:30:04.459 30710-17647/org.edx.mobile D/OkHttp: Authorization: Bearer f7a30affaa193813354137eb47c59cb3f9ac974e
05-10 14:30:04.459 30710-17647/org.edx.mobile D/OkHttp: --> END GET
05-10 14:30:04.618 30710-30716/org.edx.mobile W/art: Suspending all threads took: 53.842ms
05-10 14:30:04.634 30710-30880/org.edx.mobile E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa0ac2e70
05-10 14:30:04.673 30710-30720/org.edx.mobile I/art: Background sticky concurrent mark sweep GC freed 47791(2MB) AllocSpace objects, 3(376KB) LOS objects, 25% free, 8MB/11MB, paused 8.031ms total 204.170ms
05-10 14:30:04.680 30710-17647/org.edx.mobile D/OkHttp: <-- 403 FORBIDDEN http://localhost:8000/api/courses/v1/courses/?username=staff&mobile=true&page=1 (220ms)
05-10 14:30:04.680 30710-17647/org.edx.mobile D/OkHttp: Allow: GET, HEAD, OPTIONS
05-10 14:30:04.680 30710-17647/org.edx.mobile D/OkHttp: Content-Language: ar
05-10 14:30:04.680 30710-17647/org.edx.mobile D/OkHttp: Content-Type: application/json
05-10 14:30:04.680 30710-17647/org.edx.mobile D/OkHttp: Date: Tue, 10 May 2016 11:30:48 GMT
05-10 14:30:04.680 30710-17647/org.edx.mobile D/OkHttp: Server: nginx
05-10 14:30:04.680 30710-17647/org.edx.mobile D/OkHttp: Set-Cookie: sessionid=wfng21dv3woz2rqrlh15mj72btjlvi2v; Domain=.edxbeta.org; expires=Tue, 24-May-2016 11:30:48 GMT; httponly; Max-Age=1209600; Path=/; secure
05-10 14:30:04.680 30710-17647/org.edx.mobile D/OkHttp: Vary: Accept-Encoding
05-10 14:30:04.680 30710-17647/org.edx.mobile D/OkHttp: Vary: Accept, Accept-Language, Cookie
05-10 14:30:04.680 30710-17647/org.edx.mobile D/OkHttp: X-Frame-Options: SAMEORIGIN
05-10 14:30:04.680 30710-17647/org.edx.mobile D/OkHttp: Connection: keep-alive
05-10 14:30:04.681 30710-17647/org.edx.mobile D/OkHttp: OkHttp-Sent-Millis: 1462879804460
05-10 14:30:04.681 30710-17647/org.edx.mobile D/OkHttp: OkHttp-Received-Millis: 1462879804679
05-10 14:30:04.681 30710-17647/org.edx.mobile D/OkHttp: {"detail":"You do not have permission to perform this action."}
05-10 14:30:04.681 30710-17647/org.edx.mobile D/OkHttp: <-- END HTTP (79-byte body)
05-10 14:30:04.681 30710-17647/org.edx.mobile W/org.edx.mobile.http.RetroHttpExceptionHandler: url = http://localhost:8000/api/courses/v1/courses/?username=staff&mobile=true&page=1
05-10 14:30:04.683 30710-17647/org.edx.mobile W/org.edx.mobile.http.RetroHttpExceptionHandler: kind = HTTP
05-10 14:30:04.683 30710-17647/org.edx.mobile W/org.edx.mobile.http.RetroHttpExceptionHandler: body = {"detail":"You do not have permission to perform this action."}
05-10 14:30:04.683 30710-17647/org.edx.mobile W/org.edx.mobile.http.RetroHttpExceptionHandler: status and reason = 403:FORBIDDEN
05-10 14:30:04.683 30710-30710/org.edx.mobile E/org.edx.mobile.util.images.ErrorUtils: org.edx.mobile.http.RetroHttpException: retrofit.RetrofitError: 403 FORBIDDEN
at org.edx.mobile.http.RetroHttpExceptionHandler.handleError(RetroHttpExceptionHandler.java:23)
at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:242)
at java.lang.reflect.Proxy.invoke(Proxy.java:393)
at $Proxy24.getCourseList(Unknown Source)
at org.edx.mobile.course.CourseAPI.getCourseList(CourseAPI.java:35)
at org.edx.mobile.course.GetCourseListTask.call(GetCourseListTask.java:26)
at org.edx.mobile.course.GetCourseListTask.call(GetCourseListTask.java:11)
at roboguice.util.SafeAsyncTask$SafeAsyncTaskAndroidCallable.doInBackground(SafeAsyncTask.java:163)
at roboguice.util.AndroidCallableWrapper.doDoInBackgroundThread(AndroidCallableWrapper.java:113)
at roboguice.util.AndroidCallableWrapper.run(AndroidCallableWrapper.java:41)
at roboguice.util.AndroidCallable.run(AndroidCallable.java:20)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
at dalvik.system.VMStack.getThreadStackTrace(Native Method)
at java.lang.Thread.getStackTrace(Thread.java:580)
at roboguice.util.AndroidCallable.<init>(AndroidCallable.java:12)
at roboguice.util.SafeAsyncTask$SafeAsyncTaskAndroidCallable.<init>(SafeAsyncTask.java:160)
at roboguice.util.SafeAsyncTask.newTask(SafeAsyncTask.java:156)
at roboguice.util.SafeAsyncTask.future(SafeAsyncTask.java:66)
at roboguice.util.SafeAsyncTask.execute(SafeAsyncTask.java:94)
at roboguice.util.SafeAsyncTask.execute(SafeAsyncTask.java:90)
at org.edx.mobile.view.dialog.NativeFindCoursesFragment$2.loadNextPage(NativeFindCoursesFragment.java:84)
at org.edx.mobile.view.adapters.InfiniteScrollUtils$PageLoadController.onLoadMore(InfiniteScrollUtils.java:159)
at org.edx.mobile.view.adapters.InfiniteScrollUtils$PageLoadController.onLoadMore(InfiniteScrollUtils.java:144)
at org.edx.mobile.view.adapters.InfiniteScrollUtils$PageLoadController.access$000(InfiniteScrollUtils.java:119)
at org.edx.mobile.view.adapters.InfiniteScrollUtils.configureListViewWithInfiniteList(InfiniteScrollUtils.java:43)
at org.edx.mobile.view.dialog.NativeFindCoursesFragment.onViewCreated(NativeFindCoursesFragment.java:55)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339)
at android.support.v4.app.FragmentActivity.onResume(FragmentActivity.java:484)
at org.edx.mobile.base.RoboAppCompatActivity.onResume(RoboAppCompatActivity.java:87)
at org.edx.mobile.base.BaseFragmentActivity.onResume(BaseFragmentActivity.java:102)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1258)
at android.app.Activity.performResume(Activity.java:6312)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3092)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3134)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-10 14:30:04.684 30710-30710/org.edx.mobile D/Event: No subscribers registered for event class org.edx.mobile.logger.Logger$CrashReportEvent
05-10 14:30:04.684 30710-30710/org.edx.mobile D/Event: No subscribers registered for event class de.greenrobot.event.NoSubscriberEvent
05-10 14:30:58.898 30710-30716/org.edx.mobile W/art: Suspending all threads took: 5.154ms
05-10 14:37:04.972 30710-30716/org.edx.mobile W/art: Suspending all threads took: 24.946ms
05-10 14:44:38.295 30710-30716/org.edx.mobile W/art: Suspending all threads took: 11.793ms
05-10 14:48:21.699 30710-30716/org.edx.mobile W/art: Suspending all threads took: 10.982ms
09-26 18:05:59.761 10449-12484/org.edx.mobile D/OkHttp: --> POST https://WEBSITE.org/oauth2/access_token/ HTTP/1.1
09-26 18:05:59.761 10449-12484/org.edx.mobile D/OkHttp: Content-Type: application/x-www-form-urlencoded
09-26 18:05:59.761 10449-12484/org.edx.mobile D/OkHttp: Content-Length: 102
09-26 18:05:59.761 10449-12484/org.edx.mobile D/OkHttp: User-Agent: Dalvik/2.1.0 (Linux; U; Android 6.0.1; SM-N920C Build/MMB29K) Salalem/org.edx.mobile/0.0.1
09-26 18:05:59.761 10449-12484/org.edx.mobile D/OkHttp: grant_type=password&client_id=CLIENT_ID&username=USERNAME&password=PASSWORD
09-26 18:05:59.761 10449-12484/org.edx.mobile D/OkHttp: --> END POST (102-byte body)
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: <-- 200 OK https://WEBSITE.org/oauth2/access_token/ (482ms)
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: Server: nginx/1.1.19
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: Date: Mon, 26 Sep 2016 15:09:54 GMT
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: Content-Type: application/json
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: Transfer-Encoding: chunked
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: Connection: keep-alive
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: Vary: Accept-Encoding
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: Content-Language: ar
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: Vary: Accept-Language, Cookie
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: Pragma: no-cache
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: Cache-Control: no-store
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: X-Frame-Options: ALLOW
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: Strict-Transport-Security: max-age=31536000; includeSubDomains
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: OkHttp-Sent-Millis: 1474902359779
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: OkHttp-Received-Millis: 1474902360250
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: {"access_token": "75d633496392dae912ac63753fdcd2ccced65a97", "token_type": "Bearer", "expires_in": 2591999, "scope": ""}
09-26 18:06:00.241 10449-12484/org.edx.mobile D/OkHttp: <-- END HTTP (120-byte body)
09-26 18:06:00.271 10449-12484/org.edx.mobile D/OkHttp: --> GET https://WEBSITE.org/api/mobile/v0.5/my_user_info HTTP/1.1
09-26 18:06:00.271 10449-12484/org.edx.mobile D/OkHttp: User-Agent: Dalvik/2.1.0 (Linux; U; Android 6.0.1; SM-N920C Build/MMB29K) Salalem/org.edx.mobile/0.0.1
09-26 18:06:00.271 10449-12484/org.edx.mobile D/OkHttp: Authorization: Bearer 75d633496392dae912ac63753fdcd2ccced65a97
09-26 18:06:00.271 10449-12484/org.edx.mobile D/OkHttp: --> END GET
09-26 18:06:00.951 10449-12484/org.edx.mobile W/org.edx.mobile.http.OauthRefreshTokenAuthenticator: Response{protocol=http/1.1, code=401, message=UNAUTHORIZED, url=https://WEBSITE.org/api/mobile/v0.5/users/USER}
09-26 18:06:00.951 10449-12484/org.edx.mobile D/OkHttp: <-- 401 UNAUTHORIZED https://WEBSITE.org/api/mobile/v0.5/users/ghadeersa (685ms)
09-26 18:06:00.951 10449-12484/org.edx.mobile D/OkHttp: Server: nginx/1.1.19
09-26 18:06:00.951 10449-12484/org.edx.mobile D/OkHttp: Date: Mon, 26 Sep 2016 15:09:55 GMT
09-26 18:06:00.951 10449-12484/org.edx.mobile D/OkHttp: Content-Type: application/json
09-26 18:06:00.951 10449-12484/org.edx.mobile D/OkHttp: Transfer-Encoding: chunked
09-26 18:06:00.951 10449-12484/org.edx.mobile D/OkHttp: Connection: keep-alive
09-26 18:06:00.951 10449-12484/org.edx.mobile D/OkHttp: Content-Language: ar
09-26 18:06:00.951 10449-12484/org.edx.mobile D/OkHttp: Vary: Accept, Accept-Language, Cookie
09-26 18:06:00.951 10449-12484/org.edx.mobile D/OkHttp: Allow: GET, HEAD, OPTIONS
09-26 18:06:00.951 10449-12484/org.edx.mobile D/OkHttp: X-Frame-Options: ALLOW
09-26 18:06:00.951 10449-12484/org.edx.mobile D/OkHttp: WWW-Authenticate: Bearer realm="api"
09-26 18:06:00.951 10449-12484/org.edx.mobile D/OkHttp: OkHttp-Sent-Millis: 1474902360867
09-26 18:06:00.951 10449-12484/org.edx.mobile D/OkHttp: OkHttp-Received-Millis: 1474902360956
09-26 18:06:00.951 10449-12484/org.edx.mobile D/OkHttp: {"detail":"Authentication credentials were not provided."}
Hello
When I try to login without internet connection my app crush
actually I have solved this by change
import android.support.v7.app.AlertDialog
to
import android.app.AlertDialog;
but it is very weird
Error:Execution failed for task ':OpenEdXMobile:transformClassesWithJarMergingForProdRelease'.
com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/segment/analytics/Analytics$1.class
Hello, I found out the working with Parse is the only supported method in Edx right now
How can we enable push notification with firebase or at least hosted Parse?
hi
I'm sorry to bother again. --__--#.
i find a issue,when i use network to request some data .In my logcat have very mach err Log :
like this :
05-19 16:03:26.444 21343-21343/org.edx.mobile D/org.edx.mobile.util.NetworkUtil: Wifi is connected 05-19 16:03:26.448 21343-21343/org.edx.mobile E/org.edx.mobile.module.db.impl.DbOperationBase: java.lang.IllegalArgumentException: the bind value at index 1 is null at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:169) at android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings(SQLiteProgram.java:205) at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47) at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1344) at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1186) at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1057) at com.newrelic.agent.android.instrumentation.SQLiteInstrumentation.query(SQLiteInstrumentation.java:25) at org.edx.mobile.module.db.impl.DbOperationSelect.getCursor(DbOperationSelect.java:29) at org.edx.mobile.module.db.impl.DbOperationExists.execute(DbOperationExists.java:15) at org.edx.mobile.module.db.impl.DbOperationExists.execute(DbOperationExists.java:6) at org.edx.mobile.module.db.impl.DbOperationBase.requestExecute(DbOperationBase.java:25) at org.edx.mobile.module.db.impl.IDatabaseBaseImpl.execute(IDatabaseBaseImpl.java:56) at org.edx.mobile.module.db.impl.IDatabaseBaseImpl.enqueue(IDatabaseBaseImpl.java:74) at org.edx.mobile.module.db.impl.IDatabaseImpl.enqueue(IDatabaseImpl.java:21) at org.edx.mobile.module.db.impl.IDatabaseImpl.isAnyVideoDownloading(IDatabaseImpl.java:51) at org.edx.mobile.base.BaseVideosDownloadStateActivity$2.run(BaseVideosDownloadStateActivity.java:42) at android.os.Handler.handleCallback(Handler.java:743) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:150) at android.app.ActivityThread.main(ActivityThread.java:5546) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684) 05-19 16:03:26.452 21343-21343/org.edx.mobile D/org.edx.mobile.util.NetworkUtil: Wifi is connected
Hi ,
I am new to openedx and is trying to integrate the Find Courses module. At Android end, it seems link the custom web view is opened for FindCoursesActivity with the url which is from the config file with the Tag "COURSE_SEARCH_URL". Can you tell me the url that i need to pass in the following Tag value
or if i had to create a native Find Courses Module at Android end . Do we have the REST APIs for Find Courses and CourseDetails .
Thanks in Advance
Hi,
I have installed an Open EDX Eucalyptus.2. I am preparing the application connection for Android and for IOS.
I have rigorously followed the steps of Github:
File edx.properties in OpenEdXMobile:
edx.dir = '../../my_config'
In folder my_config:
#file edx.properties edx.android {
configFiles = ['config.yaml', 'local.yaml']
}
#file local.yaml
OAUTH_CLIENT_ID: 'xxxxxxxxxxxxxxx'
#file config.yaml
API_HOST_URL: 'http://my_server/' # localhost is 10.0.2.2 in Android
ENVIRONMENT_DISPLAY_NAME: 'PRO'
PLATFORM_NAME: 'Mooc'
PLATFORM_DESTINATION_NAME: 'my_server'
FEEDBACK_EMAIL_ADDRESS: 'edx@my_server'
The app compiles perfectly and starts. The problem is that when I try to login, it does nothing.
In Open EDX everything is set correctly. I have compiled the app for IOS with the same parameters and it works correctly.
Any idea??
Thanks!!!
Hi ,
I am using Latest Code of edx In mobile (2.1.1 version).
In server side I am using cypress version of edx.
Courseware API is not working, and getting 404 response
"/api/courses/v1/blocks/?course_id={course_id}&username={username}&depth=all&requested_fields=graded%2Cformat%2Cstudent_view_multi_device&student_view_data=video&block_counts=video&nav_depth=3"
Could someone help me to sort out this issue.
For some reason I am unable to upgrade from Cypress to Dogwood. Is there any other way ?
Which API / endpoint I've to use to get Courseware data in Cypress version.
Hello.
We are using open edx mobile app and Insights.
But I understand that the actions on mobile app related with video or board are not reflected on Insights.
So is there any plan to fix it?
I am always grateful for your works.
Hi,
How can i make this project into a library project
Not able to download large video file in android application. I get some KB file instead of full file.
Hi, would you consider adding the app to the F-Droid store? See here for how to do that. One key requirement is having no proprietary dependencies like google play services or analytics
What is the status of switching to the new Google Sign In and being able to take out the permissions here?
<!-- Required by legacy Google Sign In (TODO: Switch to new Google Sign In) -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
Thanks!
I can't see the courses that the default account "honor" is enrolled in unless I give staff permissions to this profile. However they are shown in the web.
i just begin working with android and i clone this project and this error shows up :
"Error:SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable."
but when i create a new project or open my own project it works fine
I'm trying to change the outline for course in Studio by Adding/removing/hiding section and subsection to the outline
but those edits cannot be shown in the app until you clear the data from the app settings
As per the Open Edx Plateform API document, the latest version of API is v1.0 while this project still uses v0.5 version of API which is Deprecated.
Hence please let me know if there is any other branch that points to latest API version v1.0?
I am not able to import a module of PayUMoney SDK in EDX project, however I got successful with other simple projects.
PayUMoney Sample App: https://github.com/payu-intrepos/Android-SDK-Sample-App
hi
when i download a course successful, in MyAllVideosFragment
ArrayList coursesList = environment.getStorage()
.getDownloadedCoursesWithVideoCountAndSize();
coursesList all with is null. I don‘t konw how to fix it . this is my log ...
Forgive my English is poor.
org.edx.mobile.view.MyAllVideosFragment: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.Iterator java.util.ArrayList.iterator()' on a null object reference at org.edx.mobile.view.MyAllVideosFragment.addMyAllVideosData(MyAllVideosFragment.java:81) at org.edx.mobile.view.MyAllVideosFragment.onResume(MyAllVideosFragment.java:66) at android.support.v4.app.Fragment.performResume(Fragment.java:2020) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1107) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) at android.support.v4.view.ViewPager.populate(ViewPager.java:1177) at android.support.v4.view.ViewPager.populate(ViewPager.java:1025) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1545) at android.view.View.measure(View.java:18930) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5976) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1486) at android.widget.LinearLayout.measureVertical(LinearLayout.java:765) at android.widget.LinearLayout.onMeasure(LinearLayout.java:647) at android.view.View.measure(View.java:18930) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5976) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:18930) at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1075) at android.view.View.measure(View.java:18930) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5976) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) at android.view.View.measure(View.java:18930) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5976) at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391) at android.view.View.measure(View.java:18930) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5976) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:18930) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5976) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1486) at android.widget.LinearLayout.measureVertical(LinearLayout.java:765) at android.widget.LinearLayout.onMeasure(LinearLayout.java:647) at android.view.View.measure(View.java:18930) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5976) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2705) at android.view.View.measure(View.java:18930) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2153) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1247) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1483) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1138) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6227) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:884) at android.view.Choreographer.doCallbacks(Choreographer.java:696) at android.view.Choreographer.doFrame(Choreographer.java:631) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:870) at android.os.Handler.handleCallback(Handler.java:743) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:150) at android.app.ActivityThread.main(ActivityThread.java:5546) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteIni 05-18 18:50:56.694 30888-30888/org.edx.mobile D/org.edx.mobile.view.MyRecentVideosFragment: reloading adapter...
Hi,
We (at the University of British Columbia) have developed the Peer Instruction XBlock
which is integrated into the edx-platform and in use by many courses (for example, courses that are part of the Software Development Micromasters Program).
Is there support for this XBlock in the Android app? Students accessing their courses on mobile would greatly benefit from this, and we would love to see Peer Instruction supported in the app.
Thanks,
Justin
Error:Unable to find module with Gradle path 'plugins/edx-app-gradle-plugin' (needed by module 'buildSrc'.)
Hello,
I'm currently working on integrating Fabric analytics in the app, and I saw that you are working on Google Firebase Integration in #879 and this is really cool. The problem is that all events are fired in each screen using segment, regardless of the integration type.
I tried to make something generic but that leaded to a huge code change (around 57 files) which I prefer not to do because of the merge conflicts I'll face later. I actually have no questions here, but I wanted to check if you are interested in having such a change so may be I can introduce my changes in a pull request.
I have developed clone of edx android.
When i uploaded to google play, They had suspended it reason being Impersonation(https://play.google.com/about/ip-deception-spam/impersonation-ip/impersonation/).
I don't know where i breach Impersonation rule.
Request:
GET /xblock/block-v1:edX+DemoX+Demo_Course+type@html+block@030e35c4756a4ddc8d40b95fbbfff4d4 HTTP/1.1
Host: lms.*.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Google Nexus 7 2013 - 6.0.0 - API 23 - 1200x1920 Build/MRA58K) AppleWebKit/537.36 (KH
TML, like Gecko) Version/4.0 Chrome/40.0.0.0 Safari/537.36 Edx/org.edx.mobile/2.0.0
authorization: Bearer 5df7d6b72ab7238d3a95ad9469a98e05a76911d1
Accept-Encoding: gzip, deflate
Accept-Language: en-US;q=0.8
Cookie: csrftoken=hko11cvTqQH6J5yyv6ThCdcms06Lw0nG; sessionid=delui6bc07eqlr0s3zxvk57kjyax7z3a
X-Requested-With: org.edx.mobile
X-Forwarded-For: *
X-Forwarded-Host: lms.*.com
X-Forwarded-Server: lms.*.com
Connection: Keep-Alive
This request returns 404 Not found,
But SAME request with another cookie from iOS app always return 200 OK
When i am registering (or doing anything) user with android app. user is register in devstack successfully. but it is giving me error : Unknown Error please try again. on mobile app.
To reproduce, go to Edit profile, then navigate back.
Stacktrace:
org.edx.mobile E/org.edx.mobile.profiles.UserProfileFragment: java.lang.NullPointerException: Attempt to invoke interface method 'boolean org.edx.mobile.profiles.ScrollingPreferenceChild.prefersScrollingHeader()' on a null object reference
at org.edx.mobile.profiles.UserProfileFragment.onChildScrollingPreferenceChanged(UserProfileFragment.java:250)
at org.edx.mobile.profiles.UserProfileBioFragment$2.showBio(UserProfileBioFragment.java:73)
at org.edx.mobile.profiles.UserProfileBioPresenter$1.onData(UserProfileBioPresenter.java:55)
at org.edx.mobile.profiles.UserProfileBioPresenter$1.onData(UserProfileBioPresenter.java:52)
at org.edx.mobile.util.observer.MainThreadObservable$2$1.run(MainThreadObservable.java:41)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
I am prefacing my comment with the fact that I am a general consumer.
The edx videos can take up A LOT of data, so is there a way to save these to the SD card? This would mean that large videos wouldn't take up all the internal storage.
It seems like that edx android app does not refresh itself when course contents is added or updated from the studio (New sections, subsections for example). To force refreshing, the app is needed to be unloaded from task manager or the user enters another course and reenter the updated course. When the app is resides on memory and the user is clicking one course only, there is no way to get the updated contents.
The IOS app shows the updated contents correctly within 1 hour.
(In the manual, the contents in the app is refreshed within 1 hour after the course contents update.)
...I'm assuming that's a typo? (If not, it should probably have a comment clarifying that it's intentional)
Hi fellow coders,
I'm new to open source and would love to contribute to Open edX for Android. However, there's only 5 issues in the issue tracker. Is this project in full development or is it new, what's the deal? Is this project beginner-friendly?
Thanks so much for your time,
Jing
After upgrading Android Studio to v2.3.x and with it the various libraries, we have been encountering the following error:
Error:Execution failed for task ':OpenEdXMobile:validateSigningDevRelease'.
Keystore file /$HOME/edx-app-android/OpenEdXMobile/edx-android-release-key.keystore not found for signing config 'releasekey'.
devDebuggable
.Following any steps from the ones mentioned below would work:
Refresh all Gradle projects. (View -- > Tool Windows --> Gradle from Android Studio's top menu bar) [By pressing the blue recycle icon in the snapshot below]
Hi Team,
I am building the openedx android app,I face issues while trying login and create new user.Below are the errors I got from android studio.Note I followed http://edx.readthedocs.io/projects/edx-installing-configuring-and-running/en/latest/mobile.html for implementation .Can you please help?
05-02 08:53:15.105 2493-2493/org.edx.mobile E/org.edx.mobile.util.images.ErrorUtils: java.lang.IllegalArgumentException: Unexpected char 0xe9 at 89 in User-Agent value: Dalvik/2.1.0 (Linux; U; Android 5.1.1; Android SDK built for x86_64 Build/LMY48X) /org.edx.mobile/2.6.0
at okhttp3.Headers$Builder.checkNameAndValue(Headers.java:283)
at okhttp3.Headers$Builder.set(Headers.java:263)
at okhttp3.Request$Builder.header(Request.java:165)
at org.edx.mobile.http.interceptor.UserAgentInterceptor.intercept(UserAgentInterceptor.java:22)
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:187)
at org.edx.mobile.http.interceptor.JsonMergePatchInterceptor.intercept(JsonMergePatchInterceptor.java:30)
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:187)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:160)
at okhttp3.RealCall.execute(RealCall.java:57)
at retrofit2.OkHttpCall.execute(OkHttpCall.java:174)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.execute(ExecutorCallAdapterFactory.java:89)
at org.edx.mobile.authentication.LoginAPI.register(LoginAPI.java:180)
at org.edx.mobile.authentication.LoginAPI.registerUsingEmail(LoginAPI.java:153)
at org.edx.mobile.task.RegisterTask.call(RegisterTask.java:37)
at org.edx.mobile.task.RegisterTask.call(RegisterTask.java:13)
at roboguice.util.SafeAsyncTask$SafeAsyncTaskAndroidCallable.doInBackground(SafeAsyncTask.java:163)
at roboguice.util.AndroidCallableWrapper.doDoInBackgroundThread(AndroidCallableWrapper.java:113)
at roboguice.util.AndroidCallableWrapper.run(AndroidCallableWrapper.java:41)
at roboguice.util.AndroidCallable.run(AndroidCallable.java:20)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
at dalvik.system.VMStack.getThreadStackTrace(Native Method)
at java.lang.Thread.getStackTrace(Thread.java:580)
at roboguice.util.AndroidCallable.(AndroidCallable.java:12)
at roboguice.util.SafeAsyncTask$SafeAsyncTaskAndroidCallable.(SafeAsyncTask.java:160)
at roboguice.util.SafeAsyncTask.newTask(SafeAsyncTask.java:156)
at roboguice.util.SafeAsyncTask.future(SafeAsyncTask.java:66)
at roboguice.util.SafeAsyncTask.execute(SafeAsyncTask.java:94)
at roboguice.util.SafeAsyncTask.execute(SafeAsyncTask.java:90)
at org.edx.mobile.view.RegisterActivity.createAccount(RegisterActivity.java:334)
at org.edx.mobile.view.RegisterActivity.access$000(RegisterActivity.java:59)
at org.edx.mobile.view.RegisterActivity$1.onClick(RegisterActivity.java:124)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
When selecting "Video only " mode for units not contain videos , the app redirects user to the sub section contains that unit but with an empty page.
Please refer to the video: https://drive.google.com/file/d/0B3oBowV9R82XaHRsZGxXd0RMWGM/view?usp=sharing
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.