지난 크리스마스 선물로 게임 컨트롤러를 선물 받았습니다.
 
이전까지는 XBOX 무선 컨트롤러를 사용해서 블루투스 연결을 해서 사용했습니다.
저는 주로 아이패드나 PC에 연결해서 패드로 게임을 했었습니다.
SKT를 통해 올 엑세스로 XBOX를 사고 싶었지만 물량도 없고, 최근에는 게임을 많이 하지 않아서 콘솔에 대한 흥미도 많이 떨어졌구요, 스위치는 팔아먹은지 오래거든요....
 
그러는 와중에 Backbone one을 선물 받았습니다.
 
Backbone one(이하 백본원)을 설명하기 전에 스마트폰용 게임 컨트롤러는 여러가지가 있습니다.
그 중에서 유명한것으로는 백본원, Razer Kishi2, Gamesir X2 같은 제품들이 유명합니다.
 
Razer Kishi2 같은 경우에는 너무 비싸고 kishi2 보다는 kishi가 더 맘에 들었는데 그건 구하기가 어렵더라구요 ㅠ
 
여러모로 backbone one이 디자인적으로나 가격적으로 맘에 들었습니다.
 

도착한  backbone one입니다. 

 

백본원 언박싱-1
백본원 박스 전면
백본원 박스 후면

박스 전면에는 백본원 외형이 있고 후면에는 각 버튼 설명과 어디로 충전을 하고 어디로 유선 이어폰을 연결 할 수 있는지 설명해주고 있습니다.

 

 

 

박스를 개봉

박스를 개봉하면 언제 어디서든 즐길 수 있다는 문구가 보입니다.

 

제품 확인

상자를 열면 드디어 백본원을 만날 수 있습니다.

 

측면

트리거 버튼까지 제가 익숙한 xbox패드와 유사합니다.

 

길이 조절

잡아 당기면 큰 스마트폰도 충분히 끼울 수 있도록 디자인 되어 있다.

 

장착 설명서

장착을 할때는 꼭 위쪽부분을 먼저 장착하고 아래충전 단자를 연결해주어야 한다. 그래야 끼우기 편하다...

 

뭔지 모를 부품...

뭔지 모를 부품이 하나 있다. 나중에 알았지만 요즘 스마트폰들이 카툭튀가 심해서 저 부품으로 좀 띄워서 카메라에 흠집이 나느것을 방지해주는 부품으로 확인된다.

 

부품을 장착한 모습

아이폰에서 설정 -> 일반 -> 게임컨트롤러 에 들어가면 설정도 있다

프로파일러를 통해 각 버튼에 다른 버튼으로 매핑해서 사용할 수 있다.

 

설정 화면

 

만듬새는 전반적으로 좋다.

인식도 잘 된다

 

단점이 하나 있는데 나는 생폰으로 쓰다보니 몰랐는데, 케이스를 사용하는 경우 케이스를 빼야 백본원에 연결할 수 있다는 단점이 있다.

그나마 이 부분은 사소한 단점이라 생각된다.

 

연결 후 몇가지 게임을 해 보았다.

  • 원신 : 폰으로 할 때랑 전혀 다른 플레이를 할 수 있었다. 처음 해봤는데 게임 컨트롤러에 이렇게 대응이 잘 된 게임인지 몰랐다. 재미를 붙여볼까 생각했지만 역시나 귀찮아서...원신을 하는 사람이라면 엑박 컨트롤러를 블루투스로 연결하는 것도 좋은 방법이지만, 그 보다 백본원을 사용하는 것도 괜찮은 선택이라고 생각된다.
  • 던파M :  게임이 좀 더 컨트롤러에 대한 대응이 필요한 것으로 보여진다.
  • 언디셈버 : 매핑이 뭔가 적응하기 어려웠다. 게임이 문제인지 내가 문제인지 별 흥미를 느끼지 못함..
  • xbox cloud gaming : 진짜 신세계였다. 무료쿠폰으로 한달 즐겼지만 게임할 시간이 많다면 game pass를 지르고 게임을 즐길만한 수준의 성능을 보여줬다.
  • 그 외에도 많은 게임들이 의외로 컨트롤러를 통해 잘 됐었다. 하지만......

 

앞으로도 더 많은 게임들이 컨트롤러 지원을 해서 컨트롤러로 할 수 있는 게임이 더 많아졌으면 좋겠다.

'잡다한 리뷰' 카테고리의 다른 글

매트리스 구입기 [삼분의일 매트리스 후기]  (0) 2018.07.22
 
사설 ip 대역에서 docker repository를 이용해야 하는 경우가 있다.
 
현재 docker repositry의 경우 ssl 과 도메인 사용을 강제하고 있어서 사설 ip 대역에서 사용하기 힘들다.
 
이 경우에는 아래 명령어를 통해 무시하는 사이트를 등록하고 우회해야 한다.
 
echo -e '{\n\t"insecure-registries": ["{repository_host}:{repository_port}"] \n}' | sudo tee /etc/docker/daemon.json
>> /etc/docker/daemon.json 파일에 insecure-registries 옵션으로 특정 사이트를 등록하는 명령어
 
이 명령어를 실행 후 docker 서비스를 재시작하면 된다.
 
 
 

EdgeDB

https://www.edgedb.com/docs/intro/quickstart 페이지를 참고 하여 튜토리얼을 따라해 본 내용을 서술하였습니다.
 

설명

EdgeDB는 차세대 graph-relational database 로 관계 데이터베이스, 그래프 데이터베이스, ORM의 장점을 적용한 신형 데이터베이스입니다.
SQL database의 장점인 Type safety, 성능, 안정성, 트랜잭션을 가지고 있습니다. 그러나 관계형 database는 테이블형식으로 모델링하는 대신 EdgeDB는 속성과 다른 개체에 대한 링크가 포함된 형태로 데이터를 나타냅니다. 이러한 개체 지향 모델을 활용하여 SQL의 가장 큰 유용성 문제 중 일부를 해결하는 초강력 쿼리 언어를 제공한다.

 

 

Quick start

1. 설치

먼저 EdgeDB CLI를 설치해야 합니다. 각 운영체제별로 설치방법은 아래와 같습니다.
  • macOS/Linux
curl https://sh.edgedb.com --proto '=https' -sSf1 | sh
  • Windows (PS)
PS> iwr https://ps1.edgedb.com -useb | iex
 
위 커맨드를 통해 다운로드하고 edgedb CLI를 설치할 수 있습니다. 설치 완료후 Terminal을 재시작하면 사용할 수 있습니다. 또는 설치 직후 나오는 명령어를 통해 사용할 수 도 있습니다.

2. project 초기화

터미널에서 새로운 디렉터리를 만들어서 거기로 들어갑니다.
mkdir quickstart
cd quickstart
 
그리고 edgedb project를 초기화 해줍니다.
edgedb proejct init
 
그러면 edgedb 인스턴스를 setting을 위한 툴이 실행되고 아래와 같은 방식으로 진행되게 됩니다.
> edgedb project init
No `edgedb.toml` found in `/edgedb/quickstart` or above
Do you want to initialize a new project? [Y/n]
> Y
Specify the name of EdgeDB instance to use with this project [default: quickstart]:
> quickstart
Checking EdgeDB versions...
Specify the version of EdgeDB to use with this project [default: 2.3]:
> 2.3
┌──────────────┬───────────────────────┐
│ Project directory  │ /edgedb/quickstart              │
│ Project config     │ /edgedb/quickstart/edgedb.toml  │
│ Schema dir (empty) │ /edgedb/quickstart/dbschema     │
│ Installation method│ portable package                │
│ Version            │ 2.3+ab48913                     │
│ Instance name      │ quickstart                      │
└──────────────┴───────────────────────┘
Downloading package...
00:00:02 [====================] 35.27MiB/35.27MiB 15.38MiB/s | ETA: 0s
Successfully installed 2.3+ab48913
Initializing EdgeDB instance...
[systemctl] Created symlink ~/.config/systemd/user/default.target.wants/edgedb-server@quickstart.socket → ~/.config/systemd/user/edgedb-server@quickstart.socket.
[systemctl] Created symlink ~/.config/systemd/user/default.target.wants/edgedb-server@quickstart.service → ~/.config/systemd/user/edgedb-server@quickstart.service.
Applying migrations...
Everything is up to date. Revision initial
Project initialized.
To connect to quickstart, run `edgedb`
 
이 작업을 통해 크게 두가지 작업이 이루어졌습니다.
  1. edgedb.toml config파일과 schema파일, dbschema/default.esdl 파일을 만들어 프로젝트를 생성했습니다. default.esdl은 말 그대로 기본 schema를 의미합니다.
  2. QuickStart라는 edgedb 인스턴스를 연결했다. 프로젝트 디렉터리 안에 있는 인스턴스에 대해 모든 CLI명령이 실행된다. edgedb 프로젝트의 작동방식에 대한 자세한 내용은 인스턴스 가이드를 참조하시길 바랍니다. (https://www.edgedb.com/docs/intro/instances#ref-intro-instances)
동시에 여러 인스턴스를 생성할 수 있으며 각 인스턴스에는 여러 데이터가 포함될수 있다. 각 데이터베이스에는 여러 모듈이 포함될 수 있다. (일반적으로 schema는 기본 모듈 내부에서 정의 된다.)
 
이제 아래 명령어를 통해 edgedb에 연결할 수 있다.
edgedb
 
그리고 간단한 쿼리를 실행해 정상 구동여부를 확인할 수 있습니다.
edgedb> select 1 + 1;
{2}
CLI에서 나오기 위해서는  \q 명령어를 입력하면 됩니다. 
먼저 schema를 설정 해 보겠습니다.
 

3. schema 설정 하기

원하는 IDE 또는 editor 에서 해당 디렉터리를 열어 파일 구조를 확인해봅시다.
├── edgedb.toml
├── dbschema
│   ├── default.esdl
│   ├── migrations
 
edgeDB Schema는 edgedb SDL(Schema Description Language)로 정의를 합니다.
SDL은 esdl파일 내부에 있습니다. 일반적으로 전체 schema는 default.esdl이라는 파일로 선언되지만 원하는 경우 여러 esdl 파일로 schema를 분할 할 수 있습니다.
 
예제로 간단한 영화 데이터베이스를 구축해보겠습니다.
영화와 사람의 두 가지 객체 유형을 정의합니다. (SQL의 테이블 생성에 해당합니다.)
편집기에서 dbschema/default.esdl 을 열고 아래 내용을 붙여넣습니다.
module default {
  type Person {
    required property name -> str;
  }

  type Movie {
    property title -> str;
    multi link actors -> Person;
  }
};
 
여기서 주목할 부분
  • ID 값이 포함되지 않습니다. Edgedb는 자동으로 database에 삽입 된 모든 객체에 대해 자동으로 고유한 UUID를 할당 합니다.
  • Movie type에는 배우와 감독의 두 가지 링크도 포함되어 있습니다. edgedb에서는 링크는 객체 유형 간의 관계를 타나내는 데 사용합니다. 이는 foreign key를 사용할 필요가 없습니다. 그리고 추후에 join이 없이 deep query를 작성할 수 있으며 나중에는 얼마나 쉬운지 알 수 있습니다.
  • 객체 유형은 default 모듈 내에 있습니다. schema를 모듈이라고 하는 logical subunits으로 나눌 수 있지만, default라는 단일 모듈에서 전체 schema를 정의하는 것이 일반적 입니다.
이제 schema를 database에 적용하기 위해 migration을 할 준비가 되었습니다.

 

4.migration 실행하기

edgedb migration create 명령어를 통해 migration 파일을 생성합니다. 이 명령어는 *.esdl 파일을 확인해 database로 보냅니다. database는 이 파일의 구문을 분석하고 현재 schema와 비교하여 migration 계획을 생성합니다. 그런 다음에 database는 계획에 따라 CLI로 다시 보내서 migration 파일을 생성합니다.
> edgedb migration create
Created dbschema/migrations/00001.edgeql, id: m1ccbjebnaeoq2hki3ma35lw5pkf6sadomsjyuehxzgecxq2h4uwgq
 
관심이 있다면 migration파일을 열어 어떻게 구성되어 있는지 확인해보세요.
Create Type, Alter Type, Create 속성과 같은 DDL 명령으로 구성된 간단한 EdgeQL 스크립트로 구성되어 있습니다.
 
migration 파일이 생성 되었지만 이는 database에 적용되지는 않았습니다. 이제 적용을 해봅시다.
> edgedb migrate
Applied m1ccbjebnaeoq2hki3ma35lw5pkf6sadomsjyuehxzgecxq2h4uwgq (00001.edgeql)
 
edgedb list types 를 입력해서 결과를 확인 합니다. 이것은 현재 정의 된 모든 객체 유형이 포함 된 테이블을 출력합니다.
> edgedb list types
┌────────────┬─────────────────────┐
│ Name            │ Extending                     │
├────────────┼─────────────────────┤
│ default::Movie  │ std::BaseObject, std::Object  │
│ default::Person │ std::BaseObject, std::Object  │
└────────────┴─────────────────────┘
 
다음 단계로 넘어가기전에 schema를 한번 변경해보겠습니다. Movie의 title을 required 로 변경하겠습니다. 먼저 schema file을 아래 내용으로 업데이트 합니다.
type Movie {
    required property title -> str;
    multi link actors -> Person;
  }
 
그런 다음 한번 더 edgedb migration crate 를 실행합니다. 첫 migrtaion이 아니기 때문에 이전과 약간 다른 내용이 출력되는 것을 확인할 수 있습니다.
> edgedb migration create
did you make property 'title' of object type 'default::Movie' required? [y,n,l,c,b,s,q,?]
>
 
이전과 마찬가지로 edgedb는 schema 파일을 분석하고 현재 내부 schema와 비교를 합니다. 그리고 우리가 변경한것을 감지하고 그것을 확인 받는 과정을 거치게 됩니다. 이 과정은 모든 변경사항을 확인하고 migrations이 애매한 경우 (property의 값이 변경된 경우) 우리에게 가이드를 제공합니다.
현재 경우에는 y를 눌러 변경 확인을 해줍니다.
> edgedb migration create
did you make property 'title' of object type 'default::Movie' required? [y,n,l,c,b,s,q,?]
> y
Please specify an expression to populate existing objects in order to make property 'title' of object type 'default::Movie' required:
fill_expr>
 
fill_expr 이라는 새로운 prompt가 열렸습니다. 그 이유는 title이 optional에서 required로 변경되었기 때문에 edgeDB가 title에 대한 default value를 묻는 것 입니다. 여기서는 “untitled”로 진행하겠습니다.
Please specify an expression to populate existing objects in order to make property 'title' of object type 'default::Movie' required:
fill_expr> "Untitled"
Created dbschema/migrations/00002.edgeql, id: m1faattezah627k544elwato3m4dgjbyyz3nqn2huxeovh2luv4eua
 
 새롭게 생성된 migration 파일을 보면 아래 내용이 있습니다.
  ALTER TYPE default::Movie {
      ALTER PROPERTY title {
          SET REQUIRED USING ('Untitled');
      };
  };
 
이제 새로운 migration을 적용해 봅시다.
> edgedb migrate
Applied m1faattezah627k544elwato3m4dgjbyyz3nqn2huxeovh2luv4eua (00002.edgeql)
 

5. Query 작성하기

이제 Edgedb ui를 통해 간단한 쿼리를 작성해보겠습니다. 2.0+버전 부터는 관리자 대시보드를 포함하고 있습니다. 대시보드를 열기 위해 아래 명령어를 입력합니다.
> edgedb ui
Please visit URL:
http://localhost:10700/ui?authToken=<JWT TOKEN>
 
해당 페이지에 접속 하면 아래와 같은 페이지가 열립니다.
인스턴스에서 실행되는 각 database가 표시됩니다. 각 인스턴스는 여러 데이터베이스를 포함할 수 있습니다.
 
현재는 Edge하나 뿐이며 기본적으로 Edgedb로 되어있습니다. 클릭해봅시다.
 
Open REPL을 클릭합니다. 그러면 쿼리를 작성할 수 있는 창이 열립니다.
기본적인 Hello world! 를 출력해보기 위해 아래 쿼리를 입력합니다.
SELECT "Hello world!";
 
Query와 Query 결과는 우측 query notebook 에 보여집니다.
이제 실제 데이터를 Insert 해보겠습니다. 아래 코드를 입력해줍니다.
INSERT Movie {
  title := "Constantine"
};
첫 데이터가 Insert되었습니다! 업데이트 쿼리를 통해 몇명의 배우를 추가해봅시다.
UPDATE Movie
FILTER .title = "Constantine"
SET {
  actors := {
    (INSERT Person { name := "Keanu Charles Reeves" }),
    (INSERT Person { name := "Katherine Matilda Swinton" })
  }
};
 
마지막으로 SELECT 쿼리를 통해 방금 입력한 데이터를 가져올 수 있습니다.
SELECT Movie {
  title,
  actors: {
    name
  }
};
 
query notebook에서 결과에서 COPY AS JSON 을 누르면 clipboard에 아래와 같이 복사가 됩니다.
[
  {
    "title": "Constantine",
    "actors": [
      {
        "name": "Keanu Charles Reeves"
      },
      {
        "name": "Katherine Matilda Swinton"
      }
    ]
  }
]
 
edgedb UI는 유용하지만 실제 프로그램에서는 쿼리 실행을 위해 edgedb client librarie를 사용하게 될 것입니다.
JavaScript/TypeScript, Go, python, Rust 등의 공식 라이브러리를 제공하고 있으니 원하는 언어로 사용할 수 있습니다. ( https://www.edgedb.com/docs/clients/index )
 
수고하셨습니다! 
튜토리얼 진행을 통해 간단한 사용방법을 익히셨습니다. 자세한 내용은 기회가 된다면 마저 포스팅 할 수 있도록 하겠습니다.
 
 

 

+ Recent posts