Eclipse RCP 로 무언가를 만들어보려는데, 콘솔에 출력되는 내용 (System.out 으로 출력되는 내용)을 UI 에 표시하는 기능이 필요했다. 이미 Eclipse 에 Console 뷰가 있으므로 이걸 써먹기 위해 인터넷을 열심히 뒤진 결과 쓰는 방법을 알아냈다.
아래 예제는 특정 뷰에서 텍스트를 System.out 에 출력하면 그 내용이 Console 뷰에 보이게 하는 프로그램이다.
  1. rcp 프로젝트를 만든 후 플러그인 설정 파일 편집화면에서  dependencies 에 org.eclipse.ui.console 을 추가한다.
  2. 타겟 RCP 의 plugins 디렉토리에 아래의 플러그인 파일이 있는지 보고 없으면 다른 곳에서 복사해 넣는다. (Eclipse 에는 포함되어 있다.)
    • org.eclipse.ui.console
    • org.eclipse.jface.text
    • org.eclipse.core.variables
    • org.eclipse.text
    • org.eclipse.ui.workbench.texteditor
  3. IPerspectiveFactory 구현클래스를 아래처럼 만든다.
    import java.io.PrintStream;

    import org.eclipse.ui.IPageLayout;
    import org.eclipse.ui.IPerspectiveFactory;
    import org.eclipse.ui.console.ConsolePlugin;
    import org.eclipse.ui.console.IConsole;
    import org.eclipse.ui.console.IConsoleConstants;
    import org.eclipse.ui.console.MessageConsole;
    import org.eclipse.ui.console.MessageConsoleStream;

    public class Perspective implements IPerspectiveFactory {

        public void createInitialLayout(IPageLayout layout) {
            MessageConsole console = new MessageConsole("Console" , null) ;
            ConsolePlugin.getDefault().getConsoleManager()
                           .addConsoles(new IConsole[]{
    console});
            MessageConsoleStream stream = console.newMessageStream();
           
            PrintStream myS = new PrintStream(stream);
            System.setOut(myS);
            System.setErr(myS);

            String editorArea = layout.getEditorArea();
            layout.setEditorAreaVisible(false);
            layout.setFixed(false);
           
            layout.addView(InputBox.ID,   IPageLayout.LEFT, 1.0f, editorArea);
            layout.addView(IConsoleConstants.ID_CONSOLE_VIEW, 
                                      IPageLayout.BOTTOM, 0.4f, InputBox.ID);

        }
    }
  4. 텍스트를 입력할 수 있는 간단한 뷰를 만든다.
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.SelectionAdapter;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.layout.FillLayout;
    import org.eclipse.swt.widgets.Button;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Text;
    import org.eclipse.ui.part.ViewPart;

    public class InputBox extends ViewPart {
        public static final String ID = "test.consoleview.view";

        private Text text;

        public void createPartControl(Composite parent) {
            Composite panel = new Composite(parent, SWT.NONE);
            panel.setLayout(new FillLayout());
            this.text = new Text(panel, SWT.MULTI);
            Button btn = new Button(panel, SWT.PUSH);
            btn.setText("click !!!");
            btn.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetDefaultSelected(SelectionEvent e) {
                    printString();
                }
                @Override
                public void widgetSelected(SelectionEvent e) {
                    printString();
                }
                private void printString() {
                    System.out.println(text.getText());
                    text.setText("");
                }
            });
        }

        public void setFocus() {
            this.text.setFocus();
        }
    }
  5. Overview 페이지의  Launch an Eclipse Application 링크를 클릭하여 실행시켜본다.
  6. 잘 안되면 Run 메뉴의 Run Configurations 의 해당 항목의 Plug-ins 탭에서 Add Required Plug-ins 버튼을 클릭하고 다시 실행해본다.
  7. 이래도 안 될 경우 Validate Plug-ins 버튼을 클릭하여 필요한 플러그인이 모두 있는지 확인한다.
정상적인 경우 아래와 비슷한 창이 뜰 것이다. 위쪽 텍스트 박스에 입력후 버튼을 누르면 아래쪽 Console 뷰에 내용이 출력된다.

다만 아쉬운 것은 Eclipse 에서는 System.err 에 출력되는 것은 빨간색으로 표시되는데, 내가 테스트해본 바로는 System.err 에 출력해도 검은색 글자로 표시된다. 뭔가 바꾸는 방법이 있겠지만 귀찮아서...

  참고한 곳 : http://jprog.blogspot.com/2005/09/using-eclipse-console-view-in-rcp.html

Posted by lispholic
,

드리밍 인 코드 출간

기타 2008. 12. 31. 23:35
에이콘에서 특이한 책이 출간되었다. chandler project 의 역사(?)를 기록한 책인듯 한데, 문제는 chandler project 는 성공한 프로젝트가 아니라는 것이다.

chandler project 는 원래 원대한 목표를 가지고 뛰어난 사람들이 많이 참여한 프로젝트였지만 성공하지는 못했다. (인터넷 검색을 해보니 대부분 부정적인 이야기뿐...) 그런데 홈페이지도 상당히 번듯하게 있고 릴리즈된 결과물도 있고 현재도 꾸준히 개발되고 있는듯 보이는, 뭔가 이상한 프로젝트이다.

그냥 홈페이지 내용을 둘러봤을 때는 꽤 괜찮은 프로그램인 것 같은데 왜 실패했다는 이야기가 나올까? 그리고 실패한 프로젝트에 대한 이야기가 어떻게 출판될 수 있었을까?  에이콘은 이 책의 부제에 왜 '천국'이라는 단어를 넣었을까? (지옥은 이해가 된다.)


이 책 출간 소식을 통해서 chandler project 를 처음 알게 되었는데, 정보를 수집하면 할수록 궁금증만 커진다. 

책정보 보러가기
블로그 글 보러가기
Posted by lispholic
,
지난달에 nvidia에서 vdpau 라는 리눅스용 hd 가속 기능을 공개했다. (ms window 의 purevideo 와 같은 것으로 보면 될듯.)

http://www.phoronix.com/scan.php?page=article&item=nvidia_180_vdpau&num=1
http://en.wikipedia.org/wiki/VDPAU

mplayer 패치까지 함께 공개해서 mplayer 에서 이 기능을 써 볼 수 있다. (현재는 Xine , VLC , MythTV 등 다른 동영상 플레이어에서도 이 기능을 쓸 수 있다.)


설치방법
  1. ftp://download.nvidia.com/XFree86/Linux-x86/180.18/NVIDIA-Linux-x86-180.18-pkg1.run 를 다운받아 설치한다.
  2. subversion , gcc , make 등 소스를 받아서 컴파일하는데 필요한 프로그램을 설치한다.
  3. ftp://download.nvidia.com/XFree86/vdpau/mplayer-vdpau-3263604.tar.bz2 를 다운받아 압축을 푼다.
  4. gcc 버전이 4.3.2 인 경우 압축을 푼 디렉토리안의 checkout-patch-build.sh 파일의 ./configure 의 바로 위에 아래 내용을 추가한다.
       export CHOST="i686-pc-linux-gnu"
       export CFLAGS="-O3 -pipe -fomit-frame-pointer"
       export CXXFLAGS="${CFLAGS}"
  5. ./configure 에 자신이 필요한 옵션을 추가한다. (--language=ko 등 )
  6. 경건한 마음으로 checkout-patch-build.sh 를 실행시킨다.
  7. 빌드가 문제없이 끝났으면 make install 명령으로 설치한다.
  8. $HOME/.mplayer/codecs.conf 파일이 있으면 다른이름으로 바꾸어 놓는다.
  9. README.txt 파일에 나오는 샘플 동영상을 돌려보고 동영상 가속기능이 잘되면 마구 기뻐한다.
    http://samples.mplayerhq.hu.nyud.net/V-codecs/h264/PAFF/Grey.ts
    ./mplayer -vo vdpau -vc ffh264vdpau Grey.ts
                 
    http://samples.mplayerhq.hu.nyud.net/V-codecs/h264/nature_704x576_25Hz_1500kbits.h264
    ./mplayer -vo vdpau -vc ffh264vdpau nature_704x576_25Hz_1500kbits.h264

내 경우 vdpau 기능을 쓰지 않으면 cpu 점유율이 대략 20% 정도 나오는데 vdpau 를 쓰면 3% 이하로 떨어진다.

주의할 점은 geforce8xxx 부터 이 기능을 쓸 수 있다는 것이다. 그나마 8xxx 대는 vc1 가속기능은 제대로 안된다. 앞으로 드라이버가 좀더 안정화되면 제대로 지원될 것 같다.



Posted by lispholic
,