Coder Social home page Coder Social logo

marswin / marsdaemon Goto Github PK

View Code? Open in Web Editor NEW
3.1K 173.0 823.0 1.04 MB

A lite library, you can make your project depend it easily, and your project will be UNDEAD (contains api from 9 to 23, lol).

License: Apache License 2.0

Java 76.93% Makefile 1.23% C 21.84%

marsdaemon's Introduction

MarsDaemon

It is a lite library, you can make your project depend it easily, and your project will be UNDEAD.

  • support to keep alive from Android_API 9 to Android_API 23
  • support to keep alive in most of devices(contains Sumsung\Huawei\Meizu\Mi\Nexus..)
  • support to keep alive in FORCE_CLOSE from SystemSettings and MEMORY_CLEAN from third-part apps (such like CleanMaster\360 and so on)
  • support to keep BOOT_RECEIVER work well simplely

my Blog in Chinese here: http://blog.csdn.net/marswin89/article/details/50917098

Version

1.0

Installation

STEP1

make your project depend on LibMarsdaemon, and regist 2 Service and 2 BroadcastReceiver in your manifests in 2 different process.

<service android:name=".Service1" android:process=":process1"/>
<receiver android:name=".Receiver1" android:process=":process1"/>
<service android:name=".Service2" android:process=":process2"/>
<receiver android:name=".Receiver2" android:process=":process2"/>

Service1 is the Service which you want to be undead, you can do somethings in it.

But the others is used by Marsdaemon, so DONNOT do anything inside.

STEP2

make your application extends DaemonApplication and override the method getDaemonConfigurations(). Return back the confugirations.

@Override
protected DaemonConfigurations getDaemonConfigurations() {
    DaemonConfigurations.DaemonConfiguration configuration1 = new DaemonConfigurations.DaemonConfiguration("com.marswin89.marsdaemon.demo:process1", Service1.class.getCanonicalName(), Receiver1.class.getCanonicalName());
    DaemonConfigurations.DaemonConfiguration configuration2 = new DaemonConfigurations.DaemonConfiguration("com.marswin89.marsdaemon.demo:process2", Service2.class.getCanonicalName(), Receiver2.class.getCanonicalName());
    DaemonConfigurations.DaemonListener listener = new MyDaemonListener();
    //return new DaemonConfigurations(configuration1, configuration2);//listener can be null
    return new DaemonConfigurations(configuration1, configuration2, listener);
}

if you want to override attachBaseContext you will find it had been defined final by me. you can override attachBaseContextByDaemon instead it.

see more details in MyApplication1 in Demo

if your application has extends another application, you should create a DaemonClient and perfrom it in attachBaseContext(), DONOT forget perform super.attachBaseContext() before!
private DaemonClient mDaemonClient;
@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    mDaemonClient = new DaemonClient(createDaemonConfigurations());
    mDaemonClient.onAttachBaseContext(base);
}

see more details in MyApplication2 in DemoMarsdaemon

STEP3

Launch the Service once, and try to kill it.

Contact me

Email: [email protected]

License

Copyright (C) 2015, Mars Kwok

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

marsdaemon's People

Contributors

marswin 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  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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

marsdaemon's Issues

HTC M9测试

尝试使用HTC安全助手和设置里面的应用管理来杀程序,发现确实杀不死,大神很棒!

MX4 Android 5.1不能守护

魅族4,Android 5.1 API22 直接使用系统的一键清理无法守护,但是在设置里杀死进程却可以守护

使用eclipse 打debug包 会不断的自动挂掉,然后一直重启挂掉,不到一分钟手机就烫了。 用AS则没有这个问题,请问是什么原因呢?日志已贴出,大神求解

1.reapeattimes 是我自己的变量

  1. Watch >>>>CHILD<<<< Dead !!! 这个感觉是自己杀的么?
    3.No JNI_OnLoad found in /data/app-lib/com.marswin89.marsdaemon.demo-1/libdaemon_api20.so这句用AS打出的版本也会有 但AS的不会自己启动就挂

04-12 14:55:16.032: D/Daemon(20585): zombie process name is mars_d, and number is 0, killing...
04-12 14:55:16.072: E/Daemon(20585): Watch >>>>CHILD<<<< Dead !!!
04-12 14:55:16.082: I/Process(20585): Sending signal. PID: 20585 SIG: 9
04-12 14:55:17.752: D/dalvikvm(20716): Trying to load lib /data/app-lib/com.marswin89.marsdaemon.demo-1/libdaemon_api20.so 0x424929c8
04-12 14:55:17.752: D/dalvikvm(20716): Added shared lib /data/app-lib/com.marswin89.marsdaemon.demo-1/libdaemon_api20.so 0x424929c8
04-12 14:55:17.752: D/dalvikvm(20716): No JNI_OnLoad found in /data/app-lib/com.marswin89.marsdaemon.demo-1/libdaemon_api20.so 0x424929c8, skipping init
04-12 14:55:17.752: V/Service1(20716): Service1 onStartCommand
04-12 14:55:17.752: I/Service1(20716): reapeattimes = 0
04-12 14:55:17.752: V/Service1(20716): Service1 onStart
04-12 14:55:17.762: V/Service1(20716): Service1 onStartCommand
04-12 14:55:17.762: I/Service1(20716): reapeattimes = 0
04-12 14:55:17.762: V/Service1(20716): Service1 onStart
04-12 14:55:17.762: V/Service1(20716): Service1 onStartCommand
04-12 14:55:17.762: I/Service1(20716): reapeattimes = 0
04-12 14:55:17.762: V/Service1(20716): Service1 onStart
04-12 14:55:17.762: V/Service1(20716): Service1 onStartCommand
04-12 14:55:17.762: I/Service1(20716): reapeattimes = 0
04-12 14:55:17.762: V/Service1(20716): Service1 onStart
04-12 14:55:17.762: V/Service1(20716): Service1 onStartCommand
04-12 14:55:17.762: I/Service1(20716): reapeattimes = 0
04-12 14:55:17.762: V/Service1(20716): Service1 onStart
04-12 14:55:17.772: V/Service1(20716): Service1 onStartCommand
04-12 14:55:17.772: I/Service1(20716): reapeattimes = 0
04-12 14:55:17.772: V/Service1(20716): Service1 onStart
04-12 14:55:17.772: V/Service1(20716): Service1 onStartCommand
04-12 14:55:17.772: I/Service1(20716): reapeattimes = 0
04-12 14:55:17.772: V/Service1(20716): Service1 onStart
04-12 14:55:17.772: V/Service1(20716): Service1 onStartCommand
04-12 14:55:17.772: I/Service1(20716): reapeattimes = 0
04-12 14:55:17.772: V/Service1(20716): Service1 onStart
04-12 14:55:17.772: D/Daemon(20716): zombie process name is mars_d, and number is 0, killing...
04-12 14:55:17.792: V/Service1(20716): Service1 onStartCommand
04-12 14:55:17.792: I/Service1(20716): reapeattimes = 0
04-12 14:55:17.792: V/Service1(20716): Service1 onStart
04-12 14:55:17.822: E/Daemon(20716): Watch >>>>CHILD<<<< Dead !!!
04-12 14:55:17.822: I/Process(20716): Sending signal. PID: 20716 SIG: 9
04-12 14:55:18.182: D/dalvikvm(20760): Trying to load lib /data/app-lib/com.marswin89.marsdaemon.demo-1/libdaemon_api20.so 0x4248a1d0
04-12 14:55:18.182: D/dalvikvm(20760): Added shared lib /data/app-lib/com.marswin89.marsdaemon.demo-1/libdaemon_api20.so 0x4248a1d0
04-12 14:55:18.182: D/dalvikvm(20760): No JNI_OnLoad found in /data/app-lib/com.marswin89.marsdaemon.demo-1/libdaemon_api20.so 0x4248a1d0, skipping init
04-12 14:55:18.182: V/Service1(20760): Service1 onStartCommand
04-12 14:55:18.182: I/Service1(20760): reapeattimes = 0
04-12 14:55:18.182: V/Service1(20760): Service1 onStart
04-12 14:55:18.202: D/Daemon(20760): zombie process name is mars_d, and number is 0, killing...
04-12 14:55:18.232: V/Service1(20760): Service1 onStartCommand
04-12 14:55:18.232: I/Service1(20760): reapeattimes = 0
04-12 14:55:18.232: V/Service1(20760): Service1 onStart
04-12 14:55:18.252: E/Daemon(20760): Watch >>>>CHILD<<<< Dead !!!
04-12 14:55:18.252: I/Process(20760): Sending signal. PID: 20760 SIG: 9
04-12 14:55:19.712: D/Daemon(20890): zombie process name is mars_d, and number is 0, killing...
04-12 14:55:19.742: V/Service1(20890): Service1 onStartCommand
04-12 14:55:19.742: I/Service1(20890): reapeattimes = 0
04-12 14:55:19.742: V/Service1(20890): Service1 onStart
04-12 14:55:19.752: E/Daemon(20890): Watch >>>>CHILD<<<< Dead !!!
04-12 14:55:19.762: I/Process(20890): Sending signal. PID: 20890 SIG: 9
04-12 14:55:21.122: D/dalvikvm(21028): Trying to load lib /data/app-lib/com.marswin89.marsdaemon.demo-1/libdaemon_api20.so 0x42490e20
04-12 14:55:21.132: V/Service1(21028): Service1 onStartCommand
04-12 14:55:21.132: I/Service1(21028): reapeattimes = 0
04-12 14:55:21.132: V/Service1(21028): Service1 onStart
04-12 14:55:21.132: D/dalvikvm(21028): Added shared lib /data/app-lib/com.marswin89.marsdaemon.demo-1/libdaemon_api20.so 0x42490e20
04-12 14:55:21.132: D/dalvikvm(21028): No JNI_OnLoad found in /data/app-lib/com.marswin89.marsdaemon.demo-1/libdaemon_api20.so 0x42490e20, skipping init
04-12 14:55:21.172: D/Daemon(21028): zombie process name is mars_d, and number is 0, killing...
04-12 14:55:21.212: V/Service1(21028): Service1 onStartCommand
04-12 14:55:21.212: I/Service1(21028): reapeattimes = 0
04-12 14:55:21.212: V/Service1(21028): Service1 onStart
04-12 14:55:21.242: E/Daemon(21028): Watch >>>>CHILD<<<< Dead !!!

华为p8不行

据说华为有自己的进程冻结技术,QQ、微信、支付宝等都是通过加入白名单存活的。

Android 9上起不了服务

在Android 9上,DaemonStrategy23的:
initBroadcastParcel(context, configs.DAEMON_ASSISTANT_CONFIG.RECEIVER_NAME);
sendBroadcastByAmsBinder();
会爆出 Unable to find app for caller android.app.IApplicationThread

Error:(26, 24) Cannot resolve corresponding JNI function

在NativeDaemonAPI21和NativeDaemonAPI20中android studio提示:
Error:(26, 24) Cannot resolve corresponding JNI function Java_com_marswin89_marsdaemon_nativ_NativeDaemonAPI20_doDaemon

这行 public native void doDaemon(String pkgName, String svcName, String daemonPath);

华为荣耀6plus 运行demo后一直logcat输出如下错误

华为荣耀6plus 运行demo后一直logcat输出如下错误
/com.marswin89.marsdaemon.demo W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=cortex-a15 --instruction-set-features=default --dex-file=/data/app/com.marswin89.marsdaemon.demo-2/split_lib_dependencies_apk.apk --oat-file=/data/dalvik-cache/arm/data@[email protected]@[email protected]) because non-0 exit status

64位机型报错

华为荣耀7,5.0系统,接入后每次回调接口都报错,提示找不到64位so文件,求解决。

华为Android7.0无效

实测,华为P9,Android7.0无效,清理内存或者强杀后都无法重新启动,是不兼容7.0吗?

Not working after Process.killProcess

Hey,
My app will killProcess proactively when exit app, and my Service can auto start on majority of devices. But not working for Samsung Note4.
I tried MarsDaemon, not work either. Any idea can help me? Thanks for any reply.

attachBaseContext 里面方法的执行顺序问题?

大神 您好!
我在使用你的库,请问在 attachBaseContext 方法里面拆分dex ,是应该先于 守护进程调用么?

eg:
@OverRide
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
DaemonUtils.start(base);
MultiDex.install(this);
}

代码混淆后不起作用

测试demo发现,debug包无法force stop,但是release包可以,是不是需要配置proguard文件?

小米5 7.0不行还会造成跨进程读取数据崩溃

先膜拜,楼主好,我在项目中用这个库在大部分手机上都是正常的,但是在小米5 系统7.0 ,miui8.2稳定版上不仅不可能重启还造成我其他进程跨进程读取数据崩溃,希望楼主能调教下小米5……

NoSuchMethodError thrown by 'void com.marswin89.marsdaemon.nativ.NativeDaemonAPI21.doDaemon(java.lang.String, java.lang.String, java.lang.String, java.lang.String):-2'

at com.marswin89.marsdaemon.nativ.NativeDaemonAPI21.doDaemon(Native method)
01-03 11:32:38.548 12822-12859/com.focustech.android.mt.parent:core A/art: art/runtime/runtime.cc:286] at com.marswin89.marsdaemon.strategy.DaemonStrategy21$1.run(DaemonStrategy21.java:51)
01-03 11:32:38.548 12822-12859/com.focustech.android.mt.parent:core A/art: art/runtime/runtime.cc:286] Pending exception java.lang.NoSuchMethodError thrown by 'void com.marswin89.marsdaemon.nativ.NativeDaemonAPI21.doDaemon(java.lang.String, java.lang.String, java.lang.String, java.lang.String):-2'
01-03 11:32:38.548 12822-12859/com.focustech.android.mt.parent:core A/art: art/runtime/runtime.cc:286] java.lang.NoSuchMethodError: no non-static method "Lcom/marswin89/marsdaemon/nativ/NativeDaemonAPI21;.onDaemonDead()V"
01-03 11:32:38.548 12822-12859/com.focustech.android.mt.parent:core A/art: art/runtime/runtime.cc:286] at void com.marswin89.marsdaemon.nativ.NativeDaemonAPI21.doDaemon(java.lang.String, java.lang.String, java.lang.String, java.lang.String) (NativeDaemonAPI21.java:-2)
01-03 11:32:38.548 12822-12859/com.focustech.android.mt.parent:core A/art: art/runtime/runtime.cc:286] at void com.marswin89.marsdaemon.strategy.DaemonStrategy21$1.run() (DaemonStrategy21.java:51)
01-03 11:32:38.548 12822-12859/com.focustech.android.mt.parent:core A/art: art/runtime/runtime.cc:286] Dumping all threads without appropriate locks held: thread list lock mutator lock

楼主博客测试用的都是旧手机

如题,新手机都更新了杀进程方法(我指第三方厂商),楼主主要方案都是针对原生的系统,所以,效果不好,我司的手机基本都不行

华为系统好像是不行

但是我有点搞不清楚美团知乎智联之类的APP怎么做到的,即使开发者服务里全部杀死,过段时间仍然重启了。

重启手机后台服务没有自动启动

有监听手机关机、解锁、网络变化

去设置 PackageUtils.setComponentDefault(context, "android.intent.action.BOOT_COMPLETED");
重启手机后台服务没有自动启动

乐视手机测试不通过

在乐视手机上杀死一个进程,另一个进程并不会被重启,两个进程都是可以被杀掉的,所有并没有实现进程守护!

有些手机可以,有些手机说so包缺失

Process: cn.mark.frame:process2, PID: 6072
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/cn.mark.frame-1/base.apk"],nativeLibraryDirectories=[/data/app/cn.mark.frame-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libdaemon_api21.so"

Process: cn.mark.frame:process1, PID: 6053
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/cn.mark.frame-1/base.apk"],nativeLibraryDirectories=[/data/app/cn.mark.frame-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libdaemon_api21.so"

小米4,whetstone.activity: java.lang.NoSuchMethodException:

09-27 16:53:40.281 1719-1745/? E/whetstone.activity: java.lang.NoSuchMethodException: com.android.server.am.ActivityManagerService#clearDeadAppFromNative()#exact
at miui.util.ReflectionUtils.findMethodExact(ReflectionUtils.java:242)
at com.miui.whetstone.server.WhetstoneActivityManagerService.handleClearDeadAppFromNative(WhetstoneActivityManagerService.java:246)
at com.miui.whetstone.server.WhetstoneActivityManagerService.access$400(WhetstoneActivityManagerService.java:51)
at com.miui.whetstone.server.WhetstoneActivityManagerService$PromoteLevelManagerHandler.handleMessage(WhetstoneActivityManagerService.java:504)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.os.HandlerThread.run(HandlerThread.java:61)

混淆以后后台进程一直出错,提示进程终止

app混淆以后,华为荣耀6 后台进程一直提示进程终止,看了后台进程,都是0.0M一直在重启,又死掉!不知道怎么解决,proguard-rules也进行配置过了!希望作者能提供一份比较好的配置方案!谢谢

重复走onCreate(),好奇怪

那个application 经常重复走onCreate(),好奇怪啊;
08-23 11:48:07.140 20425-20425/com.alarmdemo E/TAG: MyApplication---onCreate()
08-23 11:48:07.630 20503-20503/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:08.330 20586-20586/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:09.140 20663-20663/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:10.220 20770-20770/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:10.750 20927-20927/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:11.490 20984-20984/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:12.130 21082-21082/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:12.670 21138-21138/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:13.440 21191-21191/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:14.010 21244-21244/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:14.560 21280-21280/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:15.220 21309-21309/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:15.740 21344-21344/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:16.210 21371-21371/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:16.650 21405-21405/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:17.200 21434-21434/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:17.720 21467-21467/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:18.200 21496-21496/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:18.920 21529-21529/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:19.420 21559-21559/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:20.000 21592-21592/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:20.450 21621-21621/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:21.050 21654-21654/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:21.510 21683-21683/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:22.080 21716-21716/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:22.630 21744-21744/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:23.190 21776-21776/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:23.630 21805-21805/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:24.180 21836-21836/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:24.660 21866-21866/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:25.300 21895-21895/? E/TAG: MyApplication---onCreate()
08-23 11:48:25.780 21924-21924/? E/TAG: MyApplication---onCreate()
08-23 11:48:26.350 21957-21957/com.alarmdemo:process1 E/TAG: MyApplication---onCreate()
08-23 11:48:26.850 21987-21987/com.alarmdemo:process2 E/TAG: MyApplication---onCreate()
08-23 11:48:27.380 22020-22020/? E/TAG: MyApplication---onCreate()
08-23 11:48:27.870 22054-22054/? E/TAG: MyApplication---onCreate()
你们也是这样吗?

怎样退出进程守护

启动MarsDaemon之后,如果想主动结束程序进程(包括守护进程),怎样实现?

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.