2016년 8월 31일 수요일

라이선스 알아보기

github repository를 생성하다가 Licenses를 선택하면서 멍 때렸다.



이제껏 MIT License로 만들거나 없는 상태로 생성했는데 하나씩 뭔지 알아보기로 했다.

OLIS(Open Source Software License Information System)에 라이선스 비교표가 있다. 70종 이상의 라이선스에 대해 자세히 나와있다.

아파치, GNU(GPLv3), MIT 이렇게 3가지만 요약해볼까한다. 비교표에 따르면 아래와 같다.
[출처: https://www.olis.or.kr/ossw/license/compareGuide.do]

GNU GPLv3
 - 강도가 센 편
 - 반드시 전체 소스 코드를 무료로 공개해야한다.
 - 공유와 수정의 제한이 목적이 아니라 자유 보장이 목적

아파치 2.0
 - 파생 프로그램을 누구나 제작할 수 있고, 저작권을 양도, 전송할 수 있다.
 - 개인적 목적, 상업적 목적으로 이용 가능하고 재배포시에 원본의 소스코드 역시 포함될 필요가 없다.
 - 아파치 라이선스에 대해서는 명확히 밝혀야한다.

MIT 라이선스
 - 비교적 느슨하다.
 - 반드시 오픈소스일 필요는 없다.
 - 재사용을 인정한다.
 - 2차 저작물에 대해 추가 조항을 덧붙일수가 있다.

2016년 8월 23일 화요일

1715 - 카드 정렬하기

https://www.acmicpc.net/problem/1715

항상 카드의 장수가 가장 작은 두 묶음을 합치는 것이 결과적으로 최소의 비교 횟수이다.
대체 왜..?
라고 생각할수있다. "왠지 그러는 게 맞는 것 같다"는 말도 안되는 논리(혹은 풀이 도출)로 풀어온 문제가 정말 많았다.
그래서 오늘은 증명을 연습해보려 한다.

카드를 합치는 과정을 설명하기 위해 다음과 같이 정의해보겠다.
$a =$ 가장 작은 수 (i.e. $a$장의 카드 묶음)
$b =$ 두번째로 작은 수
$c = a, b$ 가 아닌 다른 어떤 수

위 정의에 의하면 $a \le b \le c$ 이다. 아래 3가지 경우가 있다.

  • $a$와 $c$를 합친 후, 그것을 $b$와 합친다 : $(a+c)+ \{(a+c)+b\}$
  • $a$와 $b$를 합친 후, 그것을 $c$와 합친다 : $(a+b)+ \{(a+b)+c\}$
  • $b$와 $c$를 합친 후, 그것을 $a$와 합친다 : $(b+c)+ \{(b+c)+a\}$

세 항 모두 중괄호로 둘러싼 부분이 $a+b+c$로 공통이므로 비교하기 위해 생략할 수 있다.

$a+b \le a+c$ 이고, $a+b \le b+c$ 이므로
$(a+b)+ \{(a+b)+c\}$ 가 가장 최소이다.

따라서 가장 작은 두 수를 합치는 것이 항상 최소이다.

증명을 별로 해본적이 없어서 맞는 지 확신이 안 선다.
댓글로 지적해주시면 감사하겠습니다.

2016년 8월 18일 목요일

구글 드라이브 호스팅 서비스 종료

구글에서 메일이 왔다. 메일 내용은 다음과 같았다.

On Aug 31, 2016, we will discontinue serving content via googledrive.com/host/[id] and the webpages will not be accessible anymore.
As an alternative to web hosting in Drive, we recommend:
  • Blogger—An easy and free way to host websites.
  • Firebase Hosting— An alternative if you’re using the web-hosting feature to serve static webpages with items on Drive.

구글 드라이브를 통해서 호스팅 서비스를 지원하고 있었는 데, 16년 8월 31일부터 더 이상 지원하지 않는다는 내용이다.

지금 이 블로그도 코드 문법 하이라이팅(SyntaxHighlighter) 파일을 구글 드라이브 호스팅으로 가져오고 있는데, 적당한 파일호스팅을 찾아봐야겠다..

2016년 8월 2일 화요일

[Node.js] TypeError: require(...) is not a function 해결방법

'use strict';

module.exports = function(param){
    // something to handle
    require('./otherModule)(param);
});

위와 같은 코드 형태에서 TypeError: require(...) is not a function 에러가 났었다.
아래처럼 고치니 잘 작동했다.

module.exports = function(param){
    // something to handle
    require('./otherModule)(param);
});

혹시나싶어서 'use strict'를 지웠는데, 그것이 먹혔다.
이유를 알고싶어 검색하다가 아래와 같은 글을 찾았다.
Aliencube Community :: 자바스크립트에서 strict mode를 사용해야 하는 이유

엄격한 컨텍스트에서는 require('...')() 을 제한하나보다. 혹은 "상대적으로 안전하지 않은 액션"이였거나..


게시글 목록