태그 보관물: nemoux

[NEMOSHELL] Steam, XBMC, MS office, … 데모 공개!

오늘 촬영한 NEMOSHELL 데모 영상을 공개합니다. WAYLAND 윈도우 프로토콜을 지원하는 플랫폼을 개발한 보람을 드디어 느끼게 되는군요^^

첫 번째는 두 개의 키보드/마우스와 가상키보드/터치를 이용하여 두 명이 동시에 게임을 진행하는 영상입니다.

두 번째는 WINE 기반의 PlayOnLinux 로 동작시킨 MS 오피스를 사용하는 영상입니다.

세 번째는 Steam, XBMC 그리고 Chrome 을 동시에 사용하는 영상입니다.

다음 달에는 훨씬(!) 멋진 데모를 공개할 예정입니다. 기대하세요!

[NEMOSHELL] 우선체험 및 공동연구 모집

NEMOSHELL은 터치기반 디스플레이 및 다중사용자를 지원하는 개방형 SW플랫폼입니다.
지난 달 ITS에서 공개한 이후 교내 까페/도서관 사용성평가 및 HCIK 데모를 통해 많은 분들의 관심을 받고 있습니다.

저희 NEMO-UX 팀은 본 플랫폼의 1) 다양한 활용 사례를 발굴하고, 2) 보다 많은 사용자들에게 새로운 사용자 경험을 제공하기 위해 “우선체험 및 공동연구 팀” (일반 사용자/개발자, 학교, 회사)을 모집하고자 합니다.

함께 하시게 되면, 현재 개발 중인 NEMOSHELL SW플랫폼을 다양하게 활용하실수 있도록 적극 지원해드릴 계획입니다.
(원활한 진행을 위해 모집대상은 “서울/경기”로 한정하고, 추후에 누구나 사용할수 있도록 온라인상으로 배포할 예정입니다)

  • 문의: 소속, 이름, 휴대폰번호, 함께하고 싶은 내용을 편하게 적어서 이메일로 보내주세요!
  • 이메일: nemoux00@gmail.com

많은 참여바랍니다. 감사합니다. 🙂

[NEMOSHELL] 성균관대학교 교내까페 데모 (20141203-05)

2014년 12월 3일부터 5일까지 성균관대학교 교내에 있는 가든브릿지라는 까페에서 데모를 하였습니다. 3일간 기대 이상으로 많은 분들이 설문지도 작성해주시고, 관심가져주셔서 저희에게는 매우 뜻깊은 행사였던 것 같습니다. 아래에 데모 진행하면서 간단히 촬영한 영상을 올려드립니다.

조만간 홍대에 위치한 까페에서도 프로모션을 진행할 생각이고, 이외에도 다양한 프로모션을 계획 중입니다.

HCIK 2015 행사에서 NEMOSHELL 데모를 진행합니다!

독일에서 있었던 ITS 2014 를 다녀온지 얼마 되진 않았지만, 국내에서 중요한 HCI 관련 행사 중의 하나인 HCIK 에서 실기 데모를 진행할 예정입니다. 행사 관련 정보는 아래와 같습니다.

일시 : 2014년 12월 10-12일
장소 : 서울 그랜드 힐튼 호텔
홈페이지 : http://hcikorea.sql.co.kr/hcik2015_e/

저희가 개발 중인 NEMOSHELL 은 SMART TABLE 이나 WALL 과 같은 터치 기반의 컴퓨팅 환경에서 사용할 수 있는 개방형 플랫폼이고, 간단히 얘기하면 기존의 피쳐폰에 안드로이드와 iOS 가 적용되어 스마트폰이 된 것처럼 현재의 디지털 사이니지와 같은 제품에 NEMOSHELL 을 적용해서 스마트하게 사용해보자는 취지에서 개발 중입니다. 자세한 정보는 아래 홈페이지와 데모 영상을 참고하시고, 관심있으신 분들은 편하게 오셔서 NEMOSHELL 을 경험해보시면 좋을 것 같습니다.

http://www.nemoux.net/


[NEMOSHELL] 터미널 & 시그널 처리

오늘 NEMOSHELL 에서 실행한 터미널에서 어플리케이션을 실행하고 나서 CTRL+C (SIGINT) 가 먹지 않는 버그를 발견했다. 일반적인 단일 어플리케이션을 개발하고 있는 상황이라면 바로 시그널 처리에 문제가 있다는걸 알았겠지만, 윈도우 매니저와 쉘을 개발하고 있는 중이기 때문에 처음에는 키보드 입력 값이 터미널 쪽으로 전달되는 과정에서 문제가 있는지 알고 삽질하다가 결국 엉뚱한 곳에서 문제를 해결하였다.

우선 일반적인 그래픽 기반의 터미널이 동작하는 과정을 간단히 설명하도록 하겠다.

terminal

위의 그림은 WAYLAND/WESTON 기반의 그래픽 기반 터미널이 동작하는 과정을 간단히 표현한 것이다. 일단 간단히 실행 준비 과정부터 살펴보면, 사용자가 터미널을 실행하면 터미널은 /bin/bash 의 표준 입출력을 파이프로 연결한 다음 실행한다. 이렇게 되면 터미널에서 파이프를 이용하여 /bin/bash 에 커맨드를 전달하고, 그 출력값을 간단히 받아올 수 있다. (즉, 실질적인 커맨드 기반 쉘의 기능은 /bin/bash 를 그대로 활용하는 것이다.)
그리고 전체 동작 과정은 다음과 같다. 터미널이 포커싱되어 있는 상태에서 키보드를 누르면 먼저 WESTON 이 EVDEV 를 통해 입력값을 받아오고, 터미널에게 wl_keyboard 인터페이스를 이용하여 값을 전달한다. 그리고 터미널에서는 키보드 상태와 전달값을 이용하여 필요한 입력값을 파이프를 통해 /bin/bash 에 전달한다. 그리고 /bin/bash 가 이를 처리하고 출력값이 있다면 반대로 파이프를 이용하여 출력값을 터미널로 전달한다. 마지막으로 터미널은 이 값을 그래픽 엔진(여기서는 CAIRO 벡터 엔진)을 이용하여 그린 다음, wl_surface 인터페이스를 통해 WESTON 에게 전달하면, WESTON 은 이를 그래픽 장치에 반영하게 된다.
위에 간단히 설명한 과정이 일반적인 그래픽 기반의 터미널이 동작하는 과정이다. 그리고 마지막으로 CTRL+C 가 전달되는 과정은 터미널에서 /bin/bash 에게 CTRL+C 에 해당하는 ASCII 코드 값인 0x03 을 전달하면 /bin/bash 가 foreground 로 동작 중인 어플리케이션에게 SIGINT 를 전달하여 어플리케이션은 실행을 종료하거나 등록된 핸들러를 실행하게 된다.

즉, 위에서 설명한 것처럼 CTRL+C 를 키보드로 눌러도 어플리케이션이 반응하지 못할 이유는 너무나도 많다. 다행히 이것저것 디버깅을 하다가 결국 어플리케이션이 SIGINT 를 블로킹하고 있다는 사실을 알아냈다. 알고 보니, /bin/bash 와 터미널도 모두 SIGINT 를 블로킹하고 있었다. 이유는, 당연히(!!!) 나의 실수로 NEMOSHELL 에서 터미널을 실행할 때 시그널을 초기화해주는 걸 깜빡한 거였다. 그래서 부모의 시그널 설정을 그대로 상속받아서 SIGINT 가 블로킹되어있었던 것이다. 이거 때문에 오후를 그냥 날리다니…ㅠㅠ 그래도 덕분에 겸사겸사 이것저것 살펴봤으니 불행 중 다행이다;;

[INTERFACE] 립 모션(Leap Motion)의 용도?!?!

2012년 말에 립 모션 소개 동영상을 처음 봤을 땐 큰 감동을 받았다. 이유는 홍보 동영상을 참 잘 만들었기 때문이다. 그래서인지 소셜펀딩을 통해 엄청난 성공을 거두고, 뒤이어 대규모의 투자를 유치하였다. 하지만 개인적으로는 립 모션에 대해 생각을 하면 할수록 용도나 포지션이 애매한거같아 걱정이 됐었다. 그러다가 2013년 ITRC 포럼에서 잠깐 만져보고, 오늘 직접 구매해서 사용해본 결과 내가 우려하던 것들이 결국 현실이 되었구나라는 확신(?)이 들었다.

일단 먼저 입출력 장치들을 내 나름대로의 기준으로 아래와 같이 분류를 해보았다.

input

이벤트 장치와 포인팅 장치의 분류 기준은 입력 장치의 최종 결과물의 용도를 기준으로 나누었다. 즉, 이벤트 장치는 사용자가 다양한 형태로 미리 정의된 범위 안의 이벤트를 지정하는 장치들을 의미하고, 포인팅 장치는 특정 위치를 지정하기 위한 장치들을 의미한다. (음성 인식이나 뇌파 인식은 궁극적으로는 입력 형태의 제한이 없어지겠지만, 현재 사용 가능한 기술 수준이 미리 등록된 데이타와의 패턴 매칭이기 때문에 일단은 이벤트 장치로 분류하였다.)

그리고 포인팅 장치는 절대 위치 장치와 상대 위치 장치로 나누었다. 절대 위치 장치는 멀티터치와 같이 출력 장치의 위치를 한번에 지정하는 방식이고, 상대 위치는 마우스처럼 출력 장치 위에 나타난 가이드를 이리저리 움직이며 위치를 찾아가는 방식이다.

그렇다면 립 모션은 어느 위치에 속한 장치일까?

립 모션의 홍보 동영상을 보면 약간(?) 멀티터치를 대체하는 듯한 느낌을 주려 한다. 하지만 직관적으로 생각해봐도 그렇고, 실제로 써보면 더욱더 느껴지는 것은 스크린과 손가락 사이의 거리가 있기 때문에 특정 위치를 잡기가 쉽지 않다. 그렇다면 마우스와 같이 상대 위치 장치로는 사용할 수 있을까? 이것 또한 쉽지 않다. 이유는 멀티터치나 마우스의 경우 DOWN/UP(멀티터치로 화면을 눌렀다 떼는, 마우스로 버튼을 눌렀다 떼는) 기능이 존재한다. 그렇기 때문에 임의의 A 위치에서 B 위치까지를 편리하게 지정할 수 있다. 하지만 립 모션은 그게 불가능하다. 손가락으로 물체를 가리키고 있는 상태에서 DOWN/UP 이벤트를 넘겨줄 방법이 없다. (립 모션만을 이용해서 그림판으로 그림을 그린다고 상상해보면…답이 안 나온다…)

그렇다면 결국 립 모션의 주된 용도는 이벤트 장치가 될 수 밖에 없다. 근데 여기에 또한 문제가 있다. 립 모션의 센서 인식 범위가 생각보다 좁아서, 결국 간단한 이벤트 몇 가지 넘기기 위해서 장치 바로 위에 손을 들고 있어야 하는 심각한 문제가 생길 수 있다. 이럴바에는 (아직 인식률이 어느 정도 인지는 모르겠지만) MYO 가 훨씬 좋을꺼같다. MYO 는 홍보 동영상에서 나오는 것처럼 프리젠테이션을 할때나 여러 공간을 돌아다니면서 필요한 이벤트를 자유롭게 전달할 수 있다. 즉, 립 모션과 MYO 를 비교해보면 인식률은 아직 미확인 상태이고, 공간 활용성 측면에서는 MYO 가 월등히 우세하다는 말이다.

결국 나의 결론은 립 모션은 키넥트 처럼 제한적인 프로그램(주로 게임)에서나 조금 쓸 수 있지, 일반적인 UX 에서 활용하기에는 심각한 문제들이 복합적으로 존재한다는 것이다.

이건 어디까지나 짧은 내 개인적인 생각이고, 어찌됐든 내가 생각하는 NEMO-UX 를 위한 가장 이상적인 조합은 멀티터치+MYO 이다.

[NEMOSHELL] 2. 기본 컨셉

이번 글에서는 NEMO-UX 의 개발 방향, 기본 구성 요소와 동작 원리, 그리고 프로토타입 데모를 소개하고자 한다.

NEMO-UX 의 개발 방향

NEMO-UX 는 기존의 데스크탑, 스마트폰의 컴퓨팅 환경을 대체하는 것은 아니다. 아무리 훌륭한 차세대 입출력 장치가 나오더라도 키보드+마우스+모니터의 생산성을 따라갈 수는 없을 것이고, 그러한 환경에 최적화 되어있는 현재의 데스크탑 기반 윈도우 매니저도 꾸준히 그 역할을 유지할 것이기 때문이다. 우리가 기대하는 것은 앞으로 차세대 입출력 장치를 이용한 다양한 용도의 새로운 컴퓨팅 환경들이 나올 것이고, 그러한 환경에 보다 쉽게 적용될 수 있는 UX 플랫폼이 필요해질 거라는 점이다. (스마트폰을 위해 안드로이드와 iOS 가 나온 것처럼…)

우리는 이를 위해 다음과 같은 기본 목표들을 정의하였다.

  • 3차원 공간 관리 .. NEMO-UX 는 최소 단위의 UX 컴포넌트들까지 3차원 공간에서 자유롭게 배치될 수 있도록 지원한다.
  • 실시간 렌더링 .. NEMO-UX 는 실시간 레이트레이싱 기술을 적용하여 색다른 분위기의 역동적인 비주얼을 제공한다.
  • 벡터 그래픽 .. NEMO-UX 는 벡터 그래픽 기술에 기반을 둠으로써 해상도에 제약을 받지 않고, 효과적인 애니메이션 기능을 제공한다.

NEMO-UX 의 기본 구성 요소

기존 2D 기반 윈도우 환경의 기본 구성 요소는 단순하다. 클라이언트는 자신이 사용할 윈도우를 할당받고, 해당 윈도우의 내부만을 채워서 사용한다. 즉, 윈도우 매니저는 클라이언트를 위해 윈도우라는 기본 요소만 잘 관리해 주면 되는 것이다. 윈도우 내부를 채우는 일은 전적으로 클라이언트가 알아서 할 일이다. (위젯 엔진을 이용하여 여러 위젯으로 해당 윈도우를 채울 수도 있고, 전체를 마음대로 그리거나 할 수도 있다.)

이에 반해, 3D 기반 NEMO-UX 환경의 기본 구성 요소는 어떠할까? 첫 번째 중요한 구성 요소는 텍스쳐(texture)이다. 이는 기존의 윈도우처럼 클라이언트가 내부를 마음대로 채울 수 있는 2D 의 평면적인 공간이다. 그리고 두 번째로 중요한 구성 요소는 액터(actor)이다. NEMO-UX 는 텍스쳐를 평면 형태로 3D 공간 안에 띄우는 것이 아니고, 액터라고 부르는 3D 물체의 표면에 텍스쳐를 매핑시킨다. 이렇게 함으로써 우리는 새로운 사용성과 시각성을 확보할 수 있다. 예를 들어, 하나의 텍스쳐를 만든 후 여러 개의 액터에 동시에 매핑하면 동일한 화면을 여러 군데서 동시에 접근할 수 있다. (이는 우리가 스마트 테이블이나 스마트 월을 위해 기본적으로 고려하고 있는 다중 사용자를 위한 컴퓨팅 환경에서 유용하다.) 또한, 단순 평면이 아닌 3D 물체를 이용함으로써 실시간 레이트레이싱의 효과를 극대화하고, 물리 엔진이나 몰핑(morphing) 같은 다양한 3D 효과를 적용하는 것이 가능해진다.

그리고 마지막으로, 액터에는 다음의 세 가지 형태가 존재한다는 사실을 알아두면 좋겠다. (이 세 가지 모두다 하나의 베이스 클래스를 상속하고 있다.)

  • ACTOR .. 다양한 모양(geometry)을 가질 수 있는 3D 물체로 텍스쳐를 매핑하는 용도로 사용
  • LIGHT .. 빛을 생성하는 조명(광원)으로 활용
  • STAGE .. 여러 액터들을 그룹으로 묶어 관리

NEMO-UX 의 기본 동작 원리

NEMO-UX 의 클라이언트는 앞에서 설명한 것처럼 텍스쳐와 액터를 기반으로 동작한다. 몇 가지 기본 시나리오를 통해 이들이 어떻게 동작하는지 간단히 설명하겠다.

1. 원하는 화면 출력

클라이언트는 화면에 무언가를 보여주기 위해 우선 텍스쳐를 할당받고, 해당 텍스쳐를 (기본적으로) 2D 벡터 그래픽을 이용하여 채운다. (여기까지는 실제 화면상에서 아무 것도 보이지 않는다.) 그리고나서 액터를 할당받은 후, 원하는 텍스쳐를 매핑시킨다. 이런 과정을 거치고 나면, 실제로 화면 상에 새로운 3D 물체가 나타나고, 그 물체의 표면에는 클라이언트가 만든 화면이 표시된다.

2. 사용자 이벤트 처리

기존의 윈도우 매니저는 사용자 이벤트를 받는 대상이 윈도우 그 자체였다. 하지만 NEMO-UX 에서는 사용자 이벤트를 받는 대상이 텍스쳐가 아니고, 액터이다. 사용자가 3차원 공간 상의 임의의 액터를 터치하게 되면 해당 액터를 소유하고 있는 클라이언트에게 액터 ID와 액터의 어느 위치가 터치 되었는지가 이벤트로 전달된다. 이를 통해 클라이언트는 (액터에 연결되어있는 텍스쳐를 이미 알고 있기 때문에) 필요한 작업들을 수행하게 된다.

3. 텍스쳐와 액터 기본 사용 정책

NEMO-UX 에서는 클라이언트가 여러 개의 텍스쳐와 여러 개의 액터를 동시에 활용하는 것을 선호하고, 기본적으로 하나의 텍스쳐와 액터가 합쳐져서 하나의 위젯 역할을 하기를 원한다. 즉, 각각의 위젯들이 독립된 액터로 동작하면서 3D 공간을 충분히 활용하고, 다양한 3D 효과를 이용하기를 바란다는 것이다. 하지만, 필요에 따라서는 하나의 텍스쳐와 액터를 이용하여 기존의 X 클라이언트를 그대로 동작시키는 것 또한 가능하다. (이미 xwayland 가 공개되어있기 때문에, 단지 wayland 의 wl_surface 를 내부적으로 wl_texture 로 변환하여 자동으로 wl_actor 에 연결시켜주기만 하면 된다.)

NEMO-UX 의 프로토타입 데모 동영상

지금까지 설명했던 NEMO-UX 에 대한 내용들을 직관적으로 보여주기 위해서 프로토타입 수준으로 개발했던 데모 영상 몇 가지를 보면서 추가적인 설명을 하도록 하겠다. 현재 구현되어있는 클라이언트는 리눅스 터미널과 간단한 스케치 프로그램이다.

주변광을 어둡게 하고, 카메라 뒤쪽에 위치한 광원을 회전 운동시켜서 빛 효과가 어떻게 자연스럽게 적용되는지를 보여주는 동영상이다. (10×10 개의 타일 형태로 배치된 액터에는 하나의 지구 이미지가 나뉘어서 매핑되어 있다.)

사용자가 액터를 터치하면 해당 액터에 gstreamer 를 이용한 테스트 동영상이 출력되고, 액터의 모양이 정육면체로 변한 뒤 구(sphere) 형태로 다시 변한다. 그리고 마지막으로 해당 액터가 3차원 공간 안에서 움직이게 된다. (추가적으로 해당 액터에 출력되는 테스트 동영상은 백그라운드에도 동시에 출력되게 하였다.)

10×10 개의 타일 형태로 되어있는 액터들은 하나의 스테이지에 포함되어있다. 이들이 어떻게 활용될 수 있는지를 간단히 보여주는 동영상이다. (액터들은 개별적인 변환(transform) 대상이 되지만, 스테이지 또한 하나의 액터이기 때문에 포함되어있는 모든 액터들을 동시에 변환할 수 있다.)

카메라를 밀고 당기고, 회전시키는 간단한 데모 동영상이다.

줄리아 집합을 이용한 간단한 액터 변환 애니메이션이다.

NEMO-UX 가 테이블탑에 사용될 경우를 가정한 데모이다. 하나의 텍스쳐를 두 개의 액터에 매핑하고, 두 개의 액터는 각각 아래쪽과 오른쪽 사용자에 의해 동시에 사용된다.

여러 개의 가상 키보드를 동시에 사용하는 데모이다. 위의 동영상과 마찬가지로 테이블탑에서 아래쪽과 오른쪽 사용자가 각각 가상 키보드를 사용하고 있다.