Lilypond 길잡이 2

  1. Lilypond는 어떤 프로그램인가? Lilypond 사용을 위한 준비
  2. 기본적인 악보 조판 > 이번 포스트
  3. 찬송가 악보 그리기
  4. 코드 있는 악보 그리기
  5. 좀더 예쁜 악보 만들기

기본적인 악보 조판

이미 LilyPondTool을 설치한 상태라면 쉽게 악보를 만들 수 있다. jedit의 메뉴에서 Plugins > LilyPondTool > Score > Score Setup Wizard… 를 선택한다. 그러면 다음 그림과 같은 창이 새롭게 나타난다.

Wizard Window 1

이제 원하는 정보들을 하나씩 채워넣으면 된다. 기본적인 보컬 악보를 그리려고 한다면 제목, 작곡가, 작사가 정도의 정보를 넣으면 될 것이다.

Wizard Window 2

두번째 뜨는 창에서는 어떤 시스템의 악보를 그리는지를 선택할 수 있다. 아래 그림처럼 Vocals > Voice (with lyrics)를 누른 후에 Add 버튼을 눌러서 맨 오른쪽 영역에 Voice (with lyrics)가 보이게 하자.

Wizard Window 3

Next를 누르면 이번에는 조성과 박자를 선택할 수 있다. 필요에 맞게 선택 후에는 가사를 넣을 것인지, 가사는 몇 절까지 넣을 것인지, 그리고 코드 이름을 넣을 것인지를 선택한다.

Wizard Window 4

이제 마지막으로 자잘한 정보들을 넣어주면 드디어 finish 버튼이 보인다.

Wizard Window 5

이제 finish 버튼을 눌러주면 아래 그림과 같이 lilypond script가 들어있는 창이 열릴 것이다.

Lilypond 편집 창

이 텍스트 문서를 적절하게 편집한 후에 lilypond를 실행하면 pdf의 깔끔한 악보를 얻을 수 있는 것이다. 사실 이 창에서 어떻게 문서를 편집해야 하는지 막막한 느낌이 들 수 밖에 없다. 가장 좋은 방법은 이미 만들어져 있는 파일을 적당히 수정하는 것이다. 그런 예제로 내가 편집했던 Emmanuel 악보를 아래에서 볼 수 있다. 소스 파일생성된 pdf 파일을 모두 다운로드받을 수 있다.

% Created on Sat Dec 11 13:25:46 SGT 2010
version "2.12.3"

header {
    title = markup {
        fontsize #5
    override #'(font-name . "Nanum Brush Script") { "임마누엘" }} 
    subtitle = "Emmanuel"
    composer = "Reuben Morgan"
    %poet = "Stephen Ha"
    tagline = ""
}

verseKor= lyricmode {
    set stanza = #"1. "
    거 룩 거 룩 경 배 드 리 네 왕 되 신 주 님
    할 렐 루 야 내 맘 에 오 사 날 새 롭 게 해
    임 마 누 엘 주 예 수 날 떠 나 지 않 네
    선 한 목 자 날 떠 나 지 않 네 임 마 누 엘
    거 룩 거 룩 전 능 의 주 주 밖 에 없 네
    거 룩 거 룩 전 능 의 주 주 밖 에 없 네
    _ 엘 임 마 누 엘 임 마 누 엘 임 마 누 엘
}

verseKorTwo = lyricmode {
    set stanza = #"2. "
    밤 하 늘 의 수 많 은 별 들 지 으 신 주 님
    주 의 사 랑 나 를 부 르 네 주 를 따 르 리
}

staffVoice = new Staff {
    override Staff.VerticalAxisGroup #'minimum-Y-extent = #'(-8 . 4)
    time 4/4
    key e major
    clef treble
    relative c' {   
        context Voice = "melodyVoi" {
            dynamicUp
            r4 gis'8 gis gis4( gis8 fis16 e) | e4 e8 dis e4 gis | cis,2. cis8 dis | e4. fis8( fis) dis4. | break
            r4 gis8 gis gis4( gis8 fis16 e) | e4 e8 dis e4 gis | cis,2. cis8 dis | e4. fis8( fis) dis4. | break
            r8^markup {
                translate #'(-2 . 1)
                musicglyph #"scripts.segno"
            }  a'8 a cis cis2 | r4 fis,8 b( b) gis4. | r8 a a gis a4 gis8 fis( | fis1) |
            r8 a a cis( cis) cis4. | r8 fis, fis b gis4 e | cis2 r8. dis16 dis8. e16( | bar "||" e8^markup {
                translate #'(-1 . 3)
                italic "last time to "
                tiny raise #1
                translate #'(0 . 3)
                musicglyph #"scripts.coda"
            }
                ) e4.( e4) r4 |
            bar ":|" break
            r4 b'8 cis gis4 fis | r4 fis8 gis fis4 e | r4 b'8 cis gis4 fis | fis2( fis8) r4. |
            r4 b8 cis gis4 fis | r4 fis8 gis fis4 e | r4 b'8 cis gis4 fis | fis2( fis8_markup {
                italic smaller "D.S. al Coda"
            }
                ) r4. |
            bar "|:"
            e8^markup {
                translate #'(-2 . 1)
                musicglyph #"scripts.coda"
            } e4. r8. fis16 fis8. gis16( | gis8) gis4. r8. dis16 dis8. e16( bar ":|"| e8) e4. r8. fis16 fis8. gis16( | gis8) gis4.( gis2) |
        }

    bar "|."
    }

}

harmonies = new ChordNames chordmode {
    set majorSevenSymbol = markup { maj7}
    set chordChanges = ##t
    override ChordName #'font-size = #-1
    override ChordName #'font-name = #"Arial"
    e2. b4/dis | cis2.:m b4 | a1 | cis2:m b |
    e2. b4/dis | cis2.:m b4 | a1 | cis2:m b |
    fis1:m | b2/dis e/gis | a1 | b1 |
    fis1:m | b2/dis e/gis | a2. b4 | cis2.:m (b4/dis) |
    b2/dis cis:m | b a | b/dis cis:m | b a |
    b2/dis cis:m | b a | b/dis cis:m | b1 |
    cis2.:m b4/dis | e2. b4/dis | cis2.:m b4/dis | e1 |
}

score {
    <<
        harmonies
        staffVoice
        context Lyrics = "lmelodyVoi" lyricmode { lyricsto "melodyVoi" verseKor }
        context Lyrics = "lmelodyVoiT" lyricmode { lyricsto "melodyVoi" verseKorTwo }
    >>
    
    midi {
    }

  layout {
      indent = 0cm
      context {
      Score
      remove "Bar_number_engraver"
      }
  }
}

paper {
    myStaffSize = #26
    #(define fonts
    (make-pango-font-tree "NanumMyeongjo" "AppleGothic" "NanumGothicCoding" (/ myStaffSize 28)))
    #(set-paper-size "b5")
}

윈도우에서 Typinator 기능 사용하기

내가 맥에서 사용하는 유용한 프로그램 중의 하나가 바로 Typinator이다. 간단한 키 입력으로 긴 입력을 대치할 수 있도록 해 줌으로서 반복적인 타이핑 작업을 효율적으로 만들어주는 프로그램이다. 상용구를 등록하거나 틀린 철자를 바로잡는데도 응용할 수 있다. 이런 기능을 하는 또다른 맥용 프로그램으로는 TextExpander, TypeIt4Me 등이 있다. 이 프로그램이 너무 좋다보니 윈도우에서 어떻게 이런 기능을 구현할지에 대해 찾아보았다.

답은 역시나 AutoHotKey에서 쉽게 찾을 수 있었다. Hotstrings and Auto-replace 페이지에 있는 스크립트를 이용하면 상용구의 등록과 사용을 쉽게 할 수 있을 뿐만 아니라, 어떤 면에서는 TypinatorTextExpander보다도 더욱 편리하게 이런 기능을 수행할 수 있다.

이제 스크립트를 Dropbox에 넣어놓고 윈도우 시작할 때 이 스크립트를 실행하도록 해 주기만 하면 된다.

약간의 문제가 있다면, 윈도우 시작 프로그램에 넣어서 이 스크립트를 실행하는 경우에는 해당 폴더에 스크립트 파일의 shortcut을 등록하게 되는데, 스크립트가 자기 자신에게 새로운 내용을 덧붙여 쓰는 내용으로 되어 있기 때문에, shortcut이 가리키는 원 파일을 수정하는 것이 아니라, 시작 프로그램 폴더에 새로운 파일을 만들어서 여기에 집어넣게 된다는 점이다. 결국 여러 대의 컴퓨터에서 동일한 스크립트를 유지하면서 항목 추가는 어렵다는 이야기. (스크립트 내의

%A_ScriptFullPath%

부분을

C:Users$A_UserName$DropboxAutoHotKey%A_ScriptName%

으로 바꾸어 봤는데 무슨 이유인지 작동을 하지 않는다. 핵심은

%A_ScriptFullName%

에 시작 프로그램 폴더의 shortcut이 아니라 원래 파일 이름이 들어가야 한다는 점)

윈도우에서 스크롤 방향 바꾸기

새로 출시된 맥의 운영체제인 Lion에서는 스크롤 방향이 반대로 세팅되어 있다. 터치 인터페이스가 대중화되면서 애플에서는 매직 마우스와 터치 패드를 주 입력 도구로 사용하고 있고, 따라서 스크롤을 할 때 화면을 손으로 터치해서 이동하는 것과 같은 방식으로 움직이게 설계를 한 것이다.

모든 습관이라는 것이 쉽게 바뀌지 않는 것이기는 하지만, 맥에서 이 방식을 써 보니 생각보다 굉장히 편하고 직관적이라는 생각이 들었다. 많은 맥 사용자들이 라이언에서도 스크롤 설정을 이전 방식으로 돌려놓고 쓰고 있지만, 내 경우에는 처음부터 아예 라이언의 방식에 익숙해져 버리기로 한 셈이다.

이렇게 라이언 식의 스크롤에 익숙해지고 나니 생기는 문제는 바로 윈도우 컴퓨터를 사용할 때 자꾸 반대 방향으로 스크롤을 하게 된다는 것이다. 현재 내 사무실 책상에는 업무용 윈도우 노트북 한 대와 맥북 한 대가 있고, 집의 컴퓨터 책상에도 윈도우 데스크탑 한 대와 아이맥 한 대가 나란히 놓여 있다. 컴퓨터를 옮기면 스크롤 방향이 완전히 반대가 되어 버리니 문제가 되는 것이다.

어차피 맥에 익숙해지기로 한 것이니, 윈도우에서의 스크롤 방향을 바꾸기로 했다. 우선 마우스 설정이나 드라이버에서 스크롤 방향을 바꿀 수 있을지 알아보았으나 실패. 해결책은 쉬운데서 찾았는데, 바로 AutoHotKey를 사용하는 것. 이 포스트에서 찾은 아래의 스크립트를 ReverseScroll.ahk 정도로 저장하고 실행하면 스크롤 방향이 반대가 된다. 스크립트 자체가 너무 쉬워서 특별한 설명이 필요 없을 정도. 부팅할 때마다 사용하고 싶으면, 이 스크립트를 ‘시작 프로그램’에 넣어두면 그만이다.

WheelUp::
Send {WheelDown}
Return

WheelDown::
Send {WheelUp}
Return

WheelLeft::
Send {WheelRight}
Return

WheelRight::
Send {WheelLeft}
Return

~Shift & WheelUp::
Send {WheelRight}
Return

~Shift & WheelDown::
Send {WheelLeft}
Return

Momolog 데이터를 Momento로 옮기기

20120228-165648.jpg

Momento는 일종의 일기장 프로그램이다. 이미 Momolog어썸노트
를 가지고 있기 때문에 사실상 이 프로그램에 대한 필요를 느끼지 못했었는데 (둘 다 매우 훌륭한 프로그램이고 업데이트도 꾸준히 되고 있을 뿐만 아니라 모두 한국인 개발자의 작품이다), 이번에 2.0으로 업그레이드가 되면서 여기저기서 이야기가 되길래 좀 자세히 살펴봤다. 놀라운 것은, 이 프로그램이 트위터, 유튜브, 플리커, 페이스북 등 다양한 종류의 SNS들을 한군데 모아준다는 점이었다. 어느 방식으로 글을 쓰던 상관없이 나의 모든 온라인 기록들을 한 군데에서 관리할 수 있다는 것이다. 이 점은 Momolog나 어썸노트가 가지고 있지 못한 특징인데, 이 때문에 이 프로그램으로 옮겨갈 생각을 하게 되었다.

문제는, 이미 momolog에 많은 글을 올려두었는데, 이걸 어떻게 Momento로 옮기느냐 하는 것이다. Momento의 지원 페이지에도 바로 이 질문이 올라와 있는데, 제작자의 답변은 ‘현재 지원하지 않으며, 앞으로 지원할 수 있을지의 여부도 알 수 없다’는 것이었다.

Momento가 백업/리스토어 기능을 지원한다는 점에 착안하여 일단 백업을 한 후, 백업 파일을 손 보는 방법이 가장 직관적인 방법이라고 생각되었다. 문제는 백업 파일의 형식을 알아낼 수 없다는 것. 이래서는 성공할 수가 없다. 깔끔하게 포기.

이런 경우에 보통 사용자라면 그냥 포기를 하거나 기존의 프로그램에 그대로 매여있을 수 밖에 없을 것이다. 그러나, 나는 이미 프로그래밍을 할 줄 아는 프로그래머가 아니던가. 누군가 만들어주지 않는다면 내 손으로 만드는 수 밖에!

일단 momolog의 모든 메모는 csv 파일 형태로 내보내기가 가능하다. 그러므로, 일단 모든 메모들을 text 형태의 파일로 다운로드를 받는다. 문제는 이 파일이 UTF16을 사용한 도스 형식의 파일인데다가, 파일 이름은 csv이지만 실제 column separator로는 tab을 사용했다는 것이다. 게다가 메모의 특성상 한 개의 메모가 여러 줄로 이루어질 수 있기 때문에 개념적으로 csv 파일이라고 볼 수는 없다.

우선 dos2unix를 이용해 CRLF를 LF로 바꾸어준 후, 인코딩을 UTF8으로 변환하였다. 이렇게 소스 파일이 준비되고 나면 이제는 간단한 ruby 파일을 사용하면 될 일.

require 'rss/maker'

data = File.read("data.txt")
chunks = data.split(/(d{4}-d{2}-d{2}s{1}d{2}:d{2}:.+00:00)/)
chunks.delete_at(0)

content = RSS::Maker.make("2.0") do |m|
  m.channel.title = "Momolog"
  m.channel.link = "http://lordmiss.com"
  m.channel.description = "Momolog backup"
  m.items.do_sort = true

  (0..310).each do |n|
    i = m.items.new_item
    i.title = "momolog"
    i.link = ""
    i.description = chunks[2*n+1].split("t").delete_if{|x| x==""}[0]
    i.date = Time.parse(chunks[2*n])
  end
end

File.open("momo.xml", "w") do |f|
  f.write(content)
end

Ruby의 rss/maker를 이용해서 저장한 momolog 백업 파일의 내용을 모두 rss로 전환하여 아무 웹 서버에나 올려놓으면 된다. 이 소스를 Momento에서 feed로 읽은 후에 disconnect해 주면 끝.

이 과정을 통해 배운 것은, 1) ruby의 Time 클래스 사용법 2) ruby에서 정규식으로 split할 때, 정규식 매칭 부분을 array에 유지하기 등이다.

주의) 혹시라도 이 소스를 사용하고자 하시는 분들은, 소스를 그대로 사용했을 때 생기는 문제에 대해 책임질 수 없습니다. 코드의 의미를 이해하시는 분만 사용하시기 바랍니다!

Soulver 번역

아이폰에서 Soulver를 구입해서 이걸 주력 계산기로 사용하고 있었다. 사실 휴대전화에서 계산기를 쓸 일이 그렇게 많은 것은 아닌데, 가끔씩 몰 농도를 계산해야 한다거나 필요한 화합물의 양을 계산해야 한다거나 할 때는 계산기를 쓰게 되는데, 이 때 보통 계산기를 쓰면 정해진 루틴에 따른 계산을 반복할 때도 값을 종이에 적고 다시 입력해야 하는 경우가 생긴다.

Soulver는 이런 부분에서 강점이 있는데, 이런 반복되는 계산 루틴을 하나의 파일로 저장해 놓고 이걸 사용할 수 있다는 점이다. 꽤 쏠쏠하게 사용하고 있는 셈.

그런데, 이 프로그램이 1.1로 버전업이 되면서 몇 개의 번역이 추가된 것을 알게 되었다. 이 중에 일본어도 들어 있었고. 이왕이면 한글로 사용할 수 있으면 좋은 일이기도 할 것 같고, 아이폰용 어플리케이션이니 번역할 내용이라봐야 얼마 되지도 않을 것 같고 해서, 개발자에게 바로 이메일을 보냈다. 혹시 한국어 번역이 필요하면 해 주겠다는 내용이었다.

그런데 예상치 못하게 메일을 보내자마자 바로 답장이 날아왔다. 그것도 strings 파일을 바로 첨부해서! 겨우 6KB짜리 텍스트 파일 하나에 불과했기 때문에, 몇 분 안에 번역을 마치고 바로 답장을 보냈다. 답장을 보내고 한 시간도 안되어서 개발자에게 다시 메일이 날아왔다. 이번에는 내가 보낸 파일을 이용해서 한국어를 포함하여 빌드한 후에 아이폰에서 실행하는 인터페이스를 스크린샷으로 찍어서 첨부를 해 보낸 것이다. 그리고 이 번역을 포함한 빌드를 이미 애플 측에 업데이트로 제출했으니 1주일 정도 후면 이 번역이 포함된 빌드를 쓸 수 있게 될 것이라고 했다!

결론적으로… 다음 업데이트 (아마도 1.2 버전) 부터는 아이폰용 Soulver에서 한글로 된 인터페이스를 사용할 수 있다.

그리고, 이에 덧붙여서 앞의 작업한 파일에 맥용 프로그램과 아이패드용 어플리케이션의 번역 내용도 포함이 되어 있었던 것으로 생각되기 때문에, 이 다른 환경들에서도 동일하게 한글 환경을 사용할 수 있게 될 것으로 생각된다. 짧은 시간을 투자해서 멋진 한글화 환경을 가질 수 있게 된 기분 좋은 상황이 아닐 수 없다. 거기에 맥용 Soulver의 라이센스까지 무료로 얻을 수 있었으니!!

Thoughts 인터페이스 번역 – 씁쓸한 마무리

MacStories에서 Thoughts에 관한 글을 봤다.

사실 기능적인 면에서야 JournlerMacJournal같은 강자들이 있기 때문에 맥에서 글을 쓰는데 있어서 다른 프로그램이 필요하다는 생각을 해 본적은 거의 없다. (이런 면에서 Journler 개발이 중단된 사실은 내게 매우 안타까운 일이다. 심지어는 돈을 내고 라이센스를 구매까지 했었기 때문에 아쉬움이 더하다.)

그래도 내 눈을 끌어당긴 요소는 바로 아름다운 인터페이스였다. NoteBook같은 경우가 그런데, 실제 글을 쓰는 것과 비슷한 인터페이스를 갖는 것은 사용성이라는 측면에서 매우 유리하기 때문이다. 나는 NoteBook이 채용한 것과 같은 노트북을 실제로는 거의 사용하지 않기 때문에 이 프로그램을 더 이상 업그레이드 하지 않고, 사용도 하지 않고 있지만, Thoughts의 경우에는 인터페이스가 무척 마음에 들었다.

재미있게도 이 프로그램은 아직 베타 버전조차 공개되어 있지 않은 상황인데 사전 예약 구매 행사를 하고 있다. 24 유로를 내면 이 프로그램과 Family, Yum, 그리고 ResizeMe라는 프로그램 세 개를 번들로 주는 내용이다. 사실 번들 중에서 Family는 조금 관심이 있지만 나머지 프로그램은 전혀 필요가 없는 상황이었기 때문에 실체가 공개되지 않은 프로그램을 거의 5만원돈을 내고 구매한다는 것이 매우 모험으로 느껴졌고, 그래서 선뜻 결정을 하지 못하고, 내년 1월에 베타 버전이 공개가 되면 그 때 시험을 해 보고 결정하리라 생각하고 있었다.

이런 상황에서 Thoughts 번역자를 찾고 있다는 MacStories의 기사는 어떤 면에서는 내게 행운이었다. 이미 여러 프로그램들을 번역해 오면서 프로그램 인터페이스 번역이라는게 그렇게 어려운 일이 아니라는 것을 알고 있었기 때문에, 번역자에게 이번 번들의 모든 프로그램 라이센스를 준다는 말은 매우 매력적인 일이 아닐 수 없었다. 비록 한글이 대상 언어에 포함이 되어 있지는 않았지만, 무작정 개발자에게 메일을 보냈다. 이런 일에 있어서 자원자를 거절한다는 것은 (큰 회사가 아닌 이상) 있을 수 없는 일이라는 것을 알고 있었기 때문이다.

예상대로, 개발자는 매우 반갑게 답장을 보내 주었고, 베타 버전도 쓸 수 있게 되었다. 프로그램 실행 모습을 참고해 가면서 약 3시간 정도를 투자해서 이 프로그램의 모든 인터페이스와 도움말을 한글로 번역할 수 있었다. (사실 이 프로그램의 경우에는 특이하게 도움말까지 다 번역을 요구했기 때문에 다른 경우와 달리 시간이 좀 더 많이 소요된 것이다. 보통 인터페이스만 번역한다면 길어야 두 시간을 넘기지 않을 것이다.) 번역을 하자마자 개발자에게 파일을 보내 주었고, 곧 한글 번역이 적용된 베타 버전을 받아볼 수 있을거라는 생각을 했다.

어제 밤에 개발자에게 연달아 두 통의 이메일이 날아왔다. 하나는 프로그램들의 라이센스를 담고 있는 메일이었고, 여기에는 추가로 번역해야 할 문자열들이 조금 더 들어 있었다. 그런데, 두 번째로 도착한 이메일은 약간은 황당할 수도 있는 내용을 담고 있었다. 간단히 말해서, 내부 회의를 해 봤는데 너무 많은 언어를 지원하게 되면 패키지 크기가 커지게 되므로, 가장 많이 사용되는 12개의 언어만을 지원하기로 결정했다는 것이다. 즉, 한글은 지원하지 않겠다는 말.

한국이라는 시장이 맥 소프트웨어에 있어서 매우매우 작은 시장이라는 것은 뭐 나도 이해할 수 있는 부분이다. 그래도 이미 번역을 다 마쳤는데 이런 이유로 인해 한글 인터페이스를 사용하지 못한다는 것은 안타깝기 그지없는 일이다. 한글 하나 더 넣는게 패키지 크기가 얼마나 커진다고!!

최근에 아이폰이 한국에 도입되면서 벌써 20만명에 달하는 아이폰 유저가 생겼다고 한다. 앞으로 그 숫자는 더욱 늘어날 거라고 생각된다. 이 사용자들이 모두 맥을 사용하는 것은 아니지만 (도리어 맥 사용자는 극소수가 아닐까…) 이들이 아이폰을 통해 애플의 소프트웨어를 경험하게 되고 그 경험을 바탕으로 맥으로 전환하게 되는 경우가 많아진다면 한국의 맥 소프트웨어 시장도 더 커질 것이라고 생각된다. 특히, 아이폰 사용자들의 경우 이미 돈을 지불하고 어플리케이션을 구매하는 것에 대해 거부감이 없는 상태라고 볼 수 있기 때문에 맥 소프트웨어의 경우에도 윈도우용 소프트웨어 시장과는 달리 정품 사용 비율이 더욱 높을 것이라고 예상된다. 나 역시, 윈도우를 쓸 때는 돈을 내고 소프트웨어를 구매해 본 적이 거의 없지만 맥으로 넘어와서는 거의 모든 소프트웨어를 정품으로 구매하고 있으니까.

그래서 맥 소프트웨어 시장이 어느 정도 의미있는 크기가 되면, 이런 어이없는 상황이 더 이상은 벌어지지 않을 것이라고 기대를 해 본다.

어쨌든, Thoughts 매우 마음에 드는 소프트웨어이다.

Macheist의 nanoBundle, 그 경제적 의미

Macheist는 재미있는 미션을 풀고 덤으로 소프트웨어 번들까지 살 수 있는 것으로 유명한 맥 관련 커뮤니티이다. 이미 세 번의 번들 판매 행사를 했는데, 나는 그 중에서 최근 두 번의 번들을 모두 구입한 바 있다. (두번째 번들 구입, 첫번째 번들 행사 때는 맥을 사용하지 않는 상황이었다)

며칠 전에 Macheist에서 뭔가 새로운 행사를 하고 있는 것을 알 수 있었고, 간단하게 DaisyDisk라는 프로그램의 라이센스를 공짜로 얻었다. 이 프로그램의 라이센스를 받을 수 있는 기간이 끝나고 나자, 이번에는 nanoBundle이라는 이름의 새로운 번들 프로그램이 발표되었다. 이 행사를 간단히 말하자면, 모두 여섯개의 맥용 소프트웨어 라이센스를 공짜로 준다는 것이다.

이 번들에 포함되어 있는 프로그램들은 ShoveBox, WriteRoom, Twitterific, TinyGrab, Hordes of Orcs, 그리고 Mariner Write이다. 이 중에서 ShoveBox는 이미 라이센스를 가지고 있고, Twitterific은 고맙기는 하지만 이미 Tweetie 무료 버전을 잘 사용하고 있는 터라 별로 필요는 없을 것 같고, Hordes of Orcs는 내가 게임을 그다지 좋아하지 않는 터라 한 두 번 해 보고는 실행할 일이 별로 없을 것 같다. WriteRoom은 갖고 싶었던 소프트웨어라 앞으로 자주 사용하게 될거라고 생각되며, TinyGrabMariner Write은 사용을 좀 해 보고 지금 사용하고 있는 동일 목적의 소프트웨어들, 이를테면 스크린샷 프로그램인 LittleSnapper나 워드프로세싱 프로그램인 Apple Pages, Mellel같은 것들을 대치할 수 있을지 시험을 해 봐야 할 것 같다.

맥용 소프트웨어 개발 업계가 어떤 상황에 있는지 나로서는 알 수 없고, 공짜로 주는 것은 그냥 고맙게 받을 뿐이지만, 공짜 점심은 없다는 말이 있듯이, 공짜인 것처럼 보이는 것도 사실은 공짜인게 없는 법이기 때문에 이런 행사의 뒤에 어떤 논리가 숨어있을지 곰곰히 생각을 해 봐야 할 것 같다. Mariner Write의 경우 모두 500,000 다운로드를 돌파하는 경우에만 라이센스를 준다고 되어 있는데, 그렇다면 최소한 500,000개 이상의 라이센스를 공짜로 뿌리는 것이나 마찬가지이다. 소프트웨어 업체의 입장에서 이런 엄청난 양의 공짜 라이센스를 준다는 것은 어떤 의미일까?

우선, 그들로서는 고객 지원에 드는 비용과 시간이 크게 늘어나는 것을 감수해야 한다는 면이 있다. 공짜로 준다고는 하지만 Full License인만큼 고객 지원은 그대로 해야만 하는 것이다. 게다가 기존에 돈을 지불하고 구매한 고객들과의 형평성이라는 측면도 생각하지 않을 수 없어 보인다.

그들이 얻을 수 있는 점이라면, 내가 Typinator를 업그레이드할 수 밖에 없었던 상황을 되돌아보면 답이 보인다. Typinator는 타이핑 에러를 자동으로 교정해주는 프로그램으로서 (사실 그보다는 단축키 용도로 더 많이 쓰고 있지만… 예를 들어

lalc

라고 입력하면 자동으로

lordmiss@lordmiss.com

라고 입력되는 따위의 일) Macheist 번들 행사 중에 공짜로 제공된 프로그램이었고, 나는 이 프로그램을 대단히 만족스럽게 사용하고 있었다. 그러다가 이 프로그램이 업그레이드가 되면서 Macheist 제공 라이센스의 경우에는 돈을 지불하는 업그레이드를 해야 한다는 메일이 날아왔고, 고심 끝에 결국 돈을 내고 업그레이드 라이센스를 구입하게 되었다.

이처럼 프로그램을 공짜로 제공하여 그 프로그램을 잘 사용하게, 그래서 필요를 많이 느끼게 해 놓고, 차후에 업그레이드 라이센스를 돈을 받고 판매하는 방식을 생각할 수 있다. 만약 이런 방식으로 라이센스를 구매하는 고객이 0.1%라고 하면, 1000개의 공짜 라이센스를 뿌리면 단 한 개의 유료 판매밖에 기대할 수가 없지만, 500,000개의 공짜 라이센스를 뿌린 경우라면 장기적으로는 500개의 유료 판매를 기대할 수 있게 되는 것이다.

고객 지원이라는 측면에서 봐도, 돈을 모두 지불하고 구매한 고객과 공짜로 라이센스를 얻은 고객의 지원 요구는 분명 차이가 있을 거라고 생각된다. Macheist에서는 번들 프로그램의 다운로드를 모두 자신의 서버에서 따로 제공하고 있는데다가, 프로그램의 고객 지원 기능을 하는 포럼 글타래를 따로 운영하기 때문에, 프로그램 제작사는 최소한 고객 지원과 다운로드 측면에서 자신의 서버가 져야 할 부담이 없다는 면도 무시할 수 없다.

결국, Chris Anderson이 말한 공짜의 경제학이 이런 방식으로 실험되고 있는 것이다. 돈을 주고 프로그램을 구매하는 것이 너무나도 당연하게 느껴지는 사람들에게 있어서 이런 번들 행사는 이해하기 힘든 일이지만, 구글의 각종 온라인 서비스(구글 메일, 문서, 캘린더, 쩝… 너무 많다) 그리고 다운로드 서비스(구글팩에서는 이미 소프트웨어 다운로드도 가능하다)를 공짜로 사용하는 것이 너무나 당연하게 느껴지는 세대들에게는 어쩌면 구글 프로그램보다 그다지 나아보이지도 않는 프로그램을 구매하는데 수십 달러의 돈을 지불하는 것이 이상하게 느껴질 수도 있다. Macheist의 이번 nanoBundle 행사는 이런 변화를 단적으로 잘 보여주는 하나의 예가 아닌가 하는 생각이 든다.

간단한 링크 관리 프로그램 – Quiet Read

웹 브라우징이 정보 획득의 중요한 수단으로 쓰이고 있는 만큼, 링크를 저장하고 관리하는 것은 매우 중요한 일 중의 하나이다. 이 일이 중요한만큼 많은 소프트웨어들이 이런 목적으로 사용되고 있다. 딜리셔스와 같은 온라인 웹 서비스는 말할 것도 없이 매우 많이 있고, 이런 목적으로 사용될 수 있는 맥용 native application들만 해도 DevonThink, EagleFiler, Yojimbo, Together, Evernote, ShoveBox, Webbla 등 헤아릴 수 없이 많다.

Keep Your Word를 개발한 bambooapps에서 새로 내놓은 Quiet Read는 메뉴바에 상주하면서 링크를 관리하는 작은 프리웨어이다. 복잡한 기능은 전혀 없고, 그냥 몇 개의 링크를 저장할 수 있고 이 링크를 다시 방문할 수 있도록 해 주는 일만 한다. 복잡한 기능이 없는만큼 편리한 부분도 많이 있다. 내가 항상 띄워놓고 사용하는 EagleFiler의 경우에, 항상 실행해 두고 있음에도 불구하고 링크를 저장하는데 1~2초의 시간이 소요된다. 그리고 이런 프로그램들은 대체로 수집을 완료하고 나면 자신에게로 포커스를 이동시킨다. 반면 Quiet Read는 그냥 링크를 끌어다 놓으면 그만이다. 한참 작업을 한 후에 천천히 정리를 해도 되고, 필요 없으면 그냥 지워버려도 상관없다. 이 프로그램에 수백개의 링크를 저장할게 아닌만큼, 일정 기간마다 한 번씩만 보면서 중요한 것은 저장해 놓고, 그렇지 않은 것은 지우면서 목록의 수를 대여섯개 정도로 유지하면 매우 효율적이다.

실행 화면

내용 확인

클릭하면 위 그림처럼 링크를 보여주고, 오른쪽 클릭으로 메뉴를 볼 수 있다.

이전에 Keep Your Word를 단어 암기 공부용으로 구입한 후에 메일과 트위터를 통해 몇 번 피드백을 보낸 적이 있었는데, 어느날 개발자가 내게 메일을 보내서, 자신이 이번에 이 프로그램을 개발했는데, 인터페이스 번역을 해 줄 수 있겠냐고 제안을 했다. 기껏 10개 정도의 문자열만 번역하면 되는 간단한 일이기에 그러마고 약속을 했고 3분만에 번역을 완료했다. 따라서, 이 프로그램은 한글 상위에서 실행할 경우 한글 인터페이스가 지원된다. 혹시라도 번역이 마음에 들지 않거나 개선 사항이 있으면 언제든 연락을 주시길… 사실 그럴 건덕지는 거의 없어 보이긴 하지만…

국무회의 브리핑 자료 pdf 파일을 제공하기 시작

국정홍보처가 없어진 이후(사실 정확하게 말하면 문화체육관광부에 통폐합)로는 문화체육관광부에서 국무회의 브리핑 자료를 보내주고 있다. 메일 서비스를 받기는 하지만 사실 첨부된 파일에 담긴 자세한 내용에 대해 많은 관심을 갖고 읽어본 적은 거의 없고, 그냥 제목만 읽어보는 수준이었다.

국무회의 브리핑 2009-08-11

지난 8월 11일에 메일을 받았을 때 병역법이라는 제목이 눈길을 끌길래 (몇 년만에!) ‘자세히 보기’ 링크를 클릭해 보았는데, 이게 hwp 파일에 직접 링크가 걸려 있었다. 맥에서 hwp 파일의 내용을 보는 것은 매우 짜증이 나는 일이기 때문에 읽는 것을 포기했다. 그런데, 곰곰히 생각해 보니 이게 꽤 화가 나는 것이다. 전 국민들에게 읽으라고 보내주는 메일인데, hwp 파일만을 준다는건 나같은 사람은 이 내용을 보지 말라는 것과 마찬가지이기 때문이다. (정부에 대한 반감 때문에 화가 증폭되었다는 사실을 굳이 밝히지는… 쿨럭)

바로 민원을 넣었다. 국민신문고 사이트는 그래도 ActiveX 따위를 쓰거나 로그인을 하지 않더라도 이름과 주민등록번호만으로 인증을 하고 글을 쓸 수 있도록 되어 있었다.

국민신문고 민원신청 내용

글을 올리고 나서 약 2시간 쯤 후에 아래와 같은 답변을 얻을 수 있었다.

국민신문고 민원신청 결과

그냥 pdf 파일을 함께 보내도록 하겠다는 내용이다. 아래아한글 + Acrobat 한 카피만 있으면 해결되는 일이니 가장 간단하면서 동시에 효과적인 방법이기도 하다.

8월 18일자로 도착한 국무회의 브리핑 자료는 아래와 같이 hwp 파일과 pdf 파일의 링크를 모두 제공하고 있었다.

국무회의 브리핑 2009-08-18

아래아한글(의 문서포맷)에 대한 내 생각은 2년 전에 올린 ODF와 HWP, 구글과 네이버라는 글에 잘 나타나 있다. 아래아한글이 없이는 hwp 파일을 편집할 수 없고, 그래서 정부에 제안서와 같은 종류의 문서를 제출할 수 없는 현상은 여전하지만, 최소한 국민에게 전달되는 홍보 내용을 읽는 것과 관련해서는 (한글과컴퓨터가 의미있는 아래아한글뷰어 프로그램을 공개해주지 않는 한) pdf 파일을 함께 제공하는 것이 필요하다고 생각한다. 사실 국무회의 브리핑은 하나의 예일 뿐이지만, 이런 현상에 대해 적극적으로 대응한다면 조금씩이라도 이 문제가 해결되어 나가지 않을까 하는 생각이 든다. 문제의 본질을 인식하고 수정하는 것도 중요한 일이지만, 할 수 있는 작은 부분부터 바꾸어 나가는 것도 나름대로 중요한 일이니까.

정부가 제공하는 문서들을 hwp 뿐만 아니라 pdf로도 제공해달라고 지속적으로 요구를 함으로서, 문서의 변경 및 작성이 필요한 곳을 제외하고라도 최소한 읽기 전용 문서들에 대해서는 운영체제를 가리지 않고 읽을 수 있도록 변화되었으면 좋겠다.

첨언. 사실 pdf가 가장 좋은 대안은 아니다. 일반 텍스트 정보를 담고 있지 않는 한 자유로운 열람이라는 부분에서 여전히 한계를 가지고 있기 때문이다. 따라서 나는 정부가 배포하는 모든 문서는 일반 텍스트 정보를 담고 있는 txt, html 또는 odf와 같은 형식으로 배포되어야 한다고 생각한다. 다만 pdf가 이전의 방법들에 비해 의미있는 진전이라는 사실 역시 분명하다.

애플 메일에서 지메일 IMAP으로 깔끔하게 관리하기

연구소의 메일을 현재 구글 앱스로 쓰고 있다. 따라서, 가장 빈번하게 사용하는 메일이 바로 지메일이다. 이전에 사용하던 메일 호스팅 서비스에 비해 지메일은 스팸 필터가 우수하다는 점, 액티브 엑스를 쓰지 않는다는 점, 검색이 편리하다는 점 등의 많은 장점을 가지고 있기 때문에, 대부분의 연구원들이 만족하고 있다.

그리고 지메일이 IMAP을 지원히기 시작하면서부터는 애플 메일 프로그램에서 IMAP으로 메일을 관리하고 있다. 이렇게 하면서 아이팟 터치를 포함한 모바일 디바이스에서의 메일 활용도 더욱 쉬워졌다. 애플 메일 프로그램에는 MailTags, SpamSieve와 같은 유틸리티를 함께 활용하고, iCal, Things와 같은 프로그램과 쉽게 연동하면서 사용을 하고 있었다.

그런데 어느 날인가부터 갑자기 IMAP으로 관리하는 지메일 계정 때문에 문제가 발생하기 시작했다. 사실 많은 곳에서 보고되고 있는 문제인데, 어느 순간 메일 프로그램이 CPU 100%를 차지하면서 시스템을 거의 사용 불가로 만들어버리는 것이다. 최소한 내가 인터넷에서 검색을 해 본 바로는 아직 이 문제에 대한 해결책은 없는 상황이다.

덕분에, 잘 사용하고 있던 애플 메일을 버리고 (그렇다고 POP3로 돌아갈 수는 없었으니까) Postbox라는 메일 클라이언트 프로그램을 사용하기 시작했다. 이 프로그램은 선더버드의 코드를 기반으로 개발된 것으로서, 현재 베타 테스트 중이다. 물론 베타라고는 하지만 사용하는데 있어 문제가 되는 부분은 거의 없다고 볼 수 있다. 큰 문제 없이 사용할 수 있었는데, SpamSieve 플러그인을 활용할 수 없다는 점이 있었고, account/folders/favorite topics 등 세 개의 부분으로 이루어져 있는 왼쪽 사이드바 부분의 디자인이 그렇게 마음에 들지 않았다. 애플 메일에서는 모든 메일을 한 개의 inbox에서 볼 수 있는데 이게 생각보다 무척 편리하기 때문이다.

선더버드의 경우에는 안정버전인 2.x 버전 대신 베타 버전인 3.0b2를 사용해 보았다. 장단점이 Postbox와 거의 동일했다. 가장 불편한 점은 역시 왼쪽 사이드바에서 IMAP 계정은 통합 메일함으로 통합해서 볼 수 없다는 점이었고, SpamSieve 역시 안정 버전에서만 설치가 되고 베타 버전에서는 설치가 되지 않는 상황이었다.

이외에 맥에서 사용할 수 있는 몇몇 메일 클라이언트 프로그램들도 시도를 해 봤는데, 모두 조금씩 문제가 있었다. 예컨대 MailSmith는 좋은 프로그램이지만 POP3만 지원하고 IMAP을 지원하지 않았고, GyazMail은 다듬어지지 않은 인터페이스 (특히 메일 헤더 부분의 출력이 그냥 텍스트로만 이루어져 있어서 주소록 연동 등을 제대로 할 수 없는 점) 문제가 있었다. 게다가 메일 프로그램을 위해 앞의 두 프로그램이나 PowerMail같은 유료 프로그램을 써야 한다는 것에 대해서는 뭔가 찝찝한 구석이 있었다. 지메일과 애플 메일의 이상한 궁합 문제만 해결하면 그 돈을 지불할 필요가 없기 때문이다.

게다가 다른 프로그램들을 써 봐도 지메일의 IMAP 계정은 어느 정도의 문제를 지니고 있는 것으로 보였다. 즉, 애플 메일만의 문제는 아니고 지메일 자체에도 문제가 있다는 뜻이다.

그렇게 고민을 하면서 Postbox선더버드를 전전하다가 애플 메일에서 지메일 IMAP 계정을 쓰는 것에 대한 매우 상세한 내용 이 링크을 찾을 수 있었다. 그리고 이 글에서 문제 해결책을 찾을 수 있었다.

간단하게 말하면 지메일의 실험실 기능 중에 고급 IMAP 기능을 활성화해서 문제를 줄일 수 있다. 이 기능을 사용하게 되면 “라벨” 탭에 각 라벨마다 IMAP에 표시라는 이름의 checkbox가 생긴다. 여기서 전체편지함중요편지함의 체크를 풀어둠으로서 문제를 해결할 수 있게 된다. 글쓴이에 의하면 이 두 라벨이 붙어있는 메시지들은 두 번 싱크가 되기 때문에 문제를 야기할 수 있다고 한다.

이외에 내 경우에는 용량이 큰 바이너리 첨부 파일을 받는 경우가 매우 많기 때문에 환경설정-계정-고급-메시지 복사본 유지 옵션을 “모든 메시지, 첨부는 생략함”으로 바꿨다. 큰 바이너리 파일을 자주 받는 경우가 아니라면 “모든 메시지와 첨부” 옵션을 선택해도 큰 무리는 없는 것 같다.

이런 방식으로 아직까지는 별 문제 없이 메일 프로그램을 사용하고 있다.

한 가지 팁을 더 추가하자면, 위와 같은 문제가 있어서 메일 설정을 새로 해야 하는 경우라면, 일단 ~/Library/Mail 안의 모든 파일, 그리고 ~/Library/Preferences/com.apple.mail.plist 파일을 다른 곳으로 옮겨둔 후에 깨끗한 상태에서 다시 설정을 해 주는 것이 좋다. 내 경우에 위의 설정으로 바꾸고 난 후에도 제대로 반영이 되지 않아 고생을 좀 했는데, 위의 두 디렉토리를 비운 후에 다시 시도했을 때는 별 문제 없이 잘 진행이 되었다.

메일이 컴퓨터를 쓰는데 있어, 그리고 업무에 있어 얼마나 중요한지를 생각해보면 애플이든 구글이든 문제되는 부분이 말끔하게 해결되어서 이런 어려움을 겪지 않게 되기를 바란다. 그 때까지는 이런 임시 방편으로 지내야 하겠지.