Programmer BS Blog

 by BSPFP

Textile 포매터 문법 요약

글 보관함

Total121774
Today66
Yesterday245

우리 우리 설날을 맞이하여 오랜만에 고향에 내려왔습니다.
친구가 PC방에 있다고 해서 PC방에 왔는데... 이런 게임 설치되어 있는 것 어느 하나 즐기는게 없다는...
쩝...
이래서는 게임업계 종사자라 하기 좀... ㅎㅎㅎ
PC방에서 NoSQL, MMDB 같은 자료 검색이나 하고 있다는... ㅋ

Trackback Address :: http://bspfp.pe.kr/trackback/322

Windows 7 Starter Edition을 설치했습니다.
누가 구형 PC에 Windows 7이 너무 무거워서 XP를 설치해야겠다 하기에
XP말고 Windows 7 Starter는 어떨까 해서요.
물론 VMWare에 설치했는데... 쩝 이건... 뭐랄까 심각하게 기능 제한이 많네요. 쩝.
Windows 7 Starter는 안되겠어요.
그래도 이걸 사용하셔야 한다면...
배경화면 정도는 바꾸셔야죠.

HKCU/Control Panel/Desktop 키를 찾아간다.
Wallpaper 의 값을 원하는 배경화면 사진의 경로로 입력한다.
HKCU/Control Panel/Desktop 의 사용 권한을 변경한다.
=> 소유자를 현재 사용자로
=> 부모로부터 권한 상속은 안되도록
=> Everyone에게 읽기제어 권한을 주고 (고급 설정에서)
=> Everyone에게 읽기 권한을 주고 (사용 권한 최초 편집 창)
=> 다 저장하고 로그오프 후 다시 로그인
(출처: Wildfree 의 뉴스 속으로 블로그 )

헉! 이렇게나 복잡하게?

“windows 7 starter wallpaper changer” 라고 구글링하면 나오는 툴을 사용하셔도 쉽게 됩니다.

아니면 Windows의 제품키 등을 수정하는 방법으로 설치는 Starter를 하되 Windows가 자신이 Professional 버전이라고 착각하게 만드는 방법도 있습니다.

...

...

그냥 Windows 7 Home Premium 설치하세요. 아니면 Windows XP Professional…

Trackback Address :: http://bspfp.pe.kr/trackback/321

회사 동료가 와서 이런 문제를 어떻게 해결해야 하는지 물어보네요.
float f = 19.85f;
double d1 = double(f);
double d2 = 19.85;

이렇게 하면 d1의 값이 19.850000381469727 게 됩니다.
d2의 값이 19.850000000000001 인 것과는 완전 다르죠...
문제는 이렇게 구해진 d1을 수식에서 백분율로 사용하면서 생겼습니다.
원치않는 수치가 나오는 것이죠.

디스어셈블리로 코드를 확인하면 별 다른 것 없이
형을 변환하는 명령을 호출할 뿐입니다.
즉, 이건 컴파일러의 문제가 아니라는 것이죠.

그래서 이런 문제를 해결하면서 이전 코드의 수정을 최소화 한다면...
이런 방법 정도로 생각됩니다.
(BS에게 질문을 던진 동료는 그냥 백분율이기 때문에 100 곱해서 정수로 형변환해서 우회하기로 했지만요...)
#include 

using namespace std;

class F32
{
public:
	F32() : f(0.0f) {}
	F32(float s) : f(s) {}

	F32& operator=(float const & s) { f = s; return *this; }
	double operator*(double const & s) const { return s * double(*this); }
	double operator/(double const & s) const { return s / double(*this); }
	double operator+(double const & s) const { return s + double(*this); }
	double operator-(double const & s) const { return s - double(*this); }
	bool operator==(double const & s) const { return (double(*this) == s); }
	operator float() const { return f; }

	operator double() const
	{
		long long n = long long(f);
		return n + long long((f - n) * 1000000) / 1000000.0;
	}

private:
	float f;
};

int main(void)
{
	float f = 19.85f;
	F32 tf = 19.85f;
	long long d1 = long long(double(tf) * 3370000000000LL);
	long long d2 = long long(tf * 1.0 * 3370000000000LL);
	long long d3 = long long(double(f) * 3370000000000LL);
	long long d4 = long long(f * 1.0 * 3370000000000LL);
	cout << d1 << endl;
	cout << d2 << endl;
	cout << d3 << endl;
	cout << d4 << endl;
	cout << (tf == 19.85) << endl;

	/*
		output:
			66894500000000
			66894500000000
			66894501285552
			66894501285552
			1
	*/
	return 0;
}


결과는 잘 나오는데 어셈블리 코드를 보면 상당히 늘어나는 것을 알 수 있습니다.

return (double)f;
mov         rax,qword ptr [this]
movd        xmm0,dword ptr [rax]
cvtps2pd    xmm0,xmm0


long long n = long long(f);
return n + long long((f - n) * 1000000) / 1000000.0;
mov         rax,qword ptr [this]
cvttss2si   rax,dword ptr [rax]
mov         qword ptr [n],rax
pxor        xmm0,xmm0
cvtsi2sd    xmm0,qword ptr [n]
pxor        xmm1,xmm1
cvtsi2ss    xmm1,qword ptr [n]
mov         rax,qword ptr [this]
movss       xmm2,dword ptr [rax]
subss       xmm2,xmm1
movaps      xmm1,xmm2
mulss       xmm1,dword ptr [__real@49742400 (13F0E796Ch)]
cvttss2si   rax,xmm1
pxor        xmm1,xmm1
cvtsi2sd    xmm1,rax
divsd       xmm1,mmword ptr [__real@412e848000000000 (13F0E7940h)]
addsd       xmm0,xmm1


처음부터 double을 쓰면 문제가 안되겠지만...
기존 시스템이 float를 쓰고 있고 여기에 추가되는 일부 코드가 long long과 double을 사용하는 경우에는 발생할 수 있는 문제입니다.

Trackback Address :: http://bspfp.pe.kr/trackback/320

뭐 이런 저런 거 하다가 필요해서 찾은 방법입니다.

1. COPY 명령 사용하기
copy somefile.ext + nul somefile.ext /by
or
copy /b somefile.ext +,,
이렇게 하면 파일이 복사되었다고 나오면서 날짜만 갱신 됩니다.

2. 툴 사용하기
Windows 환경에서 Unix 비슷한 환경을 제공해 주는 몇가지가 있습니다.
CygWin , MinGW 와 같은 *nix환경을 에뮬레이션 해주는 도구들도 있구요.
UnxUtilsGnuWin32 와 같은 명령들만 Win32 환경에서 쓸 수 있도록 포팅한 도구들도 있습니다.
에뮬레이트 방식은 많은 기능을 가지고 있는 만큼 무겁고 사실 그 많은 기능 다 쓸 일도 없구요...
몇가지 명령만 사용한다면 UnxUtils가 편할 거 같습니다.

Trackback Address :: http://bspfp.pe.kr/trackback/319

요새 쇼핑몰이 바로가기 통해서 방문하면 할인을 해주거나 포인트를 더 주는 등 다양한 혜택을 제공하는데요.
웹브라우저에서 로컬 디스크에 파일을 생성하는 것이 힘들기 때문에 ActiveX를 설치하라고 합니다.

왜 액티브엑스를 설치해야 하는 거얏!!!

결국 설치하면 특정 URL로 가는 바로가기 생성됩니다.
그냥 그 URL을 직접 들어가도 결과는 마찬가지죠.

11번가
옥션

Trackback Address :: http://bspfp.pe.kr/trackback/311

if (!expr)

이렇게 하면 표현식 expr이 참이 아닐 때...라고 배웠습니다.

그럼

if (!!expr)

이건 어떤 의미일까요?
단순히 표현식 expr이 참일 때... 일까요?
물론 참일 때이죠...

그럼

if (expr)

if (!!expr)

이것은 같은 결과일까요?
같은 결과가 아니랍니다. 최소한 Visual C++에서는 말이죠...
(다른 컴파일러도 마찬가지 일 것 같습니다.)

Visual Studio 2010의 crtdbg.h 헤더 파일에 보면 아래와 같이 되어 있습니다.
여기에 설명이 나와 있네요.

/* Asserts */
/* We use !! below to ensure that any overloaded operators used to evaluate expr do not end up at operator || */ #define _ASSERT_EXPR(expr, msg) \ (void) ((!!(expr)) || \ (1 != _CrtDbgReportW(_CRT_ASSERT, _CRT_WIDE(__FILE__), LINE, NULL, msg)) || \ (_CrtDbgBreak(), 0))

이런 것은 한번도 고려하지 못했는데... 물론 이런 게 필요한 경우도 없었구요.
시스템 라이브러리를 만드는 사람들은 저런 것도 고민해야 되니 참 머리 아프겠어요.

Trackback Address :: http://bspfp.pe.kr/trackback/318

developer’s VM

이곳에 가면...

Virtual Box
VMWare Player
VMWare ESXi

용으로 제작된 가상 머신 이미지를 무료 또는 저렴한 유료(?)로 받으실 수 있습니다.

Trackback Address :: http://bspfp.pe.kr/trackback/317

노트북 쓰니까 이런 것도 알게 되네요.

WinKey + P를 누르면

  • 프로젝터 끄기
  • 프로젝터 복제 (노트북과 프로젝터가 같은 화면으로 나오게 하는 것)
  • 프로젝터 확장 (듀얼 모니터처럼 쓰는 거)
  • 프로젝터에만 (노트북 화면은 끄고 프로젝터로만 쓰는 것)

이렇게 메뉴가 나오고 화살표 키와 엔터로 선택하거나 ESC로 취소할 수 있습니다.

그런데 회사 데스크탑 환경에서도 WinKey + P 하니까 나오네요...
한번도 해 본 적이 없어서 이런 키 조합이 있다는 걸 몰랐네요. ㅋ

Windows XP 때 WinKey + 모든 알파벳 할 때에는 이런 거 없었던 거 같은데...
언제 추가 됐징??

Trackback Address :: http://bspfp.pe.kr/trackback/316

2012/01/05 03:58

VMWare Player by BSPFP

BS는 PC를 사용할 때에 매번 가상 머신을 설치합니다.

처음에 쓰던 것은 Virtual Box
Sun에서 만들 던 것을 Sun을 인수한 Oracle이 이어서 제공하고 있습니다.
그래서 이번에도 노트북에 설치했습니다.
ㅡ.ㅡ
크리티컬 버그가 있네요. 노트북에 기존 20인치 LCD 모니터를 HDMI-DVI 젠더로 연결했는데...
모니터로 인식하는 것이 아니라 포트 자체가 프로젝터로 인식하네요.
그래서인지 Virtual Box가 20인치 화면으로 넘어오면 마우스 입력이 안됩니다.

그래서 얼른 지우고 고민을 했죠...
Virtual PC냐 VMWare냐...
이전까지 VMWare는 VMWare Server 공짜 버전만 썼는데 어느 순간부터 클라이언트가 제공되지 않고,
간이 웹서버에서 ActiveX 컨트롤로 동작해서 그 뒤로 안쓰고 있었습니다.

그런데 VMWare Player가 보이는군요...
얼른 설치했습니다.

기능은 꽤 괜찮습니다. 가상화도 지원하고 3D 가속도 되고, Virtual PC는 지원하지 않는 OS도 지원되구요...
하지만 무료 버전답게 VMWare Workstation에서는 제공되는 많은 기능이 없습니다.

1. 여러개의 VM을 동시에 실행하지 못한다.
2. HDD 스냅샷을 제공하지 않는다.
3. 어딜 찾아도 핫키 설정을 변경하는 것이 보이지 않는다. (기본 Ctrl + Alt)

Guest OS를 Windows 만 생각한다면 VMWare Player 보다는 Virtual PC가 나을지도 모르겠네요.
하지만 BS는 간만에 Linux 개발 좀 공부하려 하다보니 Virtual PC로는 부족할 거 같아 VMWare 설치합니다.

역시 MS보다 UI가 아주 깔끔해요. ㅎㅎ

Trackback Address :: http://bspfp.pe.kr/trackback/315

이전 Windows 에서는 작업 표시줄에서 응용 프로그램 작업을 우클릭하면 시스템 메뉴가 나왔습니다.
여기서 이동을 누른 뒤 키보드의 방향키를 잠시 눌렸다 떼고 마우스를 움직이면 마우스 위치에 창이 옮겨 왔죠.

그런 거 있자나요. 가끔 프로그램 창이 화면 밖으로 나가서 안 보일 때...

그런데 Windows 7에서 우클릭을 하면 작업 표시줄에 고정할꺼냐 뭐 이런 거 나옵니다.
대부분의 시스템 메뉴가 활성화 되어 있는 프로그램들은 Alt + Space 로 시스템 메뉴가 호출됩니다.
물론 이 방법은 창이 화면 밖에 있으면 메뉴가 보이지 않죠.
여기서 R 키를 누르면 최대 화면으로 되어 있는 창이 일반 크기로 변경됩니다.
N을 누르면 최소화 되고 X를 누르면 최대화 되지요.
M을 누르면 이동이 됩니다. Alt + Space로 대부분의 프로그램은 화면 밖에서 구출할 수 있습니다.

그런데 안되는 프로그램이 있네요. VMWare Player 입니다.
분명히 시스템 메뉴가 있는데 Alt + Space로 열리지 않습니다.

그럼 작업 표시줄에 마우스를 가져 갑니다. 미리 보기 화면 같은 것이 뜨죠?
그 미리 보기 화면을 우클릭하면 시스템 메뉴가 나옵니다.

이거 다들 아시는거죠?

BS는 지금 껏 모든 프로그램의 시스템 메뉴 열기는 Alt + Space로만 하다가 갑자기 안되니까 당황스럽더라구요.

Trackback Address :: http://bspfp.pe.kr/trackback/314

PREV 1 2 3 4 5 ... 30 NEXT