Giter VIP home page Giter VIP logo

shepher's Issues

日志报错,什么原因?

org.I0Itec.zkclient.exception.ZkException: Unable to connect to zookeeper:2181
at org.I0Itec.zkclient.ZkConnection.connect(ZkConnection.java:71) ~[zkclient-0.9.jar!/:na]
at org.I0Itec.zkclient.ZkClient.connect(ZkClient.java:1227) ~[zkclient-0.9.jar!/:na]
at org.I0Itec.zkclient.ZkClient.(ZkClient.java:156) ~[zkclient-0.9.jar!/:na]
at org.I0Itec.zkclient.ZkClient.(ZkClient.java:130) ~[zkclient-0.9.jar!/:na]
at org.I0Itec.zkclient.ZkClient.(ZkClient.java:97) ~[zkclient-0.9.jar!/:na]
at com.xiaomi.shepher.util.ZkPool$ZkClientFactory.create(ZkPool.java:73) ~[shepher-service-1.0.jar!/:1.0]
at com.xiaomi.shepher.util.ZkPool$ZkClientFactory.create(ZkPool.java:68) ~[shepher-service-1.0.jar!/:1.0]
at org.apache.commons.pool2.BaseKeyedPooledObjectFactory.makeObject(BaseKeyedPooledObjectFactory.java:62) ~[commons-pool2-2.4.2.jar!/:2.4.2]
at org.apache.commons.pool2.impl.GenericKeyedObjectPool.create(GenericKeyedObjectPool.java:1041) ~[commons-pool2-2.4.2.jar!/:2.4.2]
at org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:357) ~[commons-pool2-2.4.2.jar!/:2.4.2]
at org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:279) ~[commons-pool2-2.4.2.jar!/:2.4.2]
at com.xiaomi.shepher.util.ZkPool.getZkClient(ZkPool.java:46) ~[shepher-service-1.0.jar!/:1.0]
at com.xiaomi.shepher.dao.NodeDAO.getChildren(NodeDAO.java:44) [shepher-service-1.0.jar!/:1.0]
at com.xiaomi.shepher.dao.NodeDAO$$FastClassBySpringCGLIB$$569c2375.invoke() [shepher-service-1.0.jar!/:1.0]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) [spring-core-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720) [spring-aop-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) [spring-aop-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) [spring-tx-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655) [spring-aop-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at com.xiaomi.shepher.dao.NodeDAO$$EnhancerBySpringCGLIB$$bbb3b177.getChildren() [shepher-service-1.0.jar!/:1.0]
at com.xiaomi.shepher.service.NodeService.getChildren(NodeService.java:70) [shepher-service-1.0.jar!/:1.0]
at com.xiaomi.shepher.controller.NodeController.home(NodeController.java:95) [shepher-web-1.0.jar!/:1.0]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_102]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_102]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_102]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) [spring-web-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) [spring-web-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) [spring-webmvc-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832) [spring-webmvc-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743) [spring-webmvc-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) [spring-webmvc-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) [spring-webmvc-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(Dispa^C
[root@shepher shepher-packaging-1.0-bin]# ^C
[root@shepher shepher-packaging-1.0-bin]# ^C
[root@shepher shepher-packaging-1.0-bin]# vim nohup.out
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87) [spring-web-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) [spring-web-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) [spring-web-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_102]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_102]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_102]
Caused by: java.net.UnknownHostException: zookeeper
at java.net.InetAddress.getAllByName0(InetAddress.java:1280) ~[na:1.8.0_102]
at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_102]
at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_102]
at org.apache.zookeeper.client.StaticHostProvider.(StaticHostProvider.java:61) ~[zookeeper-3.4.6.jar!/:3.4.6-1569965]
at org.apache.zookeeper.ZooKeeper.(ZooKeeper.java:445) ~[zookeeper-3.4.6.jar!/:3.4.6-1569965]
at org.apache.zookeeper.ZooKeeper.(ZooKeeper.java:380) ~[zookeeper-3.4.6.jar!/:3.4.6-1569965]
at org.I0Itec.zkclient.ZkConnection.connect(ZkConnection.java:69) ~[zkclient-0.9.jar!/:na]
... 107 common frames omitted

2019-09-06 11:24:53.181 INFO 44992 --- [nio-8089-exec-1] org.apache.zookeeper.ZooKeeper : Initiating client connection, connectString=zookeeper:2181 sessionTimeout=30000 watcher=org.I0Itec.zkclient.ZkClient@8036f31
2019-09-06 11:24:53.183 ERROR 44992 --- [nio-8089-exec-1] com.xiaomi.shepher.util.ZkPool : Get zkClient error

org.I0Itec.zkclient.exception.ZkException: Unable to connect to zookeeper:2181
at org.I0Itec.zkclient.ZkConnection.connect(ZkConnection.java:71) ~[zkclient-0.9.jar!/:na]
at org.I0Itec.zkclient.ZkClient.connect(ZkClient.java:1227) ~[zkclient-0.9.jar!/:na]
at org.I0Itec.zkclient.ZkClient.(ZkClient.java:156) ~[zkclient-0.9.jar!/:na]
at org.I0Itec.zkclient.ZkClient.(ZkClient.java:130) ~[zkclient-0.9.jar!/:na]
at org.I0Itec.zkclient.ZkClient.(ZkClient.java:97) ~[zkclient-0.9.jar!/:na]
at com.xiaomi.shepher.util.ZkPool$ZkClientFactory.create(ZkPool.java:73) ~[shepher-service-1.0.jar!/:1.0]
at com.xiaomi.shepher.util.ZkPool$ZkClientFactory.create(ZkPool.java:68) ~[shepher-service-1.0.jar!/:1.0]
"nohup.out" 5433L, 740423C 4061,2-9 74%
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_102]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_102]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_102]
Caused by: java.net.UnknownHostException: zookeeper
at java.net.InetAddress.getAllByName0(InetAddress.java:1280) ~[na:1.8.0_102]
at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_102]
at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_102]
at org.apache.zookeeper.client.StaticHostProvider.(StaticHostProvider.java:61) ~[zookeeper-3.4.6.jar!/:3.4.6-1569965]
at org.apache.zookeeper.ZooKeeper.(ZooKeeper.java:445) ~[zookeeper-3.4.6.jar!/:3.4.6-1569965]
at org.apache.zookeeper.ZooKeeper.(ZooKeeper.java:380) ~[zookeeper-3.4.6.jar!/:3.4.6-1569965]
at org.I0Itec.zkclient.ZkConnection.connect(ZkConnection.java:69) ~[zkclient-0.9.jar!/:na]
... 107 common frames omitted

2019-09-06 11:30:13.298 INFO 44992 --- [nio-8089-exec-6] org.apache.zookeeper.ZooKeeper : Initiating client connection, connectString=zookeeper:2181 sessionTimeout=30000 watcher=org.I0Itec.zkclient.ZkClient@256edbea
2019-09-06 11:30:13.300 ERROR 44992 --- [nio-8089-exec-6] com.xiaomi.shepher.util.ZkPool : Get zkClient error

org.I0Itec.zkclient.exception.ZkException: Unable to connect to zookeeper:2181
at org.I0Itec.zkclient.ZkConnection.connect(ZkConnection.java:71) ~[zkclient-0.9.jar!/:na]
at org.I0Itec.zkclient.ZkClient.connect(ZkClient.java:1227) ~[zkclient-0.9.jar!/:na]
at org.I0Itec.zkclient.ZkClient.(ZkClient.java:156) ~[zkclient-0.9.jar!/:na]
at org.I0Itec.zkclient.ZkClient.(ZkClient.java:130) ~[zkclient-0.9.jar!/:na]
at org.I0Itec.zkclient.ZkClient.(ZkClient.java:97) ~[zkclient-0.9.jar!/:na]
at com.xiaomi.shepher.util.ZkPool$ZkClientFactory.create(ZkPool.java:73) ~[shepher-service-1.0.jar!/:1.0]
at com.xiaomi.shepher.util.ZkPool$ZkClientFactory.create(ZkPool.java:68) ~[shepher-service-1.0.jar!/:1.0]
at org.apache.commons.pool2.BaseKeyedPooledObjectFactory.makeObject(BaseKeyedPooledObjectFactory.java:62) ~[commons-pool2-2.4.2.jar!/:2.4.2]
at org.apache.commons.pool2.impl.GenericKeyedObjectPool.create(GenericKeyedObjectPool.java:1041) ~[commons-pool2-2.4.2.jar!/:2.4.2]
at org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:357) ~[commons-pool2-2.4.2.jar!/:2.4.2]
at org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:279) ~[commons-pool2-2.4.2.jar!/:2.4.2]
at com.xiaomi.shepher.util.ZkPool.getZkClient(ZkPool.java:46) ~[shepher-service-1.0.jar!/:1.0]
at com.xiaomi.shepher.dao.NodeDAO.getData(NodeDAO.java:71) [shepher-service-1.0.jar!/:1.0]
at com.xiaomi.shepher.dao.NodeDAO$$FastClassBySpringCGLIB$$569c2375.invoke() [shepher-service-1.0.jar!/:1.0]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) [spring-core-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]

文件数据库管理

现在看来权限需要依赖mysql,对于大公司来说,员工比较多可以使用mysql,但对于小公司或者产品team来说,权限不会设置的那么细且权限数据并不会太多,是否可以考虑将支持一下内存数据库或者小文件数据库,这样可以减少mysql的依赖,且不必为了这个还需要安装一个mysql

Insecure Transport: Mail Transmission

Email email = new HtmlEmail();
email.setHostName(hostname);
email.setAuthenticator(new DefaultAuthenticator(username, password));
email.setSmtpPort(port);
email.setFrom(from, fromname);
email.setSubject(title);
email.setMsg(content);
email.addTo(mailAddress.split(mailAddressEndSeparator));
email.send();

Establishing an unencrypted connection to a mail server allows an attacker to carry out a man-in-the-middle attack and read all the mail transmissions.
SSL/TLS connection is a better choice

CAS搭建成功后跳转失败

CAS搭建成功,CAS登录成功,跳转到shepher首页失败,还需要更改什么配置文件,shepher需要设置成https吗

Docker 必须要指定 mysql 镜像的版本 5.x!!!

Docker 必须要指定 mysql 镜像的版本 5.x!!!

mysql:latest 当前的版本是 8.X 启动是会 NPE

Caused by: java.lang.NullPointerException: null
at com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:2997) ~[mysql-connector-java-5.1.39.jar:5.1.39]
at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1936) ~[mysql-connector-java-5.1.39.jar:5.1.39]
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1865) ~[mysql-connector-java-5.1.39.jar:5.1.39]
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1228) ~[mysql-connector-java-5.1.39.jar:5.1.39]
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253) ~[mysql-connector-java-5.1.39.jar:5.1.39]
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284) ~[mysql-connector-java-5.1.39.jar:5.1.39]
... 60 common frames omitted

Etcd support

Does Shepher have any plan to support Etcd? Or who plans to add this feature?

面包屑每次点击一个路径都是一次页面跳转

东西做的还挺好的,赞一个。提几个建议:

  1. 每次点击zk路径的面包屑都是一次页面跳转;
  2. 为何没有类似过去taobao的zkweb一样提供一个树状菜单让用户点击展开呢?
  3. 搜索框能否支持模糊搜索?

反射型xss

您好:
我是奇安信代码卫士的工作人员,在我们的开源代码检测项目中发现shepher存在一处反射型xss漏洞和重定向漏洞,详细信息如下:
图片
接收了请求中的referer请求头,而该请求头是不可信的,最后该参数用于重定向,且如果使用javascript://还可能导致xss漏洞

Start shepher failed.

Master branch.
Shepher start failed with this message:

sh bin/run.sh start
bin/run.sh: line 14: $'\r': command not found
bin/run.sh: line 16: $'\r': command not found
: No such file or directoryn
bin/run.sh: line 22: $'\r': command not found
bin/run.sh: line 46: syntax error near unexpected token `$'in\r''
'in/run.sh: line 46: `    case $OPT in

How to Import db/init.sql in to MySQL?

Hi, I've been searching for this since I am a newbie in Ubuntu, how to exactly import db/init.sql into MySQL? I've used sudo mysql -u my_username shepher < ~/shepher/db/init.sql but this ask me for a password Enter password: ERROR 1045 (28000): Access denied for user 'my_username@'localhost' (using password: YES) I simply don't know. How to correctly import db/init.sql into MySQL?

通过docker启动,访问网址直接报错了

Shepher Error Page
nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 3 milliseconds ago. The last packet sent successfully to the server was 3 milliseconds ago. ### The error may exist in com/xiaomi/shepher/dao/UserMapper.java (best guess) ### The error may involve com.xiaomi.shepher.dao.UserMapper.getByName ### The error occurred while executing a query ### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 3 milliseconds ago. The last packet sent successfully to the server was 3 milliseconds ago. ,click here to home page

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.