어쩌라구..?? ㅡㅡa..

Posted
Filed under Life
답답하고
짜증난다!

요새 계속 Negative 모드에서 살고 있었는데,
시바 교육왔더니 강사가 왠지 조낸 주는거 없이 밉다.

화장실이나 갈까부다. 제길.
2008/03/07 16:33 2008/03/07 16:33
Posted
Filed under Life
아이를 잃어버린 날자를 보니 2007년 12월 25일이다.
많은 사람들이 크리스마스라고 신나서 들떠 있었을 그날에
그 아이들 부모는 얼마나 혼비백산했을까..

어제 우연히 TV에서 장기 미아들에 대한 방송을 봤다.
아이가 없어진 집은 완전히 가정이 파탄나더군.
몸값을 목적으로 하는 유괴도 아니고,
그냥 어느날 없어지더니 연락도 없더라 라는 황당한 상황.
정녕 죽어 마땅한 사람들이 아이 납치해다 뭐 하려고 하는 인간들이겠다.
몇년만에 찾아낸 아이는 어떤 고생을 했던지 여기저기 상처 투성이고..

진정 내 주위에 그 없어졌다는 아이가 없는지
돌아봐야 하겠다.
그 부모들이 뭘 딱히 잘못한것도 아니고..
다른집 아이가 될 수도 있었겠지만
그게 우리집 아이였다는 이유로 저 고생을 하고 있다.

새삼 세상 무서워진다.
2008/01/24 18:20 2008/01/24 18:20
Posted
Filed under Linux/tip
관련 자료 링크 : Feisty Phoenix cardreader /dev/ttyUSB0 problem

리눅스에서 웬만한 하드웨어들은 그냥 갖다 꽂기만 하면 동작한다.
윈도에서 뭔 드라이버네 어쩌네 저쩌네 하는거 다 필요없다.
진짜 웬만한것들은 꽂았을때 인식 못하거나 동작 안하면 못 쓴다고 생각해도 큰 무리 없을정도다.

그런데 드라이버는 아무 문제 없는데 동작 안 하는 경우가 있다.
이것도 그 중의 하나인데, usb serial converter가 동작 안하는 경우를 발견했다.
문제가 생기는 배포판은 ubuntu 계열인데 문제는 이 배포판이 너무(?) 친절해서 그렇다.

usb를 꽂았을때 커널 메세지에 이런 로그가 남았다.
[ 1997.017531] usb 1-2: new full speed USB device using uhci_hcd and address 2
[ 1997.213556] usb 1-2: configuration #1 chosen from 1 choice
[ 1997.264851] /build/buildd/linux-source-2.6.22-2.6.22/drivers/usb/serial/usb-serial.c: USB Serial support registered for FTDI USB Serial Device
[ 1997.265210] ftdi_sio 1-2:1.0: FTDI USB Serial Device converter detected
[ 1997.265409] /build/buildd/linux-source-2.6.22-2.6.22/drivers/usb/serial/ftdi_sio.c: Detected FT232BM
[ 1997.266422] usb 1-2: FTDI USB Serial Device converter now attached to ttyUSB1
[ 1997.266610] usbcore: registered new interface driver ftdi_sio
[ 1997.266613] /build/buildd/linux-source-2.6.22-2.6.22/drivers/usb/serial/ftdi_sio.c: v1.4.3:USB FTDI Serial Converters Driver
[ 1997.493547] usb 1-2: usbfs: interface 0 claimed by ftdi_sio while 'brltty' sets config #1
[ 1997.497538] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1
[ 1997.497771] ftdi_sio 1-2:1.0: device disconnected
문제가 발생한 부분이 위에서 굵게 표시된 부분인데
brltty 라는 시스템의 설정과 충돌한다는 의미이다.

인터넷을 뒤져본 결과 한글 문서도 있긴 한데,
brltty라는 서비스는 시각장애우를 위한 점자 터미널 지원 서비스이다.
이 서비스가 필요하다면 FTDI 칩을 사용하지 않는 시리얼 컨버터를 사용하던가
(있긴 있다. 파란색 반투명한 색으로 된거.. 제조사.모델명 미상...),
아니면 저 서비스가 필요하지 않다면 지우면 된다.
여기서 중요한점은 서비스를 중단시키는것만으로는 안되고,
저 패키지들을 지워버려야 한다.

시냅틱스 패키지 관리자에서 brltty 패키지를 찾아 지우던가
콘솔에서 지우던가... 하여간 지워라.

그리고 나서 컨버터 꽂으면 이상없이 잘 작동한다.
커널 로그도 당연히 정상이다.
2007/12/29 18:01 2007/12/29 18:01
Posted
Filed under Linux/programming
오늘도 또 겁나게 삽질했다. 아.. 힘들다..

glade-3를 이용해서 UI를 만들고 libglade를 이용해서 띄우려고 할때
메뉴얼의 Basic 항목대로 프로그램 만들어 놓으면
각 위젯의 realize 이벤트가 발생하지 않는다.
다른 이벤트들은 잘 뜨는데 realize 이벤트만 발생하지 않는다.

realize 이벤트 핸들러에 프로그램 초기화 코드가 들어있는 경우,
당연히 프로그램이 뜨지 않고 죽어버린다. 왜냐고? ㅡㅡ?
이벤트 핸들러 코드가 호출되지 않기 때문이다.

realize 이벤트 핸들러가 호출되지 않는 경우를 살펴보면,
toplevel 위젯의 visible(한글로 '보임') 속성이 yes로 되어있는 경우이다.
properties->common 탭에 보면 있다.

기본으로 glade-3에서 UI를 만들다보면
toplevel 위젯을 만들었을때 기본으로 visible 속성이 no이다.
다른 위젯들은 기본으로 모두 yes가 되어있는데 말이다.
그래서 정작 프로그램을 실행시켰을때
에러메세지가 없는데 아무런 화면이 나오지 않는다.
그래서 다시 glade-3에서 visible속성을 yes로 바꾸고 저장하면 UI가 나온다.

그것이 문제였던 것이다.
메뉴얼의 예제 코드를 보자.
int main(int argc, char *argv[]) {
GladeXML *xml;

gtk_init(&argc, &argv);

/* load the interface */
xml = glade_xml_new("filename.glade", NULL, NULL);

/* connect the signals in the interface */
glade_xml_signal_autoconnect(xml);

/* start the event loop */
gtk_main();

return 0;
}
코드를 보면,
너무도 명백하게 glade_xml_new 함수가 호출되고
glade_xml_signal_autoconnect 함수가 호출된다.

나는 인터넷에서 답을 찾을때까지 저걸 보고서도
왜 이벤트 핸들러가 호출되지 않았는지 몰랐다.
답은 간단하다. UI가 생성된 후에 이벤트 핸들러가 연결되기 때문이다.

glade-3에서 visible 속성이 yes인 위젯들은
glade_xml_new 함수가 리턴될때 이미 모두 디스플레이 되어 있다.
realize 이벤트는 최초 디스플레이될때 발생하는데
벌써 UI가 그려졌으므로 이미 이벤트는 발생했고
그 뒤에 이벤트 핸들러가 등록되므로 당연히 호출되지 않는것이다.
이런 내용을 메뉴얼에서는 찾지 못했다. 나는.

내가 만든 예제 코드를 다시 보자.
int main(int argc, char *argv[]) {
GladeXML *xml;

gtk_init(&argc, &argv);

/* load the interface */
xml = glade_xml_new("filename.glade", NULL, NULL);

/* connect the signals in the interface */
glade_xml_signal_autoconnect(xml);

/* show main window */
gtk_widget_show(glade_xml_get_widget(xml, "window1"));

/* start the event loop */
gtk_main();

return 0;
}
굵게 표시된 부분이 내가 추가한 코드이다.
함수 인자의 "window1"은 glade-3에서 정해준 윈도우 이름으로 바꾸면 된다.
그냥 아무것도 없는 상태에서 윈도우 위젯 만들면 저 이름으로 되길래 넣은것 뿐이다.

코드를 저렇게 수정하고 실행시키면 이벤트가 정상적으로 발생하는것을 볼 수 있다.

아.. 힘들다.
잠좀 자고 싶다.
그래도 할일이 너무나 밀려 있어서 잘 수가 없다. ㅜㅜ
2007/12/17 11:39 2007/12/17 11:39
Posted
Filed under Linux/programming
glade-3로 UI를 만들고 저장하면 소스파일이 전혀 생기지 않고
.glade 파일만 덜렁 생기고 끝이다.
열어보면 XML로 작성된 파일이다.

전에는 glade로 UI 만들고 저장하면 c 소스코드도 줬던걸로 기억하는데
이상하다 생각해서 찾아보니까
glade-3 부터는 아예 소스코드 만드는 기능을 없애버렸다고 한다.
그러면 이걸 어떻게 써먹나... 해서 또 찾아보니까
libglade 라는 라이브러리를 이용해서 프로그램을 띄울 수 있다고 한다.
그래서 써먹어 봤다.

그런데 libglade 홈페이지에서 시킨대로 하니까 이런 에러가 난다.
libglade-WARNING **: could not find signal handler 'some_handler'
이런 제길... ㅜㅜ.

인터넷 조낸 찾아봤는데 질문은 많은데 해결책이 없었다.
쉬벌쉬벌 하면서 찾고, 어찌어찌 하다보니 해결이 됐다.
그래서 나같은 사람 있으면 또 삽질할까봐 글을 남긴다.



libglade  메뉴얼이나 기타 문서를 보면
시그널 핸들러(이벤트 핸들러) 함수가 라이브러리에 있지 않고
바이너리 파일에 있는 경우에는
컴파일 할때 --export-dynamic 옵션을 붙여서 컴파일하라고 한다.
이대로 하면 때려 죽여도 안된다. 적어도 내 리눅스 박스에서는 그랬다.
내가 쓰는 배포판은 우분투 7.10 gutsy 버전인데 안된다.

저 옵션이 아니라 다음 옵션을 써야 한다.
-export-dynamic 또는 -Wl,--export-dynamic
저걸 링커 옵션에 집어 넣어야 한다. 컴파일 옵션에 넣어도 에러 안 나는지는 확인 안해봤다.
Makefile 만들때 LDCONFIG 변수에 때려 박으면 된다.
옵션 글자를 주의 깊게 보기 바란다. 하이픈(-)의 갯수가 다르다.
나 개인적으로는 후자를 추천한다. 옵션이 좀더 명시적이기 때문이다.
그냥 export-dynamic 옵션만 줄때는 하이픈 두개 쓰면 오류나고 하나쓰면 잘 된다.
뭐가 이래... ㅡㅡ;;

스티븐 이거 알아내느라고 하루 꼬박 삽질했다. 바빠 죽겠는데.. ㅜㅜ
부디 이런것 때문에 고생하는 사람 없으면 좋겠다.

추신 : 어떤 메뉴얼에는 하이픈이 한개로 되어있는 메뉴얼도 있었다.
        아마도 gnome쪽 웹 페이지인것 같은데,
        만약 그걸 먼저 봤더라면 이런 고생 안했겠지... ㅜㅜ.
2007/12/16 07:08 2007/12/16 07:08
핑크팬더

감사합니다. 님 덕분에 전 반나절만 고생을 했네요.. ^^

StevenCVAL

헙.. 어쩌다가 이런곳까지 찾아 오셨나요.. ㅡㅡa...
어쨌거나 도움이 되었다니 기쁩니다.

아리새의펜촉

정말 고맙습니다. 하룻동안 붙잡고 고생한 걸 이 글 덕택에 해결하였습니다.

StevenCVAL

어머나.. 어쩌다가 이런곳까지 흘러 오셨는지...
정말 고생 많이 하셨나 봅니다.. ㅡㅡ/