문법 익힐겸, 무의미한 데이터를 만들어서 그림을 그려본다

단순히 랜덤 값으로 data frame 을 구성하고, y축 값을 sort 해서 step 을 그리는 구문이다



# load library
library ("ggplot2")

# set data frame with x and y
# y is random from 10 to 20
d = data.frame(x=1:100, y=runif(100, min=10, max=20))

# sort data of y
d$y = sort(d$y)

# draw step
p = ggplot(d, aes(x, y))
p + geom_step()



- Download & Install R

     R Homepage
          http://www.r-project.org/

     서울대 mirror
          http://healthstat.snu.ac.kr/CRAN/


- R Studio Download
     http://www.rstudio.com/products/rstudio/download/

     R Studio 가 참 훌륭한것 같음!


- 시각화 Plugin (ggplot)
     http://docs.ggplot2.org/current/

- install ggplot
     > install.packages("ggplot2")

     - 처음에 실행해서 ggplot2 를 설치하려고 하면
     > tar: Failed to set default locale

     뭐 이런 메시지 나오는데, Mac Terminal 에
     $ defaults write org.R-project.R force.LANG en_US.UTF-8

     http://davidprakash.blogspot.kr/2011/05/r-error-tar-failed-to-set-default.html
     이렇게 하고 재시작 하면 됨..



- 간단한 그래프 그려보기
     > x = 1:1000
     > y = x^2
     > plot(x, y)


"사람의 행동에 영향을 준다.. 다른 사람에게 영향을 준다....."

그게 어렵다는 생각은 애초부터 하고 있었습니다.

쉽지 않은 일이라는걸 다시금 깨닫게 만들기도 하면서,

뭔가 방법을 찾을 수 있게 해주는 책이었습니다.


이 책에서 다루는 영향력의 범위는 제법 그 범위가 큽니다.

메디나선충 박멸.. 국가의 에이즈 퇴치.. 등

그런데, 이 책에서 저에게 가장 마음에 와닿았던 내용은 "핵심 행동을 찾아라" 입니다.

핵심 행동 여러가지가 모여서 결과를 바꾼다는 내용인데..

그 중 중요한 내용은, "성격이기 때문에 극복할 수 없다고 생각하던 것들은 기술로 극복이 가능하다" 입니다.


책에서 나온 예 중에 마쉬멜로를 먹고싶은 욕구를 참을 수 있는 아이와 그렇지 못한 아이의 미래를 비교하여

참을 수 있는 아이가 더 나은 삶을 산다는 내용이 나오는데,

이것을 타고난 성격으로 볼 것이 아니라, 기술적으로 해결 가능한 과제로 보는 시각이 있습니다.

잘 참는 아이일수록 먹고싶은 욕구를 잊게 만드는 다른 행동을 하며 시간을 보낸다는거죠.

사실 이런 것에서 약간은 자기계발 서적의 느낌이 나기는 합니다만,

결국 문제가 되는 행동들을 수정해서 결과를 크게 바꿔놓을 수 있다고 이야기 합니다.


또 한가지, 제가 크게 공감한 내용이

변화를 이끌기 위해 취해야 할 많은 행동 중 어느 하나도 쉽게 버리지 말라는 내용입니다.


모름지기 편안하고, 즐겁고, 추억을 많이 남길 수 있는.. 좋은 여행을 하려면

처음 계획을 세울 때, 동선을 파악하고, 그 지역에 얽힌 역사를 알아보고,

그 지역의 가장 맛있다고 소문난 집과 가장 유명한 장소 등을 알아보고 가야합니다.

동선 파악이 잘못 되어 시간이 지체된다는 느낌이 들거나, 좀전에 먹은 점심이 맛이 없거나,

갑작스레 나타난 이정표를 보고 가봐야겠다는 마음이 들어 가봤는데 별볼일 없어서 실망하게 되면

점점 덜 즐거운 여행이 될겁니다.

더 멀리, 더 많은 돈을 투자하는 여행일수록 더 큰 노력을 기울여야 할 것입니다.

그렇지 않으면 더 많은 시간과 더 많은 비용을 버리게 될테니까요.


더 큰 변화를 이끌려면, 여기저기 널려있는 "해야 할 것" 들을 소홀히 생각하면 안됩니다.

그 작다고 생각했던 한 가지 행동이 변화의 여부를 결정지을 수 있습니다.


책 여기저기 심리학의 향기가 묻어나와서 좋았습니다만..

뒤로 가면 갈수록 자기계발 서적의 냄새가 물씬 풍겼습니다.

아무래도 중요하다고 강조하는 과정에서 그런 느낌이 들은 것 같네요..


마지막으로, 이 책을 보면서 마음에 새긴 내용이 한가지 있습니다.

프로그래머이기 때문에 프로그램을 잘 짜는 법도 알아야겠지만,

더 많은 사람들과 일해야 하기 때문에, 다른 사람과 소통하고

서로를 알아가는 것을 게을리 하지 않아야겠다는 생각을 말이죠.



평소 친하게 지내는 회사 형님의 소개로 이 책을 읽게 되었습니다.

동기부여를 하기 위해서라기보다는, 동기부여를 스스로 하고싶어서 이 책을 봤는데,

제 마음 속 깊은 곳에 이 책이 닿았다고 해야할까요..?

제법 많은 생각을 하게 만들어줬습니다.
 

먼저 이 책에서는 "~ 하면 ~ 한다" 는 식의 동기부여는 결국 그 사람을 망치게 된다고 쓰여있습니다.

" 3분 안에 이 퍼즐을 풀면 문화상품권을 줄게~ " 식의 이야기는

결국 그 사람이 퍼즐을 푸는 것에 재미를 느끼지 못하게 만든다는거죠..

예측할 수 있는 보상이 있는 경우, 사람의 창의성이 떨어지고 보상에 집중하게 된다는 내용이었습니다.

재미로 즐길만한 일 조차도, 결국 "일" 로 받아들여지게 된다는 이야기도 있었습니다.

기존에 갖고 있던, "보상이 크면 더욱 그 일을 열심히 할 것이다" 와는 정면으로 배치되는 내용이었죠.
 

벌칙에 대한 이야기도 있습니다.

한 어린이집에서 퇴근 후 부모들이 아이를 늦게 데리고 가니까

ㅇ시 이후에 데려가면 시간당 만원이라는 "벌칙" 을 만들었습니다.

결론만 이야기 하자면, 결국 더 많은 사람들이 아이들을 늦게 데려가게 되었고,

그 원인은.. 벌칙이 일종의 "자기 정당화" 를 시키는 도구로 변질될 수 있다는 점이었습니다.

돈을 내니까 늦게 데려가도 된다는거죠.

이것도 역시, "벌칙이 있으면 규칙을 준수하려고 한다" 와는 정면으로 배치되는 내용이었습니다.
 

결국.. 기존에 제가 갖고 있던 생각들이 제법 많은 부분 잘못되었다는 생각을 하게 됐고,

규칙.. 규율.. 그 전에 사람을 먼저 알아야겠다는 생각을 하게 해줬습니다.

동기 부여 이전에, 다른 사람을 대하는 방법.. 회사의 동료나, 나의 가족들을 대하는 방법에 대해

깊이있게 생각해볼 수 있는 계기를 마련해줬습니다.
 

아, 마지막 부분에 수행하는 방법이나, 좋은 학교들을 소개하는 부분이 있는데,

이 부분은.. 저는 큰 공감을 얻지는 못했습니다.

학교들도 미국에 있는 학교들이었고.. 방법은 각 상황에 맞는 방법이 따로 있을거라는 생각을 했습니다.
 

이 책을 읽는 사람이 처해있는 상황마다 조금씩 다르겠지만,

분명 얻을 것이 많은 책임에는 틀림 없다고 생각합니다.

Visual Studio 에서 멀티스레드로 작성된 프로그램을 디버깅 할 때에,

해당 브레이크 포인트 (이하 BP) 에 특정 스레드가 접근할 때에만  활성화 되도록 Filter 를 적용할 수 있습니다.

출처 :  http://msdn.microsoft.com/en-us/library/wyakk529(v=vs.100).aspx


BP를 만든 후 BP 창에서 해당 BP에 마우스 우클릭을 합니다.

우클릭 후 나오는 메뉴에서 Filter 를 선택하면 아래와 같은 창이 나오는데

여기서 Thread ID or Name, Process ID or Name 으로 Filter 를 걸 수 있습니다.

 
이것도 결국엔 bson 이용 방법이 문제인데

정말 bson 이 익숙해지면 mongodb 사용은 거의 끝이 날 것 같네요..

 

void mongo_bson_test_time_t( mongo& m ) 
{
//	> db.foo.find()
//	{ "_id" : ObjectId("4f26266439584a7aa0bfce4e"), 
//	  "time" : ISODate("2012-01-30T05:11:00.594Z") }
//
// time 의 값을 time_t 로 읽어서 출력하기

	mongo_cursor cursor;

	mongo_cursor_init( &cursor, &m, "test.foo" );			// collection 을 test.foo 로 지정

	while( mongo_cursor_next( &cursor ) == MONGO_OK ) 
	{
		bson_iterator iterator;

		// time 필드의 값 읽어오기
		if ( bson_find( &iterator, mongo_cursor_bson( &cursor ), "time" ) )
		{
			time_t t = bson_iterator_time_t( &iterator );

			printf( "time: %s\n", ctime( &t ) );
		}
	}

	mongo_cursor_destroy( &cursor );
}


MongoDB 로 group 명령 사용하는 방법을 찾아봤습니다.

shell 에서 사용하는건 그리 어렵지 않은데..

C driver 용 bson object 만드는데 시행착오가 좀 있어서 이렇게 기록 해둡니다.



db.foo 에 a가 각각 abc, abcd, abcde 인 내용은 1개씩, a 가 123인 내용은 32개 들어있는 상황입니다.



db.foo.group( {  key : { a : 1 },
initial : { count : 0 },
$reduce : "function( obj, prev ) {prev.count++;} " } )
 



MongoDB 용 구문은 이런데.. 이걸 C driver 로 쓰려면 이렇게 해야하네요..




// MongoC-ClientTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "winsock2.h"
#include "mongo.h"

int _tmain(int argc, _TCHAR* argv[])
{
	// winsock 초기화
	WSADATA wsaData;
	WSAStartup( MAKEWORD(2, 2), &wsaData );

	// mongo db 초기화
	mongo m;
	mongo_init( &m );

	// local에 연결
	int nRet = mongo_connect( &m, "127.0.0.1", 9000 );
	if( nRet != MONGO_OK ) 
	{
		switch ( m.err ) 
		{
		case MONGO_CONN_SUCCESS:		printf( "connection succeeded\n" ); break;
		case MONGO_CONN_BAD_SET_NAME:   printf( "bad arguments\n" ); return 1;
		case MONGO_CONN_NO_SOCKET:		printf( "no socket\n" ); return 1;
		case MONGO_CONN_FAIL:			printf( "connection failed\n" ); return 1;
		case MONGO_CONN_NOT_MASTER:		printf( "not master\n" ); return 1;
		}
	}

	// group 명령 준비
	bson bsonQuery;

	bson_init( &bsonQuery );
	bson_append_start_object( &bsonQuery, "group" );		// group 명령

		bson_append_string( &bsonQuery, "ns", "foo" );		// collection 을 foo 로 지정

		bson_append_start_object( &bsonQuery, "key" );		// key 는 "a"
			bson_append_int( &bsonQuery, "a", 1 );
		bson_append_finish_object( &bsonQuery );

		bson_append_start_object( &bsonQuery, "initial" );	// group 할 초기값 설정
			bson_append_int( &bsonQuery, "count", 0 );
		bson_append_finish_object( &bsonQuery );

		// reduce 함수 지정
		bson_append_code( &bsonQuery, "$reduce", "function( obj, prev ) { prev.count++; }" );

	bson_append_finish_object( &bsonQuery );
	bson_finish( &bsonQuery );

	// run command 수행
	bson bsonOut;
	bson_bool_t bRet = mongo_run_command( &m, "test", &bsonQuery, &bsonOut );

	// 결과 출력
	bson_print( &bsonOut );

	// mongo db 정리
	mongo_destroy( &m );

	// winsock 정리
	WSACleanup();

	return 0;
}


2011년 12월 3일에 있었던 제2회 온라인서버제작자모임 공개강연회에서 발표한 자료입니다.



뭔가 좀 써보려고 했는데, 너무 잘 정리되어 있음 ㅋ

http://www.mongodb.org/display/DOCSKR/Quickstart+Windows



장하준 교수님이 쓰신 책을 읽은건 이번이 처음이었다.
 

읽고 나니 예전에 쓰셨던 다른 책들도 읽고싶은 마음이 생기고..
미리 좀 알아보고 살껄 하는 생각도 잠시 들었으나,
책 내용이 전작들을 읽지 않는다고 해서 이해할 수 없는 내용이거나 하지는 않았다.
 

부제가 말하듯, "더 나은" 자본주의를 말하는 책이다.
 

이 책은 전반적으로 "부족한 규제" 가 만드는 "어뷰징" 에 대해 이야기 하고 있다.
 

신 자유주의자들이 주장하는 작은 정부, 시장의 힘, 자유무역 등에
타당한 이론을 들면서 "신 자유주의에 대한 신봉" 의 해악을 이야기 한다.
 

부자들, 기업.. 크게는 선진국 등의 잘 사는 집단은
시장 경제에만 맡겨놓으면 투자를 하고, 기부를 하는 집단이 아니라는 사실이 이미 증명되었고,
과거 선진국들이 괄목할만한 성장을 이룰 당시 보호무역을 했다는 사실 또한,
선진국들이 개발도상국들에게 자유무역을 주장하고 강요하는 현실의 세태와는 거리가 있다는 것을 알게 되었다.
 

현실은 상당 부분 암울한 부분이 있지만, 그렇다고 암울하기만 한 것은 아니다!
 

부자들이 세금을 더 내야 한다는 이야기도 미국, 독일 등 선진국에서 나오고 있고,
근래 우리나라에서 동반성장위원회 발족 이후 대기업과 중소기업간 논의를 통해서
중소기업에서만 판매 가능한 물품을 정한다는 뉴스도 얼마전에 보았다.
 

점점 작은 정부, 시장의 힘만 외치던 "신 자유주의" 에 대한 신앙적 믿음은 줄어들고 있다고 본다.
 

그렇다! 우리의 미래는 밝은 것이다!!

+ Recent posts