세상이 빨리도 변한다. 하드디스크 40메가, 기가급도 아닌 메가급으로 넉넉한 마음을 가졌던 기억이 아직도 생생한데 이젠 메모리가 기가급이다. 최근에 구입한 iMac 27"는 운좋게도 16GB를 추가로 구하게 되어 모두 24GB. 모두 활용할정도로 작업할게 많질 않아서 뭘로 사용할까 궁리하던 끝에 생각난것이 RAM DISK!!

즉시, 구글링을 시작해보니 역시나 선구자들이 마련해놓은 길이 나타난다.

http://boredzo.org/make-ram-disk/

간혹 링크가 연결되지 않으면 http://boredzo.org로 들어가서 페이지내에서 링크를 찾아내야할 수 있다.

Make RAM Disk 1.0.zip 


이글을 포스팅할때 최신버전이 1.0인데(거의 손을 안대는듯)... 매버릭스에서도 잘 동작한다.


좀 더 불편하게 램디스크를 만드는 방법을 찾아보니 이렇다.(적절히 원하는대로 수정해서 쓰면 된다)


1. /Library/LaunchDaemons/ 경로에 com.my.ramfs.plist 파일을 복사.

com.my.ramfs.plist -> $ sudo cp com.my.ramfs.plist /Library/LaunchDaemons

com.my.ramfs.plist 파일내용com.my.ramfs.plist 파일내용

2. /private/var/root/ 경로에 ramfs.sh 파일을 복사

ramfs.sh -> sudo cp ramfs.sh /private/var/root

ramfs.sh 파일 내용ramfs.sh 파일 내용


Finder 옵션설정에 바탕화면에 디스크를 보이도록 해놓으면 램디스크가 당연히 나타나므로, 이런건 어쩔수 없는 불편함이 있지만 그래도 SSD의 수명을 위해서, 그리고 보다 빠른 성능을 위해서 감수할 수 있는 좋은 기능이다.

SSD와 램디스크의 조합으로 iMac 27"는 현재 거의 TV수준의 On/Off 처리를 보여준다. 맘에 들어 ^^;;


Posted by Jason Ryu
,

DCLP에 대한 고찰이 맘에 들었던 자료하나를 찾았다. 예전부터 Singleton 패턴을 구현할때 DCLP부분이 늘 애매했었는데, 보다 깊은 이해를 할 수 있도록 가이드를 해줄만한 썩 괜찮은 내용이다.

DCLP_DDJ_Jul_Aug_2004_revised.pdf

개략적으로 살펴보면 이렇다.


전형적인 싱글톤 패턴을 구현하는 C++ code. 싱글프로세서 기반에서는 적절하다.


멀티프로세서 기반에서는 쓰레드안전하게 하기위해서 흔히들 이중으로 확인하는 Double-checked Locking Pattern을 사용하는 코드가 사용된다. 문제점이야 여전히 남아있지만서도.

그래서 사용되는 것이 volatile이라는 한정지시자를 사용한다.

완벽해보이지만, 여전히 컴파일러에 따라 최적화 로직 차이가 있음으로 인해 문제가 발생할 수 있다는 의견이 있다. 그래서 Memory Barrier를 두어 보다 안전하게 코드를 작성한다.


But, DCLP is broken....Never use it!!


Posted by Jason Ryu
,

며칠전부터 iPhoto 업데이트 하라는 메시지가 나왔는데, 계속 미루다 오늘 "업데이트" 선택을 했다.

AppStore 프로그램이 시작되면서 <업데이트>화면이 나오는데,

"사용 가능한 업데이트 없음"

이라고 나왔다.

얼른 구글링해보니 "언어" 기본선택을 "영어"로 하면 된다는 힌트를 얻었다.

설정이후 리부팅하고나니, AppStore 의 <업데이트>화면에서 업데이트가능한 항목이 나타난다.

iMovie, iPhoto, Numbers, Pages 네가지 항목.


Posted by Jason Ryu
,

구조체 내의 멤버변수들의 옵셋위치를 구하는 매크로.

멤버변수들의 데이터형은 컴파일 옵션에 따라 그 크기가 달라질 수 있는데다가,

변수의 순서에 따라 옵셋은 컴파일시에 최적화되어 결정되므로 그 값은 계산하기 참 복잡스럽다.

일반적인 프로그래밍 상황에서는 쓸일이 없는 매크로긴 하다.^^


#define STRUCT_FIELD_OFFSET(type, field)    \

    ((unsigned int)(((char *)(&(((type*)NULL)->field)))-((char *)NULL)))

/* type: 구조체 타입명, field: 멤버변수명 */


#define MAX_LEN    128

struct Sample_struct {

    char *              cp_1st_field;

    int                     i_2nd_field;

    unsigned short  us_3rd_field;

    char                  ca_4th_field[MAX_LEN];

    unsigned short  us_5th_field;

    void*                 ptr_6th_field;

};

typedef struct Sample_struct sample_t;


저 구조체의 각 멤버들의 옵셋값을 눈으로 계산하긴 거시기하다.

더구나 그 안에 구조체가 또 들어있으면 그냥 포기하는게 낫다.

이럴때 써먹을 매크로이긴 한데.......

예전에는 코드최적화나 자동화코드, 호환성 이따위를 고려할때 종종 써먹었는데...이제는.....


마땅히 써먹을만한 곳은 생각이 안남. 

요즘은 그런 코드 작성할 일이 없다. 요구하지도 않고...그럴 이유도 찾을수가 없다.



Posted by Jason Ryu
,



my_prompt

첨부파일을 로그인 계정 홈 디렉토리내에 업로드한 후, 로그인 스크립트(.bashrc, .bash_profile, .cshrc, 등등)내에 다음과 같이 추가한다.

if [ -f ~/.my_prompt ]; then

    . ~/my_prompt

fi

bash, sh, csh, ksh마다 문법이 다소 차이가 있으니, 적절히 알아서 수정해야 한다.


Posted by Jason Ryu
,