유튜브 페이지에는 4개의 변수가 존재한다.
일단 이 녀석들을 URL decoding 해주면 아래와 같은 값으로 나오게 된다.

fmt_mapfmt_list와 내용이  유사하며
fmt_url_mapfmt_stream_map 과 내용이 유사하다.

아무튼 다운로드 주소를 얻을려면 fmt_url_map / fmt_stream_map 중에 하나에서 빼내면 된다.

fmt_map=22/2000000/9/0/115,35/640000/9/0/115,34/0/9/0/115,5/0/7/0/0&mpu=True&hl=ko_KR&ad_flags=0&rv.5.length_seconds=243&rv.0.thumbnailUrl=http://i1.ytimg.com/vi/lzVFyWNzjtE/default.jpg&rv.7.author=allkpop&cid=11332&rv.1.length_seconds=240&ad_logging_flag=1&rv.2.id=2f5hg3FlYc4

fmt_url_map=22|http://v15.lscache4.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cratebypass%2Coc%3AU0dWRVhNU19FSkNNNl9QR1dD&fexp=900023%2C901802&itag=22&ipbits=0&sver=3&ratebypass=yes&expire=1270825200&key=yt1&signature=428B55DAF445D856E5F8A704C91B635776474DC3.B807EF9FE3245923257F82EDCDDD2FB7EFC4CFAF&id=4c66f02fc912a449,


하지만.. 리눅스에서 wget으로는 다운로드 되지 않는다 OTL

$ wget "http://v15.lscache4.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cratebypass%2Coc%3AU0dWRVhNU19FSkNNNl9QR1dD&fexp=900023%2C901802&itag=22&ipbits=0&sver=3&ratebypass=yes&expire=1270825200&key=yt1&signature=428B55DAF445D856E5F8A704C91B635776474DC3.B807EF9FE3245923257F82EDCDDD2FB7EFC4CFAF&id=4c66f02fc912a449"
--17:55:02--  http://v15.lscache4.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cratebypass%2Coc%3AU0dWRVhNU19FSkNNNl9QR1dD&fexp=900023%2C901802&itag=22&ipbits=0&sver=3&ratebypass=yes&expire=1270825200&key=yt1&signature=428B55DAF445D856E5F8A704C91B635776474DC3.B807EF9FE3245923257F82EDCDDD2FB7EFC4CFAF&id=4c66f02fc912a449
Resolving v15.lscache4.c.youtube.com... 74.125.107.35
Connecting to v15.lscache4.c.youtube.com|74.125.107.35|:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
17:55:02 ERROR 403: Forbidden.


2010/02/26 - [프로그램 사용/유튜브 (youtube)] - 유튜브 파일 다운로드 하기(download youtube as file)

Posted by 구차니
XML_SetCharacterDataHandler() 함수는 prototype에서 보이는 대로
XML_char *s, int len 두개의 변수를 이용한다.

즉, 이 함수를 통해 받아들여지는 내용을 출력하기 위해서는
printf("%s",s); 가 아닌

for (int i = 0; i < len; i++) printf("%c",s[i]);
로 한글자씩 len에 맞게 출력을 해주어야 한다.

XML_SetCharacterDataHandler(XML_Parser p, XML_CharacterDataHandler charhndl)

typedef void (*XML_CharacterDataHandler)(void *userData, const XML_Char *s, int len);

Set a text handler. The string your handler receives is NOT zero terminated. You have to use the length argument to deal with the end of the string. A single block of contiguous text free of markup may still result in a sequence of calls to this handler. In other words, if you're searching for a pattern in the text, it may be split across calls to this handler.

[링크 : http://www.xml.com/pub/a/1999/09/expat/index.html?page=3#chardatahandler]

<media:description type='plain'>The funniest 6 minutes you will ever see! Remember how many of these you have done! Follow @ http://www.twitter.com/judsonlaipply Check my book out at http://www.mightaswelldance.com
http://www.theevolutionofdance.com -
for more info including song list!</media:description>

                        <media:description type="plain">
========== [4]
The funniest 6 minutes you will ever see! Remember how many of these you have done! Follow @ http://www.twitter.com/judsonlaipply Ch
eck my book out at http://www.mightaswelldance.com
========== [4]


========== [4]
http://www.theevolutionofdance.com -
========== [4]


========== [4]
for more info including song list!
                        </media:description>

그리고, 위에 보이듯이, 줄단위로 받아들이므로
단순하게 한번 복사하는 걸로는 충분하지 않아 보인다.(어떻게 할지 모호하면.. realloc 해주어야 하나..)

'프로그램 사용 > expat & XML' 카테고리의 다른 글

SAX (Simple API for XML)  (0) 2010.04.23
xml 트리 탐색 - XML tree navigation  (0) 2010.04.17
&amp; &lt; &gt; &quot; 는 머지?  (0) 2010.03.31
expat '간략한' 사용법  (0) 2010.03.28
expat-2.0.1 example  (11) 2010.03.23
Posted by 구차니
base는 웹상에서 RSS로 주어지는 URL
api는 gdata API 상에서 주어지는 URL 이다.

http://gdata.youtube.com/feeds/base/standardfeeds/
http://gdata.youtube.com/feeds/api/standardfeeds/

요녀석이 url중 api가 들어간 것의 내용(MiTeC XML Viwer)

요녀석이 url중 base가 들어간 것의 내용(MiTeC XML Viwer)


base는 각종 데이터가 웹형식이고
api는 XML 답게 데이터로 들어있다는 점이 다르다. expat 등으로 파싱을 위해서라면
api 에서 하는것이 좋을듯 하다.

2010/01/04 - [파일방] - MiTeC XML Viewer (Free!)

Posted by 구차니
Linux2010. 4. 8. 22:28
FC6 기준으로
/usr/share/doc/MAKEDEV-3.23/devices-2.6+.txt
파일이 존재하며

커널에서 상당부분 정해진 값으로 고정된 것으로 보인다.

type               major,minor

crw-r----- 1 root kmem   1,   1  4월  2 20:04 mem
crw-rw-rw- 1 root root   1,   3  4월  2 20:04 null
crw-r----- 1 root kmem   1,   4  4월  2 20:04 port
crw-rw-rw- 1 root root   1,   5  4월  2 20:04 zero
crw-rw-rw- 1 root root   1,   7  4월  2 20:04 full
crw-rw-rw- 1 root root   1,   8  4월  2 20:04 random
cr--r--r-- 1 root root   1,   9  4월  2 20:04 urandom
crw------- 1 root root   111  4월  2 20:04 kmsg
crw------- 1 root root   112  4월  2 20:04 oldmem

brw-r----- 1 root disk   1,   0  4월  2 20:04 ram0
brw-r----- 1 root disk   1,   1  4월  2 20:04 ram1
brw-r----- 1 root disk   1,   2  4월  2 20:04 ram2
brw-r----- 1 root disk   1,   3  4월  2 20:04 ram3
brw-r----- 1 root disk   1,   4  4월  2 20:04 ram4
brw-r----- 1 root disk   1,   5  4월  2 20:04 ram5
brw-r----- 1 root disk   1,   6  4월  2 20:04 ram6
brw-r----- 1 root disk   1,   7  4월  2 20:04 ram7
brw-r----- 1 root disk   1,   8  4월  2 20:04 ram8
brw-r----- 1 root disk   1,   9  4월  2 20:04 ram9
brw-r----- 1 root disk   110  4월  2 20:04 ram10
brw-r----- 1 root disk   111  4월  2 20:04 ram11
brw-r----- 1 root disk   112  4월  2 20:04 ram12
brw-r----- 1 root disk   113  4월  2 20:04 ram13
brw-r----- 1 root disk   114  4월  2 20:04 ram14
brw-r----- 1 root disk   115  4월  2 20:04 ram15

  1 char    Memory devices
          1 = /dev/mem        Physical memory access
          2 = /dev/kmem        Kernel virtual memory access
          3 = /dev/null        Null device
          4 = /dev/port        I/O port access
          5 = /dev/zero        Null byte source
          6 = /dev/core        OBSOLETE - replaced by /proc/kcore
          7 = /dev/full        Returns ENOSPC on write
          8 = /dev/random    Nondeterministic random number gen.
          9 = /dev/urandom    Faster, less secure random number gen.
         10 = /dev/aio        Asyncronous I/O notification interface
         11 = /dev/kmsg        Writes to this come out as printk's

  1 block    RAM disk
          0 = /dev/ram0        First RAM disk
          1 = /dev/ram1        Second RAM disk
            ...
        250 = /dev/initrd    Initial RAM disk {2.6}

이 파일을 열어보면 major, minor 별로 장치의 설명이 나와있다.

[링크 : http://unix.co.kr/bbs/board.php?bo_table=LSN_qa&wr_id=185207&page=]
Posted by 구차니
미.칠.듯.한.바.람.jpg

체력 저하로 여전히 63빌딩은 포기하고, 잠수교에서 돌아옴

예전의 그 잠수교가 아닌가?
예전에 갔었던 잠수교는 힘들어 뒈질뻔했는데 이제는 그리 힘들지는 않다.


잠실 종합운동장 에서 한장 쿡!
Posted by 구차니
cvs와 svn을 사용하면서 느끼는 점은, 우열을 가리긴 모호하다는 것이다.
cvs가 나은점도 있고, svn이 나은점도 있고,
이러한 모호함 때문에 일단 회사 개발소스는 cvs로 유지중이긴 하지만...


거두절미하고, svn은 cvs의 단점을 개선하기 위해 만들어진건데
가장 큰 변경사항은 svn에서 디렉토리 이동이 편해졌다는 점이다.
cvs은 특정 소스의 위치를 변경하거나, 하위 디렉토리의 위치를 변경하기 위해서는
소스를 새로운 곳에 새롭게 Add 하고 기존의 파일을 Delete 해야 해서
이력추적을 할 수 없게 되지만, svn에서는 이력추적이 가능해진다.


일단 사소한 것들을 고고싱 (기준은 CVS)

SVN의 장점

1. 디렉토리 이동이 편리함
    안정화된 프로젝트라면 상관없지만, 프로젝트 초기에는 디렉토리 이동이나 파일 삭제/이름 변경이 빈번한데
    cvs는 이러한 이력을 남길수가 없기 때문에, 초기 프로젝트 셋업시에는 svn이 매우 편리함.
    (이동도 편리하지만, 그에 비해 이력이 따라와서 과거의 변경점이 유지 된다는 부가적인 장점)

2. 오프라인 사용이 용이함
    확실하게 어느정도까지 오프라인 사용이 가능한지는 모호하지만, 최소한 마지막 버전과 Diff가 가능하다.
    cvs에서는 항상 서버와 비교를 하기 때문에 소스 변경사항이 있는건 알아도
    어떤 내용이 서버와 차이가 있는지 알수 없지만, svn 에서는 오프라인에서도 diff가 가능함
    (svn 자체적으로 데이터를 유지하고 있음 = 받는 측 용량 부담 증가)

3. 서버 하드공간이 절약
    cvs을 cvs2svn으로 변환해본 결과 대략 25% 이상의 공간이 절약됨
    초기 업로드는 원본으로 올리지만, diff 내용들을 gzip으로 압축하므로 서버 공간 요구량이 줄어듦
    2009/05/11 - SVN과 CVS 저장소 용량비교(compare Repository Size of CVS & SVN)

4. 커밋마다 revision이 올라감
    하나의 변동사항이나, 복수의 파일을 한번에 commit 하면 revision이 변동되고,
    프로젝트 전반적인 변동사항을 추적하기 편리함.
    cvs는 파일단위 revision이기 때문에 프로젝트 전체의 변동이나
    "어떤 파일이 변경되기 이전 시점"으로 롤백하기 매우 난해하나
    svn에서는 commit 단위로 revision이 붙으므로, 잘못 commit 하더라도 복구가 용이함
    (부가적으로 cvs에 비해서 프로젝트 전반적인 변경의 흐름을 읽기 쉬움)

5. atomic commit
    atomic 은 DB에서 하나의 행동의 묶음이 완결되지 않으면 수행되지 않은것으로 복구가 되는 것을 의미하는데
    cvs에서 아무생각없이 commit에서 변동사항들을 본다고 하다가 commit 눌러 올려서 도중에 cancel 했지만
    몇개는 변경되어 난감한 상황을 겪어봤다면 이 녀석의 유용함을 깨달을 수 있다.



SVN 단점

1. 서버 구성이 괴랄하다
    무슨 svn 제대로 쓰려면 apache까지 깔아야 해?
    로그를 남기기 위해서는 svn 자체적으로는 로그가 안남으므로 apache의 로그나 인증을 이용해야 함.
    관리자 측면에서 로그가 남지않는다는건.. 좀 불안해진다.
    (머...... 사용자는 서버 관리자의 고충은 알바없지?)

2. tag 관리가 밋밋함
   너무 많은 자유는 없는것과 다름 없다지만.. svn의 표준(?) repository는 아래와 같이 구성한다.
   2009/05/11 - SVN repository 구조

   개별 프로젝트 별로 trunk / branches / tag를 관리하고
   tagging을 위해서 전체 프로젝트를 tag 하위 디렉토리로 tag 번호를 붙여 복사해주면 된다.
   어쩌면 매우 간편하지만, cvs의 정말 꼬리표를 붙인다는 작업에 비하면 아쉬운 면이 있다.
   cvs에서는 tagging을 하려면 서버와 local의 내용이 동일해야 하고, tagging시 변동 파일이 하나라도 있으면 붙일수 없어
   업데이트 되지 않는 파일이 있는지 빼먹지 않을수 있는 여지가 있지만, svn은 서버에서 클라이언트를 보지 않고
   작업이 가능해지므로 업데이트 되지 않은(혹은 누구가 그 순간 올린 내용까지) 부분이 빼먹거나 더 들어갈수 있다.
   개인 취향이겠지만, tag는 cvs의 약간은 딱딱하고 붙이는 맛이 있는 것이 좋다고 생각한다.

3. repository 구성의 모호함
   repository는 위와 같이 구성하려면 svn 사용자는 /calc /paint 두개의 repository를 기억해야 한다.
   commit 별로 revision이 증가하는 장점의 역효과로서, 단일 프로젝트레 단일 repository를 보장해주어야 제 힘을 발휘한다.
   서로 연관이 있는 두개의 프로젝트라고 하더라도 되도록이면 프로젝트를 분리하는 것이 좋다.
   (현재까진 상위 디렉토리의 목록을 (= 프로젝트 목록) 얻어내는 법을 모르겠다.)

   /home/svn을 만들고
   /home/svn/calc 에 create repository
   /home/svn/paint 에 create repository 를 하고
   svn에서는 /home/svn/calc , /home/svn/paint가 있음을 외우고 써야한다.
   (/home/svn에 접속하면 리파지터리를 알 수 없으므로 에러가 발생한다.)


'프로그램 사용 > Version Control' 카테고리의 다른 글

cvs2svn 사용방법 2  (0) 2010.04.23
svn / svnadmin 도움말  (0) 2010.04.23
GIT는 리눅스에서 받으시는걸 추천합니다.  (0) 2010.03.18
TortoiseGIT  (0) 2010.03.18
SVN repository 어떻게 구성하지?  (2) 2010.03.08
Posted by 구차니
Microsoft/Visual Studio2010. 4. 6. 22:44
Microsoft/Visual Studio2010. 4. 6. 22:34
mciSendString() 은 인터프리터 방식의 고수준 함수이다.
머.. 딱히 써볼일은 없을지도 모르지만, 아무튼 이녀석 하나로 명령어만 안다면
온갖 멀티미디어 조작 및 정보를 얻어올수 있다.

play cdaudio (cd 재생시작)
pause cdaudio (cd 재생 일시정지)
stop cdaudio  (cd 재생멈춤)

[참고 : 찰스 페졸드의 Programming Windows 5th Ed.]

[링크 : http://msdn.microsoft.com/en-us/library/dd757161%28VS.85%29.aspx] 함수
    [링크 : http://msdn.microsoft.com/en-us/library/dd743572%28v=VS.85%29.aspx] 명령어
Posted by 구차니


Welcome to CMake, the cross-platform, open-source build system. CMake is a family of tools designed to build, test and package software. CMake is used to control the software compilation process using simple platform and compiler independent configuration files. CMake generates native makefiles and workspaces that can be used in the compiler environment of your choice.

[링크 : http://www.cmake.org/]

oscam을 컴파이르 하는데 cmake 라는것을 요구하길래 먼가해서 검색해 봤더니
cross platform을 지원하는 make 라고 한다.

사용법은
cmake
make 라는데

configure 와 유사한 역활을 하는것으로 보인다.

'프로그램 사용 > make, configure' 카테고리의 다른 글

cmake 사용  (0) 2011.10.07
cross compile 초기화 하기  (0) 2010.05.18
makefile 에서 컴파일할 목록 생성하기  (0) 2010.04.03
makefile 정렬하기  (2) 2010.03.31
make, gmake  (0) 2010.03.02
Posted by 구차니
회사일2010. 4. 6. 12:02
음.. 대세는 trac 과 svn인가..

[링크 : http://streamboard.gmc.to:8001/]
[링크 : http://oscam.ump2002.net/]
    [링크 : http://oscam.ump2002.net/svn/oscam/]

'회사일' 카테고리의 다른 글

openDNS  (0) 2010.05.12
SH4 관련 정보  (0) 2010.05.03
VLC 1.0.5 반전!  (2) 2010.03.11
인증서 복사하기  (0) 2010.03.04
H.26x MPEG2, MPEG4  (6) 2010.01.19
Posted by 구차니