이번에 오픈수세(openSUSE)에서 Visual Studio Code를 설치해보았습니다.

참고
Visual Studio Code on Linux

설치 하기

SNAP으로 설치하기

Snapcraft의 'Visual Studio Code'

위 링크로 확인하면 됩니다.

openSUSE에서 설치하기

다음의 명령어와 스크립트로 키(Key)와 저장소(Repository)를 등록합니다.

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ntype=rpm-md\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/zypp/repos.d/vscode.repo'

그 다음, 저장소(repository)를 새로 고칩니다.

sudo zypper refresh

저장소(repository)를 새로 고침하면, Visual Studio Code를 설치합니다.

sudo zypper install code

설치 결과

openSUSE에서 잘 돌아감을 확인

Buy me a coffeeBuy me a coffee

이번에 한성컴퓨터에서 나온 TFG7475H(GK7NPFR)를 구입하였습니다.

이 랩탑은 중국의 칭화통팡(淸華同方, 한국한자음: 청화동방, 중국어음: 칭화통팡, 중국어(번체)표기: 清華同方, 중국어(간체)표기: 清华同方 중국어: Qīnghuá tóngfāng, 영어표기: Tsinghua Tongfang)의 베어본으로 만들어졌습니다.

아래는 칭화통팡에서 제조한 15인치 'GK5N--O' 및 17인치 'GK7N--R' 시리즈의 전세계 출시될때의 이름을 정리한 목록입니다.

www.reddit.com/r/AMDLaptops/comments/himoym/all_of_the_vendors_that_are_offering_the_tongfang/

 

All of the Vendors that are offering the Tongfang GK5N--O and the GK7N--R

Tongfang is a Chinese ODM (Original Design Manufacturer) that sells their laptop designs to vendors around the world, so far they have released 2...

www.reddit.com

저는 이 중 'GK7NPFR' 모델 기반의 한성컴퓨터의 TFG7475H를 구매하였습니다.

이 노트북에는 CPU로 8코어 16쓰레드의 AMD Ryzen Renoir 4800H를 사용하였고, GPU로는 Nvidia GTX 1650 Ti를 사용하여 CUDA연산을 할 수 있습니다.

이번에 재택근무 이슈가 있다보니, 노트북을 뭘로 살까 고민하다 CPU 성능이 우수하면서 GPU가 들어간 노트북을 사용해보게되었습니다! 원래는 이 모델보다 GPU상위 모델(Nvidia RTX 2060)이 달린 TFG7476H를 사용하려고 했으나, 이미 인기가 많아 매진되어 구매 수령을 하려면 9월말까지 기다려야 한다고 하였습니다. 그래서 급하게 필요한지라 얼른 구할 수 있는 TFG7475H(GTX 1650Ti)를 구입하였습니다.

TFG7475H에 오픈수세(openSUSE) 리눅스와 KDE Plasma를 설치 하였습니다. 시스템 정보를 보니 CPU: AMD Ryzen 7 4800H와 GPU: GTX 1650 Ti가 보임을 확인할 수 있습니다.

아래는 오픈수세(openSUSE) 리눅스 설치 화면입니다.

설치가 완료되었습니다.

처음에, 리눅스 설치를 해보니 노트북 LCD엔 출력이 제대로 동작하니, 정상적으로 설치했다 좋아했습니다.
그러나, HDMI로 24인치 모니터를 노트북에 연결해보니 외장모니터 연결은 안되는 문제가 있습니다.

이 한성 TFG7475H의 그래픽스관련으로 리눅스에서 설치를 해보니 노트북의 LCD 화면은 AMD Radeon 내장 그래픽에서 출력되고, 외장화면(HDMI, miniDP 연결)은 Nvidia GTX 1650 Ti에서 출력되더군요.

그래서, Nvidia 드라이버를 설치 후, openSUSE의 SUSE Prime 설치해야 노트북 내장 화면(LCD)및 외장화면 (HDMI, miniDP)동시 출력이 가능합니다.(Nvidia 모듈 설치후에 외장모니터만 화면 출력되고, 노트북 LCD가 안나오는 현상 겪으면 멘붕합니다 ㅋㅋㅋㅋㅋㅋㅋ ㅠㅠㅠㅠ )

en.opensuse.org/SDB:NVIDIA_drivers

en.opensuse.org/SDB:NVIDIA_SUSE_Prime

en.opensuse.org/SDB:AMDGPU

위의 3가지 내용을 참조하여, Nvidia, AMD 내장 그래픽 모두 나올 수 있게 삽질을 해야합니다.

(해당 내용은 우분투등 대부분의 배포판에서 에서도 동일한 현상이 일어날 것입니다.)

아래는, 오픈수세 리눅스에서 리브레오피스(LibreOffice) 소스코드를 빌드할때 화면입니다.

오픈수세(openSUSE)에서 리브레오피스(LibreOffice) 빌드중

이제, 리눅스가 잘 돌아가는 걸 확인하였으면, tensorslow-gpu를 사용할 수 있게 설정해야합니다.

엔비디아(Nvidia)사이트 들어가서 CUDA Toolkit 11.0 를 설치하면 됩니다

developer.nvidia.com/cuda-downloads

 

CUDA Toolkit 11.0 Update 1 Downloads

Select Target Platform Click on the green buttons that describe your target platform. Only supported platforms will be shown. By downloading and using the software, you agree to fully comply with the terms and conditions of the CUDA EULA. Operating System

developer.nvidia.com

 

저는 오픈수세(openSUSE)를 사용하기 때문에, CUDA Toolkit을 openSUSE기반으로 받아서 설치했습니다.

그리고, cuDNN은 아래 링크에서 rpm파일을 다운로드 받아서 설치

developer.download.nvidia.com/compute/machine-learning/repos/rhel8/x86_64/

 

Index of /compute/machine-learning/repos/rhel8/x86_64

 

developer.download.nvidia.com

libcudnn8-8.0.3.33-1.cuda11.0.x86_64.rpmlibcudnn8-devel-8.0.3.33-1.cuda11.0.x86_64.rpm, nvidia-machine-learning-repo-rhel8-1.0.0-1.x86_64.rpm를 다운로드 받아서 설치하였습니다.

$ sudo zypper in libcudnn8-8.0.3.33-1.cuda11.0.x86_64.rpm libcudnn8-devel-8.0.3.33-1.cuda11.0.x86_64.rpm nvidia-machine-learning-repo-rhel8-1.0.0-1.x86_64.rpm 

이후 pip으로 tensorflow-gpu를 설치해봅니다.

$ pip3 install tensorflow tensorflow-gpu

라이브러리 설치가 되었으면, 두근두근

tensorflow에서 Nvidia GPU연동이 잘 되는지 테스트를 해봅니다

$ python3 -c 'import tensorflow as tf; print(tf.__version__)'
2020-09-12 03:28:30.666780: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'libcudart.so.10.1'; dlerror: libcudart.so.10.1: cannot open shared object file: No such file or directory
2020-09-12 03:28:30.666814: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2.3.0

아, Python의 tensorflow-gpu는 CUDA 10.1 버전을 사용하고 있더군요. CUDA 동적 라이브러리 10.1 버전이 없어서 에러가 났습니다.

해당 내용 검색을 하니, CUDA 10.1버전을 설치하라고 나옵니다

Could not load dynamic library 'libcudart.so.10.1'; dlerror: libcudart.so.10.1: cannot open shared object file: No such file or directory #38578

 

Could not load dynamic library 'libcudart.so.10.1'; dlerror: libcudart.so.10.1: cannot open shared object file: No such file or

Debian 10.3 Python 3.8.2 Cuda 10.2 Quadro K5200d drivers 440.82 Tensorflow 2.2.0-rc2 import tensorflow as tf tf.config.list_physical_devices('GPU') 2020-04-15 20:58:07.177217: I tensorflow/...

github.com

추가적으로, 저는 openSUSE Linux에서 CUDA 10.1 버전을 추가 설치하였습니다

$ sudo zypper install cuda-10-1

설치가 완료되면 다시, tensorflow-gpu라이브러리가 정상 작동할수 있게 Nvidia CUDA가 제대로 설치되었는지 확인해봅니다

$ python3 -c 'import tensorflow as tf; print(tf.__version__)'
2020-09-12 03:38:39.770262: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
2.3.0

드디어, Nvidia CUDA 및 tensorflow 설치, tensorflow-gpu 라이브러리가 정상 작동함을 확인하였습니다.

한성컴퓨터에서 출시된 TFG7475H에서 리눅스 설치하였고 딥러닝, tensorflow, CUDA연산 할수 있게 설정을 하니 가성비가 엄청 좋음을 느꼈습니다.

참고 링크:

intellegibilisverum.tistory.com/entry/%ED%95%9C%EC%84%B1-%EB%85%B8%ED%8A%B8%EB%B6%81%EC%97%90%EC%84%9C-ubuntu-1606-LTS-tensorflowgpu-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0

 

한성 노트북에서 ubuntu 16.06 LTS + tensorflow-gpu 세팅하기

2년전에 한성노트북을 구입했다. 그때 Intel graphic과 nvidia gtx 950m 가 같이 되어 세팅되어 있던 노트북이었는데 그동안 nvidia는 거의 안사용했던거 같다. 그래서 이번에 그것도 사용할 겸 tensorflow-gpu

intellegibilisverum.tistory.com

bcho.tistory.com/1311

 

개발자 코딩 노트북 구입기 (DELL Inspiron 7580) 우분투

개발자용 노트북 구입기 조대협 (http://bcho.tistory.com) 집에서 개발 공부와, 테스트를 위해서 개인 노트북이 필요했는데, 아무래도 업무와 개인 공부를 분리하는것이 좋을것 같아서, 얼마전 부터 ��

bcho.tistory.com

 

흠 위의 링크에서 한성컴퓨터에 리눅스 설치하면 삽질 엄청해야한다고 하는데, openSUSE 사용하면 그나마 우분투보다 삽질 품이 줄어들듯 합니다.

Buy me a coffeeBuy me a coffee

이번에, AMD Ryzen기반 8 코어 16 스레드 지원 CPU 4800H와 Nvidia GTX1650 Ti가 들어간 새로운 17.3인치 랩탑(한성컴퓨터 TFG7475H)을 저렴하게 구입 후, 기본 OS를 openSUSE로 설치하여 사용하고 있습니다.

남들 많이 사용하는 리눅스 배포판(Linux Distribution)인 우분투(Ubuntu), 데비안(Debian)이나 RPM계열인 페도라(Fedora)대신 오픈수세(openSUSE)를 사용하는 관계로, 남들보다 삽질을 더 하는 듯함. (다행히, 우분투와 다르게 오픈수세는 Nvidia 드라이버를 빨리 설치하는 듯)

한글과컴퓨터에서 공개한 리눅스용 HWP뷰어를 다음의 링크로 설치하려고 했습니다.

한글과컴퓨터 > 고객지원 > 다운로드 https://www.hancom.com/cs_center/csDownload.do

한글과컴퓨터에서 공개한 리눅스용 HWP뷰어의 리눅스용 설치 파일은 페도라(Fedora) 기반의 rpm파일이나 우분투(Ubuntu) 기반인 deb파일로 제공하고 있습니다.

그러나, 당연 오픈수세(openSUSE)용은 한국 사람들이 많이 사용하는 배포판이 아니니, 한글과컴퓨터에서 오픈수세(openSUSE)용을 내놓을 리는 없습니다. 그래서, 오픈수세(openSUSE)와 그나마 친척관계(?)인 페도라 코어(Fedora Core)용 설치파일(rpm)파일을 다운로드 받았습니다.

이제 Fedora용 설치 파일인 RPM파일을 다운로드하면, 설치를 해보죠.

$ rpm -ivh hancomoffice-hwpviewer-Fedora.x86_64.rpm 
오류: Failed dependencies:
        libjavascriptcoregtk-3.0.so.0()(64bit) is needed by hancomoffice-hwpviewer-9.20.0.1575-1.x86_64
        libwebkitgtk-3.0.so.0()(64bit) is needed by hancomoffice-hwpviewer-9.20.0.1575-1.x86_64
        webkitgtk3 >= 1.3.3 is needed by hancomoffice-hwpviewer-9.20.0.1575-1.x86_64

이... RPM의존성 있다고 설치 에러를 뱉습니다. 그럼, 오픈수세(openSUSE)에서 한글(HWP)뷰어 설치를 못하나??? ㅠㅠㅠㅠ

자 각설하고, 오픈수세(openSUSE)에서 어떻게 한글(HWP) 뷰어를 설치해야 하나?

결론을 말하자면, zypper명령어의 옵션을 줘서, 패키지 종속성 확인하면서 강제로 설치하면 됩니다.

$ sudo zypper in hancomoffice-hwpviewer-Fedora.x86_64.rpm 

'packman' 리포지토리 메타 데이터를 검색하는 중 .....................................[완료]
리포지토리 'packman' 캐시 빌드 중 ..................................................[완료]
리포지토리 데이터 로드 중...
설치된 패키지를 읽는 중...
패키지 종속성 확인 중...

문제: webkitgtk3 >= 1.3.3(hancomoffice-hwpviewer-9.20.0.1575-1.x86_64에서 필요)이(가) 제공되지 않습니다.
 솔루션 1: hancomoffice-hwpviewer-9.20.0.1575-1.x86_64 설치 안 함
 솔루션 2: 일부 종속성을 무시하여 hancomoffice-hwpviewer-9.20.0.1575-1.x86_64을(를) 구분합니다.

위의 제안으로부터 하나를 선택하거나 취소 [1/2/c/d/?] (c): 2
종속성을 확인하는 중...
패키지 종속성 확인 중...

다음 새 패키지가 설치됩니다.
  hancomoffice-hwpviewer

1 새로운 꾸러미로 설치.
전체 다운로드 크기: 94.2 MiB. 이미 캐싱됨: 0 B. 작업 후에 211.3 MiB이(가) 추가로
사용됩니다.
계속하시겠습니까? [예/아니오/버전/...? 모든 옵션 표시] (예): 
꾸러미 hancomoffice-hwpviewer-9.20.0.1575-1.x86_64 검색 중
                                                    (1/1),  94.2 MiB (211.3 MiB 압축 풀기)
hancomoffice-hwpviewer-Fedora.x86_64.rpm:
    패키지가 서명되지 않았습니다!

hancomoffice-hwpviewer-9.20.0.1575-1.x86_64 (일반 RPM 파일 캐시): 서명 확인 실패 [6-파일이 서명되지 않음]
중단, 재시도 또는 무시하시겠습니까? [a/r/i] (a): i

파일 충돌 확인: ....................................................................[완료]
(1/1) 설치 중: hancomoffice-hwpviewer-9.20.0.1575-1.x86_64 .........................[완료]
%posttrans 스크립트 실행 중 ........................................................[완료]
$ 

설치가 완료 후, 한글(HWP) 뷰어를 실행하면 아래와 같이 나옵니다.

즉, 한글(HWP) 뷰어는 우분투(Ubuntu), 데비안(Debian)등의 deb기반의 배포판이나, 오픈수세(openSUSE), 페도라 코어(Fedore Core), 센트오에스(CentOS)등의 RPM기반의 배포판이나 현재의 배포판에서 설치 시 의존성 문제가 있으나, dpkgrpm으로 강제로 옵션 줘서 설치하거나, 배포판에서 의존성 관련으로 설치를 도와주는 명령어 입력하여 설치할 수 있습니다.

Buy me a coffeeBuy me a coffee

Windows 10에 WSL2를 설치하고 난 후, 리브레오피스의 소프트웨어 번역을 어떻게 설명을 할까 난관에 빠지게 됩니다.

그냥, "CAT(Computer Aided Translation)도구인 weblate에 번역하세요 하면 성의가 없어 보일것 같이 보여서, 원리에 대하여는 GNU Hello 프로젝트의 예를 들어서 이야기할 예정입니다.

GNU Hello는 hello라고 터미널에서 입력하면 문자열로 영어 설정으로는 Hello, World!, 한국어 설정으로는 안녕하세요, 여러분!을 출력해주는 프로그램입니다.

아래는 GNU Hello 홈페이지 링크입니다.

GNU Hello Project - https://www.gnu.org/software/hello/

여기서 WSL2으로 우분투Ubuntu를 사용해보겠습니다 (저는 개인적으로 오픈수세openSUSE를 사용하지만, 많은 한국의 리눅스 사용자들은 우분투Ubuntu를 사용하니, 많은 이들이 리눅스에서 테스트할 수 있게 우분투 기준으로 설명합니다.)

일단, Ubuntu에서 GNU Hello를 설치해봅니다

$ sudo apt -y install hello

설치가 완료되면, GNU Hello를 실행해봅시다.

$ hello
Hello, world!

여기서, WSL2를 최초로 설치하면 기본이 영어로 되어 있습니다.
동아시아(CJK) 문자가 출력된 번역된 문장을 보려면, 언어팩을 설치해야합니다.

참고, 우분투(Ubuntu) 언어 팩 목록

  • 한국어 언어 팩 language-pack-ko
  • 일본어 언어 팩 language-pack-ja
  • 중국어(간체) 언어팩 language-pack-zh-hans
  • 중국어(번체) 언어팩 language-pack-zh-hant
$ sudo apt -y install language-pack-ko language-pack-ja language-pack-zh-hans language-pack-zh-hant

우분투 및 오픈수세 등 리눅스 배포판에서 언어 설정 패키지를 설치후, 터미널에서 언어 별 환경설정을 하고 실행하면 다음과 같이 나옵니다.

$ LANG=en_US.UTF-8 hello
Hello, world!
$ LANG=ko_KR.UTF-8 hello
안녕하세요, 여러분!
$ LANG=ja_JP.UTF-8 hello
こんにちは、世界!
$ LANG=zh_CN.UTF-8 hello
世界你好!
$ LANG=zh_TW.UTF-8 hello
哈囉,大家好!

자유오픈소스 소프트웨어(FLOSS)의 번역은 po파일의 번역(飜譯, Translation)입니다.

GNU의 gettext 라이브러리를 이용하여 po파일에 들어간 번역문을 출력하는 것입니다.

GNU프로젝트의 하나인 hello는 로케일(Locale)설정에 따라서 로케일에 맞는 po파일 내용을 출력하는 것입니다.

그래서, KDE, GNOME, 리브레오피스등 소프트웨어의 번역은 po파일 내용을 번역하여 보여주는 것이라고 보면 됩니다.

상세한 내용은 아래의 슬라이드쉐어 링크 참조하면 됩니다.

오픈소스 번역 기여하기 v3

https://www.slideshare.net/changwoo/v3-114830838

 

오픈소스 번역 기여하기 v3

오픈소스 번역 기여하기 그놈 3.30 번역 모임 류창우 <cwryu@debian.org></cwryu@debian.org>

www.slideshare.net

 

Buy me a coffeeBuy me a coffee

제가 사용하는 2011년도산 삼성 노트북에는 i7 쿼드코어(Quad core)에 Intel 기본 그래픽 카드에 Nvidia 그래픽카드도 탑재되어 있습니다. 이 노트북은 그 당시에 제일 잘나가던 사양으로 만든 노트북입니다.

이 노트북은 아직도 현역으로 잘 굴릴 만큼, 아직도 성능이 나쁘지 않습니다.

(그 이유는 제가 엄청나게 개조를 했기 때문이죠. 램(RAM)을 4GB에서 16GB로, 하드디스크를 SSD로 교체 등등)

그러나, 오픈수세(openSUSE)를 설치한 제 노트북에 딥러닝을 위한 GPU를 사용하려니 Nvidia드라이버가 활성화가 안되어 있더군요.

이를 계기로, 저는 오픈수세(openSUSE)에서 노트북에 있는 Nvidia 드라이버를 활성화 시켜보겠습니다.

우선 아래 링크의 글을 보고 따라했습니다.

openSUSE Wiki: NVIDIA Drivers

 

SDB:NVIDIA drivers - openSUSE Wiki

Warning: If you plan to replace your card with a more recent one, it's recommended that you uninstall the driver (reverting back to nouveau) before upgrading your hardware. Situation Installing the official NVIDIA drivers using ZYpp (YaST, YaST2, or Zypper

en.opensuse.org

일단 루트(Root)권한으로 들어갑니다.

첫번째로, Nvidia 드라이버 저장소를 오픈수세(openSUSE) 리눅스에 추가합니다.

# zypper addrepo --refresh https://download.nvidia.com/opensuse/tumbleweed NVIDIA
'NVIDIA' 리포지토리 추가 중 ...................................................................................................................................[완료]
'NVIDIA' 리포지토리가 추가되었습니다.

URI            : https://download.nvidia.com/opensuse/tumbleweed
활성화됨       : 예
GPG 확인       : 예
자동 새로 고침 : 예
우선순위       : 99 (기본 우선순위)

저장소는 우선순위가 없습니다. 모든 저장소는 같은 우선순위를 공유합니다.

이후, 설치된 하드웨어의 정보를 다음의 명령어 lspcilscpu로 확인합니다.

비디오카드 정보 확인은 다음의 명렁어 lspci로 확인합니다.

# lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)

CPU아키텍처 정보 확인은 다음의 명령어 lscpu로 확인합니다.

# lscpu | grep Arch   
Architecture:                    x86_64

그리고, 명령어 lspcilscpu를 다음의 명령어 hwinfo로 대체할 수 있습니다.

비디오카드 정보 확인은 다음의 명령으로 확인합니다.

# hwinfo --gfxcard | grep Model
  Model: "nVidia GF119M [GeForce GT 520MX]"
  Model: "Intel 2nd Generation Core Processor Family Integrated Graphics Controller"

CPU아키텍처 정보 확인은 다음의 명령으로 확인합니다.

# hwinfo --arch
Arch: X86_64/grub                                               

정보를 확인하고, 적당한 Nvidia 드라이버 패키지를 찾습니다.

# zypper se x11-video-nvidiaG0*
Retrieving repository 'NVIDIA' metadata --------------------------------------------------------------------------------------------------------------------------[|]

New repository or package signing key received:

  Repository:       NVIDIA
  Key Name:         NVIDIA Corporation <linux-bugs@nvidia.com>
  Key Fingerprint:  9B763D49 D8A5C892 FC178BAC F5113243 C66B6EAE
  Key Created:      Fri Jun 16 01:13:18 2006
  Key Expires:      (does not expire)
  Subkey:           F016EEAA03224CDD 2006-06-16 [does not expire]
  Rpm Name:         gpg-pubkey-c66b6eae-4491871e


Do you want to reject the key, trust temporarily, or trust always? [r/t/a/?] (r): a
Retrieving repository 'NVIDIA' metadata .......................................................................................................................[done]
Building repository 'NVIDIA' cache ............................................................................................................................[done]
Loading repository data...
Reading installed packages...

S | Name                | Summary                                                 | Type
--+---------------------+---------------------------------------------------------+--------
  | x11-video-nvidiaG04 | NVIDIA graphics driver for GeForce 400 series and newer | package
  | x11-video-nvidiaG05 | NVIDIA graphics driver for GeForce 600 series and newer | package

이제, Nvidia 드라이버 패키지를 설치합니다.

# zypper in x11-video-nvidiaG04
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 13 NEW packages are going to be installed:
  Mesa-libGLESv1_CM1 Mesa-libGLESv2-2 libX11-6-32bit libXau6-32bit libXext6-32bit libglvnd-32bit libxcb1-32bit nvidia-computeG04 nvidia-gfxG04-kmp-default
  nvidia-glG04 plasma5-applet-suse-prime suse-prime x11-video-nvidiaG04

The following 4 recommended packages were automatically selected:
  Mesa-libGLESv1_CM1 Mesa-libGLESv2-2 nvidia-glG04 x11-video-nvidiaG04

13 new packages to install.
Overall download size: 79.2 MiB. Already cached: 0 B. After the operation, additional 366.0 MiB will be used.
Continue? [y/n/v/...? shows all options] (y): y
Do you agree with the terms of the license? [yes/no] (no): yes

설치가 완료되었으면 재부팅 합니다.

재부팅 후에도 Intel 그래픽카드로 사용되는걸 확인할 수 있습니다.
openSUSE에서 Nvidia 그래픽카드 사용 활성화를 하려면 아래의 명령어로 활성화합니다

$ sudo prime-select nvidia
Logout to switch graphics

위의 내용처럼 로그아웃을 하고 난 후 새로 로그인 하면 변경되는 걸 확인할 수 있습니다.

ps. 이제 이 노트북으로 Nvidia GPU를 이용한 AI연산, 딥러닝을 사용할수 있다.

Buy me a coffeeBuy me a coffee

우분투(Ubuntu)에서 리브레오피스(LibreOffice)의 소스코드를 빌드할 수 있게 의존성 있는 패키지를 가져오도록 하는 선택하는 옵션으로 의존성있는 패키지 설치를 진행해보았습니다.

$ sudo apt build-dep libreoffice
[sudo] password for ***:
Reading package lists... Done
E: You must put some 'deb-src' URIs in your sources.list

아... deb-src URI가 sources.list에 없다고 sources.listdeb-src를 채워놓으라고 하군요.

그럼, sources.listdeb-src URI를 채워넣어야죠.

sources.list 파일을 수정해봅니다.

$ sudo vi /etc/apt/sources.list

이미 deb-src는 있으나 #으로 주석처리되어 있습니다. 그럼, 저장소 목록에 있는 deb-src 앞의 # 주석을 해제합니다.

그리고, 저장소 목록을 다시 업데이트 합니다.

$ sudo apt update

그리고 다시 아래의 명령어로 libreoffice에 대해 빌드할수 있게 의존성있는 패키지를 설치해봅니다.

$ sudo apt-get build-dep libreoffice
Reading package lists... Done
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  acl ant ant-optional autoconf automake autopoint autotools-dev binutils binutils-common binutils-x86-64-linux-gnu
  bison build-essential ca-certificates-java comerr-dev cpp cpp-9 dctrl-tools debhelper default-jdk
  default-jdk-headless default-jre default-jre-headless default-libmysqlclient-dev devscripts dh-apparmor
  dh-autoreconf dh-python dh-strip-nondeterminism doxygen dpkg-dev dwz evolution-data-server-common fakeroot
  firebird-dev firebird3.0-common firebird3.0-common-doc firebird3.0-server-core flex fontforge-common fontforge-nox
  fonts-crosextra-carlito fonts-dejavu fonts-dejavu-extra fonts-liberation2 fonts-urw-base35 g++ g++-9 gcc gcc-9
  gcc-9-base gdb gettext ghostscript gir1.2-atk-1.0 gir1.2-atspi-2.0 gir1.2-camel-1.2 gir1.2-ebackend-1.2
  gir1.2-ebook-1.2 gir1.2-ebookcontacts-1.2 gir1.2-edatabook-1.2 gir1.2-edataserver-1.2 gir1.2-freedesktop
  gir1.2-gdkpixbuf-2.0 gir1.2-gst-plugins-base-1.0 gir1.2-gstreamer-1.0 gir1.2-gtk-3.0 gir1.2-harfbuzz-0.0
  gir1.2-langtag-0.6 gir1.2-pango-1.0 gir1.2-secret-1 gir1.2-soup-2.4 gobject-introspection gperf graphviz
  hyphen-en-us icu-devtools imagemagick imagemagick-6-common imagemagick-6.q16 intltool-debian java-common javahelper
  junit4 krb5-multidev libabw-0.1-1 libabw-dev libamd2 libann0 libapache-pom-java libarchive-zip-perl libasan5
  libassuan-dev libatk-bridge2.0-dev libatk1.0-dev libatomic1 libatspi2.0-dev libavahi-client-dev libavahi-common-dev
  libb-hooks-op-check-perl libbabeltrace1 libbinutils libblas-dev libblas3 libblkid-dev libbluetooth-dev libbluetooth3
  libboost-atomic1.71-dev libboost-atomic1.71.0 libboost-chrono1.71-dev libboost-chrono1.71.0 libboost-date-time-dev
  libboost-date-time1.71-dev libboost-date-time1.71.0 libboost-dev libboost-filesystem-dev libboost-filesystem1.71-dev
  libboost-filesystem1.71.0 libboost-iostreams-dev libboost-iostreams1.71-dev libboost-iostreams1.71.0
  libboost-locale-dev libboost-locale1.71-dev libboost-locale1.71.0 libboost-regex1.71-dev libboost-regex1.71.0
  libboost-serialization1.71-dev libboost-serialization1.71.0 libboost-system1.71-dev libboost-system1.71.0
  libboost-thread1.71-dev libboost-thread1.71.0 libboost1.71-dev libbrotli-dev libbsh-java libbtf1 libc-dev-bin
  libc6-dev libcairo-script-interpreter2 libcairo2-dev libcamd2 libcamel-1.2-62 libcamel1.2-dev libcc1-0 libccolamd2
  libcdr-0.1-1 libcdr-dev libcdt5 libcgraph6 libcholmod3 libclang1-10 libclass-method-modifiers-perl
  libclucene-contribs1v5 libclucene-core1v5 libclucene-dev libcmis-0.5-5v5 libcmis-dev libcolamd2
  libcommons-logging-java libcommons-parent-java libcppunit-1.15-0 libcppunit-dev libcroco3 libcrypt-dev libctf-nobfd0
  libctf0 libcups2-dev libcupsimage2 libcupsimage2-dev libcurl4-gnutls-dev libcxsparse3 libdatrie-dev libdbus-1-dev
  libdconf-dev libdebhelper-perl libdevel-callchecker-perl libdpkg-perl libdw1 libdynaloader-functions-perl
  libe-book-0.1-1 libe-book-dev libebackend-1.2-10 libebackend1.2-dev libebook-1.2-20 libebook-contacts-1.2-3
  libebook-contacts1.2-dev libebook1.2-dev libedata-book-1.2-26 libedata-book1.2-dev libedataserver-1.2-24
  libedataserver1.2-dev libegl-dev libegl1-mesa-dev libel-api-java libemf1 libencode-locale-perl libeot-dev libeot0
  libepoxy-dev libepubgen-0.1-1 libepubgen-dev libetonyek-0.1-1 libetonyek-dev libexif12 libexpat1-dev
  libexttextcat-2.0-0 libexttextcat-data libexttextcat-dev libfakeroot libfbclient2 libffi-dev libfftw3-double3
  libfile-homedir-perl libfile-listing-perl libfile-stripnondeterminism-perl libfile-which-perl libfontconfig1-dev
  libfontforge3 libfreehand-0.1-1 libfreehand-dev libfreetype-dev libfreetype6-dev libfribidi-dev libgcc-9-dev
  libgck-1-0 libgcr-base-3-1 libgcrypt20-dev libgd3 libgdata-common libgdata22 libgdk-pixbuf2.0-dev libgdraw6
  libgfortran5 libgif7 libgirepository1.0-dev libgl-dev libgl1-mesa-dev libgles-dev libgles1 libgles2
  libgles2-mesa-dev libglib2.0-dev libglib2.0-dev-bin libglm-dev libglu1-mesa libglu1-mesa-dev libglvnd-dev libglx-dev
  libgmp-dev libgmpxx4ldbl libgnutls-dane0 libgnutls-openssl27 libgnutls28-dev libgnutlsxx28 libgoa-1.0-0b
  libgoa-1.0-common libgomp1 libgpg-error-dev libgpgme-dev libgpgmepp-dev libgphoto2-6 libgphoto2-port12 libgraphblas3
  libgraphite2-dev libgs9 libgs9-common libgssrpc4 libgstreamer-gl1.0-0 libgstreamer-plugins-base1.0-0
  libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev libgtk-3-dev libgts-0.7-5 libgvc6 libgvpr2 libhamcrest-java
  libharfbuzz-dev libharfbuzz-gobject0 libharfbuzz-icu0 libhsqldb1.8.0-java libhtml-parser-perl libhtml-tagset-perl
  libhtml-tree-perl libhttp-cookies-perl libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl libhunspell-dev
  libhyphen-dev libhyphen0 libib-util libice-dev libicu-dev libidn11 libidn2-dev libieee1284-3 libijs-0.35
  libimport-into-perl libio-html-perl libio-pty-perl libio-socket-ssl-perl libipc-run-perl libisl22 libitm1
  libixion-0.15-0 libjbig-dev libjbig2dec0 libjpeg-dev libjpeg-turbo8-dev libjpeg8-dev libjsp-api-java
  libkadm5clnt-mit11 libkadm5srv-mit11 libkdb5-9 libkf5attica-dev libkf5auth-dev libkf5auth-dev-bin libkf5auth5
  libkf5bookmarks-dev libkf5codecs-dev libkf5completion-dev libkf5config-dev libkf5config-dev-bin
  libkf5configwidgets-dev libkf5coreaddons-dev libkf5coreaddons-dev-bin libkf5dbusaddons-dev libkf5globalaccel-dev
  libkf5guiaddons-dev libkf5i18n-dev libkf5iconthemes-dev libkf5itemviews-dev libkf5jobwidgets-dev libkf5kio-dev
  libkf5kiofilewidgets5 libkf5service-dev libkf5solid-dev libkf5sonnet-dev libkf5sonnet-dev-bin libkf5textwidgets-dev
  libkf5widgetsaddons-dev libkf5windowsystem-dev libkf5xmlgui-dev libklu1 liblab-gamut1 liblangtag-common
  liblangtag-dev liblangtag-gobject0 liblangtag1 liblapack-dev liblapack3 liblcms2-dev libldap2-dev libldl2 libllvm10
  liblpsolve55-dev liblqr-1-0 liblsan0 libltdl-dev liblwp-mediatypes-perl liblwp-protocol-https-perl liblzma-dev
  libmagick++-6.q16-8 libmagickcore-6.q16-6 libmagickwand-6.q16-6 libmdds-dev libmetis5 libmhash2
  libmodule-runtime-perl libmongoose2 libmoo-perl libmount-dev libmpc3 libmspub-0.1-1 libmspub-dev libmwaw-0.3-3
  libmwaw-dev libmysqlclient-dev libmysqlclient21 libmythes-1.2-0 libmythes-dev libneon27-gnutls libneon27-gnutls-dev
  libnet-http-perl libnet-ssleay-perl libnspr4 libnspr4-dev libnss3 libnss3-dev libodbc1 libodfgen-0.1-1 libodfgen-dev
  libopengl-dev libopengl0 libopenjp2-7 liborc-0.4-0 liborc-0.4-dev liborc-0.4-dev-bin liborcus-0.15-0 liborcus-dev
  liborcus-spreadsheet-model-0.15-0 libp11-kit-dev libpagemaker-0.0-0 libpagemaker-dev libpango1.0-dev
  libpangoxft-1.0-0 libpaper1 libparams-classify-perl libpathplan4 libpcre16-3 libpcre2-32-0 libpcre2-dev
  libpcre2-posix2 libpcre3-dev libpcre32-3 libpcrecpp0v5 libpcsclite1 libphonenumber7 libpixman-1-dev libplot2c2
  libpng-dev libpoppler-cpp-dev libpoppler-cpp0v5 libpoppler-dev libpoppler-private-dev libpoppler97 libpq-dev libpq5
  libprotobuf17 libpsl-dev libpstoedit0c2a libpthread-stubs0-dev libpython3-dev libpython3.8-dev libqgpgme7
  libqt5concurrent5 libqt5script5 libqt5scripttools5 libqt5sql5 libqt5x11extras5-dev libquadmath0 libraptor2-0
  libraptor2-dev librasqal3 librasqal3-dev librbio2 librdf0 librdf0-dev librevenge-0.0-0 librevenge-dev
  librole-tiny-perl libsane libsane-common libsane-dev libsecret-1-0 libsecret-1-dev libsecret-common libselinux1-dev
  libsepol1-dev libservlet-api-java libservlet3.1-java libsm-dev libsnmp-base libsnmp35 libsoup2.4-dev libspiro1
  libspqr2 libsqlite3-dev libssl-dev libstdc++-9-dev libstrictures-perl libsub-override-perl libsub-quote-perl
  libsuitesparse-dev libsuitesparseconfig5 libtasn1-6-dev libthai-dev libtiff-dev libtiffxx5 libtimedate-perl
  libtommath1 libtool libtry-tiny-perl libtsan0 libubsan1 libumfpack5 libunbound8 libuninameslist1 liburi-perl
  libvisio-0.1-1 libvisio-dev libvulkan-dev libwayland-bin libwayland-dev libwebpmux3 libwebsocket-api-java
  libwpd-0.10-10 libwpd-dev libwpg-0.3-3 libwpg-dev libwps-0.4-4 libwps-dev libwww-perl libwww-robotrules-perl
  libx11-dev libx11-xcb-dev libxapian30 libxau-dev libxaw7-dev libxcb-icccm4-dev libxcb-render0-dev libxcb-shm0-dev
  libxcb1-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev
  libxi-dev libxinerama-dev libxkbcommon-dev libxkbfile-dev libxml2-dev libxml2-utils libxmlsec1-dev libxmlsec1-gcrypt
  libxmlsec1-gnutls libxmlsec1-nss libxmu-dev libxmu-headers libxpm-dev libxrandr-dev libxrender-dev libxslt1-dev
  libxt-dev libxtst-dev libyajl-dev libyajl2 libzip5 linux-libc-dev lp-solve m4 make maven-repo-helper mysql-common
  nettle-dev odbcinst odbcinst1debian2 openjdk-11-jdk openjdk-11-jdk-headless openjdk-11-jre openjdk-11-jre-headless
  pango1.0-tools patchutils perl-openssl-defaults pkg-config po-debconf poppler-data pstoedit python3-dev python3-lxml
  python3-mako python3-markdown python3-packaging python3-pyparsing python3.8-dev qt5-qmake qt5-qmake-bin qtbase5-dev
  qtbase5-dev-tools qtchooser qtscript5-dev rdfind symlinks ucpp unixodbc-dev unzip uuid-dev wayland-protocols wdiff
  x11proto-core-dev x11proto-dev x11proto-input-dev x11proto-randr-dev x11proto-record-dev x11proto-xext-dev
  x11proto-xinerama-dev xorg-sgml-doctools xsltproc xtrans-dev zip zlib1g-dev
0 upgraded, 593 newly installed, 0 to remove and 0 not upgraded.
Need to get 499 MB of archives.
After this operation, 1707 MB of additional disk space will be used.
Do you want to continue? [Y/n]

이제, 리브레오피스(LibreOffice)를 빌드(Build)할 준비가 되었습니다.

Buy me a coffeeBuy me a coffee

이번에 Windows 10에서 공식적으로 WSL2 공개 및 Xwindow를 쉽게 사용할 수 있는 WSL2가 공개되었습니다.

이번 WSL2지원 버전은 Windows 10 Home까지 지원하기때문에 Windows 10 최신 업데이트를 진행하였습니다.

 

만약에, Windows 10 빌드버전이 2004가 나오지 않으면 아래의 링크로 강제 업데이트를 하면 됩니다.

https://www.microsoft.com/ko-kr/software-download/windows10

 

Windows 10 다운로드

Windows 10용 ISO 파일을 다운로드한 경우, 해당 파일은 선택한 위치에 로컬로 저장됩니다.컴퓨터에 타사 DVD 굽기 프로그램이 설치되어 있으며 해당 프로그램을 사용하여 설치 DVD를 만들려는 경우,

www.microsoft.com

 

자, Windows 10 빌드버전 2004로 직접 업데이트 해보았습니다. 

 

다행히, 다른 사람에게 물려받은 2013년도산 HP랩탑은 Windows 10 최신버전 업데이트가 적용가능함을 확인하였습니다.

이제 Windows 10 빌드버전 2004가 적용되었습니다!

설치 완료!

이후, BIOS설정으로 가상화 설정을 하였고, WSL2설치 및 Ubuntu 20.04 LTS를 설치하였습니다

설치는 아래와 같이 진행하였습니다.

docs.microsoft.com/ko-kr/windows/wsl/install-win10

 

Windows 10에 WSL(Linux용 Windows 하위 시스템) 설치

Linux용 Windows 하위 시스템을 Windows 10에 설치하는 방법에 대한 지침입니다.

docs.microsoft.com

설치 후, xming 설치를 하였고, Xwindow 패키지를 설치하여 xeye를 띄워보았습니다.

이제, Windows에서 간단한 Linux개발 및 docker, container, kubernetes 환경설정등 여러가지 작업을 할수 있을 것 같더군요 

참고1. WSL2 소개 영상

WSL2: Code faster on the Windows Subsystem for Linux! | Tabs vs Spaces

www.youtube.com/watch?v=MrZolfGm8Zk

참고2. WSL2 will be generally available in Windows 10, version 2004

devblogs.microsoft.com/commandline/wsl2-will-be-generally-available-in-windows-10-version-2004/

 

WSL2 will be generally available in Windows 10, version 2004 | Windows Command Line

WSL2 will soon be officially available as part of Windows 10, version 2004! As we get ready for general availability, we want to share one additional change: updating how the Linux kernel inside of WSL2 is installed and serviced on your machine.

devblogs.microsoft.com

참고3. What’s new for IT pros in Windows 10, version 2004 

techcommunity.microsoft.com/t5/windows-it-pro-blog/what-s-new-for-it-pros-in-windows-10-version-2004/ba-p/1419764#wsl

 

What’s new for IT pros in Windows 10, version 2004

Windows 10, version 2004, officially known as the Windows 10 May 2020 Update, is now available through Windows Server Update Services (WSUS) and Windows Update for Business, and can be downloaded from Visual Studio Subscriptions, the Software Download Cent

techcommunity.microsoft.com

 

Buy me a coffeeBuy me a coffee

GNOME 프로젝트의 어떤 파일 빌드 중

/home/dhsung/Projects/gnome-hello/configure: line 11964: syntax error near unexpected token `maximum'
/home/dhsung/Projects/gnome-hello/configure: line 11964: `GNOME_COMPILE_WARNINGS(maximum)'

위의 메세지를 띄우며 빌드가 안될때 해결책.
'gnome-common'라이브러리( Common Files to Build GNOME )이 없어서 나오는 문제.

그래서 아래와 같이 'gnome-common'라이브러리를 설치해면 해결됨.

openSUESE에서
sudo zypper install gnome-common

Ubuntu에서
sudo apt install gnome-common

위의 패키지 설치가 끝나면 해결됨.

출처: GNOME_COMPILE_WARNINGS(maximum) – Syntax Error in configure

Buy me a coffeeBuy me a coffee

(English follow Korean. 영어는 한국어 뒤에 나옵니다.)

GNOME - GNU Network Object Model Environment

한국어 소개: 그놈(GNOME) 프로젝트는 사용자를 위한 완전히 자유롭고 사용하기 쉬운 데스크탑 환경과 동시에 소프트웨어 개발자를 위한 강력한 어플리케이션 프레임워크를 만들고 있습니다.그놈은 GNU 프로젝트의 일부이며, 자유 소프트웨어입니다(흔히, 오픈 소스 소프트웨어라고 불립니다). 그놈은 많은 BSD와 GNU/리눅스에 포함되어 배포되고 있으며, 다른 여러 UNIX 시스템에서도 작동합니다.

GNOME Homepage - https://www.gnome.org/

GNOME Korea Homepage - http://www.gnome.or.kr/

GNOME Korea Blog - http://gnome-kr.blogspot.kr/

gucharmap - the GNOME Character Map, based on the Unicode Character Database.

gucharmap Homepage - https://wiki.gnome.org/Gucharmap

gucharmap GitHub - https://github.com/GNOME/gucharmap


GNOME gucharmap (그놈 문자표)

GNOME 문자표(gucharmap)  ScreenshotGNOME 문자표(gucharmap)


시작하며

저는 한자(漢字/汉字)에 관심이 많은 개발자이며, 취미로 중국어(中國語,漢語,汉语, Chinese)와 일본어(日本語, Japanese)를 배우고 있습니다.

저는 어릴때 중국어에서 사용하는 한자(漢字·汉字,hànzì,ㄏㄢˋㄗˋ)와, 일본어에서 사용하는 한자(漢字・かんじ, kanji), 그리고 한국어에서 사용하는 한자(漢字, hanja)가 다르다는 것을 깨닫고, 어릴때부터 한자에 대하여 관심을 갖게 되었습니다.


어릴때 집에서 구독하는 조선일보 기사를 보면 나라 국(國)에 대한 한자를 国로 사용하고, 더불, 줄 여(與)에 대한 한자 与를 쓰는 경우를 보았습니다.

조선일보에서 한자를 표준에 안맞게 쓸까 궁금했습니다. 여기에 대하여 아버지에게 여쭤보면 "조선일보가 일본의 기계로 찍어내서 약자를 쓴다"라고 하시며 "한자 쓸때에는 약자를 쓰면 안된다"라면서 정자체[正字體,일본에서는 구자체(舊字體,旧字体),중국에서는 번자체(繁字體)로 부름]를 배워야 한다고 강조한 적이 있습니다.

조선일보(朝鮮日報,The Chosun Ilbo) 1986년 12월 10일 3면 - 小康정국…与・野의 「対話異夢」(소강정국…여・야의 「대화이몽」, 小康정국…與・野의 「對話異夢」)

동아일보(東亞日報,The Dong-a Ilbo) 1986년 12월 9일 1면 - 與野 代表회담 적극추진(여야 대표회담 적극추진, 與野 代表會談 積極推進)

위의 조선일보에서 여(與)를 "与"로 표기를 하였고, 동아일보에서 여(與)를 "與"를 표기하였습니다.


이후,  고등학교때에 제2외국어로 중국어를 배우고, 대학교때에도 중국어 수업을 들었습니다. 중국 대륙에는 한자를 간체자(簡體字,简体字)로 바꿔서 일상생활에 사용한다 것을 알게 되곤, 한자의 모양이 다양해지고 파편화되고 있구나를 깨달았습니다.


예를 들어 차례, 버금 차(次)에 대한 한자 표기는 각 나라마다 다릅니다.

次차례, 버금 차(次)에 대한 다양한 표기 - 중국, 홍콩, 대만, 일본, 한국, 베트남 순으로 표기가 각기 다르다는 걸 확인할 수 있습니다. 次 - Variant Glyphs in China(Mainland), Hong Kong, Taiwan, Japan, Korea, Vietnam.


Table 3-99 that was excerpted from page 174 of CJKV Information Processing (Second Edition) that provides examples of CJK Unified Ideographs whose shapes may be different depending on the locale or region. Reference: Genuine Han Unification https://blogs.adobe.com/CCJKType/2012/01/genuine-han-unification.html

순서대로 일(一), 여(与,與), 판(判), 기(器), 자(字), 해(海), 일(逸), 골(骨)로 읽습니다.

(각 나라의 한자 모양을 보면, 현재의 Android OS탑재 단말기들이 제조사마다 다르게 구현되어 파편화 되고 있다는 것과 비슷한 느낌으로 받아들이면 될것 같습니다.)


그놈(GNOME)을 처음 접할때...

대학교 입학때, 리눅스 데스크탑을 접하게 되면서 문자표(GNOME gucharmap, KDE kcharselect)를 접하게 되었습니다.

위의 문자표에서 여러가지 한자가 나오면서, 한자에 대한 한국어 표기가 나옵니다만, 영어로 나와서 실망했고, 로마자표기법이 현재 대한민국에서 사용하고 있는 로마자 표기법이 아닌 것이 나와 당황한 기억이 납니다.


시간이 지나며, 중국어 수업을 들으며 간체(简体字)와 번체(繁体字)의 차이에 대하여 관심을 많이 가지게 되었지만, 컴퓨터로 어떻게 처리할지는 그 당시에 생각을 하지 않았습니다.


이후 대학원 다닐때, 저는 CJKV Information Processing이란 책을 알게 되었습니다.

이 CJKV책은 Perl 사용자 모임의 yongbin님께서 주신 책입니다.

저는 이 책을 쭉 훑어보다 머릿속에 충격을 받는 다는 표현이 어떤 것인지에 대하여 알게 되었습니다.

앞부분에는 동아시아 국가에서 사용하는 언어에 대한 인문환경, 표준에 대한 내용이기때문에 기본적인 한자, 중국어와 일본어를 알고 있어서 읽는 것에 그렇게 큰 어려움이 없었습니다.

컴퓨터로 일본어, 중국어, 한국어를 어떻게 처리할지에 대하여 정리한 책인데, 책의 저자가 미국인이라는 것에 놀라도, 한국에서 한국어로 이런 책이 나온 적이 없는데, 미국인이 작성했다는걸 보고 충격을 아주 쎄게 받았습니다.

이 책을 보면서, 미국인이 동아시아문자처리에 대한 정리를 너무 잘했다는 생각이 들면서, 한국어에 대한 처리에 대한 책을 쓰고 싶단 생각을 예전부터 하였습니다.


이후 2012년도 한국 펄 워크샵(Korea Perl Workshop)에서 운이 좋게 "동아시아 문자 처리"라는 주제로 발표를 하게 되었습니다.

(2012년도에는 얼떨결에 한국 펄 워크샵에서 발표를 하면서, 2012년 펄 크리스마스 달력에 글 "열네번째 날: 동아시아 언어의 로마자 변환에 도전해보자!"를 작성하게 되었습니다)


Perl워크샵에서 발표를 하게되면서 Unicode Consortium에서 정리한 한자에 대한 사전을 만들어 볼까하는 생각을 했습니다.


이후 시간이 지나, 대만(臺灣,Taiwan)의 해커집단G0V에서 나온 Moedict(萌典)을 보고는 충격을 많이 받았지요.

 

어튼, 서론(序論)이 길었습니다.


한자 관련 정보는 어디서?

저는 웹상에서 한자(漢字)에 대한 정보에 대한 웹사이트 만들어야겠다는 생각을 했습니다.

그런데 한자 정보에 대한 사이트를 어떻게 만들어야 할까? 이런 고민을 쭉 하게 되었지요.


유니코드 컨소시엄(Unicode Consortium)에서 공개한 유니한 데이터베이스(Unihan database, 한자정보가 정리된 데이터베이스) 정보를 조사해봤습니다.

The Unicode® Standard Version 9.0 – Core Specification http://www.unicode.org/versions/Unicode9.0.0/UnicodeStandard-9.0.pdf

The Unicode Standard, Version 9.0 - Code Charts - http://www.unicode.org/Public/UCD/latest/charts/CodeCharts.pdf

UAX #38: Unicode Han Database (Unihan) - http://unicode.org/reports/tr38/

UAX #44: Unicode Character Database - http://www.unicode.org/reports/tr44/

Unicode® Standard Annex #41 COMMON REFERENCES FOR UNICODE STANDARD ANNEXES -  http://unicode.org/reports/tr41/tr41-19.html 

CJK Unified Ideographs -  http://www.unicode.org/charts/PDF/U4E00.pdf

Unicode 최신 정보 FTP - http://www.unicode.org/Public/UCD/latest/

[Wikipedia] CJK Unified Ideographs - https://en.wikipedia.org/wiki/CJK_Unified_Ideographs


Python의 유니코드(Unicode) 관련 자료도 참조하게 되었습니다.

http://farmdev.com/talks/unicode/

Pragmatic Unicode http://nedbatchelder.com/text/unipain.html


유니코드 컨소시엄에서 정의된 파일과 가이드를 봐도 어떻게 만들지 감이 잡히지 않았습니다.


일단, 자유 소프트웨어(Free Software)로 구현된 GNOME gucharmap, KDE kcharselect가 후보군으로 떠오르군요.

위의 구현물의 소스코드를 보고 어떻게 한자 정보에 대한 사이트를 만들어볼까 고민을 해보게 됩니다.

KDE 문자표 kCharSelect - a tool to select special characters from all installed fonts and copy them into the clipboard on KDE 

https://utils.kde.org/projects/kcharselect/



GNOME 문자표 gucharmap - the GNOME Character Map, based on the Unicode Character Database. https://wiki.gnome.org/action/show/Apps/Gucharmap



오픈소스 프로젝트에 소스코드 분석해볼까?

저는 자유 소프트웨어인 KDE kcharselect, GNOME gucharmap의 git mirror를 forked했습니다.

GNOME gucharmap git mirror - https://github.com/GNOME/gucharmap

KDE kcharselect git mirror - https://github.com/KDE/kcharselect

이후 KDE kcharselect의 소스코드와 GNOME gucharmap의 소스코드를 일단 확인했습니다.


KDE kcharselect의 소스코드는 C++(QT Library), Python 스크립트로 구성되어 있습니다.

Python 스크립트로 Unicode 관련 txt파일[UnicodeData.txt, NamesList.txt, Blocks.txt, Unihan_Readings.txt (you need to uncompress it from Unihan.zip)]을 읽고, 자체적으로 사용하는 구조체를 이용하여 데이터베이스 파일 생성하는걸 확인하였습니다.


GNOME gucharmap의 소스코드는 C(GTK+ Library), Perl 스크립트로 구성되어 있습니다.

gucharmap에서는 Unicode Consortium에서 정의한 파일 Blocks.txt, NamesList.txt, Scripts.txt, UnicodeData.txt, Unihan.zip 파일을 이용한다고 나와 있습니다.

Perl 스크립트로 Unicode 관련 txt파일을 읽어 들인후  여러 C언어 파일을 생성하는 것이 인상적이였습니다.


 Unicode Consortium에서 제공하는 파일중 어떤 파일을 사용하는가? 

 GNOME gucharmap  

 KDE kcharselect

 UnicodeData.txt

 NamesList.txt 

 Blocks.txt

 Scripts.txt

 Unihan.zip  

 UnicodeData.txt

 NamesList.txt

 Blocks.txt

 Unihan_Readings.txt 


GNOME gucharmap, KDE kcharselect에서는 한자(漢字/汉字, CJK Unified Ideographs)에 대한 내용은 Unihan.zip파일 내부의 Unihan_Readings.txt의 내용을 참조하는 것을 확인 하였습니다.


저는 유니코드 컨소시엄에서 정의한 Unihan.zip 내부의 한자를 읽는 방법을 정의한 Unihan_Readings.txt파일을 읽고, 내부구조를 확인해보았습니다.


내부 구조를 확인해보니 한자에 대하여 여러가지 읽는 방법에 대한 정의가 나와 있습니다.

kCantonese, kDefinition, kHangul, kHanyuPinlu, kHanyuPinyin, kJapaneseKun, kJapaneseOn, kKorean, kMandarin, kTang, kVietnamese, kXHC1983

위의 정의 중에 한자에 대한 한글 표기(kHangul) 및 베트남어 발음표기(kVietnamese)가 존재함을 확인하였습니다. 


예제) 사람 인(人)에 대한 유니코드 컨소시엄(Unicode Consortium)의 읽는 방법 정의 



그런데 GNOME gucharmap, KDE kcharselect에서는 한국어의 로마자 표기가 지금은 주로 사용하지않은 방식인 예일대 표기법을 사용하고 있었으며, 베트남어의 발음표기가 추가 되지 않은 것을 확인하였습니다.


오픈소스 프로젝트에 소스코드 추가해보자!


저는 GNOME gucharmap, KDE kcharselect 2개의 프로젝트에서 Unihan_Readings.txt파일을 읽어들이는 소스코드를 분석후, 한글과 베트남어 발음 표기를 추가하게 되었습니다.


GNOME gucharmap에서는 Unihan_Readings.txt파일을 읽어들이는 C, Perl코드를 수정하였습니다.

버그질라 보고: https://bugzilla.gnome.org/show_bug.cgi?id=773380

추가한 소스코드: https://github.com/GNOME/gucharmap/commit/b3614d114bc2158f8e5c4b98797019f3a71d0ba7 


KDE kcharselect에서는 Unihan_Readings.txt파일을 읽어들이는 python코드를 수정하였습니다

수정한 소스코드

1) kcharselect - https://github.com/studioego/kcharselect/commit/470b8ac5ad2bdf646a64abdfd4297ad2fd9148e0

2) kwidgetsaddon -  https://github.com/studioego/kwidgetsaddons/commit/0ff990d063d8ba1f6d4a15c1144e0064fd844f9c


오픈소스 프로젝트에 소스코드 제출해보기 

저는 KDE kcharselect, GNOME gucharmap 소스코드를 github에 커밋하였고, 이후 KDE 개발자와 GNOME 번역자(GNOME Korean Translator)에게 소스코드 커밋 요청을 했습니다.


Pull Request요청한 GNOME gucharmap github 소스코드 https://github.com/studioego/gucharmap 

Pull Request요청한 KDE kcharselect github 소스코드 https://github.com/studioego/kcharselect


KDE쪽에서는 코드 충돌의 우려 및 기존 데이터파일의 배포 중단을 이유로 커밋이 거절되었습니다.


그러나 GNOME쪽에서는 GNOME Asia에서 활동하는 한국인 번역가 조성호(Seong-ho Cho)님의 도움으로 운이 좋게 커밋 성공하였습니다.

Reference: http://osdir.com/ml/commits.gnome/2016-11/msg01983.html

Subject: [gucharmap] Created tag 9.0.2 

The unsigned tag '9.0.2' was created.

Tagger: Christian Persch <chpe@xxxxxxxxxxxxx>
Date: Mon Nov 7 19:20:01 2016 +0100

Version 9.0.2

Git-EVTag-v0-SHA512: 
d889842de54cd9e5bbf253a098c13a7da91257c945b010b2d21d3f3607487d8ab47b4ba91548f9f65bf4cf70f14bece37e24907639428e6bba5b940acacfdc1e

Changes since the last tag '9.0.1':

Christian Persch (2):
Post release version bump
build: Pass --with-unicode-data down to distcheck configure

DaeHyun Sung (1):
charmap: Add korean hangul and vietnamese pronunciations

Marek Černocký (1):
Updated Czech translation

Piotr Drąg (1):
Update Polish translation

Sveinn í Felli (1):
Update Icelandic translation
_______________________________________________
commits-list mailing list (read only)
https://mail.gnome.org/mailman/listinfo/commits-list


드디어 저는 오픈소스 개발자가 되었으며 GNOME Contributor가 되었습니다.


원래는 웹상에서 한자에 대한 정보 보여주는 개발을 시작하려고 했고, 개발 시작전에 KDE kcharmap, GNOME gucharmap에 대한 소스 분석으로 하다보니, GNOME 개발에 기여를 하게 되었습니다. 운좋게 자유소프트웨어 개발자로 얻어걸린 격입니다.

 

GNOME 문자표(GNOME gucharmap)에 한자(漢字)의 한글 표기 및 베트남어 표기를 진행하다보니, 웹 상에서 한자 정보를 보여주는 서비스 구현에 대한 많은 성찰을 하게 되었습니다.


올해 안에 한자(漢字, Chinese Character)에 대한 정보 보여주는 서비스를 만든다고 도메인을 구입 및 배포하려던 계획들이 이번 GNOME gucharmap의 한글 및 베트남어 지원를 계기로, 내년에 한자 정보 서비스 사이트를 개발하기로 하였습니다.


계획은 미뤄졌지만, 리눅스 생태계의 자유 소프트웨어에 기여를 하였다는 것에 큰 의의를 둡니다.


이전에도 오픈소스(gwibber - https://code.launchpad.net/~sungdh86/gwibber/urlshorter-durl )에 기여를 한 적이 있었으나, 리눅스 배포판 설치할때마다 들어가는 문자표에 제 이름을 남기고 기여하기는 처음입니다.


아래는 GNOME gucharmap에 제가 작성한 소스가 포함된 부분에 대한 정보화면입니다.

Unihan_Readings.txt에 있는 한국어 발음, 베트남어 발음 추가

Copyright ⓒ 2016 DaeHyun Sung


"Copyright ⓒ 2016 DaeHyun Sung"이 추가되니 정말 기쁩니다.


정리하며

"소 뒷걸음질 하다 쥐잡은 격"과 같이 우연히 C, C++, Perl, Python코드를 확인하다보니 오픈소스 프로젝트인 GNOME gucharmap에 한글 표기와 베트남어발음표기를 추가하게 되었습니다.

GNOME gucharmap, KDE kcharselect소스코드를 분석하다보니, 제가 원래 목표로 한 Python, Perl용 한중일월(中日韓越, Chinese-Japanese-Korean-Vietnamese) 라이브러리를 개발을 하는데 많은 도움이 되었습니다.

내년도에 더욱 더 성장을 하여 제가 목표로 하는 한자 정보 라이브러리(Python, Perl, Java, Ruby, etc) 개발 및 한자관련 홈페이지가 나올수 있도록 노력을 하겠습니다.


추가내용(2016.12.18)

GNOME한국(GNOME Korea)에서 번역가로 활동하시는 조성호(Seong-ho Cho)  한국 그놈 커뮤니티 블로그에 제가 GNOME gucharmap의 기능추가 (한글 및 베트남어 발음 지원)에 대한 내용(새로운 그놈 커미터 환영)을 작성하셨습니다. 


앞으로 GNOME Korea의 발전에 많은 노력을 하겠습니다.


ps. 저에 많은 영향을 주신 한국 펄 커뮤니티(#perl-kr)에 감사함을 전합니다. 펄 커뮤니티 덕에 유니코드와 한자처리에 지속적인 관심을 가지게 되었습니다.

ps2. 2010년도쯤? 모 회사에서 CJKV Information Processing책을 보여주셨던 GNOME contributor 차영호(가나초코,ganachoco)님께 감사함을 전합니다. 

ps3. CJKV Information Processing 책을 주신 @y0ngbin 님께도 감사함을 전합니다

ps4. 2013년도에 일찍 하늘나라로 간 Perl Contributor @am0c군께 부채의식을 항상 느끼고 있습니다. (Obituary of Perl release note 5.18.0-RC4)

@am0c군이 펄 크리스마스 달력 2012년 12월 14일자 에  "열네번째 날: 동아시아 언어의 로마자 변환에 도전해보자!"를 편집을 했었습니다.

이후 잠수를 타다 2016년 펄 크리스마스 달력에 2개의 글을 기고 했습니다.

ps5. 박현우 @lqez님께서 한국 파이썬 사용자 모임 2014년 12월 세미나에서 발표한 'Dive into OpenSource'  발표 슬라이드를 보면 정말 공감할 내용이 많이 있어요!

ps6. 오픈소스 프로젝트를 통해 어쩌면 더 나은 개발자가 되고, 더 많은 사람을 만나, 더 나은 인격체가 될지도 모른다고 하던데, 노력을 해야겠죠?

이희승(Trustin Lee, Author of Netty) - 새 오픈 소스 프로젝트 시작하기


----

English post. 


I add GNOME gucharmap's new features.

1. add Korean Alphabet(Hangul, Hangeul, 한글)

2. add Vietnamese Pronunciation


gucharmap based on UNICODE Consortium's specification.

I read Unicode Consortium's Unihan Databases file. (Unihan_readings.txt)

Unihan_readings.txt file includes CJK Ideography's english meanings and pronunciations (such as Chinese, Japanese, Korean, Vietnamese, etc.  East Asian cultural sphere's languages)

 I found lack of Korean Hangul and Vietnamese pronunciation at GNOME gucharmap.

so, I add Korean Hangul, Vietnamese pronunciation in GNOME gucharmap.


Unihan_Readings.txt에 있는 한국어 발음, 베트남어 발음 추가

Copyright ⓒ 2016 DaeHyun Sung


It's amazing. I add my name "Copyright ⓒ 2016 DaeHyun Sung" in GNOME gucharmap.


I'm Open Source Developer and gucharmap contributor! Also GNOME Developer!


The following is My Gucharmap source code commit log.

Unihan_Readings.txt included in Unihan.zip defines the notation and pronunciation of East Asian languages such as Chinese, Japanese, Korean, Vietnamese.
Unihan_Readings.txt’ has some properties.
Such as
kCantonese, kDefinition, kHangul, kHanyuPinlu, kHanyuPinyin, kJapaneseKun, kJapaneseOn, kKorean, kMandarin, kTang, kVietnamese, kXHC1983.

I add Unihan_Readings.txt defined kVietnamese property and kHangul property in this program.

Unihan_Readings.txt’s property kVietnamese describe Vietnamese character(Quốc ngữ) pronunciation. this property defined Unihan version 3.1.1. Now Unihan database version is 9.0.0.
Unihan_Readings.txt’s property kHangul describe Korean character(한글,Hangul) describe Korean pronunciation for this character in hangul.(Hangul is Korean Alphabet) this property defined Unihan version 5.0. Now Unihan database version is 9.0.0.

  1. Why do I add kHangul(Korean Alphabet[Hangul]) property?
    Because, Unicode Consortium presented kHangul property on Unihan version 5.
    Unicode Unihan database document ( http://www.unicode.org/reports/tr38/ ) describe “kKorean” property.
    “kKorean property’s description”
    The Korean pronunciation(s) of this character, using the Yale romanization system. (See http://en.wikipedia.org/wiki/Korean_romanization for a discussion of the various Korean romanization systems.)
    Use of the kKorean field is not recommended. The kHangul field, which is aligned to the KS X 1001 and KS X 1002 standards, is recommended to be used instead.

Now, Revised Romanization of Korean (RR, also called South Korean or Ministry of Culture (MC) 2000) is the most commonly used and widely accepted system of romanization for Korean instead of "Yale romanization system"[kKorean property] in Unihan database.

So, I add kHangul property and add “Korean Alphabet(Hangul)” notation.

  1. Why do i add kVietnamese(Vietnamese pronunciation[Quốc ngữ]) property?
    “Unicode Consortium’s version9 guide chapter18. East Asia shows these paragraph.
    In Vietnam, a set of native ideographs was created for Vietnamese based on the same principles used to create new ideographs for Chinese. These Vietnamese ideographs were used through the beginning of the 20th century and are occasionally used in more recent signage and other limited contexts.

Although the term “CJK”—Chinese, Japanese, and Korean—is used throughout this text to describe the languages that currently use Han ideographic characters, it should be noted that earlier Vietnamese writing systems were based on Han ideographs. Consequently, the term “CJKV” would be more accurate in a historical sense. Han ideographs are still used for historical, religious, and pedagogical purposes in Vietnam. “

So I read Unihan documentation specification, then support Vietnamese language.



Subject: [gucharmap] Created tag 9.0.2 

http://osdir.com/ml/commits.gnome/2016-11/msg01983.html



ps1. Now, I summited KDE kCharSelect's new features. but rejected.

because, kCharselect Committer says "this will break distributions that update the data file separately from the library code." 

Maybe KDE kCharSelect will change some features. 

KDE Committer says "If you have additional ideas which other k* fields from Unihan.txt for CJK languages are useful to be included in KCharSelect, your input is welcome either on kde-utils-devel list, or on kde-frameworks list." to me.

If KDE kCharSelect's new version released, I'll share some East-Asian(CJKV) information processing for committers.





Buy me a coffeeBuy me a coffee

2016년 2월 12일 금요일 및 2016년 2월 13일 토요일 작업내용 정리




1. cjkv.io 도메인을 구입

2. 클라우드 서비스인 conoha  설정

일본 GMO사에서 운영하는 클라우드 서비스인 conoha를 사용하게되었습니다.

採用目的 by GMOペパボ

(日本GMO는 네트워크 회사이면서, YAPC::Asia Tokyo 2015에 갔을때 위의 광고를 통해 알게 된 회사입니다. 이 회사가 conoha 클라우드를 운영하고 있는 회사입니다)


일본에서 시작한 클라우드 플랫폼 "ConoHa" (日本発のクラウドプラットフォーム「ConoHa」)

트래픽 무제한 (일본 VPN을 사용하려고, 추가로 일본쪽 서비스를 결제, 이용하려니 conoha에서 VPN을 사용해야겠다는 생각을 했음), 한국어 대응에도 마음에 들고, 국내 클라우드 서비스보단 속도가 느리지만 외국의 여러 클라우드서비스보다 속도도 빠른편


3. conoha에서 서버 설정

nginx설치, java, python2, python3 설치

VPN설정 그리고 개인 블로그를 설치형으로 설정하고, conoha로 이전할 예정. (conoha가 트래픽 무제한이기 때문에 개인 블로그 운영을 서비스형의 티스토리[Tistory]에서 conoha에서 설치하여 운영하는 설치형 블로그로 떠나갈까 고민됨.)


4. 일본 GMO에서 운영하는 conoha는 아래의 귀여운 캐릭터 美雲このは와 美雲あんず 2개의 캐릭터를 이용하여 클라우드 서비스 홍보를 하니 참 재미있는 회사 같다는 생각을 함.

ConoHa by GMO CM


Buy me a coffeeBuy me a coffee

+ Recent posts