" 프로그래밍(으)로 태그된 글들"
페이지:«123»

[ruby] ruby 몰입교육중…

2008-05-14   //   alexken작성   //   기술  //  No Comments

회사 업무에, 용도에 따라 주로 다양한 언어를 사용하지만, 한번 쓰고 말거나, 간단한 처리는 주로 perl을 이용한다. 주로 하는 일이 UI가 필요없고, 주로 Unix환경인데다가, text처리가 대부분이라 regula expression 이 강력해서 perl이야 말로 아주 적격이다.

ruby란 언어를 처음 접한건 1999년도 일본서 공부할때다. 자연어처리 연구실이라 그곳 역서 text처리가 대부분이다. ruby 공부하던 인간도 몇 있었지만, 그저 취미 일뿐, 실용적인 측면에서는 그 연구실 조차 perl이었다. 그래서 나도 perl을 그곳에서 배우기 시작했다. Unix + Emacs + Perl.

그랬던 ruby가 몇년 전 부터 하도 유행이라, 나도 공부해 보고 업무에도 적용해 보고 싶었지만, 팀에 초 고수 perl 본좌가 2명이나(noise & gogma) 있는 바람에 혼자서만 ruby코드를 양산할 수 없어서, 나도 친숙하고 모두가 다 아는 perl 이 주종이었다.

최근에 이 둘을 꼬셔서 루비 공부 시작…

꼬시는데 뭐 어려운거 없었다. 황대산 님의 20분짜리 가이드한번 보여줬더니 바로 루비 광신도로 변신…

회사 도서관에 있는 ‘Programming Ruby’를 죄다 빌려다 모두 공부 중.

근데 도대체 대충 읽을 수가 없다.

한줄 한줄 의미를 곱씹으니 아주 오묘하다는 것. 특히 문법 설계가 아주 예술이다.

예전에 신군이랑 메신저로 잠깐 나눴던, Code Block이랑 Meta Programming이 왜 필요한지 왜 써야 하는지 이해가 가지 않았는데, 이것참 물건이다.

당분간 루비 얘기로 블로그가 도배될꺼 같다.

Mac에서 시리얼 로그 보기

2008-03-05   //   alexken작성   //   기술  //  No Comments

21세기인 지금에도 많은 기계들이 시리얼 포트를 사용하고 있다.

TV나 STB같은 경우는, AS나 디버깅 용으로, 그리고 많은 천체장비들은 아직도 시리얼통신이 주가 아닌가 싶다.

업무상 TV의 시리얼 로그를 봐야하는 경우가 종종 있는데….

맥에서는 여태까지 어떤 프로그램으로 해야 하는지 몰랐는데.

일단 Windows에서는 TeraTerm을 많이 사용하는거 같은데 Mac용으로는 어떤프로그램으로 보는지 몰랐다.

시리얼 로그를 보는 프로그램으로는

  • Minicom
  • Zterm
  • Screen

이 있고

minicom이 가장 낳아 보였고, 간결함은 screen이 압도적인거 같다. 심지어 screen은 설치도 필요없이 기본 내장이다.

Mac에 시리얼 포트가 없으므로 USB2Serial 젠더로 연결하고 해당 드라이버를 설치하면 /dev/tty.usbserialXXXX 라는 디바이스가 보일 것이고

$screen /dev/tty.usbserialXXXX 9600

[java] reflect on java

2007-11-13   //   alexken작성   //   기술  //  No Comments

회사서 Class를 조사할 일이 있는데 reflect를 까먹어서 한동안 googling 해서 다시 학습…

java.lang.String의 method를 출력하는 루틴의 골자만 요약하면….

import java.lang.reflect.*;

public class ClassExam{

    public void printClassInfo(String className){
        try{
            Class a = this.getClass().getClassLoader().loadClass(className);
            Method[] methods = a.getDeclaredMethods();
            for(int i=0; i<methods.length; i++){
                System.out.println(methods[i].toString());
            }       
        }catch(Exception e){
        }
    }

    public static void main(String[] args){
        ClassExam a = new ClassExam();
        a.printClassInfo("java.lang.String");
    }
}

IE7, FireFox, Safari 에서 블로그 검색을 쉽게 하기

2007-03-15   //   alexken작성   //   기술  //  1 Comment
하늘의 닷넷의 검색 메뉴

어느 블로그나 검색 메뉴가 있다. 나의 경우는 show menu를 누르면 사이드 바가 뜨고 검색 메뉴가 있다. 혹은 사전을 위해서 dic.naver.com을 찾아가거나 한다. 매번 해당 블로그나 사이트에 가서 메뉴가 있는 곳 까지 찾아 가서 검색을 하는게 가끔 번거러울 때가 있다. 이를 좀더 쉽게 해보자.

Safari

safari

MacOSX의 사파리의 경우에는 예전부터 sogudi라는 플러그인이 있어서, 이미 잘 사용하고 있었다. safari에 sogudi를 설치하면 다음과 같은 설정창에서 hanury -> https://hanury.net/wp/index.php?s=@@@ 와 같이 검색할 파라미터를 @@@로 해서 검색 URL을 입력해 두면, 주소창에 URL 형태가 아닌 “hanury 검색어” 처럼 입력하면 @@@를 검색어로 치환해 주는 플러그인이다. 이를 이용해서, 영어 사전은 eng, 이미지 검색은 img 등으로 설정해서 편하게 사용해 왔다. 나에겐 MacOS 설치시 필수 항목으로 자리잡았다.sogudi 단점은 주소를 UTF-8으로 보내기 때문에 국내 사이트중 대부분이 KSC-5601_1987로만 받아서 깨지는 경우가 많다. Naver도 그중 하나이다.

OpenSearch이런 와중에 OpenSearch에서 이런 부분을 xml 스키마 형태로 표준화 했고, IE7과 FireFox가 지원하기 시작했다.

FireFox

FireFox

ff-search1.png

OpenSearch에서 정의한 대로 Search Provider XML을 작성해서 searchplugins 폴더에 놔 두면 된다. MacOSX용 FF의 경우라면 Package 내 Contents/MacOS/searchplugins/ 에 해당한다.

직접 편집하는 만큼 자유도가 높다. 재밌는건 아이콘을 넣을려면, Base64로 인코딩 된 스트링을 알아야 하는데, 내 경우에는 아이콘 파일을 나한테 보내서 메일 메시지의 [본문 원본보기] 로 알아냈다. (아마 더 낳은 방법이 있을거 같은데…. 암튼.)

또 다른 방법으로 [검색 사이트 관리…] – [추가할 검색사이트 찾기]를 눌러보면 다른 사용자들이 올려놓은 사전등의 SearchProvider 들이 등록되어 있다. 입맛에 맞게 골라 쓰면 된다.

OpenSearch 용 XML내용은 대략 다음과 같다.


   Hanury
   Hanury.NET Search
   UTF-8
   data:image/ico;base64,Qk04AgAAAAAAADY
         AAAAoAAAAEAAAABAAAAABABAAAAAAAAICAAASCwAAEgsAAAAAAAAAAA
         AATlpvYm9mTmLTahRvsG7RbvJu8m7RDlYOUpNeem+8c5xze284Z5FW5Vk
         Wa753e284Z+tVhlVGUQRF4zwFOQ5Km3Obb/Veb1LDVa9 ...
   
   
      
   
   https://hanury.net/wp

IE 7

IE 7

ie-search.png

Microsoft IE7 도 OpenSearch 표준에 참가해서 IE 7 부터 FF 와 같은 방식의 SearchProvider를 제공한다. FF와 같은 표준을 구현하였기에 대략 비슷하지만 각각 차이가 있다.

  • FF가 icon을 제공하는데 반해 IE는 제공하지 않는다.
  • FF, IE 모두 남들(혹은 서비스 제공자)가 만들어 준 SearchProvider를 쉽게 추가할수 있다.
  • 하지만 IE에 좀더 후한 점수를 주고 싶은 건 [Find more Provider] – [직접 만들기] 기능이다. naver 사전이나, 가격 검색 등은 남들이 만들어 주겠지만, 나만을 위한 SearchProvider는 제공 받을리 만무 하다. 이럴때 FF는 내가 직접 XML을 편집해서 만들 수 있지만, xml 편집 조차 부담스러워 하는 사람들에게는 IE의 [직접 만들기] 기능은 상당히 매력적이다.
  • sogudi와 비교해서는 추가 설치하지 않아도 된다는 점
  • sogudi가 UTF-8만 지원하는데 반해, [직접만들기]-[여기를 클릭]을 누르면 입력 옵션이 더 늘어서 인코딩 등을 추가 설정해 줄수 있다.(국내 사이트를 위해서 중요하다.)
직접 만들기

safari의 sogudi의 @@@ 처럼 검색어를 대문자 TEST로 해서 입력하고, 이름을 입력하고 바로 밑에 있는 [설치] 단추를 누르면 끝. 한동안 시장 점유율만 믿고, IE6에서 개발을 한동안 중단했던 거만함도, MS가 몇년전부터 노래부르던 UX를 위해 IE7을 통해, 그동안 아쉬웠던, TabBrowsing, RSS 지원, OpenSearch 등등 긍정적인 방향으로 나아가는거 같다.

본인의 경우는 각종 사전류, 회사 프로젝트에 사용하는 trac, 그리고 내 블로그 검색 용으로 개인용 SearchProvider를 만들어 사용하고 있다.

Mac 용 Java program 만들기??

2007-03-13   //   alexken작성   //   기술  //  1 Comment

Hello.java 가 있다고 하면

$javac Hello.java

로 컴파일 가능하다.

jar로 묶기 위해서 manifest.mf 파일을 만들고 안에 Main-Class: Hello 라고 public static void main(String[] args)을 포함한 시작 클래스를 적어둔다.

$jar cvfm hello.jar manifest.mf Hello.class

를 실행하면 여러 파일을 묶을수도 있고, 압축도 해주며 java -jar 로 실행도 가능하다. 여기까지는 일반 jar 만들기 이고…

xmlviewer.png

허접하지만 내가 만든 Xml Viewer이다. xml 파일을 끌어다 속성창에 떨어뜨리면 swing tree 보기로 보여주는데, exception 처리를 거의 하지 않아 외부 entity나, dtd를 참조하거나 하면 여지없이 exception 발생 암튼 본인 업무상 쓸일이 있어서 만들었다.

일반 macosx용 응용프로그램 처럼 보이지만 패키지 보기로 보면 jar로 묶인 자바 프로그램이란 걸 알 수 있다.

일반 macosx용 응용 프로그램 처럼 더블클릭으로 수행되며, 독에 포함 할 수도 있다.

info.png

ANT를 사용한다면 sorceforge에서 JarBundler라는 Task로 제공되어 쉽게 jar를 mac App로 만들어 주나 본데, 패키지 않에 있는 inpo.plist만 수정해주면 금망 jar로 mac App로 변신 가능 스크린 샷에서 처럼 Root-Java-

• Arguments • ClassPath • JVMVersion • MainClass

이정도 값만 세팅해주면 끝. 자세한 내용은 Apple Dev 페이지에…

메시에 페이지 Ajax 도입

2007-02-17   //   alexken작성   //   기술, 천문  //  1 Comment

메뉴에서 [astro] 에 가서 [메시에]를 클릭하면 그냥 [메시에]가 있고, [메시에(Ajax)]라는게 지금 일시적으로 보인다.

비록 두 메뉴를 아무리 클릭해봤자 똑같이 보일 뿐이지만, 메뉴 이름 그대로 ajax를 도입한 쪽이 좀더 빠르게 느껴지고 반응이 신속하게 보일거다.

원래 https://hanury.net/wp/astro/messier?xsl=# 와 같이 xsl 번호를 GET으로 php를 넘겨주면 messier.php 페이지는 xml을 가져와서 xslt를 적용해서 html로 변환하고 클라이언트에게 넘긴다. 이 동안 클라이언트는 먹통이 된다. 그리고 새로 가져온 페이지는 전체 리로드 하게 되어 화면이 한번 꿈뻑하게 된다.

하지만 [메시에(Ajax)] 페이지는 전체 리로딩 없이 아래 표시한 데이터 영역만 치환될뿐 페이지는 리로드 되지 않는다. 페이지 내에서 생성한 XMLHttpRequest가 계속 서버랑 통신 할 뿐이다.

다음과 같이 요즌 뜬다는 ajax 스타일로 변경하였다.

  1. 그래서 messier.php에서 xml을 가져와서 xslt를 적용해서 html로 변환하는 부분을 다른 php로 뽑아내고
  2. 컨텐트 부분에 &t;div id=”messier”>를 삽입하고
  3. 링크를 누르면 getMessier를 부르고 그 안에서 sendRequest를 다시 부르는데
    function getMessier(n){
        sendRequest(on_loaded, '&xsl='+n, 'GET', 
                    '/scripts/messier.php', true,true );
    }
    
            XMLHttpRequest 내장객체를 생성해서 1에서 따로 뽑아주었다는 php로 렌더링할 xslt정보와 함께 GET으로 호출
            이후 서버의 응답을 기다리는게 아니라
  4. if(obj.readyState == 4 ){ on_loaded(obj); } Ajax의 A가 Asyncrous 이듯, onload 상태가 되었을때 수행할 callback 함수만 지정하고 다음 일을 계속 할수 있다. 물론 막간을 이용해서 anymated gif로 진행중임을 표시해주는 센스가 있으면 좋겠지만 난 그냥 귀찮아서 아무것도 안해줌. 그래도 마우스 휠 조자 안 먹는 상태보다는 낳지 뭐.
    function on_loaded(ob){
        var res = decodeURIComponent(ob.responseText);
        document.getElementById('messier').innerHTML = res;
    }
    
  5. 서버에서 처리가 다 되면 호출 했던 XMLHttpRequest가 서버로 부터 응답을 받고
  6. callback함수로 지정한 on_loaded함수가 호출 되고
  7. 이 함수는
    의 innerHTML에 서버로 부터 받은 결과를 써 넣어준다.

복잡해 보이지만, 실제 코딩량도 별로 없고, 훨씬 직관적인거 같다. 어느정도 더 다듬어 지면 그냥 버전을 ajax 버전으로 통합해 버려야 겠다.

[perl]콜라츠 추측(3n+1)

2007-01-10   //   alexken작성   //   기술  //  No Comments
콜라츠 추측 (Collatz conjecture)은 1937년에 처음으로 이 추측을 제기한 로타르 콜라츠의 이름을 딴 것으로 3n+1 추측, 울람 추측, 혹은 헤일스톤(우박) 수열 등 여러 이름으로 불린다. 콜라츠 추측은 임의의 자연수가 다음 조작을 거쳐 항상 1이 된다는 추측이다. 짝수라면 2로 나눈다. 홀수라면 3을 곱하고 1을 더한다. 1이면 조작을 멈추고, 1이 아니면 첫 번째 단계로 돌아간다.

무지 간단해 보이는 데 타이틀 까지 건 이유가 뭔지 궁금해 호기심에서 짜 보았다. 게다가 정말 간단해 보이는데 이문제가 NP 문제라는게 더욱이 그러했다.

내가 짠 perl code는 이렇다. (짜는데야 타이핑 시간 1분여가 소요되었지만, 원 문제를 곱씹어 보면서 영어 해석하는데 좀 시간이 걸렸다. 쉽다고 댐볐지만, 내용의 깊이는 그리 간단한게 아니었다.)

#!/usr/bin/perl
use strict;

sub three_n_plus_one($){
    my ($n) = @_;
    print $n . " ";
    exit 0 if $n == 1;

    if($n % 2 == 1){
        three_n_plus_one(3 * $n + 1);
    }else{
        three_n_plus_one( $n / 2 );
    }
}

sub main(){
    three_n_plus_one(22);
}

main();

문제의 특징은:

  • 가정: 자연수를 주면 반드시 끝난다.
  • 간단해 보이는 알고리즘에도 불구하고, 이 가정이 사실인지는 알려져있지 않다.(아직은??? 영원히…)
  • 0

이정도???….

여러 숫자를 넣어 보니, 원 글에서 처럼, … 5 16 8 4 2 1 로 수렴하며 끝나긴 끝났다.

참고로, 입력이 1,000,000,000,000,000였을 때 결과는

더 보기 >>

Perl에서 Getopt::Std 사용하기

2006-08-30   //   alexken작성   //   기술  //  No Comments

Unix스타일의 프로그램 파라미터 처리를 해주는 모듈이 Getopt인데 자주 사용하다 보니 codesnipet으로 사용하려고, 내가 사용하는 템플릿을 여기에 등록해 둔다.

main::HELP_MESSAGE(), main::VERSION_MESSAGE()

를 구현해 두면 – -help, – -version 옵션에 반응하고, getopts(c:hv)에 사용할 옵션들을 나열하면 된다. 위 예에서 c뒤에 : 의 의미는 파라미터를 받는 다는 의미이다. 입력된 파라미터는 $Getopt::Std::opt_c로 사용할 수 있다.

#!/usr/bin/perl
# vim: set sw=4 ts=4 si et nu:

use strict;
use Getopt::Std;

########################################################
# Global settings
########################################################
$Getopt::Std::STANDARD_HELP_VERSION = 1;

sub main::VERSION_MESSAGE(){
    print "$0 Version 0.5  hyeonkwen@gmail.com";
}

sub main::HELP_MESSAGE(){
    print <<END;
Description of this program.
Usage: $0 OPTION DIRECTORY

OPTION
    -c             description of c option
    -h             view help message
    -v             view version information
END
}

########################################################
# main()
########################################################

sub main(){
    if(!getopts("c:hv") || $Getopt::Std::opt_h){
        main::HELP_MESSAGE();
        exit;
    }elsif($Getopt::Std::opt_v){
        main::VERSION_MESSAGE();
        exit;
    }
}

main();
페이지:«123»