대학교 기숙사 주위에는 고양이가 많았다. 그 고양이들을 학교 학생들은 학교 이름을 따서 xx캣이라고 불렀다. 고양이들의 주식은 학생들이 먹고 남긴 배달 음식이었다. 기숙사에 사는 학생들은 종종 치킨, 피자, 족발, 두루치기 등의 다양한 음식을 시켜 먹곤 했다. 학생들이 하도 배달 음식을 많이 시켜먹으니 학교에서 아예 기숙사 건물 입구에 그릇 반납용 선반을 설치해 주었는데, 학생들이 그 곳에 배달 음식 그릇을 가져다 놓고 가면 고양이들이 슬금슬금 다가와서 잔반을 먹곤 했다.

어느 해 겨울이었다. 겨울학기 수업은 듣는 학생이 적어서 학교가 휑했다. 학교가 있던 곳은 평소에 눈이 거의 안 오는 지역이었는데 그 날 따라 눈이 엄청나게 왔었다. 쌓인 눈을 밟으며 밤에 기숙사로 돌아가는데 기숙사 입구에 고양이 두 마리가 있는 것이 보였다. 학교 고양이들은 학생들을 보면 멀찌감치서부터 도망가곤 했는데 얘네들은 희한하게도 나를 보고도 가만히 있었다. 기숙사 입구에 다 가서 보니 고양이들이 비어있는 배달음식 퇴식구를 바라보고 있었다. 겨울방학이라 학생들이 다 집에 가고 나니 잔반이 주식인 고양이들이 먹을 게 없어진 것이었다. 게다가 눈이 와서 추워서 그랬는지 그 고양이들은 눈이 쌓이지 않은 기숙사 처마 밑에서 움직이지 않고 있었다. 못 먹어서 그랬는지 학기중과 비교하면 매우 홀쭉해진 모습이었다.

카드키를 찍고 기숙사로 들어가려는데 자꾸 고양이들이 마음에 걸렸다. 그래도 나랑은 상관없는 일이지 하며 계단을 올라가려는데 발이 안 떨어졌다. 고민을 하다가 학교 매점에 가서 천하장사 소시지를 샀다. 매점까지 갔다 오는 데 시간이 꽤 걸렸는데도 고양이들은 기숙사 입구에 그대로 있었다. 천하장사를 까서 조금 잘라서 던져줬더니 허겁지겁 먹었다. 한 조각 또 던져줬더니 여전히 잘 먹었다. 이번에는 천하장사를 길게 까서 손에 잡고 내밀어 봤더니 가까이 와서 순식간에 다 먹어버렸다. 원래는 고양이에게 천하장사를 하나만 주고 나머지는 내가 먹으려고 했는데 어쩔 수 없이 더 줘야 했다. 두 개째가 지나고 세 개째가 되자 배가 불렀는지 잘 안 받아먹길래 나중에 먹으라고 남은 천하장사를 다 던져주고 방으로 올라갔다. 지금까지 살면서 처음이자 마지막으로 야생 고양이에게 음식을 줘 본 경험이다.

주인 없는 야생 고양이를 일컫는 표준어는 도둑고양이다. 애묘인들 중에는 도둑고양이 대신 길고양이라는 말을 써야 한다고 주장하는 사람들도 있지만 나는 도둑고양이라는 말이 싫지 않다. 꿈보다 해몽이라고, 고양이들은 귀여워서 사람들의 마음을 훔쳐가기 때문에 도둑고양이라고 해석하면 되지 않을까. 그리고 따지고 보면 이 녀석들은 내가 먹으려던 천하장사까지 자기들이 다 먹어버렸으니 도둑이 맞다.

옛날 사진을 뒤져보니 그 때 찍은 사진이 아직 남아 있다. 흰 색 바탕에 검은 색 얼룩 무늬가 있던 고양이. 고양이들 평균 수명을 생각해보면 아마 지금은 이 세상에 없을 거다. 인터넷에 보면 고양이한테 잘 해 줬더니 고양이가 쥐나 벌레를 선물로 잡아왔다는 이야기도 많던데 저 고양이들은 내 천하장사를 다 먹어 놓고는 고맙다는 말 한 마디 없이 입을 싹 닦아 버렸다. 그래도 이렇게 10년 가까이 지난 지금 웃으며 옛날을 추억하게 해 줬으니 이 녀석들은 이미 나한테 천하장사보다 훨씬 큰 보답을 해 준 셈이다.

[VI, VIM] 정규식에서 non-greedy 하게 검색하기 (욕심부리지 않기)


VI의 정규식이 펄이나 파이썬 등의 정규식과 크게 다른 점 중 하나는 non-greedy (욕심부리지 않기) 연산자입니다. 대부분의 경우 물음표 기호가 사용되는데 VI에서는 \{-}가 사용됩니다. 예를 들면 다음과 같습니다.


:%s/hello.\{-}://g


라고 하면 hello에서 가장 가까이 있는 : 까지만 사라지게 됩니다. 펄이나 파이썬이었으면 .? 이런 식으로 사용했을 거라, 지레짐작으로 VI에서 열심히 \? 를 시도해보다가 시행착오를 엄청 했습니다.

[안드로이드] Error:Could not find method jackOptions() for arguments


그래들 파일에서 아래 블록 부분을 지워준 뒤 안드로이드 스튜디오를 껐다가 다시 실행하면 문제가 해결됩니다. 


// 이 부분을 삭제하시면 됩니다.

jackOptions {

    enabled true

}


[안드로이드] No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android


안드로이드에서 사용되는 NDK 버전이 올라가면서 MIPS형 CPU에 대한 지원이 중단되었습니다. 그런데 build.gradle에 지정되어있는 gradle 버전이 낮으면 안드로이드 스튜디오가 MIPS에 대한 정보를 계속 찾으려고 하다가 위와 같은 에러를 내게 됩니다. 이럴 때에는 gradle 버전을 3.1.4 나 그 이상으로 설정해준 뒤 안드로이드 스튜디오를 껐다가 다시 실행하면 문제가 해결됩니다.


dependencies {

    classpath 'com.android.tools.build:gradle:3.1.4'

}



내가 어릴 때만 해도 복덕방이라는 말을 자주 들을 수 있었다. 복덕방의 업무는 부동산 매매 중개이지만 보통 복덕방이라고 하면 낡은 가죽 소파에 동네 할아버지들이 둘러 앉으셔서 장기를 두시면서 짜장면을 시켜 드시는 모습이 떠오른다. 복덕방은 그렇게 동네 사람들이 무료할 때 모여서 몇 시간씩 시덥잖은 수다를 떨다가 헤어지곤 하는 그런 곳이었다.

내가 고등학생 때 쯤 부터인가, 공인중개사라는 말이 복덕방을 밀어내기 시작했다. 사실 부동산 매매라는 업무의 본질은 바뀐 것이 없었다. 하지만 공인중개사에는 낡은 가죽 소파와 장기판 대신 회색 합성 수지로 코팅된 합판 책상과 펜티엄 컴퓨터, 육중한 CRT 모니터가 있었다. 누런 색 백열등 대신 눈이 쨍한 형광등이 있었고 짜장면 배달은 더 이상 볼 수 없었다.

복덕방(福德房)은 복(福)과 덕(德)이 있는 방(房)이라는 뜻이다. 어감 때문에 구식처럼 보여서 그렇지 사실 뜻이 참 좋은 단어이다. 반면 공인중개사라는 단어에서는 공인(公認)된 중개사(仲介士)라는 뜻 말고는 찾아볼 수 있는 것이 없다. 말을 배우기 시작한 어린이는 있는 그대로를 말하지만 어른은 비유와 상징을 사용한다. 같은 틀에서 볼 때 나는 복덕방이라는 성숙한 단어가 공인중개사라는 유아기적 단어로 퇴행했다고 생각한다.

조선이 건국되고 나라의 중심이 될 궁궐을 지은 뒤 태조 이성계가 정도전에게 궁궐 이름을 지으라고 했다. 그러자 정도전은 유교 경전 중 하나인 시경의 '군자 만년에 큰 복(景福)을 누리리라' 라는 구절을 인용해서 경복궁이라는 이름을 지었다. 뜻도 좋으면서 동시에 유교를 나라의 기반으로 하겠다는 의미를 잘 보여주는 이름이다. 이처럼 1395년, 지금으로부터 500여년 전의 우리 나라 사람들은 한 나라의 중요한 건물 이름을 붙일 때에 적어도 고전 한 수는 읆을 줄 알았고 비유와 상징을 사용할 줄 알았다.

현재 대한민국의 대통령이 사는 곳의 이름은 청와대이다. 청와대(靑瓦臺)는 푸른(靑) 기와(瓦) 집(臺)이라는 뜻이다. 한자로 써 놓으니까 괜히 뭔가 있어보여서 그렇지, 행인이 길을 가다가 "와 저 집은 지붕이 파랗네" 라고 한 것과 다를 것이 없는 이름이다. 깊은 뜻이나 비유나 상징은 찾아볼 수가 없다. 굳이 엮어보려면 유물론하고나 엮일 수 있으려나.

사람은 성장하면서 어휘가 고급스러워지는데 어째 우리말은 요즘 점점 어려지는 것 같다. 복덕방과 공인중개사, 경복궁과 청와대의 차이가 그 현상을 여실히 보여준다. 언제쯤 500년 전으로 성숙할 수 있을까.

'글쓰기 > 수필' 카테고리의 다른 글

이비인후과와 귀코목구멍과  (0) 2019.01.30
천하장사 고양이  (0) 2018.10.30
너무 규칙적이지 말자  (0) 2018.05.30
더하기와 플러스  (2) 2018.03.07
그 남자 그 여자  (1) 2017.09.25

[파이썬] 아나콘다 업데이트하기


아나콘다를 사용하다 보면 아나콘다 자체 및 부속 라이브러리들을 업데이트 해야 할 일이 생기곤 합니다. 그럴 때에는 다음과 같이 하면 쉽게 전체 업데이트를 할 수 있습니다.


conda update -n root conda

conda update --all

conda update --all


conda update -n root conda 는 conda 자체를 최신 버전으로 업데이트하는 명령입니다.

conda update --all 이 본격적으로 업데이트를 하는 명령인데, 경우에 따라 두 번 실행해야 다 업데이트가 되는 경우가 있었습니다.


( 다음 링크를 참고했습니다. https://stackoverflow.com/questions/45197777/how-do-i-update-anaconda#45197778 )

윈도폰 8에서 gmail을 사용해서 이메일을 보낼 때 이메일이 중복되는 경우가 있습니다. 원인과 해결책은 다음과 같습니다.


윈도폰에서는 '보낸 편지함'이라고 나타나고 gmail에서는 'Sent Items'이라고 나타나는 폴더가 있습니다. 이 폴더는 윈도폰이 직접 만드는 폴더입니다. gmail 자체 폴더는 '보낸편지함'입니다. 띄어쓰기가 없습니다.


윈도폰에서 '보낸 편지함' 동기화를 중지하시면 더이상 gmail을 사용해서 이메일을 보낼 때 중복되지 않습니다.


[JUnit] 명령줄(커맨드 라인)에서 JUnit 실행하기


명령줄(커맨드 라인)에서 JUnit을 실행하시려면 다음과 같이 하시면 됩니다. 리눅스와 윈도에서의 명령어가 조금 다른데, 리눅스에서는 :을 쓰고 윈도에서는 ;을 씁니다. 한편 JUnit 버전(4.x와 3.x)에 따라서도 명령어가 조금 달라집니다.


실행하실 때 test class name은 현재 디렉토리 혹은 path에 지정된 디렉토리에 있어야 합니다.


< JUnit 4.x >


리눅스

java -cp .:/path/to/junit_4.x/junit.jar org.junit.runner.JUnitCore [test class name]


윈도

java -cp .;/path/to/junit_4.x/junit.jar org.junit.runner.JUnitCore [test class name]


< JUnit 3.x >


리눅스

java -cp .:/path/to/junit_3.x/junit.jar junit.textui.TestRunner [test class name]


윈도

java -cp .;/path/to/junit_3.x/junit.jar junit.textui.TestRunner [test class name]


[펄 (Perl)] 특정 디렉토리 내의 모든 파일 리스트 출력하기


특정 디렉토리 내의 모든 파일 리스트를 재귀적으로(recursive) 출력하는 펄 함수는 다음과 같습니다.


sub process_files

{

    my $path = shift;

    opendir (DIR, $path) or die;


    my @files = map { $path . '/' . $_ } grep { !/^\.{1,2}$/ } readdir (DIR);

    my @result;

    closedir (DIR);


    for (@files)

    {

        if (-d $_) { push @result, process_files ($_); }

        else { push @result, $_; }

    }

    return @result;

}


[펄 (Perl)] 배열에 특정 값이 있는지 검사하기


~~ 연산자를 사용하면 배열에 특정 값이 있는지를 쉽게 검사할 수 있습니다.

단 펄 버전 5.10 ('오 점 일영'이 아니라 '오 점 십' 버전입니다) 이상에서만 사용 가능합니다.

코드는 다음과 같습니다.


#!/usr/bin/perl

use 5.012;

use strict;

use warnings;


my @array;

my $check = 3;


if($check ~~ @array) { say "$check is found!!"; }


물론 위 코드의 경우 @array가 비어있는 배열이므로 "$check is found!!"가 출력되지 않을 것입니다.


+ Recent posts