워드프레스 한글 웹폰트 적용

가장 깔끔한 방법은 테마 디자인 > CSS 편집 메뉴에서 아래와 같이 폰트를 강제로 변경하는 CSS 코드를 추가하는 것이다.

@import url('//cdn.jsdelivr.net/font-iropke-batang/1.2/font-iropke-batang.css');
* { font-family: 'Iropke Batang', serif !important; }
pre, code { font-family: 'monofur', 'PT Mono', monospace !important;} 

!important를 적용하여 워드프레스 테마의 style.css에 의해 개별 요소에 대하여 별도로 정의된 폰트를 무시하는 것이 키 포인트다.

소스코드는 고정폭 폰트가 적용되도록 pre, code 태그에 대해서는 추가로 정의해줘야 한다.

Confluence에서 Notion으로 이사

현충일 연휴를 이용하여 Confluence에 정리한 개인 자료를 모두 Notion으로 옮겼다.

단돈 $10를 내고 Confluence를 개인 서버에 설치하여 사용해왔는데, 처음의 계획만큼 잘 활용하지 못했다. 이유는 크게 2가지:

  • 어쩌다 한 번 쓰려고 하면 길고 긴 콜드 부트 시간을 기다려야한다.
  • 모바일에서 읽기, 쓰기 불편하다.

Notion이 좋았던 이유 5가지:

  • 예쁘다.
  • Block 단위 편집
  • 모바일 접근성이 좋다.
  • 직접 관리 안하고 마음 편하게 쓰고싶다.
  • 마크다운 형식으로 내보내기 가능

Confluence에서 가져오기 도구를 제공하지 않아서 개인 자료를 옮기는데 적잖은 시간을 사용해야했지만, 앞으로 개인자료를 잘 정리하여 활용할 것을 생각하면 좋은 투자였다고 생각한다.

Cloudflare Update DNS Record Python Script

DNSEver를 떠나 Cloudflare에 정착. 서버의 변경 된 IP 주소를 주기적으로 DNS 레코드에 반영하기 위해 간단한 Python 스크립트를 작성해보았다.

API documentation: https://api.cloudflare.com/

import requests
import json

zone_id = '...'
email = '...'
api_key = '...'

ip_addr = requests.get('https://api.ipify.org').text

headers = {
  'X-Auth-Email': email,
  'X-Auth-Key': api_key,
  'Content-Type': 'application/json',
}

list_dns_record_url = 'https://api.cloudflare.com/client/v4/zones/{}/dns_records'
update_dns_record_url = 'https://api.cloudflare.com/client/v4/zones/{}/dns_records/{}'

response = requests.get(list_dns_record_url.format(zone_id), headers=headers)
for record in response.json()['result']:
  if record['type'] == 'A':
    data = {
      'type': 'A',
      'name': record['name'],
      'content': ip_addr,
      'ttl': 1,
      'proxied': True,
    }
    response = requests.put(update_dns_record_url.format(zone_id, record['id']), headers=headers, data=json.dumps(data))
    print(response.json())

콘솔에서 구글드라이브에 업로드하기

2012년 10월에 구축한 홈서버가 언제 사망할지 알 수 없는 일이라, 주기적으로 구글 드라이브에 WordPress 데이터와 Confluence 데이터를 백업하고 있다. 홈서버에서 mac으로 파일을 옮긴 후 다시 mac에서 구글드라이브로 업로드하는 과정이 불편해 개선안을 찾다가 구글드라이브 CLI를 발견해 사용해 보았다.

설치 방법은 gdrive github을 참고.

설치 후 처음 명령어를 실행해 보면 아래와 같이 인증을 위한 웹 주소를 준다. 브라우저에 이 주소를 복사해 인증 성공 후 나오는 verification code를 콘솔에 입력하면 모든 준비 과정은 끝.

# ./gdrive list
Authentication needed
Go to the following url in your browser:
https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=...

Enter verification code: ...

다음으로 할 일은 백업파일을 업로드 할 폴더의 아이디 찾기. 쿼리 문법은 여기를 참고.

# ./gdrive list --query "name contains 'Backups'"
Id                             Name      Type   Size   Created
0B4H4TB17DIyIal9MM0N3MngtMGM   Backups   dir           2016-06-25 04:41:15

업로드는 아래와 같이 간단하다.

# ./gdrive upload --parent 0B4H4TB17DIyIal9MM0N3MngtMGM ./confluence-backup-2017-04-01.zip
Uploading ./confluence-backup-2017-04-01.zip
Uploaded 0B4H4TB17DIyIMTREQUFXZklGU0E at 5.3 MB/s, total 232.9 MB

Android Studio 프로젝트 릴리즈 빌드할때 Proguard를 이용해 로그제거하기

마켓에 애플리케이션을 릴리즈하기 전에 해야할 일 중 하나는 로그를 제거하는 작업입니다.

소스코드를 수정하지 않고 릴리즈 빌드할때 Proguard를 이용해 로그(android.util.Log) 메서드 호출을 간단하게 제거할 수 있습니다.

build.gradle에서 다음과 같이 릴리즈 빌드할때 Proguard를 적용하도록 정의해 줍니다.

    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.txt'
        }
    }

그리고 proguard-rules.txt를 아래와 같이 수정해 줍니다.

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
}

이렇게 설정하고 gradle assembleRelease로 빌드하면, Log.d(), Log.v() 호출은 제거됩니다. (리턴값을 참조하지 않는다면)

중요한 포인트는 -assumenosideeffects 옵션은 optimize 단계를 거쳐야만 적용이 된다는 점입니다. 때문에 proguard-android.txt가 아닌 proguard-android-optimize.txt를 사용하도록 설정해야 합니다.

이 파일들은 안드로이드 SDK의 tools/proguard 디렉토리에 위치하고 있습니다.