helloworlds

色々試してみたくなっちゃうエンジニア 基礎をコツコツ...

【VR】Oculus GoをPCへミラーリングさせる(無線)

先日Oculus Goが家に届きました!

私が購入したのは、これ。

www.oculus.com

64GBの方を選びました。 俗に言うスタンドアローンというVR機器になるようです。

カートに入れて、購入完了して数時間で発送しますね!というメールがきました。 大体到着まで5日間ほどで手元に届きました。

「けっこうはやいな!」

中身を見てみるとけっこうシンプルにまとまっていました。 メガネを日頃かけている方でも安心。 メガネをかけている人用のアクセサリーみたいなのも付いていて、 スマホのアプリからOculusの設定をする時に、装着ムービーも丁寧に紹介されていました。

(※ わかりやすいように、画像を載せようかと思っていたのですが、この記事では割愛します。が、その分丁寧に書いてくつもりです! また、後日画像を掲載させていくかもしれません。合わせて詳細も追記していければと思います。)

ここから、"PCへのミラーリング"について順をおって説明します。 今回は以下の記事を参考にさせて頂きました!さっそく先人の方に感謝...!!

Oculus Goの画面をPCにWirelessでミラーリング表示する

準備

まず、色々準備が必要です。 すんなりいけば大丈夫ですが、私はある設定で少し詰まりました... スマホアプリの開発を経験されている方はけっこうすんなりいきそう...

では、まず環境から。 あくまで私の環境ですので、他の環境では試していません。随時、自分にあった環境の設定方法をググる必要があるかもしれません。

環境: Windows10 (デスクトップPC) ブラウザ: Chrome

1. スマホアプリと連携

iPhoneならApp Storeで、AndroidならPlayストアOculusというアプリをダウンロード。

ログインを行い(アカウントを作成する必要があります)、手順に従って連携完了まで行う。

1-2. 開発者モードにする

ミラーリングするにしても、Unityで開発を行うにしても Oculusに対して開発者モードに設定する必要があります。

まず、以下のURLへ移動しログインします。

https://dashboard.oculus.com

そうすると、「新しい団体の作成」という画面が表示されるかと思います。 任意の団体名を記入し、送信し、完了させます。

完了すると以下の画面が出てくるかと思います。

f:id:o21o21:20180531111157p:plain

一旦これでOKです。

スマホアプリに戻ります。

画面下部メニューの"設定" -> 接続しているOculus(シリアルナンバー付)をタップ

-> ”・・・その他の設定” -> "開発者モード" -> スイッチを"有効化" (青色にする)

これで完了です。

2. Android Studioをインストール

続いては、PCの方です。

色々調べてみると、ミラーリングするだけだったらadbコマンド (Android Debug Bridge)が使用できていれば問題なさそうです。 なので、既にAndroidの開発などをされている方は、不要かもしれません。 ここでは将来的にUnityでOculus Goを開発することを目的にしたいので、一気にAndroid Studioをインストールします。

公式: Android Studio概要

以下のURLに行って、ダウンロードします。

Download Android Studio and SDK Tools  |  Android Developers

f:id:o21o21:20180531114053p:plain

  1. ダウンロードした.exeを開きます。
  2. 特に指定がなければ全部デフォルトでインストール&Nextボタン押下で大丈夫です
  3. 全てのインストールが完了すると、Android Studioを起動します
  4. ウィンドウ下部にある、Configure -> SDK Manager を選択
  5. 左メニューAndroid SDKを押下し、タブSDK Platformを選択。
  6. API Level19以上のものにチェックを入れます
  7. タブSDK Toolsを押下し、LLDBGoogle USB Driverにもチェックを入れます
  8. ウィンドウ下部のOKを押下し、Component Installerが開かれインストールが開始されます

ここまでできたらウィンドウを閉じて大丈夫です。

3. adbコマンドを試す

Android StudioをインストールしてSDKもインストールできれば、 Windowsコマンドプロンプトadbコマンドが使用できているでしょう。

ここで、付属していたUSBケーブルとPCを接続します!

私の場合はここでadbコマンドが使用できず、 "’adb’は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません"

と、出力...

「なんでやあああああぁぁ!!!」

とか言いながらググりました。

結果、環境変数のPATHが通っていないことが判明。 いつもやってんのに... 普段Windowsあんまり使わないから見落としてた。 (私の場合は早期に環境変数に気づきましたが、PATHがさらに間違っていたから時間とりましたww)

もしコマンドが使用できないなら、コントロールパネルを開いて、 システムとセキュリティ -> システム -> 左メニューのシステムの詳細設定 -> 詳細設定タブ環境変数(N) -> 環境変数PATHを選択して編集 -> 新規

ここで私は2つPATHに対して新規で追加。

C:\Users\ユーザ名\AppData\Local\Android\Sdk\platform-tools
C:\Program Files(x86)\Android\android-sdk\platform-tools

ちゃんとPATHがは自分で確認してください!! 上記のpathを参考にエクスプローラーからポチポチしていけば確認できかと思います。

そして、いざコマンド実行。

> adb devices
List of devices attached
xxxxxxxxxxxxxxxxxx        unauthorized

「NOOOOOOOOOぉぉぉぉぉ〜〜〜!!!」

なんか権限ないですやん...

まあ、ただadbコマンドは使用できていてOculusは認識しているっぽい。

ふむふむ

ってことは、どっかで権限を有効にしてやるかんじかなと、またググる

本来?というかAndroid端末であればどうやらUSBデバッグの許可の取り消しなるオプションがあるらしい。 ただ今回はOculusさんだぞ...

「どこを探してもない.... おおおおおおおおおお」

ってなってたらオキュラスのレンズから光が見えた!!!!www

USBデバッグの許可は、Oculusの画面から許可してあげる でしたwww

すげえバカでしたが、まあよしとする。

一応なのですが、adbサービスの再起動として、以下のコマンドを実行させます。

# 停止
> adb kill-server

# 起動
> adb start-server

ということで、もう一度デバイスの確認実行。

> adb devices

List of devices attached
xxxxxxxxxxxxxxxxxx        device

OK。

続いてOculusのIPを調べる。 無線LANなのでwlan数値を指定します。 ちなみにeth0は有線。

> adb shell ip addr show wlan0

出力された情報のinetの横にIPが確認できるかと思います。 おそらく192.168.xx.xxみたいに出てるかな?

adbでportを開放

portを開いていきます。 portの範囲は、5555~5585の範囲で奇数を指定したほうがよさそうです。 こちらがadb の仕組みです。

今回は公式で紹介されている通り5555で試します。

> adb tcpip 5555

これでUSBを介して、port5555でTCP/IP 接続をlistenするようにOculusを設定しました。

ここで、PCに接続しているOculusをUSBケーブルを抜きます

※ 接続切れている場合は、adb connect <IP>:5555 で接続にトライしてみてください。

Vysorの設定

ここまできたら、あとはVysor(バイザー)のインストールと設定のみです。

Vysorとは、ブラウザChromeで動くアプリケーションです。 スマホ画面をパソコンへミラーリングさせるアプリのようです。わたくし初見でした。

まず、ブラウザにインストールします。

Vysor - Chrome ウェブストア

すると、chrome://apps/ に追加されていると思います。

起動させます。

起動させたウィンドウ上部にOculusの接続が確認できていればOKです。 もし、確認できていなければ、Settingsの上にあるConnectボタンを押下。

コマンドプロンプトで確認したIPとportを指定して接続します。

これでOculus Goを開始すればミラーリングできているかと思います!!!!!

f:id:o21o21:20180601001606p:plain

自分では見えねえよってかんじですがww

Discordの画面共有で友人にみせてあげましたww

当人いわく、「画面見れてるよ!!! ただお前ほどの感動はない」

とのことでしたwww

やはりVRで見れないので、購入してVR体験してもいいかもしれませんね!!

次回は、Unityでのプロジェクト環境構築&作成考えています。

以上.

【Go】簡単!使い捨て、GoのDocker開発環境を構築

以前は、macOSでのGoのプロジェクトについて考えました。

o21o21.hatenablog.jp

今回はGo (golang)のDocker開発環境を考えてみます。 拡張性を意識して、docker-composeを利用してみます。

想定として、なる早で環境構築し、GoのWebアプリを開発していこう!みたいなノリです。 ちなみに、Goのフレームワークとして、echoをインストールしていきます。 ゴールは、ブランチでのHello Worldを目指します。

私の環境は、macOSです。 事前にDocker (macならDocker for macをインストールしましょう!)

さて、順をおってみていきましょう!

プロジェクトの作成

今回、Dockerなので特にGOPATHを意識する必要はありません。 (Docker上でのGOPATHは指定します。) 気になる方は、この記事の冒頭であげた過去の記事を参考にしてみて下さい。

なので、任意のディレクトリに新規プロジェクトを作成しましょう。

必要なファイルを作成

コマンド docker-compose upで起動させるために、必要な設定ファイルを新規作成します。 この記事では必要最低限の記述にします。portの指定などご自身のやりたいことに合わせて設定してみて下さい。 ※ 自分の使用しているdocker及びdocker-composeのversionにも注目!

Dockerfile

FROM golang:latest                                                                                                                                                                                    
  
WORKDIR /go/src/go-app2
COPY . .
    
# "Go" Environment variable
ENV GO111MODULE=on
    
# install Go web framework
RUN go get -u github.com/labstack/echo
   
# install "Fresh" restart tool
RUN go get github.com/pilu/fresh

CMD ["fresh"]

上からみていきます。

goのヴァージョンは最新のものを取得しにいってます。(ヴァージョン指定も勿論可能)

GO111MODULEというGOの環境変数をonに設定します。 これでモジュールを自動的に読み込むことができます。

これをDockerfileに記述しないと、docker-compose upした時に以下のWARNINGが出ました。

go get: warning: modules disabled by GO111MODULE=auto in GOPATH/src;
    ignoring go.mod;
    see 'go help modules'

GO111MODULEを記述した際に、プロジェクトディレクトリに自動的にgo.modというファイルが作成されます。 (= 今回のプロジェクトに依存したgo.modファイルが生成される。)

そして、フレームワークのechoとホットリロードをするためのFreshをgo getでインストールします。 go getを使用するということは、今回作成されるDocker上には、複数のプロジェクトを共存させる目的ではないことを覚えておいて下さい。 仮に、go getをすると、GOPATH配下にインストールされて2つ目以降のパッケージの依存関係を管理しにくくなるからです。 (goから離れていたので、間違ってたらごめんなさい...!!!!)

GO111MODULE

さきほど定義した環境変数GO111MODULEについてです。 こちらヴァージョン1.11から追加された、モジュール管理モード環境変数です。(正式リリースは、1.12かららしい)

on : モジュール対応モード off : GOPATH モード(今まで通り) auto : GOPATH以外のみモジュールモード

今までdepなどを使用していたと思いますが、これは便利! depからの乗り換えも楽みたいですね!

ちなみに、今回のDocker環境で開発中に新しいモジュールを追加すると、freshが検知し自動的にモジュールがインストールされます。 そうすると、go.modに require package/name v1.1x.2x のように追記されていることが確認できました。 また、go.sumファイルも生成されます。これは、モジュールの依存関係を示すファイルのようです。

そして最後にコマンド実行です。

ホットリロードについてですが、どういうことかというと コンパイル不要な言語ならいいのですが、一旦コンパイルしてから動作させる言語において、 よくDockerで起動させられたけど、ファイルの編集をした際にもう一度docker runとかしないといけない...ということが起こります。

かなり面倒なので、タスクランナー的なものが必要です。 厳密に今回使用するFreshはタスクランナーとは書いてないようですが、 要はファイルを監視し変更が検知されると、自動的にrestartしてくれるものです。

なので、Dockerfileでは、最後にfreshというコマンドで起動させます。

Freshについては、以下の公式を参照してみて下さい。 Fresh自体の設定ファイルも作成できるようです。

github.com

docker-compose.yml

続いてdocker-compose.ymlですが、そんなに記述がないので説明を割愛します。

   version: '3'                                                                                                                                                                                        
   services:
     app:
       build: .
       container_name: <projecrt_name>
       volumes:
         - ./:/go/src/<project_name>
       ports:
         - "8080:8080"
      environment:
          GO111MODULE: "on"

ここまで作成できれば、ほぼ完成です。 Dockerfileを基に、1つのコンテナと1つのイメージが作成されるはずです。(golangのイメージ含めるなら2つかな?)

あとは適当にmain.goを作成します。

goファイル

  • main.go
package main

import (
    "log"
    "net/http"
    "path/filepath"
    "sync"
    "text/template"
)

type templateHandler struct {
    once     sync.Once
    filename string
    templ    *template.Template
}

func (t *templateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    t.once.Do(func() {
        t.templ = template.Must(template.ParseFiles(filepath.Join("templates", t.filename)))
    })
    t.templ.Execute(w, nil)
}

func main() {
    http.Handle("/", &templateHandler{filename: "top.html"})

    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatal("ListenAndServe", err)
    }
}
  • templates/top.html
<p>Hellooooooooooooooooo World!!!!!!!!!!!!!!</p>

実行

いざ実行です!

$ docker-compose up
Building app
Step 1/7 : FROM golang:latest
 ---> d817ad5b9beb
Step 2/7 : WORKDIR /go/src/go-app2
Removing intermediate container 816a33af9a01
 ---> bb3d6012e557
Step 3/7 : COPY . .
 ---> e38c75d754d3
Step 4/7 : ENV GO111MODULE=on
 ---> Running in 57345b25fb4f
Removing intermediate container 57345b25fb4f
 ---> d9500cf1f5cd
Step 5/7 : RUN go get -u github.com/labstack/echo
 ---> Running in 01dc8d6ebd6c
go: finding github.com/labstack/echo v3.2.2+incompatible
go: downloading github.com/labstack/echo v3.2.2+incompatible
go: finding github.com/labstack/gommon/log latest
go: finding github.com/labstack/gommon/color latest

... 略 

Creating goapp2_app_1 ... done
Attaching to goapp2_app_1
app_1  | 11:2:58 runner      | InitFolders
app_1  | 11:2:58 runner      | mkdir ./tmp
app_1  | 11:2:58 runner      | mkdir ./tmp: file exists
app_1  | 11:2:58 watcher     | Watching .
app_1  | 11:2:58 watcher     | Watching templates
app_1  | 11:2:58 main        | Waiting (loop 1)...
app_1  | 11:2:58 main        | receiving first event /
app_1  | 11:2:58 main        | sleeping for 600 milliseconds
app_1  | 11:2:59 main        | flushing events
app_1  | 11:2:59 main        | Started! (8 Goroutines)
app_1  | 11:2:59 main        | remove tmp/runner-build-errors.log: no such file or directory
app_1  | 11:2:59 build       | Building...
app_1  | 11:3:00 runner      | Running...

あとは、ブラウザでアクセス。

http://localhost:8080/

htmlの内容が表示されていたら成功です。

また、docker-composeを起動したまま編集してみましょう! リロードし、変更が反映されていたら大丈夫です。

Dockerコンテナの中へ

以下のコマンドでDockerコンテナの中に入って、ローカルとのファイルのシンクがされているか確認できます。

$ docker exec -i -t <container_name> bash

今回の例だと、ディレクト/go/src/<project_name>が存在し、 $GOPATHは、/goになっていることが確認できます。

まとめ

いつもホットリロードに悩まされていましたが、Freshは楽ですね! 他にもGoのプロジェクトで使用されているタスクランナーがあります。

github.com

github.com

※少しdockerで個人的に気になることがあるので、解決したら更新します!

以上.

【インフラ】クラウドについて考えてみた

だいぶ日が空いてしまいました。。。

今回はインフラについてこちらの本を元に学んでいる最中なので、記事にしてみました。 インフラといっても、ほとんどクラウドについての内容になっています。

インフラCI実践ガイド Ansible/GitLabを使ったインフラ改善サイクルの実現

インフラCI実践ガイド Ansible/GitLabを使ったインフラ改善サイクルの実現

まずは、歴史から

インフラというと、なんだか堅い印象を私は持っています。

社会人出たてで、自社開発が叶わず面談行ったりしているときにも、 1社インフラよりの業務ということでお話を聞く機会がありました。

今の35歳から上の方でサーバサイドとかインフラエンジニアをやっていた方だと、 営業先の帰りに電気屋に行って、サーバーを購入した!とかお話を聞きました。

現在だと、もはや物理サーバー(オンプレサーバー)を使用している会社は、クラウド(Cloud)に移行しているのではないでしょうか?

クラウドサービスでいうと、AWSGCPなどが有名ですね! 私が業界に入ってからだと、クラウドが当たり前で、会社に入ってもオンプレからクラウドへの移行後だったり、 移行中やオンプレはわずかなんて会社が多かったです。

そんなこんなで、ビジネス面ではどういった動向がみられるのか調べてみました。

それぞれ、リソースの単価利用期間リードタイムをメモしました。 (引用:技術書インフラCI)

f:id:o21o21:20181010112044p:plain:w300

メインフレーム

この時代だと、主に銀行などのシステムで活用されていたようです。 きっと大企業のインフラくらいだったのでしょう。

オープンシステム

この頃から、今でも馴染みのあるWindowsUNIX系のOSのが登場しました。 一般な業務システムは、インターネットに接続されたサーバーとして活用されていきます。

クラウド

そして、現代のクラウドですね。 最近では、スマートスピーカーなど、Iotなんかは従来のITの領域を超えてきているといってもいいでしょう。

ここまでで、クラウドという単語を多々使用していますが、

そもそもクラウドとはなんなのか?ということです。

エンジニアの方なら説明できるでしょう。 ここでは詳しくは取り上げませんが、簡単に説明します。

クラウドとは?

クラウドとは、英語ではという意味を指してCloudと言います。 ただし、英語の場合、"Cloud ○○" と何か指すときには言うようですね。(例: Cloud Service, Cloud Computing...)

ちょっと断言できないのですが、日本でいうクラウドは、英語で(正式に)いうクラウド コンピューティングにあたるようです。 それは英語で単にCloudというと、空にある雲という意味にも英語圏の方はとれますよねw 日本語では、クラウド=CloudComputingという認識かな?

まあ、そんな細かいことは置いときます。

(言葉って難しい...)

クラウドとは、簡単に、

インターネットを通じて、ITリソースを必要なときに、必要な分だけ利用するという考え方」のことです。

うむ?どいうことや?

「ソフト(Excelとか)、ハードを購入しなくても使用できる」ということ。

これでなんとなくイメージしやすくなったのではないしょうか。

つまり、GmailEvernoteなどのサービスが該当します。

例えば、Gmailの場合、PCに特別アプリをインストールしたり、クレジットカードを登録して課金して使用するものではなく、オンラインでブラウザさえ使用できればメールのやり取りが可能ですね。

こうしたサービスを、クラウド SaaSとして提供されるものです。 他にも PaaS (Dockerなど)や、 IaaS (AWSなど)という種類を分割してクラウドサービスを分割できます。

そして今回は、この記事の文頭で言った通り、インフラについて学んでいるので、 IaaSの部分がメインになってきます。

さて、AWSが世界的にも有名サービスですが、 いったいどうして物理サーバーを購入しないでAWSの利用者はサーバー(EC2とかのインスタンス)を起動、ターミネイトしたりしているのでしょうか??

もちろんAWSの人たちが、サーバーを逐一起動させているわけではありませんwww (そんなことしてたらAWSの社員はいくらいても足りませんねww)

仮想化

こうした疑問のほとんどが、仮想化で賄われています。 例えば、1台の物理サーバーで複数台の仮想的なサーバーを運用します。

つまり、AWSでは利用者がインスタンスを作成するAPIを叩くと、AWSの世界各国にあるデータセンターの物理サーバーがクラウドサーバー(仮想サーバー)を起動させ、運用がすぐに可能になるということです。

この時のサーバーのスペックなどによって、きっと起動させるサーバーは異なるでしょうが、一気に複数台のサーバーを起動させることも容易になっています。

うん、アマゾンはすごいな〜。 なので、アマゾンの技術者は物理サーバーをメンテすることはありますが、AWSの利用者は物理サーバーをメンテナンスをすることはありません。 オンプレの場合、物理サーバーを設置する場所もセキュリティ上の都合で選ばなくてはなりませんが、クラウドならアマゾンの社員が物理サーバーの保守をしているので、その心配はないということです。世界各国にあるデータセンターの場所は公開されていないですが、日本国内にも存在してます。

そのうち、サーバーの仮想化についてもより詳しくみていきたいと思います!

話を戻します!w

スピード感!

こうした技術の発展で、QCD (Quality,Cost,Delivery)という考え方も変化しています。 なにかシステムを構築する際、QCDの評価軸に沿わないことが多々あります。

AWSのようなサーバーを利用うる場合、意識するのはFFFです。 これは「Fast Fast Fast」です!w

スピード感を持って試行錯誤し、結果的に効率的になり、品質の良い構築が可能になるというこです。 これは私も感じています。 AWSですが、インスタンスの起動はあっというまく間なので、 いろいろ試していた結果、「こっちの方法のほうがうまくいくな!」とか早い段階で気づくことができたりします。

まとめ

今回はほとんど紹介した本の内容には載ってないものになっていますが、 要は基本的なところを抑えた記事になります。

クラウドエンジニアやこれからのインフラエンジニアというのは、技術の移り変わりで 従来設定に時間が取られていたところを簡単に設定できるようになりました。

おかけで仕事が減ったように感じますが、エンジニアとしての価値を上げていかなければなりません。 それは、自動化であったり、従来はできなかったことに挑戦したり、研究したりする時間があるということです。

業務自体と手法も変動しますが、概念や考えた自体も見直し、(違う職種の方などに)共感してもらうことも大切だと思います。

次回は、具体的に自動化について書いていけたらと思います!!

以上.

【macOS】High Sierraでダークモードにした

先日Xcodeをインストールする関係で、OSのアップデートをしました。 けっこう時間がかかりましたが、ダークモードが使用できるとのことだったので、さっそく使用してみることにしました。

今年の頃に、macOS Mojaveという新しいOSが発表されるそうですが、 そのmacOS Mojaveには、完全にダークモードが追加されるようです。

なので、今はベータ版といったところでしょうか? まあ、日頃の操作で困るところがなければインストールしてみてもいいかもしれません。

ちょっと見にくいかもしれませんが、画面上部のメニューが暗くなりました。

f:id:o21o21:20180827122013p:plain

Dockの方も暗めになったかな?? 長時間使用するので、少しで暗い方が助かる...

ダウンロード - macOS High Sierra 10.13.6 統合アップデート

Chrome

私はChromeでもファイルを読み込ませて、GoogleEngineの検索結果画面を白色から変更しています。

そこまでするか!?と思う方もいるかと思いますが、ちょっとでも暗くしたい...ww

f:id:o21o21:20180827122441p:plain

これはChromeプラグインで簡単に設定できます。 ただし、調べたら以下のようなコメントがしてあったので、ここで紹介するのは控えますw

この拡張機能は Chrome ウェブストアのポリシーに違反しています

ターミナル

今までターミナルやiTermからgitで管理されているディレクトリに移動すると、 ブランチ名を表示するようにしていました。

今回、OSのアップデートをかけたら表示されていないことに気づきました。

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

そして、gitコマンドを叩くとこんなエラーが。。

調査したところ、xcode-selectとあんるものをインストールすれば解決するとのこと。

$ xcode-select --install

ちょっと時間がかかりましたが、上記のコマンドでインストール完了したら、元通りになりました。 xcode-selectについて、詳しくはこちらの記事を参照してみてください。

以上.

【海外消費者向けEC】越境型ECサイトを考える

今回は定性的な話です! あんまり意識したことなかったのですが、海外消費者向けのサービスについて少し考えてみます。

f:id:o21o21:20180814180125j:plain

まえおき

ECサイトなんか運営していると、海外在住の方に向けて商品を売りたいと思うのは当たり前な世の中ですね。 また、消費者側も日本のあの商品が欲しいと思っている方が多いと思います。

2020年のオリンピック開催に向け、外国人の観光客も増え、より日本の文化に触れたり、 かわいい商品買って、自国に帰ってからも関心が高くてまた購入したい!など、 ECの競争はより国外に向けれていくのかなとか思います。

ECの業界の革命

最近EC界の帝王Amazonが起こした革命をご存知でしょうか?w

それは、International Shoppingというものです。

技術者でない方にはあまりこの凄さが伝わらないのですが、 簡単に言うと、アメリカで取扱されている商品を日本円で購入できるというもの。

言い換えると、www.amazon.comwww.amazon.co.jpの境界線がなくなった、と言えるのではないでしょうか。

日頃から個人輸入が行えるサービスを利用している方は、そんなに驚くこともないだろう。 Paypalとかebayなどのサービスを使用していたり、仮想通貨なんか使用している人も、 世界共通通貨のようなカタチで商品の売買に慣れているので、まあ世の中そんな流れになってきているかんじですね。

まあ、仮想通貨までいくと少し、ここで話をする主題とズレるのですが、 現状、国内向けECサイトを運営していて、(しかも自前でソースコードを管理していて) これから海外消費者に向けてサービスを展開したい!みたいなところに目を向けてみました。

海外消費者向け購入発送代行サービス

国内にも手軽(企業向けかな?)に利用できるサービスがあるようです。

海外消費者向け購入発送代行サービスと呼ばれるサービスで、 既存のEC既存サイトに簡単なバナーを設置するだけで、商品の海外発送まで代行してくれるという。

自分は初めて知ったので、便利だなーと感心。 たしかに、エンジニアが不足している企業だったりすると助かるサービスかもしれませんね〜。ん〜。

BuySmartというサービスも同様で、基本的にHTMLをviewに埋め込むだけで使用できるという。

手軽さでいうとたしかに助かりますね!

ただ、こうした越境ECになると一番気をつけないといけないのは、発送ではないでしょうか。

購入できても、お客様に商品を届けないと意味がないですよねw

この商品に関して、国内なら簡単では国外に向けて発送になると法律的な面で意外と大変です。

郵送禁止物品として扱われるモノは勿論法律違反となります。 例えば、爆発物・危険物(ライターとかも対象になるのかなあ)や生きた生物などなど。

法律だけでなく、条約にも関係してくるので、いちいち調査する手間がかかります。

ですが、代行サービスではそうした手間も省けるものがほとんどです。 購入された商品を、代行サービスに届けるだけで、あとはお任せできます。

んーこれは楽だな〜

技術者ならば、発送はおれの仕事ではないと考える人も少なくないのでは?w

少し技術的な話

こうしたサービスを利用する際に、考慮しておきたいのはIPの制限とかではないでしょうか? AWSでは、CloudFront (クラウドフロント)というサービスがあります。

CloudFrontには、地理的ディストリビューションの制限が可能です。

AWSコンソール上で、簡単に国単位で設定がポチポチでできてしまいます。

ECサイトを運営する際に、海外にも展開するのはいいですが、 例えばアメリカは駄目とか東南アジアのみにしたいとかあるかと思います。

そうした場合にCloudFrontを利用するとよさそうです。

また、言語化についても考慮しておきたいですね。(一応) 私も経験があるのですが、納期に迫られるとかなり効率の悪い多言語対応をしてしまいます。

負の遺産というやつですねwww ソースコードも読みにくくなるし、いいことないです。 viewで判定したり、そのためにテーブル作成して....とか

今ではそうしたゴチャゴチャにならないように色々サービスが提供されているはずです。 例えば、Amazon TranslateなんかはAPIで自動翻訳してくれます。

最近日本語も対応したようです。 少し文法的に変化もしれませんが、負の遺産を産むよりましかもしれません。 Amazon Translateのヴァージョンアップでより良くなるのを待つほうが楽ですね。

言語で用意されている環境変数とか利用すればいいとか、方法は様々ですが、 できるだけシンプルに将来を見据えて設計していくことがかなり重要といえるでしょう!

【AWS】EC2のリタイア!?

今回はEC2について、ちょっとあんまりみない現象なのかな?と思い調べてみました。

リタイア!?

なにが起こったかというと、こんなメッセージがEC2のメニューで表示されていた。

f:id:o21o21:20180814120153p:plain

なぬ!ってかんじでしたw

このインスタンスAWSコンソールをいじっていたところ、 上記のメッセージを確認。。。

もう少し詳しく調べてみましょう。

詳しく

公式にはこう定義されていました。

インスタンスをホストしている基盤のハードウェアで回復不可能な障害が検出されると、AWS によってインスタンスのリタイヤが予定されます。

ふむふむ。ってことは、なんか致命的なエラーでも出ているのか?

再度EC2のメニューから確認してみたが、そんなことはなさそう。 EB(Elastic Beanstalk)から立てられたインスタンスだったので、ヘルスも確認してみたが別に普通。

なんでだろう?ということで、調査するとどうやらメールが届いているらしい。

確認してみるとこのようなタイトルのメールが届いている。

[Retirement Notification] Amazon EC2 Instance scheduled for retirement.

これですなw

詳しく本文を読んでみると、ハードウェア(インスタンス)の劣化が原因で、リタイアの設定がなされたようです。 納得ですね、特に何もインスタンスに対して変更をかけていないと勝手に起こるものらしい。

対応策

今回はEBなので、ポチッとインスタンスもう1つ増やしておけばOK。 対応策については、ルートデバイスタイプによりけりみたいです。 以下に公式ドキュメントを貼っておきます。ドキュメントの下部にルートデバイスタイプ別のアクションが載っています。 それで、対応してみるのがよさそうです。

docs.aws.amazon.com

くれぐれも日付を過ぎてからでは、面倒なことになりかねないので、メールをちゃんとフィルタしておこうと思いました! いや!そもそもインスタンスをきちんと管理していなと駄目ですねww

ただ沢山あると忘れがちになりますが。。。

以上.

【リアル 7.1ch】Razer Tiamat 7.1 v2のセッティング!?

ちょっと今回はプログラミング系の記事と離れます!!www

今回はオーディオ系!!

プログラミングとは関係ないのですが、ハード、 つまりデスクトップやラップトップ(ノートパソコン)には関係します!

ただ、今回扱うものとしては、ゲーマーの方や、主にデスクトップで 個人的になんかしている方向けってかんじかもしれません。。

しかも、全然オーディオ系に詳しくないので、間違っている部分もあるかもしれないので、ご承知下さい!! ※ 完全素人知識です!

この記事を見て、「お!そんなのあるのかー」と、思って頂けるだけで嬉しいです!

さて、

まえおき

私の趣味で今色々と自宅にあるデスクトップとヘッドセットをいじいじしていました。 一応最低限の設定が完了したので、ちょっとまとめてみます。

というのも、最近新しいヘッドセットを購入しました!

そのヘッドセットをまあ買ってみたのはいいものの...

設定だったり、購入を検討しているときにググってみてたのですが、 なかなか一通りの流れを抑えた記事が見つからなかったので残しておこうと思います!

今まで

今までヘッドセットを自宅で使用していたのですが、 そのヘッドセットは、7.1 バーチャルサラウンドサウンド搭載の

Razer Kraken USBという商品を使用していました。

Razer Kraken USB

Razer商品なので性能抜群だなあ!と、購入当初は思っていました。 接続もデスクトップのUSBにそのまま接続するだけ。

ただ、使用していくうちに、だんだんヘッドセットにも関心が湧いてきて

もっとおもしろいヘッドセット、高機能なヘッドセット使ってみてええええ

と思いまして、今回........

購入したものは

Razer Tiamat 7.1 v2!!!!!!!!

www2.razer.com

「かっこいい... やっぱRazerでいくか」

と、思ったので思い切って購入!(Razer信者というわけではないw)

f:id:o21o21:20180808211140j:plain

こちらがもう、TRUE 7.1 サラウンドサウンド、つまり、

リアル7.1サラウンドを搭載しているのです!

ヴァーチャルとリアルの違い

サラウンドサラウンドというのは主に2種類あると認識しています。 それが、

  • リアルサラウンド
  • バーチャルサラウンド

の2つです。

バーチャルサラウンドとは、擬似的に立体的な音の広がりを再現しているものです。例えば、左右のスピーカーが立体的な音を出力している。 リアルサラウンドとは、複数のスピーカーを配置。各スピーカーは、配置された場所の音のみ(正確にはその場所だけの音のみというわkではないみたい)を出し、ひろがりのある音を楽しむことができます。

リアルサラウンドの方は、よく電気屋のオーディオの隔離されたスペースなんかにあるあれですね、たぶん。

色々と調べるとヴァーチャルの方はもはや一般的?というかソフトを使用しても実現可能な時代になっているようです。

なので、結局リアルサラウンドの方がよりリアルwwwというわけです。

私はすぐに手に入れたくなるので、Amazonで買わず店頭に出向きました。

買う前になにも確認せず行ってしまったのですwww

店頭にあるサンプルを見て、

「あれ? 6本もケーブルあるぞ...」

って気づきましたw

1本はUSBでクローマの電源供給用で、他5本は全てマイク端子とオーディオ出力端子のもの。

自分のデスクトップにどれだけの3.5mmジャックがあるかも確認しなかったのですw なので、スマホでググって型を調べ、デスクトップを購入した店舗にも電話して確認。

3.5mmにジャックが自分の場合、3本のみ。。。 まじかよ、、、とか思っていたら、店員さんが

「余っている2本のジャックはデスクトップのフロントに端子があるので、延長して繋いで、ソフトで調整したらいけるかも」

とのこと。

なるほどーとその時は思っていたので、延長ケーブルを買って帰宅。

さっそく試したら、明らかに無理やんけ。wwwwwww

サウンドカード登場

ヘッドセットを選ぶ前にサウンドカードという機械を頭の片隅に覚えていました。 サウンドカードとは、音質の向上や入出力端子の増設などを目的としているもの。

友人にも聞いてみたらサウンドカード必要じゃね?ってかんじだったので、 Tiamat購入した次の日にさっそくまた電気屋に!w

サウンドカードがある棚に行き観察。

今回は事前に調べてたので、多少商品の目利きができましたw

サウンドカード自体、内蔵型外付けがあります。

外付けは名の通り、USB接続でデスクトップに接続できちゃいます。 内蔵はデスクトップをこじ開けて、デスクトップ内部に設置しないといけません。 ただ、店員さんいわく、今の内蔵型は、わりと取り付けが簡単なものが多いとのこと。 ただし、サウンドカード自体に電源の供給が必要なものには注意したほうがいいらしい。

昨日も高い買い物したのに、今日もかよ...と私は外付けの方を購入。

www.asus.com

「よし、これでTiamat使えるー」

って思いながらXonarを接続していた矢先....

「ん? なんか端子変なのある... 」

f:id:o21o21:20180808194350j:plain

「.............................」

これはよくテレビの裏側のやつに似ている...

そっこうググる

これはどうもRCAと呼ばれる端子らしい。

Tiamatの接続できなかったケーブルは、緑色(フロントのR/L)だった。 フロントスピーカーのライトとレフト。 この状態だと音は出るかもしれないが、フロントR/Lはでないとか推測できる。

あーーまじかよーーーー とか思いながら思いついたのは変換すること。

変換ケーブル

1本の3.5mmステレオミニジャックをRCA端子への変換ということ。

あった!

そっこうで、家の近くに電気屋に走っていきましたw

ケーブル商品を前にしてまた気づいたことが。。

これ、さす方とさされる方があるのか。。 まあ当たり前なのですが、もうはやくTiamat使いたすぎて色々とぶっ飛ばしてますww

これはどうもオスメスという単語で、この領域では言われているらしい。 (ちょっと想像すると変な気持ちになりますw)

わたしが行った店頭に置いてあったのは、変換ケーブルのジャックがメス(言い方正しいか不明)のはなかった。 なのでオスを購入し、中継アダプタも購入。

オーディオ編:中継アダプター|AVコード製品一覧 | JVC

やっと、やっとだと思って試した。

結果、フロントの右のスピーカーが鳴らない........... 意気消沈......

あきらめなかったww

ここまできて知らなかったことが色々とわかってきた。

どうやらこうしたジャックやらプラグというものの仕組みを理解してみた方が良さそうだ。

イヤホンジャックのつなぎ方-電子工作とメモ

この説明を読んでみると、Tiamat側のプラグはステレオで、 サウンドカードのRCAは、アナログ接続に対応している。

電気屋でかった中継アダプタもステレオに対応しているし、 変換ケーブルもステレオ対応。

あれ?とおもってよーく変換ケーブルの説明みたらiPodって書いてある!wwww バカすぎますねw まあいーんです、色々わかってきたので。

翌日、ちゃんとした変換ケーブルを購入しに電気屋へ! わたしはオーディオコーナーに行って、店員さんにやりたいことの説明をし、 JVC CN-140Aというケーブルを購入しました。

これで再度接続してみたら、やっと、ようやく音がでたーーーーー!!wwww

これで、リアル7.1サラウンドを体感できました。

Equalizer APO

最初接続完了してからSUBウーハーが鳴っていないことに気づきました。 どうやら個別に設定が必要なようです。

無料ソフトのEqualizer APOというものをデスクトップにインストール。

設定はわかりやすいこの動画を参考にさせていただきました!! (本当に知識の共有って素晴らしい...!)

youtu.be

あとは、触っていくうちに自分で好みの設定に近づければ良さそうですね!

まとめ

リアル7.1サラウンドのヘッドセットを購入する際に考慮しておきたいことを挙げます! あくまで、最低限ということ覚えておいて下さい!

  • 欲しいヘッドセットの仕様を確認する
  • ヘッドセットのチャンネル数に対して、デスクトップのマザーボードで出力できるチャンネル数を確認する
  • デスクトップのイヤホンジャックの数と役割(色など)を確認する
  • ヘッドセットのケーブルの役割を把握する (ケーブルが複数ある場合は、どのケーブルがどのスピーカーなのかなど)
  • イヤホンジャックに応じて、サラウンドカードの導入を検討する (内蔵/外付け)
  • サウンドカードが外付けの場合、端子に注目する(ヘッドセットのプラグと合うかなど)

マザーボードの取替はよっぽどでないと行わないようなので安易に改造を考えないほうがいいみたいです。

とまあ、長くなりましたがこんなかんじ。 本来変換ケーブルとかかませたくないのですが、一旦はよしとしました。

後々、サウンドカードの内蔵型を導入も考えてみようかなと思っています。

かなりノリで乗り切れると考えていましたが、けっこう設定なりが難しいので、 この記事が少しでも誰か役に立てばと思っていますw

以上.

【Datadog】入門 Amazon Linuxに導入

今回はDatadogについて簡単に、何ができるかと Amazon LinuxにDatadogを導入する方法を書いていきます。

まず、そもそもDatadogってなにってところからおってみます。

f:id:o21o21:20180807090724p:plain

Datadogとは?

サーバなどに関するモニタリング機能(SaaS形式)のサービスです。 ただのモニタリングできるサービスか!ってわけではありません。

使用するとわかるのですが、ビジュアライズが凄い綺麗だったり、 tagを使った多次元解析できて、リアルタイムにサーバーの状況が把握できたりします。

もう少し深追いしてみます。

Datadog Agent

監視を始める前に、ターゲットとなるホスト上にDatadog Agent (ソフト)を動作させる必要があります。 ターゲットホストの情報(イベントやメトリクスなど)を取得し、Datadogに送信します。

Datadogはドキュメントもよく揃っているので、一度は目を通してみてもいいかもしれません。

docs.datadoghq.com

このDatadog Agentは主に3つの要素で構成されているそうです。

  • Collector CPUやメモリなどの一般的なシステムメトリクスとIntegrations(後述)の情報を取得。

  • DogStatsD ホスト上で実行されている、アプリケーションやコマンドラインスクリプトからカスタムメトリクスを送信。

  • Forwader CollectorとDogStatsDのデータを受け取り、queueの順番に従ってDatadogに送信する。

ふむふむ、なんとなく想像はつきますね。 少し出てきた、Integrationsについて確認してみます。

Integrations (インテグレーション)

Datadogが提供しているIntegrationsは、他の監視システムでいうとプラグインみたいな位置づけでしょうか。 たくさんのIntegrationsが用意されています。

こんなかんじ↓

f:id:o21o21:20180807092733p:plain

Integrationsによっては、Datadog Agentの設定ファイルに追記が必要な場合もあるとのこと。 有名なサービスであれば、設定ファイルの記事も多少あったと思います。

Amazon LinuxにDatadog Agentをいれる

別にAmazon Linux(AL)じゃなくてもいいのですが、けっこうAWS使用している会社も多いと思うので例として。 ほんとに説明する必要ないくらい簡単です。

まず左メニューのIntegrationsクリック(選択肢出てきたらAgentでもOK)して、上タブのAgentでOSの選択画面にいきます。

f:id:o21o21:20180807093413p:plain

そしたらALを選択。

f:id:o21o21:20180807093606p:plain

すると、インストールコマンドが表示されるので、コピーして、 ターゲットとなるホストにsshなどで接続からの、コマンド叩いて終了です。

f:id:o21o21:20180807094002p:plain

実に簡単ですね!! 導入したのを確認するには、左メニューのinfrastructureをクリック。 導入したホストが表示されているかと思います。画面上部には、こんなかんじで

稼働中ホストの数 Hosts up / 合計ホスト数

今導入されているホスト数が載っているかと思います。

導入後は、自分が見やすいようにダッシュボードやモニターを設定していきます。

ダッシュボード

私も機能を使い切れていないので、ドキュメントを貼っておきます。

ダッシュボードのテンプレートの作成方法

こんなことできるよ!というのはこの方の記事が日本語でよくまとまっています!

Datadogの本当の魅力とは

こうした設定方法は、後々また記事にできればいいなと思っています! けっこう監視初めてだと、どうした設定をしていけばいいのか、 どこから手をつけていいのかわからない場合が多いような気もするので、 そこらへんも含め次回以降の記事にまとめていけたらと思っています!

以上.