Bixby's hello world

Personal Computer/Linux 2019. 12. 10. 02:49 posted by tolkien

컴퓨터 언어를 새로 접하면 항상 해보는 것이 "hello, world" 문자열찍는 예제이다.

빅스비에서 hello, world에 해당되는 것이 capsule-sample-dice, 이른바 주사위 던지기.이다.

 

심지어 Bixby Developer Center에 들어가면 Quick Start Guide로 제시하고 있다.

처음부터 생성하는 것이 아니라 예제를 download받고 그 내용을 설명하는 것으로 되어 있다.

빅스비의 개념을 익히는데, 상당히 힘들뿐 아니라 실행도 전혀 빅스비답지 않다.

그래서, 만들어봤다.

 

0. Bixby Studio를 깔고 실행하면 제일 먼저 login 화면이 나온다.

    삼성 Bixby 개발자로 등록하지 않으면 Bixby 맛도 볼 수 없다. 돈 드는 것 아니니, 등록하자.

    여기서 사용한 Bixby Studio Version은 7.8.0-r19w.13177 (2019/12/10일 기준) 이다.

 

1. Capsule 만들기. 빅스비에서는 실행파일 == Capsule이다.

- File메뉴에서 New Capsule 선택하고, Capsule ID는 playground.helloworld .

* 참고로 playground.라는 prefix를 주지 않으면 Bixby IDE에서 생성하지 않는다. 그리고, Capsule ID는 영어 소문자로 시작해야 한다. 이런저런 이름에 대한 제한은 Capsule 생성 dialog에 있는 link를 찍어서 내용을 확인할 것.

 

생성하면 뭔가 기본 파일들을 만들어 주는데, error 3개, warning 7개가 뜬다. 시작부터 난감.

일단 이 error부터 잡으면서 시작하는 것이 정신건강상 좋은 것같다.

 

2. 해당 Capsule을 확장하면 보이는 capsule.bxb 를 열고 아래 내용을 추가한다.

  store-sections{
    section (GamesAndFun)
  }

  store-countries{
   // all
   only{
      allow (KR)
    }
  }

그리고, runtime-flags { .. } 안에 다음을 추가한다.

 // add below for error correction
no-filtering-with-validation
modern-default-view-behavior
use-input-views-for-selection-list-detail

 

3. 그 다음으로 resource/en-US/capsule-info.bxb 을 열어서 다음을 추가한다.

  dispatch-name (helloworld)
  search-keywords {
    keyword (hello)
  }

그럼 warning 하나 빼고 capsule.bxb에서 나오는 error는 사라진다.

(남은 하나는 icon file이 없다고 징징대는 것인데, 없어도 실행하는데 지장없다.)

 

4. 그리고, resources/en-US/hints.bxb 파일을 열어서 hint(...) 부분을 지우고 다음을 추가.

    hint (ask helloworld to say it)
    hint (ask helloworld to say world)
    hint (ask helloworld to say something)

여기에 좀 지저분한 것이 있는데, 보고 싶으시면

더보기
The current en-US dispatch patterns are the following:

 

"with %dispatch-name% ..."

"in %dispatch-name% ..."

"ask %dispatch-name% ..."

"ask %dispatch-name% for ..."

"ask %dispatch-name% to ..."

 

The current ko-KR dispatch pattern is the following:

 

%dispatch-name% 에서 ...

 

for detail, see https://stackoverflow.com/questions/57241026/invoke-specific-action-when-bixby-capsule-launched

 

이제 warning 하나만 남았으니 뭔가 compile해서 실행할 수 있을 것같다.

여기서 왼쪽 하단의 휴대폰 모양 icon을 click하면 Bixby emulator가 뜨는데,

왼쪽에  어떤 글자를 입력한 다음에 "Run NL"을 실행해도 "I didn't understand that"이라는 말만 한다.

그럼 이제 뭔가를 타이핑하거나 말하면 hello, world라는 글자가 출력되게 하자.

 

5. models/concepts/world.model.bxb 생성

 * Bixby에서 Concept은 C나 java에서 변수와 같은 개념이다. 변수가 100개면 Concept 파일이 100개~

 * 왼쪽 helloworld Capsule browser에서

  . models를 click해서 확장시키고

  . concepts 위에서 마우스 오른쪽 click 하면

  . Context Menu가 뜨고, 거기서 New -> Model 선택하면 Dialog가 뜬다.

    여기서 File Type: Model, Template : Text 선택해주고, filename은 world.model.bxb

 

  -> 이러면, world라는 text 변수가 하나 생성되었다.

 

6. code/helloWorld.js 생성

 * 그 다음에는 world라는 text 변수에 "hello, world"를 넣도록 javaScript을 작성하자.

 * helloworld Capsule browser에서

  . code 위에서 마우스 오른쪽 click해서 New -> Action JavaScript 선택

  . 파일명은 code/helloWorld.js 으로 만들어 주고, 아래 내용으로 바꾸어 넣자

module.exports.function = function helloWorld () {
  return "hello, world"
}

 

7. models/actions/doHelloWorldᅟ.model.bxb 생성

 * 이제 doHelloWorld라는 ᅟAction을 생성한다. 일종의 trigger라고 생각하면 된다.

 * helloworld Capsule browser에서

  . models -> concepts 위에서 마우스 오른쪽 click해서 New -> Model 선택

  . File Type: Model, Template : Action, filename은 doHelloWorld.model.bxb

  . 그리고, 아래 내용으로 바꾸어 넣자

action (doHelloWorld) {

  output (world)
  type (Calculation)
}

 

8. resources/base/views/helloWorld.view.bxb 생성

 * 출력 형태를 결정하는 것인데, 그냥 빈파일로 냅두자. (생성하지 않아도 됨)

 * helloworld Capsule browser에서

  . resources -> base -> views 위에서 마우스 오른쪽 click해서 -> New -> View

 

 

9. endpoints 설정하기.

 * endpoint란 input -> action -> output 을 연결해주는 역활은 한다.

 * resources/base/endpoints.bxb 의 내용을 아래 내용으로 바꾼다. 입력이 없으므로 따로 정의하지 않는다.

endpoints {
  // action과 그에 맞는 자바스크립트를 매핑
  action-endpoints {
    action-endpoint (doHelloWorld) {
      local-endpoint ("helloWorld.js")
    }
  }
}

 

 

10. 이제 빅스비를 훈련시켜서 hello, world 문자열을 출력하게 하자.

 * resources/en-US/training 열면 다음과 같은 화면이 나온다.

 

"Enter natural language training"이라고 써 있는 곳에 say it 이라고 입력하고 Add를 click하면

GOAL을 입력하라고 나온다. 여기에 정의해두었던 Concept인 world 을 입력하고 저장한다.

그리고, "Compile NL Model"을 click하면 hello, world 문자열을 볼 준비는 다 끝난 것이다.

 

11. 이제 hello, world 예제를 실행해보자.

 * 왼쪽 하단의 휴대폰 Icon을 click에서 emulator를 실행하고,

왼쪽에 say it이라고 입력한 다음에 "Run NL"을 실행하면 hello, world 문자열을 볼 수 있다.

 

마지막으로, 한가지 고백하자면 입력창에 어떤 내용을 넣어도, 어떤 말을 해도 위 화면만 나오게 된다.

왜냐하면 Bixby Emulator에서는 helloWorld Capsule만 동작하고 있고, 입력과 상관없이 무조건 hello, world 를 출력하게 했기 때문이다.

 

예제 파일은 https://github.com/tolkien/playground.helloworld 에서 받을 수 있습니다.

 

개선할 점. hello, world을 음성으로 들을 수 있도록 해보자.