문서를 읽을 때면 (정신을 산만하게 하는) 컴퓨터는 딱 꺼놓고 집중하고 싶지만, 모르는 영어단어를 만날 때 마다 영어사전을 펼치기는 너무나 번거롭다. 그래서 네이버 영어사전을 즐겨사용하는데 이를 모니터에 열어두면 Flash 영상이 정신없이 번쩍이며 집중을 방해한다. 그리하여 찾게 된 파이어폭스 Add-on은 바로 Flashblock. 기능은 매우 간단하다. Flash 부분을 위 처럼 안보이게 해주고 마우스를 가져가서 클릭하면 보이게 할 수 있다. 역시 여타 다른 Add-on 처럼 특정 사이트를 예외처리할 수 있다.
[카테고리:] IT
파이어폭스만 사용하기 (IE Tab)
워낙 깔끔떠는 성격이라서 그런지 몰라도 나는 간결한(?) 형태를 좋아하는 편이다. 컴퓨터에 운영체제를 두개 깔아쓰기 보다는 깔끔하게 하나를 사용하는것을 좋아하고 웹브라우저도 하나만 사용하기를 희망한다. 여러가지 측면에서 웹표준을 지키고 가벼우며 탭브라우징 기능을 제공하는 파이어폭스가 마음에 들었으나 몇몇 몰지각한(?) 국내 사이트들이 웹표준을 지키지 않거나 ActiveX를 사용하는 관계로 익스플로어를 사용할 수 밖에 없을 경우가 빈번하다. 그리하여 어쩔 수 없이 두개를 번갈아 가며 사용하다가 한동안 익스플로어만 사용했는데 영 마뜩치가 않았다.
이런 와중에 우연히 IE View라는 Add-on을 발견하게 되어 설치해보았는데 이는 파이어폭스에서 익스플로러를 따로 실행해주는 기능을 제공하고 있으나 탭브라우징의 극대화 측면에서는 영 마뜩치 않은 방법! 그리하여 찾게 된 것이 바로 IE Tab이라는 Add-on인데 이는 위의 화면처럼 파이어폭스의 탭안에 익스플로러를 로딩해준다. 그림처럼 도구모음에 버튼을 추가해서 사용할 수도 있고 마우스 오른쪽 버튼을 눌렀을 때 나오는 메뉴를 이용해 파이어폭스와 익스플로러를 오갈 수 있다.
익스플로러를 이용해야 원활히 보이는 사이트를 방문할 때 마다 매번 도구모음의 아이콘을 클릭할 수는 없다. 그래서 등록된 사이트에 접근할 때 마다 자동으로 탭안에 익스플로러를 로딩하도록 세팅이 가능하다. IE Tab을 설치하면 도구 > IE Tab 설정 이라는 메뉴를 볼 수 있는데 이를 클릭하면 위와 같은 설정화면에서 특정 사이트를 등록할 수 있다. 이제 단 하나의 파이어폭스 윈도우만으로 웹브라우징을 할 수 있게 되었으나 익스플로러의 새버전이 나오면 무엇을 선택하게 될까?
Perspective
이클립스 워크벤치에서 perspective라고 하는 것은 툴바와 메뉴에 위치하게될 action들의 사용여부와 view의 초기 레이아웃을 정의하는 역할을 담당한다. 아래의 그림의 우측상단에 VICODE라고 선택되어 있는 부분이 바로 perspective를 의미한다.
이클립스에 기본적으로 제공되는 perspective가 몇가지 있다. Java를 선택하면 자바 어플리케이션을 개발하는데 필요한 action이 메뉴와 툴바에 나타날 것이고, Debug를 선택하면 디버깅을 위한 view들이 화면에 배치되는 것을 확인할 수 있다.
따라서 특정 목적(VICODE의 경우 임베디드 시스템 개발)을 가지는 개발환경을 이클립스에서 구현한다면, 이에 해당하는 action들만을 메뉴나 툴바에 나타내고 특정 정보를 화면에 보여주기 위한 view를 원하는 레이아웃에 따라 배치하고 싶을 것이다.
VICODE perspective를 선택했을 때를 살펴보면, Project 메뉴 아래에 필자가 여기저기서 주워와서 갔다 붙인 조악한 툴바 아이콘을 볼 수 있고 화면의 하단에는 따로 만들어서 추가한 Log, Result view가 존재하는 것을 알 수 있다. 이와 같이 perspective는 플러그인이 제공하는 특정 개발 환경을 정의하는 역할을 한다.
개념의 대한 설명은 여기서 마치고 구현방법을 소개하자면,
다음과 같이 org.eclipse.ui.perspectives 확장점을 이용한다.
<extension
point=”org.eclipse.ui.perspectives”>
<perspective
class=”edu.kaist.vicode.perspective.PerspectiveFactory”
fixed=”true”
icon=”icons/jdg2eProd.gif”
id=”edu.kaist.vicode.perspective”
name=”VICODE”/>
</extension>
PerspectiveFactory.java의 내용은 다음과 같다.
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;
public class PerspectiveFactory implements IPerspectiveFactory {
public static final String ID_VICODE_ACTIONS = “edu.kaist.vicode.actionset”;
public static final String ID_VICODE_PROJECT_WIZARD =
“edu.kaist.vicode.projectwizard”;
public static final String ID_VICODE_MODULE_WIZARD =
“edu.kaist.vicode.modulewizard”;
public static final String ID_VICODE_LOG_VIEW = “edu.kaist.vicode.logview”;
public static final String ID_VICODE_RESULT_VIEW = “edu.kaist.vicode.resultview”;
public void createInitialLayout(IPageLayout layout) {
// Navigator
layout.addView(IPageLayout.ID_RES_NAV, IPageLayout.LEFT, 0.20f,
IPageLayout.ID_EDITOR_AREA);
// Bottom : Another folder area, to stack additional views
IFolderLayout bottom = layout.createFolder(“bottom”,
IPageLayout.BOTTOM, 0.8f, IPageLayout.ID_EDITOR_AREA);
bottom.addView(ID_VICODE_LOG_VIEW);
bottom.addView(ID_VICODE_RESULT_VIEW);
bottom.addView(IPageLayout.ID_PROBLEM_VIEW);
// Add Outline View
layout.addView(IPageLayout.ID_OUTLINE, IPageLayout.RIGHT, 0.80f,
IPageLayout.ID_EDITOR_AREA);
// Add new wizard shortcut
layout.addNewWizardShortcut(ID_VICODE_PROJECT_WIZARD);
layout.addNewWizardShortcut(ID_VICODE_MODULE_WIZARD);
// Add our actions
layout.addActionSet(ID_VICODE_ACTIONS);
}
}
위의 VICODE perspective가 선택된 화면과 소스코드를 비교해보면 이해하기가 수월 할 것이다. createInitialLayout() 메서드에서 넘어온 IPageLayout 인스턴스를 이용하여 레이아웃을 지정할 수 있다. 차례로 왼쪽의 Navigator를 추가하고 하단에 3개의 view를 추가한다. 그리고 우측의 Outline view를 정의한 후 추후에 다루게 될 마법사를 추가한다. 마지막으로 action에서 다루었던 action set을 추가한다. action set의 visible 속성이 false로 지정되었다면 이렇게 perspective에서 추가해주어야만 화면에 나타나게된다. 모든 것의 참조는 plugin.xml에서 정의한 ID로 이루어진다.
물론 이미 존재하는 perspective에 자신의 view나 action을 추가할 수 있는데 (JDT를 확장하는 경우) 이럴 때는 org.eclipse.ui.perspectiveExtensions 확장점을 이용해야 한다.
Google Notebook
다른 사람의 블로그를 구경하다가 깜짝 놀랐다. 구글 노트북? 차분히 글을 읽어보니 구글랩에서 새롭게 개발한 웹페이지 스크랩을 위한 서비스의 이름이였다. 구글의 직원들에게는 자신이 맡고 있는 일 이외에 새로운 아이디어로 하고 싶은 일을 도전해볼 수 있는 시간이 주어진다고 하는데, 이렇게 시도되는 여러가지 서비스가 우리를 즐겁게 하고 있다.
웹서핑을 하다보면 두고두고 다시 읽고 싶은 좋은 글들을 만날 때가 많은데 막상 이를 어떻게 보관해야할지 막막하다. 지금까지는 네이버 블로그에 저장해두었는데 이제는 해당내용을 긁고 오른버튼 눌러서 나오는 Note this 버튼을 누르는 것으로 간단히 보관할 수 있게 되었다.
익스플로어나 불여우에 플러그인 형태로 설치되며 사용법은 매우 간단하다. 처음 플러그인을 설치하면 스크랩 방법과 열람하는 방법을 간단히 설명해준다. 구글 UI의 매력은 무엇보다도 단순함과 실용성에 있다는 것을 다시 한번 느끼끼게 해주었다. 웹서핑 중 만나는 간간히 보관하고 싶은 문서가 있는 분들은 도전해보시길.
Plug-in Development Environment
Plug-in Development Environment(이하 PDE)는 그 자신이 플러그인이면서 플러그인을 개발하는 환경을 제공한다. 우리가 일반적으로 다운받는 Eclipse SDK에 기본적으로 포함되어 있다. 이는 플러그인 개발의 편의를 도모하기 위해 플러그인의 정보를 담고 있는 plugin.xml을 효과적으로 편집할 수 있는 플러그인 설명서 편집기와 개발 중인 플러그인를 실행하고 디버깅할 수 있는 환경을 제공한다.
위의 그림은 여러 페이지로 구성되어 있는 플러그인 설명서 편집기이며 plugin.xml 파일을 쉽게 편집할 수 있도록 도와주는 역할을 한다. 이클립스 3.0에서 개발을 시작하였고 현재는 3.2 버전을 사용하고 있는데 플러그인의 구조가 적잖이 변경되었다. 이전에는 대부분의 정보가 plugin.xml에 저장되었던 것에 반하여 3.2 버전에서는 일부정보가 MANIFEST.MF 파일에 저장된다. 따라서 3.2 버전에서의 plugin.xml은 확장점과 확장에 관한 내용만 담고 있다.
각각의 페이지에 대해서 간략히 설명하자면,
Dependencies – 플러그인이 의존하고 있는 다른 플러그인의 집합
Runtime – 런타임에 client에게 export할 package의 집합
Extenstion – 확장정의
Extension Points – 확장점정의
Build – 빌드할때 포함해야할 파일등 플러그인 빌드 관련 설정
MANIFEST.MF – MANIFEST.MF 파일 텍스트 편집기
plugin.xml – plugin.xml 파일 텍스트 편집기
build.properties – build.properties 파일 텍스트 편집기
정리하자면,
Overview, Dependencies, Runtime 페이지를 수정하면 MANIFEST.MF 파일이, Extenstion, Extenstion Points 페이지를 수정하면 plugin.xml 파일이, Build 페이지를 수정하면 build.properties 파일이 수정된다. 텍스트 편집기에서 파일을 직접 수정한 내용도 각 페이지의 폼에 바로 적용되어 상호보완적으로 편집할 수 있다.
플러그인의 실행을 이해하기 위해서는 host 워크벤치와 runtime 워크벤치의 개념을 이해해야한다. 먼저 host 워크벤치는 현재 PDE를 이용해 플러그인을 개발하고 있는 워크벤치를 의미한다. host 워크벤치에서 개발 중인 플러그인의 Run을 구성해 실행시키면 쉽게 말해서 이클립스가 하나 더 뜬다! 이 것이 바로 runtime 워크벤치다.
위의 그림에서는 PDE에서 vicode 플러그인의 Run을 구성하고 있다. 여기서 Plug-ins 탭으로 들어가보면 host 워크벤치와 runtime 워크벤치의 개념을 이해할 수 있다. 여기서 선택된 것은 runtime 워크벤치를 실행할 때 포함하는 플러그인을 의미한다. 다시 말하면 runtime 워크벤치는 host 워크벤치에 포함된 플러그인에 더하여 현재 개발 중인 플러그인을 추가한 워크벤치를 의미한다. (물론 개발하는 플러그인과 의존관계가 없는 플러그인은 제외하고 수행해도 무방하다)
개념을 잡는 것에 도움을 드리기 위해 씌여지고 있는 글이기 때문에 실제 PDE를 사용하는 예제를 수행해보고 싶으신 분은 이클립스 메뉴의 Help > Help Contents를 클릭하시고 나오는 메뉴얼에서 Platform Plug-in Developer Guide > Simple plug-in example을 참조하시기 바랍니다.