32Bit PHP 에서 42억 이상의 수 계산 및 합산 (with MySQL, without bc, gmp)

오랜만에 PHP 팁을 쓰네요 ~ 사실 PHP팁이라기 보다는 MySQL 질의 사용 방법에 대한 것을 적어 봅니다. 32bit 로 컴파일된 PHP의 경우 최대 정수 값이 int(2147483647) 입니다. 64bit 환경에서 컴파일된 PHP는 int(9223372036854775807) 의 값을 다룰 수 있습니다. 하지만 32bit환경에서 최대 정수값 이상의 계산을 하려 할때는 bc, gmp등의 수치 계산 확장 모듈이 필요 합니다.

사용하고 있는 모든 환경에서 수치 계산 확장 모듈이 모두 사용가능 한것은 아니기에 MySQL 의 힘을 빌려 계산을 할 수 있습니다. MySQL 내부적 수치 연산은 BIGINT 는 unsigned 일떄 18446744073709551615 까지 가능합니다. 엄청 큰 수를 다룰 수 있어 종종 사용을 합니다.

합 , 누적 , 평균등의 계산을 MySQL 내부 변수와 함께 질의로 표현을 할 수 있습니다.

SET @total = 0; -- 전체 합을 구할 변수 

SELECT 
	tRst.trade_date, -- 거래일
	tRst.s_amount,	-- 합계
	@total := @total + tRst.s_amount AS acc_amount -- 누적합
FROM
(
	SELECT 
		trade_date, -- 거래일
		sum(amount) as s_amount -- 거래 금액
	FROM
		trade
	GROUP BY 
		trade_date
) AS tRst
GROUP BY tRst.trade_date
UNION
SELECT @total; -- 총계

위 간단한 질의로 각 거래일에 대한 합산과 함께 , 누적합, 총계 등을 한번에 구할 수 있습니다. UNION 을 사용하여 총 누적된 합산 금액을 모두 구할 수 있습니다. 물론 이와 함께 별도의 수식을 이용하여 좀더 다양하게 응용이 가능 하겠죠 ~ ^^

이상으로 bc, gmp를 사용할 수 없는 32bit 컴파일된 PHP환경에서 MySQL의 도움으로 큰 수에 대한 합산 및 계산을 할 수 있습니다.

Apache 2.4.1 릴리즈

2012/02/22 08:51

Apache 2.4.1 릴리즈

드디어 Apache httpd 2.4.1 이 릴리즈 되었네요 ~ 정말 반가운 일이고 많은 변화가 있습니다. 가장 큰 변화중에 하나가 Apache 실행시에 MPM 타입을 선택을 할수 있는 형태로 변한것입니다. 그리고 그중에 가장큰 Event MPM이 추가 된것이죠 그동안 Apache httpd 에서는 prefork, thread 형태의 MPM을 지원했었고 2.2 대에서 실험적으로 Event MPM을 지원했는데 이번에는 정식으로 Event MPM을 지원합니다. 물론 컴파일을 다시 하지 않아도 모듈형태로 실행시 원하는 형태의 MPM을 선택하여 실행시킬수 있는 형태로 바뀌었습니다.

소스의 변화점은 apr, apr-util 이 소스에 포함되어 있지 않은 형태로 배포가 됩니다. 컴파일할때는 좀더 귀찮겠지만 , 자주 바뀌지 않는 apr, apr-util 을 매번 한번에 컴파일 하지 않아도 되는 점이 있습니다. (물론 그전에도 따로 사용해도 괜찮았었죠, 소스에서 포함되지 않았다 라는 것이죠)

기능상의 변화는 비동기 통신에 더좋은 반응을 할수 있는 형태로 바뀌었다는 것인데 이것은 Event MPM을 지원한다는 말 같습니다.

그외 사용상 더 새로운점이 있으면 포스팅을 수정,추가 해보도록 하죠~ ^^

컴파일 방법

선행작업
Apache Portable Runtime Project (http://apr.apache.org) 에 방문하여 apr, apr-util 을 다운로드 받아 설치합니다.
apr, apr-util을 apache httpd 2.4.1 의 srclib 디렉터리내에 apr, apr-util로 압축을 해제 하신다음에 사용하셔도 괜찮습니다.(이전 버전들 처럼 사용)
그외 따로 컴파일 하시려면 apr 과 apr-util을 따로 설치해주시고 Apache httpd 2.4.1 컴파일 설정시에 --with-apr=[apr:prefix] --with-apr-util=[apr-util:prefix] 를 옵션으로 넣어 컴파일 하셔야 합니다.

컴파일
이전버전과 동일하게 사용하셔도 됩니다. 다만 여러가지 MPM을 테스트 하시려면 --enable-mpms-shared=all 옵션으로 모든 MPM을 활성화하여 동적 모듈로 만들어 놓을 수 있습니다. 설정만 바꾸면 괜찮겠죠

컴파일 환경 설정 (configure)
1. apr, apr-util을 Apache httpd 2.4.1 의 srclib 에 포함 시켰을때 --with-included-apr 옵션을 추가 시켜 같이 컴파일을 할 수 있도록 설정해주시면 됩니다.

2. apr, apr-util을 별도로 설치하여 사용중이실때 --with-apr, --with-apr-util 옵션 으로 경로를 설정해주시면 됩니다.

그외 사항은 원하시는 옵션으로 컴파일 하시면 동일하게 동작합니다. ^^ 너무 쉽지 않나요? 일단 오늘 사용해봤기 때문에 좀더 상황을 봐서 포스팅을 해봐야 겠네요 ^^

authz_core:error AH01630: client denied by server configuration
mod_authz_core 에서 제한을 한 경우 위와 같은 메시지가 error log에 기록됩니다. Directory 부분에 해당 Directory 접근 제한을 해제 하셔야 합니다.

Require all granted 모든 접근에 대해 제한을 두지 않습니다.
Require all denied 모든 접근에 대해 제한합니다.
Require env env-var 해당 환경 변수만 허용합니다.
Require method http-method 해당하는 HTTP 메소드(GET/POST등)만 허용합니다.
Require expr expression 표현식이 참일때만 허용합니다.
Require user userid 사용자 아이디에 해당할때만 허용합니다
Require group group-name 해당하는 그룹만 허용합니다.
Require valid-user 허가된 사용자만 허용합니다.

(auth 모듈을 사용하지 않는 다면 해당하지 않습니다.)

Node.js

2012/02/13 18:20

Node.js

사용자 삽입 이미지

Node.js 는 Javascript 문법으로 서버 사이드 스크립트를 손쉽게 제작 할 수 있는 도구(?) 입니다. 서버에서 간단한 소켓 서버를 구성하거나, 파일 감시, 또는 특정 이벤트에 대한 작업을 처리 할때 C, Perl, Java등의 언어로 복잡하게 작업 해야 할것을 아주 간단하고, 쉽게 작업할 수 있습니다.

웹 개발자에게 아주 친숙한 Javascript 문법으로 되어 있으며 Node.js 는 Google Chrome 에서 사용하는 V8 Javascript Engine을 사용하여 아주 뛰어난 성능을 보입니다. (최종 결과물 실행결과가 , 매우 최적화 되어서 빠르다거나, 메모리 사용량이 매우 작다는 뜻은 아닙니다. ^^)

해당 기능만 수행하는 전용 프로그램과는 틀리게 좀 무겁기는 하지만 간단하게 작성하며 유지보수가 쉬운 서버사이드 스크립트 언어로서는 최적의 방법으로 작업을 마무리 할수 있게 도와줍니다.

아래 스크립트는 /tmp/testfile 을 감지하여 파일에 대한 이벤트를 검출하는 것입니다. 변경이 이루어 졌는가 또는 , 이름이 변경되는가를 감지 할 수 있는 스크립트 입니다.

// 파일 경로 
var filepath = '/tmp/testfile';

// Filesystem 모듈 로드 
var fs = require('fs');

// fs watch 메소드를 사용하여 /tmp/testfile 을 감시한다.
fs.watch(filepath, function (event, filename) {
	console.log('event is: ' + event);

	if (filename) {
		console.log('filename provided: ' + filename);
	} else {
		console.log('filename not provided');
	}
});

사용자 삽입 이미지

또한 Node.js를 가지고 간단한 웹 서버를 만들 수 있습니다. Web 사이트와 비동기 통신을 하면서 각 클라이언트들에게 방송메시지를 전달하는 아주 간단한 echo 서버를 만드려 할때는 소켓 프로그래밍이 가능한 타 언어보다 좀더 쉽고 간결하게 만들 수 있습니다.

좀더 공부를 해봐야 하지만, 아직까지 힘들게 작업했던 모든것이 한번에 해결되는듯한 느낌으로 다가오네요 ^^

설치 방법은 간단합니다.

Node.js ( http://www.nodejs.org/ )

http://www.nodejs.org/#download 에 방문을 하셔서 Windows , Macintosh, sourcecode  를 이용하여 손쉽게 설치가 가능합니다.

사용자 삽입 이미지

아직 한글화된 문서는 많이 찾아보기 힘들지만, 대부분 손쉽게 접근할 수 있도록 잘 정돈되어 있습니다.
전체적인 평가로는 너무나 재미있는 녀석이네요 ^^

Halo 액상 해외 구매

2012/02/13 12:35

Halo 액생 해외주문

헤일로 액상중 가장인기 있는 액상 Torque56 , Prime15, Malibu Menthol 을 주문했습니다. 약 10일간 기다림 끝에 회사 사무실로 도착했네요
일반 우편으로 배송 받았어도 매우 안정적으로 받을 수 있게끔 포장상태가 매우 좋습니다.
사용자 삽입 이미지

통합 물류 센터 같은 곳에서 보낸것 같습니다.
사용자 삽입 이미지

작은 박스안에 뽁뽁이로 깔끔하게 포장이 되어 있네요 ^^
사용자 삽입 이미지

가장 중요한 액상입니다. 아주 잘 왔네요 서비스로 신제품인 HX3 샘플도 왔군요 ~ ^^

너무 좋네요 일요일 액상이 떨어져 데캉에 가서 USA-Mix를 하나 구매 했는데 조금만 참으면 좋았을텐데.. 아쉽네요

해외 배송이지만 깔끔한 포장과 함께 나름 안전하게 배송이 마무리 되어서 너무 좋네요 ^^

Mouse Without Borders

2012/02/08 11:27

Mouse Without Borders

Mouse Without Borders 는 KVM 소프트웨어 (하드웨어 KVM 스위치와는 다르게 모니터는 각각의 컴퓨터에 연결된 모니터를 이용합니다.) 입니다. 소프트웨어적으로 여러 컴퓨터를 제어할수 있습니다. Microsoft 에서 정식으로 제공하는 프로그램이 아닌 시험적인 프로그램으로 제품에 대한 지원이 지속적으로 이루어지지 않을 수도 있으며 , 여러가지 오류를 포함 할 수도 있습니다.

이와 비슷한 소프트웨어로는 오픈 소스 프로젝트인 Synergy , Input Director 가 있습니다. Synergy 의 경우에는 여러 OS를 지원하지만 설정 방법이나, 키매핑 등의 문제(한/영전환키)가 있습니다. Mouse Without Borders는 시험적인 소프트위어로서 아직까지 (현재까지)는 아무런 비용없이 사용 할 수 있습니다. Windows를 사용하는 환경이라면 아무런 문제없이 사용가능 합니다.

최대 4대의 장치를 사용할 수 있고, 각 장치에 연결된 여러 입력장지로 다른 장치를 동시에 제어 할 수 있습니다. 또한 서버 클라이언트 구조가 아닌각각의 장치가 서버와 클라이언트를 담당하고 있어 한대의 장치가 연결이 끊겨도 다른 장치는 동시에 사용가능 합니다. 클립보드 공유, 파일 드래그앤 드롭등을 지원하고 여러 편의 성이 지원됩니다. 또한 동일 네트웍 내의 장치를 하나의 키를 통해 연결을 합니다. Windows 로그인 화면에서 입력장치를 사용할 수 있습니다.

http://getsatisfaction.com/mouse_without_borders 에서 다운로드 받을수 있습니다.

Windows 에서 설치시에 관리 권한이 요구 될수 있습니다.

설치 후 키셋팅 및 장치 이름을 설정하면 자동으로 네트웍상의 다른 장치를 찾아 연결을 진행합니다.

TCP 포트는 15100, 15101 포트를 사용하며
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MouseWithoutBorders 에 TcpPort 의 이름으로 REG_DWORD 값으로 TCP포트를 변경 할 수 있습니다.
cmd
reg add HKLM\SOFTWARE\Microsoft\MouseWithoutBorders /v TcpPort /t REG_DWORD /d [포트번호]

요구 사항
Microsoft .NET Framework 2.0 SP2

사용자 삽입 이미지

설치 화면 (라이선스 동의)

Accept and Install 을 눌러 다음으로 진행합니다.

사용자 삽입 이미지

간단한 설치과정 (약 5초 이내) 를 진행한 후 설치가 완료 됩니다.
사용자 삽입 이미지

실행 후 최초 설정 화면 입니다. 두대의 컴퓨터에서 진행 준비가 되어 있어야 합니다.
사용자 삽입 이미지

보안키 와 다른 컴퓨터 이름을 적어 넣습니다.
사용자 삽입 이미지

컴퓨터 내부 모든 이더넷 장치의 아이피를 통해 다른컴퓨터를 검색합니다.
사용자 삽입 이미지

연결이 될경우 위와 같이 타 컴퓨터와 연결이 나타납니다. 아이피 및 보안 키를 변경할 수 있습니다.
사용자 삽입 이미지


상세 설정 화면입니다.
Wrap Mouse : 마우스 동작을 모니터 A->B->C->A->B->C 형태로 돌아가면서 사용할 수 있도록 합니다.
Share Clipboard : 클립보드를 공유합니다.
Hide logo on Logon Screen : 로그온 시
Disable CAD (Ctrl + Alt + Del) : 를 눌렀을때는 키를 전달하지 않습니다.
Switch between machine, : 컴퓨터 이동 단축키 입니다. Cltrl+Alt 키 이후 누를 키를 선택합니다.
Show Settings From Ctrl+Alt: 설정화면 표시 단축키 입니다.
Exit the application, Ctrl+Alt: Mouse without borders 의 종료 단축키 입니다.
Lock the controlled machine, Ctrl+Alt : 제어되는 컴퓨터를 잠금 단축키 입니다.
Reconnect to other machines , Ctrl+Alt : 연결된 컴퓨터와 연결을 해제 하고 다시 연결합니다.
Switch to ALL mode : 모든 컴퓨터를 동일하게 제어 합니다. (입력장치 입력이 모든컴퓨터에 동시에 전달됩니다.)

위와 같은 상세 설정을 할 수 있습니다.

또한 Wrap Mouse 설정의 경우 연결된 컴퓨터의 설정이 모두 변경됩니다.

삭제 방법
Mouse without border 는 프로그램 추가 / 삭제 에 표시가 안됩니다. 그러므로 Windows Installer 의 명령어로 직접 삭제를 해야 합니다.
명령어 프롬포트 에서 아래와 같이 입력합니다.
사용자 삽입 이미지

> msiexec /uninstall {D3BC954F-D661-474C-B367-30EB6E56542E}

위와 같이 입력하시면 삭제가 진행됩니다.