반응형

정부는 도대체 이걸 왜 만든 것인지 모르겠다.

정부 과제 제안할 때 또는 중간 단계에서 참여연구원들의 정보를 모두 NTIS에서 발급하는 과학기술인등록번호로 처리하는 것은 알겠는데, 그래서 그게 생년월일과 이름, 이메일 등을 조합한 것과 무슨 차이인지? 연구과제를 제외하면 일상 생활 그 어느 곳에서도 전혀 쓰이지 않는데 말이다.


------


우리 연구실에 한국 국적이면서, 미국에서 살면서 미국에 있는 대학교를 다니다가, 우리 학교에 교환학생을 와서 지내면서 교환학생 기간 동안 연구과제 참여연구원으로 지내는 학생이 한 명 있다. 그런데 연구과제 참여 연구원으로 처음에 등록할 때는 괜찮았는데, 오늘 행정상의 처리 때문에 그 교환학생의 과학기술인등록번호가 필요하게 되었다.


그런데 과학기술인등록번호를 발급받으려면 본인 인증을 해야 하고, 그게 핸드폰 인증 또는 아이핀(I-PIN) 인증 둘 중 하나만 가능하다.

핸드폰 인증을 하려고 했더니 이 친구가 한국에 오래 있는 게 아니라서 자신의 친척의 명의로 핸드폰을 쓰고 있어서 핸드폰 인증을 쓸 수 없었다.

아이핀은 당연히 갖고 있지 않고, 신규 발급을 하려고 보니 공인인증서가 있어야 하는데, 공인인증서도 역시 갖고 있지 않다. 공공 아이핀 발급하는 곳에 전화를 했더니 주민등록등본과 세대원 모두를 확인할 수 있는 증빙서류(?) 등 요구사항이 많아서 그런 서류 구비하는 게 더 오래 걸리는 듯 했고, 결국 마지막 남은 방법은 직접 가까운 주민센터에 가서 공무원을 통해서 발급받는 수밖에 없다고 한다.


이 친구는 과학기술인등록번호를 발급받고 나면 길어도 한 달 이내에 다시 미국에 돌아갈 텐데, 이 고생을 하면서 과학기술인등록번호를 받아서 연구과제 관련 행정처리 한 번 하고 나면 아무 곳에도 쓰일 데가 없다. 그저 개인정보만 데이터베이스에 남아있을 뿐.


결국 본인 명의 핸드폰 하나 없는 것 때문에 이 불편한 확인 과정을 다 거쳐서 결국 마지막으로 주민센터까지 업무시간을 쪼개서 직접 다녀와야 한다는 것. 참 답답하다. 왜 이렇게까지 해야 하는 것일까?





반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 14.04 (amd64)

python version: 2.7.6


파이썬에서 firebase에 접근하는 코드를 테스트하던 중에 아래와 같이 경고 메세지가 길게 출력이 되면서 어쨌든 실행은 정상적으로 되었다:

usera@usera-Linux:~/git/firebase_test$ python test2.py 

/usr/local/lib/python2.7/dist-packages/urllib3/util/ssl_.py:339: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings

  SNIMissingWarning

/usr/local/lib/python2.7/dist-packages/urllib3/util/ssl_.py:137: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings

  InsecurePlatformWarning

{요청했던 데이터}

usera@usera-Linux:~/git/firebase_test$ 


SSL 관련 라이브러리가 없어서 그런가 해서 pip install pyopenssl 설치를 시도해 보니 이미 설치되어 있었다.


인터넷을 뒤져 보니 사용하는 라이브러리의 버전이 낮아서 그럴 수도 있다는 댓글이 있어서 pyopenssl을 업그레이드 했더니 그 뒤로 경고 메세지가 뜨지 않고 문제가 해결되었다.


$ pip install pyopenssl --upgrade





반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 14.04 (amd64)

에러 발생한 버전: 5.5 (Ubuntu 14.04에서 apt-get으로 기본 설치되는 버전)



아마존웹서비스(AWS) 서버에 있는 MySQL 데이터베이스를 dump를 떠서 Ubuntu 14.04를 쓰는 개인 피씨에 옮기려고 했는데, 백업이 복구가 되지 않고 아래와 같은 에러가 발생하였다:


$ mysql -uroot -p test < test_170728.sql

Enter password: 

ERROR 1293 (HY000) at line 25: Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause



에러 메세지가 알려주는 것 그대로, 테이블 하나에 TIMESTAMP 타입의 column은 한개만 default로 CURRENT_TIMESTAMP를 지정할 수 있다는 내용이다.


참고로 이 제한사항은 5.6부터 해제되었기 때문에, 지금 쓰는 mysql-server-5.5를 mysql-server-5.6으로 업그레이드하면 문제가 해결된다.


$ sudo apt-get update

$ sudo apt-get install mysql-server-5.6


이미 5.5에서 관리하고 있던 데이터베이스가 있는 경우, 위와 같이 5.6을 설치하면 자동으로 데이터베이스가 이전되므로 별도로 dump를 떠서 옮길 필요는 없다. 다만 만약의 경우를 대비해서 5.6을 설치하기 전에 미리 백업을 해 두면 안전하긴 하다.





반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 16.04 server (amd64)

Python: 3.5.2

Flask-restful: 0.3.5


Flask-restful을 이용하면 하나의 클래스가 REST API 1개를 처리할 수 있도록 만들 수 있다. 처음에는 Quickstart 페이지에 있는 HelloWorld 예제 [1]를 따라하면서 API 여러 개를 만들면서 클래스도 여러 개 만들고, 각 클래스에서 argument 처리 등 점점 복잡한 작업을 추가하기 시작하면서 소스 파일이 1개뿐이면서 길이가 아주 많이 길어지는 상황이 되었다.


하나의 소스 파일이 너무 길면 보기도 불편하고, 무엇보다 여러 사람이 REST API를 조금씩 나눠서 병렬적으로 코딩하는 경우에는 하나의 파일에 동시에 수정이 발생하므로 협업 측면에서도 관리하기 어렵다. 따라서 여러 개의 파일로 나눠서 관리하는 것이 좋다. 사실 어떻게 나눠야 할 지 모르겠어서 고민하다가, 그냥 파이썬이 클래스를 다른 소스 파일에서 import해 오는 구조를 그대로 쓰기만 하면 되는 간단한 원리임을 알 수 있었다.


예를 들면, 아래와 같은 HelloWorld 예제를 main.py로 두고,


<main.py>

from flask import Flask

from flask_restful import Resource, Api


app = Flask(__name__)

api = Api(app)


class HelloWorld(Resource):

    def get(self):

        return {'hello': 'world'}


api.add_resource(HelloWorld, '/')


if __name__ == '__main__':

    app.run(debug=True)



여기서 main.py는 서버를 실행하는 시작 포인트로만 쓰고 실제 REST API 처리하는 부분을 분리한다면, 아래와 같이 할 수 있다.


<hello.py>

from flask_restful import Resource


class HelloWorld(Resource):

    def get(self):

        return {'hello': 'world'}



<main.py>

from flask import Flask

from flask_restful import Resource, Api

from hello import HelloWorld


app = Flask(__name__)

api = Api(app)


api.add_resource(HelloWorld, '/')


if __name__ == '__main__':

    app.run(debug=True)


이제 main.py 파일에서는 클래스를 import하고 API 정의만 나열해 주고, 실제 API 처리 파일은 hello.py에서 수정하는 구조가 되었다.



<참고자료>

[1] Flask-RESTful Quickstart, http://flask-restful.readthedocs.io/en/0.3.5/quickstart.html



반응형
블로그 이미지

Bryan_

,
반응형

멀티태스킹을 하는 사람을 쳐다보면 굉장히 바쁘게 쉴 새없이 움직이는 것처럼 보인다. 어떤 의미에서는 정말 '열일'하고 있는 것처럼 보이기도 한다. 실제로 열심히 무언가 하는 것은 맞지만, 생산성이나 결과물 측면에서는 열일했다고 보기 어려운 경우도 발생한다.

실제로 멀티태스킹이 생산성에 좋지 않다는 연구 결과도 찾아보면 많이 있고, 그냥 직접 멀티태스킹을 해 보면 어느 정도 체감할 수 있다. 하지만 문제는 이 사회가, 특히 대학원 환경이 나에게 멀티태스킹을 강요한다는 데 있다.


석사과정 때는 수업을 들으면서 동시에 연구실에서 공부하라고 주는 논문들을 읽고, 가끔 연구과제와 관련해서 지시하는 일들을 처리해야 한다. 만약 연구실에 과제가 여러 개 있다면 과제 개수에 비례해서 서로 호환되지 않는 일처리 개수가 늘어난다.


박사과정이 되면 수업으로부터 자유로워지지만, 일단 개인 연구가 마치 백그라운드 프로세스처럼 절대로 멈추지 않고 지속된다. (관련 분야 논문을 읽거나, 해야 할 실험을 하거나, 논문을 조금씩 고치거나) 그리고 다른 어떤 일이 오더라도 이 개인연구는 절대 놓아서는 안 된다. 물론 현실은 시궁창ㅠㅠ 개인연구가 다른 덜 중요하면서 대신 더 급한 일처리에 침범당할 때가 한두 번이 아니다.

박사과정에게 연구과제는 조금 더 관리 측면에서 신경쓸 것이 많아진다. 교수님뿐만 아니라 재정을 지원해 주는 갑(정부 또는 회사), 때로는 과제의 규모가 좀 클 경우 과제 내의 다른 연구팀(다른 교수님들의 연구실, 참여기업 등)과 수시로 연락해서 일정을 조율하고 연구내용을 서로 맞추고, 진행상황을 검토하는 등의 일들을 해야 한다. 보통 1년 단위인데 연초에는 제안서를 쓰고 과제 제안 발표자료를 만드느라 바쁘고, 중간에는 정기적으로 회의를 소집해서 진행해야 하고, 가을 쯤에는 중간 진도점검 준비를 하느라 바쁘고, 연말에는 연차보고서와 연차평가 발표자료를 만드느라 바쁘고, 만약 뭔가 연구개발 결과물을 구현하기로 계획되어 있다면 프로그램 개발을 하느라 바쁘다. 이런 연구과제가 1개만 있으면 괜찮은데 2개 이상으로 늘어나면 그 때부터는 정신이 없어진다. 게다가 연구과제가 다루는 내용이 내 개인연구와 관련성이 낮다면 더 이상의 자세한 설명은 생략한다. =_=

여기에 후배이자 공동저자인 석사과정 학생들의 논문도 봐 주고, 가끔 연구내용을 가지고 특허 출원도 해야 하는 등 여러 가지 일들이 수시로 나에게 다가오는데 이것들을 잘 관리하지 않으면 '열심히 바쁘게 이것저것 하는 것 같지만 실상은 아무 것도 제대로 진행되지 않는' 최악의 상황이 지속되기도 한다.


최소한 연구 주제 1개에 대해서만 집중적으로 고민하고, 그 안에서 여러가지 다양한 일들이 발생하는 것은 문제가 되지 않는다. 이것은 싱글 태스크로 볼 수 있다. 그런 측면에서 연구과제를 단 1개만 제대로 집중해서 진행할 수만 있다면 그 연구과제는 꽤 좋은 성과를 낼 수도 있을 것 같다. 하지만 언제나 그렇듯이, 연구과제를 단 1개만 하고서 연구실 운영을 제약 없이 해낼 수 없기 때문에 필연적으로 멀티태스킹을 해야만 하는 상황이 발생한다.


직장생활을 본격적으로 하지는 않았지만, 여러 경로를 통해 확인해 본 직장에서의 생활도 멀티태스킹을 강요하기는 매한가지인 듯 하다. 결국 지금 멀티태스킹을 제대로 받아들이고 이것을 최대한 싱글 태스크처럼 잘 해내기 위한 전략이 필요하다. 말이 전략이지, 대부분의 사람들이 한번쯤 들어 보았을 만한 뻔한 방법을 쓰면 된다. 일을 중요도와 시급성 두 축을 기준으로 4등분해서 우선순위를 매기고 그에 맞추어 처리하면 된다. 이것을 알고 모르고의 차이가 아니라, 알고 있는 대로 일의 우선순위를 잘 매겨서 그대로 진행하는 "실천을 하고 못하고의 차이"일 뿐이다.


트렐로(trello)를 이용해서 내 앞에 주어진 수많은 일들을 분류하고 중요도와 시급성을 기준으로 우선순위를 매겨 보았다. 무엇을 먼저 해야 하는지는 명확히 보이기 시작했다. 하지만 그렇게 우선순위를 매긴 대로 하루하루 일처리를 성공적으로 해내기가 정말 쉽지가 않았다. 이렇게 task를 잘 정의해 놓았음에도 불구하고 갑자기 치고 들어오는 자잘한 일들은 여전히 많았고, 가끔 아기를 아내 대신 봐 준다거나, 몸이 아프다거나, 계획상의 일이 생각보다 너무 어려워서 그게 미뤄져서 줄줄이 다른 일도 못하는 등 변수가 산적해 있었다. 게다가 막상 무슨 일을 해야 할 지 뻔히 보이는데도 불구하고 몸이 말을 듣지 않아서 일에 집중을 못하고 시간만 허비하는 경우도 여전히 자주 있었다. 정말 이게 가장 속상하다. 나는 왜 이토록 의지박약인 것일까??


내가 하려는 그 일에 동기부여가 충분하지 못해서 일이 하기 싫거나, 갑자기 하던 일이 도무지 해결책이 떠오르지 않아서 어렵거나 해서 동기를 상실했을 때, 나는 높은 확률로 페이스북에 들어가거나 네이버 뉴스를 보면서 1시간 넘게 허비한다는 사실을 알 수 있었다. 알았으면 고쳐야지. 그런데 참 생각처럼 고쳐지지 않는다. 자, 이제는 뼈를 깎는 노력이 필요한 시점이다. 주어지는 모든 일이 마냥 재미있지 않다. 동기를 부여하는 것도 한계가 있다. 심지어 자기최면 수준으로 생각을 고쳐야 될 때도 있다. 그렇게까지 나 자신을 왜곡해야 하는 것일까 하는 생각이 들기도 한다.


애초에 내 성향이 그다지 낙천적이지는 않아서, 문제가 발생했을 때 나 스스로를 향해 비난의 화살을 쏠 때가 자주 있다. 이 습관 역시 좋지 않으므로 고쳐야 하는데, 이것도 노력 부족인가? 닭이 먼저인지 달걀이 먼저인지의 문제가 되고 만다. 하지만 어쨌든 이 쳇바퀴를 탈출해야 한다는 목적에는 변함이 없다.


내가 조금 더 자존감이 높아지고, 좀더 집행력이 좋아지고, 좀더 미래를 위해 현재의 어려움을 참아낼 수 있는 인내심과 집중력이 더해진다면 지금보다 상황이 나았겠지? 그러면 그렇게 되도록 노력하자. 이것이 나의 기도제목이다. 일 잘하는 사람 그 자체를 목표로 한다면 그것은 우상이 되겠지만, 적어도 그렇게 되고 나서야 무엇이든 내 앞에 언젠가 주어지는 사명(calling)을 감당할 수 있을 것 아닌가? 아니, 멀리 볼 것도 없이 지금 당장 내 삶의 작은 부분에서도 말씀대로 살고 사랑을 실천하기 위해서라도 내가 지금 멀티태스킹의 늪에서 쓸데없이 세월을 낭비하고 있어서는 안 된다. 뭐, 박사학위를 포기하고 지금 당장 연구실을 뛰쳐나와 다른 일을 시작하면 상황이 나아질 수는 있겠지만, 박사학위를 아직까지는 포기할 생각이 없으므로 결국 멀티태스킹을 최대한 생산적으로 관리하는 수밖에 없다.


힘내자, 노력하자. 싸우고 참아내고 이겨내고 극복하자. 제발.



반응형
블로그 이미지

Bryan_

,