로그 리포트를 엑셀로 보낼때..

저희 회사 제품의 로그를(솔라리스 기반) 펄로 파싱해서 좀 복잡한 리포트를 만들게 해놓앗는데요.. 최종적으로는 엑셀에서 불러와야할 리포트인데 엑셀로 만드는 방법도 모르거니와 오버헤드이므로..html의 table태그로 만들게 해놨습니다. bgcolor, colspan, rowspan, width 등도 사용하니까 엑셀에서 이쁘게 불러와 지는군요.

여기서 질문..

1. 휴대폰 번호 필드가 있는데요. 0으로 시작하기 때문에 text 타입으로 엑셀에서 불러와 져야하는데 무조건 숫자형으로 불러와 버려서 첫번째 0이 다 사라지거든요. 물론, 셀타입을 다시 바꿔도 0이 나타나지는 않습니다. 좋은 방법이 없을까요?

2. 시트를 2개 생성하게 할 수 없을까요? table을 두개 만들어보니 그냥 하나의 시트에서 다 불러와 버리는군요.. 물론, 로그툴에서 html을 두개 만들고 엑셀에서 또 불러오면 되겟지만..한번에 헤결할 순 없을까요.

3. html로 만드는 방법이 최선인가요? 더 좋은 팁이 잇으면 가르쳐주시면 감사하겠습니다.

위 1번같은 경우는 xml 스키마로 html을 표현하고 엑셀의 xml불러오기로 해봐도 xsd:string 로 된 전화번호 데이터가 그냥 숫자로 역시 바껴 버리네요.

‹ 스트링 메모리 할당에 대해... /driver/input/input.c 는 무슨일을 하는 파일입니까 ›

KLDP BBS 서버 업그레이드 계획

http://kldp.net/forum/forum.php?forum_id=699 를 참고하십시오. 엄밀히 말하자면 KLDP BBS 서버가 업그레이드되는 것은 아닙니다만 현재 서버 리소스의 대부분을 차지하는 kldp.net 서비스를 별도로 분리하면 이곳 KLDP BBS도 좀더 여유있는 환경에도 돌아갈 수 있으므로 요즘같은 잦은 접속 중단 문제는 더이상 없을 것입니다.

kldp.net 서버의 이전 작업이 마무리될 때까지 불편하시더라도 조금만 참아 주시기 바랍니다....

KLDP 초기화면 접속시 빈화면 나오는 증상?

혹시 KLDP 초기화면 접속시에 빈 화면이 나오는 증상이 지금도 계속되는지 확인 부탁드리겠습니다.

제 경우 IE를 사용하면 자주 발생했었는데 지금은 또 괜찮은 것 같고... 관련해서 몇가지 작업을 진행한게 있는데 잘 되었는지 궁금해서 요청 드립니다.

사이트 이용에 불편을 끼쳐 드려 죄송합니다...

America's Army 게임 접속에 문제가 있습니다

리눅스용 2.3 버젼을 설치하였습니다.

설치후 게임 로드 및 첫번째 트레이닝 까지는 특별히 문제가 없는데

이후 기록을 위한 서버 로그인(personal jacket?)과정에서

Connecting....
Timed out

그냥 이러고 끝납니다. 계정은 미국사이트에서 만들어 두었습니다.

forum.americasarmy.com 에서 클릭클릭하며 눈으로 검색 :( 하면서 대충 알아낸 거라고는

특정 포트가 쓰인다는 정보 뿐이었구요.

인용:
You will need to allow the game access through both your firewall and router. These are the ports which need to be opened through your router:

1716 for the game and PunkBuster (UDP)
1717 for the gamequery (UDP)
1718 for master server query (UDP)
8777 for standard UT query (UDP)
27900 for GameSpy (UDP)
20045 for Auth server (TCP)

Dave
_________________

위와 관련된 것이 문제가 되는지도 모르겠습니다. 확인하는 법도 잘 모르겠구요..

왜 접속이 안되고 그냥 timed out이란 메세지만 출력이 될까요?

[그냥 드립니다] p120 입니다.

아. 이런 포럼도 생겼네~.

위의 순선님 글 보고 따라 글 씁니다.

조건은 순선님이랑 같습니다. 받는 분이 택배비만 지불하시면 됩니다.

사양은..

p120Mhz,
Samsung 1.28 GB
Western Digital 2.118 GB
Kasan Trident 9660 2MB
SB 16 VE

MS Home Serial mouse (볼 감도 좋음 ^^)
FDD 없음
Keyboard는 찾아보고.. 드립니다.(없을 가능성 농후)
예전에 뜯어 놓고 쓰던 겁니다.

답글로 주소 적어 주시면 보내드립니다.

그럼. 이만. 총총 ^^

[팝니다]Unix Power Tool(2nd Edition) 원서.

오라일리 책입니다.
명성은 익히 아실꺼구요.
정말 갖고 싶어서 샀는데..
정작 거의 보진 못했습니다.
그래서 99% 새책이지요.
고이 모셔두고 있었는데, 그새 3판이 나왔네요.
헉..
더 이상 가지고 있어도 별로 볼것같지 않아서 팝니다.

반값인 3만5000원에 가져가세요.
부산에서 직거래 하시면 3만원에 드립니다.

Solaris, gcc에서 dlopen로 shared object 붙일 때 오류

서버 프로그램이 하나 있고,
서버 프로그램에서 사용하는 각 모듈을 그때그때 사용자의 요청이 있을 때마다 동적으로 생성해서 dlopen과 dlsym을 이용해서 붙이는 구조로 돌아가는 프로그램을 짜고 있는 중입니다. 환경파일을 통해 초기에 몇몇 모듈들은 서버와 같이 올라가고요. server_func()는 서버 프로그램에 정의되어 있는 함수입니다.

server:
server_func()

module1.so
call server_func();

module2.so
call server_func();

...

각 모듈에서는 서버에 있는 루틴을 호출하고 있는 부분이 있는데,
Solaris cc 에서는 전혀 문제가 없이 돌아갔었는데, 포팅때문에 (server컴파일, 모듈 컴파일 모두) 컴파일러를 gcc로 바꾸면서 dlopen()시에 referenced symbol not found 라는 에러를 내면서 실패를 합니다.
nm 등으로 보면 분명히 server에 server_func 가 정의되어 있거든요.
일단 시간이 급해서 server_func 루틴을 별도의 라이브러리로 뽑아서 수행이 되게는 했지만 영 찜찜합니다.

간단하게 테스트 코드를 짜 봤습니다.

dlopen.c

#include <stdio.h>
#include <unistd.h>
#include <dlfcn.h>

int
func_in_main(int x)
{
        printf("I'm func in main. %d\n", x);
}

main(int argc, char **argv)
{
        int (*func)(int x);
        void    *handle;
        int     rc;

        handle = dlopen("dlroutine.so", RTLD_NOW);
        if (handle == NULL) {
            fprintf(stderr, "dlopen error: %s\n", dlerror());
            exit(2);
        }

        func = (int (*)(int))dlsym(handle, "dl_func");
        if (func == NULL) {
            fprintf(stderr, "dlsym error: %s\n", dlerror());
            exit(2);
        }

        func(50);

        rc = dlclose(handle);
        if (rc != 0) {
            fprintf(stderr, "dlclose error: %s", dlerror());
            exit(2);
        }
}

dlroutine.c

#include <stdio.h>

int
dl_func(int x)
{
        printf("hello, world %d times\n", x);
        func_in_main(x);
}

shared object는 cc, gcc에 따라서 다음과 같이 컴파일했고요,

gcc인 경우
    gcc -fPIC -shared -g -o dlroutine.so dlroutine.c
cc인 경우
    cc -KPIC -g -G -h dlroutine.so -o dlroutine.so dlroutine.c

메인프로그램은 cc, gcc상관없이 다음과 같이 컴파일했습니다.

cc -o dlopen dlopen.c -ldl
gcc -o dlopen dlopen.c -ldl

테스트해 본 결과 shared object는 gcc로 했는지 cc로 컴파일했는지 상관이 없었고, 메인 프로그램을 어떤 컴파일러를 썼는지에 따라서만 차이가 났습니다.
gcc의 결과
dlopen error: ld.so.1: dlopen: fatal: relocation error: file ./dlroutine.so: symbol func_in_main: referenced symbol not found

gcc의 경우에는 LD_LIBRARY_PATH에 gcc 라이브러리가 있는 경로 (/usr/local/lib )을 추가해 주어야 하던데, 이것도 좀 이상한 느낌이 들긴합니다. gcc로 컴파일된 shared object를 위해서 필요한건가요?

[삽니다] 486DX4-100 컴퓨터 삽니다.

MS-DOS 설치하고 고전게임 전용 머신으로 쓸 예정입니다.
램은 아무래도 8메가 이상 되야겠구요
사운드카드는 SB 호환이어야겠죠? 그래픽카드는 아무거나 상관 없습니다.
CD롬은 있으면 좋겠고.. 하드디스크 크기는 뭐 상관 없습니다.
본체+모니터(종류및크기무관)+마우스+키보드 셋트로 삽니다.
택배비 포함해서 5만원 생각하고 있구요..
메일 주세요.

ps) 몇년전에 250만원 주고 샀던 컴퓨터인데.. 지금 5만원에 사려니 감회가 새롭군요.
ps2) 가능하면 기본적인 셋팅이 되어 있는걸로 원합니다.

Video4Linux API Document

Video4Linux API
원문 : 리눅스 커널 소스의 문서('/usr/src/linux/Documentation/Video4Linux/API.html')
또는 http://planeta.terra.com.br/informatica/gleicon/video4linux/API.html
번역자 : 서영진(valentis(at)chollian.net/http://valentis.pe.kr) (2003. 1. 4)
이 문서에 대해 번역자의 해설이 들어간 문서는 http://valentis.pe.kr/Suhdang/Linux/Video4LinuxAPI.html에 있다.
Video4Linux API는 리눅스에서 Video Capture(ex. TV) 카드나 라디오(Radio) 카드 또는 Web Cam(ex. USB Web Cam)을 이용해서 화상을 처리하는 프로그램을 만들기 위한 API의 모임이다.
Video4Linux에 대한 자세한 설명은 http://valentis.pe.kr/Suhdang/QT_Programming/Lecture_MM.html를 참조하라.

================================================

장치(Device)
Video4Linux는 다음의 장치(Device) 파일들을 제공한다. 이것들은 보통 /dev/bttv로서 알려져 있는 캐릭터형의 장치(Device)이며,
많은 사람들을 위해서 /dev/bttv는 /dev/video0 에의 기호 연결(Symlink)이 되어 있다.

장치(Device) 파일명 마이너 번호의 범위 기능
/dev/video 0-63 비디오 capture를 위한 인터페이스(Interface)
/dev/radio 64-127 AM/FM 라디오 장비
/dev/vtx 192-223 Teletext 인터페이스(Interface) 칩(Chips)
/dev/vbi 224-239 Raw VBI 데이터(Intercast/Teletext)

Video4Linux를 이용하는 프로그램은, 우선 장치(Device) (파일)을 열고 검색해서, 이용하길 원하는 기능을 찾아낸다. 기능의 검색으로 각 인터페이스(Interface)가 무엇을 지원하고 있는지를 알 수 있다. 이 API는 비디오 캡쳐 카드를 위해서만 정의되었다. 라디오 카드(Radio Card)의 경우에는 이 부분집합을 이용한다. Teletext의 인터페이스(Interface)에는 이미 정의되고 있는 VTX API를 이용한다.

기능의 검색의 Ioctl(Capability Query Ioctl)
비디오 장치(Device)가 지원하는 기능에 관한 정보를 얻으려면 VIDIOCGCAP ioctl()을 이용한다. ioctl에 struct video_capability를 건네주면 내용을 돌려준다. struct video_capability에는 이하에 주는 항목이 포함되어 있다.

name[32] 이 장치(Device)의 규범적인(Canonical) 이름
type 인터페이스(Interface)의 타입
channels radio/tv 의 입력 소스의 수(만약 사용 가능하면)
audios 오디오 장치(Device)의 수(만약 사용 가능하면)
maxwidth 최대의 capture폭(단위:픽셀)
maxheight 최대의 capture 높이(단위:픽셀)
minwidth 최소의 capture폭(단위:픽셀)
minheight 최소의 capture 높이(단위:픽셀)

type의 항목은 장치(Device)의 기능에 관한 정보가 플래그(Flag)로서 리스트(List)되어 있다. 이것에는 다음의 것이 있다.

이름 설명
VID_TYPE_CAPTURE 메모리상에 capture 하는 기능이 있다
VID_TYPE_TUNER 어떤 형식(Some Form)의 Tuner가 있다
VID_TYPE_TELETEXT teletext의 기능을 가지고 있다.
VID_TYPE_OVERLAY frame buffer상에 이미지를 오버레이 하는 기능이 있다
VID_TYPE_CHROMAKEY chroma-key로 오버레이 하는 기능이 있다
VID_TYPE_CLIPPING 오버레이의 클리핑을 하는 기능이 있다
VID_TYPE_FRAMERAM 오버레이는 frame buffer의 메모리를 덧쓰기하는 기능이 있다
VID_TYPE_SCALES 하드웨어가 이미지의 크기변환(Image Sacling)을 지원한다.
VID_TYPE_MONOCHROME 그레이 스케일(Grey Scale)만 Captuer한다.
VID_TYPE_SUBCAPTURE 이미지의 일부분만을 capture 할 수 있다

capture 장치(Device)가 돌려주는 최소와 최대의 사이즈는, 그 범위내에서 가능한 모든 높이와 폭의 비율이나 사이즈를 사용할 수 있는 것은 아니다. capture 사이즈를 설정하는 경우, 요구된 사이즈를 넘지 않는 범위에서 가능한 최대의 사이즈로 설정된다. 예를 들면 quickcam은 3개의 고정적인 설정 밖에 사용할 수 없다.

Frame buffer
capture 카드로부터 frame buffer에 직접 데이터를 쓰게 하기 위해서는, frame buffer의 베이스 주소(Base Address), 사이즈(Size), 구조(Organisation)를 장치(Device) 드라이버에 가르쳐 두지 않으면 안된다. 이것은 특권 모드(Proviliged)의 ioctl()이며, 사실은 X서버 자신이 설정해야 할 것이다.
VIDIOCSFBUF ioctl로 capture 장치(Device)를 위한 frame buffer의 파라미터를 설정한다. capture 카드가 frame buffer에의 직접적인 쓰기를 지원하고 있지 않는 경우, 이 ioctl()는 지원되지 않는다. VIDIOCGFBUF ioctl( ) 는 현재 설정되어 있는 파라미터를 돌려준다. 두 경우 모두 struct video_buffer를 사용해 파라미터를 얻어온다.

void *base 버퍼의 물리 베이스 주소(Base Physical Address)
int height frame buffer의 높이
int width frame buffer의 폭
int depth frame buffer의 깊이(Depth)
int bytesperline 인접한 다음의 같은 옆위치까지의 메모리상에서의 바이트(Byte) 수

이러한 값은 frame buffer의 물리적인 레이아웃을 반영한다. 실제로 표시되고(Visible) 있는 영역은 실제의 frame buffer보다 작을수도 있다. 사실, XFree86에서 이런 것은 보통이다. XFree86 의 DGA는 이 ioctl 로 설정하는 파라미터를 제공할 수 있다. 베이스 주소를 NULL로 설정해서, frame buffer에 액세스를 할 방법이 없다는 것을 나타낼 수 있다.

Capture Windows
capture하는 영역은 struct video_window를 사용해서 결정한다. 이 구조체는 capture 하는 영역과 필요하면 클리핑(Clipping)하는 영역을 설정한다. VIDIOCGWIN ioctl 로 현재의 설정된 값을 가져 올 수 있어서 VIDIOCSWIN 로 새로운 값을 설정할 수 있다.
VIDIOCSWIN 의 ioctl 에 성공했을 경우, 적당한(Suitable) 파라미터들이 선택되었다는 것이다. 이것은 요구된 파라미터 대로에 정확하게 설정했다고 하는 의미가 아니다. 유저 프로그램은, VIDIOCGWIN를 사용해서 실제로 설정된 파라미터가 정확한지 확인할 필요가 있다. struct video_window 에는 다음과 같은 항목이 있다.

x X윈도우에서의 X 좌표
y X윈도우에서의 Y 좌표
width capture 하는 이미지의 폭
height capture 하는 이미지의 높이
chromakey chroma-key의 값(호스트 순위(Host Order)에서의 RGB32의 값)
flags 추가 capture 플래그
clips 클리핑 하는 직사각형의 리스트(설정만)
clipcount 클리핑 직사각형의 수(설정만)

클리핑 직사각형은 배열로 넘겨준다. 클리핑 직사각형의 각 요소에는 다음의 항목이 있다.

x 스킵(Skip)하는 직사각형의 X좌표
y 스킵(Skip)하는 직사각형의 Y좌표
width 스킵(Skip)하는 직사각형의 폭
height 스킵(Skip)하는 직사각형의 높이

단지 capture 영역을 설정한 것 만으로는, capture하는 것은 유효하지 않는다. VIDIOCCAPTURE ioctl 로 1을 설정해서 건내주는 것으로써, 오버레이 capture 하는 것을 시작한다. 그리고 0을 설정하는 것으로써, 멈출 수가 있다.
몇몇의 capture-장치(Device)에 따라서는, 실제로 보이고 있는 영역의 일부를 capture 할 수 있는 것도 있다. 이 경우, VIDEO_TYPE_SUBCAPTURE가 설정되어 있다. video_capture 구조체는 시간과 Capture할 특별한 부분 영역을 지정한다.
video_capture 구조체에는 다음의 항목이 있다.

x 붙잡는(Grab) 영역의 X좌표
y 붙잡는(Grab) 영역의 Y좌표
width 붙잡는(Grab) 영역의 폭
height 붙잡는(Grab) 영역의 높이
decimation 적용될 스킵할 영역(decimation)
flags 붙잡을(Grab) 때의 플래그

가능한 플래그(flags)에는 다음의 것이 있다.

이름 설명
VIDEO_CAPTURE_ODD 홀수 프레임만을 capture 한다
VIDEO_CAPTURE_EVEN 짝수 프레임만을 capture 한다

비디오 소스(Video Source)
각각의 video4linux의 비디오나 오디오 드라이버는 한개 혹은 여러 소스 채널로부터 capture 한다. 각각의 채널은 VIDIOCGCHAN ioctl호출해서 정보를 얻을 수 있다. 이 함수(VIDIOCGCHAN ioctl)를 사용하기 전에, 호출하는 측은 반드시 channel의 항목에 정보를 얻고 싶은 채널의 번호를 설정해야 한다. 채널 자신에 대한 정보를 struct video_channel 에 저장하여 값을 돌려준다.
VIDIOCSCHAN ioctl 는 정수(integer) 형태의 인수를 취해서, capture하는 입력으로 변환한다. 색의 설정이나 튜닝에 관한 파라미터가 채널 변환을 건너서 유지되는 것은 정의되지 않는다. 호출측에서, 채널마다 이것들을 관리해 다시 설정해 줘야한다.(다른 비디오 입력마다 다른 설정을 보존하는 것이 합리적이다. (reasonable))
struct video_channel 은 다음과 같이 구성되어 있다.

channel
채널 번호(Channel Number) name 입력의 이름 - 카드의 입력 자신의 라벨(Label)이 반영되는 것이 바람직하다.
tuners 이 입력으로 연결되어 있는 튜너(Tuner)의 수
flags 튜너(Tuner)가 가지고 있는 설정(Properties)
type 입력의 타입(만약 알고 있는 경우만)
norm 이 채널의 표준(TV신호의 모드)

flags의 정의는

VIDEO_VC_TUNER 채널에 튜너(Tuner)가 있다.
VIDEO_VC_AUDIO 채널에 오디오가 있다.
VIDEO_VC_NORM 채널은 표준(TV신호의 모드)의 설정을 가지고 있다.

types의 정의는

VIDEO_TYPE_TV 입력은 TV 입력이다
VIDEO_TYPE_CAMERA 입력은 카메라이다

이미지 속성의 설정
화상(Picture)의 이미지 속성은 VIDIOCGPICT ioctl를 사용하면 struct video_picture에서 얻을 수 있다. VIDIOCSPICT ioctl 를 호출하여 이러한 값을 변경할 수 있다. palette의 형(Type)을 제외한 모든 값은 0~65535의 사이에서 조정된다.
struct video_picture 에는 다음의 항목이 있다.

brightness 화상의 밝음
hue 화상의 색조(hue)(칼라의 경우만)
colour 화상의 색(Color)(칼라의 경우만)
contrast 화상의 대조(Contrast)
whiteness 백색도(Whiteness) (그레이 스케일의 경우만)
depth 캡처하는 깊이(Capture Depth)(frame buffer의 깊이(depth)와 대조(match)할 필요가 있겠지요)
palette 이 이미지에서 사용될 팔레트를 알려준다.

팔레트의 값에는 다음의 것이 있다.

VIDEO_PALETTE_GREY 선형적으로 증가하는 gray scale(255가 가장 밝은 흰색)
VIDEO_PALETTE_HI240 BT848의 8 bit 칼라 큐브(cube)
VIDEO_PALETTE_RGB565 RGB565를 16 bit 워드(Word)에 채운다.(Packed)
VIDEO_PALETTE_RGB555 RGB555를 16 bit 워드(Word)에 채운다.(Packed), 맨 위의 비트는 미정의
VIDEO_PALETTE_RGB24 RGB888를 24 bit 워드(Word)에 채운다.(Packed)
VIDEO_PALETTE_RGB32 RGB888를 하위 3바이트에 넣은 32bit. 맨 위의 아르바이트는 미정의
VIDEO_PALETTE_YUV422 YUV422의 비디오의 형태(Style) - 4bits를 Y, 2bits를 U, 2bits를 V에 할당한 8bits
VIDEO_PALETTE_YUYV Describe me
VIDEO_PALETTE_UYVY Describe me
VIDEO_PALETTE_YUV420 YUV420 캡처(capture)
VIDEO_PALETTE_YUV411 YUV411 캡처(capture)
VIDEO_PALETTE_RAW RAW 캡처(capture) (BT848)
VIDEO_PALETTE_YUV422P YUV 4:2:2 Planar
VIDEO_PALETTE_YUV411P YUV 4:1:1 Planar

튜닝(Tuning)
각각의 비디오 입력 채널에는 그것과 관련된 하나 또는 다수 개의 튜너(Tuner)가 연결되어 있다. 많은 장치(Device)는 튜너(Tuner)를 가지고 있지 않는다. TV카드나, 라디오(Radio)카드에는 하나 또는 다수 개의 튜너(Tuner)가 붙어 있다.
튜너(Tuner)에 대한 정보는 VIDIOCGTUNER ioctl를 사용해서 struct video_tuner에서 얻을 수 있다. 튜너(Tuner)의 번호를 설정해 ioctl를 호출하면, 내용을 구조체로 보내준다. 튜너(Tuner)의 변환은 사용하고 싶은 튜너(Tuner)의 정수형의 번호(int)를 인수로 VIDIOCSTUNER를 이용한다.

struct video_tuner은 다음의 항목으로 구성된다.

tuner 튜너(Tuner)의 번호
name 튜너(Tuner)의 규범적인(Canonical) 이름 (예 FM/AM/TV)
rangelow 설정 가능한 최저 주파수
rangehigh 설정 가능한 최고 주파수
flags 튜너(Tuner)의 상태를 알려주는 플래그(Flags)
mode TV신호의 모드(관련하는 경우만)
signal 신호의 강도(아는 경우) - 0~65535의 사이

플래그(flags)에는 다음의 것이 있다.

VIDEO_TUNER_PAL PAL를 수신(tuning)을 지원한다.
VIDEO_TUNER_NTSC NTSC를 수신(tuning)을 지원한다.
VIDEO_TUNER_SECAM SECAM를 수신(tuning)을 지원한다.
VIDEO_TUNER_LOW 주파수가 저역대(Lower range)이다.
VIDEO_TUNER_NORM 튜너(Tuner)의 표준(TV신호의 모드)를 설정할 수 있다
VIDEO_TUNER_STEREO_ON 튜너(Tuner)의 오디오가 스테레오가 되어 있다
VIDEO_TUNER_RDS_ON 튜너(Tuner)는 RDS 데이터스트림(Datastream)을 보인다.
VIDEO_TUNER_MBS_ON 튜너(Tuner)는 MBS 데이터스트림(Datastream)을 보인다.

mode 에는 다음의 것이 있다.

VIDEO_MODE_PAL 튜너(Tuner)는 PAL 모드 이다.
VIDEO_MODE_NTSC 튜너(Tuner)는 NTSC 모드 이다.
VIDEO_MODE_SECAM 튜너(Tuner)는 SECAM 모드 이다.
VIDEO_MODE_AUTO
자동적으로 변환(switches)하는 모드 또는 모드를 설정할 수 없는 경우

튜너(Tuner)로 설정하는 주파수는 1/16 MHz 내에서의 unsigned 의 32bit 의 값이지만 VIDEO_TUNER_LOW 의 플래그가 설정되어 있는 경우에는 1/16 KHz의 값이다. 현재의 주파수는 VIDIOCGFREQ ioctl를 통해서 unsigned long 값으로 없을 수 있고 VIDIOCSFREQ ioctl 로 설정할 수 있다.

오디오(Audio)
TV와 라디오 장치(Device)는 선택할 수 있는 하나 또는 다수 개의 오디오 채널을 가지고 있다. 오디오의 설정은 struct video_audio을 VIDIOCGAUDIO ioctl에 건네주는 것으로 얻을 수 있다. 또 VIDIOCSAUDIO ioctl로 오디오의 특성(Properties)를 설정할 수 있다.
struct video_audio은 다음의 항목으로 구성된다.

audio 채널 번호
volume 볼륨 레벨(Level)
bass 중저음(bass) 레벨(Level)
treble 고음(treble) 레벨(Level)
flags 오디오 채널의 상태를 알려주는 플래그(Flags)
name[16] 오디오 입력을 위한 규범적인(Canonical) 이름
mode 오디오 입력의 모드
balance 좌/우의 밸런스
step 하드웨어로 설정 가능한 단계(Step)

플래그(flags)에는 다음과 같이 정의된다.

VIDEO_AUDIO_MUTE 오디오가 단음(mute)되고 있다
VIDEO_AUDIO_MUTABLE 단음(mute)를 지원한다.
VIDEO_AUDIO_VOLUME 음량(Volume)의 컨트롤을 할 수 있다
VIDEO_AUDIO_BASS 중저음(bass)의 컨트롤을 할 수 있다
VIDEO_AUDIO_TREBLE 고음(treble)의 컨트롤을 할 수 있다
VIDEO_AUDIO_BALANCE 좌우 밸런스의 컨트롤을 할 수 있다

디코딩(Decoding) 모드는 다음과 정의된다.

VIDEO_SOUND_MONO 모노(Mono) 신호
VIDEO_SOUND_STEREO 스테레오(Stereo)의 신호(NICAM for TV)
VIDEO_SOUND_LANG1 언어 1을 바꿀 수 있는 유럽 TV(European TV alternate language 1)
VIDEO_SOUND_LANG2 언어 2을 바꿀 수 있는 유럽 TV(European TV alternate language 2)

이미지 읽어오기(Reading Image)
read의 시스템 콜(System Call)에 대한 각각의 콜(Call)은 장치(Device)로부터 다음의 가능한 이미지를 가져온다. 포맷을 설정하고 함수에 대한 올바른 크기의 버퍼를 준비하는 것은 호출자의 책임이다. 모든 장치(Device)가 read 시스템 콜을 지원하지 않는다.
두번째 방법으로 장치(Device)가 mmap을 지원하면 mmap 인터페이스(interface)를 통해서 이미지 가져오는 것(Capture)을 조정할 수 있다. mmap 인터페이스를 사용하기 위해서 사용자는 우선 첫 번째로 원하는 이미지와 깊이(Depth)의 성질을 결정해야 한다.
그 다음 VIDIOCGMBUF ioctl를 호출한다. 이 ioctl 는, mmap 해야 할 버퍼(Buffer)의 크기와 각각의 프레임(Frame)에 대한 버퍼에서의 오프셋(offset)을 알려준다. 지원되는 프레임의 수는 장치(Device)에 의해서 결정되고 대체적으로 한 프레임이다.
video_mbuf structure은 다음의 항목으로 구성된다.

size 잡으려고(Map) 하는 바이트(Bytes) 수
frames 프레임(Frame)의 수
offsets 각각의 프레임 마다의 오프셋(offset)

mmap를 실시하면, VIDIOCMCAPTURE ioctl로 (최초의 설정과 같거나 작은) 사용하고 싶은 이미지의 사이즈를 설정한다. 설정이 끝나면 메모리 맵(Map)된 버퍼에 capture가 시작된다. 프로그램에 의해 버퍼가 사용(used) 될 때마다, VIDIOCSYNC ioctl를 호출해서 이 프레임을 해체(free)하고 계속(continue) 한다. 추가로 : VIDIOCSYNC는 해체(free)하고 싶은 프레임 번호를 인수로 가지고 있다.
버퍼가 unmapped 되거나, 모든 버퍼가 다 채워지면, capture는 멈춘다. 드라이버에 메모리와 화면의 양쪽 모두에 capture할 수 있게 설정했을 경우, 메모리에 캡처(Capture)하는 동안에 드라이버는 가능한 한 최선의 방법(Best Effort)으로 캡처한 것을 화면에 표시한다. 이것은 일반적으로 메모리 맵으로 Captuer할 수 없었던 모든 프레임(frame)이 화면에 표시될 수 있다.
마지막의 ioctl는, 만약 하나의 드라이버가 여러 개의 부속품(Components)으로 되어 있을 경우, 하나의 장치(Device)가 관련되어 있는 장치(Device)들을 얻게 해준다. (예를 들면, video0는 나쁜 문제를 만드는 intercast 표시 로그램의 원인이 될 수 있는 vbi0와 항상 관련이 있다고는 할 수 없다.)VIDIOCGUNIT ioctl은 관련되어 있는 장치(Device)가 있는 경우에 그 단위 번호들(unit Number)을 알려준다. video_unit 구조체에는 다음의 항목이 있다.

video 비디오 capture 장치(Device)
vbi VBI capture 장치(Device)
radio 라디오 장치(Device)
audio 오디오 믹서
teletext Teletext 장치(Device)

RDS 데이터스트림(Datastream)
RDS를 지원하는 라디오 장치(device)를 위해서, 장치에 read() 시스템 콜을 이용하여 Radio Data System(RDS) 정보를 받아오는 것은 가능하다. 이 데이터들은 다음과 같은 3개의 그룹으로 합쳐있다.

First Octet RDS 블록의 LSB(Least Significant Byte)
Second Octet RDS 블록의 MSB(Most Significant Byte)
Third Octet
Bit 7 : 에러 비트(Error bit). 이 블록을 받는 도중에 복구할 수 없는 에러가 발생했다는 것을 나타낸다.
Bit 6 : Corrected bit. 이 데이터 블록을 위해서 에러가 수정되었다는 것을 나타낸다.
Bit 5~3 : Received Offset. 싱크 시스템(Sync System)에 의해서 오프셋이 받아졌다는 것을 나타낸다.
Bit 2~0 : Offset Name. 이 데이터에 적용되는 오프셋을 나타낸다.

spamassassin + sendmail + redhat7.3 질문입니다.

원래 sendmail에 procmailrc만 설정해서 사용했습니다. 그러다가 스팸을 좀 더 줄여보고자 spamassassin을 설치했는데요. 필요한 모듈이 왜그렇게 많던지.. 결국 설치해서 모듈올리고 procmailrc 파일에 적용도 했습니다. 그런데 이게 제대로 동작하는건지 모르겠네요.

웹상 글을 보면 메일 헤더부분에 X-Spam-Level , X-Spam-Report, X-Spam-Status 이런 정보들이 보이는것 같던데요. 서버로 외부메일로
메일을 보내봐도 이런 부분은 없어요. 설정이 안됐다고 봐야하나요? 처음 셋팅하고 sample 스팸으로 확인했을때는 정보가 나왔거든요...

procmailrc 설정내용 ( rule 도 있지만 spamassassin 설정한내용이에요)

OPPRIVS=yes
:0fw: spamassassin.lock
* < 256000
| /usr/bin/spamc --prefs-file=/etc/mail/spamassassin/local.cf

:0 H
* ^X-Spam-Level: .*(\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*).*
/var/spool/mail/spam

local.cf 파일내용

rewrite_header Subject *****SPAM*****


# Save spam messages as a message/rfc822 MIME attachment instead of
# modifying the original message (0: off, 2: use text/plain instead)
#
report_safe 0

ok_locales en ko
ok_languages en ko

# Set which networks or hosts are considered 'trusted' by your mail
# server (i.e. not spammers)
#
# trusted_networks 212.17.35.


# Set file-locking method (flock is not safe over NFS, but is faster)
#
lock_method flock


# Set the threshold at which a message is considered spam (default: 5.0)
#
required_score 10.0


# Use Bayesian classifier (default: 1)
#
use_bayes 1


# Bayesian classifier auto-learning (default: 1)
#
# bayes_auto_learn 1


# Set headers which may provide inappropriate cues to the Bayesian
# classifier
#
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status
dns_available yes
use_pyzor 1
use_dcc 1
use_razor2 1
razor_timeout 5
score RAZOR2_CHECK 10
score PYZOR_CHECK 10
score DCC_CHECK 10
score FORGED_RCVD_HELO 7
score NO_REAL_NAME 7
score NO_DNS_FOR_FROM 7
score RCVD_NUMERIC_HELO 7
score MISSING_HEADERS 7
score MISSING_SUBJECT 7
score FROM_LOCAL_NOVOWEL 7
score HELO_DYNAMIC_IPADDR2 7
score INFO_TLD 7
score EXTRA_MPART_TYPE 6
score DATE_IN_FUTURE_03_06 10
score DATE_IN_PAST_03_06 10
score HTML_30_40 3
score INVALID_DATE 10
score RCVD_NUMERIC_HELO 10
score HTML_MESSAGE 3.5
score HELO_DYNAMIC_HCC 7
score BAYES_00 0
score BAYES_05 0
score BAYES_50 0
score DATE_IN_FUTURE_96_XX 10
score UNPARSEABLE_RELAY 5
score HTML_FONT_BIG 3.5
score MPART_ALT_DIFF 2
score RATWARE_RCVD_PF 3
header SPF_CHECK_PASS Received-SPF =~ /^pass/
describe SPF_CHECK_PASS SPF reports sender host as NOT permitted to send mails from
score SPF_CHECK_PASS -10
header SPF_CHECK_NONE Received-SPF =~ /^none/
describe SPF_CHECK_NONE SPF reports sender host as NOT permitted to send mails from
score SPF_CHECK_NONE 5
header SPF_CHECK_FAIL Received-SPF =~ /^fail/
describe SPF_CHECK_FAIL SPF reports sender host as NOT permitted to send mails from
score SPF_CHECK_FAIL 13
header SPF_CHECK_SOFTFAIL Received-SPF =~ /^softfail/
describe SPF_CHECK_SOFTFAIL SPF reports sender host as NOT permitted to send mails from
score SPF_CHECK_SOFTFAIL 8
core HEADER_8BITS 0
score HTML_COMMENT_8BITS 0
score SUBJ_FULL_OF_8BITS 0

---------------------------------------------------

관심가져주셔고 고맙습니다.

과연 어떤 운영체제 일까요?

과연 어떤 운영체제 일까요?
문제가 너무 쉽나~
그래두 함정이 있을수 있으니 함 맞춰보세요~
그림은...

http//cafe2.daum.net/Cafe-bin/Bbs.cgi/InhaTJCpds/dwn/zka/B2-kB2Bt/qqfdnum/7/qqfname/배경화면.jpg

전 오늘 동원훈련을 떠나야 하기에
20,000

- 인천에서 -

국내 오픈소스 관련 커뮤니티의 독점화 경향의 치우친 문제들.

대표적으로 얘기 하자면, 바로 이곳 kldp.org 를 비롯하여,

http://gnome.or.kr http://www.phpschool.com

같은 곳이 타겟이라고 할수 있습니다.

대체 뭐가 문제냐 하는 분들이 많겠지만,

잘 생각해 보면 답이 나옵니다.

서로 발전을 위해 양축으로 이뤄져야 대등한 규모의 경쟁상대가 없다는 겁니다.

오로지 하나밖에 존재하지 않습니다.

kldp 는 문서 번역 사이트로의 집중화라 예외라지만, 지금은 커뮤니티의 성격이 더 짙고, 거의 리눅스 유저 모임의 포탈을 이뤘다고 봐도 과언이 아니지요.

gnome 과 kde , php와 기타 cgi 언어들(perl같은)의 서로 경쟁되는 곳이 없고 오로지 한쪽으로만 사람들이 쏠려서 모여있다는 겁니다.

그럼 여기서 야기되는 문제점은 말 안해도 알겠지요.

이대로 계속 가야되는게 맞는걸까요?

그놈 화면보호기(gnome-screensaver) 사진 폴더 위치

화면 보호기가 작동할 때 하드에 저장된 사진을 보여주는 기능이 있습니다.

근데 사진폴더 위치가 어디인지 설명이 없더군요. man도 없고 google해도 안나오고..

~/Pictures

요겁니다. ^^

KLDP.net 1만명 근접, KLDP BBS 2만명 근접

http://kldp.net의 사용자가 곧 네자릿수가 되고 이곳 kldp bbs는 곧 2만명이 될 것 같습니다. kldp.net의 1만번째 사용자, kldp bbs의 2만번째 사용자가 누가 될지 상당히 궁금하군요. :-)