들어가며

최근 신경컴퓨터를 수강하면서 뉴럴 네트워크를 짜고 있다. 첫 어싸인은 매트랩으로 짰는데, 그래프 출력 기능은 좋지만 문법도 익숙하지 않고 구조화가 어려워서 다음 어싸인은 Numpy로 짜려고 마음먹었다. 사실 마음을 먹었다기보다는 영업을 당했다.

학과 서버 Python2에는 Numpy가 설치되어 있었지만, Python3에는 설치되어 있지 않아서 설치하는 김에 Numpy의 기본 라이브러리보다 성능이 좋다고 알려진 OpenBLAS와 링크해 설치하기로 했다. 설치하는 과정은 여기를 참고했다.

OpenBLAS 빌드

$ git clone https://github.com/xianyi/OpenBLAS.git
$ cd OpenBLAS
$ make NO_AFFINITY=1 FC=gfortran
$ mkdir -p ~/lib/openblas
$ make PREFIX=/home/qwaz/lib/openblas install

make에 여러 옵션이 있는데 USE_THREAD=1 같은 중요한 설정은 기본값으로 되어 있기 때문에 make를 바로 해도 큰 문제는 생기지 않는다. NO_AFFINITY=1 설정을 해 주면 여러 명이 사용하는 서버에서 돌릴 때 성능 향상을 기대할 수 있고, FC는 포트란 컴파일러를 명시적으로 설정해 주는 부분인데 아래에서 동일한 컴파일러를 설정해 주어야 하기 때문에 이 두 개의 옵션을 넣어 컴파일했다. numpy의 경우는 상관 없지만, OpenMP를 사용하는 프로그램과 OpenBLAS를 같이 사용할 예정이라면 USE_OPENMP=1 옵션도 주어야 한다. 내가 돌릴 서버는 Xeon 6개가 달려 있고 하이퍼쓰레딩으로 코어가 12개인 것처럼 인식되는데, 자동으로 최대 쓰레드 수치를 12로 잡은 것을 확인할 수 있었다.

VirtualEnv 설정

$ cd ~
$ virtualenv --python=python3.4 venv
$ source venv/bin/activate
$ mkdir venv/download
$ pip install -d venv/download numpy
$ mkdir venv/build
$ cd venv/build
$ tar xzf ../download/numpy-1.11.0.tar.gz
$ cd numpy-1.11.0
$ cp site.cfg.example site.cfg

이제 site.cfg를 수정하자. openblas로 시작하는 다음 부분의 주석 처리를 해제하고 경로를 수정한다.

[openblas]
libraries = openblas
library_dirs = /home/qwaz/lib/openblas/lib
include_dirs = /home/qwaz/lib/openblas/include
runtime_library_dirs = /home/qwaz/lib/openblas/lib

Numpy 설치하기

$ unset CPPFLAGS
$ unset LDFLAGS
$ python setup.py build --fcompiler=gfortran
$ python setup.py install

make에서 사용된 포트란 컴파일러와 동일한 컴파일러를 명시해 주어야 하는데, 서버에는 g77은 없고 gfortran만 설치되어 있어서 이거려니 섶어서 gfortran으로 설정했다. unset은 명시하지 않은 다른 설정이 끼어드는 것을 막기 위함이라고 한다.

확인

마지막으로 뻘글을 쓴지 꽤 된 것 같은데 새벽이고 우울하고 과제하기 싫어서 오랜만에 뻘글을 또 써야겠다.

공대생으로 살면서 의문을 가졌던 것 중 하나가 공대생에 대한 차별적 발언에 제제를 가하는 사람이 거의 없다는 사실이다. 우리 학교에는 문화콜로퀴움이라는 과목이 있다. 외부에서 연사를 초청해 강연 또는 공연을 듣고 보고서를 쓰는 유닛 과목인데, 지금까지 했던 모든 강연과 공연에서 공대생에 대한 고정관념을 언급하지 않은 사람이 없었다. 예를 들자면 다음과 같다. “공대생이라 안경 쓴 분들이 많은데 공교롭게도 우리 팀 멤버가 나 빼고 전부 안경을 썼다”, “공대생이라 문학에는 관심이 없을 줄 알았는데 생각보다 호응이 좋다”, “공대라 그런지 역시 관객에 남성분들이 많다”. 전부 틀린 말은 아니다. 실제로 안경 쓴 사람 많고, 인문학 싫어하는 사람들 쉽게 찾을 수 있고, 성비도 치우쳐 있다. 그렇지만 그게 통계적 사실을 나타내는 문장으로 사용되는 경우와, 공대생들을 일반화하기 위해 사용되는 경우는 의미가 다르다.

이런 말을 들었을 때 기분이 나쁘다고 표현하면 지나치게 강한 표현인 것 같고, 미묘한 불편함이 있다. 하지만 공대생에 대한 편견을 갖지 말라고 이야기하기도 애매한 부분이 있는게, 공대생에 대한 편견을 유머코드로 하는 공대생 개그의 주 생산자와 소비자가 공대생들이다. 자기들끼리 하는 공대생 개그가 일반 대중으로 퍼지면서 그 뒤에 숨어 있는 공대생에 대한 고정관념도 같이 무의식 속에 새겨지는 게 아닐까? 공대생 유우머를 하지 말자고 주장하고 싶은건 아닌데 그걸 외부 사람들한테 들으니까 거부감이 생기는 것 같다. 까도 우리가 깐다!

공대에 대한 고정관념이 공대생들의 미묘한 불편함보다 더 심각한 문제인 이유는, 대중이 가지는 고정관념은 그 고정관념을 강화하는 방향으로 작용하기 때문이다. 예전에 ‘컴퓨터 공학과에는 왜 여자가 적은가’를 분석한 기사를 본 적이 있다. 여성들이 학과를 선택할 때 자기가 생각하는 컴퓨터 공학도의 이미지-너드, 밤샘, 천재적 번뜩임, 기계같은 반응-와 자신을 비교하고는 자신이 컴퓨터 공학에 어울리지 않는다고 판단하고 다른 과를 선택한다는 것이다. 실제로 입학한 학생들의 성적에서 성별에 따른 차이는 관찰되지 않았음에도 불구하고 말이다. 수학과에는 여성이 적고 영문과에는 많은 것도 같은 이유라고 한다. 그래서 공대생에 대한 고정관념이 퍼지면 퍼질수록 공대생들의 다양성은 줄어들고 사람들이 ‘공대생’하면 떠올리는 이미지로 일반화 되어 갈 것 같아 걱정이 된다.

그래서 이 문제를 해결하기 위해서는 무엇을 해야 할까? 내가 이것까지 명쾌하게 제시할 수 있었으면 첫 문장에 뻘글이라는 용어를 쓰지 않았을 것이다. 고정관념을 해소하는 문제는 굉장히 어려운 문제 중 하나다. 아직까지도 자신의 고정관념을 근거로 인종차별, 성차별 발언을 하는 사람이 한참 남아 있는데, 공대생에 대한 고정관념을 고쳐야 한다고 강력하게 주장하기에는 중요도가 떨어지는 것 같아 어쩐지 부끄럽다. 이런 문제들을 해결하려면 결국 대중의 무의식 속에 숨어 있는 고정관념을 수정해야 하는데 다행히도 대중에 대한 효과적인 세뇌 수단이 발견되지 않았으니 꾸준한 문제제기가 해답이 아닐까? 뻘글로 시작했지만 쓰다보니 공대생에 대한 고정관념에 문제제기를 하는 글이 되어 버렸다. 그러니까 공대생 너무 놀리지 마시고, 이번 기회에 공대생에 대한 고정관념을 다시 한 번 되돌아보는 계기가 됐으면 좋겠습니다.

이번 주말에는 PLUS에서 두 번째 CTF로 Internetwache라는 대회에 참가를 했다. CTF는 알고리즘 대회들과는 달리 24시간 이상 팀원들이랑 같이 달리는 대회라 페이스 조절이 정말 중요한듯. 모든 문제 클리어 24위로 마무리! 덧붙여서 저번에는 SharifCTF라는 대회를 했는데 9등을 했다. 역시 갓갓동아리.

이번 대회에서 228 비트짜리 RSA를 뚫는 문제가 나왔는데, 소인수분해를 끝내도 OpenSSL 사용법이 어려워서 그걸로 private key를 생성하는 방법을 배우는데 오래 걸렸다. 그래서 다음에는 삽질 안 하려고 툴을 만듦.

rsa_private

.git 폴더 노출된 사이트에서 플래그 빼오는 문제도 있었는데, git 구조도 겸사겸사 공부하면서 재밌게 풀었다. 이런 지식들 하나하나는 작을지 몰라도 배우면서 점점 지식이 늘어나는게 느껴져서 재밌다.

토요일에는 USACO 플래티넘을 쳤는데 문제가 생각보다 어려웠다. 1번을 두 시간에 걸쳐서 짰는데 한 번에 통과해서 기분이 좋았다. 남은 2, 3번을 한 시간 정도 고민하고 나서 정신력이 부족해서 리타이어 했다. 열심히 풀었으면 두 문제는 풀 수 있었을 것 같지만 그렇게까지 빡세게 할 필요는 없을거라 생각했다. 나중에 풀 문제 목록에 넣어놓았는데 이것도 언제 풀 지는 모른다 ㅋㅋ

USACO가 12월에 플래티넘 처음 생겼을 때는 난이도가 좀 쉬웠는데, 그걸 의식해서 그런지 1월부터 난이도가 확 올라갔다. 옛날 골드가 챌린징한 부분이 좀 적어서 아쉽긴 했지만, 지금 플래티넘은 내가 재밌게 풀기에는 좀 어렵더라. 고등학교 때 국대 떨어지고 대학에서는 ICPC 팀이 없어서 알고리즘 대회를 요새는 즐겜모드를 표방하며 아주 열심히 치지는 않고 그냥 나한테 부담 안 되고 재밌게 느껴지는 수준으로만 열심히 하는 중이다. 뭘 하든 간에 본인이 즐거운게 중요하지 않겠습니까.

예전에 교내 프로그래밍 대회 수상 상품으로 BD 플레이어를 집에 공물로 올린 적이 있다. 웃돈을 얹어 PS4를 샀어야 하는데 스크린 미러링 기능으로 갤럭시 휴대폰 화면을 미러링 하는 기능이 있었던 기억이 나서, 서피스북하고도 연결이 될까 싶어서 테스트 해 봤는데 잘 안 되더라. 그래서 플레이어가 고장난 건 아닌지, BD 재생은 잘 되는지 테스트 해보려는 마음에 반역의 이야기 블루레이를 넣었다가 그대로 끝까지 감상했다.

예전에 볼 때는 ‘기대보다는 별로였다’, ‘끝난 이야기를 억지로 끌고 가는 느낌’이라는 평을 했었다. 그 느낌 그대로 중반 정도까지는 ‘역시 연출은 좋지만 스토리는 그닥…’이라는 생각을 하면서 보고 있었는데 반전이 밝혀지는 부분에서 내가 지난번 감상 때 이야기를 제대로 이해하지 못했다는 사실을 알았다. 신편도 역시 우로부치답게 훌륭한 세계관이었다. 아직도 본편이 좀 더 잘 짜인 이야기라는 생각은 변하지 않았지만, 예전에 감상했을 때에 비해서는 신편에 대한 평가가 많이 올라갔다. 이번에는 블루레이로 보았으니 당연히 자막이 없었고, 잘 기억은 안 나지만 지난 번 감상 때는 컴퓨터로 보았고 그 때도 자막 없이 보았던 걸로 기억한다. 아마 그 사이에 일본어 실력이 늘어 이해할 수 있는 부분이 많아져 평가가 변한 것일지도 모른다.

본편 감상하고 나서는 모노가타리 시리즈와의 콜라보 특전 영상과 오디오 코멘터리 등을 잠깐 훑어봤는데 그것도 굉장히 재미있게 봤다. 이 맛에 BD를 사나 싶더라. 돈을 많이 벌어야겠다는 다짐이 조금 강해진 하루였다.

스포일러 후기
개인적으로는 큐베의 간섭 필드를 깬 다음, 마도카가 호무라를 그대로 데려가는게 좀 더 깔끔한 결말이 되었을거라 생각한다. 뭐 좋아하는 시리즈라 이렇게 대놓고 ‘속편 나와요~’ 하는 것도 싫지는 않지만.