Git에서 두 브랜치를 머지할 때, 기본적으로 3-way merge 알고리즘을 사용하게 된다. 어떤 sequence A, B와 그 둘의 base인 sequence O가 있다고 하자. Git으로 치면 A, B는 머지할 브랜치, O는 base commit이 된다. sequence의 각 item은 소스코드의 한 줄이라고 생각하면 된다. 이렇게 A, O, B가 있을 때, A, O, B에 대해 [Longest common subsequence](이하 LCS) (( … 3-way merge 알고리즘에 대해 계속 읽기
문자집합과 문자 인코딩 구조
문자집합(character set)은 이름 그대로 문자의 집합이다. ASCII, ISO-8859-1, UCS(Unicode의 문자집합) 등이 문자집합이다. ASCII는 127개, ISO-8859-1는 191개, 가장 최신의 UCS(Unicode 6.2)는 110,182개 문자의 집합으로 정의된다. UCS에 포함되는 문자의 갯수는 Unicode의 버전이 올라가면서 점점 증가하고 있다. 각 문자들은 번호가 매겨진다. 컴퓨터로 이 문자집합을 다루기 위해서는, 각 집합에 속한 문자들을 특정 길이의 정수(코드값)로 표현할 수 있어야 한다. 한 … 문자집합과 문자 인코딩 구조 계속 읽기
ECMAScript(JavaScript)의 Object와 Property
JavaScript(이하 ECMAScript)를 처음 접하면 프로토타입 개념이 혼란을 일으키곤 하는데, Object가 어떻게 생성되고 프로퍼티를 어떻게 읽고 쓰는지만 확실히 기억해두면 혼란을 피할 수 있다. Object 생성하기 (( ECMA-262 13.2.2 )) ECMAScript에서 오브젝트란 프로퍼티들의 정렬되지 않은 컬렉션이다. 오브젝트는 생성자를 통해 만들어진다. Foo()라는 생성자가 있다면 다음의 방법으로 만들 수 있다. x = new Foo(); 이 때 생성자가 prototype이란 이름의 … ECMAScript(JavaScript)의 Object와 Property 계속 읽기
메일주소와 비밀번호만으로 SMTP 설정방법 알아내기
이메일 발송을 위해 메일 에이전트에 SMTP를 설정하려면 알야아 하는 것이 많다. 대략 다음과 같다. 호스트네임 포트번호 사용자이름 비밀번호 SSL/TLS 사용여부 하지만 일반 메일 사용자들이 알고 있는 것은 자신의 메일주소와 비밀번호뿐이다. 이것만 가지고 간단히 메일 발송 설정을 하도록 할 수는 없을까? 어느정도 가능하다. you@gmail.com이라는 메일주소에서 SMTP 설정을 알아내는 예를 들어보겠다. 메일주소의 구성 RFC 5322 Section-3.4.1에 따르면 … 메일주소와 비밀번호만으로 SMTP 설정방법 알아내기 계속 읽기
SMTP 설정에서 SSL과 TLS의 차이
메일 클라이언트를 설정할 때, 메일 발송을 위해서 POP3 혹은 SMTP 설정을 하게 된다. SMTP 설정의 경우, 보안 설정을 SSL로 하는 경우도 있고 TLS로 하는 경우도 있다. SSL과 TLS는 무엇이 다른가? SSL이냐 TLS냐를 잘못 선택하면 메일 발송 기능이 동작하지 않는 것으로 보아서 둘이 서로 다른 것 같지만 사실 둘은 한 줄기다. SSL 3.0이 버전이 올라가면서 TLS … SMTP 설정에서 SSL과 TLS의 차이 계속 읽기
iOS6 사파리의 POST 캐싱 버그에 대해
iOS6의 사파리는, 기본적으로 POST 요청에 대한 응답을 캐싱한다. 여기서 치명적인 문제가 발생한다. 서버에서 요청의 대상이 되는 리소스가 갱신되었음에도 불구하고, 사파리는 캐시했던 이전 응답을 사용자에게 보여주게 될 수 있다. 문제가 발생하는지에 대한 테스트는 여기에서 해볼 수 있다. 이 테스트에서 브라우저는 두 번의 POST 요청을 서버에게 보내고 서버는 그 요청에 대해 각각 다른 응답을 한다. 그러나 iOS6의 … iOS6 사파리의 POST 캐싱 버그에 대해 계속 읽기
vim에 능숙해지는 법
vim은 익숙해지기 어려운 에디터로 정평이 나 있다. 단축키를 외우지 않고서는 글자 하나도 입력할 수 없기 때문이다. 내가 vim을 배운 방법 나는 2007년 9월부터 vim을 쓰기 시작해서, 2008년 봄 쯤 부터는 능숙하게 사용할 수 있게 되었다. 내가 vim을 익힌 방법은, 그냥 배운 것을 적는 것 뿐이다. 단축키나 기능을 익혔다면 적어둔다. vim을 쓰다가 모르는 기능이 있다면 우선 … vim에 능숙해지는 법 계속 읽기
vim에 컴파일러/인터프리터의 에러메시지 연동시키기
대부분의 IDE에서는, 컴파일 에러나 런타임 에러가 발생했을 때, 소스코드에서 해당 에러의 원인이 된 라인으로 바로 이동하는 기능이 있다. 물론 vim에서도 약간의 설정으로 가능한 기능이다. 설정 및 사용법을 알아보자. makeprg 설정 우선 현재의 소스코드를 해석하거나 컴파일할 때 사용할 프로그램을 설정한다. 여기서는 python으로 해 보겠다. :set makeprg=python 이렇게 하고 나면, :make %로 현재 편집중인 파일을 파이썬으로 실행해 … vim에 컴파일러/인터프리터의 에러메시지 연동시키기 계속 읽기
vim과 쉘을 연동하여 사용하기
vim은 그 자체로도 상당히 강력하지만, 쉘과 함께 사용함으로써 서로의 강력함을 곱할 수 있다. vim과 쉘을 연동해서 쓰는 방법들을 몇가지 소개한다. 여기서 소개하는 방법들은 gvim이 아닌 터미널에서 실행하는 vim을 위한 것이다. 쉘로 나갔다가 돌아오기 vim 사용중에 Ctrl+z로 쉘로 나가서 명령을 실행한 뒤, 쉘에서 fg를 입력해 vim으로 돌아온다. 이건 vim과는 아무 상관도 없는 기능이지만, 사실 vim에서 쉘 … vim과 쉘을 연동하여 사용하기 계속 읽기
git의 revision에 대해
git에서 revision이란 특정 Git object를 가리킬 수 있는 표현식을 의미한다. HEAD~2, master, a8dd808db6d87a1d809b1a223e08ab69602b2d3a, HEAD:test.txt 등이 모두 "revision"이다. 문법 ABNF 로 표현해보면 대략 다음과 같다. DIGIT = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" sha1 = 1*40HEXDIGIT refname = name / "refs" "/" (name … git의 revision에 대해 계속 읽기