Tech/Mac

[Mac] HomeBrew 설치

2018. 3. 17. 22:23

HomeBrew?


HomeBrew란 macOS용 패키지 관리자입니다.


홈페이지: https://brew.sh/index_ko



1. 설치


설치법은 매우 매우 간단합니다.

터미널에 아래와 같이 타이핑만 해주시면 됩니다. 


/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


2. 사용법


1) install


brew install "package 이름"

  • cask 

cask는 HomeBrew의 확장 기능으로 설치와 동시에 설정을 해주는 편리한 기능입니다.


  • iterm2 설치
iterm2는 간단하게 터미널의 확장판이라고 보시면 됩니다.
아래와 같이 터미널에 입력하시면 iterm2가 설치됩니다.

 brew cask install iterm2


어셈블리는 하나의 단일한 단위로 존재하는 .NET의 실행 가능한 프로그램 또는 실행 프로그램의 일부이며  실행 및 배포의 단위라고 할 수 있다. C# 응용 프로그램 작성의 결과로 생긴 .exe 파일, 클래스 라이브러리 작성의 결과인 DLL이 각각 하나의 어셈블리 이다.


하나의 단일한 어셈블리 안의 모든 코드는 하나의 단일한 단위로 빌드, 배포되며 버전 번호가 부여되는데 각 어셈블리는 다른 프로그램들이 사용 할 수 있는 pulic class, 속성, 메소드 등을 노출하고, private으로 선언된 것들은 모두 어셈블리 안에 은폐된다.


 

Tech/Win32 API

입력 1. 키보드

2016. 11. 16. 01:03

키보드 입력시에 메시지가 WM_KEYDOWN, WM_CHAR, WM_KEYUP 순으로 발생한다


1. WM_KEYDOWN

키보드 입력시 처음으로 발생하며, 문자 이외의 키(fn, Ins, 방향키등)를 처리할 때 주로 사용한다.  

wParam으로 문자 코드가 아닌 가상 코드(키보드의 종류의 상관없이 키를 입력받기 위해 만들어진 코드 값)가 들어온다. 


2. WM_CHAR

사용자에 의해서 발생하는 메시지가 아닌 TranslateMessage() 함수에 의해서 만들어진 메시지이다.

TranslateMessage() 함수는 전달된 메시지가 WM_KEYDOWN인지와 문자 키인지 검사하여 조건을 충족하면 WM_CHAR 메시지를 만들어서 메시지 큐에 넣어준다.


- lParam : Alt와 같은 특수 키

- wParam : 문자 아스키 코드값


3. WM_KEYUP

키를 땔 때 발생하는 메시지이다.

'Tech > Win32 API' 카테고리의 다른 글

무효 영역(Invalid Region)  (0) 2016.11.15
DC(Device Context)  (0) 2016.11.13

WM_PAINT 메시지는 윈도우가 다시 그려져야 할 때마다 호출되게 됩니다. 즉 무효 영역이 있는 경우 호출되게 됩니다. 

다시 말하면 윈도우 프로시저는 클라이언트 영역의 일부가 무효화될 때만 WM_PAINT 메시지를 받습니다.

무효영역이 생기는 경우는 두 가지 입니다.


1. 윈도우 일부가 지워젔을 때(예를 들면 윈도우에 가려졌던 부분이 드러날 때)


2. InvaildateRect함수가 호출 될 때


BOOL InvalidateRect(HWND hWnd, CONST RECT *lpRect, BOOL bErase);  


첫 번째 인자는 다시 그려져야할 윈도우의 핸들입니다.


두 번째 인자는 무효화의 대상이 되는 직사각형 영역입니다. 만약 두 번째 인자에 NULL을 넣는다면 클라이언트 영역 전체가 무효화되게 됩니다. NULL을 넣으면 전체를 다시 그리므로 확실히 그려지겠지만 느립니다. 따라서 속도를 높이려면 변경된 최소한의 영역만을 계산하여 무효화 하는 것이 좋습니다.


세 번째 인자는 무효화되기 전에 배경을 모두 지운 후 다시 그릴 것인지 아니면 배경을 지우지 않고 그릴 것인지를 정합니다. TRUE이면 배경을 지우고, FALSE이면 배경을 지우지 않습니다.



윈도우즈는 내부적으로 각 윈도우에 대해 '그리기 정보 구조체(paint information structure)'를 유지합니다. 이 구조체 안에 여러 정보 중에는 무효 영역을 감싸는 최소 크기의 직사각형 좌표(invalid rectangle)이 들어 있습니다. 

* 그리기 정보 구조체 == PAINTSTRUCT

* invalid rectangle == rcPaint


이 무효 직사각형이 우리가 그려야 할 영역입니다. 


만약 대기 중인 WM_PAINT 메시지를 우도우 프로시저가 처리하기 전에 또 다른 부분이 무효화된다면, 윈도우즈는 두 개의 무효 영역을 포함하는 새로운 무효 영역을 그리기 정보 구조체에 갱신합니다. 즉, 윈도우즈는 메시지 큐에 두 개 이상의 WM_PAINT 메시지를 넣지 않습니다.


클라이언트 영역의 무효 영역 전체가 유효화된다면, 메시지 큐에 현재 저장되어 있는 WM_PAINT는 제거됩니다.




'Tech > Win32 API' 카테고리의 다른 글

입력 1. 키보드  (0) 2016.11.16
DC(Device Context)  (0) 2016.11.13

Tech/Win32 API

DC(Device Context)

2016. 11. 13. 01:34

DC(Device Context)란?

출력에 필요한 모든 정보를 가지는 데이터 구조체이며, GDI(Graphic Device Interface)모듈에 의해 관리됩니다.

화면으로 출력 하기 위해서는 반드시 DC가 있어야 합니다.


이 DC를 얻는 방법은 두 가지가 있습니다.


우리는 인수로 전달 된 창(Window)의 핸들(HWND)로 부터 GetDC, BeginPaint 함수를 통해 DC를 가져올 수 있습니다.

이 때 중요한 것은 DC를 무사히 다 사용했으면 반드시 ReleaseDC, EndPaint함수를 통해 반환해야 합니다. DC도 메모리를 차지하므로 반드시 할당 후 해제 원칙이 준수되어야 합니다.


두 가지 방법에 대해 하나씩 보겠습니다.


1. GetDC 함수를 통해 얻어오는 방법


WM_PAINT 이외의 메시지에서 클라이언트 영역 일부를 그리고자 할 때 또는 그 밖의 목적으로 디바이스 컨텍스트 정보를 필요로 하는 경우 사용하는 함수입니다.


HDC GetDC(HWND hWnd);

int ReleaseDC(HWND hWnd, HDC hDC);


GetDC가 리턴하는 DC 핸들의 클리핑 직사각형 영역은 전체 클라이언트 영역입니다.

그리고, BeginPaint와 달리 GetDC는 무효 영역을 유효화하지 않습니다. 클라이언트 영역 전체를 유효화해야 한다면 다음과 같은 함수를 호출해야 합니다.

 

ValidateRect (hWnd, NULL);



2. WM_PAINT 메시지 루틴내에서 DC를 얻어오는 방법


WM_PAINT 메시지 루틴에서는 DC를 GetDC로 얻지 않고 BeginPaint함수로 얻고, EndPaint함수로 해제해 주어야 합니다.


HDC BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);

BOOL EndPaint(HWND hWnd, CONTST PAINTSTRUCT *lpPaint);


BeginPaint함수가 호출되면 클라이언트 영역은 모두 유효화 되게 됩니다.

BeginPaint함수는 윈도우 핸들 외에도 페인트 정보 구조체를 인수로 필요로 합니다. 이 구조체는 그림 그리기에 필요한 정보를 담습니다.


typedef struct tagPAINTSTRUCT {


HDC    hdc;

BOOL   fErase;

RECT    rcPaint;

BOOL   fRestore;

BOOL   fIncUpdate;

BYTE    rgbReserved[16];

} PAINTSTRUCT;


앞의 세 멤버는 사용자가 사용하는 멤버이며 나머지 세 멤버는 윈도우즈가 내부적으로 사용하므로 사용자가 건드려서는 안됩니다.



'Tech > Win32 API' 카테고리의 다른 글

입력 1. 키보드  (0) 2016.11.16
무효 영역(Invalid Region)  (0) 2016.11.15

1. 문자셋의 종류와 특성

아스키코드(ASCII CODE) : 1바이트(256개), 알파벳과 몇몇 확장 문자를 포함.

유니코드(UNICODE) : 2바이트(65,536개), 영어가 아닌 다른언어를 표현하기 위해 등장한 코드체계.


1) SBCS(Single Byte Character Set)

1Byte만을 사용하는 방식

- 아스키 코드

 

2) MBCS(Multi Byte Character Set)

1Byte, 2Byte 를 혼용해서 사용하는 방식

-  유니코드는 MBCS에 속하지 않는다. MBCS는 SBCS를 포함한다.

- MBCS는 대부분의 문자들을 2바이트로 처리하고, 경우에 따라 1바이트로 처리한다.

- 효율적이지만 프로그램 구현시 주의가 필요하다.

 

3) WBCS(Wide Byte Character Set)

2Byte만을 사용하는 방식

- 유니코드 




시스템 프로그래밍(System Programming)

: 컴퓨터 시스템(하드웨어, 크게 보면 운영체제까지)을 컨트롤하는 프로그램을 만드는 것.

: Windows 시스템 프로그래밍이란 Windows 운영체제 기반의 컴퓨터에게 일을 시키기 위한 프로그램을 구현하는 것.



컴퓨터 시스템의 주요 구성요소



컴퓨터 하드웨어의 구성

  • CPU(Central Processing Unit): 중앙처리장치

ALU(Arithmetic Logic Unit)

: 산술 논리 연산장치, CPU 내부에 실제 연산을 담당하는 블록.

: ALU가 처리하는 연산은 크게 산술 연산과 논리 연산으로 나뉜다. (아주 복잡한 프로그램도 CPU입장에서는 대부분 이 두가지 형태의 연산으로 이뤄짐.)


컨트롤 유닛

: 실행파일에는 CPU에게 일을 시키기 위한 명령어(Binary형태)들이 저장되어 있다. 연산만 할 수 있는 ALU를 위해 명령어를 해석해주는 것이 컨트롤 유닛.


레지스터

: CPU내부에 임시적으로 데이터를 저장하기 위한 조그마한 메모리 공간 


버스 인터페이스 

: CPU, RAM,  하드디스크, 그래픽 카드등의 컴퓨터 구성 요소들이 서로 데이터를 주고 받기위한 매개체가 입출력 버스이다.

: 버스 인터페이스는 이입출력 버스를 이용하기 위한 프로토콜 혹은 통신방식을 알고 있다.

: CPU는 버스 인터페이스를 통해 CPU 내부 데이터를 I/O 버스에 송.수신한다.


클럭 신호

: CPU는 매 클럭이 발생할 때마다 그 클럭에 맞춰서 일을 한다. 

: CPU의 클럭 속도가 1.6Mhz이면 1초당 1,600,000번의 일을 하게된다.

: 클럭 신호에 맞춰서 일을 하는 이유는 컴퓨터 시스템이 동기화를 필요로 하기 때문.

 

  • 메인 메모리: RAM, 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역, 프로그램 실행을 위해 존재하는 메모리
  • 입.출력 버스: 컴퓨터를 구성하는 구성요소 사이에서 데이터를 주고 받기 위해 사용되는 경로.


프로그램의 실행과정


폰 노이만 : 프로그램이 컴퓨터 내부에 저장되는 구조를 생각해낸 사람, Stored Program Concept


프로그램의 실행과정

: 전처리기, 컴파일러, 어셈블러, 링커를 거쳐서 만들어진 실행파일 안에는 컴퓨터에게 일을 시키기 위한 명령어(Binary)가 들어 있다.
: 명령어들이 메모리에 올라가고 난 후 CPU에 의해 순차적으로 실행된다.
: 명령어들은 CPU내부로 하나씩 이동한 다음 실행하게 된다. 이 때 3단계를 거친다.
1. Fetch: 메모리상에 존재하는 명령어를 가져오는 작업
2. Decode: 가져다 놓은 명령어를 CPU가 해석하는 단계
3. Execution: 해석된 명령어의 명령대로 CPU가 실행하는 단계 


위 이미지와 같은 프로그램의 실행과정을 좀 더 컴퓨터 구조에 맞게 그려보면 아래와 같다. 
메인 메모리에 저장된 명령어는 I/O버스를 통해 IR(Instruction Register)에 저장되고, 이 저장된 명령어는 컨트롤 유닛에 의해 해석되어서 ALU에 의해 실행된다.



버스 시스템


Data Bus: 데이터를 이동하기 위해 필요한 버스, 이때 데이터는 명령어, 피연산자 등.

Address Bus: 주소값을 이동하기 위해 필요한 버스.

Control Bus: CPU가 원하는 바를 메모리에 전달할 때 사용하는 버스.




'Tech > Windows' 카테고리의 다른 글

[Windows System Programming] 아스키코드 vs 유니코드  (0) 2016.09.23