R Markdown 으로 작성된 것을 GitHub Markdown 으로 바꾸기

아주 쉽습니다. 아래와 같이 맨처음에 있는 설정 부분에서 output: github_document이라고 변경하시면 됩니다.


---
title: "Habits"
author: John Doe
date: March 22, 2005
output: github_document
---

다음 링크를 참고하세요

GitHub Documents

라즈베리 파이에 Python 3.7.2 설치

라즈베리 파이에는 Python 3.5.3이 설치되어 있어서, 여기에 Python 3.7.2을 설치하려고 합니다.

아래 코드의 출처 다음과 같습니다.

Installing Python 3.7.2

라즈베리 파이의 터미널에서 다음과 같이 입력하시면 설치가 됩니다.

sudo apt install build-essential checkinstall
sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
sudo apt-get install libffi-dev
cd /usr/src
sudo wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
sudo tar xzf Python-3.7.2.tgz
cd Python-3.7.2
sudo ./configure --enable-optimizations
sudo make altinstall

아마도 다음과 같은 문구가 나온다면 설치가 완료된 것입니다.

Installing collected packages: setuptools, pip
Successfully installed pip-18.1 setuptools-40.6.2

Python-3.7.2를 실행하시려면 터미널에서 python3.7이라고 입력하시면 됩니다.

ps: 2019년 4월 16일 현재 Python-3.7.3이 나왔습니다. 이것을 설치하시려면, 위의 코드에서 3.7.23.7.2으로 변경하시면 됩니다.

아이폰 또는 아이패드 키노트에서 아이폰 또는 아이패드에 없는 폰트를 사용하는 법

맥을 사용하는 이유 중의 하나가 맥에는 키노트라는 PT 프로그램이 있기 때문입니다. 전 수업을 키노트를 이용해서 하는데 수업 한 번 하려고 매번 무거운 노트북을 들고 다니는 것도 너무 힘들거군요.

원래는 아이폰용 키노트가 맥용 키노트보다 품질이 좋지는 았지만, 애플이 맥에서 만든 키노트 파일을 아이폰에서도 그대로 사용하게 하기 위해서 맥용 키노트의 성능을 아이폰용 키노트에 맞춰 다운그래이드하고, 맥용 최신 버젼인 모하비에서는 아예 성능이 좋은 예전 맥용 키노트가 작동하지 못 하게 만들었습니다. 결국 이제는 맥용과 아이폰용 키노트는 거의 90% 같은 것이라고 할 수 있습니다.

이런 결과로 아이패드를 이용해서 수업시간에 키노트를 사용해서 PT를 해도 상관없게 되어버렸습니다.그런데 문제는 아이폰용 키노트는 아이폰에 없는 폰트를 공식적으로 사용할 수 없더군요. 그래서 맥에서 만들어서 iCloud Dive에 넣어 사용하려고 하면 폰트가 없다는 에러가 나오더군요. 그래서 상심하다가 혹시나 하고 찾아 봤더니 방법이 있었습니다. 아래 링크 참고!

How to install custom fonts on your iPhone or iPad | Cult of Mac

설치하는 방법은 다음과 같습니다.

  1. 아이폰이나 아이패드에서 iFont을 설치합니다. 돈을 내면 광고를 제거할 수 있지만, 굳이 그렇게 하지 않아도 폰트를 설치할 수 있습니다.
  2. 본인이 사용하고자 하는 폰트를 새로 폴더를 만들어서 거기에 넣고, 이 폴더를 zip으로 압축합니다. 맥에서는 파인더에서 “압축하기”를 쓰시면 됩니다. 그런 다음 이 압축한 파일을 iCloud Dive, dropbox 같은 곳에 업로드합니다. 전 iCloud Dive를 사용했습니다.
  3. 다 업로드 되면 아이폰이나 아이패드에서 위에서 올린 zip 파일을 ‘파일’이나 ‘dropbox’ 앱에서 확인합니다.
  4. 올린 파일을 선택해, ‘공유’ 메뉴가 나오면, 앞에서 설치한 iFont이 나올 것입니다. 이것을 선택하면, iFont이 폰트 파일의 압축을 풀고 저장합니다.
  5. 다 저장되면, iFont 앱을 실행합니다. 아래 메뉴에서 ‘files’를 선택하면 앞에서 저장한 폰트가 보일 것입니다. 여기서 아이폰에 설치하고 싶은 폰트 이름 옆에 있는 ‘install’ 버튼을 누르고 계속 진행하면 아이폰에 그 폰트가 설치될 것입니다.
  6. iFont 앱에서 ‘installed’ 메뉴를 누르시면 설치된 폰트를 확인하실 수 있습니다.
  7. 이제 키노트에서 서체를 선택하시면 앞에서 설치한 폰트를 사용할 수 있습니다.

파이썬에서 함수를 만들 때, 리턴값으로 namedtuple을 써보자.

파이썬에서 리턴값이 조금 복잡해지면, 딕셔너리를 많이 사용했었습니다. 그런데 이렇게 만든 함수를 쓰려면(함수 이름을 ‘fun’이라고 합시다!), fun[‘name’] 과 같이 딕셔너리를 불러오는 방식으로 써야합니다. 뭐 키보드를 많이 두드려야 합니다. 그래서 이를 쉽게 하는 방법을 찾다가 Not using named tuples when returning more than one value from a function이라는 글을 봤습니다. namedtuple을 이용해서 하면 fun.name과 같이 쉽게 처리할 수 있습니다. 윗글에서 코드를 가져왔습니다. 아주 쉽게 처리할 수 있습니다! name = namedtuple("name", ["first", "middle", "last"]), 코드에서 namedtuple을 만들어서 return name("Richard", "Xavier", "Jones")같이 사용하는 것입니다. 그러면 만들 때 사용했던, ["first", "middle", "last"]을 가지고 처리할 수 있게 됩니다.

from collections import namedtuple

def get_name():
    name = namedtuple("name", ["first", "middle", "last"])
    return name("Richard", "Xavier", "Jones")

name = get_name()

# much easier to read
print(name.first, name.middle, name.last)

맥에서 홈브루(Homebrew)를 이용해서 chromedriver를 설치하기

통상적으로 웹 상에 있는 자료를 수집할 때 , 로그인과 같은 것을 처리하려면 PhantomJS을 이용해서, 즉 화면이 존재하지 않는 웹 브라우저, Headless Browser을 사용해서 웹 크롤링을 합니다. 그런데 문제는 이 방법이 진짜 웹 브라우저를 실행하는 것은 아니기 때문에 자잘한 문제가 많았습니다. 이를 해결하는 방법이 나왔는데, 창없는 크롬으로 크롤링하기 | Beomi’s Tech Blog입니다.

이 방법을 사용하기 위해서는 앞의 링크에서 언급한 것처럼 크롬과 chromedriver을 설치해야 합니다. 크롬은 설치하는 것을 쉽지만, chromedriver를 링크에서 언급한 곳에서 다운 받아 설치하면, 조금 번거로운 과정(chromedriver를 받아서 압축을 풀고, 그 압축을 푼 폴더 위치를 정확하게 찾아서 알아야 하는 과정)을 겪어야 합니다.

맥에서는 이를 쉽게 하는 방법이 있습니다. 이게 바로 Homebrew, macOS 용 패키지 관리자 — macOS 용 패키지 관리자를 사용하는 것입니다. 만약 맥에서 크롤링과 같은 작업을 하신다면, 이미 이게 무엇을 하는 것인지 알 것입니다. 모르신다면 설치할 가치가 있으니, Homebrew 사용법을 구글링해 볼 가치가 있습니다.

Homebrew를 알아보고 설치하셨다면, 터미널에서 brew cask install chromedriver이라고 치고 엔터를 누르면, 바로 chromedriver를 설치할 수 있습니다. 이렇게 설치한 다음 나만의 웹 크롤러 만들기(7): 창없는 크롬으로 크롤링하기 | Beomi’s Tech Blog에서 가져온 아래 python 코드를 실행하면, 바로 현재 naver 페이지를 naver_main_headless.png이라는 이름으로 저장할 것입니다.

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1920x1080')
options.add_argument("disable-gpu")
# 혹은 options.add_argument("--disable-gpu")

driver = webdriver.Chrome('chromedriver', chrome_options=options)

driver.get('http://naver.com')
driver.implicitly_wait(3)
driver.get_screenshot_as_file('naver_main_headless.png')

driver.quit()

참고: homebrew – Brew install chromedriver not working? – Stack Overflow

추가: 맥에서 설치가 잘 되지 않으면 다음 글을 참고하세요! 맥에서 보안 때문에 사용할 수 없는 크롬드라이버 사용하는 법

Mac 용 R에서 잘 읽지 못 하는 한글 파일을 잘 읽는 방법

한국에서는 워낙 윈도우가 압도적으로 사용되는 곳입니다. 그래서 맥을 사용하는 사람 입장에서는 윈도우에서 만든 기본적인 자료, txt나 csv 형식 자료를 읽는데 가끔 문제가 생기기도 합니다. 물론 맥에서 작업하던 파일을 윈도우에 가져와 작업하려면 문제가 많이 발생합니다.

R을 사용할 때도 문제가 많이 생깁니다. 이는 파일에 들어가는 글자를 어떤 형식으로 구성하느냐 하는 문제, 즉 인코딩 문제 때문입니다. 일반적으로 윈도우는 euc-kr를 사용하고, 반면에 맥이나 리눅스는 utf-8을 사용하기 때문입니다.

이 문제를 극복하기 위한 여러가기 꼼수가 있었지만, R에서 이를 처리하는 함수를 하나 만들어서 처리하는 방식이 있어서 소개하고자 합니다. 이 방법은 r에서 한글문서 열때 인코딩 문제 에 소개된 것입니다. 뭐 이 글의 아이디어를 제가 했기 때문에 여기에 소개해도 무방할 것 같네요 ^^;

뭐 사용하는 방법은 간단합니다. 우선 이 함수를 사용하기 위해서 library(readr)을 입력합니다. 만약 에러가 난다면, install.packages("readr”)이라고 실행해서 패키지를 설치합니다. 패키지가 설치가 안 되면 R을 최신 것으로 설치하시면 됩니다. 그리고 다음과 같이 함수를 입력합니다. 전체 과정은 다음과 같이 하시면 됩니다.


library(readr)
read.any <- function(text, sep = "", ) {
encoding <- as.character(guess_encoding(text)[1,1])
setting <- as.character(tools::file_ext(text))
if(sep != "" | !(setting %in% c("csv", "txt")) ) setting <- "custom"
separate <- list(csv = ",", txt = "\n", custom = sep)
result <- read.table(text, sep = separate[[setting]], fileEncoding = encoding, )
return(result)
}

view raw

read_any.R

hosted with ❤ by GitHub

R을 많이 사용하신 분은 어떻게 사용할지 감을 잡으셨겠지만, 저와 같은 초보자를 위해서 한 번 사용해보겠습니다. 우선 다음 링크를 눌러서 사용할 샘플자료를 다운 받으세요! 바로 저장하시면 됩니다.

이 자료에 들어 있는 2017_7_8_KBO_win.csv 파일을 R에서 자료를 읽을 수 있는 폴더에 넣으세요. R에서 dir()을 입력했을 때, 위 파일 이름이 있는지 확인하세요.

맥에서 이 파일을 읽는 진행과정은 다음과 같습니다. 처음에는 read.csv()을 사용해서 읽는데 실패했던 파일이 read.any()을 이용해서는 성공하네요.


> temp_kbo <- read.csv("2017_7_8_KBO_win.csv", header = TRUE)
Error in make.names(col.names, unique = TRUE) :
'<bc><f8><c0><a7>'에서 유효하지 않은 멀티바이트 문자열이 있습니다
> library(readr)
> read.any <- function(text, sep = "", ) {
+ encoding <- as.character(guess_encoding(text)[1,1])
+ setting <- as.character(tools::file_ext(text))
+ if(sep != "" | !(setting %in% c("csv", "txt")) ) setting <- "custom"
+ separate <- list(csv = ",", txt = "\n", custom = sep)
+ result <- read.table(text, sep = separate[[setting]], fileEncoding = encoding, )
+ return(result)
+ }
> temp_kbo <- read.any("2017_7_8_KBO_win.csv", header = TRUE)
> head()
Error in head.default() : 기본값이 없는 인수 "x"가 누락되어 있습니다
> temp_kbo <- read.any("2017_7_8_KBO_win.csv")
> head(temp_kbo)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16
1 순위 선수명 팀명 AVG G PA AB R H 2B 3B HR TB RBI SAC SF
2 1 김선빈 KIA 0.38 79 303 271 49 103 23 0 2 132 47 2 4
3 2 최형우 KIA 0.37 80 359 289 66 107 23 3 20 196 76 0 4
4 3 나성범 NC 0.359 61 264 237 53 85 20 1 13 146 51 0 1
5 4 김태균 한화 0.353 61 268 232 34 82 13 0 10 125 57 0 4
6 5 서건창 넥센 0.353 78 347 303 52 107 17 2 4 140 49 0 3
> temp_kbo <- read.any("2017_7_8_KBO_win.csv",header = TRUE)
> head(temp_kbo)
순위 선수명 팀명 AVG G PA AB R H X2B X3B HR TB RBI SAC SF
1 1 김선빈 KIA 0.380 79 303 271 49 103 23 0 2 132 47 2 4
2 2 최형우 KIA 0.370 80 359 289 66 107 23 3 20 196 76 0 4
3 3 나성범 NC 0.359 61 264 237 53 85 20 1 13 146 51 0 1
4 4 김태균 한화 0.353 61 268 232 34 82 13 0 10 125 57 0 4
5 5 서건창 넥센 0.353 78 347 303 52 107 17 2 4 140 49 0 3
6 6 이대호 롯데 0.351 79 333 302 44 106 7 0 16 161 60 0 0

view raw

read_any_ex.R

hosted with ❤ by GitHub

Noesis 라는 단어의 출처는 어디일까?

플라톤의 대화편이 테아이테토스를 읽다가 갑자기 ‘노에시스’라는 단어가 생각나서 찾아봤더니 후설:노에시스/노에마이라는 글을 발견했다. 이 곳에 다음과 같은 내용이 있었다.

중기부터 후기에 걸쳐 후설은 이 두 번째의 측면을 노에시스적 계기, 줄여서 노에시스(Noesis)라 불렀다.(좀 더 넓은 의미로, 지향적 체험 전체를 노에시스로 부르기도 한다.) 이것을 후설이 그리스어 누스’Nous(정신, 이성)’ 와 ‘노에인Noein(사유하다, 지각하다, 직관하다)’을 결합시켜 만들어낸 술어이다. 노에시스를 직역하면 ‘의식작용’이 된다.

진짜 그런가 하고 희랍어 텍스트에 이 단어가 들어있는 곳이 없는지 다음과 같이 Noesis를 검사해봤다. Perseus under Philologic: searching for νόησις

링크를 눌어보면 아시겠지만, 아쉽게 24군데에서 이 단어가 발견되었다. 결국 이 단어는 후설이 자신의 철학 체계에 끌어다 쓴 것일 뿐, 조어한 것은 아닐 것 같다.

터미널을 이용해서 현재 Raspberry Pi 서버의 IP 번호를 알고 싶을 때?

저는 라즈베리파이를 서버로 사용하고 있습니다. 터미널을 사용하다가 서버의 IP 주소를 알고자 할 때에는 조금 부식한 명령어인 ifconfig를 사용했습니다. 그런데 Raspberry Pi를 사용하다고 조금 더 쉬운 명령어를 알았습니다. hostname -I이라고 터미널에서 쓰면 바로 IP번호가 나옵니다. 이게 더 단순하게 이쁘게 나오네요! 아마도 파이가 우분투를 사용하니, 우분투를 사용하는 리눅스에서도 이 명령어는 돌아갈 것 같습니다. 맥에서는 이 명령어가 작동하지 않네요. 참고하세요. 이 내용은 Worksheet – Build a Python Web Server with Flask | Raspberry Pi Learning Resources에서 찾았습니다. ^^;

구글 R 스타일 가이드(Google’s R Style Guide)을 번역해 보았습니다.

구글에서 만든 Google’s R Style Guide를 번역해 봤습니다.

번역한 것을 보시려면, 아래 링크를 가시면 됩니다. 영어 부분은 링크파일에 주석처리되어 있습니다. 이상한 부분은 코드를 직접 보시고 확인해주셔도 됩니다. 앞부분에 있는 참고 부분을 추가한 것을 빼고는, 거의 구조와 내용은 손대지 않고 영어만 한글도 번역했습니다. 꼭 번역이 필요하지 않다고 생각된 부분은 번역을 하지 않았습니다.

Google’s R Style Guide

제가 전문 번역가가 아니기 때문에 이상한 부분이 많을 것 같습니다. 이상한 부분을 아래 링크를 통해 지적해주시면 수정하도록 하겠습니다. 참! 답글을 다실려면 github.com 아이디가 필요합니다.

구글 R 스타일 가이드(Google’s R Style Guide) 번역