java.lang.OutOfMemoryError: Java heap space 에러 시 다음 두 부분 중 원인이 되는 부분을 고친다.
이 것 말고도 여러 원인들이 있을 수 있다.
java.lang.OutOfMemoryError: Java heap space 에러 시 다음 두 부분 중 원인이 되는 부분을 고친다.
MSDN : Creating Shell Extension Handlers
The Complete Idiot’s Guide to Writing Shell Extensions
Part 1
Part 2
Part 3
Part 4
Part 5
Part 6
Part 7
Part 8
Part 9
Shell Extension Context Menu Sample
Registry에 등록하는 건 Post-Build Step 에서 Regsvr32를 이용해서 등록한다. 커맨드는 다음과 같다.
Registry에 등록을 해제하는 건 다음과 같은 커맨드로 가능하다.
Registry 등록 관련 절차는 ShellExtReg.cpp 내의 RegisterFileMenu() 와 UnregisterFileMenu() 내부를 참고하면 좋다.
1. WideCharToMultiByte() API를 호출하는 방법
2. CRT 함수 wcstombs() 를 호출하는 방법
3. CString 생성자나 assign을 통한 방법(MFC만 가능)
4. ATL string 변환 매크로를 이용하는 방법
WideCharToMultiByte
WideCharToMultiByte ( CP_ACP, // ANSI code page
WC_COMPOSITECHECK, // Check for accented characters
wszSomeString, // Source Unicode string
-1, // -1 means string is zero-terminated
szANSIString, // Destination char string
sizeof(szANSIString), // Size of buffer
NULL, // No default character
NULL ); // Don’t care about this flag
wcstombs
CString
CString str1 ( wszSomeString ); // Convert with a constructor.
CString str2;
str2 = wszSomeString; // Convert with an assignment operator.
ATL Macro
// Again assuming we have wszSomeString…
{
char szANSIString [MAX_PATH];
USES_CONVERSION; // Declare local variable used by the macros.
lstrcpy ( szANSIString, OLE2A(wszSomeString) );
}
참고 : Introduction
to COM – What It Is and How to Use It. by Michael Dunn
Windows의 Batch 파일에서 Exit code를 원하는 값으로 설정하고 종료하고 싶다면..
perl을 이용해서 파일 내부의 특정 문자열을 한번에 바꿀 수 있다.
작은 따옴표와 큰 따옴표 사용에 관한 차이를 알고 싶다면 http://kldp.org/node/98639#comment-460800 를 참고!
NMake를 사용할 때 Makefile 내부에 파일을 내장해서(인라인 파일) 사용할 수 있다.
형식은 다음과 같다.
위와 같은 내용을 Makefile 내부에 써놓으면 << 들 사이의 내용이 파일로 저장되어 사용가능하게 된다. Filename 을 적으면 해당파일명으로 파일이 생성되고 적지 않으면 임의의 이름으로 임시파일이 생성된다. 또한, Make 세션 사용 후에 파일을 남겨두고 싶다면 KEEP을, 아니라면 NOKEEP 또는 아무것도 쓰지 않으면 된다.
파일 내용 안에는 $(변수) 등을 써두면 써둔 “$(변수)”가 아닌 변수로 치환되는 내용이 그대로 들어가므로 편리하다.
참고 : http://msdn.microsoft.com/ko-kr/library/seaaew50(VS.80).aspx
wxPython Tutorial(http://zetcode.com/wxpython/)
구글의 파이썬 튜토리얼 번역
import 경로 추가
주석(문서화에 사용)
함수 선언
Dictionary : {, } 사용, 순서라는 개념 없음
Dictionary Data 제거
Dictionary의 모든 element 삭제
List : [, ] 사용, 인덱스 사용. Element가 중복 존재 가능
음수 인덱스 사용가능. -1이 가장 끝
List slice
List 원소 추가
List 검색
list 내의 가장 첫번째 원소의 index
list 에 있는지 검사
List 에서 원소 제거
가장 마지막 원소 제거하면서 리턴
+ 연산자 : 새로운 리스트를 리턴(extend는 변경)
+= 연산자는 extend와 동일
* 는 반복자로 작동
Tuple : (, ) 사용. 변경 불가능, append, extend, remove, pop, index는 없음, in 으로 검사는 가능, 리스트보다 빠름
GNU Make에 대해서 아주 간략하면서도 핵심적인 내용들을 적어놓은 문서가 있길래 모르거나, 쓸 때마다 헷갈렸던 내용들을 정리해 둔다.
확장자 규칙, 패턴 규칙
전통적인 형식
예제
edimh_dbg: $(DEBUG_OBJECTS)
$make XPM=yes
예전에 안드로이드 관련 과제를 진행하면서 보았던 Reference 들이다.
이건 아마도 JNI 관련 라이브러리를 만드는 중에 시도했던 삽질 과정 중의 컴파일 옵션들..
이후에 자료들이 많이들 생긴 듯 해서 별로 필요는 없을 듯 하지만, 위키 쪽 자료들을 조금씩 정리하면서 블로그로 옮기고 정리해가자.
2012. 6. 19. 추가
Make shared native library: g++ -shared -I/usr/lib/jvm/java-6-sun/include -I/usr/lib/jvm/java-6-sun/include/linux -o libjnifunc.so jnifunc.cpp
Run: java -Djava.library.path=. JniFuncMain
Geting “Signature”: javap -s -p JniFuncMain
멤버십 초기에 FTL에 관련된 과제를 하면서 보았던 FTL 기법 중 FAST에 관련된 것들을 잊어버리기 전에 정리해두고자 한다.
FAST는 FAST의 저자들이 BAST라고 이름붙인 기법의 원리와 문제점을 설명하고 이를 해결하기 위해
완전연관섹터변환(Fully Associative Sector Translation) 방식을 사용하는 것을 말한다. 즉,
BAST에서는 임의쓰기가 동시에 발생할 때 여러 논리블록에 대한 로그블록이 경쟁상태에서 모든 섹터가 사용되지 않고 합병되는
문제점이 있는데 이를 해결하기 위해 각 로그블록의 활용률을 최대한 높임으로써 각 로그블록이 블록 전체의 섹터가 모두 사용된
이후에 소거되도록 한다.
이를 위해서 최초 쓰기 연산시에는 해당 자리에 섹터 데이터를 기록하고, 덮어쓰기 연산시에 아래의 조건들을 검사하여 적절한 연산을 수행한다.
조건 1. (start_lsn mod 32 = 0) & (lbn = (start_lsn div 32) !∈ rw_lbn_set)
조건 2. (lbn = sw_lbn) & (start_lsn mod 32 = sw_sec_num)
조건 3. (lbn = sw_lbn) & (start_lsn mod 32 > sw_sec_num)
조건 4. (lbn = sw_lbn) & (start_lsn mod 32 < sw_sec_num)
조건 5. 조건 1, 2, 3, 4를 모두 만족하지 않는 경우
위의 1~4까지의 조건들은 모두 순차쓰기용 로그블록에 쓰여지는 경우의 조건들이다. rw_set_of_lbn은 임의쓰기용 로그블록
그룹에 기록된 섹터들의 논리블록들의 주소 정보이고, sw_lbn는 순치쓰기용 로그블록에 현재 쓰여지고 있는 논리블록 주소,
그리고 sw_sec_num은 논리 블록에 대해 순차적으로 쓰여진 섹터의 수이다.
조건 1의 경우 순차쓰기용 로그블록의 첫번째 섹터에 기록된다. 이 때, 순차쓰기용 로그블록에 이미 다른 섹터들이 저장되어 있다면 그 블록과 원본 데이터 블록간의 합병 연산이 발생하여 순차쓰기용 로그블록을 소거한 후 기록된다.
조건 2의 경우 순차쓰기용 로그블록에 기록된 데이터의 다음 위치에 추가(append)할 수 있는 쓰기연산이다. 순차쓰기용 로그블록의 모든 섹터가 순차적으로 다 기록된 경우 교환 연산을 한다.
조건 3의 경우 순차쓰기용 로그블록에 연이어쓰여지지는 않지만 기록할 수 있는 쓰기 연산이다. 이 때, 그 중간 섹터가 채워질 확률이 낮기 때문에 합병 연산을 수행한다. 이 때 비어있는 섹터들만 쓰기연산을 수행하여 교환연산을 수행하면 데이터 블록만 한번 소거하면 된다.
조건 4의 경우 순차쓰기용 로그블록에 이미 기록되어 있는 섹터들 중 일부분에 대해서 덮어쓰기가 발생하는 쓰기연산이다. 이 때는 데이터 블록과 로그 블록간의 합병 연산이 수행된다.
조건 5의 경우 임의쓰기용 로그블록에 기록하며, 기록할 위치는 로그블록에 마지막으로 기록한 위치 바로 다음이 된다. 만약, 로그
블록 그룹에 더 이상의 빈 섹터가 없으면 첫 번째 로그블록에 대해 합병 연산을 수행하여 공간을 확보한다. 합병 연산 수행시에는
원형 큐 방식으로 시작 로그 블록을 합병 연산의 대상으로 삼는데, 그 로그 블록에 쓰여진 섹터들의 논리 블록의 개수만큼
합병연산이 발생한다. 이 때 로그블록에서 최신 섹터를 찾아 이 최신 섹터의 내용을 예비블록에 기록하고 데이터 블록으로부터 나머지
최신 섹터를 복사한다. 로그블록에서 최신 섹터를 찾을 때는 큐의 마지막부터 역탐색(backward search)를 수행하고,
합병 연산의 대상이 아닌 역탐색으로 찾은 최신 섹터를 포함하는 로그블록에서 섹터를 복사하고 해당 섹터 번호를 사상테이블에서
-1로 설정하여 무효화(invalid)시켜 그 로그블록이 나중에 합병연산의 대상이 되었을 때 무시하도록 한다.