Git Product home page Git Product logo

ksvc / ksyhttpcache_ios Goto Github PK

View Code? Open in Web Editor NEW
68.0 68.0 16.0 61.72 MB

金山云ios平台http缓存SDK,可方便地与播放器集成,实现http视频边播放边下载(缓存)功能。ksyun http cache sdk for ios platform, it's easy to integrated with media players to provide caching capability when watching http videos.

License: Apache License 2.0

Ruby 14.36% Objective-C 85.64%

ksyhttpcache_ios's People

Contributors

daliang0101 avatar fpzeng avatar mayudong1 avatar noiled avatar sujia avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ksyhttpcache_ios's Issues

缓存M3U8 CPU和内存巨高

CPU一直百分之百,几秒钟内存就会占用到1个G。
21.53 s 100.0% 0 s HGPJ (1358)
18.07 s 83.9% 0 s _pthread_wqthread 0x24342
18.07 s 83.9% 0 s _pthread_wqthread
18.07 s 83.9% 0 s 0x1036cde36
18.07 s 83.9% 0 s 0x1036c1cb2
18.07 s 83.9% 0 s 0x1036c0fa6
18.07 s 83.9% 0 s 0x1036b95ee
18.07 s 83.9% 0 s 0x1036b7b66
9.26 s 43.0% 0 s 0x102fc0cae
9.26 s 43.0% 0 s 0x102fc0d66
8.74 s 40.6% 0 s 0x102faed12
8.74 s 40.6% 0 s 0x102fae7b2
8.70 s 40.3% 0 s 0x102fae916
8.70 s 40.3% 0 s -[NSArray sortedArrayFromRange:options:usingComparator:]
8.69 s 40.3% 0 s CFSortIndexes
8.69 s 40.3% 0 s __CFSimpleMergeSort
7.74 s 35.9% 0 s __CFSimpleMergeSort
6.72 s 31.2% 0 s __CFSimpleMergeSort
5.68 s 26.3% 0 s __CFSimpleMergeSort
4.62 s 21.4% 0 s __CFSimpleMergeSort
3.59 s 16.6% 0 s __CFSimpleMergeSort
2.58 s 11.9% 0 s __CFSimpleMergeSort
1.68 s 7.8% 0 s __CFSimpleMergeSort
888.00 ms 4.1% 0 s __CFSimpleMergeSort
444.00 ms 2.0% 0 s 0x102faebfe
444.00 ms 2.0% 0 s +[NSFileAttributes _attributesAtPath:partialReturn:filterResourceFork:error:]
172.00 ms 0.7% 0 s +[NSFileAttributes _populateCatInfo:forURL:statInfo:error:]
91.00 ms 0.4% 91.00 ms __getattrlist
87.00 ms 0.4% 87.00 ms lstat
63.00 ms 0.2% 0 s _attributesAtPath
12.00 ms 0.0% 0 s +[NSURL(NSURL) fileURLWithPath:isDirectory:]
8.00 ms 0.0% 0 s -[NSFileManager getFileSystemRepresentation:maxLength:withPath:]
6.00 ms 0.0% 0 s 0x11e871a52
2.00 ms 0.0% 0 s 0x11e871a96
2.00 ms 0.0% 0 s +[NSFileAttributes attributesWithStat:]
1.00 ms 0.0% 0 s 0xbd2d17019e7618f6

发现crash

umeng log 如下

Application received signal SIGSEGV
(null)
((
	0   CoreFoundation                      0x000000018111ada4 <redacted> + 252
	1   libobjc.A.dylib                     0x00000001802d45ec objc_exception_throw + 56
	2   CoreFoundation                      0x000000018111ac6c <redacted> + 0
	3   myAPP                              0x1012458e0 _ZN10h265_codec18storeNborByPunRx2NEjPNS_9TNborDataEiPNS_7TMVCandEi + 5973652
	4   libsystem_platform.dylib            0x0000000180d3cb48 _sigtramp + 36
	5   myAPP                              0x100c1faa8 myAPP + 12712616
	6   myAPP                              0x100c33898 myAPP + 12794008
	7   myAPP                              0x100c34b98 myAPP + 12798872
	8   myAPP                              0x100c311e8 myAPP + 12784104
	9   CFNetwork                           0x000000018186f990 <redacted> + 76
	10  Foundation                          0x0000000181b42e88 <redacted> + 16
	11  Foundation                          0x0000000181a848d0 <redacted> + 72
	12  Foundation                          0x0000000181a83cac <redacted> + 848
	13  libdispatch.dylib                   0x0000000180a0ca60 <redacted> + 16
	14  libdispatch.dylib                   0x0000000180a14170 <redacted> + 224
	15  libdispatch.dylib                   0x0000000180a0ca60 <redacted> + 16
	16  libdispatch.dylib                   0x0000000180a14170 <redacted> + 224
	17  libdispatch.dylib                   0x0000000180a1405c <redacted> + 104
	18  Foundation                          0x0000000181b44750 <redacted> + 376
	19  libdispatch.dylib                   0x0000000180a0ca60 <redacted> + 16
	20  libdispatch.dylib                   0x0000000180a14e94 <redacted> + 424
	21  libdispatch.dylib                   0x0000000180a13880 <redacted> + 784
	22  libdispatch.dylib                   0x0000000180a19cac <redacted> + 588
	23  libdispatch.dylib                   0x0000000180a199fc <redacted> + 120
	24  libsystem_pthread.dylib             0x0000000180d3ffac _pthread_wqthread + 1176
	25  libsystem_pthread.dylib             0x0000000180d3fb08 start_wqthread + 4
)

dSYM UUID: 2F261E7A-E8AE-37A6-ACE0-9DCCE054640A
CPU Type: arm64
Slide Address: 0x0000000100000000
Binary Image: myAPP
Base Address: 0x0000000100b78000

符号化之后调用堆栈信息为:


 -[URLSessionDelegateObject URLSession:task:didCompleteWithError:] (in myAPP) + 124


 -[ActionWorker URLSession:task:didCompleteWithError:] (in myAPP) + 364


 -[ActionWorker processActionsWithHandler:] (in myAPP) + 624

 __56-[HTTPAsyncCacheReponse initWithFilePath:forConnection:]_block_invoke (in myAPP) + 120

关于getProxyUrl 检测service isRunning 的问题

获取代理播放地址代码

playerURL = [[KSYHTTPProxyService sharedInstance] getProxyUrl:playerURL newCache:NO];

log 如下

[22:22:38] -[MMBPlayerView reloadPlayerInfo:] [第139行] ======before get url :2018-02-06 14:23:54 +0000
2018-02-06 22:23:54:315 myAPP[1352:229557] Bonjour Service Published: domain(local.) type(_http._tcp.) name(10.2 7plus)
2018-02-06 22:23:56:270 myAPP[1352:229428] HTTPServer: Started HTTP server on port 8123
2018-02-06 22:23:56.273870+0800 myAPP[1352:229428] Started HTTP Server on port 8123

[22:22:38] -[MMBPlayerView reloadPlayerInfo:] [第145行] ======after get url :2018-02-06 14:23:56 +0000

新版本加入是否开启服务的监测,但是有时候获取播放地址要等很久,而且会卡住主线程

发现crash

符号化之后的log 如下

Thread 19 name:  Dispatch queue: com.kingsoft.video.httpcache.download (QOS: UNSPECIFIED)
Thread 19 Crashed:
0   libsystem_kernel.dylib        	0x00000001824102e8 __pthread_kill + 8
1   libsystem_pthread.dylib       	0x00000001825252f8 pthread_kill$VARIANT$mp + 396
2   libsystem_c.dylib             	0x000000018237efbc abort + 140
3   libc++abi.dylib               	0x0000000181b1c068 __cxa_bad_cast + 0
4   libc++abi.dylib               	0x0000000181b1c210 default_unexpected_handler+ 8720 () + 0
5   libobjc.A.dylib               	0x0000000181b44810 _objc_terminate+ 34832 () + 124
6   libc++abi.dylib               	0x0000000181b3454c std::__terminate(void (*)+ 107852 ()) + 16
7   libc++abi.dylib               	0x0000000181b33ea8 __cxxabiv1::exception_cleanup_func+ 106152 (_Unwind_Reason_Code, _Unwind_Exception*) + 0
8   libobjc.A.dylib               	0x0000000181b4465c _objc_exception_destructor+ 34396 (void*) + 0
9   CoreFoundation                	0x00000001828fe2ac -[NSException initWithCoder:] + 0
10  MyApp                        	0x000000010288fd58 UmengSignalHandler + 128
11  libsystem_platform.dylib      	0x000000018251fb40 _sigtramp + 36
12  MyApp                        	0x000000010213d8c4 __56-[HTTPAsyncCacheReponse initWithFilePath:forConnection:]_block_invoke + 120
13  MyApp                        	0x0000000102151618 -[ActionWorker processActionsWithHandler:] + 624
14  MyApp                        	0x0000000102152918 -[ActionWorker URLSession:task:didCompleteWithError:] + 364
15  MyApp                        	0x000000010214ef68 -[URLSessionDelegateObject URLSession:task:didCompleteWithError:] + 124
16  CFNetwork                     	0x0000000183039ff4 __51-[NSURLSession delegate_task:didCompleteWithError:]_block_invoke.207 + 76
17  Foundation                    	0x00000001832d5ba0 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 16
18  Foundation                    	0x0000000183215894 -[NSBlockOperation main] + 72
19  Foundation                    	0x00000001832054c4 -[__NSOperationInternal _start:] + 848
20  libdispatch.dylib             	0x000000018227aa14 _dispatch_client_callout + 16
21  libdispatch.dylib             	0x0000000182282200 _dispatch_block_invoke_direct$VARIANT$mp + 288
22  libdispatch.dylib             	0x000000018227aa14 _dispatch_client_callout + 16
23  libdispatch.dylib             	0x0000000182282200 _dispatch_block_invoke_direct$VARIANT$mp + 288
24  libdispatch.dylib             	0x00000001822820ac dispatch_block_perform$VARIANT$mp + 104
25  Foundation                    	0x00000001832d7878 __NSOQSchedule_f + 376
26  libdispatch.dylib             	0x000000018227aa14 _dispatch_client_callout + 16
27  libdispatch.dylib             	0x0000000182282f08 _dispatch_continuation_pop$VARIANT$mp + 428
28  libdispatch.dylib             	0x00000001822818c0 _dispatch_async_redirect_invoke$VARIANT$mp + 784
29  libdispatch.dylib             	0x0000000182287cf4 _dispatch_root_queue_drain + 600
30  libdispatch.dylib             	0x0000000182287a38 _dispatch_worker_thread3 + 120
31  libsystem_pthread.dylib       	0x000000018252306c _pthread_wqthread + 1268
32  libsystem_pthread.dylib       	0x0000000182522b6c start_wqthread + 4

另外这个库 CPU 占用率太高了

正在缓存的时候调用stopServer,再播放视频会导致失败

ksyhttpcache_ios还有一个问题,使用你们的Demo也是必现的,在缓存的时候进入后台调用stopServer并暂停播放器,回到前台时调用startServer,然后再播放视频,必定出错,播放失败.

你们的Demo是开启后台任务的,不开启后台任务,调用stopServer,就会有这个问题

crash in [ActionWorker notifyDownloadProgress]

*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1]
(
0 CoreFoundation 0x00000001881e21d8 + 148
1 libobjc.A.dylib 0x0000000186c1c55c objc_exception_throw + 56
2 CoreFoundation 0x00000001880c6c3c + 364
3 CoreFoundation 0x00000001880c6aac + 64
4 **** 0x0000000102a80b7c -[ActionWorker notifyDownloadProgress] + 656
5 **** 0x0000000102a800d8 -[ActionWorker processActionsWithHandler:] + 392
6 **** 0x0000000102a8173c -[ActionWorker URLSession:task:didCompleteWithError:] + 556
7 **** 0x0000000102a7eae4 -[URLSessionDelegateObject URLSession:task:didCompleteWithError:] + 172
8 CFNetwork 0x00000001889969f8 + 72
9 Foundation 0x0000000188ca6754 + 16
10 Foundation 0x0000000188beb2c8 + 96
11 Foundation 0x0000000188bdb8c4 + 620
12 Foundation 0x0000000188ca8b00 + 228
13 libdispatch.dylib 0x00000001074d521c _dispatch_client_callout + 16
14 libdispatch.dylib 0x00000001074e2b54 _dispatch_queue_serial_drain + 1136
15 libdispatch.dylib 0x00000001074d8ce4 _dispatch_queue_invoke + 672
16 libdispatch.dylib 0x00000001074e4e6c _dispatch_root_queue_drain + 584
17 libdispatch.dylib 0x00000001074e4bb8 _dispatch_worker_thread3 + 140
18 libsystem_pthread.dylib 0x00000001872762b8 _pthread_wqthread + 1288
19 libsystem_pthread.dylib 0x0000000187275da4 start_wqthread + 4

关于maxCacheSize

  1. 这个参数是指所有创建的文件达到maxCacheSize 还是总的下载(fragments)大小达到maxCacheSize

  2. 达到maxCacheSize 之后,会清除之前的缓存,继续缓存最新的下载数据吗

播放器支持 setHttpHeaders,但是 httpcache 暂时不支持

KSYMoviePlayerController
/**
 @abstract 发送http请求时需要header带上的字段
 @discussion 在调用prepareToPlay方法前调用生效
 @warning 该方法由金山云引入,不是原生系统接口
 @since Available in KSYMoviePlayerController 2.0.3 and later.
 */
-(void)setHttpHeaders:(NSDictionary *)headers;

crash in [NSNumber parseString:intoUInt64:]

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSNumber parseString:intoUInt64:]: unrecognized selector sent to class 0x112ab1320'
*** First throw call stack:
(
0 CoreFoundation 0x00000001131e634b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x0000000112c4e21e objc_exception_throw + 48
2 CoreFoundation 0x0000000113255e74 +[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3 CoreFoundation 0x000000011316bc15 forwarding + 1013
4 CoreFoundation 0x000000011316b798 _CF_forwarding_prep_0 + 120
5 YCVideo 0x000000011015b55c -[HTTPConnection parseRangeRequest:withContentLength:] + 825
6 YCVideo 0x000000011015c3c2 -[HTTPConnection sendResponseHeadersAndBody] + 263
7 YCVideo 0x000000011015f819 __55-[HTTPConnection responseHasAvailableData:contentInfo:]_block_invoke + 371
8 libdispatch.dylib 0x000000011432a980 _dispatch_call_block_and_release + 12
9 libdispatch.dylib 0x00000001143540cd _dispatch_client_callout + 8
10 libdispatch.dylib 0x0000000114331e6b _dispatch_queue_serial_drain + 236
11 libdispatch.dylib 0x0000000114332b9f _dispatch_queue_invoke + 1073
12 libdispatch.dylib 0x00000001143353b7 _dispatch_root_queue_drain + 720
13 libdispatch.dylib 0x000000011433508b _dispatch_worker_thread3 + 123
14 libsystem_pthread.dylib 0x00000001147035a2 _pthread_wqthread + 1299
15 libsystem_pthread.dylib 0x000000011470307d start_wqthread + 13
)
libc++abi.dylib: terminating with uncaught exception of type NSException

CPU 占用率过高

机型:iPhone 5C
系统:iOS 10.2

截图
default

切换视频播放CPU 基本飙到了 100%+

Crash in [MediaDownloader setURL:contentInfo:]

Thread 1:
0 libsystem_pthread.dylib 0x000000023aebfcd0 start_wqthread + 0

Thread 2 name: Dispatch queue: NSOperationQueue 0x2822f4ac0 (QOS: UNSPECIFIED)
Thread 2 Crashed:
0 libobjc.A.dylib 0x000000023a48f530 objc_msgSend + 16
1 YouJiang 0x00000001056293ac -[MediaDownloader setURL:contentInfo:] + 152
2 YouJiang 0x00000001056132c0 __45-[HTTPAsyncCacheReponse delayResponseHeaders]_block_invoke + 964
3 CFNetwork 0x000000023b870688 __75-[__NSURLSessionLocal taskForClass:request:uploadFile:bodyData:completion:]_block_invoke + 32
4 CFNetwork 0x000000023b884220 __49-[__NSCFLocalSessionTask _task_onqueue_didFinish]_block_invoke + 176
5 Foundation 0x000000023bd00f68 NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK + 16
6 Foundation 0x000000023bc0d420 -[NSBlockOperation main] + 72
7 Foundation 0x000000023bc0c908 -[__NSOperationInternal _start:] + 740
8 Foundation 0x000000023bd02cec __NSOQSchedule_f + 272
9 libdispatch.dylib 0x000000023acdca38 _dispatch_call_block_and_release + 24
10 libdispatch.dylib 0x000000023acdd7d4 _dispatch_client_callout + 16
11 libdispatch.dylib 0x000000023ac82018 _dispatch_continuation_pop$VARIANT$mp + 412
12 libdispatch.dylib 0x000000023ac816dc _dispatch_async_redirect_invoke + 600
13 libdispatch.dylib 0x000000023ac8e02c _dispatch_root_queue_drain + 372
14 libdispatch.dylib 0x000000023ac8e8d0 _dispatch_worker_thread2 + 128
15 libsystem_pthread.dylib 0x000000023aebd1b4 _pthread_wqthread + 464
16 libsystem_pthread.dylib 0x000000023aebfcd4 start_wqthread + 4

最近在使用的时候,首页列表切换播放视频的时候,有几率报这个异常

下载失败的时候 报线程的crash

libsystem_c.dylib`__sfvwrite:
-> 0x18c67c668 <+0>: stp x28, x27, [sp, #-0x60]!
0x18c67c66c <+4>: stp x26, x25, [sp, #0x10]
0x18c67c670 <+8>: stp x24, x23, [sp, #0x20]
0x18c67c674 <+12>: stp x22, x21, [sp, #0x30]
0x18c67c678 <+16>: stp x20, x19, [sp, #0x40]
0x18c67c67c <+20>: stp x29, x30, [sp, #0x50]

大大,麻烦帮忙解决下~

关于缓存的一点疑问

  • 就是开始播放后,开始下载缓存,会一直下载到全部缓存结束吗?
  • 可以暂停缓存下载吗?尤其是当网络发生切换时,当从wifi 切换到 移动网络,需要暂停播放,停止缓存,当网络切换到wifi, 继续播放,然后继续缓存
  • 可以自定义每次缓冲大小吗?当播放到当前缓存的时候,再缓冲下一个,想省流量。。。

发现crash

umeng log 如下

*** -[NSConcreteFileHandle truncateFileAtOffset:]: No space left on device
(null)
((
	0   CoreFoundation                      0x000000018f48a1d8 <redacted> + 148
	1   libobjc.A.dylib                     0x000000018dec455c objc_exception_throw + 56
	2   CoreFoundation                      0x000000018f48a108 <redacted> + 0
	3   Foundation                          0x000000018ff18750 <redacted> + 160
	4   myAPP                               0x100ae5248 myAPP + 11424328
	5   myAPP                               0x100aeac28 myAPP + 11447336
	6   myAPP                               0x100ad4bec myAPP + 11357164
	7   CFNetwork                           0x000000018fa8aa40 <redacted> + 32
	8   CFNetwork                           0x000000018faa2960 <redacted> + 296
	9   Foundation                          0x000000018ff4e754 <redacted> + 16
	10  Foundation                          0x000000018fe932c8 <redacted> + 96
	11  Foundation                          0x000000018fe838c4 <redacted> + 620
	12  Foundation                          0x000000018ff50b00 <redacted> + 228
	13  libdispatch.dylib                   0x000000018e3151c0 <redacted> + 16
	14  libdispatch.dylib                   0x000000018e323444 <redacted> + 928
	15  libdispatch.dylib                   0x000000018e3189a8 <redacted> + 652
	16  libdispatch.dylib                   0x000000018e32538c <redacted> + 572
	17  libdispatch.dylib                   0x000000018e3250ec <redacted> + 124
	18  libsystem_pthread.dylib             0x000000018e51e2b8 _pthread_wqthread + 1288
	19  libsystem_pthread.dylib             0x000000018e51dda4 start_wqthread + 4
)

dSYM UUID: ADA4BA32-7E5D-3990-9C37-1030D812BB74
CPU Type: arm64
Slide Address: 0x0000000100000000
Binary Image: myAPP
Base Address: 0x00000001000fc000

符号化之后为

 __45-[HTTPAsyncCacheReponse delayResponseHeaders]_block_invoke 
 -[MediaDownloader setURL:contentInfo:] 
-[MediaCacheWorker setContentInfo:] 
-[NSConcreteFileHandle truncateFileAtOffset:]: No space left on device

发现crash

umeng log 如下

Application received signal SIGSEGV
(null)
((
	0   CoreFoundation                      0x00000001865e3d50 <redacted> + 148
	1   libobjc.A.dylib                     0x0000000185af8528 objc_exception_throw + 56
	2   CoreFoundation                      0x00000001865e3c80 <redacted> + 0
	3   myAPP                              0x101245ae0 _ZN10h265_codec18storeNborByPunRx2NEjPNS_9TNborDataEiPNS_7TMVCandEi + 5973684
	4   libsystem_platform.dylib            0x000000018620bb34 _sigtramp + 36
	5   myAPP                              0x100c1fc88 myAPP + 12713096
	6   myAPP                              0x100c33a78 myAPP + 12794488
	7   myAPP                              0x100c34d78 myAPP + 12799352
	8   myAPP                              0x100c313c8 myAPP + 12784584
	9   CFNetwork                           0x0000000186d1a694 <redacted> + 76
	10  Foundation                          0x0000000186fae310 <redacted> + 16
	11  Foundation                          0x0000000186eee9e4 <redacted> + 72
	12  Foundation                          0x0000000186ede620 <redacted> + 848
	13  libdispatch.dylib                   0x0000000185f69048 <redacted> + 16
	14  libdispatch.dylib                   0x0000000185f706c8 <redacted> + 288
	15  libdispatch.dylib                   0x0000000185f69048 <redacted> + 16
	16  libdispatch.dylib                   0x0000000185f706c8 <redacted> + 288
	17  libdispatch.dylib                   0x0000000185f70574 <redacted> + 104
	18  Foundation                          0x0000000186faffe8 <redacted> + 376
	19  libdispatch.dylib                   0x0000000185f69048 <redacted> + 16
	20  libdispatch.dylib                   0x0000000185f713d4 <redacted> + 428
	21  libdispatch.dylib                   0x0000000185f6fcd4 <redacted> + 604
	22  libdispatch.dylib                   0x0000000185f761c8 <redacted> + 596
	23  libdispatch.dylib                   0x0000000185f75f10 <redacted> + 120
	24  libsystem_pthread.dylib             0x000000018620f130 _pthread_wqthread + 1268
	25  libsystem_pthread.dylib             0x000000018620ec30 start_wqthread + 4
)

dSYM UUID: E4715DC7-47A0-30E9-835B-B2828E83F685
CPU Type: arm64
Slide Address: 0x0000000100000000
Binary Image: myAPP
Base Address: 0x00000001001b0000

符号化之后的调用堆栈信息如下

 __31+[MediaDownloaderStatus shared]_block_invoke (in myAPP) + 248
 -[ActionWorker setActions:] (in myAPP) + 12
 -[ActionWorker processActionsWithHandler:] (in myAPP) + 1104
 -[HTTPAsyncCacheReponse delayResponseHeaders] (in myAPP) + 256

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.