Akka & actor

network개발 2017. 10. 17. 16:46

actor : ref

 

   -actor는 독립적인 경량프로세스이다. (메시지는 큐를 이용해 처리한다)

   -서로 독립적이고 actor간 통신은 비동기로 이루어지기 때문에 multi-thread환경에서 락등이 발생하지 않는다.

   ( scala로 개발되어 있으며, java용 API도 제공한다. )

  


akka

  - actor모델을 통해서 병렬처리를 할 수 있게 해준다.

  - RPC이므로, remote에 있는 actor를 local actor처럼 사용할 수 있다.

  


UntypedActor를 상속받을 경우   onReceive함수를 구현해야 한다.

Actor생성은 Actors.actorOf()로 생성.  

Posted by yongary
,

AWS Redshift

SDN,cloud,Puppet 2017. 10. 17. 16:18

REF


AWS에서 제공하는 대용량 관계형 data-warehouse 서비스.



Posted by yongary
,

ELK Stack

ElasticSearch 2017. 10. 17. 16:16

공식사이트: elastic.co

REF


기본적으로 elasticSearch가 근간인데

elasticSearch를  DB와 비교해서 가장 큰 차이점을 생각해 보면


   1. 속도가 빠르다.. DB는 B-tree인데 elastic은 hash를 사용.
       (물론 No-SQL DB중에는 redis등과 같이 hash사용하는 애들 있죠..)


   2. Fuzzy개념이 있다.
       (DB에서는 정확하게 입력한 query에 대한 결과가 나오지만,  

        elastic은 검색엔진 기반이다 보니,   Fuzzy하게 혹은 가중치있게 검색할 수 있다.. 적당히 알아서 유사한 것들이 검색된다) 



==============================================


elasticSearch에 data를 넣고,

kibana를 통해 그래프 형태로 조회 한다.


Logstash는 elasticSearch에 data를 대용량으로 넣을때 주로 사용한다.



<ElasticSearch>

키워드 : doc1, doc2 이러한 식으로 저장이 됨.  O(1)의 HashTable이라고 생각하면 됨. 

     ==> 따라서 search가 매우 빠름. (redis와 


Index - db (RDB용어)

Type - table

document - row

Mapping -scema


(실습)

$curl -XGET http://localhost:9200/classes
                                                         +  /class/1 -d  someData

$curl -XPUT localhost:9200/classes    (Update명령이지만, index생성시에는 PUT을 사용함)

                      

$curl -XPOST localhost:9200/classes/class/1 -d  @json파일          (INSERT) 
                                                             document생성은 POST로 하면 index와 함께 생성되기도 함.


?pretty : 이쁘게 출력해 줌.


    - geo_point같은 data를 type 매핑해주면 geo data로 관리가 되서, kibana 지도에서 쉽게 표시 가능.
    - 


<Kibana>

Discover메뉴 - 필드별 조회/검색 등.

Visualize에서 x 축 y축 고르면 쉽게 그래프로 표시할 수 있으며, 해당 링크만 이용할 수 있음.



<logstash>

 - (CSV)file, mySql, mongoDB, ActiveMQ등 data들을 포맷을 바꿔 elasticSearch에 넣을 수 있음.

 - .conf 파일을 이용함.  $sudo ./logstash -f logstash.conf 
          ( input  / filter / output을 지정. output을 주로 elasticSearch로 함 -  유투브 ELK스택 강의 18강 참고.



               


 






Posted by yongary
,

Q 1개를 main으로 하고, 임시 Q 하나를 더 이용해서

stack을 구현. 항상 Q를 다 비우고 꺼꾸로 즉(stack pop 대비순서)로 넣어 놓음.

REF

 

Queue<Integer> q = new LinkedList<Integer>();
Queue<Integer> tmp = new LinkedList<Integer>();


public void push(int d) {
    if (q.size() == 0) {
        q.add(d);
    }else {
        //deque q->tmp
        while (q.size() > 0) {
            tmp.add( q.poll() );
        }

        q.add(d);

        //tmp->q
        while (tmp.size() > 0 ){
            q.add(tmp.poll());
        }

    }
}

public Integer pop(){
    return q.poll();   //poll returns null,  while remove throws exception.
}

 

Posted by yongary
,

java 9 특징

java8~ 2017. 10. 12. 22:22

 REF1(KOR)     REF2(ENG)



AoT (Ahead of Time)컴파일러 도입.  안드로이드에선 이미  ART라는 이름으로 사용되고 있었으나 JDK에선 처음도입

  - application의 startup time 감소.


알파베틱 String을 1byte로 처리해서 메모리효율 + GC문제 감소


Modularity (Jigsaw프로젝트)

  - 키워드 module 을 package처럼 사용.. package 보단 밑.

  - 참고: 이 기능 때문에 기존코드 migration을 위해, java9에서만 한시적으로 illegal reflective access를 제공.


JShell (REPL : Real-Eval-Print-Loop) 제공.. shell에서 바로 문법테스트 등 가능



immutable Map/List/Set용 .of 함수 제공  (Guava좀 들 쓰겠군요)

Flow class (for Reactive) 제공 + CompletableFuture에 delayedExecute추가  (RxJava좀 들 쓰겠군요)


Stream API에  4개 API 추가

  -  takeWhile

  -  dropWhile

  

CodeCache 향상 - code cache가 segment단위로 되도록 함

JavaScript 서포트 향상 - Project Nashorn의 ECMAScript parser API추가


Optional::stream 추가.  

ProcessHandle class추가

Try with Resource 향상





----기타----  

Applet 제거

Http2 Client

Html5 Unicode지원 향상

Java platform Logging API & Service ?

Javadoc search? 


Posted by yongary
,

IP로 country판별

IT 2017. 8. 28. 10:27

 MaxMind의 Geolocation DB를 이용하면 된다.

GeoIP2-Country DB를 이용하는 게 좋고,  DB의 path를 "GeoIP2-Country.mmdb" 로 잡는다. REF

Posted by yongary
,


$ lsof -i :8080   (8080포트를 사용하고 있는 process id를 알려줌)



Posted by yongary
,

gulp & webpack & lodash

javascript 2017. 8. 21. 16:21

<gulp>

gulp는 빌드 및  dependency관리 툴이다. Node.js의 스트림기능을 이용한 streaming build System을 표방한다.  REF

 - gulp.task
 - gulp.src
 - gulp.dest
 - gulp.watch 

gulpfile.js 을 작성해서, plugin사용을 통해 html/css/js/image 등을 minify 한다.

sass 를 css로 컴파일 하는 기능도 수행.



<webpack> 

모듈쪼개기(번들러) 툴이다. 모듈간 import/include를 지원한다.   (javascript ES6에도 모듈이 있어 약간 쪼개기 가능) 
                                                                                                - REF:      import './style.sass';

webpack.config.js를 통해서 설정을 함. REF
  - entry 
  - CommonChunkPlugin을 통해 split함..
  (+inline  function)

- webpack-dev-server : 간단한 webserver 제공. REF

- webpack-stream: 주로 babel인데 gulp랑 함께 사용? (need to study)
  
  

- webpack-dev-middleware  (webpack-dev-server내부에서 사용)

- webpack Watch Mode : js가 하나라도 바뀌면 재컴파일.



<lodash>

그냥 js 라이브러리이다.  arrays, collections,  numbers, objects, strings 등을 유려하게 처리한다.  REF

_.every
_.filter
_.find  
_.forEach
_.includes
_.map 
_.reduce 






Posted by yongary
,

package.json안에서 사용되는 dependency js들 정리. 


<Babel>

ES6등으로 된 javascript를 현재 브라우저에서도 동작하게 낮은버전(ES5)등으로 변환해주는 도구

.babelrc파일만 작성하면 된다.

{
"presets": [
[ "env", { "modules": false } ]
]
}


<underscore> - lamda or function program과 유사한 함수들을 지원.  (음, lodash와 차이는?)

_.map
_.each 

_.filter

_.isEqual (A, B) : 두 Object간 동일한지 비교한다. 



<Tether> 

javascript로 webpage생성시,

포지션을 해주는 library이다.   REF


Attathment,

Offset,

pin,

to

등의 javascript tag 를 이용해 자유롭게 포지셔닝이 가능하다. 



====개발/Test용 js===========


chai : BDD, TDD assertion Library

cross-env :  bash/window등에 상관없이 환경제공. 주로 webpack.config.js안에서 사용.

del : 삭제용 js - 주로 gulpfile.js 안에서  gulp.task('clean')에 사용.


karma: karma.conf.js를 이용해서 test용  task를 생성시 사용.  

  karma-chai : 위의 chai와 결합
  karma-mocha : mocha (async한 test) 와 결합.. 주로 describe("blabla text", function() ) 형태를 많이 사용.


  karma-phantomJS:  phantomJs( Dom핸들링, CSS, JSON등 처리) 와 결합해서 브라우저 흉내를 제공.


requireJs : (AMD구현체  이해와 개발 글 참고- REF
   주로 js의 제일앞에 require()를 많이 사용했으나, function과 결합해 사용가능


runsequence : gulpfile.js안에서 default실행순서를 정의.
  



Posted by yongary
,

Futures transform

network개발 2017. 8. 8. 10:01


import static com.spotify.futures.FuturesExtra.syncTransform;


syncTransform:

ListenableFuture<A>를 ListenableFuture<B>로 변환한다. (참고: ListenableFuture는 guava: completion Listener와 executor를 가질 수 있음.)


syncTransform2: 

  ListenableFuture<A>, <B>2개를 하나의 ListenableFuture<C>로 변환한다.




Futures.transform():

이것도 ListenableFuture를 ListenableFuture로 변환하는데... executor를 파라미터로제공.


rxjava.FutureRxInterop.toSingle(): or toMaybe()

각종 Future -> Single로.




Posted by yongary
,