[카테고리:] 컴퓨터

  • 컴퓨터에게 어떻게 일을 시킬 것인가

    컴퓨터에게 일을 시키기 위해서는 컴퓨터가 작동하는 방식과 컴퓨터가 사용하는 언어를 알아야 한다.

    컴퓨터가 작동하는 방식은 간단히 말해서 “절차적”이다. 절차를 정하면 그대로 수행하고, 절차를 저장해 두었다가 반복할 수도 있다. 여기서 절차적이라는 말은 자료를 받아서 결과를 내놓는다는 것을 뜻한다. 프로그래밍 방법론에서 나오는 절차적-재귀적이라는 용어와는 조금 다르다.

    그러면, 어떤 절차를 만들 수 있을까?

    거의 대부분의 프로그래밍 언어는 4가지의 기본적인 기능이 있다.

    1. 변수 선언, 관리

    2. 사칙연산

    3. 조건분기

    4. 반복

    이 네가지 기능을 조합하면 별걸 다 만들 수 있다. 아이폰도 구글 검색도 이 네가지 기능을 아주 많이 조합해서 만든 것이다.

    저 네가지 기능을 어떻게 조합해야 내가 풀고싶은 문제를 해결하라고 시킬까?

    그것이 바로 “알고리즘”과 “자료구조”가 된다. 알고리즘은 결국 문제를 해결하기 위한 절차의 집합이다. 1단계 2단계 3단계 … 를 다 모으고, 그렇게 모인 것이 문제를 반드시 해결할 수 있음을 증명하면 알고리즘이 완성된다.

    뒤에 나오는 증명은 전문가에게 남겨둔다고 쳐도, 단계를 어떻게 쪼개야 할까?

    일단 가장 중요한건 이 문제를 풀어야 하는 절박함이다. 컴퓨터 문제는 풀 필요가 없으면 풀지 않는 것이 좋다.

    주어진 문제를 반드시 풀어야 한다고 할 때, 누구나 이런 생각이 들 것이다. “아…!!!! 이것만 알면 저거 푸는건데!”

    바로 그 알고 싶은것을 적는다. 그것이 바로 풀어야 하는 문제의 “가장 마지막 절차”가 된다.

    그것을 알았을 때, 그걸 알면 그것으로부터 답을 어떻게 구하는지 적는다.

    예를들어, 삼각형에서 어떤 하나의 각x을 알고 싶다고 하자. 그럼 나머지 두 각a, b만 알아낼 수 있으면 두 각의 합을 180에서 빼면 원하는 각도를 알아낼 수 있다.

    x = 180-a-b

    다음으로, 이제 a와 b를 알아내는 방법을 마찬가지로 적는다. 무엇만 알아내면 그것들을 알아낼 수 있는 것인지. 물론 각각을 따로 적어야 할 수도 있다. 그리고 그 각각에 대해서 또 여러개의 알아내야 하는 세부 사항들로 나누어질 수도 있다. 그러나 각각은 하나의 절차로 이루어져 있다. 다음과 같이 적어보자.

    문제P

    P는 a, b를 알면 된다.

    소문제A

    a는 a1과 a2를 알면 된다

    소문제A1



    소문제A2



    a1과 a2를 알면 a는 간단하게 구할 수 있다.

    소문제B

    b는 b1과 b2를 알면 된다.



    a와 b를 알면 P는 간단하게 구할 수 있다.

    저렇게 해서 점점 작은 문제로 분해해 나가면 된다.

    가장 작은 문제는 앞에서 설명한 4가지 기본 기능을 사용해서 풀 수 있는 수준까지 쪼개야 한다. 문제를 작게 쪼개고 각각의 작은 문제를 절차로 변환하는 것은 한번에 되지 않지만, 많은 연습을 하면 머릿속에 전체적인 구도가 금방 잡히게 된다.

  • IT후진국

    게임 셧다운제, 인터넷 실명제, ActiveX로 도배된 IE전용 웹뱅킹, 여기에 이어 국공립대에서 클라우드 서비스를 사용하지 못하게 한다는 소식까지 들려왔다.

    종합적으로 판단하자면, 우리나라 정부는 더이상 IT산업의 발전에 생각이 없을 뿐만 아니라 오히려 퇴보시키려는 의도를 갖고 있어보인다.

    비록 구더기가 무서워서 장을 담글 수는 없지만 벼룩을 잡기 위해서 초가삼간을 태울 수 있는 정부다.

  • 노트북 가격

    미국 사는 친구가 한국에서 아주 유명한 브랜드의 가장 최신형 노트북의 보급형 라인업 모델



    [각주:

    1

    ]



    을 산다고 했다. 가격이 얼마냐고 물어봤더니 리퍼비시 제품으로 850달러라고 했다.

    흥미가 생겨서 그 제품을 신품으로 최하위 라인업이 얼마냐고 물어봤더니 1050달러라고 했다. 환율 쳐도 120만원이 안된다. 그 제품의 한국 가격은 다나와 최저가 기준 135만원. 실제 구입가는 140만원정도 될 것이다.

    앞으로 그 회사 제품은 진짜로 안사야겠다. 참고로, 한국 회사라는 것만 밝혀둔다.

    1. 그놈이 정확히 어떤 모델인지는 물어보면 따로 알려줄 수 있다.

      [본문으로]

  • 쥐분투 11.04

    집에 있는 데스크탑에 쥐분투 11.04를 설치하고 설정하였다. 여기서 쥐분투는

    http://xubuntu.com

    에서 배포하는 리눅스 배포판이며, 마스코트로 “쥐”를 사용하고 있기 때문에 어느 나라의 어떤 대통령에게 추천해주고 싶은 리눅스 배포판이다. 물론 그분이 쓸 수 있을 만큼 쉽고 간편하니까 추천하는 것이다. (리눅스 절대 어렵지 않아요)

    여러가지로 좋아진 것을 느낄 수 있었는데, 나의 키보드 HHKP2에 있는 음량조절키가 작동한다는 점이 흥미로웠다. 언제부터 지원되던건지는 모르겠지만, 잘 된다.

    이제 집에는 노트북 안들고 와도 될듯.

  • 윈도우즈와 파이썬

    삽질일지.

    윈도우즈의 파일 이름에서는 공백문자와 \기호를 허용한다. 문제는, \기호는 탈출문자이고, 공백에도 의미가 있다는 점이다.

    내가 하려고 한 것은 여러개의 tif파일을 bmp로 바꾸는 프로그램을 Imagemagick을 사용하여 만드는 것이었다.

    cmd에서는 다음과 같이 명령을 하면 잘 된다.

    D:\>convert source.tif target.bmp

    문제는 이걸 파이썬에 넣었을 때의 문제였다.

    os.system(“convert ” + source + ” ” + target)

    위와 같이 넣으면 매개변수가 틀리다면서 오류가 나온다.

    그래서 대체 뭐가 틀렸길래 하면서

    D:\>convert

    이렇게 쳤더니 Imagematick의 convert에 대한 설명이 쭉 나온다.

    그래서, 파이썬에서

    os.system(“convert /?”)

    이렇게 실행시켰더니 FAT를 NTFS로 바꾸는 것에 관한 설명이 나왔다. 아뿔싸. 윈도우즈 기본 유틸에도 convert가 있구나. 그럼 cmd창에서 convert만 쳤을 때에도 저게 나와야지 왜 이때와 저때에 다른 명령어가 실행되는 것인가.

    그래서.

    os.system(“C:\Program Files\ImageMagick-6.7.4-Q16\convert.exe” + source + ” ” + target)

    이렇게 했더니 C:\Program은 명령어가 아니랜다. 뭣이?

    한참을 고민한 끝에, 윈도우즈에서 빈칸이 어떤 의미인가 깊이 생각한 후 다음과 같은 처방을 내렸다.

    os.system(‘\”C:\\Program Files\\ImageMagick-6.7.4-Q16\\convert.exe\” ‘ + source + ” ” + target)

    자세히 보면 \가 여러개 추가되어 있는 것을 발견할 수 있으며, 큰따옴표와 작은따옴표가 뒤섞여 있는 것을 발견할 수 있다. 파이썬에서 큰따옴표와 작은따옴표는 다른 의미를 갖고 있는데, 그에 대해서는 각자 탐구해 보도록 하자.

    빈칸을 파일 이름에 허락하면서 동시에 빈칸을 매개변수들의 구분자로 사용한 멍청한 MS의 뻘짓에 나 또한 삽질을 하였다.

  • 컴퓨터에게 말을 가르치자

    VB.net에서는 컴퓨터에게 말을 시킬 수 있다.

    일단 다음과 같이 선언한다. SAPI는 Speaking API인것 같다.

    Public SAPI As Object = CreateObject(“SAPI.spvoice”)

    한번만 쓰고 버릴 것이면 함수나 서브루틴 안에서 Public이나 Private대신에 dim으로 선언해도 된다.

    다음과 같이 쓰면 “speak”이라는 말을 한다.

    SAPI.Speak(“speak”)

    저 SAPI의 Speak메소드가 받는 형식은 string이면 뭐든지 된다. 아무거나 다 읽어준다. 숫자도 적당히 끊어서 읽어준다.

    우리도 뿌리깊은 코드를 써 보자.

  • 보안 모니터


    http://www.instructables.com/id/Privacy-monitor-made-from-an-old-LCD-Monitor/

    특수안경을 쓴 사람만 볼 수 있는 모니터를 집에서도 손쉽게 만들 수 있다.

    특수안경은 사실은 그냥 편광필름이고, 그 특수 모니터는 액정 편광판을 빼면 된다.

    3차원 입체안경을 써도 볼 수는 있다. 다만 양쪽 눈 중에서 한쪽으로만 보일 것이다.

  • 연구소 보안

    우리 연구소는 보안에 꽤나 신경을 쓴다.

    철저한 보안을 위해서, 인트라넷은 “새로고침”을 할 때 세션이 끊어지도록 되어 있다. 로그인에 쿠키 방식이 아닌 세션 방식을 사용하고, 새로고침시 세션이 끊기도록 하면 사용자가 자리를 이탈했을 경우 발생할 수 있는 보안 위협을 줄일 수 있다.

    인터넷 익스플로러도 7버전부터 보안에 꽤나 신경을 썼다.

    철저한 보안을 위해서 ActiveX를 설치할 때 반드시 “새로고침”을 해야 한다.

    이 두가지 보안 사항이 충돌하면, 인터넷 익스플로러 7버전부터는 연구소 인트라넷을 쓸 수 없다.

    따라서 보안에 취약한 인터넷 익스플로러 6을 사용해야 하는 아주 황당한 상황이 발생한다. ActiveX를 사용하는데 아무 문제가 없으나 설치할 수 없기 때문에 발생하는 문제이다.

    이 문제를 해결하기 위해서는 ActiveX를 별도로 받아서 설치한 후에 사용하면 된다.

    우리 연구소에서 이거 해결한 사람은 나밖에 없다.

    그러니, 윈도우즈 7의 64비트 버전에서 인터넷 익스플로러9를 쓰면 인트라넷이 안되기 때문에 포맷하는 사람이 그렇게 많았구나. 그리고 내 업무도. (윈도우즈 XP를 쓰겠다고 하면 포맷도 일이고, 윈도우즈7을 쓰겠다고 하면 인트라넷을 되게 하는 것도 일이다.)

    캠퍼스 전 구역에는 무선랜이 구축되어 있다. 이 무선랜은 해킹에 오/남용 되는 것을 방지하기 위하여 ID를 신청한 사람만 접속 가능하다.

    문제는 무선AP를 바꿀 때마다 인증을 해야 한다는 점이다. 같은 건물에서도 무선AP가 바뀌면 인증을 다시 해야 한다. 인증되지 않으면 무선랜은 연결되어 있으나 인터넷은 끊긴 상태가 된다.

    대체로 스마트폰은 무선랜 AP에 접속만 되어 있으면 인터넷이 실제로 연결되는가에 상관 없이 무조건 3G를 끄도록 되어 있다.

    따라서, 스마트폰을 사용하면서 돌아다니다보면 무선랜은 잡혀있으나 어느새 카카오톡도 안오고 인터넷도 안되는 사태가 발생한다.

    그 결과, 열심히 구축한 무선AP는 사용율이 떨어진다. 불편하니까.

    전적으로 내 관점에서만 쓴 글이다. 누군 편하겠지.

  • 피싱에 낚이지 말자

    방금전 방명록에 위와 같은 내용의 글이 올라왔었다. 내용은 안봐도 되고, 이름에는 자기 홈페이지 주소가 링크되어 있는데 클릭하면

    http://casdfdafds4df.servebeer.com/YouTube/

    위와 같은 주소로 들어간다.



    (당신이 보안에 대해 잘 알지 않으면, 또는 당신이 리눅스나 맥OS를 사용하고 있지 않다면 절대로 들어가보지 말 것!!!)

    위 주소로 들어가 보면 다음과 같은 화면이 보인다.

    마치 유튜브 화면처럼 되어 있다. 오른쪽에 가려진 부분에는 19금 사진들이 있어서 일부러 가렸다. 호기심에라도 들어가보지 말자. 19금 사진은 얻어보지도 못하고 악성코드에 당신의 컴퓨터를 갖다 바치는 것밖에 안된다.

    그러나, 자세히 살펴보면 동영상이 아니다.

    보면 알수 있겠지만, “그림”이다. 실제로 플래시 플레이어라면 다음과 같다.




    (여긴 들어가봐도 된다.)

    아무튼. 위의 낚시 사이트에서 뭔가를 클릭하게 되면 악성코드 프로그램을 다운로드 받게 된다.

    잘 보면, “from”이 www.adobe.com이 아닌 것을 확인할 수 있다. (위의 그림에 나온 주소도 절대로 들어가보지 말자. 호기심에도 가볼 필요 없다.)

    진짜 플래시 플레이어의 다운로드 주소는 다음과 같다.


    http://get.adobe.com/flashplayer/?promoid=BUIGP (여긴 들어가봐도 된다)

    위의 악성코드 프로그램은 나도 겁나서 실행을 시켜보지 못했다. 어쨌든 100% 가능성으로 악성 코드이므로, 바이러스 전문가가 아닌 이상 실행시켜볼 필요 없다.

  • 수학이 컴퓨터에서 사용되는 사례 중 일부


    http://kldp.org/node/127893#comment-572335

    1.

    네비게이션 만들 때 “세일즈맨 문제”를 풀어야 합니다.


    http://www.aistudy.com/problem/traveling_salesman_problem.htm

    잘 안풀리는 유명한 문제중 하나죠. 물론, 대충 휴리스틱으로 풀긴 하죠.

    스타크래프트 유닛들 움직이는 것도 최단경로 찾기 문제의 한 사례가 될 것이고요

    2.

    음성인식, 음향 분석 등에서 가장 많이 쓰이는 분석법이 푸리에 변환이죠. 가장 유명한 적분변환 중 하나네요.

    심지어 이런것도 됩니다. 푸리에 변환은 아닌 것 같지만.


    http://blog.naver.com/PostView.nhn?blogId=xyx9&logNo=80026987556&redirec…

    3.

    구글의 검색엔진에 적용된 페이지 랭크가 간단한 수학적 아이디어에서 출발한 건 유명하죠.


    http://www.emh.co.kr/xhtml/google_pagerank_citation_ranking.html

    4.

    통계학같은건 그냥 쓰입니다. 스마트폰 키보드에서 글자 몇개 치면 추천단어를 알려주는 것도 통계학이고 검색엔진에서 연관검색어나 추천검색어를 알려주는 것도 통계학이죠.

    5.

    심지어 싸이월드나 페이스북 등에서 사람들 사이의 연관관계를 분석하는 일은 물리학과에서 연구합니다. 자성체 연구에 사용되는 수학적 모형인 Ising model같은 것도 사용되죠.

    6.

    요즘 3D게임들은 대체로 물리엔진을 적용해서 만드는 것들이 많은데, 이 물리엔진은 실제로 기계공학, 유체역학 등에서 사용되는 실제 수학적 모형을 사용하여 제작되죠. 이런거 만들거나 사용하려면 어느정도 수학적 기초가 필요하겠죠.


    http://www.unrealengine.com/



    http://en.wikipedia.org/wiki/Id_Tech_3

    7.

    암호학 분야는 수학의 정수론(number theory)이 실제로 사용되는 대표적인 사례죠.

    그 외에도, 컴퓨터를 이용한 DNA분석(bioinformatics), 신약 개발, 기계 설계, 등등 과학이랑 공학 분야에서 사용되는 건 말도 못하게 많아요.

    수학과에서 배운 것들을 저기에 사용하는지는 모르고 배웠지만, 배우고 나서 보니 다 쓰고 있네요.

    그 외에 여담이지만…

    인터넷은 물리학자들이 만들었습니다.


    http://en.wikipedia.org/wiki/History_of_the_Internet

    전세계 슈퍼컴퓨터 중 최강의 10대는 과학자들이 쓰고 있죠(아마 top500의 500대중 거의 대부분을 과학자들이 쓰겠지만)


    http://www.top500.org/lists/2011/06

    얼마전 작고하신 데니스 리치는 C언어를 만든 분인데, 물리랑 수학 전공하신 분이죠.


    http://ko.wikipedia.org/wiki/%EB%8D%B0%EB%8B%88%EC%8A%A4_%EB%A6%AC%EC%B9%98