えむにわリソース

ITのスキマ的なあれこれを書きます。

Rift Core 2.0を触ってみた!

本稿は Oculus Rift Advent Calendar 2017 の9日目の記事です。

前日はnobuhikoさんで、HoloLensでARToolKitを使ってみた でした。
大事ですね。Vuforiaと違ってOSSで使えるので個人で気軽に無料アプリ出してライセンス赤字垂れ流すことはないんですね!
生きよう!

さて今回のアドベントカレンダーの内容ですが、Rift Core 2.0を触ってみた感じなどを書いていきます。
※本当はHoloLensの技術的記事にしようかと思ったけど、あまりにHoloLens勢力が強いので、ちょっとRiftネタを増やしたく、内容を変更しました。。
Sharingについての実装編は、別途書きますね!

続きを読む

Laravelの開発に最適なDockerCompose作ってみた

本記事は Laravel Advent Calender 2017 2日目の記事です。

前日の記事は @nunulk さんで Undocumented Laravel (1) Routing 編 - Qiita です。
興味深いRouteの話でしたね。Routeなのに道が整備されてなくて迷子になりそうですね。

f:id:m2wasabi:20171201100936p:plain

TL;DR

Laravelで開発するときに環境問わず使える docker-compose のテンプレート作ったのでみんな使ってくれ!

github.com

取説が長いのでブックマークして使うときに見るといいよ!

なぜ作ったか

開発用の仮想環境は、Laravelが Laravel Homestead という公式のVirtualBoxイメージがあります。 最近はリソースのオーバーヘッドの大きいOS仮想環境よりも、小さい環境を簡単に作っては壊すコンテナ仮想環境のほうが便利になってきました。 また、WindowsだとVirtualboxの共有ストレージ周りが本当にイケてないなので、Dockerを使いたいです。

また、チーム内で開発OSがバラバラのケース、よくあります。 「それ、MACでないと動きません。」「PHPの案件ですがまずはRuby入れてください」とか担当者をギアナ高地に置いて帰りたくなりますね。

そんなわけで、OSに依存しないLaravel開発用のDocker Composeテンプレートを作りました。 これでみんな幸せになりましょう。


取扱説明書

動作環境

Dockerの動く環境であれば大丈夫です。

セットアップ

1. リポジトリをクローンします。

以下コマンドのようにクローンしても良いですし、GitHubからzipでダウンロードして展開しても良いです。

$ git clone git@github.com:m2wasabi/docker-compose-templates.git myproject

.env ファイルにて、プロジェクト名(コンテナ名のprefixになる)が設定できます。
好きな名前に書き換えましょう。

PROJECT_NAME=myproject

2. コンテナをビルドします。

$ cd myproject
$ docker-compose build

3. Laravelのプロジェクトをクローン、またはセットアップします

  • 既存のプロジェクトからクローンしてくる場合はこちら

./app 以下にLaravelアプリを展開します。コマンドで言えば以下のようになります。

$ git clone git@github.com:<your account>/<your Laravel project>.git app

次にアプリ内の .env ファイルを編集します。接続パラメータの参考設定は以下

DB_HOST=mysql
REDIS_HOST=redis

CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_DRIVER=redis

これでコンテナを立ち上げます。

$ docker-compose up

コンテナが起動したら、docker-composeとは別に新しいコンソールを立ち上げて、 ./php.sh.\php.bat でコンテナにログインします。
どちらを使うかは使っている環境で判断してください。

PHPコンテナのコンソールに入ったら、中で、以下コマンドを実行します。

/app # composer install
/app # php artisan migrate
  • 新規プロジェクトを開始する場合はこちら
$ mkdir -p app/public
$ docker-compose up

これでとりあえずコンテナが起動するので、コンテナ内で作業します。

コンテナに入るコマンドは、docker-composeとは別に新しいコンソールを立ち上げて、 ./php.sh.\php.bat で起動します。
どちらを使うかは使っている環境で判断してください。

PHPコンテナのコンソールに入ったら、中で、以下コマンドを実行します。

/app # composer global require laravel/installer
/app # PATH=$PATH:$HOME/.composer/vendor/bin/
/app # export PATH
/app # laravel new
/app # composer require predis/predis

以上でLaravelのプロジェクトが作成されたので、exit コマンドなどでPHPコンテナから出ます。

次にアプリ内の .env ファイルを編集します。接続パラメータの設定は以下の項目のみ書き換えてください。

DB_HOST=mysql
REDIS_HOST=redis

CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_DRIVER=redis

4. 開発を楽しみましょう!

接続できるURL

コンテナに入るコマンド

  • ./php.sh または .\php.bat
  • ./mysql.sh または .\mysql.bat

カスタマイズ・便利な機能

PHPのカスタマイズ

PHPの構成は ./docker-assets/php-fpm/Dockerfile に全て記述されています。
PHPの構成を変更したい、追加でライブラリを導入したい。
そんなときにはこのファイルを編集しましょう。

PHPコンテナのOSに、容量の少ない Alpine Linux 使っています。
導入可能なパッケージは公式サイトのパッケージ検索で探してみましょう。
Alpine packages

RUN apk add --no-cache \
        zip \
~中略~
        openssl-dev 

PHPモジュールのインストールに docker-php-ext-install を用いています。 インストール可能なモジュールは、コンテナを起動して docker-php-ext-install をオプションなしで実行すれば、ヘルプが出るので、そこを見るとよいでしょう。

RUN docker-php-ext-install \
        pdo_mysql \
~中略~
        zip 

composerの導入は、公式のコマンドそのままですがパッケージのダウンロードを高速化するために hirak/prestissimoを導入しています。

RUN curl -sS https://getcomposer.org/installer | php ;mv composer.phar /usr/local/bin/composer;
RUN composer global require hirak/prestissimo
RUN composer global require phpunit/phpunit

MySQLのカスタマイズ

./docker-assets/mysql/custom.cnf には、MySQLの追加の設定項目を記述します。
古いバージョンのLaravelやMySQLを使う場合に、文字コードを'utf8'変更したい場合などに便利です。

また、以下の部分のコメントアウトを外すと、 ./mysql_data/general-query.log にクエリログを吐きだします。
そのまま運用するのはストレージが危険ですが、レースコンディションの解析などの検証時には便利です。

general_log=1
general_log_file=/var/lib/mysql/general-query.log

PHPのカスタムスクリプト

ディレクト./docker-assets/php-fpm/scripts は、 PHPコンテナの /scripts/以下にマウントされます。
ここに実行可能なスクリプトを書いておくと、 コンテナ内から直接実行させるのに便利です。

$ docker exec -it myproject_php-fpm /scripts/db_reset.sh

Laravelのエンドポイントを/api/以下に変更したい

./docker-assets/nginx/conf.d/vhosts-main.conf の14~22行目を以下の様に変更します。
あとLaravel側でもRouteの変更は必要です。

    ## use /api/ as php framework
    location /api/ {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # # use / as php framework
    # location / {
    #    try_files $uri $uri/ /index.php?$query_string;
    # }

Swaggerのエンドポイントを追加したい

まず ./swagger/ ディレクトリに静的コンテンツを設置します。

docker-compose.yml の30行目のコメントを外します。

    volumes:
        - ./swagger:/swagger
        - ./docker-assets/nginx/conf.d:/etc/nginx/conf.d

続いて ./docker-assets/nginx/conf.d/vhosts-main.conf の24~27行目を以下の様に変更します。

    ## use Swagger directory
    location /swagger/ {
        alias /swagger/;
    }

LaravelやめてNode.jsのサーバにしたい

docker-compose.yml と、./docker-assets/nginx/conf.d/vhosts-main.conf のそれっぽいコメントアウトを見てください。

FAQ

Docker Hub使わないんですか?
どこの馬の骨ともわからない人のコンテナイメージは、他人から見れば信用できないものです。
基本的に公式のイメージを用いて、カスタマイズする部分はリポジトリ内部にDockerfileを置くことにしました。
Laravel以外で使いたいんじゃが…
Forkしてカスタマイズしてください。簡単です。

さいごに

これでLinuxMacWindowsも、みんな仲良く開発できますね。

明日は namaozi さんの担当です。 クエリスコープ、便利ですね。メモリ死したくないときの強い味方です。

HoloLensのSharingServeiceの歩き方(ツール編)

前回の記事 で予告したように、
今回はSharing Serviceの実践方法について、深掘りしていきます。
今回取り上げるのは、コードを書く前の段階のツールの準備と使い方の話です。
ここまで準備すれば、Academyのチュートリアルも理解が捗ることでしょう。

続きを読む

HoloLensでSharingする前に確認したほうがいいこと

11/25(土),11/26(日)の2日間でXR GameJamに参加してきました。

東京会場は、 25日はXRもくもく会と、 26日はプログラマのためのUnity勉強会と日程被りで、
同ジャンルで喰い合いになったため人数は少なかったですが、
良い体験が得られた会だったと思います。

夜に家で仕込んで完成させたSharingが2日目現場でまったく動かないまま終了になったので、
Sharing の実装に入る前に、どの方法で Sharing したらよいか、 各種Sharing の仕様と判断方法を調べました。

ハッカソンやイベントでSharing を行う前に、必ず現場のネットワーク要件の確認をしましょう!

コケるなら早いほうが良いので、0歩目でコケるのは超大事です。

f:id:m2wasabi:20171127201754j:plain

続きを読む

NefryBTのディスプレイに好きな画像を表示させる

暇になったのでNefryBT触ってみました。

付属のディスプレイがIPアドレスしか出さないのはもったいないので、

手始めに好きな画像を放り込んでみました。

f:id:m2wasabi:20171116124241j:plain

完全に理解した図

続きを読む

JaneStyleの4.0.0が出たのでずっと使える広告消し手動パッチの当て方について書く

タイトルの通り。β4 4.0.0 が出たそうです。5ch好きの皆様には朗報かもしれませんね。

5ちゃんねる専用ブラウザ 「Jane Style」 テストバージョン配布ページ

~2017/11/11追記~

4.0.0正式版がリリースされたので、URLは正式版の以下が正しいです。

5ちゃんねる専用ブラウザ 「Jane Style」

/~2017/11/11追記~

うちの環境では広告を表示するとアプリがフリーズして何もできないです。

某所に毎回時間差で動かすための書き換えアドレスが出るのですが、 毎回アドレスがアップされるの待ってるのも残念な人なので、 置き換えるべき検索を書いときます。

製作者側で対策されない限り今後も使える見込みです。

これはチート行為ですね。バイナリの書き換えは書き換えた人の責任において行ってください。 バックアップはとりましょう。壊れたって知らんです。

書き換えに使うツールはStirlingとかでいいんじゃないでしょうか。

それではオペの時間です。

続きを読む

技術書同人誌初心者が技術書典3で爆死したので戦略を練る

台風の迫る中技術書典3、無事完了しました。

関係者の方々、来場された方々、お疲れさまでした。

僕はというと、結論から言うと

刷りすぎた赤字ひどい助けて

技術書典主宰のひつじ氏のレポートを見ると

mhidaka.hatenablog.com

当日の頒布部数はサークル平均137部です。完売率は82.6%です。

激甘設定に見えます。

今回自分の出した本のスペックは

  • 60P 500円
  • 部数 100部
  • かかった費用 40kぐらい
  • 売れた部数 35部

赤字で焼き肉3回行けるぜ…

何がまずかったのか

印刷形式

調子に乗ってオフセットで刷ったけど、

人々の知らないものを広めたい目的で書く、

ニッチを自認するならオンデマンド一択だ。

部数

上記の印刷形式と関連するのですが、

オフセットの場合50部も100部もあまり変わらない値段になります。

これが罠で、完売するまで帰れま10

  • 誰もが知ってるアルファなパーソンが
  • 神絵師の描いた表紙で
  • 誰もが知ってるテーマの深掘りを扱うなら

部数アクセル踏んでも構わないけど、

そんなサークルになっちゃったら12時に完売御礼ゴールインでいいんだ。

勝ってから増刷すればいいんだし。

わきまえよう、MINOTAKE

昼下がりにさくっと切り抜けて幸せになろうよ

紙の本はリスクが大きいので、多少赤かギリギリでもいいので、確実に完売する部数、30~50ぐらいにしとこう。

電子版は在庫リスク抱えなくて良いのでとりあえず作っとくといいかも。

価格

100部MAXでトントンぐらいの価格設定でやると、いつまでたっても幸せが降りてきません。

働いても働いても楽にならない状態に陥ります。

逆に言うと価格設定は7割捌けでトントンぐらいにもってかないと100部印刷はリスキーです。

  • 紙+電書 60P 500円 オフセット
  • 電書のみ版 100円

んなぁ~

安かったのかな。

もし同じスペックで刷ってしまったら以下の価格で設定するかな…

  • 紙+電書 700円 (もしくはページ数減らす)
  • 電書のみ 300円

それよりもそもそもオンデマンドの少部数で原価を抑えるほうが肝要です

表紙

f:id:m2wasabi:20171020101718j:plain:medium

初期の衛藤ヒロユキ先生*1みたいな絵柄で良くもなく悪くもなく でしたが、

表紙だけで爆売れするということはないですが、一定のクオリティの足切りと底上げ効果があるので侮れないです。

最初に手に取ってもらえるというのは大事。

神絵師に依頼すると印刷代ぐらいの費用を報酬として支払うのですが、その原価の捻出方法が分からないので、隣のサークル(nayucolony)さんが

ガチでかわいいイラストで戦っていたので、どうやったのか聞いてみたら、 相方さんの妹さんに描いてもらったそうで、それなんて紗霧ですか。

そういえば前回の技術書典2のときも神田部品さんに聞いたら、妹さんが表紙担当されてたな。

というわけで勝利の鍵は絵のうまい妹です。

売り子

常に2人はブースが狭すぎて辛いですが、

完全ソロプレイだと、目の前においしそうな本がぶら下がってるのに、買いに行けない、

トイレに行けない、

もちろん飯も。

なので、早々に完売御礼する生存戦略でない場合は、

1日付き合ってくれる友達を探して巻き込んだ方が幸せです。

そんな友達募集中です。

初心者におすすめの戦略

  • オンデマンドで30~50部
  • とりあえず電子版は作ろう
  • 価格設定は安すぎず 爆死しない設定にしよう
  • 神絵師雇う余裕はないので絵のうまい妹を探そう
  • 自分が動くために完売するか、友達を巻き込もう

今回はズタボロです。

余裕が出来たらルーター買い替えようと思ってましたが、これは予定変更です。

納豆とTKGともやしの生活ですが、そろそろ1日1食を検討するかもしれないですね。

じゃあ、技術書書くのはもうやめるか?と聞かれると、

そんなわけないじゃないですか

これだけ情報が得られたなら、次は失敗しないと思います。

続きを読む