posted by 지니우스 2020. 1. 14. 16:28

SELECT dt + INTERVAL lv-1 DAY dt
  FROM (
            SELECT @ROWNUM:=@ROWNUM+1 AS lv
                    , CONCAT('202001','01') dt
             FROM information_schema.`COLUMNS` A
                   , (SELECT @ROWNUM:=0) R
              LIMIT 100
          ) a

posted by 지니우스 2017. 11. 16. 14:34
$ npm install hubot-test-helper --save-dev

testing hubot scripts를 읽던 중 발견. --save를 쓰기도 하던데 둘 차이는 뭘까?

그냥 install 하면 ./node_modules 디렉터리에 패키지 설치를 하고 끝. --save, --save-dev 옵션은 ./package.json 업데이트를 같이해준다. 어디에 패키지 정보를 추가하느냐가 다른데, --save 옵션은 dependencies object에 추가하고 --save-dev 옵션은 devDepenencies object에 추가한다.

dependencies와 devDepenencies 차이는 npm install을 할 때 나타난다. dependencies는 항상 설치되고 devDepenencies는 --production 옵션을 붙이면 빠진다. npm install “$package” 명령어로 설치할 때는 --dev 옵션을 붙여야지만 설치된다.

참고


출처:  http://ohyecloudy.com/ddiary/2016/09/04/til-npm-install-save-or-save-dev/


posted by 지니우스 2017. 7. 7. 14:33

오늘은 얼마 전 심심해서 열어본 jquery 소스를 보고 메모해야지 했던 call과 apply에 대한 내용을 적어봐야지... 귀찮아서 계속 미루게 된다;

발단은 이러하다. 아주 아주 예~전에 사두어서 읽다가 책장으로 쳐박아둔 javascript patterns 책을
어쩌다 다시 보게 되면서 call과 apply 및 curring 부분에서 큰 재미를 얻을 수 있었는데

마침 어쩌다 열어 본 jqeury 3.1.1 소스에서 call, apply에 대한 예시를 적기에 딱! 좋은 부분이 발견되어 메모겸 적어놔야지 생각하게 되었다.


1. javascript api function 할당? 사용? 대입?


위에 소스를 보면 머 아시는 분들이야 다 아시겠지만 주목해야 할 부분이 있다.

var arr = []; // new Array();와 동일한데 쓰지말자 이유는 생략한다 var slice = arr.slice; var concat = arr.concat; var push = arr.push; var indexOf = arr.indexOf; var class2type = {}; // new Object();와 동일 var hasOwn = class2type.hasOwnProperty; console.log('arr', arr); console.log('slice', slice); console.log('class2type ', class2type ); console.log('hasOwn ', hasOwn );
console

위에 코드를 콘솔로 날리면 대략 저런 결과가 나온다.
참고로 __proto__는 private 변수 선언 정도로 생각하면 된다.
별도 검색해 보면 내용이 많이 나올 것이다. 일단 여기선 생략

slice function () { {native code} } 보이시는 가

slice 변수에 javascript Array 객체의 slice function이 대입되었다.

이말인 즉 javascript에서 기본으로 제공하는 api들을
내 임의로 변수에 할당하여 사용할 수 있다는 말이다.
위에 slice를 예를 들면 동일한 기능을 하는데 구지 내가 function을 하나하나 만들어가면서 삽질하지 않아도 된다는 것이다.

테스트는 안해 봤지만 성능도 native code로 동작하니 더 빠르겠지 ; (솔직히 이건 좀  100% 자신은 없다만;;)

2. apply, call 활용
// 샘플코드 출처 : http://www.w3schools.com/jsref/jsref_slice_array.asp var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"]; var citrus = fruits.slice(1, 3); // Orange,Lemon


slice 사용을 예로 들어보자 사용법은 저렇다.
근데 잘보면 저건 fruits가 Array니까 저렇게 사용 가능한 것이다.

근데 var slice = Array.slice ;;; ?? 헐 어찌 사용하노 this가 뭣인지 알고

이럴 때 적절히 사용 할 수 있는 것이 call, apply다
가장 핵심은 function 실행 시 this로 사용될 값을 파라미터로 넘길 수 있다는 것이다.
음 사람들이 간혹 이걸 보고 상속라 말하기도 한다. (내 생각은 약간 다르다.)

function add(a, b) { var result = a + b; console.log('this', this) console.log('name', this.name); console.log('return', result); return result; } var me = { name : 'lks' }; add(10, 20); add.apply(me, [100, 200]); // add.call(me, 100, 200);

우선 위에 코드만 보면

add(10, 20) 의 경우 실행 시 console.log('this', this); 부분의 this는 window
반면 add.apply(me, [100, 200]); 에서는 'lks' 가 찍히는데

apply() Syntax fun.apply(thisArg[, argsArray]) Parameters fun : 위와 동일 thisArg : this 객체로 사용될 객체 argsArray : 함수에 전달할 인수 집합 인데 배열로 전달한다. call은 인수로 보내고 apply는 배열로 보낸다.
call() Syntax : fun.call(thisArg[, arg1[, arg2[, ...]]]) Parameters fun : 가져다쓸 메소드 thisArg : this 객체로 사용될 객체 arg1,arg2,arg3 : 메소드에 전달할 인자목록

위와 같은 구조이기 때문에 그렇다.
보면 첫번째 인자로 function 내의 this 넘긴다.
그렇기 때문에 add 실행 시에는 그냥 window가 찍히고
apply를 통해 me를 변수로 넘겼을 때는 me의 name = 'lks' 가 찍힌 것이다.

그럼 위 slice를 사용해 보자

var slice = [].slice; console.log( slice ); var me = [ 'A', 'B', 'C', 'D', 'E' ]; console.log('apply me 1', me); me = slice.apply( me, [1, 3] ); console.log('apply me 2', me); console.log('-------------------------------------'); me = [ 'A', 'B', 'C', 'D', 'E' ]; console.log('call me 1', me); me = slice.call( me, 1, 3 ); console.log('call me 2', me);


별거 아닌 내용인 것 같기도 한다.
일반적으로 사용하는 경우도 드물 것이다.
그러나 this를 넘길 수 있다는 건 매우 매력적인 기능이 아닌가 싶다.