'분류 전체보기'에 해당되는 글 226건

  1. 2010.02.04 Windows Mobile / DirectShow / SampleGrabber
  2. 2010.01.21 Snow Leopard 설치
  3. 2010.01.15 omnia에 android 설치
  4. 2010.01.15 pda rom dump
  5. 2010.01.15 ubuntu 9.10 desktop을 microsoft virtual pc 2007에 설치하기
  6. 2009.12.22 경기도 무상급식
  7. 2009.11.13 지금 여행하기 좋은 곳 베스트 7
  8. 2009.11.13 SATA2하드의 SATA1설정
  9. 2009.11.03 Windows 7, APIs 1
  10. 2009.10.04 ffmpeg의 apiexample을 사용한 mpeg encoding 방법
  11. 2009.09.30 Unofficial FFmpeg Win32 Builds
  12. 2009.09.30 Guide to building FFMpeg for Windows Mobile / Win CE
  13. 2009.09.30 윈도우에서 ffmpeg 컴파일하기(to use in vc++)
  14. 2009.09.30 HOWTO: compiling ffmpeg + x264 + MP3 + Xvid + AMR on Ubuntu
  15. 2009.08.14 오키나와에 있는 수족관
  16. 2009.07.22 Excel에서 만든 Graph를 LATEX에 삽입할 수 있는지요
  17. 2009.07.21 [칼럼]SW개발자의 희생을 요구하는 문화는 바뀌어야 한다
  18. 2009.07.20 test1
  19. 2009.06.11 [펌] 한나라당 지지자 아빠를 설득한 딸의 편지
  20. 2009.05.08 직업윤리
  21. 2009.04.07 웨딩촬영
  22. 2009.04.07 웨딩촬영
  23. 2009.04.07 웨딩촬영
  24. 2009.04.07 웨딩촬영
  25. 2009.04.07 웨딩촬영
  26. 2009.04.07 웨딩촬영
  27. 2009.04.07 웨딩촬영
  28. 2009.04.07 웨딩촬영
  29. 2009.04.07 웨딩촬영
  30. 2009.04.07 웨딩촬영

Windows Mobile / DirectShow / SampleGrabber

code project의 SampleGrabber 사용

http://www.codeproject.com/KB/mobile/samplegrabberfilter-wm6.aspx

 

VS2005에서 빌드할때 문제발생

method undefined

  1. CSampleGrabber::FindPin
  2. CSampleGrabber::JoinFilterGraph
  3. CSampleGrabber::QueryVendorInfo
  4. CSampleGrabber::NonDelegatingRelease

위 목록중에서 3개는 아래 방법으로 해결

  • Under Project Propeties/C++/Language change the compiler option  "Treat wchar_t as builtin type" to No and rebuild

마지막 1개는 아래 방법으로 해결

  • #ifdef DEBUG
    #define UNDEFINEDEBUGTEMPORARILY
    #undef DEBUG
    #endif
    #include <streams.h>
    #ifdef UNDEFINEDEBUGTEMPORARILY
    #define DEBUG
    #endif
  • streams.h안에 NonDelegatingRelease는 DEBUG에서만 정의되도록 되어있어서, CBaseFilter를 implement하는 모든 class들은 이를 DEBUG에서는 구현해야하나 보통 구현하지않게되므로, streams.h를 include할때 그냥 DEBUG를 undef해버림
  • codeproject의 소스는 그 외에도 precompiled header에서 streams.h를 include하고 있으므로 이또한 처리를 해주어야 한다.

'Computing' 카테고리의 다른 글

android omnia porting current status  (0) 2010.02.04
android kernel build for samsung omnia  (0) 2010.02.04
omnia에 android 설치  (0) 2010.01.15
pda rom dump  (0) 2010.01.15
ubuntu 9.10 desktop을 microsoft virtual pc 2007에 설치하기  (0) 2010.01.15

Snow Leopard 설치

  1. RebelEFI CD 준비
  2. Retail DVD 준비 (사용되지 않음)
  3. Snow_Leopard_10.6.1-10.6.2_SSE2_SSE3_Intel_AMD_by_Hazard 사용
  4. 부팅 후 설치
  5. 디스크 파티션
  6. 설치완료후 재부팅 안되면 RebelEFI사용 부팅
  7. 드라이버 설치
    1. Attansic L1 설치
      1. IP 잡아줌
    2. Sound 설치
    3. 8600 GT EFI String 생성후 삽입
      1. /Library/Preferences/SystemConfiguration/com.apple.Boot.plist
    4. AppleTyMCEDriver 제거
      1. 그후 Network이 안됨 –_-;;

 

DSDT

DSDT GUI Patcher : dsdt.aml 생성

 

  1. “myHack_Installer_1.0_RC4.1_r55.mpkg”를 사용해서 USB 메모리에 boot loader 설치
    1. AHCIPortInjector
    2. AppleIntelPIIXATA
    3. AttansicL1eEthernet
      1. 필요없을듯 L1임 L1e가 아님
    4. fakesmc
    5. FramebufferDisabler
    6. IOATAFamily
    7. JMicronATA
    8. NullCPUPowerManagement
    9. OpenHaltRestart
    10. PlatformUUID
    11. 자동으로 Extensions.mkext 생성됨
  2. “DSDT Patcher GUI”를 사용해서 dsdt.aml 생성
    1. 프로그램의 sub folder인 “session”에 생성됨
  3. dsdt.aml을 boot usb 메모리에 설치
    1. /USB/Extra
  4. usb memory로 부팅
  5. Retail DVD or USB 메모리 지정
    1. MBR을 사용할수있게하는 뭔가를 반영함
    2. // IDE HDD를 사용가능하게 하는 뭔가를 반영함
      1. // IOATAFamily.kext 인듯?
  6. 부팅
  7. 설치
  8. 재부팅
  9. usb memory로 부팅
  10. 설치된 HDD 선택
    1. 커널로딩
  11. Sleep으로 안들어가게 전원관리에서 설정
  12. 다시 myHack_Install를 사용해서 boot loader설치와 필요한 kext를 설치
    1. AHCIPortInjector
    2. AppleIntelPIIXATA
    3. fakesmc
    4. IOATAFamily
    5. JMicronATA
    6. NullCPUPowerManagement
    7. OpenHaltRestart
    8. PlatformUUID
    9. 자동으로 Extensions.mkext 생성됨
  13. Network kext 설치
    1. AttansicL1Ethernet.pkg
    2. /OSX/Extra/Extensions 로 이동 or 복사
    3. /OSX/Extra/Extensions.mkext update
      1. chown –R 0:0 /Extra
      2. chmod –R 755 /Extra
      3. kextcache –v 1 –a i386 –a x86_64 –m /Extra/Extensions.mkext /Extra/Extensions
  14. Sound kext 설치
    1. ALC883.pkg X
      1. 설치했더니 관련 kext가 한 3개쯤 되는것같아서 아직 안옮김
      2. GigabyteALC883.kext
      3. GigabyteALC883autoHP.kext
      4. GigabyteALC8836CH.kext
    2. ALC883Audio.mpkg X

omnia에 android 설치

pda rom dump

'Computing' 카테고리의 다른 글

Windows Mobile / DirectShow / SampleGrabber  (0) 2010.02.04
omnia에 android 설치  (0) 2010.01.15
ubuntu 9.10 desktop을 microsoft virtual pc 2007에 설치하기  (0) 2010.01.15
SATA2하드의 SATA1설정  (0) 2009.11.13
Windows 7, APIs  (1) 2009.11.03

ubuntu 9.10 desktop을 microsoft virtual pc 2007에 설치하기

1. torrent를 통해서 받은 이미지는 에러가 난다 (cound not find kernel image)

2. display resolution이 800x600으로 고정되어있다.

virtual pc는 S3 Trio gfx card를 에뮬레이트 한단다.

그래서 grup config에다가 한줄 추가해줘야되는데

/etc/default/grub
GRUB_CMDLINE_LINUX="vga=791 s3fb.mode_option=1024x768-16"

그리고나서

sudo update-grub

그리고 reboot

 

그랬더니 console은 1024x768로 나오는데 정작 gdm은 그대로 800x600이다. 쩝

 

결국 해결안되서 VirtualBox로 이동… ㅜ.ㅜ

http://www.virtualbox.org

'Computing' 카테고리의 다른 글

omnia에 android 설치  (0) 2010.01.15
pda rom dump  (0) 2010.01.15
SATA2하드의 SATA1설정  (0) 2009.11.13
Windows 7, APIs  (1) 2009.11.03
ffmpeg의 apiexample을 사용한 mpeg encoding 방법  (0) 2009.10.04

경기도 무상급식

지금 여행하기 좋은 곳 베스트 7

지금 여행하기 좋은 곳 베스트 7

리빙센스 | 입력 2009.11.13 16:34 | 누가 봤을까? 20대 남성, 서울

여기저기서 가을이 깊어지는 소리가 들린다. 이미 단풍이 든 산들은 관광객들로 몸살을 앓고 있고, 가을을 만끽하기 위해 떠나는 차량들이 도로마다 꼬리를 물고 늘어선다. 사람이 북적인다 해도 설렘을 안겨주는 계절, 가족과 떠나는 가을 여행을 계획하고 있다면 이곳을 눈여겨보자. 어쩌면 사람들이 찾지 않는 한적한 곳일 수도 있으니 말이다.
# 한국관광공사 국내관광진흥팀 추천!! 충청남도 부여군 부여읍 일원
잃어버린 왕국으로 불리는 나라 백제. 7백 년 가까운 장구한 역사를 가지고 있지만 화려한 영광보다는 비장함과 애잔함으로 다가오는 나라가 바로 백제다. 그러나 백제는 그렇게 힘없고 나약한 나라만은 아니었다. 오히려 풍요롭고 찬란한 문화를 이룩했는데, 그런 백제가 마지막 1백23년을 보낸 곳이 사비, 곧 지금의 부여다. 때문에 부여에는 화려했던 백제와 망해가는 백제의 모습을 함께 그려볼 수 있는 유물과 유적들이 모여 있어 볼거리가 풍부하다. 부소산에도 올라보고 유장하게 흐르는 백마강변도 걸어보며 백제시대의 모습을 상상해보는 것도 좋을 듯하다.
▶▶ 추천 코스
신동엽 선생 생가 → 국립부여박물관 → 정림사지 → 부소산 → 구드래 조각공원 → 수북정 → 신동엽 시비 → 궁남지 → 백제 왕릉원
▶▶ 찾아가는 길
경부고속도로 → 천안분기점 → 천안, 논산 간 고속도로 → 4번 국도 우회전 → 부여
# 코레일 관광상품 개발팀 추천!! 강원도 오대산
단풍철에 추천하고 싶은 곳이 많지만, 특히 오대산을 권한다. 아름다운 단풍도 볼 수 있고 대관령 양떼목장 등도 함께 둘러볼 수 있어 볼거리가 풍부하다는 것이 장점. 코레일에서도 오대산 단풍 절정기인 10월 24일 서울에서 출발하는 '줌마렐라' 특별열차를 운행할 예정이다. 이날 오대산 여행객은 연화암에서 금강사, 세심폭포와 구룡폭포까지 이어지는 '소금강 단풍 트레킹'으로 오대산의 절경과 붉은 단풍을 감상할 수 있다. 아름다운 산 풍경을 보고 싶다면 오대산을 추천한다.
▶▶ 추천 코스
정동진 일출 관광 → 한국의 알프스 대관령 양떼목장 관광 → 오대산 월정사 관광(무박 2일 코스)
오대산/월정사 단풍 관광 → 오대산(소금강 계곡 단풍 트레킹) → 주문진 어시장(당일 코스)
▶▶ 찾아가는 길
영동고속도로 진부 IC → 6번 국도 → 오대산
# 한국관광공사 홍보팀 추천!! 전남 목포시 용해동 일원
목포의 명물 갓바위가 있는 용해동 일대는 목포에서 손꼽히는 걷기 여행 코스다. 일명 갓바위 길로 불리는 이곳은 산과 바다 그리고 문화를 관통하는 길로 걷는 재미에 더해 볼거리, 즐길거리 또한 풍성하다. 갓바위와 입암산 그리고 평화광장 해안 산책로까지 산과 바다를 아주 절묘하게 아우른다. 그래서 어디로 발걸음을 옮기든 몸과 마음이 즐거울 수밖에 없다. 그뿐만이 아니다. 우리나라에서 공공 박물관과 전시관이 가장 많이 모여 있는 문화의 거리가 자연스레 걷기의 시작과 끝을 이어주는 점도 매력이다. 마치 끝없이 반복되는 뫼비우스의 띠처럼 끝나지 않는 즐거움과 마주할 수 있는 길이 바로 갓바위 길이다.
▶▶ 추천 코스
국립해양문화재연구소 → 갓바위 → 입암산 → 평화광장 → 국립해양문화재연구소
▶▶ 찾아가는 길
목포역 → 남해개발산업도로 → 목포제일중학교 앞 → 갓바위 문화지구 내

# EBS < 한국기행 > 의 최우진 작가 추천!! 경상북도 청송
EBS 방송에서 5편으로 제작했던 경상북도 청송을 추천한다. 경치가 남다르고 볼거리가 많아 아직까지도 기억에 남는 곳이다. 청송자연휴양림에서 텐트를 치고 캠핑을 해도 재미있고, 송소 고택의 고택 스테이를 해도 좋다. 또한 천연염색 체험장도 있어 아이들과 떠나기에도 안성맞춤이다. 특히 주왕산의 주산지는 김기덕 감독의 영화 < 봄 여름 가을 겨울 그리고 봄 > 의 촬영지로도 유명한 곳으로 1백50년 묵은 나무들이 물속에서 자라는 기이한 광경을 볼 수 있다.
▶▶ 추천 코스
주왕산 → 주산지 → 절골계곡 → 청송자연휴양림(혹은 송소 고택의 고택 스테이) → 군립 야송미술관 → 진보시장 → 보현 천문대
▶▶ 찾아가는 길
중앙고속도로 → 안동 IC → 안동시내 → 안동댐 방향 → 진보 → 청송읍 → 영천 방향 → 청운리 삼거리 → 좌회전 → 주왕산
# < 슈퍼라이터 > 저자 이홍석 추천!! 설악산의 백담사
익히 알려진 곳이긴 하지만 백담사와 그 주변을 둘러싼 풍경의 진미를 맛보려면 이맘때쯤 여행을 가는 것이 제격이다. 물론 눈으로 뒤덮인 한겨울의 백담사도 정말 좋지만 그때는 접근이 조금 어려우니 편안한 휴식을 겸한 여행이라면 역시 가을 백담사다. 백담사 입구 공영주차장에서 백담사까지 운행하는 셔틀버스를 이용해 올라가면 된다. 백담사에서 20분 거리인 화암사로 넘어가는 길도 추천한다. 화암사는 금강산의 1만2천 봉이 시작되는 기점이기도 하다. 아침에 백담사에서 화암사로 넘어갔다가 저녁에 역시 40분 정도 거리인 동해로 넘어가 동명항이나 대포항에서 신선한 회를 즐기면 좋다.
▶▶ 추천 코스
백담사 → 화암사 → 동해
▶▶ 찾아가는 길
영동고속도로 → 한남 IC → 양양 방면 → 양양 삼거리서 인제, 원통 방향 → 오색주차장 → 백담사
# MBC < 무한 情 미소천사 > PD 정민식 추천!! 서울
굳이 멀리 여행할 필요 없이 서울에서 가을을 100% 느낄 수 있는 방법을 추천한다. 연인과의 데이트나 친구와의 나들이 코스로도 좋고 가족끼리 반나절 정도 소풍을 나가기에도 좋은 곳이 바로 여의도 샛강 생태공원이다. 토요일 오후 3시 이후나 공휴일에는 KBS 본관에 공짜로 주차도 할 수 있어 가족끼리 움직이기에도 좋다. 그 외에 남산 길 드라이브와 해가 지기 전 경복궁 옆길을 지나 북악스카이웨이로 올라가 정상에 있는 팔각정으로 향하는 코스도 그만이다. 서울 안에서 경치 좋은 곳을 찾아다니는 것도 색다른 당일치기 여행이 될 것 같다.
▶▶ 추천 코스
여의도 샛강 생태공원 → 남산 길 식물원 → 팔각정(팔각정 중앙에 있는 레스토랑에서 이탈리아 음식을 맛보는 것도 좋다. 혹은 서강대교 옆에 있는 '서강 8경'이라는 프렌치 레스토랑에서 저녁식사를 해도 좋다. )
▶▶ 찾아가는 길
여의도로 진입 → KBS 별관 방향 → 윤중초등학교 앞 여의교 아래 → 여의도 샛강 생태공원
# < 대한민국 여행사전 > 의 저자 유연태 추천!! 전남 고흥반도와 나로도 드라이브
한국 최초의 로켓 발사 기지가 있는 고흥반도. 고흥호와 해창만 간척지는 갈대가 무성해 경치가 좋다. 늦가을이 선사하는 쓸쓸한 감상이 곳곳에 배어 있는 곳으로 도로가 잘 정비되어 있어 드라이브 코스로도 훌륭하며, 다른 곳에 비해 소문난 여행지가 아니라서 조용하고 좋다. 내나로도와 외나로도는 모두 고흥반도와 교량으로 연결되어 있어 찾아가기도 편하다. 남북으로 길게 뻗은 두 섬의 구석구석을 찾아가보는 것도 좋다.
▶▶ 추천 코스
벌교 → 고흥만 방조제와 고흥호 → 고흥 읍내 → 해창만 간척지 → 내나로도 → 외나로도 → 고흥 읍내
▶▶ 찾아가는 길
서울, 대전, 진주 간 고속도로 → 남해고속도로 진입 → 호남고속도로 순천나들목 → 순천시내 거쳐 벌교

SATA2하드의 SATA1설정

image

'Computing' 카테고리의 다른 글

pda rom dump  (0) 2010.01.15
ubuntu 9.10 desktop을 microsoft virtual pc 2007에 설치하기  (0) 2010.01.15
Windows 7, APIs  (1) 2009.11.03
ffmpeg의 apiexample을 사용한 mpeg encoding 방법  (0) 2009.10.04
Unofficial FFmpeg Win32 Builds  (0) 2009.09.30

Windows 7, APIs

Windows 7 그리고 새로운 API

 

Active Directory Rights Management Services
For a list of API additions, see RMS in Windows 7.

 

Biometric Service API
Use the Biometric Service API to create client applications that call into the Windows Biometric Framework (WBF) to capture, save, and compare end-user biometric information.

For more information, see Biometric Service API.

 

COM
For a list of API changes, see Changes to COM in Windows 7.

 

Core Windows
For a list of API additions, see Windows 7.

 

Distributed File System Replication
For a list of API additions, see What's New in DFSR in Windows Server 2008 R2 and Windows 7.

 

Enhanced Storage
The Enhanced Storage API enables consistent end-to-end authentication for personal storage devices that differ in form factor.

For more information, see Enhanced Storage.

 

Enhanced Taskbar
The taskbar has been extended significantly under the guiding principle of getting users where they're going as quickly and efficiently as possible. To that end, the application windows, files, and commands that the user needs to accomplish that are now centralized into a single taskbar button that consolidates previously scattered information sources and controls. A user can now find common tasks, recent and frequent files, alerts, progress notifications, and thumbnails for individual documents or tabs all in one place.

For more information, see Taskbar Extensions.

 

Event Tracing for Windows (ETW)
For a list of API additions, see What's New.

 

Extended Linguistic Services
Extended Linguistic Services (ELS) supports text-based services, including language detection, script detection, and transliteration services.

For more information, see Extended Linguistic Services.

 

File Server resource Manager
For a list of API additions, see What's New.

 

Hardware Counter Profiling
This API enables applications to capture thread profiling data such as cycle time and the reasons for context switches.

For more information, see Hardware Counter Profiling.

 

Hyper-V
For a list of API additions, see What's New in Hyper-V.

 

Internet Explorer
Internet Explorer 8 is available for download and is also included in Windows 7.

For more information, see What's New in Internet Explorer 8.

 

Location API
The Location API helps to simplify location-aware programming by providing a standard way to retrieve data about user location and standardizing formats for location data reports. The Location API automatically handles transitions between location data providers and always chooses the most accurate provider for the current situation.

For more information, see Location API.

 

Mobile Broadband
The Mobile Broadband API is used to implement connectivity to cellular networks. Applications should not communicate with such mobile broadband devices directly. Instead, they must use the Mobile Broadband API.

For more information, see Mobile Broadband.

 

Native Wifi
For a list of API additions, see What's New in Native Wifi.

 

Network Share Management
For a list of API additions, see What's New in Network Share Management in Windows Server 2008 R2 and Windows 7.

 

Packaging
A package is a compressed file that contains application data. The Open Packaging Conventions (OPC) introduce two basic concepts to describe a package: parts and relationships. A part is a physical object that contains application data and is located inside a package. A relationship is a logical association between any package or part and a URI-addressable resource such as a part or an external Web site.

A digital signature is used to validate the package originator's identity and to confirm that the signed contents of the package have not been modified after signing. In a package, the signature can reference the package components that have been signed; it can include objects that contain application data, which may also have been signed; and it can include certificates, which can be used in signature validation.

For more information, see Packaging.

 

Parental Controls
For a list of changes, see What's New in Windows 7 Parental Controls.

 

Peer Distribution
Use this API to publish or consume digital content.

For more information, see Peer Distribution.

 

Performance Counters
For a list of API additions, see What's New.

 

Power Management
For a list of API additions, see What's New in Power Management.

 

Scenic Animation
For more information, see Scenic Animation.

 

Sensor API
Sensors are devices or mechanisms that can measure physical phenomena, provide descriptive data, or provide information about the state of a physical object or environment. Computers can make use of built-in sensors, sensors that are connected through wired or wireless connections, or sensors that provide data through a network or the Internet. The Sensor API provides a standard way to programmatically access data that sensors provide.

For more information, see Sensor API.

 

Virtual Disk Service
For a list of API additions, see What's New in VDS in Windows Server 2008 R2 and Windows 7.

 

Virtual Hard Disk
The Virtual Hard Disk (VHD) format is a publicly-available image format specification that specifies a virtual hard disk encapsulated in a single file, capable of hosting native file systems while supporting standard disk and file operations. An example of how VHD files are used is the Hyper-V feature in Windows Server 2008, Virtual Server, and Virtual PC. These products use VHD to contain the Windows operating system image utilized by a virtual machine as its system boot disk.

For more information, see Virtual Hard Disk.

 

Volume Shadow Copy Service
For a list of API additions, see What's New in VSS in Windows Server 2008 R2 and Windows 7.

 

Windows Connect Now
Windows Connect Now (WCN) allows mobile and embedded devices, 802.11 access points (APs), and computers to securely connect, and exchange settings with each other. WCN is designed for the home or small business user, providing a reasonable compromise between ease-of-use and robust security.

For more information, see Windows Connect Now.

 

Windows Error Reporting
For a list of API additions, see What's New in WER.

 

Windows Event Log
For a list of API additions, see What's New.

 

Windows Gadget Platform
The Windows Gadget Platform is the new framework for creating and hosting mini-applications called gadgets on the desktop.

For more information, see Windows Gadget Platform.

 

Windows Installer
For a list of changes, see What's New in Windows Installer 5.0.

 

Windows Scenic Ribbon
The Windows Scenic Ribbon (Ribbon) is a rich command presentation system that provides a modern alternative to the layered menus, toolbars, and task panes of traditional Windows applications. Similar in functionality and appearance to the Microsoft Office Fluent Ribbon, the Ribbon is a command bar that exposes the major features of an application through a series of tabs at the top of an application window.

For more information, see Windows Scenic Ribbon.

 

Windows Touch
New hardware and API support enables applications to receive multitouch input. This gives such applications the ability to detect and respond to multiple simultaneous touch points on the application’s visible surface. Functionality for this feature is provided by a new set of dedicated window messages that report touch down, up, and move actions. The new messages report action and position of touch points with unique identification of simultaneous touch points.

For more information, see Windows Touch.

 

Windows Troubleshooting Platform
Windows Troubleshooting Platform (WTP) provides ISVs, OEMs, and administrators the ability to write troubleshooting packs that are used to discover and resolve issues found on the computer. Previously, troubleshooting software and hardware issues was a manual process; however, using WTP you can automate the process of fixing the most common detectable issues that the user might encounter using your software or hardware.

For more information, see Windows Troubleshooting Platform.

 

Windows Web Services
Windows Web Services API (WWSAPI) is a native-code implementation of SOAP which provides core network communication functionality by supporting a set of the WS-* and .NET-* family of protocols. WWSAPI offers C/C++ application programming interface (API) for building SOAP based web services and clients to them.

For more information, see Windows Web Services.

 

XPS Documents
Application developers can use XPS documents to share and archive content as electronic paper in a high-fidelity, efficient, and trustworthy format. The XPS document APIs enable developers to create, access, and manipulate XPS documents easily.

For more information, see XPS Digital Signatures and XPS Document.

ffmpeg의 apiexample을 사용한 mpeg encoding 방법

ffmpeg의 apiexample을 사용한 mpeg encoding 방법
|
MMPEG

2007.07.31 17:04

민주가인(ohlucky6)

http://cafe.naver.com/inggi/286

1. ffmpeg library 사용법
2. ffmpeg encoding 방법의 종류
  2.1 YUV
  2.2 RGB->YUV
  2.3 YUV library함수 사용하기
  2.4 RGB->YUV library함수 사용하기
3. V4L에서 영상 받기
  3.1 TV Card
  3.2 USB
4. ffmpeg를 사용하여 encoding하기
  4.1 saveToFile
  4.2 포맷에 따는 각각의 MPEG압축 방법
    4.2.1 YUV420P
    4.2.2 RGB24->YUV420P
    4.2.3 YUV library함수 사용하기
    4.2.4 RGB24->YUV420P library함수 사용하기
5. 요약

-서문
------

본 문서는 ffmpeg를 사용하여 video 신호를 mpeg codec로 encoding하는 방법을 소개한다.
여기서 사용하는 source는 libavcodec의 예제 source인 apiexample.c를 가지고 변형하여
작성한 문서임을 밝힌다.
Reference문서가 많지 않아서 정확한 의미를 알지 못하는 부분이 있다.
만약 그러한 부분에 대한 정화한 의미를 아는 사람이 있다면, director@smu.ac.kr로 연락주기 바란다.
그럼 이제부터 WebCAM과 TV Card를 사용한 ffmpeg encoding 방법에 대해서 알아보자

1. ffmpeg library 사용법
-------------------------

우리가 ffmpeg library를 사용하기 위해서는 동적 라이브러리 파일을 컴파일시
연결시켜 주어야 한다.
동적 라이브러리 파일은 "*.a"파일로서, 우리가 ffmpeg를 통해 인코디하기 위해
사용하는 파일은 "/libavcodec/libavcodec.a"파일이다.
이렇게 ffmpeg library를 사용하는 파일을 컴파일하는 방법은 다음과 같다.

--------------------------------------------------------------------------------
$ gcc -g -O3 -Wall -o [filename] [filename.c] libavcodec.a -lm -lz -ldl
--------------------------------------------------------------------------------

2. ffmpeg encoding 방법의 종류
-------------------------------

장치가 가지는 신호의 종류는 여러가지이다. 그러나 여기서는 RGB24와 YUV420P두가지의
방식을 사용함을 먼저 밝힌다.
RGB24와 YUV420P 두가지의 방식을 사용하여 기본적으로 apiexample에서 제공하는 방식과
함수를 사용하는 방식 2가지로 구분하면 총 4가지의 방식이 나오게 된다.
이제부터 이 4가지의 방식에 대해 소개 하려 한다.

2.1 encoding_YUV.c
-------------------

apiexample.c에서 사용한 기본적인 방식을 사용한 방식이다.
AVFrame이라는 구조체를 선헌하고 구조체의 data배열에 실제 영상을 넣어주어
encoding하는 방식이다.

2.2 encoding_YUV_f.c
---------------------

AVPicture 구조체에 avpicture_fill()함수를 사용하여 영상데이터를
library함수로 넣어주는 방식이다.

2.3 encoding_RGB.c
-------------------

encoding_YUV.c와 방식은 동일하다. context의 세팅값은 PIX_FMT_YUV420P방식으로
세팅되어 있다.
단지 영상을 V4L을 통해서 받아 들일때 우리는 RGB24로 받아오게 되는것이다.
RGB24로 받아진 영상은 AVPicture라는 구조체에 저장되고 저장된 AVPicture를
img_convert()를 통해서 YUV420P로 변환한다.
그런후에 AVFrame 구조체의 배열인 data에 넣어주고 인코딩하게 되는것이다.

2.4 encoding_RGB_f.c
---------------------

모든 것은 위의 encoding_RGB.c와 동일하나 단지 apiexample.c에서 영상을
받아오는 방법과 틀릴뿐이다.
apiexample.c에서는 영상을 받아와 AVFrmae *picture의 data에 넣어 주었다
하지만 여기서는 avpicture_fill()을 사용하여 캡쳐된 영상을
AVPicture 타입의 구조체에 넣어준다.
RGB타입인 이 영상을 YUV방식으로 변환하기 위하여 img_convert()함수를
사용하여 RGB24형태의 영상을 YUV420P포맷으로 변환한 후
avcodec_encode_video()를 사용하여 인코드 시키는 것이다.

3. V4L에서 영상받기
--------------------

자세한 내용은 http://pl.smu.ac.kr/researches/projects/linux-dvr/
의2004-02-02-ELF-Video4linux-Capture.txt 문서를 참조 하기 바란다.
여기서는 TV Card와 USB Camera를 세팅하기 위한 부분만 보도록 하겠다.

--------------------------------------------------------------------------------
int setChannel(struct video_channel chan, int channel_no, int device_type)
{
  switch(device_type)
  {
    /* Case 1 : TV Card setting */
    case 0 :
      chan.channel = channel_no;
      chan.flags = VIDEO_VC_TUNER;
      chan.type = VIDEO_TYPE_TV;
      chan.norm = VIDEO_MODE_NTSC;
      if((rv = ioctl(video, VIDIOCSCHAN, &chan)) < 0)
      {
return -1;
      }
      break;
    case 1 :
      chan.channel = channel_no;
      chan.type = VIDEO_TYPE_CAMERA;
      chan.norm = VIDEO_MODE_NTSC;
      if((rv = ioctl(video, VIDIOCSCHAN, &chan)) < 0)
      {
return -1;
      }
      break;
    default :
      break;
  }
  return 0;
}
--------------------------------------------------------------------------------

3.1 TV Card
------------

위의 소스 코드를 보면 TV Card의 경우 device_type의 값이 0일경우 대응됨을
알 수 있다.
이경우 우리는 총 4가지를 설정해준다.
channel값과 flags, type, norm값등이다. 이런 세팅값들은 다른 TV Card들에서도 동일하다.
여기서 channel값은 일반적으로 가정용 비디오에서의 Input의 종류를 의미한다.
flag값은 비디오 장치가 tuner를 가지고 있다는 것을 알려준다.
tuner가 없을 경우 설정하지 않아도 된다.
type값은 비디오 장치의 종류를 의미하고 여기서는 TV Card이기 때문에
VIDEO_TYPE_TVnorm값은 NTSC와 PAL이라는 TV신호의 종류를 의미한다.

3.2 USB
--------

위의 소스 코드를 보면 USB의 경우 device_type의 값이 1일경우 대응됨을 알 수 있다.
이경우 우리는 3가지를 설정해주는데 channel값과 type, norm값을 설정해 주면된다.

4. ffmpeg를 사용하여 encoding하기
----------------------------------

ffmpeg를 사용하여 encoding을 하기 위해서 우리는 크게 5가지의 단계를 거칠 것이다.
첫번째, avcodec_init();
두번째, avcodec_register_all();
세번째, InitCaptureDevice(DEVICE_NAME, VIDEO_INPUT);
네번째, CaptureImage();
다섯번재, SaveToFile(nMaxCount, map, IMG_W, IMG_H);
첫번째 단계는 avcodec_init()함수를 사용하여 avcodec을 초기화 하는 단계이다.
다음으로 우리는 초기화된 avcodec의 모든 codec을 등록해야 하는데 이일을
avcodec_register_all()함수가 해주게 된다.
그러면 일단 avcodec과 관련된 기본적인 설정은 끝난것이다.
다음으로 우리는 우리가 만든 initCaptureDevice()라는 함수를 부르게 된다.
여기에는 DEVICE_NAME와, VIDEO_INPUT이 인수로 들어가게 되는데 둘다 상수 값으로서
DEVICE_NAME는 TV 또는 USB Camera를 의미하고 VIDEO_INPUT은 말 그대로
input의 종류를 의미한다.
그 다음으로 우리는 설정된 디바이스에서 메모리로 사진을 가져오게 된다.
영상은 여러장의 사진이 모아진 것이므로 우리는 먼저 사진을 찍어야하고
이사진들을 여러장 찍어서 동영상을 만드는 작업을 하게 되는 것이다.
따라서, captureImage()라는 함수를 호출하게 된다.
이 함수는 장치 디바이스로 부터 사진을 받아와 v_map이라는 곳에다 저장하게 된다.
그것을 우리는 in_addr이라는 포인터로 접근 할 수 있다.
이렇게 가져온 사진들을 동영상으로 만들기위해 saveToFile(nMaxCount, map, IMG_W, IMG_H);와 같이
saveToFile()함수를 부르게 된다. 이때 같이 넘겨주는 인수는 총 프레임의 수와 v_map영상이 저장된
곳의 주소(여기서는 in_addr) 포인터, 이미지의 가로와 세로 길이를 넘겨준다.
saveToFile()함수는 이러한 인수를 받아서 nMaxCount만큼 돌면서 map주소에서 IMG_W*IMG_H크기 만큼의
사진을 얻어와 우리가 설정해준 값에 따라서 파일로 저장해 준다.
그렇다면 이렇게 저장되기 위해서 우리는 어떠한 설정을 해주어야 하는 것이라는 것을 알수 있다.
우리는 encoding을 하기 전에 AVContext라는 구조체의 값을 설정해주어야 한다.
이것은 우리가 encoding할 파일의 정보를 설정하는 것으로서 bitrate, framerate등 영상파일에 대한
정보를 가지고 있다. 자세한 내용은 별첨 문서에서 알아보기로 한다.

4.1 saveToFile
-----------------------------------------------------------------------------
  /*
   *
   * Function    : saveToFile
   *
   * Description : After encoding a frame, save to file
   *
   * Global      : n_frame_count
   *
   * Arguments   : int n_max_count, char *int_addr, int n_width, int n_height
   *
   */
  void saveToFile( int n_max_count, char *in_addr, int n_width, int n_height )
  {
    unsigned char *y;
    unsigned char *u;
    unsigned char *v;
    int yy;
    int xx;
    int i = 0;
    AVCodec *codec = NULL;
    AVCodecContext *c = NULL;
    int out_size = 0, size = 0, outbuf_size = 0;
    AVFrame *picture = NULL;
    uint8_t *outbuf = 0, *picture_buf = 0;

    if ( n_frame_count == 0 )
    {
      f = fopen ( "test.mpg", "w" );
      if ( !f )
      {
        fprintf( stderr, "could not open test.mpg\n" );
        exit( 1 );
      }
    }

    if( n_frame_count < n_max_count )
    {
      n_frame_count++;
      printf( "Video encoding\n" );

      /* find the mpeg1 video encoder */
      codec = avcodec_find_encoder( CODEC_ID_MPEG1VIDEO );
      if ( !codec )
      {
        fprintf( stderr, "codec not found\n" );
        exit( 1 );
      }
      c = avcodec_alloc_context();
      picture = avcodec_alloc_frame();

      /*format*/
      c->get_format = PIX_FMT_YUV420P;
      /* put sample parameters */
      c->bit_rate = 400000;
      /* resolution must be a multiple of two */
      printf("%d, %d\n", n_width, n_height);
      c->width = n_width;
      c->height = n_height;
      /* frames per second */
      c->frame_rate = 30;
      c->frame_rate_base= 1;
      c->gop_size = 10; /* emit one intra frame every ten frames */
      /*maximum number of b frames between non b frames.
        note: the output will be delayed by max_b_frames+! relative to th input
        - encodeing : set by user.
        - decoding: unused*/
      c->max_b_frames=1;

      /* open it */
      if ( avcodec_open( c, codec ) < 0 )
      {
        fprintf( stderr, "could not open codec\n" );
        exit( 1 );
      }
      /* the codec gives us the frame size, in samples */
      /* alloc image and output buffer */
      outbuf_size = 100000;
      outbuf = malloc( outbuf_size );
      size = c->width * c->height;
      picture_buf = malloc( ( size * 3 ) / 2 ); /* size for YUV 420 */
      picture->data[0] = picture_buf;
      picture->data[1] = picture->data[0] + size;
      picture->data[2] = picture->data[1] + size / 4;
      picture->linesize[0] = c->width;
      picture->linesize[1] = c->width / 2;
      picture->linesize[2] = c->width / 2;
      //dp = (unsigned char *)out_addr;
      y = ( unsigned char * )in_addr;
      u = y + n_width * n_height;
      v = u + n_width * n_height / 4;

      fflush( stdout );
      /* prepare a dummy image */
      /* Y */
      for( yy = 0; yy < c->height; yy++ )
      {
        for( xx = 0; xx < c->width; xx++ )
        {
     picture->data[0][yy * picture->linesize[0] + xx] = *y;
     y++;
        }
      }
      /* Cb and Cr */
      for( yy = 0; yy < c->height / 2; yy++ )
      {
        for( xx = 0; xx < c->width / 2; xx++ )
        {
   picture->data[1][yy * picture->linesize[1] + xx] = *u;
       picture->data[2][yy * picture->linesize[2] + xx] = *v;
       u++; v++;
        }
      }

      /* encode the image */
      for( i = 0; i < 2; i++ )
        out_size = avcodec_encode_video( c, outbuf, outbuf_size, picture );
      printf( "encoding frame %3d (size=%5d)\n", i, out_size );
      fwrite(outbuf, 1, out_size, f);
    }
    if ( n_frame_count == n_max_count )
    {
      n_frame_count++;
      /* get the delayed frames */  
      for( ; out_size; i++ )
      {
        fflush( stdout);      
        out_size = avcodec_encode_video( c, outbuf, outbuf_size, NULL );
        printf( "write frame %3d (size=%5d)\n", i, out_size );
        fwrite( outbuf, 1, out_size, f );
      }

      /* add sequence end code to have a real mpeg file */
      outbuf[0] = 0x00;
      outbuf[1] = 0x00;
      outbuf[2] = 0x01;
      outbuf[3] = 0xb7;
      fwrite( outbuf, 1, 4, f );
      fclose( f );
      free( picture_buf );
      free( outbuf );

      avcodec_close( c );
      free( c );
      free( picture );
      printf( "\n" );
    }
  }
-----------------------------------------------------------------------------
위의 소스를 보고 순서 대로 알아보자
여기서는 MPEG1을 사용한 인코딩의 방법만을 알아본다.
우리는 먼저 avcodec_find_encoder() 함수를 사용하여 우리가 사용할 코덱을 찾는다
이 작업이 끝나면 AVContext 형의 c에 avcodec_alloc_context();를 사용하여 메모리
공간을 할당해 준다.
그 다음에 AVFrame 형의 picture에 avcodec_alloc_frame();함수를 사용하여 메모리 공간을
할당하여 준다.
그런후 구조체 c에 값들을 세팅해준다.
여기서 세팅하는 값은 나중에 encoding을 할경우 인자로 같이 넘겨줄 값이다.
그런 다음 우리는 실제 영상이 들어갈 곳을 실제 영상이 있는 곳과 연결 시켜 준다.
이부분은 RGB이인지 YUV인지에 따라서 틀려지는 부분이 될 것이다.
여기서는 YUV420P포멧이기 때문에 Y, U, V 3개로 나눈다.
이것은 picture의 의 멤버 변수인 data[]배열에 연결 시켜주는데, 우리가 v_map에서
얻어온 in_addr의 주소를 data[0]에 넣어주고 data[1]와 data[2]에는 Y값이 차지하는
공간을 계산하고 in_addr주소에 Y가 차지하는 주소 공간을 더한 값을 넣어주게 된다.
이렇게 세팅을 한후 이미지를 인코딩 하는데 이미지가 처음에는 지연에 의해서
인코딩 되지 않기 때문에 2번의 인코딩을 함으로써 우리는 실제 데이터를 얻을 수 있다.
따라서, for문 안에 avcodec_encode_video( c, outbuf, outbuf_size, picture );를
2번 돌려서 우리가 원하는 압축된 사진을 얻을수 있는 것이다.
이렇게 나온 사진을 우리는 바로 파일에 저장한다.
이렇게 끝난후에 우리는 지연된 이미지가 있는지 알아보기위해 처음부터 out_size만큼
지연된 프레임을 확인하고 다시 파일에 저장 하게 된다.
그런후 파일의 마지막에 mpeg헤더를 추가한후에 모든 자원을 해제하고 끝내게 된다.

4.2 포맷에 따는 각각의 MPEG압축 방법
-------------------------------------

포맷과 함수를 사용하는지 마는지에 따라서 우리는 전부 4가지 경우의 사례를 볼 수 있다.
이러한 부분은 전부가 picture의 data배열에 자료를 넣어주는 방법에서 차이를 보이게 된다.
이러한 차이에 대해서 이제부터 알아볼것이다.

4.2.1 YUV420P
-----------------------------------------------------------------------------
      picture_buf = malloc( ( size * 3 ) / 2 ); /* size for YUV 420 */
      picture->data[0] = picture_buf;
      picture->data[1] = picture->data[0] + size;
      picture->data[2] = picture->data[1] + size / 4;
      picture->linesize[0] = c->width;
      picture->linesize[1] = c->width / 2;
      picture->linesize[2] = c->width / 2;
      //dp = (unsigned char *)out_addr;
      y = ( unsigned char * )in_addr;
      u = y + n_width * n_height;
      v = u + n_width * n_height / 4;

      fflush( stdout );
      /* prepare a dummy image */
      /* Y */
      for( yy = 0; yy < c->height; yy++ )
      {
        for( xx = 0; xx < c->width; xx++ )
        {
     picture->data[0][yy * picture->linesize[0] + xx] = *y;
     y++;
        }
      }
      /* Cb and Cr */
      for( yy = 0; yy < c->height / 2; yy++ )
      {
        for( xx = 0; xx < c->width / 2; xx++ )
        {
   picture->data[1][yy * picture->linesize[1] + xx] = *u;
       picture->data[2][yy * picture->linesize[2] + xx] = *v;
       u++; v++;
        }
      }
-----------------------------------------------------------------------------
AVFrame형의 data[0]에는 우리는 원래 YUV420P포맷의 영상을 가지고 있는 주소를 넣어준다.
그런후에 포인터를 Y의 크기 만큼 증가 시킨후에 U의 주소를 data[1]에 넣어주고
V의 주소를 data[2]에 넣어준다. 그런후에 linesize를 정해주는데,
Y는 원래 width이고 U,V는 크기가 압축되어 원래 width크기의 반절밖에 안되기 때문에
라인사이즈는 width/2가 된다.
그리고 for문을 돌리면서 각각의  data의 개개별 값에 y, u, v값을 넣어주게 된다.

4.2.2 RGB24->YUV420P
-----------------------------------------------------------------------------
    picture_buf = malloc((size * 3) / 2); /* size for YUV 420 */
    picture->data[0] = picture_buf;
    picture->data[1] = picture->data[0] + size;
    picture->data[2] = picture->data[1] + size / 4;
    picture->linesize[0] = c->width;
    picture->linesize[1] = c->width / 2;
    picture->linesize[2] = c->width / 2;

    newPicture.data[0] = picture->data[0];
    newPicture.data[1] = picture->data[1];
    newPicture.data[2] = picture->data[2];
    newPicture.linesize[0] = picture->linesize[0];
    newPicture.linesize[1] = picture->linesize[1];
    newPicture.linesize[2] = picture->linesize[2];

    avpicture_fill(&myPicture, in_addr, PIX_FMT_BGR24, c->width, c->height);
    img_convert(&newPicture, PIX_FMT_YUV420P, &myPicture, PIX_FMT_BGR24, c->width, c->height);
    fflush(stdout);
    /* prepare a dummy image */
    /* Y */
    for(y=0;y<c->height;y++)
    {
      for(x=0;x<c->width;x++)
      {
picture->data[0][y * picture->linesize[0] + x] = newPicture.data[0][y * newPicture.linesize[0] + x];
      }
    }
    /* Cb and Cr */
    for(y=0;y<c->height/2;y++)
    {
      for(x=0;x<c->width/2;x++)
      {
picture->data[1][y * picture->linesize[1] + x] = newPicture.data[1][y * newPicture.linesize[1] + x];;
picture->data[2][y * picture->linesize[2] + x] = newPicture.data[2][y * newPicture.linesize[2] + x];;
      }
    }
-----------------------------------------------------------------------------
RGB24->YUV420P와 YUV420P와 다른 점은 encoding은 YUV420P로 하지만 처음에 영상을
받은 후에 이미지를 컨버트 하는 점이다. 우리는 avpicture_fill()이란 함수를
사용해 AVPicture형의 구조체에 영상을 받아오게 된다.
받아온 영상은 RGB24포맷이고 이것을 우리는 img_convert()함수를 사용해
YUV420P포맷으로 변화하게 된다.
변화된 영상은 새로운 AVPicture형의 구조체에 할당 되게 되고 이것을 AVFrame의
구조체의 data[0]부터 data[1], data[2]에 넣어주므로서 그냥 YUV420P포맷을
사용했을때와 별 다를바없이 MPEG encoding을 할수 있게 된다.

4.2.3 YUV library함수 사용하기
-------------------------------

-----------------------------------------------------------------------------
    avpicture_fill(picture, in_addr, PIX_FMT_YUV420P, c->width, c->height);
-----------------------------------------------------------------------------
위에서 보았던 것과 같이 AVFrame의 data배열에 직접 넣어주어야 했던 실제
데이터 영상을 우리는 avpicture_fill()이라는 함수를 통해서 자동으로 할 수 있다.
하지만, 여기서는 약간의 문제가 생기게 된다.
무엇이냐면, avpicture_fill()함수의 첫번째인자는 즉 데이터가 들어가게 되는
곳의 형이 AVPicture타입이라는 점이다. AVPicture와 AVFrame의 차이점은 별첨 문서에서
확인하게 될것이다.
이런 것은 우리가 원하는 영상을 얻는데 영향을 미치지는 않는다. 하지만, 컴파일시
warning메세지를 출력하게 된다.
이렇게 간단하게 해주고 우리는 encoding함수를 호출하면 된다.

4.2.4 RGB24->YUV420P library함수 사용하기
------------------------------------------

-----------------------------------------------------------------------------
    avpicture_fill(&temp_picture, buf1, PIX_FMT_BGR24, c->width, c->height);
    avpicture_fill(&temp_picture, in_addr, PIX_FMT_BGR24, c->width, c->height);
    avpicture_fill(&new_picture, buf, PIX_FMT_YUV420P, c->width, c->height);
    img_convert(&new_picture, PIX_FMT_YUV420P, &temp_picture, PIX_FMT_BGR24, c->width, c->height);
    picture = (AVFrame *)&new_picture;
-----------------------------------------------------------------------------
RGB24에서 YUV420P로 변화시키는 과정은 위에서 보았던 함수를 사용하지
않는 것과 차이가 없다.
단지 data배열에 넣는 과정을 함수화 했다는 것이다.
실제 ffmpeg library에 있는 함수를 사용하게 되는것이다.
그리고 형의 충돌을 막기위해 AVFrame형의 picture에 AVPicture형의
new_picture를 넣을때 (AVFrame *)으로 형변환을 해주게 된다.

5. 요약
--------

ffmpeg library에 대한 문서가 정확히 나와있지 않은 상황에서 작성된 문서라
많은 부분이 부족 할 것으로 생각된다.
이 문서를 작성하는 동안에도 새로운 것을 알게 되었고 그부분에 대해서 추가
하지는 못했다.
새로운 방향으로 소스 코드를 고쳐야 하는 문제가 생겼기 때문이다.
그렇지만 기본적으로 영상을 저장하는데는 문제가 없었고 약 1개월동안
Mailing List를 보면서 알게된 점에대해서 부족하지만 적어 보았다.
많은 도움이 되기를 바라고 문제가 있을시에는 director@smu.ac.kr으로 연락 바란다.

'Computing' 카테고리의 다른 글

SATA2하드의 SATA1설정  (0) 2009.11.13
Windows 7, APIs  (1) 2009.11.03
Unofficial FFmpeg Win32 Builds  (0) 2009.09.30
Guide to building FFMpeg for Windows Mobile / Win CE  (0) 2009.09.30
윈도우에서 ffmpeg 컴파일하기(to use in vc++)  (0) 2009.09.30

Unofficial FFmpeg Win32 Builds

Guide to building FFMpeg for Windows Mobile / Win CE

Hi all,

I after playing round with Crags guide I thought I would post what I have found. No small amount of hair pulling from me to

Prerequisites

1. Before proceeding, you must have the Msys + MingW development environment set up. I can highly recommend thishttp://ffmpeg.arrozcru.org/ guide as a starting point. Follow this guide through until you have an environment which is sufficient for building FFMpeg on Windows.

2. Get the CeGCC cross compiler from the http://sourceforge.net/project/showfiles.php?group_id=173455&package_id=198682 . The version you should get is http://downloads.sourceforge.net/cegcc/cegcc-mingw32ce-0.50-cygwin.tar.gz?modtime=1188210321&big_mirror=0%20cegcc-mingw32ce-0.50-cygwin.tar.gz.

3. Unzip cegcc-cegcc-0.50-cygwin.tar.gz into your msys/mingw directory. Assuming you followed the guid in step 1, that will be
"c:\msys\mingw"

4. Rename the winsock 2 library found in
"/mingw/opt/mingw32ce/arm-wince-mingw32ce/lib"
from libws2.a to libws2_32.a. Assuming you followed the guide in step 1 that will be
"C:\msys\mingw\opt\mingw32ce\arm-wince-mingw32ce\lib"

5. Modify the file errno.h found in
"/mingw/opt/mingw32ce/arm-wince-mingw32ce/include/errno.h"
Remove lines 11-14:
#ifdef __COREDLL__
# include_next <errno.h>
#else /* __COREDLL__ */
and lines 106-107:
#endif /* Not __COREDLL__ */

6. Note that this is only an issue if you are ''not'' using CeGCC to build your Windows CE / Mobile application. There is an issue with the alignment of structures that contain 8-byte variables in CeGCC (see this http://www.mail-archive.com/cegcc-devel@lists.sourceforge.net/msg00738.html discussion for more info). The solution for this problem involves modifying the stdint.h header file that ships with the release of CeGCC.
/mingw/opt/mingw32ce/arm-wince-mingw32ce/include/stdint.h
If the guide in step 1 was followed that will be
C:\msys\mingw\opt\mingw32ce\arm-wince-mingw32ce\include\stdint.h
Modify the typedefs of the 64-bit integer variables from:
typedef long long int64_t;
typedef unsigned long long uint64_t;
to:
typedef long long int64_t
#if defined(__GNUC__)
__attribute((aligned(8)))
#endif
;
typedef unsigned long long uint64_t
#if defined(__GNUC__)
__attribute((aligned(8)))
#endif
;

7. Download http://www.gnuarm.com/bu-2.16.1_gcc-4.1.0-c-c++_nl-1.14.0_gi-6.4.exe binutils-2.16.1, gcc-4.1.0-c-c++, newlib-1.14.0, insight-6.4, setup.exe [25.3MB] from http://www.gnuarm.com.

8. Install the gnuArm tools to the default location.

Build Process
1. Check out the latest version of the FFMpeg source from SVN. The rest of this guide will assume you checked out to c:\projects\ffmpeg.

2. Open a MSYS command window and navigate to the directory you checked FFMpeg out to:
cd /c/projects/ffmpeg

3. Add the path to the CeGCC cross compiler's bin directory to your PATH environment variable:
PATH=$PATH:/mingw/opt/mingw32ce/bin

4. Add the path to the gnuArm tools bin directory to your PATH environment variable:
PATH=$PATH:"/C/Program Files/GNUARM/bin"

5. Configure the build by executing the following command:
./configure --enable-mingwce --cross-compile --cross-prefix=arm-wince-mingw32ce- --arch=arm --disable-static --enable-shared --disable-parsers --enable-memalign-hack --disable-ffmpeg --disable-ffplay --disable-debug
note from metalkin) It seems that ffmpeg doesn't support '--enable-mingwce' and '--cross-compile'options anymore, '--enable-cross-compile' could replace '--cross-compile' based on current ffmpeg revision.
During build, dsputil_arm_s.S makes several errors "' junk at end of line, first unrecognized character is `p'". I guess an arm assember has to be designated to compile it.
Due to the reasons, this option could be a bit out of date, I think.

6. Remove any old intermediate files
make clean

7. Start the build by executing make:
make

8. Once the build is finished.
make install

9. The lib and header files will now have been copied over to the directories below.
/usr/local/lib
/usr/local/include/ffmpeg
Which if you followed the guide in the prerequisites will be located in:
C:\msys\local\lib
C:\msys\local\include\ffmpeg

Have fun
ceebmoj

ceebmoj
Posts: 1
Joined: Thu Nov 20, 2008 4:30 pm

윈도우에서 ffmpeg 컴파일하기(to use in vc++)

출처 : http://lotus.tistory.com/5?srchid=BR1http%3A%2F%2Flotus.tistory.com%2F5

http://blogit.blogkorea.net/15838845/http://microdev.pe.kr/84 에서
윈도우용 바이너리를 미리 컴파일 해놓은 것이 있어서 굳이 직접 컴파일 할 필요는 없습니다.

<직접컴파일하는 방법>

다운 받은 패키지는 아래와 같습니다.
원래하드에 깔려 있던 패키지
mingw-5.0.3
추가로 받은 패키지.
MSYS-1.0.11-2004.04.30-1.exe
bash-2.05b-MSYS.tar.bz2
binutils-2.16.91-20060119-1.tar.gz
ffmpeg 소스
svn클라이언트로 ffmpeg을 다운로드 합니다.
주소는 다음과 같습니다. svn://svn.mplayerhq.hu/ffmpeg/trunk
인터넷에서 돌아다니는 문서에 보면 binutils를 받으란 얘기는 없는데 binutils 버전이 안 맞으면 컴파일 도중에러가 나네요. 이것때문에 시간 좀 끌었습니다.
mingw와 msys를 설치해 줍니다. path는 경우에 맞게 지정해주세요.
msys.bat에
call "C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat"
이 한줄을 추가 시켜줍니다. vcvars32.bat가 있는 경로로 수정해주세요.
msys실행 후 link.exe를 실행해서 뭔가 주루룩 나오면 제대로 된겁니다. 그 다음 다운 받은 ffmpeg 디렉토리로 가서 configure를 수행합니다.
./configure --enable-shared --disable-static --enable-memalign-hack
그다음 make를  실행후 컴파일 완료되면
c:\program files\FFmpeg 이란 디렉토리가 생깁니다.
FFmpeg폴더 밑에 lib란 디렉토리를 만든후 원 소스가 있던 FFmpeg소스 디렉토리의 하위 디렉토리에lib파일이 세개 있는데 programs files\FFmepg\lib 디렉토리에 카피 합니다.
그리고 dll파일들은 system32에 카피 합니다.
아래 링크에 설치 과정이 나와있습니다.
http://ffmpeg.mplayerhq.hu/ffmpeg-doc.html#SEC26
http://arrozcru.no-ip.org/ffmpeg/

HOWTO: compiling ffmpeg + x264 + MP3 + Xvid + AMR on Ubuntu

ffmpeg is THE audio/video conversion tool. Unfortunately, the default build included in Ubuntu is usually quite outdated, as well as lacking support for many codecs.
The purpose of this article is to show you how you can build a fresh, up to date version of ffmpeg supporting (almost) all codecs. This procedure was successfully performed on Ubuntu 8.04 and 8.10.
0) Prerequisites
Before we start, let's check if subversion and git are installed. We'll need both to install some of the libraries required by ffmpeg:
ubuntu% svn
Type 'svn help' for usage.
ubuntu% git
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]
OK, they're both present. If not, you need to install them with the following commands:
ubuntu% sudo apt-get install subversion
ubuntu% sudo apt-get install git git-core
Now would be a good time to decide where you're going to build all those sources. Just create a temporary directory anywhere you like (you'll need less than 150MB).
[Updated on 2008/01/02] If you have an existing installation of ffmpeg, you may run into linking issues caused by conflicting library versions. My advice is to remove all existing copies of libav* (libavcodec and so on) which may be present in /usr/lib, either by uninstalling them with APT or by deleting the .a and .so files. Please read the comments below for additional information.
1) Fetching the ffmpeg sources
First of all, let's get the latest ffmpeg source snapshot from the Subversion server:

ubuntu% svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
lots of output removed
Checked out external at revision 28172.
Checked out revision 16245.

Of course, you could just go ahead with configure, make, make install and be done with it. Unfortunately (?), it's not that simple. Go ahead, run configure:

ubuntu% cd ffmpeg
ubuntu% ./configure
--prefix=/usr/local
lots of output removed
Creating config.mak and config.h...

Take a closer look at the output, especially at the 'Enabled encoders' section. A number of major formats, like AAC, MP3, x.264 or XViD are missing. Can you live without these? Probably not...
Why, oh why are they missing? Take another look at the output of the configure command:
libfaac enabled no
libmp3lame enabled no
libx264 enabled no
libxvid enabled no

These encoders are missing because they're handled by external libraries which are not part of the ffmpeg source package. Chasing them all is a bit of a pain in the #$$ and hopefully this article will help!
2) Configuring ffmpeg... and failing
Let's go wild and enable almost everything, including shared libraries (nice if you're running multiple copies of ffmpeg) and POSIX threads (additional parallelism can't hurt):
ubuntu% ./configure --prefix=/usr/local --enable-gpl --enable-nonfree --enable-shared --enable-postproc --enable-avfilter --enable-avfilter-lavf --enable-pthreads --enable-x11grab --enable-bzlib --enable-libamr-nb --enable-libamr-wb --enable-libdc1394 --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libschroedinger --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib

It will inevitably lead to something like this:
FAAD test failed.
If you think configure made a mistake, make sure you are using the latest
version from SVN. If the latest version fails, report the problem to the
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "config.err" produced by configure as this will help
solving the problem.

It's normal, we haven't installed the external libraries required for our ffmpeg build. Let's get to it!
3) Installing libamr
This library is needed for 3GPP speech codecs. For legal reasons, it is not part of the standard Ubuntu repository. You can find it in the Medibuntu repository. Of course, you need to let APT know about this new repository. These are the commands for Ubuntu 8.04 (more information on other versions here):

ubuntu% sudo wget http://www.medibuntu.org/sources.list.d/hardy.list --output-document=/etc/apt/sources.list.d/medibuntu.list
ubuntu% sudo apt-get update && sudo apt-get install medibuntu-keyring && sudo apt-get update
Now you can install libamr:
ubuntu% sudo apt-get install libamrnb-dev libamrwb-dev
4) Installing libnut

NUT is a container format under construction by MPlayer and FFmpeg developers. Libnut needs to be built from source:
ubuntu% svn co svn://svn.mplayerhq.hu/nut/src/trunk/ nut
ubuntu% cd nut
ubuntu% make
ubuntu% sudo make install

5) Installing libx264
x264 is a free library for encoding H264/AVC video streams.
It can be fetched with APT using 'apt-get install libx264-dev' but let's make sure we have both the latest ffmpeg and the latest x264.
Before we build the x264 source, we need to install

  • libgpac, required to support the mp4 container with the x264 codec,
  • the yasm assembler, required to compile several assembly language routines present in the x264 code.
Installing libgpac is straightforward:
ubuntu% sudo apt-get install libgpac-dev
Now, let's take a look at yasm:
ubuntu% yasm --version
zsh: command not found: yasm
It's not there. Let's get it using APT:
ubuntu% sudo apt-get install yasm
ubuntu% yasm --version
yasm 0.5.0.1591

OK, now let fetch the x264 source and configure the build:

ubuntu% git clone git://git.videolan.org/x264.git
ubuntu% cd x264
ubuntu% ./configure --prefix=/usr/local --enable-shared
Found yasm 0.5.0.1591
Minimum version is yasm-0.6.1
If you really want to compile without asm, configure with --disable-asm.

Hmmm.. Do we want to use generic C routines instead of optimized assembly? No. Let's build the latest yasm (0.7.2 at the time of this writing):
ubuntu% sudo apt-get remove yasm
ubuntu% wget http://www.tortall.net/projects/yasm/releases/yasm-0.7.2.tar.gz
ubuntu% tar xvfz yasm-0.7.2.tar.gz
ubuntu% cd yasm-0.7.2
ubuntu% ./configure --prefix=/usr/local
ubuntu% make
ubuntu% sudo make install
ubuntu% yasm --version
yasm 0.7.2.2153

OK, now we can build x264:

ubuntu% cd x264
ubuntu% ./configure --prefix=/usr/local --enable-shared
output removed
Platform: X86
System: LINUX
asm: yes
avis input: no
mp4 output: yes
pthread: yes
debug: no
gprof: no
PIC: no
shared: yes
visualize: no
ubuntu% make
ubuntu% sudo make install

6) Installing libxvid
Before we install libxvid, we need to check that the nasm assembler is OK. It's required to build assembly code inlibxvid and you do NOT want this code to be replaced with generic C code in case nasm is missing : I ran some Xvidencoding tests with and without assembly code and there's a 2.5x factor... So read on :)
You need at least nasm 2.0, so let's check the default version on Ubuntu 8.04 and Ubuntu 8.10:

ubuntu8.04% sudo apt-get install nasm
ubuntu8.04% nasm -v
NASM version 0.99.06-20071101 compiled on Sep 16 2008
ubuntu8.10% sudo apt-get install nasm
ubuntu8.10% nasm -v
NASM version 2.03.01 compiled on Jun 19 2008

So, if you have 8.10, you're good to go and you can skip the rest of this section. If you have 8.04, follow me:
ubuntu% sudo apt-get remove nasm
ubuntu% wget http://www.nasm.us/pub/nasm/releasebuilds/2.05.01/nasm-2.05.01.tar.gz
ubuntu% tar xvfz nasm-2.05.01.tar.gz
ubuntu% cd nasm-2.05.01
ubuntu% ./configure --prefix=/usr/local
ubuntu% make
ubuntu% sudo make install
ubuntu% nasm -v
NASM version 2.05.01 compiled on Dec 23 2008

Now, let's fetch the xvid sources and build them:

ubuntu% wget http://downloads.xvid.org/downloads/xvidcore-1.2.1.tar.gz
ubuntu% tar xvfz xvidcore-1.2.1.tar.gz
ubuntu% cd xvidcore/build/generic
ubuntu% ./configure --prefix=/usr/local
ubuntu% make
lots of output removed
---------------------------------------------------------------
Xvid has been successfully built.
* Binaries are currently located in the '=build' directory
* To install them on your system, you can run '# make install'
as root.
---------------------------------------------------------------

ubuntu% sudo make install
7) Installing everything else
All the other libraries we need are part of the standard Ubuntu repository. Let's install them all with a single command:

ubuntu% sudo apt-get install
libfaac-dev libfaad-dev libschroedinger-dev libtheora-dev libvorbis-dev libxv-dev libxvmc-dev

We also need to install the LAME MP3 encoder. The name of the library differs on Ubuntu 8.04 and Ubunto 8.10, so choose wisely :)

ubuntu8.04% sudo apt-get
install liblame-dev
ubuntu8.10% sudo apt-get install libmp3lame-dev
8) Configuring ffmpeg... and succeeding!

We should have everything we need now. Let's try that configure command again:
[Updated on 2009/02/18 : the '--enable-xvmc' flag has been removed. XVMC support now seems to be integrated by default. If you're using an old build, please add the flag to the command line below]
[Updated on 2009/03/09 : the '--enable-swscale' flag has been removed. This library is now built by default. If you're using an old build, please add the flag to the command line below]
ubuntu% cd ffmpeg
ubuntu% ./configure --prefix=/usr/local --enable-gpl --enable-nonfree --enable-shared --enable-postproc --enable-avfilter --enable-avfilter-lavf --enable-pthreads --enable-x11grab --enable-bzlib --enable-libamr-nb --enable-libamr-wb --enable-libdc1394 --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libschroedinger --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib
lots of output removed
License: unredistributable
Creating config.mak and config.h...
All right. Let's build it.

9) Building ffmpeg
That's the easiest bit!
ubuntu% make
LOTS of output removed
ranlib libavutil/libavutil.a
rm doc/ffserver.pod doc/ffmpeg.pod doc/ffplay.pod
ubuntu% sudo make install
That's it. Cool, huh? Before you can start playing with your ffmpeg binary, you need to register those new dynamic libraries in /usr/local/lib (I'm using zsh. the syntax may be different if you're using another shell):
ubuntu% LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
ubuntu% export LD_LIBRARY_PATH
ubuntu% sudo ldconfig
Now, let's check this new ffmpeg:
ubuntu% which ffmpeg
/usr/local/bin/ffmpeg
ubuntu% ffmpeg -formats
lots of output removed
Pretty good list of codecs, isn't it?
10) Cleaning up

If like me you keep building the latest version, you will eventually end up with a lot of unecessary libraries in/usr/local/lib, e.g.:
ubuntu% cd /usr/local/lib
ubuntu% ls -l libav*
-rw-r--r-- 1 root root 24108334 2009-02-20 11:15 libavcodec.a
lrwxrwxrwx 1 root root 21 2009-02-20 11:15 libavcodec.so -> libavcodec.so.52.15.0
lrwxrwxrwx 1 root root 21 2009-02-20 11:15 libavcodec.so.52 -> libavcodec.so.52.15.0
-rwxr-xr-x 1 root root 5791060 2009-02-04 11:34 libavcodec.so.52.11.0
-rwxr-xr-x 1 root root 5791192 2009-02-05 15:29 libavcodec.so.52.12.0
-rwxr-xr-x 1 root root 5791228 2009-02-10 17:46 libavcodec.so.52.14.0
-rwxr-xr-x 1 root root 5774920 2009-02-20 11:15 libavcodec.so.52.15.0
-rw-r--r-- 1 root root 467478 2009-02-20 11:15 libavdevice.a
lrwxrwxrwx 1 root root 21 2009-02-20 11:15 libavdevice.so -> libavdevice.so.52.1.0
lrwxrwxrwx 1 root root 21 2009-02-20 11:15 libavdevice.so.52 -> libavdevice.so.52.1.0
-rwxr-xr-x 1 root root 39492 2009-02-20 11:15 libavdevice.so.52.1.0
-rw-r--r-- 1 root root 63220 2009-02-20 11:15 libavfilter.a
lrwxrwxrwx 1 root root 20 2009-02-20 11:15 libavfilter.so -> libavfilter.so.0.3.0
lrwxrwxrwx 1 root root 20 2009-02-20 11:15 libavfilter.so.0 -> libavfilter.so.0.3.0
-rwxr-xr-x 1 root root 17876 2009-02-20 11:15 libavfilter.so.0.3.0
-rw-r--r-- 1 root root 6259158 2009-02-20 11:15 libavformat.a
lrwxrwxrwx 1 root root 22 2009-02-20 11:15 libavformat.so -> libavformat.so.52.29.0
lrwxrwxrwx 1 root root 22 2009-02-20 11:15 libavformat.so.52 -> libavformat.so.52.29.0
-rwxr-xr-x 1 root root 766736 2009-02-05 15:29 libavformat.so.52.25.0
-rwxr-xr-x 1 root root 770972 2009-02-10 17:46 libavformat.so.52.26.0
-rwxr-xr-x 1 root root 771072 2009-02-12 16:57 libavformat.so.52.27.0
-rwxr-xr-x 1 root root 775232 2009-02-13 11:22 libavformat.so.52.28.0
-rwxr-xr-x 1 root root 767108 2009-02-20 11:15 libavformat.so.52.29.0
-rw-r--r-- 1 root root 225672 2009-02-20 11:15 libavutil.a
lrwxrwxrwx 1 root root 20 2009-02-20 11:15 libavutil.so -> libavutil.so.49.14.0
lrwxrwxrwx 1 root root 20 2009-02-20 11:15 libavutil.so.49 -> libavutil.so.49.14.0
-rwxr-xr-x 1 root root 55508 2009-02-20 11:15 libavutil.so.49.14.0
There's nothing really wrong here, but for the sake of clarity, you may want to remove the old libraries, i.e. the ones NOT linked as lib*.so.
That's it for today :)
Related Posts by Categories

ffmpeg

open source

howto

x264

Written by: Julien Simon at 3:45 PM

Tags: ffmpeg, howto, open source, x264

오키나와에 있는 수족관

 

 

가보고 싶다.. 움..

다음 여행은 오키나와로~~ ㅎㅎ

Excel에서 만든 Graph를 LATEX에 삽입할 수 있는지요

 

http://doc.ktug.or.kr/gfaqprj/gfaq-html/node54.html

 

Excel에서 만든 Graph를 LATEX에 삽입할 수 있는지요.

[*] Windows 시스템에서 사용하는 그림 정보는 WMF(EMF)라는 형태의 포맷을 가집니다. MS사의 프로그램에서 만들어지는 그림들은 모두 이 포맷이죠. 그러므로 메모리에 있는 그림을 파일로 그대로 쓰면 wmf 그림이 됩니다.

메모리의 그림 정보를 파일로 기록하기 위해서는 ClipMeta차재춘 님이 만드신 ClipWMF 같은 유틸리티를 쓰면 쉽게 파일로 쓸 수 있습니다.

Excel에서 그래프를 만들어서 그래프 전체를 선택합니다. 그런 다음, 이것을 잘라내기(Ctrl-X)합니다. `복사'를 해서는 그림이 잘 안 잡아진다는 보고가 있었답니다. 그런 다음 클립보드에 있는 그림을 ClipMeta로 디스크에 쓰면 됩니다.

그리고, wmf2eps를 실행하여 이 wmf 파일을 EPS로 변환하세요.

참고로, 1999년 12월에 게시판에 올려주신 `무식인' 님과 강윤배 님의 게시물을 인용합니다.

무식인:
드디어 엑셀의 막대그래프를 텍에 넣는데 성공했읍니다. 정말 기쁨에 눈물이 앞을 가립니다. clipwmf프로그램에 대한 정보를 주신 도은이 아버님과, 이를 만드신 차재춘 님께 감사드립니다.
clipwmf.exe파일은 http://www.texplus.com이나, 도은이 아버님이 아래의 ``bibtex로 리퍼런스 만들기''의 답장에 달아 놓으셨습니다.3
clipwmf.exe파일은 클립보드에 있는 그림등을 캡쳐하는 기능을 가지고 있습니다.
clipwmf.zip을 다운 받아서 풀면, clipwmf.exe파일 하나만 중요한 파일이고 나머지는 파일들은 사용설명을 담고 있읍니다. 이 파일을 실행시키면 맨 아래에 작은 아이콘이 다른 아이콘 옆에 생깁니다. 만약 그림 파일을 띄운 상태에서 그림을 클릭해서 copy 또는 cut 명령을 쓰면 이 그림은 일시적으로 클립보드에 카피되어 있읍니다. 이때 마우스 화살표를 clipwmf의 작은 아이콘에 대고 오른쪽 버튼을 누르면 Save, About,Exit의 세 문구가 나오는데 save 하면 그림을 캡쳐합니다. 파일 형식은 *.wmf로 됩니다.
그러나 주의 할 점은 엑셀의 히스토그램은 copy 명령을 때리고 clpwmf로 캡쳐하려면 안된다는데 중요한 포인트가 있읍니다. 엑셀의 히스토그램을 클릭하면 그림,설명내용, 백그라운드...등 여러가지 중 하나가 선택되는데, 이것을 캡쳐해 보았자 쓸모가 없겠지요. 저는 이것때문에 한참동안 고생했읍니다. 따라서, cut을 선택해야 캡쳐가 가능합니다. 히스토그램에 마우스로 클릭하고 cut을 하면 몽땅 클립보드에 임시로 저장되겠지요. 그런후에 clpwmf를 사용해서 wmf파일 형태로 저장하면 됩니다. $\rightarrow$ 쉬운 내용을 너무 어렵게 설명한 것 같군요.
그후의 일은 일사천리입니다. 저장한 wmf파일은 wmf2eps를 사용해서 EPS(TeX에 잘 사용되는 그림포맷) 형태로 만들거나, Paint Shop Pro 테스트 버전이 있으시면 이 프로그램으로 wmf를 읽어서 EPS로 저장하셔도 됩니다.
도움이 되셨으면 합니다. 건강하십시오.
강윤배 :
무식인 님께서 여기 언급하신 내용과 관련된 정보가 박원규 님 홈페이지(http://chem.skku.ac.kr/~wkpark)에도 제법 있습니다. 저는 이 홈페이지에서 clipmeta라는 프로그램을 다운받아 사용했는데 무식인님께서 말씀하신 clipwmf랑 거의 비슷한것 같네요... 이 홈페이지에는 wmf파일에 관한 설명과 LaTeX에서 그림을 사용하는 방법을 상세히 설명해 놓고 있습니다...관심있으신 분은 한번 둘러보셔도 좋을것 같네요...

[칼럼]SW개발자의 희생을 요구하는 문화는 바뀌어야 한다

[칼럼]SW개발자의 희생을 요구하는 문화는 바뀌어야 한다

류한석 IT칼럼니스트 hanseok.ryu@gmail.com

2009.07.21 / AM 10:00

티맥스윈도,

[패널토의 동영상보기] 전문가 5인이 말하는 ‘국내 앱스토어의 미래’

[지디넷코리아]지난 7월 7일, 티맥스소프트의 티맥스윈도 제품 공개 후 업계와 인터넷이 시끄럽다. 논란의 주제들도 다양하다. OS 개발이 과연 우리 수준에 가능한 일이고 또한 필요한 일인가, MS 호환 제품을 굳이 만들어야 하는가, 오픈소스 도용 의혹, MS와의 상표권 분쟁, 박대연 회장의 발언 논란까지 티맥스와 관련된 이슈들이 참으로 많다.

물론 티맥스의 성공과 박대연 회장의 사업가로서의 능력은 명백하게 인정할 만 하다. 티맥스는 작년에 매출 1천억원을 돌파했는데, 국내 소프트웨어 산업의 현실을 감안할 때 무척 놀라운 일이다. 불가능해 보이는 목표를 향한 그의 공격적인 경영 덕분에 가능한 일이었다.

박대연 회장의 주장대로 이번에 OS만 제대로 개발된다면, 전세계에서 IBM과 MS 다음으로 데이터베이스, 미들웨어, OS 모두를 보유한 토털 소프트웨어 업체가 될 수도 있다. 소프트웨어 산업의 가장 핵심적인 제품 세가지를 모두 보유하게 되는 것이다.

하지만 빛이 있으면 그림자도 있다. 티맥스는 부채가 1천500억원이고 작년 영업이익은 14억원에 불과하다. 여전히 티맥스의 소프트웨어들은 국내용이고, 또한 SI 프로젝트의 비중이 상당하고, 작년에만 직원 수가 두 배로 늘어 조직 관리에 대한 잡음이 회사 외부에까지 들리고, 올 1분기에 150억원의 적자를 냈고, 급여가 제때 지급되지 않아 자금위기설도 있었고, 최근에는 자구책으로 임직원들이 증자에 참여하기도 했다.

필자는 티맥스가 OS를 개발하는 것 자체를 평가절하하고 싶은 마음은 전혀 없다. 그것은 경영자의 사업 전략이자 의사결정 영역이기 때문이다. 어려운 목표에 도전하기로 한 사업적 결정을 존중하고 싶다. 다만, 티맥스가 업계에 미치는 영향이 상당하기에(또한 논란이야말로 커다란 에너지 소모가 아니던가), 그러한 관점에서 다음과 같은 세가지 사항을 살펴보고자 한다.

첫째, 개발자들의 희생을 바탕으로 제품을 만드는 문화는 바뀌어야 한다.

티맥스에 따르면, 티맥스윈도의 개발에 350명의 개발자가 참여하고 있다고 한다. 티맥스는 과거 DBMS의 개발에만 7년이 걸렸다고 하는데, 지난 5월까지만 해도 DBMS보다 훨씬 복잡성이 높은 OS 개발과 관련하여 다음과 같이 주장했다. 티맥스는 OS 개발을 올해 상반기에 끝마쳐서, 올 7월에 출시한 후 8월에는 일반인 대상의 테스트를 하고, 늦어도 10월 1일에 소비자가 구매할 수 있도록 하겠다고 호언한 바 있다. 하지만 지난 7일의 발표회에서 선보인 제품은 베타는커녕 알파 버전이랄 수도 없는 것이었다.

이렇듯 말도 안 되는 일정의 수립이야말로, 저명한 소프트웨어 공학자인 에드워드 요든(Edward Yourdon)이 말한 ‘죽음의 행진(Death March)’ 프로젝트의 가장 핵심적인 요건이다.

티맥스는 MS 대비 100분 1의 인력으로 OS를 개발하고 있는 상황인데, 박대연 회장은 개발자들에게 “꿈속에서 프로그램이 보이면 문제다. 꿈속에서 에러를 찾아야 한다”고 강조한다고 한다. 그 자신 스스로 ‘8-10맨’이라며 오전 8시 출근해서 오후 10시에 퇴근하며, 또한 자신의 목표 달성을 위해 지난 25년간 영화, 드라마를 단 한번도 보지 않았다고 한다.

그런 타입의 경영자는 모든 산업에 존재하는데, 자신의 열정만큼 직원들에게도 열정을 강요하곤 한다. 실제로 그는 발표회와 인터뷰에서 직원들이 얼마나 희생하고 있는 지를 강조하며, 이혼당한 개발자, 건강 이상으로 쓰러진 개발자 이야기를 공공연히 밝혀왔다. 직원들의 가정파괴와 건강상실은 경영자로서 부끄럽게 생각할 일이지 자랑스러워 할 일이 아니다.

우리는 한국에서 그런 식의 죽음의 행진 프로젝트를 지금까지 많이 보아왔다. “지금의 고생만 참으면 파라다이스를 만날 수 있어” 프로젝트 말이다. 하지만 아무도 파라다이스를 만난 적은 없었다.

인간의 정신에 의한 100% 순도의 멘탈 작업으로 만들어지는 소프트웨어는 희생에 의해 창조되는 것이 아니다. 그렇게 해서는 A+급 소프트웨어가 나올 수 없다.

해외의 성공한 소프트웨어 기업들을 살펴보면 공통점이 있다. 직원들이 자유롭고 즐겁고 행복하다는 것이다. 바로 그런 가운데 고도의 집중력을 발휘함으로써 최상의 정신적 산물인 소프트웨어가 창조된다. 그렇다. 진정으로 가치 있는 A+급의 소프트웨어는 고통을 참고 희생하는 가운데 만들어지는 것이 아니라, 자유롭고 행복한 환경에서 만들어진다. 필자는 그것이 바로, 한국이 아직까지 소프트웨어 산업에서 성공을 만들어내지 못한 가장 큰 이유라고 믿는다.

개발자들이 피곤한 몸을 이끌고 억지로 야근하는 상황에서는 비록 개발이 진척된다고 하더라도, 분노와 고통의 안 좋은 기운이 코드에 스며들어 버그가 양산되고 결국 품질이 저하된다. 해외의 연구에 따르면, 일주일에 20시간 정도의 야근을 할 때는 생산성이 증가할 수도 있지만, 이후에는 분명히 쉬어줘야 하며 그렇지 않으면 순생산성이 낮아진다. 야근은 임시일 뿐 지속되어서는 안 되는 것이다. 삶에서 오로지 일이 전부인 일중독자들을 제외하고는 다들 경험상 이 말에 동의할 것이다.

과연 티맥스가 전세계의 선진 소프트웨어 기업들에서는 찾아볼 수 없는 죽음의 행진 방식을 통해 제대로 된 OS를 만들어 낼 수 있을까? 물론 성공할 가능성이 희박하다고 보여지지만, 설사 성공한다고 하더라도 바람직한 일이 아니다. 국내에서 그런 죽음의 행진 풍토가 더욱 일반화될 것이기 때문이다(물론 지금도 충분히 일반화되어 있지만 말이다).

한국의 개발자들에게 고하건대, 어떻게 대해도 해내니까 어떻게든 학대하는 것이다. 그렇게 해서 결과물을 완성시켰다고 하더라도 소프트웨어 산업은 발전하지 않는다. 그것이 바로 소프트웨어 산업이 다른 종류의 산업들, 즉 제조업, 건축/토목업 등과 다른 점이다. 육체와 달리 정신은 여유가 있을 때야 비로소 제대로 동작하기 때문이다. 개발자들의 희생을 통해 만들어진 소프트웨어는 언제나 창조성이 떨어지고 본질적인 품질 문제가 존재한다.

필자는 지금까지 이혼을 당하고, 회사에서 쓰러져 식물인간이 되고, 종교에 귀의하고, 다른 직업으로 전직하는 개발자들을 많이 보아왔다. 산업 논리와 경영자의 욕심으로 인해 더 이상 개발자들이 희생 당하는 일이 없기를 바란다. 어떻게든 제품이 나오면 무얼 하겠는가? 개발자들이 치를 떨며 업계를 떠나는 이 현실에서 말이다.

한국의 소프트웨어 산업에서 진정으로 필요한 것은 개발자들의 희생정신이 아니라 즐겁게 일하며 최상의 창조성을 발휘할 수 있는 환경이다.

둘째, 오픈소스 도용 의혹에 대해 명확히 밝힐 필요가 있다.

많은 사람들이 티맥스가 너무도 짧은 시간에 적은 인력들로 100% 자체 기술로만 OS를 개발하여 출시하는 것이 실제로 가능한가라는 의문을 갖고 있다. 사실 양적, 질적으로 그것은 불가능한 것이다. 유능한 인재들의 집합체인 마이크로소프트조차 5조원의 돈을 투자하여 개발하고서도 좋은 평가를 받지 못하는 분야가 바로 OS이다.

그런 상황에서 티맥스의 OS 개발자라고 밝힌 이가 모커뮤니티 게시판에 오픈소스를 참조하여 개발하고 있다는 글을 올리면서, 티맥스윈도의 오픈소스 도용 의혹이 인터넷에 급격하게 퍼지게 되었다.

의혹의 핵심은 “티맥스윈도가 오픈소스의 짜깁기가 아니냐”는 것이다. 실제로 인터넷에는 MS 윈도 에뮬레이터, 호환 OS 개발을 위한 쓸만한 오픈소스들이 많이 존재한다. 리눅스 상에서 윈도 프로그램을 가동하기 위한 Wine, 그리고 MS 윈도와 호환성 있는 OS를 개발하는 ReactOS 등이 대표적이다.

그런데 소스가 공개된 오픈소스라고 해서 라이선스가 없는 것이 아니다. 오픈소스의 종류에 따라 라이선스들도 다 다르고 무척 복잡하여 함부로 상용 소프트웨어의 개발에 사용해서는 안 된다. 저작권 침해로 소송을 당할 수도 있기 때문이다. 그래서 일부 대기업에서는 자사 개발자들이 오픈소스를 함부로 사용하지 못하도록 교육도 하고 있다.

물론 오픈소스를 가져다 쓰는 것 자체가 문제는 아니다. 그 사용을 명확히 밝히고 라이선스의 내용을 준수하면 된다. 만일 기존 오픈소스를 개선한 부분이 있다면 오히려 그것을 공개함으로써 오픈소스 커뮤니티에서 훌륭한 기여자로 평가 받을 수도 있다.

결국 현재의 문제점은, 많은 사람들이 의심을 하고 있고 티맥스의 개발자라고 주장하는 이가 올린 글로 인해 의혹이 더욱 커졌음에도 불구하고 티맥스측에서 “얼마나 오픈소스를 사용했는지, 그리고 라이선스를 지켰는지”에 대해 정확히 밝히고 있지 않다는 점이다. 이와 관련해서 오픈소스 진영의 사람들 중에는 분노를 표시하는 사람들이 많다. 티맥스는 오픈소스 도용 의혹이 해소될 수 있도록 공식적인 입장을 표명할 필요가 있다.

셋째, 애국심에 호소하는 자세와 불필요한 언사, 정치적 행보는 자제할 필요가 있다.

티맥스윈도와 관련한 여러 가지 의혹과 논란 및 반감을 증대시키는 것은 박대연 회장의 일련의 발언들 덕분이다. 특히 그는 국민이 인정해주는 국민 소프트웨어 기업이 될 것임을 공공연하게 강조해왔다. 그런데 국민 가수가 되고 싶다고 될 수 없듯이, 국민 소프트웨어 기업 또한 스스로 원한다고 해서 될 수 있는 것이 아니다. 그리고 애국, 국민 등의 키워드를 강조해서 잘 된 기업이 없다. 그 자체로 정치적인 성향을 증명하는 것이기 때문이다.

최근 중앙일보와의 인터뷰를 통해 알려진 그의 어록은 대단하다. 일부만 살펴보면 다음과 같다.

“토종 OS의 등장은 한국 산업사에서 조선이나 자동차, 반도체 산업 진출에 비견되는 위대한 도전이다.”

“티맥스윈도와 오피스로 2012년까지 세계 OS 시장의 10%를 차지할 것이다.”

“내년에 해외법인 10개를 세울 것이다. 2011년에는 30개가 추가된다.”

(인력이 부족하지 않냐는 질문에 대해) “실제로 MS윈도 개발의 핵심인력은 5명에 불과하다. 나머지는 테스트하고 성능을 개선하는 인력이다.”

“구글의 OS는 우리 기술의 5분의 1도 안 된다.”

또한 지난 7일의 시연에서 올드 게임 구동과 동영상 재생조차 제대로 되지 않았음에도 불구하고, 여전히 1%가 미완이며 단순 에러라서 향후 3개월 내에 문제점이 0.1%도 남지 않을 것이라고 주장하기도 했다.

이런 경영자의 주장은 회사의 이미지에 나쁜 영향만 끼칠 뿐이다. 개발은 말로 하는 것이 아니다. 제품으로 보여주어야 한다. 기업용 제품인 DBMS, 미들웨어에 대해 호언장담을 할 때에는 대중의 관심이 적어서 그럭저럭 묻힐 수 있었겠지만, 개인 소비자 대상의 OS에 대해 이런 식으로 얘기를 해서는 곤란하다. 기업의 신뢰성에 심각한 손상이 갈 뿐이다.

티맥스 내부에서 “회장님, 이러시면 안됩니다.”라고 말하는 사람조차 없는 것일까? 그의 경영 스타일로 보건대 충분히 그럴 거 같다.

그리고 이번 발표회에서 테잎커팅(실제로는 전원을 키는 방식)에 강만수 국가경쟁력강화위원회 위원장을 비롯하여 금융감독원장, 국회의원 등 정재계 인사들이 다수 참석했다.

이에 대해 발표회의 많은 참석자들이 의아하게 생각했으며, 티맥스의 정치적 행보에 다시금 의심의 눈초리를 보내고 있다. 핵심 개발자들이 테잎커팅을 할 수는 없었을까? 그랬다면 그들의 자부심을 높였을 것이고 업계 전반에 훈훈한 미담이 되었을 것이다.

티맥스는 기업의 이미지와 티맥스윈도의 마케팅을 위해서 어떻게 처신하는 것이 가장 올바른가를 다시 한번 생각해보았으면 좋겠다. 현재와 같은 방식은 안티들을 양산할 뿐이다. 적어도 이 기술업계의 승자들(예컨대 애플, 구글 등)은 거의 종교라고 할 수 있을 정도로 강력한 팬들을 거느리고 있다. 그런 팬을 만들어내지는 못할망정 안티들만 늘어난다면 티맥스윈도의 앞날은 잿빛이 될 뿐이다.

이상으로 업계와 인터넷에서 큰 논란이 되고 있는 티맥스윈도와 관련된 세 가지 주요 이슈들을 개발자들의 희생, 오픈소스 도용 의혹, 정치적 행보라는 관점에서 살펴보았다. 필자의 주장 또한 하나의 견해일 뿐이므로, 이에 대해서도 바라보는 관점에 따라서 논란이 있을 수 있다.

하지만 위의 세가지 내용은 국내 소프트웨어 업계에서 오래 전부터 만연되어 온 구태의연한 문제점들이다. 새삼스러울 것이 없는 것들이다. 그 정점을 티맥스가 찍고 있다고 본다.

혁신적인 제품을 만들려면 그 방식부터 혁신이 필요하다. 그럼에도 불구하고, 티맥스가 성공적인 제품을 만들어 낼 것인지 애정과 비판의 마음으로 계속 지켜보면서 필요하다면 추가적인 글을 쓰도록 하겠다. @

test1

test1

[펌] 한나라당 지지자 아빠를 설득한 딸의 편지

** 좀 깁니다~ **
- 퍼온글-

아빠, 보세요.
한참을 고민하다... 결국 드리기로 했습니다. 좀 길지만 끝까지 봐주셨음 해요.
아빠... 한동안 잠잠하던 아빠와 나 사이가 노무현 대통령으로 인해 다시금 말을 섞지 않는 상태가 되었습니다.

아빠도 지치셨을 테고, 저도 이제 지쳤습니다.

작년 말에도 제가 한나라당을 싫어할 수밖에 없는 개인적인 이유를 편지로 말씀드렸죠? 12월 마지막 날을 밤을 새면서... 울면서 그 편지를 썼었드랬죠...

오늘은 다른 이유를 추가로 말씀드리지요.
제 마지막 설득 시도입니다. 다 읽고도 한나라당을 좋아하시겠다면, 포기하겠습니다.

아시다시피, 저 노사모 회원인 적도 없었고, 노무현 대통령 생전에 그가 만든 홈피나 그를 지지하는 홈피, 카페 등등 어느 곳에도 가본 적도 가입한 적도 없습니다. 절대 '노빠'가 아니라는 말이지요...
노무현 대통령이 자살해서 나라 망신시켰다고 하셨죠? 수치스럽다고 하셨죠? 하지만, 노무현 대통령이 자살한 게 국가적 수치가 아니라 노무현 대통령을 죽음으로 몰아간 것이 국가적 수치입니다.

지금 해외 언론에서는, "그 정도로 죽다니, 대단하다. 우리나라라면 죽어야 할 사람들 엄청 많을 텐데... 한국은 깨끗한 나라인가보다"라고 합니다. 물론 그런 반응을 아빠가 보시는 신문에서는 제대로 보도 안 해줍니다.
명색이 선진국클럽 OECD에 가입한 '선진국'이면서도 부패 순위가 40위씩이나 되는 우리나라가 깨끗한 나라로 오해받고 있다는 말입니다. 그 정도에 자살했다고.
돈을 받은 건 받은 거니 잘못된 거 아니냐 하고 싶으시죠?
네. 받았죠. 부인이, 자식이 받았죠. 남자가 비겁하게 부인 탓 하냐 하고 싶으시죠?
하지만 노무현 대통령은 평범한 남편이, 가장이 아니라 전직 대통령이거든요. 깨끗한 정치를 하겠다고 국민 앞에 약속을 했던 정치인이기 때문에 자기를 믿어준 사람들에게 그렇게 말한 겁니다. 집안 단속을 하지 못한 게 죄라면 죄겠죠.
그런데 말이죠... 그 돈을 받은 게 죄라고 쳐도, 그렇게 큰 죄입니까?
박연차는 한나라당 재정위원이었습니다. 한나라당 의원들에게는 얼마나 많이 뿌렸을까요?
현직 부장검사도 박연차 돈을 받았는데 대가성이 없다고 검찰이 말했죠?
네, 맞습니다. 처벌의 기준은 '대가성 여부'입니다. 그게 대한민국 법입니다.
퇴임을 목전에 둔 이빨 다 빠진 대통령에게 머리에 총 맞지 않고서야 어떤 미.친.놈이 '뇌물'을 줄까요?
그리고 제가 예전부터 계속 말했듯, 노무현 대통령은 모든 것을 대통령의 결재를 받아야 일이 추진되는 시스템을, 웬만한 건 장관이 책임지고 할 수 있는 체제로 바꾸어 놓았었습니다. 이걸 'empowerment'라고 합니다. 권한을 아래로 나누어주었다는 말입니다. (그래서 탄핵 사태 때도 국정이 마비되지는 않았었습니다. 보수 기득권층에서는 고건이 대행하니 잘 돌아갔다고 하지만, 그렇지 않습니다. 이미 집권 초기부터 대통령이 제왕적으로 모든 걸 결정하던 체제를 바꾸어 놓았었기 때문에 큰 문제없이 돌아갔습니다.)
이런 상황에서 어떤 기업가가 사업 봐달라고 뇌물을 줍니까? 그게 목적이라면 국회의원한테 주면 주었지 대통령한테는 줄 실익이 없다는 말입니다.
우리 기업들이 노무현 싫어했지만, 그가 재임하던 시절만큼은 대통령한테 돈을 안 바쳐도 되어서 그건 좋았다고 말할 정도입니다. 그렇다면, 대한민국 법에 따르면 노무현 대통령은 '돈은 받았지만 죄지은 것은 아닌' 것입니다.
그런데 검찰은 언론에 슬슬 흘리면서, 물적 증거가 없는데도 계속 주변을 옥죄어 들어가면서 압박한 것입니다. 가족에게만 수사의 칼날을 들이댄 게 아니었다고 합니다. 지인들의 6개월 치 식당 영수증까지 다 가져갈 정도로 훑었지만 딱히 증거가 안 나왔다고 합니다. 지금 도청 의혹마저 나오고 있는 상황입니다.
아빠도 검찰에 가보셨잖아요. 엄마도 아빠 땜에 검찰에 가보셨잖아요. 나 그때 고3이었잖아요. 그때 시험기간 이었잖아요. 가족까지 당하는 고통이 어떤 건지 정녕 모르세요? 그때 억울한 마음 안 드셨어요? 드셨잖아요. 지금까지도 억울하잖아요. 그런 아빠가 어찌 노무현 대통령한테 그리 가혹한 말씀을 하실 수가 있으세요. 노무현 불쌍하다는 엄마한테 뭐가 불쌍하냐고 하실 수가 있으세요... 자살한 지 탓이라고 하실 수가 있어요...

그리고 이건 저도 며칠 전 알게 된 사실인데, 대통령특별교부금... 대통령 재량으로 교부금으로 줄 수 있는.. 쉽게 말해 판공비죠. 노무현 대통령은 이를 국가사업이 필요한 행정기관에 내놓았다고 합니다. 2003~4년엔 1조2천억씩이었는데, 그마저도 “특별교부금은 원칙 없이 정치적 선심사업에 사용된 경우가 적지 않았다. 배분기준을 재검토해 자의적으로 사용될 여지가 없도록 개선하라”고 지시하고 7천억 정도로 줄였다고 해요. 그럼 재임기간 5년 동안 판공비 4조5천억 정도를 반납한 거죠. 그런 돈은 태풍 매미로 엄청난 피해가 났을 때 복구사업비로 사용되는 등 긴급한 용도에 긴요하게 쓰였다고 합니다.
올해 우리나라 중앙정부 1년 예산이 280조 정도예요. 대통령 1인이 판공비로 쓸 수 있는 돈이 1조 이상이라면 엄청난 수준입니다. 이런 사람이 박연차에게 10억인지 몇 억인지 모를 그 돈을 받고, 얼마짜린지 모르지만 '좋아 보이는' 시계를 받고 뭔놈의 선심성 대가를 주었을까요? (그나마 그것도 죽음 후에는, 노대통령 부부가 본 적도 없는 시계라고 돌려주라고 했다고 기사가 나오데요. 사람 죽인 후에. 노통이 "논두렁에 버리든지" 라고 한 걸 언론은 "논두렁에 버렸다"로 왜곡한 거데요)

네, 아빠가 한나라당은 좋아해도 이명박 대통령은 그닥 좋아서 찍은 건 아니라는 건 알아요. 박근혜 전 대표를 좋아하죠.
저도 박 전 대표 싫어하는 건 아니지만 좋아하지도 않아요. 극도로 싫어하는 건 아니니 그를 찍을 수도 있지만 한 가지 전제조건이 필요해요.
제가 그분이 자질이 부족하다 생각하게 된 계기가 뭔지 아세요?
대구에 가서는 육영수 여사의 영정사진을 앞세우고 유세합니다.
전라도에 가서는 아버지와 자신을 연결 짓지 말라고 말합니다. (정확한 날짜는 기억나지 않지만 선거 유세 중에 분명히 나온 말입니다)
박근혜 전 대표는 박정희 대통령의 딸이고 그건 본인이 벗어날 수가 없는 후광이자 굴레입니다. 박정희 대통령은 재임 시절에 많은 공적을 이루어내셨죠. 절대적 빈곤을 벗어나게 한 것만으로도 대단한 일을 해내신 것만은 틀림없습니다.
그런데 그 과정에서 희생한 많은 사람들이 있잖아요.
1960년대 통틀어 평균 경제성장률이 9.6%였는데 임금상승률은 3%였어요. 이 땅의 많은 '공순이' '공돌이'들이 독가스를 들이마시면서, 먼지를 마시면서도, 잘 살아보겠다는 일념으로 하루 15시간씩 열심히 일했지요. 근데 그 열매는 누가 가져갔나요? 절대적 빈곤은 벗어났지만, 정작 사회를 병들게 하는 건 상대적 빈곤이랍니다.

한 가지 사례만 들게요.

상대적 박탈감은 박정희 시대에 서서히 커지다가 전두환 시절을 거치면서 극에 달합니다. 1987년 6ㆍ10항쟁 이후 터져 나온 이러한 불만은 급격한 임금 상승 요구로 이어졌고, 우리나라 제조업들이 갑자기 어려움에 직면하게 됩니다.
박정희, 전두환 시대를 거치면서 많은 혜택을 받은 대기업들은 심한 타격을 받지 않았지만 대다수 조그마한 중소기업들은 제조업에서 손을 뗀 경우가 많았습니다.
나라의 돈들이 건설업과 유흥업으로 들어가기 시작합니다. 근데 한 나라가 지속적인 성장을 하려면 2차산업.. 제조업이 망해선 안 됩니다. 아무리 첨단IT 시대라 해도 여전히 제조업은 포기하면 안 되는 중요한 분야입니다. 근데 하물며 80년대 후반입니다. 물론 유흥도 필요하죠.. 근데 나라의 돈이 제조업을 떠나 그런 쪽으로 도는 것이 좋은 현상은 아니죠. 지금도 대부분의 중소기업들은 독자기술 별로 없는, 대기업의 하청업체 수준에 불과하죠. 그리고 갑자기 건설 붐이 일어나 많은 업자들이 당시에 기준치를 밑도는 두께의 철근과 물을 과도하게 탄 시멘트를 사용하게 됩니다.. 90년대 들어 갈라지고 무너지고 기울어진 많은 건축물들은 80년대 후반에 지어진 것들이 많습니다..

나비효과 아시죠? 상대적 박탈감은 이렇게 무서운 결과의 단초가 될 수도 있는 것입니다.

그리고... 유신헌법 이후 독재 과정에서 많은 이들이 고통을 겪었잖아요. 이 얘길 하려면 아빠가 싫어하시는 '빨갱이'도 짚고 넘어가야겠군요. 당시 많은 이들이 빨갱이로 몰렸으니까요.
박정희 대통령은 한국전쟁 전에 남로당 전력으로 군에서 쫓겨났었습니다. 그러다 한국전쟁이 터지고, 군을 지휘할 장교가 부족해지자 복귀된 것입니다.
이런 자신의 전력 때문에 박정희 대통령은 '반공'을 국시로 하여 이전 정권보다 더욱 더 적극적으로 '빨갱이'를 색출하게 되죠.

저도 어릴 때 학교에서 '공산당이 싫어요' 하면서 입이 찢겨 죽어간 이승복 반공 영화를 1년에 한번씩 보고, 반공 독후감을 써서 상도 많이 탔고, 반공 표어 대회 하면 늘 1등상 타온 거 아시죠? 아빠가 맨날 칭찬했잖아요. 실제로 우리 동네에 기웃거리는 수상한 낯선 아저씨를 간첩으로 신고한 적도 있습니다. 온 나라가 '반공'이었고 저는 반공정신 투철한 어린이였죠.
그런데요.. 그 과정에서 정말 간첩을 잡기도 했겠지만 무고한 사람들도 분명히 희생되었습니다. 정부가 하는 일에 토 달면 '빨갱이'였으니까요.

그럼 박근혜 전 대표는 아버지의 공만 업고 갈 것이 아니라, 과도 같이 지고 가야 합니다. 주홍글씨가 천형처럼 따라다녀야 한다는 게 아니라, 딱 한 번만 진심으로 머리 숙여, 희생하면서 열심히 일해준 분들에게는 여러분 덕분에 아버지도 빛났다 고맙다, 억울하게 빨갱이로 몰려 고통을 당한 분들께는 미안하다 사죄해주시면 됩니다.
우리 국민들은 그렇게 독하거나 악하지 않습니다. 용서를 모르는 사람들이 아닙니다. 반드시 금전적 보상을 바라는 것도 아닐 거라고 생각합니다. 그저 한 번만 사과해주시면 됩니다.
개인적으로 박 전 대표를 만나본 분들은 거의 다 그 분을 칭찬합니다. 정치하면서 돈을 많이 쓰지도 않는다고 들었습니다. 많은 사람들이 그런다면 그 분은 개인적으로는 훌륭한 분일 수 있습니다.
하지만 딱 한 번은 진심으로 사죄해주셔야 합니다. 왜 박 대표가 해야 하냐구요? 그 아버지는 갑작스런 암살로 그럴 기회조차 없었고, 그 따님이 아버지의 후광을 어떤 식으로든 받고 있기 때문입니다. 공과 중에 공만을 선택적으로 취해서는 역사의 매듭을 제대로 짓는 게 아니라는 말입니다.
그렇게 된다면 저는 아빠의 소원을 고려하여 그 분을 찍어드릴 수도 있습니다. 하지만 아직까지는 그 분이 그렇지는 않은 것 같군요.

위에 경제성장 얘기가 나온 김에, 우리나라를 망쳤다는 노무현 대통령 재임 시절을 한번 짚어 볼까요?
수많은 것들이 있지만 몇 가지만 말씀드릴게요.

한나라당은 늘 '잃어버린 10년'이라고 말하죠? 언론을 통해 세뇌를 시켜서 정말 우리나라가 지난 10년 동안 많이 망한 줄 아셨죠?
노무현 대통령 시절 평균 경제성장률이 4.7%예요(4.8~5.0%라는 통계도 있음).
우리가 7~8% 성장하던 시절을 생각하면 낮은 수준이죠. 근데요, 그 정도면 지금의 중국이나 인도 수준이예요.
다시 말해, 성장 여력이 큰 경제성장 초창기에는 그 정도 성장이 가능해요. 우리의 60~70년대가 그랬던 것처럼요. 하지만 어느 정도 성장한 이후에는 그런 고도성장이 어렵습니다. 선진국들은 2~3% 성장도 어려워요. 이미 많이 성장했다는 반증이죠. (클린턴 시절의 미국은 예외. 경제학자들도 '신경제: New Economy'라고 부를 정도로 예외적인 현상이었습니다. 70년대부터 투자에 들어간 IT 분야가 엄청나게 발전해서 생산성이 매우 높아진 덕분이었습니다. 그마저도 집권2기에 나타난 것이고요)
게다가 노무현 대통령이 집권하던 당시는 김대중 정권 말기에 터진 카드 대란, 신용불량자 문제로 어지러울 때였고, 2000년 주식시장 활황으로 많은 사람들이 투자했다가 2001년 대폭락하면서 그야말로 주식시장이 초토화된 상태였어요. 한마디로 거지 같은 상태의 경제를 건네받은 겁니다.
그 상황에서 저 정도 경제성장률 달성이라면 선방 수준이 아니라 잘 한 겁니다. 근데 언론에서는 맨날 불황이라고 난리를 쳤죠.
제가 당시에 늘 그랬죠. "엄마 아빠 개인적으로 5년 전이 살기 좋아요 지금이 살기 좋아요? 백화점엔 지금 사람이 늘 넘쳐요. 세일 기간 아니어도 넘쳐"
그럼 엄마 아빠는 늘 "야, 그래도 교회 가면 사람들이 다 노무현 욕하고 경제 안 좋다고 해. 시장 상인들도 죽겠대"라고 했죠.
제가 그랬죠. "그러는 엄마는 왜 재래시장 안 가고 이마트 가? 그럼 엄마 같은 사람들 땜에 상인들이 어려운 거 아냐?"
엄마는, 생각해보니 그렇네...라고 하셨고, 그 이후로 조금씩 제 말에 귀를 기울여주셨던 것 같아요.

네.. 상인들은 대형 마트와 온라인 쇼핑몰 땜에 그렇게 될 수밖에 없는 거고, 그들을 살리려면 재래시장 자체의 경쟁력도 높여 주어야 하지만 그런 대형 마트나 백화점의 운영 시간 등을 규제해야 합니다. 근데 그럼 재벌들이 참 좋아하겠죠? 노무현 대통령한테 규제하지 말라고 청원했을까요? 아니죠. 만약 로비를 했다면 한나라당 국회의원들한테 더 했겠죠. 재래시장 상인들이 죽겠는 건 노무현 대통령 탓이 아니었습니다. 이용 안 하는 우리 탓이죠. 경제에 돈이 안 돈 게 아니라 백화점과 대형 마트로 들어간 거죠. (온라인 쇼핑몰 이용으로 인한 부분은 IT 발전이라는 시대 변화 상 어쩔 수 없는 측면이 강합니다. 안타깝지만, 사회의 산업구조 자체가 변하면 항상 사양업종이 생길 수밖에 없어요. 같은 오프라인 상으로 비교하자면 백화점과 대형 마트 이용 탓이 큰 거죠.)

주변인들이 다 경제 안 좋다고 노무현 욕한다... 정말 안 좋아서가 아니라, 그렇게 신문에서 '본' 겁니다. 방송에서 '들은' 겁니다. 자기들이 겪은 것이라기보다는 '본' 거, '들은' 거예요. 초딩들까지도 노무현 대통령을 옆집 개처럼 불러대는 세상에서, 쉽게 씹을 수 있고, 씹어야 하는 대상으로 어느새 각인된 거예요. (물론 저도 노무현 대통령이 그냥 입을 닫아주었으면 할 때도 많이 있었지만 지금 생각해보면 그가 말을 하든 안 하든 어차피 까일 거였을 거라는 생각이 듭니다)
한나라당이 초래한 IMF 구제금융 사태로 경제성장률은 -7%대로 곤두박질치고, 하위 20% 계층의 재산은 5% 정도 감소하는데 상위 20% 계층의 재산은 15% 정도 증가합니다. 그만큼 빈부격차가 심화된 거죠.
(참고로 말씀드리면 현재 우리나라 지니계수는 0.3 초반대 정도 됩니다. 지니계수는 0에 가까우면 빈부격차가 작아지는 거고, 미국이 0.4에 근접해있고 브라질 같은 나라는 0.5가 넘으니 수치상으로는 우리나라가 그리 심한 나라가 아닙니다. 하지만 여기엔 허점이 있습니다. 현재 우리나라의 상위 1% 부자들이 전국 땅의 51.5%를 차지하고 있습니다. 상위 5%로 확대하면 83% 차지. 다른 나라와 달리 우리나라는 부동산에 대한 집착이 심합니다. 집도 전세나 월세보다는 내 집을 갖고 싶어 합니다. 부동산을 고려하면 지니계수는 0.78 정도로 상승합니다. 그렇다면 실제 빈부격차는, 드러난 통계치보다 심각한 상태라는 말입니다.)

IMF는 돈을 꿔주면서 몇 가지 정책을 강요합니다. 대표적인 게 강력한 구조조정, 고금리 정책입니다. 구조조정으로 인해 많은 사람들이 실업자가 됩니다. 당시 아빠가 잠시 몸담았던 회사도 부도났잖아요. 기억 안 나세요? 그리고 고금리 정책... 이건 남의 돈으로 장사하는 부실 기업을 빨리 망하게 하는, 즉 빨리 확실히 구조조정하는 방법입니다. 하지만 그로 인해 현금 부자들은 더욱 부자가 되었고, 집을 사기 위해 대출을 받았던 많은 서민들은 빚이 더욱 늘고 고금리 부담을 이기지 못해 손해만 보고 포기하는 사람들도 속출했습니다. 다행히 우리는 집이 있었으니 그걸 피해갔지만, 집 없는 사람들은 정말 그때 힘들었을 겁니다.
게다가 고환율로 물가가 엄청 뛰었죠? 우리나라는 원자재의 98% 정도를 수입하는 나라입니다. 환율이 올라가면 수출이 잘 되는 측면도 있지만 수입 부담이 너무 커져서 수출효과를 상쇄하고 오히려 악영향을 끼칩니다. 그리고 물가는 한 번 오르면 잡기가 너무 힘듭니다.

그런데 노무현 정부 때는 물가상승률이 3%대였어요. 매우 잘한 겁니다.

만약 엄마 아빠 주변인들이 노무현 때문에 살기 더 어려워졌다고 말했다면 그들은 저소득층에 속하는 이들이었겠군요. 그럼 더더욱 한나라당을 지지해서는 안 되는 것이었다는 말입니다. 엄청난 모순이죠. 그들을 나락으로 떨어뜨린 한나라당을 지지하고, 더 그지 같이 되지 않도록 해준 노무현 정부를 까다니요. ㅋㅋ 아니면 세금을 많이 내야 하는 부자들이나 중산층이든가요. 그래도 역시 한나라당을 까야지요. IMF 탓에 그리 된 거니.

노무현 정부 때 나라 빚이 사상 최대, 300조원으로 늘어났다는 보도 보고도 많이 욕하셨죠?

"참여정부 경제운영 나라빚 300조···4년간 배로 늘었다" 이게 2007년 2월 23일자 각 신문들의 제목이네요. 노무현 정부 들어 4년간 150조원 늘어난 거 맞아요. 그 전 것까지 쌓여서 300조. 그런데 말이죠.. 반은 외환평형기금채권으로 마련해둔 거예요. 외환위기 대비하여 언제든 달러로 전환할 수 있도록 한 거고 사실상 그건 빚이 아닙니다. 나머지 반의 반은 IMF 사태 때 투입했던 공적자금을 국채로 전환한 거예요. 그 나머지는 IMF 이후의 극심한 빈부격차를 해소하기 위해 늘린 복지 관련 지출예요. 이래도 노무현 정부가 잘못해서 사상 최대 빚이 발생했다고 할 수 있을까요? 되려, 모든 원인을 제공한 한나라당을 비판해야 합리적인 거죠.

아빠가 무슨 잘못이겠습니까. 언론에서 늘 그렇게 말했는데... 하지만 명색이 행정학도인 딸의 말엔 귀 기울여 주셨으면 좋았을 것을요.. 지금 전 세계가 불황인데도 우리나라가 그나마 망하지 않고 있는 것은 지난 정권 때 상당히 탄탄하게 경제를 일구어 놓았다는 뜻이란 말입니다.

그리고, 아빠 작년에 대장암 수술하셨잖아요. 민영보험이 하나도 없어서 병원비 어떻게 하나 걱정하셨잖아요.. 근데 아빠 퇴원하실 때 엄마가 했던 말 기억하세요?

"병원비 얼마 나왔어?" 라는 제 물음에 엄마가 웃으시면서 "큰 병원에서 한 건데 생각보다 얼마 안 나왔어"라고 하셨죠.

그게 노무현 대통령이 해 놓은 거예요. 제가 그 때도 말씀드렸죠? 다른 사람은 몰라도 아빠는 노무현 대통령 적어도 씹으면 안 된다고. 암환자 개인 부담 비율을 대폭 낮춰 주었다고... 다시 말해 국가 부담을 대폭 높였다는 말예요.

물론 우리도 건강보험료 내고 있지만, 낸 돈에 비해 혜택 많이 받은 거 아시죠? 우리 집은 세금 환급받을 때도 많잖아요. 그러니 낸 돈 고대로 받은 건 아니라는 말이죠.

근데 그런 건강보험을 이명박 대통령과 한나라당은 민영화하려고 한 거 아시죠? 작년에 여러 사람들이 결사적으로 반대해서 관철 못 시킨 거 아시죠? 다시 말해, 한나라당의 많은 정책들은 아빠와 우리를 더 못 살게 하는 정책이라는 말입니다. 미국은 맹장수술 하려면 3천만원이 든대요. 그 정도까진 안 가더라도 지금과 같은 돈으로는 어림없겠죠.

아빠가 몇 년 후면 받게 될 노인연금.. 8만원씩 나오는 것도 한나라당이 그렇게 반대했는데도 노통 정부 당시 유시민장관이 밀어붙여서 된 거였어요. 근데 노인들, 그걸 이명박 대통령이 주는 건줄 알고 고마워하는 사람들 많은 어이없는 현실.. 투표 꼬박꼬박 잘 하러 가는 노인들이 고마워할 수 있는 그런 건 노통 재임 중에 언론에서 보도도 안 했다는 거죠.

집값이 뛰어서 서민들이 살기 힘들었다는 비판도 있죠. 근데 당시는 전 세계적으로 유동성 과잉 상태였고(돈이 많이 풀려 물가가 상승한다는 말) 그나마 그 상태에서 집값 상승률을 oecd회원국 중 가장 낮게 묶었어요. 안정시킬 만 하면 이명박 서울시장이 재건축해주겠다고 설레발쳐서 다시 강남 집값 오르고 그게 반복되면서 강북으로 확산... 온 동네가 재건축에 미쳐서 거지 발싸개 같은 넘들도 많이 당선됐죠.

즉, 그말은 집값이 더 오르기 바랬던 부자들(그러면서 세금은 내기 싫었던), 왜 내 집은 안 오르는 건지 불만 가진 사람들, 집값이 올라서 집을 못 사게 된 서민들 모두에게 욕을 먹으면서 지지율이 급전직하....-_-;; 하지만 그나마 그 정도라도 부동산 규제를 했기 때문에 미국발 서브프라임모기지론 사태 땜에 전 세계가 들썩일 때도 우리나라는 피해갔지요. 그거 아녔음 우리나라도 완전 집값 거품 터져서 쫄딱 망했을지도 몰라요. (일본이 15년간의 장기불황에 들어가던 1992년, 부동산 가격 거품이 꺼지면서 그렇게 된 거예요)

하나만 더 해드릴까요? 노무현 대통령이 러시아 푸틴 대통령이랑 협상해서 엄청난 양의 천연가스를 확보하는 외교 성공한 거, 말씀드렸었죠? 아빠는 콧방귀 뀌시고, 엄마는 제 얘기에 상당히 귀기울여주셨고 결국 지난 대선 때 제 선택을 지지해 주셨지만 아빠 성향을 아니까 아빠한텐 그냥 조용히 계셨죠. 당시 러시아에서는 어떻게 대한민국에 이렇게 당했냐고 언론이 난리가 났었는데 한국 언론은 잠잠했죠. 노무현 대통령이 잘 했다고 인정해주고 싶지 않았으니까요.

OO이 2학기에 복학하면 등록금이 500만원 정도 된다죠? 물론 아빠가 유공자시니 성적만 좋다면 그 다음 학기는 공짜로 다닐 수 있겠지만 첫 학기엔 그렇지 않죠. 지난 노무현 정부 때 사립학교법 개정 했어야 합니다.

전에 그러셨죠? 기독교 재단들이 기독교 정신에 입각해서 학교 운영도 못 하게 하는 사립학교법을 왜 만드냐구요. 그건 오해십니다. 당시 사립학교법은 사립학교가 설립 이념도 펴지 못하도록 하려는 게 아니라 사립학교가 투명한 경영을 하도록 하기 위한 것이었습니다. 사립학교 이사장들, 5%도 안 되는 재단 전입금으로 사립학교를 제왕적으로 지배합니다. 각종 비리의 온상인 사립학교들 천지 빼까리로 깔렸습니다. 대학들만 해도 4조원이 넘는 돈이 적립금으로 쌓여있는데 학생들 등록금은 계속 올라갑니다. 원래 재단법인이라는 건, 출연자가 출연한 재산에 대해서는 출연자의 손을 떠나야 하는 겁니다. 근데 어디 현실이 그렇습니까? 노무현 정부가 사립학교법 개정하려고 하니까 한나라당이 반대했습니다. 결국 로스쿨법안과 빅딜을 했지요. 이명박 정부는 학자금 정부 대출 이자도 많이 올렸습니다. 대출받기도 어렵게 된 거죠. 이 지경인데도 한나라당을 지지하는 서민 이하 사람들은 무지해서 그런다고 감히 말하겠습니다.

하지만 아빠가 절대 양보할 수 없는 한 가지가 있죠? 북한에 쌀 퍼주기, 금강산 관광으로 돈 퍼주기 등등 북한에 대한 호의적인 태도가 맘에 안 드시죠?

네. 그럴 겁니다. 더구나 아빠는 한국전쟁 때 남으로 내려오셨고, 베트남 전쟁에도 참전하셨으니 공산당을 싫어하시는 건 당연하죠.

근데요, 그게 북한에 호의적이어서가 아니라면요?

북한 정권은요, 남한에서 북한에 강경한 정부가 들어서든, 온건한 정부가 들어서든 상관없이 지들이 핵실험을 하려면 하고 미사일 발사하려면 합니다. 어차피 북한은 우리를 상대하는 게 아니라 미국과 일본을 상대하거든요?

김대중 정부건, 노무현 정부건, 이명박 정부건, 상관없습니다. 지들이 필요할 땐 터뜨립니다. 북한 때문에 강경 보수 정권을 굳이 택해야 할 이유는 그닥 없다는 거죠. 오히려, 우리보다는 미국 정부가 어떠냐에 더 관련이 됩니다. 클린턴 때는 그닥 시끄럽지 않았는데 부시 때 엄청 시끄러웠죠. (그렇다고 해서, 미국에 보수 정권 들어서면 우리도 보수 정권, 진보 정권이면 우리도 진보 정권 들어설 필요도 없어요)

아무튼, 그럼 우리가 지들 멋대로인 그런 놈들을 위해 왜 지원을 해주어야 하는가!!

독일의 예를 들어 말씀드리겠습니다.

독일은 1989년에 베를린 장벽이 무너지고 1990년에 통일되었습니다. 저 96년에 독일에 갔었던 거 기억하시죠? 그 당시, 동독의 마지막 수상이었던 드 메지에르를 만나 통독과정과 그 후 진행상황을 들을 수 있었어요(최고 권력자인 서기장은 호네커였고, 이 사람은 수상).

통일 전 서독은 경제 순위 세계 3~4위 정도였고, 동독은 당연히 못 살았지만 그래도 공산권 국가 중에서는 나은 편이었습니다. 그런데 통일 후 어떻게 되었죠? 통일한지 20년 가까이 되어가는 지금은 그나마 다시 유럽의 중심국가로 올라서고 있지만 구동독 주민들과 구서독 주민들 간의 반목과 갈등은 엄청나게 심하고, 구동독 지역 실업률이 구서독 지역 실업률의 두 배 가까이 됩니다. 서로 미워하고 힘들어합니다.

독일은 서독 빌리브란트 수상의 동방정책으로 인해 1960년대 후반부터 이미 동서독 교류가 시작되었고 정상 회담도 29회 정도 하고 통일이 되었습니다(28회던가? 암튼 그 정도). 베를린 장벽은 1989년 갑자기 무너졌지만 그래도 20년 이상 준비가 되어 있던 상태였습니다. 그리고 우리와 달리 독일은 서로 싸워서 동서로 갈라진 것이 아니라 패전으로 인해 연합국에 의해 강제로 갈라진 것이었죠. 서로 교류도 많고 이해도 많이 된 상태였어요.

그런 독일도 통일 후 서로 너무 미워하게 됐습니다. 왜일까요? 바로, 나빠진 경제 상황 때문입니다.

통일 후 동독의 노동자들이 서독으로 대거 넘어왔습니다. 동독 지역의 산업은 노동자가 없어서 공황상태가 되었고, 서독 지역에서는 싼 임금의 동독 출신 노동자 때문에 대량 실업이 발생합니다. 전체 통일비용 중 그들을 위한 실업급여로 들어간 것이 60% 정도 된다고 들었습니다. 동독 지역의 낙후된 산업 시설을 새로 짓고 경제를 재건하는 데에도 엄청난 돈이 들어갔습니다. 세금은 당연히 더 많이 낼 수밖에 없었고 구서독 지역 주민들의 불만이 커지기 시작합니다. 구동독 거지들 때문에 희생하기 싫다는 생각을 하기 시작합니다. 지금도 구동독 지역 출신은 '2등국민'이라는 인식이 있다고 합니다. 다시 말씀드리지만 서독은 당시 부자 나라였습니다.

우리와 북한의 경제력 차이는 어떻습니까? 북한이 정확한 통계를 공개하지 않아서 확실히는 모르지만 수십 배의 차이가 날 것입니다.

이 상태에서 만약 갑자기 통일이 된다면 우리는 다 죽을 수밖에 없습니다. 퇴직한 아버지 세대도 고통스러우시겠지만, 돈을 벌고 있는 저의 세대와, 제 다음 세대는 초인적인 고통을 감내할 수밖에 없을 수도 있습니다. 독일이 통일 수습에 20년 걸렸다면 우리는 30년 걸릴 수도 있습니다. 아버지 세대는 잘 살아보자, 열심히 하면 내 자식들은 잘 사는 날이 올 것이라는 희망으로 열심히 일했다면, 저와 제 뒷 세대는 어떨까요? 저 북한 거지들을 위해 내가 이렇게 희생해야 하는가라는 생각이 들 수밖에 없겠죠? 당연 통일 독일에서보다 더한 갈등이 있을 것입니다. 그럼 이 나라는 어떻게 될까요? 지속적인 발전이 가능할까요? 기냥 망하는 겁니다.

지금 북한을 도와주자고 하는 사람들은 빨갱이라서 도와주자는 게 아닙니다. 물론, 개중에 진짜 빨갱이가 있을 수도 있죠.

그치만 아빠 딸도, 빨갱이 아니거든요. 자본주의를 부정하지도 않고, 부자들을 무조건 미워하지도 않습니다(다만, 천민자본주의에 물든 천박한 부자를 경멸할 뿐. 부유함 자체를 미워하지 않고 공격하지 않는다는 말입니다). 이런 저도 북한에 어느 정도 지원은 해야 한다고 생각합니다. SOC(사회간접자본) 시설도 어느 정도는 깔아 놔야 합니다. 갑자기 통일이 되어도 북한 주민들이 대대로 산 정든 고향을 등지고 남쪽으로 물밀듯이 내려오지는 않을 정도로는 살려 놓아야 합니다.

물론 우리의 지원품이 북한의 군수물자로 쓰일 수도 있습니다. 일부 그럴 수 있어요. 제 동기가 통일부에서 근무합니다. 물자 지원하면서 북한에 가보면 주민들이 남한에서 준 걸 다 알고 고맙다고 말한다고 합니다. 아무리 통제해도 북한 주민들도 진실을 알아가고 있는 겁니다. 군수물자에 일부 쓰일 수도 있지만 그렇다고 하여 지원을 중단하면 그들은 굶어 죽을 것이고, 살아남는다 해도 통일이 된 후에는 남한 사람들이 두려워하는, 우리가 먹여 살려야 하는 '거지떼'가 되는 것입니다. 그 이후 상황은 상상에 맡기겠습니다.

이건 인도적인 차원, 민족적인 차원을 넘어서, 경제적으로도 우리에게 이득이 되는 일입니다. 물론 장기적인 차원에서요.

(금강산 관광 대가가 군비증강에 쓰인다는 비판은 어느 정도 수용한다 해도, 그럼 그건 김대중 대통령 탓이지 노무현 대통령을 미워할 근거는 안 됩니다)

다시 말하지만, 북한은 우리가 지원을 하든 안 하든 일본을 향해 미사일 실험 하고 싶음 하고, 핵실험 하고 싶음 합니다. 어차피 그들에게 우리는 '아웃 오브 안중'입니다. 미국과 일본을 견제하려고 합니다. (솔직히 미국과 일본도 우리가 6자회담에 끼는 거 안 좋아합니다. 우리나 애닳아 하죠)

아, 그러고보니 또 생각나는 게 있네요. 노무현이 미국을 싫어해서 미국이 주한미군 철수하려고 한다고 한때 많이 욕하셨죠? 그거 노무현 대통령 때문이 아녜요. 미국은 우리나라에서 어차피 점차 군사를 줄이려고 하고 있었어요. 현대전은 군인 많이 투입한다고 되는 게 아니죠. 미국에서 버튼 하나 누르면 대륙간탄도미사일 얼마든지 발사할 수 있고, 여차하면 바로 옆에 있는 주일미군을 끌어올 수 있으니 우리나라에서 미군을 이 정도 규모로 유지할 실익이 미국에 그닥 크지 않습니다. 요 몇 년 새 미국이 미ㆍ일동맹과 미ㆍ일ㆍ호주 동맹은 강화한 거 아세요? 일본과 호주는 미국의 안보정책에서 중요한 파트너고, 우리는 솔직히 미국 입장에서 그리 중요한 나라가 아녜요. 다만, 상징적인 의미, 그리고 우리와의 경제관계나 무기거래 관계 등 군사문제 이외의 문제들 때문에 완전 철수는 어렵겠죠. 줄이는 건 노무현이 반미여서 그런 게 아니란 말입니다. 어차피 미국의 계획에 따라 되는 거였어요.  

다시 말씀드리지만 저는 노빠가 아니예요.

그런데 저는 노무현 대통령 죽음 이후로 너무나 우울한 나날을 보내고 있습니다.
그렇지 않아도 요 1달간 계속 악몽을 꿨지만... 서거 이후에는 더 잠도 안 옵니다.

인간적인 연민도 연민이고. 치졸한 이명박 대통령이나 그 졸개 검찰, 경찰, 국민의 눈을 가린 언론에 대한 분노도 분노지만... 더 큰 건 뭔지 아세요?

우리 사회에서, 든든한 배경을 가지지 않은 자가 순수하게 자신의 노력만으로 최고의 자리에 가기란 거의 불가능하다는 것을, 기적이 일어나지 않고서는 불가능하다는 것을 확인했기 때문이에요.

노무현 대통령은 올해 63세.. 만 나이겠죠? 그럼 아빠랑 동갑이잖아요. 가난해서, 농부의 아들로 태어나 상고 나왔다잖아요. 돈 없어 대학 못 갔다잖아요.

그럼 아빠랑 나이도 같고, 가난해서 대학 못 간 것도 같잖아요. 할머니는 생전에, 아빠가 대학 붙었는데도 돈 없어 못 보낸 게 너무 미안하다고 두고두고 말씀하셨어요. 눈물을 훔치면서. 노무현 대통령을 죽어라 싫어하는 대부분의 나이 비슷한 어른들도 대학 거의 안 나오셨을 거잖아요.

말이라도 좀 더 품위 있게, 좀 더 온건한 방식을 썼으면 어땠을까 하는 아쉬움도 있지만, 그런 사람의 생존 방식은 그럴 수밖에 없었던 거죠. 어떻게 해도 무시하니까 투쟁할 밖에요.

주류 사회에서 대학도 안 나온 놈이라고 무시하는 건 이해가 되는데, 비슷한 환경에서 자랐을 대다수 어른들은 그를 무시하면 안 되는 거였죠. 오히려 그를 독려해야 하는 거였죠...

그런 사람이 성공해야 아빠의 자식인, 평범한 가정에서 태어난 저 같은 사람도 출세할 수 있다는 희망이 있는 건데요..

물론 천재적인 머리와 노력으로 가난을 딛고 출세하는 사람들도 간혹 있죠. 근데 그런 사람들은 만나보면 도저히 따라갈 수 없는 비범한 인물인 경우가 대부분입니다.

아빠 눈엔 저도 잘난 딸이겠지만, 저희 학교 입학생들 중 부모가 변호사, 의사, 교수, 기업가 등 소위 사회지도층 인사들인 비율이 점점 늘고 있습니다. 40% 가까이 된다는 말도 있더군요.

그럼 울 학교에서, 제 위아래 5년씩 경쟁자로만 잡아도 제 앞에 도대체 몇 명이 있는 겁니까? 더구나, 잘난 애들이 울 학교에만 있습니까?

저는 아빠를 미워하는 게 아닙니다. 안타까운 겁니다. 왜, 도대체, 무엇 때문에 우리의 삶을 더욱 비통하게 만드는 집단을 지지하시는 건지...

우리나라 현재 상황에서 주류 사회에 진입하는 건 상당히 어려울뿐더러 진입해도 핵심부엔 접근하기 어렵습니다.

그들은 대부분 조상이 친일한 대가로 지금까지 잘 먹고 잘 사는 사람들입니다. 아빠는 제가 한나라당 욕하면, 너나 잘 하라고, 그 사람들이 너보다 못났냐고, 잘났으니 그런 일 하고 있는 거 아니냐고 하시는데... 그런 말 들으면 굉장히 화가 납니다. 몇몇 뛰어난 사람들이나 민주화 시위로 구속된 경력 등으로 진입한 사람들 제외하고, 그 사람들 대부분이 저보다 잘나서 국회의원 한다고 생각해 본 적 없습니다. 걸려서 짤리긴 했지만 양정례 같은 어처구니없는 애도 해먹는걸요.

심하게 말하면, 그들 중 상당수는 좋은(=돈 많은) 부모를 만난 덕을 봤습니다. 본인이 똑똑하고 열심히 한 경우도 있겠지만 본인들이 잘났기 때문만이 아니란 말입니다.

친일의 대가로 일제시대에 잘 먹고 잘 살다가, 이승만이 반민특위를 해체해주고 다시 관직도 주어서 권력을 유지하게 되고, 그래서 자식들 미국 유학에 뭐에 공부도 많이 시키고, 높은 관직에도 올라가고, 다시 그들끼리 혼맥을 유지해서 권력을 공고히 하고.. 그런 거잖아요. 학계는 안 그런 줄 아세요? 울 총장도 악질 친일파 손자예요. 정계, 재계, 학계, 문화계 할 거 없이 다 포진해 있습니다.

저는 울 집에 돈 없다고 아빠를 비난하거나 무시해본 적 없습니다. 친일의 대가로, 비리를 서슴없이 저질러서 축재한 아버지라면 되려 부끄러울 겁니다. 하지만 한나라당을 묻지마 지지하는 모습을 볼 때마다 솔직히 아빠를 무시하고 싶은 마음이 울컥울컥 치밀어 오릅니다. 

다른 사람도 아니고 내 아빠가 그렇다는 사실에 정말 저는 비통한 심정입니다. 다른 사람도 아니고, 그런 놈들한테 당했던 아빠가 그런다는 사실이 정말 개탄스럽습니다.

물론, 그렇다고 민주당 찍으라는 거 아닙니다. 제가 봐도 민주당에도 꼴통들 많습니다. 민노당 찍어달라는 것도 아닙니다. 적어도 한나라당에 대한 묻지마 지지는 하지 말아달라는, 그래도 한 번이라도 생각해보고 따져달란 말입니다. 한나라당으로 나왔지만 합리적인 보수라면 그건 괜찮습니다. 하지만 그런 인물은 뭐 거의 없더군요 ㅋㅋ (사회를 위해 당연히 건전 보수 필요합니다. 하지만 현재 이 나라 주류는 꼴통 보수죠. 건전 보수도 핵심부에 진입하기 상당히 어렵습니다).

도덕성을 제1의 조건으로 따져 주세요. 현재 아빠의 낮은 유공자 등급을 올려준다고 공언하신 그 분을 다음 대선에서 찍으시는 것까지는 뭐라 하지 않겠습니다. 그것까지 말릴 힘은 없어요. 하지만 제발, 국회의원 선거, 시의회 선거 그런 선거라도... 아빠가 던진 표가 사표가 될지언정 제발 합리적인 잣대로 평가하고 투표해주세요.

똑똑한 놈들은 많아요. 하지만 똑똑한 데다 비도덕적인 놈에게 권력을 주게 되면 이 나라는 망합니다. 조금 덜 똑똑하더라도 도덕적인 사람은 자기의 완벽하지 않음을 알아서 참모를 똑똑한 사람들 둡니다. 유비가 왜 제갈량에게 삼고초려 했겠습니까?

쥐뿔도 능력이라곤 없으면서 도덕성까지 없는 그들과 제발 이유 없이 한 배를 타지 말아 주세요. 그들이 평범한 우리 같은 사람들 생활에 독이란 말입니다. 정치란 생각보다 생활 곳곳에 영향을 미친단 말입니다.

개인적으로, 우리사회 분열과 갈등 정말 안타깝습니다. 그런데 그게 소위 '좌파들' 때문입니까?

아빠도 저를 좌파로 아시겠지만 저는 중도우파예요(저소득층에 대해선 좌파, 외국인 근로자에 대해서는 중도우파, 북한에 대해서도 중도우파 등등. 옛 열린우리당은 좌파가 절대 아닙니다. 그게 정책으로 따지면 중도우파였어요), 사회의 분열과 갈등은 부끄러운 역사 앞에 사과하지 않고 그들만의 기득권을 보호하기 위해 어떤 불의한 일도 서슴지 않는 꼴통 보수들 때문이라고 봅니다. 가해자가 사죄하지 않는데 피해자가 합의해주는 거 보셨어요?

아빤 늘 저더러 균형 잡힌 시각을 가지라고, 대나무가 너무 곧으면 부러진다고 걱정하시지만 현재의 한나라당을 관대하게 보는 것이 균형 잡힌 시각은 아닙니다. 중용이란 무조건 중간을 의미하는 게 아닙니다.

아리스토텔레스 식으로 말하면, 비겁과 만용 사이의 용기, 나태와 탐욕 사이의 야망, 자기비하와 자만 사이의 자존, 아첨과 무뚝뚝함 사이의 친근함, 수줍음과 뻔뻔함 사이의 겸손, 허풍과 자기경시 사이의 진실함, 우유부단과 충동 사이의 자제가 중용입니다.

제가 싸우는 상대는 아빠랑, 택시기사분들이 거의 유일하다고 할 수 있겠네요 ㅋㅋ (특정 직업 언급해 좀 그렇지만.. 전부 그런 것도 아니지만 택시 탔을 때 노무현 비하하지 않는 기사를 본 적이 거의 없습니다. 적당한 부패가 있어야 사회에 돈이 도는데 노무현이 때문에 돈이 안 돈다고 말하는 사람도 있었습니다. -_-; 부패 있는 나라치고 경제성장률 높은 나라 없습니다. 그거 다 무지해서 하는 말이라고 감히 말하겠습니다).

제게 지금의 한나라당은 타협의 대상이 아닙니다. 근데 다른 사람도 아니고 내 아빠가 그 런다는 사실 때문에 아빠랑 많이 싸운 겁니다. 맨날 저렇게 대가 세서 어떡하냐고 걱정하시지만, 밖에 나가면 저 용기를 내지 만용을 부리진 않아요. 야망이 있지 탐욕이 있지도 않구요. 자기비하가 좀 심해서 친구들이 걱정할 정도지, 사람들하고 정말 잘 지냅니다. 제가 일전에 남자친구 사귈 때도 왜케 싸우냐고 그러셨죠? 발단은 늘 한나라당 때문이었던 것 같아요 ㅎㅎ 그 정도로 저는 한나라당 문제만큼은 양보할 수가 없습니다.

한나라당이 바뀐다면 저도 언젠가는 그 당을 지지할 수 있겠지요. 하지만... 그게 과연 가능할까요?

한 번도 말한 적 없지만 제 꿈은 궁극적으로는 제갈량입니다. 유비보다는 제갈량이 되고 싶습니다. 하지만 주군으로 모시고 싶은 사람이 없었지요.

지금은 한 분 마음에 담아 두었습니다. 근데 제가 아직 제갈량이 되기에는 많이 모자랍니다. 저는 5년 이후로 잡고 있습니다. 좌절할 수도 있겠죠. 수많은 사람들이 그랬듯 정치인 주변에 모여들었다 타 죽는 불나방이 될 수도 있겠죠.

다시 말씀드리지만, 우리처럼 평범한... 중산층도 안 되는 집에서(중산층이려면 적어도 10억 이상의 자산은 있어야 한다니^^;) 출세하는 사람은 나오기 힘들 거예요... 만약 아빠가 바라는 대로, 제가 권력의 중심권으로 진입하지 못해도 너무 뭐라고는 하지 않으셨음 좋겠어요.

인간 노무현의 죽음으로 모든 것이 너무나 분명해졌으니까요.

이래도 아빠가 한나라당을 좋아하신다면, 저는 더 이상 설득할 힘이 없습니다. 안타깝지만 포기하고, 저는 제 길을 그냥 가겠습니다.

만약 그렇게 된다면, 저 땜에 속 끓이고 스트레스 받지 말고 그 부분에 대해서는 아빠도 저를 그냥 포기해주세요. 그런 일이 없기를 바라지만요. 아빠 생각이 바뀌든, 우리가 서로를 포기하든, 앞으로 다시는 이런 일로 싸우게 되지 않기를 정말 정말 바래요....

그리고, 아빠가 한나라당 좋아하는 발언 할 때마다 아빠가 정말 미워지지만, 그래도 저는  아빠를 좋아한다는 사실, 알고 계시리라 믿어요. 어쩌니저쩌니 해도 저는 아빠를 많이 닮았거든요....

한나라당 지지자 아빠를 설득한 딸의 편지

직업윤리

직업윤리의 키워드로 “PIOD”라는 4가지 윤리판단 기준을 잘 살피면 큰 위반을 없을 것이다. 이러한 기준은 미국공인회계사들의 윤리기준을 채용한 것이다.

* 공익(Public Interest): 임직원의 활동은 공익과 사회적 신뢰를 저하하는 방향으로 추구되어서는 안 된다.

* 성실(Integrity): 임직원은 개인적 수익이나 이득 추구를 회사의 사회적 책임에 앞세워서는 안 된다.

* 객관성(Objectivity)과 독립성(Independence): 임직원은 회사와 이해의 상충(Conflict of Interest)관계가 있는 상황에 있어서는 안 된다.

* 책임완수(Due Care) = 완벽추구(The quest of excellence): 임직원은 끝임 없이 완벽하게 맡은 바 책임을 다하려는 개인적 노력을 해야 한다.

상기와 같은 4가지 원칙에 위배될 경우 임직원은 형법의 처벌은 받지 않는다고 하더라도, 민법의 저촉을 받게 되고 회사에서는 임직원을 해고할 Power를 가지고 있는 것이 상식이다. 회사와 임직원의 고용관계는 Due Diligence 혹은 Due Care라고 하는 "신의와 성실"을 전제로 하기 때문이다. @

웨딩촬영

IMG_9996

'결혼' 카테고리의 다른 글

웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07

웨딩촬영

IMG_9981

'결혼' 카테고리의 다른 글

웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07

웨딩촬영

IMG_0406

'결혼' 카테고리의 다른 글

웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07

웨딩촬영

IMG_0402

'결혼' 카테고리의 다른 글

웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07

웨딩촬영

IMG_0320

'결혼' 카테고리의 다른 글

웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07

웨딩촬영

IMG_0166

'결혼' 카테고리의 다른 글

웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07

웨딩촬영

IMG_0115

'결혼' 카테고리의 다른 글

웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07

웨딩촬영

IMG_0457

'결혼' 카테고리의 다른 글

웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07

웨딩촬영

IMG_0443

'결혼' 카테고리의 다른 글

웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07

웨딩촬영

IMG_0383

'결혼' 카테고리의 다른 글

웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
웨딩촬영  (0) 2009.04.07
prev 1 2 3 4 5 6 ··· 8 next