July 2010
6 posts
5 tags
distribute, pip
최근에 setuptools 대신 distribute를, easy_install 대신 pip를 쓰기 시작했다. 조금 설명하자면, setuptools는 Python 표준 라이브러리에 있는 distutils를 확장한 것인데, distutils는 Makefile 같은 빌드 스크립트의 Python 버전이다. Ruby의 rake나 Java의 Ant를 생각하면 된다. 표준 라이브러리에 있기 때문에 Python에서 프로젝트를 패키징하고 빌드 자동화를 하는 가장 기본적이고 표준적인 방법이라고 보면 된다. setuptools는 distutils의 확장 인터페이스를 이용해1 의존성 해결(dependency resolution)도 해주게 만든 것이다. 보통은 setup.py 파일을 아래처럼 작성하므로 setuptools가...
Jul 25th
1 note
6 tags
fontface.kr →
이번에 야간개발팀에서 fontface.kr이라는 한글 웹 글꼴 호스팅 서비스를 만들어서 공개했다. Typekit의 한국/한글 버전이라고 생각하면 될 것 같다. 아직은 나눔고딕 등 나눔 시리즈 폰트만 호스팅하고 있는데, 앞으로 여러 공개 폰트들을 더 추가할 생각이다.1 많이들 이용해주시라. 혹시 아는 한글 공개 글꼴이 있으면 제보해주시라. 아마 금방 추가될 수 있을 것이다. ↩
Jul 21st
4 tags
팀 IRC
아주 큰 집단이거나, 혹은 함께 있는 시간이 적은 팀에서 소통하는 방법 중 하나가 아마 네이트온 같은 IM일 것이다. 하지만 나는 IM보다는 IRC를 더 추천한다. 여러 이유가 있는데, 한번 적어보겠다. (IM과 IRC가 대충 어떤 건지는 안다고 가정하고 글을 쓴다.) 셋 이상이서 대화 MSN이나 네이트온 등의 IM에도 초대 기능이 있어서, 셋 이상이서 대화하는 것이 가능하다. 하지만 IM은 직접 초대하기 전까지는 단 둘만의 대화창이고, 직접 IM에서 누군가에게 먼저 말을 건다는 메타포가 부담이 있다. 그에 비해 IRC는 원래 채널이 존재하고, 그 채널에 들어가기만 하면 된다. 컴퓨터를 킨 사람은 그냥 IRC 채널에 들어온다. 원래 그 채널은 여럿이서 대화하는 곳이니 “말을 건다”는 부담은 없다....
Jul 13th
2 notes
6 tags
“Unfortunately, more and more people use “scripting language” as a synonym for...”
– Masterminds of Programming, Roberto Ierusalimschy
Jul 10th
1 note
1 tag
Java만 하는 사람들은 진짜 Java만 한다. Java는 한번 제대로 하려고 마음 먹으면 너무 배울 것이 많기 때문에 더 그렇다. Java밖에 안 하니까 우물안 개구리가 되기 십상이다. Java에 배울 것이 많다는 것이 Java의 심오함을 대변하는 것은 아니다. 사실은 그 반대다. Java에는 Java 자체가 해결해주지 못하는 문제들이 너무 많기 때문에 디자인 패턴부터 시작해서 온갖 workaround가 판을 치기 때문에 배울 것이 더 많아진다. 정작 Java에 몰두한 사람들은 그것들이 workaround가 아니라 굉장히 우아한 해결책이라고 느끼는 것이 더 큰 문제다. 그 사람들이 workaround를 우아한 해결책이라고 믿는 이유는 그것들이 Java의 문제를 해결하는 것이 아니라, 프로그래밍 본질적인...
Jul 7th
5 notes
June 2010
5 posts
2 tags
내 도메인인 dahlia.kr 아래쪽에 있는 URL 중에 3년 정도 된 게 하나 있다. http://justhing.dahlia.kr/io-tutorial-for-programmer/ 예전에 썼던 짧은 Io 튜토리얼인데, 까맣게 잊고 있다가 얼마 전에 다른 블로그에서 여기로 링크된 게 있어서 생각이 났다. 눌러 들어가서 오랜만에 봤더니 데이터가 날아가서 에러가 나고 있었다. 날아간 데이터를 어찌할 수 없어서 그냥 요즘 IBM developerWorks에 연재중인 Io 연재로 링크를 해놨다.
Jun 30th
5 tags
소를 위한 IPv6
wooil: 그런데 IPv6라도 1인 1 아이피는 안 되죠?
darjeeling: 아뇨
darjeeling: IPv6는
kkung: IPv6는
kkung: 미생물에게 하나씩 줘도
kkung: 남는다는
kkung: 계산을 누가 했던데
kkung: =3=3
wooil: -0-
darjeeling: 아 모르셨군요.
darjeeling: 저희가 앞으로
darjeeling: 소를 키우면서
darjeeling: 소에게 IP를 할당해서
darjeeling: 멀티캐스트로 핑을 쏘면
darjeeling: 죽었는지 살았는지 나올꺼임.
Jun 29th
2 notes
5 tags
요즘 느끼는 건데 상업적인 프로젝트에서 개발자들이 문서라고 남겨둔 것들은 대체로 불친절하고 누가 시켜서 억지로 했다는 느낌이 강하다. 불친절하다는 것을 어떻게 알 수 있냐면: 일단 상업적인 프로젝트의 문서에서 튜토리얼이 나오는 경우는 절대 없다. 왜냐면 튜토리얼은 꼭 있어야 하는 문서는 아니지만 이해를 더 쉽게 하기 위한 것이고, 나처럼 문서화를 좋아라하는 개발자들은 원래 적기 때문이다. 그걸 감안하더라도 오픈 소스 프로젝트에 비해 상업적인 프로젝트의 문서들이 더 형편없는 경우가 많은데, 오픈 소스 프로젝트의 경우 문서화를 잘 해야 프로젝트 홍보가 잘 되고 날개돋힌듯 널리 알려지고 쓰이며 발전하기 때문에 문서화를 중요하게 생각하기 때문이다. 오픈 소스 프로젝트에게 있어서는 문서와 프로젝트 홈페이지가...
Jun 27th
3 notes
5 tags
손으로 미세한 최적화를 하지 말자
How to Micro-Optimize Your CSS1 같은 글을 보면 한숨이 난다. 저런건 사람이 할 일이 아니다. 반복적이며 사소한 저런 최적화는 원래 프로그래밍 언어에서는 컴파일러 등이 해야할 문제다. 저기 나온 최적화 팁들은 CSSTidy 쓰면 죄다 자동으로 할 수 있다. 사람은 그냥 자기가 가장 편한 방법으로 코딩하면 된다. 제발 저런 문제는 코딩할 때 신경쓰지 말자. 저건 배포의 문제니까, 배포할 때 자동화할 생각을 하자. Apache, lighttpd 모듈로 mod_csstidy라도 만들어야 하냐는 생각이 들었다. 파이어준 님이 한국어로 같은 내용을 포스팅하셨다: 스타일 시트를 경량화하는 11가지 팁 18 ↩
Jun 23rd
6 tags
deprecated v. obsolete →
쉽게 말해 deprecated는 아직 폐지되진 않았지만 곧 그럴 예정이니 사용을 지양하라는 식의 뜻으로 쓰이고, obsolete는 아예 이제 폐지되어서 작동도 안 된다는 뜻이다. 나도 처음 안 사실이라 링크 및 요약.
Jun 18th
1 note
10 tags
Bitbucket v. GitHub
내가 분산형 버전 관리 시스템의 아주 기본적인 기능만을 주로 쓰기 때문에, 아무래도 인터페이스가 좀더 친절한1 Mercurial이 git보다 더 좋다. 하지만 두 버전 관리 시스템을 기반으로 하는 소셜 프로젝트 호스팅 두 서비스—Bitbucket과 GitHub를 비교하자면 정 반대이다. 내가 볼 때 Bitbucket은 현재로서는 무료 계정에서도 1개까지는 비공개 저장소를 생성 가능하다는 것 말고는 GitHub에 비해 이렇다할 장점이 없다. 디자인도 GitHub가 더 세련됐으며, GitHub는 자기네가 호스팅해주는 프로젝트 페이지를 프로젝트의 공식 홈페이지로 사용할 수 있을 정도로 만들어주는데 비해, Bitbucket은 그렇지 않다. 하지만 이런 기능 외에도 GitHub를 사용할 수밖에 없게 만드는 것이 하나...
Jun 12th
May 2010
4 posts
4 tags
대부분의 프로그래밍 문제는 추상화 레이어를 더 삽입함으로서 해결할 수 있다고 하지만, 아직까지 대부분의 추상화는 성능에 대해서는 투명하지 않기 때문에 그게 만능이 아닐 수 있다. 이런 글에서 제안하는 방식은 딱 내 취향이긴 하지만, 모바일 디바이스 성능을 생각한다면 차라리 멀티 타겟 컴파일러를 만드는게 맞는 (하지만 너무나 비효율적인)1 답일 수도 있겠다. 그 컴파일러를 앞으로 무척 많이 써서 소셜 게임을 100개쯤 찍어낸다면 오히려 더 효율적이겠지만. ↩
May 22nd
8 tags
SQLAlchemy, Werkzeug
나는 기본적으로 야크 쉐이빙(yak shaving) 충동을 자주 느끼는 편인데, 가끔 그걸 무찌르는 엄청난 작품을 보곤 한다. 야크 쉐이빙을 무찌를 정도의 물건은 두 가지 조건을 충족시킨다. 철학에 납득이 감은 물론 훌륭해서 내 생각을 바꿀 정도다. 혹은 기존의 내 관점과 일치한다. 그런 철학 위에서, 내가 스스로 구현하자면 엄두가 안날 정도의 피쳐셋으로 날 압도한다. 최근에 웹 개발 관련된 라이브러리 중에서는 딱 두 개가 그렇다. 하나는 1년 전쯤부터 사용한 SQLAlchemy고 다른 하나는 요 며칠간 써본 Werkzeug이다. 오늘은 저 둘에 대해 설명하고 이왕이면 전도까지 해볼까 한다. 공교롭게도(?) 둘 다 Python 라이브러리다. (그나저나 둘 다 이름이 문제다. 이름이 멋이 없으니...
May 19th
3 notes
6 tags
ROCKET DIVE →
Python으로 웹 개발을 하려면 개발용 WSGI1 컨테이너가 필요하다. 하지만 Python을 잘 모르는 사람이 개발 환경을 꾸리기는 쉽지 않다. 이를테면 디자이너는 .html 템플릿 파일을 수정해야 하는데, 그걸 위해서 Green Unicorn이니 Rocket이니 하는걸 설치해서 커맨드라인으로 서버를 켜고 끄는 것은 너무 복잡하다. 그래서 GUI로 뭔가 간단하게 켜고 끄는 걸 가능하게 해야겠다 싶어서 하나 만들었다. Rocket의 GUI 프론트엔드고, 이름은 그래서 ROCKET DIVE다.2 Tkinter를 써서 인터페이스가 구린데, Rocket 외의 다른 라이브러리에 의존성을 만들고 싶지 않았기 때문에 어쩔 수 없었다. 참고로 Tkinter는 Python 표준 라이브러리에 들어있다. ...
May 5th
6 tags
내가 주소록에 꼭 있어야 한다고 생각하는 기능들. 일단 내 iMac과 MacBook Air, iPhone, 두 개의 Google Apps1, 세 개의 서로 다른 Gmail 계정2의 주소록이 모두 동기화되어야 한다. 일단 이게 작동하지 않으면 아무리 좋은 주소록이라도 내가 쓸 수가 없다. 그럼 지금은 어떻게 해결하냐면, 사실 전혀 해결되어 있지 않다. iMac의 주소록을 메인으로 사용하는데, iPhone은 그것과 동기화하고 있다. 나머지는 관리가 전혀 안되는 상태. 또한 identity map이 가능해야 한다. “홍민희” 항목에 그 사람의 모든 전화번호가 있어야 하고, 모든 이메일 주소가 있어야 하며, 그 사람의 개인 웹 사이트 주소 뿐만 아니라 MSN 메신저 주소와 Twitter 아이디와 미투데이...
May 2nd
April 2010
7 posts
3 tags
“가장 이상적인 건 UI 차원에서 “이 문자열의 번역을 개선하기” 같은 컨텍스트 메뉴를 제공해서 바로 피드백이 가게 하는 것이겠지만 그 정도를...”
– Arachneng on Everything 위 이야기는 데스크탑 환경에 관한 이야기지만, Facebook이 실제로 돈 안들이고 사용자들의 참여를 통해 여러 언어로 번역을 진행할 수 있었다. (물론 그러한 시스템을 만드는 비용은 들었겠지만, 번역 비용이 들어간 것은 아니다.) VLAAH도 다음에는 번역을 꼭 그렇게 진행해야지.
Apr 20th
6 tags
작고 아름다운 언어 Io, Part 1: 설치와 기본 문법 →
지난번 한국 IBM developerWorks에 썼던 VLAAH API 관련 글을 미뤄두고 같은 곳에 또다른 연재를 시작했다. 내가 꽤나 좋아라 하는(했던?) 언어인 Io 튜토리얼이다. 사실 VLAAH API에 대한 연재를 계속하려고 했는데, 요즘 VLAAH API에 작업이 한창이라 훗날 틀린 내용이 될 지도 모르겠다 싶어1 일단은 Io 연재를 대신 시작했다. 그리고 요즘엔 또 지긋지긋한 것도 있어서… ↩
Apr 20th
6 tags
모바일 앱 개발에 대한 얘기가 들리지 않는 날이 없다. 대개 iPhone의 성공을 단일 플랫폼과 적절한 통제에 기인한다고들 말하는데, 맞는 말이긴 하다. 해상도나 장비에 포함된 기능 집합까지 똑같거나 거의 같기 때문에 배포할 때 곯머리도 안 썩고 만들 때도 편한 것이다. 하지만 그것과 별개로 나는 여러 환경에 대한 고려가 좀더 나은 디자인을 만든다고 믿는 사람이다. 여러 환경을 고려하다보면 결국 적절한 추상화를 하게 되는데, 객체 지향 프로그래밍이라면 다형성을 적절히 쓸 것이고, 함수형 프로그래밍이라면 특수화를 잘 쓸 것이다. 단위 테스트가 있는 코드가 대개 없는 코드보다 디자인이 나은 경우가 많다. 왜 그렇냐면 단위 테스트 자체가 클라이언트 코드를 두 개 이상으로 만드는 효과를 주기 때문이다....
Apr 18th
1 note
Apr 11th
이렇게 적긴 했지만, Internet Explorer 6 이하의 JavaScript 구현에서는 배열 리터럴 등에서 마지막 쉼표를 허용하지 않는다. 이건 여러번 당해서 이미 알고 있었다……. 그리고 종텐 님의 제보에 따르면, Erlang도 허용하지 않는다고 한다. 심지어 언어 창시자인 Joe Armstrong가 쉼표를 줄 처음에 쓰는 스타일을 권장하기까지 한다더라.1 덧. 보통 댓글창이 있어도 귀찮아도 안 다는데… 포스팅에 대한 댓글을 이메일로 보내주신 종텐 님께 감사를…;; ㅋㅋ 출처 없음. 종텐 님께 들은 이야기. ↩
Apr 8th
6 tags
예전에 알바했을 때 PHP 코딩을 하는데, 옆 사람의 배열 쓰는 컨벤션이 많이 이상했다. $array = array( 'element' , 'element' , 'element' , 'element' , 'element' , 'element' , 'element' ); 왜 쉼표를 앞에 쓰냐고 물어봤더니 vim에서 dd(한줄 잘라내기) 등의 줄단위 편집을 해도 문법이 깨지지 않게 하기 위해서라고 했다. 그땐 그냥 어이없어서 웃고 넘겼는데 나중에 생각해보니 저건 정말 어리석은 스타일이다. 왜냐면 요즘 대부분 언어에서는 배열/리스트 리터럴에서 맨 마지막에 쉼표를 허용하기 때문이다. $array = array( 'element', 'element', ...
Apr 7th
March 2010
9 posts
mockcache →
요즘에 memcached 쓸 일이 많은데, 로컬에서 작업할 때 memcached 설치하기 참 귀찮다. 어차피 memcached는 실제 배포했을 때만 작동하면 된다. 그래서 mockcache라는 것을 만들었다. 테스트 용도로 써도 되는데, 꼭 그런 용도는 아니고 memcached 클라이언트 라이브러리가 하나도 없을 때 이걸 쓰도록 fallback을 구성할 때도 좋다. try: import memcache except ImportError: import warnings import mockcache as memcache warnings.warn("imported mockcache instead of memcache; cannot find " ...
Mar 31st
5 tags
“구현과 명세는 함께 어우러져 달콤한 춤을 춰야 한다. 명세가 끝나기 전에 구현이 나오는 것은 특정 구현의 세부에 의존하여 명세를 제한하게 되므로...”
– HTMLWG Mailing List (via nohmad)
Mar 28th
3 notes
6 tags
보노보나잇 VLAAH 발표 →
소셜 스타트업들의 모임인 보노보나잇에서 페차쿠차 형식으로 VLAAH 발표를 했다. 사실 소셜 스타트업에서의 소셜이라는 말이 사회적 기업 같은 얘기를 할 때의 소셜이었는데 애초에 신청할 때부터 조금 잘못 이해하고 있던 게 사실이다. 그래서 VLAAH를 가지고 어떻게 연관성 있게 말을 할까 하다가 조금 망한 발표. 발표 형식은 페차쿠차 형식으로, 슬라이드 하나에 20초를 쓰고, 총 20 슬라이드를 지켜야 했다.
Mar 25th
8 tags
VLAAH API로 쉽게 투표 기능 구현하기, Part 1: 아톰 API 활용 →
한국 IBM developerWorks에 VLAAH API를 주제로 기고했다. 제목에서 보면 알 수 있지만 시리즈로 기획했고, 그 중 첫번째 글이다.
Mar 23rd
4 tags
Mar 21st
3 tags
Mar 14th
Mar 8th
3,776 notes
9 tags
Universal Namespace
유니버설 네임스페이스(universal namespace)1를 만들고 관리하는 것은 매우 어렵다. 하지만 유니버설 네임스페이스가 필요한 경우는 많다. 이를테면 도서를 위한 ISBN이나 우리가 인터넷을 하면서 흔히 접하는 도메인 네임, URI 따위가 바로 유니버설 네임스페이스인데, 이걸 개인이나 소규모 표준 위원회가 정의하고 관리하는 것은 거의 불가능하다. 특히 숫자 등의 코드로 된 식별자가 아닌, 사람이 비교적 쉽게 알아볼 수 있으면서도 정규화(normalization)가 용이하게 알파누메릭컬(alphanumerical)한 네임스페이스를 정의하고 관리하는 것은 더욱 힘들다. 왜냐하면 사람이 알아볼 수 있게 하는 것이 네임스페이스 디자인의 의도 중 하나라면, 모든 이름이 똑같이 사람에게 알아보기 쉬울 수는...
Mar 7th
3 tags
Pastedown: the pastebin service for Markdown... →
최근에 짬짬이 시간을 내서 만들었다. 전부터 스스로 필요하다고 생각했던 서비스다. Markdown 문서 전용 붙여넣기(pastebin) 서비스다. 붙여넣기 서비스가 무엇이냐면, 여러줄로 된 긴 글을 쓰기는 곤란한 IRC 같은 채팅이나 Twitter 같은 마이크로블로그 등에서 인용을 위해 따로 본문 URL을 만들어 링크하는 서비스다.1 로그인을 할 경우 자신의 글을 수정할 수 있게 된다. 그리고 모든 수정 사항은 위키처럼 이력 관리가 된다. 다만 아직 차이점을 보기 위한 diff는 구현하지 않았다. 로그인은 VLAAH 계정으로 하면 된다. 문서를 포크(fork)할 수도 있다. 수정 권한이 없는 문서에 대해 나만의 변경을 가하고 싶을 때 쓰면 된다. 다만 원본 문서에는 누가 포크를 했다고 링크가 걸리고,...
Mar 7th
2 notes
5 tags
Arachneng on Everything: 플레인 텍스트의 미덕은 제약이다. 아주 먼... →
플레인 텍스트의 미덕은 제약이다. 아주 먼 옛날, 플레인 텍스트의 실질적인 형태가 타자기 출력이었던 때는 약간 아니었지만, 지금의 플레인 텍스트로 복잡한 효과를 넣으려고 하는 사람은 ASCII 아트 만드는 사람 빼고는 없다. 대신 그들은 오로지 제한된 문자만으로 효과적으로 글의 내용을 전달하는 방법을 배우고, 어떻게 단순한 구조화가 글의 내용을 이해하는 데 굉장한 도움을 주는지 알게 되며, 글을 쓸 때 글의 내용에만 집중하는 방법을 익히게 된다. 플레인 텍스트의 제약을 기계가 이해할 수 있도록 정형화하면 마크다운 같은 경량 마크업 언어나 TeX 같은 조판 언어가 나오지만 기본 원칙은 변하지 않는다: 플레인 텍스트로 좋은 글을 쓸 수 없다면 워드프로세서 나부랭이로도 좋은 글을 쓸 수는 없다. 아이들에게...
Mar 5th
1 note
February 2010
5 posts
10 tags
사용자 인터페이스로서의 프로그래밍 언어 →
28일(토요일) 어제 UXCamp Seoul에서 CREVATE의 박성연 대표님과 같은 슬롯을 공유하며 함께 발표했던 내용에서 내가 준비했던 부분의 발표 자료다. 처음으로 SlideShare를 써서 공유해본다. 기조(基調)는 대충 이랬는데, 박성연 대표님께서 UX 이노베이션을 주제로, 사람들이 창의성에 대해 너무 대단한 것으로 여기는 편견을 가지고 있다. 다행히 YouTube와도 같은 것들이 아마추어 아티스트(일반 사용자)와 프로 아티스트의 구분을 모호하게 하고 있다. 개발 직군에서도 기획자와 개발자, 디자이너의 구분도 모호해지는 것이 이노베이션을 만들어낼 수 있다. 라는 식으로(엉터리 요약) 발표를 하셨고, 이어서 “그렇다면 프로그래밍은 어떨까?”하는 식으로 약간 어색하기도...
Feb 28th
3 tags
The Heungsub: VLAAH Embed 공개 →
지난주에 VLAAH Embed를 공개했습니다. VLAAH Embed는 HTML문서에 VLAAH 캔디바를 간단하게 추가할 수 있도록 도와주는 스크립트입니다. 여러분은 VLAAH Embed를 이용해 자신의 글, 어떤 주제, 어떤 사진이 얼마나 인기 있는지 손쉽게 알 수 있습니다. VLAAH Embed는 당 블로그에서도 사용하고 있는 코멘트 시스템 Disqus에 아이디어를 얻어 만들게 되었습니다. 사용법도 매우 유사합니다. VLAAH Embed의 주소를 서비스와는 독립적으로 유지하기 위해 VLAAH 본서버가… 얼마 전에 VLAAH로 DISQUS 같은 서비스를 만드는 것에 대해 쓴 적이 있는데, DISQUS 같은 것은 아니지만 해당 페이지 URL에 대해...
Feb 25th
5 notes
4 tags
Feb 10th
2 tags
VLAAH API가 나아갈 길
VLAAH API 1.0을 릴리즈하고 나서 VLAAH API에 대해 여러가지 고민을 했다. 어떻게 하면 VLAAH API를 매력적으로 만들 수 있을 것인가? VLAAH API를 쓰고 싶도록 만들어야 한다. 내 생각에 API를 쓰게 만드는 요인은 크게 세 가지이다. 리소스 아웃소싱(resource outsourcing)—그러니까 자원에 대한 부담을 외부로 돌리기 위해서. 웹 서비스의 API는 이 관점에서 대부분 읽기 위해서든 쓰기 위해서든 스토리지의 역할을 해낸다. Flickr API의 주요 기능들 따위가 여기에 속한다. 복잡하고 귀찮은 계산(calculation)의 추상화. Google 검색 API 같은 것들이 여기에 속한다. 편하고 마음에 드는 인터페이스. 기능이 좀 부족해도 쓰기 편한...
Feb 9th
5 tags
블로그 이사
원래 WordPress로 만들었던 블로그를 Tumblr로 옮겼다. 주소도 기존에는 blog.dahlia.pe.kr이었는데 이제 blog.dahlia.kr이다(.pe가 빠졌다).1 사실 전부터 blog.dahlia.pe.kr라는 주소를 폐기하고 싶었는데 잘됐다. 내가 WordPress를 버리고 Tumblr로 갈아탄 이유는 여러가지가 있다. 일단 더이상 내 서버 위에서 WordPress를 설치하고 운영하는 식으로 셀프호스팅을 하기 싫어졌다. 사실 셀프호스팅을 하는 가장 큰 이유들은 도메인, 플러그인, 맘대로 디자인을 커스터마이즈할 수 있다는 점 따위인데, 어차피 요즘 대부분의 블로그 서비스들은 커스텀 도메인도 지원하는데다2 내가 만 3년을 블로그 써보면 설치한 플러그인이라곤 스팸 차단을 위한...
Feb 8th