삽질하는플머

쓰레드에 이름 달아주기

탐구생활/Delphi

쓰레드 코딩을 하다보면... 디버깅창에 줄줄이 나타난 쓰레드가 어디서 만든 뭐하는 녀석인지 궁금할 때가 있다. 

이 때 각 쓰레드마다 이름을 붙여둔다면 심적으로나마 편안함을 얻을 수 있지 않을까... 


물론 디버깅에서만 유효하지만, 좋은 내용이 있어 공유한다. 


http://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx

http://blogs.msdn.com/b/stevejs/archive/2005/12/19/505815.aspx


const

  MS_VC_EXCEPTION = $406D1388;

  

type

  TThreadNameInfo = record

    dwType: DWORD;      // Must be 0x1000.

    szName: PAnsiChar;  // Pointer to name (in user addr space).

    dwThreadID: DWORD;  // Thread ID (-1=caller thread).

    dwFlags: DWORD;     // Reserved for future use, must be zero.

  end;


procedure SetThreadName(aThreadID: DWORD; const aThreadName: PAnsiChar);

var

  tmi: TThreadNameInfo;

begin

  if (DebugHook = 0) then Exit; 


  tmi.dwType := $1000;

  tmi.szName := aThreadName;

  tmi.dwThreadID := aThreadID;

  tmi.dwFlags := 0;

  try

    RaiseException(MS_VC_EXCEPTION, 0, sizeof(tmi) div sizeof(LongWord), PDWORD(@tmi));

  except

  end;

end;



사용법은 다음과 같이. 


procedure TForm1.FormCreate(Sender: TObject);
begin
  SetThreadName(GetCurrentThreadID, 'Main thread'); 
end;


IDE의 디버깅창을 들여다보면, 예쁘게 이름이 붙은 쓰레드를 확인할 수 있다 . 



안드로이드 + 프리파스칼 테스트

여가생활/안드로이드

프리파스칼은 라자루스라는 걸출한 IDE를 가지고 있지만, 뭔가 깨작일때는 그래도 터보델파이가 제일 편하다. 


델파이로 간단한 OpenGL ES 런처를 만들고, 안드로이드에서 사용할 JNI 라이브러리를 윈도용 DLL로 빌드해 이 런처로 불러 확인하는 방법으로 개발과 디버깅 모두에 터보델파이를 사용해 보았다. iOS와 달리 안드로이드는 APK에 포함시킨 "데이터파일"이 디바이스에 설치되지 않고 묶인 상태 그대로 남아있기 때문에 이 부분을 윈도에서 그럴듯하게 흉내내주려면 고민이 조금 필요하네... 


암튼 간만에 도서관에 짱박혀 삽질한 결과물... 




DLL 소스를 NDK + FPC 로 빌드한 뒤 폰에 올려본 모습. 






빌드한 APK는 여기.


MindBall.apk



화면을 클릭하면 아래 흐르는 판넬로 공(?)이 떨어진다.

그냥 떨어지면 재미 없으니... 화면 왼쪽을 클릭하면 빨간색 판넬로, 오른쪽은 파란색 판넬로, 가운데는 녹색 판넬로... 


점심내기할 때 써먹으면 좋다. 
수년전 마누라와 만원내기했던 추억이 새록새록...

델파이로 깨작여보는 OpenGL ES 어플

여가생활/안드로이드

후배랑 술먹다가 한때 잘나가던 안드로이드폰 "HTC HTC_X515E" 하나를 갈취. 

취미삼아 FPC로 OpenGL을 돌려보며 즐거워하는 중이다. 


하지만, 코드 조금 고칠때마다 기계나 에뮬로 보내 확인하는건 별로 맘에 안듬.
게다가 맥에 만들어둔 FPC환경을 써먹느라 안드 SDK와 NDK도 맥에 깔았더니 더더욱 귀찮...

원래 걸으면 눕고싶고 누우면 자버리는게 프로그래머란 족속들 아닌가. 

파스칼 코드는 윈도에서 델파이로 깨작거리는게 아무래도 손에 익고 편하다. 


imtec, malideveloper 등에서 제공하는 OpenGL ES 에뮬레이터를 이용하면 

윈도환경에서도 OpenGL ES를 사용할 수 있다. 

아래 사이트로 가서 윈도용 OpenGL ES 2.0 / 1.1 에뮬레이터를 다운받자. 


http://malideveloper.arm.com/develop-for-mali/tools/opengl-es-2-0-emulator/


"C:\Program Files (x86)\ARM\Mali Developer Tools\OpenGL ES Emulator v1.3.0\bin" 폴더로 가서 DLL 파일들을 복사해둔다. 

델파이/FPC 용으로 번역해본 헤더와 초간단 예제는 여기에. 
(OpenGL ES 2.0 프로그래밍 가이드 챕터 1,2의 예제를 포팅)

GLES_WORK.7z



압축을 풀고 위에서 복사한 DLL 파일들을 BIN 폴더에 붙여준다. 

(OpenGL ES 에뮬레이터가 설치되었다면 DLL에 경로가 잡혀있으므로 굳이 복사할 필요는 없지만...)

인코딩에 UTF-8을 사용하므로 델파이 7 이하에서 쓰려면 ansi모드로 변환이 필요하다. 귀찮더라도 알아서 할 것. 

(내가 불친절한게 아님... 네이버의 nForge가 소스코드의 인코딩을 UTF-8만 지원... )


gl1ext, gl2ext 는 배포하지 않는다. 예전에 2.0 헤더를 바꾸면서 애플의 확장도 끼워넣었는데... 
애플과 관련된건 아무래도 뭔가 위반하는것 같은 찝찝함이 있어서... 라이센스 확인될 때 까지 당분간 보류... 

우분투에 IRC서버 설치후 닉네임 길이와 동접자 조절.

이런저런잡다구리/LinuxHeaven

심플즈 팁란에 올렸던 글... 갑자기 쓸 일이 생겨 옮겨둠. 

http://simples.kr/28949



얼마전 게임채팅에 써먹어볼까 싶어 우분투에 IRC 서버를 까느라 삽질한 내용이 있어서 함 올려봅니다. 

일단 ircd는 ircu 를 사용하기로 했습니다. 설치는 간단히 이렇게..


$ sudo apt-get install ircd-ircu



문제는 여기서부터인데, 닉네임의 최대값이 12자로 되어있군요. 저는 30자가 필요. 

설정 문서에 나온대로 /etc/ircd/ircd.conf 내에 features 안에 다음라인 삽입해 봤습니다. 


features {

 .....

 "NICKLEN" = "30";

};



하지만 이 설정은 ircd-ircu 의 소스중 ircd_def.h 에 정의된 값을 넘을 수 없습니다. 

여기에는 15로 정의되어있기 때문에 아무리 30자를 때려줘도 넘어가지 않지요. 


패키지로 설치한 ircd-ircu 는 지워버리고 소스를 받아 수정해봅시다. 


일단 컴파일 환경을 만들어주고


$ sudo apt-get install build-essential flex autoconf  bison



소스를 내려받아 압축을 풀어줍니다. 


$ wget http://prdownloads.sourceforge.net/undernet-ircu/ircu2.10.12.12.tar.gz

$ tar xzf ircu2.10.12.12.tar.gz

$ cd ircu2.10.12.12



여기서 ./include 안의 ircd_defs.h 에서 NICK_LEN 값을 30으로 수정해줍니다. (41번째 줄)


#define NICKLEN         30



이제 다음과같이 해 주면 닉네임을 30자로 쓸 수 있는 데몬을 얻을 수 있습니다. 


$ ./configure

$ make all



../bin 에 컴파일된 ircd 실행파일이 들어갑니다. 이제 이놈의 버전을 출력해봅시다. 


$ ./ircd -v 

ircd u2.10.12.12

Event engines: epoll_*() poll()

Compiled for a maximum of 1020 connections.



최대접속자가 1020으로 되어있습니다. 아쉬움이 있지요. 

이 내용은 ./configure 실행시 생성되는 config.h 에 기록되며, 

이 때 사용되는 configure.in 을 살펴보면 다음과 같은 값을 받아오도록 되어있습니다. 


ulimit -Hn



한마디로 시스템에서 열 수 있는 파일갯수를 의미하지요. 

sudo ulimit -n 4096 해주면 이 값이 바뀝니다만 재부팅하면 도로묵이죠. 

예전에는 이 값을 늘려주려면 커널을 새로 컴파일해야 했나본데... 전 리눅스 뉴비라 그런건 모르고...

/etc/security/limits.conf 에 다음항목 추가한 뒤 재부팅해봅시다.  


*               hard    nofile            4096

*               soft    nofile            4096



이제 ircd-ircu 를 재컴파일하면 최대접속자수가 늘어난 것을 볼 수 있습니다. 


마지막으로 닉네임에서 한글사용문제... 원래 irc 규정이 닉네임에서는 한글을 못써먹게 되어있습니다. 

한글 패치된 데몬들은 규격외의 물건들인 셈이죠. 

table_gen.c 를 들여다봅시다. 

116번 줄에보면 NTL_RICNK 의 속성을 설정하는 부분이 보입니다. 


moveMacro(NTL_DIGIT | NTL_ALPHA, NTL_IRCNK);

markString(NTL_IRCNK, "-_`");



숫자, 알파벳, 그리고 " - _ ` " 를 추가해주고 있지요. 따라서 여기에 " + / " 를 추가하면 UTF-7 사용이 가능해집니다.


markString(NTL_IRCNK, "-_`+/");



사실 이것도 "+/" 때문에 규약을 어기는 건 마찬가지네요. ㅠㅠ;;

UTF-8이면 더 좋겠지만 어차피 게임내에서 자체 클라를 제공하기 때문에 일단 이정도로 만족하고 있습니다. 


애니팡 오토...

여가생활/Others

애니팡은 이미 개발자들의 놀이터가 되어버린... 점수가 우주를 돌파할 기세다!!


느려터진 모비즌 대신 BlueStacks를 대상으로 찍음. 어차피 난 아이폰 사용자. 폰빌리기 귀찮...

2005년도에 델마당에 공개했던 "범용 비주얼드 도우미"의 먼지를 털고 몇군데를 손보아주었다. 

겁없이 "범용"이라는 타이틀을 내걸었는데... 다행히 이름값을 하네... 

30대의 나는 확실히 지금보다 나은 잔머리를 가졌던... 아 돌아가고싶다!!




몇 번 돌려보니 오토류의 점수는 140만점대가 한계로 보인다. 



덤. 

소스가 필요하신 분들은 델마당 자료실에서 제 이름으로 검색을... 

탈퇴하면서 미처 못지워 지금도 남아있을 것임.