Markdown은 간단히 말하면 웹 저자들을 위한 글자-HTML 변환 도구이다. 그래서, 읽기 쉽고 쓰기 쉬운 일반 글자 형태의 글을 손쉽게 (X)HTML 문서로 변환할 수 있단다.

이미, WordPress에서는 1.2 버전부터 이 Markdown plugin을 제공하고 있었지만, 여태 모르고 무심결에 넘겼었다. (WordPress v2.0부터는 새로 추가된 시각적 HTML 편집기로 인해, 이 기능을 꺼놓지 않는 이상은 더 이상 사용할 수 없단다.)

요새는 거의 누구나가 자기 blog를 운영하고 있듯이 기본 HTML 문서를 다룰 일들이 많은 환경에서 Markdown은 또 하나의 유용한 도구로 사용될 수 있을 듯 한데, 부담이 되는 것은, 또 하나의 문법을 익혀야 한다는 것이다.
하지만, 처음 소개 문장에서도 밝혔듯이 Markdown의 기초 문법은 비교적 간단하며, 한 번 익히고 나면 직접 (X)HTML로 쓰는 것보다 시간과 노력이 덜 들어갈 듯 하다.

그리고, HumaneText.service라는 것을 설치하면, 어느 글자 편집기에서든 메뉴막대의 서비스 항목에서 선택하여, Markdown 형식의 글을 XHTML로 간편하게 변환할 수도 있단다.

당분간, MarkDown Cheat Sheet을 붙여놓고 참고하면 금새 익힐 수 있을 듯. 😉

Russell BrownAdobe Systems Incorporated의 Senior Creative Director인 Russell Brown씨의 사이트에는 Adobe Photoshop 관련 요령들을 모아 소개해 놓은 동영상들을 살펴볼 수 있다.

위의 강의 동영상들 중, Photoshop CS2를 위한 영상들은 온라인 동영상 강의 전문 판매 회사인 lynda.com의 Adobe 관련 페이지에서도 무료로 받아 볼 수 있음.

  • 가능하면 var를 사용한 local 변수들을 사용할 것.
  • with 선언문 사용을 자제할 것.
  • 올바른 알고리듬(algorithm)을 선택할 것. (참고 – Big O notation, Writing Efficient C and C Code Optimization)
  • 루프(loops)를 거꾸로 실행. (맨 마지막 항목을 시작으로)
  • while 루프 대신 do..while 루프를 사용.
  • 루프(loops) 안에다 반복적인 작업들을 함께 더 풀어 놓아라. (루프 속, 하나의 실행 선언문 대신에 여러개의 적당한 갯수 – 원래 실행 횟수의 공통인수가 되는 – 실행 선언문들을 함께 나열)
  • if 선언문 최적화. (가장 자주 실행될 만한 조건을 맨 앞에, else if 선언문들의 숫자를 최소화 – 조건문을 ifif..else처럼 이분법 검색 형태로 조종)
  • 되도록이면 if 선언문 대신에 switch 선언문을 쓸 것.
  • + 연산자를 이용한 string 연결은 피할 것. (대신 Arrayjoin() 함수를 사용해서 StringBuffer로 감쌀 것)
  • 가능하면 자신이 만든 함수보다는 내장된 함수들을 쓸 것.
  • 자주 사용되는 변수들은 저장해서 쓸 것.
  • 선언문들의 수를 줄일 것. (다중 변수들 정의, array와 object의 축약 선언문 사용)
  • DOM의 사용은 아낄 것. (대신 createDocumentFragment() 활용)
꼬리표:

 없음.

개인적으로, OS X에 내장되어 있는 Postfix mailer를 Postfix Enabler 가지고 켜놓고 사용하고 있다.

그런데, 어느날 갑작스런 메일 서버의 통신량 증가로 system.log를 살펴본 결과, 수상한 발자국들이 찍혀있는 다음과 같은 경고 문구들을 발견하게 되었다.

warning: numeric domain name in resource data of MX record for neticks.com: 127.0.1.51
warning: numeric domain name in resource data of MX record for neticks.com: 127.0.1.51
warning: valid_hostname: empty hostname
warning: malformed domain name in resource data of MX record for angelfire.com: 
warning: numeric domain name in resource data of MX record for staa.com: 69.106.54.69
warning: valid_hostname: empty hostname
warning: malformed domain name in resource data of MX record for angelfire.com: 
warning: numeric domain name in resource data of MX record for staa.com: 69.106.54.69
warning: numeric domain name in resource data of MX record for aolloses.com: 127.0.1.51
warning: valid_hostname: empty hostname
warning: malformed domain name in resource data of MX record for angelfire.com: 
warning: valid_hostname: empty hostname
warning: numeric domain name in resource data of MX record for bioteda.com: 211.156.49.6
warning: numeric domain name in resource data of MX record for jaehnsautobody.com: 127.0.0.10
warning: numeric domain name in resource data of MX record for aolloses.com: 127.0.1.51
warning: valid_hostname: empty hostname
.
.
warning: mail2.remoteit.com[67.102.200.130] offered AUTH option multiple times
warning: mail.airewaves.com[216.24.174.202] offered AUTH option multiple times
warning: mail.visual-impct.com[206.80.23.8] offered AUTH option multiple times
warning: mx.rogersdesign.com[209.60.77.50] offered AUTH option multiple times
warning: mail.marketspacefinancial.com[199.227.43.234] offered AUTH option multiple times
warning: mail.ruralfree.net[209.213.15.65] offered AUTH option multiple times
warning: mail.spec.net[205.167.92.100] offered AUTH option multiple times
warning: imail.ipswitch.com[156.21.1.5] offered AUTH option multiple times
warning: mail.snworks.com[63.75.167.9] offered AUTH option multiple times
warning: mail.komo.com[64.83.205.251] offered AUTH option multiple times
warning: ns2.fourway.net[216.223.165.6] offered AUTH option multiple times
warning: sw1.la-lakers.com[66.226.3.253] offered AUTH option multiple times
warning: mail.pxgp.com[207.201.223.114] offered AUTH option multiple times
warning: mail.pageconcepts.com[204.118.3.168] offered AUTH option multiple times
warning: mail.netscape.everyone.net[216.200.145.10] offered AUTH option multiple times

이런! 😯 수시로 알 수 없는 곳에서 계속 나의 메일 서버를 relay 서버 삼아 쓰레기 전자우편들을 보내려고 시도하고 있는 것이 아닌가? 👿

이것을 계기로 아래는 꼭 살펴보아야 할 Postfix의 보안 관련 필수 설정 항목들을 모아 보았다.

SASLDB를 사용한 SMTP 암호 인증을 사용하지 않는 한 꼭 SSL 암호화 기능을 켜서, 만에 하나 암호가 중간에 가로채어지는 일을 방지할 것.

– /etc/postfix/main.cf:
# 인가된 네트워크에서만 접속을 허용.
smtpd_client_restrictions = permit_mynetworks, reject

# 자신의 hostname을 모르는 메일 시스템한테는 얘기를 안함.
# Postfix 버전이 < 2.3일 경우, reject_unknown_hostname를 지정.
smtpd_helo_restrictions = reject_unknown_helo_hostname

# 존재하지 않는 도메인에서는 전자우편을 받지 않음.
smtpd_sender_restrictions = reject_unknown_sender_domain

# 로컬 클라이언트들은 목적지의 지정이 자유로우나, 그 이외에는 차단.

smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination

# pipelining 명령을 못 알아드는 엉성한 클라이언트들은 차단.
smtpd_data_restrictions = reject_unauth_pipelining

# relay_domains_reject_code 변수는 SMTP 서버가 메일 전달 지침을 무시하려는
# 클라이언트들에게 어떻게 응답할 것인지를 지정함.
# 이것의 변수는 RFC 821를 따름. 기본값은 554: Transaction failed.
# 550: no access
relay_domains_reject_code = 550

# SMTP 클라이언트들은 SMTP 세션을 시작하기 전에
# 먼저 자신의 정체를 밝히도록 함.
smtpd_helo_required = yes

# 메일 전달 목적지가 Postfix에 의해 인가된 곳이더라도,
# 인가되지 않은 곳으로부터의 어떠한 메일 전달도 허용하지 않도록 함.
# 기본적으로 설정되어 있는 값이지만, 추가해 놓는다고 해가 될 것은 없다.
allow_untrusted_routing = no

Open Relay Database 같은 곳에 자신의 메일 서버가 스펨 메일 서버로 등록되지 않으려면, 주의가 필요하다.

– 추가 참고 글