정규표현식

정규표현식(Regular Expressions, Regex)은 문자열의 패턴을 정하는 방법이다. 예를들어, 이런걸 할 수 있다.

“로또 번호는 00부터 45사이에 있는 6개의 두자리수인데, 각 수는 쉼표로 구분된다”

이건

(([0-3]{1}[0-9]{1})[,]{1}|([4]{1}[0-5]{1}[,]{1})){5}([0-3]{1}[0-9]{1}|[4]{1}[0-5]{1}){1}

이렇게 나타내면 된다. (다만 이 표현식으로는 중복된건 못 걸러낸다.)

정규표현식을 테스트 해보고 싶으면 아래 웹 사이트에서 간단히 해볼 수 있다.


http://regexpal.com/

이 얘기를 왜 하냐면, 만화를 하나 소개하려고…

이 만화는 CCL에 의해서 사용된다.


Creative Commons License


This work is licensed under a

Creative Commons Attribution-NonCommercial 2.5 License

.


This means you’re free to copy and share these comics (but not to sell them).

More details

.

원본 :

http://xkcd.com/208/

알면 재밌다.

동시신호의 효율성

내가 3개월째 살고 있는 동네인 광주 광역시에는 차로에 동시신호가 무진장 많다. 동시신호가 가끔 보이는 동네에서만 살다가 동시신호가 너무 많아 보이는 동네로 이사왔더니, 사실 불편한 것 같아 보인다.

그래서 이러한 의문을 씻어버리고자, 4거리의 신호등 정책이 동시신호와 그렇지 않은 경우의 효율을 비교해 보겠다.

일단, 평균 대기시간이라는 말을 차 1대가 원하는 방향으로 가기 위해 기다리는 평균 시간으로 정의하자.

동, 서, 남, 북으로 뚫린 4거리 교차로가 있다고 하자. 서울시는 일반적인 신호등 체계다.(그냥 그렇다고 치자) 즉, 정지-좌회전-직진 순서로 반복되는 경우다. 광주시는 동시신호 신호등 체계다. 즉, 정지-직좌가 반복된다.

어느 특정 순간, 서울의 4거리 신호등은 다음과 같이 켜져 있다.

동 – 정지

서 – 정지

남 – 좌회전

북 – 좌회전

그 다음 순간, 서울의 4거리 신호등은 다음과 같다.

동 – 정지

서 – 정지

남 – 직진

북 – 직진

그리고

동 – 좌회전

서 – 좌회전

남 – 정지

북 – 정지

끝으로

동 – 직진

서 – 직진

남 – 정지

북 – 정지

이렇게 해서 1바퀴가 돌아가게 된다.

서울에서 동쪽에서 있던 운전자가 직진하기 위해서 기다려야 하는 최대의 시간을 살펴보자.

당연히 직진신호구간이 한번, 좌회전신호구간이 두번 나온다.

동쪽에 있던 운전자가 좌회전을 하기 위해서 기다려야 하는 최대의 시간을 살펴보면, 마찬가지로 직진신호구간이 두번, 좌회전신호구간이 한번 나온다.

광주의 동시신호로 운영되는 4거리 신호등은 다음과 같이 진행된다.

동 – 직좌

서 – 정지

남 – 정지

북 – 정지

그리고

동 – 정지

서 – 직좌

남 – 정지

북 – 정지

다시

동 – 정지

서 – 정지

남 – 직좌

북 – 정지

끝으로

동 – 정지

서 – 정지

남 – 정지

북 – 직좌

이 경우, 모든 운전자들이 최대한 기다려야 하는 시간은 신호구간 3번이 지나간 다음이다. 즉, 지난 신호를 놓친 직후부터 다음 신호가 시작되는 시간까지다. 광주의 어떤 사거리에서는 신호구간이 30초였고, 따라서 여기서는 최대 1분 30초를 기다리게 된다.

티끌 모아 태산 (1)

누군가 나에게 질문하였다. 질문을 요약하자면 다음과 같다.

선은 점의 집합입니다. 점은 크기가 없는 것이고, 선은 “길이”라는 크기가 있습니다.

그렇다면, 크기가 없는 것을 모아서 크기가 있는 것을 만든다는 뜻인데

0 + 0 + … = 1

0을 아무리 많이 더하더라도 0이어야 하는데, 이건 이상하지 않나요?

듣고보니 이상하다.

그런데 사실 이걸 제대로 이해하려면 수학에서의 측도론(Measure Theory)이라는 것을 좀 공부해 볼 필요가 있다. 초등학생에게 이것을 이해시키는 것은 내 능력으로는 불가능하다. (나도 대강 이해하고 넘어간 부분이라서…) 그래서 초등학생도 이해할 수 있는 설명을 고민하다가 이 글을 쓰게 되었다.

“크기”를 알기 위해서, 도대체 크기를 어떻게 정의할 것인가부터 생각해야 한다. 일반적으로, “크기”라는 것은 숫자 1개로 주어진다. 그리고 숫자 1개는 양수로 주어진다. “크기”라고 부르는 것은, 따라서 어떤 함수 관계를 나타내는 것이다. 집합을 하나 주면, 우리는 “크기”를 재는 함수에 따라 어떤 수를 하나 알게 되는데, 그 수가 바로 “크기”라고 부르는 수이다. 만약, 두 집합이 서로 겹치지 않았다면, 두 집합의 합집합의 크기는 두 집합의 크기를 그냥 더하면 될 것이다. 또한, 공집합의 크기는 0이 될 것이다. 하지만 이런 것들은 “크기”라고 부르는 함수가 갖고 있는 특징일 뿐, 실제로 그 함수 자체를 알려주지는 않는다. 이러한 특징을 만족하도록 우리가 잘 정해서 써먹어야 할 것이다.

많은 수학자들은 어떤 것들의 크기를 재기 위해서 많은 방법을 고려해 왔다. 이러한 방법은, 더군다나 눈에 보이지 않는 수학적 집합을 다루는 것이라, 누가 보더라도 확실히 알 수 있는, 그런 명확한 정의를 갖고 있어야 한다.

가령, 1이라는 수와 2라는 수 사이의 점들을 모두 모아둔 선분을 생각해 보자. 상식적으로, 이 선분의 길이는 1이라고 말할 수 있을 것이다. 그럼, 이제 3이라는 수와 4라는 수 사이의 점들을 모두 모아둔 선분을 생각해 보자. 이 선분의 길이 또한 1이라고 말할 수 있다. 그렇다면, 방금 생각해본 두 선분의 합집합은 어떨까? 1부터 4까지 사이의 점들을 모아두기는 했지만, 2부터 3까지에 해당하는 구간에는 점들이 존재하지 않는다. 이 선분의 길이는 뭐라고 정하는 것이 좋을까? 1? 2? 3?

뭐. 이런 문제는 상식적으로 2라고 정하는 것이 좋다. 전체적으로는 3의 길이이지만 1만큼의 길이에 해당하는 부분이 빠져있기 때문이다. 따라서 3 – 1 = 2 라고 한다. 여기서, “없는 부분은 세지 말자”는 규칙이 나올 수 있을 것이다.

다음과 같은 것을 생각해 보자.

유명한 수학자인 George Cantor가 제안한 예제이다. 가장 위쪽의 선분에서 출발하는데, 각 조각을 매번 3등분 하면서 가운데 조각은 빼버린다. 이 과정을 “무한히” 많이 반복한 후의 결과물을 “칸토어 집합”이라고 부른다. (다시한번 말하지만, 무한히 많이 반복하여야 한다. 이 과정의 중간 결과물은 칸토어 집합이 아니다.)

뭐, 가장 위쪽의 선분의 길이를 1이라고 해 보자. 두번째 결과물은 2/3이 될 것이다. 세번째 결과물은 4/9가 될 것이다. 이런식으로 2/3배가 되면서 점점 길이는 짧아진다. 그렇다면, 이 과정을 무한히 반복한 후의 결과물의 전체 크기는? 0이라고 보는 것이 타당할 것이다. 즉, 위와 같은 집합은 그 크기가 있을 법도 한데 0이다.

잠깐. 빼먹은 집합이 있는데. 유명한 집합이다. “0과 1사이의 모든 유리수를 모아둔 집합”이라는 놈이다. 이놈의 크기는? 어떻게 하지? 0인가? 1인가? 아니면 그 사이에 어떤 값? 아니면 1보다 큰가?? 음…답부터 말하자면, 이 집합의 크기는 0이다. 그걸 말하기 위해서는 다음과 같이 생각해 봐야 한다.

가령, 직선 위의 집합으로 {0}을 생각한다면, 이 집합의 “크기”는 0이 된다. 왜냐하면 0부터 0까지의 길이는 0이기 때문이다. 마찬가지로, 그냥 몇개의 수를 모아둔 {0, 4, 3, 12}같은 집합의 크기도 0이다. 크기가 0인 집합 4개의 합집합이기 때문이다. 그럼, 크기가 0인 집합을 무한히 많이 모아두면 얼마나 커질까?

(다음 글에서…)

바이오메가/아바라

츠토무 니헤이의 “Blame”을 접하고 나서 나의 상상력을 자극하는 그의 스토리에 흠뻑 빠지게 되었다. 그리고, Blame의 이전 시나리오에 해당하는 바이오메가를 접했다.

음…나오는 애들 생김새는 다 똑같고, 비공식 초거대 구조물이나 동아중공이 뭔지 알 것 같았다.

Blame을 한번 더 봐야겠다는 생각이 들었다. 아쉬운점은 내가 결국 Blame의 10권을 구하지 못할 것 같다는 점. 그리고 Noise도 구해야 하는데 어찌될지 모르겠다.

아바라는 마찬가지로 츠토무 니헤이의 다른 단편인데, 그럭저럭 볼만했다.

참고로, 아바라와 바이오메가의 번역은 개판이다. 내가 사전 찾아가면서 번역해도 이렇게는 안할 듯. (시간은 더 걸리겠지만…) 번역판 사서 보실 분들은 원판에서 뭐라고 했는지 상상해가면서 읽어야 한다.

정규분포의 적분

정규분포(Normal distribution)는 통계는 물론이고 이 세상을 설명하는 이론 중에서 대부분의 경우에 자주 등장한다. 이건 수학을 문어발식으로 손댔던 가우스가 연구를 좀 했었기 때문에 가우스 분포(Gaussian Distribution)이라고도 한다. 그 생긴 모양은 다음과 같다.

$f(x)=Aexp(-a(x-m)^2/s)$

여기서 A, a, m, s는 다 적당히 주어진 상수다. 오늘은 이 함수를 적분해 보도록 하자. 이걸 처음부터 적분하려면 귀찮으므로, x를 x-m으로 평행이동하고, 그렇게 평행이동한 x를 $\sqrt{s/a}x$로 변수변환하고, 다시 전체 함수를 A로 나눠준 다음의 함수를 적분해 본다.

$g(x)=exp(-x^2)$

이게 너무 간단해 보인다면, 다음의 내용을 읽지 말고 원래의 $f(x)$의 적분에 도전해 보고나서 다시 되돌아오기 바란다.

물론, 여기서 적분이라 함은 x의 구간을 0부터 무한대까지로 잡는 경우에 대한 적분이다. 수학과에서 이걸 배울 때는 원래 이 적분이 수렴하는지 안하는지부터 따져야 하지만 이 적분의 수렴성은 또한 쉽게 증명할 수 있으므로 건너 뛴다.

미적분 교재에 등장하는 가장 간단한 계산은 다음과 같다.

(참고 : 고형주, 신해용. 미분적분학. 경문사)

일단, 저걸 적분할 수 있다 치고 무턱대고

$I=\int _0 ^\infty g(x)=exp(-x^2)dx$

라고 한다.

근데 적분 안에 들어가 있는 변수는 사실 그놈이 그놈이므로 $I=\int _0 ^\infty h(y)=exp(-y^2)dy$ 라고 써도 된다. 그럼

$I^2 = \int_0^\infty \int_0^\infty g(x)h(y)dxdy= \int_0^\infty\int_0^\infty exp(-x^2)exp(-y^2) dxdy$

가 된다.

근데 지수함수는 곱셈을 덧셈으로 바꾸는 신묘한 성질이 있다. 따라서 위의 식은

$I^2 = \int _0 ^\infty \int _0^\infty g(x)h(y)dxdy= \int_0^\infty \int_0^\infty exp(-(x^2+y^2)) dxdy$

라고 써도 된다. 이제 변수변환을 하자. (x, y) 평면에서 2중적분이므로 $(r, \theta)$ 평면에서의 2중적분으로 간단히 바꿀 수 있는데, 변수변환에서 가장 중요한게 구간을 바꾸는 것이지만 어차피 $\theta$에 대해서는 한바퀴 다 돌려야 하므로 $d\theta$ 적분은 그냥 $2\pi$가 되어 버린다. 그럼

$I^2 = 2\pi \int_0^\infty exp(-r^2)r dr$

이렇게 된다. 이건 간단하게 암산으로도 계산할 수 있는데, 뒤에 적분 부분이 1이 되어 버린다. 따라서

$I^2 =2\pi$

이제 우리는

$I=\sqrt{2\pi}$

라는 사실을 알게 되었다.

이제 나머지는 A, a, m, s를 원래대로 되돌려 주는 것이다. 이건 적분의 변수변환을 잘 해주면 되니까 연습삼아서 직접 해보기 바란다.

아, 본론으로 돌아와서. 표준정규분포를 적분하면 1이 되는 이유는, 표준정규분포를 적분해서 1이 되도록 위의 A를 “적당히” 맞춰주었기 때문이다. 그렇게 적당히 맞춰주어야만 하는 이유는, 표준정규분포를 확률밀도함수로 쓰기 위해서는 확률의 가장 중요한 성질인 “확률의 모든 합은 1이다”를 만족해야만 하기 때문이다. 즉, 위에서 정규분포를 적분하는 것과는 관련이 없다고 봐도 좋다.

진자의 등시성

이번시간에는 진자의 등시성을 수학적으로 증명해 보자.

일단, 진자의 등시성이 뭔지나 알아야 증명을 하겠다. 진자의 등시성이란 “길이가 같은 진자는 질량에 관계 없이 주기가 같다”는 것이다.

원래 이런 문제를 풀 때는 관습적으로 공기의 저항은 무시한다. (그러려니 하자.)

그림을 하나 퍼왔다. 원본 출처는 아래.


http://moolynaru.knu.ac.kr/high_phy_ii/force/26%EB%8B%A8%EC%A7%84%EC%9E%90/26%EB%8B%A8%EC%A7%84%EC%9E%90.htm


진자는 진자의 끈이 팽팽하게 당겨져 있는 한 어쨌든 원 위에서 움직일 수밖에 없다. 따라서, 중력을 어느 방향으로 받든지간에 상관 없이, 실제로 중력과 장력의 합력은 접선 방향으로만 나타나게 된다. 그림을 보면 진자를 가운데로 끌어당기는 힘은 $mg \sin\theta$가 있다. 중력 중에서 오직 그만큼만 실제로 작용하게 된다는 뜻이다. (왜 그렇게 되는지는 자습.)

그럼 우리의 위대한 방정식 F=ma를 적용하면

$ma=-mg sin\theta$

앞에 -부호가 붙은 이유는, 힘이 작용하는 방향이 $\theta$가 커지는 방향의 반대방향이기 때문이다. 중심점 근처에서 $\theta$가 커지는 방향은 바깥 방향인데 (그림의 상황에서는 오른쪽) 힘이 실제로 작용하는 방향은 안쪽 방향이다. (그림에서는 오른쪽)

그리고 여기서 가정이 하나 더 들어간다. 별다른 이유는 없지만, 진자가 움직이는 진폭이 아주 작다고 가정한다. 여기서 “아주 작다”는
말의 의미는 “그렇게 가정해서 풀어도 틀리지 않을 정도로 작다”는 뜻이다. 즉, 진폭이 커지면 이렇게 풀 수 없다. 진폭이
커지게 되면 비선형 방정식이 나오는데, 비선형 방정식은 풀기가 대단히 어렵다. 진폭이 작으면 $\theta$가 작다는 뜻이므로 $mg \sin\theta$를 근사식으로 적어서 대략 $mg
\theta$로 쓸 수 있다. (원한다면 sin함수의 3차까지 써도 된다. 물론 그 방정식은 알아서 잘 풀어보자. 여기서는
다루지 않는다.)

$ma=-mg\theta$

따라서

$a=-g\theta$

일단, 여기서 질량이 사라졌다는 사실에 놀라워해야 한다. 여기서, 왼쪽에 있던 ma의 m은 관성질량이고 오른쪽에 있던 mg의 m은 중력질량인데, 둘을 약분해도 괜찮다는 사실을 아인슈타인이 말했었다. 이게 그 유명한 일반 상대성 원리다.

그럼, 가속도는 무엇의 가속도인가? 당연히 변위의 2차 미분이다. 여기서 변위는 x인데, 우리는 지금 변수를 $\theta$로 쓰고 있었으므로 둘을 바꿔줄 필요가 있다.

위의 그림을 보면 알겠지만, sin값은 높이를 빗변의 길이로 나눈 값이고, 빗변을 $l$이라고 하고 높이를 $x$라고 하면, $\theta = x/l$이 된다. 대입하자.

$a=-gx/l$

여기서 $g$랑 $l$은 상수니까 신경 안써도 되고, 어쨌든 x를 두번 미분한게 a니까, 두번 미분해서 자기 자신이 그대로 나오고 -가 붙는 함수를 찾으면 된다. 당연히, 누구나 알겠지만 sin과 cos함수가 있다. 넣자.

$x=Asin(\sqrt{g/l}t)+Bcos(\sqrt{g/l}t)$

여기서 A와 B는 처음에($t=t_0$) 어디서 얼마나 빠르게 시작했느냐에 따라서 달라진다. 즉, 진자를 처음에 밀 때 어디서 어느 방향으로 얼마나 세게 밀어줬는지에 따라서 결정된다.

(여기서, sin함수와 cos함수 이외의 다른 함수가 있지 않은가? 라고 생각할 수도 있는데, sin과 cos함수만 있으면 모든 진동을 다 표현할 수 있고, 그 외의 다른 함수로 표현해봐야 그건 sin과 cos함수의 합 정도로 표현된다는 것을 증명할 수 있다.)

그럼 저 함수는 시간이 $2\pi\sqrt{l/g}$만큼 지날 때마다 원래 자리로 원래의 속력을 갖고 되돌아 오게 된다. 즉, 바로 이 시간이 진자의 주기가 된다. 그런데, 주기를 나타내는 식을 보면 질량이 보이지 않는다. (아까 사라졌으니까….)

따라서 단진자는 길이와 중력가속도가 정해지면 그 주기도 결정되며, 질량이 얼마나 큰가에는 영향을 받지 않는다. (단, 진자의 끈이 끊어지지는 않는다는 가정이 또 필요하다.)

이 성질을 이용해서 중력가속도를 측정할 수 있는데, 공대, 자연대 가면 필수적으로 듣지만 대부분 싫어하는 일반물리학 실험에서 다루게 된다.

이에 대한 좀 더 자세한 설명은 아래 페이지를 참고하자.


http://physica.gsnu.ac.kr/phtml/mechanics/oscillation/application/application.html

기업은행 인터넷 뱅킹 사용하기

이번엔 기업은행이다.


http://www.ibk.co.kr

에 접속하자.

초기화면이다. 인터넷 뱅킹 로그인 버튼을 눌러주자.

이런게 나오고

이런게 나온다. 인증서를 선택하고 로그인하면 된다.

뭐, Active X는 알아서 전부 설치하면 되니까 별로 어려운 일이 아니다.

예상과는 조금 다르게, 의외로 잘 된다. -_-;

전산 담당자가 우리은행보다는 괜찮은 사람인듯 싶다.

계좌이체는 아직 수수료 면제 서비스를 못 받고 있어서 하지 못했다. (통장 들고 은행을 직접 찾아가야 하는데, 시간도 없고 통장도 못찾겠다…)

방통대 숙제하기

이번에 데이터베이스의 설계 및 구현 과목을 듣는데 중간고사 대체 과제가 DB를 실제로 설계하는 것이다.

문제는, 오라클 또는 MS-SQL을 써서 뭘 해야 한다는 건데, 중간에 ER-Win이라는 프로그램을 이용한 것을 캡쳐해서 제출해야 한다.

ER-win은 또 무엇인가…하면 Entity-Relation 그림을 쉽게 그릴 수 있게 해주는 툴이라고 한다.

오라클이든 MS-SQL이든 ER-win이든 다 좋은데, 왜 비싼 프로그램만 쓰게 하는지 모르겠다. 물론 세계적으로 가장 많이 사용되는 프로그램이고 이런걸 배워야 나중에 실무에서 금방 적용할 수 있겠지만, 학교면 학교답게 돈 없는 개발자들을 위한 오픈소스 솔루션도 지원하면 안될까?

SQL은 MySQL이나 postgreSQL이라는 걸출한 SQL프로그램이 있다.


http://www.mysql.com/



http://www.postgresql.org/


물론 여기에 빼먹을 수 없는 오픈소스 프로그램인 우리나라에서 만든 큐브리드도 있다.




http://www.cubrid.com/zbxe/home

ER그림 그리는 프로그램도 알아봤더니


http://www.fabforce.net/dbdesigner4/



http://gnuwin.epfl.ch/apps/DDT/en/


이런 그럭저럭 쓸만한 프로그램이 있다. 물론 둘 다 윈도우/리눅스 등에서 쓸 수 있다.

만약, NHN과 방통대 컴퓨터과학과가 제휴하여 학과 차원에서 큐브리드를 밀어준다면 어떨까? 국익에도 도움이 되고 NHN에도 도움이 되고, 오픈소스니까 가난한 개발자들에게도 도움이 되지 않을까.

혹시 NHN쪽에서 관련되어 일하시는 분 있으면 이 소식을 좀 전달해 주었으면 좋겠다. 그리 어려운 일은 아닐 것이다. 교재 개발을 새로 해야 할 뿐…

추가 : 오라클 설치했더니 백그라운드 서비스 때문에 느려졌다. 젠장. 숙제 끝나면 바로 지워야겠다.

티스토리 오타

블로거는 그들만의 방법으로 뭔가를 지적한다.

dread : 무서워하다, 두려워하다.

* 참고로, 스킨 수정하다가 이래저래 안돼서 지금 디자인이 개판이다.

추가 : 현재는 고쳐졌다. 10월 15일 개편때 업데이트 한 것 같다.

올블로그 5주년 기념

올블로그 5주년 기념으로 청계산에 다녀왔다.

메인 행사인 바베큐 파티에 참석을 못하여 아쉽지만, 산행은 재미있었다.

다양한 연령대의 사람들과 이야기를 나누는 것은 언제나 재미있다. 서로 배우고 서로 가르쳐 줄 수 있기 때문인 것 같다.

아무튼 올블로그 10주년 기념 행사에 꼭 참석하기로 했으니까, 블로그칵테일은 어떻게든 10주년 행사를 기획해서 주최했으면 좋겠다.

올블로그 5주년을 축하한다.

(그나저나, 올블이 생일빵은 없었는지 궁금하다…)

Donovan 씨로부터 받은 사진을 추가한다.

I appreciate for Donovan Mueller to send these photos.

ㅋㅋㅋㅋ

이게 나다.

Proudly powered by WordPress | Theme: Baskerville 2 by Anders Noren.

Up ↑