티스토리 툴바


상식 2010/08/08 20:37

모토로이를 위한 동영상 화질 테스트

원본동영상.

1)  Miss A의 Bad Girl Good Girl MV: 293,611,652 Byte,  MPEG4 xvid, vbr(overall bit rate: 10.2Mbps), 23.976 fps, 3m 49s, 1920 x 1080

2) Miss A의 TV 방송: 704,118,280 Byte, MPEG2 TS, vbr(overall bit rate: 19.9Mbps), 29.970 fps, 4m 42s, 1920 x 1080

영상을 확인해보면, 빠른 움직임의 경우, ts파일은 뭄개져 있는 것을 볼 수 있습니다. 
원본소스 파일들은 다른 곳에서 받았습니다. 

이제 다음팟을 이용해서 인코딩을 해봤습니다. 
하단의 인코딩 옵션에서 모토로라-모토로이/모토글램 고화질을 선택하고,
MPEG-4 video 옵션은 MPEG-4 AVC/H.264로 변경,
[1PASS-VBR] 비디오 품질을 기준으로 인코딩으로 변경했습니다. 
그리고 비디오 품질을 50 -> 100 으로 5씩 키워가면서 변경했습니다. 
아, 비디오 품질은 인코딩 속도와 별로 관련이 없는것 같았고, 주로 소스의 크기에 따라 인코딩 속도가 달라지는 것 같습니다. 

비디오 품질 50, 60, 70, 80, 90, 100으로 인코딩할 파일들을 모토로이에 넣고 테스트해봤는데, 비디오 품질 100으로 인코딩한 파일은 '파일이 표시되거나 재생될수 없습니다'라고 표시되며 재생되지 않았으며, 나머지 파일들은 무난하게 재생되었습니다. 경우에 따라서 음성에 비해 영상 딜레이가 생기더군요. 

인코딩된 크기와 평균 비트레이트를 확인해보면, 

파일 크기를 그래프로 보면, 다음과 같습니다.
그래프가 뭔가 깔끔하지 않네요.

어쨌든 뭔가 캡쳐해서 보여드리고 싶었지만, 포토샵이 맘같이 되지 않아 집어치웠습니다.

그냥 모토로이에서 재생하는 화면을 찍어보았는데, 별로 쓸모없는 것 같군요.
아래껀 아마 비디오품질 50
이 아래껀 아마 비디오품질 60.

그냥 결론을 내려야 겠습니다.

비디오품질 50이나 55에서는 깍두기가 좀 보였지만, 비디오품질 60부터는 크게 구분할 수 없었습니다. 60~65정도로 설정하면 될 것 같습니다. 

다음팟인코더의 아이폰 인코딩 옵션은 h.264에 비디오품질 65, 프레임 30으로 되어있어 참고가 될 것 같습니다. 

결론은 x.264, 720x400, 비디오 품질 6524프레임 또는 30프레임~
24프레임과 30프레임으로 인코딩해서 모토로이에서 확인했는데, 구분을 할 수 없어서 그냥 24프레임으로 인코딩해도 될 것 같은데, 인코딩해보니 사실 용량 차이가 생각보다 크지 않기 때문에 그냥 30프레임으로 인코딩해도 될 것 같습니다. 느낌상 부드러운? 해보니 24프레임 영상의 용량은 30프레임 영상에 비해 90%정도였습니다.)

하지만 가장 중요한 건 원본 동영상의 품질... 720p보다 큰 동영상이어야 모토로이의 화질을 제대로 활용할 수 있을 듯. 

모토로이 화면 해상도는 854x480 인데, 다음팟인코더 모토로이 고화질의 기본 크기가 720x400되있죠. 한번 854x480으로 인코딩을 해보니 파일크기가 많이 커지더군요ㅋ
저작자 표시
Android 2010/05/24 00:44

android Dev Guide-안드로이드란 무엇인가?

http://developer.android.com/guide/basics/what-is-android.html
제멋대로의 해석입니다. 

안드로이드란 무엇인가?
안드로이드는 모바일 기기를 위한 OS, 미들웨어 및 핵심 소프트웨어에 이르는 단계별 소프트웨어들입니다. Android SDK는 자바 프로그래밍 언어를 사용하여 안드로이드 플랫폼에서 앱 개발을 시작하기 위해 필수적인 도구와 API를 제공합니다.

특징
- Application framework: 컴포넌트의 재사용 및 교체를 가능하게 합니다.
- Dalvik virtual machine: 모바일 기기를 위해 최적화되어 있습니다. 
- Integrated browser: 오픈소스 웹킷 엔진에 기반하고 있습니다.
- Optimized graphics: 커스텀 2D그래픽과 OpenGL ES 1.0 명세를 기반으로 하는 3D 그래픽을 제공합니다.(하드웨어 가속은 옵션입니다)
- SQLite: 구조적 데이터 저장소입니다.
- Media support: MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF
- GSM 전화(하드웨어 의존적)
- Bluetooth, EDGE, 3G, WiFi(하드웨어 의존적)
- Camera, GPS, 나침반, 가속도측정기(하드웨어 의존적)
- 풍부한 개발 환경: 기기 에뮬레이터, 디버깅을 위한 도구, 메모리 및 성능 측정도구, 이클립스를 위한 플러그인

안드로이드 아키텍쳐
다음 다이어그램은 안드로이드 OS의 주요 구성요소를 보여주고 있습니다.

[Applications]
안드로이드에는 이메일 클라이언트, SMS 프로그램, 달력, 지도, 브라우저, 연락처 등의 핵심 앱들이 포함됩니다.(ship with 해석하려다 포기) 모든 앱은 자바로 작성됩니다.

[Application Framework]
개방형 개발 플랫폼을 제공함으로써, Android는 개발자들이 풍부하고 혁신적인 앱을 개발할 수 있도록 합니다.  개발자들은 무료로 하드웨어의 이점을 취하고, 위치 정보에 접근하고, 백그라운드 서비스를 돌리고, 상태바에 알림을 더하고, 그밦에 무지무지 많은 일을 할 수 있습니다. 

개발자들은 핵심 앱에서 사용된 것과 동일한 프레임웍 API에 완전하게 접근할 수 있습니다. 앱 아키텍쳐는 구성요소를 간단하게 재사용할 수 있도록 설계되었는데, 어떤 앱이라도 그 기능을 배포하고, 다른 어떤 앱이 그 기능을 사용할 수 있습니다(프레임웍에 의해 강제되는 보안 제약사항의 적용을 받습니다). 같은 매커니즘으로 사용자는 컴포넌트를 교체할 수 있습니다. 

모든 기반 앱들은 서비스와 시스템의 집합이고, 그 서비스와 시스템에는 다음과 같은 것들이 있습니다. 
-  View들의 풍부하고 확장성있는 집합. 이 View에는 목록 List, 격자 Grid, 글상자 Text box, 단추 Button, 심지어 내장할 수 있는 웹브라우저도 있는데, 당연히 앱을 만들때 사용합니다.
- Content Providers를 사용하여 연락처 Contacts와 같은 다른 앱의 데이터에 접근할 수 있으며, 스스로의 데이터를 공유할 수 있습니다. 
- Resource Manager는 지역별 문자열, 그래픽, 배치 Layout 파일과 같은 비코드 non-code 데이터에 대한 접근을 제공합니다. 
- Notification Manager를 통해서 앱들은 상태바에 사용자정의 경고 custom alert을 표시할 수있습니다. 
- Activity Manager는 앱들의 생명주기 Lifecycle을 관리하며, 'common navigation backstack(이게 뭐임, 일단 패스)'을 제공합니다. 

더 자세히 알고 싶으면, 이 예제를 보아주세요. Notepad Tutorial.(일단 패스)

[Libraries]
안드로이드에는 다수의 C/C++ 라이브러리가 포함되어 있으며, 안드로이드 시스템의 다양한 요소요소에 사용되고 있습니다. 이 기능들은 안드로이드 프레임웍을 통해 개발자들에게 공개되어 있습니다. 그 핵심 라이브러리들은 다음과 같습니다.
- 시스템 C 라이브러리: BSD계열의 표준 C 시스템 라이브러리구현(libc), 임베디드 리눅스 기반 기기를 위해 손보았음.
- 미디어 라이브러리: PacketVideo의 OpenCore에 기반. 정적인 이미지파일과 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG와 같은 많이 사용되는 다수의 오디오 및 비디오 포맷의 재생과 기록을 지원
- Surface Manager: 디스플레이 하부 시스템에 대한 접근을 관리하고, 다수 앱들의 2D와 3D 그래픽 레이어들을 통합해줌(seamlessly composites)
- LibWebCore: Android 브라우저와 내장형 웹 뷰를 작동시키는 현대적인 웹브라우저 엔진
- SGL: 기반 2D 그래픽 엔진
- 3D 라이브러리: OpenGL 1.0 API 기반 구현. 하드웨어 3D 가속기 또는  최적회된 3D 소프트웨어 rasterizer(Raster 이미지는 비트맵이미지를 말하는데, 3D를 비트맵 이미지로 그려주는 역할)
- FreeType:  비트맵과 벡터 폰트 렌더링
- SQLite: 모든 앱에서 사용할 수 있는 강력하고 가벼운 관계형 데이터베이스 엔진

[Android Runtime]
안드로이드에는 다수의 핵심 라이브러리들이 포함되어, 자바 프로그래밍 언어의 핵심 라이브러리에서 가능한 대부분의 기능성을 제공합니다.(???)

모든 안드로이드 앱은 고유의 프로세스로 동작하며, 각각의 Dalvik 가상머신 Instance를 사용합니다. Dalvik은 기기가 다수의 VM들을 효과적으로 실행할 수 있도록 작성되었습니다. Dalvik VM은 Dalvik Executable(.dex) 포맷으로 작성된 파일을 실행하며, 최소한의 메모리 공간(memory footprint)만을 사용하도록 최적화되어 있음.VM은 레지서터 기반이며, 자바 언어 컴파일러에 의해 컴파일되고 포함된 "dx" 도구에 의해 .dex 포맷으로 변환된 클래스를 실행합니다.(The VM is register-based, and runs classes compiled by a Java language compiler that have been transformed into the .dex format by the included "dx" tool. - 제대로 해석했는지 모르겠습니다.)

Dalvik VM의 threading과 저수준 메모리 관리와 같은 기반 기능들은 Linux 커널에 의존하고 있습니다. 

[Linux Kernel]
안드로이드는 보안, 메모리관리, 프로시스 관리, 네트워크 스택, 드리이버 모델과 같은 핵심 시스템 서비스에 있어서 Linux 버전 2.6에 의존하고 있습니다. 커널은 또한 하드웨어와 나머지 소프트웨어 단계들 사이에서 추상 계층으로써 동작합니다. 

...
아 어렵네요. 
아 어렵다 어려워...
저작자 표시
C 2010/01/31 16:26

[C++ Primer Plus] CH 3. Dealing with data

3장부터는 좀 속도를 내기로 했습니다.

우선 정수 형식에 대한 코드입니다.
실행해보면,
1:2
2:4
3:8
4:16
5:32
6:64
7:128
8:256
9:512
10:1024
11:2048
12:4096
13:8192
14:16384
15:32768
16:65536
17:131072
18:262144
19:524288
20:1048576
21:2097152
22:4194304
23:8388608
24:16777216
25:33554432
26:67108864
27:134217728
28:268435456
29:536870912
30:1073741824
31:2147483648
32:4294967296
33:8589934592
34:17179869184
35:34359738368
36:68719476736
37:137438953472
38:274877906944
39:549755813888
40:1099511627776
41:2199023255552
42:4398046511104
43:8796093022208
44:17592186044416
45:35184372088832
46:70368744177664
47:140737488355328
48:281474976710656
49:562949953421312
50:1125899906842624
51:2251799813685248
52:4503599627370496
53:9007199254740992
54:18014398509481984
55:36028797018963968
56:72057594037927936
57:144115188075855872
58:288230376151711744
59:576460752303423488
60:1152921504606846976
61:2305843009213693952
62:4611686018427387904
63:9223372036854775808
64:0

Signed Integer Type
short values can be -32768~32767 (2 bytes)
int values can be -2147483648~2147483647 (4 bytes)
long values can be -9223372036854775808~9223372036854775807 (8 bytes)

Unsigned Integer Type
unsinged short value can be 0~65535 (2 bytes)
unsigned int value can be 0~4294967295 (4 bytes)
unsigned long value can be 0~18446744073709551615 (8 bytes)

Character Type
CHAR_BIT: 8 bits
char value can be -128~127 (1 bytes)
signed char value can be -128~127 (1 bytes)
unsinged char value can be 0~255 (1 bytes)

커널버전은 2.6.31 이라고 나오고, x86_64인데, 현재 64bit로 컴파일하고 있는지, 32bit로 컴파일하고 있는지도 모르겠습니다. 저는 beginner입니다.

에, 다음은 overflow에 대한 얘기가 쓰여 있는데, 빙글빙글 돌고도는군요

다음은 int와 char 에 대한 형변환 얘기도 있는데, cout이 입력되는 데이터의 형식에 따라 다르게 행동해서 알아두어야 할 필요도 있을 것 같습니다. 예를 들면, 10진수 65가 int에 들어 있으면, cout이 65를 출력하고, char에 들어있으면 A를 출력하는 식이죠.

변수이름에 \u로 escape한 unicode를 쓸 수 있다고 하는데, 일단 패스패스.

int와 char가 signed 인지 unsigned 인지는 구현에 따라 달라진다고 써있네요.

그 다음에, bool 형식에 대한 얘기가 나와있는데, 자바에서는 true는 true고, false는 false 일 뿐이었는데, c++에서는 bool  형식에  0을 할당하면 false가 할당되고, 0이 아닌 값을 할당하면 true가 할당되는, 또 int 형식 변수에 true를 할당하면 1값을 갖게 되고, false를 할당하면 0값을 갖게 되는... 좀더 복잡하게 프로그램을 짤 수 있게 되어있네요.

다음은 const Qualifier(수식어?)에 대한 얘기가 나오는데,  #define을 사용하는 대신 const를 사용하면 변수 형식을 지정할 수 있고, 제한된 범위 내에서 사용할 수 있는 등의 장점이 있다고 합니다~

이제 드디어 부동소수점이네요.

실행한 결과는~
The following are the minimum number of significant digits
FLT_DIG: 6
DBL_DIG: 15
LDBL_DIG: 18

The following are the number of bits used to represent the mantissa
FLT_MANT_DIG: 24
DBL_MANT_DIG: 53
LDBL_MANT_DIG: 64

The following are the maximum and minimum exponent values
FLT_MAX_10_EXP: 38
DBL_MAX_10_EXP: 308
LDBL_MAX_10_EXP: 4932
FLT_MIN_10_EXP: -37
DBL_MIN_10_EXP: -307
LDBL_MIN_10_EXP: -4931
floating point number에 대한 용어가 잘 기억이 안납니다. mantissa 가 뭘까요?
지금 Floating point 를 보니, 부동소수점 자체가 잘 기억이 안나므로 나중에 천천히 보도록 하고 일단 패스패스.

뒤에 Type Conversion 얘기가 나오는데,  Type Conversion 을 실제로 쓸 때 읽어보기로 하고 패스~

 Chapter 3. 는 너무 대충대충 넘어가네욥.

남은 내용...
CH4. Compound Types
CH5. Loops and Relational Expressions
CH6. Branching Statements and Logical Operators
CH7. Functions: C++'s Programming Modules
CH8. Adventures in Functions
CH9. Memory Models and Namespaces
CH10. Objects and Classes
CH11. Working with Classes
CH12. Classes and Dynamic Memory Allocation
CH13. Class Inheritance
CH14. Reusing Code in C++
CH15. Friends, Exceptions, and More
CH16. The string class and the Standard Template Library
CH17. Input, Output, and Files
+ floating point



이번 장의 영어

humidity
- These plants need heat and humidity to grow well (Naver 영어사전)

Constitution
Constitution and its relative frequency, or the number of available Elvis impersonators. (본문)
사실 본문 중에서 데이터의 예로 들고 있는 문장인데, 해석이 되지 않아서 다시 보니
the most common letter in the U.S. Constitution and its relative frequency,
라는 문장이네요.


저작자 표시
C 2010/01/31 02:07

[C++ Primer Plus] CH 2. Setting out to C++

C++을 너무 모르는 것 같아서 다시 기초를 좀 쌓기로 생각하고,
책을 하나 구입했습니다. C++ Primer Plus.

실습환경은 우분투 9.10, Eclipse 3.5 + CDT 입니다.
CDT를 사용하기 위해서는
Eclipse 사이트에서 CDT가 포함된 이클립스 배포본을 다운받아도 되고,
Help->Install New Software 에서 설치해도 됩니다.



현재 우분투에 설치되어 있는 GTK에 버그가 있는지 SWT에 버그가 있는지,
어쨌든 GTK를 사용하는 이클립스의 버튼들이 작동하지 않습니다.
단축키를 사용하면 누를 수 있습니다. Next 버튼의 경우 N키를 누르면 됩니다.
어쨌든 CDT를 설치하고, 이클립스를 재시작하고 나서 Perspecitve를 바꾸려고 하니
버튼이 눌리지 않는데, OK 버튼에 단축키가 없습니다.



그냥 C/C++을 더블클릭하면 됩니다.
이제 Perspective를 바꾸고 c++ 프로젝트를 생성했습니다.



전 c++ Beginner 이므로 Hello World C++ Project를 만들었습니다.

그런데 Build가 되지 않아서 보니 g++ 패키지가 설치되어 있지 않습니다.
그래서 다시 g++ 관련 패키지를 설치했습니다.

Project -> Build All(Ctrl+B) 하고,
Ctrl+F11 하면 실행을, F11하면 디버깅을~


아주 간단한 HelloWorld.cpp 입니다.
아주 간단하지만 Java에만 익숙한 저에게는
<< 연산자에 대한 Overloading 이 좀 생소합니다.
이 연산자가 어떻게 정의되어 있는지 보고 싶어서
/usr/include/c++/4.4/iostream 과 ostream 등의 파일을 열어봤지만
Beginner인 저에게는 외계어일뿐.
어쨌든 잘 실행되었습니다.

여기서 잠깐 42 페이지의 C++ Source Code Style을 보고 가죠~
저에게는 번역서가 없어서 옳은 해석인지 알 수 없습니다.
One statement per line
한 줄에는 한 문장만 쓰기
An opening brace and a closing brace for a function,
each of which is on its own line
함수를 위한 열고 닫는 괄호는 별도의 줄에 쓰기
Statements in a function indented from the braces
함수 안의 문장들은 괄호에서 들여쓰기
No whitespace around the parentheses associated with a function name
함수 이름과 연관된 괄호 주위에 공백 넣지 않기
짧은 영어 실력 때문에 번역판'도' 사고 싶어 지네요.
그러나 교보문고에서 삼만 육백원이나 하네요.
그럼, 다음 예제는 p.43의 carrots.cpp 응용(이라고는 하지만 같은 예제)
이 예제를 c프로젝트를 만들어 다음과 작성해보면, 이와 같은데,
아무런 문제없이 빌드되고 실행됩니다.
얼마전에 급 C공부하려고 Visual Studio 2008에서 콘솔 C프로그램 만들었을 때는 변수 선언은 모두 가장 먼저 해야 했던 것 같은데...

어쨌든 C++에서는 다음과 같은 팁이 있다고 합니다.
The C++ style for declaring variables is to declare a variable as close to its first use as possible
변수가 처음 사용되기 직전에 변수를 선언해주세요~

- cin 사용하기
- cout 사용할 때 문자열 병합하기
- cin과 cout, 클래스와의 첫만남
- functions
등등등...

별 내용은 없고,

'using' 지시어에 대한 얘기가 나오네요~
main을 포함한 함수 안에서 사용되면
그 함수 안에서는 그 네임스페이스를 사용할 수 있다네요.

<Review Question>
1. 씨쁠쁠 프로그램에서 모듈을 뭐라고 부를까요?
function?
2. 다음의 전처리 지시기는 뭘하는 걸까요?
#include <iostream>
... iostream에 정의된 데이터타입과 함수를 쓰겠어요~라는 의미?
3. 다음의 문장은 뭘하는 걸까요?
using namespace std;
... cin과 cout을 쓰겠어요.
4. "Hello, world" 와 줄넘김을 표시하는 문장을 작성하세요~
cout << "Hello, world" << endl;
등등등~

APPENDIX J에 보니 위에 Review Question의 답은...


뒤에 Programming Execises 에는 두번째 장이라서 그런지 별로 재밌는 문제는 없네요.

자 이제 C++의 첫발을 내딪었습니다.
앞으로 남은 부분은
CH3. Dealing with Data
CH4. Compound Types
CH5. Loops and Relational Expressions
CH6. Branching Statements and Logical Operators
CH7. Functions: C++'s Programming Modules
CH8. Adventures in Functions
CH9. Memory Models and Namespaces
CH10. Objects and Classes
CH11. Working with Classes
CH12. Classes and Dynamic Memory Allocation
CH13. Class Inheritance
CH14. Reusing Code in C++
CH15. Friends, Exceptions, and More
CH16. The string class and the Standard Template Library
CH17. Input, Output, and Files

사실 뭔가 많이 남아있는 것 같지만, Java 기초책, 예를 들면, 열혈강의 자바 요런 책 한번 쭉 보는 거나 별 다를 바 없다는 생각을 갖고~하루에 한장씩~후딱 끝내버리겠슴다!

(씨언어책 이틀보고 면접보러 갔더니 면접관 표정이 별로 좋지 않았다는)



(바로 위 달력 그림은 Daum 캘린더 캡쳐해서 사용했습니다)

이번 장의 영어.
Stripped of the trimmings: ?
p.31 Stripped of the trimmings, the sample program shown in Listing 2.1 has the following fundamental structure

prevalent
The current prevalent philosophy is that it's preferable to be more discriminating and limit access...
- 본문 중에서
These prejudices are particularly prevalent among people living in the North.
- Naver 영어사전

myriad
C++ programmers are blessed (or cursed) with myriad options ...
- 본문 중에서
Designs are available in a myriad of colours
- Naver 영어사전

* 그나저나 이 스킨을 아이팟 터치에서 보니 레이아웃이 깨지네요~ 쓰읍


저작자 표시
Linux 2010/01/24 22:55

우분투 이클립스 프로젝트 생성시 버튼 무시 버그

해결 방안:
export GDK_NATIVE_WINDOWS=true
그리고 같은 터미널에서 이클립스 실행.
워크스페이스 변경하면 다시 버튼 안눌림.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=291257

더 간단한 해결 방안: 단축키 사용 또는 선택+Enter
https://bugs.eclipse.org/bugs/show_bug.cgi?id=295173

3.6 버전에서는 해결된 것으로 보임~

잡설~

윈도우에서는 딴 짓을 더 많이 하는 것 같아서 여러가지를 배워보고자 리눅스를 사용하기로 했습니다.
우분투가 좋다는 얘기가 많아서 그동안 익숙했던 페도라 대신 우분투를 설치했습니다.
사실 페도라를 설치하려고 했지만 Fedora 12의 설치프로그램이  i5 750, P577D 가 장치되어 있는 하드디스크를 찾지 못해 설치가 진행이 되질 않아서 설치하지 못했습니다.
우분투를 설치하고 나니, 글꼴 때문에 고민이기는 하지만, 지금은 일단 나눔고딕으로 바꿔서 사용하고 있습니다.

자, 이제 OpenJDK를 설치하고, Eclipse를 다운받아서 압축을 해제하고 실행시키고 새 프로젝트를 만들려고 하니,
Next버튼과 Finish 버튼이 눌리지 않는 것입니다. 그래서 찾아보니, 버그 리포트가 있네요~

엄청나게 긴 버그 리포트 페이지네요~
일단 단축키를 사용할래요~



저작자 표시
상식 2009/12/12 18:21

한글 저장 설정

울 아버지가 한글 2004에서 작업하시다가 파일을 잘 저장하셨는데,
다음 번에 불러오니 파일이 깨져있다고 하셨습니다.
hwp 파일을 기본적으로 UTF-16을 사용하기때문에, 간단한 프로그래밍으로도 기록되어 있는 문자열을 확인할 수 있습니다.
(http://qaos.com/article.php?sid=2239 에서 소개하고 있는 DocRepair 라는 프로그램으로 간단히 해볼 수 있습니다.)
그런데 막상 해보니, 1MB 정도의 파일에서 처음의 한 20줄 정도는 제대로 기록되어 있지만, 나머지는 문자열도 파일의 구조도 확인할 수 없었습니다.
요즘 바쁘기도 했지만 그 나머지 부분에 데이터가 들어 있을지 확인할 수 없어서 시도해보기도 뭐 했습니다. 나중에 시간이 나면 해볼 생각입니다.

그리고 한글과컴퓨터에서도 복구서비스를 제공하지 않고, 그런 서비스를 제공하는 회사도 없습니다.
현재 한글버전이 2007로 올라갔지만, 얼마나 저장 프로세스가 개선되었을지 알 수 없기 때문에,
시간과 노력이 들어간 작업물을 지키려면 백업이 필수라고 할 수 있습니다.


일단 한글의 도구->환경설정에서 저장 옵션을 이용하면 좀더 안전하게 저장할 수 있습니다.
몇 가지 동시 저장 옵션이 있습니다.

먼저 무조건 자동 저장과 쉴 때 자동 저장 옵션을 통해 자동으로 저장하게 해놓고,
압축저장은 해제합니다. 그리고 백업파일 만듦이나 동시 저장 옵션을 통해 일반 텍스트 파일로 동시에 저장하게 해놓으면 좀더 안전하게 저장할 수 있습니다.
개인의 필요에 따라 적절하게 설정하면 될 것 같습니다.

또 버전관리 프로그램을 이용하거나 아니면 간단히 날짜별로 새로운 이름으로 파일을 저장하는 것도 도움이 될 것 같습니다.
저작자 표시
상식 2009/12/05 13:32

학위 논문 작성 요령

시스템의 구현을 끝내고 논문 작성에 들어간지 거의 한 달째,
논문에 왠지 손에 잘 잡히지 않았습니다.
그래서 학부 4학년 때 처음 학회논문 쓸 때의 마음으로 돌아가서 논문을 어떻게 써야 하는 것인가? 부터 고민하기 시작했습니다.

'How to write thesis'로 구글에서 검색하면 다음의 두 URL이 가장 상위에 검색됩니다.
미국 Columbia University URL의
http://www.ldeo.columbia.edu/~martins/sen_sem/thesis_org.html#Planning
호주 UNSQ URL의
http://www.phys.unsw.edu.au/~jw/thesis.html


저작자 표시
DB Management/Postgres 2009/11/02 23:22

PostgreSQL, insert 문 실행하고 바로 select 문을 실행하면 시간이 오래걸리는 경우가 있어요.

TFIDF 계산을 PostgreSQL을 이용해서 하고 있는데, Corpus, Document, TOF (Term Occur Fact), IDF, TFIDF 등의 테이블에 INSERT문을 실행하고, 세 네 가지의 조인을 포함하는 SELECT문을 실행하면 시간이 오래 걸림
이유는 알 수 없지만, INSERT 문을 실행하고 난 다음, VACUUM을 실행하고 SELECT문을 실행해서 해결함.

저작자 표시
Java 2009/09/29 22:52

윈도우에서의 32bit/64bit JVM 간단하고 어설픈 성능 비교

OS를 64bit로 설치하면, JVM도 64bit로 설치하고 싶어집니다. 하지만, Eclipse를 비롯한 많은 툴들을 64bit로 사용하려면 불편한 점들이 많습니다. 
그래서 64bit JVM의 성능을 테스트 해보기로 했습니다. 64bit jvm으로 검색해보면, 더 많은 메모리를 사용할 수 있지만, 성능에 있어서는 메리트가 없다는 글을 읽어볼 수 있는데, 성능에서 메리트가 없다면, 굳이 64bit JVM을 사용할 필요가 없기 때문입니다. 

결론부터 말씀드리자면 잘 모르겠다이지만, 흥미로운 결과를 볼 수 있습니다. 

일단 32bit JVM과 64bit JVM을 모두 설치했습니다. 
그리고 이클립스도 32bit 버전과 64bit 버전을 모두 다운받아서 압축을 풀어놓았습니다. 
두 가지 이클립스를 모두 실행시켜보니, 32bit 버전의 이클립스는 eclipse.exe 프로세스만 실행되지만, 64bit 버전의 이클립스는 eclipse.exe 프로세스 외에 javaw.exe 프로세스가 별도로 실행되며 이 프로세스가 주된 프로세스입니다. 


위의 그림에서 *32 로 표시되어 있는 eclipse가 32비트로 동작하고 있으며, 메모리가 184MB정도 차지하고 있네요. 

그리고 다음과 같은 간단한 테스트를 해보았습니다. 
1. int 형 더하기 연산
2. long 형 더하기 연산
3. float 형 더하기 연산
4. double 형 더하기 연산
6. ArrayList, LinkedList methods
7. String add method

코드는 조악하기 때문에 일단 생략하고, 최대한 다른 연산은 생략하고, 연산만 여러번 하게 했습니다. 
결과는 다음과 같은데 좀 이상합니다.

위쪽이 64bit jvm, 아래쪽이 32bit jvm이며, 32bit jvm은 시간이 오래 걸려서 세번만 한다음 평균내었습니다. 단위는 ms입니다. 
특이한 점은 64bit jvm 에서의 int, float, double 덧셈 연산의 속도입니다. 32bit jvm과는 비교할 수 없을 정도로 빠른 속력을 보여주었습니다. 
long 역시 2배 정도 빠르게 계산했습니다. 

먼저, int, float, double 연산을 좀 살표보자면, 
9ms라는 것은 뭔가 아무것도 실행되지 않은 것만 같습니다. 

코드는 아래와 같습니다.

long sT= System.currentTimeMillis();
int temp=0;
for(int j=0; j< Integer.MAX_VALUE;j++) { temp= j+j; }
System.out.println(temp);
System.out.println("Integer Addition: "+ (System.currentTimeMillis()-sT));

4번째 줄에 temp를 출력하고 있는데 값이 할당만 되고 사용되지 않으면, 컴파일러가 하는지, jvm이 하는지 모르겠지만, temp에 관련된 코드는 실행되지 않습니다. 그래서 출력하고 있습니다. 
어쨌든, 이런 코드를 9ms라는 경이로운 속도로 계산합니다. 좀 이상해서 아래와 같이  반복문을 한번 더 감쌌습니다. 

long sT= System.currentTimeMillis();
int temp=0;
for(int i=0; i< Integer.MAX_VALUE;i++) {
     for(int j=0; j< Integer.MAX_VALUE;j++) { temp= j+j; }
}
System.out.println(temp);
System.out.println("Integer Addition: "+ (System.currentTimeMillis()-sT));

이번에는 12,839 ms 정도의 시간이 걸렸습니다. 9 ms * Integer.MAX_VALUE 정도의 시간이 걸릴 줄 알았는데, 12 초밖에 안걸렸네요. 
그리고 이번에는 수정한 코드는 32bit jvm 에서 실행하려고 하다가 백만년 걸릴 것 같아서 밖의 루프를 세번만 돌렸습니다. 14초 정도 나왔는데, 한번만 돌렸을 때보다 4배정도 시간이 더 걸렸습니다.

어쨌거나 int, float, double 계산에서는 64bit jvm 이 엄청난 연산 속도를 보여주었습니다. 
float과 double 연산 속도에 차이가 나지 않는 이유도 궁금하지만 지금 시간이 새벽 1시 55분이므로 뭔가 자야겠다는 압박에 패스.

그러나 사실, int, float, double 연산을 어떤 프로그램이 그렇게 많이 하겠습니까.
자바로 포토샵 만들것도 아니라는...
그래서 ArrayList, LinkedList의 add연산 속도를 보았습니다. 

그리고 그 결과는..
사실 별차이가 없을 것이라고 생각했는데, 
ArrayList의 경우는 64bit jvm이, LinkedList의 경우는 32bit jvm이 빠른 속도로 실행되었습니다. 

... 뭥미 ...
add 메소드를 분석해보고 싶지만, 좀전에도 말씀드렸지만 지금 시간이 1시 55분인데다 내일은 마드리드에서 귀국하셔서 아직 여독이 풀리지 않으셨을 교수님과의 랩미팅이 있기때문에 그만 자고 싶습니다. 

그래도 궁금하기 때문에 소스를 쓱 봤는데, 알고 계시는 것처럼, ArrayList의 add연산자는 내부 array객체가 모두 할당되면, 그 전에 만들어져있던 배열 크기의 3/2 배 크기의 배열을 새로 만들고 복사하고, LinkedList 는 앞뒤 객체를 할당하는 연산을 합니다. 

자 이제 그만 자야겠기에 섣부른 결론은 내리겠습니다. 
int, float, double 에 대한 단순 수치 연산은 64bit jvm이 엄청나게 빠르다. 
객체 할당 연산(예를 들면, Object obj= otherObject ) 은 32bit jvm이 2배 빠르다. (요건 메모리 주소 범위가 넚기 때문일 것 같다는...) 

 테스트 환경은 Vaio TT2인데, CPU는 SU9600(1.60GHz), Windows 7 64bit 입니다. 
CPU-Z를 급 다운받아서 확인해보면 아래와 같이 나오네욥. 


TT가 음질, 무게, 배터리 등 장점은 많은데, 아무래도 CPU 성능은 좀 아쉽습니다.
또 뻘짓하다가 3시가 다되었습니다. ㅜㅜ
...
...
저작자 표시
Java 2009/09/27 19:01

JDBC, stmt.setFetchSize(Integer)

JDBC를 사용하면서 매번 불편했던 점은

ResultSet rset= stmt.executeQuery(sql);

이런 문장을 실행하면, 질의 결과를 모두 받아와서 rset에 넣는 다는 것입니다.
따라서 대용량의 데이터를 한번에 처리할 때는 미리 받아올 데이터의 수를 제한할 필요가 있습니다.
해결책은 바로 Statement 인터페이스의 setFetchSize() 입니다.

http://benjchristensen.com/2008/05/27/mysql-jdbc-memory-usage-on-large-resultset/ 을 보고 알게되었는데,
이 글은 MySQL의 경우를 설명하고 있는데, PostgreSQL의 jdbc드라이버에도 사용할 수 있습니다.

2011.12.28 추가.
setFetchSize() 메소드의 구현방식은 jdbc 제공자에 따라 달라집니다. 
구글에서 setFetchSize()를 검색하면 나오는 
http://stackoverflow.com/questions/1468036/java-jdbc-ignores-setfetchsize  
http://dev.fyicenter.com/Interview-Questions/JDBC/What_does_setFetchSize_really_do_.html 
같은 글들이 setFechSize()를 사용하는데 도움이 될 것 같습니다. 
저작자 표시
1 2 3 4 5 ... 8