Author: byun1114

  • 날짜 shift

    지난 번 UCLA 병원에 갔을 때 공개용 DB에서는 날짜를 shift 한다고 했다. 생년월일을 변동 주는 것은 좀 고민해 봐야할 것 같다. 일단 날짜에 집중하기로 했다. 아직 완전하게 구현한 것은 아니지만, 원래 OMOP CDM에 들어가는 날짜는 date 속성으로 지정을 했으면, 덧셈과 뺄샘이 된다. 특정인에 따른 shift 값을 지정할 수 있으면 일일이 더해주거나 빼주는 방법을 이용하면 될 것 같다. 그래서 -180~180일 변동을 줄 수 있도록 코드를 작성해 보았다. 이 경우에는 361개를 만든 후에 181을 빼주면 편하게 할 수 있다. +1을 빼면 180을 빼도 될 것 같다.

    CREATE TABLE mapping.person_anonymous_day_shift AS (SELECT trunc(random() * 361 + 1) - 181 AS day_shift FROM generate_series(1, (SELECT COUNT(*) FROM mapping.person_anonymous)));

    생각해보니 person 테이블이 연도는 -5~5정도로 변동을 주고 월과 날짜는 그냥 1~12와 1~28 정도로 임의로 할당해도 전혀 문제가 없을 것 같다.

  • Ubuntu console 글꼴 크게 하기

    연구용 컴퓨터는 운영체제가 Ubuntu Server와 Windows 10 Enterprise이다. Ubuntu의 경우 콘솔 화면 글꼴이 너무 작아서 눈이 아파와서 글꼴을 변경해보기로 했다. 한글 글꼴 깨지는 것도 손봐야 하지만 우선 글자 크기부터 크게 해야했다.

    sudo dpkg-reconfigure console-setup

    인코딩은 UTF8, 그 다음 화면에서는 Guess optimal character set 을 선택한다. 그 다음에서 글꼴을 선택하는데 VGA나 기타 다른 글꼴을 선택한다. 그 다음에 글꼴 크기를 선택한다. 16×32 같은 큰 크기를 선택하면 변경 과정을 거친 후 큰 글씨를 볼 수 있다.

  • Telegram API를 이용하여 나에게 메세지 보내기

    ncube.net/telegram%ED%85%94%EB%A0%88%EA%B7%B8%EB%9E%A8-%EB%B4%87%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EB%A9%94%EC%84%B8%EC%A7%80-%EC%A0%84%EC%86%A1%ED%95%98%EA%B8%B0/

    vmpo.tistory.com/85

    이 두 개의 홈페이지 내용을 바탕으로 Telegram에서 나에게 메시지 발송하는 것 성공했다. 쉽네. 카카오톡은 뭔가 손이 많이 가는데
    Telegram은 매우 간단하게 할 수 있다.

    @BotFather에게 말을 건다.
    그 다음 /newbot를 선택한다.
    대화창 이름을 고르고 나서 Bot 이름을 입력한다.
    그럼 BotFather가 길다란 메세지와 함께 HTTP API: 로 시작하는 Token을 표시하여 준다.

    https://api.telegram.org/bot[Token]/getUpdates

    웹 브라우져에서 대괄호는 빼고 bot 글자에 붙여서 Token을 입력한다.

    {"ok":true,"result":[]}
    

    이렇게 나오면 성공이다. 그 다음 Bot과 한 마디 해준다. 그 다음 위의 웹 페이지에 새로 고침을 해본다. 이 예시는 인터넷에 있는 것이다.

    {"ok":true,"result":[{"update_id":314515826,"message":{"message_id":2,"from":{"id":4200110535,"is_bot":false,"first_name"
    

    “id”: 로 시작하는 숫자가 내가 나의 bot과 이야기하는 chat_id이다.

    https://api.telegram.org/bot[Token]/sendmessage?chat_id=4200110535&text=good
    

    이렇게 접속하면 good이라는 메세지가 bot을 통하여 나에게 전송되는 것을 알 수 있다. Python을 이용하여 메세지를 전송하려면 pip를 통하여 python-telegram-bot를 설치한다.

    pip install python-telegram-bot

    다음의 내용으로 코드를 짠다.

    import telegram
    bot = telegram.Bot(token = 'Token')
    bot.sendMessage(chat_id = '4200110535', text="안녕하세요")

    이것을 실행하면 나에게 메세지가 온다.

    Linux라면 curl을 이용하여 보낼 수 있다.

    curl -X POST -H 'Content-Type: application/json' -d '{"chat_id": "4200110535", "text": "This is a test from curl by BSJ"}' https://api.telegram.org/bot[Token]/sendMessage

    그런데 이렇게 기~~인 명령문을 여러 프로그램에 계속 넣는 것도 좋은 방법은 아닌 것 같다. 내용만 정해두면 해당 메세지가 발송되도록 하는 것이 좋을 것 같았다. 알아두어야 하는 것은 bot.sh 뒤에 입력되는 구절을 스크립트에서 받도록 하는 것이고, 이것을 수 많은 따옴표가 있는 구문에 넣는 방법이다.

    #! /bin/bash
    message=${1}
    curl -X POST -H 'Content-Type: application/json' -d '{"chat_id": "1086690584", "text": "'"${message}"'"}' 

    단어 한 개를 보낼 경우에는 따옴표가 없어도 된다. 그런데 두 단어 이상이라면 큰 따옴표나 작은 따옴표로 묶어야 한다. 이렇게 첫 번째로 입력되는 값은 ${1}로 받을 수 있다. 그 다음의 문제는 -d 옵션 이후의 따옴표 처리. 보통의 예시는 큰 따옴표로 되어 있는데, 저렇게 ${message} 부분만 작은 따옴표를 큰 따옴표로 묶는 방법을 이용하면 편하게 적용 가능하다.

  • 컬럼 속성 변경

    PostgreSQL에서 컬럼 속성을 변경할 때 방법을 지정해야 하는 경우가 있다. 이게 항상 이런지는 모르겠지만..

    ALTER TABLE cdm.condition_occurrence ALTER COLUMN person_id TYPE INTEGER USING person_id::INTEGER;
    

    TYPE INTEGER로 속성을 변경을 선언한 다음에 USING을 통하여 한 번 더 언급해 주어야 함.