addr2line

삽질 기록 2018.12.22 12:58 Posted by 아는 개발자 아는 개발자

개발하다보면 에러가 발생한 물리 주소만 떡하니 알려주고 바이너리의 어떤 함수에서 죽었는지는 알려주지 않는 로그 메시지를 보게될 때가 있다. 이런 경우에는 addr2line 커맨드를 이용해 어떤 파일 몇번째 라인에서 에러가 발생했는지 확인 할 수 있다.


아래의 예제 코드를 통해 addr2line의 사용법을 익혀보자.


void func(void) {
}

int main() {
    printf("func:addr %p\n", func);
}


위 코드를 gcc에 -g 옵션을 주고 컴파일해서 실행해보면 특정 숫자 값을 출력하게 되는데 이 값은 func함수의 물리 주소 값이다. 이 값을 addr2line에 넣어서 실행해보면 func함수가 어떤 파일 몇번째 라인에 불렸는지 확인 할 수 있다. -e 옵션은 디버깅할 바이너리를 지정하는 값이고 마지막에 붙은 숫자는 주소 값이다.


gcc로 pthread API 컴파일하기

삽질 기록 2018.10.30 21:59 Posted by 아는 개발자 아는 개발자

왠만한 C 코드들은 'gcc 파일명' 명령어로 빌드가 가능한데 코드 안에서 pthread API를 사용하고 컴파일을 하면 아래와 같은 에러 메시지가 나온다.


kwony@kwony:~$ gcc thread.c


thread.c:(.text+0x79): undefined reference to `pthread_create'

thread.c:(.text+0xa9): undefined reference to `pthread_join'

collect2: error: ld returned 1 exit status


gcc 컴파일 스크립트에 디폴트로 pthread 라이브러리가 포함되지 않아서 발생하는 에러다. `-lpthread` 를 옵션으로 줘서 pthread 라이브러리를 포함시켜 빌드하면 해결 할 수 있다.


gcc thread.c -lpthread


아래 코드로 테스트를 해봤다.

#include <pthread.h>
#include <stdlib.h>
void *test(void *data)
{
}
int main()
{
    int a = 100;
    pthread_t thread_t;
    int status;

    if (pthread_create(&thread_t, NULL, test, (void *)&a) < 0)
    {
        perror("thread create error:");
        exit(0);
    }
    pthread_join(thread_t, (void **)&status);
    printf("Thread End %d\n", status);
    return 1;
}



  1. makerj (ohenwkgdj@gmail.com) 2019.08.13 00:26  댓글주소  수정/삭제  댓글쓰기

    gcc thread.c -lpthread 가 아니라 gcc -pthread thread.c 가 맞습니다.
    전자는 단순히 함수를 연결해 주는 것 뿐이지만, 후자는 스레드 모델을 pthread로 하겠다는 명확한 의미가 포함됩니다. 해당 코드를 리눅스에서만 사용한다면 차이가 없겠지만, 다른 OS에서도 사용하게 된다면 반드시 필요한 설정입니다.

Github 페이지를 이용해서 이력서 만들기

삽질 기록 2018.09.27 21:31 Posted by 아는 개발자 아는 개발자

이력서를 웹사이트에 공개하는 방법으로 LinkedIn을 사용하는 것이 가장 간단하고 대중적이지만 포맷이 정해져 있어 심심하고 다른 사람들과 차별화를 줄 포인트가 없다는 것이 단점이다. 그래서 일부 개발자들은 자신의 이력서를 HTML 형태로 이쁘게 디자인하고 호스팅을 해서 다른 사용자가 쉽게 볼 수 있게끔 만든다.


링크드인 보다 덜 식상한 것 같다


그런데 이력서 한 장 띄우자고 유료 웹 호스팅 서비스를 이용하는 건 부담스러운 일이라 개발자들은 Github에서 저장소 별로 제공하는 페이지 기능을 활용해서 이력서를 만든다. 깃허브 페이지 기능이 궁금하신 분들은 이 사이트에서 친절히 설명하는 영상이 있으니 참고하길 바란다. 자세한 사용 방법은 알려주지 않는 것 같다.


사실 페이지 기능을 사용하는 법을 몰라도 이미 개발자들이 resume-template을 많이 만들어 둬서 가져다가 쓰면 간편하다 나는 https://github.com/jglovier/resume-template  template을 사용하고 있는데 템플릿이 이쁘고 수정하는 방법도 쉬워 잘 사용하고 있다. 이번 포스트에서는 이 템플릿을 이용하는 방법을 간단히 다룬다.


0. Github 계정 만들기


계정이 없다면 https://github.com/ 사이트로 가서 계정을 하나 만든다. 이미 있으면 패쓰 


1. Github resume template 저장소 fork하기


https://github.com/jglovier/resume-template 저장소를 내 저장소로 Fork한다. Fork는 원격 저장소를 미러링한 형태로 내 저장소에 복사하는 기능인데 원리는 몰라도 상관 없다. 아래 그림의 맨 오른쪽 버튼을 누르자.



2. 저장소 이름 바꾸기


Fork가 완료되면 내 저장소에 resume-template이라고 저장소가 생긴다. 저장소 이름을 토대로 이력서 웹페이지 주소가 설정되니 괜찮은 이름으로 바꾸자. resume-template 버튼을 클릭하고 Setting Tab을 누르면 이름을 수정 할 수 있다. 




3. 내 페이지가 보이는지 테스트


변경한 이름을 토대로 저장소의 웹페이지에 접속해보자. { 사용자 ID }.github.io/{ 변경한 저장소 이름 } 으로 접속하면 아래 그림과 같은 페이지가 나온다. 


Github 404 접속 에러 페이지가 나오는 경우도 있는데 이런 경우에는 10~15분 정도 후에 다시 접속하면 된다. 적용되는데 시간이 어느정도 소요 되는 것 같다.




4. 프로필 정보 업데이트하기


Lisa Simpson으로 되어 있는 현재 페이지를 내 프로필에 맞춰서 바꾸자. _config.yml 파일과 _data/ 폴더 안의 내용들을 바꾸면 현재 포맷을 유지한 상태로 쉽게 업데이트 할 수 있다. 코드가 직관적이니까 영어만 사용할 줄 알면 부담 없이 수정이 가능하다.


ruby와 jekyll에 능숙한 사람들은 포맷을 간단히 수정해봐도 좋을 것 같다. 나는 잘 모르겠다오. 


5. 로컬 서버에서 확인


수정한 정보를 서버에 올리기 전에 아래 명령어를 이용해서 로컬 서버에서 확인 해보고 가자. 


0. cd "이력서 저장소 위치"
1. bundle install // 처음에만
2. bundle exec jekyll serve


첫번째 명령어는 저장소에서 들고있는 ruby 패키지들을 설치하는 작업이니 딱 한번만 실행하면 된다. 두번째 명령어는 현 저장소에 있는 jekyll 프레임워크(이렇게 부르는게 맞나?)를 실행하는 명령어다. 실행하고 나서 크롬이나 파이어폭스를 열고 주소 창에 localhost:4000을 입력하자. 코드에 문제가 없으면 아래처럼 이력서 페이지가 나온다.




* 가끔 bundle install 하다가 1.9.21 버전을 설치 할 수 없다는 에러가 뜨는데 이때는 이 패키지들을 설치하면 된다.

sudo apt-get install ruby-dev
sudo apt install libffi-dev


6. 수정된 정보 업데이트


로컬 서버에서 문제가 없으면 수정한 코드를 저장소에 커밋한다. 1~2분 정도 지나야 커밋한 내용이 반영되니 바로 업데이트가 되지 않았다고 초조해하지 마시길. 


커밋하는 방법이 모르시는 분은 간단히 아래의 코드를 입력해서 업데이트 할 수 있다.


git add -A
git commit -m "Update resume info"
git push origin gh-pages


conda tensorflow 설치 및 jupyter notebook 연결

삽질 기록 2018.08.03 23:20 Posted by 아는 개발자 아는 개발자

Conda 환경에서 tensorflow를 설치하는 방법


0. Prerequsite


- Anaconda를 설치한다.

- GPU를 사용할 경우 tensorflow를 사용할 수 있도록 CUDA, cuDNN 라이브러리를 설치한다.


1. tensorflow 가상 환경 생성


tensorflow를 사용하는 가상 환경을 하나 생성한다. 별도로 설정하고 싶은 환경이 있으면 생략하고 아니면 만들자.

kwony@kwony:~$ conda create -n tensorflow pip \ 
python={ python 버전 입력 ex) 2.7, 3.4

2. 가상환경 활성화


1에서 만들어둔 가상 환경을 활성화한다. activate 명령어가 안먹히는 경우는 anaconda의 바이너리가 export가 제대로 안된것이니 확인해보도록 하자.

kwony@kwony:~$ conda activate tensorflow
(tensorflow)$  # tensorflow로 명령어 프롬프트가 변형된다

3. tensorflow 설치


활성화된 명령어 프롬프트에서 tensorflow를 설치한다. tensorflow 공식 홈페이지에서 설치하려는 tensorflow의 종류와 파이선 버전에 해당하는 저장소를 입력하도록 하자.

(tensorflow) kwony@kwony:~$ pip install --ignore-installed \
 --upgrade { URL }

4. jupyter 설치


원래 아나콘다를 설치할 때 기본으로 포함된 jupyter-notebook에서 tensorflow를 쓰려고 하면 없는 모듈이라고 나온다. 방금전에 설치한 tensorflow는 현재 사용중인 가상 환경에만 적용되기 때문이다. 현재 가상 환경에서 사용하는 jupyter notebook을 설치하면 방금 전에 설치한 tensorflow를 사용 할 수 있다.

(tensorflow) kwony@kwony:~$ pip install jupyter

5. jupyter notebook 실행 후 테스트


jupyter 노트북으로 tensorflow 모듈을 사용해보면 문제없이 동작하는 것을 확인 할 수 있다.

(tensorflow) kwony@kwony:~$ jupyter-notebook 



git rebase 를 이용해 중간 커밋 수정하기

삽질 기록 2018.07.25 21:54 Posted by 아는 개발자 아는 개발자

최상위 커밋은 git commit --amend로 수정이 가능한데 중간에 있는 커밋은 수정하기가 참 난감하다. 가장 간단하면서 무식한 방법은 git format-patch로 수정하려는 커밋 전까지 패치 파일을 만들어둔 후 reset으로 수정하려는 커밋까지 쌓인 커밋들을 모두 지운 뒤 git commit --amend로 수정한 다음, reset 하기 전에 패치로 만들어둔 커밋을 다시 적용하는 방법이 있다. 이 방법은 매우 번거롭고 복잡하며 이미 Pull Request가 진행중인 브랜치에서는 적용할 수 없다는 문제가 있다.


이런 경우에는 git rebase의 interactive 옵션을 이용하면 Pull Request가 진행중인 브랜치의 중간 커밋을 수정 할 수 있다. 사용 방법은 간단하다.



위 그림에서 맨 아래 "appear action bar and use customized one in user activity"라는 커밋만 수정해보고 싶다고 해보자. 그러면 내가 수정하려는 커밋의 번호를 복사한 후 command에 아래와 같이 입력하자


// git rebase -i {커밋 id}^
git rebase -i 1372d858b7d84708f54da356035cec35a4375f07^


실행하고 나면 nano 에디터가 열리면서 아래와 같은 메시지가 나온다.


pick 1372d85 appear actionbar and use customized one in user activity
pick 0ba4172 cut side space in actionbar
pick 64d006d Fix bug: Change error message on dialog user name input
pick 5be8b91 Replace textview to imageview in sliding tab layout
pick c6d7a5e Add postfix string in actionbar title to show detailed information
pick 624baa3 upgrade version to 1.20

# Rebase 382448a..624baa3 onto 382448a (6 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit


메시지에는 수정하려는 커밋부터 최신 커밋까지 "명령" "커밋 번호" "커밋 메시지"의 형태로 쭉 나열 돼어 있다. 현재 상태는 어떤 커밋에 무슨 작업을 할 것인지 설정 할 수 있는 단계다. 아래 Commands의 설명이 나와 있는 것 처럼 'pick'은 commit을 그대로 사용하는 것이고 'edit'은 커밋을 사용하면서 수정하기 위해 멈춘다는 뜻이다. 기본으로는 모두 변경하지 않음인 'pick' 설정이 돼있다.


개발자는 "명령"에 해당하는 문자열 값을 바꿔서 해당 커밋에서 원하는 작업을 수행 할 수 있다.  우리는 가장 처음에 있는 커밋(1372d85)을 수정해야하니 이 문장에 pick을 edit으로 변경하고 빠져나오자. 그럼 아래와 같은 메시지가 뜬다.



해당 커밋에 멈춰 있으니 git commit --amend로 수정을 한 다음에 git rebase --continue를 하라는 뜻이다. git rebase --continue는 현재 커밋에 대한 작업을 수행한 후 다음 커밋의 작업으로 넘어가는 명령어다. 테스트를 위해 README.md 파일만 수정하고 넘어가본다. 그러면 숫자들이 빠르게 움직이고 나서 아래와 같은 메시지가 나온다.



반영이 모두 완료돼었다는 뜻이다. 그런데 이런 완료 메시지가 나오지 않고 충돌이 떴다는 메시지가 나오는 경우도 있다. 중간 커밋의 수정사항 때문에 기존 커밋을 적용하지 못해 충돌이 발생하는 경우다. 이런 경우에는 중간 커밋의 수정사항을 따를 수 있도록 기존 커밋도 바꿔주도록 한다.

리눅스 디스크, 폴더 용량 확인하기

삽질 기록 2018.05.26 14:29 Posted by 아는 개발자 아는 개발자

매번 구글창에 디스크/파일 용량을 확인하는 단축키를 찾기 번거로워서 이번 포스트로 정리하고 머릿속에 기억해두려고 한다.


1. 디스크 용량 확인, df


시스템상에서 FILE이 있는 곳의 파일시스템에 대한 정보를 보여준다. 즉 시스템에 마운트되어 있는 모든 것들에 대한 사용 정보를 출력한다는 뜻.

그냥 df를 검색하면 아래처럼 나온다. 여기서 1K-blocks는 파일시스템의 전체 용량, Used는 사용중인 크기, Available은 사용가능한 메모리의 크기를 의미한다.



그런데 위 그림은 바이트 단위라서 보기가 어렵다. -h 옵션을 넣어서 human readable하게 변환하자. 훨씬 직관적으로 보인다.



df --help 로 검색하면 다양한 옵션을 발견할 수 있으니 이것도 적극적으로 활용하자. 디스크 용량 검색하는 것은 이걸로 끝. 다른 것들도 있는데 하나만 정확하게 기억하는게 중요할 것 같다.


2. 파일, 폴더내 총용량 확인, du


파일 크기같은 경우 ls를 통해서 용량 정보도 나오고 여기에 -h 옵션만 넣으면 사람이 읽을 수 있는 용량 크기로 나온다. 그런데 폴더내 총용량을 확인할 때는 폴더 디렉토리 자체의 크기만 볼 수 있어서 사용할 수가 없다. 이럴때는 du라는 명령어를 사용하면 편하다. 


du 명령어를 이용해 Pictures 폴더를 검색해봤다.



앞의 416 은 Pictures 폴더내에 있는 파일들의 총 용량 크기다. 단위가 없어서 읽기 불편하니 -h 옵션을 붙여 human readable하게 변형하자. 

이것도 df처럼 용량이 커지면 M, G 단위로 변환해준다.



폴더 내의 파일들이 궁금하면 -a 옵션을 붙이면 된다. 반대로 출력하고 싶지 않다면 -s 옵션을 붙여서 제거한다.


    


Ubuntu 16.04에서 Tensorflow GPU 지원 버전 설치하기

삽질 기록 2018.05.01 10:13 Posted by 아는 개발자 아는 개발자

Ubuntu 16.04에서 GPU 가속화를 지원하는 Tensorflow를 설치하는 방법

이 포스트는 Tensorflow 공식 가이드 페이지를 읽고 글쓴이의 컴퓨터에 설치한 과정을 정리한 것이다. PC 환경에 따라 차이가 있을 수 있으므로 포스트를 읽고 설치하기 전에 개인 PC환경이 글쓴이와 어떤점이 차이가 나는지 먼저 확인해두길 바란다. 똑같은 instruction을 사용해도 어떤 PC는 되고 어떤 거는 안되는 경우가 많다. 글쓴이의 PC 환경은 다음과 같다.

CPU: Intel(R) Core(TM) i5-6600 CPU @ 3.30GHz, Quad Core

GPU: GEFORCE GTX1060 (그래픽 드라이버 설치 완료)

RAM: 8GB

Kernel: 4.4.0-122-generic


* 혹시 우분투 커널 버전을 업데이트 했다면 중요한 자료들을 미리 백업해두길 바란다. 글쓴이는 처음에 4.9로 업데이트한 커널로 설치해봤는데 재부팅하니 갑자기 컴퓨터가 안켜지는 문제가 있었다. 아무리 찾아도 해결책을 찾을 수 없어 별 수 없이 커널을 밀고 재설치를 했었다.


1. CUDA Toolkit 다운로드 및 설치

Nvidia 홈페이지에서 tensorflow를 지원하는 cuda 설치 패키지를 다운 받는다. 현재 tensorflow는 cuda 9.0만 지원하고 있으니 이에 유의하도록 하자. 만약 현재 사용중인 NVIDIA driver가 cuda 9.0가 호환하지 않으면 삭제하고 재설치해야 하는 경우도 있다. 이런 경우에는 runfile을 받으면 호환되는 그래픽 카드 드라이버도 같이 받을 수 있다.

* CUDA는 GPGPU에서 사용하는 병렬 처리 알고리즘 기술을 C언어를 비롯한 여러가지 언어에서 사용할 수 있도록 지원하는 기술이다. GPGPU를 사용하기 위한 인터페이스로 볼 수 있다.




2. cuDNN 설치

이것 또한 Nvidia 홈페이지에서 자신의 PC 환경에 맞는 CUDA를 설치해야한다. 그런데 CUDA와 달리 cuDNN 부터는 따로 계정을 생성해야 한다. 가입하고 난 뒤에는 cuDNN 7.0.5 버전을 받도록 한다.

* cuDNN은 CUDA를 딥러닝에 사용할 수 있도록 만든 API다.


설치 가능한 목록에서 자신의 환경을 꼼꼼히 확인하고 다운 받아야 한다. Ubuntu 16.04에서는 Runtime Library와 Developer Library가 있는데 나는 Runtime을 선택해서 설치했다.


3. 그래픽 드라이버 설치

본인이 갖고 있는 그래픽 카드에 맞는 그래픽 드라이버를 설치한다. NVIDIA 홈페이지에서 그래픽 카드 드라이버를 받을 수 있다. 미리 설치 했으면 할 필요 없다. 설치 방법이 apt-get 처럼 단순하지 않다. 설치 방법은 추후 별도의 포스트로 올리겠다.


4. Tensorflow 설치 

Tensorflow 홈페이지에서는 총 네가지 방법(Virutalenv, native, Docker, anaconda)을 지원하는데 이중에서 가상 환경을 만들어서 사용하는 방법(Virtualenv)을 권장하고 있다. Virtualenv는 특정 폴더에 python 환경을 독립적으로 꾸릴 수 있는 환경을 제공하는데 이곳에 tensorflow를 설치하면 다른 파이선 프로그램의 디펜던시가 걸릴 우려가 없어 관리하기가 편하다. 글쓴이는 virtualenv를 이용해서 설치했다.

  1. 먼저 python 패키지 관리 시스템과 virtual env를 apt-get으로 설치한다.

    $ sudo apt-get install python-pip python-dev python-virtualenv # for Python 2.7
    $ sudo apt-get install python3-pip python3-dev python-virtualenv # for Python 3.n

    파이썬 2.7과 3.n 버전이 엄격히 구분되니, 앞으로 사용할 파이선 버전에 따라서 명령어를 잘 선택한다.

  2. python 환경을 독립적으로 꾸릴 폴더에 가상 환경을 설정한다.

    $ virtualenv --system-site-packages targetDirectory # for Python 2.7
    $ virtualenv --system-site-packages -p python3 targetDirectory # for Python 3.n
  3. 다음 명령어중 하나로 Virtualenv 환경을 활성화 한다.
    세가지 명령어를 다 시도하면 virtualenv 환경에서 튕기니까 주의한다.

    $ source ~/{targetDirectory}/bin/activate # bash, sh, ksh, or zsh $ source ~/{targetDirectory}/bin/activate.csh # csh or tcsh $ . ~/{targetDirectory}/bin/activate.fish # fish

  4. 정상적으로 됐으면 아래와 같이 활성화된 창이 뜬다.

    (targetDirectory)$

  5. Virtualenv 환경 내에서 pip가 설치 됐는지 확인해본다.

    (targetDirectory)$ easy_install -U pip
  6. pip 버전에 따라서 tensorflow를 설치한다

    (targetDirectory)$ pip install --upgrade tensorflow-gpu  # for Python 2.7 and GPU
    (targetDirectory)$ pip3 install --upgrade tensorflow-gpu # for Python 3.n and GPU
    

5. 설치 완료 메시지 확인

아래와같은 메시지가 나오면 정상적으로 tensorflow가 설치된 것이다


  1. CB 2018.08.01 22:49  댓글주소  수정/삭제  댓글쓰기

    안녕하세요,
    runtime library 와 developer library 간의 차이를 알 수 있을까요?
    검색 해본다고 해봤는데 잘 모르겠습니다.

    • 아는 개발자 아는 개발자 2018.08.01 23:09 신고  댓글주소  수정/삭제

      Runtime Library: cnDNN을 돌릴 때 필요한 기본적인 API를 설치합니다. Window에서 일반 프로그램 설치 옵션중 하나인 '기본 설치'와 비슷하다고 보시면 됩니다. 이것만 설치해도 Tensorflow를 실행하는데 전혀 지장 없습니다.

      Developer Library: 헤더파일과 일부 코드만 제공하고 나머지는 개발자가 직접 빌드해야 합니다. Tensorflow에서 cuDNN을 사용하는 코드를 변경해서 돌려보고 싶은 경우에 사용하는 라이브러리입니다.

      요약: tensorflow를 API만 사용하는 경우에는 Runtime Library를, 직접 코드를 수정하는 경우에는 Developer Library를 사용하시면 됩니다.

      출처: https://stackoverflow.com/questions/48784645/which-nvidia-cudnn-release-type-for-tensorflow-on-ubuntu-16-04

Ubuntu 안드로이드 스튜디오 설치하기

삽질 기록 2018.05.01 09:55 Posted by 아는 개발자 아는 개발자

Ubuntu 16.04에서 안드로이드 스튜디오 설치하기


Ubuntu에서 안드로이드 스튜디오를 설치하는 방법은 두가지가 있다.

  • 공식 홈페이지에서 .zip 파일로 받아온 후 압축을 풀어서 바이너리를 링크거는 방법. 안드로이드 스튜디오를 개발자가 유연성있게 관리 할 수 있다는 장점이 있지만 환경변수를 일일이 설정하고 추적하는게 번거롭다.
  • ppa 저장소를 추가하고 apt-get으로 받기. vim, terminator 같은 프로그램을 받을 때처럼 원격 저장소에서 모두 받을 수 있는 방법이다. 유연성있게 관리할 수는 없지만 설치 방법이 간단하다.

이 포스트는 두번째 방법에 대해서만 다룬다.


1. 저장소 추가 및 apt-get을 이용한 안드로이드 스튜디오 설치

터미널을 열고 아래의 명령어를 입력한다


sudo apt-add-repository ppa:paolorotolo/android-studio

sudo apt-get update

sudo apt-get install android-studio


2. 재부팅후 Android Studio 설치 확인

시작창을 열고 Android Studio를 검색해보면 아이콘이 나오면 설치가 정상적으로 이뤄진 것이다.


우분투 16.04 한글 입력하기

삽질 기록 2018.05.01 09:37 Posted by 아는 개발자 아는 개발자

Ubuntu 16.04 에서 한글 입력기를 설치하는 방법


1. 터미널 창에서 ibus 입력기 및 한글 입력기 설치

ibus 입력기용 한글을 시스템에 추가하는 작업. 터미널을 열고 아래 설치 명령어 입력


sudo add-apt-repository ppa:createsc/3beol

sudo apt-get update

sudo apt-get install ibus ibus-hangul


2. Language Support에 한글 추가

한글을 추가하고 한글 입력이 가능한 입력 방식을 변경하는 작업

  1. 시작 -> keyboard -> Language Support
  2. Keyboard input method system 에서 IBus 모드로 변경하기
  3. Language에 한글이 없다면 Install / Remove Languages로 변경



3. Keyboard에 단축키 설정 변경

한글 키로 이동 할 수 있는 단축키 설정하는 작업. 기존 설정을 모두 지우고 한글 단축키를 설정 할 수 있는 환경을 만든다.

  1. 시작 keyboard -> shortcuts -> typing 진입
  2. 모두 disabled mode로 변경한 후, switch to next source 만 선호하는 short key를 입력



4. 시스템상 한글 입력기 등록 및 단축키 설정

시스템 입력기에 한글을 등록하고 단축키를 설정한다

  1. 시작 -> Text Entry 진입
  2. 좌측 하단 '+' 버튼을 눌러 input source에 Korean(Hangul) (IBus) 추가
    * 설치를 했는데도 Korean (Hangul) (IBus)가 목록에 없는 경우가 있는데 이때는 시스템을 재부팅하면 된다.
  3. Switch to next source using 속성에 사용할 단축키를 입력

5. 한글 사용하기

이 포스트는 IBus 한글 입력기를 이용해서 English와 한글을 번갈아 사용하며 Write 했다. 아주 아주 Comfortable 하다.


nodejs heroku deploy하는 방법

삽질 기록 2015.06.13 17:41 Posted by 아는 개발자 아는 개발자

맨 처음에 push할 때


1. deploy하고 싶은 곳의 위치로 이동


2. git 저장서 생성

git init . 


3. heroku login 해서 아이디 비번 입력


4. 자신의 아이디로 저장소 생성 나의 git 저장소가 heroku와 연결된다


heroku create


4. commit 한다


git add .

git commit -m "first push"


5. push한다


git push heroku master