오오..
이건 예전에 졸라 잼나게 했던 Fate 스타일 게임.
너무나 닮은거 보니 뭔가 연관이 있는듯.
어쨌건 dll 들 보면 CEGUI 에 Ogre 등 오픈소스들이 쓰였네.
언제 구경이나 해보자
http://www.ogre3d.org/
http://www.cegui.org.uk/wiki/index.php/Main_Page
http://www.fmod.org/
추가.
페이트 개발자가 참여했다는군.
헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤
2009년 10월 28일 수요일
2009년 10월 16일 금요일
deque 를 이용한 간단한 버퍼
이런게 종종 필요하지.
급히 필요해서 테스트겸 만들어본 코드.
c++ 자주 안쓰게되서 레퍼런스 안보곤 못짜겠더군.
급히 필요해서 테스트겸 만들어본 코드.
c++ 자주 안쓰게되서 레퍼런스 안보곤 못짜겠더군.
#include <deque>
#include <algorithm>
#include <iterator>
#include <iostream>
using namespace std;
int main()
{
char* p1 = "abcde";
char* p2 = "fghij";
typedef deque<char> buf_t;
buf_t buf;
// 먼저 p1 을 넣어보자
// 보통 네트웍에서 읽는 값은 이렇게 버퍼에 쌓아두고 본다.
copy(p1,
p1+strlen(p1),
back_insert_iterator<buf_t>(buf));
// 이제 버퍼에서 일부를 꺼내보자
// 이때는 원하는 모양만큼 가려서 꺼내면 된다.
// 만약 패킷완성이 덜됐다면 skip 하던가 하면 되겠지.
char tmp[3];
copy(buf.begin(),
buf.begin()+3,
tmp);
cout << tmp << endl;
// 버퍼에서 일부를 삭제해보자
// 패킷하나를 전부 읽었다면 버퍼에서 뽑아내야겠지.
buf.erase(buf.begin(),
buf.begin()+3);
// 남은 버퍼를 확인해보자
copy(buf.begin(),
buf.end(),
ostream_iterator<char>(cout, ""));
cout << endl;
// 음. 계속해서 패킷이 도착하겠지
copy(p2,
p2+strlen(p2),
back_insert_iterator<buf_t>(buf));
// 남은 버퍼 찍어보자
copy(buf.begin(),
buf.end(),
ostream_iterator<char>(cout, ""));
cout << endl;
// 끝
cout << "ok" << endl;
}
2009년 10월 14일 수요일
2009년 10월 9일 금요일
2009년 10월 2일 금요일
GNU screen 사용법 위키에서 백업
http://oldpie.yoonkn.com/cgi-bin/moin.cgi/GNU_screen
오래전에 적어둔것 옮겨둔다. 저쪽 계정이 얼마 안남았다..
오래전에 적어둔것 옮겨둔다. 저쪽 계정이 얼마 안남았다..
screen
Xming 으로 Emacs 를 띄워서 원격작업하는 현재에는 별 필요가 없는 툴인데 대강만든 프로그램을 서버쪽에 띄워서 오래 돌려야 한다던가 하는 경우가 자주 있어서 이럴때를 위한 screen 사용방법 정리
원래는 좀더 간단한 attach(detach 던가??? 기억이...) 라는놈이 있는데 내 장비에 기본설치가 안되어있고 또 screen 이 더 유명한놈이라 이놈을 적어둔다.
screen 실행 |
screen |
세션 detach |
C-a C-d |
세션 list |
screen -ls |
세션 resume |
screen -r 어쩌구.저쩌구.모시기 |
그냥 프로세스 띄우는 정도면 위 네가지만 알면 충분. 더 상세한 기능은 man page 가 아주 잘되어있다.
가끔 로깅도 필요한 경우가 있는데 이때는
toggle logging |
C-a H |
참고로 요놈이랑 자주 쓰게될 스크립트
#! /bin/bash
while [ 1 ]
do
echo "TICK!"
python chviewmon.py
sleep 5
done
참고링크
헐 이미 잘 정리되어있었네 http://kr.sun.com/developers/solaris/techdocs/gnu_screen.html 를 참고하자.
http://kldp.org/node/18744 이것도 좋음
2009년 10월 1일 목요일
벨킨 공유기 UPnP AddPortMapping 문제
upnp 를 위해 덩치큰 라이브러리를 가져다 쓰지 않고 직접 짰는데 이게 테스트에 쓴 다른 공유기들(Intel UPnP SDK 기반) 에선 문제 없지만 벨킨 공유기에서는 문제가 생기더라.
결론만 적자면 내가 평소 http 프로토콜을 직접 짜야 할 경우 보통 1.0 기반으로 만드는 편인데 이번에도 역시 1.0 기반으로 리퀘스트를 했고 벨킨 공유기는 이걸 에러로 취급해준것.
SOAP 이 HTTP 1.1 위에서 돌아야만 했던가? 흠 지금껏 이런 문제는 본적이 없는데
나중에 이것좀 찾아보자.
어 참고로 지금 UPnP 로 포트매핑 하는거 대강 순서나 적어둘까
정석대로라면 먼저 뚫어보고 이미 뚫려있다고 응답해오면 상황판단을 해서 뚫은것 지우고 다시 뚫거나 등등의 처리를 해야 하겠지만 흠. 일단 걍 막무가내로 뚫어버렸다.
아..
문제가 생긴 공유기는 벨킨 F5D8236-4 v2 였다.
지금은 꺼놔서 펌웨어 버전은 못적겠군.
결론만 적자면 내가 평소 http 프로토콜을 직접 짜야 할 경우 보통 1.0 기반으로 만드는 편인데 이번에도 역시 1.0 기반으로 리퀘스트를 했고 벨킨 공유기는 이걸 에러로 취급해준것.
SOAP 이 HTTP 1.1 위에서 돌아야만 했던가? 흠 지금껏 이런 문제는 본적이 없는데
나중에 이것좀 찾아보자.
어 참고로 지금 UPnP 로 포트매핑 하는거 대강 순서나 적어둘까
- 디스커버리
- 찾았으면 디스크립션 읽어오고
- 그중에서 컨트롤 URL 을 파싱해서
- 먼저 DeletePortMapping 으로 이전 포트포워딩 정보가 있으면 지워주고
- AddPortMapping 으로 포트매핑 추가
정석대로라면 먼저 뚫어보고 이미 뚫려있다고 응답해오면 상황판단을 해서 뚫은것 지우고 다시 뚫거나 등등의 처리를 해야 하겠지만 흠. 일단 걍 막무가내로 뚫어버렸다.
아..
문제가 생긴 공유기는 벨킨 F5D8236-4 v2 였다.
지금은 꺼놔서 펌웨어 버전은 못적겠군.
피드 구독하기:
글 (Atom)