'2015/01'에 해당되는 글 15건

  1. 2015.01.27 #20150127-01 :: eclipse :: GC overhead limit exceeded
  2. 2015.01.26 #20150126-01 :: eclipse :: eclipse를 ubuntu launcher에 등록하기
  3. 2015.01.19 #20150119-03 :: go :: go를 이용한 TCP/IP Echo Server Example
  4. 2015.01.19 #20150119-02 :: go :: vim에서 go language 사용하기
  5. 2015.01.19 #20150119-01 :: go :: 우분투에서 go language 설치하기
  6. 2015.01.16 #20150116-03 :: ubuntu :: Android Studio 런처에 고정하기
  7. 2015.01.16 #20150116-02 :: ubuntu :: 홈디렉토리의 한글 디렉토리 이름 영문으로 바꾸기
  8. 2015.01.16 #20150116-01 :: git :: git 설치하고 meld를 기본 도구로 사용하기
  9. 2015.01.15 #20150115-07 :: Android Studio :: aapt error
  10. 2015.01.15 #20150115-06 :: Ubuntu 12.04 :: (6) Oracle JDK8 설치

#20150127-01 :: eclipse :: GC overhead limit exceeded

eclipse에 새로운 안드로이드 프로젝트를 임포트 하고 실행을 했더니

"GC overhead limit exceeded" 에러가 발생하면서 엉망진창이 되었습니다.


이유는 이클립스에서 JVM 구동에 필요한 메모리에 제한이 걸려있기 때문입니다.

아래와 같이 메모리를 늘려줍니다.


$ vi /work/apps/eclipse/eclipse/eclipse.ini

...

-XX:MaxPermSize=1024m
-Xms512m
-Xmx1024m




#20150126-01 :: eclipse :: eclipse를 ubuntu launcher에 등록하기

우분투 12.04에 이클립스를 설치 한 후 런처에 바로가기를 등록하려고 합니다.

먼저 아래와 같은 내용을 작성합니다.


$ vi /work/apps/eclipse/eclipse.descktop

[Desktop Entry]
Type=Application
Name=Eclipse
Comment=Eclipse Integrated Development Environment
Icon=/work/apps/eclipse/eclipse/icon.xpm
Exec=/work/apps/eclipse/eclipse/eclipse
Terminal=false
Categories=Development;IDE;Java;
StartupWMClass=Eclipse


아래의 위치에 작성한 파일을 심볼릭 링크로 연결합니다.

$ cd ~/.local/share/applications

$ ln -s /work/apps/eclipse/eclipse.desktop eclipse.desktop


아래의 명령을 치면 폴더가 열립니다.

$  nautilus ~/.local/share/applications


폴더에 있는 eclipse.desktop 파일을 런청에 드래그&드랍 하면

런처에 바로가기 등록 됩니다.



#20150119-03 :: go :: go를 이용한 TCP/IP Echo Server Example

아래는 go를 이용한 간단한 TCP/IP Echo Server 예제 입니다.

관리 용이성을 위해 서버와 클라이언트를 한 코드에 넣었습니다.


package main


import (

  "bufio"

  "fmt"

  "net"

  "os"

  "time"

)


func main() {


  send := make(chan string)

  quit := make(chan string)


  addr, err := net.ResolveTCPAddr("tcp", ":9000")


  ln, err := net.ListenTCP("tcp", addr)

  if err != nil {

    fmt.Println(err.Error())

    return;

  }


  go runServer(ln, quit)


  time.Sleep(time.Duration(1) * time.Second)


  conn, err := net.Dial("tcp", "127.0.0.1:9000")

  if err != nil {

    fmt.Println(err.Error())

    return;

  }


  go runClient(conn, quit)

  go runScan(send, quit)


  stop := false

  for !stop {


    fmt.Println("main loop ...")


    select {

    case text, ok := <- send:

      if !ok {

        ln.Close()

        conn.Close()

        stop = true

      }

      conn.Write([]byte(text))

    case err := <- quit:

      fmt.Println(err)

      stop = true

    }

  }


  fmt.Println("complete.")

}


func runScan(send chan string, quit chan string) {


  fmt.Println("runScan begin.")


  scanner := bufio.NewScanner(os.Stdin)

  for scanner.Scan() {

    text := scanner.Text()

    if text == "." {

      close(send)

      break

    }


    send <- text

  }

  

  fmt.Println("runScan end.")

}


func runServer(ln *net.TCPListener, quit chan string) {


  fmt.Println("runServer begin.")


  for {

    conn, err := ln.Accept()

    if err != nil {

      quit <- err.Error()

      break

    }


    go runSession(conn, quit)

  }


  fmt.Println("runServer end.")

}


func runSession(conn net.Conn, quit chan string) {


  fmt.Println("runSession begin.")


  buf := make([]byte, 1024)


  for {

    size, err := conn.Read(buf)

    if err != nil || size == 0 {

      quit <- err.Error()

      break

    }


    _, err = conn.Write(buf[:size])

    if err != nil {

      quit <- err.Error()

      break

    }

  }


  fmt.Println("runSession end.")

}


func runClient(conn net.Conn, quit chan string) {


  fmt.Println("runClient begin.")


  buf := make([]byte, 1024)


  for {

    size, err := conn.Read(buf)

    if err != nil {

      quit <- err.Error()

      break

    }


    fmt.Println(string(buf[:size]))

  }


  fmt.Println("runClient end.")

}


#20150119-02 :: go :: vim에서 go language 사용하기




pathogen 설치한다. 이 때, curl이 필요하여 설치하여 주었다.


$ cd ~/.vim

$ mkdir -p autoload bundle

$ sudo apt-get install curl

$ cd autoload

$ curl -LSso pathogen.vim https://tpo.pe/pathogen.vim


.vimrc 파일을 만든다.


$ cd ~/

$ vi .vimrc

execute pathogen#infect()
syntax on
filetype plugin indent on


vim-go를 설치한다.


$ cd /work/apps/golang

$ git clone https://github.com/fatih/vim-go.git

$ cd ~/.vim/bundle

$ ln -s /work/apps/golang/vim-go vim-go


mercurial을 설치한다.


$ sudo apt-get install mercurial


vim을 실행한 후 GoInstallBinaries를 실행한다.


$ vi

: GoInstallBinaries


자동 완성을 위해 YCM을 설치한다. YCM을 위해서는 python-dev와 cmake가 필요하다.


$ sudo apt-get install python-dev cmake

$ cd /work/apps/vim

$ git clone https://github.com/Valloric/YouCompleteMe.git

$ cd ~/.vim/bundle

$ ln -s /work/apps/vim/YouCompleteMe YouCompleteMe

$ cd YouCompleteMe

$ git submodule update --init --recursive

$ sudo apt-get install build-essential

$ pushd /work/apps/vim/YouCompleteMe YouCompleteMe

$ ./install.sh

$ popd


Tagbar를 설치한다. ctag가 필요하다. 설치 후 단축키 F8에 매핑한다.


$ sudo apt-get install ctags

$ cd /work/apps/vim

$ git clone https://github.com/majutsushi/tagbar.git

$ cd ~/.vim/bundle

$ ln -s /work/apps/vim/tagbar tagbar

$ vi ~/.vimrc

nmap <F8> :TagbarToggle<CR>


파일 브라우저 nerdtree를 설치한다.


$ cd /work/apps/vim

$ git clone https://github.com/scrooloose/nerdtree.git

$ cd ~/.vim/bundle

$ ln -s /work/apps/vim/nerdtree nerdtree

$ vi ~/.vimrc

nmap <C-n> :NERDTreeToggle<CR>


모두 설치하고 vi를 실행시키면 아래와 같은 에러가 발생한다.

YouCompleteMe unavailable: requires Vim 7.3.584+

vi는 정상 동작을 하지만, YCM은 사용할 수 없다.

그래서 vim을 강제로 판올림 해줘야 한다.


$ sudo add-apt-repository ppa:nmi/vim-snapshots

$ sudo apt-get update; sudo apt-get install vim


vi를 원래 버전으로 되돌리려면 아래와 같은 명령을 사용한다.


$ sudo apt-get install ppa-purge; sudo ppa-purge ppa:nmi/vim-snapshots

#20150119-01 :: go :: 우분투에서 go language 설치하기

$ cd /work/apps

$ mkdir golang

$ cd golang

$ wget https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz

$ tar -C ./ -xzf go1.4.1.linux-amd64.tar.gz


$ cd /work/workbench

$ mkdir golang

$ cd golang

$ mkdir bin pkg src


$ cd ~/

$ vi .bashrc

# go

export GOROOT=/work/apps/golang/golang

export PATH=$PATH:$GOROOT/bin
export GOPATH=/work/workbench/golang
export PATH=$PATH:$GOPATH/bin

$ source .bashrc


#20150116-03 :: ubuntu :: Android Studio 런처에 고정하기

안드로이드 스튜디오를 실행합니다.

상단 메뉴에서 아래의 명령을 실행합니다.


Tools → Create Desktop Entry...


런처에 있는 안드로이드 스튜디오 아이콘에서 마우스 오른쪽 버튼을 누른 후

'런처에 고정' 메뉴를 클릭합니다.

#20150116-02 :: ubuntu :: 홈디렉토리의 한글 디렉토리 이름 영문으로 바꾸기

우분투를 한글로 설치하면

홈디렉토리 아래의 기본 디렉토리들이 모두 한글 이름으로 되어 있습니다.

개인적으로 보기에는 예쁘다고 생각되지만,

쉘에서 접근하거나 프로그래밍과 관련된 부분에서는 불편함이 있습니다.

그래서 이름을 모두 영문으로 변경하도록 하겠습니다.


$ cd ~/

$ vi ~/.config/user-dirs.dirs


원래 아래와 같이 적혀있는 내용을 모두 변경해 줍니다.


XDG_DESKTOP_DIR="$HOME/바탕화면"

XDG_DOWNLOADS_DIR="$HOME/다운로드"

XDG_TEMPLATES_DIR="$HOME/템플릿"

XDG_PUBLICSHARE_DIR="$HOME/공개"

XDG_DOCUMENTS_DIR="$HOME/문서"

XDG_MUSIC_DIR="$HOME/음악"

XDG_PICTURES_DIR="$HOME/사진"

XDG_VIDEOS_DIR="$HOME/비디오"


XDG_DESKTOP_DIR="$HOME/Desktop"

XDG_DOWNLOADS_DIR="$HOME/Downloads"

XDG_TEMPLATES_DIR="$HOME/Templates"

XDG_PUBLICSHARE_DIR="$HOME/Public"

XDG_DOCUMENTS_DIR="$HOME/Documents"

XDG_MUSIC_DIR="$HOME/Music"

XDG_PICTURES_DIR="$HOME/Pictures"

XDG_VIDEOS_DIR="$HOME/Videos"

$ mv 바탕화면 Desktop

$ mv 다운로드 Downloads

$ mv 템플릿 Templates

$ mv 공개 Public

$ mv 문서 Documents

$ mv 음악 Music

$ mv 사진 Pictures

$ mv 비디오 Videos


'쉘'과 '내폴더'를  닫고 다시 열면 이름이 변경되어 있습니다.



#20150116-01 :: git :: git 설치하고 meld를 기본 도구로 사용하기

저는 개인적으로 meld를 사용하는 것을 좋아합니다.

윈도우에서는 사용할 수 없어 Beyond Compare를 사용하지만,

개인적으로는 meld를 선호합니다.


우분투에서 git과 meld를 설치하고

git에서 meld를 diff와 merge의 기본 도구로 연결하도록 하겠습니다.


$ sudo apt-get install git-core

$ git config --global user.name "jh81.kim"

$ git config --global user.email "jh81.kim@lge.com"

$ git config --global core.autocrlf false

$ git config --global color.ui true


$ sudo apt-get install meld

$ git config --global merge.tool meld

$ pushd /work

$ mkdir scripts

$ cd scripts

$ vi git-diff-meld.sh

#!/bin/bash

meld "$2" "$5" > /dev/null 2>&1

$ chmod u+x git-diff-meld.sh

$ git config --global diff.external /work/scrips/git-diff-meld.sh

$ popd


#20150115-07 :: Android Studio :: aapt error

우분투 12.04 LTS 64bit에 Android Studio를 설치했습니다.

그런데, 테스트 앱을 컴파일 하면 하래와 같은 문구의 에러가 납니다.


Error : Cannot run program "{android sdk path}/build-tools/21.1.2/aapt" {어쩌구저쩌구}


해결하기 위해 아래와 같이 두 개의 라이브러리를 설치합니다.


$ sudo apt-get install lib32stdc++6

$ sudo apt-get install lib32z1

#20150115-06 :: Ubuntu 12.04 :: (6) Oracle JDK8 설치

현재 우분투에는 OpenJDK6가 설치되어 있습니다.

OpenJDK6를 제거하고 Oracle(SUN) JDK8을 설치합니다.


OpenJDK6를 제거합니다.


$ java -version

$ sudo apt-get autoremove openjdk-6-jre

$ sudo apt-get purge openjdk*

$ java -version


Oracle JDK8을 설치합니다.


$ sudo add-apt-repository ppa:webupd8team/java

$ sudo apt-get update

$ sudo apt-get install oracle-java8-installer

$ sudo apt-get install oracle-java8-set-default

$ java -version