gunju-ko / til Goto Github PK
View Code? Open in Web Editor NEWToday I Learn
Today I Learn
public class Foo {
private String name;
private int sequence;
// getter, setter 생략
}
@RequestMapping(value = "/foo", method=RequestMethod.GET)
public void show(@RequestParam("sequence") int sequence, @ModelAttribute("foo") Foo foo, Model model) {
}
http://localhost:8080/foo?name=Gildong&sequence=327
위와 같이 호출을 하면 foo 객체에 요청 파라미터의 값이 세팅이 된다.
@ModelAttribute는 아래와 같은 역할을 한다.
Dockerfile
이라는 파일에 자체 DSL 언어를 이용해서 이미지 생성 과정을 적는다.임시 컨테이너 생성
> 명령어 수행
> 이미지로 저장
> 임시 컨테이너 삭제
> 새로 만든 이미지 기반 임시 컨테이너 생성
> 명령어 수행
> 이미지로 저장
> ... 의 과정을 계속해서 반복한다. 명령어를 실행할 떄마다 이미지 레이어를 저장하고 다시 빌드할 때 Dockerfile이 변경되지 않았다면 기존에 저장된 이미지를 그대로 캐시처럼 사용한다.# 이미지 빌드하기
$ docker build -t [tag name] [Directory of Dockerfile]
$ docker build -t app .
KsqlDataSourceSchema
io.confluent.ksql.avro_schemas
VALUE_AVRO_SCHEMA_FULL_NAME
속성을 통해 name과 namespace를 재정의할 수 있다.VALUE_AVRO_SCHEMA_FULL_NAME
값을 com.mycompany.MySchema
로 했으면 name은 MySchema
이고, namespace는 com.mycompany
가 된다.CASE WHEN a THEN b [WHEN c THEN d]... [ELSE e] END
CASE a WHEN b THEN c [WHEN d THEN e]... [ELSE f] END
select case x when 1 then 'one'
when 2 then 'two'
when 0 then 'zero'
else 'out of range'
end
from t1;
select case
when dayname(now()) in ('Saturday','Sunday') then 'result undefined on weekends'
when x > y then 'x greater than y'
when x = y then 'x and y are equal'
when x is null or y is null then 'one of the columns is null'
else null
end
from t1;
where 조건에서도 아래와 같이 사용가능
select *
from t1
where case x when 1 then true
else false
end
uuid_generate_v1() : UUID를 생성할 때 사용할 수 있는 함수로 맥 어드레스와 타임스탬프를 기반으로 생성된다.
df.write.option("compression","gzip").csv("path")
출처 : https://stackoverflow.com/questions/40163996/how-to-save-a-dataframe-as-compressed-gzipped-csv
@Column(name = "STRINGS", nullable = false)
@ElementCollection
private Set<String> strings;
HTTPS 프로토콜을 사용하는 URL이 안전하지 않은 HTTP 연결을 통해 이미지를 Link할 때 발생하는 에러다.
SSL 인증서를 성공적으로 획득한후 웹사이트가 보안 연결을 통해 로드되지만 페이지의 이미지가 여전히 HTTP를 통해 로드되는 경우 오류가 발생한다.
https://sitechecker.pro/site-audit-issues/https-page-links-http-image/
spring.jpa.database
: 타겟 데이터베이스로 코드에선 Enum
을 관리된다. 디폴트는 자동으로 감지된다.spring.jpa.database-platform
: 타겟 데이터베이스 이름, spring.jpa.database
는 Enum으로 관리되기 때문에 Enum에 원하는 값이 없는 경우 대체로 사용이 가능하다.spring.jpa.generate-ddl
: 시작시에 스키마를 초기화 할지 여부 (기본값 : false)spring.jpa.mapping-resources
: persistence.xml
의 mapping-file
과 같다.spring.jpa.open-in-view
: OpenEntityManagerInViewInterceptor를 등록한다. (기본값 true
)spring.jpa.properties.*
: JPA 프로바이더에게 추가적으로 제공할 native 설정spring.jpa.show-sql
: SQL문을 로깅할지 말지 결정 (기본값 : false)spring.jpa.hibernate.ddl-auto
: hibernate.hbm2ddl.auto
프로퍼티의 숏컷이다.
create-drop
none
spring.jpa.hibernate.naming.implicit-strategy
: implicit naming strategy의 full namespring.jpa.hibernate.naming.physical-strategy
: physical naming strategy의 full nameHibernate는 2개의 명명 전략(
hibernate.physical_naming_strategy
,hibernate.implicit_naming_strategy
)을 이용해서 객체 모델의 이름을 상응하는 데이터베이스 이름으로 매핑한다.
spring.jpa.hibernate.use-new-id-generator-mappings
: Hibernate의 새로운 IdentifierGenerator
를 사용할지 여부. hibernate.id.new_generator_mappings
의 숏컷으로 해당값을 설정하지 않으면 true로 설정된다.CREATE TABLE [IF NOT EXISTS] table_name (
column1 datatype(length) column_contraint,
column2 datatype(length) column_contraint,
column3 datatype(length) column_contraint,
table_constraints
)
IF NOT EXISTS
옵션을 사용하면 존재하지 않는 경우에만 새 테이블을 생성할 수 있다.IF NOT EXISTS
옵션을 사용하고 테이블이 이미 존재하는 경우 PostgreSQL은 오류 대신 알림을 발행하고 새 테이블 생성을 건너뛴다.CREATE TABLE accounts (
user_id serial PRIMARY KEY,
username VARCHAR ( 50 ) UNIQUE NOT NULL,
password VARCHAR ( 50 ) NOT NULL,
email VARCHAR ( 255 ) UNIQUE NOT NULL,
created_on TIMESTAMP NOT NULL,
last_login TIMESTAMP
);
CREATE TABLE account_roles (
user_id INT NOT NULL,
role_id INT NOT NULL,
grant_date TIMESTAMP,
PRIMARY KEY (user_id, role_id),
FOREIGN KEY (role_id) REFERENCES roles (role_id),
FOREIGN KEY (user_id) REFERENCES accounts (user_id)
);
account_role
의 경우 Primary Key가 두 개의 컬럼으로 구성이 된다. 그러므로 Primary Key를 table constraint로 정의해야 한다.참고 : https://sbe03005dev.tistory.com/entry/JPA-orphanRemoval
spark.driver.memory
로 클라이언트 모드의 경우 --driver-memory
옵션으로 지정할 수 있다.spark.executor.memory
로 설정할 수 있다.INSERT ON CONFLICT
문을 사용하면 된다.INSERT INTO table_name(column_list)
VALUES(value_list)
ON CONFLICT target action;
target은 다음 중 하나가 될 수 있다.
(column_name)
: 컬럼 이름 (특정 컬럼의 값을 기준으로 체크한다.)ON CONSTRAINT constraint_name
: 여기서 제약 조건 이름은 UNIQUE 제약 조건의 이름일 수 있다. (constraint 기준으로 체크한다.)WHERE predicate
action은 다음중 하나가 될 수 있다.
DO NOTHING
: 아무것도 하지 않는다.DO UPDATE SET column_1 = value_1, ... WHERE condition
: 테이블에 있는 필드를 업데이트 한다.
ON CONFLICT
구문은 PostgreSQL 9.5 이상 버전에서만 사용가능하다.
INSERT INTO customers (NAME, email)
VALUES('Microsoft','[email protected]')
ON CONFLICT ON CONSTRAINT customers_name_key
DO NOTHING;
INSERT INTO customers (name, email)
VALUES('Microsoft','[email protected]')
ON CONFLICT (name)
DO NOTHING;
EXCLUDED
는 새로 입력된 값을 접근할 때 사용한다.INSERT INTO customers (name, email)
VALUES('Microsoft','[email protected]')
ON CONFLICT (name)
DO
UPDATE SET email = EXCLUDED.email || ';' || customers.email;
key-value&key=value...
형태로 전송된다.SELECT
x,
x = 'a',
x <=> 'a',
x <=> null
x | x = 'a' | x <=> 'a' | x <=> null |
---|---|---|---|
a | True | True | False |
b | False | False | False |
NULL | NULL | False | True |
Preferred Leader
가 false
로 나타난다. 이는 카프카 매니저나 CLI 통해 복구가 가능하다.Preferred Leader
가 false라고 하더라도, 파티션에 리더가 할당만 되어 있다면 Producer나 Consumer에 영향을 주진 않는것으로 보인다.
https://docs.gradle.org/current/userguide/dependency_downgrade_and_exclude.html#sec:excluding-transitive-deps
https://www.crocus.co.kr/1587
Impala에서 rlike
를 이용하면 정규표현식을 조건문에 넣을 수 있다.
-- Find all customers whose first name starts with 'J', followed by 0 or more of any character.
select c_first_name, c_last_name from customer where c_first_name rlike '^J.*';
-- Find 'Macdonald', where the first 'a' is optional and the 'D' can be upper- or lowercase.
-- The ^...$ are required, to match the start and end of the value.
select c_first_name, c_last_name from customer where c_last_name rlike '^Ma?c[Dd]onald$';
-- Match multiple character sequences, either 'Mac' or 'Mc'.
select c_first_name, c_last_name from customer where c_last_name rlike '^(Mac|Mc)donald$';
-- Find names starting with 'S', then one or more vowels, then 'r', then any other characters.
-- Matches 'Searcy', 'Sorenson', 'Sauer'.
select c_first_name, c_last_name from customer where c_last_name rlike '^S[aeiou]+r.*$';
-- Find names that end with 2 or more vowels: letters from the set a,e,i,o,u.
select c_first_name, c_last_name from customer where c_last_name rlike '.*[aeiou]{2,}$';
-- You can use letter ranges in the [] blocks, for example to find names starting with A, B, or C.
select c_first_name, c_last_name from customer where c_last_name rlike '^[A-C].*';
-- If you are not sure about case, leading/trailing spaces, and so on, you can process the
-- column using string functions first.
select c_first_name, c_last_name from customer where lower(trim(c_last_name)) rlike '^de.*';
rilke
대신에 REGEXP
를 사용해도 된다.default_
이다._confluent-ksql-default_
가 된다.중요
관례에 따라ksql.service.id
프로퍼티는-
나_
와 같은 구분 문자로 끝나야한다. 이렇게 하> 면 내부 토픽의 이름을 더 쉽게 읽을 수 있다.
equals()
, hashcode()
를 재정의해줘야 동일성과 동등성이 보장될 수 있다.@Id
필드는 필수로 넣어주면 좋다.// allopen 확장, @Component 등 특정 스프링 어노테이션에 대해 allopen 플러그인을 적용.
kotlin("plugin.spring") version kotlinVersion
// noarg 확장, @Entity, @Embeddable, @MappedSuperclass 어노테이션에 대해 noarg 플러그인 적용.
kotlin("plugin.jpa") version kotlinVersion
open
키워드를 클래스와 필드에 추가해줘야한다.allOpen {
annotation("javax.persistence.Entity")
annotation("javax.persistence.MappedSuperclass")
annotation("javax.persistence.Embeddable")
}
DataFrameNaFunctions
를 리턴하며 null 또는 NAN 값을 처리하는데 사용할 수 있다.참고 : https://sparkbyexamples.com/spark/spark-dataframe-drop-rows-with-null-values/
String
널값을 빈문자열로 대체하고 numeric 컬럼의 널값 또는 NaN값은 0으로 대체한다.df.na.fill("").na.fill(0)
컨테이너가 실행된 후에는 kubelet가 컨테이너를 주기적으로 진단한다. 이 때 필요한 프로브는 다음 두 가지가 있다.
컨테이너 진단은 컨테이너가 구현한 핸들러를 kubelet이 호출해서 실행한다. 핸들러에는 세 가지가 있다.
진단 결과도 세 가지가 있다.
@Entity
@Table(name = "MEMBER")
public class Member {
@Id @GeneratedValue
private Long id;
@OneToMany(mappedBy = "member", fetch = FetchType.EAGER)
private List<Order> orders = new ArrayList<Order>();
}
@Entity
@Table(name = "ORDER")
public class Order {
@Id @GeneratedValue
private Long id;
@ManyToOne
private Member member;
}
특정 회원 하나를 em.find()
메소드로 조회하면 즉시 로딩으로 설정한 주문 정보도 함께 조회한다. 이 때 실행된 SQL을 보면 조인을 사용해서 한 번의 SQL로 회원과 주문 정보를 함께 조회한다.
하지만 JPQL을 사용할 때 문제가 발생한다.
em.createQuery("select m from Member m", Member.class).getResultList();
JPQL을 실행하면 즉시 로딩과 지연 로딩에 대해서 전혀 신경 쓰지 않고 JPQL만 사용해서 SQL을 생성한다. 이 때 N+1 문제가 발생한다.
SELECT * FROM MEMBER
SELECT * FROM ORDER WHERE MEMBER_ID = 1
SELECT * FROM ORDER WHERE MEMBER_ID = 2
SELECT * FROM ORDER WHERE MEMBER_ID = 3
SELECT * FROM ORDER WHERE MEMBER_ID = 4
...
회원 조회 SQL로 N명의 회원 엔티티를 조회하면, 각각의 회원 엔티티와 연관된 주문 콜렉션을 즉시 조회하기 위해 추가로 N번의 SQL을 실행한다. 이처럼 처음 실행한 SQL의 결과 수 만큼 추가로 SQL을 실행하는 것을 N+1 문제라 한다.
@Entity
@Table(name = "MEMBER")
public class Member {
@Id @GeneratedValue
private Long id;
@OneToMany(mappedBy = "member", fetch = FetchType.LAZY)
private List<Order> orders = new ArrayList<Order>();
}
select m from Member m join fetch m.orders
@BatchSize
@Entity
@Table(name = "MEMBER")
public class Member {
@Id @GeneratedValue
private Long id;
@BatchSize(size = 5)
@OneToMany(mappedBy = "member", fetch = FetchType.EAGER)
private List<Order> orders = new ArrayList<Order>();
}
@BatchSize
애노테이션을 사용하면 연관된 엔티티를 조회할 때 지정한 size 만큼 SQL의 IN 절을 사용해서 조회한다. 만약에 조회한 회원이 10명인데 size=5로 지정하면 2번의 SQL만 추가로 실행한다.@Fetch(FetchMode.SUBSELECT)
@Entity
@Table(name = "MEMBER")
public class Member {
@Id @GeneratedValue
private Long id;
@Fetch(FetchMode.SUBSELECT)
@OneToMany(mappedBy = "member", fetch = FetchType.EAGER)
private List<Order> orders = new ArrayList<Order>();
}
@Fetch(FetchMode.SUBSELECT)
를 사용하면 연관된 엔티티를 조회할 때 서브 쿼리를 사용해서 N+1 문제를 해결한다.SELECT O FROM ORDERS O
WHERE O.MEMBER_ID IN (SELECT M.ID FROM MEMBER M WHERE M.ID > 10)
java -Xss1M
-Xss
옵션으로 조정할 수 있다.참고
https://jae04099.tistory.com/entry/HTML-script-%ED%83%9C%EA%B7%B8%EB%8A%94-%EC%96%B4%EB%94%94%EC%97%90-%EC%9C%84%EC%B9%98-%ED%95%B4%EC%95%BC-%ED%95%A0%EA%B9%8C
minimumIdle
이 maximumPoolSize
보다 작은 경우에만 적용이 된다. 이 설정을 0으로 한다면 idle 상태의 커넥션이 풀에서 제거되지 않는다. 기본값은 600,000 (10분)이다.maxLifetime
값보단 작아야한다. 커넥션이 "keepalive" 시간이 되면, 커넥션은 풀에서 꺼내져서 Ping을 날린 후에 다시 커넥션에 반환된다. ping은 JDBC4 isValid() 메소드 호출 또는 connectionTestQuery 실행 중 하나이다. 이 값의 최소값은 30,000(30초)이며 분 범위의 값이 가장 바람직하다. 기본값은 0으로 disable 시킨다.Connection.isValid
메소드를 지원하지 않는 레거시 드라이버를 위한 설정이다. 이 쿼리는 커넥션이 풀에서 꺼내어 질 때, 커넥션과 데이터베이스 연결이 살아있는지를 확인하기 위해서 실행된다.io.confluent.connect.transforms.Drop$Key
io.confluent.connect.transforms.Drop$Value
transforms=dropKeyExample, dropValueAndForceOptionalSchemaExample
# 메시지에서 키를 삭제한다.
transforms.dropKeyExample.type=io.confluent.connect.transforms.Drop$Key
# 메시지에서 밸류를 삭제한다. 그리고 밸류에 대한 스키마가 옵션날이 아닌 경우, 옵션날로 변경한다.
transforms.dropValueAndForceOptionalSchemaExample.type=io.confluent.connect.transforms.Drop$Value
transforms.dropValueAndForceOptionalSchemaExample.schema.behavior=force_optiona
Drop$Key
with schema.behavior
set to nullify
transforms.dropValueAndForceOptionalSchemaExample.type=io.confluent.connect.transforms.Drop$Key
transforms.dropValueAndForceOptionalSchemaExample.schema.behavior=nullify
키와 스키마 모두 널이 된다.
Drop$Key
with schema.behavior
set to retain
transforms.dropValueAndForceOptionalSchemaExample.type=io.confluent.connect.transforms.Drop$Key
transforms.dropValueAndForceOptionalSchemaExample.schema.behavior=retain
키는 널이 되지만 스키마는 변경되지 않는다.
Drop$Key
with schema.behavior
set to validate
where the schema is not optionaltransforms.dropValueAndForceOptionalSchemaExample.type=io.confluent.connect.transforms.Drop$Key
transforms.dropValueAndForceOptionalSchemaExample.schema.behavior=validate
Drop$Key
with schema.behavior
set to validate
, where the schema is optionaltransforms.dropValueAndForceOptionalSchemaExample.type=io.confluent.connect.transforms.Drop$Key
transforms.dropValueAndForceOptionalSchemaExample.schema.behavior=validate
키는 널이 되고 스키마는 변경되지 않는다.
Drop$Key
with schema.behavior
set to force_optional
, where the schema is not optionaltransforms.dropValueAndForceOptionalSchemaExample.type=io.confluent.connect.transforms.Drop$Key
transforms.dropValueAndForceOptionalSchemaExample.schema.behavior=force_optional
키는 널이되고 스키마에서 Optional은 true가 된다.
optional: true
가 된다.AnalysisException: Exceeded the maximum number of child expressions (10000).
equals
, hashcode
, toString
메서드를 자동으로 구현해주는데, 이는 재정의 하는게 좋다.final
로 선언되서는 안된다.final
로 선언되서는 안된다.final
로 선언하면 lazy loading
을 위한 프록시를 생성할 수 없다.코틀린의 클래스와 프로퍼티, 함수는 기본적으로
final
이며 상속이 불가능하다.
allopen
플러그인을 사용하면 된다.data class
는 open
이 되지 않는다. 따라서 Lazy Loading을 사용하기 위해서는 data class
를 사용할 수 없다.open
시켜준다.equals()
, hashCode()
에서는 id
프로퍼티만 확인하게 변경하는게 좋다.Verification과 Validation은 비슷해 보이지만, 서로 다른 의미를 가진다. 그리고 이 둘의 차이를 이해하는 것은 중요하다.
이 글에서는 두 용어가 테스트 영역에서 어떤 의미로 사용되는지 설명한다.
소프트웨어 테스트에는 다양한 방법과 프로세스가 존재한다. Verfication과 Validation은 소프트웨어 테스트에서 동일한 그룹의 일부이다. (V-Model 이라고도 불린다.)
Verification의 정의는 다음과 같다.
개발의 특정 단계에서 모든 요구사항을 충족하는지 증명하기 위한 시스템 테스트
Verification은 개발 초기 단계에서 지정한 조건을 충족하는지 테스트하는 것이다. Verification은 Validation과 달리 소프트웨어가 개발 중일 때 수행되는 내부 프로세스에 가깝다.
validation의 정의는 다음과 같다.
이해 관계자의 진정한 요구와 기대가 충족되도록 하는 활동이다.
validation은 제품의 일부 또는 전체 애플리케이션이 완성되면 수행한다. Validation 관련된 이슈는 사용자와 개발자 간의 커뮤니케이션이 부적절하거나 부족할 때 발생한다. 개발자는 validation을 통해 제품이 사용자의 요구사항을 충족하는지 확인해야 한다.
Verification과 Validation은 소프트웨어 테스트에서 사용되는 키워드이다. 두 용어 모두 V&V(Verification and Validity) 의 일부이며 아래 작업을 달성하려고 한다.
Kafka Server 동작중에 발생하는 메트릭 정보들
-- 공백
SELECT *
FROM MY_TABLE
WHERE COLUMN1 = ''
-- 널비교
SELECT *
FROM MY_TABLE
WHERE COLUMN1 IS NULL
pos
에서 시작해서 len
만큼의 길이의 부분 문자열을 리턴한다. 주의할 점은 pos
가 1부터 시작한다는 것이다.> SELECT substring('Spark SQL', 5);
k SQL
> SELECT substring('Spark SQL', -3);
SQL
> SELECT substring('Spark SQL', 5, 1);
k
> SELECT concat('Spark', 'SQL');
SparkSQL
> SELECT concat(array(1, 2, 3), array(4, 5), array(6));
[1,2,3,4,5,6]
scala> spark.sql("SELECT CONCAT('hello', 'world')").show()
+--------------------+
|concat(hello, world)|
+--------------------+
| helloworld|
+--------------------+
scala> spark.sql("SELECT CONCAT('hello', 'world', null)").show()
+------------------------------------------+
|concat(hello, world, CAST(NULL AS STRING))|
+------------------------------------------+
| null|
+------------------------------------------+
sep
로 구분된 합쳐진 문자열을 리턴한다.> SELECT concat_ws(' ', 'Spark', 'SQL');
Spark SQL
scala> spark.sql("SELECT CONCAT_WS(' ', 'hello', 'world')").show()
+--------------------------+
|concat_ws( , hello, world)|
+--------------------------+
| hello world|
+--------------------------+
scala> spark.sql("SELECT CONCAT_WS(' ', 'hello', null)").show()
+-------------------------+
|concat_ws( , hello, NULL)|
+-------------------------+
| hello|
+-------------------------+
scala> spark.sql("SELECT CONCAT_WS(' ', null, 'world')").show()
+-------------------------+
|concat_ws( , NULL, world)|
+-------------------------+
| world|
+-------------------------+
scala> spark.sql("SELECT CONCAT_WS(' ', null, null)").show()
+------------------------+
|concat_ws( , NULL, NULL)|
+------------------------+
| |
+------------------------+
===
는 동일한 객체를 가르키는지 여부를 판단하고 싶을 때 사용한다. (자바에서 ==
와 같다.)val a = Integer(10)
val b = Integer(10)
a === b // false
==
는 두 값이 동일한지 체크한다.==
는 내부적으로 equals를 호출한다.val a = Integer(10)
val b = Integer(10)
a == b // false
val hobbies = arrayOf("Hiking, Chess")
val hobbies2 = arrayOf("Hiking, Chess")
assertTrue(hobbies contentEquals hobbies2)
@Test
fun test() {
val somethingItemOne = SomethingResponse(
name = "aaa",
age = 50,
isSelected = false
)
val somethingItemTwo = SomethingResponse(
name = "aaa",
age = 50,
isSelected = false
)
println("somethingItemOne == somethingItemTwo ${somethingItemOne == somethingItemTwo}")
println("somethingItemOne.hashCode ${somethingItemOne.hashCode()}")
println("somethingItemTwo.hashCode ${somethingItemTwo.hashCode()}")
}
결과
somethingItemOne == somethingItemTwo true
somethingItemOne.hashCode 92566031
somethingItemTwo.hashCode 92566031
SHOW | LIST STREAMS [EXTENDED];
-- See the list of streams currently registered:
SHOW STREAMS;
-- See extended information about currently registered streams:
LIST STREAMS EXTENDED;
DESCRIBE (stream_name|table_name|STREAMS|TABLES) [EXTENDED];
> DESCRIBE ip_sum;
Field | Type
-----------------------------------------
IP | VARCHAR(STRING) (primary key)
KBYTES | BIGINT
-----------------------------------------
For runtime statistics and query details run: DESCRIBE <Stream,Table> EXTENDED
> DESCRIBE ip_sum EXTENDED;
Type : TABLE
Timestamp field : Not set - using <ROWTIME>
Key format : KAFKA
Value format : JSON
Kafka output topic : IP_SUM (partitions: 4, replication: 1)
Field | Type
-----------------------------------------
IP | VARCHAR(STRING) (primary key)
KBYTES | BIGINT
-----------------------------------------
Queries that write into this TABLE
-----------------------------------
id:CTAS_IP_SUM - CREATE TABLE IP_SUM as SELECT ip, sum(bytes)/1024 as kbytes FROM CLICKSTREAM window SESSION (300 second) GROUP BY ip EMIT CHANGES;
For query topology and execution plan run: EXPLAIN <QueryId>; for more information
Local runtime statistics
------------------------
messages-per-sec: 4.41 total-messages: 486 last-message: 12/14/17 4:32:23 PM GMT
failed-messages: 0 last-failed: n/a
(Statistics of the local ksqlDB server interaction with the Kafka topic IP_SUM)
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.