2017년 12월 8일 금요일

Start Emacs on Windows

회사에 다니는 동안 업무에 대한 기록은 OneNote를 이용했으나, 회사 DRM 시스템에 의한 백업 과정에서의 충돌이 빈번히 일어나고 3년 가까이 작성하면서 꽤 양이 많아져서 안 그래도 무거운 원노트가 점점 부담스러웠다.

OneNote를 대체할 프로그램을 찾았으나 아래 조건을 충족하는 항목들이 마땅치 않았다.
  • 가벼울 것
  • 강력한 검색 기능
  • 백업
  • Line folding
  • Todo 관리 
이 모든 걸 Emacs ORG 모드가 해결해줬다.

우선 OneNote 프로그램 자체도 무거웠고, 검색 기능을 제대로 활용을 못 한 것이 문제인지 검색 결과가 만족스럽지 않고 느렸다. OneNote 캐시된 파일이 DRM 때문에 문제가 생길 때마다, 백업 파일을 불러와서 새로 파일을 만드는 쓸데없는 작업들을 했다. 이마저도 공들여서 적었으나 백업 파일에는 누락된 부분도 있어서 그럴 때 마다 다른 프로그램으로 갈아타야지 생각했었다.

지하철을 타고 판교를 지나고 있는데 마침 옆자리에 앉은 분이 노트북을 꺼내 문서 편집을 하고 있었다. 레이아웃이 특이하길래 슬쩍 보았는데, 자유롭게 윈도우를 분할해가며 Line folding
되고, Todo 까지 관리하고 있는 모습이 보여 무슨 에디터냐고 물었는데 그 때 들었던 것이 Emacs 였다.

Vi vs Emacs 에디터 전쟁에 대해서는 알고 있었고, Vi 로도 얼추 가능은 할 것 같기도 했지만 익숙한 vi 말고 괜히 Emacs를 써보고 싶어 회사 리눅스 PC에 Emacs 셋팅 해놓고 집에 와서 Windows에도 설치해보았다.

이틀 정도 써보니 처음에는 손에 익질 않아서 그냥 때려치울까 했는데, 이제 조금 익숙해져서 그런지 점점 맘에 든다. Emacs에 빠지면 답도 없다는데...

* 윈도우에 Emacs 설치
1 ~ 3, 5 스킵 가능

1. python 2.7 설치 및 PATH 등록
- cask 설치하려고 깔았으나, cask 설치에 실패

2. git 설치 및 PATH 등록
- 스킵 가능.

3. cURL 설치
- cask 설치를 위해 curl을 설치했으나, cask 설치에 실패. 이 부분은 스킵 하셔도 됩니다.
- https://github.com/vszakats/harbour-deps
- http://ilhee.tistory.com/25

4. Emacs 설치
- https://www.gnu.org/software/emacs/download.html

5. D2Coding 설치
- https://github.com/naver/d2codingfont

6. .emacs 설정
- HOME 환경변수 없는 경우 C:\Users\유저명\AppData\Roaming\.emacs

7. recentf 설치
- 최근 파일, C-x C-r

8. which-key 설치
- 단축키 cheat sheet

9. Cask 설치 실패 (해결법 알고 계시면 공유해주시면 감사드리겠습니다.)
C:\Users\NAM>Contacting host: melpa.org:443
gnutls.c: [1] (Emacs) GnuTLS library not found
Opening TLS connection to `melpa.org'...
Opening TLS connection with `gnutls-cli --x509cafile nil -p 443 melpa.org'...
Opening TLS connection with `gnutls-cli --x509cafile nil -p 443 melpa.org'...failed
Opening TLS connection with `gnutls-cli --x509cafile nil -p 443 melpa.org --protocols ssl3'...
Opening TLS connection with `gnutls-cli --x509cafile nil -p 443 melpa.org --protocols ssl3'...failed
Opening TLS connection with `openssl s_client -connect melpa.org:443 -no_ssl2 -ign_eof'...
Opening TLS connection with `openssl s_client -connect melpa.org:443 -no_ssl2 -ign_eof'...failed
Opening TLS connection to `melpa.org'...failed
Failed to download `melpa' archive.
Contacting host: elpa.gnu.org:443
Opening TLS connection to `elpa.gnu.org'...
Opening TLS connection with `gnutls-cli --x509cafile nil -p 443 elpa.gnu.org'...
Opening TLS connection with `gnutls-cli --x509cafile nil -p 443 elpa.gnu.org'...failed
Opening TLS connection with `gnutls-cli --x509cafile nil -p 443 elpa.gnu.org --protocols ssl3'...
Opening TLS connection with `gnutls-cli --x509cafile nil -p 443 elpa.gnu.org --protocols ssl3'...failed
Opening TLS connection with `openssl s_client -connect elpa.gnu.org:443 -no_ssl2 -ign_eof'...
Opening TLS connection with `openssl s_client -connect elpa.gnu.org:443 -no_ssl2 -ign_eof'...failed
Opening TLS connection to `elpa.gnu.org'...failed
Package refresh done
Failed to download `gnu' archive.
Setting `package-selected-packages' temporarily since "emacs -q" would overwrite customizations
Setting `package-selected-packages' temporarily since "emacs -q" would overwrite customizations
Package `s-' is unavailable

10. 참고
- https://www.gnu.org/software/emacs/manual/html_mono/efaq-w32.html#Location-of-init-file
- http://ders45.blogspot.kr/2016/04/emacs.html
- http://devnauts.tistory.com/51
- http://devnauts.tistory.com/55
- http://ehneilsen.net/notebook/orgExamples/org-examples.html
- http://orgmode.org/worg/org-tutorials/org4beginners.html

11. .emacs 설정

2015년 1월 18일 일요일

How to compile DCSS(Dungeon Crawl Stone Soup) on Ubuntu 14.04

This article describes how to get source codes of DCSS, to compile.


DCSS(Dungeon Crawl Stone Soup) is a one of opensource rouge-like games. The aim of this game is to go downstairs to exit the dungeon. Like other rouge-like games, When your character dies, you cannot restore him. You can restore him with copying save files manually. Unless you backup your save files, you cannot restore the character.

<non-graphical console version of DCSS>
<graphical Tiles of DCSS>

You can download DCSS from download page of official DCSS site.

In this artice, we will get source codes and compile.

All below informations are from quickstart.txt in crawl git repository

1. Getting the source

 $ git clone git://gitorious.org/crawl/crawl.git

 “git clone” clones the crawl-ref git repository to your computer. When it’s done, you’ll have a full local copy of Stone Soup’s entire repository with all its history. In particular, you’ll be able to access any of the previous release branches by typing, e.g.

 $ git checkout -b stone_soup-0.15 origin/stone_soup-0.15

Now the branch is tracked on your system, the necessary command
becomes much shorter:

 $ git checkout stone_soup-0.15

 To return to the main development branch (“trunk” or “master”), type:

 $ git checkout master

You can have a look at the commit history of the currently active branch with

 $ git log

The source code also includes a number of “submodules” like e.g. Lua or SDL
that have to initialized separately. To do this, type:

 $ git submodule update --init

2. Prerequisites for compile

You need to install some packages.
$ apt-get install build-essential libncursesw5-dev bison flex liblua5.1-0-dev \
libsqlite3-dev libz-dev pkg-config libsdl2-image-dev libsdl2-mixer-dev \
libsdl2-dev libfreetype6-dev libpng-dev ttf-dejavu-core

  • Prerequisites (Debian):
  • On Debian-based systems (Ubuntu, Mint, ...), you can get all dependencies by
  • typing the following as root/sudo:
  •  
  • apt-get install build-essential libncursesw5-dev bison flex liblua5.1-0-dev \
  • libsqlite3-dev libz-dev pkg-config libsdl2-image-dev libsdl2-mixer-dev \
  • libsdl2-dev libfreetype6-dev libpng-dev ttf-dejavu-core
  •  
  • (the last five are needed only for tiles builds). This is the complete set,
  • with it you don't have a need for the bundled "contribs".
  • 3. Compile

    go to crawl-ref/source folder.

    below command is for non-graphical version.
    $ make

    for graphical version
    $ make TILES=y

    You can run with 'crawl' file in the source folder

    2014년 11월 27일 목요일

    리눅스 설치 후 초기 설정

    SSD 128GB 를 하나 구입하면서, 어느 용도로 사용할까 하다가 Ubuntu 14.10을 설치했다.
    초기 설치 후에 했던 일들이다. 차후에 재설치 시 참고하기 위해 작성!한글 키 입력은 별도의 설정을 해주지 않았는데도 잘 동작한다.

    1. 저장소 설정

        /etc/apt/sources.list에 KAIST mirro ftp로 설정

    2. SSD 최적화 설정

        http://ioriy2k.pe.kr/archives/7062 참고
        /etc/fstab
        위 블로그를 참고하여 SSD partition에 대한 Mount Option 조절
        
        TRIM 설정 - SSD 수명 연장을 위하여 가능한 Write 동작을 줄이기 위해 OS에 의해 삭제 명령이
        실행된 Data Block을 실제로 삭제하지는 않고 SSD에 알리는 기능.
        /etc/cron.weekly/fstrim
        TRIM 명령어를 cron의 weekly 실행 명령어에 등록해둔다.

        /etc/rc.local
        I/O Scheduler NOOP으로 설정(특별한 스케쥴링 없이 I/O 요청이 들어오는 대로 동작 수행)

    3. vim, vundle, NERDTree 설치

        https://blog.ansuchan.com/install-vundle-and-nerdtree/ 참고
        Vundle은 vim 플러그인 관리를 쉽게 해주는 모듈이다.
        NERDTree는 vi에 탐색기를 달아주는 플러그인.
       

    4. vimrc 설정, Bash prompt format 변경

        ~/.vimrc 설정


        ~/.bashrc 에 prompt format 정의
        export PS1="\e[1;37m[\e[36m\D{%Y-%m-%d %H:%M:%S}\e[37m] \
        [\e[32m\u\e[31m@\e[33m\h\e[37m] \e[34m\w\e[m\n\$ "
       

    5. java, nodejs 설치

        gcc, python은 있는데, 없어서 설치

    6. Unity Tweak Tool

        우분투 소프트웨어 센터에서 Unity Tweak Tool 설치
        workspace switcher 켬
        Fonts 설정
        - Default font : 나눔바른고딕 11
        - Monospace font : 나눔고딕코딩 13
        - Document font : 나눔바른고딕 11
        - Window title font : 나눔바른고딕Bold 11

    7. GRUB 설정 - Window 멀티부팅

        sudo update-grub

    2014년 8월 22일 금요일

    입사 후 경험한 것들

    부서에 배치 된 후 접하게 된 것들은 아래와 같다.

    Linux
    Perforce
    QuickBuild
    Jenkins
    Vagrant
    Docker
    Odin
    ReviewBoard
    Protex
    Shell Script
    Python
    Gradle
    Groovy
    Webkit
    Chromium

    리눅스를 임베디드 수업 때 몇 번 사용했던 경험 외에는 정말 기초적인 명령어 밖에 몰랐으나, 이제는 아주 초보적인 수준은 넘은 것 같다. 왜 개발에 리눅스가 편리한지 설명할 수는 없지만 새삼 느끼게 된다. 리눅스를 사용하면서 익숙했던 윈도우의 GUI가 이제는 불편해지면서, CUI 환경과 vi editor의 편리함을 느끼게 됐다. 마우스를 사용하기 위해 키보드에서 손을 떼야하는 것이 줄어들었다는 것이 가장 큰 차이인데, 이것이 정말 큰 차이라고 생각한다. 큰 프로젝트를 관리하는 것이 아니라 파일 몇 개를 수정하면서 가볍고, 키보드만으로 모든 것을 해결하는 vi editor가 처음에는 익숙하지 않아 불편했지만 이제는 다른 IDE 보다 신속하고, 효율적으로 작업할 수 있어 정말 좋다.

    버전 관리 시스템의 경우 대학교 4학년 2학기에 동아리 세미나로 git를 준비했었는데, 회사에 와서는 분산형 버전 관리가 아닌 중앙집중방식의 Perforce를 사용하게 됐다. 처음에는 git에 대해 알고 있던 얄팍한 지식 때문에 조금 헷갈린 점도 많았다. 그리고 막연히 분산(Distributed)이라는 단어가 무조건 더 좋다는 개인적인 선입견도 있었기에 Perforce를 사용하는 것이 많이 불편했다. 지금은 중앙집중이든, 분산형이든 장단점이 있고 버전 관리 시스템이라는 것 자체가 대단한 것임을 느끼며, 편리한 것임을 인지하게 됐고 어느 정도 익숙해졌다.

    ReviewBoard를 통해서는 개발자간의 code review를 통해 프로젝트의 source를 양질로 관리하고, 개발자간 의사소통을 하는 방법을 어렴풋이 익힐 수 있었다.

    QuickBuild를 통해 Perforce의 shelve 기능을 이용하여 local에서 build하는 것이 아니라 좋은 하드웨어를 가진 서버에서 build를 시키고, submit 전에 미리 build test를 할 수 있게 됐다. 그리고 Jenkins라는 CI(Continuous Integration) tool을 이용하면서, 프로젝트를 지속적으로 자동으로 build하며 안정성을 높일 수 있는 지속적 통합(?) 툴을 알게 됐다. 직접 내 컴퓨터를 jenkins의 node로 설정하고, job을 생성하여 build를 해보기도하고, 이 가운데 vagrant를 통해 가상 머신을 node로 이용해보기도 하고, docker를 이용해보기도 했다.

    Shell script, python을 접하면서 기존의 compiler를 이용한 언어가 아닌 interpreter를 이용한 언어를 이용하게 됐는데, 내가 알고 있던 c, c++, java와는 전혀 다른 매력을 발견할 수 있었다. 손쉽게, 즉각적으로 debugging을 해볼 수 있고, 특히나 반복적인 작업의 자동화 tool을 제작하는 것에는 필수적인 것이었다. 내가 좀 더 학교를 다니는 동안 컴덕후였더라면 이런 강력한 기능들을 미리 체험하고 좀 더 성장하지 않았을까하는 아쉬움이 있다.

    그리고 Gradle build system을 이용하면서 단 한 번의 build를 통해 해상도, 모델별로 여러 apk를 추출하고, task를 통해 build를 관리하는 방법도 맛볼 수 있었고, gradle script 수정을 하면서 Groovy도 살짝 맛볼 수 있었다. 여전히 Gradle에서 task의 initialization, configuration, execution 단계와 dependencies를 설정하는 것은 굉장히 까다롭고 짜증난다. 망할 up-to-date.

    chromium과 webkit 이는, 앞으로 계속 공부해야 할 것들이다.

    참 갈 길이 멀고, 모르는 것이 너무 많다. 그래서 막막하고 평생해도 끝나지 않는 학습 요구에 부담스럽기도 하지만, 그래서 좋다. 공부할 것이 끝이 없다.