Windows

OpenFramework를 Windows Universal App에서 사용해보기

최근에 OpenFramework(이하 OF)가 Windows Universal App에서도 사용할 수 있게 되었다. 직접 한번 간단히 해본 내용을 공유한다.

아직 나온지가 얼마 안 되서 그런지 친절한 튜토리얼은 없었다. MS오픈테크의 공지를 읽어 보니까 projectGenerator라고 하는 OF의 프로젝트 생성 툴이 있는데 이를 Universal App 프로젝트를 만드는 버전으로 포팅했다는 내용이 있다.

따라서, 해당 공지에 있는 GitHub의 OF 프로젝트를 Clone해봤다.

image

GitHub for Windows를 설치한 상태에서 Clone in Desktop을 클릭하여 프로젝트를 로컬로 Clone한다.

image

openFrameworks 프로젝트를 선택하고 Branch를 universal로 변경한다.

 

image 

Clone 된 폴더를 열고, projectGenerator라는 하위 폴더에 들어가면 projectGeneratorSimple_winrt.exe라는 실행파일을 찾을 수 있다.

이 파일을 실행하면 다음과 같은 GUI 툴이 나온다.

 

image

Name을 적당히 변경하고 GENERATE PROJECT 버튼을 눌러서 프로젝트를 생성한다.

image 

솔루션 파일을 열면 다음과 같은 구조로 되어 있다.

image

이 중에 ofApp.cpp가 openFramework를 사용하는 코드가 들어가는 파일이다. 현재는 아무런 코드가 작성되어 있지 않기 때문에 실행하면 회색 화면만 보인다.

image

이제부터는 openFramework.org의 튜토리얼을 따라서 ofApp.cpp나 opApp.h를 수정하면 된다.

image

ofApp.cpp 파일은 위와 같이 미리 정해진 메서드가 있고, 해당 메서드의 내용을 작성하면 되는 구조이다. setup()은 처음에 한번만 실행되고, draw()는 프레임 단위로 화면을 갱신하고, update()는 반복 실행하는 코드를 넣으면 된다.

여러 가지 튜토리얼 중 파티클 시스템을 따라해 봤다. 마우스의 클릭에 따라 원이 따라 움직이는 예제이다.

image

간단히 코드를 살펴보면 위와 같이 of로 시작하는 기본 제공 함수들을 이용하여 마우스 위치(mouseX, mouseY)를 가져와서, 색상을 정하고(ofBackgroundGradient(…), ofSetColor(…), ofFill() 등), 원을 그려 넣는 등(ofCircle(…)) 쉽게 구현을 해볼 수 있게 되어 있다. Shared 프로젝트에 ofApp.cpp 파일이 있어서 윈도우/윈도우폰 프로젝트 설정만 바꾸면 동일하게 실행되는 것을 확인할 수 있다.

_968

_969

간단히 openFramework가 유니버설 앱에서 동작하는 것을 확인하였는데, OpenGL이나 OpenCV 등도 동작하는지는 좀 더 살펴보아야 할 것 같다.

윈도우와 IoT

이번 Build 2014 컨퍼런스에서 진행되었던 세션들이 온라인에서 다시 볼 수 있는데, 그 중에 가장 조회수가 높은 윈도우와 IoT 세션에 대해서 리뷰를 해보고자 한다.

이 세션은 OS 그룹의 IoT팀의 Steve Teixeira라는 Director가 발표를 하였다.

iot 

여러 가지 IoT 세션들이 빌드에서 진행되었지만, 이 세션은 디바이스에 좀 더 초점을 맞췄다고 한다. 이 영역은 키보드나 마우스가 없으며 우리가 일반적으로 생각하는 컴퓨팅과는 다른 형태이고 인터랙션 방식도 다르다.

iot001

iot002

image

image

2020년까지 2천억개의 디바이스가 연결될 거라는 전망이 있다

IoT 디바이스의 구분은 크기에 따라 다음과 나누어 볼 수 있는데 그 활용이나 기술 구성은 사뭇 다르다. 첫번째 줄은 응용 영역, 두번째 줄은 기술 구성, 세번째 줄은 관련 Microsoft 기술이다.

image

그리고 이러한 디바이스들은 Azure M2M과 같은 클라우드를 통해 디바이스 관리, 명령, 제어, 데이터 분석 등을 제공할 수 있다. (관련 학습 동영상)

image

Build 2014 키노트에서 소개되었던 Intel의 Galileo 보드와 Sharks Cove라는 보드, 마이크로소프트에서 만든 무선 라우터 제품(Windows CE가 들어가는 제품으로 몇 년 전에 생산했었다고 함) 들을 세션에서 잠깐 소개하였다.

image

Micro 레벨에서 사용되는 .NET Micro Framework를 설명한다. 오픈소스이며, 런타임 퍼포먼스, 모던 랭귀지, 비주얼 스튜디오 측면에서 투자를 확대하고 있다.

image

.NET Micro Framework을 사용해서 아두이노 프로젝트를 할 수 있는 오픈소스 플랫폼인 netduino도 있는데, 올 봄에 Azure용 SDK를 출시한다고 한다.

image

좌측 화면에 발표자 옆의 라이트를 어떻게 만들었는지 살펴보고 있다. Netduino Plus 2, 라이트를 제어하는 릴레이 모듈, shorky bits(?), 블루투스 모듈 등이 들어있다.

image

솔루션을 자세히 보면, Netduino 프로젝트와 Windows Phone 프로젝트가 있고, WP앱에서 블루투스로 Netduino로 통신을 하는 구조이다. 소스 코드 상으로는 GPIO 인터페이스를 이용하여 LED를 제어하고 있고, 그 밑에는 블루투스 통신으로 들어오는 데이터를 처리하는 이벤트 핸들러 DataReceived 등이 보인다. Netduino 에서 WP앱의 신호를 받아서 처리하는 부분의 코드이다.

image 

WP앱 코드에서는 StreamSocket으로 블루투스 디바이스에 접속하여, 버튼을 눌렀을 때 신호를 보내는 코드가 작성되어 있다.

image

다음은 Small과 Mobile에 걸쳐있는 Connected Car를 살펴 본다.

image

마이크로소프트는 15년 이상 이 영역에 투자를 했는데 이미 여러 가지 사례들이 있다.

image

개인적으로 Ford의 대시보드와 Sync 솔루션을 접해보았는데, 그 동안은 UX 측면에서 느린 반응성이나 음성 인식의 부정확성, 인터페이스의 불편함 등으로 아직은 많이 부족하다는 생각이 들었다.

image

앞으로는 디바이스를 가지고 차와 연동하는 시나리오가 많아질 것이라고 한다. 이런 시스템을 IVI(in-vehicle-infotainment)라고 하는 듯.

image 

위 스크린샷의 윈도우 로고가 윈도우8인 것을 보니 최신 버전의 Car OS 사례인 듯 하다.

다음은 IVI+Windows의 컨셉카 데모 화면이다.(동영상의 0:30:36 부분)

image

image

image

image

마지막 화면은 앱과 마켓플레이스 컨셉을 나타내는 화면인데, 서드파티 앱 개발사들이 여기에 참여해서 카앱을 개발하여 경험을 확대할 수 있다. 파킹 앱이라던지… 안전한 운전을 위한 앱 가이드라인 등이 있어야 할 것이라는 얘기도 언급했다.

image

image

image

image

이 프로토타입은 Window Store App으로 개발되었는데, 개인적으로는 이러한 스타일이 자동차 UI에 가장 적절하고 효과적이라고 생각한다. 디자인 컨셉이 원래 복잡한 지하철이나 공항의 사인처럼 빠른 정보 제공을 할 수 있는 디자인을 추구한 것이라 자동차에서도 효과적으로 적용될 수 있을 것이라고 본다.

image 

image

image

image

image

image

image

커넥티트카 데모는 여기까지.

다음은 Small 디바이스 영역에 해당하는 내용이다. 여기는 Windows Embedded Compact가 활용된다.

image

image

새로운 Windows Embedded Compact 2013을 발표했다. Visual Studio 2013을 지원하고, Wi-Fi 접속이 개선되었다.

다음은 모바일 영역의 Windows Embbed Handheld를 소개한다.

image

image

기술 및 제품이 많아서 좀 헷깔릴 수 있는데, 작은 사이즈 부터 적용할 수 있는 기술/제품은 .NET Micro Framework > Windows Embedded > Windows Embedded Handheld > Windows Embedded Industry로 구성된다.

Assigned Access은 생산, 리테일, 배송 등의 영역에서 개인 보다는 역할에 타겟팅하여 디바이스 프로파일을 제공하는 기능이다. Enterprise App Development는 기업용 앱을 개발하여 이를 쉽게 탑재하는 기능이며, Device Management는 대규모의 배포에 최적화된 기능이다. 수많은 디바이스의 설정을 관리하는 등에 활용할 수 있다. Industry Standard APIs for Peripherals는 리테일 등에서 사용하는 다양한 주변기기를 지원하기 위한 산업 표준 API를 제공하여 꽂으면 바로 동작하게 하는 기능이다.

다음은 Windows Handhelds 8.1이 적용된 디바이스의 사례이다.

image

image

컨슈머용 제품과 비슷하게 보이지만 이 영역의 디바이스들은 대체로 내구성이 가장 중요한 핵심 요소라고 한다. 10피트 높이에서 콘크리트에 떨어뜨려도 문제 없도록 디자인되었다고 하는 ToughPad. 산업 현장에서 쓰기 위한 용도의 디바이스이다.

이런 디바이스들은 개인용이 아니라, 기업의 특정 직업군(역할) 프로파일을 제공하기 때문에 해당하는 역할에 맞게 최적화를 할 수 있는데, 예를 들어 다음과 같이 XML 설정 파일을 통해 시작화면에 보여줄 앱을 지정하거나, 버튼을 커스터마이징 하는 등의 설정이 가능하다.

image

다음은 특정 역할 프로파일로 로그인하는 데모이다.

image

게스트로 로그인을 하니까, 다음과 같은 커스터마이징된 시작화면이 나왔다.(좀 썰렁하게 설정되어 있다…)

image image image

다음은 Associate 로 로그인한 화면이다.

image image image

다음은 Manager로 로그인한 화면.

image image

매니저는 게임도 할 수 있다…

다음은 대형(Large) 디바이스의 사례이다.

image

image

로봇부터 의료 장비, 디지털 사이니지, ATM까지 다양한 시나리오의 디바이스가 있다.

올 봄에 Windows Embbedded 8.1 Industry Update를 출시한다고 한다.

image

개발자 경험이 향상되었고, 앱 개발이나 직접 배포(side-loading), 데스크탑-스토어앱 통신 등이 가능하다. UX가 개선되었고, 적은 메모리와 하드웨어 비용이 사용된다.

Embbed Lockdown Manager에서는 여러 가지 설정을 할 수 있는데, 사용자들이 Windows 제스쳐, 키보드의 Windows 키 등을 이용해서 네비게이션 못 하도록 각각 설정하는 등이 가능하다. USB 디바이스도 필터를 이용해서 제어가 가능하다.

image

애플리케이션 설정에서는 사용자 그룹과 기본 실행/실행 가능한 앱과 키오스크 모드(키오스크 시나리오를 위해서 하나의 앱이 전면으로 실행되는 기능)의 사용 여부 등을 설정할 수 있다. 미리 설정한 Kiosk 프로필로 로그인하면 아래와 같이 바로 키오스크 모드로 기본 앱이 실행된다.

image

image

image

다음은, 앞서 잠깐 언급한 향후 Atom 기반 태블릿에 적용될 SoC 칩 기반의 Sharks Cove 보드이다.

image

마지막으로 Small~Micro 영역의 디바이스에서 실행되는 윈도우이다.

image

5mm 짜리 PC인 Quark SoC이다.(CPU가 아니라 그냥 PC라고 강조함)

image 

이를 이용해서 개발한 보드가 Galileo이다.

image

image

Scalar instruction set architecture가 적용된 것이 다른 기존 32비트 x86 칩과 다른 점이다.

갈릴레오에 적용된 Windows에 Telnet으로 접속한 화면이다.

image 

CPP로 작성하여 빌드한 exe 실행파일을 Galileo로 복사하여 텔넷 화면에서 실행하고 있다.

image

image

그리고 정리. 지금 시작할 수 있는 것들…

image

현장에서 Galileo를 팔았으면 하나 샀을지도 모르겠다.

이 사이트(http://www.windowsondevices.com)에서 올 봄에 출시할 SDK와 샘플, 문서 등을 제공할 예정이다.

잘 알려지지는 않았지만 이미 다양한 디바이스 시나리오에 맞는 다양한 버전의 윈도우가 제공되고 있고, 안드로이드 등과의 경쟁 때문에라도 다시 이 임베디드 영역에 많은 투자를 하는 모습이다. .NET Micro Framework와 Windows Embbed, 그리고 Netduino, Galileo, Sharks Cove와 같은 보드에 관심을 가져볼만 하다는 생각이 든다.