The number of posts in '전체 글' : 691

  1. 2018.11.17 SELinux가 켜진 상황에서 cgi 실행시키기 by adnoctum 6
  2. 2018.07.13 gvim 의 초기 설정들 by adnoctum 1
  3. 2018.07.12 엑셀에 개인용 매크로 저장 및 단축키 지정하기 by adnoctum
  4. 2018.05.15 주성분 분석으로 알아 보는 도시 통계 by adnoctum 2


   문제를 상술하자면, SELinux 가 켜져 있는 상황에서 cgi 파일 안에서 외부 프로그램을 실행시키려 할 때 해야 하는 일이다. 관건은 file 의 SELinux security context를 변경시켜야 한다는 것이다. 

   SELinux가 켜져 있는 상황에서, 일반적이라면 cgi-bin 인 곳에 apache 가 실행시킬 수 있는 실행 파일이 위치하게 된다. 만약 그 스크립트 파일 안에서 다른 프로그램을 실행시켜야 한다면, 그렇게 실행을 당해야 하는 파일은 httpd_sys_script_exec_t context를 갖고 있어야 한다. 다음과 같이 한다. 

[centos@ABCDEFGH KKK]$ sudo chcon -t httpd_sys_script_exec_t [executible-file-name]

그것의 확인은 다음과 같이 -Z 지시자의 ls 명령어로 확인할 수 있다. 

[centos@ABCDEFGH KKK]$ ls -Z

-rwxrwxr-x. centos centos unconfined_u:object_r:httpd_sys_script_exec_t:s0 find_words


보다 자세한 내용은 SELinux 설명 페이지에 있으니 참고한다. 


SELinux가 켜져 있는 상황이라면 httpd 가 읽을 수 있는 파일, 쓸 수 있는 경로, 실행시킬 수 있는 파일 등이 모두 조절되어야 한다. 보통 권한 문제일 경우 chmod 명령어로 해결할 수 있었는데, 이 경우 이뿐만이 아니라 chcon 을 통한 security context까지 조절해 주어야 한다. 




Posted by adnoctum
,



   vi/vim 의 윈도우즈용인 gvim 을 설치하였을 경우 개인적인 설정을 기록해 둔다. 참고로 gvim 의 버전이 바뀌면서 자주 바뀌므로 그때그때 적절히 대응한다. 


gvim version 8.1.1

_vimrc 파일에 다음을 추가한다. 

set number

set nowrap

set hlsearch

set smartindent

set nobackup

set noswapfile

set noundofile


설치후 바로 이용하면 온갖 잡다구리한 파일이 만들어지므로 위처럼 그러한 파일을 만들지 않게 했다. 또한 Ctrl + A 로 전체 선택이 되게끔 하기 위하여 _vimrc 파일의 제일 처음에 mswin.vim 도 source 를 해준다. 다음과 같다. 

source $VIMRUNTIME/vimrc_example.vim

source $VIMRUNTIME/mswin.vim


set diffexpr=MyDiff()

function MyDiff()

  let opt = '-a --binary '

  if &diffopt =~ 'icase' | le

" 생략~~


두 번째 줄이 추가한 줄이다. 

= = =

이놈의 gvim 은 버전이 변경될 때마다 자질구레하게 문제다, 으휴... mac 에선 텍스트 파일의 주석의 색이 안 변해서 한참을 찾았었지...




Posted by adnoctum
,




   엑셀에서 매크로 혹은 모듈을 작성하여 단축키에 할당해 보자. 


1. 개발자 탭 보이게 하기. 

2. 개인용 매크로 저장 파일 만들기. 

3. 모듈/매크로 작성. 

4. 개인용 매크로 저장 파일 감추기.

5. 단축키 할당. 


1. 개발자 탭 보이게 하기. 

    메크로나 모듈을 작성할 수 있는 메뉴인 개발자 메뉴는 기본적으로는 보이지 않는다. 다음처럼 혹은 다른 방법으로 엑셀 설정으로 들어 가서 개발자 탭을 보이게 한다. 




2. 개인용 매크로 저장 파일 만들기. 

   만약 어느 엑셀 파일을 열든 실행 가능한 매크로/모듈을 저장하고자 한다면 개인용 매크로 저장용 이진 파일(*.xlsb) 에 저장해야 한다. 보통 그 경로는

C:\Users\adnoctum\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.xlsb

로 되어 있다. adnoctum 은 사용자 이름이므로 각자의 컴퓨터에 있는 것이 나올 것이다. (윈도우즈 10  Pro + MS-Office 2016) 만약 이 경로가 안 보이면 탐색기의 폴더 옵션에서 숨김 파일 또는 시스템 파일 감춤을 해제하거나 탐색기의 주소창에 저 경로를 그냥 써 넣으면 된다. 눈에 안 보인다고 실제로 없는 것이 아니기 때문에 저 경로가 존재하면 그 곳으로 가게 된다. 만약 파일이 없으면 빈 엑셀 파일을 하나 만들어서 다른 이름으로 저장한 다음 이 이름으로 저장한다. 


3. 모듈/매크로 작성. 

   각자의 방법으로 모듈 또는 매크로를 작성한다. 모듈 혹은 매크로에 대한 설명을 여기서 하지는 않는다. 간단히 내가 사용하는 모듈 하나만 올려 놓는다. 


현재 놓여 있는 열에서 위 기능을 실행하면 현재 열의 내용들이 대문자로 바뀌고 배경이 노랑색으로 변경되는 간단한 모듈이다. 


4. 개인용 매크로 저장 파일 감추기.

   어느 엑셀 파일을 열든 PERSONAL.xlsb 파일이 열리는데, 만약 이것이 보기 싫다면 이 파일을 연 후 메뉴에서 감추기를 선택하면 된다. 즉, 우리가 엑셀 파일을 열 때마다 이 파일도 함께 열리지만 보이지 않는 것이다. 



5. 단축키 할당. 

   리본 메뉴를 변경하기 위하여 아래로 된 조그만 세모를 누르면 빠른 메뉴 바로가기 변경 (Customize Quick Access Toolbar ) 팝업이 뜬다. 그 곳에서 밑에서 두 번째인 더보기 (More Commands...) 를 선택한다. 1단계에서와 같다. 



그러면 엑셀 설정 중 Quick Access Toolbar 에 대한 설정창이 나온다. 그 곳에서 매크로를 선택하면 3번 단계에서 작성한 모듈/매크로가 나타난다. 이것을 선택하면 된다. 




위처럼 하면 엑셀의 왼쪽 위에 단축키로 설정이 된다. 


이 상태에서 Alt 키를 누르면 번호가 나온다. 


이 번호를 누르면 저 기능이 수행이 된다. 매우 편리하며 효율적이므로 엑셀로 많은 작업을 할 경우 설정해 놓는 것이 좋다. 




Posted by adnoctum
,



   이 글은 주성분 분석의 예제를 위한 글이다. 주성분 분석이 무엇인지 설명하기 위해 도시에 관한 통계를 이용하여 도시의 특성을 살펴 본 글이다. 주성분 분석의 수학적 원리 및 그것을 C++로 구현한 것은 전의 글을 참고한다. 


   주성분 분석은 분석하는 대상의 차이점을 가장 잘 드러내 주는 변수 조합을 찾는 방법이다. 예를 들면, 한국의 각 도시 간의 차이를 가장 잘 나타내 주는 통계는 무엇일까? 인구, 교원 1인당 학생 수, 도시 면적, 사망자 수, 상수도 보급률 등등의 통계 중에서 도시 간의 차이를 가장 잘 나타내어 줄 수 있는 변수의 조합을 찾을 수 있고, 혹은 각 변수가 도시 간의 차이에 대해 어느 정도의 기여를 하는지 등을 찾는 방법이 주성분 분석이다. 

   우선 이 글은 통계청 누리집에서 받은 한국의 도시에 관한 여러 통계 값을 사용했다. 총 변수는 71개로 인구수, 도시 면적 등이 포함된다. 도시는 서울시 등의 광역시는 구 단위로 나눴다. 제주도는 서귀포시와 제주시로 나누어서 했다. 창원시와 마산시처럼 통합이 되는 등의 변화로 인해 통계치가 많이 없는 경우가 있기 때문에  사용할 수 있는 전체 변수들 중 여러 도시에 공통으로 존재하는 변수들을 고르다 보니 총 71개의 변수가 남게 되었다. 이 글에 사용한 통계 파일은 다음에 올려 놓는다. 

SKoreaConsusFullRank.txt


주성분 분석을 해보면 다음과 같이 각 변수에 대한 계수가 계산이 된다. 살펴 보면 각 도시 간의 차이는 인구에 대한 변수로 대부분 설명이 되는 것을 알 수 있다. 주민등록인구 (2017~2015) 이 세 변수의 합이 0.97로, 각 도시 간의 차이의 97%가 인구수로 설명이 된다는 의미이다. 그 다음 중요한 것이 전입인구 수, 사업체 수 등의 순서임을 알 수 있다. 



주성분 분석의 원리에 관한 글에서 설명하였듯이 계수의 제곱의 합이 1.0 이 됨을 위에서 볼 수 있다. 

주민등록인구수가 너무 많은 변량을 설명하므로 이 세 변수를 제외하고 다시 주성분 분석을 해보자. 물론, 그렇게 하면 주민등록인구에 의한 변량을 제외한 값에서 각 변수가 차지하는 비율이 다시 나오긴 한다. 



이 경우 전입인구수가 대부분의 차이를 설명하는 변수임을 알 수 있다. 즉, 2015~2017년의 전입인구 수가 총 85% 의 도시간 차이를 설명하는 변수임을 알 수 있다 ((coeff_pc1)^2). 만약 이 세 변수를 제하고 다시 주성분 분석을 하여 각 변수의 영향력을 살펴 보면 녹색으로 표시한 것과 같이 나온다. 즉, 주민등록인구수와 전입인구수에 관한 통계를 제외하면 각 도시 간의 차이를 가장 잘 반영하는 변수는 사업체 수와 토지거래 현황 (필지수, 2017년) 임을 알 수 있다. 

   도시 간 차이에 대한 기여율이 매우 낮기는 하지만 유치원 원아수, 출생아수 가 그 다음으로 나온다. 즉, 도시는 그 도시에 살고 있는 사람의 수, 그 도시로 들어 오고 나가는 인구 수가 도시의 가장 큰 특징이 되며, 그 다음으로 사업체 수, 토지 거래 현황, 유치원/출생아 수, 사망자 수 등에 의해 도시의 특징이 결정되는 것을 알 수 있다. 출산률, 지가변동률, 자동차 천대당 교통사고 발생 건수, 1인 가구 비율 등은 도시 간의 차이를 설명하기에는 매우 미약한 변수들임을 알 수 있다. 

   전문가가 아니라 정확한 분석은 아니겠지만, 주성분 분석만으로 위 결과를 이해해 보자면 이렇다. 도시 간의 차이는 우선 인구에 의해 가장 많이 좌우된다. 살고 있는 인구 수 자체가 전입인구에 의해 결정되므로 인구 수는 곧 전입인구수에도 반영이 된다. 또한, 도시의 발달을 생각해 보면 사업체 수가 전입인구와 연관된 주요한 변수임을 알 수 있다. 사업체의 증감에 따라 전입인구의 증감 역시 나타날 것이기 때문이다. 흥미로운 점은 그 다음으로 나오는 것이 유치원 원아수, 출생아수가 도시 간의 차이를 설명하는 변수라는 것이다. 아무래도 인구의 일정 부분이 유치원생과 출생아수이기 때문에 인구수에 따라 나타난 통계값이 아닌가 생각된다. 또한, 도시의 발달에 주요한 필요 조건 중 하나가 유치원과 같은 시설이 아닌가, 한다. 교원 1인당 학생수나 인구 천명당 사설학원 수 모두 유치원 및 유치원생에 관한 통계보다 도시간 차이에 기여하는 비율이 적은 것으로 나온다. 

   이제 주성분 분석의 제1주성분과 제2주성분을 이용하여 각 도시를 2차원 상에 표시해 보자. 


원점에서 가장 먼 곳에 위치하는 도시는 화성시/용인시/청주시 등임을 알 수 있다. 제2주성분의 주요한 변수는 토지거래 면적 및 필지수, 사업체 수, 전입인구, 유치원수, 도시 면적 순임을 감안할 때 원점에서 가장 먼 곳은 인구도 많고 도시 면적도 큰 도시들임을 유추할 수 있다. 실제로 용인시/창원시/고양시/수원시 는 광역시가 아닌 도시들 중에 인구가 가장 많은 도시들이다. 또한 화성시는 인구는 비록 60만 정도(8위)이나 전입인구가 10만(6위)이 넘는 도시로, 동탄 제1신도시 이후 한창 진행 중인 동탄 제2신도시 개발에 따른 통계값들이 반영된 것으로 보인다. 


   y 축으로 표현된 제2주성분의 값은 다소 '도시화'와 연관된 것으로 보인다. 제1주성분이 어느 정도 크고 (즉, 인구 수가 어느 정도 크고) 제2 주성분 역시 큰 곳들은 대부분 서울시 혹은 광역시의 여러 구인 것으로 나타났다. 


중간중간 울릉군이나 계룡시가 끼어 있는데, 매우 작은 도시가 끼어 들어 간 것으로 보이고, 실제로 제2주성분 값은 면적은 크지 않지만 인구는 많고 사업체가 많은, 쉽게 말해 우리가 일반적으로 생각하는 도시에 얼마나 가까운가를 반영하는 값으로 보인다. 


   이상으로 주성분 분석을 이용하여 도시에 대한 통계를 살펴 보았다. 상수도 보급률과 같은 것은 대부분의 도시가 비슷한 값을 갖기 때문에 도시를 구분하기에 좋은 변수가 아니다. 반면, 인구가 각 도시를 구분할 수 있는 압도적인 변수임을 알았다. 그 뒤로 전입인구, 사업체수, 유치원수 등이 도시 간의 차이를 나태내어 주는 변수임을 알았다. 도시 면적 역시 도시 간의 차이에 기여하는 정도가 앞에 열거한 변수들보다 적은 것을 알 수 있었다. 주성분 분석에 의해 제1주성분과 제2주성분을 각각 x축, y축으로 한 후 각 도시를 그려 보면 인구수가 충분히 많은 도시들, 가령 수원시/화성시/고양시/용인시 같은 도시들이 원점에서 먼 도시로 나타난다. 그 이외의 도시들은 원점에 몰려 있다. 즉, 경기도(고양시/수원시/용인시/화성시), 충청도(청주시), 경상도(창원시) 처럼 광역시는 아니지만 인구가 충분히 많고 그만큼 사업체 등이 발달된 도시들이 다른 도시들과 많이 구분되고, 그것을 주성분분석 2차원에서 확인할 수 있었다. 물론, 서울시/광역시들이 더더욱 뚜렷하게 나타났겠지만 이들은 구 단위로 분석을 해서 현재는 그것이 두드러지게 표시되진 않았다. 또한, 원점에 가까이 몰려 있는 도시들 중 인구가 적고 사업체가 적은, 예를 들면 우리의 일반적 인식 속에 있는 '시골'에 가까운 도시들, 가령 영양군/울릉군/장수군/무주군 등도 알 수 있었다. 




   여기서부터는 개인적인 이야기들. 내 고향은 용인이고, 여전히 용인에 부모님이 살고 계신다. 용인이 꽤 넓은 지역이라 지역 간 개발 정도가 많이 차이가 난다. 그래서 그런지 용인이 고향이라고 하면 사람들은 전부 도시라고 생각하지만, 내가 태어나고 자란 곳은 5년여 전만 해도 반딧불이가 날아 다녔고, 으름이나 다래가 있고, 논과 산에는 족제비/너구리/고라니 등이 뛰어 다니는 곳이다. 나는 중학교 때까지 장작을 때는 온돌방이 있는 집에서 살았었다. 얼마 전까지만 해도 눈이 오면 우리 동네는 버스가 오질 못했다, 고개 하나를 넘을 수 없어서. 그래서 중학교 때 눈이 오면 학교에 지각을 하곤 했었다. 여전히 기억나는, "과학실로", 라고 누군가가 나를 위해 칠판에 써 놓았던 글자, ㅋㅋㅋ. 용인에서 살다 고등학교를 수원에서 다녔고, 이후 서울로 대학을 가서 대전에 내려오기 전까지 서울/수원/용인에서 주로 돌아 다녔기 때문에 여전히 용인을 시골로 생각하고 있었는데... 얼마 전 용인 인구가 100만을 넘었다는 소식을 들었다. 용인 지역 내에서 개발 편차가 클 뿐 용인은, 특히 분당과 수원에 인접한 곳들은 시골이 아니었어, >.<"";;; 

   공교롭게도 이번 분석에서 가장 튀게 나온 경기도권 도시들, 고양시/용인시/평택시/화성시/수원시 는 익숙한 도시들이다. 지금 큰누나가 살고 있는 곳이 화성시이기도 하고, 우리 동네의 산골짜기로 가서 산을 하나 넘으면 화성시 동탄이다. 언제인지 기억은 안 나는데 겨우 산 하나 넘은 것인데 얼마나 머랴, 하고 산 하나 넘어서 동탄면(신리)로 가서 집으로 돌아 오느라 5시간을 걸었던 적도 있다. 평택도 근처 도시이기도 하며 심리적으로 가깝게 느껴지기도 하고. 생각해 보면 서울과 광역시를 제외하면 이런 도시들이 인구도 많고, 뭔가 이런 도시에 익숙해져있다 보니 전국의 많은 곳을 가도 약간 시골스럽다는 느낌이 들기는 했다. 보통 서울 출신들이 그런다는데 나는 용인이기는 해도 시골에서 자랐는데 왜 그런 느낌이 드나, 했는데, 이번 분석에 의하면 내가 지내 온 도시들이 서울을 비롯해 인구수나 도시 특성으로 보았을 때 저렇게 특징적인 도시였기 때문일 수도 있겠다, 하는 생각이 들었다. 용인/수원에서 받은 가장 큰 느낌은 사람이 많다는 것과 공장이 많다는 것이었으니까. 전국 어디를 가나 그 정도 사람과 공장/회사가 있는 곳은 서울과 광역시들을 제외하면 많진 않겠지, 그것이 이번 분석으로도 나타났고. 심지어 대전도 약간 시골처럼 느껴질 때가 많고, 실제로 대구나 부산, 창원에서 온 사람들 역시 그런 말을 많이 한다.  




Posted by adnoctum
,