레이블이 wxhaskell인 게시물을 표시합니다. 모든 게시물 표시
레이블이 wxhaskell인 게시물을 표시합니다. 모든 게시물 표시

2009년 8월 29일 토요일

wxHaskell 로 쪼금 복잡한 코드



간단한 프로토콜 테스터를 짜는중인데 생긴건 챗 클라이언트 혹은 메신저 같이 생긴놈이다.위쪽 넓은 텍스트컨트롤에서는 서버가 보내오는 입력을 눈에 편한 형태로 보여주고 아래쪽 작은 텍스트에딧에 내가 적절히 보낼 패킷을 입력할수있다.

저 패킷 모양을 눈에 익숙하게 보여주기/입력하기 위해서 language-python 패키지 까지 가져다 썼지만 뭐 이건 중요한게 아니고..( 파서를 직접 짜는것 보다 Python 파서를 재활용하는게 더 편했다. )

어쨌건 위처럼 만들고 나니 반복되는 패킷입력을 매번 키보드로 하고 있는게 좀 한심해서 아래쪽에 버튼을 붙여야할 필요성도 생겼다. 그러니까 패킷1, 패킷2 ... 란 버튼들이 줄줄이 붙어있고 그걸 누르면 패킷이 바로 전송 되던가 아니면 입력창에 채워졌으면 편할거란 생각이 들었다.

게다가 이 버튼들은 상황따라 바뀌기 때문에(테스트할 대상에 따라 자주쓰는 패킷이 달라질테니) 코드안에 박기는 뭐하고 바이너리밖에 설정파일로 뽑아야만 했다.(동적으로 바뀐다는건 아니고 그냥 실행시 결정된다는 의미로 적었다. 나중에 동적으로 버튼을 제어할 일도 생기겠지. 그땐 흠 hslua 를 써볼까?)

뭐 필요한 사항은 대강 정리가 됐고..
이제 어떻게 했는지를 적자면

먼저 설정파일은.. 흠 맘에 드는 라이브러리를 못찾아서 (기존 라이브러리는 너무 덩치크거나, 쓰기가 좀 어색하거나..) 그냥 내가 단순히 짜버렸다. haskell 입문서 보면 나오는 간단한 수준으로 짠거라 아주 일부만 여기 적어둔다

펼쳐두기..



이제 wx 쪽 코드를 만져야 하는데.. 흠.. 다소 삽질한 끝에 아래같은 모양의 함수를 만들었다.

펼쳐두기..

패널을 만들어서 패널에 버튼을 적절히 박아주고 패널을 리턴하는 함수. 흠. 저 프라퍼티가 어떻게 구현된건지 함 찾아봐야 겠네. 정말 묘하구먼.



음 이건 지금 코드를 정리해서 위의 내용을 담은 최소 실행 코드. 나중에 이걸 볼때 실행되는 코드가 없으면 난감하겠지.. 소켓쪽이나 등등 많이 덜어냈기 때문에 딱히 어디 쓸수있는 코드는 아니다.

펼쳐두기..












2009년 8월 27일 목요일

wxHaskell 로 처음 만들어본 샘플 프로그램

우선 스샷 박아두고


소스부터 적어두고

펼쳐두기..


몇가지 느낀점들
  1. 레이아웃 잡기 짱난다. 그래도 ghci 로 바로 실행 가능하니 다행. 정말 복잡한 레이아웃 잡으려면 wxWidget 쪽 문서까지 뒤져봐야 할것 같다.
  2. 문서 읽기 어렵다. 어떤 컨트롤이 어떤 프라퍼티를 가졌는지 보려면 먼저 그 컨토롤이 어떤 클래스에 속하는지 보고 그 클래스의 도움말을 찾아보자. 예를들어 위에서 사용자입력을 받을때 쓴 위젯 (entry 로 만든) 은 Commanding 클래스의 멤버라는걸 문서에서 확인하고 엔터를 칠때 뭔가 하고싶으면 command 를 지정하면 되겠구나.. 해서 코딩해본것.
  3. property 라는 것 때문에 퓨어 펑셔널한 라이브러리 라곤 할수가 없을것 같네. OOP 에서 멤버를 바꾸듯이 쉽게 속성을 읽고 쓸수 있다. 뭐 이런 스타일이 더 익숙하지. 퓨어 펑셔널 GUI 가 가능하긴 한가?
  4. this 에 해당하는 뭐 그런걸 못찾아서 좀 어색하다. 예를들어 위 코드에서 i <- entry f [] 부분에서 command 속성을 지정하고 자기 자신을 포인팅 하는 방법을 몰라서(모른다기 보단 그런 방법은 없지).. 일단 i 를 만들고 아래쪽에서 set 으로 속성을 지정해줬다. 코드가 좀 복잡해지면 위젯들을 먼저 왕창 생성해두고 프라퍼티를 줄줄이 수정하는 식으로 짜야 할거 같군?
  5. 위젯에 위젯 올려서 그걸 쓰는 식으로 모듈화를 해야 하는데 예를들어 위 코드로 치면 i 와 b 를 묶어서 inputControls 뭐 이런식으로 묶어야 했는데 못했네. 이건 다음번에.




2009년 8월 26일 수요일

win32, haskell 에서 gui 는 wxHaskell 가 시작하기 좋군.

간단한 프로토콜 테스트 클라이언트를 haskell 로 짜보려고 준비중이다.
원래 콘솔로 만들까 했는데 트래픽이 좀 되니 콘솔로는 부족해서 GUI 를 붙여볼 생각.

처음에는 Gtk2Hs 를 고려해봤는데 이게 windows 에서는 설치가 매우 곤란했다. 지금 쓰는게 haskell platform 인데 이게 설치경로에 공백이 들어가있어서 gtk2hs 의 configure 가 에러를 뱉는다. haskell platform 만든애들이 이문제 때문에 설치경로를 바꿨다가 Gtk2Hs 쪽에서 해결하라고 다시 원복하는 바람에 이게 허공에 뜬 이슈가 됐다. Gtk2Hs 쪽 에도 이슈로 올라와있지만 조용하고...

뭐 저문제 말고도 여러문제가 있길래 설치하다 결국 꽥

반면에 wx haskell 쪽은 최신 버전에 맞는 바이너리 설치본을 제공해서(Gtk2Hs 쪽 바이너리 설치본은 ghc 구버전용) 설치가 깔끔하더라.

아.. qt 쪽도 haskell 바인딩 라이브러리가 있는데 그쪽은 시도도 안해봤다.


펑셔널 GUI 라니 어떻게 짜야 하는지 상상도 안되네.
어쨌건 wx window 를 배우기 위해서는 아래 링크들을 띄워두고 놀아보자.

http://haskell.org/haskellwiki/WxHaskell
http://en.wikibooks.org/wiki/Haskell/GUI
http://wxhaskell.sourceforge.net/doc/

추가.
으흠.. FAQ 에 의하면 멀티쓰레드지원이 아직 안된다는 말이 있네.. 헐..