월간 보관물: 2014 4월

[CODE] GOBJECT-INTROSPECTION 간단 예제

여러 대기업들이 새로운 언어를 심심하면 만들어대는 바람에 개발자들이 공부해야 하는 언어가 점점 늘어나는 것 같습니다. 그리고 이미 UI/UX 관련 어플리케이션을 개발할 때는 두 개 이상의 언어를 섞어서 사용하는 경우가 점점 많아지고 있는데요, 대표적으로 gnome 같은 경우에는 컴포지터(mutter) 는 C 언어로 되어있고, 쉘(gnome-shell) 의 대부분의 UI 컴포넌트들은 자바스크립트 혹은 C# 으로 되어있습니다. 일반적으로 성능이 필요하거나 시스템 자원에 직접 접근해야 하는 경우에는 주로 C 언어가 사용되고, 작은 UI 컴포넌트를 개발할 때는 빠르고 쉽게 작업하기 위해 자바스크립트와 C# 같은 언어가 자주 사용되는 것 같습니다.

예전부터 두 개 이상의 언어를 바인딩 하는 방법은 여러 가지가 있었는데, 오늘은 간단하게 오픈 소스 진영에서 자주 사용되는 gobject 를 기반으로 한 gobject-introspection 에 대해 소개드리도록 하겠습니다.

gis

위의 그림처럼 기존에는 C 언어로 되어있는 GTK+ 를 다른 언어에서 직접 사용하기 위해서는 PyGTK 나 GTK# 같은 별도의 추가적인 라이브러리가 필요했습니다. 그래서 언어별로 따로 지원하는게 너무 힘들고 귀찮은 일이니 이걸 한방에 해결하기 위해 나온게 gobject-introspection 이라는 기술입니다. 간단히 말해 오른쪽 그림처럼 gobject-introspection 을 지원하는 모든 언어끼리는 아주 쉽게 서로 연동이 가능해진다는 겁니다.

사용 방법은 간단합니다. GTK+ 를 다른 언어에서 사용하고 싶으면 (g-ir-scanner/g-ir-compiler 툴을 이용해서 당연히 자동으로) GTK+ 를 스캔해서 GTK+ 가 제공하는 외부 인터페이스 정보(typelib) 를 생성하면 끝입니다. 그리고 자바스크립트에서 사용하고 싶으면 gobject-introspection 에서 제공하는 런타임 라이브러리(libgirepository) 를 이용해서 GTK+ 가 제공하는 외부 인터페이스를 사용하기만 하면 됩니다.

간단하게 C 언어로 공유 라이브러리를 개발해서 자바스크립트에서 사용하는 예제를 공유해드릴테니 관심있으신 분들은 살펴보시면 도움이 될 것 같습니다.

https://github.com/haruband/gobject-introspection-example

위의 예제는 자바스크립트에서 C 언어로 되어있는 객체의 속성을 읽거나 쓰고, 외부 함수를 호출하는 기능과 C 언어에서 자바스크립트의 콜백 함수를 호출하는 기능이 들어가있습니다. 자바스크립트 엔진은 gnome 에서 사용하는 gjs 를 사용하였고, 빌드는 일단 제가 cmake 로 자동화시켜놨으니 그냥 하시면 되고, 실행할 때는 C 언어로 되어있는 공유 라이브러리와 typelib 의 위치를 신경써서 실행하시기 바랍니다.

개인적으로 NEMOSHELL 에서 자바스크립트로 되어있는 수많은 시각화 라이브러리를 재활용하기 위해 시작했는데 꽤 괜찮을꺼같습니다. 최근 나온 자바스크립트 라이브러리들이 대부분 HTML5 의 캔버스 기능을 이용해서 렌더링하기 때문에 이것만 네이티브의 wayland 와 cairo 로 잘 엮어주면 아주 효과적으로 사용할 수 있을것 같습니다.

Advertisements

[TECH] SF 영화에 나오는 테이블탑 컴퓨팅 소개

어벤저스와 같은 SF 영화에 자주 등장하는 컴퓨팅 환경은 우리가 일상적으로 사용하는 컴퓨팅 환경과는 상당히 다른 모습이다. 대부분 디스플레이는 크고 투명하며, 인터페이스는 터치 혹은 컴퓨터 비전을 이용하는 방식이다. 그리고 전반적인 UX (User eXperience)는 애니메이션과 같은 동적 효과를 잔뜩 포함하고 있으며, 여러 사람이 동시에 사용하는 모습을 자주 보여주고 있다. 그런 걸 보면 누구나 저게 실제 가능한건가? 가능하다면 언제쯤 사용할 수 있나? 궁금할텐데 오늘은 그에 대한 간단한 기술적인 얘기들을 하려고 한다.

아래의 어메이징 스파이더맨 2 트레일러의 40초 부분에 잠깐 스쳐지나가는게 필자가 말하는 테이블탑 컴퓨팅이다. 실제 영화를 보면 기존의 영화보다는 꽤 길고 자세하게 사용하는 모습을 보여준다.

우선 필자의 블로그에서 관련 글을 읽어본 사람이라면 알겠지만, 필자가 하는 일이 바로 SF 영화에 나오는 그런 컴퓨팅 환경을 여러 가지를 고려해서 실제 사용 가능한 수준으로 개발하는 것이다. 하지만 필자의 전문분야는 ‘시스템 소프트웨어 개발’이기 때문에 UX 적인 측면에 대한 이야기보다는 소프트웨어 관련된 기술적인 이야기들을 주로 할 것이다.

우선 첫 번째로 디스플레이를 살펴보자. 현재 가정에서 사용하는 TV 도 상당히 큰 사이즈이고, 길거리를 돌아다니다보면 굉장히 큰 디스플레이를 보는 것도 어려운 일이 아니다. 그리고 투명 디스플레이도 몇 년전부터 여러 대기업들이 줄기차게 광고를 해왔고 얼마 전에 강남역 2호선 지하철 타는 곳에 50인치 정도되는 투명 디스플레이 네 개를 이어붙여서 만든게 설치되었다. 물론 아직은 단순히 광고를 보여주는 수준이지만, 올해부터 국내 두 대기업을 중심으로 대형 투명 디스플레이가 활용 범위를 점점 넓혀갈 것으로 보인다.

그리고 두 번째로 인터페이스를 살펴보자. 우리가 스마트폰에서 사용하는 터치는 정전식인데, 대형 터치 스크린에서 주로 사용되는 방식은 적외선 방식이다. 적외선 방식도 여러 가지가 있는데 가장 많이 사용되는 방식은 측면에서 적외선을 쏘는 방식이다. 즉, 사각형 형태 스크린의 네 개의 테두리가 서로 마주보며 적외선을 쏘아서 스크린 가까이에 손가락이 어느 위치에 올려져 있는지를 알아내는 방식이다. 그리고 또 하나가 제프 한이라는 재미 교포가 만든 스크린 뒤에서 앞으로 적외선을 쏘는 방식이다. 아래 동영상은 제프 한이 2006년도 TED 에 나와서 발표한 내용이다. 이 연구는 제프 한의 학위 논문 주제이고, 이후에 설립한 회사가 MS 에 인수합병되어 현재는 MS 에 근무하고 있는 걸로 알고 있다. (이것도 제품화가 되었는데 MS 에서 PixelSense 라는 이름으로 공개했고, 이걸 삼성에서 Sur40 이라는 이름으로 양산해서 팔고 있다.)

어메이징 스파이더맨 2를 유심히 본 사람은 기억하겠지만, 영화 중간에 해리 오스본이 사무실에서 아버지가 준 작은 물체를 테이블탑 위에 실수로 떨어뜨리자 테이블탑이 물체를 정확히 인식해서 관련된 정보를 보여주는 장면이 있다. 이건 현재도 PixelSense 에서 제공하는 tag 라는 기능으로 비슷하게 흉내는 낼 수 있다. 간단히 생각해보면 알겠지만 측면 적외선 방식은 스크린의 어느 위치에 빛을 가로막는 물체가 올려졌는지 밖에 인식할 수 없지만, 후방 적외선 방식은 화면위에 어떤 모양의 물체가 올려져있는지도 알 수 있다. (실제로 PixelSense 를 이용해서 개발할 때는 후방 적외선 카메라로부터 들어온 영상을 분석해서 사용한다.) 그래서 일종의 바코드같이 생긴 tag 를 물체의 바닥에 부착하면 화면의 어느 위치에 해당 물체가 올려졌는지 정도는 인식할 수 있게 된다. 아래 동영상에서 유사한 기능을 사용하는 예를 보여주고 있다. 하지만 PixelSense 는 상대적으로 가격이 상당히 비싸고, 주변의 빛에 영향을 받는 등의 문제가 있어 아직 널리 사용되고 있진 않은 것 같다. (우리도 처음에는 PixelSense 를 구매하려고 했지만 가격의 압박과 리눅스 지원 문제 등으로 PQLabs 에서 나온 제품을 구매했다;;)
* 시중에서 쉽게 구할 수 있는 DELL, Samsung 터치 디스플레이에서도 잘 동작한다. (2014.11 업데이트)

그리고 마지막으로 가장 중요한 소프트웨어 이야기를 하도록 하겠다. 사실 하드웨어는 어느 정도 준비가 되었다고 볼 수 있다. 하지만 문제는 소프트웨어, 특히 플랫폼은 아직 굉장히 미흡하다는 점이다. 테이블탑에서 사용할 수 있는 서비스를 개발하는 건 크게 보면 두 가지 방식이 있다. 스마트폰처럼 전체 스크린을 하나의 어플리케이션이 독점해서 사용하는 방식과 데스크탑처럼 여러 어플리케이션이 동시에 동작하는 방식이다.

현재까지는 제한된 활용 분야와 여러 가지 이유로 전체 스크린을 하나의 어플리케이션이 독점하는 방식이 주로 사용되어 왔다. 이 방식의 장점은 원하는 서비스를 지원하는 어플리케이션을 그냥 개발만 하면 된다는 것이고, 단점은 필요한 서비스가 하나의 어플리케이션 안에 모두 들어가 있어야 한다는 것이다. (하나의 어플리케이션이 전체 화면을 덮고 있기 때문에 해당 어플리케이션이 보여주는 화면만이 보여진다.)

반대로 데스크탑처럼 여러 어플리케이션이 동시에 동작하는 방식은 일반적으로 윈도우 매니저라는게 필요한데, 이 방식의 장점은 여러 어플리케이션을 동시에 띄을 수 있기 때문에 여러 서비스를 필요에 따라 분리해서 개발할 수 있고, 그래서 재활용성도 높아진다. 하지만 현재까지 이러한 테이블탑 환경을 지원하는 윈도우 매니저가 없기 때문에 이걸 새로 개발해야 한다는 문제가 있다. (기존의 데스크탑 환경에서 사용하던 윈도우 매니저는 혼자서 키보드와 마우스를 이용해서 사용하는 컴퓨팅 환경에 최적화되어 있다.) 바로 이 문제를 해결하기 위해 나온 윈도우 매니저가 NEMOSHELL 이다. 아직 해야할 일이 굉장히 많긴 하지만…

최근 국내/외 분위기를 보면 앞으로 3~5년 뒤가 너무 기대된다. IT 의 가장 큰 매력은 다른 분야와 달리 순식간에 우리의 삶을 뒤바꿀 수 있다는 점인 것 같다. 내가 늘 꿈꾸는 그런 세상, IBM 에서 만든 EVERYWHERE COMPUTING 이라는 말이 이제 정말 손에 잡힐듯 다가오는 것 같다.

Maynard: A Lightweight Wayland Desktop

대표적인 오픈소스 컨설팅 업체인 콜라보라(Collabora) 에서 weston gtk-shell 기반의 Maynard 를 공개했네요. 작년부터 qt 기반의 쉘 플러그인은 여러 개 공개되었지만 gtk 기반으로는 거의 처음인거 같습니다. 그리고 wayland/weston 에 많은 기여를 하고 있는 콜라보라에서 진행한다고 하니 더 관심이 가네요. 콜라보라가 weston 에서 ARM 을 위한 작업을 작년부터 해왔기 때문에 Maynard 또한 그러한 환경을 고려하고 만드는거 같긴한데 자세한 내용은 좀 더 살펴봐야겠습니다. 아직 xwayland 도 지원하지 않는 초기상태이긴 하지만 많은 기대가 됩니다. 소스도 같이 공개되었으니 참고하세요!

http://www.phoronix.com/scan.php?page=news_item&px=MTY2NTk