'Utility'에 해당되는 글 4건

  1. 2008/02/23 귀차니스트 HTML Parser - XHTML 변환 파싱
  2. 2008/02/21 귀차니스트 IPangYa - 팡야 계산기 라이브러리
  3. 2008/02/16 귀차니스트 PangCal - 팡야계산기 (2)
  4. 2008/02/16 귀차니스트 War 3 Axis - 워크래프트3 후킹 프로그램 (2)

HTML Parser - XHTML 변환 파싱

Utility/Library 2008/02/23 20:24 귀차니스트

  대학교 3학년이 끝나는 2006년 12월 26일 병역특례를 하게 되었죠. 입사를 하고 나서 한 달이란 짧은 수습기간 동안 프로그램을 만들게 되었는데 그 중 필요했던 기능이 HTML Parsing 부분이었습니다. 그래서 W3C에서 공개 중인 Tidy 라이브러리를 이용한 HTML Parser를 개발하게 되었죠.
  흔히 말하는 HTML이라는 것이 Well-Formed 문서만 존재하면 좋지만 태그가 덜 닫힌 경우, 태그의 순서가 서로 얽혀있는 경우도 있기 때문에 바로 Pasing만 하는 것은 문제가 많습니다. 그래서 Tidy를 이용 HTML 을 XHTML 이나 XML 형식문서로 컨버팅 할 필요가 생기는 것이죠.
  이 라이브러리를 사용하여 XHTML, XML 문서로 컨버팅이 끝나게 되면 Parsing 과정은 말도 안 되게 쉬워집니다. XHTML, XML 이 XML Paser에서 인식이 될 수 있기 때문이죠, 저 같은 경우는 당시 필요한 부분이 그렇게 없었기 때문에 XPath를 이용한 함수들만 제작하여 사용하였습니다. 지금 생각하면 부족한 부분도 없지 않아 많군요^^.
  그런데 이 Tidy라는 라이브러리가 그 당시엔 그렇게도 골치를 썩혔답니다. 왜냐하면 흔히 HTML 문서에 한글이 포함되어있을 때 raw 라던가 자세히 기억나지는 않지만 euc-kr 변환을 하여야 하는데 공백을 나타내는 단어인 &nbsp; 이 포함되어있을 경우 때때로 이 단어의 태그 오픈 '<' 문자가 사라지는 문제점도 있었을 뿐더러 XML의 declaration인 <?xml version="1.0" encoding="euc-kr" ?> 부분이 euc-kr 로 세팅할 수 없어서( 제가 찾지 못했을 수도 있습니다. ) XML 파서에서 한글을 제대로 인식하지 못하는 경우까지 생기더군요.
  뭐 어쩔 수 없이 String 문자를 수동으로 붙이는 등의 꼼수를 동원하고서 원하는 결과를 얻었습니다. 물론 이렇게 만든 것을 사용하고 말았죠. 뭐 이런저런 추억을 잠기게 하는 것이긴 합니다만 필요할 때는 좀 더 좋게 만들어봐야겠습니다.

필요라이브러리 : MSXML Parser SDK 6.0

크리에이티브 커먼즈 라이센스
Creative Commons License

"Utility / Library" 분류의 다른 글

IPangYa - 팡야 계산기 라이브러리 (0)2008/02/21
2008/02/23 20:24 2008/02/23 20:24

댓글을 달아 주세요

  예전에 팡야 계산기를 만든 적이 있습니다. Microsoft Visual C++ IDE을 사용하여 만든 계산기였죠. 그 프로그램은 비록 수식과 변수를 입력받아 처리하게 하였지만 제가 만든 프로그램으로만 작동한다는 점이 있었죠. 그래서 생각한 것이 Microsoft 의 COM 기술을 사용한 라이브러리를 만들어보자는 것이었습니다. 그래서 만든 것이 IPangYa 라이브러리입니다.
  사용할 수 있는 언어는 COM 기술을 지원하는 언어라면 모두 사용할 수 있습니다. 이를테면 C#, VB, C++, Java, Delphi 같은 언어들 말이죠. 사용법은 특정 언어에 종속된 것으로 설명하지는 않겠습니다.

  먼저 아래 사항을 실행하시기 전 regsvr32 "dll경로\IPangYa.dll"로 등록을 해주셔야 합니다.

  IPangYa 라이브러리에는 CCalculator 클래스가 존재합니다. 이 클래스가 팡야 계산기 라이브러리의 대들보죠. 이 클래스에는 void SetVarialble( string VariableName, double VariableValue ); 함수와 double EvalExpress( string Expression, out int ErrorIndex ); 함수가 존재합니다.
  라이브러리를 사용할 때 수식에 필요한 변수는 SetVariable로 세팅 후, EvalExpress로 수식을 계산하게 됩니다. 그런데 수식을 어떻게 작성하고 변수와 함수를 호출하느냐가 중요한 포인트겠죠^^?

  1. 먼저 수식을 그냥 입력할 때입니다.
    1. SetVariable 함수를 호출하지 않습니다.
    2. EvalExpress함수의 첫 번째 인자에 "1 + 2 + 3 * ( 4 - 3 )" 과 같은 수식을 입력합니다.
    3. 리턴 값을 이용합니다.

  2. 변수를 사용하여 계산할 때입니다.
    1. ABC 변수에 100이라는 값을 넣으려고 한 다면 SetVariable( "ABC", 100 );을 호출합니다.
    2. EvalExpress함수의 첫 번째 인자에 "1 + 2 + [ABC]" 를 입력하고 호출합니다.
    3. 리턴 값을 이용합니다.

  3. 함수를 이용하여 계산할 때입니다.
    1. 기본적으로 지원하는 내장 함수들은 sin( 사인 ), cos( 코사인 ), tan( 탄젠트 ), abs( 절대값 ), asin( 아크사인 ), acos( 아크코사인 ), atan( 아크탄젠트 ), sgn( 0보다 크면 1, 0이면 0, 0보다 작으면 -1 ) , sqrt( 루트값 ), log( 자연로그 ), log2( 이진 로그 ), log10( 십진 로그 ), exp( 제곱 승 ), ceil( 올림 ), floor( 내림 ), round( 반올림 ) 입니다.
    2. EvalExpress함수의 첫 번째 인자에 "1 + 2 + [sin{30}]" 라고 입력하고 호출합니다.
    3. 리턴 값을 이용합니다.
    4. 만약 변수를 함수의 인자로 이용하고 싶다면 "1 + 2 + [sin{ABC}]" 라고 입력하면 됩니다. 물론 그전에 SetVariable로 ABC에 값을 할당해야 합니다.


  위와 같이 사용할 수 있습니다. 다만, 각 언어에 대해서 COM 객체의 클래스를 할당받는 방법은 다릅니다. 간단하게 C#을 예로 들겠습니다. C++도 있지만 갑자기 에러가 나네요.;

C# (Language : csharp)
  1. 1. 프로젝트 솔루션 뷰의 참조부분에서 IPangYa 라이브러리를 참조합니다.
  2. 2. 작성 코드 부분에 아래와 같이 작성합니다.
  3. IPangYa.CCalculator clsCalc = new IPangYa.CCalculatorClass();
  4. clsCalc.SetVariable( "ABC", 100 );
  5. int ErrorIndex;
  6. System.Windows.Forms.MessageBox.Show( clsCalc.EvelExpress( "1 + 2 + [ABC]", out ErrorIndex ).ToString() );

  위와 같이 쓰시면 해당 팡야 계산기 라이브러리를 이용하여 계산하실 수 있으실 겁니다.
그리고 EvalExpress 의 두 번째 인자인 ErrorIndex 는 에러가 난 지점을 건네받는데, 만약 그 값이 -3이라면 에러가 발생하지 않았고, -2 라면 알 수 없는 에러가 발생, 그 이후는 에러 지점의 한 칸 앞을 리턴 해줍니다. 다만 에러 그 자체가 아닌 에러가 발생한 단위의 인덱스입니다.
  미진한 부분이 많은 라이브러리이지만 유용하게 쓰셨으면 합니다.


크리에이티브 커먼즈 라이센스
Creative Commons License

"Utility / Library" 분류의 다른 글

HTML Parser - XHTML 변환 파싱 (0)2008/02/23
2008/02/21 01:11 2008/02/21 01:11

댓글을 달아 주세요

PangCal - 팡야계산기

Utility/Program 2008/02/16 23:47 귀차니스트

  2006년 여름 당시 팡야( http://www.pangya.com/ )를 플레이하게 되었습니다. 예전부터 알고는 있었지만 게임 자체가 캐시아이템의 운영방식을 가지고 있었기 때문에 돈이 없는 학생으로썬 대단히 부담이 되었었죠. 그런데 그때엔 어느 정도 플레이도 해보고, 친구의 부추김도 있었고, 홀인원의 재미도 느껴봤기 때문에 캐시를 충전하게 되었습니다.
  그러다 보니 필연적으로 계산이라는 것이 따라다니게 되더군요. 홀인원을 하기 위한 수치계산 말입니다. 간단하게 게임을 감으로 하는 것으로 알고 있었는데, 그게 아니라 쉽게는 cos, sin, tan에서 부터 어렵게는 공학함수까지 사용하여 이동 범위와 파워를 계산하더군요.
  하지만, 암산을 그 짧은 시간 내에 계산하기 쉽지만은 않았습니다. 때로는 허겁지겁 시간에 쫓겨 제대로 치지도 못하는 일도 많았죠. 그래서 결국 또 전공의 힘을 빌어 프로그램을 만들었습니다.

PCal

  위의 프로그램을 만들 때 한 가지 모토가 존재하였는데, 그 부분은 팡야홀릭( http://www.pangyaholic.com/ )을 비롯하여 많은 팡야 사이트들에 올라오는 각종 계산기는 모두 수식이 고정되어있다는 점이었습니다. 그래서 "변수를 입력할 수 있듯이 수식도 입력하자!"라는 것을 구현하게 되었습니다. 그리고 유용하게 사용했었죠.
  프로그램에 대한 소스를 팡야홀릭 자유게시판에 공개를 했지만 블로그를 이전하는 김에 같이 정리하여 올리는 것이 낫다는 생각이 들어 제대로 다시 올립니다.

프로그램 사용법

  1. 프로그램을 실행합니다.
  2. 수식을 입력합니다. 수식은 장판계산식과 파워계산식으로 나뉩니다.
    1. 수식의 입력방법은 단순한 대치방식으로 사용합니다.
    2. 만약 장판계산식이 ( 비거리 - 남은거리 * 0.45 + ( -1 * 커브 ) ) 라는 공식일 경우, 장판계산식에 ( [B] - [U] * 0.45 + ( -1 * [V] ) ) 라고 입력하고 나서, 위 입력 값 부분에서 해당 값들을 입력하고 계산버튼을 누릅니다.
    3. 만약 cos, sin, tan 함수를 사용하고 싶을 때 각종 대치변수의 앞에 C, S, T 문자를 붙여주면 됩니다. 예를 들어 [B] 대신 [CB]를 사용하게 되면 수학적 공식으로 cos( B ) 의 결과 값이 사용되게 됩니다.
  3. 프로그램이 종료될 때에는 이전 수식을 setting.ini 파일로 저장했다 재실행시 다시 로드하게 됩니다.


크리에이티브 커먼즈 라이센스
Creative Commons License

"Utility / Program" 분류의 다른 글

War 3 Axis - 워크래프트3 후킹 프로그램 (2)2008/02/16
2008/02/16 23:47 2008/02/16 23:47

댓글을 달아 주세요

  1. 이의룡 2009/08/19 20:48  댓글주소  수정/삭제  댓글쓰기

    흠... 제가 빵굽기로 계산식을 하려고 하는데

    수식 입력하는 부분이 아닌 나머지부분에서 계산이 안되는 군요.ㅠㅠ

    빽스핀 상수 같은 경우에는 바람이나 높이에 따라 보정이 되어서 변하게 되는 변수인데

    변수에 계산 값을 넣으니 0.00000 이라는 값이 나와서.ㅠㅠ

    해결에 주십쇼.. 설마 다른 라이브러리에 그 해답이 있는건가요.?.

  대학교 1학년 2학기 시절, Warcraft3 배틀넷에서는 래더게임 뿐만 아니라 Chaos 라는 AOS 종류의 유즈맵이 성행하고 있었습니다. 여기서 AOS 란 "Aeon of Strife"의 줄임말로 공성전략시뮬레이션의 장르입니다. 이 장르는 스타크래프트의 Aeon of Strife 라는 맵에서 시작된 것이라고 합니다. 그 인기에 걸맞게 친구들과 저 또한 이 게임을 플레이 하고 있었습니다.
  그 맵이라는게 필연적으로 상대방 영웅, 몹들을 사냥하면서 레벨업과 강력한 아이템들을 맞춰가는 것이 목표이다 보니 한 순간의 실수로 인해 내 영웅이 죽을때도 많았고, 그 때문에 영웅이 부활하기 까지 많은 시간을 기다려야 했습니다.
  명색이 컴퓨터 전공이다 보니 머리가 이런 쪽으로 돌아가더군요. 지금 생각하면 잘 돌아간것인지 잔머리인지는 잘 모르겠습니다. 그래서 단순히 윈도우 메시지 후킹 API를 이용한 프로그램을 만들게 되었습니다.

 

war3axis



  결국, 위의 그림과 같은 프로그램이 만들어졌고 친구들과 공유하여 많이 유용하게 사용했습니다. 웹 쪽도 조금은 퍼졌던 것으로 알고 있습니다. 나름 사람들이 내 프로그램을 사용한다는 재미도 생겨나더군요.
  하지만, 그 때는 제가 퍼트린 것이 아니었기 때문에 설명도 부진했고, 현재 Map이 어떻게 변화되어있는지는 모르기 때문에 현재도 적용이 가능한 것인지는 잘 모르겠습니다. 그래도 하드디스크 한쪽 구석에 썩혀두는 것 보다는 나을 것 같아 제대로 올립니다. 원래의 첫 원본은 ( http://pointer.egloos.com 에 존재합니다. )

  1. Encampment
      이 부분은 진영을 선택하는 부분입니다. 실제 게임을 플레이 할 시에는 진영이 센티넬, 스콜지로 나뉘어져 있기 때문에 자동포탈을 사용하고자 할 때에는 어떤 위치를 사용해야 할지 판단이 불가능하기에 존재하는 것입니다.
  2. Control
      이 부분은 아이템을 제외한 기타 단축키들을 설정하는 부분입니다. Locking Windows Key Action은 이름 그대로 보다시피 Alt, Ctrl 키 사이의 윈도우 키로 인한 Process Switch 문제를 방지하기 위해 삽입을 하였습니다. 그 외 Portal, 용기, 애교는 해당 액션을 단축키 하나로 지정해놓은 것입니다.
  3. NumPad Shortcut
      프로그램을 만들었던 가장 큰 이유로써 캐릭터의 단축키는 대부분 왼쪽에 위치한 반면 아이템 단축키는 오른쪽 넘버패드였기 때문에 그 불편함을 감수하고자 만들었던 부분입니다.


크리에이티브 커먼즈 라이센스
Creative Commons License

"Utility / Program" 분류의 다른 글

PangCal - 팡야계산기 (2)2008/02/16
2008/02/16 22:43 2008/02/16 22:43

댓글을 달아 주세요

  1. 김상호 2009/09/08 12:17  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 이 프로그램을 햇수로만 어언 5년여 정도를 즐겨 사용하던 사람입니다. 컴퓨터 전공을 하고 있는 대학생이구요.. 혹시 보실지는 모르겠지만 혹시 이 글을 보시게 된다면,,, 가능하시다면 소스코드를 볼수 있을까 해서 글을 남겨봅니다 ^^ 그럼 수고하세요~

    • 귀차니스트 2010/09/07 05:07  댓글주소  수정/삭제

      앗.. 안녕하세요..
      음.. 아주 오랫만에 글을 여차저차 하다가 보게되었는데..
      상당한 시간이 지났군요..

      일단 소스코드는 폐기한 상황이구요.. 이유는 너무 지저분 해서.. 이구요..
      뭐 상황을 봐서 시간이 된다면 새로 제작할지도 모르겠군요^^;