kxsystems / javakdb Goto Github PK
View Code? Open in Web Editor NEWUsing Java with kdb+
Home Page: https://code.kx.com/q/interfaces
License: Apache License 2.0
Using Java with kdb+
Home Page: https://code.kx.com/q/interfaces
License: Apache License 2.0
Submitting to sonar can produce a warning in solar
"Property 'sonar.jacoco.reportPath' is no longer supported. Use JaCoCo's xml report and sonar-jacoco plugin."
Below has recreation & output
docker run -it -v C:\Users\sshanks\Development\javakdb:/source --rm openjdk:11 /bin/bash
mkdir -p build/classes
javac -d build/classes src/kx/c.java src/kx/examples/Feed.java src/kx/examples/QueryResponse.java src/kx/examples/Subscriber.java src/kx/examples/Server.java src/kx/examples/TypesMapping.java src/kx/examples/GridViewer.java
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
src/kx/c.java:1402: warning: [deprecation] Boolean(boolean) in Boolean has been deprecated
public static Object[] NULL={null,new Boolean(false),new UUID(0,0),null,new Byte((byte)0),new Short(Short.MIN_VALUE),new Integer(ni),new Long(nj),new Float(nf),new Double(nf),new Character(' '),"",
^
src/kx/c.java:1402: warning: [deprecation] Byte(byte) in Byte has been deprecated
public static Object[] NULL={null,new Boolean(false),new UUID(0,0),null,new Byte((byte)0),new Short(Short.MIN_VALUE),new Integer(ni),new Long(nj),new Float(nf),new Double(nf),new Character(' '),"",
^
src/kx/c.java:1402: warning: [deprecation] Short(short) in Short has been deprecated
public static Object[] NULL={null,new Boolean(false),new UUID(0,0),null,new Byte((byte)0),new Short(Short.MIN_VALUE),new Integer(ni),new Long(nj),new Float(nf),new Double(nf),new Character(' '),"",
^
src/kx/c.java:1402: warning: [deprecation] Integer(int) in Integer has been deprecated
public static Object[] NULL={null,new Boolean(false),new UUID(0,0),null,new Byte((byte)0),new Short(Short.MIN_VALUE),new Integer(ni),new Long(nj),new Float(nf),new Double(nf),new Character(' '),"",
^
src/kx/c.java:1402: warning: [deprecation] Long(long) in Long has been deprecated
public static Object[] NULL={null,new Boolean(false),new UUID(0,0),null,new Byte((byte)0),new Short(Short.MIN_VALUE),new Integer(ni),new Long(nj),new Float(nf),new Double(nf),new Character(' '),"",
^
src/kx/c.java:1402: warning: [deprecation] Float(double) in Float has been deprecated
public static Object[] NULL={null,new Boolean(false),new UUID(0,0),null,new Byte((byte)0),new Short(Short.MIN_VALUE),new Integer(ni),new Long(nj),new Float(nf),new Double(nf),new Character(' '),"",
^
src/kx/c.java:1402: warning: [deprecation] Double(double) in Double has been deprecated
public static Object[] NULL={null,new Boolean(false),new UUID(0,0),null,new Byte((byte)0),new Short(Short.MIN_VALUE),new Integer(ni),new Long(nj),new Float(nf),new Double(nf),new Character(' '),"",
^
src/kx/c.java:1402: warning: [deprecation] Character(char) in Character has been deprecated
public static Object[] NULL={null,new Boolean(false),new UUID(0,0),null,new Byte((byte)0),new Short(Short.MIN_VALUE),new Integer(ni),new Long(nj),new Float(nf),new Double(nf),new Character(' '),"",
^
src/kx/examples/Feed.java:12: warning: [deprecation] Double(double) in Double has been deprecated
Object[] row={new c.Timespan(),"SYMBOL",new Double(93.5),new Long(300)};
^
src/kx/examples/Feed.java:12: warning: [deprecation] Long(long) in Long has been deprecated
Object[] row={new c.Timespan(),"SYMBOL",new Double(93.5),new Long(300)};
Using a non-existent key on a Flip throws a java.lang.ArrayIndexOutOfBoundsException. Should prob document in code (so that users expect it) or change.
String[] x = new String[] {"Key"};
String[][] y = new String[][] {{"Value1","Value2","Value3"}};
c.Dict dict = new c.Dict(x, y);
c.Flip flip = new c.Flip(dict);
flip.at("NOT FOUND");
[WARNING] /C:/Users/sshanks/Development/javakdb/src/test/java/kx/cTest.java:[25,29] Byte(byte) in java.lang.Byte has been deprecated
[WARNING] /C:/Users/sshanks/Development/javakdb/src/test/java/kx/cTest.java:[29,29] Float(double) in java.lang.Float has been deprecated
[WARNING] /C:/Users/sshanks/Development/javakdb/src/test/java/kx/cTest.java:[49,29] Byte(byte) in java.lang.Byte has been deprecated
[WARNING] /C:/Users/sshanks/Development/javakdb/src/test/java/kx/cTest.java:[53,29] Float(double) in java.lang.Float has been deprecated
I am using javakdb-1.0
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running kx.cTest
discarded unexpected incoming async msg!
0
true
0
0
0.0
Tests run: 85, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 0.152 sec <<< FAILURE!
testSerializeDeserializeDateArray(kx.cTest) Time elapsed: 0.003 sec <<< FAILURE!
java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertTrue(Assert.java:52)
at kx.cTest.testSerializeDeserializeDateArray(cTest.java:695)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
testSerializeDeserializeDate(kx.cTest) Time elapsed: 0.001 sec <<< FAILURE!
java.lang.AssertionError: expected: java.sql.Date<4707-11-29> but was: java.sql.Date<4707-11-29>
at org.junit.Assert.fail(Assert.java:88)
at org.junit.Assert.failNotEquals(Assert.java:743)
at org.junit.Assert.assertEquals(Assert.java:118)
at org.junit.Assert.assertEquals(Assert.java:144)
at kx.cTest.testSerializeDeserializeDate(cTest.java:380)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
Results :
Failed tests: testSerializeDeserializeDateArray(kx.cTest)
testSerializeDeserializeDate(kx.cTest): expected: java.sql.Date<4707-11-29> but was: java.sql.Date<4707-11-29>
Tests run: 85, Failures: 2, Errors: 0, Skipped: 0
Currently using a Makefile, which some Windows based java devs may not have installed or be knowledgeable on.
One of the most popular now for Java is Maven, which also helps out in package management/versioning/etc.
The move from some docs previously located in code.kx.com to repo may have produced duplicate info & dropped links.
Can be confusing.
Currently docs/whitepaper/README.md is present, but dont see any links to it.
https://docs.sonarqube.org/latest/setup/get-started-2-minutes/
There also a cloud instance - static anaylse/etc of java code.
Various companies use sonar as a quality gate, in permitting code to reach production. Sonar will provide details on possible bugs, code smells (conflicting code against typical Java best practice & ease of understanding the code) and levels of test coverage.
May be worth splitting examples via multi-module project https://mkyong.com/maven/maven-how-to-create-a-multi-module-project/
Currently examples are packaged with the api.
Look at serialization to little endian format rather than big endian
Depends on #10
Could potentially push to one of the main maven repos when going a github release (i.e. current travis build file has the ability to run scripts/etc only on release).
Would need to incorporate version used in github release (i.e. v1.1 is pushed to maven as v1.1)
It would allow other Java projects to add javakdb as a dependancy & automatically pull down the jar/etc when they build instead of doing various manual steps.
Add details of what the example apps do & how to run them.
e.g. connection calls dont mention they use TCP, the method without a username/password uses the user.name property, etc.
See travis CI output when building with java15
Generating docs/kx/c.html...
src/kx/c.java:1112: warning: no comment
protected void w(int msgType,Object x) throws IOException{
^
src/kx/c.java:1294: warning: no @return
public MsgHandler getMsgHandler(){
^
src/kx/c.java:1520: warning: no comment
public static void tm(){
^
Generating docs/kx/c.Dict.html...
src/kx/c.java:427: warning: no comment
public Dict(Object X,Object Y){
^
Generating docs/kx/c.Flip.html...
src/kx/c.java:440: warning: no comment
public Flip(Dict X){
^
src/kx/c.java:444: warning: no comment
public Object at(String s){
^
Generating docs/kx/c.IAuthenticate.html...
Generating docs/kx/c.KException.html...
Generating docs/kx/c.Minute.html...
src/kx/c.java:324: warning: no comment
public Minute(int x){
^
Generating docs/kx/c.Month.html...
src/kx/c.java:298: warning: no comment
public Month(int x){
^
Generating docs/kx/c.MsgHandler.html...
src/kx/c.java:1271: warning: no comment
default void processMsg(c c,byte msgType,Object msg)throws IOException{
^
Generating docs/kx/c.Second.html...
src/kx/c.java:349: warning: no comment
public Second(int x){
^
Generating docs/kx/c.Timespan.html...
src/kx/c.java:374: warning: no comment
public Timespan(long x){
^
Dependancy on #11. Should be able to use a link to https://www.javadoc.io/ in order to present the latest version of the javadocs.
A badge can be provided in a README to indicate the version referenced.
Can change/fix then or document that only subsequent java versions are supported.
Add openjdk7 to .travis.yml jdk section & trigger build job in travis (or just use docker image or java 7 install):
Building gives these errors:
[0K$ java -Xmx32m -version
java version "1.7.0_151"
OpenJDK Runtime Environment (IcedTea 2.6.11) (7u151-2.6.11-2ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.151-b01, mixed mode)
$ javac -J-Xmx32m -version
javac 1.7.0_151
travis_time:start:07d6f092
[0K$ make
mkdir -p build/classes
javac -d build/classes src/kx/c.java src/kx/examples/Feed.java src/kx/examples/QueryResponse.java src/kx/examples/Subscriber.java src/kx/examples/Server.java src/kx/examples/TypesMapping.java src/kx/examples/GridViewer.java
src/kx/c.java:1271: error: illegal start of type
default void processMsg(c c,byte msgType,Object msg)throws IOException{
^
src/kx/c.java:1271: error: = expected
default void processMsg(c c,byte msgType,Object msg)throws IOException{
^
src/kx/c.java:1271: error: ';' expected
default void processMsg(c c,byte msgType,Object msg)throws IOException{
^
src/kx/c.java:1271: error: illegal start of type
default void processMsg(c c,byte msgType,Object msg)throws IOException{
^
src/kx/c.java:1271: error: = expected
default void processMsg(c c,byte msgType,Object msg)throws IOException{
^
src/kx/c.java:1271: error: illegal start of type
default void processMsg(c c,byte msgType,Object msg)throws IOException{
^
src/kx/c.java:1271: error: <identifier> expected
default void processMsg(c c,byte msgType,Object msg)throws IOException{
^
src/kx/c.java:1271: error: = expected
default void processMsg(c c,byte msgType,Object msg)throws IOException{
^
src/kx/c.java:1271: error: = expected
default void processMsg(c c,byte msgType,Object msg)throws IOException{
^
src/kx/c.java:1271: error: illegal start of type
default void processMsg(c c,byte msgType,Object msg)throws IOException{
^
src/kx/c.java:1271: error: <identifier> expected
default void processMsg(c c,byte msgType,Object msg)throws IOException{
^
src/kx/c.java:1271: error: = expected
default void processMsg(c c,byte msgType,Object msg)throws IOException{
^
src/kx/c.java:1271: error: ';' expected
default void processMsg(c c,byte msgType,Object msg)throws IOException{
^
src/kx/c.java:1272: error: illegal start of type
switch(msgType){
^
src/kx/c.java:1272: error: <identifier> expected
switch(msgType){
^
src/kx/c.java:1272: error: = expected
switch(msgType){
^
src/kx/c.java:1272: error: ';' expected
switch(msgType){
^
src/kx/c.java:1272: error: illegal start of type
switch(msgType){
^
src/kx/c.java:1272: error: <identifier> expected
switch(msgType){
^
src/kx/c.java:1273: error: = expected
case 0:System.err.println("discarded unexpected incoming async msg!");break; // implicitly discard incoming async messages
^
src/kx/c.java:1273: error: ';' expected
case 0:System.err.println("discarded unexpected incoming async msg!");break; // implicitly discard incoming async messages
^
src/kx/c.java:1273: error: <identifier> expected
case 0:System.err.println("discarded unexpected incoming async msg!");break; // implicitly discard incoming async messages
^
src/kx/c.java:1273: error: illegal start of type
case 0:System.err.println("discarded unexpected incoming async msg!");break; // implicitly discard incoming async messages
^
src/kx/c.java:1273: error: illegal start of type
case 0:System.err.println("discarded unexpected incoming async msg!");break; // implicitly discard incoming async messages
^
src/kx/c.java:1273: error: = expected
case 0:System.err.println("discarded unexpected incoming async msg!");break; // implicitly discard incoming async messages
^
src/kx/c.java:1273: error: ';' expected
case 0:System.err.println("discarded unexpected incoming async msg!");break; // implicitly discard incoming async messages
^
src/kx/c.java:1274: error: illegal start of type
case 1:c.ke("unable to process sync requests");break; // signal to remote that we're unable to process these by default
^
src/kx/c.java:1274: error: <identifier> expected
case 1:c.ke("unable to process sync requests");break; // signal to remote that we're unable to process these by default
^
src/kx/c.java:1274: error: = expected
case 1:c.ke("unable to process sync requests");break; // signal to remote that we're unable to process these by default
^
src/kx/c.java:1274: error: ';' expected
case 1:c.ke("unable to process sync requests");break; // signal to remote that we're unable to process these by default
^
src/kx/c.java:1274: error: <identifier> expected
case 1:c.ke("unable to process sync requests");break; // signal to remote that we're unable to process these by default
^
src/kx/c.java:1274: error: illegal start of type
case 1:c.ke("unable to process sync requests");break; // signal to remote that we're unable to process these by default
^
src/kx/c.java:1274: error: illegal start of type
case 1:c.ke("unable to process sync requests");break; // signal to remote that we're unable to process these by default
^
src/kx/c.java:1274: error: = expected
case 1:c.ke("unable to process sync requests");break; // signal to remote that we're unable to process these by default
^
src/kx/c.java:1274: error: ';' expected
case 1:c.ke("unable to process sync requests");break; // signal to remote that we're unable to process these by default
^
src/kx/c.java:1275: error: illegal start of type
default:throw new IOException("Invalid message type received: "+msgType);
^
src/kx/c.java:1275: error: <identifier> expected
default:throw new IOException("Invalid message type received: "+msgType);
^
src/kx/c.java:1275: error: = expected
default:throw new IOException("Invalid message type received: "+msgType);
^
src/kx/c.java:1275: error: ';' expected
default:throw new IOException("Invalid message type received: "+msgType);
^
src/kx/c.java:1275: error: illegal start of type
default:throw new IOException("Invalid message type received: "+msgType);
^
src/kx/c.java:1275: error: <identifier> expected
default:throw new IOException("Invalid message type received: "+msgType);
^
src/kx/c.java:1275: error: = expected
default:throw new IOException("Invalid message type received: "+msgType);
^
src/kx/c.java:1275: error: ';' expected
default:throw new IOException("Invalid message type received: "+msgType);
^
src/kx/c.java:1275: error: illegal start of type
default:throw new IOException("Invalid message type received: "+msgType);
^
src/kx/c.java:1275: error: <identifier> expected
default:throw new IOException("Invalid message type received: "+msgType);
^
src/kx/c.java:1276: error: = expected
}
^
src/kx/c.java:1276: error: ';' expected
}
As a user of c.java, I want to be able to fully understand what object I get from k(). At the moment I can't distinguish strings (char vectors) from functions; primitive, adverbs (iterators) are fully swallowed (I got func without any idea what was sent).
My view that it looks better to have a separate class-wrapper for every K type which would keep the structure of what read from socket.
Hello,
is there any plan to replace these deprecated types :
import java.util.date;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
https://www.baeldung.com/java-8-date-time-intro
Current Java types | Proposed Java 8 types |
---|---|
java.sql.Date | java.time.LocalDate |
java.sql.Time | java.time.LocalTime |
java.sql.Timestamp | java.time.Instant |
java.util.Date | java.time.LocalDateTime |
The main concern with the current old java type is the fact the epoch is altered to show the UTC date/time with the local hidden time zone from java.util.date.
`long getTzOffset(long x){
return tz.getOffset(x);
}
long lg(long x){
return x+getTzOffset(x);
}
long gl(long x){
return x-getTzOffset(x-getTzOffset(x));
}`
so you cannot use java.util.Date.toInstant() to get the accurate epoch.
I created a pull request to show how that could work : #57
Best Regards,
Patrice
Method 'setCollectResponseAsync'
Could expand the javadoc details on what this does - current associated doc with method doesnt go into much detail.
Only if you read the doc associated with 'java.lang.Object k(java.lang.Object x)' does setCollectResponseAsync make sense, as it refers to the other method i.e. "If the caller has already indicated via setCollectResponseAsync that the response message will be read async..."
Methods not documented on website, but appear in user generated JavaDocs. Appear to be for mainly API dev rather than a feature of the API. I was initially confused of their purpose till I read through the src, so may confuse new users of the API/KDB as to their need in communicating with KDB.
Rather than remove, it may also be an idea to do a intrim release with them marked as depreciated for anything that happens to be using them currently.
Ref:
'O' methods (prints passed param to stdout)
'tm' - no documentation - print difference in milliseconds
't' - only called by 'tm'
https://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/deprecation/deprecation.html
Example:
/**
* @deprecated Previously wrapper for System.currentTimeMillis(). Not used by KDB+ interface.
* @return current time in millis.
*/
@Deprecated public static long t(){
return System.currentTimeMillis();
}
Pre-requisite on feed example is getting displayed as one line - making it hard to see its an example of creating func & table.
q).u.upd:{[tbl;row] inserttbl} q)mytable:([]time:timespan$();sym:
symbol$();price:float$();size:
long$()
Recreation:
mvn clean javadoc:javadoc
The bug is inside c.java which parses the result from kdb.
If you run GridViewer with the following query
String query ="get `:test/ set ([] a:til 10)";
then you get the following exception
Dec 07, 2020 10:04:00 PM kx.examples.GridViewer main
SEVERE: null
java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object;
at kx.c$Flip.<init>(c.java:479)
at kx.c.r(c.java:977)
at kx.c.deserialize(c.java:1395)
at kx.c.readMsg(c.java:1522)
at kx.c.k(c.java:1602)
at kx.c.k(c.java:1617)
at kx.examples.GridViewer.main(GridViewer.java:48)
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.