펑션 내부의 펑션 구현

Implement function inside funcion
2010/01/05 마고자

가끔 프로그래밍을 하다보면 펑션안에 가볍게 펑션을 정의하고 싶어지는 경우가 있다.
폴리건에 버택스를 추가한다던지 같은 작업을 긴 라인동안 반복하게되면 나도 모르게 좀 깔끔하게 만들고 싶어진다.

// Sample , Ogre에서 ManualObject 설정하는 경우..
position( 0 , 0 );
textureCoord( 0 , 1 );
colour( 1 , 1 , 1 , 1 );
position( 1 , 0 );
textureCoord( 0 , 1 );
colour( 1 , 1 , 1 , 1 );
position( 0 , 1 );
textureCoord( 0 , 1 );
colour( 1 , 1 , 1 , 1 );
....

이럴때 같은 인자들을 묶고 다른것들만 넣어서

AddVertex( 0 , 0 , 0 , 1 );
AddVertex( 1 , 0 , 0 , 1 );
....
이런식으로 정리하고싶어진다. 
정리하는 방법이 여러가지가 있는데 , 아에 AddVertex함수를  원래 클래스에 추가하는 방법이 있지만 , 엔진단에서 건드리는 경우가 될수도 있고 , 보통 로컬로 간단히 작업하는 부분이기때문에 요 파일 내에서 해결하는게 좋다.

일반적인 해결 방안은 전처리기( define )을 이용하는 방법이다.

#define AddVertex( x , y , u , v ) { \
    position( x , y );\
    textureCoord( u , v );\
    colour( 1 , 1 , 1 , 1 );\
}

이걸로 정리가 가능하다.

만세

라고 생각하면 오산..

Posted by 마고자
개인작업할때 쓰던 xml라이브러리를 , 좀 쓰기 편하게 정리하던 차였다.

근데 지금까지 한번도 세이브를 안해봐서 -_-;

세이브를 했더니..

니미 - -;

코드는 나름 unicode로 되어있길래 기대했었는데.

입출력은 유니코드를 전혀 고려해지 않고 짜져 있다

이러니 꼬이지 -_-;;

어째 읽을때 한글 제대로 안읽히더라 -_-;

인터넷으로 대충 긁어서 썼더니 이런변이 ;;;

으.. multi byte codeset 으로 프로젝트를 만들기도 애매하고 -_-
Posted by 마고자

HanMTGO v1.03



최근 클라이언트 네임이 바뀌어서 인식을 못하던 문제를 해결했습니다.

Since 2009-09-20

이건 뭐하는 프로그램인지?


Magic the Gathering Online v3 ( 이하 MTGO )용 유틸리티로 , 원래 클라이언트에서 한글을 지원하지 않습니다. 그래서 한국 사람은들은 편법으로 노트패드에 한글로 적고 alt+tab으로 옮겨서 카피해 넣기를 반복하면서 한글로 채팅을하고 있는 현실이죠. 그걸 조금이라도 개선하기 위해서 만든 프로그램입니다.


즉. MTGO에서 한글입력을 가능하게 해주는 서드파티입니다.


어떻게 사용하나요?


우선 MTGO클라이언트를 실행하고 같이 HanMTGO를 실행해주시면 , 알아서 달라붙은다음에 창이 사라집니다. 그뒤로 어떤 차이도 없습니다. 단지 한글입력이 됩니다. 그냥 한영 전환해서 한글 입력을 하시면 됩니다. 참고로 게임중에 나오는 창에선 한글이 깨집니다. 주의하세요. 아 그리고 중요한거 , 구현 구조상 현재 2벌식 한글만 지원합니다. 3벌식 쓰시는분껜 죄송합니다.;

그리고 예민하신 분들을 위해. 이 프로그램은 레지스트리도 건드리지 않고 , 다른 파일을 생성하지도 외부와 연결을 시도하지도 않습니다. 안심하고 쓰세요

이건 공짠가요?


네 개발자 취미로 모두가 조금이라도 편해졌으면 하기에 만든것이므로 무료입니다. 하지만 재배포는 허락하지 않습니다. 반듯이 이 홈페이지 URL로 등록해주시기 바랍니다. 간혹 업데이트가 있을수 있으므로 이건 지켜주세요.

그리고 이걸로 정말 편해졌다. 조금더 개선해주길 바란다.. 이런 생각이 드시면 개인적인 기부 환영합니다. ㅠㅠ; 매온 Tix로 받습니다. ( 과연 누가 할것인가 -_-;; ). 아님 안쓰는 카드 저에게 좀 버려주세요. 매온 아이디 'magoja' 입니다.

만든 사람은 뭐하는 아저씨인가요?


그냥 매직을 좋아하지만 , 돈이 없어서 펑펑 지르진 못하고 , 13년째 주위만 뱅뱅 맴도는 방랑자입니다. 본업은 게임 프로그래머 ( 3D )이고 조그마한 벤쳐기업에서 온라인 게임을 제작하며 대박을 꿈꾸고 있습니다.

더하실 말 없나요?


구현 구조상 입력이 안되는 글자라던가 사소한 버그가 있을 수 있습니다. 발견되면 재현방법과 함께 글을 남겨주시기 바랍니다. 그리고 보다 나은 프로그램을 위한 아이디어도 환영합니다. 그리고 즐겁게 즐겨주세요. 그동안 답답했던 매온 채팅환경이 조금이라도 나아졌길 바랍니다.


Update Log

2009-12-05 v1.03 클라이언트 네임체크 "Magic Online v3" -> "Magic Online"으로 변경
                       그리고 소스 공개

2009-10-17 v1.02 한글 입력 전송방식 번경 으로 렉걸릴시에 글자 겹쳐찍히는 현상제거
               홈페이지를 통한 버전 체크 기능 추가
2009-09-25 v1.01 업데이트된 MTGO 클라이언트에서 안되던 증상 제거
하드코딩된 윈도우 찾기 루틴 수정 -_-;. 키보드 큐잉으로 입력 오류 조금 제거
2009-09-21 조합중인 한글 표시. 대소문자 구분. 커서키 입력처리.
2009-09-20 Beta v0.1


제작 노트


Posted by 마고자
다운로드 링크용 요아래

이름 : MtgImage ver 2009/07/13
제작 : 마고자
용도 : Magic the Gathering 카드이미지를 magiccards.info 사이트에서 긁어주는 것
      (주로 Magic Work Station , MWS에서 사용하는 용도 )


사용법 :
프로그램을 실행하고 원하는 익스펜션을 선택하고
Get Images 버튼을 누르면 순서대로 다운 받는다.
양에따라 상당한 시간이 걸릴수 있으니 참고.

파일은 익스편션 네임을 폴더로 해서 카드 이름으로 저장이 된다. 밑의 "Save with CardNumber" 가 선택된경우는 카드 번호로 저장된다. 혹시나 유니코드 문제로 파일이 제대로 저장이 되지 않는 경우가 있을수 있는데. (ex AEther Flash 등등 ) 그런 경우 이용하면 좋다.


제작노트

일전에도 비슷한 용도의 프로그램을 VC로 만든적이 있는데..
전에 작업한건 소스를 엇다가 놔뒀는지 종체 찾을수가 없고 -_- Python 공부하면서 쉬엄쉬엄 작업했다.

스타트는 맹목적인 프로그래밍 공부는 너무나 지루하고 효율이 안난다는것 , 역시나 사용해보지 않으면 랭귀지를 내것으로 만들기 힘들다. 그래서 구상. 대체 뭘 만들면 연습도 되고 좋을까. 파이썬의 특징인 간편한 스트링처리를 활용해서 기본적인 UI를 갖춘 Image Downloader를 만들자 로 시작했다.

기존 VC로 만든것과 다른점은

전엔 익스펜션정보를 외부파일에 놔두고 그걸 이용해서 데이타를 긁었다.
하지만 이번엔 익스편션 정보와 카드 정보들을 모두 해당 사이트에서 긁어서 보여준다.
그래서 익스펜션 추가되더라도 프로그램이 바뀌는 것이 없다 <= 뽀인트

물론 현재 Magiccards.info 사이트의 기본 프레임웍이 바뀌면 안될 수 있다


작업환경은 Python 2.6 + Eclipse with Python plugin. 초반에 이클립스 몰라서 노트패드로 졸 고생 -_- 이런거 있으면 미리미리 알려주길 바람 .. UI는 wxPython 을 이용해서 처리하고  다운받을때는 Dialog 창에서 다운로드 Thread 를 돌린다. 실행화일은 Py2exe 로 빌드했다.

누구 보여주기 부끄런 소스는 여기 있다. 물론 무단 도용은 금지. 사용할땐 허락을 요구함. 보면 알겠지만 , 기술적으론 특별한것없고 , html파일 뒤적여서 원하는 정보만 뽑아내는 string 노가다의 결과물.
[2009/07/22 버젼 소스임]
 파이썬이 참 생산적이고 좋은 언어라는 것을 작업하면서 느꼈다. C++ 같은 클래스 상속개념도 있어서 금박 적응 했다. 새로운 문법 새로운개념들 모두 재미있고 이런것도 C++에 있으면 좋겠다 라고 생각되는것들도 종종있다. 앞으로 간단한 어플리케이션은 대부분 Python으로 만들듯하다. 역시나 생산력엔 장사없다. C++은 코어쪽 루틴 작업할때 중심으로 쓸듯.

파이썬으 Embed에서도 좋은 성능을 낼수 있으면 좋겠지만 , 그렇진 않은듯하다.
실제로 그렇다면 Lua 같은 embed에서 강한 언어가 나오지 않았겠지.

앞으로 업데이트가 있을까?.. 나도 모름
원래 만들던 목적은 , 저렴하게 매직을 즐기기위한 온라인 드래프트 프로그램인데 -_-; 그거에 가장 기초작업으로 진행한것임.. 천천히 공부하면서 만들어봐야지.

Update Log
2009/07/13 초기 버전 배포
2009/07/16 사이트 접속이 안될때 에러 처리 추가
2009/07/16 파일명 끝에 ".full" 넣어주는 옵션 추가 ( MWS 용 )
2009/07/22 Split card의 '/'를 제거함. 그리고 IO에러 발생시 로그를 남김.

PS> Feedback 은 이글의 리플로 부탁드립니다.
PS2> Magiccards.info 사이트에서 M2010 업데이트가 되는대로 다운이 가능할거예용..
PS3> Magiccards.info 싸이트가 접속이 안되면 에러가 납니다. 안되면 직접 사이트 들어가보세요
Posted by 마고자
- C++에서 NULL에 해당하는 키워드는 None 이다.
그리고 실제 널인지 확인하려면 type을 활용한다.

type( nodeChild ) == type( None )

파이썬은 데이타가 모두 동적이기때문에 , 간혹 이게 어떤건지 확인할때 type은 유용하다

- Enum 이 따로 없다. 하지만 Enum을 쓰는 대신에 그냥 스트링을 처리하면 보기에도 편하다. 글자가 틀리면 대략 난감.. .. 어차피 switch - case 문이 없어서 if elif 페어로 계속 넣어야 하니까 대충 적응하자.

- string 모듈의 strip() 펑션은 스트링의 화이트 스페이스를 제거해준다.

>>> from string import *
>>> strip( '   a    ')
'a'
>>> strip( '               \n' )
''

- Tuple에 익숙해지자.
파이썬은 리턴값이라던지 모든 데이타에 Tuple을 적용할수 있다. 함수에서 여러개의 인자를 리턴하면 ( return a , b ) 리턴값은 계네들이 합쳐진 튜플로 넘어온다. ( [ a , b ] ) 그래서 잘 짤라서 쓰는 방법이 있고 임의로 튜플을 만들어서 리턴할 수도 있다.

두개 값을 리턴하는 곳에서 두개의 인수를 지정해야한다.
a , b = funciton()

두개를 지정하지 않고 하나만 받으면 그 변수는 두개의 데이타를 가진 튜플이 된다.

Posted by 마고자
class Person:
pass


기본적으로 파이썬의 클래스는 네임스페이스를 가지며.. C++ 과 가장큰 차이점은 맴버에 대한 부분이다. C++처럼 맴버를 열거하는것이 아니라 생성자에서 직접 초기화를 시켜줌으로서 인스턴싱이 된다. (pass는 nop같은 녀석.. 그냥 채워놔줌 )

생성자 & 소멸자 포멧

def __init__( self )
def __del__( self )

self는 C++ 의 this의 역할을 한다. 따라서 위의 Person 클래스가 name , id 를 가질려면 직접 생성자에서 초기화를 해주어야한다.

def __init__( self ):
self.id = 0
self.name = '고구마'

이런건 특히나 리스트같은 것일 경우 필수.. 컨테이너는 사전에 초기화를 해주어야 하기땜시롱..

class Person:
name = '고구마'

이렇게 해두면 name은 일종의 static 변수가 되어서 모든 객체에서 억세스가 가능해진다.
Posted by 마고자
        list<BlcUIFXImage *> list = GETLOGIC(BlcUI).GetUIFX().GetImageFX();
        list<BlcUIFXImage *>::iterator    iter;


참고로..
#define GETLOGIC(logic)    dynamic_cast<logic &>(logic::GetSingleton())


에러는 "error C2059: 구문 오류 : '>'" 두번째 iterator를 정의하는 부분..

그리고

        list<BlcUIFXImage *>::iterator    iter;
        list<BlcUIFXImage *> list = GETLOGIC(BlcUI).GetUIFX().GetImageFX();

이건 아무 문제가 없이 컴파일 된다.
바뀐건 눈으로 보면 알 수 있듯.
줄의 순서만 바꿨다.

이건 뭥미? >_<;;

실행환경 Visual Studio 2005 teamsuit service pack 1
Posted by 마고자

사용자 삽입 이미지

최신버젼은 이쪽에서 받을 수 있어요

이게 뭐하는 프로그램 인고?..

Magic Work Station 이라고 불리는 Magic the Gathering 이란 트레이딩 카드 게임을 온라인상에서 무료로 할 수 있는 프로그램이 있다. 이걸 만든 업체쪽에선 Wizard( 매직더게더링 원 저작권 업체.. )에 어떤 커미션도 제공을 하고 있는 것이 아니기 때문에 , 매직 게임 자체에 대해 어떤것도 넣을수가 없기때문에 , 그 게임을 할 수 있는 프레임만 제공한다. 카드 DB같은경우도 저작권에 걸리기 때문에 다른형식으로 공급하는데 .. 어쨌든 그렇게 비공식적으로 사용하는 것이기에 매직 카드 자체의 매력인 카드 이미지조차 제대로 제공돼지 못한다.
어디서 모아놓기도 그렇고 누군가 퍼다주기도 귀찮고 ..

사용자 삽입 이미지


그래서 사람마다 다른 카드 이미지를 가지고 있다. 어떤사람은 용량 적은걸로 , 어떤사람은 풀이미지로..

개인적으로 풀이미지를 무척 가지고 싶어했었는데 , 다음카페 매직동호회에서 '오영석'씨 께서 풀이미지를 구할수 있는 웹사이트에 대한 정보를 흘렸다. 찾아보니 http://magiccards.info 라는 카드 검색 사이트인데 , 여기있는 카드이미지가 가히 일품!. 이분께선 그걸 하나하나 검색해서 저장했다고 한다... 카드 검색하고 클릭하고 이미지보고 다른이름 저장하고...이걸..몇백장... -_-;;

그걸 보고 생각이 났다. 정의감에 타올랐다.
'저거 프로그램으로 만들면 그냥 쫙 받을텐데 -_-'

일도 하기 싫은데 농땡이 치면서 만들어볼까?.. 하고 시작한 프로젝트 ..;

요는 , magiccard.info 에서 원하는 카드 이미지를 익스펜션 셋별로 긁어다가 mws포멧으로 저장해주는 프로그램이다.. 라고 할수 있겠다.

프로그램은 다음 링크를 저장해서 MWS의 Pics폴더에 넣고 실행하면 된다.
invalid-file

MTGImage ver 1.0 프로그램 다운로드 받기


MWS쓰는 사람들에게 이정도만 말하면 다 알아들을거라 믿는다 -_-;;

어떻게 만들었나 ? 관심 없는 사람 많을테니 새창으로 분리하겠음.


참 오랜만에 이런 유틸리티를 만들었다. 버쳐파이터 대진표 역계산 프로그램 MagFa 만든이후로 더 만든게 있던가 -_-?.. 야튼 대충 마무리 돼서 기분이 좋다.

총 제작기간 이틀 -_-; 회사에서 농땡이 치면서 ;
야튼 MWS쓰는 사람들에게 많이 도움이 됐으면 좋겠다.

Update Log
2007/06/01
- 같은 이름의 카드 넘버링 추가. ( ex Mountain (2) .. )
2007/05/31 ver 1.0b 배포
- 백스레드 처리 , UI 처리
- 모든 익스펜션 적용.
- TSB 블럭 처리.
- Split Card 처리 추가
- AEther 글자 처리.. ':' 처리 (COP)

PS> 안나오는 카드가 있으면 알려주세요
Posted by 마고자

좀 매니악한 키보드를 샀더니 좋으면서도 한편으론 , 회사에서 사용하는 컴퓨터가 많아서
(노트북 까지 포함해서 3대) 바뀐 키보드는 한대 뿐이고 , 그렇다고 키보드를 3대를 사서 놓을
수도 없고 많이 고민을 하다가 KVM ( Keyboard , Video , Mouse 공유 장비 )를 알아보다가
이것도 해결책이 아닌거 같아서 조사중에 SourceForge란 오픈소스 프로젝트인 Synergy
키보드 마우스 공유 프로그램을 발견했다.

이 프로그램은 , 한자리에서 여러대의 컴퓨터를 사용할경우 키보드와 마우스를 소프트웨어
적으로 공유하는 프로그램이다.

즉 , 사진처럼 화면이 3개 , 컴퓨터가 3개인데 키보드 마우스는 하나로 모두를 컨트롤 하는것이다.

방법은 마우스 커서가 컴퓨터와 컴퓨터 사이를 넘어다니고 , 마우스 커서가 있는 컴퓨터에
키보드 입력이 들어가는 것이 이 프로그램의 핵심적인 아이디어.


참 감동해서 사용을 했으나. 결정적인 단점이 있었다.
이게 미국에서 만든 프로그램이다보니 다국어 지원이 전혀 안돼어 있다는 것 ..;
즉 한영 전환이 돼지 않았다! -_-;;


야튼 오픈 소스의 장점을 이용해서 프로그램을 뜯어보다가. 해당 키 처리가 돼지 않는 것을
발견하고 소스를 고치다가 귀찮아져서 던져놓고 검색을해보니 역시 누군가 열심히 작업한
결과물들을 찾을 수 있었다 ( 구글신 만세 ) 야튼 여러사람의 노하우를 종합해서 빌드를해서
지금 쓰고 있다.

결정적인 문제점이 Shift+space가 넘어가지 것이었는데 , 이게 해결돼서 비싼 해피해킹을
2대나 추가적으로 사야하는 갈등에서 해결돼서 오늘 기분이 너무 좋았다.

프로그램 설정이 처음에 조금 까다로웠는데 ,
개념을 살짝 이해하면 그다지 어렵지 않고 한번 하면 끝난다.


어쨌든 고친 바이너리와 참고자료를 다음 링크에 남겨두겠다.
필요한 분들을 참고하기 바란다.

아 참고로

1, 고정 IP를 가지고 서로에게 억세스를 할수 있는 시스템이 필요하고
2, 어차피 소프트웨어적인 것이기때문에 부하가 걸리거나 훅이 걸리는경우
  키 입력을 전송할수 없는 경우가 발생한다.


하지만 프로그램을 무지 잘만든건 여러가지 편의기능을 제공한다는거.
1, 컴퓨터간에 클립보드 공유까지 지원하고 ,
2, 부팅시 자동 실행 설정등 아주 깔끔하게 돼어있다.


다운로드 받을 URL
http://sourceforge.net/projects/synergy2/
설치방법 설명 돼어진 사이트
http://blog.naver.com/happy4mf?Redirect=Log&logNo=40029520800
마고자가 수정한 한글패치 ( 설치됀 프로그램 파일 폴더에 덮어쓰세요 )
Posted by 마고자


다음 키보드 매크로를 삭제하고 -_-;
편집.다음책갈피
편집.이전책갈피

편집.문서의다음책갈피 -> F2
편집.문서의이전책갈피 -> Shift+F2


로 변경하기.. -_-;
이거 도저히 적응이 안됌. .;;
비쥬얼 스튜디오 6.0 쓰던 사람은
항상 바꿔야하는거..

영문쓰다가 최근에 라이센스 문제로 한글을 다시 깔았는데
갑자기 모든 메시지가 한글로 바뀌어서 아주 적응이 안됀다.
아주괴로웠던 에러메시지.

"XX 라인의 조건 중단점이 적중하였습니다."

...;

Posted by 마고자
이전버튼 1 2 이전버튼