본문 바로가기

전체 글358

Interface 요약 #5 지금으로부터 무려 10년전인 2002년 5월경, 델마당 개인게시판에 올렸던 총 9회의 글입니다. 유실된 줄 알았는데 싸이월드 게시판에 있는 걸 확인하고 복구합니다.;; 8. 객체 모델과 인터페이스 모델을 혼용하지 말 것. procedure DoSomethingWithInterface(Intf: IFormattedNumber); begin ShowMessage(Intf.FormattedString); end; procedure CreateAndUseObject; var MyInteger: TFormattedInteger; begin MyInteger:= TFormattedInteger.Create(12); DoSomethingWithInterface(MyInteger as IFormattedNumber);.. 2012. 4. 19.
Interface 요약 #4 지금으로부터 무려 10년전인 2002년 5월경, 델마당 개인게시판에 올렸던 총 9회의 글입니다. 유실된 줄 알았는데 싸이월드 게시판에 있는 걸 확인하고 복구합니다.;; 7. Interface의 포인터 획득하기 var MyInteger: TFormattedInteger; MyNumber: IFormattedNumber; begin MyInteger:= TFormattedInteger.Create(12); MyNumber:= MyInteger; end; 컴파일시 정적으로 할당됨(만약, 객체가 해당 인터페이스를 지원하지 않으면 컴파일시 에러발생) var MyObject: TObject; MyNumber: IFormattedNumber; begin MyObject:= TFormattedInteger.Create.. 2012. 4. 19.
Interface 요약 #3 지금으로부터 무려 10년전인 2002년 5월경, 델마당 개인게시판에 올렸던 총 9회의 글입니다. 유실된 줄 알았는데 싸이월드 게시판에 있는 걸 확인하고 복구합니다.;; 5. TInterfacedObject IUnknown 인터페이스의 실행부가 작성되어 있음(따라서, TInterfacedObjet를 상속하면 QueryInterface, _AddRef, _Release를 구현해줄 필요가 없음.) system.pas 에 정의됨 TInterfacedObject = class(TObject, IUnknown) protected FRefCount: Integer; function QueryInterface(const IID: TGUID; out Obj): HResul; stdcall; function _AddRef.. 2012. 4. 19.
Interface 요약 #2 지금으로부터 무려 10년전인 2002년 5월경, 델마당 개인게시판에 올렸던 총 9회의 글입니다. 유실된 줄 알았는데 싸이월드 게시판에 있는 걸 확인하고 복구합니다.;; 4. GUID(Globally Unique Identifier) GetInterface 와 as 연산자를 사용하기 위해선 필요함(따라서 COM외에도 사용됨) Ctrl + Shift + G 로 생성 혹은 CoCreateGuid (Win API) 함수 호출 유일한 값임(현재 시간, 현재 프로세스 번호, MAC Address 등으로 생성) TGUID = record D1: LongWord; D2: Word; D3: Word; D4: array[0..7] of Byte; end; MyGuid:= ['{2DE825C1-EADF-11D2-B39F-0.. 2012. 4. 19.
Interface 요약 #1 지금으로부터 무려 10년전인 2002년 5월경, 델마당 개인게시판에 올렸던 총 9회의 글입니다. 유실된 줄 알았는데 싸이월드 게시판에 있는 걸 확인하고 복구합니다.;; 현재, 틈틈이 COM 공부를 하고 있는 중입니다. 해서 interface에 대해 이것저것 살펴보고 있는 중인데요. ^^ '사람은 아는 만큼 본다'라는 말을 절감하고 있습니다. 두어 달 전에는 볼 수 없었던 것들이 지금은 보이는 군요. 처음엔 아래 한글을 띄우고 공부한 것들을 강좌형태로 만들 생각이었는데 2페이지 가량 진행하다가 포기하였습니다. 아무래도 시간이 많이 부족하네요. 일단은 추후 문서화 작업을 하기로 하고... 급한대로 여기 게시판에다가 생각나는 부분을 요약할 생각입니다. 1. 추상 클래스 일반적인 클래스와 차이는 없으나, 거기에.. 2012. 4. 19.
MS Lync 설치 서버호스팅 중인 MS Windows Server 2003 R2 Enterprise 에 MS Lync Server 180일 트라이얼 버전을 설치해보기로 마음 먹고, 우선 Lync 2010 을 설치해보았다. 설치 중~ 오류 발생!! 오류 이벤트를 찾아 보니 MSXML 6.0 SP1 이 필요하다고 한다. 별 수 있나... 해당 파일 검색해서 다운로드한 후 설치하였다. 그리고 다시 Lync 를 설치하니, 이번엔 무리없이 진행된다. Lync 가 실행된 모습~ 간단해서 포스팅하기 쑥스러울 정도... ^^ 2012. 4. 18.
파스칼로 만든 부트로더... - 1 - 2006년경 OS 제작에 한창 관심을 가지고 있던 무렵, Turbo Pascal 과 Delphi 로 모든 걸 제작해보고자 마음 먹고 이리저리 머리를 굴린 결과~ TP 로 부트로더를 만드는데 성공했다. { 000h~3FFh : Interrupt Vector Table 400h~4FFh : BIOS 500h~5FFh : DOS Parameters 1000h~7BFFh : unusable 7C00h~7DFFh : Boot Sector 7E00h~8FFFh : FAT Table 9000h~ABFFh : Directory Entry Table 10000h~1FFFFh : Stack 64 KBytes 20000h~2FFFFh : Boot Loader 64 KBytes 30000h~9FFFFh : Useable 44.. 2012. 4. 9.
POSA2, Double-Checked Locking Optimization 패턴 이 녀석도 그렇게 대단한 놈은 아니지만, 멀티 스레드 환경에서 Singleton 을 사용하는 경우라면 꼭 기억해 둘 필요가 있겠다. 내 경우 Delphi 에서 보통 다음처럼 Singleton 을 작성한다. TSingleton = class protected class var Instance: TSingleton; constructor Create; destructor Destroy; override; public class function GetInstance: TSingleton; class procedure ReleaseInstance; end; { TSingleton } constructor TSingleton.Create; begin inherited; end; destructor TSinglet.. 2012. 4. 9.
POSA2, Scoped Locking, Strategized Locking 패턴 POSA2 의 동기화 관련 패턴들 중 가장 기본이라고 할 수 있는 Scoped Locking 은 사실 별 거 없다. 이런걸 굳이 패턴으로 불러야하나....싶은 부류 중 하나이다. 닥치고 소스~ TGuard = class protected FLock: TSynchroObject; FOwner: Boolean; public constructor Create(ALock: TSynchroObject); destructor Destroy; override; procedure Acquire; procedure Release; end; { TGuard } procedure TGuard.Acquire; begin if Assigned(FLock) then begin FLock.Acquire; FOwner := True.. 2012. 4. 5.
Proactor with EPOLL, SELECT IOCP 를 사용한 Proactor 구현( 2012/02/13 - [프로그래밍/OOP] - Proactor with IOCP )은 비교적 많은 곳에서 소개가 되고있지만, EPoll 과 같은 놈을 Proactor 로 구현하는 경우는 거의 없어 보인다.;; 아무튼 앞으로 사용할 통신 프레임워크에 멀티플랫폼이라는 사치품(?)을 달 계획을 추가하다보니 EPoll 이나 KQueue 혹은 기존 POSIX 류의 Select 디스패치도 같은 구조 속에 녹일 필요가 생겼다. Proactor 냐? Reactor 냐? 잠시 고민했지만~ 아무래도 개인적으로 아직까지 메인 개발은 윈도우즈인지라 IOCP 와 최고의 궁합을 보여주는 Proactor 기반으로 설계해보았으며~ 개발 작업은 기본적인 에코 서버를 구현 & 테스트하는 형태.. 2012. 3. 15.
Delphi 에서 Leader-Follower 패턴 구현 POSA2 에서 Leader-Follower 패턴의 경우 pthread 기반으로 구현하여 설명하고 있다.( 2012/03/09 - [프로그래밍/Lazarus] - FPC 에서 Leader-Follower 패턴 구현 ) 이를 Windows 기반으로 작성해보았다. unit DLNA.Thread; interface uses Winapi.Windows, System.SysUtils, SyncObjs; const NO_CURRENT_LEADER = 0; type TGuard = class protected FMutex: TMutex; FOwner: Boolean; public constructor Create(AMutex: TMutex); destructor Destroy; override; procedure A.. 2012. 3. 14.
FPC 에서 Leader-Follower 패턴 구현 FPC 에서 pthread 기반 Leader-Follower 패턴을 구현하였다. Unbound thread set 이며, 사용 용도는 Worker Thread Pool 정도~ 예외 처리 등 많이 다듬어야하지만~ 일단 관련 소스 첨부~ unit DLNA_Thread; {$mode objfpc}{$H+} interface uses Classes, SysUtils, BaseUnix, pthreads; const NO_CURRENT_LEADER = 0; type TPThreadParameter = record Mutex: ppthread_mutex_t; Condition: ppthread_cond_t; Terminated: Boolean; Suspended: Boolean; Owner: TObject; end;.. 2012. 3. 9.
인천 연수 둘레길 1구간 최근 제주 올레길 이후로 전국에서 다양한 도보 구간이 형성되고 있다. 인천도 둘레길이라는 이름으로 여러 구간이 개발되고 있는데, 그외 인천내 연수구에서도 독자적으로 연수동 둘레길을 3구간으로 나누어 정비해 두었다. 일단 집과 가깝고해서 연수 둘레길을 찾아보았다. 먼저 시작점이라고 할 수 있는~ 인천 1호선의 선학역이다. 지도를 잘 살펴보고 어느 지점까지 가볼지 생각해보았다. 처음이고하니 1구간만 산행해보기로하고 지하철 3번 출구로 나온 후 문학산쪽으로 걸음을 옮겼다. 본격적으로 시작하기 전 가까운 마켓에서 마른목을 축일겸 간단한 스포츠 음료와 초코릿 비스켓을 하나 구입하였다. 조금 더 올라가니 바로 시작 지점과 함께 둘레길 안내 표지판을 만날 수 있었다. 그리고 방향을 잃지 않게 가는길 중간중간 확인할 .. 2012. 3. 3.
인천 차이나타운을 가다 지난 토요일 인천 차이나타운을 갔다왔다. 그후 때아닌 몸살로 지금까지 골골한 상태다. ㅠㅠ 그런데 찍어온 사진을 살펴보니 차이나타운과 관련한 사진은 이거 한장 밖에 없었다.;; 중국성에서 먹은 짜장면인데... 여느 짜장면집 짜장과 크게 달라보이지 않는 외모이지만 확실히 맛있었다. 고기가 좀 많은 듯~ 그 후 바로 근처 십리향에서 화덕만두를 먹기 위한 긴 행렬에 합류하였다. 10분~20분 정도 기다린 듯 한데... 중간에 먹은 양꼬치는 특유의 냄새 때문에 토할뻔했고... ㅠㅠ 긴 기다림 끝에 먹은 화덕만두는 맛이 없다고 할 수는 없겠지만... 다시 줄 서서 먹고 싶은 생각은 안들 정도의 맛이었다. 중간중간 삼국지 벽화라든지 중국 지자체에서 기증하였다는 페루라든지 공자상이라든지... 솔직히 요즘은 제주도 갈.. 2012. 2. 20.
윈도우에서 X-Window 연결하기(Xming) 먼저, Xming 및 Xming font 를 다운로드하여 설치한다. 그런 후, XLaunch 를 실행한다. 이후 편한대로 설정하면 되는데, 일단 타이틀바가 있는 단일 윈도우로 설정한다. SSH 를 통하여 X-Window 를 연결할 것이기 때문에 Start a programe 을 선택한다. 데스크탑이 그놈기반이라 gnome-session 을 입력하고, 이후 SSH 접속 관련 정보를 입력한다. 이때 SSH 포트를 임의의 값으로 변경한 상태라면 이후 과정에서 설정하면 된다. 실행시 화면 해상도 설정과 SSH 포트 설정을 입력한다. 만약, 기본 포트라면 그냥 비워두면 된다. 참고로 P 는 대문자로 입력하여야한다. 지금까지의 설정을 저장하고싶으면 Save configuration 버튼을 누른다. 만약, 비밀번호까.. 2012. 2. 15.