이글은 예전 제 싸이월드 블로그에 작성한 글을 가져온 것입니다.

원문 : http://cy.cyworld.com/home/21147242/post/4DE5EF53C715739A07C68401
원문 작성일 : 2011.06.01
------------------------------------------------------------------------

 

첨부파일 : abstractFactory_by_c.zip

 

이게 다형성이라는 의미가 맞는건지 모르겠습니다.
차라리 디자인 패턴의 abstract factory 에 더 가까운 것 같기도 하고...
둘 다인가? ㅡㅡa

암튼, 제 의도는 아래와 같습니다.
제품을 만들다보면 어떨 땐 Intel 칩을 쓰기도 하고 어떨 땐 Broadcom 칩을 사용할 때도 있습니다.
비록 칩은 다르더라도 Chip_open(), Chip_read(), Chip_write(), Chip_close() 라는 공통 분모가 있습니다.

다시 얘기하면,
UI 개발자는 Intel 칩이든 Broadcom 칩이든 신경 안쓰고 저 4개 함수만 호출하면 되도록 짜고싶은거지요.

UI 에서 Chip_open(), Chip_read(), Chip_write(), Chip_close() 를 호출했을 경우,

Intel칩이라면 최종적으로 아래 함수가 호출되고,
INTEL_Chip_open(), INTEL_Chip_read(), INTEL_Chip_write(), INTEL_Chip_close() 가 호출되고,

Broadcom 칩이라면 최종적으로 아래 함수가 호출되도록 하는겁니다.
BROADCOM_Chip_open(), BROADCOM_Chip_read(), BROADCOM_Chip_write(),BROADCOM_Chip_close()

C++ 에서는 순수가상함수와 다형성을 이용하여 구현할 수 있습니다.
C 에선 함수포인터를 이용하여 비슷하게 구현할 수 있더군요. 형태 기록차원에서 초 간단하게~~
main.c 에서 Chip_open(), Chip_read(), Chip_write(), Chip_close() 가 호출되어집니다.
또한 main.c 가 바라보는 건 chip.h 만 바라봅니다.
chip.c 에서 어떤 칩을 사용할 것인지 결정하고, 그 결정에 따라 Intel 또는 Broadcom 의 함수포인터를
넘겨줍니다.

 

코드 분량을 최소화 했으니 보시는데 어려움이 없을 겁니다.

첨부파일 : abstractFactory_by_c.zip

 

map 컨테이너를 이용해 클래스 멤버함수의 콜백함수 등록과 호출하기.

이글은 예전 제 싸이월드 블로그에 작성한 글을 가져온 것입니다.

 

원문 : http://cy.cyworld.com/home/21147242/post/4D75C4B98555739A07C68401
원문 작성일 : 2011.03.08

--------------------------------------------------------------------------------------------------------------


제목 참 거창하네...
일하다가 번뜩 떠올라 짜봤습니다.
map 컨테이너를 이용해 등록된 콜백함수를 좀 더 빠르게 찾지 않을까 하는 기대감입니다.
등록되는 콜백함수는 일반함수가 될 수도 있으나 클래스 멤버함수도 등록될 수 있음을 보였습니다.
클래스 멤버함수와 함수포인터의 관계는 데브피아 강의에 잘 나와있습니다. (아래 링크 참조)


http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=7431&ref=7431


아래와 같이 구상하고 흐믓해하며 자만심에 잠깐 빠져있다가
누군가도 나와같은 생각을 했을텐데.... 하고 검색해 봤습니다.
역시나... 기는 놈 위에 나는 분 계시더군요.
template 을 이용해 일반화까지 구현하여 블로그에 올리신 분이 계시더군요.
클래스 멤버함수 콜백 : http://blog.naver.com/yiyousung?Redirect=Log&logNo=80113313235
아래는 허접한 제 코드입니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include<cstdio>
#include<map>
 
using namespace std ;
 
enum Psi
{
        eDescVideo,
        eDescAudio,
        eDescSubtitle
};
 
class CPsiDescriptor
{
public :
        int switchDesc(Psi psi) ;
 
 
private :
        int descVideo(int a, int b) ;
        int descAudio(int a, int b) ;
        int descSubtitle(int a, int b) ;
};
 
typedef int (CPsiDescriptor::*FUNC_DESC)(int a, int b) ;
 
int CPsiDescriptor::switchDesc(Psi psi)
{
        static int flagSwitchDesc = 0 ;
 
 
        static map<Psi, FUNC_DESC>mapDesc ;
        static map<Psi, FUNC_DESC>::iterator mapDescIter ;
 
 
        static FUNC_DESC funcDesc ;
 
        if(!flagSwitchDesc)
        {
                mapDesc.insert(make_pair(eDescVideo,&CPsiDescriptor::descVideo)) ;
                mapDesc.insert(make_pair(eDescAudio,&CPsiDescriptor::descAudio)) ;
                mapDesc.insert(make_pair(eDescSubtitle,&CPsiDescriptor::descSubtitle)) ;
 
 
                flagSwitchDesc = 1 ;
        }
 
 
        mapDescIter = mapDesc.find(psi) ;
 
 
        if(mapDescIter != mapDesc.end())
        {
                funcDesc = mapDescIter->second ;
                (this->*funcDesc)(2, 3) ;
        }
        else
        {
                printf("cannot find PSI tags\n") ;
        }
 
 
        return 1 ;
}
 
int CPsiDescriptor::descVideo(int a, int b)
{
        printf("callback : descVideo()\n") ;
        return 1 ;
}
 
 
int CPsiDescriptor::descAudio(int a, int b)
{
        printf("callback : descAudio()\n") ;
        return 1 ;
}
 
int CPsiDescriptor::descSubtitle(int a, int b)
{
        printf("callback : Subtitle()\n") ;
        return 1 ;
}
 
int main()
{
        CPsiDescriptor psiDesc ;
 
        psiDesc.switchDesc(eDescVideo) ;
        psiDesc.switchDesc(eDescAudio) ;
        psiDesc.switchDesc(eDescSubtitle) ;
 
        return 1;
}
 

 

이글은 예전 싸이월드 블로그에 작성한 글을 가져온 것입니다.


원문 : http://cy.cyworld.com/home/21147242/post/4D75C4B98555739A07C68401

작성일 : 2011.03.08 

------------------------------------------------------------------------

아래 코드를 돌리면 무한루프에 빠집니다.

 #include<stdio.h>


int main()
{
     FILE* fp = fopen("FacotryStream.trp", "rb")
     unsigned char szBuff[1024] ;
     while(!feof(fp))
    {
          fread(szBuff, 4, 1, fp) ;
          fseek(fp, 184, SEEK_CUR) ;
     }
     printf("test finnish~~!!\n") ;
     return 1 ;
}



언뜻 보기엔 FILE 핸들을 받아 4Bytes 읽고 184Bytes 점프~

그러다 파일 끝에 도달하면 while() 문을 빠져나오는 것 같은데 말이죠.
핵심은 fseek() 함수입니다.
man fseek 해서 나오는 문구를 그대로 인용해보면,
"
fseek 함수의 연속적인 호출은 스트림을 위한 EOF 지정자를 지우고
.....블라블라블라~~"
그러므로 fseek() 함수 이후에 호출되는 feof() 함수는 무용지물이 된다는거죠.
위 코드의 while() 문은 아래와 같이 fseek 이전에 feof() 를 호출하도록 수정되어야 합니다.

while(1)
{
    fread(szBuff, 4, 1, fp) ;
    if(feof(fp))
        break ;
    fseek(fp, 184, SEEK_CUR) ;
}
그럼, 즐거운 하루 되세요.



이글은 예전 싸이월드 블로그에 작성한 글을 가져온 것입니다.


원문 : http://cy.cyworld.com/home/21147242/post/4C7DB9A7C7D5739A07C68401

작성일 : 2010.09.01 11:25


-----------------------------------------------------------------------

어떤 문자열이나 데이터에서 특정 비트열을 가지고 오고 싶을 때 사용하는
매크로 함수를 만들어 보았습니다.

PSI 데이터 parsing 하다가 만들게 되었네요.

buf 에 데이터를,
x, y 에 시작 비트열과 끝 비트열을 넣어주시면 됩니다.

맘대로 갖다 쓰셔도 되며 출처나 적어주심 감사하고~~
혹시나 버그 있을지 모르니 조심히... =_=;;

#define GETBIT_16(buf, x, y) (((unsigned short)(((0xFFFF>>((x) - 1)) \
                                                 ^ (0xFFFF>>(y))) \
                                                 &((unsigned short)(buf<<8) | ( *(&buf + 1))))) \
                                                 >>(16 - (y)))

#define GETBIT_8(buf, x, y) (((unsigned char)(((0xFF>>((x) - 1)) \
                                               ^ (0xFF>>(y)))&(unsigned char)(buf))) \
                                               >>(8 - (y)))

사용법.

unsigned char* szDATA ; // 데이터가 들어있는 변수.

11110011 01101100

위와같이 16개의 비트가 있을 때,

왼쪽에서 5번째부터 10번째까지 가져오고 싶다면~

GETBIT_16(*szDATA, 5, 10) ; // GETBIT_16(szDATA, 5, 10) 아님.

이렇게 사용하시면 됩니다.

6월 20일,
간만에 닭발이 땡겼고 때마침 용인시장 장날이라 용인닭발을 검색했다.
했더니 이천의 용인닭집이 나온다.
이래저래 후기를 살펴보니 옷~ 볶음이 아니라 무친 닭발이다.
근데 너무 멀다.
그러다 어제 급 땡겨서 퇴근길에 왕복 80Km 를 달려 사 왔다.
만원어치 샀는데 아내랑 둘이 먹다 남길정도로 푸짐했다.
닭발이 크고 통통하여 맛이 좋았다.
너무 달았다.
양념치킨이 아니라 양념닭발 느낌이다.
카드결제 가능하다.
시장 한복판에 있어 네비(맵피) 검색이 안되었다.
관고시장 입구에서 멀지 않다. 관고시장으로 검색해 찾아가면 된다.
셋째주 일요일은 쉰다.




소심해서 멀리서 한장 찍음.
튀김, 순대, 오뎅, 떡볶이 등도 같이 판다.







이천 관고시장.
이런 시장 있는 동네에서 살고 싶다.







만원어치 사고 45Km를 쎄빠지게 달려 집에와서 드디어 개봉박두.

너무 단게 아쉽다.

'상사꽃 > 때로는' 카테고리의 다른 글

PARK OUT  (0) 2017.04.12
오랜만에...  (0) 2017.01.19
[2015.05.20] 지평 막걸리  (0) 2016.10.09
[2015.04.17] 세월호 참사 1주년 추모  (0) 2016.10.09
[2015.04.08] 작은세상  (0) 2016.10.09

1박2일 막걸리편 한달 전인가,
페이스북에서 산악회 동생이 개도막걸리 한박스 드디어 도착했다고 글을 올렸다.
집도 가깝겠다 한병 얻어먹어볼까... 하다가 까먹었는데 1박2일에 뙇~! 나옴.
1박2일 막걸리편 2주 전인가,
홍천에 있는 사촌형네 놀러가는데 사촌형이 전화해서 지평막걸리를 사오란다.
지방도 타고 슬금슬금 가는데 쫌 있다가 양평군 지평면 양조장이 뙇~ 나옴.
오~ 여기 술인가보구나... 흔한 술인가보네? 홍천가서 사면 되겠다 했는데
막상 홍천에서 안팔았다.
"형~ 여기 지평막걸리 없어."
"그래? 그럼 아무거나 사와. 취하면 그막걸리가 그막걸리더라."
그리고 1박2일에 뙇~! 나옴. 우왕~~
주말에 옆동네 다이소 갔다가 9단지 놀이터에서 애들이랑 놀다가
첫째가 목마르다 하여 편의점 들르고 살거 좀 사고 카운터 가는데 이게 뙇~! 있다.
맥주를 다시 갖다놓고 지평막걸리 두병 삼. 
득템했다. ㅋㅋ
기대감이 너무 컸던 것일까?
흔한 막걸리보다는 분명 나았지만 기대에는 좀 못미침.
내 입맛에는 살짝 아쉽다가 적당한 표현이겠지.
이런 동네 소규모 양조장이 많아져 주전자에 막걸리 받아가던 풍경이 살아나면 좋겠다.




'상사꽃 > 때로는' 카테고리의 다른 글

오랜만에...  (0) 2017.01.19
[2015.06.23] 이천 용인닭집  (0) 2016.10.09
[2015.04.17] 세월호 참사 1주년 추모  (0) 2016.10.09
[2015.04.08] 작은세상  (0) 2016.10.09
[2015.02.23] 1월 핸드폰 요금  (0) 2016.10.09

어머니 생신과 겹쳐 못가나 했는데
다음주에 저녁먹자고 하셔서 광화문으로 향했다.




버스타고 광화문에서 내리니 끝이 어딘지 모를 추모행렬이 길게 늘어서 있었다.
줄의 끝을 찾으니 세종대왕상이었다.
그 줄은 이순신동상 찍고 다시 세종대왕상 찍고 이순신동상 뒷편 분향소로 이어진 1km에 가까운 줄이었다.
바람이 제법 불어 꽤 쌀쌀하였다.
1시간정도 지나니 입술이 떨릴 정도로 추웠다.
세월호 안에 갇힌 아이들이 느꼈을 추위와 공포를 생각하니 끝없는 먹먹함이 밀려왔다.








기다리는 중에 보니 좌 동아일보, 우 조선일보가 내려다보고 있다.
기분 정말 더러웠다.







2시간을 기다려서야 분향소에서 추모를 할 수 있었다.
10시 30분. 늦은 시간인데도 줄은 세종대왕상까지 길게 있었다.







9시 30분경,

광화문 상하좌우가 통제돼고 시청방향에서 스피커소리가 들렸다.
시청에서 집회하던 사람들이 광화문에 합류하려하자 경찰은
3중 차벽으로 이를 막았다.









11시 경, 
집으로 가기 위해 나오니 끝도 모르게 막아놨다.
시민들은 경찰에게 집에 어떻게 가라는거냐며 항의했다.
덕수궁 외곽을 크게 돌아서야 시청으로 갈 수 있었다.







겨우 명동에 도착해 집에가는 버스를 탈 수 있었다.
글쓰는 지금도 어제의 먹먹함이 사라지지 않고 있다.
그러는 거 아니다. 이 개새끼들아~~!!



'상사꽃 > 때로는' 카테고리의 다른 글

[2015.06.23] 이천 용인닭집  (0) 2016.10.09
[2015.05.20] 지평 막걸리  (0) 2016.10.09
[2015.04.08] 작은세상  (0) 2016.10.09
[2015.02.23] 1월 핸드폰 요금  (0) 2016.10.09
[2015.01.20] 악몽  (0) 2016.10.09

어제 식당에서 점심먹는데 누가 내 이름을 불렀다.
동아리 1년 후배이다.
어연일이냐고 서로 인사하고나니 같은 빌딩 7층에 있다고 한다.
세상 참 좁구나 싶었다.
다시 한 번 착하게 살아야겠다고 마음먹는다.

주로 있는 곳이 집, 아니면 사무실이다보니
데이터에 대한 필요성을 못느꼈고 
업무 특성상 여기저기 전화할 일도 없고 해서
10년 넘게 표준요금제만 써왔다.
보통 2만원 안쪽으로 나오고 이슈가 있으면 넘기도 하고 했는데
저번달에 드디어 기록을 세우다.



끔찍한 꿈을 꾸었다.
꿈속에서 소스라치게 놀라 으아악~~!! 비명을 질렀다.
그 와중에 깨어났다.
깨어나서도 잠깐 비명을 질렀고 컴컴한 방에서 귓전에 들리던 내 비명소리를 기억한다.
시계를 보니 02시 30분.
새벽까지 잠을 뒤척이다 잠들었다.
아침에 일어나 창가를 보니 단지 안에 상조회사 리무진이 들어와있다.
출근길,
회사 거의 다 와서 아침에 본것과 같은 리무진을 또 만났다.
바로 내 앞으로 들어오길래 찜찜함에 엑셀 밟고 급히 추월했다.
더럽게 찜짐한 하루이다.

'상사꽃 > 때로는' 카테고리의 다른 글

[2015.04.08] 작은세상  (0) 2016.10.09
[2015.02.23] 1월 핸드폰 요금  (0) 2016.10.09
[2014.11.10] 플라멩코 춤 - 80일간의 세계일주(1956) 중에서  (0) 2016.10.09
[2014.09.24] 바람구름  (0) 2016.10.09
[2014.09.03] 해무  (0) 2016.10.09


2년전 두바이 출장갔다 돌아오는 길에 비행기에서 본 영화.
다시 구해 제대로 보다 이남자 춤보고 깜짝 놀랐다.
(이 남자 춤 넣으려고 원작에는 없는 스페인 여행을 추가한건가... ㅡㅡa )
이 얼마만에 느껴보는 섹시한 남자인지...
게다가 카메라 한대 롱샷이다. 정신사납지 않게 차분히 감상할 수 있어 더욱 좋다.
댄서 이름은 José Greco, 찾아보니 플라멩코 전문 댄서이며 이름 좀 꽤 날렸나보다.
2000년에 돌아가셨네...
You Tube 링크 테스트 겸 올려본다.





'상사꽃 > 때로는' 카테고리의 다른 글

[2015.02.23] 1월 핸드폰 요금  (0) 2016.10.09
[2015.01.20] 악몽  (0) 2016.10.09
[2014.09.24] 바람구름  (0) 2016.10.09
[2014.09.03] 해무  (0) 2016.10.09
[2014.08.19] 광화문에서  (0) 2016.10.09






구름이 바람을 타고 스르르 움직였다. 
뛰쳐 나가고 싶었다.



'상사꽃 > 때로는' 카테고리의 다른 글

[2015.01.20] 악몽  (0) 2016.10.09
[2014.11.10] 플라멩코 춤 - 80일간의 세계일주(1956) 중에서  (0) 2016.10.09
[2014.09.03] 해무  (0) 2016.10.09
[2014.08.19] 광화문에서  (0) 2016.10.09
[2014.07.10] 한달  (0) 2016.10.09

이 사진 한장 보고 이건 봐야된다 생각했다.




그렇게 아내에게 허락받고 월요일 저녁 퇴근 후 대한극장.
앞에서 2/3 위치에 앉았는데 좌우 앞으로 한명도 없어 나혼자 영화보는 느낌으로 봤다.
난 좋았지만 관객수 지못미 ㅜ.ㅠ
역시, 영화는 아무 정보 없이 보러가야 제맛이다.
가수출신이 연기하는 거 되게 싫어하는데 박유천은 깔끔했다.
최고의배우 김윤석,문성근의 기관실 투샷씬, 하악~ 감동이다.
한예리. 연길에서 데려온 배우인가 했는데 남조선 배우였다. 즐겨찾기 추가.
후반부 해무씬이 세트티가 강해 조금 아쉬웠다.
연극도 보고 싶은데... 몇년전에 끝났네. 주연이 무려 송새벽. @_@
한번 더 보고 싶다. 아내한테 혼날려나... 이번주면 내려갈 것 같은데...

어제 속이 메슥거려 일찍 퇴근하였다.
앉아가려고 명동을 가로질러가다가 필받아서 광화문까지 걸었다.
유민 아버님이 계셨고 옆에 백기완씨, 박재동 화백도 보였다.
차마 가까이서 사진찍지 못하고 멀리서 한장 찍었다.
세종대왕상까지 걸어갔다오니 정청래 의원과... 이사람 이름이 뭐였더라?
바람이 강해 걱정이 되었고 저멀리 청와대 지붕이 나를 우울하게 만들었다.
하루종일 비가 부슬부슬 내리니 유민 아버님이 머릿속에서 떠나질 않는다.








'상사꽃 > 때로는' 카테고리의 다른 글

[2014.09.24] 바람구름  (0) 2016.10.09
[2014.09.03] 해무  (0) 2016.10.09
[2014.07.10] 한달  (0) 2016.10.09
[2014.06.02] 출근길 활력소  (0) 2016.10.09
[2014.05.27] 다시 시작하기  (0) 2016.10.06

지속된 고열, 응급실, 피검사, 골수검사, 백혈병... 입원, 무균실, 퇴원, 통원치료, 투약...
딸아이의 항암치료는 일사천리로 진행되었고 
집안이 발칵 뒤집혀 한달이 정신없이 지나갔다.
그래도 아직 가끔 실감이 안난다.
항암제 부작용으로 승빈이의 얼굴은 붓고부어 달덩이가 되었다.
탱탱해진 볼을 잡고 웃으며 얼릉 나으라 했다.
머리카락이 한줌씩 빠지고 있다. 아침이면 베개에 온통 머리카락.
하아~ 이건 정말 못견디겠다. 억장이 무너진다.
이제 몇년간 무슨 일이 일어날지 모른다.
제발 건강히 낫기만 해다오.

'상사꽃 > 때로는' 카테고리의 다른 글

[2014.09.03] 해무  (0) 2016.10.09
[2014.08.19] 광화문에서  (0) 2016.10.09
[2014.06.02] 출근길 활력소  (0) 2016.10.09
[2014.05.27] 다시 시작하기  (0) 2016.10.06
[2013.09.12] 핸드폰 불구  (0) 2016.10.06

+ Recent posts