Monday, May 18, 2009

[정보공유] FireFox의 BookMark 기능을 이용하여 일본어페이지 바로 번역해 보기

원리를 지금까지 설명하지 않았는데
안에 %s 는 파이어폭스가 뒤에 파라메터로 받아서 자동으로 바꾸어서 URL을 Query함

북마크 등록정보
Name : google translate web japanese->korean
Location : http://translate.google.com/translate?js=n&prev=_t&hl=en&ie=UTF-8&u=%s&sl=ja&tl=ko&history_state0=
keyword : jako
테스트용 페이지 : http://www.wowkorea.jp

어제 와이프가 구약소 유치원 지원금 페이지를 보느라 애쓰는 걸 보고 생각해냄.
일본어 페이지를 보고 주소창에 앞에 'jako '라고 덧붙여 주면 됨.


[추가 정보공유] 다음과 같이 등록하면 중국어 페이지도 금방 번역해 볼 수 있음.
Name : google translate web chinese->korean
Location : http://translate.google.com/translate?js=n&prev=_t&hl=en&ie=UTF-8&u=%s&sl=zh-CN&tl=ko&history_state0=
keyword : chko
테스트용 페이지 : http://baike.baidu.com/view/29.htm

이상.

[정보공유] FireFox의 BookMark 기능을 이용하여 영어사전 바로보기

Name : Google Dictionary : %s in Korean
Location : http://www.google.com/dictionary?aq=f&langpair=ko%7Cen&q=%s&hl=en
Keyword : eng

이후 FireFox의 Address 입력창에 다음과 같이 입력하면 해당 단어가 번역되어 나옴.

eng school
eng 학교

이상.

[정보공유] 파일업로드 하는 폼을 강제로 파일아닌 일반데이타만 전송하게 하고 싶을 때의 enctype 지정

[정보공유] 파일업로드 하는 폼을 강제로 파일아닌 일반데이타만 전송하게 하고 싶을 때의 enctype 지정

다 알고 있겠지만, 찾으려면 또 까먹어서 -_-;

파일업로드하는 form이어서
ENCTYPE = "multipart/form-data" 했는데,

자바스크립트로 일반데이타 전송하도록 하게 할 때.

ENCTYPE = "application/x-www-form-urlencoded"

로 강제 enctype 지정

http://www.htmlcodetutorial.com/forms/_FORM_ENCTYPE.html

이상.

Sunday, May 17, 2009

[정보공유] FireFox의 BookMark 기능을 이용하여 JDK API 바로보기

FireFox의 BookMark 기능을 이용하여 JDK API 바로보기..

Name : api doc(Java Platform SE 6)
Location : http://www.google.co.kr/search?complete=1&hl=ko&q=site%3Ajava.sun.com%2Fjavase%2F6%2Fdocs%2Fapi+%s&btnI=I%27m+Feeling+Lucky&lr=&aq=f
Keyword : jdk6


이렇게 하고 FireFox의 Address 입력창에
jdk6 Socket
이라고 하면 Socket의 API가 뜸.

원리는
구글의 site: 옵션으로 검색 URL을 제한하고
구글의 I'm Feeling Lucky를 이용해 제일 첫 검색URL을 바로 보게 하는 것

이상.

Saturday, May 16, 2009

perl로 만드는 win util / wget.pl

■ wget.pl
#!/usr/bin/perl -w
use LWP::Simple;
@ARGV == 2
? (getstore($ARGV[0], $ARGV[1]) || die "Cant Download File: $!\n" )
: print "wget.pl to get html";
print @! unless @!;

사용방법은 다음과 같습니다.

C:\>wget.pl http://www.wowkorea.jp/images/logo_wowkorea.gif wowkorea.gif

■ 그러나 저는 wget.pl을 사용하지 않습니다.

리눅스계열 터미널 작업하다가 갑자기 윈도우즈 콘솔에
서 "ls" 라고 명령을 내린 경험이 있으세요?
닷넷 컴파일러 "csc.exe"가 어디에 있는지, "dir /s"로 찾아본 경험이 있으세요?

저는 리눅스 명령어를 win32로 컴파일한 유틸리티를 설치하여 사용하고 있습니다.
cygwin도 사용한 적이 있으나, 자주 사용하는 명령어만 설치하면 되므로 다음의 페이지에서 자주 사용하는 적당한 유틸리티를 다운받아 사용하고 있습니다.

http://gnuwin32.sourceforge.net/packages.html

저는 수동설치를 하지 않고, 자동설치로, 설치되는 곳은 c:\usr\local 로 해서 사용하고 있습니다.
그리고 Path에 c:\usr\local\bin를 등록해 두면 편리합니다.

그러면
C:\usr\local>ls -la 와 같은 명령을 내릴 수 있습니다.


우선은 CoreUtils 과 which, grep(egrep은 grep -E로 사용합니다.) 정도는 설치해 사용하고 있습니다.
그외에도 win32용 vim (지금은 거의 잘 사용하지 않습니다. emeditor를 사용합니다.), apache, tomcat, perl, python, mysql,등은 이쪽 디렉토리에 설치해 사용하고 있습니다.

더 좋은 방법, 정보공유 하시고 싶은 분은 가벼운 마음으로 코멘트 부탁합니다.
m(__)m

perl로 만드는 win util / gdkdoc.pl

perl에는 perldoc이라고 하는 프로그램을 자체로 가지고 있기 때문에 이를 이용하면 콘솔에서 도움말을 볼 수 있습니다.
이 함수는 어떻게 쓰는 거지, 이 패키지는 어떤 함수를 가지고 있지 할 때, 간단하게 살펴볼 수 있으니 매우 편리합니다.

저는 가끔 groovy를 작성합니다. 특별히 프로젝트로 하는 것도 아니지만, 이 groovy, 뭔가 물건이 될 것 같거든요. 작성할 때는 일반 에디터(emeditor)를 사용합니다. eclipse나, IDEA를 사용해서 작성하려면 너무 무거운 느낌이에요. 웹에서 발견한 어떤 샘플을 돌려보는데, 자바프로젝트를 진행하고 있지도 않으니 eclipse라던 지를 실행시키는 데만도 시간이 걸리죠. 그래서 간단히 작성하는, 늘 띄워져 있는 emeditor로 작성합니다.

도움말은 브라우저를 사용하죠. 그런데 perldoc처럼 콘솔에서 볼 수 있는 도움말이 있으면 좋겠다고 생각해 봤습니다. 그래서 작성해 봤습니다.

아이디어는 한번에 도움말 페이지를 가져오도록 site: 옵션을 주어 google의 검색에서 사이트를 groovy.codehaus.org%2Fgroovy-jdk 로 하고, 아마도(!) 가장 위에 있는 아이템이 api 도움말일 것이라고 생각해 구글의 "I'm feeling lucky"으로 바로 열도록 했습니다.

이때 조금 헤맸는데, 코딩해 실행해보니 403을 리턴한다고 하는 것입니다. telnet으로 get으로 request를 보내면 제대로 302 redirect가 받아지는데 말이죠.
해결한 방법은 UserAgent의 설정이었습니다. 소스를 보시죠.

#!perl
use LWP::UserAgent;
use Win32::Console::ANSI;
use Term::ANSIColor;
my $browser = LWP::UserAgent->new;
$browser->agent( 'Mozilla/4.0 (compatible; MSIE 5.12; Mac_PowerPC)' );
my $URL='http://www.google.co.kr/search?complete=1&hl=ko&q=site%3Agroovy.codehaus.org%2Fgroovy-jdk+' . $ARGV[0] . '&btnI=I%27m+Feeling+Lucky&lr=&aq=f';
my $request = HTTP::Request->new;
my $response = $browser->get($URL);
die "Can't get $url -- ", $response->status_line unless $response->is_success;
my $result = $response->content;
$result =~ s/\<[^\>]*\>//g;
$result =~ s/^\s*$>//g;
$result =~ s/\n\n/\n/gm;
$result =~ s/\n\n/\n/gm;
$result =~ s/\n\n/\n/gm;
$result =~ s/(^\(.*\)$)//g;
foreach $line (split "\n", $result) {
if ($line =~ /\(.*\)/) {
print colored( $line, "bold yellow"), "\n";
}
else {
print $line, "\n";
}
}
__END__
Win32::Console::ANSI 는 default가 아니니 인스톨해줘야해요.

보시면 아시겠지만, 괄호가 들어간 라인은 함수의 설명이라고 생각해 노란색으로 표시하게 했습니다. (너무 길어서 "| more"로 보시면 ANSI color값은 없어져 버립니다.)

약 30줄 정도 되는 지저분한 코드입니다만, 그럭저럭 쓸만할 것 같습니다. 좀 더 뼈와 살을 붙이면, 제대로 된 툴이 될 것 같아요. 예를 들면 parameter가 없으면, 클래스 리스트를 보여준다던 지, 리눅스 환경이면 리눅스용 패키지를 use하게 한다던 지 말이죠.




아마 이런 종류의 여러 아류작을 만들 것 같습니다.

Friday, May 15, 2009

perl로 만드는 win util / getprint.pl

최근 Perl을 사용한 작업을 다시하면서, 여러가지 유틸리티를 만들면 좋겠다 라는 아이디어가 떠올라 공유할까 합니다.
굉장히 적은 코드로도 꽤 쓸만한 동작을 하는 유틸리티를 작성할 수 있을 것 같기 때문입니다.

■ perl 실행의 기본.

(1) perl 파일의 실행
activeperl이 설치되어 있다면, 커맨드 프롬프트에서 pl 파일 이름만 써도 바로 실행할 수 있습니다.
예를 들어 다음과 같습니다.

C:\>type test.pl
print "hello";
C:\>test.pl
hello
C:\>

(2) 확장명을 쓰지않고 실행하기
그런데 .pl 까지 쓰지 않고 test 만 입력해서 실행하면 안될까요?
환경변수에 그 내용이 적혀 있습니다.

다음 명령중 하나를 커맨드 프롬프트에서 실행해 보면, 바로 실행할 수 있는 확장자를 볼 수 있습니다.

C:\>set | find "PATHEXT"
C:\>set | find /i "pathext"
C:\>set | find /n /i "pathext"

C:\>set | find "PATHEXT"
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1;.py;.pyw

여기에 다음과 같이 입력하여 확장자가 .pl인 것도 이름만 입력하여도 실행할 수 있게 합니다.

C:\>set PATHEXT=%PATHEXT%;.PL

C:\>test
hello

이때 주의해야할 점은 2가지 인 것 같습니다.
- 실행의 우선순위는 cmd.exe의 내부명령어, 그리고 PATHEXT에 정의된 순서입니다. 만일 dir.pl이 있다면 dir명령은 cmd의 dir명령이 실행됩니다. dir.pl을 실행하려면 확장명까지 다 써줘야 dir.pl이 실행될 것입니다. 또 test.com이 있다면 test.com이 우선권을 가지므로 test.com이 실행될 것입니다.
- 확장명을 떼고 입력해도 실행하게 하는 것은 cmd.exe라는 쉘이 실행할 때 뿐입니다. 만일 totalcmd와 같은 tool에서 바로 test만 실행해서 test.pl을 실행하고 싶다면 그러한 기능을 tool이 지원하지 않는 한, 실행되지 않을 것입니다. (tool이 cmd.exe를 통해서 실행하게 하는 방법은 있습니다.)

(3) 파라메터를 주는 법
기본적인 파라메터를 주는 방법은 다 알고 계실 것입니다. 스페이스로 구분하죠.
그런데 파라메터안에 스페이스를 포함해야하는 경우는 특정 문자로 묶어서 하나의 parameter로 인식하게 해야합니다.

윈도우즈계열에서 이 묶는 문자는 리눅스계열의 것과 약간 다른데,
리눅스계열은 작은따옴표든, 큰따옴표든, 제일 바깥의 것을 pair로 해 parameter로 인식하는 반면,
윈도우계열은 큰 따옴표만을 parameter로 인식합니다.

윈도우즈에서 만일 큰따옴표 안의 parameter안에 큰따옴표를 써야 한다면 역슬래쉬를 붙여 escape화 해주면 됩니다.
이 방법은 리눅스에서도 동일합니다. 즉. 리눅스의 커맨드로 다음과 같은 명령을 본 적이 있다면

perl -MLWP::Simple -e 'getprint "http://www.yaplog.jp"'

윈도우즈에서 실행해보면 다음과 같이 Annoying합니다.
C:\>perl -MLWP::Simple -e 'getprint "http://www.yaplog.jp"'
Can't find string terminator "'" anywhere before EOF at -e line 1.

그래서 윈도우즈에서는 다음과 같이 고쳐서 사용합니다.

C:\>perl -MLWP::Simple -e "getprint \"http://www.yaplog.jp\""

그리고 위 명령은 리눅스계열에서도 잘 동작합니다.

■ getprint.pl
바로 위의 명령을 파일로 해서 간단히 유틸리티를 만들어 두었습니다.
함수명을 파일명과 동일하게 해서 c:\usr\local\bin\getprint.pl 로 저장해 두었습니다.

#!/usr/bin/perl -w
use LWP::Simple;
@ARGV >0 ? getprint $ARGV[0] : print "getprint <url> to get html";

사용방법은 다음과 같습니다.
C:\>getprint http://www.wowkorea.jp
C:\>getprint file:///c:/test.pl


그동안 브라우저를 사용할 수 없는 터미널 환경에서 서버의 작동을 확인할 때
telnet localhost 80
GET / HTTP/1.0<엔터><엔터>

와 같은 방식으로 테스트 했었다면, 이 작은 유틸리티가 쓸모가 있을 것 같습니다.

Tip입니다만, lynx를 사용할 수 있는 환경이면, 다음의 명령도 쓸만합니다.
lynx -dump http://www.wowkorea.jp
lynx -dump -head http://www.wowkorea.jp

■ 혹시 groovy를 사용하세요?
다음 명령을 실행해 보세요
C:\>groovy -e "print \"http://www.wowkorea.jp\".toURL().getText()"