|
|
|
|
제 자리를 급하게 TH55 클리에로 찍어서 올려 봅니다. 너무 지져분합니다. 단지 오늘을 기억하고 싶은 마음에 남겨 봅니다.^^ 정리 되지 않은 모습이 제 모습과 같습니다.
"나보다 못난 사람은 세상에 없다"라는 마음으로 하루 하루 살아가고자 하는데 잘 안되는 것 같습니다.^^ 낮은 자세로 겸손하게 일하고, 다른 사람들과 업무에 대해서 소통하고 의견을 경청한다는 것은 참으로 어려운 일 같습니다. 2008. 7.21 삼실에서......
|
|
|
|
|
|
종종 들려 좋은 글을 읽고 오는 제임스님이 오랜만에 글을 포스팅 하셨습니다. 내용은 "안양천"과 관련된 내용입니다. 저희 회사는 분당에 자리잡고 있습니다. 정확하게 이야기하면 정자역과 수내역 사이에 있습니다. 분당에도 "탄천"이라는 작은 천이 있습니다. 이곳도 "자연형 하천"으로 전환 하면서 부터 개천에 오리와 물고기들이 많이 보입니다. 자연형 하천이라는 것은 인공적인 변형을 가하지 않은는 자연 상태의 하천입니다. 쉽게 양쪽에 콘크리트로 뚝을 쌓거나 중간에 제방으로 막아 놓지 않고, 그냥 마음대로 물이 흐르도록 내버려 두는 것입니다. 이런 하천은 구블구블하고 유속도 불규칙하며 일단 ^^ 물도 깨끗해지고 수풀이 무성하여 수상생물들이 서식할 수 있는 환경이 만들어 지죠. 또한 오리녀석들이 풀숲에서 살수도 있구요. 이런 곳이 바로 "습지"가 되는 것 같습니다. (네이뇬을 조금 참조 해서 코멘트를 달았습니다.) 3년을 지켜 보며 물이 깨끗지는 것을 지켜 보고 있습니다. 앞으로 몇년이 더 지난다면 물에서 뛰어 노는 사람들도 볼수 있지 않을까 기대 해봅니다. 감사 합니다.
|
|
|
|
[알고리즘]힙(heap)을 이용한 우선순위 큐 |
|
|
대딩때 가장 즐겁게 만들었던 우선순위 Heap입니다.^^ 참 단촐 하면서도 가장 재미있게 한 레포트였습니다.
항상 n-1을 유지 하기 때문에 Static 한 Arrary를 Pointer 이용하여 각 노드들의 포인터만 저장 될 수 있도록 하고 Indexing을 통하여 우선순위 Heap을 핸들링 하는 것이 좋겠다 생각 한다.
Push와 Pop을 이용하여 새로운 Node를 삽입하게 되고 삽입 된 노드는 항상 가장 아래에 입력이 됩니다. 즉 N-1에 입력이 된다고 할 수 있다.
Pop이 이루어질 때는 우선 순위가 갖아 높은 최상의 Node가 Pop이 되고 Pop이 되면 자식 노드중 가장 큰 값을 다시 최상으로 올리는 재배열이 이루어져야 한다. 요것만 지켜지면 Max Heap이 됩니다.
아래 내용은 내용의 출처는 http://timenote.net/ 에 기록자 님의 작성한 원문이다. 특별히 저자분의 동의 없이 내용을 훔쳐 왔다는게 마음에 걸리고 동의를 받아야 하겠다.
힙(heap)이란 특수한 형태의 완전이진트리의 구조를 가진다. 힙은 각 노드의 키 값이(자식이 있다면) 그 자식의 키 값보다 작지 않은 완전 이진 트리이다. 힙의 구조를 살펴보면 아래와 같다.
완전 이진트리인 힙의 일반적인 형태
힙은 일반적으로 우선순위 큐(priority queue)를 구현할 때 자주 사용된다. 이전에 구현해 보았던 큐와는 달리 우선순위 큐에서는 우선순위가 가장 높은 원소를 먼저 삭제한다. 예를 들어 운영체제의 작업 스케줄러가 관리자에게 높은 우선순위를 부여하고 학생에게는 낮은 우선순위를 부여하는 우선순위 시스템을 사용한다고 가정하자. 이 경우 작업들을 유지하는 우선순위 큐를 최대 힙으로 구현할 수 있다.
힙은 우선순위 큐를 구현하는 한 방법일 뿐이다. 실제로 우선순위큐를 표현하기 위한 방법으로는 순서없는 배열, 순서없는 연결 리스트, 정렬된 배열, 정렬된 연결 리스트, 힙 등이 있다. 이 중 삽입과 삭제에 대한 복잡도가 둘다 log n의 복잡도를 가지는 것은 힙이다. 그렇기 때문에 우선순위큐를 표현하는 방법들중 힙을 선호하게 만든다. 그러면 힙의 삽입과 삭제 방법을 보도록하자.
아래 그림은 힙의 삽입 방법이다.
힙에서의 삽입 과정은 배열의 제일 뒤에 새로운 원소를 삽입하고 부모 노드의 키 값과 비교해서 부모 노드보다 작을 때까지 교체과정을 거친다. 즉, 삽입시에 최대한의 비교과정을 거치더라도 루트 노드까지만 비교하면 되므로 복잡도는 log n 을 따르게 된다. 다음은 힙에서 삭제가 일어나는 과정을 보도록 하겠다.
힙에서의 삭제 과정
힙에서의 삭제는 항상 루트의 값이 제거 되므로 루트의 값이 제거된 후에도 힙을 유지할 수 있도록 하기 위한 처리가 필요하다. 우선 완전 이진트리가 되어야 하므로 제일 뒤의 원소(여기서는 6)를 루트의 자리에 위치 시킨다. 그리고 힙의 특성상(여기서는 최대힙) 부모노드의 키값이 자식 노드의 키값보다 커야 하므로 자식 노드와 비교하면서 키값이 자식노드보다 클 때까지 반복해 나간다.
아래에는 힙을 구현하여 소스코드를 작성해 보았다.
그럼 고운하루... 되세요.
|
|
|
|
다시 들쳐 보는 문법 및 레퍼함수 - fseek |
|
|
제목을 어떻게 붙일까하다가 "다시 들쳐 보는 문법 및 레퍼함수"이라 하였다. 특별히 fseek를 사용하는데 어려운 일이 있는 것도 아니다.
다만 가물 가물 해져가는 기억을 위해 실험하고 기록하여 이짓( IT )을 오래도록 해먹기 위한 발악쯤으로 생각 하면 될 듯...
fseek를 MSDN을 참조하면...
* 특정 위치로 파일의 포인터를 움직인다. * 64bit를 위한 offset이 존재 한다는 것을 알 수 있다.
msdn에서 함수에 대한 설명을 볼때 가장 중요하게 볼 것은 역시, 인자 값과, 리턴 값일 것이다. 아래 내용을 잘 살펴보면
"If successful, fseek and _fseeki64 returns 0. Otherwise, it returns a nonzero value. " 성공과 실패에 대한 return 값을 정의하고 있다.
MSDN을 살펴보면 친절하게도 예제 코드도 제공 해준다. 굿이다.
Moves the file pointer to a specified location.
int fseek(
FILE *stream,
long offset,
int origin
);
int _fseeki64(
FILE *stream,
__int64 offset,
int origin
);
Parameters
- stream
-
Pointer to FILE structure.
- offset
-
Number of bytes from origin.
- origin
-
Initial position.
Return Value
If successful, fseek and _fseeki64 returns 0. Otherwise, it returns a nonzero value. On devices incapable of seeking, the return value is undefined. If stream is a null pointer, or if origin is not one of allowed values described below, fseek and _fseeki64 invoke the invalid parameter handler, as described in Parameter Validation. If execution is allowed to continue, these functions set errno to EINVAL and return -1.
Remarks
The fseek and _fseeki64 functions moves the file pointer (if any) associated with stream to a new location that is offset bytes from origin. The next operation on the stream takes place at the new location. On a stream open for update, the next operation can be either a read or a write. The argument origin must be one of the following constants, defined in STDIO.H:
- SEEK_CUR
-
Current position of file pointer.
- SEEK_END
-
End of file.
- SEEK_SET
-
Beginning of file.
You can use fseek and _fseeki64 to reposition the pointer anywhere in a file. The pointer can also be positioned beyond the end of the file. fseek and _fseeki64 clears the end-of-file indicator and negates the effect of any prior ungetc calls against stream.
When a file is opened for appending data, the current file position is determined by the last I/O operation, not by where the next write would occur. If no I/O operation has yet occurred on a file opened for appending, the file position is the start of the file.
For streams opened in text mode, fseek and _fseeki64 have limited use, because carriage return–linefeed translations can cause fseek and _fseeki64 to produce unexpected results. The only fseek and _fseeki64 operations guaranteed to work on streams opened in text mode are:
- Seeking with an offset of 0 relative to any of the origin values.
- Seeking from the beginning of the file with an offset value returned from a call to ftell when using fseek or _ftelli64 when using _fseeki64.
Also in text mode, CTRL+Z is interpreted as an end-of-file character on input. In files opened for reading/writing, fopen and all related routines check for a CTRL+Z at the end of the file and remove it if possible. This is done because using the combination of fseek and ftell or _fseeki64 and _ftelli64, to move within a file that ends with a CTRL+Z may cause fseek or _fseeki64 to behave improperly near the end of the file.
When the CRT opens a file that begins with a Byte Order Mark (BOM), the file pointer is positioned after the BOM (that is, at the start of the file's actual content). If you have to fseek to the beginning of the file, use ftell to get the initial position and fseek to it rather than to position 0.
This function locks out other threads during execution and is therefore thread-safe. For a non-locking version, see _fseek_nolock, _fseeki64_nolock.
Requirements
Function |
Required header |
Compatibility |
fseek |
<stdio.h> |
ANSI, Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 |
_fseeki64 |
<stdio.h> |
Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 |
For additional compatibility information, see Compatibility in the Introduction.
Example
// crt_fseek.c
// This program opens the file FSEEK.OUT and
// moves the pointer to the file's beginning.
#include <stdio.h>
int main( void )
{
FILE *stream;
char line[81];
int result;
if ( fopen_s( &stream, "fseek.out", "w+" ) != 0 )
{
printf( "The file fseek.out was not opened\n" );
return -1;
}
fprintf( stream, "The fseek begins here: "
"This is the file 'fseek.out'.\n" );
result = fseek( stream, 23L, SEEK_SET);
if( result )
perror( "Fseek failed" );
else
{
printf( "File pointer is set to middle of first line.\n" );
fgets( line, 80, stream );
printf( "%s", line );
}
fclose( stream );
}
OutputFile pointer is set to middle of first line. This is the file 'fseek.out'.
.NET Framework Equivalent
See Also
|
|
|
|
[음식]Black Tea with Sugar and Milk |
|
|
몇년전 호주에서 잉글리쉬 아이리쉬 녀석들이 즐겨 마신 던(?) 립톤! 결국 나도 즐겨 마시게 되었다. 그 당시 양키들은 일하기 시작 하기전에 한잔, 점심 먹기 전 TeaTime때 다시 한잔. 아무래도 하루에 5~6잔은 즐겨 마시는 듯 햇다. 립톤을 맛나게 마시는 방법은 당연히 밀크티로 마시는 것이다. 립톤(Lipton yellow Labeltea)에 우유를 넣어 잘 저어 마시면 된다 취향에 따라 각설탕 한두개 쯤은 넣어 달콤하게 마실 수도 있다. 개인적으로는 우유만 적당하게 섞어 마시는걸 선호 sugar free!!! 립톤 이미지를 찾으로 구글에 이미지 검색중 립톤과 밀크티를 이쁘게 사진과 함께 올려 주신 분이 있어서 트랙백~ 밀크티 만들기 1. 잔을 뜨거운물로 헹군다. 2. 립톤을 넣고 뜨거운 물(100도)를 넣는다. 3. 2 ~ 3분 기다린다. 4. 우유를 넣는다. 5. 홍홍 그리고 마신다. 아항 너무 쉽당. :) 오늘 회사 원두 커피 내려 먹는 곳에 립톤 두개를 넣고 내려 보았다. 굿!!!!!! 코로로록 콜로록하며 잘내려 진다.^^ 회사 분들중 원드 커피 내린 것으로 알고 마실지도..:)
|
|
|
|
Announcing: New Google C++ Testing Framework |
|
|
최근 RSS를 사용하고 있습니다. RSS의 약자는 Really Simple Syndication(매우 간단한 배급)이라는 뜻을 가지고 있습니다. RSS가 어떤 기능을 하고 있을까? 생각 해보면, 그 옛날 ~ 메일링 리스트와도 같은 역활을 합니다. ^^
제가 Outlook 2007을 사용하며, RSS의 기능을 적극 활용하고 있습니다. 새로운 글이 포스팅이 되었을때 RSS를 통해서 메일을 받아 볼 수 있습니다.
웹 블로그나 홈페이지를 일일히 방문하지 않아도 됩니다. outlook을 통해서 새롭게 포스팅 된 글을 읽으면 됩니다.
RSS의 장점으로 꼽는다면...
1. 시간절약 2. 각 블로거 님들마다 기사가 정리 됩니다. 3. 원클릭으로 원본 글을 읽을 수 있습니다.
서두가 길었습니다.
오늘은 구글의 Google C++ Testing Framework에 대해서 알아 보도록 하겠습니다. 제가 RSS를 통해서 알게된 google의 " Testing Blog"입니다.
업무 시간이라 글을 대 허접하게 올려 놨군요. 항상 글을 쓸때, 완성도 있는 글을 써야겠다 마음 먹지만 잘 안되는군요. (시간이 없다는 핑게로요..)
|
|
|
|
[MFC] Custom Control 사용시 주의 할 점 |
|
|
문제 해결....
해당 Custom Control을 이용시 해당 Class 이름을 연결 해주어야 합니다. 이것을 몰랐네요 ㅜ0ㅜ
봉착 했던 문제단순히 Resource View에 Custom Control을 추가 하고 프로그램을 실행 하는 것만으로도 아래와 같은 Output을 내보내며 프로그램이 실행 조차도 안된다. 실제 디버깅을 하여 따라가보면 OnInitialD~ () 들어 오지 않는다 헐... 왜 그럴까???? 한참 고민하고 비스타 문제인가? 생각되어 회사 선배의 노트북에서 체크(vs 2008)를 해봤으나 역시 마찬가지 아래와 같은 메시지 뿐.... XP에서도 마찬가지였다. 오랜만에 찾은 데브피아 ~ !! 럭키 문제는 Custom Control을 사용할때 해당 Class 명을 연결 해줘야 한다는 것이다. 내가 UI 프로그래밍이 많이 약한 것을 잘 알고 있다. ㅜ..ㅜ 너무 싫은게 아니라 모르는게 많은 것이다. 매일 매일 갱생이 필요 할 듯 하다.
Detected memory leaks! Dumping objects -> f:\sp\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(195) : {71} normal block at 0x01718248, 8 bytes long. Data: < > E9 03 00 00 00 00 00 00 {70} normal block at 0x01718200, 8 bytes long. Data: < > FF FF FF FF 00 00 00 00 Object dump complete. The program '[3568] MultiListApplication.exe: Native' has exited with code 0 (0x0).
|
|
|
|
|
|
Error Message initializer is not a constant
This error is issued only by the C compiler and occurs only for non-automatic variables. The compiler initializes non-automatic variables at the start of the program and the values they are initialized with must be constant.
Example
The following sample generates C2099.
// C2099.c int j; int *p; j = *p; // C2099 *p is not a constant
C2099 can also occur because the compiler is not able to perform constant folding on an expression under /fp:strict because the floating point precision environment settings (see _controlfp_s for more information) may differ from compile to run time.
When constant folding fails, the compiler invokes dynamic initialization, which is not allowed in C.
To resolve this error, compile the module as a .cpp file or simplify the expression.
For more information, see /fp (Specify Floating-Point Behavior).
The following sample generates C2099.
// C2099_2.c
// compile with: /fp:strict /c
float X = 2.0 - 1.0; // C2099
float X2 = 1.0; // OK
Also See - C/C++ Build Errors
http://msdn.microsoft.com/en-us/library/8x5x43k7(VS.80).aspx
|
|
|
|
|
|
ARC: Enabling the Multimedia Revolution
ARC International (LSE: ARK) is fueling the multimedia revolution by enabling high quality multimedia content to be captured, shared, and played on a wide variety of consumer electronics devices. ARC licenses award-winning consumer intellectual property (IP) in the form of multimedia subsystems and related technologies to semiconductor and OEM companies worldwide. They enable customers to create differentiated silicon chips that deliver an enhanced multimedia experience to consumers. Sonic Focus, an ARC International company, licenses award-winning audio enhancement software bringing the consumer closer to the original artist’s performance.
http://www.arc.com/
통합 개발툴 : MetaWare IDE : http://www.arc.com/software/development/metawareides.html
오늘은 젤리를 ARC OS에서 동작 하도록 포팅을 하였다. (젤리는 방송용 미들웨어로 회사 솔루션이다. ) 일단 Jelly를 빌드하는데 문제가 없었는데, 컴파일러 자체가 유연하여 별다른 LinkError가 없었다. (Linux로 포팅시에 대/소문자에서 부터 애를 먹었다. 1박 2일 ) 실제 개발환경 설치하고 하는 시간빼고, 대략 1시간 내에 빌드 완료. 테스트 코드를 작성하는데 문제 봉착 : Thread는 어케 생성해 ? Task? 라도 있어? loop 돌고 있는중... ARC OS에 대해서 정보가 있으면, 자료를 공유 부탁 드립니다.
|
|
|
|
Secure Coding in C and C++ |
|
|
Secure Coding in C and C++
이틀전에 구입하여 읽고 있는 책~ ^^ 일단 읽자~
|
|
|
|
[DshowFilter] Wince5.0을 최초 설치 후 Filter 관련 Project를 Build 시 발생하는 Error |
|
|
C:\WINCE500\PUBLIC\DIRECTX\SDK\INC\ctlutil.h(289) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int F4를 눌러서 에러가 나는 부분으로 뛰면
ctlutil.h 파일 228 Line에서 Error 발생 오리지널
private: // Prevent bugs from constructing from LONG (which gets // converted to double and then multiplied by 10000000 COARefTime(LONG); operator=(LONG); // <------ Check Here };
변경
private: // Prevent bugs from constructing from LONG (which gets // converted to double and then multiplied by 10000000 COARefTime(LONG); LONG operator=(LONG); // <------ Check Here };
일단 에러를 회피 하자.!
|
|
|
|
|
|
« 2025/01 »
일 |
월 |
화 |
수 |
목 |
금 |
토 |
|
|
|
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 |
|
|
Total :
Today :
Yesterday : |
|
|
|
|
|
|