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
,

Kerberos는 하데스의 지옥문을 지키는 머리셋달린 개인데

MIT에서 제 3의 서버를 통한 인증을 하는 시스템을 만들면서 이 이름을 붙였다고 한다.


자료출처: REF http://slideplayer.com/slide/4791382/



Kerberos서버와 TGS서버가 따로 있는 것이 특징이다.

  - 서버접속시에는 TGS서버에서 티켓만 받으면 접속이 가능하다 





Posted by yongary
,

Form의 Validation을 체크할 때, 주로 spring의 validator기능을 사용해 왔지만,


jQuery에서도 Form-validation기능이 있다는 걸 알게되었다.

잘만 쓴다면, 서버까지 갔다오지 않고 바로 javascript에서 처리가 되니 장점이 존재한다.


REF

기본적으로는 rules: 와 messages:를 정해주면 자동으로 체크 및 에러메시지가 출력된다.



예)

$("#basicForm").validate({ rules: { validForCheck : 'validForCheck',

rankingWeightCheck: 'rankingWeightCheck'

} messages: 또는 메시지를 아래 addMethod에 적을 수 있음. }); $.validator.addMethod("rankingWeightCheck", function(value) { return ($('#className').val() < 100 );

}, 'Please enter a Value under 100<br>');


Posted by yongary
,

mongo-java-driver

mongoDB, redis 2017. 7. 23. 23:16

javadoc_REF (많이쓸 클래스: async.client.mongoCollection)

             - 부속: async-driver

             <최근 dependency>

                'org.mongodb:mongo-java-driver:3.4.2'

       'org.mongodb:mongodb-driver-async:3.4.2'   



이중화: https://nextus.tistory.com/26


aggregate사용법:  기초 REF ,  프로그래밍 중에 사용법 REF

   aggretate상세설명: REF



Async Code예제:REF



JAVA (Spring에서 aggregation 사용예제)


Criteria criteria = new Criteria("producerNo").is(producerNo);

MatchOperation match = Aggregation.match(criteria);
SortOperation sort = Aggregation.sort(Sort.Direction.DESC, "deliverStart");
Aggregation agg = Aggregation.newAggregation(match, sort);

AggregationResults<DeliverProduct> results = mongoTemplate.aggregate(agg, "deliverProduct", DeliverProduct.class);
List<DeliverProduct> productList = results.getMappedResults();


  group의 경우

//SQL: db.xx.aggregate([{$group:{_id:{iotId:"$iotId", producerNo:"$producerNo"},
// deliverStart:{ $max:"$time"}}} ]

//RUN "group" Aggregation.//max(deliverStart)->deliverStart로
GroupOperation group = Aggregation.group("iotId", "producerNo").max("time").as("time");
Aggregation agg = Aggregation.newAggregation(group);



- 좀더 간단히 사용하려면 : REF (but, 추천은 아님)

Posted by yongary
,


<AssertJ의 javadoc_REF 기초REF>


import static org.assertj.core.api.Assertions.assertThat


.isEqualTo

.contains

.startWith

.endsWith


등 기존 junit assertTrue보다 유연하게 사용가능.





JUnit JavaDoc


JavaDoc : Assert class




@Parameters - 음 javadoc에서 잘 안보이네요.

@Test
@Parameters({
"10000, 8, 32",
"100000, 12, 128",
})
public void realUsage(int numSerials, int numDigits, int hashKeySize)


@DataPoints + @Theory 

 @DataPoints
 public static String[] dataPoints = new String[] { ... };
 
 @DataPoints
 public static String[] generatedDataPoints() {
     return new String[] { ... };
 }
 
 @Theory
 public void theoryMethod(String param) {
     ...
 }


Posted by yongary
,

RxJava

network개발 2017. 7. 21. 11:48

(RxJava는  비동기multi-thread 주목적이므로 network개발로 분류)  기초:REF


javadoc 



데이타\처리

CompletableMaybeSingleObservable

Subject(외부에서 데이타주입가능)

NothingO
OneOOOO
MoreOO
UnlimitedOO


<Observable과 Maybe 많이쓸만한 함수: 주로 양쪽에 다 존재>

Observable.subscribe (  Observer 또는 Consumer ) 
                                      Observer는 { onComplete(), onError(),   + onNext(), onSubscribe()  } 

Observable.subscribeOn (데이터주입 Schedule쓰레드)

Observable.observeOn (데이터처리 Schedule쓰레드)

                  .onSubscribe (Cosumer<Disposable {dispose()} >

       (static).defer (Callable supplier )  : .create대신의 공급자.  REF


Flowable.doOnSubscribe ( Consumer<Subscription {cancel(),request(r)   } }   org.reactivestreams?.Subscription

        FlowableOnSubscribe  inteface도 존재.    



Maybe.doOnSuccess( Consumer 

           .doOnComplete ( Action )  ,   .doOnSubscribe( Action

           .doOnError (Consumer 

           .onErrorComplete ( Predicate 
           .timeout ( , , Scheduler  )

(static) .defer ( Callable supplier)  : 공급자  (in study)       

(static) .just ( T )
(static) .error(E) 





Scheduler  & Scheduler.Worker(하나의 thread에서 순차적으로 처리하는 Scheduler)

 ExecutorService exec = Executors.newSingleThreadedExecutor();
                                 .newFixedThreadPool(5)//cpu+1 
 try {
     Scheduler scheduler = Schedulers.from(exec);//parallelization에 최적.
                                     .computation();//cpu+1 계산에적합
                                     .io(); //cache도 해줌.cpu+1
                                     .newThread()//간단
     Flowable.just(1)
        .subscribeOn(scheduler)
        .observeOn(Schedulers.computation())
        .map(v -> v + 1)
        .subscribe(System.out::println); //blockingSubscribe(System.out::println);
 } finally {
     exec.shutdown();
 }


Maybe와 Single의 차이는 complete의 존재여부?   (from REF)

Flowable :  item emit속도( reactive dataflow)가 조절 가능. 



Flowable -> Single<List<T>>  :  toList() 도 좋음.

Posted by yongary
,