2012년 12월 17일 월요일

으헝헝~~~ 사고싶다~~~

SKYHD CaptureU2.0 HDMI

3.0 제품이 있으나, 맥북프로에 USB 3.0 이 엄서서 패수~

그리고 국산답게 MacOS X 용 드라이버는 없을 것 같아...T.T

2012년 11월 1일 목요일

리눅스에서 파일 소유자, 권한 일괄 변경

외장 하드디스크 등에 저장한 자료, 특히 NTFS 타입 등으로 복사를 하면 소유자와 권한이 변경되는 경우가 존재한다. 이를 일괄적으로 변경하는 방법은 다음과 같다.

sudo chown -R user:group *
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \;


소유자를 user 로, 그룹을 group 으로 하고, 현재 디렉토리 이후를 모두 변경시키는 문장이 첫번째이다.
현재 디렉토리 이후의 모든 디렉토리를 755(rwxr-xr-x)로 바꾸고, 현재 디렉토리 이후의 모든 파일을 644(rw-r--r--)로 바꾸는 것이 두번째와 세번째이다. 755와 644는 각각 디렉토리와 파일의 기본값이기도 하다.

2012년 10월 29일 월요일

내 컴퓨터 목록

회사 업무용 메인 노트북 : Gigabyte U2442N Dual (Libra)

회사 업무용 서브 노트북 : LG XNote Z1 Advanced (Aries)

폐기 일보직전 노트북 : Compaq (Virgo)


그 외 메인 데스크탑PC, 파일서버PC, 맥북프로PC 가 있는데...이름이 기억이 안남...

2012년 9월 12일 수요일

Redmine 1.4.x with Oracle Linux 6

Oracle Linux 에서 Redmine 1.4 stable 버젼 설치를 하는 방법입니다. 최대한 RPM 등을 이용합니다.



1. Public YUM 설치

오라클의 공개 yum 저장소인 public yum(http://public-yum.oracle.com)을 사용하도록 설정. 구입했을 경우 Unbreakable Linux Network 의 자원을 이용할 수 있으므로 무시할 수 있음.
Oracle DBMS 을 설치할 때 oracle-validated 라는 것을 public yum 을 통해 설치 가능하므로 알아두는 것이 이롭겠다.

아래 명령으로 저장소를 추가할 수 있고, Oracle Linux 에는 기본적으로 포함되어 있다.

cd /etc/yum.repos.d
wget http://public-yum.oracle.com/public-yum-ol6.repo





2. 3rd Party 저장소 추가 (옵션)

기본 제공 YUM 저장소에는 충분한 패키지가 포함되어 있지 않다. 3rd Party YUM Repository 을 통해서 더 많은 패키지를 사용할 수 있다.

아래의 명령어로 저장소의 우선순위를 정해줄 수 있는 플러그인을 설치한다.

yum install yum-plugin-priorities

설치 후 저장소 설정 파일에 아래와 같은 형식으로 수치를 넣어서 우선순위를 정할 수 있다. N 대신에 숫자를 넣는데, 숫자가 클수록 후순위다. EPEL, repoforge 와 같은 3rd Party 저장소는 10 이상으로 하자.

priority=N






3. Subversion, MySQL, ImageMagick, Ruby, Gem, Rake, Rails 설치

아래 명령으로 MySQL 와 gcc, Ruby, Ruby Gem, Rake 등 의존성 있는 패키지까지 함께 설치한다.

yum install subversion, mysql mysql-devel ImageMagick ImageMagick-devel ruby ruby-devel rubygems rubygem-rake gcc

그 후 rails 와 ruby-mysql2 을 gem 으로 설치한다.

gem install rails mysql2 bundler rmagick

MySQL 은 항상 구동되어야 하므로 서비스에 등록하고 실행한다.

chkconfig mysqld on
service mysqld start





4. MySQL 사용자와 DB 생성

MySQL 설치 후 아무런 보안정책이 적용되지 않은 상태이다. root 사용자의 비밀번호를 지정하고, 원격접속 등을 막기 위해 아래 명령을 실행한다.

/usr/bin/mysql_secure_installaion

그 후 아래 명령으로 MySQL 클라이언트로 로컬 DBMS 에 접속한다.

mysql -u root -p

접속 후아래 명령으로 MySQL 에 Redmine 을 위한 사용자와 DB 을 생성해준다.

create database redmine character set utf8;
create user 'redmine'@'localhost' identified by '(비밀번호)';
grant all privileges on redmine.* to 'redmine'@'localhost';

모두 적용한 뒤 quit 명령으로 빠져나온다.





5. Redmine 1.4 최신버젼 다운로드

아래 명령으로 /usr/local/redmine-1.4/ 에 Subversion 을 이용해서 최신버젼을 가져온다.

cd /usr/local/; svn co http://redmine.rubyforge.org/svn/branches/1.4-stable redmine-1.4

그 후 /usr/local/redmine-1.4/config/ 으로 이동해서 database.yml.example 파일을 database.yml 로 복사한 뒤 production 부분을 수정해준다.
username 와 password 만 수정하면 될 것이다.





6. DB 초기화

아래 명령으로 DB 을 초기화한다. 마지막 기초 데이터 로딩 시 ko 을 입력하여 한국어 기반으로 설치한다.

bundle install --without development test postgresql sqlite
rake generate_session_store
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data





7. 리눅스 디렉토리/파일 권한 변경

Redmine 설치 경로의 files/,log/, tmp/, public/plugin_assets/ 은 사용자를 root 에서 다른 사용자로 변경하고(redmine 사용자 혹은 apache httpd 사용자) 디렉토리 권한을 755 로 바꿔준다.





8. Ruby WEBrick 웹서버 테스트

아래 명령으로 Ruby 의 웹서버를 통해 실행한다. 3000 번 포트로 실행되며, 웹브라우져로 확인해본다. 기본 계정은 admin/admin 이다.

cd /usr/local/redmine-1.4/; ruby script/server webrick -e production




9. Apache HTTPD 연동

Apache HTTPD 와 연동하기 위해서는 Passenger 나 Mongrel(mongrel-cluster), Thin 로 연동해야 한다.

먼저 Apache HTTPD 설치를 위해 아래의 명령을 실행한다.

yum install httpd httpd-devel

Passenger 는 연동이 단순하다. 아래 명령으로 설치한 뒤, 화면 상의 메시지에 따라 HTTPD 의 설정 파일에 내용을 추가한다.

gem install passenger
passenger-install-apache2-module

Mongrel 은 Cluster 을 지원한다. 가장 파워풀한 설정이다. Mongrel 로 각각의 서버를 띄운 뒤 HTTPD 의 ProxyPass 을 이용해서 페이지를 띄우는 방식이다.
Thin 은 Ruby 서버를 띄워서 이를 연결하는 방식으로, Passenger 을 쓰는 것이 더 나아 보인다.

2012년 8월 23일 목요일

tr 에 click event(onclick 포함)을 걸었을 때 포함된 checkbox 는 이벤트에서 제외하는 방법 - jquery 이용

첫번째. 가장 쉬운 방법

$("input[type=checkbox]").click(function(event) {
 event.stopPropagation();
});
 
jquery 에서 event.stopPropagation() 을 제공함. 하지만 모든 이벤트를 멈춰버리니 주의.
 
두번째. 이벤트를 등록할 때 checkbox 는 빼고, checkbox 만 별도로 이벤트 등록하는 방법
 
$("tr").click(function(event) {
 if (event.target.type == 'checkbox') return;
 // tr 눌렀을 때 취할 행동. 물론 실무에선 selecter 를 더 한정적으로 써야함
});

$(":checkbox").change(function(event) {
 // checkbox 눌렀을 때 취할 행동
}); 
 
세번째. 첫번째와 두번째를 응용
 
$("tr").click(function(event) {
});

$(":checkbox").click(function(event) {
 event.stopPropagation();
}); 

네번째. click 이벤트가 안먹힐 때가 있다. 이럴 경우 delegate 을 이용.
 
$('#TableID').delegate('tr', 'click', function (event) {
 if($(event.target).is('input:checkbox')) {
  
 } else {
   }
});

역시 jquery 의 세계는 오묘하다...

2012년 8월 12일 일요일

JBoss 7.1.1 Final 설치중

Ubuntu Linux 에 설치중...

1. 압축 풀기

2. bin/init.d/ 에 기존에 있는 쉘 무시하고 새로운 쉘 만들기

3. jboss 사용자 추가(2에서 사용)

4. standard/configuration/standalone.xml 에서 설정 변경

4-1. <connector> 에 AJP/1.3 추가

4-2.

2012년 8월 8일 수요일

Java 이미지 처리 라이브러리(pure-java)

http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/

http://rsbweb.nih.gov/ij/

http://www.marvinproject.org

설치형

http://processing.org/

2012년 7월 2일 월요일

%USERPROFILE% 변경

SSD 사용자가 HDD 에 사용자 정보 등을 저장하려고 할 때 아래 링크와 같이 값을 변경해주면 된다.

http://thankee.tistory.com/109

2012년 6월 9일 토요일

maven 라이브러리 검색

http://mvnrepository.com/

위 사이트에서 많은 것을 찾아냈다.

pja 와 pjatools 를 못찾은 것이 좀 아쉬움...아예 빼버릴까 싶다.

<dependency><groupId>com.eteks.pja</groupId><artifactId>pjatools</artifactId><version>2.5</version></dependency><dependency><groupId>com.eteks.pja</groupId><artifactId>pja</artifactId><version>2.5</version></dependency>

위와 같은 형태로 아래 사이트에서 제공하고 있다.

http://data.metagrid.co.uk/astrodabis/maven/external/com/eteks/pja/

2012년 5월 7일 월요일

Citrix XenServer 6 에서 부팅시 가상머신을 자동으로 시작해주는 옵션이 사라졌다. 아마도 유료버젼으로 기능이 옮겨간 듯...

XenServer 의 console 로 들어가서(가상머신이 아니다) /etc/rc.d/rc.local 에 수동으로 명령을 추가하면 실행할 수 있다.

sleep 40
/usr/bin/xe vm-start uuid=(가상머신UUID)

여러개일 경우 개속 추가해주면 된다.

2012년 4월 5일 목요일

Windows 2008 Server 의 Administrator 비밀번호 복잡성 문제

Windows 2008 Server 에서 Administrator 의 비밀번호 입력에서 복잡한 형태만을 입력받도록 기본값이 변경되었다. 이거 참 짜증나는 일일세...개인용 버젼과 달리 서버용 버젼은 Administrator 계정이 노출이 되어 있기 때문에...오히려 비밀번호 입력을 단순히 할 수도 있어야 한다고 보는데 말이다.

어쨌든 정책에서 이 기능을 꺼버릴 수 있다.

제어판 > 관리 도구 >로컬 보안 정책 > 계정 정책 > 암호 정책 > '암호는 복잡성을 만족해야 함' 을 '사용안함' 으로 변경

ubuntu server 설치 후 X 가 필요하다면?

각각의 패키지를 선택하여 설치도 가능하겠지만...

한 방에 설치하려면 다음 명령으로 기본구성된 패키지를 설치해버리자.

sudo apt-get install ubuntu-desktop

2012년 2월 27일 월요일

2012년 2월 17일 금요일

TeamViewer 를 통한 간단한 원격접속/지원

TeamViewer 라는 원격접속 프로그램이 있습니다. 개인 사용자에게는 무료입니다.

누군가 모르는 사람에게 원격지원을 요청하고 싶을 경우 TeamViewer 인스턴스 고객용을 받아서 실행하면 설치 없이, 가입 없이 간단하게 원격지원을 받을 수 있습니다.

http://www.teamviewer.com/ko/download/index.aspx

위 링크에서 인스턴스 고객용으로 다운로드를 받습니다. 실행 파일 하나로 되어 있습니다. 실행하고 잠시 기다리면 숫자로 된 ID(귀하의 ID) 와 비밀번호가 생성됩니다. 이 ID 와 비밀번호를 원격지원을 요청한 분에게 제공하면 접속이 가능해집니다. 프로그램을 재실행할 때마다 비밀번호가 변경되기 때문에 안전합니다.
원격지원을 해주실 분은 모바일용 Portable 버젼을 받으시면 zip 파일로 압축된 것을 내려받을 수 있습니다. 여기에는 위에서 언급한 인스턴스 고객용의 기능에 접속기능 등이 모두 포함되어 있습니다.



물론 가장 좋은 건 Windows 자체 내장 원격지원이라고 생각합니다. ^^;;;

join(=inner join) 과 left join(=left outer join) 의 비교

join 의 개념에 대해서 혼동하는 사람도 많고, inner join 과 outer join 에 대해서 혼동하는 사람도 많다. 두 개의 개념을 예제로 비교해보자.

1. join

join 은 inner join 을 줄여서 join 이라고 통칭한다고 생각하면 된다. 물론 inner join 이라고 써도 무방하나...손가락 아프다...

아래 예제를 보자.

with man as (
    select 'A' as blood, '홍길동' as name from dual union all
    select 'A', '이차돌' from dual union all
    select 'AB', '박호신' from dual union all
    select 'AB', '차명수' from dual union all
    select 'O', '유재석' from dual union all
    select 'B', '정준하' from dual union all
    select 'A', '하하' from dual union all
    select 'B', '엄태웅' from dual union all
    select 'O', '이승기' from dual union all
    select 'A', '이수근' from dual union all
    select 'AB', '이특' from dual),
  woman as (
    select 'A' as blood, '김태연' as name from dual union all
    select 'A', '이소라' from dual union all
    select 'B', '박신애' from dual union all
    select 'AB', '차소연' from dual)
select A.*, B.*
from man A
  join woman B
    on A.blood = B.blood
order by A.blood, A.name, B.name

결과는 다음과 같다.

A    이수근    A    김태연
A    이수근    A    이소라
A    이차돌    A    김태연
A    이차돌    A    이소라
A    하하    A    김태연
A    하하    A    이소라
A    홍길동    A    김태연
A    홍길동    A    이소라
AB    박호신    AB    차소연
AB    이특    AB    차소연
AB    차명수    AB    차소연
B    엄태웅    B    박신애
B    정준하    B    박신애

무엇을 느끼시는가? 결국 같은 혈액형(blood)끼리만 짝을 지을 수 있다는 조건을 미팅장에서 제시했다면...저런 조합이 가능하다! 라고 목록을 보여주는 것 같지 않은가?

그렇다. 그것이 바로 join 이다.

불쌍하게도 여자들 중에 O 형이 없다. 그래서 O 형 남자인 유재석과 이승기는 파트너 없는 불쌍한 신세가 된 것이다. 이것이 inner join 이다. 가능성 있는 것들을 묶어주는 것...

2. outer join

흔히 DB 에서 left join 만 언급한다. 그 이유는 표준SQL 에서는 left outer join 만 지원하기 때문이다. 오라클이나 SQL Server 에서는 A.blood(+) = B.blood 나 A.blood =* B.blood 와 같이 표준SQL 형태가 아닌 독자적인 outer join 을 제공하며, right outer join 도 지원하지만 간혹 꼬여서 값이 원하는 형태대로 나오지 않는 경우가 있다. 그러므로 가급적 표준SQL 로 작성하자.

위의 예제를 조금만 바꿔보겠다.

with man as (
    select 'A' as blood, '홍길동' as name from dual union all
    select 'A', '이차돌' from dual union all
    select 'AB', '박호신' from dual union all
    select 'AB', '차명수' from dual union all
    select 'O', '유재석' from dual union all
    select 'B', '정준하' from dual union all
    select 'A', '하하' from dual union all
    select 'B', '엄태웅' from dual union all
    select 'O', '이승기' from dual union all
    select 'A', '이수근' from dual union all
    select 'AB', '이특' from dual),
  woman as (
    select 'A' as blood, '김태연' as name from dual union all
    select 'A', '이소라' from dual union all
    select 'B', '박신애' from dual union all
    select 'AB', '차소연' from dual)
select A.*, B.*
from man A
  left join woman B
    on A.blood = B.blood
order by A.blood, A.name, B.name

결과는 다음과 같다.

A    이수근    A    김태연
A    이수근    A    이소라
A    이차돌    A    김태연
A    이차돌    A    이소라
A    하하    A    김태연
A    하하    A    이소라
A    홍길동    A    김태연
A    홍길동    A    이소라
AB    박호신    AB    차소연
AB    이특    AB    차소연
AB    차명수    AB    차소연
B    엄태웅    B    박신애
B    정준하    B    박신애
O    유재석       
O    이승기       

join 과 달리 유재석과 이승기의 이름이 등장했다. 그런데 옆에 여자가 없다.
그렇다. left join 은 왼쪽을 기준으로 오른쪽의 값을 붙여주되, 값이 없으면 null 로 표시를 하는 것이다. 그러므로 왼쪽의 값들은 모두 등장을 하는 것이다.
그럼 반대로 여자를 기준으로 남자를 붙이면?

with man as (
    select 'A' as blood, '홍길동' as name from dual union all
    select 'A', '이차돌' from dual union all
    select 'AB', '박호신' from dual union all
    select 'AB', '차명수' from dual union all
    select 'O', '유재석' from dual union all
    select 'B', '정준하' from dual union all
    select 'A', '하하' from dual union all
    select 'B', '엄태웅' from dual union all
    select 'O', '이승기' from dual union all
    select 'A', '이수근' from dual union all
    select 'AB', '이특' from dual),
  woman as (
    select 'A' as blood, '김태연' as name from dual union all
    select 'A', '이소라' from dual union all
    select 'B', '박신애' from dual union all
    select 'AB', '차소연' from dual)
select A.*, B.*
from woman A
  left join man B
    on A.blood = B.blood
order by A.blood, A.name, B.name

결과는 다음과 같다.

A    김태연    A    이수근
A    김태연    A    이차돌
A    김태연    A    하하
A    김태연    A    홍길동
A    이소라    A    이수근
A    이소라    A    이차돌
A    이소라    A    하하
A    이소라    A    홍길동
AB    차소연    AB    박호신
AB    차소연    AB    이특
AB    차소연    AB    차명수
B    박신애    B    엄태웅
B    박신애    B    정준하

역시나 유재석과 이승기의 이름이 사라졌다. 기준이 되는 여자 테이블에 O 형이 없기 때문에 붙을 곳이 없어서이다.

이렇게 outer join 은 기준이 되는 것에게 값을 붙여준다고 생각하면 편할 것이다. 그래서 사실 outer join 은 두 개의 테이블이 1:1 혹은 1:0 인 값들이 존재할 때 많이 쓰이게 되는 것 같다.

join 과의 가장 큰 차이는 기준이 되는 테이블의 값은 어쨌든 다 나온다는 것! 그것을 명심하면 되겠다.

개인적으로 DBMS 접속 시 사용하는 프로그램

Oracle에 접속할땐 SQL Developer를 쓴다. 예전에 유니코드 문자를 제대로 표현하지 못한 Toad와 Orange 등을 쓰다 너무 불편해서 유니코드를 문제없이 지원하던 SQL Developer를 쓰기 시작하면서 무겁고 느려도 그냥 쓴다. 게다가 공짜...64bit OS도 문제없이 지원. 왜냐하면 Java 기반이니까...

MS SQL Server 접속시에는 그냥  SQL Server Management Studio 쓴다. MS 에서 Express Edition 를 무료로 배포하면서 관리툴로 무료버젼을 같이 배포한다. 예전에 잠시 EMS 쓸 때도 있었는데, 상용인지라...그냥 무료 버젼인 이 놈을 쓴다. 근데 기능은 막강한 편.

MySQL 에서는 HeidiSQL 을 쓴다. 기능은 막강하지 않지만 한글 쓰기도 나름 잘 지원하고,Query 창에서도 내가 원하는 형태대로 잘 지원이 된다. 유니코드 문자도 잘 보이고...GPL 로 된 프로그램이라 소스도 공개되어 있고 회사에서도 역시 무료! 요즘엔 MS SQL Server 도 지원하는 것 같다. 안써봤지만...

2012년 2월 13일 월요일

Excel 통합 문서 공유

엑셀에는 통합 문서 공유 기능을 통해 하나의 엑셀 파일을 여러 명이 동시에 수정할 수 있다. 물론 이 기능은 기본적으로 꺼져있다.

Excel 2003 에서는,



1. 도구 > 통합 문서 공유 메뉴를 선택한다.




2.  편집에서 공유 기능이 꺼져있음을 확인한다.




3.  공유 기능을 체크하여 공유 기능 활성화한다.




4.  고급 책갈피에서 자세한 설정을 변경할 수 있다.




5.  상단 파일명 옆에 공유 기능이 활성화가 된 것을 확인한다.




2012년 1월 6일 금요일

HttpClient 를 이용한 POST 방식의 첨부파일 전송

일단, Apache 재단의 위대함을 찬양함!!!

Apache 에서는 우리에게 일용할 수많은 프로그램과 라이브러리를 제공해 주시는데, 그 중에 HttpClient 도 존재한다. 이 라이브러리는 Java 코드에서 HTTP 프로토콜로 GET 혹은 POST 로 값을 전송할 때 유용하다.

그런데 파일을 포함한 전송(enctype을 파일전송으로 세팅해서 보내고 싶을 때)의 경우 예전 방식으로 설명된 것이 대부분이라...해당 method 들이 폐기예정 상태가 되어 보기가 싫다. 난 밑줄 그어진 method 는 싫어요~~~

그래서 아래와 같이 구현하면 된다.

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;

...
...
...

File testFile1 = new File()

...
...
...

HttpClient client = new HttpClient();
PostMethod post = new PostMethod(url);

Part[] parts = { new StringPart("test1", "testValue1"), new FilePart("test2", testFile1) };

post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams()));

try {

    int status = client.executeMethod(post);

    if (status == HttpStatus.SC_OK) {

        // 전송 성공(200)

    } else {

        // 전송 실패

    }

} finally {

    post.releaseConnection();

}

참 쉽죠잉~~~(쉽긴 개뿔...-_-);

요점은...기존과 달리 일반 PostMethod 로 만든 뒤 Part[] 를 이용해서 일반값와 이진값을 파트로 만들어서 request entity(요청 요소 쯤 되려나)에 실어서 보낸다는 것이다.



참고할 사람들은 참고해주시고, 퍼가지 마시고...퍼가더라도 출처와 링크는 정확히 걸어주세요~