아이팟에서 구글 메일을 받으면 이상하게 일부 메일이 깨져 보인다.
이럴때.. 구글 메일을 다른 메일로 옮겨서 받자..

즉, 구글메일에서 전달 기능을 이용하는 것이다..

1. 구글 메일 로그인...
2. 환경 설정으로 이동
3. 전달 및 POP/IMAP으로 화면변경
4. 전달에서 받고자 하는 메일 주소(한메일일 경우 아이디@hanmail.net)를 적어준다..
5. 변경사항 저장을 누르면 끝...

한메일의 경우  IMAP 을 지원하니까.. 한메일에서 IMAP 설정 방법을 확인하고 주 메일을  한메일로 바꾸면 그동안 깨져 보이던 메일이 정상적으로 들어올 것이다.


형이 실수를 하는 바람에 생긴 프로그램 Comic Life  Mac 버전..

테스트 겸해서 애들 사진 가지고 샘플 몇 가지 만들어 봤다..  

표지

보기에도 독서기 같다.


이번에 리뷰하게 된 책은 독서기이다. 상당히 유명한 블로거의 책이라는 점에서 흥미를 갖게 되었다. 그만큼 글에 사람들에게 인정을 받았다는 것이니까.(사실 이 책을 읽기 전까지는 윤미화님을 전혀 몰랐다.. ㅠㅠ)

이전에 읽었던 독서기와 뭐 다르겠어 하고 책장을 넘겨갔다.  이전에 읽었던 다른 독서기는 책의 요약본이라는 생각이 많이 들었는데, 이번 독서기는  기존 독서기와는 다르게 작가의 생각이 조금 더 들어가 있어서 괜찮은 듯 싶다.

보통 책 소개하는 책들의 대부분은 한쪽으로 치우치는 경향이 많다.. 책의 요약본처럼 전 내용을 아주 짧게 줄여서 빨리 읽도록 하는 책과 혹은 작가의 생각이 너무 많이 들어가서 정작 내가 작가가 소개하는 책을 읽었나 싶을 정도의 헷갈리게 하는 책..

그런데, 이 책은 적당히 책의 줄거리와 작가의 생각이 들어가 있다..
작가의 독서할 때 에피소드도 하나의 읽는 재미다.. 나도 저 책을 읽었을때 어떤 일이 있었는데.. 하는 생각이 들었다.

각 단락에서 소개할 책들을 나열하고 있다..



자신이 읽은 책을  한국문학, 외국문학, 고전/해석, 인문/사회, 인물/평전, 환경/생태, 문화/예술, 역사/기행, 만화/아동 편으로 나누어서 소개 하고 있다. 너무 포괄적으로 다룬것처럼 보이지만,  작가의 넓은 독서 습성을 알 수 있다.(잡식성인 나와 비슷하다는 느낌도 받을 수 있는 책이었다.)  

읽은 책에 대한 표지와 독서기..



나도 잡식성으로 책을 읽는 편인데, 더 많은 책을 읽은 작가를 보니 나도 더 많이 책을 읽어야 겠다는 생각이 들었다.(요즘 들어서는 일 때문인지 기술 서적을 많이 보게 된다.) 그리고, 하루에 한 권씩 읽기는 힘드니까.. 일주일에 한권씩이라도 꾸준히 읽어야 겠다는 생각이 들게 하는 책이었다.

이 책은 다른 사람은 어떤 책을 어떻게 읽고 어떻게 생각하는지 알고 싶은 사람에게는 필독서가 될 듯 싶다.
그리고, 어떤 책을 사기전 참고서로도 권해 주고 싶다.

책의 평점 : 4.1 /  5.0
                  (전반적으로 좋았으나 뒷면의 내용이 가끔씩 글자가 겹쳐 보여서 조금은 불편했다.)

C언어: OpenMP를 이용한 멀티 쓰레드 프로그래밍 HOWTO #1  http://sunyzero.egloos.com/4227785


C언어: OpenMP를 이용한 멀티 쓰레드 프로그래밍 HOWTO #2 http://sunyzero.egloos.com/4227785

C언어: OpenMP를 이용한 멀티 쓰레드 프로그래밍 HOWTO #3
  http://sunyzero.egloos.com/4234766
single construct로 지시된 구간은 단 한번만 실행된다. 실행되는 쓰레드는 여러 쓰레드중에 제일 먼저 진입하는 쓰레드이다.
  • single construct는 처음으로 진입한 쓰레드가 실행한다.
  • 나머지 쓰레드들은 single construct 끝에 존재하는 implicit barrier에서 대기한다.
  • single construct가 끝나고 모든 쓰레드들은 implicit barrier에서 동시에 시작한다.

그림에서 보이듯이 parallel 구간에서 쓰레드들 중에 한 개만  single construct를 실행하고 나머지는 뒤에 존재하는 implicit barrier에서 대기하는 것을 볼 수 있다. 그러면 위 소스코드를 컴파일하고 실행해보자. 실행결과는 예상대로 "1. Hello world"는 1번 출력되고, "2. Hello world"는 2번 실행된다.(테스트 호스트는 듀얼 코어이므로)
$ gcc -o omp_single -fopenmp omp_single.c
$ ./omp_single
1. Hello world 2. Hello world 2. Hello world

7. Master Construct

master construct는 single construct와 매우 비슷하다.
하지만 다른 점이 2가지 있다.

  • master construct 구간은 무조건 master thread (main thread)가 1번 실행한다.
  • master construct 구간뒤에 implicit barrier가 없다. 
    즉 모든 쓰레드는 master construct 실행되는 동안에도 계속 실행한다.
실행 결과는 위의 single construct와 같지만 위 그림에서 보듯이 약간의 차이는 있다. master construct는 implicit barrier가 없다는 점이다. 중요한 차이므로 꼭 기억해야 한다. 


8. Barrier

배리어란 동기화(synchronization)을 위해서 사용되는 기능이다.

동기화는 시간적 개념이다. 풀어서 설명하기 위해 예를 들자. 스타크래프트 배틀넷은 왠만한 사람이면 다 해봤을 것이다. 최대 8명까지 게임에 참가할 수 있는데, 어떤 유저가 매우 느린 모뎀을 쓰고 있으면 게임 중간에 타임을 세는 화면이 뜨고 기다려주는 것을 볼 수 있다. 이는 빠른 네트워크/컴퓨터를 가진 유저와 느린 네트워크/컴퓨터를 가진 유저의 게임 속도를 맞추기 위해서 배리어가 작동한 것이다. 따라서 결과적으로 배리어는 느린 사람에 맞춰서 앞서 가는 사람이 대기하도록 하는 기능이다.

그러면 프로그래밍에서는 배리어를 어떻게 사용해야 하는가? 작업이 병렬적으로 이뤄진다고 하더라도 전처리, 후처리 작업들이 나눠져 있을 경우에는 전처리 작업들을 병렬처리했을때 어떤 특정 쓰레드가 빨리 처리했다고 후처리 작업을 먼저 출발하면 데이터가 꼬이거나 로직이 망가질 수 있다. 이럴 경우 중간중간에 적절한 배리어를 넣어주면 깔끔하게 해결된다.(하지만 역으로 배리어가 많으면 그 만큼 대기도 많아질 수 있다.)

8.a Implicit barrier

앞에서 implicit barrier(암묵적 배리어)에 대해서 이야기를 많이 했다. OpenMP는 각 작업의 동기화에 대한 편의성을 제공하기 위해서 implicit barrier를 잘 제공한다. 어떤 construct 에 대해서 implicit barrier가 제공되는지 정리하고 넘어가자.
  • #pragma omp parallel
  • #pragma omp for
  • #pragma omp sections
  • #pragma omp single
위의 4가지의 경우는 블록 끝에 자동적으로 implicit barrier가 들어간다. 하지만 위의 4가지 construct 의 끝에 nowait clause를 지정하면 implicit barrier가 제거되고 대기하지 않고 이후 코드가 즉시 실행된다.

위의 예제에서는 single construct에 nowait를 적용하여 implicit barrier를 제거하는 것을 볼 수 있다. 
(그림 아래에 있는 implicit barrier는 parallel construct에 있는 barrier다.)

8.b Explicit barrier

이번에는 사용자가 직접 지정할 수 있는 explicit barrier 기능에 대해서 보겠습니다.
  • #pragma omp barrier 구문을 지정하면 해당 부분에서 모든 쓰레드가 도착할 때까지 대기하게 된다.
char * get_time0(char *buf, size_t sz_buf);
int main() {
int t_sleep; char buf[16];
#pragma omp parallel private(t_sleep, buf)
{
#pragma omp single nowait
sleep(1);
printf("[%s] phase1:sleep %ld sec.\n", get_time0(buf, sizeof(buf)), t_sleep = times(NULL)%8);
sleep(t_sleep);
#pragma omp barrier
/* explicit barrier */
printf("[%s] phase2. Hello world\n", get_time0(buf, sizeof(buf)));
}
return 0;
}
char * get_time0(char *buf, size_t sz_buf)
{
time_t t0; struct tm tm_now;
if (buf == NULL) return NULL;
if (time(&t0) == ((time_t)-1)) return NULL;
localtime_r(&t0, &tm_now);
if (strftime(buf, sz_buf, "%H:%M:%S", &tm_now) == 0) return NULL;
return buf;
}
이제 실행해보면 배리어 효과때문에 마지막 실행한 19:12:28에서 5초뒤에 phase2가 실행되는 것을 볼 수 있다.
$ ./omp_barrier
[19:12:27] phase1:sleep 1 sec.
[19:12:28] phase1:sleep 5 sec.
[19:12:33] phase2. Hello world
[19:12:33] phase2. Hello world
_M#]

C언어: OpenMP를 이용한 멀티 쓰레드 프로그래밍 HOWTO #
4 http://sunyzero.egloos.com/4258873

 [원문] http://northwind.springnote.com/pages/69967 northwind 님의 노트중에서 발췌

Compiler options for finding Bugs #1

 

 

 

Compiler options for a debug build #1

 

 

 Compiler options for a release build #1

 

디버그 런타임 라이브러리 사용시 특징 #1

 

릴리즈 모드에서 디버깅 하기 #1'

 

 설정을 변경하면 디버깅은 잘되나 배포판을 만들 경우에는 변경된 옵션을 환원하고 빌드하자.

자주 써야 할 경우 빌드 타입을 하나 더 만들어서 사용하는 것도 한가지 방법이다.

 

 

vs 6.0 기준

vs .net 기준

 

Registers And Pseudo-registers #1

 Register값은 “Registers" 윈도우에서 확인이 가능하지만 단순하고 값만을 알수 있다. 이 값들을 ”Address(Watch)" 박스에서도 확인이 가능하며 여러 부가 기능과 같이 쓸수 있다.

 예를 들어 EAX의 값을 확인 해볼려고 하면 Watch 항목에 “@EAX"혹은 ”@eax"와 같이 대소문자를 구분하지 않고 넣으면 이 래지스터의 값을 확인 할 수 있다.

 또한 Pseudo-register"의 값또한 확인 할수 있는데. "@ERR"의 Pseudo-register 값은 매우 유용하게 사용할 수 있는데 이 값이GetLastError의 값을 나타내기 때문이다. 만약 “@ERR,hr"이라고 입력한다면 Win32의 에러코드에 해당하는 택스트를 보여 줄것이다.

 

 

 

 

 

Pseudo-registers that the Watch window supports #1

 

Watch Window Formatting Symbols #1

 Watch 윈도우는 변수의 값을 볼수 있게 해주는데, 값을 십진수나 16진수로서 확인할 수 있다. 16진수는 팝업 메뉴에서 “Hexadecimal Display"를 선택하면 볼수 있다. 이 이외에도 여러 가지 옵션을 주어서 사용할 수 있는데 이들은 Watch Window에 등록되는 변수명 뒤에 ","를 삽입하고 그뒤에 옵션을 주어 사용할 수 있다.

 

 

 

 

 

디버깅에 도움이 되는 메모리 마킹 패턴 #1'

 

 

 

가끔 오류가 발생했을 경우에  만날수 있는 magic number. ( 디버깅 모드에서만 byte pattern 으로 마킹됨. )

 

non-MFC 프로젝트에서 메모리 릭(Memory Leck) 검출

 mfc 프로젝트에서는 DEBUG_NEW 가 기본적으로 제공되므로 메모리 릭을 검출하기가 용의하다. 하지만 일반 프로젝트에서는 추가적인 설정이 필요하다.

 위와 같은 코드를 기초 인클루드 파일에 추가하면 된다. ( 예를 들어 StdAfx.h 와 같은 곳에.. )

그리고 아랫 내용을 cpp 파일의 상단(인클루드 아랫 부분)에 추가하면 된다.

그리고

위와 같이 App 최초 구동시 메모리 릭 검출 디버깅 옵션을 켜준다.

 

그러면 디버그 모드로 실행 했을 경우 App 종료시 output 창에 메모리 릭 발생시 메모리 릭 정보가  해당 소스 파일과 라인등 정보와 함께 출력되는 것을 볼수 있을 것이다.

 

실수 연산 오류 발생시 Exception 발생 시키기 #2

    int stat = _controlfp(0, 0);
   stat &= ~(EM_ZERODIVIDE);
   _controlfp(stat, MCW_EM);

와 같이  EM_ZERODIVIDE 옵션을 추가하였다면 0으로 나눌 경우 해당 코드 부분에서 exception이 발생하므로 발생 부분을 즉시 확인할 수 있는 효과가 있다. 기타 다른 옵션은 MSDN 에서 _controlfp를 찾아서 확인하자.

 

Special Floating-Point Values and Their Representations #3

*, 1.#QNAN 의 경우 1.#INF ( 무한대의 값 ) 으로 연산시에 발생함.

 

 Pure virtual Function Call #4

순수 가상 함수를 파괴자 등에서 호출하여 생기는 오류 검출 방법.

 References
요즘 같이 날씨가 쌀쌀할때는 웬지 사케 한잔이 그립다..  

와인은 웬지 벽난로 앞에서 먹어야 될 것 같지만.. 웬지 사케는 선술집에서 먹어야 더 맛있을거 같다.. 
추운날은 그래서 친한이와 함께 선술집에서 한잔을 기울이고 싶다..


요즘에는 마트에 가봐도 예전에 비해 사케가 많이 늘어난걸 볼 수가 있다.. 그런데, 선택할 때 고민되고..
선택해도...먹는 법을 몰라서 사케를 잘 모르고 마시는 경우가 많다. 
무엇이든지 알고 행하면 더 잘 되고 알고 마시는 것이 더 맛있다는 사실...
그래서,  어떻게 사케를 먹는지 . 어떤 사케가 어울리는지 잘 모르는데.. 

이럴때 필요한 것이 이책이다..


표지

한눈에 봐도 사케 관련 전문 책이라는것을 알수 있다..


책은 전반적으로 아담한 사이즈이다.. 이것보다 조금 더 작아도 괜찮았을 듯 싶다..

보는법

책 보는법, 사케 라벨 읽는 법을 알 수 있다


이 수첩에 대한 활용법은 이 장만 봐도 다 알듯 싶다.. 라벨만 볼 수 있다면... 사케는 이미 절반은 아는셈..

기린잔 다이긴죠

사케 병도 이쁜건 이쁘다..


수첩이라는 책 제목처럼.. 사진을 담고 있어서 선택하는데 많은 도움을 준다.. 그리고 가격이 있어서 선택에 도움이 된다..(아무리 사케가 좋아도.... 경제 생각도 해야죠..)

너무나 평범

너무나 자주 접하는 사케.. 꼭 팩 소주 같은 느낌..



전반적으로 국내에 수입되는 사케에 대해서는 다 다루고 있다고 봐도 된다.

이 책을 보고 나면 아마 당신 발걸음은 마트로 달려가 이책을 보면서 사케를 고르고 있는 당신을 발견하게 될 듯 싶다..

점수 : 4.2 / 5.0 (좀 나열식인듯 싶다.. 그리고.. 사케 맛있게 먹는 법이나 일본식 주도에 대해서도 간략하게 서술했으면 좋았을듯..)

* 책정보
책명 : 
사케 수첩 - 내 손에 쏙 들어오는 85가지 사케
저자 : 
최창근(지은이)
출판사 : 
우듬지
출간일
 : 2009년 11월 20일
페이지수: 
106쪽 | 판형 : B6(128*188)
ISBN :
9788931921519

위드 블로그에서는 걔속 리뷰를 신청하지만 아무래도 난 책만 되는가 보다.. 이번에도 책이 두권이 되었다. 이번이 2,3번째 리뷰이다.. 그중 2번째 리뷰로 애들이 너무나 좋아하던 숟가락이다..

도착한 택배의 포장지를 뜯으니 얇은 비닐 포장이 한번 더 되어 있었다. 포장 상태는 합격점을 줄만 한듯 싶다.(요즘 들어 일반 책에도 비닐 포장이 한번 더 되어 있는 경우가 많은데, 필자의 경우에는 환경 문제라고 해도 비닐 포장이 되어 있는 것을 선호하는 편이다. 어차피 비닐 포장은 재활용 분리 수거하니까.. )

책 표지는 전반적으로 편안한 느낌이다..(큰 애 말로는 재밌을거 같은 느낌이란다..)
애들이 빨리 읽어 달라고 졸랐지만, 우선 리뷰를 위해 사진 몇 장부터 찍었다..

책표지

책 표지 : 아이들이 좋아할 만한 그림임. 바로 애들이 숟가락이라고 하면서 너무 좋아함


내용을 보면 숟가락의 가족들 소개를 하고 숟가락의 고민이 나오게 된다.. (보통 사람들이 하는 고민..)
나는 왜 저 사람보다 이런것이 못 났을까.. 하는 고민.... (ㅠㅠ)

본문 내용

본문 중 숟가락이 이모내 놀러 갔다 오는 그림.. 애들은 이 그림 하나에도 많은 질문이 있었다.. 아무래도 내가 늙었나?


하지만,  이 책에서는 그런 부분을 아주 다른 부분에서 해결한다..
내가 다른 사람을 부러워하는 만큼 다른 사람들도 나를 부러워 한다는 것이다.

내가 운동을 못하고 공부를 잘한다면... 운동을 잘하고 공부를 못하는 사람은 반대로..
살찐 사람은 마른 사람을 ... 마른 사람은 살찐 사람을 부러워 하듯이..


결론 부분

자신의 소중함과 가족의 사랑을 느낄수 있는 부분


전반적으로 짧은 이야기이고 많이 듣던 말들이지만, 그 내용들을 딸들에게 읽어 주면서..
다시 한번 생각해 보게 하는 내용이었다..
나는 누군가를 부러워 하고 있지 않은가..
나의 장점은 무엇인가...

가희

책 표지를 바라보는 가희

나희

같이 보고 싶다고 언니 가희에게 조르는 나희


이 책이 온뒤로 며칠간은 이 책을 자기전에 읽어 달라고 두 딸이 졸라대서 조금은 행복한 불만이 생겼다. 애들에게 좋은 선물이 된 듯 싶어서 너무나 좋았다..

유치원에서 초등학교 1~2 학년까지 읽어주면 좋을 듯하고... 어른들도 읽어 주면서 다시 한 번 생각하게 될 만한 책이다..;

추천 점수 : 4.8 / 5 (결론 부분에서 약간 부족한 감이... 그것만 아니면 만점 줘도 될듯..)

* 책정보
책명 : 숟가락(SPOON)
저자 : 에이미 크루즈 로젠탈(글) 스콧 매군(그림) / 이승숙 옮김
출판사 : 지경사
출간일
: 2009년 11월 20일
페이지수: 32쪽 | 규외/양장본 | 364g
ISBN : 9788931921519



+ Recent posts