Git Guide

우리회사에서는 지금까지 계속 svn 을 써 왔었다. 사용하다 보니, 깔끔하지 못한 문제들이 있었다. 예를 들면,

  • 리포지토리가 완전한 상태로 유지 되지 않았다. 즉, 전체가 공통으로 관리하는 리포지토리 였지만, 임시로 커밋을 해 둔다던지, 한쪽 작업을 다른쪽과 싱크시키기 위해서 리포지토리를 사용한다던지 그런 이유에서 메인 트렁크가 항상 불안정한 상태로 있을때가 많았다. 메인 리포지토리를 체크아웃해서 빌드를 하면 빌드가 되지 않는 경우 허다했다.
  • 또한, 반대로, 위와 같은 경우 때문에, 오히려 메인 리포지토리에 커밋을 하지 않는 경우도 많았다. 왠만해서는 커밋을 하지 않고, 나중에 한꺼번에 해야 겠다는 생각에, 모두가 로컬에서만 작업을 하고, 나중에 한번에 커밋을 했다. 그래서, 커밋에서 충돌이 너무 복잡해 져서 골치꺼리가 되는 경우도 많았다.
  • 브랜치는 거의 이용하지 않았다. 브랜치란 완전히 새로운 프로젝트를 시작하는 수준과 같은 엄청나게 큰 일이었다.

물론, svn 도 잘 사용했으면 되겠지만, 이참에 소스코드 관리에 대한 새로운 방법론 도입이 필요하다 생각했었다. 그래서, 아무래도 최신 유행에 따르다 보니, git 를 사용해야 겠다고 생각이 되었다. github 가 대세이거니와 대부분 책이나 블로그에서도 git 를 기준으로 이야기를 하였다. 그래서, 우리도 git 로 가는 것이 바른 방향으로 인식되었다.
최근에야 git 를 본격 사용하다 보니, 낯설었다. 그나마 손에 익었던 svn 으로 돌아가고 싶은 생각도 들었다. git 의 개념도 잘 익혀지지 않았고, 명령어도 익숙하지 않았다. 그래서 그간 공부한 내용을 정리해 보았다.
그리고, 하나더, 최근 유행에 따라, git flow 와 gitosis 부분도 적용해 보았다. git flow 는 git 의 장점인 브랜치를 적극 활용하여, 원활한 프로젝트 중 소스코드 관리를 가능하게 하고, git flow 툴을 이용하여 이러한 방법론을 손쉽게 적용하도록 도와준다. gitosis 는 unix 의 사용자 권한이 아닌, 인증서를 통해서 권한 관리를 하여, git 하나의 사용자 계정으로 내부적으로 접근 관리를 하기 때문에, 훨씬 수월하게 접근 권한을 관리할 수 있게 해 준다.
이 페이지에서 간단히 정리한 문서를 찾을 수 있다. 이번에도 역시  PDF 파일은 아이패드에서 읽이 좋은 사이즈로 만들어 보았다.

sshfs NFC patch

최근에 fuse 에 관심을 가지게 되어서, sshfs 를 맥에서 사용하게 되었다. 내 사무실에는 아이맥을 메인으로 쓰고, 뒷편에 우분투 리눅스가 있다. 아이맥은  1TB 의 하드 디스크에 거의 업무용 파일만 있지만, 우분투 리눅스에는 8TB 의 하드디스크에 비업무용(?) 파일들로 가득 차 있다. 평소에는 이 우분투에 있는 파일중 일부를 아이맥이나 아이패드에 옮긴 다음, 소비(??)를 했는데, sshfs 를 테스트 삼아 사용해 보다, 너무 편리하다는 생각이 문득 들었다.
사실 Transmit 에도 자체적으로 sshfs 기능이 살짝 녹아 들어 있었지만, 사용을 가로막은 것은 바로 한글, 정확히는 NFC <=> NFD 의 문제 였다. 같은 유니코드라도, 대부분의 OS 에서는 Composed 형태로 파일명을 유지하고, 오직 Mac OS X 에서만 Decomposed 형태로 파일명을 처리한다. 문제는, 리모트(네트워크)로 타OS 의 파일 시스템을 접근 할 때에도, Mac OS X 은 강제로 접근 할 때, decomposed 형태로 변환한 다음 접근을 시도한다. 그래서, 멀쩡이 눈에 보이는 파일을 접근 할 수 없다는 문제가 발생한다. 결론은, 한글 파일을 열지 못하고, 한글로 된 폴더를 열 수 없다.
궁극적인 해결 방법은 sshfs 가 사용하는 libfuse 를 패치하여, 모든 libfuse 가 사용하는 애플리케이션들이 문제가 없도록 해야 겠지만, libfuse 를 손대는 것은 너무 방대한 일이라 엄두가 않났다. Macfuse 프로젝트 웹페이지는 해당 문제에 대한 문제점 인식은 정리가 되어 있다.
일단 간단한 해결책으로 sshfs 를 패치해 보려고 시도를 했다. github  에서 fuse4x 에서 사용한 sshfs 코드를 분기한 다음, path 부분을 접근하는 영역을 찾아서, Normalize 시켰다. 한글 파일 열기가 가능해 졌고, 한글 폴더에도 들어가 졌다. 일견 해결된 것 같은 모습을 보였지만, 쉽지 않은 문제가 발생했다. 한글 파일이 있는 폴더 안에서는 자꾸 리프레시가 일어나서, 아래쪽으로 스크롤다운 해도, 다시 위쪽으로 복귀가 되는가 하면, 한글로 된 폴더 안으로 들어가면 5초후 다시 상위폴더로 돌아가버리는 문제가 발생하였다.
관련된 문제에 대해서 osxdev 에도 포스팅 하였다.
위 문제는 파인더가 .DS_Store 파일을 생성하려는데, 생성이 되지 않아 발생하는 문제로 파악되어서, 파인더쪽의 옵션을 주는 것으로 해결하였다. 아래 명령을 통해서 네트워크로 마운트된 볼륨에 한해서, .DS_Store 파일을 만들지 않게 하는 옵션이 있는데, 이를 이용하면, 해당 문제가 발생하지 않는다.

defaults write com.apple.desktopservices DSDontWriteNetworkStores true

깔끔한 해결책은 아니지만, 일단 사용가능한 수준까지는 왔다. 일단, 본 문제에 관해서는 여기까지로 하고 접는다.
 

존 글렌지를 만나다

사실 아는 사람만 아는 존 글렌지.
DSCF0819
매년 WWDC 를 참석하면, 행사중 Keynote 다음으로 가장 하이라이트는 단연, ADA(Apple Design Award) 이다. 이때, 단상에서 멋지게 진행을 해서, 항상 우러러마지 않는 인물이 있는데, 이분이 바로 존 글렌지이다. 또한, 알려진 바로는, UI 에 대한 내공이 대단한 것으로 알려져 있다. 일단 ADA 에 수상하는 앱을 선정을 10년이상 해 왔기때문에 엄청나게 많은 앱들을 봐오며 느낀 점만 해도 어마어마 할 것이다.

이번 Tech Talk in Seoul 2011 에서, LingoStar 님이 UI 컨설팅을 받는 동안, 꼽사리로 껴서, 사진한장 찍게 되었고, 사진은 가문의 영광으로 간직할 예정이다.

Cloud 정리

국산

Daum Cloud

  • 무료 용량 : 50GB
  • Windows / Mac / Linux / iOS / Android 앱 지원
  • Sync 방식

장점

  • 손쉬운 폴더 공유 기능
  • Mac / Linux 전용 앱 지원.

단점

  • 동영상 파일은 올라가지 않는다.
  • 추가 용량을 판매하지 않는다.

N-Drive

  • 무료용량 : 30GB
  • Windows / Mac / iOS / Android 앱 지원
  • Mount 방식

uCloud

  • 무료용량 : 50GB (올레 인터넷/올레 모바일 이용자에 한함)
  • 100GB / 5,000원/달
  • 300GB / 15,000원/달
  • Windows / Mac 앱 제공
  • Sync 방식

U+Box

  • 무료용량 : 10GB
  • U+고객 : 15GB
  • Lite : 200GB / 3,000원/달
  • Pro : 800GB / 10,000원/달
  • Windows / iOS / Android 대응
  • Mount 방식

장점

  • 동영상 변환 기능 (자동, 수동, 고해상도, 저해상도) 동영상을 서버에 올리고, 각종 모바일/TV 에서 감상하는 것이 가장 이상적인 사용 방법.
  • 사용해 보지 못했지만, 잘만 된다면, U+TV 와 연동해서 동영상을 볼 수 있다면, 좋은 기능일 듯 한 느낌.

단점

  • Mac 전용 접속기 없음. 즉, Mac 사용자는 거의 쓸 일이 없음.
  • 회원간 공유기능 없음.
  • 웹오피스 : Think Free Office 를 붙여 놓았음. 정말 사용하라는 의도인지는 모르겠지만, 장난이 지나치심.

해외

Dropbox

  • 무료 용량 : 2GB
  • Pro 50 : 50G / $99.00 / year
  • Pro 100 : 100G / $199.00 / year
  • Teams : 1TB+
  • Windows / Mac / Linux / iOS / Android / BlackBerry 등폭넓게 지원

장점

  • Open API 를 통해서, 연동 되는 앱들이 많음.
  • 즉, Dropbox 를 쓸 수 밖에 없는 다양한 이유가 있음. iPad 의 GoodReader 는 Dropbox 를 지원한다. 그래서, 데이타를 Dropbox 에 넣을 수 밖에 없다. 1Password 역시 마찬가지.

box.net

  • 무료용량 : 5GB
  • 25GB / 9.99$/month
  • 50GB / 19.99$/month

iCloud

  • 파일 개념 보다는, 애플리케이션 공유라는 말이 더 적절
  • 사진 / 일정 / 연락처 등을 모든 디바이스와 연동하기 위한 수단
  • 파일은 그 중 일부분에 불과

장점

  • iOS / Mac 과의 원활한 연동
  • 특히 iWorks 와의 연동

Cloud Service – 총정리

LingoStar님께서, Cloud를 초간단하게 정리를 해 버렸는데,
“돈을 집에 쌓아두고 있지 않는 것처럼, 이젠 Digital Asset도 자신의 HDD에 두는 시대는 끝난것 같다.”
요즘 눈에 띄눈 Online Backup 혹은 Share 서비스들이 많다.

DropBox

백업보다는 Share가 강한것 같다. 특히 여러대의 Mac 혹은 PC를 가지고 있는 경우, 서로 Sync 시켜주는 기능이 막강하다. 한쪽에서 업데이트가 되면, 다른 한쪽에 즉각적으로 반영이 된다. 특히 여러사람이서 서로 공유하는 폴더를 만들고, 공동으로 작업할 때에도 유용하다. 2G까지는 공짜, 1년 99$에 50G를 준다. 나쁘지 않은 듯 하다.
아직은 2G로도 충분히 공유를 즐기고 있다.

DropBox의 단점

  • 대량파일(대략 1G)을 업로드할 때에는 시간이 상당히 많이 걸린다. 하지만, 10M단위의 파일은 빠르다.

Mozy

Share보다는 Backup 쪽으로 촛점을 맞춘 듯하다. 2G까지는 공짜, 한달에 4.95$를 내면, 한대의 컴퓨터에 대해서 무한대의 백업을 보장한다. 한대의 컴퓨터에 몇G의 자료가 있는지는 상관하지 않는다. 더구나, 외장하드까지 지원한다. 하지만, 그 하드에서 지워진 파일은 최대 30일까지 보관하고 삭제한다. 즉, 자신의 컴퓨터에 있는 자료를 고스라니 Mirroring 한다고 생각하면 된다. 일반적으로 한 사용자가 많아봐야 1T급을 가진다고 해도 그리 남지 않는 장사는 아닌듯 하다. 그리고, 백업한 내용은 다시 복구가 가능한데, 웹에서 다운로드를 받을 수도 있고, 전용프로그램으로도 가능하고, 재밌는 것은 DVD로 받을 수도 있다.
잘 생각해보면, 맥에서 TimeCapsule 보다 나을 수도 있다. 전용기기를 구비할려면, 1T에 55만원 상당이나 55만원이면 4년이상 Mozy서비스가 가능하다. 또한 TimeCapsule내의 HDD가 4년이상 안전하다는 보장도 없으니, 적어도 Mozy가 더 안전하게 보관할 듯 하다.

Mozy의 장점

  • Spotlight 검색 결과를 통해서 Backup 항목을 선택할 수 있다.

Mozy의 단점

me.com

1년에 99$를 내면, 20G의 공간을 준다. 그리고 맥사용자끼리는 어느정도 공유도 가능하다. 하지만, 여러모로 봤을때, 위 서비스 보다는 못하다. 하지만, me.com 이 단지, 이것만은 아니고, 애플의 다른 서비스와 연계된 점도 고려해 볼 만하다.

box.net

1G를 일단 공짜를 주고, 월 7,95$에 5G를 준다.19.95$에 15G를 준다. 전용 어플리케이션은 없으며, 웹으로만 사용이 가능하다. Mozy가 가진 백업의 기능과 Dropbox가 가진 Share의 기능을 둘다 지원한다고 볼 수 있다. 하지만, 제공해주는 공간이 짜고, 전용 어플리케이션이 없다는 것으로 아직은 선택하기 어렵다.

iDrive

1년 49.50$에 150G를 준다고 하니, dropbox에 비하면 많이 싸다. 그리고 기본 가입으로 2G를 주지만, 자신의 이메일 계정을 통해서 주소록에 등록된 사람에게 초대만 하면, 10G를 추가로 줘서 12G가 된다. 공짜중에는 최강.

SyncFolder

한국 서비스라는 점에서 주목할 만하다. 하지만, 메뉴상에 보이는 바로는 500MB까지 지원을 하고, Share기능도 coming soon으로 나온다. DropBox보다 더 매력적인 제안이 나온다면, 좋겠다는 생각이다.

ubuntu + fuse + sshfs 사용하기

FUSE 는 참 재미난 놈이다. 기본적으로는 kernel level 의 file system 관련 부분을 user space 에서 접근 가능하도록 하는 것인데, 쉽게 말하면, 새로운 파일 시스템을 만들려면, 커널 차원에서 만들어야 하지만, 이게 쉽지가 않다. 그래서, 새로운 파일 시스템을 만드는 작업은 만만치 않은 일이다. 하지만, fuse 는 이러한 커널차원의 일을 일반 응용프로그램을 만드는 user level 에서 접근 가능하도록 하여서, 손쉽게 새로운 파일 시스템을 쉽게 만들게 해 준다. 스크립트언어로 바인딩도 많이 되어 있어서, python, ruby, perl 등으로 쉽게 새로운 파일 시스템을 만들 수 있다.
예를들여, youtube 를 파일 시스템 처럼 접근 가능하고, flickr 도 파일 시스템으로 접근 가능하다. 가장 많이 사용되는 것은 ssh 를 파일시스템으로 접근하는 것인데, 이것이 sshfs 이다. fuse 를 이용해서, 마치 sftp 로 마운트 된 것 처럼 만들어 준다.
이게 참 좋다고 생각만 하고 있었는데, 사실 잘 쓰지는 않았다. 이번에 ubuntu 에서 쓸려고 하니 문제가 생겼다.

sudo sshfs username@hostname.com:/path/to/mount /local/mount/path

위와 같이 하면, mount 가 된다. 하지만, ls를 해 보면

d?????????   ? ?      ?          ?                ? /local/mount/path

위와 같이 이상하게만 나온다. 문제는 sudo 를 통해서 root 권한으로 mount 하면, root 사용자만 접근 가능하다는 것. 그래서 해결 방법을 검색을 통해서 찾았다.

sudo sshfs -o allow_other username@hostname.com:/path/to/mount /local/mount/path

이제, 문제 없이 마운트 되고, nautilus 에서도 잘 보인다.
아직 한가지 남은 문제는, 시간이 지나면, 접속이 끊어지고, 다시 자동으로 붙지 않는 다는 것이다. 그럼 프로세스를 죽이고 하는 더러운 짓을 해야 한다.
update>
이런 바보같은 포스트가 다 있나! 오늘 sshfs README 를 읽는데, 한문장이 나왔다.

Note, that it’s recommended to run it as user, not as root. For this to work the mountpoint must be owned by the user.

대체 처음에 왜 sshfs 를 할 때, sudo 를 했었는지 기억이 안난다. 그래서, 문득 그냥 해 보니깐, 잘된다!

sshfs username@hostname.com:/path/to/mount /local/mount/path

황당한 애플의 리뷰

우리회사에서는 80맞고라는 모바일 고스톱 게임을 만들어서, 안드로이드용으로는 벌써 올렸고, iOS 용으로는 이번에 심사를 올렸다.
이번에 심사거부가 되면서 Review 노트가 왔는데, 좀 황당하다.
app-review2
내 해석이 틀리지 않다면, 첫 화면에는 분명히 18세 이상으로 써 있는 것 같은데, 현재 앱의 등급은 12세 이상으로 되어 있다. 맞추기 위해서 17세 이상으로 맞추어서 앱 리뷰를 신청하라는 뜻이다.
app-review1
그리고 위 화면을 첨부하였다.
위 화면은 국내 게임 등급 위원회에서 권고한 것으로, 사행성 내용이 포함되었기 때문에 18세 이상 마크가 붙은 것이다.
다 좋다. 하지만, 문제는 iTunes Connect 에서 애플의 등급표를 가지고, 17세 이상으로 맞추려면, “Sexual Content or Nudity” 항목을 Frequent / Intense 를 선택해야 한다. 없는 것을 있다고 주장할 수는 없는 노릇이다.
현재는 나름 발영어로 위 상황을 설명하는 내용을 보냈다. 그쪽에서 주장을 굽혀줄지는 의문이다. 현재 상황을 지켜보고 있는 중이다. 하지만 황당한 것은 황당한 것이다.
update>
애플에 위와 같은 내용으로 Resolution Center 에 Reply 메시지로 보냈다. 발영어로… 놀라운 것은, 받아들여 줬다는 것이다. 나는 내 영어를 이해했다는 것으로도 감격스럽다. 아래는 돌아온 메시지.

Thank you for providing us with this information. We are proceeding with the review and will update you with further status as soon as we are able.

그리하여, 80맞고 앱은 앱스토어 등재에 성공하였다. 다만, 한국 앱스토어에는 올라갈 수가 없다. 그 외 국가에만 올라갈 수 있다. Simulated Gambling 이 Frequent / Intense 로 선택하는 순간 한국 앱스토어에는 등재할 수 없다고 경고가 이미 뜬다. 현재 한국 앱스토어에는 위 체크를 하지 않고, 다행히 리뷰를 통과한 고스톱류 앱들이 몇개 남아있긴 하다.

 

In App Purchase GuideBook

오늘의 잉여짓. In App Purchase 의 가이드북을 작성하였다. (사실은 거의 번역하였다.)
두가지 이유에서 였다.
요즘 나이가 들면서, 뭔가 한가지를 하면 그것이 남지가 않는다. 한참 책을 읽고 그것을 소화했다고 생각했지만, 뒤돌아서면 다 잊어 버린다. 예젠에도 기억력은 안좋았기 때문에, 그때도 그다지 기억하고 있지 않았겠지만, 요즘은 나이가 들면서 점점 자신이 없어지는 것이 더 큰 문제다. 한번 했던 일인데도, 그것이 기억이 나지 않고, 그래서 두번째 할 때에도 첫번째와 똑같은 과정을 반복해야 하고, 그래서 더더욱 새로운 것을 하는 것이 두려워 진다.
그래서, 이참에 컨닝북을 만들어야 겠다는 생각이 들었다. 한번 할 때, 한번 하는 과정을 쭉 정리한 다음, 다음 할 때에는 그것만 보고 쭉 따라하면 되도록 하는 것이다. 그럼 다음부터 그 일을 하는 것이 두렵지 않을 것 같다.
또 한가지의 이유는, 요즘 eBook 을 많이 읽으면서, 컨텐츠를 만들고 싶다는 생각이 많이 들었다. 첨에는 킨들로 책을 읽으면서, 한글로된 킨들 책이 있었으면 좋겠다는 생각에서 시작해서, 안되면 나 라도 좀 만들어보자는 생각이 들기 시작했다. 하지만 책을 쓴 다는 것은 만만치 않은 일. 그래서 뭐든 컨텐츠만 있으면 한번 시도해 봐야겠다는 생각이었다.
Pages 로 먼저 작성을 하고, Export 메뉴를 통해서 eP                                               ub 파일을 만들고, Calibre 프로그램을 이용해서 mobi 파일을 만들었다. PDF, ePub 파일은 볼만한데, 아직 mobi 파일은 많이 별로다. 다양한 포맷의 eBook 을 만드는 것도 만만치 않은 일이구나 느꼈다.
PDF 파일은 iPad 에서 잘 읽을 수 있는 B5 포맷으로 하였다. 그러니 제법 쓸만한 포맷이 되었다. 최초의 의도는 킨들에서 잘 읽을 수 있는 책을 만들고 싶었는데, 결국은 iPad 에서 가장 좋은 포맷이 되었다.

이승기

어제 사무실을 퇴근하면서 깜짝 놀랬다. 나는 누군가 나를 위해 깜짝 공연이라도 하는 줄 알았다.
DSCF0761
사무실을 나서는 순간, 눈앞에 대형 스크린에서 공연이…
DSCF0763
재빨리 나가보니, 대형 홍보 트럭이 시끄럽게 음악을 틀고 길이 막혀서 서 있던 중
DSCF0764

삼합

이번 주말에 먹은 메뉴는 삼합. 전라도 지방에서는 이렇게 잘 먹는다는데, 나는 태어나서 처음 먹어 봤다.
DSCF0751
관자와 소고기와 묵은지와 김이 은근히 어울린다.
DSCF0753
역시 고기는 삿포로 맥주와 함께
DSCF0755