2013-12-24

컴퓨터 신간

컴퓨터신간 2013-12-24 - [자바스크립트 테스트와 디버깅] 포함 6종

자바스크립트 테스트와 디버깅
전용우 지음 / 인사이트 / 2013년 12월
소프트웨어 테스트 자동화 - 테스팅 전문가들의 생생한 사례연구 스토리로 익히는
도로시 그레이엄 & 마크 퓨스터 지음, 여용구 외 옮김 / 에이콘출판 / 2013년 12월
누구나 쉽게 쓰는 앱 디자인의 비결 - 핵심을 짚는 명확한 UX 디자인의 힘
로버트 후크만 주니어 지음, 심규대 옮김 / 에이콘출판 / 2013년 12월
열혈강의 영상 처리 프로그래밍 - 기초 알고리즘부터 라이브러리 활용까지
이희석 지음 / 이한디지털리(프리렉) / 2013년 12월
자바 7의 새로운 기능 - 100가지가 넘는 예제로 살펴보는
리차드 리스 & 제니퍼 리스 지음, 남기혁 옮김 / 에이콘출판 / 2013년 12월
마리아DB 따라잡기 - 구글이 선택한 차세대 데이터베이스 MariaDB
다니엘 바솔로뮤 지음, 이동국 옮김 / 에이콘출판 / 2013년 12월


http://blog.aladin.co.kr/755686115/6770191
at December 24, 2013 at 01:58PM

2013-12-10

스프링 파일 다운로드 가장 간단한 구현

스프링으로 파일 다운로드 구현할 때 보통 파일을 읽어서 복사하는 코드를 작성하게 된다. 하지만 한 줄로 해결하는 방법이 있더라.

@RequestMapping(value="/{id}/download", method=RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@ResponseBody
public FileSystemResource download(@PathVariable("id") SomeObj obj, HttpServletResponse response) {
    File file = myService.toFile(obj);
    response.setHeader("Content-Disposition", "attachment; filename=" + file.getName());
    /** 보통 아래와 같이 구현했었다. 이것도 간단하긴 한데...
    try {
        FileCopyUtils.copy(new FileInputStream(file), response.getOutputStream());
        response.flushBuffer();
    } catch (IOException e) {
        log.info("Error writing file to output stream. Filename was '" + file.getName() + "'");
        throw new RuntimeException("IOError writing file to output stream");
    }
    */
    /* 그냥 객체 하나만 던져주면 된다. */
    return new FileSystemResource(file);

}

2013-12-09

rm 명령어 안먹네?

왜 “rm -rf “XXX*.gif” 했는데 파일이 안지워질까? 머 차차 알아보기로 하고 일단…

$ find . -name "FILE-TO-FIND" -exec rm -rf {} \;
OR
$ find . -type f -name "FILE-TO-FIND" -exec rm -f {} \;

2013-12-03

mysql remote connection 설정

my.cnf 파일에서 bind-address를 0.0.0.0로 바꾸자. 특정 ip로 설정할 수도 있지만 localhost도 listen해야 하므로 두개 이상 설정해야 하고, 두개를 등록하는 방법은 없다. 0.0.0.0으로 하고 firewall을 세팅해야 한다.

bind-address        = 0.0.0.0
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

2013-11-28

구글 블로그는 아직도 markdown 지원을 안하네.

할 수 없이 wordpress에서 markdown 작성하고 ifttt를 이용해서 blogger로 복사하는 방식으로…

2013-11-14

CentOS에 headless로 VirtualBox 설치

$ sudo wget -O /etc/yum.repos.d/virtualbox.repo http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo
$ sudo yum -y install VirtualBox-4.3
어떤 버전이 repository에 있는지 알려면 virtualbox.repo 파일을 보면 http://download.virtualbox.org/virtualbox/rpm/el/ 경로가 있다.
호스트 OS에 맞게 선택하면 된다. 호스트가 어떤 릴리스인지 알려면 다음 명령어 사용.
$ cat /etc/*release

2013-10-10

아이폰4s 수리




내 아이폰4s.

3주 전에 앞면 액정 깨먹었는데 며칠 전에는 뒷면 액정이 깨졌다. 깨진 유리 표면을 손가락으로 만지다 피도 났다. 미세한 유리 알갱이가 엄지를 찌른 것. 집에서 아이들도 만지는데, 안되겠다 싶어서 얼른 테이프로 봉합. 그냥 이대로 쓸 수도 있겠다 싶었는데, 며칠 써보니 영 보기가 불편ㅎ다. 더구나 곧 5S 출시도 앞두고 있어서 바꿀 생각이고 현재 내 폰은 집사람 줄려고 생각하고 있었는데, 이대로 주기엔 좀 미안한 마음도 들고.

오늘 사무실 근처 "아이폰 수리"라고 창문에 붙여진 가게에 들러 가격을 물어보니, 아이폰4s는 아직 비용이 좀 나간다고.
  • 앞면은 15만원
  • 뒷면은 3만5천원
둘다 하면 공임비 좀 깍아서 18만원에 해주겠단다. 좀 비싸니 일단 생각 좀 해보겠다 하고 후퇴.

근처에 kmug 도 있어서 혹시나 싶어 방문. 내 폰은 이미 1년이 지나 별로 도움될 일은 없으리라 생각하면서도 일단 말이나 들어보자 했지. 번호표는 11명 대기. 책이나 읽으며 기다림. 46번 고객님 부름.
  • 앞면 액정 깨진거는 교체해야 한다고 함. 27만원.
  • 뒷면은 교체가 간단하다고 함. 진열장에 있는 뒷면 케이스로 5분만에 교체가능하다 함. 현금으로 1만원.
그래서 일단 뒷면만 교체했다. 뒷면은 거미줄처럼 깨졌지만 앞면은 유리에 줄이 간 정도라 테이프로도 좀 버틸만 하거덩. 

아이폰에 케이스 입히는 사람 이해를 못했는데(예쁜 디자인을 왜 껍데기 입히며 희생해야 하냐는거), 이번 같은 경우 당하면서 아이폰에도 케이스가 필요하다는 것을 절실히 느꼈다. 아이폰 깨져보지 않은 사람은 잘 모를 것이다. 

저번에는 아이폰 반납하고 새 아이폰 샀는데, 이제는 반납 안 할 생각이기 때문에 더욱 깨끗이 써야 한다. 비싼 기기를 푼돈에 반납하는게 좀 아깝고, 집에서 미디어 플레이어로 쓰든지 활용처도 생각해보면 다양할 수도 있을거 같다는 막연한 생각도 있고.

2013-09-26

컴퓨터 신간

컴퓨터신간 2013-09-26 - [만들면서 배우는 코코스2d-x Cocos2d-x 멀티 플랫폼 게임 프로그래밍 (퍼즐 & 슈팅) - 애니팡이나 드래곤 플라이트는 어떻게 만들까?] 포함 4종

만들면서 배우는 코코스2d-x Cocos2d-x 멀티 플랫폼 게임 프로그래밍 (퍼즐 & 슈팅) - 애니팡이나 드래곤 플라이트는 어떻게 만들까?
노재현 지음 / 한빛미디어(한빛아카데미) / 2013년 10월
전문가를 위한 C++ 1 - 개정판, C++11, STL, 템플릿, 디자인 패턴, 객체지향의 원리를 만나는 유쾌한 방법
마크 그레고리 외 지음, 권오인 옮김 / 한빛미디어(한빛아카데미) / 2013년 10월
전문가를 위한 C++ 2 - 개정판, C++11, STL, 템플릿, 디자인 패턴, 객체지향의 원리를 만나는 유쾌한 방법
마크 그레고리 외 지음, 권오인 옮김 / 한빛미디어(한빛아카데미) / 2013년 10월
iOS 6 핵심 정리와 실무 예제 마스터 세트 - 전2권 - 『The Core iOS 6 Developer's Cookbook (Fourth Edition) 한국어판』 + 『The Advanced iOS 6 Developer's Cookbook (Fourth Edition) 한국어판』
에리카 세든 지음, 동준상.송용근 옮김 / 에이콘출판 / 2013년 10월


http://blog.aladin.co.kr/755686115/6607189
at September 26, 2013 at 01:25PM

2013-09-11

erlang 설치

우분투 12.10의 경우 apt-get으로 설치하면 R14B04가 설치된다. 하지만 현재 스코어 R16B01이 최신버전인데...

가능하면 최신버전을 설치하는 것이 좋을 것 같고, 또 설치 과정이 좀 간단하면 좋을 것 같아서 찾아보니...

Riak 웹사이트의 얼랭 설치 문서가 잘되어 있는 것 같다. kerl이라는게 있었네. 여러 버전의 erlang을 관리할 수 있다고.

$ sudo apt-get install build-essential libncurses5-dev openssl libssl-dev fop xsltproc unixodbc-dev

$ curl -O https://raw.github.com/spawngrid/kerl/master/kerl; chmod a+x kerl

# ~/.kerlrc 파일에
KERL_CONFIGURE_OPTIONS="--disable-hipe --enable-smp-support --enable-threads --enable-kernel-poll --enable-darwin-64bit"

$ ./kerl build R15B01 r15b01

# 빌드가 끝나면
$ ./kerl install r15b01 ~/erlang/r15b01

# r15b01버전을 사용하자.
$ . ~/erlang/r15b01/activate

2013-07-29

공부의 목적을 알라! 
성적이 좋다고 원하는 삶을 
사는 것은 아니다. 
원하는 삶을 위해 필요한 공부를 해야 한다. 
스스로 공부를 하는 이유를 
모른다면, 평생 원하지 않는 숙제 만 할 뿐이다. 
      - 행복 바이러스 -

2013-07-17

커맨드라인에서 외부 IP를 알아 보자.

원본 기사

자세한 내용은 위 링크를 참조하면 된다. 간단한 내용은?

# 제일 간단하다.
$ curl ifconfig.me

# 더 안정적인 서비스라네.
$ dig +short myip.opendns.com @resolver1.opendns.com

# 아래와 같이 alias 등록해두면 편하겠지?
alias getmyip='dig +short myip.opendns.com @resolver1.opendns.com'

또, 브라우저에서 ifconfig.me 주소를 때려보면 더 자세한 정보도 볼 수 있다.

2013-06-27

컴퓨터 신간

컴퓨터신간 2013-06-27 - [데이터 마이닝 Data Mining - 데이터 속 숨은 의미를 찾는 기계 학습의 이론과 응용] 포함 9종

데이터 마이닝 Data Mining - 데이터 속 숨은 의미를 찾는 기계 학습의 이론과 응용
이안 위튼 외 지음, 이승현 옮김 / 에이콘출판 / 2013년 06월
머신러닝 인 액션 - 기계 학습 알고리즘으로 데이터 마이닝하기
피터 해링턴 지음, 김영진 옮김 / 제이펍 / 2013년 06월
테스트 주도 개발로 배우는 객체 지향 설계와 실천
스티브 프리먼 & 냇 프라이스 지음, 이대엽 옮김 / 인사이트 / 2013년 06월
칸반과 스크럼
헨릭 크니버그 & 마티아스 스카린 지음, 심우곤.인범진 옮김 / 인사이트 / 2013년 05월
데브옵스 - 개발자, QA, 관리자가 함께 보는 리눅스 서버 트러블슈팅 기법
카일 랜킨 지음, 조남웅 외 옮김 / 위키북스 / 2013년 05월
프론트엔드 개발자를 위한 자바스크립트 프로그래밍
니콜라스 자카스 지음, 한선용 옮김 / 인사이트 / 2013년 05월
아마존 웹 서비스 클라우드 디자인 패턴 설계 가이드
타마가와 켄 외 지음, 박상욱 옮김 / 제이펍 / 2013년 06월
아마존 웹 서비스 완벽 활용법 - 365일 24시간 끄떡없는 웹 사이트 구축과 운영
제프 바 지음, 최용호 옮김 / 위키북스 / 2013년 04월
Android in Action - 다양한 예제로 학습하는 안드로이드 앱 개발법
프랭크 에이블슨 외 지음, 고종봉.강주희 옮김 / 인사이트 / 2013년 06월


http://blog.aladin.co.kr/755686115/6435291
at June 27, 2013 at 12:10AM

2013-05-01

mysql information_schema 이용하여 sql 문 일부를 생성하자.

일일이 타이핑 하기 귀찮으니...
select concat('r.',COLUMN_NAME,' = i.', COLUMN_NAME,',') FROM information_schema.columns where TABLE_NAME = 'USER';

@OneToOne @MapsId

@Entity
public class User extends BaseModel {
    @OneToOne(optional=false)
    @PrimaryKeyJoinColumn
    private UserExt userExt;
}

@Entity
public class UserExt extends BaseModel {
//    @Id Long id; // 이건 BaseModel에 정의되어 있음. 
    @MapsId
    @OneToOne
    @JoinColumn(name = "id")
    @PrimaryKeyJoinColumn
    @ForeignKey(name="fk_UserExt_User") // 이건 안먹더라.
    private User user;
...
}

그나저나 @OneToOne 매핑은 어렵구나. 1+n 문제 해결이 쉽지 않아.

2013-04-25

이제 나도 늙었나보다. 생각이 치밀하지가 못해. 자꾸 무언가 빠뜨린다. 버그도 많이 생기고.

2013-04-14

Mocks Aren't Stubs

Martin Fowler의 Mocks Aren’t Stubs이라는 글이 있는데, 제가 이 글을 3년 전 쯤에 심심풀이 삼아 번역을 했었습니다. 그냥 재미삼아 했고 구글 사이트에 올렸죠. 그 때는 테스팅에 대해 공부 좀 해 볼 요량으로 그런건데 여전히 TDD는 잘 못합니다. 그런데 며칠전 정상혁님이 이 번역글을 원문 글에 한국어 번역으로 링크를 추가하는게 어떠냐고 메일로 제안을 해 주셨어요. fowler에게 메일로 보내면 해 줄거라면서. 헤헤헤. 그래서 요청을 하려고 fowler의 메일 주소를 찾았는데, 못찾아서 페이스북 담벼락에 요청글을 남겼죠. 하지만 며칠이 지나도 답변은 없고… 그래서 메일을 다시 보냈더니 10분만에 응답! 링크 추가 완료. 진작에 메일을 보낼 걸… 페이스북은 자세히 안보는 모양입니다. About me 링크를 자세히 읽어 보는건데… 어쨌든 나름 유명한 아티클에 제 번역 글이 링크가 걸려서 좀 뿌듯해 지는 중입니다.

2013-04-12

컴퓨터 신간

컴퓨터신간 2013-04-12 - [스크럼으로 소프트웨어 제품 관리하기] 포함 4종

스크럼으로 소프트웨어 제품 관리하기
로만 피클러 지음, 박현철.류미경 옮김 / 에이콘출판 / 2013년 04월
소셜게임 디자인의 법칙 - 수익창출을 위한 전략과 기법
팀 필즈 & 브랜드 코튼 지음, 김호연 외 옮김 / 비제이퍼블릭 / 2013년 04월
프로 Git - 그림으로 이해하는 Git의 작동 원리와 사용법
스캇 샤콘 지음, 박창우 외 옮김, 숀 피어스 기술 리뷰어 / 인사이트 / 2013년 04월
아마존 웹 서비스 완벽 활용법 - 365일 24시간 끄떡없는 웹 사이트 구축과 운영
제프 바 지음, 최용호 옮김 / 위키북스 / 2013년 04월


http://blog.aladin.co.kr/755686115/6303625
at April 12, 2013 at 02:38PM

2013-04-09

Ubuntu에서 Phantomjs 설치

jasper report를 이용하여 pdf를 만들고 있는데, 아무리 생각해도 이건 아니다 싶다. 별로 예쁘지도 않고, 값 넣는 것도 힘들고.


jspdf를 쓸 수 있을까 했는데, 이건 한글 처리에 문제가 있는 것 같다.


google service를 이용하는 방법은 어떨까? google docs 문서를 generate 하고 이것으로 pdf를 대신하는거지. 만들어진 도큐먼트를 pdf export 하면 되니까. 될까? … 하지만 이것 역시 귀찮아서 포기.


한참을 생각하다가 딱! phantomjs !


pdf 생성 요청에 대해 프로세스를 fork해야 한다는 점이 맘에 걸리지만 한 번 시도해보자.


$ sudo apt-get install phantomjs
$ phantomjs --version
[WARNING] phantomjs: cannot connect to X server.

1.4버전까지는 X server가 필요하단다. 1.5부터 pure headless라고. 할 수 없다. 직접 설치.


$ wget https://phantomjs.googlecode.com/files/phantomjs-1.9.0-linux-x86_64.tar.bz2
$ sudo tar xjf phantomjs-1.9.0-linux-x86_64.tar.bz2
$ sudo ln -s /your/phantomjs-install/bin/phantomjs /usr/bin/phantomjs
$ phantomjs -v
1.9.0

나는 A4 사이즈 pdf생성을 위해 examples의 rasterize.js 파일을 참고했다.


$ phantomjs rasterize.js http://naver.com naver.pdf A4

한글이 표시안되더라. 글꼴을 설치하자.


$ sudo apt-get install ttf-nanum ttf-nanum-extra
$ sudo apt-get install ttf-mscorefonts-installer

여전히 돋움 같은 글꼴은 안나온다. 이것도 설치해주면 나오겠지.


이상 설치 끝.


그 다음엔 이놈을 java web app에서 이용하려면 Process를 띄워야 하는데 이 주제는 다음 기회에…


update: 한글 문제 때문에 고생 좀 했다. 내가 pdf로 보여주려는 웹페이지는 나눔글꼴을 사용하고 있었는데, 이게 내 개발환경(맥)에서는 pdf에서 제대로 한글이 나온다. 하지만 우분투 서버에서는 나눔글꼴이 안나오고 다른 한글 글꼴이 선택되더라. 그래서 pdf페이지가 예쁘지 않고 … 그나마 다른 우분투 서버는 대체 한글 글꼴도 없으면 네모로 출력. 뭐가 문제일까 한참을 삽질 좀 했더니, 문제는 css에서 NanumGothic이나 ’Nanum Gothic’은 안먹고 ’나눔고딕’이라고 해야 한글이 제대로 나온다. 즉


body {
    font-family: '나눔고딕' !important;
}

헐… phantomjs가 QT 기반인 것 같은데, 나는 QT를 잘 모를 뿐이고…

2013-04-04

Reverse proxy 환경에서 tomcat access log의 IP를 X-Forwarded-For로 변경.

tomcat 앞단에 reverse proxy가 있다면, tomcat access log를 볼 때, host부분이 proxy의 IP로 나온다. 우리는 X-Forwarded-For헤더의 값을 나오게 하고 싶다.


아래와 같이 한다.


<!-- 아래 Valve를 추가 -->
<Valve className="org.apache.catalina.valves.RemoteIpValve" />
<!-- AccessLogValve를 아래와 같이 수정 -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%{X-Forwarded-For}i %h %l %u %t &quot;%r&quot; %s %b %{User-Agent}i" />

tmux 기초

설치


$ brew install tmux # os x
$ sudo apt-get install tmux # ubuntu

$ tmux -V # version

session 만들기


$ tmux new -s basic # 이름 있는 세션

Detaching and Attaching Sessions


Ctrl-b is for tmux command.


CTRL-b, d # detach
$ tmux ls # list-sessions
$ tmux attach -t [session]
$ tmux kill-session -t basic

Working with Windows


$ tmux new -s prd -n log # 첫째 윈도우 이름을 'log'로 함.
Ctrl-b, c # 새 윈도우 생성
Ctrl-b, , # 윈도우 이름 변경.
Ctrl-b, n # 다음 윈도우로 이동
Ctrl-b, p # 이전 윈도우로 이동
Ctrl-b, 숫자 # 0부터 시작하여 지정된 숫자의 윈도우로 이동
Ctrl-b, f # 윈도우 찾기
Ctrl-b, w # 윈도우 선택하여 이동

Working with Panes


Ctrl-b, % # 새 패인 생성. new column
Ctrl-b, " # 새 패인 생성. new row
Ctrl-b, o # 패인간 이동.
Ctrl-b, <space> # 기본 레이아웃 사이클.
# 기본 레이아웃: even-horizontal, even-vertical, main-horizontal, main-vertical, tiles

Command mode


Ctrl-b, : # command mode

Scrolling Through Output with Copy Mode


Ctrl-b, [ # copy mode. 'Enter' to escape.
그런 다음 <space> and <Enter> # 복사할 텍스트의 시작과 끝 지정.
Ctrl-b, ] # 붙여 넣기.
# ~/.tmux.conf에 
setw -g mode-keys vi # 커서 이동하기 위해 vi키를 사용.

access log를 tail할 때 필요한 것만 보기

$ tail -f /home/apps/tomcat/logs/localhost_access_log.`date +%Y-%m-%d`.txt | grep -Ev "패턴1|패턴2|"

2013-04-03

컴퓨터 신간

지탱하는 기술 - [모바게를 지탱하는 기술 - 모바일 게임 플랫폼,] 포함 8종 XXX를 지탱하는 기술 시리즈를 모아 보았어요.

모바게를 지탱하는 기술 - 모바일 게임 플랫폼,
DeNA(디엔에이) 지음, 정인식 옮김 / 제이펍 / 2013년 03월
서버/인프라를 지탱하는 기술 - 24시간 365일
이토 나오야 외 지음, 진명조 옮김 / 제이펍 / 2009년 04월
웹 개발자를 위한 웹을 지탱하는 기술 - HTTP, URI, HTML 그리고 REST
야마모토 요헤이 지음, 김성훈 옮김, 권정혁 감수 / 멘토르 / 2011년 05월
프로세서를 지탱하는 기술 - 끝없이 스피드를 추구하는 세계
안도 히사 지음, 진명조 옮김 / 제이펍 / 2011년 11월
대규모 서비스를 지탱하는 기술 - 웹 개발자를 위한
다나카 신지 & 이토 나오야 지음, 진명조 옮김 / 제이펍 / 2011년 02월
구글을 지탱하는 기술
니시다 케이스케 지음, 김성훈 옮김, 전병국 감수 / 멘토르 / 2008년 12월
데이터베이스를 지탱하는 기술 - 웹 프로그래머를 위한
마쯔노부 요시노리 지음, 정인식 옮김 / 제이펍 / 2012년 11월
온라인 게임을 지탱하는 기술
나카지마 켄고 지음, 김상우 옮김 / 위키북스 / 2012년 06월


http://blog.aladin.co.kr/755686115/6280921
at April 03, 2013 at 03:12PM