Monday, December 14, 2009
[C++] IIS 6.0에서의 CAsyncSocket 사용
이 같은 문제는 일반 Application이나, IE javascript, Window Scripting Host 등에서는 발생하지 않는 문제이고, 심지어 IIS 5.0에서도 잘 실행이 된다.
문제의 원인은 IIS 6.0이 작업자 프로세스 격리모드를 사용하므로써 IIS 프로세스의 접근권한이 제한받기 때문에 생기는 것으로 생각되는데, 해결 가능한 방법은 다음 두가지가 있다.
1. COM+ 응용프로그램으로 등록
문제가 되는 COM 컴퍼넌트를 COM+응용프로그램의 구성요소로 등록한다.
이 때, 해당 COM+ 응용프로그램의 속성 창을 열어 [보안]탭의 응용프로그램 엑세스 검사 수행 옵션을 꺼주어야 한다.
2. IIS 6.0의 실행모드를 IIS 5.0 격리모드로 변경하는 방법
IIS 스냅인에서 "웹 사이트"의 속성 창을 열어 [서비스] 탭을 선택한 다음, "IIS 5.0 격리모드에서 WWW서비스 실행" 옵션을 체크한 다음 [확인]을 누르고 IIS서비스를 재시작한다.
Thursday, July 9, 2009
[Reading] 계속모드
2. 저자 : 오오하시 에츠오
3. 역자 : 이광철
4. 기간 : 2009.07.08 ~ 2009.07.09
5. 목차
제 1 부 : 우리는 왜 좌절하는가?
Episode_01 T의 늦잠버릇
01 의식하면 습관이 될 수 없다
02 누구나 단순한 반복 작업을 싫어한다
03 포기하게 만드는 3가지 감정의 유혹
Knowhow_01 완벽주의가 미루는 습관을 만든다
제 2 부 : 목표의 3가지 유형과 습관 만들기 5단계
Episode_02 나도 계속하는 것이 있다
01 목표의 3가지 유형
02 계속해야만 하는 일
03 쌓이면 성과가 보이는 일
04 마스터해야 하는 일
05 내 스타일에 맞는 목표의 유형은?
06 습관 만들기를 위한 5가지 단계
Knowhow_02 시도해보기도 전에 겁먹지 마라
제 3 부 : 습관을 만드는 시간과 의욕의 조화
Episode_03 핀란드에서는 일찍 일어났던 T
01 시간과 의욕을 조절하는 7가지 규칙
02 반드시 시간을 확보하라
03 나약한 자신을 믿지 마라
04 현재를 가장 높이 평가하라
05 하고 싶은 게 떠오르면 기록하라
06 예외를 인정하라
07 함께하는 동료를 만들어라
08 칭찬으로 의욕을 북돋우라
Knowhow_03 목표달성을 위한 다이어리 활용법
제 4 부 : 목표 유형별 공략법 : 계속해야만 하는 일
01 결심단계 : 하고 싶은 일을 상상한다
02 시작단계 : 욕심부리지 않는다
03 시련단계 : 적절한 보상으로 의욕을 높인다
04 매너리즘단계 : 하고 싶게끔 만든다
05 무의식단계 : 꾸준히 계속한다
Knowhow_04 아침형 인간을 위한 건강 수면법
제 5 부 : 목표 유형별 공략법 : 쌓이면 성과가 보이는 일
01 결심단계 : 계속했을 때의 큰 성과를 상상한다
02 시작단계 : 충동으로 시작한다
03 시련단계 : 큰 기대를 하지 않는다
04 매너리즘단계 : 성과를 다시금 떠올린다
05 무의식단계 : 쌓이는 즐거움으로 의욕을 유지한다
Knowhow_05 쓸데없는 걱정을 줄이는 방법
제 6 부 : 목표 유형별 공략법 : 마스터해야 하는 일
* 다른 2가지 유형으로 공략한다
01 결심단계 : 꼭 해내겠다는 결의가 중요하다
02 시작단계 : 팀을 만든다
03 시련단계 : 미래의 일기를 쓴다
04 매너리즘단계 : 지금까지 과정을 점검한다
05 무의식단계 : 동료를 찾는다
Knowhow_06 마인드 컨트롤로 슬럼프를 극복하자
제 7 부 : 생활 속에 숨어있는 계속하는 기술
Episode_04 아침형 인간으로 거듭나기
01 누구나 계속하는 일이 있다
02 아침 일찍 출근하는 습관 들이기
03 인기 있는 포인트 카드의 비결
04 직원에게 좋은 습관을 들이는 방법
05 온라인에서 동료를 찾는 방법
06 인터넷 카페에 글 올리게 되는 비결
Knowhow_07 잘나가는 CEO의 성공하는 습관들
에필로그_ 무엇이든 시작하고 본다
옮긴이의 글_ 언제나 긍정의 마인드를 잃지 말자
Wednesday, July 8, 2009
[Reading] 인생을 두배로 사는 아침형 인간
2. 저자 : 사이쇼 히로시
3. 역자 : 최현숙
4. 기간 : 2009.07.03 ~ 2009.07.08
5. 목차
제 1 부 : 아침을 잃어버린 사람들
01 우리의 아침을 앗아가는 것들
02 아침형 인간은 자연의 리듬이다
03 야행성 생활이 정신과 건강을 망친다
04 야행성 인간에서 아침형 인간으로
제 2 부 : 아침형 인간이 성공한다
01 성공한 사람들은 모두 아침에 깨어 있었다
02 아침의 1시간은 낮의 3시간이다
03 아침을 회복하라
04 아무리 밤이 즐거워도 아침과 맞바꾸지 말라
제 3 부 : 어떻게 아침형 인간이 될 것인가 - 100일(14주) 프로젝트
01주 - 변화의 기회를 잡아라
02주 - 자기만의 스타일을 파악하라
03주 - 자신을 세뇌시켜라
04주 - 저녁 시간부터 바꿔라
05주 - 수면 시간을 정하라
06주 - 잠들기부터 시작하라
07주 - 아침 30분의 변화를 시작하라
08주 - 낮잠과 비타민으로 도움을 받아라
09주 - 빛을 활용하라
10주 - 산책을 시작하라
11주 - 산책을 최대한 활용하라
12주 - 체조와 요가를 병행하라
13주 - 아침의 뇌를 자극하라
14주 - 온 가족을 동참시켜라
Wednesday, July 1, 2009
[Research] C++을 이용한 크로스 플랫폼 개발
2. 저자 : Syd Logan
3. 역자 : 김석중
4. 기간 : 2009.07.01 ~
5. 목차
6. 느낀점
[Book List To Read] 전공
게시일 : 2009.07.01
제목 : C++을 이용한 크로스 플랫폼 개발
위치 : MarkAny
02.
게시일 : 2009.07.22
제목 : Application Hacking, 리버싱, Reverse Engineering
위치 : MarkAny
[Reading] 공부하는 독종이 살아남는다.
2. 저자 : 정신과 전문의 이시형 박사
3. 역자 : 없음
4. 기간 : 2009.07.01 ~ 2009.07.03
5. 목차
프롤로그 - 흔들리는 세상, 당신만의 무기는 무엇입니까?
제 1부 : 나이 들어 하는 공부가 진짜다
01 - 무엇을 해야 살아남는가
02 - 나를 살리는 창조, 창조를 위한 공부 전략
03 - 창조가 경쟁력이다
04 - 학교에서는 절대 못 배우는 공부법
05 - '저위험 고수익', 인생 최고의 투자처
06 - 써먹지 못하면 진짜 공부가 아니다
07 - 나이 들어 하는 공부가 더 잘되는 여섯 가지 이유
08 - '이 나이에'라는 생각이 가장 위험하다
제 2 부 : 뇌과학을 알면 공부의 길이 보인다
01 - 공부는 머리로만 하는 게 아니다
02 - 뇌를 달래면 공부가 쉽다
03 - 시작이 반! 두뇌 측좌핵의 작업흥분 과정
04 - 적군이 되는 호르몬 vs 아군이 되는 호르몬
05 - 짧고 강하게! 30분간의 세로토닌 효과를 노려라
06 - 뇌가 좋아하는 여섯 가지 자극
07 - 공부 잘하는 사람들의 다섯 가지 습관
제 3 부 : 공부 능력 두 배로 키우는 잠재의식 활용법
01 - 모든 행동은 잠재의식의 영향을 받는다
02 - 자면도 문제를 해결하는 잠재의식의 신비
03 - 문제 해결의 이차선 도로, 의식과 잠재의식
04 - 잠재의식의 창고를 가득 채워라
05 - 공부도 창조도 감정이 한다
06 - 기본은 언어력이다
07 - 구체적 목표를 세우는 '서브 골 작전'
08 - 잠재의식을 자극하는 이미지법
제 4 부 : 공부 테크니션의 여덟 가지 필살기
01 - 효율적 공부의 매뉴얼을 익혀라
첫 번째 _ 몸과 마음을 준비시키는 집중의 비법
두 번째 _ 초고도 집중력을 기르는 일점 집중의 비법
세 번째 _ 생각과 감정을 깔끔하게 정리하는 순간 전환의 비법
네 번째 _ 하루를 48시간처럼 쓰는 시간 창출의 비법
다섯 번째 _ 긴장과 이완을 적절히 조화시키는 휴식의 비법
여섯 번째 _ 필요한 정보만 골라 담는 정보 습득의 기술
일곱 번째 _ 잊거나 깜빡하지 않게 하는 정보 기억의 기술
여덟 번째 _ 필요할 때마다 쏙쏙 꺼내 쓰는 정보 활용의 기술
02 - 급할 때 활용하는 벼락치기 공부
03 - '효과 두 배, 즐거움 두 배'. 스터디 메이트와 함께 공부하기
제 5 부 : 불황에도 끄떡없는 '창재'로 거듭나라
01 - 천재보다 환영받는 이름, 창재
02 - 창조력은 생존의 문제다
03 - 최고의 창재, 빌 게이츠의 비밀
04 - 누구에게나 강점 지능이 있다
05 - 우리가 미처 몰랐던 우뇌의 힘
06 - 창조적 환경과 창재의 상관관계
07 - 마음만 먹으면 누구나 창재가 된다
08 - 성패는 과학적 훈련 방법에 달렸다
에필로그 - 가난한 뇌 vs 풍족한 뇌
[Reading] 35세 전에 꼭 해야할 33가지
2. 저자 : 장징주, 류가와 미카, 주위홍
3. 역자 : 김락준
4. 기간 : 2009.06.25 ~ 2009.06.27
5. 목차
제 1부 : 잠자고 있는 당신의 잠재력을 깨워라
01_ 3년에 한 번씩 새로운 전공 분야에 도전하기
02_ 어린아이의 눈으로 세상 둘러보기
03_ 아름다움에 대한 나만의 감각 기르기
04_ '동물의 왕국'의 생존법 터득하기
05_ 중요한 결정에 직관 사용하기
06_ 세상을 읽는 나만의 더듬이 만들기
07_ 감정을 조절하는 주문 만들기
08_ 집중력으로 종이에 구멍 내기
09_ 셜록 홈즈의 관찰력 익히기
10_ 나만의 판단 기준 세우기
11_ 10번 찍어 안 넘어가면 11번 찍기
12_ 양쪽 귀로 숨겨진 세상 보기
13_ 싫어하는 사람과 역할 바꿔 보기
제 2부 : 인생을 결정하는 열쇠를 획득하라
14_ 남과 다른 인생 전략 세우기
15_ 결심한 것은 반드시 보여주기
16_ 자유자재로 2개 국어 이상 쓰기
17_ 윈윈 게임 즐기기
18_ 위키노믹스 시대 적응하기
19_ 나만의 리더십 구축하기
20_ 잘 빌려서 제대로 써보기
21_ 하루에 5가지 반성하기
22_ 내공, 외공, 경공 기르기
23_ 주변 자원 활용법 익히기
제 3부 : 성공을 가리키는 나침반을 찾아라
24_ 가난을 벗기 위한 재테크 전략 세우기
25_ A4지에 100가지 고정관념 적어보기
26_ 세상에 없는 10가지 기획하기
27_ 단식으로 의지력 시험하기
28_ 난 할 수 있다고 최면걸기
29_ 참을 인자 3개로 화 면하기
30_ 죽음만큼 강한 사랑해 보기
31_ 인맥 통장 만들기
32_ 기본적인 소통력 갖추기
33_ 한 번쯤 무작정 모험하기
Wednesday, June 10, 2009
[VS2008] Detecting VS 2008 Service Pack 1
VS2008 SP 1 Redist가 시스템에 설치되어 있는지 확인하는 방법을 설명한다.
2. 본문
방법은 다음과 같다.
Detecting Visual Studio 2008 Service Pack 1
The Visual Studio 2008 RTM and SP1 detection keys are largely the same as the Visual Studio 2005 SP1 detection keys, and are documented below. But there is a caveat for released and upcoming versions: the shared detection value can be overwritten by an older installation of the same release.
For example, if you installed VS2008 Professional, then installed VS2008 SP1, and after that installed Team Foundation Client (TFC) 2008 RTM, the shared detection value is reset to 0 instead of 1. To be sure SP1 is installed, you need to detect SP1 on specific editions of Visual Studio 2008 or any other of our 2008 product releases including .NET 3.5 RTM and SP1.
Product family detection value
Product families define a group of products with similar functionality. The “VS” product family, for example, includes many editions but defines all full SKUs of the Visual Studio IDE. To find the service pack level of a product family, search for the following registry value.
Key: HKEY_LOCAL_MACHINE\Software\Microsoft\DevDiv\[ProductFamily]\Servicing\9.0
Value (REG_DWORD): SP
The exception is for product families “NetFX” and “WPF” that use version 3.5 instead of 9.0.
If the registry value is 0, the RTM version of the product family is installed. If the value is 1, then SP1 is installed on the product family.
Keep in mind, however, that this value is shared by all editions within a product family. If an older product edition is installed after a newer product edition within the same product family, the value will be overwritten. To detect whether SP1 is installed you need to check individual product editions.
Product families released for the 2008 wave of products include,
NetFX, WPF: .NET Framework 2.0, 3.0, and 3.5 including Windows Presentation Framework
RDBG: Visual Studio 2008 Remote Debugger
TRIN: Visual Studio Tools for the Office System 3.0 Runtime
VB: Visual Basic 2008 Express Edition
VC: Visual C++ 2008 Express Edition
VCS: Visual C# 2008 Express Edition
VNS: Visual Web Developer 2008 Express Edition
VS: Visual Studio 2008 Professional, Visual Studio Team System 2008 Team Suite, etc.
VSTF: Visual Studio 2008 Team Explorer, Visual Studio 2008 Team Test Load Agent, etc.
Product edition detection value
A product family may install one or more editions. The “VS” product family, for example, contains several editions including “PRO” (Professional"), “VSTS” (Team Suite), and more. To find the service pack level of a product edition, search for the following registry value:
Key: HKEY_LOCAL_MACHINE\Software\Microsoft\DevDiv\[ProductFamily]\Servicing\9.0\[ProductEdition]\[ProductLanguage]
Value (REG_DWORD): SP
The exceptions are for product families “NetFX” and “WPF” that use version 3.5 instead of 9.0, and do not specify a ProductEdition. For .NET itself, the language is always 1033 unless you’re detecting the SP level for a language pack that uses the LCID for a specific culture.
So for .NET, you would check the following registry value:
Key: HKEY_LOCAL_MACHINE\Software\Microsoft\DevDiv\NetFX\Servicing\3.5\1033
Value (REG_DWORD): SP
For either Visual Studio or .NET, if the registry value is 0, the RTM versions of the product family are installed. If the value is 1, then SP1 is installed on the product family.
The ProductLanguage is the LCID of the product installed, such as 1033 for English (US).
The following table contains the list of released product families, editions, and the product names.
ProductFamily ProductEdition ProductName
dynamicanalysis collectionbits Microsoft Visual Studio 2008 Performance Collection Tools - ENU
HH DEX Microsoft Document Explorer 2008
MSDN EXP MSDN Library for Microsoft Visual Studio 2008 Express Editions
MSDV MSDN9.0 MSDN Library for Visual Studio 2008 - ENU
RDBG STD Microsoft Visual Studio 2008 Remote Debugger - ENU
SDE VSD Microsoft Device Emulator version 3.0 - ENU
TRIN AIDE Microsoft Visual Studio Tools for Applications 2.0 - ENU
TRIN ART Microsoft Visual Studio Tools for Applications 2.0 Runtime
TRIN TRIR Visual Studio Tools for the Office system 3.0 Runtime
VB ROS Microsoft Report Viewer Redistributable 2008
VB EXP Microsoft Visual Basic 2008 Express Edition - ENU
VCS EXP Microsoft Visual C# 2008 Express Edition - ENU
VC RED Microsoft Visual C++ 2008 Redistributable - x86 9.0.21022
VC STD Microsoft Visual C++ 2008 Standard Edition - enu
VC EXP Microsoft Visual C++ 2008 Express Edition - ENU
VNS EXP Microsoft Visual Web Developer 2008 Express Edition - ENU
VSS STD Microsoft Visual SourceSafe 2008 - ENU
vstf at Microsoft Visual Studio 2008 Team Foundation Server - ENU
VSTF ATP Microsoft Visual Studio 2008 Team Foundation Server Proxy - ENU
VSTF bb Microsoft Visual Studio 2008 Team Foundation Server Build - ENU
VSTF dtea Microsoft Visual Studio 2008 Team Test Load Agent- ENU
VSTF dtec Microsoft Visual Studio 2008 Team Test Load Controller- ENU
VSTF PERF Microsoft Visual Studio 2008 Performance Tools - ENU
vstf tfc Microsoft Visual Studio 2008 Team Explorer - ENU
vstf wssExt Microsoft Visual Studio 2008 Team Foundation Server SharePoint Extensions - ENU
VS IDE Microsoft Visual Studio Shell 2008 - ENU
VS IDE Microsoft Visual Studio 2008 Shell (integrated mode) - ENU
VS PRO Microsoft Visual Studio 2008 Professional Edition - ENU
VS STD Microsoft Visual Studio 2008 Standard Edition - ENU
VS VSDB Visual Studio Team System 2008 Database Edition - ENU
VS VSR Microsoft Primary Interoperability Assemblies 2005
VS VSTA Microsoft Visual Studio Team System 2008 Architecture Edition - ENU
VS VSTD Microsoft Visual Studio Team System 2008 Development Edition - ENU
VS VSTS Microsoft Visual Studio Team System 2008 Team Suite - ENU
VS VSTT Microsoft Visual Studio Team System 2008 Test Edition – ENU
출처 : http://blogs.msdn.com/heaths/archive/2009/05/29/detecting-visual-studio-2008-service-pack-1.aspx
Wednesday, May 20, 2009
[DOC] SDK Manual 작성 시 코드 부분 글자체
SDK Manual 작성 시 샘플 코드를 포함하게 되는데 MS-WORD로 문서를 작성할 경우 글자체 때문에 코드의 인덴테이션이 틀어지게 된다. 이를 방지하기 위한 방법을 설명한다.
2. 본문
방법은 다음과 같다.
1) 코드의 글자체는 Courier New로 설정한다.
- Courier New가 Fixed Font이기 때문이다.
2) MS-WORD의 옵션 중 공백 문자 처리 부분을 수정한다.
- "시작" -> "Word 옵션" -> "고급" -> 가장 밑에 "레이아웃 옵션" -> "반자 문자와 전자 문자의 문자 너비를 조정함" 항목의 체크 해제
Tuesday, April 14, 2009
[WIN32] DLL 자신의 경로 얻는 방법
DLL 자신의 경로를 얻는 방법을 설명한다.
2. 본문
샘플 코드는 다음과 같다.
1) ATL COM DLL의 경우
TCHAR szPath[MAX_PATH + 1] = {0};
HINSTANCE hInst = _AtlBaseModule.GetModuleInstance();
::GetModuleFileName(hInst, szPath, MAX_PATH);
2) WIN32 DLL의 경우
// Global var to contain DLL module handle
HMODULE g_hDLL = NULL;
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved )
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_hDLL = hModule;
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
void somefunc()
{
MA_CHAR pszLibDirPath[MAX_PATH + 1] = {0};
::GetModuleFileName(g_hDLL, pszLibDirPath, MAX_PATH);
}
Monday, April 13, 2009
[C++] STL string을 이용한 Path 분리 방법
STL string을 이용하여 File Path의 경로를 분리한다.
2. 본문
샘플 코드는 다음과 같다.
// File Path와 File Name 분리
char szFullPath[MAX_PATH] = "c:\\test\\test.txt";
string strFullPath(szFullPath);
string strFilePath, strFileName;
int nFind = strFullPath.rfind("\\") + 1;
strFilePath = strFullPath.substr(0, nFind);
strFileName = strFullPath.substr(nFind, strFullPath.length() - nFind);
// 파일 확장자 바꾸기
char szFullPath[MAX_PATH] = "c:\\test\\test.txt";
string strFilePath(szFullPath);
string strModExt("xml");
string strReName;
int nExt = strFilePath.rfind("txt");
int nName = strFilePath.rfind("\\") + 1;
strReName = strFilePath.substr(0, nName);
strReName += strFilePath.substr(nName, nExt - nName);
strReName += strModExt;
Friday, March 27, 2009
[C++] STL string에서 format 사용법
타입 안정성 때문에 STL string에서는 format 계열 함수를 제공하지 않는데
c++ stream 객체를 이용하여 처리할 수 있다.
2. 본문
샘플 코드는 다음과 같다.
#include <string>
#include <sstream>
using namespace std;
int main()
{
string str;
ostringstream os;
int nTemp = 10;
str << setw(3) << setfill(0) << nTemp;
os << str = os.str();
return 0;
}
setw()는 자리크기, setfill()은 빈 자리 채움
Thursday, March 5, 2009
Whitepaper 작성법
Preface
몇 년 전, 모 솔루션 소프트웨어 개발 프로젝트의 PM일을 하고 있을 때였다. 이런저런 고생끝에 제품이 대략 완성되고, 완료보고를 하려는 즈음.... 완료보고와 함께 White Paper를 내놓으면 좀 더 완료보고의 모양새가 나지 않을까? 생각했다. 대충 다른 제품의 White Paper를 참고로 쓰면 되겠지~ 하고 샘플(경쟁제품 포함)들을 수집했는데...
이것 참;; 해외업체건 국내업체건 맘에드는 수준있는 White Paper를 내놓은 곳이 단 한 곳도 없는것이 아닌가! 이들을 참고로 작성해선 안된다는 생각이 들어 본격적으로 White Paper 작성법을 찾아보기 시작했다.
그런데 여기서 또 문제....
White Paper 작성법에 대한 몇몇 글들이 있긴 하였으나, 대부분 Specification이나 하드웨어 제품들을 타겟으로 하는 작성법이어서.. 당장 작성하려고 하는 Software제품에는 적용하기 힘든 부분이 많았다.
결국 Software Product에 대한 White Paper 작성법을 부족하나마 나름대로 정의해 보기로 했고, 그때 나온 결과물을 조금 손보아서 이렇게 내놓는다. 사실 7장에 나열한 참고자료들을 SW업계 환경에 맞추어 첨삭을 가하고, 약간의 의견을 더한 수준에 지나지 않는다. 여튼, 나와 같은 고민을 하는 개발자나 PM들에게 작은 도움이 되기를 바래본다.
Software의 경우는 Business Point, 혹은 Techinical Point에 중점을 두는 White Paper가 나올 수 있다. 여기서는 두 가지가 적절히 조화된 White Paper의 작성을 기준으로 기술하였다.
이 글의 초고 작업에는 지금은 N모사에 계신 김송기씨가 함께 했다.
1. What is the Software Product White Paper?
White Paper는 영국 정부의 공식 보고서 표지가 하얀색인 데서 유래한 용어로, 정부기관이 정책이나 실적을 종합 정리해 발표하는 공식 보고서의 통칭을 가리킨다. 하지만, IT 분야에서는 기술, 제품, 이슈, 표준 규격, 정책, 솔루션에 관한 개요를 브리핑하는 자료를 말한다.
그 중에서 Software Product White Paper(이하 White Paper)는 제품의 운영과 철학 또는 기술 배경을 설명하기 위해 만든 자세하지는 않지만 전문적인 자료라고 할 수 있다. 보통 소프트웨어 제품의 발표와 함께 제공된다.
1.1. 목적
White Paper는 회사의 제품을 압축적으로 간단하게 소개하는 자료로써, 다른 사람 또는 업체로 하여금 전문적인 지식 및 사업 정보를 공유하기 위한 자료이다.
White Paper는 제품 홍보 또는 기업 홍보, 세미나 자료, 회의 자료 등으로 쓰이기 때문에 새로운 분야에 대한 소개, 혁신적인 솔루션(제품)의 홍보, 특정 타겟 대상의 설명에 아주 효과적인 자료로 이용될 수 있다.
그러나 White Paper는 궁극적으로 제품 판매를 목적으로 한다.
1.2. 역할
White Paper는 White Paper를 쓰는 측과 읽는 측에 대하여 각각 다음과 같은 역할을 한다.
● Sales & Marketing 수단(작성자 측의 경우)
White Paper는 제품을 포장하는 수단이다. White Paper를 통해 제품에 흥미를 더하고 겉으로 보이는 모양 이외에 제품의 이면까지 White Paper를 통해 보여줄 수 있다. 제품을 잘 포장한 White Paper는 훌륭한 마케팅 도구로 활용될 수 있으며 보이지 않는 제품을 더욱 값진 제품으로 표현할 수 있다.
● Decision Making Point(읽는 측의 경우)
IT 산업에서 White Paper가 가지는 영향력은 가히 크다고 할 수 있다. White Paper는 구매결정자들로 하여금 제품을 구매하도록 이끄는 가장 중요한 수단이다.
제품들과 서비스를 선택할 때 구매 결정자들은 옳은 선택을 하기 위하여 엄청난 압력을 받는다. 그들이 구매를 할 수 있도록 도와줄 수 있는 가장 설득력 있는 것은 바로 왜 이 제품/서비스가 그들의 요구사항에 적합한지를 증명한 White Paper이다.
※ 리서치 자료에 의하면 구매 결정자들이 어떤 제품을 구매하려고 할 때, 가장 먼저 고려하는 것이 White Paper라고 한다.
※ 또한 구매 결정을 할 때 가장 마지막으로 고려하는 사항도 White Paper이다.
※ White Paper는 생명력이 길다. 예를 들어 잡지나 신문 같은 매체는 쉽게 버리는 반면 White Paper는 당장 필요하진 않더라도 언젠가 필요한 날을 대비하기 위해서 쉽게 버리지 않기 때문이다.
2. Software Product White Paper의 내용 구성
Sortware Product의 White Paper에는 다음과 같은 내용들이 포함되어야 한다.
● 시장분석 자료
제품이 어느 분야(분류)에 해당하는지 명확한 Positioning을 하고, 해당분야의 충분한 사전 조사가 있은 후 다른 제품과의 차이점과 해결책을 제시하여, 전형적인 고객뿐만 아니라 잠재적인 고객들에게도 어필할 수 있는 객관적인 시장 분석 자료가 필요하다.
● 제품특징
제품의 특징이 무엇인지, 그 제품을 통해 무엇을 해결할 수 있는지 상세히 기술하도록 한다.
● 제품분석 자료
제품에 대한 그래프, 차트, 테이블 등의 자료를 통해, 제품의 이해도를 높이고 기술 명세를 명확히 하여 고객이 알기 쉽도록 자료를 만든다.
● USP(Unique Selling Point)
경쟁사의 제품과의 차이점을 객관적인 자료에 근거하여 설득력 있게 기술하며 이 제품만의 Unique selling point를 설명할 필요가 있다.
● 고객에게 줄 수 있는 혜택
고객의 입장에서 사업 목적과 기술적인 저해 요인을 파악하고, 이 제품을 통하여 어떤 해결책을 줄 수 있으며 고객에게 어떤 이점을 줄 수 있는지 명확히 할 필요가 있다.
3. Software Product White Paper 작성 Tips
효과적인 White Paper의 작성을 위한 다음과 같은 Tip들을 제시한다. 이러한 Tip들은 전체적인 문서의 품질을 높이는데 기여할 것이다.
● 그래프를 잘 활용하라
제품을 이해하도록 도와주는 그래프나 이미지, 테이블 등을 사용해야 한다. 그래프는 개념, 기술, 시스템 관계 등을 글로만 설명하는 것 보다 훨씬 효과적으로 White Paper의 내용을 이해시켜 준다. 특히나 기술 설명 부분은 고객들에게 지루함을 줄 수 있기 때문에 이 같은 자료가 꼭 필요하다.
● 전문용어는 피하라
어려운 용어는 사용하지 말고 명확하고 알기 쉬운 용어를 선택해야 한다. 글을 읽는 사람이 용어를 이해하지 못한다면 White Paper의 전체적인 내용에 신뢰를 잃을 수 있다. 만약, 그 용어를 꼭 사용해야 한다면 먼저 그 용어에 대한 설명부터 해주는 것이 좋다.
● 한 문단엔 하나의 주제만을 기술하라
한 문단에서는 하나의 주제를 가지고 내용을 전개해나가야 한다. 한 문단에 여러 화제가 섞여 있으면 내용의 이해도도 떨어질 뿐만 아니라 고객도 잃을 것이다.
● 사례연구를 포함하라
보통 White Paper에서는 해결방안에 있어서 이론 응용 법을 이용한다. 예를 들면 ‘제품 X는 A라는 상황에서 B를 할 것이다.’ 는 식의 내용을 쓴다. 그러나 이것은 너무 추상적이어서 고객에게 신뢰감을 줄 수 없다. 따라서 이론에 따른 실제 사례 연구가 White Paper에 포함되면 제품의 해결 방안이 고객에게 어떤 식으로 해결책을 제시해주며, 또 어떤 이점을 가져다 줄 수 있는지 증명하는데 아주 효과적이다.
● 사전 요약은 흥미로운 내용으로 작성하라
본론 시작 전에 요약 내용을 쓰기도 하는데 여기에서는 가장 흥미로운 내용을 가지고 작성하도록 해야 한다. 요약 내용이 너무 딱딱하거나 어려우면 본론을 읽기도 전에 White Paper에 대한 흥미가 떨어져 끝까지 읽지 않게 된다.
● 도입부분에 결론을 써라
글의 도입부분은 White Paper의 내용으로부터 만들어낸 결론 및 주제를 드러내기에 가장 좋은 부분이다. 마치 신문 기사에서 헤드라인을 화려하게 장식하는 것과 같다. 물론 마지막에 결론을 쓰긴 하지만 미리 독자에게 결론을 알려주고 그 결론에 따라 전체적인 내용을 파악할 수 있도록 만든다.
● 투자자의 입장에서 생각하라
먼저 고객들을 이해하려고 노력해야 한다. 고객들이 관심을 가지고 있는 것을 정확히 판단하여 그들이 요구하는 것들을 충족시켜줘야 한다. 특히 고객들은 그들의 요구를 충족시키기 위한 신뢰할 수 있는 증거들을 찾을 것이다. 이 증거를 제공하는 것으로, 그들에게 시간을 덜어줄 뿐만 아니라 신용도를 증가시킬 수 있다.
● 차별성을 강조하라
타 제품과의 차별성을 객관적인 사실에 근거하여 기술해야 한다. 제품의 해결방안이 경쟁 제품보다 좋다는 것을 증명하고 어떤 이유로 더 좋은지를 설명해야 White Paper가 더 설득력을 가질 수 있다.
● Feature와 Benefit의 차이점을 이해하라
종종 특징과 이점을 정확히 구별하지 못하고 글을 쓰게 되는 경우가 있다. 간단히 이 차이점을 설명하면 특징은 제품을 판매하는 쪽과 관계가 있고 이점은 제품을 구매하는 쪽과 관련이 있다고 할 수 있다. 따라서 이점을 쓸 때는 이 제품을 통해 구매자가 어떤 이익을 얻을 수 있는지를 써야 한다. 예를 들면 이 제품을 구입함으로써 구매자의 매상은 얼마나 올라가는지, 시간은 얼마나 줄일 수 있는지, 사업을 얼마나 향상 시킬 수 있는지를 작성해야 하는 것이다.
특징과 이점의 차이를 다음 문장을 통해 구별할 수 있다.
[특징]
* 우리의 신제품은 100회의 반복을 줄일 수 있습니다.
* A 제품은 사용하기 쉽습니다.
* 우리의 웹사이트는 전송 받는 시간이 아주 빠릅니다.
[이점]
* 구매자는 한 달에 100만원의 이익을 가져가실 수 있습니다.
* 사용자는 5분만에 A 제품의 사용법을 알 수 있습니다.
* 고객님은 우리 사이트를 방문하는 것만으로도 시간을 절약할 수 있습니다.
● 조화를 이뤄라
White Paper는 기술 문서도 아니고 마케팅 문서도 아니다. 지나치게 기술 위주의 문서가 된다면 내용이 딱딱해져 글을 읽는 사람에게 흥미를 떨어뜨릴 것이고, 또 너무 마케팅 위주의 문서가 된다면 제품이 과장되어 보여 신뢰성을 떨어뜨릴 것이다. 따라서 기술과 마케팅 문서의 적정한 선을 지키며 조화를 이룰 수 있도록 한다.
● 부정적인 내용을 언급하지 마라
제품의 부정적인 내용은 언급하지 말고 경쟁 제품의 약점을 언급한다. 단, 경쟁사의 이름을 직접적으로 표기하진 않는다.
● 적절한 분량으로 작성하라
White Paper의 길이는 보통 2-3 페이지에서 약 50 페이지 정도로 작성하며, 12-18페이지 정도가 가장 적당하다.
● 적절한 포맷으로 배포하라
포맷은 HTML이 가장 좋고, 다운로드 하기 쉽도록 PDF로 하는 것도 좋다.
4. Software Product White Paper 작성절차
보통 White Paper의 작성절차는 다음과 같은 절차를 따른다.
1. 자료수집
전체적인 내용을 파악하고, 표/그림등을 활용하기 위하여, 제품을 개발하기 위해 작성되었던 기능명세서, 모듈설계서, 디자인설계서등을 수집한다. 또한 타 제품과의 비교를 위하여 시장조사 자료도 준비한다.
2. 주제의 선정
당연히도 제품의 설명과 우수성의 설파가 주제가 되겠으나, White Paper의 내제적 용도는 업체/시장/제품 사정상 다소 상이할 수 있다. 이에 알맞은 적절한 주제를 선정한다.
3. Target의 선정
글을 읽을 대상이 누구인지 정하고, 대상에 맞는 수준의 내용을 작성하도록 하여 이해도를 높이도록 한다.
4. 목차 선정
목적과 대상에 따라 White Paper의 목차를 잡고 개요를 잡도록 한다. 목차에 따라 글의 흐름이 달라질 수 있기 때문에 충분히 검토하도록 한다.
5. 용어의 통일
공통으로 쓰이는 용어나 통일성을 가져야 할 용어는 미리 정하여 작성 담당자들이 모두 같은 용어를 쓸 수 있도록 한다. 각 부분의 작성 담당자가 다르기 때문에 미리 규칙을 정해놓지 않으면 글의 통일성이 떨어지기 때문이다.
6. 양식 및 폰트 결정
문서의 형식(단계별 번호나 형태 등)부터 폰트까지 글을 쓰기 전에 미리 정하도록 한다.
7. 작성 담당자 선정
목차에 따라 각 부분의 작성 담당자를 정한다.
8. 작성
앞서 정해진 규칙에 따라 담당자 별로 작성한다.
9. 취합 및 퇴고
마지막으로 작정자 중 대표자가, 나누어 쓰여진 각 부분을 모두 취합하여 목적에 맞게 잘 쓰여졌는지 검토를 하고 마지막 수정을 하도록 한다.
10. Release
문서를 배포한다.
5. Software Product White Paper 목차 예제
목차의 선정은 가장 고민스럽고 가장 신중해야 하는 작성 단계이다. 일반적인 목차예제를 다음과 같이 제시한다. 그러나 이는 제품의 특성에 따라 상이해야 할 필요성도 있으므로 참고 자료로만 활용하라.
1. Introduction
제품에 대한 소개 글로써 제품을 만들게 된 명확한 목적과 배경을 기술하되, 제품에 대한 시장 현황과 흐름, 타 제품과의 차이점 등을 기술하도록 한다.
* Needs
시장에서의 제품의 필요성을 기술한다. 어떤 회사 또는 어떤 부분(시장)에서 이 제품을 필요로 하는지 대체 상품으로는 무엇이 있는지 기술한다.
2. Overview
제품의 전반적인 컨셉을 기술한다. 제품의 이름 설명(의미), 기본 개념, 정의, 제품 구성, 사용 환경, 전체적인 사용법 등을 설명한다. (소개 자료와 비슷한 맥락 일 수 있으며 보통은 소개 글과 합쳐서 하나로 쓰이는 경우가 많으나 나누어 쓰기도 한다.)
3. Feature
제품의 주요 특징을 기술한다. 타 제품과 비교하여 장점을 상세히 설명하고 왜 이 제품을 사용해야 하는지 설득력 있게 설명한다.
4. Functions
제품의 주요 기능을 기술한다. 우선 주요 기능을 구분하고 각각의 기능에 따른 정의를 명확하게 설명한 후 프로세스와 기능리스트를 상세하게 작성한다.
5. System Architecture
제품의 시스템 구성을 기술한다. 시스템 구성에 대한 소개와 각각의 기능을 설명하고 이미지를 첨부하여 이해가 쉽도록 한다. 우수하고 검증된 System Architecture는 고객에게 제품의 신뢰감을 높이는데 일조한다.
* Standard Support
국제 표준을 따르고 있는지 기술한다. 어떤 국제 표준을 따르고 있으며, 표준화로 인한 이점이 무엇인지 설명한다.
6. Benefit
제품을 사용하는 회사 또는 사용자에게 주어지는 혜택을 기술한다. 제품을 사용함으로써 회사 또는 사용자에게 어떤 이점을 주며 그것으로 인한 회사의 발전 방향이 무엇인지 상세히 설명한다. 가능하면 수익 구조에 관한 내용도 첨가할 수 있도록 한다.
7. Conclusion or Epilogue
White Paper의 결론을 맺는 내용으로 제품의 간략한 소개와 비전을 기술하도록 한다.
6. White Paper Example
http://www.hannonhill.com/downloads/pdf/Hannon_Hill_Content_Management_WhitePaper.pdf
http://www.sitecore.net/Benefits/Product%20overview/Evaluation%20tools/Choosing%20CMS.aspx
http://software.emc.com/collateral/content_management/documentu\m_family/wp_tech_cis.pdf
http://www.eclipse.org/whitepapers/eclipse-overview.pdf
http://www.utopianet.org/news/file-11.pdf#search='white%20paper'
http://www.sun.com/products/soa/composite_app_tco.pdf
http://www.wapforum.org/what/WAP_white_pages.pdf
http://java.sun.com/developer/technicalArticles/WebServices/JWS_2/JWS_White_Paper.pdf
http://www.uddi.org/pubs/Iru_UDDI_Technical_White_Paper.pdf
7. 참고자료
http://ww.casestudieswriter.com/how2wp.html
http://ww.perrymarshall.com/whitepapers/
http://www.stelzner.com/copy-HowTo-whitepapers.php
http://www.writing-world.com/tech/tech4.shtml
http://www.studygs.net/wrtstr11.htm
http://www.darrenbarefoot.com/writingsamples/TenTips.pdf
http://aplawrence.com/Misc/ctaylorwhitepaper.html
http://owl.english.purdue.edu/owl/resource/546/01/
http://www.mwknowles.com/free_articles/white_paper/white_paper.html
http://pegasus.cc.ucf.edu/~gurney/WhPaperRev4LAH.doc
http://www.pegr.com/whitepapers.html
http://www.itbusinessedge.com/research/?ggkey=white+paper
http://www.bpm-advisor.com/whitepaper2.php
http://www.klariti.com/white-papers/index.shtml
http://www.sage.org/whitepapers/guidelines.mm
http://www.clarityconsulting.com/what_makes_a_good_white_paper.htm
Thursday, February 12, 2009
[Security] Link related to Reverse Engineering
Reverse Engineering과 관련된 자료를 제공하는 있는 사이트
2. 본문
1) BEISTLAB
Link : http://beist.org/index.html
2) Korea Information Security Community
Link : http://cafe.naver.com/security.cafe
Wednesday, February 11, 2009
[C++] Google Testing Framework
C++ 프로그램을 테스트하기 위한 Framework을 Google에서 제공하고 있다.
이를 이용하여 제품을 조금 더 신뢰성있게 개발할 수 있을 것이다.
2. 본문
1) Google C++ Testing Framework
Link : http://code.google.com/p/googletest/
2) Google C++ Mocking Framework
Link : http://code.google.com/p/googlemock/
Wednesday, January 14, 2009
Link related to Audio Signal Processing
Audio 신호 처리 관련 링크
2. 본문
1) Musical Signal Processing in C++
Link : http://hummer.stanford.edu/sig/
2) Signal Analysis/Processing Software
Link : http://www.linux-sound.org/dsp.html
3) Telecommunications & Signal Processing Laboratory
Link : http://www-mmsp.ece.mcgill.ca/Documents/Software/index.html
Link : http://www-mmsp.ece.mcgill.ca/Documents/Software/Packages/AFsp/AFsp.html
4) Channel Coding (Turbo)
Link : http://www-mmsp.ece.mcgill.ca/Documents/Software/Channel-Coding/Distance_SB_TC/DS-SB-TC.htm
Tuesday, January 13, 2009
IEEE floating-point exceptions in C++
IEEE floating-point exceptions in C++
This page will answer the following questions.
- My program just printed out
1.#IND
or1.#INF
(on Windows) ornan
orinf
(on Linux). What happened? - How can I tell if a number is really a number and not a
NaN
or an infinity? - How can I find out more details at runtime about kinds of
NaN
s and infinities? - Do you have any sample code to show how this works?
- Where can I learn more?
These questions have to do with floating point exceptions. If you get some strange non-numeric output where you're expecting a number, you've either exceeded the finite limits of floating point arithmetic or you've asked for some result that is undefined. To keep things simple, I'll stick to working with the double
floating point type. Similar remarks hold for float
types.
Debugging 1.#IND, 1.#INF, nan, and inf
If your operation would generate a larger positive number than could be stored in a double
, the operation will return 1.#INF
on Windows or inf
on Linux. Similarly your code will return 11.#INF
or -inf
if the result would be a negative number too large to store in a double
. Dividing a positive number by zero produces a positive infinity and dividing a negative number by zero produces a negative infinity. Example code at the end of this page will demonstrate some operations that produce infinities.
Some operations don't make mathematical sense, such as taking the square root of a negative number. (Yes, this operation makes sense in the context of complex numbers, but a double
represents a real number and so there is no double
to represent the result.) The same is true for logarithms of negative numbers. Both sqrt(-1.0)
and log(-1.0)
would return a NaN
, the generic term for a "number" that is "not a number". Windows displays a NaN
as -1.#IND
("IND" for "indeterminate") while Linux displays nan
. Other operations that would return a NaN
include 0/0, 0*∞, and ∞/∞. See the sample code below for examples.
In short, if you get 1.#INF
or inf
, look for overflow or division by zero. If you get 1.#IND
or nan
, look for illegal operations. Maybe you simply have a bug. If it's more subtle and you have something that is difficult to compute, see Avoiding Overflow, Underflow, and Loss of Precision. That article gives tricks for computing results that have intermediate steps overflow if computed directly.
Testing for NaNs and infinities
Next suppose you want to test whether a number is an infinity or a NaN
. For example, you may want to write to a log file print a debug message when a numerical result goes bad, or you may want to execute some sort of alternate logic in your code. There are simple, portable ways to get summary information and more complicated, less portable ways to get more information.
First, the simple solution. If you want to test whether a double
variable contains a valid number, you can check whether x == x
. This looks like it should always be true, but it's not! Ordinary numbers always equal themselves, but NaN
s do not. I've used this trick on Windows, Linux, and Mac OSX. If you ever use this trick, put big bold comments around your code so that some well-meaning person won't come behind you and delete what he or she things is useless code. Better yet, put the test in a well-documented function in a library that has controlled access. The following function will test whether x
is a (possibly infinite) number.
bool IsNumber(double x) { // This looks like it should always be true, // but it's false if x is a NaN. return (x == x); }
To test whether a variable contains a finite number, (i.e. not a NaN
and not an infinity) you can use code like the following.
bool IsFiniteNumber(double x) { return (x <= DBL_MAX && x >= -DBL_MAX); }
Here DBL_MAX
is a constant defined in float.h
as the largest double
that can be represented. Comparisons with NaN
s always fail, even when comparing to themselves, and so the test above will fail for a NaN
. If x
is not a NaN
but is infinite, one of the two tests will fail depending on whether it is a positive infinity or negative infinity.
Getting more information programmatically
To get more detail about the type of a floating point number, there is a function _fpclass
on Windows and a corresponding function fp_class_d
on Linux. I have not been able to get the corresponding Linux code to work and so I'll stick to what I've tested and just talk about Windows from here on out.
The Windows function _fpclass
returns one of the following values:
_FPCLASS_SNAN // signaling NaN _FPCLASS_QNAN // quiet NaN _FPCLASS_NINF // negative infinity _FPCLASS_NN // negative normal _FPCLASS_ND // negative denormal _FPCLASS_NZ // -0 _FPCLASS_PZ // +0 _FPCLASS_PD // positive denormal _FPCLASS_PN // positive normal _FPCLASS_PINF // positive infinity
The following code illustrates which kinds of operations result in which kinds of numbers. To port this code to Linux, the FPClass
function would need to use fp_class_d
and its corresponding constants.
#include#include #include #include using namespace std; string FPClass(double x) { int i = _fpclass(x); string s; switch (i) { case _FPCLASS_SNAN: s = "Signaling NaN"; break; case _FPCLASS_QNAN: s = "Quiet NaN"; break; case _FPCLASS_NINF: s = "Negative infinity (-INF)"; break; case _FPCLASS_NN: s = "Negative normalized non-zero"; break; case _FPCLASS_ND: s = "Negative denormalized"; break; case _FPCLASS_NZ: s = "Negative zero (-0)"; break; case _FPCLASS_PZ: s = "Positive 0 (+0)"; break; case _FPCLASS_PD: s = "Positive denormalized"; break; case _FPCLASS_PN: s = "Positive normalized non-zero"; break; case _FPCLASS_PINF: s = "Positive infinity (+INF)"; break; } return s; } string HexDump(double x) { unsigned long* pu; pu = (unsigned long*)&x; ostringstream os; os << hex << pu[0] << " " << pu[1]; return os.str(); } // ---------------------------------------------------------------------------- int main() { double x, y, z; cout << "Testing z = 1/0\n"; // cannot set x = 1/0 directly or would produce compile error. x = 1.0; y = 0; z = x/y; cout << "z = " << x/y << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; cout << "\nTesting z = -1/0\n"; x = -1.0; y = 0; z = x/y; cout << "z = " << x/y << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; cout << "\nTesting z = sqrt(-1)\n"; x = -1.0; z = sqrt(x); cout << "z = " << z << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; cout << "\nTesting z = log(-1)\n"; x = -1.0; z = sqrt(x); cout << "z = " << z << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; cout << "\nTesting overflow\n"; z = DBL_MAX; cout << "z = DBL_MAX = " << z; z *= 2.0; cout << "; 2z = " << z << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; cout << "\nTesting denormalized underflow\n"; z = DBL_MIN; cout << "z = DBL_MIN = " << z << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; z /= pow(2.0, 52); cout << "z = DBL_MIN / 2^52= " << z << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; z /= 2; cout << "z = DBL_MIN / 2^53= " << z << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; cout << "\nTesting z = +infinity + -infinty\n"; x = 1.0; y = 0.0; x /= y; y = -x; cout << x << " + " << y << " = " << z << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; cout << "\nTesting z = 0 * infinity\n"; x = 1.0; y = 0.0; x /= y; z = 0.0*x; cout << "x = " << x << "; z = 0*x = " << z << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; cout << "\nTesting 0/0\n"; x = 0.0; y = 0.0; z = x/y; cout << "z = 0/0 = " << z << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; cout << "\nTesting z = infinity/infinity\n"; x = 1.0; y = 0.0; x /= y; y = x; z = x/y; cout << "x = " << x << "; z = x/x = " << z << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; cout << "\nTesting x fmod 0\n"; x = 1.0; y = 0.0; z = fmod(x, y); cout << "fmod(" << x << ", " << y << ") = " << z << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; cout << "\nTesting infinity fmod x\n"; y = 1.0; x = 0.0; y /= x; z = fmod(y, x); cout << "fmod(" << y << ", " << x << ") = " << z << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; cout << "\nGetting cout to print QNAN\n"; unsigned long nan[2]={0xffffffff, 0x7fffffff}; z = *( double* )nan; cout << "z = " << z << "\n"; cout << HexDump(z) << " _fpclass(z) = " << FPClass(z) << "\n"; return 0; }
To learn more
For much more detail regarding exceptions and IEEE arithmetic in general, see What every computer scientist should know about floating-point arithmetic.
Other C++ articles: random number generation, strings, regular expressions
[Security] Link related to Anti Cracking
Anti Cracking 관련된 자료를 제공하는 사이트
2. 본문
1) CrackZ's Reverse Engineering Page (1997-2007)
Link : http://www.woodmann.com/crackz/Miscpapers.htm
2) Reverse Engineering Team
Link : http://www.reteam.org/index.html
3) rEVERSE
Link : http://ampm.ddns.co.kr/~reverse/
4) 여리의 작업실
Link : http://www.zap.pe.kr/
5) The Reverse Code Engineering Community
Link : http://www.reverse-engineering.net/
6) Secure Software Engineering
Link : http://www.secure-software-engineering.com/
7) Security Labs
Link : http://securitylabs.websense.com/content/Blogs/2491.aspx
8) OpenRCE Anti Reverse Engineering Techniques Database
Desc : 어셈블리 코드를 직접 예제로 보여주면서 설명해 주는 사이트, 실질적인 코드를 제공
Link : http://www.openrce.org/reference_library/anti_reversing
9) Scan of the Month 33: Anti Reverse Engineering Uncovered
Desc : Anti Reverse Engineering 기법을 한 페이지에 잘 정리하였음
Link : http://www.honeynet.org/scans/scan33/nico/index.html
10) A Survey of Reverse Engineering Tools
Link : http://www.cs.drexel.edu/~spiros/teaching/CS675/asmrceFINAL.pdf
11) Honeynet Project
Link : http://www.honeynet.org/
12) Process Stalker
Desc : 프로세스의 실행 경로를 탐색하며 문제를 파악하는 방법
Link : http://www.openrce.org/articles/full_view/12
13) OllyDbg
Link : http://ollydbg.de/
[Embedded] Embedded Category
WindowsCE, Embedded Linux, iPhone, Android 등 단말과
관련된 자료를 정리하는 곳입니다.