블로그

  • 트랜스포머3

    트랜스포머3편을 보고 왔다.

    심형래 감독이 헐리웃에 끼친 영향을 확인할 수 있었다.

    그리고 안내상씨는 언제 헐리웃으로 진출한거지?!

  • 레오나르도 다 빈치

    어떤 미술학원 광고다.

    레오나르도 다빈치도, 빈센트 반 고흐도, 파블로 피카소도 학원에 다녀야 미대가는 더러운 세상.

  • 고유값 구하기 문제

    컴퓨터를 이용해서 기계적으로 선형대수학 문제를 풀다 보면 흔히 만나는 문제가 고유값(Eigenvalue)구하기 문제이다. 그리고 이 문제를 풀다 보면 흔히 만나는 문제가 고유값의 순서이다.

    컴퓨터는 답만 맞으면 되지? 하는 철학으로 구현된 계산 방법을 이용하는데, 그러다보니 행렬을 연속적인 변수로 만들어 냈을 때 고유값의 순서가 바뀌는 경우가 있다. 내가 풀어야 하는 문제는 고유값의 순서가 바뀌면 안되는 문제이고 이 문제를 어떻게 해결하느냐가 관건이다.

    다음의 알고리즘을 참고하자.


    http://snowall.tistory.com/2595

    그리고 만든 것이 다음 프로그램이다.

    import numpy

    eig = numpy.linalg.eig

    matrix = numpy.matrix

    absn = numpy.abs

    a0 = 0

    a1 = 1

    a2 = 2

    for t2 in numpy.arange(-6.0, 6.1, 3.0):

    file = open(“data”+str(t2)+”.txt”, ‘w’)

    for t1 in numpy.arange(-r, r, stepping):

    test=eig(massMatrix(t1, t2))

    a2 = numpy.nonzero(test[0]==test[0].max())[0][0]

    a0 = numpy.nonzero(test[0]==test[0].min())[0][0]

    a1 = 2*(a0+a2)%3

    file.write(

    str(t1)+”\t”

    + str(t2)+”\t”

    + str(absn(test[0][a0]))+”\t”

    + str(absn(test[0][a1]))+”\t”

    + str(absn(test[0][a2]))+”\t”

    + str(absn(test[1][0, a0]))+”\t”

    + str(absn(test[1][0, a1]))+”\t”

    + str(absn(test[1][0, a2]))+”\t”

    + str(absn(test[1][1, a0]))+”\t”

    + str(absn(test[1][1, a1]))+”\t”

    + str(absn(test[1][1, a2]))+”\t”

    + str(absn(test[1][2, a0]))+”\t”

    + str(absn(test[1][2, a1]))+”\t”

    + str(absn(test[1][2, a2]))+”\t”

    + str(a0)+”\t”

    + str(a1)+”\t”

    + str(a2)+”\n”)

    이중 massMatrix는 논문에 써야 하는 영업비밀이라 공개하기가 좀 그렇고, 3차 정사각 행렬을 되돌려 주는 함수라는 것만 알려둔다.

    이런식으로 출력시키면 고유값이 끊기지 않고 부드럽게 이어져서 나온다.

    이 문제는 내가 석사때도 마주쳤었는데, 그땐 복소수로 이루어진 3차 정사각 행렬의 고유값 계산하는 1000줄짜리 프로그램을 직접 만들어서 풀었었다. 내가 미쳤었나보다. -_-;

  • 가게 여는 시간


    http://kldp.org/node/124415

    위의 문제를 풀어보았다.

    문제: 어떤 가게가 여는 시간이 a, 닫는 시간이 b라고 하자. x를 입력하면 가게가 열었는지 닫았는지 알려주는 함수를 만들어 보자.

    예: a=2시, b=15시. f(x=12)=true, f(x=1)=false, f(x=17)=false

    예: a=20시, b=5시. f(x=1)=true, f(x=12)=false, f(x=23)=true

    C언어라고 가정하자.

    가장 빠르게 떠오르는 답은 다음과 같다.

    isOpen(int a, int b, int x){

    if a if a return true;

    } else{

    return false;

    }

    } else {

    if a>x || x>b{

    return true;

    } else{

    return false;

    }

    }

    }

    KLDP게시판에 많은 고수분들이 괜찮은 풀이를 올렸는데, 그중에 내가 제안한 것 두가지만 여기서 설명하도록 하겠다.

    첫번째로

    isOpen(int a, int b, int x){ return ((a-b)(x-a)(x-b)/abs((a-b)(x-a)(x-b))+1)/2; }

    일단 ab인 경우에 bb이면 a-b는 양수이다. 이 경우에도 b 이 함수의 문제는 a=b, a=x, b=x인 경우에는 0으로 나누는 문제가 발생한다는 점이다. 예외처리를 위해서 if문을 쓸 수밖에 없게 된다.

    두번째로

    isOpen(int a, int b, int x){

    return (x-a+n)%n<(b-a+n)%n;
    }

    여기서 n은 하루의 길이를 나타내는 정수이다. 이런식으로 계산하는 것이 가능한 것은 24시간을 기준으로 할 때 항상 xb일 수 있겠지만(a=b는?) 실제 개념으로는 항상 ab인 경우에는 b-a가 음수가 되는데, 그런 사태를 막기 위해서 양변에 n을 더해준 후에 %로 잘라주게 된다.

    세번째로

    isOpen(int a, int b, int x){

    return (a-b)(x-a)(x-b)>0;

    }

    첫번째 답의 변형이다. 셋 중에서 제일 간단한 것 같다

    .

  • Tremulous

    요즘 Tremulous게임을 다시 하고 있다. 이 게임은 1인칭 총싸움 게임(FPS)이다.

    아래 주소에서 다운로드 받을 수 있다.


    http://www.tremulous.net/

    이 게임은 퀘이크3엔진에 기반한 완전한 오픈소스 게임이며, 누구나 개발할 수 있고 누구나 참여할 수 있다. 회원가입이 필요 없이 설치후 서버에 접속하여 바로 전투를 시작할 수 있다. 다른 온라인게임과는 다르게, “계정”이나 “ID”라는 개념이 없이 오직 닉네임만으로 서로를 알아본다. 물론 원한다면 계속해서 다른 닉네임으로 교체할 수 있다.

    인간팀과 에일리언팀으로 나뉘어져 싸우는데, 인간팀은 주로 총을 들고 원거리 사격으로 싸우고 에일리언팀은 직접 접근해서 적을 물어뜯어야 한다. 인간이 더 유리하다고 생각할 수도 있겠지만, 대체로 에일리언이 더 잘하는 것 같다. 에일리언은 매우 빠른 속도로 움직일 수 있고 인간팀은 느리다.

    양 팀 모두 기지를 구축해야 하는데, 새로 태어나게 되는 지점인 Telenode/Egg를 만들고 동력과 생명의 원천인 Reactor/Overmind를 잘 지켜야 한다. 승패는 점수나 킬 수가 아니라 오직 적의 전멸에 의해 갈린다. 즉, Telenode/Egg를 모두 없애고 동시에 적군을 모두 없애야 승리하게 된다. 어떤 경우에는, 인간팀 Telenode를 모두 없애는데 성공했음에도 불구하고 단 1명의 인간팀 괴수 플레이어때문에 에일리언팀이 패배한 경우도 있다.

    특징으로 투표 제도가 있다. 이에 관해서는 다음 글에 좀 더 자세히 설명되어 있다.


    http://snowall.tistory.com/637


    메인 운영자가 없는 대신 투표를 통해서 문제있는 플레이어들을 내보내고 게임 관리를 하게 된다.(물론 문제있는? 플레이어들이 더 많은 경우에는 그들이 정상이고 내가 이상한 플레이어이므로 다른 서버로 가자. 중이 싫으면 절이 떠나는 법이다.)

    맵도 흥미로운 맵이 많다. 우주선이 배경인 맵이 대부분이지만, 고대의 사원, 슈퍼마리오월드같은 테마로 만들어진 맵도 있다.

    그리고 “출발! 드림팀” 같은 맵도 있다.

    아무튼 신나고 부담없는 FPS를 원한다면 Tremulous를 해보자.

    컴퓨터 사양은 낮은편인데, 대체로 5년전에 쓰던 컴퓨터에서도 부드럽게 잘 돌아가니 걱정없다.

  • 전세대란


    http://news.hankyung.com/201107/2011071533877.html?ch=news

    전셋값이 오르고 있다는 문제점을 지적한 기사이다. 그런데 그 해법으로…

    해법은 공급에서 찾아야 한다. 전세난은 공급 부족이 1차적인 원인이기 때문이다.

    우선 도심 주택 공급을 서둘러야 한다. 소형·임대주택 비율로 족쇄가 묶여 있는 재개발·재건축을 속히 활성화해야 한다.

    라고 제안하고 있다. 그런데, 소형-임대주택 비율때문에 재개발이 안되는 이유는 건설회사에서 돈이 안되는 소형-임대주택은 개발하지 않으려고 하기 때문이다. 이 족쇄를 풀어서 재개발을 활성화 하면? 당연히 소형-임대주택보다 대형 주택이 공급된다. 그렇다면, 대형주택 공급이 늘면 전세대란이 해결되나? 절대 안된다. 전세대란은 서민이 겪고 있는데, 서민은 대형주택에 들어갈 돈이 없다. 대형주택 공급이 늘어나면 대형주택의 가격이 서민이 살 수 있을만큼 떨어질까? 결코 떨어질 리 없다. 건설회사가 미치지 않고서야 손해보는 장사를 할 리 없다. 물론 그래봐야 그 대형주택들은 많은 부분이 미분양으로 남겠지만.

    따라서 공급을 늘리기 위해서는 국가에서 강제로 소형-임대주택을 건설하도록 하거나, 국가에서 직접 건설해야 한다. 그러나 그렇게 할 수 없다. 그것은 자유주의 시장경제 원칙에 어긋나기 때문이다. 그렇다면, 어떻게 하면 이 전세대란을 해결할 수 있을까? 해법을 공급에서 찾는 발상을 바꿔야 한다. 수요를 줄여야 한다. 어떻게 수요를 줄일 것인가? 전세대란의 주 수요처는 당연히 서민이다. 서민을 줄이면 전세대란은 자연스럽게 해결된다.

    서민을 줄이면, 그 서민을 다 죽일수는 없으므로 필연적으로 다른 계층의 사람들이 늘어나게 된다. 따라서 서민을 줄이는 방법은 두가지로 요약된다. 서민을 빈곤층으로 만들거나 서민을 중산층이나 상류층으로 만들면 된다. 좀 더 손쉬운 방법은 서민을 빈곤층으로 만드는 방법인데, 그건 정부에서 알아서 잘 하고 있으므로 넘어가도록 하자. 서민을 중산층으로 만드는 방법은 소득을 올려주거나 집값을 낮추는 것이다. 물론 집값을 낮추는 방법을 선택하면 순환논리에 빠지므로 소득을 올리는 방법에 집중하도록 한다.

    서민의 소득을 어떻게 올릴 수 있을까? 서민은 자영업자이거나 피고용인이다. 자영업자의 소득을 올리는 방법은 경기부양이다. 단, 경기부양책은 잘못 사용하면 인플레이션이 더 빠르게 오기 때문에 적절하게 사용해야 한다. 피고용인의 소득을 올리는 방법은 임금인상이다.


    http://franchisor.tistory.com/entry/%EC%9D%8C%EC%8B%9D%EC%A0%90-%EA%B2%BD%EC%98%81%EA%B3%BC-%EC%A0%81%EC%A0%95-%EC%9D%B8%EA%B1%B4%EB%B9%84-%EB%B9%84%EC%9C%A8






    https://encrypted.google.com/url?sa=t&source=web&cd=17&ved=0CEAQFjAGOAo&url=http%3A%2F%2Fwww.investkorea.org%2FInvestKoreaWar%2Fwork%2Fik%2Fkor%2Flr%2Flr_down1.jsp%3Ffilename%3D20050811093108_1.hwp%26path%3D20061205&rct=j&q=%EC%82%AC%EC%97%85%EC%B2%B4%20%EC%9D%B8%EA%B1%B4%EB%B9%84%20%EB%B9%84%EC%A4%91&ei=OUwgTpwBzsetB4yjoIAC&usg=AFQjCNFzgDDuCM57V63feURPN4bzfTKGCw&cad=rja

    이런 링크를 참고한다면 인건비 비중이 20%정도 된다는 사실을 알 수 있다. 만약 임금을 5%인상



    [각주:

    1

    ]



    하게 된다면 단순 계산으로 인건비 비중은 21%로, 약 1%정도 올라가게 된다.

    예를 들어, 삼성전자를 생각해 보자.





    http://www.ytn.co.kr/_ln/0102_201102070014414076



    삼성전자의 매출액이 154조원인데, 여기서 1%는 약 1조5천억원이 된다.


    http://www.ohmynews.com/NWS_Web/view/at_pg.aspx?CNTN_CD=A0000768192


    삼성전자의 고용인 수는 대략 8만명 정도인듯 한데, 계산을 쉽게 하기 위해 10만명이라고 가정하자. 1조5천억원이 10만명에게 균등분할된다고 하면 1500만원이 된다.



    [각주:

    2

    ]


    연봉이 1500만원 인상된다면 충분하지는 않겠지만 서민들이 전세대란을 탈출하는데 꽤 도움이 될 수 있는 금액이라고 생각한다. 물론 모든 회사가 삼성전자처럼 매출을 낼 수는 없으므로 이 돈의 절반도 안되는 수준의 임금인상이 가능할 수 있다. 그러나, 그정도 돈이라도 인상된다면 어떻게 되지 않을까?

    자, 결국 논의는 다시 최저임금으로 돌아오게 된다. 그 얘기는 다음에 해보도록 하고, 어쨌든 나는 정부가 서민을 차곡차곡 줄여나가고 있는 건 맞다고 생각한다.



    [각주:

    3

    ]



    1. 올해 최저임금은 약 6%올라갔다. 이 비율을 반영하여 5%정도 올라간다고 쳐 보자.

      [본문으로]
    2. 물론 인건비인 20%를 10만명으로 나누게 되면 삼성전자 평균 연봉이 3억이라는 무시무시한 결과가 나온다. http://www.zdnet.co.kr/news/news_view.asp?artice_id=20110630144546 이 기사를 보면 삼성전자 평균연봉은 대략 1억원정도 된다. 그 얘기는 결국 인건비 비중이 20%가 안된다는 뜻이다. 그리고 삼성전자는 한국 대표 기업이니까 말해본 “예제”일 뿐이다. 욕하자고 얘기한거 아님.

      [본문으로]
    3. 그 결과 어느 계층이 늘어나고 있는지는 잘 모르겠지만.

      [본문으로]

  • 주기율표


    http://www.ptable.com/

    내가 본 인터넷 주기율표 중 가장 괜찮은 녀석인듯.

  • 퀀텀점프


    http://biz.heraldm.com/common/Detail.jsp?newsMLId=20110714000074

    경제 기사를 보다가 물리학 용어가 나와서 반가웠다. 나같은 물리덕후에게는 이런 단어는 지나가다가 공명을 일으켜서 머릿속에 잘 흡수된다.

    다만 퀀텀점프라는 단어는 영어를 발음대로 옮긴 용어라 더 어렵게 느껴진다는 점은 아쉽다. “양자 도약”이라는 용어를 써서 조금(?) 쉽게 했으면 어떨까 싶다.



    [각주:

    1

    ]


    아무튼, 양자 도약이라는 용어는 어떤 계가 특정한 상태에서 다른 상태로 중간단계를 거치지 않고 단숨에 변화하는 현상을 뜻한다. 미시 세계에서는 매우 흔히 일어나는 일이며, 거시 세계에서는 구경하기 힘들다.

    그러나 왜 친환경인지에 대해서는 별다른 설명이 없다. 공원이 생긴다는 점과 올림픽도로를 지하화시킨다는 점이 친환경적이라고 주장하는 이유인 것 같은데, 이와 관련되어 많은 문제들을 잘 해결해야 할 것이라고 본다. 그냥 압구정동 전체를 다 밀어버리고 공원화 하면 안되나?

    흥미로운 점은 설명회를 모두 교회에서 한다는 점.

    1. 양자도약이라는 용어도 한자어니까 물리학 전공자가 아닌 사람에게 어렵기는 마찬가지긴 하지만, 그래도 한글화된 한자어랑 한글화된 영어중에는 한글화된 한자어가 좀 더 쉽지 않을까?

      [본문으로]

  • 최저임금


    http://news.kbs.co.kr/society/2011/07/13/2323289.html

    최저임금이 4580원으로 결정되었다고 한다.

    근로자측은 5410원을 요구했고, 사용자측은 4320원을 요구하였다.

    정확히 말해, 근로자측의 요구는 5410원 이상의 임금이고 사용자측의 요구는 4320원 이하의 임금이다.

    적절한 이해를 위해 숫자를 바꿔보자. 근로자측이 4320원 이상의 임금을 요구했고, 사용자측이 5410원 이하의 임금을 요구했다고 하자. 물론 근로자는 많이 받을수록 좋고 사용자는 적게 줄수록 좋다. 따라서, 최적의 임금은 그 사이에 있는 4860원정도가 될 것이다. 즉, 예를 들자면, 4860원은 둘 다 받아들일 수 있는 임금이 된다.

    원래의 상황으로 돌아와서, 5410원 이상의 임금이면서 4320원 이하의 임금이 되는 경우가 존재할 수 있을까? 우리나라에서 정상적인 교육을 받은 사람이라면 그런 경우는 존재할 수 없다는 것을 알 수 있다. 결국은 타협을 해야 하는데, 5410원 이상인 지점이나 4320원 이하인 지점은 어느 한 편이 받아들일 수 없으므로 자연스럽게 5410원 이하인 지점과 4320원 이상인 지점에서 양쪽 모두 받아들일 수 없는 적절한 지점에서 최저임금을 결정하는 것이 공평하다.



    [각주:

    1

    ]


    그러고보면 결국 그 중간점인 4860원 정도에서 결정된다는 결론이 나온다. 이제 결정된 최저임금이 4580원이므로, 대략 사용자로부터 근로자측의 의견이 3:1 정도로 반영되었다. (사용자의 의견보다 260원 비싸고, 근로자의 의견보다 830원 싸므로 대략 1:3의 비율)



    [각주:

    2

    ]



    아무래도 사용자의 입김이 더 많이 반영된 결과라고 보인다.

    사용자측의 요구보다 비싸기 때문에 사용자의 비용이 늘어나고 이익이 줄어들 것이라는 의견이 많다. 경제에 악영향을 줄 것이라는 의견도 있다. 영세사업자들은 경영에 어려움을 겪을 것이라는 의견도 많다. 그러나 최저임금조차 주지 못하는 사업이 과연 해야 하는 가치가 있는 사업일까? 만약, 그런 사업이 지속되어야 하는 충분한 가치가 있는 사업이라면 최저임금을 보장하지 못해도 문제가 없을까?

    근로자측이 입장에서는, 필요하다고 주장한 돈보다 적은 임금이기 때문에 먹고살기 힘들 것이다. 이에 대한 이론적인 해법은 최저임금이 보장되지 않는 직장에는 취직하지 않으면 된다는 것이다. 물론 그건 말뿐인 해법이고 전혀 도움이 되지 않는다. 경력을 쌓기 위해서든지, 적은 돈이라도 벌어야 먹고살 수 있기 때문에 최저임금이 보장되지 않아도 일을 해야 한다. 그리고 그걸 잘 알고 있기 때문에 사용자들은 최저임금 이하의 임금으로도 사람을 고용할 수 있다.

    그러나 둘 다 불만족스러운 최저임금이기 때문에 4580원의 최저임금은 공평할 수 있다.



    [각주:

    3

    ]


    전태일 열사가 세상에 남긴 말은 딱 하나다. 근로기준법 지키라고.

    있는 법은 지켜야 하지 않겠나.

    대한민국이 자유주의 경제체제를 채택하여 무한경쟁 속에서 뒤떨어지면 도태되는게 당연한 나라인건 알겠는데, 법은 지키라고…

    추가 –

    생각해봤는데, 최저임금이 올라서 돈이 부족해지고 그 결과 사람을 덜 뽑게 되어 취업난이 심화된다는 논리는 틀렸다고 생각한다. 최저임금이 그대로이거나 내려가서 남는 경우에는 사람은 그냥 그대로 쓰고 남는 비용은 사업주의 이익으로 들어간다. 그렇다면 최저임금이 올라가서 손해를 보는 것도 사업주가 감수해야 하는 것이 타당하다. 어차피 경영 환경은 항상 변하게 마련이고 그때그때 상황에 맞는 적절한 대처를 하는 것이 바로 경영자의 일이니까. 못하겠으면 사업을 접는게 당연한 것이고. (영세 사업자의 업주의 가족들은? 어딘가에서 마찬가지 이유로 최저임금도 못 받고 일을 하게 되겠지만, 그럼 이제 본인의 상황이 변했다는 이유로 최저임금을 올리자는 전직 사장님의 주장이 설득력이 있어질 것인가…)

    1. 공정한가?는 잘 모르겠지만.

      [본문으로]
    2. 이렇게 따지는 것이 합리적이거나 적절한지 잘 모르기 때문에 이렇게 따져보았다.

      [본문으로]
    3. 다시한번 말하지만, 이게 공정하다는 뜻은 아니다.

      [본문으로]