Category Archives: Mac

맥을 사용기

맥에서 보안 때문에 사용할 수 없는 크롬드라이버 사용하는 법

맥에서 크롤링을 하기 위해서 chromedriver를 사용하는 경우가 많습니다. 홈브루를 이용하시면, 터미널에서 brew install chromedriver을 입력하시면 사용할 수 있습니다. 그런데 맥 최신 오에스에서는 이렇게 설치한 chromedriver을 보안을 이유로 막는 경우가 있습니다. 좀 찾아봤는데 아주 쉽게 해결할 수 있습니다. 위와 같이 chromedriver를 설치하셨다면 터미널에서 xattr -d com.apple.quarantine $(which chromedriver)이라고 입력하시면 바로 문제 없이 사용하실 수 있습니다. 아래 글을 참고하세요!

java – MacOS Catalina(v 10.15.3): Error: “chromedriver” cannot be opened because the developer cannot be verified. Unable to launch the chrome browser – Stack Overflow

맥에서 sshpass 설치하기

homebrew로 sshpass이 설치되지 않는다!
아래 링크를 보면, 초보자들이 가볍게 설치하지 못 하도록 하려고 설치를 막았다고 하는 것 같다. 그래서 아래 링크에 있는 소스를 이용하는 방법으로 설치해보자! 설치한 후 다운받은 폴더와 파일을 삭제하면 된다.

cd ~
curl -O -L https://fossies.org/linux/privat/sshpass-1.09.tar.gz && tar xvzf sshpass-1.09.tar.gz
cd sshpass-1.09
./configure
sudo make install
sshpass

macos – How to install sshpass on mac? – Stack Overflow

Docker를 사용해서 MariaDB을 설치하기

참고: 이 글은 JiHun님의 Docker를-사용해서-MariaDB-설치하기을 참고했습니다. 자세한 내용은 이 글을 참고하세요!

docker 에 mariadb container를 받고 실행합니다. MYSQL_ROOT_PASSWORD = RT27hDosK에 쓴 RT27hDosK은 DB 비번입니다. 적절하게 고쳐주세요. 연습용으로 쓰실 것이면, 그대로 사용해도 무방합니다.

docker pull mariadb
docker run --name mariadb -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=RT27hDosK mariadb

앞에서 실행한 container에 들어가서 bash를 실행합니다.


docker exec -it mariadb /bin/bash

container에 들어갔으니, mysql으로 들어가겠습니다. 피번은 앞에서 MYSQL_ROOT_PASSWORD = RT27hDosK이라고 했으니 RT27hDosK을 입력하시면 됩니다.

root@e144fdbab9be:/# mysql -u root -p
Enter password:

들어갔으니 DB상태를 살펴보겠습니다. latin1이 2개 있습니다. 이것때문에 한글이 깨질 수 있습니다. 변경해보겠습니다.

MariaDB [(none)]> status
--------------
mysql  Ver 15.1 Distrib 10.5.5-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Connection id:      4
Current database:
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server:         MariaDB
Server version:     10.5.5-MariaDB-1:10.5.5+maria~focal mariadb.org binary distribution
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    latin1
Conn.  characterset:    latin1
UNIX socket:        /run/mysqld/mysqld.sock
Uptime:         2 min 1 sec

Threads: 2  Questions: 4  Slow queries: 0  Opens: 16  Open tables: 10  Queries per second avg: 0.033

앞에 설정을 바꾸기 위해서는 도커 컨테이너 안에 있는 파일을 고쳐야 합니다. 그런데 에디터가 없습니다. 에디터를 설치하고 파일을 열겠습니다.

root@e144fdbab9be:/# apt-get update
root@e144fdbab9be:/# apt-get install nano
root@e144fdbab9be:/# nano /etc/mysql/my.cnf

앞에서 연 /etc/mysql/my.cnf 파일에서 내용을 아래와 같이 추가/수정해 줍니다.

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

다 했으면 나갑니다.

root@e144fdbab9be:/# exit
exit

이제 변경한 내용을 적용하시려면 mariadb를 재시작해야 합니다. 우선 mariadb ID를 다음과 같이 찾습니다. 그런 다음 그 ID를 가지고 mariadb를 재실행합니다.

❯ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
e144fdbab9be        mariadb             "docker-entrypoint.s…"   20 minutes ago      Up 20 minutes       0.0.0.0:3306->3306/tcp   mariadb

❯ docker restart e144fdbab9be
e144fdbab9be

지금까지 한 것을 확인하러 컨데이너에 들어갑니다.

docker exec -it mariadb /bin/bash
mysql -u root -p
# MYSQL_ROOT_PASSWORD=RT27hDosK
Enter password:

잘 변경되었습니다.

MariaDB [(none)]> status
--------------
mysql  Ver 15.1 Distrib 10.5.5-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Connection id:      3
Current database:
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server:         MariaDB
Server version:     10.5.5-MariaDB-1:10.5.5+maria~focal mariadb.org binary distribution
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:        /run/mysqld/mysqld.sock
Uptime:         1 min 46 sec

Threads: 2  Questions: 4  Slow queries: 0  Opens: 16  Open tables: 10  Queries per second avg: 0.037

맥에서 홈브루(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

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

맥에 mpv을 설치해보자!

맥에는 이미 무비스트라는 걸출한 동영상을 보는 앱이 있기 때문에, 다른 앱이 거의 필요가 없죠. 그러나 가끔은 다른 앱이 필요한 경우가 있습니다. 이런 경우 저는 MPlayerx, MPlayer, VLC 등을 사용했었습니다. 그러나 MPlayerx은 malware 문제가 있는 관계로 바로 지워 버렸고, MPlayer 도 설치하는 것이 어렵고 뭘 설치해야 하는지 정신이 없고, VLC는 좀 사용하기가 불편했습니다. 예를 들어 앞으로 돌리기, 뒤로 되돌아 가기 등을 잘 찾을 수가 없더군요.

그러던 중 mplayer2 과 MPlayer을 포크해서(즉 소스를 갖다가 새로 만든) mpv(mpv.io)라는 새로운 플레이어 앱을 알게 되었습니다. 앞의 링크로 가보시면 아시겠지만, 정말로 단순한 UI을 가지고 있습니다. 물론 그건 것이 더 마음에 들었습니다. 그래서 설치를 해보고자 했더니 홈페이지에 OS X용은 다른 곳에 다운 받게 되어있더군요. 요즘 의심이 많아진 상태라서 앱을 직접 받는 것이 아니라 다른 방식으로 해보자는 생각이 들었습니다.

mpv.io | Installation를 보시면 아시겠지만, Homebrew으로 설치가 가능한 것 같더군요. 그래서 바로 설치에 들어갔습니다. Homebrew에 관련된 이야기는 다음 링크들을 참고하세요. 맨 마지막 링크를 보시면, 맥에 서버 같은 것을 쉽게 설치해주기도 합니다.

우선 Homebrew — macOS 용 패키지 관리자을 참고하여 Homebrew을 설치합니다. 그런 다음 다음과 같이 터미널에서 2줄만 입력하시면 됩니다. 참고로 첫번째 줄은 mpv이 있는지 확인하는 것입니다. 두번째 줄은 Homebrew를 최근 버젼으로 업그래이드 하는 것입니다. 마지막 세 번째 줄이 mpv이 바로 설치하는 명령어입니다.

brew search mpv
brew update
brew install mpv

뭐 이렇게 설치하면 앱 아이콘도 생기지 않습니다. 그러면 어떻게 mpv을 실행할까요? 터미널에서 실행하면 됩니다. mpv 파일명과 같이 입력하시면 됩니다. 불편해 보입니다. 그래서 제가 쓰는 편한 방법을 알려드리겠습니다. 우선 터미널에서 mpv이라고 키보드는 칩니다. 그런 다음 거기에 실행하고 싶은 파일 아이콘을 파인더에서 드래그 하여 터미널에 넣습니다. 그러면 파일 이름이 들어가게 됩니다. 그런 다음 엔터 키를 누르시면 됩니다. 뭐 설명은 복잡하지만, 한번해보시면 쉽습니다.

뭐 새로운 플래이어가 필요하시면 한번씩 설치해보세요! 생각보다 쓸만합니다.

Swift 2.x에서 .toInt() 명령어가 사라지고, 대신 초기자 Int 등장!

Swift 2.x에서 string(문자)를 int(숫자)로 바꿔 주는 .toInt() 함수가 없어졌네요. 헐! 그 대신 문자열을 제어할 수 있는 초기자(initializer), Int 가 생겼습니다. 다음 코드를 보시면 쉽게 아실 수 있습니다.

// from string to int in swift
let intString: String = "256"
let stringInt: Int? = Int(intString)

Swift에서 array 초기화 하기

참 책을 만들면서 뭔가 바뀌면, 정오표를 만들어 제공하는 것이 예의인데, 그냥 개정판을 내는 것은 도리가 아닌 것 같다. swift에서 배열을 초기화하는 것은 다음과 같이 해서는 안 된다.

[code lang=swift]
var WrongArrayInit = Int[]()
[/code]

다음과 같이 해야 한다.

[code lang=swift]
var RightArrayInit = [Int]()
[/code]

애플 공식문서에 하면, “You can create an empty array of a certain type (without setting any initial values) using initializer syntax:

[code lang=swift]
var someInts = [Int]()
println("someInts is of type [Int] with (someInts.count) items.")
[/code]

맥 검색인 Spotlight 에서 Evernote 가 검색되지 않는 경우 해결책

에버노트를 잘 앱스토어에서 잘 다운 받아 쓰다가 문득 해봤는데 안 검색이 되지 않아서 고생했습니다. 찾아보니 해결책은 쉽습니다. 애버노트 홈피에서 개발자의 다음과 같은 답변을 찾았습니다.

There is an issue with 10.9 and Spotlight functionality. It is a restriction only on Mac App Store builds. To get around this, please download Evernote directly from us at

즉 애플 앱스토어에서 애버노트 앱을 다운 받지 말고,  애버노트 홈에서 다음 링크로 가신 다음,

https://evernote.com/intl/ko/evernote/

그냥 맥용 내려받기 버튼을 누르시면 앱스토어로 가는 경우가 있으니 다음과 같이 해주시면 됩니다. 참고로 이렇게 해도 Spotlight가 완벽하게 작동은 하지 않지만, 쓸만하게 검색이 됩니다.

evernote down 1

evernote_down_2

Mac OS X Terminal에 IR Black 테마로 예쁜 컬러로 바꿔보자.

요즘 한참 vi를 익히고 있습니다. 그렇다 보니 Terminal을 많이 사용하게 됩니다. 그러다가 문득 클리앙에서 부드러운직선님이 쓰신 다음과 같은 글을 보았습니다.

[Tip] 터미널 텍스트 예쁜 컬러 입히기 IR Black

원 출처를 조금 찾아보니 다음과 같았습니다.

IR_Black for OS X Lion

설치는 쉽습니다. 위의 링크에서 IR_Black.terminal 파일을 다운 받으신 다음,  그 파일을 더블 클릭하시면 다음과 같이 멋진 색을 가진 터미널을 사용할 수 있게 됩니다.

IR_Black

IR_Black Theme in Mac OS X Terminal

조금 조심할 부분이 두 가지 있습니다.

  1. 부드러운직선님이 쓰신 앞의 글처럼 ~/.bash_profile 파일을 에디터로 열거나 없으면 새로 만들어 다음과 같은 값을 넣어줘야 합니다. 첫번째 줄은 주석이기 때문에 실제로 필요한 것은 2, 3 줄입니다. 원본 링크에서는 다르게 하지만, 부드러운직선님이 하신 이 방법이 더 쉽습니다.
    [code language=”bash”]
    # Enabling directory and file color highlighting
    export CLICOLOR=1
    export LSCOLORS=ExFxCxDxBxegedabagacad
    [/code]
  2. vi 에서 한글이 깨지는 경우가 있습니다. 그럴 경우에는 우선 설정에서 텍스트 탭에서 서체를 한글 폰트로 설정하시고, 고급 탭에서 “비 ASCII 입력 취소”를 해체해보세요.

그러면 멋지게 터미널를 사용해보세요!

BOOL 값을 NSDictionary 에 넣어보자.

BOOL 값과 같은 비 객체는 NSDictionary 에 넣을 수 없습니다. 그래서 다음과 같이 값을 숫자로 변신 시켜서 저장해야 합니다.  

BOOL isInReply;

NSNumber *isInReplyToNumberValue = [NSNumber numberWithBool:isInReply];

reply = [NSDictionary dictionaryWithObjectsAndKeys: reply_time, @"time", reply_id, @"iD", isInReplyToNumberValue, @"isInReply", reply_content, @"content", nil];