페이지

2012년 9월 24일 월요일

추창민, 광해

광해
별 다섯.

고리타분한 왕실을 상식으로 바꿔 보려한 한 광대의 이야기.

요즘 대선 철이라 그런지
작금의 정치상황을
보고 얘기하려 한것은 아닌지.
만약 그렇다면 제일 가까운 이는  xxx가 아닌가 싶다.

비록 정치에 대한 경험은 떨어지지만
국민을 가엽게 여기는 맘으로
모든 것을 헤쳐나가고자 하는 이.

누구나 측은지심을 가지고 있고
상식만 가지고 있다면
왕의 자리에 누가 앉든 중요하지 않다.
그 자리가 그 사람을 왕으로 만들겠지.

광대의 목소리 vs 왕의 목소리
남자의 목소리에 대한 매력의 극과 극을 보여준다.
누구나 노력을 하면 목소리도 바꿀 수 있다고 한다.
존 내버로는 주름살 제거 수술 보다는
목소리에 대한 투자가 훨씬 현명한 일이라 했다.
남자들이여 목소리에 투자하라~

2012년 9월 20일 목요일

using cdt index

using CDT index

intro

CDT는 내부적으로 우리가 자주 사용하는 code assist, Open Declaration(F3), Open call Hierarchy(Ctrl + Alt + H) 등에 사용하기 위해서 내부적으로 c/c++ 코드를 parsing 해서 그 정보를 가지고 있는데 이것을 Index라고 한다. Indexer를 사용해서 특정 변수/함수 의 definition , declaration, reference 등의 정보를 가지고 올 수 있다.

getting IIndex

ICProject project = CoreModel.getDefault().getCModel().getCProject("hello");
CCorePlugin.getIndexManager().joinIndexer(IIndexManaer.FOREVER, null); // wait until indexing completes
IIndex index = null;
try{
    index = CCorePlugin.getIndexManager().getIndex(project);
    index.acquireReadLock(); // lock index

    IIndexBinding[] bindings = index.findBindings(Pattern.compile("main"), false, IndexFilter.All, null);
    for (IIndexBinding b : bindings) {
        System.out.print("name: " + b.getName()+" " );
        String[] qnames = b.getQualifiedName();
    }
}catch(Exception e){
    e.printStackTrace();
}finally{
    try{
        index.releaseReadLock();
    }catch (Exception e2){
        e.printStackTrace();
    }
}

Indexing 작업은 보통 main thread와 다른 thread에서 수행이 되기 때문에 joinIndexer로 인덱싱이 끝날때까지 기다린후 index에 lock을 걸고 findBinding 으로 쿼리를 수행할 수 있다.

querying

findBinding으로 IIndexBinding 을 얻고 여기서 얻은 IIndexBinding으로 아래 함수들을 불러 원하는 IIndexName을 얻을 수 있다. IIndex::findDeclarations : 함수/변수의 선언부와 구현부 IIndex::findDefinitions : 함수의 구현부 IIndex::findReferences : 합수나 변수가 사용된(use) 부분 그렇다면 함수의 선언부만 쿼리하고싶으면 어떻게 할까? IIndex::findNames(binding, IIndex.FINDDECLARATIONS)를 부르면 된다. 실제로 IIndex::findDeclarations은 IIndex::findNames(binding, IINdex.FINDDECLARATIONSDEFINITIONS)와 같다.
// finding declaration of BasicApp::CreateInstance
Pattern[] p = new Pattern[2];
p[0] = Pattern.compile("BasicApp");
p[1] = Pattern.compile("CreateInstance");
IIndexBinding[] bindings = index.findBindings(p , true, IndexFilter.CPP_DECLARED_OR_IMPLICIT, monitor);
for (IIndexBinding binding : bindings) {                
    IIndexName[] names = index.findNames(binding, IIndex.FIND_DECLARATIONS);
}  

getting index info

위 쿼리 함수들로 얻은 IIndexName으로 파일 위치나 기타 정보등을 얻을 수 있다.
for(IIndexName name: names){
    // get full path
    String path = name.getFile().getLocation().getFullPath();
    // get offset & length
    int offset = name.getNodeOffset();
    int length = name.getNodeLength();  
}

2012년 9월 6일 목요일

응답하라 1997



지금보다 절실한 나중이란없다. 나중이란 영원히 오지않을수도 있기때문이다. 눈앞에 와있는 지금이 아닌 안올지도 모르는 다음 기회를 얘기하기엔 삶은 그리 길지 않다


누구를 좋아하는 건 선택의 문제가 아냐. 가슴이 시키는 거야.

16화 - 첫사랑이 이루어지지 않는 이유.

2가지 재미난 상징들!


1.
윤재
+ 넌 어떻게 나보다 우리 형 마음을 그렇게 잘알아? 
정신과 가서 사람들 맘 좀 들여다 보고 치료좀 해주라고

준희
= 남의 마음은 잘 보는데 내맘을 잘 몰라서
내 맘부터 정리하고(포장된 박스를 테이프로 봉인한다. )

2.
준희 
+ 이게 마지막 짐입니다. 
- 아유 그래도 또한번 확인해보세요. 
항상 갔다가 한번은 되돌아 오더라고요. 
꼭 하나씩 빼먹고 오더라고요.
+ 그래요? (집으로 올라가자 윤재가 있고 그와 마지막 인사를 한다. )

후자에서 소름 돋았음.

----------
저마다의 첫사랑이 아름다운 이유는
첫사랑이 그닥 아름다웠기 때문만은 아니다.
그 첫사랑의 시절엔
영악하지 못한 젊음이 있었고
지독할 만큼 순수한 내가 있었으며
주체할 수 없이 뜨거운 당신이 있었기 때문일 것이다.
그리고 다시는 젊고 그 순수한 열정의 시절로
돌아갈 수 없다는 걸 이미 알고 있기 때문이다.

첫사랑은 무모하다.
영악한 계산없이 순수와 열정만으로
모든 것을 던져 버리고는
결국 실패한다.
하지만 그래서 극적이다.
다시는 가져볼 수 없는 체온과 감정들로 얽혀진 무모한 이야기들
첫사랑은 그래서 내 생애 가장 극적인 드라마다
그리하여 실패해도 좋다
희극보다는 비극적 결말이 오래 남는 법이며
그리하여 실패한 첫사랑의 비극적 드라마 한편쯤
내 삶 한자락에 남겨두는 것도
폼나는 일이다.

첫사랑은 시절이다.
흘러가면 그 뿐이다
이제 맞게 되는 새로운 시절엔
새로운 사랑에게 기회를 줘야 한다.

첫사랑의 체온과 순수함은 아닐지라도
그 상처로 인해 조금은 자라고 성숙해진
어른의 사랑을 기다려야 한다
기다리는 사람만이 사랑을 꿈꿀 수 있다.
---------
로맨스가 지나면 생활이 온다.
순수함은 때묻어 가고 열정은 얼어붙어 가며
젊음은 영악함으로 나이들어 간다
그리하여 순수했던 시절의 첫사랑은
이제 고단하고 지난한 일상이 된다.
마치 첫사랑은 이루어지지 않은것처럼 보이는 이유다
누구도 성공한 첫사랑의 로맨스는 이야기하지 않으니까

2012년 8월 31일 금요일

조 내버로, 우리는 어떻게 설득 당하는가

28
미모 보상(beauty dividend). 잘 생긴 사람이 더 돈을 잘 벌고 더 빨리 승진한다. 불공평해 보일수도있지만 이것이 현실이다. 비언어에 통달하기 위해서는 반드시 외모에도 관심을 기울여야 한다.

33
말 따라하기(verbal mirroring)
안타깝게도 대다수 사람들은 대화를 할때 자신만의 언어로  주로 사용한다. 대화의 효과를 극대화 하려면 상대방의 언어로 대화해야 한다. 상대방이 child란 단어를 사용한다면 나도 kid나 daughter대신 child를 사용하는 식이다.

38
깨진 유리창 법칙
어떤지역이 외관상 무질서한 모습을 보일경우 그 지역의 범죄나 반사회적 사건이 일어날 확률도 같이 높아진다는 이론

44
편안/불안 패러다임

131
우리는 대체로 권위있고 유능해 보이는 사람의 말을 잘 듣는 편이다. 비언어가 그다지 중요하지 않다고 생각하는 사람이 있다면 회의실 상점 레스토랑에 들어가 누군가를 보았을때 그의 자세에서 열의가 느껴지는지 무관심이 느껴지는지에 따라 그에 대한 인상이 얼마나 달라졌는지 떠올려보라. 자세는 멀리서보더라도 즉각적으로 그 사람의 전반적 이미지를 형성한다.

137
목소리의 힘.
만약 누군가 내게 주름살 제거 수술을 받는게 나을지, 아니며 시간을 조금 들여 목소리를 개선하는게 나을지 묻는 다면 나는 수술비로 쓸 돈을 저축해두고 목소리를 가다듬는 편이 훨씬 낫다고 대답할 것이다.

151
모든 동물은 본능적으로 뛰어난 외모를 지닌 개체를 선택한다. 가령 공작은 가장 화려한 꼬리를 지닌 개체가, 사자는 가장 큰 갈기를 지닌 개체가, 종마는 가장 위풍당당해 보이는 개체가 선택을 받는다. 태어날때부터 어떤한 선입견이 없는 상태에서도 인간은 미를 감지한다 아기가 추한 얼굴보다 아름다운 얼굴을 더 오래 응시하는 이유도 여기에 있다.

163
옷이 사람을 만든다는 격언에는 강력한 진실이 담겨있다. 사람은 자신이 입은 옷에 따라 페르소나(persona-다른 사람들 눈에 비치는 외적 인격, 가면을 쓴 인격)가 달라진다는 것이다.

166
사무실 조명과 생산성의 관계.
생산성 향상은 환경변화가 야기한 자극에서 비롯된 것. 시간이 지나 처음의 신선함이 사라지면 사람들이 변화에 익숙해져서(적응성은 인간의 특징이다) 행동변화 역시 사라진다.

167
정치인들이 쓰리 버튼이 아닌 투 버튼 정장만 입는 사실을 아는가? 흉부를 드러낼수록 더 정직한 사람으로 인식되기 때문이다.

183
편안함 보상(comfort dividend)
특정 치과의사 가족주치의를 계속 찾는 이유는 그들의 솜씨가 뛰어난 것은 물론 편안함까지 주기 때문이다.

193
조명을 많이 켜둘수록 더 많은 사람들이
주유소에 들른다는 사실을 깨달았다.
밝은 곳이 더 안전한 곳이라 생각.
편안과 안전의 동일시.

237
모든 사물은 엔트로피가 증가하는 방향으로
즉 에너지가 고갈되어 허물어지는 방향으로
변해간다는 열역학 제2법칙을 들어본적 있을 것이다.
나는 이 엔트로피의 법칙을 감정에 적용하여
그들이 자발적으로 감정을 소진시키게 했다.
잠시 기다리면 그들은 진이 다 빠져서
더 이상 감정표현을 할 수없게 된다.
그러면 나는 심문을 시작했다.

245
일에서 유머와 재미를 찾아 부정적 스트레스를 해소할 수단으로 삼아보자. (유머 유머..)

280
전화통화에 관한 법칙
침묵은 금이다. 누군가 불쾌한 얘기를 할때는 한참동안 침묵을 지키는 것도 좋다. 이 강력한 비언어는 사람들의 주의를 당신에게 집중시킨다.
한참 말을 멈춰서 상대방이 말을 하도록 하라. 대다수 사람들은 침묵을 두려워하기 때문에 그 적막함을 채우려 하다가 본의 아니게 비밀등을 발설하곤 한다.(이건 소개팅 자리에서도 비슷하다. 적막이 무서워 말도 안되는 얘기를 하다가 매력을 잃는것과 비슷한 듯)

283
어떤 경우에도 시각자료에 표시된 내용을 그대로 읽거나 되풀이해서 말하지 말라
청중이 당신의 얘기를 더 듣고 싶어하는 상태에서 프레젠테이션이 끝나야 한다. 주제 대해 모든 것을 다 쏟아낸 발표자는 호평을 받지 못한다.

289
결국 모든 준비는 자신감을 얻기위해서 하는 것이다. 자신감은 그 무엇으로도 대체할 수 없다. 준비가 충분하다는 믿음을 가지고 자신있게 면접장으로 들어가라.

2012년 8월 23일 목요일

google code jam 2010 풀이

Rotate

rotate 후, gravity 적용하는것은 그냥 하면 되고
row, column 은 돌면서 K개 연속으로 있는것 체크하면 되고
실수할 수 있는 부분은 대각선인데,
/은 ㅣㅡ (아래)순으로 돌고
\은 ㅣㅡ(위) 순으로 돌면 된다.
대각선에서 실수 할 수 있다.

그리고 시작위치와 속도 를 주면 K개 연속을 detect하는 펑션을 만들면 로직을 단순화 할 수 있다.
풀이를 보고 나서 .

  1. 실제로 rotate후 gravity적용하는 것은 왼쪽으로 밀어주면 끝이다. 굳이 rotate하고 gravity적요을 할 필요가 없다 --;; --> 생각을 하자. 젤 중요한 것은 시간 시간이다.
  2. N의 max가 50이므로 굳이 최적화 해서 할 필요없이 모든 칸을 돌면서 8방향을 체크하면 된다. --; --> N이 작으면, 최적화 하는 시간보다  bruteforce로 무식하게 하는것이 시간을 더 절약할 수도 있다. 중요한 것은 시간!

Number Game

dynamic programming 문제이고 turn개념때문에 좀 헷갈릴 수 있다.
small set은 cache로 어쩌 해결할 수 있으나 large set은 너무 시간이 걸렸다.
1억번의 빈 루프를 도는 것만 수분이 걸리는데, largeset중에 백만 x 백만 짜리 문제가 있다.-- 이거 머임?


오류들
- B는 모든 k에 대해서 이겨야 하지만 A는 한 k에 대해서만 이겨도 됨..
- turn별로 다른 cache를 사용해야 했는데 그것으로 오류.
- large set은 백만까지 가므로 기존 알고리즘으로는 한계가 있었음.


2012년 8월 22일 수요일

'공개된 삼성과 애플의 미국 내 판매실적을 보니 충격적'에 대한 반박

오늘 우연히 구글 플러스에서 이찬진님의 타임라인에서
공개된 삼성과 애플의 미국 내 판매실적을 보니 충격적
이란 글을 봤는데 그 논리가 어설퍼서 글로 남긴다. 우리 나라 국민에겐 애증의 삼성이지만 사실은 바로 알아야 하지 싶다. 막연한 마녀사냥은 이제 그만할때가 되지 않았는가 말이다.


이글을 쓴 분의 논리는 이렇다.
미국에서 삼성 스마트폰의 판매량은 애플과 비교해서 많이 작고 ASP도 애플의 60% 정도 밖에 되지 않는다. -> 그러면 그 엄청난 영업이익은 다 어디서 왔단 말인가? -> 국내 시장에서 엄청난 폭리!

 나의 반대 논리는 이렇다.
1. 삼성에게 글로벌 시장은 국내와 미국 밖에 없단 말인가? 삼성전자는 그야말로 글로벌 기업인데 전체 매출에서 국내 매출 비중은 16% 정도 밖에 되지 않는다. 유렵도 있고 아랍권도 있고 중국 동남아 남미 등등 그 외에도 많은 권역이 있다.

 2. 삼성전자는 갤럭시 S 씨리즈만 파는게 아니다. 저가 스마트폰(갤럭시 에이스, 등등)도 많이 팔기에 ASP가 애플에 비해 떨어지는 것은 자명한 일이다.

3. 핸드폰 영역에서 삼성의 비지니스 모델은 이통사에게 파는 것이지 소비자에게 직접 파는 게 아니다. (최근 화이트리스트 제도로 가능해지긴 했지만 아직은 미미한 수준이다) 그러므로 가격 결정은 이통사의 자율이 되는 것이고 애플에 비해서 가격이 잘 떨어지는 것도 이 때문이다. 애플은 계약서에 이통사가 자율적으로 가격을 떨어뜨리지 못하게 이통사와 계약을 따로 하는 것으로 알고 있다.

2012년 8월 20일 월요일

google code jam 2009 풀이


google code jam 2009년 문제.

* AllYourBase

C#이나 Java에서
double Match.pow(double, double)
만 제공을 한다.

해서 pow(5,23) 처럼 int의 범위를 넘어가는 큰 수의 경우 pow(double,double)은 부정확한 값을 리턴 할 수 있다.
위키에 따르면
double은
sing 1 bit
exponent 11 bit
significand 52 bit
이렇게 64 bit로 이루어진다.

즉, double이 significan가 표현할수 있는 수의 범위는 2^52승이 한계라는 말이다.
헌데 pow(5,23)같은 경우는 2^53을 넘어가는 범위에 있으므로 double버전의 pow로는 정확한 값을 계산해 낼수 없다는 얘기다.

그래서 long 버전의 pow(long,long)을 구현하거나 쓰는 것이 key인 문제였다.

* CenterOfMass

double은 의외로 오차가 많다. 특히나 정밀도를 요하는 계산에서.
문제에서 Any answer with absolute or relative error of at most 10-5 will be accepted. 이것이 key이다.


* bribe the prisoners


  1. P=10000이고 Q가100일 경우 가능한 경우의 수는 100! 이므로 bruteforce로는 시간적 한계가 있음.  large set 문제는 무식하게 풀면 풀지 못함.
  2. 이런 종류의 문제를 DP 문제라고 함. 정확히 catch는 못했지만 정확한 알고리즘이 없을 경우이고, recursive이면서, 반복될 확률이 높은 경우에 cache 를 적용해서 DP 문제라고 하는 것 같음. 
  3. log를 남기는 것도 큰 퍼포먼스 감소를 가져오므로 large일때는 로그도 끌것