본문 바로가기

Developement

(142)
개발자 초년생들을 위한 조언 요즘은 개발자라 하면 다양한 직군들이 많이 존재 하는 시대 입니다만, 이전만 해도 C 나 C++ 로 개발 하는 것들이 많았고, 심지어 제 경우엔 그때 남들 다 쓰는 언어만 쓰면 재미 없다고 소시적 부터 쓰던 pascal 을 함께 병행 하기도 했습니다. 물론 inline assembler 를 즐겨 쓰는 이상한 취미 때문에 사용이 편이한 Borland 류를 더 쓴 것도 있습니다만.. 개발자로서 십수년 일을 해 오면서 무엇이 좋은것인가, 나쁜것 인가를 아직도 잣대를 대어 나누기는 힘들지만, 적어도 '이것은 최악이다' 를 격어 본 입장에서 '최소 이런 것들은 피하자' 라는걸 공유 하고자 글을 써 봅니다. 회사에 들어 가면 처음엔 당연 아무것도 모릅니다. 경력직이던 신입이던, 처음 회사 들어 가면 그 조직 또는 ..
ffmpeg 2.8.2 에서 3.0.2 로 옮기다. 처음 Anystreaming windows client 를 만들면서 사용했던 ffmpeg 이 2.8.1 이었던 걸로 기억 합니다. 안드로이드나 타 플랫폼에서도 사용에 지장이 없던 버젼이라 안전빵에 쓰다가 2.8.2 로 올리면서 RTSP 재생을 하고 나면 무려 50MB 씩 메모리에 남아 있는 이상한 문제에 시달리기 시작 했었습니다. client 자체에 워낙 다양한 기능을 누가 원해서 끼워 넣다 보니 메모리 누수가 생긴 것인가?! 하고 긴장을 하고 최대한 단순하게 만든 내 코드에 무슨 문제가 생긴 것 인가 를 무려 3일이나 고민을 했습니다. (불행히 ffmpeg 2.8.2 적용은 아주 오래 전에 했었는데 메모리 누수가 있는지 일주일 전에 알았습니다...) 도저히 왜 메모리 누수가 생기는지 못찾고, 단지 ff..
리눅스에서 빠르게 TCP socket 서버 찾기. 리눅스에서 자신의 IP 영역대에서 (A.B.C.n, n = 1~자기자신~255) 다른 서버가 있는지 찾기 위해서는 여러 방법이 있긴 하겠지만, 대부분 이 방법으로 찾는게 아닐까 합니다. 아래 코드는 해당 ip 에 TCP socket 이 열려 있는지 찾는 간단한 방법 으로 실제 AnyStreaming Client 에서도 아래와 같은 방법으로 (물론 Windows용으로 바꾼 코드) AnyStreaming 을 찾습니다. 실제론 FD_ISSET() 이후에 socket 을 다시 blocked 로 바꾼 다음 send() 를 통해 특정 명령이 전달 되는지 까지 검사하면 더 좋을 듯 합니다. 이 방법은 TCP socket 의 connect() 함수가 blocking 으로 동작 하는것을 감안해서 만든 날림 코드지만 꽤 ..
리눅스내 현재 접속 ip 알기. 리눅스나, 임베디드 리눅스 내에서 현재 연결된 장치에 따라 ip 를 알고 싶을 때가 있다, 이럴때 아래 코드를 사용할 수 있다. #include #include #include #include #include #include #include #include #include #include #include #include #include #include bool getmyip( const char* devname, struct in_addr* addr ) { struct ifreq ifr; int fdSockTest = -1; fdSockTest = socket( AF_INET, SOCK_DGRAM, IPPROTO_IP ); if ( fdSockTest >= 0 ) { strcpy( ifr.ifr_name..
서비스 데몬을 만드려다 노가다 하다 ... 시스템을 이제 다 만들어 가는지라, 기존에 일일히 실행 해서 쓰던 서버들을 이제 데몬으로 올리려 임베디드 리눅스 파일 시스템 /etc/rc.local 뒤에 뙇 넣어 놨더니 ... 하 ... rcS.d 세션이 끝나니 다들 죽으신다 ... 대체 언제적 문제인가 해서 back to the past. 현재 개발 하는 시스템은 squashfs 를 이용한 NAND writing 을 하기 때문에 미리 sqfs 를 만들 위치에서 부터 ARM ELF 로 만들어진 바이너리를 각각 /usr/sbin 안에 넣어 준다. 예를 들어 서비스 서버로 만들었던 것 중 하나가 asctrld 이라면 /usr/sbin/ 안에 asctrld 를 넣어 주는 것. 그런 다음, 아래 스크립트를 복붙 으로 /etc/init.d 안에 asctrld ..
AnyStreaming Win32 Client ... 이제 CES 까지 한주 좀 더 남았습니다. 미국 까지 가서 데모 신나게 돌려야 하는 관계로 (나중에 source code 공개로 해야 하는 이유도 있지만) 급하게 2주가량 만에 만든 Windows 용 DirectX 가속 클라이언트를 완성 하긴 했습니다. 공개는 어차피 libffmpeg 쓴거라 공개 해야 하므로 나중에 github 나 bitbucket 에 올라가게 될지라 따로 올릴 필요는 없어 보입니다. DirectX 의 D2D 와 DSound 를 쓰는데, 이게 DirectX 10 부터 2D 지원이라고 하는군요. 일단 D2D 사용 하고 있어서 Windows7 부터나 구동 될 듯 합니다만, 100% MinGW-W64 로만 빌드 한 거라 MFC 처럼 지저분한 뭔가는 없을 듯 합니다. 소스가 오픈 되면 ffmp..
MinGW-W64 용 DirectInput 소스 (키보드,마우스,조이스틱) MinGW-w64 프로젝트 부터 DirectX 관련 SDK 가 포함 되어 있으므로 윈도우 어플 개발에 매우 편리함을 얻을 수 있습니다만, MFC 처럼 뭔가 꽁꽁 묶여져 있는거 찾기가 사실 어렵다 보니 직접 만들어 써야 하는게 많은건 사실 입니다. 대신 쾌적함을 얻을 수 있는건 덤 이지만 ... 그래서 제가 진행 중인 프로젝트 중에 DirectX 의 2D, input 을 가져다 쓰면서 좀 더 편리하게 써 보고자 만들었던 것을 공유 하고자 합니다. 사용은 간단 합니다. 먼저 현재 사용되는 윈도우에 생성 부분 쪽에 InitDirectInput() 를 사용하여 Dinput 을 초기화 합니다. 이떄 반환되는 값은 HRESULT 가 아니라 DXINPUT_INIT_RESULT_KEYBOARD, DXINPUT_INIT..
Win32 개발을 위한 Resource Editor 1.6.6 현재 이 프로그램 홈페이지에서 설치본을 내려 받으면 100% 악독한 iStartWeb 뭐시기 malware 에 걸립니다. 참고 URL = http://www.resedit.net/ 몇일 전 이걸 내려 받았다가 저 malware 설치 된걸 지우느라 개고생 한걸 생각 해서 단순 압축본을 올립니다. 저작권은 resedit.net 에 있으며, 리패키징 금지 등을 개시 하지 않았으므로 일단 올려 두도록 합니다. 절대 해당 홈페이지에서 설치본을 받지 마시기 바랍니다. 개발자가 설치본에 악성 malware 를 넣은듯 한데, 아무리 돈이 궁해도 그렇지 내려 받는 사람들에게 독을 파는건 아닌 듯 합니다. 그래서 문제가 없는 바이너리를 설치 후 그대로 압축 해서 아래에 올립니다. 원래 설치본에 있는 malware 는 감염..