본문 바로가기
도쿄 타워 두 명의 대학생과 두 명의 연상 여성과의 서로 다른 사랑 - 재미있게도 둘다 불륜 - 을 마음에 와닿게 그려낸 책. 읽으면서 드라마를 보는 듯한 그런 느낌에 빠졌다. 한쪽은 격렬한, 또 한쪽의 잔잔한 사랑이 교대로 그려지는 것이 정말 서정적이다. 남자 주인공들을 화자로 설정하고, 마음을 그려내는 것이 마치 내가 그 마음인 것인양 느낄 정도. 특히 불륜이 들켜 집으로 돌아오는 비참한 심정의 주인공. 해보지도 않은 불륜에 왜 내가 그리 공감이 가는지... 안개에 빠진 듯한 결말이 더욱 여운을 남게 한다. 안타까운 내 젊은 시절이여. 불륜은 커녕, 순정만 갖다가 지났으니... 지나면 후회고, 앞으로는 안개밭이다. 그나마 이런 책이 현실을 잠시 잊게 한다. 사랑을 생각하려는 이의 성서가 될만한 책. 2006. 5. 23.
2차 대전, 유태인들이 겪었던 아우슈비츠 대학살을 그려낸 책. 작가이자 아들인 아트 슈피겔만이 홀로코스트를 체험한 아버지로부터의 생생한 증언을 그대로 그려냈다. 책에서 유대인은 그저 피해자로만 그려지지 않으며 - 심지어 그의 아버지는 분명히 문제있어 보인다. 상당히 중립적인 시각으로 이 비극을 그려낸 덕에 더욱 사실적이다. 아주 인상적인 구절이 있다. "그저 무작위로 죽을 뿐이다" 책은 각 민족을 동물에 비유하여, 거친 스케치와 단조로운 선 덕에 묻혀버릴 뻔한 개성을 살렸다. 자세한 묘사를 일부러 피함으로써, 오히려 독자의 상상을 더욱 불러일으킨다. 중국이나 일본이 역사를 왜곡해서 여기에 대항하려는가? 한국도 그에 못지 않게 역사를 왜곡했지만(베트남 학살이 역사책에 실리는 날이 금방 올까? 그러나 나 또.. 2006. 5. 23.
온라인 도서관리 4학년 1학기 과목인 소프트웨어 개발방법론의 프로젝트...라고 하지만 너무 약소하다. 교수가 개발 사양으로 준 것 CBD를 표방하지만, 교수는 소스 퍼오기를 권장하니 이 과목의 진심은 충분히 파악되었다. 온라인 도서 관리가 나의 조에게 주어졌는데 조원은 HTML도 모르고, 교수가 제공하는 FTP는 방화벽으로 교실(!) 내에서만 접속되고, DB는 윈도우즈 계정으로 로그인한 다음에 접속되고... 그저 노가다 뿐이었지만, 배운게 있다면 왜 모델 1의 유지 보수가 쉽지 않느냐 하는 것을 몸으로 익혔다. 하나의 서블릿에 모든 기능을 몰아넣다보니, 너무나 덩치가 크고, 관리도 어려웠다. DB 연결의 난점으로 해법을 찾은 것이 XML 파일의 입/출력을 통한 데이타 관리. 그러나 이에 따라 멀티스레드는 처리 불능..... 2006. 5. 22.
페르세폴리스 만화의 힘이 머리를 때리는 작품. 이란의 샤 왕조가 무너지는 혁명 와중의 일을 사실감있게 그렸다. 빵으로 백조를 만들어준 삼촌도 죽고, 고문으로 손톱이 뽑힌 부모 친구도 죽고, 작가의 친구도 미사일에 직격되어 죽지만, 그들은 여전히 이란에서 살아간다. 악화가 앙화를 초래한다는게 어떤 것인지 책을 보면 절실히 실감할 수 있다. 여러 충격적인 장면들이 있다. 특히 갓 사춘기가 된 소년들에게 플라스틱에 금칠한 열쇠를 나눠주고, 이걸 갖고 죽으면 천국에서 미녀와 성찬이 기다리고 있다고 꼬인 후 지뢰밭으로 내모는 장면은 아직도 잊혀지지 않는다. 어떤 사람의 인생이란 무슨 값어치를 지니는가. 여기 이렇게 느슨하게 살고 있는 나는 무엇일까. 재수좋게, 어디에 태어났는가. 그런 것만으로 인생이 정해진다. 그런데서 태어.. 2006. 5. 22.
플라이, 대디, 플라이 야... 이건 만화네... 소설을 읽으면서 저절로 들어버린 생각. 어쨌든, 이걸 원작으로 한 만화도 있다. 레볼루션 No.3와 맥락이 닿아있다. 바람의 파이터나 다름없는 박순신이 일본의 전형적인(이른바 스테레오 타입) 가장을 인간 병기로 만들어간다. 그래서 나오는 훈련, 약간의 자기 만족, 초월, 용서... 이것까지 전형적. 그냥 머리가 무거울 때 볼만한 책. 2006. 5. 22.
코인로커 베이비스 이 책은 환상 소설이나 진배없다. 좀처럼 있을 법하지 않은 일들이 주마등처럼 펼쳐진다. 그런데도, 두 주인공 키쿠와 하시는 생생이 살아서 나를 기대하게 했다. 좁디 좁은 코인 로커에 버려졌으나 살아남은, 유이(有二)한 그들이 세상에게 복수하는 것이 만화처럼 펼쳐진다. 각 장마다 각자의 이야기를 교대로 풀어나가는 것이 더욱더 독자를 조바심나게 한다. 결말에서 하시의 선택들은 마치 싯타르타가 보리수 밑에서 겪었던 고뇌를 생각나게 할 정도로 인상적. 키쿠의 뛰어난 육상 능력과 하시의 음울한 노래 솜씨. 뭔가 안 맞지만, 그래서 그 둘은 더 잘 묶여진다. 키쿠가 열혈남아라면, 하시는 쥐스킨트의 향수에 등장했던 주인공의 분위기. 꽤 두꺼운 책인데(700쪽), 작가가 그려내는 이미지가 머리 속에 너무나도 잘 그려지.. 2006. 5. 19.
삼각형 그리기/이동/반전 2차원 상에서 삼각형을 그리고, 이동시키고, 반전(mirror)시키는 프로그램. 숙제이다. 간단한 문제지만 처음에 교수가 시간 제한을 두고 수업 시간에 시키는 바람에 개판으로 짜서, 오늘 술먹고 온 김에 완전히 뜯어 고쳤다. 실행 파일 프로젝트 파일 닷넷 라이브러리가 없어 실행이 안될 경우 여기서 다운받고, 실행 파일이 위치한 곳에 복사해야 한다: VS2005로 컴파일되었으며, Managed C++을 사용했다. 프로그램을 실행시키면 삼각형이 표시된다. 기능은 다음과 같다.Shape: 꼭지점이 표시되며, 이를 드래그하여 삼각형의 모습을 바꿀 수 있다.Mirror: 삼각형을 X축으로 반전시킨다.Translation: 삼각형 전체를 이동시킨다.Reset: 초기화 2006. 5. 18.
시모츠마 이야기 아주 귀여운 모모코의 청춘 이야기. 로코코의 매니아가 되어, 닥치는대로 아버지를 속여 뜯어낸 돈으로 값비싼 '베이비 더 스타 샤인 브라이트' 브랜드의 로리타 의상에 심취한 아가씨. 어리고 홀아버지 밑에서 자랐지만, 나름대로의 단단한 인생관을 갖고 있는 아가씨가 양키 아가씨인 이치고를 만나 겪는 일상 이야기가 아기자기하게 그려진다. 이 책을 읽고, 정말 이런 딸이 있을 경우를 대비해서 돈을 열심히 벌어야 겠다는 생각이 들었다. 그녀의 행복인 로리타 의상 쯤은 마련해줄만한 아빠가 되어야하지 않겠는가. 잠옷에서 신발까지 로리타 풍으로 차려입는 건 만만한 일이 아니다. 정말 힘들고 엄격하고 귀찮아하는 성격이면 시도도 하지 말아야 할 정도. 약간의 편집증도 필요할 정도. 빠징코 대박의 화신이자 수예의 대가인 그녀.. 2006. 5. 17.
GO 아버지는 프로 권투 선수, 아들도 강하다. 어머니는 여성적이지만, 뒤늦게 페미니즘에 눈을 뜬다. 그들은 재일교포지만 그런 건 중요한 게 아니다. 이 소설은 본질적으로 연애담에 관한 것이다. 소설을 읽는다는 건 좋다. 남의 인생을, 단조롭지 않은 그런 인생을 롤러코스터 타듯이 즐겨볼 수 있다. 물론 내 인생이 아니니 책을 덮는 것도 자유다. 그래서 재밌는 소설이 좋다. 이 소설은 재밌다. 웃음이 나온다고 재밌는 소설은 아니다. 책 속의 인생에 공감이 되어야 한다. 배경 따위는 상관 없다. 책상에 재떨이를 넣고 다니는 범상치 않는 싸움닭 소년이 아버지한테 구타에 가깝게 얻어맞으면서도, 왜 미워할 수 없을까. 가장 친한 친구가 다른 소년의 칼에 동맥이 찢어져 죽었는데 왜 화나지 않을까. 여자친구가 한국인은 피.. 2006. 5. 16.
Java API for XML http://www.perfectxml.com/JAXP.asp 이 글은 위 링크의 문서를 기초하여 작성되었다. DOM 방식의 예제가 먼저 있으나, 오픈 API 기반은 SAXON 예제도 포함되어 있다. DOM은 문서 전체를 파싱하여 메모리에 로드하므로, 문서가 클 경우 SAX 형식으로 파싱해야 한다. 작성한 예제는 다음과 같다 넷빈 5.0으로 작성했으며, 톰캣 5.0이면 돌릴 수 있다. 예제는 회원 가입 시 XML에 저장하고, 회원 여부는 동일한 XML을 검색하여 수행한다. 먼저 다음 라이브러리를 임포트해야 한다. import org.w3c.dom.*; import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.d.. 2006. 5. 9.
AJAX로 구현한 동적 웹사이트 학교 프로젝트로 하게 된 웹 프로그래밍. 나는 뷰 측을 맡았고, 자바 스크립트 코딩을 하게 되었다. AJAX가 자바스크립트의 노가다 극한을 요구하다보니, 자바스크립트만 천줄이 넘는다... 덕분에 자바스크립트의 파워를 충분히 만끽했다. 디버깅만 빼면 정말 훌륭하다. 교수는 스트럿츠 프레임워크를 쓰도록 강요했는데, 나는 뷰를 AJAX로 구현했으므로 정적으로 업데이트되는 태그 라이브러리 등은 쓸 수 없었다. 스트럿트를 이해해야하는 필요성을 비껴나갔다고나 할까? 다만 뷰이다 보니 모델/컨트롤러가 없으면 테스트하기도 힘들고, 나중들어서야 동작시켜볼 수 있으므로 괜시리 고생할 가능성이 컸다. 그런 피해를 막기 위해, 쿠키와 서블릿을 이용해 자체적으로 테스트 모델을 만들어서 모델/컨트롤러 측 결과물이 전혀 없는 상태.. 2006. 5. 1.
Cohen-Sutherland Algorithm for line clipping 학교 숙제. 간단한 문제라고 생각했으나, 알고리즘과 실제는 좌표계가 달라 매우 혼동을 일으켰다. 게다가 Managed C++로 작성했는데 컨테이너도 익숙하지 않고 참조형 사용도 잘 안되어 매우 당황스러웠다. 참조형에 대한 이해가 필요하다 -_-; 이게 잘 안되어서 계속 배정으로 값을 넣을 수 밖에 없었다. 덕분에 코드가 참 할 말이 없다.... 이렇게 혼란스럽게 코딩해본 적은 처음인 것 같다. 좋은 경험을 했다. 알고리즘에 대한 쉬운 설명은 역시 위키피디아. http://en.wikipedia.org/wiki/Cohen-Sutherland 알고리즘에 대한 자세한 이해는 여기로. 복잡해보여도 조금만 집중하면 쉽게 이해할 수 있다. 그리 어려운 알고리즘은 아니다. 기울기에 대한 지식만 있으면 된다. http.. 2006. 4. 16.
뷔퐁의 바늘 파이썬 2.4로 작성했다. 참 http://www.pygame.org 에서 pygame 라이브러리도 다운받아 설치해야한다. 뷔퐁의 바늘(Buffon's needle)은 바늘 크기보다 크게 간격을 잡고, 양 끝에 닿는 수자를 측정한 것이 점점 3.14에 근접해가는 것을 보여준다. 이 프로그램에서는 바늘을 10만번 던지고 그중 32%쯤 양 끝에 닿는다. 2006. 3. 29.
AJAX 두번째 샘플 첫번째 샘플을 뜯어보면서 많은 이해를 할 수 있었다. 간단하게나마 구조를 파악할 수 있었다. 이 샘플은 첫번째 샘플을 약간 변형한 것이다. 제목과 주소를 입력받아 로딩없이 웹페이지에 추가된 목록을 보여준다. 2006. 3. 22.
틱택토 학교숙제로 작성한 간단한 프로그램. 숙제 요구 사항이 그저 끝난 후 재시작을 할 수 있게 하는것이라 완성도는 엉망 -_-; 원본은 '변영철 교수의 비주얼 C++' 강의에 나온 소스인데, 그 소스가 참으로 복잡하게 짜여져있어 나에 맞게 수정했다. 어째서, 0과 O을 같이 쓰고, 가끔 전역 변수와 지역 변수를 오가면서 플래그를 체크하는데 참으로 혼란스러웠다. 2006. 3. 21.
무료 통계 소프트웨어: R 가볍고 빠르고 강력하면서도 무료로 배포되는 통계 소프트웨어인 R. http://www.r-project.org 통계학 수업의 강의 계획서에는 R을 써본다고 했는데, 거의 언급을 안한다니 안타까울 뿐이다. 시험 시간에 이걸 사용하면 쉽게 계산 문제를 풀 수 있을테니 - 노트북 허용! - 틈틈이 연습해놓아야겠다. 템플릿도 만들어놓고 말이지... 다운로드를 하려면 아래 링크 중 어디든 골라 binary를 선택하면 된다. Korea 도 있다. http://cran.r-project.org/mirrors.html 아래 프로그램은 R을 더욱 쉽게 쓰게 해주는 애드온이다. 홈페이지를 가도 이걸 구할 수가 없다... 교수에게 직접 받아온 파일. 김태수 교수의 '통계학(R활용)'(자유아카데미,2006)에서 그 쓰임새를 .. 2006. 3. 15.
원과 파이 그리기 설정된 크기의 원을 그리고, 그 위에 역시 설정된 크기의 파이를 그리는 프로그램. 역시 숙제이며, managed C++로 짜여졌다. 참, .net 2.0 필수 2006. 3. 10.
행렬 곱셈 계산기 학교 숙제로 나온 문제. managed C++로 해보았다. .net 과 native C++을 결합할 수 있다는데... Visual Express 2005를 이용했다. 웬지 C# 그 자체가 되버린듯한 느낌. 포인터가 없고 참조형 연산자인 ^ 덕분에 많은 검색이 요구되었다. 그래도 응용 프로그램만들기는 쉽다. 2006. 3. 10.
C++를 이용한 게임 상태 관리 현재와 같이 메시지 기반의 멀티 태스킹 환경에 효율적으로 적용할 수 있는 게임 엔진. 콘솔용으로 만든 테트리스를 렌더링 엔진으로 돌리려고 했는데, Ogre3D가 callback 기반이다보니 소개 -> 메뉴 -> 게임 -> 메뉴 로 반복되는 과정을 포현하는데 너무나 많은 플래그가 소용되었다. 역시 이 문제또한 선각자들이 이미 고민했던 것으로, 해결법 또한 비교적 쉽다. 게다가 완전히 컴파일되는 코드까지 첨부되어 있다. Managing Game States in C++ 원문 http://tonyandpaige.com/tutorials/game1.html 게임에서 여러 다른 상태가 있다는 걸 몇년 전 한 데모를 보면서 알게 되었다. 이 데모란 것이 미출시 게임에 대한 맛보기판이 아니라, scene 에 서 본 .. 2006. 2. 21.
테트리스 그 동안 공부한 것을 테스트해보기 위해 급히 만든 테트리스. 현재는 도스 용이다. 네트워크 모듈도 붙일 예정(이건 동훈이가 함)인데, 혼자하는 것보다 생각해야할 것들이 많다. 이래저래 많다. 코드가 조금 긴데, 나름대로 확장성(임의 개수의 블록, 임의 크기의 게임 판, 임의의 플레이어 수)을 생각하느냐 그런 듯 싶다. 별 기능도 없는데 코드가 길어져서 웬지 무안하다. // 싱글, 멀티 플랫폼 분리. 자동 블록 떨어지기 추가. 완전 메시지 방식 // for network play test 그건 그렇고 메모리 누수는 없는지 걱정된다. 처음에 웬일인지 프로그램이 종료되기 위해 5초 이상 걸리는 일도 있어서(지금은 코드를 엎어서 다행히 해방), 가능한 메모리 관리를 적게 할 수 있는 STL을 적극 사용했다. 최.. 2006. 2. 13.
ACM 10050, Hartals http://acm.uva.es/p/v100/10050.html 간단한 문제. 7로 나누는 바람에 조금 헤맸다. 2006. 1. 26.
ACM 105, The Skyline Problem ※ 파란에서 이전하면서 코드가 없어졌다... 이런. 다시 짜야할 듯 허... 주어진 건물의 외곽선만을 얻는 문제이다. 따라서 선분(left == right 인 입력. 폭이 0이므로 보이지 않는다)은 무시해도 된다. 출력 형태는 생소할 수 있는데, 상향 벡터와 하향 벡터를 이용한다. 경계값 때문에 수 시간을 고생한 것이 아주아주 기억에 남는다... 여기 사용한 알고리즘은 글보다 그림으로 설명하는 편이 낫다. 세 개의 건물 값을 입력받았다고 가정하자. 먼저 prevHighestBuilding(건물의 폭과 높이를 멤버 변수로 가진다)을 잡아야 한다. 이 변수의 값을 폭은 10000(문제에서 지정한 최대값), 높이는 0으로 둔다. 이제 0부터 시작해서 10000까지 x축을 탐색한다. 그러는 중에 점을 발견하면 .. 2006. 1. 24.
ACM 10315, Poker Hands http://acm.uva.es/p/v103/10315.html 크게 어려운 문제는 아니나... brute force 알고리즘의 무시무시함을 느끼게 해주었다. 즉흥적으로 코딩하다보니, 결과는 time exceed limits가 나와버렸다. 700줄이 넘어가던 이전 코드를 거의 다 버리고, 새로 작성했다. 에구... 번호가 동일한 카드 개수를 세어서 맵에 보관함으로써 쉽게 계산할 수 있었다. 한편, 승부가 비겼을 때 사용하는 2차 조건이 양수이다. 각 경우에 대한 맵도 만들어서 2차 조건을 보관했다. 그러므로써, 1차 조건 만족여부와 2차 조건을 동시에 체크할 수 있도록 했다. 2006. 1. 20.
ACM 102, Ecological Bin Packing http://acm.uva.es/p/v1/102.html 쉬운 문제지만, 고생을 했다. 이유인즉, 나의 의욕 과잉 때문... 너 무 간단한 문제라 생각하여, 오히려 복잡하게 코드를 작성하다 완전히 잘못된 사례가 되었다. 게다가 속출하는 컴파일 에러로 인해 신경질도 상당히 발생했다... 어쨌든 이제 컴파일 에러는 해방이 되었다. online judge 컴퓨터가 g++ 2.95를 사용하여 컴파일한다는 사실을 알았고, 이는 DEV-C++ 4 버전을 사용하여 쉽게 문제를 발견할 수 있기 때문이다. g++ 2.95는 를 인식하지 않는다는 사실을 그래서 5분 만에 알아내서 컴파일 문제를 해결했다. 그 다음 문제는 문제를 대강 보는 버릇... 동일한 최소 이동 값이 나왔을 때, 알파벳 순서대로 있는 것을 우선적으로 .. 2006. 1. 19.
ACM 10038, Jolly Jumpers http://acm.uva.es/p/v100/10038.html 지난 번에 너무 골치를 썩여 쉬운 문제를 택했다. 그러나... 입력 끝부분을 제대로 처리하지 못해 괜시리 헤맸다. 게다가 알고리즘 트레이닝 북의 번역 또한 문제였다. 입력 부분이 애매하게 설명이 되어있다. 입력되는 수열의 가장 처음은 정수 개수인데, 이런 설명은 어디로 가버렸다. 역시 원문을 보는 것이 훨씬 낫다. 참고로 정수의 범위는 int 를 써도 무방하다. 2006. 1. 11.
ACM 104, Arbitrage http://acm.uva.es/p/v1/104.html 각 국가 간의 환율을 입력으로 제공한다. 이것을 바탕으로 환차익을 거두어야 하는데, 1% 이상 얻을 수 있으면서, 거래 국가는 최소로 해야한다. 이 번 문제는 아주 많은 고민을 했다. 다음과 같은 점을 아주 뒤늦게 생각해냈기 때문이다... 국가가 정점(vertex)이고, 환율이 경로(path)라고 가정하자. 그럼 문제가 쉽게 파악된다. 국가를 가장 적게 거치는 경로를 구하기 위해 Floyd-Warshall 알고리즘이 있다. 여기까지는 생각했으나 교환 법칙이 성립하지 않고, 이로 인해 중간 경로를 활용할 수 없어 FW 알고리즘을 적용할 수 없다고 판단해버렸다. 당연히 이것은 내 실수이며 acm.uva.es의 게시판에서 힌트를 얻어 답을 찾을 수 있었.. 2006. 1. 10.
ACM 10142, Australian Voting http://acm.uva.es/p/v101/10142.html 생 소한 호주식 투표 제도 덕에 문제가 눈에 잘 들어오지 않는다는 점을 제외하고는 그리 어려울 것 없는 문제다. 나는 deque을 사용하여 문제를 해결했다. deque은 가장 앞/뒤에 있는 원소를 제거/삽입할 수 있다. 삽입은 push_back ()으로 넣고, 참조는 front ()하여 가장 높은 우선순위의 투표자를 가려냈다. 가장 앞에 최소로 표를 획득한 자가 있을 경우는 pop_front () 하여 제거했다. 덕분에 알고리즘은 쉽게 구현되었다. 그러나... 이번 문제는 나의 시간복잡도 측정 능력이 얼마나 조악한지 깨닫게 해주었다. 일단 제거하는데 많은 시간이 소요되었다. 그도 그럴 것이 투표는 최대 20명에 대한 투표가 1000건이 들어.. 2006. 1. 7.