Giter Site home page Giter Site logo

autocard's Introduction

浙江大学自动健康打卡AutoCard

AUR Java Maven Spring GitHub stars GitHub forks


项目概述

本项目为浙江大学大学自动健康打卡研究学习项目,在完成首次手动打卡后,可以自动进行定时打卡。并通知打卡结果。本项目使用spring-boot、quartz和httpclient开发,使用maven进行项目管理,编译版本为jdk-11。支持多账户配置,支持利用github action。支持钉钉和邮箱推送打卡结果。支持使用github action无服务器打卡。

随着COVID-19风波的过去,该项目也该随之而去,特此归档

项目使用与声明

项目使用详细说明见wiki文档,本项目仅供学习交流使用,滥用造成的后果自行承担。

反馈

任何问题,欢迎加入Telegram交流群交流。喜欢的小伙伴就给个star支持一下吧。

autocard's People

Contributors

dependabot[bot] avatar gcs-zhn avatar mythologyli avatar wyxgoishin 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

autocard's Issues

WARNING: An illegal reflective access operation has occurred

WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.9.RELEASE)

[20220511 15:17:08] [main] INFO  org.gcszhn.autocard.App - Starting App v1.4.6 on GCS-ZHN with PID 3764 (D:\life_matters\project\java\git_project\public\AutoCard\release\autocard-1.4.6\autocard.jar started by GCS-ZHN in D:\life_matters\project\java\git_project\public\AutoCard)
[20220511 15:17:08] [main] INFO  org.gcszhn.autocard.App - No active profile set, falling back to default profiles: default
[20220511 15:17:08] [main] INFO  org.springframework.context.annotation.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@b2c9a9c: startup date [Wed May 11 15:17:08 GMT+08:00 2022]; root of context hierarchy
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (jar:file:/D:/life_matters/project/java/git_project/public/AutoCard/release/autocard-1.4.6/autocard.jar!/BOOT-INF/lib/spring-core-4.3.13.RELEASE.jar!/) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

功能请求:缓存计划打卡时间和打卡完成情况防止错过打卡

异常情况

例如,10 点整打卡任务开始,随机延时 15 分钟后执行打卡上报。如果在这 15 分钟内程序关闭再重新启动,则会错过今日的打卡上报,需要重新更改配置文件调整时间。

可能的改进方式

在打卡任务开始时,计算延时并添加一个执行打卡任务。同时,缓存执行打卡时间、是否已执行打卡(假)、打卡用户等必要信息。当执行打卡任务运行后,更新缓存中的是否已执行打卡为真。

如果在等待执行打卡途中发生程序重新启动,若重新启动的时间在执行打卡时间之前,则再次添加任务并等待执行;若重新启动的时间在执行打卡时间之后且未执行打卡,则立即执行打卡。

java.lang.ClassCastException: Identified object is not a String.

(base) PS D:\life_matters\project\java\git_project\public\AutoCard> java -jar target/autocard-1.4.8.jar --app.autoCard.immediate=true
WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.9.RELEASE)

[20220511 12:14:29] [main] INFO  top.gcszhn.autocard.App - Starting App v1.4.8 on GCS-ZHN with PID 1652 (D:\life_matters\project\java\git_project\public\AutoCard\target\autocard-1.4.8.jar started by GCS-ZHN in D:\life_matters\project\java\git_project\public\AutoCard)
[20220511 12:14:29] [main] INFO  top.gcszhn.autocard.App - No active profile set, falling back to default profiles: default
[20220511 12:14:29] [main] INFO  org.springframework.context.annotation.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@6200f9cb: startup date [Wed May 11 12:14:29 GMT+08:00 2022]; root of context hierarchy
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (jar:file:/D:/life_matters/project/java/git_project/public/AutoCard/target/autocard-1.4.8.jar!/BOOT-INF/lib/spring-core-4.3.13.RELEASE.jar!/) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[20220511 12:14:29] [main] INFO  org.quartz.impl.StdSchedulerFactory - Using default implementation for ThreadExecutor
[20220511 12:14:29] [main] INFO  org.quartz.simpl.SimpleThreadPool - Job execution threads will use class loader of thread: main
[20220511 12:14:29] [main] INFO  org.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
[20220511 12:14:29] [main] INFO  org.quartz.core.QuartzScheduler - Quartz Scheduler v.2.3.2 created.
[20220511 12:14:29] [main] INFO  org.quartz.simpl.RAMJobStore - RAMJobStore initialized.
[20220511 12:14:29] [main] INFO  org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.3.2) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

[20220511 12:14:29] [main] INFO  org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
[20220511 12:14:29] [main] INFO  org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.3.2
[20220511 12:14:29] [main] INFO  top.gcszhn.autocard.AppConfig - 用户配置已加载
[20220511 12:14:29] [main] INFO  top.gcszhn.autocard.AppConfig - OCR引擎为D4_OCR
[20220511 12:14:29] [main] INFO  top.gcszhn.autocard.service.MailService - Mail sender is ***
[20220511 12:14:29] [main] INFO  top.gcszhn.autocard.App - 2 user job added
[20220511 12:14:29] [main] ERROR top.gcszhn.autocard.App - Identified object is not a String.
java.lang.ClassCastException: Identified object is not a String.
        at org.quartz.utils.StringKeyDirtyFlagMap.getString(StringKeyDirtyFlagMap.java:378) ~[quartz-2.3.2.jar!/:?]
        at top.gcszhn.autocard.service.AutoCardJob.execute(AutoCardJob.java:56) ~[classes!/:1.4.8]
        at top.gcszhn.autocard.App.lambda$start$0(App.java:77) ~[classes!/:1.4.8]
        at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?]
        at top.gcszhn.autocard.App.start(App.java:71) ~[classes!/:1.4.8]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:564) ~[?:?]
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:701) ~[spring-beans-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) ~[spring-beans-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) ~[spring-beans-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) ~[spring-beans-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) ~[spring-boot-1.5.9.RELEASE.jar!/:1.5.9.RELEASE]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) ~[spring-boot-1.5.9.RELEASE.jar!/:1.5.9.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) ~[spring-boot-1.5.9.RELEASE.jar!/:1.5.9.RELEASE]
        at top.gcszhn.autocard.App.main(App.java:114) ~[classes!/:1.4.8]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:564) ~[?:?]
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) ~[autocard-1.4.8.jar:1.4.8]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) ~[autocard-1.4.8.jar:1.4.8]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) ~[autocard-1.4.8.jar:1.4.8]
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) ~[autocard-1.4.8.jar:1.4.8]
AutoCardService stopped

使用github Action的一个小bug

在按照说明文档配置好github Action后观察日志一直和仓库中说明的图片不一致,后来发现是因为在execute函数中获取最大执行次数时出现问题。按照原说明文档的说法容易让人理解为不配置最大执行次数的密钥也可以正常运行,默认为3次,但是如果不配置该密钥,使用github Action时,程序会尝试将空字符串""转换为数字引发报错,个人已经通过配置密钥的方式解决。

固定打卡地点

可以固定打卡为杭州吗?源码里面的打卡地点 area 好像是从 oldInfo 里面获取的

No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

Hello,校友好!
很感谢你写的这个打卡程序,就是我今天用的时候发现提醒邮件发送失败,报错信息如下:

[20220205 00:32:56] [DefaultQuartzScheduler_Worker-1] ERROR org.gcszhn.autocard.service.MailService - Could not connect to SMTP host: smtp.zju.edu.cn, port: 994
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
ParentRunner.java:329
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
ParentRunner.java:66
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
ParentRunner.java:293
	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
RunBeforeTestClassCallbacks.java:61
	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
RunAfterTestClassCallbacks.java:70
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
ParentRunner.java:306
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
ParentRunner.java:413
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
SpringJUnit4ClassRunner.java:190
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:529)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:756)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:452)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
	at java.base/sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:170)
HandshakeContext.java:170
	at java.base/sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:103)
ClientHandshakeContext.java:103
	at java.base/sun.security.ssl.TransportContext.kickstart(TransportContext.java:222)
TransportContext.java:222
	at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:449)
SSLSocketImpl.java:449
	at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:427)
SSLSocketImpl.java:427
	at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549)
	at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:354)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:237)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
SMTPTransport.java:1927
	... 40 more

我想问一下这个报错可能是和啥有关呀?是和我服务器设置有关吗?

表单校验失败

Bug Description

这几天打卡总是失败,日志里面说:

[***0***101*** 0***:06:***4] [main] ERROR top.gcszhn.autocard.service.AutoCardService - 表单校验失败,请检查健康打卡页面是否更新或等待一会再次尝试,若更新请删除缓存文件并重启打卡程序

修改了 AUTOCARD_CACHE_FLAG 的值之后还是报错

healthreport.zju.edu.cn:443 failed to respond

当提交打卡无响应时,会出现如下报错,且无法自动尝试重新打卡,无法收到打卡失败通知

[20220427 08:10:46] [DefaultQuartzScheduler_Worker-9] INFO  org.gcszhn.autocard.service.AutoCardService - 准备提交打卡 ***
[20220427 08:10:46] [DefaultQuartzScheduler_Worker-9] INFO  org.gcszhn.autocard.service.ZJUClientService - 正在登录 ***
[20220427 08:10:48] [DefaultQuartzScheduler_Worker-9] INFO  org.gcszhn.autocard.service.ZJUClientService - 登录成功,学工号:***,姓名:***
[20220427 08:11:22] [DefaultQuartzScheduler_Worker-9] INFO  org.gcszhn.autocard.service.AutoCardService - 表单校验通过
[20220427 08:11:37] [DefaultQuartzScheduler_Worker-9] ERROR org.gcszhn.autocard.utils.HttpClientUtils - healthreport.zju.edu.cn:443 failed to respond
org.apache.http.NoHttpResponseException: healthreport.zju.edu.cn:443 failed to respond
	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:141) ~[httpclient-4.5.13.jar!/:4.5.13]
	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) ~[httpclient-4.5.13.jar!/:4.5.13]
	at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) ~[httpcore-4.4.8.jar!/:4.4.8]
	at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163) ~[httpcore-4.4.8.jar!/:4.4.8]
	at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:157) ~[httpclient-4.5.13.jar!/:4.5.13]
	at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) ~[httpcore-4.4.8.jar!/:4.4.8]
	at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) ~[httpcore-4.4.8.jar!/:4.4.8]
	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272) ~[httpclient-4.5.13.jar!/:4.5.13]
	at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) ~[httpclient-4.5.13.jar!/:4.5.13]
	at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) ~[httpclient-4.5.13.jar!/:4.5.13]
	at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) ~[httpclient-4.5.13.jar!/:4.5.13]
	at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) ~[httpclient-4.5.13.jar!/:4.5.13]
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) ~[httpclient-4.5.13.jar!/:4.5.13]
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108) ~[httpclient-4.5.13.jar!/:4.5.13]
	at org.gcszhn.autocard.utils.HttpClientUtils.getResponse(HttpClientUtils.java:190) [classes!/:1.4.5]
	at org.gcszhn.autocard.utils.HttpClientUtils.doPost(HttpClientUtils.java:250) [classes!/:1.4.5]
	at org.gcszhn.autocard.utils.HttpClientUtils.doPostText(HttpClientUtils.java:307) [classes!/:1.4.5]
	at org.gcszhn.autocard.service.AutoCardService.submit(AutoCardService.java:205) [classes!/:1.4.5]
	at org.gcszhn.autocard.service.AutoCardJob.execute(AutoCardJob.java:69) [classes!/:1.4.5]
	at org.gcszhn.autocard.service.AutoCardJob.execute(AutoCardJob.java:37) [classes!/:1.4.5]
	at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [quartz-2.3.2.jar!/:?]
	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.3.2.jar!/:?]
[20220427 08:11:37] [DefaultQuartzScheduler_Worker-9] ERROR org.gcszhn.autocard.service.AutoCardJob - null

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.