2008년 8월 18일 월요일

MKV파일 인코딩 쉽게 하기 - 1

MKV파일 인코딩 더 이상 어렵지 않다.
MeGUI, AutoMKV 로 나만의 x264파일 만들어 보자!

요즘 웹 서핑을 하다보면 MKV포맷으로 인코딩된 (사실 x264코덱으로 인코딩 되었는데 MKV라는 컨테이너에 넣었을 뿐입니다.) 동영상자료들을 많이 접 할 수가 있습니다. 몇년전까지만 해도 XviD코덱으로 인코딩된 AVI 동영상 자료들이 대세였지만 요즘들이 그 인기가 점점 x264한테 밀리고 있는것만은 사실입니다.

특히나 요즘들은 BD,HD 등등 고화질 영상물들이 제작되거나 방송이 되어지면서 더욱 깨끗한 영상물 보존에 대한 요구가 가일층 높아졌습니다. 예전에 저화질 동영상과 대비하여 요즘 HD영상물들은 모두 1080p/1080i 등 화질로 HD만의 특유한 질을 자랑하고 있지만 반면 이런 영상물들은 대체적으로 파일 크기가 어마어마 하여 HDD에 이런 자료들은 마음껏 저장하기란 쉽지가 않습니다. 보통 이런 영상물들은 3분짜리 파일 하나당 400MB가 훨씬 넘어가는바 HDD용량에 부담이 되지 않을 수가 없습니다.

그렇다면 이런 영상물을 그냥 이런 상태로 소장해야만 할가요?! 대답은 아닙니다.^^ 영상압축기술을 사용하면 우리가 원하는 영상을 우리가 원하는 압축 알고리즘에 따라 적절히 압축하여 두고두고 즐길 수가 있습니다.

자 그럼 약간 기술적인 얘기로 들어가겠습니다.
우리가 보통 접할 수 있는 영상물들은 보통 이미 AVI로 압축된 되어진 "손실된 영상물" 입니다. KMP같은 플레이어이로 파일 정보를 살펴보면 해당 파일의 구체적인 INFO들이 뜹니다. 그럼 함 살펴볼가요?

사용자 삽입 이미지










사용자 삽입 이미지

위 파일은 AVI가 아닌 제가 스스로 압축한 MKV파일 입니다.
여기서 몇가지 개념들은 집고 넘어갑시다.
일단은 General부터 살펴보도록 하겠습니다.

GENERAL
Format: 영상포맷 즉 영상물이 실제 담겨진 컨테이너가 무엇인지를 나타냅니다.
Overall bit rate: 비디오 + 오디오 의 비트 레이트입니다.
Writing Application과 Writiing Library는 각각 해당 비디오를 인코딩 하는데 사용이 되어진 응용 프로그램과 라이브러리입니다.

다음은 VIDEO 항목을 살펴봅시다.

VIDEO
Format: 압축된 비디오 포맷입니다.
Bit rate: 실제 비디오 비트 레이트입니다.
Norminal bit rate: 정규화된 비디어 비트 레이트입니다.(일반적으로 사용자가 지정함)
Width: 비디오 가로 넓이
Height: 비디오 세로 높이
Display aspect ratio: 넓이 대 높이 비율
Frame rate: 초당 플레이어 하는 프레임갯수

다음은 AUDIO 항목을 살펴봅시다.

AUDIO
Format: 압축된 오디오 포맷입니다.
Bit rate: 실제 오디오 비트 레이트입니다.

오늘은 일단 여기까지만 올릴게요. 금후 MKV영상을 제작하기 위하여 필요한 개념만 살짝 잡아보았습니다. 실제 MKV영상뿐만아니라 다른 영상을 제작할때도 필요한 개념들이죠.

2008년 3월 8일 토요일

Windows Vista Ultimate Fancy 2008

Windows Vista Ultimate Fancy 2008

사용자 삽입 이미지

첨엔 Windows Vista Ultimate 이라니 일반 Vista 릴리즈 버젼 인가고 착각했다.
릴리즈 정보를 쭉 살펴보고나서 Vista + XP 의 짬뽕 버젼임을 알았다.

Type : Application
Image Type : Standard ISO
Size : 2.45GB
Version : 2008 (2007 버젼도 있는 건가?! 찾기 귀차니즘... ㅡㅡ;;;)

Note : If You installed the previous Windows Xp using Ghost....First Zero Format your Hard Drive....For Others Install in a separate Partition or install as a Fresh Copy....You Cannot upgrade if your windows version is older than this windows Vista Fancy.

노트 : Ghost를 이용하여 이전 버젼의 XP를 설치하였으면 하드 디스크를 포맷시켜라냥. 위 경우가 아니라면 다른 파티션에 순정버젼을 설치하라냥. 너의 윈도우 버젼이 Vista Fancy 보다 이전 버젼이면 업데이트 불가다냥...

This operating System is designed from Genuine Windows Xp and Windows Vista By Benjamin Samson. This OS will be more stable than other operating systems. It Supports all new version softwares and Hardwares. Integrated All new latest hotfixes. It will be Very faster in doing any tasks which you will give in a fraction of seconds....Enjoy Using Windows Vista Ultimate Fancy 2008.

이 운영체제는 정품 윈도우 XP와 윈도우 Vista 에서 유래되여 만들어진 것이며 저작자는 Benjamin Samson(벤자민 삼손인가? 이름이 웬지...)
이 OS는 다른 OS보다 더 안정적이다.(이건 뻥인지 먼지 모르겠는데, 진짜라면 마소는 멀먹고 살란가?) 또한 이 OS는 모든 새버젼의 소프트웨어와 하드웨어들을 지원한다. 또한 모든 새 버젼의 핫픽스들을 통합하였다.(아마도 XP를 바탕으로 했으니 XP hotfix겠지?!)

일단 용량의 압박이... 아무리 Vista XP 짬뽕이라고 해도 그렇지... 2.45 GB라... ㄷㄷㄷ
다운을 받으려 했더니 20개나 되는 분할 패키지...ㅜㅜ
포기하고 걍 토런트 파일을 찾아보니 꽤 많이 나와있네..ㅎㅎ
영문 윈도우를 즐겨 쓰는편인데 Vista는 좀 무겁고 그렇다고 XP는 UI가 많이 허술하여 쓰기가 싫다.. 이참에 메몰두 2GB로 업한지라, 트윅된 XP에 비스타 UI를 통합시키니 너무 좋다.ㅎㅎ (어쩜 나같은 사람이 많나부다.)

오투플레이 선택화면

사용자 삽입 이미지

2008년 3월 5일 수요일

pspbtcnf.bin 편집기 NewBTCNFEdit 릴리즈!

pspbtcnf.bin 모듈 로더 파일 편집기 NewBTCNFEdit

pspbtcnf.bin파일을 임의로 커스터마이징 할 수 있는 툴이 나왔습니다.
3.80, 3.90에서는 합당한 툴이 없어가지고 필요한 모듈들 (스크린샷 캡쳐, 리커버리 메뉴등등)을 플러그인 형식으로 로딩하였었는데 메몰스틱이 여러개면 메몰스틱마다 이런 모듈파일들을 집어 넣어야 하는 번거로움이 있었습니다.

낸드에 불필요한 파일들을 정리하고 자신한테 꼭 필요한 모듈들을 아예 낸드에 집어넣고 부팅시 로딩하게끔 하면 아주 편하겠죠?! ㅎㅎ

정펌 3.50 이전 펌웨어에서는 pspbtcnf 파일을 암호화 시키지 않고 그대로 (txt포맷일겁니다.) 풀어놓은 상태였는데 3.50 부터는 pspbtcnf.bin 이 도입되면서 pspbt관련 파일을 수정하기가 많이 어려워진 상태입니다.

이에 많은 분들은 핵사에디터 신공을 발휘하여 pspbtcnf.bin 파일을 편집하곤 했지만 여간 불편하지 않습니다.

ZiNgA BuRgA의 PSPBT Editor나  Takeshi의 pspbtcnf.bin editor를 이용하여 3.80 이전 펌웨어서도 디크립트된 pspbt*파일들을 읽어서 편집을 했었는데 3.80, 3.90으로 펌이 업되면서 편집불가능 하였습니다.

이러던 참에 FreePlay가 3.80, 3.90의 pspbt* 파일들을 편집할 수 있는 새로운 툴 BTCNFEdit를 릴리즈 했네요.

아래에 그럼 스크린샷 플러그인을 모듈로 추가하는 것을 예로 그 사용법을 설명드릴가 합니다.

pspbtjnf.bin 파일을 낸드에서 복사하여 NewBTCNFEdit 와 같은 폴더에 위치시킵니다.
콘솔을 띠워 NewBTCNFEdit 폴더에 이동합니다.

콘솔창에 아래 명령어를 입력하여 pspbtjnf.bin 파일에서 pspbtcnf.txt를 추출 해냅니다.

btcnf pspbtjnf.bin -e

pspbtcnf.bin 파일용으로 만들어 졌는지라 추출하면 pspbtjnf.bin을 추출해도 pspbtcnf.txt 파일이 생깁니다. 머 다소 불편은 하지만 그래도 사용할 수 있다는게 어딥니까?

다음 추출된 pspbtcnf.txt 파일을 편집합니다.
추가할 모듈 경로를 마지막 라인에 추가하고 뒤에 어느 모드에서 활성화 할건지를 입력해준다.
모드는 모두 5가지 인데 VSH, Game, Updater, POPS, App 입니다. 그런데 저런식으로 쓰면 길어지니 각각 V, G, U, P, A 이런식으로 써주면 됩니다.
저는 $/kd/screen.prx GUPA 이런식으로 추가를 했습니다. 즉 VSH를 제외한 모든 모드에서 모두 사용하도록 활성화 시켰죠.

사용자 삽입 이미지

마지막으로 아래 명령어를 입력하여 편집된 pspbtcnf.txt 파일을 다시 pspbtjnf.bin으로 압축합니다.

btcnf pspbtjnf.bin -b

그러면 pspbtjnf.bin.new 라는 파일이 생기는데 이것을 pspbtjnf.bin으로 이름을 변경하여 kd폴더에 넣으면 됩니다.

사용자 삽입 이미지

출처: http://forums.qj.net/f-psp-development-forum-11/t-release-newbtcnfedit-136210.html
다운로드 주소: http://dl.qj.net/index.php?pg=12&fid=16140&catid=151

2008년 3월 4일 화요일

2008년 3월 3일 월요일

Crayon Physics Deluxe



타블릿이라도 있으면 해볼려만...ㅜㅜ

DWR 사용시 Session 값 얻기

DWR 사용중 Session 객체 얻기

Java로 웹프로그래밍 하다보면 Session값을 가끔식 필요로 할 때가 있습니다.
일반적인 경우에는 doPost나 doGet 메소드를 구현함으로써 쉽게 Session값을 얻을 수가 있습니다.

HttpSession session = request.getSession();

보통 위 같은 방식으로 session을 많이 얻어옵니다.
하지만 DWR를 사용할 경우 어떤 방식으로 session값을 얻어올가요?
결국 request 인스턴스만 가질수 있으면 session은 쉽게 얻을 수 있지 말입니다.

DWR 샘플들을 살펴보던중 WebContext 라는 클래스를 알게 되었습니다.
사실 DWR를 이용하여 JS에서 Java 메소드를 콜할시 결국 request를 보내게 됩니다.
이 request를 얻을려면 별도로 webContext라는 인스턴스를 얻어야만 하는데
WebContextFactory.get() 로 쉽게 얻을 수가 있습니다.

WebContext wctx = WebContextFactory.get();
HttpServletRequest request = wctx.getHttpServletRequest();
HttpSession session = request.getSession();

이것땜에 반나절 삽질을 했네요.ㅜㅜ

2008년 1월 27일 일요일

OSGi를 위한 Spring Dynamic Modules 릴리즈

OSGi를 위한 Spring Dynamic Modules 릴리즈 되었네요.

OSGi ... 예전 모바일 자바에서 많이 들었었던 용어인데, 이렇게 Spring에서까지 언급이 되어지니 다시금 자료를 찾아보는 시간을 갖게 만드네요.
OSGi : Open Service Gateway Initiative 약자로써 "가전제품이나 보안시스템 등의 장치들을 인터넷에 접속하는 표준방식에 관한 산업계의 계획입니다" 라고 정의 되어있기는 하지만 저는 단순히 기존에 서비스를 서버에서 내리지 않고도 실시간으로 설정파일에 대한 변경사항을 시스템에 적용시켜줄 수 있는 일종의 메커니즘이라고 생각합니다.

Spring 공식 웹사이트에서 읽어본데 의하면
"이런방식(OSGi 방식)으로 쓰여진 코드는 각 모듈에 대한 분리를 더 철처히 할 수 있도록 하며 또한 작동중인 시스템에 동적으로 모듈을 추가, 삭제, 업뎃 할 수 있게끔 한다. 이를 제외하고도 동시에 여러버전의 모듈을 디플로이 해주는 기능을 갖고 있다." 라고 하네요.

한마디로 여러모듈로 이루어진 F/W상에서 실시간으로 또는 동적으로 필요한 모듈을 올리고 내릴수 있다고 보면  될것 같습니다.
 
아직까지는 버젼이 1.0 이라 직접 프로젝트에 투입하여 사용하기는 시기상조라는 느낌이 들긴 하지만 지금까지 프로젝트를 해오면서 이런 기능들을 제공해주는 먼가가 있지 않을가 하는 생각도 많이 하게 되었습니다. 결국 OSGi (예전에도 많이 들어왔던 개념) 에 대한 Spring Dynamic Modules의 릴리즈로 이 모든 것이 가능 하게 되겠군요.

Spring DM 1.0 다운로드 링크
Spring DM 1.0 참고문서
Spring DM 1.0 JavaDOC
Spring DM 1.0 샘플 서비스들

2008년 1월 8일 화요일

Projection 설정시 결과를 Entity로 리턴받기

Critera에서 받아온 데이타를 자동으로 POJO에 매핑시켜 봅니다.

NativeSQL이나 HQL이나 모두 데이타를 쿼리하여 가져올수 있지만 조건에 따라 복잡한 쿼리문은 Criteria 로 작성하는것이 더욱 직관적이고 이해가 쉽습니다.

하지만 단일 테이블이 아닌 연관 테이블일 경우 (*)를 이용하여 전체 필드의 값을 쿼리해 오는것은 오버헤드가 많이 걸립니다. 그래서 업무에서는 페이지에 필수로 표시시켜줄 몇가지 항목들만 쿼리문속에 Projection을 이용하여 쿼리를 하게 됩니다.

하지만 Criteria를 사용하여본 분들은 알수 있겠지만 단순히 Projection 만 세팅하게 되면 디비에서 Fetch한 데이타를 Object 배열을 통하여 리턴하게 됩니다. 사실 Projection 설정시 순서만 정확히 설정해주고 Object 배열속의 데이타를 그 순서에 따라 View에 표시시켜주면 그뿐이지만 좀 특수한 데이타 타입일 경우 (예하면 Date 타입)에는 원하는 타입으로 정확히 매핑을 시켜주지 않습니다.

하이버넷 매뉴얼을 읽어보는던중 우연히 위 문제를 해결할수 있는 절묘한 방법을 찾을수 있었습니다.

또한 Criteria의 ResultTransformer 가 PassThroughResultTransformer로 변환되므로 결과치는 우리가 원하는 결과하고 많이 차이가 날수 있습니다. 그래서 궁극적으로 c.setResultTransformer(new AliasToBeanResultTransformer()); 이 문구를 이용하여 리턴받을 List속의 인스턴스는 개개의 Entity라고 명시를 해주어야 합니다. (seResultTransformer를 이용하여 세팅을 해주지 않으면 Object[] 로 결과를 리턴하게 됩니다.)
실제 사용되는 예제코드를 첨부합니다.

  ProjectionList projList = Projections.projectionList();
  projList.add(Projections.property("i.sqEmlrcv"), "sqEmlrcv");
  projList.add(Projections.property("o.name"), "name");
  projList.add(Projections.property("i.emlRcpnt"), "emlRcpnt");
  projList.add(Projections.property("s.dtReg"), "dtReg");
  projList.add(Projections.property("i.stSendI"), "stSendI");
  projList.add(Projections.property("i.cdEmlerr"), "cdEmlerr");
  projList.add(Projections.property("i.onRcpt"), "onRcpt");
  projList.add(Projections.property("i.onReply"), "onReply");
  cri.setProjection(projList);

  cri.setResultTransformer(new AliasToBeanResultTransformer(SentMailV.class));

2008년 1월 3일 목요일

그래픽 드라이버를 업그레드하여 3D, 재생 효과 높히기

단순한 그래픽카드 업그레드만으로 3D, 재생 효과를 높힐수 있습니다.

무언가 그래픽 카드의 성능때문에 잘 안된다거나, 게임 도중에 프레임이 저하 된다거나 하는 경험을 해보신 분이라면 질 좋은 비디오 드라이버와 자신의 컴퓨터 환경에 맞는 최적화가 제법 많은 변화를 가져온다는 것을 아실 것입니다.
그래도 저도 함 저의 컴터에 새로운 그래픽 드라이버를 마춰 보았습니다.

http://www.tweakforce.com/ 사이트에 접근하여 최신버젼의 그래픽 드라이버를 다운로드 받았습니다. 저의 그래픽카드는 NVIDIA GeForce 8400M GT 였으므로 Xtreme-G Mobile nVidia Drivers 이 카테고리속의 Vista 32용 Xtreme-G Mobile 163.67 Vista 32bit 이 파일을 다운로드 받았습니다.

아래 스크린샷은 드라이버 업그레드후 찍은 겁니다.
그래픽이 5.8 -> 5.9로
게임 그래픽이 5.1-> 5.3 으로 업그레드 되어있네요.^^
나름 만족해 하면서 쓰고 있습죠.ㅎㅎ

사용자 삽입 이미지