@fribirdz
[[NSDeveloper alloc] initWithName:@"Just another developer"]
[[NSDeveloper alloc] initWithName:@"Just another developer"]
Apr 2nd
거의 2달만에 글을 쓰네요. 현재 전문연구요원으로 복무중인데요. 오늘부터 4주간 논산으로 기초군사훈련을 받으러 갑니다. 4/3일 오늘 입소해서, 5/1일(목)에 퇴소합니다.
사실 평균연령 계란 한판인 전문연구요원들인지라, 현역이나 산업기능요원보다 훨씬 널널하다는 이야기를 들어서 걱정은 안되네요. (걱정한다는거 자체가 현역들에 대한 반란 ㅡ_ㅡ)
4주간 병영체험 & 운동 다이어트 수련원 간다는 생각으로 다녀오겠습니다. 갔다와서는 꼭 블로깅도 열심히!!
코팟나형이 불러주신 임버즈를 위한 “훈련병의 편지”를 링크하며.. 저는 논산으로~ =3=3
Feb 19th
PHP용 OpenID 라이브러리인 Simple OpenID는 파일 1개로만 이루어진 “인증전용” Consumer 라이브러리이다. Jan Rain의 라이브러리나 기타 다른 라이브러리보다 설정과 사용이 편리해, 많은 사람들이 사용하는 라이브러리 중 하나다.
나는 주로 Jan Rain의 라이브러리를 사용했었는데, 이번 OpenID 이벤트의 관리자 페이지에서는 Simple OpenID 를 사용했다. 그런데, 이 라이브러리에는 버그가 있었다. 글쎄, 어떻게 보면 버그가 아니라고 할 수도 있겠지만…
어쨋든, Simple OpenID를 사용하면, 간혹 델리게이션된 URL에서 OpenID를 찾지 못할 때가 있다. 즉, claimed ID에서 verified ID를 가져오지 못한다. 라이브러리를 디버깅해보니, “사소한[!]” 문제가 있었다.
아래는 class.openid.php의 HTML2OpenIDServer 함수이다.
[code]
function HTML2OpenIDServer($content) {
$get = array();
// Get details of their OpenID server and (optional) delegate
preg_match_all('/
]*rel="openid.server"[^>]*href="([^"]+)"[^>]*\/?>/i', $content, $matches1);
preg_match_all('/
]*href="([^"]+)"[^>]*rel="openid.server"[^>]*\/?>/i', $content, $matches2);
$servers = array_merge($matches1[1], $matches2[1]);
preg_match_all('/
]*rel="openid.delegate"[^>]*href="([^"]+)"[^>]*\/?>/i', $content, $matches1);
preg_match_all('/
]*href="([^"]+)"[^>]*rel="openid.delegate"[^>]*\/?>/i', $content, $matches2);
$delegates = array_merge($matches1[1], $matches2[1]);
$ret = array($servers, $delegates);
return $ret;
}
[/code]
뭔가 이상하지 않는가?
사용자가 제출한 OpenID URL에서 openid 정보를 가져오기 위해 위와 같은 정규표현식을 사용했는데, 여기에서는 rel=”openid.server”, href=” “, rel=”openid.delegate”, …와 같이 속성을 쌍따옴표(“)로 감쌌다고 가정하고 있다. 하지만, 사용자들이 모두 표준에 맞추어 쌍따옴표로 감싼다는 보장이 어디 있겠는가?
내 블로그(텍스트큐브)의 OpenID 플러그인에서도 다음과 같이 홑따옴표로 델리게이션 정보를 표기하고 있었다.
[code]
<link rel='openid.server' href='http://www.idtail.com/server'>
<link rel='openid.delegate' href='http://fribirdz.idtail.com/'>
[/code]
델리게이션을 사용하는 많은 사람들이 텍스트큐브를 사용할텐데, 에러를 종종 겪었을 거 같다. 요 부분은 텍스트큐브 측에 수정을 요청하였다. 티켓으로 올라갔으니, 1.6에서는 해결되리라 보인다.
그리고, 돌아가도록 정규표현식을 아래와 같이 (무식하게) 바꿨다.
[code]
function HTML2OpenIDServer($content) {
$get = array();
// Get details of their OpenID server and (optional) delegate
preg_match_all('/
]*rel=["\']openid.server["\'][^>]*href=["\']([^"\']+)["\'][^>]*\/?>/i', $content, $matches1); preg_match_all('/
]*href=["\']([^"\']+)["\'][^>]*rel=["\']openid.server["\'][^>]*\/?>/i', $content, $matches2);
$servers = array_merge($matches1[1], $matches2[1]);
preg_match_all('/
]*rel=["\']openid.delegate["\'][^>]*href=["\']([^"\']+)["\'][^>]*\/?>/i', $content, $matches1); preg_match_all('/
]*href=["\']([^"\']+)["\'][^>]*rel=["\']openid.delegate["\'][^>]*\/?>/i', $content, $matches2);
$delegates = array_merge($matches1[1], $matches2[1]);
$ret = array($servers, $delegates);
return $ret;
}
[/code]
결과는? 내 블로그에서도 델리게이션이 잘 된다.
혹시나 Simple OpenID를 사용하시는 분은, 위 함수를 바꿔주시면 잘 돌아갈 것이다.
Simple OpenID에서도 OpenID Spec. v2.0용 라이브러리를 발표했는데, 소스를 받아보니 다음과 같이 수정을 했더라. 근데, href는 여전히 쌍따옴표(“)로 감쌌다고 가정하고 있다. -.-;;
[code]
function HTML2OpenIDServer($content) {
$get = array();
// Get details of their OpenID server and (optional) delegate preg_match_all('/
]*rel=["|\']openid.server["|\'][^>]*href="([^"]+)"[^>]*\/?>/i', $content, $matches1);
preg_match_all('/
]*href="([^"]+)"[^>]*rel=["|\']openid.server["|\'][^>]*\/?>/i', $content, $matches2);
$servers = array_merge($matches1[1], $matches2[1]);
preg_match_all('/ ]*rel=["|\']openid.delegate["|\'][^>]*href="([^"]+)"[^>]*\/?>/i', $content, $matches1); preg_match_all('/ ]*href="([^"]+)"[^>]*rel=["|\']openid.delegate["|\'][^>]*\/?>/i', $content, $matches2);
$delegates = array_merge($matches1[1], $matches2[1]);
$ret = array($servers, $delegates);
return $ret;
} [/code]
PS : 소스코드 깔끔하게 나오게 하기 힘들다 T_T 뭔가 엉키거나 인덴테이션이 조금씩 엉키네. 컴퓨터는 역시 어려워 -_-;;
Feb 18th
오픈아이디 이벤트 : http://openid.daum.net/event
OpenID 관계자들의 저녁식사 자리에서 revu의 SteveHan님이 말씀하신 작은 아이디어가 발전해서 “오픈아이디로 함께하는 인터넷 여행” 이라는 제법 큰 공동 이벤트가 열렸다.
처음에는 “각 서비스에 로그인해서 도장을 받는다. 다 받으면 선물을 준다.” 라는 간단한 아이디어로 시작했지만, 다섯 회사의 담당자들이 모여서 의견을 조율,보강, 결정해 나가는 과정은 생각보다 간단하지 않았다.
이번 이벤트를 통해 조금이라도 더 많은 사람들에게 오픈아이디의 개념과 편리함을 알리는 것이 가장 큰 목표였지만, 오픈아이디 관계사들이 처음부터 끝까지 함께 이벤트를 만들어나갔다는 것 역시 큰 소득이다.
이벤트를 준비하면서 오픈아이디의 장점을 또 한번 느낄 수 있었다. openidevent라는 그룹 오픈ID를 만들고, 담당자들을 추가했다. 관련 정보, 의견, 회의록 등은 스프링노트 그룹노트를 통해 공유했다. 그룹노트에 접근해야 하는 사람이 있다면, 그룹 오픈ID에 오픈ID를 추가하면 간단히 추가할 수 있었다. 이벤트 관리/현황툴의 로그인 역시 그룹ID 목록을 사용했다. 덕분에 별도의 가입이나 관리 없이, 오픈아이디를 통해 로그인하고 사용할 수 있었다. [footnote]글을 쓰다가 든 생각인데, 당시 관리페이지의 관리자 인증을 몇십분만에 급히 만드느라 별 생각없이, 그룹ID 목록만 가져와서 사용했다. (어짜피 몇십줄 이내로 짜긴 했지만) 그렇지 않고 그룹ID API를 사용하면 5줄 이내로 끝낼 수 있었고, 관리/추가 역시 훨씬 간단했을텐데.. 하는 생각이 든다. 라인 수가 문제가 아니라, 중복과 관리가 문제다. (몇주만 사용할 페이지라 크게 생각치 않았던 내 잘못이다.) DRY(Don’t repeat yourself) 원칙을 위배했다 흑. 역시.. 생각을 안하면 손발이 고생한다. [/footnote]
5개 참가사 모두 “오픈아이디 활성화”를 위해 자율적(?)으로 모였기에, 기획, 개발, 홍보, 디자인 등 모든 것을 내부에서 역할 분담을 통해 해결해 나갔다.
즉, 이벤트 페이지 개발은 오픈마루와 안철수연구소에서 맡았고, 이벤트 페이지와 경품(우산)의 디자인은 더블트랙과 나우온플레이에서 해주셨다. 레뷰는 경품 선정과 배송을 맡았고, 다음에서는 운영서버와 다음 Top 페이지의 배너 지원을 해주셨다.
거의 매주 이루어진 미팅은 논현동 레뷰 & 나우온플레이, 양재 다음, 여의도 안랩, 분당 오픈마루 사무실 등에서 번갈아가며 이루어졌는데, 이 또한 재미있는 경험이였다.
5개 사의 9개 서비스에서 릴레이로 일관되게 진행되는 이벤트를 만드는 과정은 쉽지 않았다. “로그인하고, 도장을 찍는다.” 는 이벤트의 기본 개념은 여전히 간단하다. 하지만, 모두 OpenID 표준을 지키고 있긴 했지만, 조금씩 미진하거나 다른, 또는 틀린 부분도 있었다.
테스트 과정에서 여러 사의 OP들로 각각의 서비스들에 대해 다양한 시나리오를 만들고 테스트를 해나갔는데, 서비스 또는 OpenID 발급서비스에서 각 서비스들의 문제점, 버그, 충돌점들이 발견되었다. 이를 해결해나가면서, 숨어있던 버그를 고치기도 했고, 국내 OpenID 서비스들간의 형식(?)을 맞추기도 했으니, 이것도 큰 의의가 있지 않나 싶다. (여전히 버그는 잠재해 있어서, 잠을 편히 잘 수가 없다. ㅠ_ㅠ)
처음에는 작게 시작한 이벤트이지만, 이벤트는 그런대로 성공적으로 흘러가고 있는거 같다. 모두의 바램대로 “처음에는 작게 시작한 이벤트지만, 이후에도 더 많은 RP(OpenID로 로그인할 수 있는 서비스 업체)들이 계속해서 참여하는 2차, 3차 이벤트가 진행되었으면 좋겠다.”
나도 오픈마루의 nainu님과 함께 이벤트 페이지 개발을 담당했는데, 생각했던 것보다 업무량이 훨씬 늘어나서 고생을 하긴 했지만, 근래에 한 일 중 가장 보람 있는 일 중 하나로 기억될 듯 싶다.
이벤트 페이지는 http://openid.daum.net/event
Jan 25th
오늘은 팀 회식. 술 대신 단체로 영화를 보기로 했다. 단체관람이다보니, 좌석을 확인하며, 붙여서 예매했으면 해서 CGV 사이트에 접속했다.
좌석은 넉넉하게 120여석이 남아 있었다. 적당한 자리를 선택하고, 신용카드 정보를 입력하고, 결제 버튼을 눌렀다.

undefined. 라는 에러메시지가 떴다. ‘어라?’ 하며, 다시 시도를 하니, 해당 좌석은 ‘이미 예약된 좌석’ 이라는 메시지가 나왔다. 다시 다른 좌석, 다시 다른 좌석. 여러번 시도를 했지만, undefined 라는 메시지 이후에는 ‘이미 예약된 좌석’이라는 메시지가 나왔다.그리고 전체 좌석도 120->116->106->.. 점점 줄어서 75석까지 내려갔다.
난 그래서, 이게 CGV의 오류라고는 생각하지 않고, 다른 회사에서 단체관람을 위해서 엄청나게 예매를 하고 있는 줄 알았다. 괜찮은 좌석을 선택할 때마다 해당 좌석은 이미 선점되었고, 전체 좌석의 수는 계속 줄어가고 있었으니까.
‘또 나같은 사람이 있구나. 엄청 빠르게 예매하고 있네 =ㅂ= 지..질 수 없는데… 내..내가 졌음’
CGV용산에서 보려고 했는데, CGV 프라임 신도림으로 목표를 바꿨다. 하지만 마찬가지였다. undefined, undefined, 이미 예약된 좌석… 뭔가 이상했다.
CGV 고객센터에 전화를 했다.
상담원 : 회사세요?
나 : 네
상담원 : 혹시 네트워크를 사용하시나요?
나 : 네? 네..네트워크를 사용하는건 인터넷을 사용한다는건데.. 무..무슨소리인지.. 내부 IP 등을 사용한다는건가요? 저..저도 컴퓨터 회사를 다니지만 무슨 소리인지 잘 모르겠는데요.
상담원 : 회사에서 접속하시는 고객분들께서 결제가 안된다는 문의사항이 많습니다. 442,443번 포트나 막혀 있거나, 방화벽 설정등으로 인해서 결제가 안될 수 있습니다. 해당 포트나 보안설정을 해제하셔야 합니다.
결국, 와이브로로 접속해 결제를 했다. 아주 잘 되더라.
그러니까, undefined라고 나오던 건, 포트가 막혀 있기 때문이였다. 443은 SSL인데 -.-;
어쨋든 예외를 제대로 생성하지도 않고 던지기만 하고, 처리 역시 제대로 안한 것이다. 더 웃긴 건, 상담원은 이 현상에 대해서 잘 알고 있다는 것. 그건, 나와 같은 경험을 한 사람들이 삽질을 하다하다 고객센터로 문의한 경우가 다반사라는 것을 말한다.
undefined 라는 말도 안되는 메시지 대신, 간단한 설명을 써준다면 많은 고객들이 삽질을 하지 않아도 될 것이다.
“회사에서 접속하시는 경우, 회사의 네트워크 보안 정책에 의해서 결제가 불가능할 수 있습니다.
다음 사항들을 확인해 보시고, 회사 네트워크 담당자에게 문의하시거나, 익스플로러 보안설정을 아래와 같이 변경해 주십시요.
만일, 변경이 불가능하다면 불편하시겠지만 전화ARS 예매를 이용해 주시기 바랍니다.”
그러니까, (아마도) 사실은 이랬다. 내가 시도하는 좌석마다 이미 예약되었다고 나온 이유는, 내가 그 자리를 예매하려고 했기 때문에 자리를 홀딩해놨기 때문이다. 아마 5-10분간 홀딩해놓는거 같다. (한 1-20분 지나니까 다시 118석으로 돌아오길래, 난 단체관람 하려던 회사에서 다 취소했는 줄 알았다) 난 그것도 모르고, 가상의 경쟁자(바로 나)와 열심히 레이싱을 하고 있던 거였다.
CGV가 FLEX기반의 예매 시스템으로 리뉴얼한 때를 2006년으로 기억한다. 이미 햇수로 3년이 지났다. ‘CGV 2.0 Beta!’도 아니거늘, 아직도 이런 문제를 ‘인지하고 있음에도’ 고치지 않는다는 것은 문제가 아닐 수 없다. CGV로도 큰 손해를 보고 있는 것이다.
Jan 18th
회사 동료가 나의 뽐뿌를 받들어 맥북 프로를 구입했다. [fn]진작 사려고 했으나, 내가 경량 맥북이 나올거 같으니 잠시 기다려보라고 했었다. 맥북 에어는 섹시하긴 하지만 동료의 라이프스타일과는 맞지 않는 부분이 있어, 맥북 프로를 권했다.[/fn] 하루만에 배송된 맥북 프로는 당연히 레오퍼드가 탑재되어 있다. 나도 아직 레오퍼드를 안쓰고 있어서, 구경도 하고 맥 사용법(?)도 알려줄 겸 이것저것 만져보다가 업데이트 된 Photo Booth를 갖고 놀았다.
새 Photo Booth(과 iChat)에는 여러가지 효과가 추가되었다. 앤디워홀 스타일의 ‘팝아트’ 효과도 있다. 가장 재미있는 것은 롤러코스터, 에펠탑과 같은 배경 효과이다. 게다가 롤러코스터 배경은 동영상이라서 더욱 신난다.
아마 단순한 XOR 연산을 사용한 거 같다. [fn] 전공이 영상처리는 아니니, 요즘 이 분야에 어떤 최신 기술들이 있고 그러한 기술들이 쓰였는지는 모르겠지만.. [/fn] 사람이 없는 빈 화면을 캡쳐해놓고, [fn] 정확히는 빈 화면(들)을 캡쳐해서 공통 부분을 적용하는 듯 [/fn] 이후에 사람이 카메라 앞에 서면 ‘이전의 빈 화면’과 비교해서 인물을 배경에 합성시켜준다. [fn] 정확히 말하자면, 인물 이외의 배경을 지워준다. [/fn]
하지만, (특히나 롤러코스터 같이 역동적인,) 배경에 합성되는 모습들을 보며 팀원들은 너무 즐거워 했다. 이건, 어려운 기술도, 복잡한 기능도 아니다. 누구든지 쉽게 생각할 수 있다. 하긴, 이미 많은 회사들에서 자사의 촬영 프로그램에 넣었을 거 같다. 너무 많이 나와서 이제는 식상한 말이기도 하지만, 어쨋든 가장 중요한 것은 사용자들에게 어떤 경험을 주느냐는 것이다. 멀티 터치 기술이 뭐가 대단한가? 이미 몇년전에 많은 이들이 시도했고, 구현했던 것이다. 하지만, 시장의 승자는 애플이였다. Wii도, iPod Touch도, NDSL도, 어려운 기술도 복잡한 기능도 아니였다.
잡스형 덕분에 몇분이나마 다 같이 웃고 즐기다가 문득 생각이 나서 두서없이 적어본다.
Jan 16th
변호사가 주인공인 드라마, 의사가 주인공인 드라마, 경찰이 주인공인 드라마는 다 있는데, 왜 유독 공대생/엔지니어가 주인공인 드라마는 없나요?
라는 애절한 목소리를 들어본 적이 있는가? [fn]물론, KAIST의 존재를 일반인에게 널리 알릴만큼 인기있었던, KAIST라는 걸출한 드라마도 있었다.[/fn]
대부분의 영화/드라마에서 과학자나 엔지니어는 약자였다. 이들, 아니 우리는 영화에서 보통 몇가지 패턴으로 등장한다. 악당에게 이용만 당하다가 실험이 성공하면 결과물을 뺏기고 살해를 당한다. 아니면, 악당의 습격을 받고 핵심자료를 뺏기고 죽는다. 또는, 자유의지 없이 그저 악당이 시키는 대로 실험만 열심히 해댈 뿐이다. 그게, 인류의 종말을 위한 무기이건 말건 말이다.
외국에는 Numbers와 같은 드라마도 나오고 있지만, 우리나라의 문화산업에서 그리는 엔지니어의 모습은 여전히 주체적이지 못하며, 조연에 불과하다. 이런 편향된 모습에 우리[!]는 때때로 상처를 받곤 했고, KLDP에서는 ‘공대생은 왜 스토리텔링의 주인공이 될 수 없는가?‘ 라는 스레드가 열리기도 했다. [fn]사실, 이 스레드의 원조는 Genesis님이다. [/fn]
[뉴욕의 프로그래머]는 뉴욕의 금융시장에서 자바 프로그래머로 살아가는 영우라는 가상의 인물이 겪는 “개발자로서의 일상”을 그린 소설이다. 몇초도 안되는 찰나에 수백, 수천만 달러가 오가는 숨막히는 현장과 여러 인종으로 구성된 다양한 개성의 개발자들, 그 안에서 벌어지는 갖가지 사건과 ‘버그’들을 그린다.
해커들은 왜 User Friendly와 같은 만화를 재미있어 할까? 공대생들은 왜 공대생 개그에 열광할까? 배경지식이 있어야 이해할 수 있는 ‘깊이’가 있는 것도 요인일테고, 테두리 안에 있는 자신들만 이해할 수 있다는 (약간의 선민의식 섞인) 점도 있을 것이다. 이 책에서 나오는 여러가지 사건들.. 즉, 급히 고쳐야 하는 심각한 버그가 튀어나왔을 때의 긴박감, 디버깅을 해나가는 과정들은 프로그래머만이 손에 땀을 쥐며 읽을 수 있다. 과연 어떤 소설책에서 이런 문장을 만나볼 수 있을까?
“이 메쏘드가 담고 있는 코드는 가격을 처리하는 쓰레드와 동일한 쓰레드에서 실행되니까 상관이 없어, 하지만 이 코드에서 익셉션이 발생했을 때 catch 구문 안에서 일어나는 일을 봐봐. 로그 메시지를 파일에 기록한 다음 메쏘드를 다시 호출하고 있잖아. 자기가 자기를 부른다는 점에서 일종의 재귀함수인 셈이지.
…
그 익셉션 때문에 동시성(concurrency) 문제가 발생하면서 이 메쏘드가 이용하는 캐시의 내용이 망가졌을 테지. 캐시 안에 담긴 데이터가 제대로 무효화(invalidate)되지 않으면서 메쏘드의 두 번째 호출이 망가진(stale) 데이터를 이용했던 것일지도 몰라. 음, 그게 맞는거 같다. 서버에 접속해서 로그 파일을 검사해보자”
이 책이 재미있는 또 하나의 이유는 주인공이 “뉴욕”의 프로그래머라는 것이다. 한국의 많은 개발자들이 한국에서 IT종사자로 살아간다는 것을 힘들어한다. 외국에서 엔지니어들이 ‘제.대.로.’ 대접받고 있는 사례들을 들으며, 부러움을 토로할 때도 많다. 이 책을 통해 뉴욕이라는 곳에서 개발자로 살아가는 사람들은 어떤 일을, 어떤 식으로, 어떤 사람들과, 어떤 대우를 받으면서 하는지에 대한 궁금증을 해소할 수 있고, 그것이 즐거움으로 다가온다.
아니, 어찌보면, 이건 자기위안의 용도일지도 모르겠다. ‘이런 환경에서, 이런 사람들과 일한다는 건 꿈같은 일이야. 이건 허구일거야. 아니면, 뉴욕이기에 가능할꺼야. 부럽다, 정말’ 라는 생각을 하거나, ‘그래. 우리나라 사람들은 역시 뭘 몰라. 우리가 이렇게 크게 대접받아야 하는 인재들인데, 인력 무서운 줄 모르고.. 나 잘 안해주면, 확 미국 가버린다!’ 뭐 이런..? (농담이다)
임백준님의 책 제목을 패러디해보자면, 이 책은 마치 “누워서 읽는 디버깅”이라고도 할 수 있다. 단지, 개발자의 일상을 소설로 그렸다고만 말하기에는 뭔가 아쉽다. 디버깅을 위해 논리적으로 버그를 역추적하는 과정을 읽으며 “아, 나는 여기까지 생각할 수 있었을까?” 라는 생각도 해보고, 논리적 흐름을 흥미진진하게 머리속에 그려보며 따라가기도 한다.
영우의 독백은, 임백준님의 독백일 것이다. 그리고 그 독백은 나와 같은 이 시대를 살아가는 한 개발자의 독백이며, 또 나보다 한 발 앞서나간 선배 개발자의 독백이기도 하다. 그래서 영우의 독백은, 머리속에서 쉽게 스쳐지나가지 않는다.
한 가지 아쉬운 점은, 책의 많은 부분이 월간 마이크로소프트웨어에 연재되었던 내용이라는 것이다. 뉴욕의 프로그래머가 마소에 연재될 때 너무 재미있어서, 연재가 안되었을 때 메일을 보내서 ‘이번 호에는 연재가 안되나요?’ 라고 물어볼 정도로 팬이였다. 그래서, 새로운 내용들이 더 많아졌으면 하는 아쉬움이 있었다.
Jan 15th
새벽 3시 10분까지 Gizmodo에서 F5누르며 기다린 보람이 있었다. MacBook Air. 역시 나올줄 알았어.
스펙은
아, 좋아 좋아.
아쉽지만 어쩔 수 없는 건,
하지만, 현실을 일깨워주는 단점들.
맥북 에어를 보면서, ODD가 없거나 USB 포트가 1개라서 망할 거 같다는 사람들도 있는데, 그건 아닌거 같다. 이건 분명히 휴대성을 강조한 “울트라-포터블”한 노트북이다. 용도 자체가 다른데. USB 포트나, 메모리카드 리더기 등의 추가적인 니즈가 필요한 사람보다는 범용적인 휴대성을 늘리는게 더 맞다고 본다. 이런 포터블 기기에서는 말이다. 그런게 필요하면, USB허브나 USB리더기를 갖고 다니면 되는거고. (그래도 이더넷은 어케 좀 해주지) ODD야 요즘 뭐 OS 설치할 때밖에 안쓰지. Remote Disc와 같은 ODD의 대안 역시 충분히 존재 하니까.
멀티 터치 인식을 통한 멀티 제스쳐를 터치패드를 강조하는 것(원래 맥북도 멀티 터치 되는걸 뭐. 굳이 강조를 하고 그러시지), 그리고 아이팟 터치와, 이번 발표의 Apple TV의 flickr 연동 등을 보면, 하나의 그림이 그려지기도 한다.
이 거만하고 뿌듯한 표정 보게나… 아저씨.. 너무 비싸다고.. 좀 깎아줘..
Jan 9th




요즘 스트라이다를 하나 살까 해서 관련 카페의 중고 장터를 기웃거리고 있다. 이 게시판의 접근 권한은 ‘게시물 목록 – 모두 보기, 게시물 읽기 – 새싹 회원 이상’ 이다. 게시물 읽기를 누르면, (당연하게도) 회원만 읽을 수 있다는 메시지가 나온다.
보통 여기까지는 대부분의 커뮤니티가 동일하다. 하지만, 거의 모든 커뮤니티에서는 이 알림 메시지를 보여주기 전에, 로그인한 사용자와 로그인 하지 않은 사용자를 구분한다.
로그인한 유저라면, 먼저 카페 가입 여부와 접근가능한 (카페) 레벨을 갖고 있는지를 확인한다. 가입한 회원이고, 해당 게시물/목록에 접근할 수 있는 레벨 이상의 회원이라면 게시물을 보여주고, 아니라면 레벨이 부족하다고 알려준다. 가입하지 않은 회원이라면, 회원 가입을 유도한다. 유저가 회원 가입을 하고 나면, 카페 첫 페이지로 이동하거나, 유저가 이전에 접근하려고 했던 페이지로 이동한다.
로그인하지 않은 유저라면, 카페 회원(또는 일정 레벨 이상의 회원)만 접근할 수 있는 영역이라는 것을 알려주고 로그인을 유도한다. 사용자가 로그인을 하고 나면, 다시 위의 “로그인한 유저” 프로세스를 따른다. 카페 회원이라면, 해당 게시물을 보여줄 것이다. 기획자의 생각이 거기까지 미치지 못했다면, 불친절하게도 카페 첫페이지로 이동할 것이다. 반면 로그인을 했는데, 카페 회원이 아니라면 회원 가입을 유도할것이다.
네이버 카페는 어떨까?
로그인을 하지 않은 유저가, 카페 회원만 읽을 수 있는 게시물에 접근하면 “카페 멤버에게만 공개된 게시물입니다” 라는 것을 알려주며, 무려 “카페 가입을 하시겠는지” 물어본다. 아니 로그인도 안했는데, 무슨 가입을 해. 난 이미 이 카페를 가입했고, 로그인만 하면 된다구. 가입이 아니라 로그인!
Confirm Dialog에서 가입을 누르면, 로그인 팝업창이 뜬다. 로그인을 하고 나면, 해당 게시물로 보내줄까? 불행 중 다행으로 로그인을 한 후에 카페 가입 페이지로 이동하진 않는다. 그저 카페 첫 페이지로 이동할 뿐.
하지만, 찜찜함은 여전히 남아 있다. 로그인하지 않은 사용자라면, 카페 가입이 아니라 로그인을 유도했어야 한다. 그 후 유저가 카페 회원이라면, 해당 게시물의 본문 페이지로 이동해야 한다. 가입을 눌러도 로그인 창이 뜨긴 하지만, 어쨋든 이 역시 정책의 오류다. 이런 기초적인 정책의 오류가 여전히 수정되고 있지 않다. 네이버 카페를 쓰면서 이 점이 초기부터 내내 거슬렸다. 너무나 당연한 문제점이기 때문에, 많은 사람들이 불만을 토로할 것이고 곧 고쳐지겠거니 하며 기다렸는데, 여전히 고쳐지지 않았다.

다음카페의 로그인 안내 페이지
[추가] 다음카페의 경우, 설명이 간결하고 구체적으로 나와있어 스크린샷을 첨부해 본다. 로그인을 해야 사용할 수 있고, 특정 레벨 이상의 카페 회원만 접근 가능하다는 것도 명시적으로 알려주고 있다. 카페 회원의 경우 바로 로그인을 하도록 [로그인 하기] 링크가 있고, 카페 회원이 아닌 경우 로그인 후 바로 가입화면으로 이동하도록 [카페 가입하기] 링크가 따로 있다.
Dec 24th
한동안 블로그를 제대로 읽지 않았다. 매일 DNA Lens에 가서 관심있는 글들을 읽긴 했지만, 올블로그는 커녕, RSS구독기 조차 제대로 열어보지 않았다.
다시 블로그를 읽어보기로 마음먹으며, 오늘은 “더 이상 업데이트되지 않는 블로그”들을 정리하기로 했다. 내가 쓰고 있는 구독기인 NetNewsWire는 (아마도 1-2달 이상) 글이 업데이트되지 않는 RSS는 갈색으로 표시된다. (참고사진 via Flickr)
더 이상 업데이트되지 않는 블로그는 읽어야 하는 글이 늘어나는 부담을 안겨주진 않지만, RSS구독기가 전체 RSS를 업데이트하는 시간에는 영향을 준다. 가져올 필요 없거나, 응답없는 (존재하지 않는) RSS를 가져오려고 할테니까. 그리고, 이는 RSS구독기의 초기 로딩 시간 (로딩할 때 Refresh All하게 설정해 두었다)에 영향을 주고, 이는 RSS구독기를 여는데 심리적 부담을 준다.
업데이트되지 않는 블로그를 정리하는 순서는 다음과 같았다.
구독목록을 정리하면서, 블로그를 단지 이전하는거라면 마지막 포스트에서 이사한다는 글 정도는 써줬으면 하는 아쉬움이 남았다. 나처럼 블로그를 다시 방문하는 사람이 얼마나 될까? 블로그에 이미지,스킨을 바꿔서 새 주소를 알려준다해도, 호스팅이 끝나면 말짱 헛 것이다. 실제로 이런 블로그들이 있었다. 또, RSS가 전문공개가 아니라면, 새 블로그/RSS 주소는 반드시 글 서두에 써야 한다. 호스팅이 끝나면, 더 이상 그 글을 볼 수 없기 때문이다.
사실 “블로그 이전합니다. RSS주소가 변경되었습니다.”라는 글을 읽어도, 이전 RSS를 지우고, 새 RSS를 추가하는 일은 번거로운 일이다. 그래서 피드버너 같은 서비스가 존재하는 것이고. 이에 대한 RSS나 RSS구독기 간의 표준이라도 만들어야 하는게 아닐까 하는 생각까지 들었다.
Nov 25th
예전에 회사 팀블로그에 썼던 글 입니다. 부족한 부분이 많아서, 누군가에게는 도움이 될 수 있도록 내용을 정리한 후에 제 블로그에 다시 올리려고 했었는데, 게으름때문에 지금까지 미뤄져 왔네요. 일단은, 예전에 쓴 글을 그대로 퍼서 다시 올립니다.
레오퍼드도 나왔고, 덩달아 여러가지 변화도 있었으니 더 미루면 정말 쓸모없는 글이 될 거 같아서요. 다음주 즈음에 노트북하드를 새로 구입하고, 레오퍼드로 갈아탈 예정이니 쓸 거리가 많이 생길거라고 봅니다.
아래 사진은 제 책상입니다. LCD 2대와 맥북이 놓여있죠. 책상 아래에는 윈도우가 깔려 있는 데스크탑이 있습니다. 오른쪽 LCD는 맥북과 연결되어 있고, 오른쪽 LCD는 데스크탑과 연결되어 있습니다. 즉, 1대의 랩탑과 1대의 데스크탑을 쓰고 있는 셈입니다. 2대의 컴퓨터를 Synergy를 통해 1개의 키보드/마우스로 쓰고 있습니다. 듀얼모니터의 생산성 향상에 대해서는 이미 많은 연구 결과들이 뒷받침해 주고 있습니다. 굳이 조엘 아저씨가 아니더라두요.
/XAzCzcSPyk.jpg” width=”600″ height=”399″ alt=”사용자 삽입 이미지” title=”" />
키보드는 3년동안 라이트 버전을 쓰다가, 얼마전 큰맘먹고 지른 해피해킹2프로입니다. 마우스는 개발도, 웹서핑도, FPS게임도 내 맘대로 움직여주는 MS 인텔리 옵티컬 1.1이고, 마우스패드는 위키북스 사장님이 선물해주신 X-Ray Thunder 8 입니다.
(쓸데없는 자랑모드-_-) 벽에 붙어 있는 것은 TextMate Cheat Sheats이고, 타이머는 Perky님 등 많은 분들이 쓰고 있는 모델이죠. 뒤에 보이는 플립시계는 C2 발표회때 받은 것입니다.
시너지는 운영체제에 상관없이 (리눅스, 유닉스, OS X, 윈도우 등), 키보드/마우스를 공유할 수 있는 오픈소스 솔루션입니다. 이미 많은 분들이 애용하고 있죠. 맥북을 시너지 클라이언트, 데스크탑을 시너지 서버로 설정했고, 당연히 키보드/마우스는 데스크탑에 연결 했습니다. 컴퓨터가 부팅되면 시너지 서버와 클라이언트는 자동으로 실행되기 때문에, 심리스하게(-_-) 사용할 수 있습니다.
윈도우와 OS X를 시너지로 연결할 때 Super(윈도우의 윈도우키, OS X의 커멘드 키)키와 Alt키가 뒤바껴 눌릴 수 있습니다. 이땐 시너지 서버의 Configure – Screen’s Edit – Modifier에서 Alt와 Super의 매칭을 바꿔주면 됩니다. OS X에서 한글 상위로 사용할 때 bus error가 날때는 이 글 을 참고하면 됩니다.
맥의 마우스 감도는 윈도우보다 많이 떨어집니다. 이를 보완할 수 있는 유틸리티나, MS/로지텍의 마우스 드라이버를 깔면 좀 괜찮아지지만, 민감한 분들은 견디기 힘들 수 있습니다. 저 역시 그래서 윈도우에 마우스를 연결했습니다. 하지만, OS X의 TextMate를 쓰는 경우에는 휠스크롤이 너무 느리게 동작한다는 문제점이 있습니다. 이는 외국에서도 몇몇 사람이 문제제기를 했으나, 아직 마땅한 해결책은 나오지 않았습니다. 이 점이 걸리신다면, 맥을 시너지 서버로 사용하는게 좋습니다.
맥에는 TextMate라는 쿨-한 편집기가 있습니다. TextMate를 쓰기 위해 맥을 쓴다는 사람들이 있을만큼, 말 그대로 “The missing editor”라고 불릴만 합니다. 루비 온 레일스의 스크린캐스트 덕택에 더욱 유명해졌지요. 저 역시, 블로그 15분 만들기를 보고 사게 되었으니까요.
하지만, 한글을 제대로 표현해 주지 않는 등의 문제가 있습니다. 2바이트 언어권 문제는 레오퍼드 이후에 해결될 예정이니, 그 동안은 별도의 한글 글꼴을 사용해야 합니다.
TextMate에 대한 글들은 이곳과, Official Website의 Screencast를 보면 되겠습니다.
펌핏과 IDTail은 APM(Apache, PHP, Mysql) 환경에서 개발되었습니다. 윈도우/리눅스에서 이를 APM이라 한다면, 맥에서는 앞에 Mac을 붙여 MAMP라고 합니다. 윈도우에 APM Setup이나 Autoset과 같은 APM통합 설치/운영이 있듯이, 맥에도 이러한 통합 솔루션이 있습니다. 가장 널리 사용되는 것은 MAMP와 XAMPP입니다. XAMPP는 Linux, Solaris, Windows 버전도 있지요.
MAMP가 가장 편리합니다. Cocoa기반의 GUI Tool도 제공이 됩니다. 자세한 설정사항은 정목님의 블로그를 참고하세요. MySQL 최신 버전을 사용하시려면 MAMP 1.5b를 받아야 합니다. 전 Mysql/Apache의 Port를 Default Port로 변경하고, htdocs 위치를 변경하고 다른 설정은 건드리지 않았습니다. (물론 아파치 설정은 조금 바꿨지요) mysql.sock 위치를 변경하는게 번거로워서 그냥 /var/tmp에 심볼릭 링크를 만들어 쓰고 있습니다.
하지만, MAMP는 SSL을 지원하지 않습니다. 잠깐 찾아보니, MAMP에서 사용하는 Apache는 SSL이 붙을 수 없는 빌드라고 합니다. IDTail에서는 ssl을 사용하기 때문에 제 환경을 XAMPP로 바꾸고 있습니다.
루비 온 레일스로 블로그 15분 만에 만들기 에 등장했던 공개SW CocoaMySQL도 너무 예쁘고, 편리한 MySQL 관리 툴이지만, MySQL ‘공식’ 제공 툴이며, OS 상관없이 쓸 수 있는 Mysql GUI Tools를 쓰고 있습니다.
개발을 사파리로 하고 있진 않습니다. 듀얼모니터의 이점을 살리기 위해서 입니다. 또, 맥에서 Firefox가 너무 느리고, 버그도 많아서 제대로 쓸 수도 없구요. 맥북의 LCD에는 메신저, 터미널, 콘솔, Query Browser, SVN Client 등을 띄워놓구요. 왼쪽 LCD는 TextMate를, 오른쪽 LCD(윈도우 머신)에는 firefox를 띄워놓습니다. firefox에 firebug, Web Developer를 깔아놓은 건 당연하지요. (아 이녀석들 없을 땐 대체 어떻게 개발했었는지.. 아찔합니다. -_-)
OS X를 처음 설치하면, Subversion은 1.2.x가 깔려 있습니다. 1.4.3을 사용하려면 직접 빌드하거나, OS X용으로 빌드된 녀석을 찾아야 합니다. Fink로도 최신버전을 찾을 수 없습니다. 미리 컴파일 후 패키징된 것을 까는게 편합니다.
터미널에서 작업하는게 더 명료하지만, 아무래도 귀찮죠. SvnX라는 괜찮은 SVN GUI Client가 있습니다. 커밋 계획을 ‘스마트 뷰’로 보는게 특히 편리합니다. 하지만, 한글 Log를 남기면 깨지는게 단점입니다. Zig Version이라는 맥답게 심플한 프로그램도 좋습니다. 한글도 깨지지 않아요. 하지만, diff에 연결할 에디터를 고를 수 없는 등의 단점이 있습니다. 몇몇 다른 클라이언트들도 있지만, 인터페이스가 복잡하고 좀 무겁습니다.
TextMate를 쓴다고 해도 vi를 안쓸 수는 없겠죠. SVN과 마찬가지로 OS X를 처음 설치하면, vim 6.2가 깔려 있고 vim.org에서 맥용 vim 7.0을 공식 지원하진 않습니다. 이곳에서 파일을 받으면 됩니다. 따로 빌드해도 되구요. 아니면, 여기서 vim7.0.188-univ.tar.bz2 를 받고 적당한 곳에 복사를 하고, alias vi=”/Applications/OA/Vim.app/Contents/MacOS/Vim” 와 같은 식으로 추가해서 써도 되겠죠.
사실 맥으로 개발한다고 해서 완벽한 웹표준, 완벽한 크로스브라우징을 지키고 있진 못합니다. IDTail역시 사파리에선 깨지는 페이지들도 아직 남아 있구요. 차차 개선해 나가야지요.
맥으로 처음 웹 개발을 해보면서 겪었던 삽질들도 앞으로 하나씩 써보겠습니다. 맥이라서 해야했던 삽질도 있겠지만, 제가 잘 몰라서 했던 삽질들도 많겠죠. 어쨋든, 저처럼 무식한 삽질을 하는 분들을 한분이라도 막기 위해서 (흑흑… 있긴 있을까) 글을 써봅니다. 아, 벌써 9시가 다되가네요. -_- 집에 가야지