IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
메인 컨텐츠로 가기

한국 developerWorks  >  오픈 소스  >

Ghosd와 시너지(Synergy)를 사용한 다중 화면 사용자 인터페이스 개선

다중 모니터에서 마우스 포인터 위치 추적 기능을 개선하기

developerWorks
문서 옵션

JavaScript가 필요한 문서 옵션은 디스플레이되지 않습니다.

샘플 코드

영어원문

영어원문


제안 및 의견
피드백

난이도 : 중급

Nathan Harrington, Programmer, IBM

옮긴이: 박재호 이해영 dwkorea@kr.ibm.com

2008 년 11 월 25 일

전통적인 단일 화면 설정과는 달리 다중 화면 시스템은 UI와 관련해서 특별한 사항을 고려해야 합니다. 이 기사는 다중 화면에서 입력 초점을 획득하고 변경하기 위해 설계된 도구와 코드를 소개합니다.

모니터 추가보다 생산성 향상을 극적으로 불러 일으키는 작업 환경 변경 요소는 찾기 드물다. 오픈 소스인 시너지(Synergy) 패키지는 하드웨어를 추가로 구매하지 않고서도 여러 화면을 연결해 사용하게 만드는 훌륭한 방법을 제공한다.

전통적인 단일 화면 설정과는 달리 다중 화면 시스템은 UI와 관련해 특별한 사항을 고려해야 한다. 이 기사는 다중 화면에서 입력 초점을 획득하고 변경하기 위해 설계된 도구와 코드를 소개한다. Ghosd 표시 기능과 시너지 디버깅 단계 출력을 활용해 현존하는 X 윈도우 시스템 입력 초점 시스템을 개선하는 방법으로 4200x3150 픽셀 이상을 제공하는 대형 화면에서도 다중 화면 사용자가 입력 초점이 어디에 위치하는지 정확하게 파악하도록 만든다.

요구 사항

보안 관련 주의 사항

여기서 설명한 코드와 기법은 온 스크린 경고를 일으키는 방법을 설명하는 예다. 여기서 소개하는 내용은 사설 네트워크에서 사용하도록 설계되어 있다. 인터넷에 직접 노출된 기계에서 사용할 의도로 작성한 내용이 아니다. 여기서 악의적인 프로그램이 기계에서 임의의 코드를 수행하려고 시도할지도 모른다.

하드웨어

시너지는 다양한 하드웨어와 소프트웨어에서 동작하도록 설계되었다. 애니메이션 효과나 알파 블렌드 Ghosd 시각 효과를 활용하려면 특히 빠른 네트워크를 권장한다.

소프트웨어

시너지 기본 기능은 다양한 운영체제를 지원하지만, 이 기사에서는 개선된 OSD(On-Screen Display)를 제공하기 위해 리눅스(Linux®) 서버에서 동작하는 Ghosd를 활용한다. 시너지 세상에서 서버는 키보드, 마우스, 주 화면을 공유하는 마스터 컴퓨터이며, 시너지 서버 소프트웨어를 돌린다. 다른 모든 컴퓨터는 시너지 클라이언트이며 시너지 클라이언트 소프트웨어를 돌린다. 여기서 필요한 구성 요소는 다음과 같다.

시너지
시너지는 다양한 운영체제를 돌리는 다양한 컴퓨터 사이에 마우스와 키보드를 공유한다. 각 컴퓨터에는 독자적인 화면이 달려 있으며, 특수한 하드웨어 장비는 필요하지 않다.
X 윈도우 시스템
여기서 설명하는 결과를 얻기 위해서는 시너지 서버와 클라이언트에서 동작하는 리눅스(Linux®)와 X 윈도우 시스템 서버가 필요하다. 유닉스와 리눅스를 운영체제로 채택한 대다수 데스크톱 컴퓨터는 X 윈도우 시스템이 설치되어 있기에, 이미 리눅스나 유닉스 기계에 X 윈도우 시스템이 설치되었다고 봐도 무방하다.
Pango
Pango는 텍스트 레이아웃을 잡고 렌더링하는 라이브러리다.
GLib 라이브러리
Pango는 GTK+ 프로젝트에서 나온 GLib 라이브러리 V 2.x 계열에 의존한다.
카이로(Cairo)
카이로는 다중 디바이스 출력을 지원하는 2차원 그래픽 라이브러리다.
Ghosd
Ghosd는 화면에 정보를 멋지게 출력하는 라이브러리다.
은 안정적인 교차 플랫폼 프로그래밍 언어다.

우분투 사용자는 다음과 같은 명령어를 사용해서 위에서 소개한 패키지를 설치할 수 있다. sudo apt-get install libgtk2.0-dev libpango1.0-dev libcairo2-dev perl synergy




위로


일반적인 접근 방법

그림 1에 소개한 화면 여섯 개를 활용하는 시너지 설정을 생각해보자. 이 그림은 아래에서 소개하는 최종 버전을 사용해 만들어낸, 초점 추적 담당 시스템이 동작하는 모습을 보여준다. 몇 분 동안 다중 화면에서 벗어나 있었다면, 커서를 어느 화면에 놓아두었는지 기억하기가 어려울지도 모르겠다. 그림 1은 초점이 들어온 화면에 연속적으로 초록색 사각형을 표시하고 다른 화면에서는 붉은색 사각형을 점차 사라지게(페이드 아웃) 만드는 모습을 보여준다. 초점 추적 담당 시스템을 선두로 이런 시각적인 효과를 만들어내는 방법을 설명하겠다.


그림 1. 시각 효과를 구현한 여섯 개 화면 설정 예
시각 효과를 구현한 여섯 개 화면 설정 예




위로


초점을 얻는 시각 효과 구현

Ghosd 원시 코드 아카이브를 얻으러면 다운로드 절에서 파일을 가져온다. 시너지 서버로 사용하려는 기계에 Ghosd 원시 코드를 내려받자. Ghosd 코드 아카이브를 bzip2 -d ghosd-0.0.1.tar.bz2 -c | tar -xvf - 명령으로 풀어낸다. 흔히 사용하는 ./configure; make && make install 명령을 내려 Ghosd 원시 코드와 예제 파일을 빌드한다. 빌드와 설치를 성공리에 끝내면, 초점이 들어왔다는 사실을 알려주는 일련의 초록색 사각형을 보여주는 첫 번째 초점 시각 효과 프로그램을 만들 준비가 되었다.

초점이 들어왔다는 시각 효과

examples/ 디렉터리로 이동한 다음에 mv animation.c original.animation.c 명령을 사용해 animation.c 파일 이름을 바꾼다. animation.c라는 새로운 파일을 만들고 Listing 1에서 소개하는 코드를 집어 넣는다.


Listing 1. animation.c 헤더, round_rect 함수

// animation.c - 시너지 초점 추적 담당 시스템을 위한 ghosd 예제를 변경한 파일
// ghosd animation.c 예제 파일에서 상당수 코드를 빌려왔다.
#include <stdio.h>
#include <sys/time.h>
#include <sys/poll.h>
#include <time.h>
#include <cairo/cairo.h>
#include <ghosd/ghosd.h>

#define RADIUS 20
int sizeX   = 1024;
int sizeY   = 768;
int mode    = 0;    // 0은 알파 블렌드로 처리한 붉은색 경계 사각형, 1은 초록색 사각형

typedef struct {
  cairo_surface_t* foot;
  float alpha;
} RenderData;

static void
round_rect(cairo_t *cr, int x, int y, int w, int h, int r) {
  cairo_move_to(cr, x+r, y);
  cairo_line_to(cr, x+w-r, y); /* top edge */
  cairo_curve_to(cr, x+w, y, x+w, y, x+w, y+r);
  cairo_line_to(cr, x+w, y+h-r); /* right edge */
  cairo_curve_to(cr, x+w, y+h, x+w, y+h, x+w-r, y+h);
  cairo_line_to(cr, x+r, y+h); /* bottom edge */
  cairo_curve_to(cr, x, y+h, x, y+h, x, y+h-r);
  cairo_line_to(cr, x, y+r); /* left edge */
  cairo_curve_to(cr, x, y, x, y, x+r, y);
  cairo_close_path(cr);
}

구성 요소 인클루드와 변수 선언 다음에, round_rect 함수를 선언했다. 이 내용은 Ghosd examples/animation.c 파일에서 그대로 따왔다. round_rect 함수는 초점이 들어올 때와 나갈 때 시각 효과를 모두 제공한다. 다음으로 아래에 소개하는 renderFocus 함수를 추가하자.


Listing 2. renderFocus 함수

static void
renderFocus(Ghosd *ghosd, cairo_t *cr, void* data) {
  RenderData *rdata = data;

  // 초점이 들어왔음을 알리기 위해 사각형 세 개를 그린다.
  cairo_set_line_width( cr, 20);
  cairo_set_source_rgba(cr, 0, 1, 0, rdata->alpha);
  cairo_new_path(cr);
  round_rect(cr, 10, 10, 380, 380, RADIUS);
  cairo_stroke(cr);

  cairo_set_source_rgba(cr, 0, 1, 0, rdata->alpha);
  cairo_new_path(cr);
  round_rect(cr, 40, 40, 320, 320, RADIUS);
  cairo_stroke(cr);

  cairo_set_source_rgba(cr, 0, 1, 0, rdata->alpha);
  cairo_new_path(cr);
  round_rect(cr, 70, 70, 260, 260, RADIUS);
  cairo_stroke(cr);

  cairo_set_source_surface(cr, rdata->foot, 0,0);
}//renderFocus

화면에 초점이 들어오면, renderFocus 함수는 모서리가 둥근 사각형 세 개를 연속적으로 사용 가능한 렌더링 표면에 자그마한 영역을 잡아서 그려낸다. Listing 3은 주 프로그램 논리와 renderFocus 함수 호출을 보여준다.


Listing 3. animation.c 핵심 논리

int main(int argc, char* argv[]) {
  Ghosd *ghosd;
  RenderData data = {0};
  struct timeval tv_nextupdate;
  const int STEP = 50;
  float dalpha = 0.10;

  if( argc == 4 )
  {
    sizeX = atoi( argv[1] );
    sizeY = atoi( argv[2] );
    mode  = atoi( argv[3] );

  }

  ghosd = ghosd_new();

  if( mode == 0 )
  {
    // 작은 캔버스를 만들어 초록색 초점 사각형을 그린다.
    data.foot = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 400,400);
    data.alpha = 1;
    ghosd_set_position(ghosd, (sizeX/2)-200, (sizeY/2)-200, 400, 400);
    ghosd_set_render(ghosd, renderFocus, &data);
    ghosd_render(ghosd);
    ghosd_show(ghosd);
    ghosd_main_iterations(ghosd);

  }// 초점 모드인 경우

  // ghosd_flash는 이 예제로 사용하기 적합하지 않기에 잽싸게 페이드 아웃 후에 종료한다.
  for (;;) 
  {
    gettimeofday(&tv_nextupdate, NULL);
    tv_nextupdate.tv_usec += STEP*1000;

    ghosd_main_until(ghosd, &tv_nextupdate);

    data.alpha -= dalpha;
    if (data.alpha <= 0.3) { return(0); }

    ghosd_render(ghosd);
  }//for each step fade out

}//main

다시 한번 Ghosd examples/animation.c 파일에서 몇 가지를 빌어온다. 여기서 main 루프는 400x400 알파 블렌드 표면 영역을 만든다. 이 표면 영역은 해상도에 무관하게 화면 중심에 위치하며, 각 렌더링 패스를 거치면서 renderFocus를 호출한다.

ghosd_flash가 텍스트 페이드 인/아웃을 위한 유용한 인터페이스를 제공하긴 하지만, 여기서는 단순하게 페이드 아웃하는 방식이 시각 효과에 더 좋다. 따라서 for 루프가 각 단계에서 알파 블렌딩 양을 줄이므로 프로그램이 종료하기 전에 효과적인 페이드 아웃 효과를 만들어낸다.

이 파일을 빌드하려면 make 명령을 수행한 다음에 계속해서 ./animation 1400 1050 0을 입력한다. 화면 해상도가 1400x1050라면, 화면 중앙에 일련의 초록색 상자가 나타나야 한다.

시너지 출력에서 초점 정보 추출하기

시각 효과를 만들어 냈다면, 시너지 환경 설정을 토대로 현재 초점이 있는 화면에 출력할 시점이다. 시너지에서 이런 작업은 상대적으로 쉽다. 이런 작업에 꼭 맞는 광범위한 디버그 단계를 제공하기 때문이다.

Listing 4에 나와있는 내용을 이용해 processSynergy.pl 파일을 만들자.


Listing 4. processSynergy.pl 변수, main 루프

#!/usr/bin/perl -w
# processSynergy.pl - Synergys DEBUG2 사건을 읽는다.
use strict;
my %disp = ();       # 화면 기하값, 초점 상태를 기록한다.
my $delay = 5;       # 초 단위 시간
my $inTimeout = 0;   # 타임아웃 모드 스위처
my $osdOn     = 0;   # OSD 스위처
my $lastTime = time; # 마지막 활동을 감시한다.

while( my $line = <STDIN> )
{
  $line =~ s/"//g;

  if( $line =~ /404: received client / )
  {
    # 클라이언트 연결 과정에서 초기 설정을 기록한다.
    my @parts = split " ", $line;
    my $name = $parts[4];

    $disp{$name}{mode} = 1;
    $disp{$name}{X} = (split "x", $parts[7])[0];
    $disp{$name}{Y} = (split "x", $parts[7])[1];

    print "$name geometry $parts[7]\n";

변수를 선언한 다음에(대부분 나중에 초점 타임아웃 점검을 위해 쓰인다), 프로그램은 STDIN에서 시너지 이벤트를 듣기 위해 루프로 들어간다. 첫 if 구문은 클라이언트 연결 메시지를 처리하며, %disp 해시에 각 화면 출력 정보를 추가한다. Listing 5는 "초점 전환" 메시지를 점검하는 코드다.


Listing 5. 초점 전환 점검

  }elsif( $line =~ / switch from / )
  {
    # 클라이언트 사이에서 일어나는 초점 변경을 추적한다.
    my $name = (split " ", $line)[6];

    $disp{$name}{mode} = 0;

    # 모든 다른 화면을 비활성으로 설정한다.
    map{ $disp{$_}{mode} = 1 if( $_ ne $name )  } keys %disp;

    $lastTime = time;  $inTimeout = 0;

    print "switch to $name\n";

    my $res = "export DISPLAY=$name:0; ";
    $res .= "./animation $disp{$name}{X} $disp{$name}{Y} $disp{$name}{mode} &";
    system($res);

  }#if switch screen catch

}#while line in

시너지는 화면 사이에 초점 변화를 추적하므로, 메시지는 processSynergy.pl 프로그램이 읽는다. 모든 화면을 대상으로 정보를 포함하는 자료 구조를 갱신한 다음에(다시 한번 이 부분은 초점 타임아웃 점검에서 쓰인다), 클라이언트 연결이 일어날 때 기록된 해상도 값을 애니메이션 프로그램을 호출하면서 넘긴다.

초점 추적 담당 시스템을 만들기 위해 시너지 서버로 설정한 기계에서 다음과 같은 명령을 내린다. synergys -f -c configFile --debug DEBUG2 2>&1 | perl processSynergy.pl 개별 클라이언트와 연결한 다음에 xhost + SynergyServer 명령을 내려야 할지도 모른다. 여기서 "SynergyServer"는 애니메이션 프로그램이 동작하는 기계 이름이다.

마우스를 다양한 창으로 옮겨다니면서 초점 추적 담당 시스템이 화면을 가로지르며 점진적으로 페이드 아웃 효과를 내는지 살펴보자.




위로


타임아웃 초점 기능이 들어간 다중 화면 추적 시스템 구축하기

초점을 잃어버린 시각 효과 만들기

초점을 잃어버린 사실을 알려주는 간단하면서도 효율적인 방법은 알파 블렌드 화면 스크린샷을 둘러싼 붉은색 사각형 표시다. 그림 1을 보면 이런 모양새가 어떤지 감이 올 것이다. 다중 화면 초점 추적 시스템으로 초점을 잃어버린 시각 효과를 만들어내려면, animation.c 57행에 Listing 6에 제시한 코드를 추가한다.


Listing 6. renderBox 함수

static void
renderBox(Ghosd *ghosd, cairo_t *cr, void* data) {
  RenderData *rdata = data;

  // 알파 블렌드 중심을 기준으로 붉은색 사각형을 그린다.
  cairo_set_source_rgba(cr, 0, 0, 0, 0.5);
  cairo_new_path(cr);
  round_rect(cr, 0,0, sizeX,sizeY, RADIUS);
  cairo_fill(cr);


  cairo_set_line_width( cr, 10);

  cairo_set_source_rgba(cr, 1, 0, 0, 1.0);
  cairo_new_path(cr);
  round_rect(cr, 0,0, sizeX, sizeY, RADIUS);
  cairo_stroke(cr);

  cairo_set_source_surface(cr, rdata-<foot, 0,0 );

}//renderBox

여기서도 Ghosd examples/animation.c 파일에 영향을 많이 받은 renderBox 함수는 전체 화면 알파 브렌딩 사각형을 그리며, 이미지를 둘러싼 붉은색 경계선을 칠한다. 이 함수를 올바르게 호출하려면, Listing 7에 나온 코드를 106행에 추가한다.


Listing 7. 붉은색 상자 논리

  }else
  {
    // 전 화면을 채우는 사각형을 생성한 다음에 붉은색 사각형 테두리를 그린다.
    data.foot = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, sizeX, sizeY);
    data.alpha = 1;
    ghosd_set_position(ghosd, 0, 0, sizeX, sizeY );
    ghosd_set_render(ghosd, renderBox, &data);
    ghosd_render(ghosd);
    ghosd_show(ghosd);
    ghosd_main_iterations(ghosd);

이런 특수 시각 효과는 processSynergy.pl 프로그램이 취소할 때까지 남아 있도록 설계한다. 117행에서 코드를 다음과 같이 바꾼다.


Listing 8. 직전에 만든 render 루프

  for (;;) 
  {
    gettimeofday(&tv_nextupdate, NULL);
    tv_nextupdate.tv_usec += STEP*1000;

    ghosd_main_until(ghosd, &tv_nextupdate);

    data.alpha -= dalpha;
    if (data.alpha <= 0.3) { return(0); }

    ghosd_render(ghosd);
  }// 매 단계를 돌며 페이드 아웃 효과를 낸다.



Listing 9. 새로 만든 render 루프

  for (;;) 
  {
    ghosd_main_until(ghosd, &tv_nextupdate);
    ghosd_render(ghosd);
  }// 프로그램이 취소할 때까지 계속해서 화면에 그린다.

이 파일을 빌드하려면 make 명령어를 수행한 다음에 계속해서 ./animation 1400 1050 1을 입력한다. 화면 해상도가 1400x1050라면, 화면을 둘러싸며 빨간색 사각형이 페이드 아웃하는 모습이 나타나야 한다.

초점 타임아웃 점검을 위한 processSynergy.pl 변경

입력이 중단되었을 때는 물론이고 어디에 초점이 맞춰져 있는지를 추적하기 위해, processSynergy.pl을 다음과 같이 바꾸자. 47에서 49행을 제거한 다음에 Listing 10에 나와있는 코드로 대체하자.


Listing 10. 움직임, 키 점검 논리, 심장박동(살아있는지 확인하는) 논리


  }elsif( $line =~ / MotionNotify / || $line =~ / KeyPress / ||
          $line =~ /event: Buton/ )
  {
    # 키보드와 마우스 사건에 대한 시각을 리셋한다.
    $lastTime = time;  $inTimeout = 0;

  }elsif( $line =~ / writef\(CALV\)/ )
  {
    # 각 심장박동마다 타임아웃을 점검한다.
    next unless ( (time - $lastTime) > $delay && $inTimeout == 0);

    $inTimeout = 1;
    $osdOn =1;

    for my $key ( keys %disp )
    {
      my $res = "export DISPLAY=$key:0; ";
      $res .= "./animation $disp{$key}{X} $disp{$key}{Y} $disp{$key}{mode} &";
      system($res);
    }#for each display name

    print "timer exceeded\n";

  }#if client

첫 번째 elsif 가지에서 새로운 마우스와 키보드 사건은 lastTime 변수를 리셋한다. 두 번째 elsif 가지는 클라이언트가 서버로 보내는 CALV "심장박동"을 살핀다. 마지막 움직임이 일어난 지 몇 초가 지나면, 시각 효과가 해당 화면에 표시된다. Listing 11에 제시한 코드를 71행에 추가함으로써 processSynergy.pl 변경이 끝난다.


Listing 11. 활동 상태에서 애니메이션 처리 종료

  if( $inTimeout == 0 && $osdOn == 1)
  {
    # 화면 출력 프로세스 종료
    system("ps -aef | grep animation | perl -lnae '`kill -9 \$F[1]`'");
    $osdOn = 0;
    print "terminate osd\n";
  }# OSD가 보일 경우

이런 접근 방법은 클라이언트 쪽에서 보내는 CALV 심장박동 연결에 의존한다. 네트워크 연결이 끊어지거나 CALV 메시지가 오지 않으면, 초점 추적 담당 시스템이 이상하게 동작할지도 모른다.




위로


사용법

완벽하게 타임아웃 초점 기능까지 들어간 추적 담당 시스템을 사용하려면, Synergey 서버를 설치한 기계에서 다음과 같은 명령을 내리자. synergys -f -c configFile --debug DEBUG2 2>&1 | perl processSynergy.pl.

시각 효과가 나타나지 않으면, 다시 한번 개별 클라이언트와 연결한 다음에 xhost + SynergyServer 명령을 내려야 할지도 모른다. 키보드와 마우스 활동이 "delay" 초 동안 없을 경우(이 경우 5초다), 현재 초점이 들어온 화면에서는 초록색 사각형을 출력하며, 반면에 초점이 벗어난 화면에서는 알파 블렌드로 처리한 붉은색 테두리 사각형을 출력한다.




위로


결론과 추가적인 변경

시너지 출력 검사 코드와 Ghosd 시각 효과 라이브러리는 초점을 추적해서 특정 시간 한계에 다다른 다음에 현재 초점을 시각 큐에 넣는다. 이렇게 하면 자리로 돌아온 다음에 모든 화면을 돌아다니며 커서를 찾는 수고를 덜 수 있다.

좀 더 눈을 즐겁게 하는 시각 효과를 초점 추적 담당 시스템에 추가해보자(현재 라이브러리에 메모리 누수가 있다는 사실에 주의하자). 현재 터미널 세션을 시너지 초점 정보와 연계해서 현재 보는 화면에서 원격 시스템에 대한 화면 갱신 기능을 제공하자. 시각 효과를 생각했다면 나머지는 Ghosd, 시너지 디버그 정보가 출력을 도와줄 것이다.





위로


다운로드 하십시오

설명이름크기다운로드 방식
예제 코드os-ghosd-synergyFocus.zip3KBHTTP
다운로드 방식에 대한 정보


참고자료

교육
  • 시너지를 사용하기 위해 Ubuntu Guide를 살펴보자.

  • 이 기사는 IBM developerWorks에 실린 "Create fancy on-screen displays with Ghosd and Perl"에서 소개한 기법을 토대로 작성했다.

  • 여기서 설명하는 결과를 얻기 위해서는 시너지 서버와 클라이언트에서 동작하는 리눅스와 X 윈도우 시스템 서버가 필요하다.

  • 소프트웨어 개발자를 위한 흥미로운 인터뷰와 토론을 들으려면, developerWorks 포드캐스트를 들어보자.

  • developerWorks 기술 행사와 웹 캐스트를 놓치지 말자.

  • IBM 오픈 소스 개발자에게 흥미로운 컨퍼런스, 전시회, 웹 캐스트, 전 세계에서 열리는 다양한 행사를 살펴보자.

  • developerWorks 오픈 소스 영역을 방문해서 광범위한 하우투 정보, 도구, 제품 업데이트 정보를 얻자. 오픈 소스 기술로 개발하며, IBM 제품과 함께 사용하는 방법을 익히는 데 도움이 될 것이다.

  • IBM, 오픈 소스 기술, 제품 기능에 대해 보고 배우러면 무료로 developerWorks 온 디멘드 데모를 살펴보자.


제품 및 기술 얻기
  • 시너지 다운로드: 특수한 하드웨어 없이도 각자 화면을 갖춘 다양한 운영체제를 돌리는 여러 컴퓨터 사이에서 마우스와 키보드 하나를 공유하도록 만드는 시너지를 내려받자.

  • Pango 다운로드: 텍스트 레이아웃을 잡고 렌더링하는 라이브러리인 Pango를 내려받자.

  • GLib 라이브러리 다운로드: GTK+ 프로젝트에서 나온 라이브러리인 GLib를 내려받자.

  • 카이로 다운로드: 다중 출력 디바이스를 지원하는 2차원 그래픽 라이브러리인 카이로를 내려받자.

  • Ghosd 다운로드: 화면에 정보를 멋지게 출력하는 라이브러리인 Ghosd를 내려받자. 홈 페이지에 가면 문서를 얻을 수 있다.

  • 다운로드: 안정적인 교차 플랫폼 프로그래밍 언어인 펄을 내려받자.

  • 다음번 오픈 소스 개발 프로젝트는 IBM 평가판 소프트웨어로 진행해보자. 직접 내려받거나 DVD로 구할 수 있다.

  • IBM 제품 평가판을 내려받아 DB2®, Lotus®, Rational®, Tivoli®, WebSphere®와 같은 응용 개발 도구와 미들웨어 제품군을 사용해보자.

토론


필자소개

Nathan Harrington

Nathan Harrington은 IBM에 근무하는 프로그래머이며, 리눅스와 자원 위치 파악 기술 관련 업무를 진행하고 있다.




기사에 대한 평가


보다 나은 서비스를 제공하기 위함이오니 잠시 짬을 내어 이 양식을 제출하여 주십시오.



 


 


 


이 문서 북마킹 하기

mar.gar.in mar.gar.in naver naver eolin eolin del.icio.us del.icio.us





위로


developerWorks 콘텐트를 다른 사이트에 전재하기:
developerWorks 콘텐트에 대한 저작권은 IBM에 있습니다. IBM의 서면 허가나 원본 저자의 허락이 없이는 전재를 금합니다. 저희 콘텐트를 전재하시려면 IBM developerWorks 담당자 에게 문의하십시오.
    IBM 소개 개인정보 보호정책 문의