Systems/Windows2014.04.17 10:58

워드 문서에 소스 코드 같은 것을 입력할 때 (다른 문서에도 그렇겠지만) 보통 고정폭 서체를 사용한다. 그래야 깔끔하게 표시될 것이기 (또는 그럴 것이라 믿기) 때문. 


그런데 실제로 고정폭 서체를 (Courier New같은) 적용해 보면 고정폭으로 표시되지 않는 문제가 있다. 




위의 그림을 보면 알 수 있듯이, 실제 코드에는 = 의 위치가 위 아래로 정확히 정렬되어 있으나, 워드에 붙여넣으면 제대로 정렬되어 표시되지 않는다.


이 문제를 해결하려면 옵션을 바꿔야 한다. "옵션 --> 고급 --> 호환성 옵션 --> 레이아웃 옵션 --> 반자 문자와 전자 문자의 문자 너비를 조정함" 으로 가서, 체크박스를 해제하자. 




그러면 위와 같이 표시되기 시작한다. (수줍) 



저작자 표시 비영리 변경 금지
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

Systems/Windows2013.09.24 09:23

마이크로소프트가 월요일 Surface 2를 공개했습니다. 가격은 $499부터 시작하고, 1080p 디스플레이에 25% 더 오래가는 배터리를 탑재하고 있어서 하루 12시간 이상 사용할 수 있다고 하는군요. 종전 모델보다 더 얇고 가벼워진 것은 물론이고, 와이파이 속도도 개선되었으며 USB 3.0과 MicroSD 카드 리더를 탑재하고 있습니다. 비디오는 NVIDIA Tegra 4이고, Windows RT 8.1을 돌립니다. (http://mashable.com/2013/09/23/surface-2-tablet-microsoft/)



시장에 풀리는  시점은 10월 21일에서 22일 쯤이 될 것이라는군요. 오피스와 아웃룩은 기본으로 깔려있는 것 같구요. 


킥스탠드라는 스탠드가 기본 탑재되어 있어서 세워놓고 보기 편할 것 같구요. 윈도우 '타일' 크기도 원하는 대로 구성해서 사용자 입맛에 맞게 꾸밀 수 있도록 배려한다고 합니다. 





하지만 Mashable.com은 Surface 2가 오래된 Windows 앱은 돌릴 수 없고, 아직 앱 스토어에 다양한 앱이 풍부하지 않은 것을 약점으로 꼽고 있습니다. PC가 필요하지만 그렇다고 PC를 사고 싶지 않은 (응?) 사용자에게 적합할거라는 논평과 함께. 


하지만 아직은 iPad 대신 Surface를 선택해야 하는 이유가 불분명하다는군요. 



저작자 표시 비영리 변경 금지
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

  1. 지나가다

    본문에 "킥스탠드라는 스탠드"라는 말은 좀 이상하네요.
    원래 저렇게 닫았다 열었다 할 수 있는 스탠드를 킥스탠드라고 합니다.

    2013.09.29 12:23 신고 [ ADDR : EDIT/ DEL : REPLY ]

Systems/Windows2010.07.13 11:12
일반적인 Unix 플랫폼에서는 멀티 쓰레드 응용 프로그램을 작성하기 위해 pthread 라이브러리를 활용한다. pthread 라이브러리는 자체적으로 conditional variable을 지원하기 때문에, 그것을 활용해서 쓰레드간 동기화를 편하게 할 수 있다. 

그런데 WIN32 플랫폼에 이르면, Vista 전까지는 conditional variable을 지원하지 않았다. 따라서 conditional variable을 사용하기 위해 직접 conditional variable 기능을 구현하는 삽질을 해야만 했다.

하지만 vista 부터는 (Windows 7도 당근) conditional variable을 지원한다. 다음과 같이 사용하면 된다.

우선, pthread와 마찬가지로 conditional variable을 통한 동기화를 하려면 critial section과 같이 써야 한다. (pthread 라이브러리에서는 mutex와 같이 써야 했다.)

CRITICAL_SECTION critical_section;
CONDITION_VARIABLE conditional_variable;

초기화는 다음과 같이 한다.

// 이하는 전부
// pthread_mutexattr_init
// pthread_mutex_init
// pthread_condattr_init
// pthread_cond_iint에 대응한다.
InitializeConditionVariable(&conditional_variable);
InitializeCriticalSection(&critical_section);

다 쓰고 나면 삭제해 줘야 한다.

// 이하는 전부
// pthread_condattr_destroy
// pthread_cond_destroy
// pthread_mutexattr_destroy
// pthread_mutex_destroy에 대응한다.
DeleteCriticalSection(&critical_section);

conditional variable에 대한 락, 그러니까 동기화 지점에 대한 락은 critical section을 통해 해야 한다.

// pthread_mutex_lock에 대응
EnterCriticalSection(&critical_section);

락 해제는 다음과 같이 한다.

// pthread_mutex_unlock에 대응
LeaveCriticalSection(&critical_section);

특정한 조건이 만족되었는지 무한 대기하려면 다음과 같이 한다. (오류 체크 코드는 싹 다 뺐다.)

// pthread_cond_wait에 대응
SleepConditionVariableCS(&conditional_variable, &critical_section, INFINITE);

일정한 시간 동안만 대기하려면 다음과 같이 하면 된다. (초 단위로 대기하려는 경우)

// pthread_cond_timedwait에 대응
SleepConditionVariableCS(&conditional_variable, &critical_section, second * 1000);

조건이 충족되었을 경우 conditional variable 상에서 기다리고 있는 쓰레드들을 깨우는 방법으로는 다음의 두 가지가 있다.

// pthread_cond_signal에 대응
WakeConditionVariable(&conditional_variable);
// pthread_cond_broadcast에 대응
WakeAllConditionVariable(&conditional_variable);

위의 WIN32 프리미티브들을 활용하면 WIN32 쓰레드를 conditional variable을 활용하여 동기화할 수 있다. (Windows에서는 condition variable 이라고 부른다.)
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

Systems/Windows2008.06.09 16:06
이 책을 번역한지 꽤 시간이 지난거같습니다만, 최근에 이 책의 11장에 실린 예제에 관한 메일 두통을 받았습니다. 11장에 실린 예제가 이해하기 어렵다는 것이었습니다. 10장까지의 내용을 잘 따라하신 분이라면 그다지 큰 무리없이 하실 수 있을것 같은데 말이죠. 그래서 11장에 실린 내용에 잘못된 부분이 있나 검증도 해 볼겸, 한번 책의 예제를 그대로 따라해봤습니다.

사용자 삽입 이미지
우선 MFC AppWizard(exe)를 선택합니다.

사용자 삽입 이미지
SDI 프로그램을 만들어야 하니까, Single Document를 선택합니다.

사용자 삽입 이미지
대화상자를 하나 그립니다. 이 대화상자의 ID는 IDD_MAP_MODE로 해 놓습니다. 콤보 박스를 하나 그리고, 그 박스의 ID는 IDC_COMBO로 해 놓습니다. 여기까지는 간단합니다.

사용자 삽입 이미지
다이얼로그 박스를 다 그린다음에는 ctrl+W를 누르거나 다이얼로그 박스 그림을 더블클릭해서 해당 다이얼로그 박스에 대한 새로운 클래스를 만듭니다. 이름은 위와 같이 적어주면 됩니다.

사용자 삽입 이미지
그런 다음,  IDC_COMBO에 대한 멤버 변수를 추가합니다. 위의 화면에서 IDC_COMBO를 클릭한 다음에, Add Variable을 눌러주면 됩니다.

사용자 삽입 이미지
그러면 위와 같은 창이 뜨는데, 역시 위와 같이 입력해주고 OK하면 됩니다.

사용자 삽입 이미지
그런 다음에는 다이얼로그 박스 그림으로 돌아가서, 콤보 박스의 Property를 편집합니다. Data 부분에 위와 같이 적어주면 됩니다. 여러줄을 적으려면, 리턴 키를 누를 때 Ctrl키를 같이 누르면 됩니다.

사용자 삽입 이미지
이제 새로운 메뉴 항목을 보기(View) 아래에 추가할 차례입니다. 빈 곳을 더블클릭하면 아래와 같은 화면이 나타날 것입니다.

사용자 삽입 이미지
위의 화면에 역시 위와 같이 입력해 줍니다.

사용자 삽입 이미지
그런 다음에는 추가된 메뉴위에서 마우스 오른쪽 버튼을 클릭한 다음에 ClassWizard를 선택합니다.

사용자 삽입 이미지
위와 같이, Object ID가운데에서는 ID_VIEW_MAP_MODE를 선택하고, 오른쪽에 나타나는 Messages 가운데에서는 COMMAND를 선택합니다. 그런 다음에 Add Function 버튼을 누릅니다.

사용자 삽입 이미지
위와 같은 화면이 나타날텐데, 거기에 위와 같이 입력되어 나타날 것입니다. 그대로 OK 버튼을 누릅니다.

사용자 삽입 이미지
이제 소스 코드 편집창이 나타날 것인데, 거기에 책에 실린 소스코드(목록 11.3)를 입력합니다.

사용자 삽입 이미지
위와 같이 DCTestView.h 코드도 수정합니다.

사용자 삽입 이미지
include 해 주는 부분도 위와 같이 수정합니다.

사용자 삽입 이미지
이제 CDCTestView::OnDraw를 수정할 차례입니다. 위와 같이 선택한 다음에 (Ctrl + W를 누르면 나오는 화면입니다) 우측의 Edit Code 버튼을 누릅니다. 그런 다음 목록 11.5에 실린 코드를 입력합니다.

사용자 삽입 이미지
입력이 다 되었으면, 이제 마지막으로 CDCTestView 클래스의 생성자를 수정합니다.

사용자 삽입 이미지
코드를 정상적으로 입력하였다면 (그렇지 않았다면 에러메시지가 떴을 테지만) 위와 같은 메시지가 화면에 출력되는 것을 볼 수 있습니다. MAP MODE를 바꾸려면 아까 추가했던 메뉴 항목을 클릭하고 콤보 박스 안의 다른 항목을 선택한 다음 OK를 눌러주면 됩니다.

두 분이나 질문하실 만큼 그렇게 난감한 대목은 찾을수가 없네요. ^^;

아무튼, 위와 같이 하시면 되구요. 혹시 몰라서 예제 코드를 첨부합니다.


신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

Systems/Windows2007.09.06 09:00

가장 기본적인 가정은, LM70에는 Fedora Core 6가 제일 잘 맞더라, 하는 것입니다. Ubuntu는 시도해보지 않아서 잘 모르겠습니다.

1. Windows 설치

LM70에 Windows XP 설치 CD를 넣고 시도해 보면, 잘 안됩니다. 장치 Configuration을 검사하다가 뻗어버리는데, 기본적으로 Windows 인스톨러에 SATA 관련 기능이 없는 탓도 있을 것이고... 아무튼 잘 되질 않습니다. 가장 쉬운 방법은 시스템 부팅 시 F11 버튼을 눌러 Xnote의 시스템 복구 기능을 구동시키는 것입니다.

이 기능이 구동된 후에는 파티션을 나눈다거나 하는 작업을 고급 설정 부분에서 할 수 있습니다. 유의할 것은 Windows가 하드 디스크 상의 첫번째 파티션이 되어야 한다는 점입니다. 그렇게 잡지 않으면 LM70의 시스템 복구 기능이 제대로 동작하지 않습니다. 저는 Windows 용으로 25G 정도의 용량을 잡아주었습니다.

파티션을 나눈 다음에는 한번 재부팅 한 다음에 (왜 그런지 모르겠지만, 재부팅하지 않으면 복구 후에도 Windows가 정상적으로 부팅되지 않습니다) 앞서 만든 주 파티션에 Windows를 복구해주어야 합니다. 그런 다음에 Windows가 정상적으로 부팅되면 이제 프로그램을 깔아준다던가, 네트워크를 잡는다거나 하는 작업들을 해 주면 됩니다.

2. Linux 설치

Windows가 제대로 설치된 다음에는 Linux 설치는 오히려 간단합니다. 설치 화면이 실행되고 다음 버튼을 눌러나가다 보면 하드 디스크 파티션과 관련된 화면이 나올텐데, 여기서 "하드 디스크 여유 공간에 기본 파티션 설정"을 선택한 다음 계속 진행해 나가면 됩니다. sda1은 Windows 용, sda2는 부트 이미지가 들어가는 영역인거같구요, sda3에 Linux 파일들이  깔리게 됩니다.

그런 다음에 다음 버튼을 누르다보면 부트로더 설치(GRUB)와 관련된 화면이 나오고 거기에 부팅할 OS 목록이 나옵니다. 두 번째 OS가 아마 Other로 나올텐데, 여기서 그 목록을 클릭한 다음 오른쪽의 편집 버튼을 눌러 그 이름을 Other에서 Windows XP로 바꾸어주면 됩니다.

그런 다음에 나오는 화면은 뭐 별로 어려운 부분이 없으니까 그냥 넘어가도 됩니다.

설치가 제대로 되었으면 이제 GSynaptics를 설치하고, 무선랜을 잡아주는 작업을 해 주면 됩니다.

GSynaptics 설치를 하는 제일 쉬운 방법은, yum install gsynaptics를 실행하는 것입니다. 소스 설치를 하려면 (왜?) GSynaptics 홈페이지에 가서 소스를 다운받아 컴파일을 해 주면 되는데, FC6 설치 직후에 컴파일을 하려면 ./configure부터 잘 안될겁니다. yum install perl-XML-Parser를 입력하여 관련 모듈을 설치한 다음에 ./configure; make; make install 하면 됩니다. (당연히 make install 하려면 super user가 되어야.. ㅎㅎ)

그런 다음 gsynaptics를 실행해 보면... 또 안됩니다. ㅋㅋ

/etc/X11/xorg.conf에 보면 Section InputDevice 부분이 있습니다. 다음과 같이 편집합니다.

Section "InputDevice"
        Identifier  "Synaptics"
        Driver      "synaptics"
        Option      "Device" "/dev/input/mice"
        Option      "Protocol" "auto-dev"
        Option      "Emulate3Buttons" "yes"
        Option      "SHMConfig" "true"
EndSection

이렇게까지 하고 재부팅해보거나 X 서버를 다시 실행시킵니다. 그런다음 명령행 상에서 gsynaptics 프로그램을 실행시키면, 터치패드를 켜고 끌 수 있습니다.

그런 다음에는 무선랜을 잡아야 하는데요.

rpmfind.net에서 ipw2200-firmware-3.0.9-noarch.rpm을 갖다가 깝니다. 그런 다음 재부팅해보면 eth1 (무선랜)이 제대로 올라오는 것을 볼 수 있습니다.

그런 다음에는 시스템->관리->Services 에서 NetworkManager와 NetworkManagerDispatcher 두개를 다 살려줘야합니다. 그러면 화면 상단 구석에 NetworkManager 애플릿이 떠서 인터페이스들을 관리하는 것을 볼 수 있습니다. 뜨지 않는다면 로그아웃했다가 다시 로그인해보면 뜰겁니다. (그래도 안되면 재부팅 ㅋㅋ)

아무튼 이정도까지 하면 이제 해야 할 건 대충 다 했다고 볼 수 있습니다.

나머지는 그때그때 알아서~

PS. 여기까지 했는데도 뭔가 잘 안된다면? 그때는 이 문서를 참고하세요.



신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

Systems/Windows2007.08.31 15:32
Windows에서 폴더를 공유할 때 공유 폴더 이름을 설정해 주어야 한다.
이 때 이름을 지정할 때 그 마지막에 $ 기호가 붙도록 aaa$과 같이 설정하면,
공유 폴더 이름이 네트워크에 공개되지 않는다.

이러한 공유 폴더에 접근하고자 할 때에는
\\222.333.444.555\aaa$ 와 같이 해야만 접근이 가능하다.
암호를 걸기가 애매한 공유 폴더는 이렇게 숨겨놓고,
공유하고자 하는 사람들에게만 해당 공유 폴더를 알려주면
암호를 거는 것과 비슷한 효과를 누릴 수 있다.
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^