2008-05-09

[도서리뷰] 생각이 차이를 만든다

뛰어난 리더들의 공통 특성

GE의 잭 웰치, P&G의 A.G. 래플리, 레드헷의 봅 영, 이베이의 메그 휘트먼, 포시즌스 호텔의 이사도어 샤프, 인포시스 테크놀로지의 난단 닐레카니 등 산업계의 스타 CEO들, 노벨 경제학상을 수상한 마이클 스펜스, 20세기 최고의 경영학 구루로써 칭송받는 피터 드러커와 같은 대가들이 어떤 문제에 대한 해결책을 생각하는 과정에 공통적으로 나타나는 특성이 있을까? 만약 그런 특성이 있다면 그것을 체계화하고 다른 사람들도 그런 특성을 배우도록 할 수는 없을까?

이 책의 저자는 이런 질문에서 출발하여 6년간 50명이 넘는 탁월한 리더들을 인터뷰한 후, 그들은 '통합적 사고'라는 두 가지 완전히 상반되는 아이디어를 동시에 생각할 수 있는 성향과 능력을 공통적인 특성으로 가지고 있음을 밝혀냈다.

그러면, 뛰어날 리더들이 가지고 있는 통합적 사고방식과 전통적인 사고방식은 어떻게 다를까?


통합적 사고방식 vs 전통적인 사고방식

사람의 의사결정 과정은 돌출요소-인과관계-구조-해결의 네 단계로 나누어진다. 의사결정에 중요하다고 생각하는 일련의 돌출요소를 파악하고, 그런 요소들 간의 '인과관계'에 대한 사고 모델을 만들며, 인과관계들을 특정한 결과를 만들어 낼 수 있는 구조로 배열한 다음, 현안에 대한 '해결'에 이르게 된다. 가령 여행계획을 세우기 위해서는 여행계획을 결정하는 데 영향을 주는 교통수단, 숙소, 활동, 비용, 음식 등의 돌출요소를 파악하고, 활동과 교통수단, 숙소와 음식, 교통수단과 비용 등 돌출요소 간의 관계를 이해해야 한다. 그런 후에는 교통수단, 숙소, 활동 등 가능한 돌출요소의 옵션들을 이렇게 저렇게 조합함으로써 구조를 파악하여 하나의 여행계획을 만들어낼 수 있게 된다. 그리고 이렇게 만든 다수의 여행계획 중에 하나를 선택하게 된다. 해외여행을 세워 본 사람이라면 정해진 예산 범위를 유지하면서 다양한 욕구를 충족시키는 여행계획을 세우는 일이 여간 복잡한 일이 아님을 알 것이다. 이런 복잡한 의사결정을 해야 하는 경우 전통적인 사고방식은 돌출요소들을 가능한 줄이고 단계별로 나누어서 생각하는 것이다. 하지만, 통합적인 사고는 다음과 같은 점에서 전통적인 사고방식과 차이가 있다.

첫째, 돌출요소에 대하여 좀 더 폭넓은 관점을 가지고 더 많은 특징을 돌출요소에 포함시킨다. 가령 가족여행에서 가족들의 만족, 안전, 교육효과 등 더 많은 요소들을 생각해볼 수 있다.

둘째, 통합적으로 사고하는 사람은 여러 방향의 비선형적인 인과관계를 검토하는 도전을 겁내지 않는다. 무조건 비싸다고 좋은 것은 아니므로 가족들의 만족도와 비용은 비선형적인 관계를 가질 것이다. 물론 계획을 세우는 데는 골치아프겠지만, 비선형적인 관계까지 고려함으로써 여행을 다녀온 후에 만족도는 더 높을 수도 있을 것이다.

세째, 통합적을 사고하는 사람은 문제를 여러 부분으로 나누어서 각 부분을 독립된 별개로 생각하지 않는다. 오히려 개별적인 부분을 해결하는 동시에 전체를 시각화한다. 비행기 시간을 결정하는 것은 특별한 이벤트에 참여할 수 있느냐 없느냐에 대한 결정에 영향을 미칠 수도 있는 것처럼 전체 문제를 한꺼번에 생각하는 것은 복잡하지만 포기하지 않는다면 상당히 유용한 결론에 이를 수 있다.

네째, 불쾌한 트레이드오프를 받아들이지 않고 언제나 긴장에 대한 창의적인 해결을 추구한다

통합적 사고방식의 차이를 좀 더 명확히 이해하기 위해, 포시즌스를 31개국에 75개의 호텔을 가진 업체로 성장시킨 이사도어 샤프의 사례를 들어보자. 1960년대 호텔사업에는 두 가지 모델이 있었다. 하나는 객실 수가 200여 개 남짓하고 불편하지 않을 정도의 편의 시설을 가진 모텔이고, 다른 하나는 750여 개의 객실에 회의실과 각종 식당, 연회실, 피트니스 센터 등 아주 다양한 편의 시설을 갖춘 호텔이다. 전자는 편안함과 친밀함이 장점이지만 비즈니스 여행객들의 마음을 얻지는 못하는 반면 후자는 시장이 요구하는 편의 시설을 갖출 만큼 충분한 수입을 창출했지만 차갑고 비인간적인 장소라는 이미지를 버릴 수 없었다. 의사결정은 이 둘 사이에 하나를 선택하여 사업을 확장해가는 것이었다. 하지만, 이사도어 샤프는 두 가지 모델 중에서 하나를 선택하지 않고 함께 고려하여 창의적인 해결을 추구했다. 즉, "소규모 호텔의 매력과 대규모 호텔의 장점을 결합"시킬 수 있는 중소 규모의 호텔을 생각한 것이다. 이렇게 하기 위해 가장 결정적인 문제는 고급 호텔보다 훨씬 적은 객실 수로는 그에 맞먹는 편의 시설을 운영하는 데 필요한 비용을 감당할 수 없다는 것이다. 하지만, 그는 이런 기존의 경제논리를 이렇게 탈피했다.

"차원이 다른 서비스를 제공한다면 상당한 프리미엄 가격을 부과할 수 있을 것이고, 그 결과 최상의 편의 시설을 감당할 수 있을 만큼 객실 당 수입도 증가할 것이다."라고 생각하고 24시간 비서 서비스, 크고 조명시설이 잘 된 책상, 24시간 룸서비스, 야간 구두닦이 서비스, 드라이클리닝, 다림질 등 집이나 사무실에 있는 것 같은 느낌을 주는 서비스들을 호텔업계 최초로 제공하여 대성공을 거두었다.

이사도어 샤프는 어떻게 이런 혁신적인 의사결정을 할 수 있었을까? 일반적인 사람들의 의사결정 과정과 어떤 점이 달랐을까? 그건 바로 고객을 철저히 연구함으로써 다른 사람들이 생각하지 못하는 돌출요소와 인과관계를 파악한 것이다. 일반적으로 고급스러움은 호텔 건축물과 장식에서 비롯된다고 생각하지만, 이사도어 샤프는 서비스라는 돌출요소를 더 발견하고 고급스러움과 연결함으로써 혁신적인 의사결정에 이를 수 있었다.


통합적 사고능력 키우기

평범한 사람들이 통합적 사고능력을 향상시키는 방법은 없을까?

저자는 개인의 지식체계를 입장, 도구, 경험이라는 세 가지 구성요소로 나누고 뛰어난 리더들의 입장, 도구, 경험에서 발견할 수 있는 특성들을 설명함으로써 개인들의 지식체계를 향상시킬 수 있다고 한다. 입장은 "이 세상에서 나는 누구이고 무엇을 추구하는가?"에 대한 답변이고, 도구는 "나는 사고를 조직화하고 세상을 이해할 때 어떤 도구와 모델을 사용하는가?"에 대한 답, 경험은 "전문기술과 감수성을 개발할 때 어떤 경험을 사용하는가?"에 대한 답이다. 가령 "세계적인 기업가가 되겠어"라는 것은 입장이다. 이런 입장을 가진 사람은 MBA과정을 등록하하고 다양한 회사에 다님으로써 이론과 프로세스, 경험법칙 등의 도구를 획득하게 된다. 그리고 자신의 '입장'과 '도구'에 따라 경험을 선택하게 된다. 입장, 도구, 경험은 서로를 유도하고 촉진한다. "세계적인 기업가"가 입장인 사람은 추구하는 목표달성을 위해 필요한 도구(예: MBA과정)를 갖출테고, 어떤 도구를 갖추었냐에 따라 경험(MBA가 필요한 일들)이 달라진다.

뛰어난 리더들은 다음과 같은 6가지 입장을 가지고 있다고 한다.

  1. 기존 모델은 객관적인 현실을 반영하지 못한다. 그것은 현실에 대한 주관적인 구성물일 뿐이다.
  2. 상반되는 모델은 두려워할 대상이 아니라 적극적으로 활용해야할 대상이다.
  3. 기존의 모델들은 완벽하지 않으며 더 나은 모델이 반드시 존재한다. 다만 아직 발견하지 못했을 뿐이다.
  4. 나에게는 더 나은 모델을 찾을 능력이 있다.
  5. 나는 필요한 복잡성을 피하지 않고 정면으로 승부할 수 있다.
  6. 나는 스스로에게 더 나은 모델을 창조할 시간 여유를 준다.

이런 입장을 유지함으로써 좀 더 통합적으로 사고할 수 있다는 것이다.

통합적 사고를 하는 데 도움이 되는 도구는 '생성추론', '인과모델링', '적극적 탐구' 등이다. 이 중 생성추론만 소개해보자.

우리는 연역적 추론과 귀납적 추론을 알고있다. 연역적 추론은 틀을 구축하고 그 틀을 문제에 적용하는 방식이고, 귀납적 추론은 경험적 관찰로부터 일반적인 규칙을 찾는 것이다. 연역적 추론은 추론의 토대가 되는 이론이나 모델이 필요하고, 귀납논리는 반복된 경험이나 관찰이 있어야 한다. 하지만, 대부분의 의사결정 과정에서 이론을 적용하기도 어렵고 충분한 경험치도 없는 경우가 대부분이다. 또한, 연역적 추론과 귀납논리는 없는 것을 발명하기 위해서는 적합하지 않다. 이런 경우 사용할 수 있는 도구가 바로 생성추론이다. 생성추론은 기존의 모델과 맞지 않는 새롭고 흥미로운 데이터에 대한 최상의 설명, 즉, 최상의 모델을 만들기 위해 모델을 생성하고 그 명제의 개연성을 탐구하는 추론 과정이다. 나머지 도구들의 소개는 생략한다.

이 책을 읽으면서 가장 좋았던 부분은 뛰어난 리더들이 의사결정해야할 문제를 대하는 '입장'을 알았다는 것이다. 나를 포함하여 우리들 대부분은 복잡한 의사결정 상황에 처하면 빨리 상황을 종료하고 싶어서 그다지 명쾌하지 않은 대안 중 하나를 선택하게 된다. 하지만, 이런 상황을 피하지 않고 좀 더 폭넓은 사고와 충분한 시간을 가지고 더 나은 모델을 창조하는 연습을 꾸준히 한다면 통합적 사고 능력을 키울 수 있고 나아가 뛰어난 리더가 될 수 있을 것이다.

2008-04-20

[도서리뷰] 보노보혁명

이 책은 사회적 기업가와 사회적 기업들을 소개하는 책이다.

사회적 기업은 사회문제를 해결하는 것을 목적으로 하는 기업을 말한다. 이윤추구를 목적으로 해도 살아남기 힘든 세상에 사회문제를 해결하는 기업이라고? 좋은 일을 하기 위해 기업을 운영한다고? 이런 질문들을 가지고 책을 읽기 시작했다.

첫번째 소개한 사회적 기업가는 마이크로소프트의 전직 임원인 '존 우드'씨이다. 그는 '룸투리드'라는 사회적 기업을 만들어서, 네팔, 캄보디아, 인도, 라오스 등지에 3870개의 도서관과 287개의 학교를 세웠다. 이런 일을 하기 위해 그가 2006년에 모은 기부금은 3300만 달러(약 330억)가 넘었다. 대단하다. 근데, 그는 왜 이런 일을 하게되었을까? 사연은 이렇다. 1998년, 존 우드씨는 너무나 바쁜 일상사에 지쳐서 네팔로 여행을 떠났는데, 거기서 우연히 네팔 교육부 관리를 만나, 마을 학교에서 책도 없이 공부하는 아이들을 보게된다. 그리고는 "나는 이런 곳에 윈도우즈를 팔려고 노력하고 있는건가? 그렇게 사는 게 무슨 의미가 있나?"하는 생각을 했고, 그 생각을 계기로 사회적 기업을 창업하게된 것이다.

이후에 책의 반 이상을 할애하여 많은 사회적 기업가와 기업의 사례를 들고 있는데, 각 기업가가 어떤 사회적 문제를 해결하기 위해 사회적 기업을 만들었고, 어떤 식으로 기업이 지속적으로 운영될 수 있도록 만들었을까 등을 살펴보는 것은 흥미진진했다. 왜냐하면, 그 동안 가지고 있던 기업에 대한 생각과는 너무나 다르기 때문이었다. 사회적 기업가와 기업을 잘 나타내줄 수 있는 사례를 중심으로 몇 명을 소개해보겠다.


얼 마틴 팰런 - 빈부의 차이로인한 교육 불평등 문제를 해결하자

그는 흑인으로써 어린 시절 버려진 후 두살때 입양되고, 순조롭게 성장해서 예일 대학을 거쳐서 하버드 로스쿨에 들어간다. 로스쿨을 다 니면서 자신의 어린 시절 빚을 갑기 위해 빈민가의 아이들을 지도해주는 멘토링 봉사활동을 하게 되는데, 많은 아이들이 글을 읽지 못한다는 것으로부터 빈부의 차이가 교육 불평등 문제로 이어지고 있다는 것을 깨닫게 된다. 그리고 빈민가의 아이들에게 부자 아이들의 사교육만큼이나 높은 수준의 사교육을 제공하기 위해 BELL(Building Educated Leaders for Life)을 설립한다. 12,500 달러의 자금, 20명을 대상으로 시작한 BELL은 15년 만에 2천만 달러로 기금을 늘렸고, 보스턴뿐 아니라 볼티모어,뉴욕,워싱턴 등지로 그 활동 영역을 넓혀서 만명의 아이들에게 혜택을 주고있다. 그의 목표는 미국 전역에서 10만명의 아이들을 가르치고, 그 아이들의 학교 성적을 높여 주는 것이다. 그리고 그 아이들이 장래의 꿈을 가지고 성장해서 자신, 자녀, 지역사회를 변화시킬 수 있도록 하는 것. 즉, 빈민가에서 성공한 아이들이 다시 빈민가를 바꾸는 선순환이 일어날 수 있도록 하는 것이 그의 목표이다.


데이비드 그린 - 인공수정체 시장을 바로잡다

수정체가 혼탁해져서 결국은 실명을 하게 되는 병인 백내장을 아시나요? 그리고 이 병은 수정체만 인공수정체로 바꾸는 수술을 하면 시력을 다시 찾을 수 있다는 것도 아시나요? 아프리카 저개발국의 실명 환자 중 80%는 노화와 영양실조 때문에 생긴 백내장이 그 원인이며, 소수의 다국적 기업의 독점으로 인공수정체 가격은 300 달러에 달하고 1-2 달러가 하루 생활비인 가난한 사람들에게 백내장은 실명과 똑같은 얘기가 된다는 사실은? 가난 때문에 고칠 수 있는 병을 운명으로 받아들여야한다니? 이런 불합리한 문제를 바꿀 수는 없을까? 소득수준에 따라 서로 다른 의료비를 책정할 수는 없을까?

데이비드 그린은 오로랩을 설립하여 공장도 가격 3달러 짜리 인공수정체를 생산하여, 5-10달러에 판매하기 시작했다. 2007년 현재 오로랩은 한 해 70만개 이상의 인공수정체를 판매하고 있고, 전세계 인공수정체 시장의 8%를 점유하고 있다. 그리고 이렇게 생긴 수익금을 다시 인공수정체 공장도 가격을 낮추는데 사용하고 있다.


마틴 피셔 - 적절한 기술로 스스로 가난에서 벗어나게 하자

일반적으로 생각하는 개발도상국 지원책은 재화를 공짜로 나누어주는 것이다. 마틴 피셔는 이런 지원책은 네 가지 관점에서 잘못되었다고 생각한다. 첫째, 필요한 모든 사람에게 줄 수 있는 것이 아니라면 수혜자가 한정적이므로 공정하지 않다. 둘째, 지속 가능하지 않다. 세째, 무상으로 나누어주는 행위자체가 해당 지역의 시장경제를 왜곡한다. 네째, 사람들의 의존성만 더 키운다.

그럼 어떻게 해야할까? 개발도상국의 빈곤 문제를 근본적으로 해결할 수는 없을까? 그는 아프리카 전체 인구의 80%가 농민이라는 사실에서부터, 가난한 농민들이 구입할 수 있고 돈벌이에 이용할 수 있는 값싼 제품을 개발함으로써 빈곤을 퇴치해야겠다고 생각했다. 그래서 그는 킥스타트라는 회사를 세워 관개용 펌프를 개발하여 농민들에게 판매했고, 농민들은 관개용 펌프로 건기의 물부족 문제를 해결하여 농업 생산량을 크게 늘렸으며 그로 인해 연평균 소득이 110달러에서 1100달러로 늘어나게 되었다.


데이비드 위시 - 음악 교육 문제를 바로잡다

1990 년대 중반 이후 미국 교육 재정은 계속 줄고 이에 따라 음악교육이 가장 먼저 없어졌고, 2003년 전국 초중고의 60%에서 음악교육이 사라지게 된다. 이런 공교육 시스템의 문제를 해결하기 위해 데이비드 위시는 빈곤층 아이들에게 공짜로 악기를 나누어 주고 음악 수업을 하는 리틀키즈록을 설립한다.


이 외에도 이 책에는 "흥미진진하다.", "기발하다.", "이렇게도 사회 문제를 해결할 수 있겠구나!" 하는 생각이 들게 만드는 많은 사례들이 있다. 이런 사례들을 소개한 후 사회적 기업가의 정의와 특성을 다음과 같이 얘기한다.

" 사회적 기업가는 사회의 가장 골치 아픈 문제들에 대해 혁신적인 해결책을 지닌 개인들이다. 또한 그들은 사회의 빈틈을 메우는 문제를 정부나 기업에 떠넘기기보다 무엇이 잘못되었는 지를 찾아내 직접 해결함으로써 취약한 제도를 바꾸고, 해법을 확산시키며, 사회 전체가 새로운 도약을 하도록 설득하는 사회적 혁신가들이다."
"사회적 기업가는 생선을 주는 것은 물론이고, 고기 잡는 법을 가르쳐주는 것으로도 만족하지 않는다. 그들은 고기잡이 산업을 혁명적을 바꿀 때까지 결코 멈추지 않을 것이다."

어떠세요? 사회적 기업이나 기업가에 대한 생각이 조금은 달라지지 않나요? 나도 뭔가 사회적 기업을 통한 활동에 참여하고 싶다는 생각이 들지 않으세요? 창업을 통한 사회적 기여를 생각해보신 분이라면 한 번 쯤 꼭 읽어보시라고 권하고 싶네요.

2008-04-14

[도서리뷰] 미래를 읽는 기술

디지털 카메라가 140년 된 필름기업인 아그파를 파산에 이르게했다는 얘기를 들어본 적이 있는가? 음반업계를 휘청거리게 만들고 음악 유통 구조의 변화를 가져온 mp3에 대해서 들어본 적이 있는가? 거꾸로 만약 이들 업계가 미래 연구를 통해 다가올 변화를 예측하고 미리 대비했다면 아이튠즈를 탄생시킨 애플, 고무장화 제조업체에서 세계적인 휴대폰 제조사가 된 노키아와 같은 기업이 되어있지 않을까?

미래연구는 어떻게 하는 것일까? 예지력? 예언?

흔 히 미래연구라고하면 예언가를 떠올리게 되는데, 저자는 미래연구는 절대로 예지력이 아니며, 정보를 수집하고 분석하여 전달하는 간단한 방법이라고 한다. 이 책은 미래연구를 맥주산업을 예로 들어서 설명하고 있는데, 그 방법을 한 번 살펴보자.

먼저 특정 산업을 분석하기 위한 첫 단계는 해당 분야를 넓은 시각에서 시스템적으로 분석하는 것이다. 예로 든 맥주 산업에 있어서는 "농업->양조->포장->운송->유통->소비자->폐기물과 재활용"에 이르는 맥주와 관련된 전체 시스템을 이해하는 것이다. 시스템을 보다 넓은 시각에서 살펴보기 위해서는 STEEP이라는 도구가 유용하다. STEEP은 사회, 기술, 경제, 환경, 정치(Society, Technology, Economy, Environment, Politics)의 약자로써, 거시적인 트렌트를 파악하는 데 도움이 되는 분석 툴이다.

두 번째 단계는 대상 산업 시스템의 미래를 예측하기 위한 전 단계로써 대상 산업의 트렌드를 조사하는 일이다. 트렌드 조사는 우선 관련 업계의 '오늘'을 파악하는 것에서부터 시작한다. 대상 산업을 전문적으로 다루는 잡지 및 웹사이트를 다음과 같은 관점하에 조사한다.

  • 업계에서 가장 중요한 트렌드는 무엇인가?
  • 여러 출처에서 계속 다루어지는 공통된 주제는 없는가?
  • 계속 눈에 띄는 이름이나 주요 기관으로는 어떤 것들이 있는가?
  • 이 분야를 대표하는 선두주자는 누구인가?

관 련 업계의 '오늘' 관심사를 파악한 후에는 상호 검토 학술지, 정부 보고서, 심층 기업 분석 등 보다 신빙성있는 출처를 조사하여 전문가들의 연구를 바탕으로 만들어진 정확한 데이터를 얻는다. 해당 데이터를 수집한 후에는 그 속에서 트렌드를 파악한다. 트렌드는 보통 직선형(상승, 하강, 정체 등), S곡선(상승 후 한계), 포물선(급격한 상승), 역포물선(급격한 하락) 등의 형태로 나타난다.

맥주 산업과 관련한 트렌드 몇 가지를 예로 들어보자.

  • 미국의 맥주 소비량은 젊은이들 사이에서 와인이나 증류주외 비교해 줄어들고 있다.
  • 맥주의 세계화가 진행중이다. 중국은 곧 세계 최대의 맥주 시장으로 부상할 것이다.
  • 세계경제가 지식경제로 전환하고 있고, 사무직 근로자들은 맥주만큼이나 보드카를 즐긴다.

다음 단계는 트렌드로부터 미래를 예측하는 것이다. 이 단계에서는 가능한 최고의 전문가로부터의 데이터를 수집해야 한다. 잡지나 보고서의 예측, 증권회사들의 관련 산업 분석 및 예측 등의 자료를 살펴보면 도움이 된다.

전문가들의 미래 예측 자료를 수집한 후에는 이를 바탕으로 미래 예측이 가지는 '잠재효과'를 이해하는 것이다. 즉, 다음과 같은 질문을 하고 그 답을 찾으려고 노력하는 것이다.

  • 우리의 사업을 잠식할 새로운 경쟁자가 등장할 것으로 보이는가?
  • 고객은 늘거나 줄지는 않았는가?
  • 새로운 규제의 가능성은? 지지해야할 공공정책은?
  • 미래가 선진국, 제2, 제3세계 국가에 미칠 영향은?

잠재효과를 파악하기 위한 도구로써 미래 수레바퀴와 상호효과 분석을 이용할 수 있다. 도구에 대한 구체적인 설명은 책을 참조하기 바란다.

다 음 단계는 파악한 잠재효과를 효율적으로 전달하는 것이다. 사람은 분석적 글쓰기 보다 서술적 이야기를 통해서 전달된 내용을 훨씬 더 쉽게 이해한다고 한다. 이런 특성을 이용해서 파악한 잠재효과를 설명하는 것이다. 즉, 잠재효과들을 엮어서 미래에 있을만한 시나리오를 만들고 그 시나리오를 들려줌으로써 미래연구 결과에 대한 관심을 높이는 것이다.

어떤가? 그럴싸한가? "나도 한 번 관심있는 산업에 대한 분석을 이 책에서 소개한 방법에 따라 해보고 싶다"는 생각이 많이 나는, 정말 실전적으로 도움이 되는 책이다. 기획, 산업분석, 미래연구를 하시는 분들이라면 꼭 읽어보길 권하고 싶다.

2008-01-08

오픈소스 라이센스의 적용범위

소프트웨어진흥원 자료, KLDP 자료, IOSN자료들을 모두 살펴봤지만, 오픈소스 라이센스가 영향을 미치는 범위에 대해서 명쾌하게 설명한 자료는 찾을 수가 없어서 혼자서 다음 그림을 그려봤습니다.


오픈소스 라이센스의 적용범위를 설명하기 위해서 위 그림에서처럼 세 가지 경우로 나누었습니다.

  • 오픈소스의 일부를 수정한 파일 A,
  • 오픈소스를 수정하지는 않았지만, 오픈소스와 함께 하나의 모듈을 구성하고 있는 파일 B,
  • 오픈소스의 derivative works를 static 또는 dynamic으로 링크해서 동작하는 파일C
이 세가지 경우에 대해서 GPL, LGPL, MPL, CPL의 적용범위를 설명한 것이 위 그림의 오른쪽 표입니다.
이렇게 그려보고 나니 좀 설명하기가 쉬워진 것 같네요. 혹시 틀린 점이 있으면 코멘트 남겨주세요.

2008-01-07

PDF 논문 목록 만들기

연구업무를 하다보면 논문을 살펴볼 일이 많은 것 같습니다.
특히 초기단계에는 더 많지요.
이 때 저는 다음과 같은 과정을 통해서 조사를 합니다.

  1. 처음에 조사할 분야의 적당한 용어를 선택해서 논문 검색
  2. 다운로드 받은 논문들을 읽어보고 중요논문 선택
  3. 중요논문에서 참고한 문헌들 다시 조사
  4. 중요논문을 읽고 조사할 분야의 보다 적합한 검색 키워드 선정
  5. 새로운 키워드로 1번 부터 반복
여기서 2번 과정에서 항상 다운로드 받은 pdf 논문 파일들을 일일이 열어보는 과정을 해야하는데요. 이 과정이 은근히 귀찮아서 스크립트를 만들어봤습니다.
특정 디렉토리를 지정하면 그 디렉토리의 모든 하위 디렉토리에 있는 pdf 파일들의 파일명, 제목과 abstract의 목록을 만듭니다. 파일명에는 해당 파일로의 링크를 걸어서 보기 편하게 만들었습니다.
단점은 현재는 IEEE 2-column 형식만 지원한다는 것입니다. 그래도 대부분의 논문이 이 형식을 지원합니다.
필요하신 분들 가져다가 유용하게 쓰세요(xpdf 툴킷 중 pdftotext.exe가 아래 python 스크립트와 같은 디렉토리에 있어야 합니다).
다른 형식을 지원하게 되었거나 향상된 점은 저에게도 알려주시구요.
# -*- coding: cp949 -*-

# Usage: "python pdflist.py starting_directory_path output_filename"
# This script find the pdf files recursively from starting_directory_path and
# get the title and the abstract of the file and build the list in HTML table.
#
# Written by guldook. 2008.1.6.
# You must let me know any changes you did (guldook at gmail)

import os, string, tempfile
import sys

def get_text(filename,start=0,end=0):
try:
cmd = "pdftotext.exe -f %d -l %d -enc UTF-8 %s -" % (start, end, filename)
f = os.popen(cmd)
text = f.read()
err = f.close()
if err is not None:
print 'unable to read %s' % filename
raise IOError
except IOError:
pass
except:
raise Exception,'unable to execute pdftotext'
return text

# paper must be formatted by IEEE 8.5 x 11-inch Proceedings Manuscripts, IEEE 2-column format
# refer http://www.computer.org/portal/site/cscps/menuitem.02df7cde46985ea21618fc2e6bcd45f3/index.jsp?&pName=cscps_level1&path=cscps/cps/final&file=wi06.xml&xsl=generic.xsl&
# I need to extend to other format

def get_info(fname):

title,abstract = None, None

try:
s = get_text(fname, 0, 10)

# get the index of 'Introduction' section
idx_abstract = s.index('Abstract')

# get the index of 'Introduction' section
idx_intro = s.index('Introduction')

title = s[:s.index('\n')]
abstract = " ".join(s[idx_abstract+len('Abstract'):idx_intro].split()).replace('\n','').replace(', ',' ')
title = '"' + title + '"'
abstract = '"' + abstract + '"'

except (IOError, ValueError):
raise
finally: return title,abstract

header = "<html>\n<title>%s directory pdf file summary</title>\n<body>\n<table>\n<tr><td>Link</td><td>Title</td><td>Abstract</td>\n"
footer = "</table></body>\n</html>"

def get_pdflist(path, outfn):

numlist = 0
f = open(outfn, "w+")
f.write(header % os.path.abspath(path))

for root, dirs, files in os.walk(path):
for fname in files:
if fname.endswith('.pdf'):
try:
title, abstract = get_info(os.path.join(root, fname))
if (title and abstract):
line = "<tr><td>"
link = "".join(['<a href="file:///', os.path.join(os.path.abspath(root), fname), '">', fname, '</a>'])
line += "</td><td>".join([link, title, abstract])
line += "</td></tr>"
f.write(line+"\n")
numlist += 1
except IOError, ValueError:
## line = ", ".join([fname, "N/A", "It must be standard IEEE 2-column format"])
## f.write(line+"\n")
continue
f.write(footer)
f.close()

if __name__ == '__main__':
if len(sys.argv) == 1:
get_pdflist('./test', "./pdflist.html")
elif len(sys.argv) != 3: print "Usage: pdflist.py start_path output_filename"
else : get_pdflist(sys.argv[1], sys.argv[2])