Programming Application

웹과 위키시스템 Web and Wiki System

컴퓨터 공부에 있어 정보를 얻고 생산할 수 있는 최고의 도구는 웹과 위키 시스템이라고 생각한다. 웹은 이미 책, 강의, 과학 논문 거의 모든 정보 컨텐츠들을 웹에서 흡수하였고 서비스 중이다. 이를 더 전문적으로 활용한다면 연구에 많은 도움이 될 것이다.

Web

월드 와이드 웹(World Wide Web, WWW, W3)은 인터넷에 연결된 컴퓨터들을 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보 공간을 말한다. 간단히 웹(Web)이라 부르는 경우가 많다. 이 용어는 인터넷과 동의어로 쓰이는 경우가 많으나 엄격히 말해 서로 다른 개념이다. - 위키백과, 월드 와이드 웹 [Link]
우리는 거의 모든 정보를 웹을 통해 얻는다. 모든 정보가 연결되어 있고, 검색 기능을 제공하기 때문이다. 우리가 웹에서 정보를 얻을 수 있는 것처럼 우리는 웹을 이용하여 정보를 나눌 수 있다.


웹 공부 Web Study

웹은 정보를 얻는 것, 정보 서비스를 제공하는 것, 두 가지로 활용할 수 있다. 정보를 찾는 것은 검색엔진과 웹브라우저 활용 등을 통해 우리가 쉽게 할 수 있다. 이 부분에 있어 파이어폭으 웹브라우저를 추천한다.

파이어 폭스를 추천하는 이유

  1. 오픈소스 웹브라우저
  2. 기본 스마트 북마크 기능
  3. 자유로운 커스터마이징-플러그인
  4. 완벽한 HTML 웹표준

우선 웹페이를 만들거나 웹에있는 정보를 변경할 때, 기본적으로 세가지 언어를 학습해야 한다.

  • HTML : Hyper Text Markup Language 는 웹 페이지를 위한 지배적인 마크업 언어다. HTML은 제목, 단락, 목록 등과 같은 본문을 위한 구조적 의미를 나타내는 것뿐만 아니라 링크, 인용과 그 밖의 항목으로 구조적 문서를 만들 수 있는 방법을 제공한다.
  • CSS : Cascading Style Sheets 는 마크업 언어가 실제 표시되는 방법을 기술하는 언어로, HTML과 XHTML에 주로 쓰이며, XML에서도 사용할 수 있다. W3C의 표준이며, 레이아웃과 스타일을 정의할 때의 자유도가 높다.
  • JavaScript : 자바스크립트는 객체 기반의 스크립트 프로그래밍 언어이다. 이 언어는 웹브라우저 내에서 주로 사용한다.

위의 내용들은 W3C(World Wide Web Consortium)에서 제공하는 w3school에서 학습할 수 있다. w3school [Link] 또한 샐활코딩의 웹수업을 추천한다. [Link]
웹페이지를 만들때 Braket이라는 에디터를 추천한다. Bracket [Link]
웹페이지를 만들었다면 host 저장소를 찾아 웹페이지를 호스팅 하기만 하면된다. Gibhub에서 무료로 웹페이지 호스팅 서비스를 제공한다. Github pages [Link]

더 나아가 웹서버를 운영을 위해선 서버측에서 동작하는 언어인 PHP, Java, Node.js 등을 선택적으로 익혀야 하며 서버를 장만해 운영해야 한다.


위키시스템 Wiki System


정보를 나누는 도구 중에 여러 가지가 있겠지만, 그 중 강력한 도구 중 하나는 위키 시스템이다. 위키 시스템을 연구에 활용한다면 자료의 정리, 검색, 공유에 도움이 될 것이다.

위키는 웹 브라우저를 이용, 간단한 마크업 언어를 통해 쉽게 내용을 추가하고, 고치고 삭제할 수 있는 웹사이트를 말한다. 위키 소프트웨어를 이용하며, 협업을 통해 운영된다.

위키 창안자 : Ward Cunningham [wik]

사이트를 방문한 누구나 위키 웹사이트 내의 문서를 고치거나 새로 만들 수 있다. 이를 위해 기본적인 웹브라우저만 있으면 되며, 추가적인 확장 기능을 요구하지 않는다.
연결된 문서가 존재하는지에 상관없이 다른 문서 사이를 쉽고 직관적으로 링크할 수 있어, 관련된 주제의 연결을 돕는다. 위키는 가벼운 방문자를 위해 잘 만들어진 사이트는 아니다. 하지만, 지속적으로 웹사이트의 풍경을 변화시켜 방문자가 그 변화와 협력의 지속적인 과정에 참여하도록 한다.

위키의 가장 핵심은 다음과 같다.

  • 사이트를 방문한 누구나 위키 웹사이트 내의 문서를 고치거나 새로 만들 수 있다. 이를 위해 기본적인 웹브라우저만 있으면 되며, 추가적인 확장 기능을 요구하지 않는다.
  • 연결된 문서가 존재하는지에 상관없이 다른 문서 사이를 쉽고 직관적으로 링크할 수 있어, 관련된 주제의 연결을 돕는다.
  • 위키는 가벼운 방문자를 위해 잘 만들어진 사이트는 아니다. 하지만, 지속적으로 웹사이트의 풍경을 변화시켜 방문자가 그 변화와 협력의 지속적인 과정에 참여하도록 한다.


위키 문법 Wiki Syntax

본인은 위키문법은 따로 학습할 필요가 없다고 생각한다. 왜냐하면 대부분 위키문서를 편집할 때 위키전용 편집기를 쓰기 때문에 따로 문법을 외워서 쓸필요가 없으며 편집기에서 제공하는 기능을 통해 문서를 작성하면 된다.

위키 문법을 참고하고 싶다면 아래의 링크에서 확인할 수 있다.

  • 위키백과 위키 문법 요약 [Link]
  • 위비백과 위키 문법 [Link]
  • DokuWiki 문법 [Link]
  • Zim 위키 문법 [Link]

위키 시스템의 종류 Type of Wiki System

위키 시스템은 기본적으로 웹에서 누구나 편집할 수 있게 하기 위한 시스템이지만 위키 시스템의 구조와 동작 방법을 활용하여 개인이 정리 편집 할 수 있게끔 만들어진 개인 위키 시스템도 존재한다.


표준 위키 소프트웨어 Standard wiki software

DokuWiki : [Link]
xwiki : [Link]
MediaWiki : [Link]
MoniWiki : [Link]


개인 위키 소프트웨어 Personal wiki software

Zim : [Link]
Tomboy : [Link]
wikidPad : [Link]
TiddlyWiki [Link]


Zim


연구자는 연구노트를 사용한다. 여러 가지 도구가 있을 것이다. 논문을 관리하는 Zotero, Mendeley 또한 연구노트로 사용할 수 있다. 본인은 현재 zim을 연구노트로 활용하고 있다. OneNote와 Evernote, Zotero를 사용해 왔지만, zim은 앞에서 언급한 노트에서는 제공하지 않는 공학도에게 필요한 플러그인들이 매우 많다. 또한 wiki 문법으로 되어 있고 ASCII 기본 텍스트 형식에 폴더 파일시스템으로 정리되어 있어서 zim 이외에 다른 위키 시스템으로 쉽게 이식할 수 있다. 오픈소스여서 자신이 능력만 된다면 Python으로 여러 기능을 추가해서 사용할 수 있다.

설치방법 Install

Linux (Ubuntu)

sudo apt-add-repository ppa:jaap.karssenberg/zim
sudo apt-get update
sudo apt-get install zim

Window
Zim Desktop Wiki for Window [Link]


사용 Useage

zim의 메뉴바에서 Help 에서 모든 사용법을 익힐 수 있다.

기본 Basic

기본적인 노트 사용법은 여러 다른 편집기와 동일한 인터페이스를 제공한다. 메뉴바에서 Format에 문서를 편집할 수 있는 기능이 있다.

  • Format > Heading 1 [Ctrl+1]
  • Format > Heading 2 [Ctrl+2]
  • Format > Heading 3 [Ctrl+3]
  • Format > Heading 4 [Ctrl+4]
  • Format > Heading 5 [Ctrl+5]
  • Format > Bullet List [Alt+m, t]
  • Format > Numbered List [Alt+m, n]
  • Format > Checkbox List [Alt+m, x]
  • Format > Strong [Ctrl+B]
  • Format > Emphasis [Ctrl+I]
  • Format > Mark [Ctrl+U]
  • Format > Strike [Ctrl+K]
  • Format > Verbatim [Ctrl+T]
  • Format > Subscript
  • Format > Superscript
  • Format > Clear Formatting [Ctrl+9]

또한, 이미지 파일이나 링크 등을 첨부할 수 있다.

  • Insert > Image... [Alt+i, i]
  • Insert > Link... [Ctrl+l]

Image... 를 통해 이미지를 삽입하며, Link를 통해 웹페이지 혹은 파일 및 경로를 삽입할 수 있다. 다른 여러가지 Insert 기능들은 플러그인을 통해 활성화되면 사용할 수 있다.

노트생성 Creating Note

노트에 관련된 도구들은 메뉴바에서 File에 해당된다.

  • File > New Page... [Ctrl+n]
  • File > New Sub Page... [Shift+Ctrl+n]

링크를 통해 하위노트를 생성할 수도 있다.

  • Insert > Link [Ctrl+l]

Insert Link 창이 나타나면 Link toText에 노트 이름을 적고 Link를 클릭하면 링크를 통해 노트가 생성된다. 또한 링크 앞에 "+"를 추가하면 하위노트로 만들 수 있다.


노트이동 Note Navigation

여러 노트들 간에 이동을 통해 정보를 빠르게 얻고 편집할 수 있다. 노트 이동에 관한 도구들은 메뉴바에 Go에 해당한다.

  • Go > Back [Alt+Left]
  • Go > Forward [Alt+Right]
  • Go > Parent [Alt+Up]
  • Go > Child [Alt+Down]
  • Go > Next in index [Alt+Page Down]
  • Go > Previous in index [Alt+Page Up]
  • Go > Today [Alt+D]
  • Go > Home [Alt+Home]
  • Go > Jump To... [Ctrl+J]

  • BackForward는 노트를 본 순서대로 앞 뒤로 이동한다.
  • ParentChild는 노트의 상·하위 이동을 하게 한다.
  • Next in indexPrevious in index는 노트 인덱스에 위아래로 이동한다.
  • TodayJournal 플러그인을 통해 생성된 일정 관리 노트에서 오늘 날짜로 간다
  • Home은 메인 노트로 이동한다.
  • Jump To...는 노트 명을 검색하여 이동한다.


검색 Search

검색을 통해 단어 혹은 문장을 찾는다. 검색에 관한 도구들은 메뉴바에 Search에 해당한다.

  • Search > Find [Ctrl+F]
  • Search > Find Next [Ctrl+G]
  • Search > Find Previous [Shift+Ctrl+G]
  • Search > Replace [Ctrl+H]
  • Search > Search... [Shift+Ctrl+F]
  • Search > Search Backlinks
  • Search > Recent Changes

Find, Find Next, Find Previous는 페이지 안에서 검색에 사용된다.
Replace는 페이지 안에서 단어 및 문장을 바꾼다.
Search...는 전체 노트 검색이다.
SeachBackLinks Pane 플러그인의 활성화가 필요하며 해당노트로 들어온느 링크가 있는 노트목록을 보여준다.
Recent Changes는 최근에 수정된 노트의 목록을 보여준다.

플러그인 Plugin

플러그인들은 의존적인 프로그램을 따로 설치해줘야 하는데 Edit > Preferences > Plugins 에서 확인할 수 있다. 기본적인 기능은 Window에서도 잘 동작한다. 하지만 몇몇 플러그인들은 Linux 환경에 맞추어진 것이 있어서 사용이 어렵다. 공식적인 플러그인은 27개지만 그 중 중요한 플러그인 5가지를 살펴본다.

수식입력 Insert Equation

latex, dvipng 두개의 프로그램 설치가 필요하며 다음의 명령어로 설치가능하다.

sudo apt-get install texlive texlive-base texlive-fonts-recommended texlive-fonts-extra texlive-science texworks dvipng
                

사용방법은 다음과 같다.

  • Insert > Equation... [Alt+i, q]

Insert Equation 창이 열리면 LaTeX 문법의 수식을 입력한 수 OK를 클릭한다.
LaTeX 수식 입력 문법은 위키백과 LaTeX/Mathmatics [Link]에서 화인할 수 있다.

그래프 입력 Insert Graph

그래프는 GnuPlot과 GNU R Plot 두가지를 이용할 수 있다. 각각 설치한 상태에서 사용이 가능하며 아래의 명령어로 설치 가능하다.

GnuPlot
GnuPlot은 GNU 프로젝트 중 하나로 스크립트 명령어로 그래프를 그릴 수 있게 해준다. [Link]
Linux에 설치

sudo add-apt-repository ppa:gladky-anton/gnuplot
sudo apt-get update
sudo apt-get install gnuplot

Window에 설치

Gnuplot window ver. download [Link]

사용방법

  • Insert > Gnuplot...

Insert Gnuplot 창이 열리면 원하는 그래프 소스를 입력하고 OK를 클릭한다.

Gnu R Plot
Gnu R Plot 은 R 프로그래밍 언어가 설치되어 있으면 R 패키지 중에 그래프 그리는 패키지를 사용하여 Zim 상에서 그래프를 그릴 수 있게 해준다.

Linux에 설치

sudo apt-get install r-base r-base-dev r-recommended

WIndow에 설치

R 공식 홈페이지에서 다운로드 [Link]

사용방법

  • Insert > GNU R Plot... [Alt+i, r]

Insert GNU R Plot 창이 열리면 원하는 그래프 소스를 입력하고 OK를 클릭한다.


힐일과 스케줄 To Do List and Schedule

스케줄 관리를 위해선 Journal 플러그인이 활성화 되어야 한다. Journal 플러그인은 의존적인 프로그램이 없다.
메뉴바에서 Go > Today [Alt+d] 를 클릭하면 오늘 날짜의 일지로 간다. Journal 하위 노트에서 노트 이동기능을 이용해 왔다갔다 하며 연, 월, 일 단위로 스케줄을 관리할 수 있다. 또한 bracket ["[]", space] 으로 할일을 관리할 수있다.

소스 뷰 Source View

프로그래밍 언어 예제나, 중요한 Method 등을 정의할 때 언어 Syntax Color 기능을 제공한다.
Source View 플러그인에 의존적이며 gtksourceview2를 설치하여야 한다. 리눅스 민트에 기본으로 설치되어 있다.

  • Insert > Code Block

Insert Code Block 창이 열리면 Syntax에 원하는 언어를 선택하고 소스를 작성하면 Syntax Color가 적용된다.


C

                        
#include 
/* function declaration */
void func(void);
 
static int count = 5; /* global variable */
 
main(){
   while(count--)
   {
	  func();
   }
   return 0;
}
/* function definition */
void func( void ){
   static int i = 5; /* local static variable */
   i++;

   printf("i is %d and count is %d\n", i, count);
}
                        
                    

Java

                       
package useworld.hydraulics.basic;
import useworld.tool.BasicCast;
import useworld.tool.BasicNumeric;
import useworld.tool.BasicUnit;

/**
 * @author kiwon
 * @author kiwon@null.net
 */
public class BasicMeteorology {
	public static void main(String[] args) {
		// 이슬점 계산.
		BasicMeteorology obj = new BasicMeteorology();
		double tDry = 25;	//	건구온도(일반온도)
		double tWet = 17;	//	습구온도

		double eS = obj.satVapPresMilibar(tDry);	//	건구온도에서의 포화증기압.
		double eW = obj.satVapPresMilibar(tWet);	//	습구온도에서의 포화증기압.
		double e = obj.watVapPre(tDry, tWet, eW, (byte) 1);	//	실제 증기압 계산.
		double rHum = obj.rHum(e, eS);	//	상대습도 계산.
		double dewTem = obj.dewTem(tDry, rHum);	//	이슬점.
	}
}
                       
                        
                    

Reference

  1. Gnuplot. http://www.gnuplot.info/
  2. 위키백과-월드 와이드 웹. http://ko.wikipedia.org/wiki/%EC%9B%94%EB%93%9C_%EC%99%80%EC%9D%B4%EB%93%9C_%EC%9B%B9
  3. 위키백과-위키. http://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4
  4. 위키백과-인터넷의 역사. http://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%EB%84%B7%EC%9D%98_%EC%97%AD%EC%82%AC
  5. 위키백과-List od wiki software. http://en.wikipedia.org/wiki/List_of_wiki_software
  6. 위키백과-HTML. http://ko.wikipedia.org/wiki/HTML
  7. 위키백과-CSS. http://ko.wikipedia.org/wiki/%EC%A2%85%EC%86%8D%ED%98%95_%EC%8B%9C%ED%8A%B8
  8. 위키백과-JavaScript. http://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8