OmniAICreator/Qiita-1.07M huggingface dataset:
headコマンド使ったら"[Errno 32] Broken pipe"がでた件

#発生したこと
aws-cliでフィルタリングかけて、AMI-ID情報持ってきて変数にいれようとしたら

<p>■実行コマンド</p>
```
AMI_ID=`aws ec2 describe-instances --region ${REGION}\
        --filter "availability-zone == ${AZ}" \
                 "Name=tag-key,Values=Resource" "Name=tag-value,Values=${TAG_RESOURCE}"\
        --query "Reservations[].Instances[].ImageId" \
        --output text | head -n 1`
```

<p>■結果</p>
```
******** #出力結果

[Errno 32] Broken pipe
```

とでてしまい、`[Errno 32] Broken pipe`がでてしまっていた。

最初以下を読んでも何のことか分からず、結構はまってしまった
>Broken pipe
>データを読み取るプロセスのないパイプへの書込みです。通常この状態が発生すると信号が生成され、その信号が無視されると、エラーが返されます。
引用元：[http://software.fujitsu.com/jp/manual/manualfiles/M090098/J2X14260/06Z201/pclmsab/pclms130.html](http://software.fujitsu.com/jp/manual/manualfiles/M090098/J2X14260/06Z201/pclmsab/pclms130.html)

正しい値は取れているが、ログを出力していたので見た目的によろしくない。



#原因
~~コマンドにより標準出力にすごい長い結果がでてしまい、それをパイプラインを使って`head`で受け取っていたのがよくなかった。~~

**5/21追記**
`broken pipe`は、「読み込むプロセスがいない(headが終了した)にも関わらず書き込もうとした」ことが
原因とコメントでいただいた。

今回の場合だと出力が多く、書き込みが分割されると後にまわされた出力を読み込むプロセスがなくなり
`broken pipe`がでている可能性が考えられる。

angel_p_57さん、コメントにてご教示いただきありがとうございます。



#解決
実行コマンドの最後の一文を以下のように変更し、出力されないようにした。

```
--output text 2>/dev/null　| head -n 1`
```

~~どれくらい長いものだとだめなのかは結局分からずだけど･･･。~~
PIPE_BUF（デフォルト4096byte）の数値によるとコメントでいただきました
iTunesConnectにビルドが反映されない時に確認すること

# ビルドに反映されない際に、確認すべき2つのポイント

リリース申請をする際に、xcodeからiTunes Connectにアップロードしてもビルドに反映されないという問題が起きました。

もしかしたら同じような問題に遭遇しているしている方がいるかなと思い、参考にしていただけたらと思います。

主に2つのことを確認して、解決を試みました。

## バージョンの確認

iTunes Connect上のバージョンとxcode上のバージョンが同じか確認する。

iTunes Connectだと、
app store > ios app > 2.2提出準備中（自分が設定しているバージョン）の真ん中下あたりに、下の写真のような「app 設定情報」という項目があるので、そこでバージョンを確認できます。

![スクリーンショット 2018-05-17 14.01.24.png](https://qiita-image-store.s3.amazonaws.com/0/257902/c158c90d-6ec4-b297-4630-183b87504b3e.png)


xcode上では、
General > identity　でバージョンを確認することができます。


![スクリーンショット 2018-05-17 13.54.41.png](https://qiita-image-store.s3.amazonaws.com/0/257902/f6b47900-1654-f6f9-8d2a-91450426c310.png)

同じバージョンになっているか確認してみてください。


## アイコン設定とサイズの確認

###「バージョンは同じ設定にしたけど、まだビルドに反映されない」

xcode上でapp to Uploadが成功してもiTunes Connectのビルドに反映されない人は、アイコンの設定を確認してみてください。（簡単に設定できます！）

xcode上のAssets.xcassetsから、
もしくは　General > App Icons and Launch Images > App Icons Score の右にある左矢印をクリックすると下の写真のような画面が出てきます。
 

![スクリーンショット 2018-05-17 14.12.51.png](https://qiita-image-store.s3.amazonaws.com/0/257902/07c6c487-e163-38e9-25da-c6c3becaad2f.png)

例えば、40ptだと40ピクセルのサイズを意味します。
2xとは、40pt×2のサイズなので80ptのサイズになります。
フォルダからドラック&ドロップで画像を入れることができます。

いかがでしたでしょうか？
そもそもリリースの申請を頻繁にしたことがある人が少ないと思うので、
なかなか周りに頼る人が少ないと思います。
今回のように「ビルドに反映されない問題」の記事は少ない印象を受けました。
少しでもお力になれたら幸いです。

参考にした記事
https://kerubito.net/technology/2846
Android StudioでConstraintLayoutに赤い点線が出たとき


# 症状
Android Studioで、ConstraintLayoutを拡張した独自のViewを書いていました。
ある日、バージョン2から3にアップグレードしたところ、「ConstraintLayout(以下、CL)が見つからないよ！」というエラーを吐くようになってしまいました。
![Dbrt9nRVwAEm-yt.jpg](https://qiita-image-store.s3.amazonaws.com/0/203525/05831ba6-d58d-850c-bcdd-4543c40cf9ea.jpeg "Dbrt9nRVwAEm-yt.jpg")

#試したこと 

- プロジェクトのクリーン、ASの再起動
- CL、CLSolverの再インストール



#解決策
Gradle(Module: app)に読み込んでいたCL、CLSolverのバージョンが古かったのが原因でした。

```app.gradle
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.android.support.constraint:constraint-layout-solver:1.0.2'
```
を

```app.gradle
    compile 'com.android.support.constraint:constraint-layout:1.1.0'
    compile 'com.android.support.constraint:constraint-layout-solver:1.1.0'
```
に直し、Gradle Syncをかけたところ、無事にエラーは消えました。
GASのローカル開発環境のテンプレをGradleのプロジェクトで作ってみた話

がーーーーっと作りましたし、あくまで個人で使えればいいや的なノリで作ったので雑です。
GoogleAppsScriptのローカルの開発環境をさくっと作れるといいなーと思って作りました。
とりあえず要件としては
1. GoogleAppsScriptをTypeScriptで書いてJSにコンパイルできる環境を作る。
2. コンパイルされたJSをアップロードできる。

この2つをGradleのタスクを実行するだけでできることを目指しました。

以上の2つはGradleのスクリプトを書くだけでも可能だとは思いましたがせっかくなのでプラグインとして開発しましたが、その話はプラグインがもう少ししっかりしたものになってからにしようかなと思います。

~~テンプレートはGithubにアップロードしています。~~
~~[gas-project](https://github.com/naito-y/gas-project)~~
~~[gas-project.zip](https://codeload.github.com/naito-y/gas-project/zip/master)~~
~~使用する際はクローンするなりzipでダウンロードするなりしてください。~~
今は公開していません

仕組みとしては、gradleと、そのプラグインである[com.moowork.node](https://github.com/srs/gradle-node-plugin)を利用させてもらい、GASのアップロードとnodeの`package.json`等のセットアップをプラグインを自作して、それに任せてみました。
プラグインの作成には以下の依存関係を使用しています。

```gradle
dependencies {
    compile 'com.google.api-client:google-api-client:1.23.0'
    compile 'com.google.oauth-client:google-oauth-client-jetty:1.23.0'
    compile 'com.google.apis:google-api-services-script:v1-rev175-1.23.0'
}
```

## テンプレを利用するために必要なもの

* [JDK,JRE](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
* [node](https://nodejs.org/ja/)
* [TypeScript](https://www.typescriptlang.org/)


## テンプレを利用して開発

```terminal
gradlew setupGas
```
のタスクを走らせると、TypeScriptファイルを置くための`dev`フォルダと、GoogleAppsScriptの型情報を取得するための`package.json`とデフォルトの`tsconfig.json`を生成します。

`setupGas`を走らせずに`npmInstall`のタスクを走らせても事前に`setupGas`が走るようにしているので問題なく動くはずです。

その後`dev`ディレクトリにTypeScriptファイルを配置して、`npm_run_build`のタスクを走らせるかコンソールで`npm run build`すると`dev`ディレクトリ内のファイルがコンパイルされて`out`ディレクトリ内にJSファイルが配置されるという流れです。


## GoogleAppsScriptをアップロード
アップロードする際に適用されるスクリプト名は`settings.gradle`内の`rootProject.name`が使用されます。
各自で適切な名前に変更してください。
アップロードする際に必要なことは`README.md`にも書いてあるとおりなのですが、プロジェクト内にclient_secret.jsonとmanifest.jsonを配置する、もしくは`build.gradle`内の`gasUploadConfigurations`の中身を変更して適切なパスを指定してください。

`uploadGas`を走らせるとデフォルトのブラウザが開いて認証を求めてくるので、認めればアップロードされるはずです。


## おまけ
プラグインの方ですが、Gradleのプラグインを作ったのがそもそも初めてなのでよくわかってないことが多く、また、スクリプトを使って設定できることも多くないのであとでしっかり作ったものをアップロードできるといいなぁと思いました。
完全に個人的な趣味でKotlinをJSにコンパイルできるので_サクッと楽に_ KotlinをつかってGoogleAppsScriptの開発ができるようになるところを目指しています。
MSXML2.XMLHTTP.6.0でレスポンスをキャッシュさせない方法

##ExcelからREST呼び出しをしたい
ExcelからREST呼び出しを行い、テストケースを管理するのが便利という話を
[以前](https://qiita.com/haseshin42/items/4acf31db9a672ed691df)書きました。

実際にやってみると、MSXML2.XMLHTTP.6.0を使用すると、自動的にレスポンスがキャッシュされ、リクエストが発生したりしなかったりと何かと不便です。

##ダミーのパラメータを指定してキャッシュを防ぐ
レスポンスのヘッダーにCache-control: no-cache などを指定することも可能ですが、場合によってはキャッシュするのが正しいケースがあるでしょうから、サービス側に手は入れたくありません。

そこで、以下のようにリクエスト時にダミーのパラメータをセットすることで、キャッシュを回避します。要は、異なるURLになれば良いので、DateTime.Nowなどを用いるのが便利です。

`target_url = "http://test.com/api" & "?dummy=" & DateTime.Now`
AWSのUbuntuにGitlabをインストールする

今回は「Ubuntu Server 16.04 LTS (HVM), SSD Volume Type」を選択し、メモリを4Gとしました。
1Gだとメモリがーと怒られたのですが、2Gでも大丈夫かもしれません。

# 下準備
更新して、curl、openssh-server、ca-certificates、postfixをインストール。

```console
$ sudo apt-get update
$ sudo apt-get install -y curl openssh-server ca-certificates
$ sudo apt-get install -y postfix
```

postfixの設定はデフォルトのままにしました。
ドメインだけ、gitlab.mydomain.comとしておくと後で楽かもしれません。

# gitlabのインストール

後で行う日本語化が9.1.4までしかリリースされていないので、9.1.4をインストール。

```console
$ curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
$ sudo EXTERNAL_URL="http://gitlab.mydomain.com" apt-get install gitlab-ce=9.1.4-ce.0
```

#日本語化

日本語化ファイルを取得し、解凍します。

```console
cd /tmp
wget https://github.com/ksoichiro/gitlab-i18n-patch/archive/master.zip
sudo apt-get install unzip
unzip master.zip
```

回答したパッチをgitlab本体にあてます。

```console
cd /opt/gitlab/embedded/service/gitlab-rails
sudo patch -p1 < /tmp/gitlab-i18n-patch-master/patches/v9.1.4/app_ja.patch
```

以上です。

動作確認後、もしドメイン表記がAWSのパブリックDNSのままであった場合は下記修正をします。

```console
sudo vi /etc/gitlab/gitlab.rb
```
下記の通り変更。

```php
external_url 'http://gitlab.mydomain.com'
```

書き換えが終わったら、反映して再起動します。

```console
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
```
Python で MySQLのテーブルに INSERT しても反映されない(丸２日無駄に!!)

# Python プログラムからの MySQL 操作 で Insertが反映されない!!
後学のために記しておきます。

はい、私はにわかPython使いです。他の言語も扱うのでPython命でもありません。

今回丸々２日間ハマってしまいました。

# MySQLでなぜか Insert だけ反映されない!!
こういうプログラムでした。
CSVファイルを読み込んでMySQLのデータベースのテーブルに格納します。
難しいことはありません。
MySQLのライブラリは python-MySQL 。
プログラム冒頭で元となるテンプレートテーブルをコピーしてテーブルを作成します。

```py
import MySQLdb

conn = MySQLdb.connect(host="extdbsrv", db="test", user="user", passwd="xxx", charset="utf8")

cursor = conn.cursor()
sql = "CREATE TABLE test like table_template"
cursor.execute(sql)
```

テンプレートテーブルはphpMyAdminで作成します。
プログラムで生成しないのは、コメント付のテーブルを作成するのにphpMyAdminが便利だからです。

プログラムを実行します。正常にテーブルがコピーされます。
もちろんこの後にもプログラムが続きます。
CSVファイルをオープンして１行ずつ読み込み、テーブルにInsertしていきます。
カラムが50個もあり、SQLで書き込む処理が大変です。

#なぜかデータベースにデータの書き込みがされない!!
プログラムエラーは出なくなりましたが、なぜかデータベースに反映されず書き込まれません。
もちろんSQLエラー(MySQLが吐くエラー)も出てないようです。
先にテーブルコピーはできているので、DBに接続できてますし、書き込み権限はあるはずです。

```py
sql = "INSERT INTO hwdata01 ( id , prefectural_id ) values (NULL,1)"
cursor.execute(sql)
```

プライマリーキーだけinsertするプログラムにしましたが、レコードは追加されず。。。

#トラブルシューティング
プログラムを眺めていてもどうにも原因がわかりませんが、あわてずトラブルシューティングです。

- ローカル(Windows)環境で作成していましたが、Linuxサーバー上でも同じPythonプログラムを実行 => ダメ
- DB接続アカウントに全権限を与えた  => ダメ
- 接続書き込み先のサーバーを変えてみてテスト  => ダメ
- CSV読み込みはやめて仮データをInsertするだけのプログラムに変更  => ダメ
- phpMyAdminから同じSQL文を実行 => 書き込みされる
- MySQLのCLIクライアントから同じSQL文を実行 => 書き込みされる

結局はPythonからの書き込みだけInsertが反映されません。

#不思議な現象！ autoincrement はカウントされている
CLIクライアント(MySQLコマンドライン)からinsertやselectをしていて気づきましたが、autoincrement(自動連番)は機能しているようです。
pythonプログラムでinsertすると、レコードは挿入されませんが、ちゃんとidが１増えているのです。

![Image1.jpg](https://qiita-image-store.s3.amazonaws.com/0/59033/846013ca-b312-c975-28aa-854de114e242.jpeg)

phpMyAdminの画面ですが、id　が飛び飛びになっています。
このidが書き込みされているのは、CLIクライアントから操作した場合です。

ますますわからなくなりました。

#そうかコミットされてないんじゃないか
色々検索をしている途中に、コミットされてないんじゃないかという疑念がわきました。
Python以外は気にしなくていいんですが(良くないですが)、他の言語は自動的にファイルクローズやDBコミットを自動的にやってくれていることが多いので、極端に気にしなくてもだいたい何とかなります。

気にしなかったわけではないのですが、ファイルのオープンも復数していたので目に付きませんでした。

commit/close 文をプログラムの最後に付け加えます。

```py
cursor.close
conn.commit
conn.close
```
これで何とかと願いながら実行しますが、特に挙動は変わらず。。。

#もしやと思い
ここまで２日間費やし、記載していないことでもできることは色々やりました。

もしやと思い、命令文の後ろに括弧(カッコ)を付け加えます。

```py
cursor.close()
conn.commit()
conn.close()
```

結果は・・・思ったようにInsertされました。

何だったんでしょうか。カッコをつけるつけないはあまり気にしませんでした。
というより、つけなければエラーか警告を吐いてくれればいいのに。

Python使いの方々は with 文を使って自動的にコミットさせろとか言うんでしょうけど。
Bluetoothマウスのペアリングの接続不具合解消

【はじめに】
　FUJITSUのパソコンLIFEBOOK UH90/B3(Win10)を買いました。Bluetoothが使えるというので、今まで使っていたELECOM社のBluetoothマウスM-BT11BBを接続しようしたら、初めてペアリングしたときはうまく動いたのですが、電源をOFFにして再度立ち上げたりしたときに、なぜかそのままではペアリングがうまくいきません。
以前使っていたSurfacePro3はそのままでうまく動作していたのですが...
【原因】
PC内臓のインテルBluetoothデバイスがデフォルトで省電力機能が有効となっていると、PCの電源をONしたときに、Bluetoothデバイスの電源がOFFの状態になるため、マウスからの信号が届かなくなるからです。
LIFEBOOK UH90/B3(Win10)は、デフォルトで「デバイスの電源をオフにできるようにする」のチェックが入っていました。
【対策】
PCのBluetooth機器の電源管理プロパティを変更して、勝手に電源オフにならないようにする。

【手順】
１．START⇒Windowsシステムツール⇒コントロールパネル⇒ハードウェアとサウンド⇒デバイスマネージャーを起動
２．デバイスのリストから「Bluetooth ⇒インテル（R）ワイヤレスBluetooth（R）」をダブルクリックする。
３．表示されたプロパティ画面で「電源の管理」タブを選択する。
![プロパティ.png](https://qiita-image-store.s3.amazonaws.com/0/211560/f57a042a-3c62-3fb2-b9e0-266952d7f906.png)

４．「電源の管理」タブで「電力の節約のために、コンピューターでこのデバイスの電源をオフにできるようにする」のチェックが入っているので、チェックを外してOKを押す。
![電源管理.PNG](https://qiita-image-store.s3.amazonaws.com/0/211560/2e2b4867-47d3-8430-6074-de111aff35da.png)


※他のPCでも同様の症状が出るときは、「電源の管理」のタブを探して同様に設定をして下さい。
CSSで-webkit-line-clampがきかなくて困った

「css 複数行 3点リーダー」とかでググると下記のようなやり方がガンガン出てくるし、実際それで問題なく３点リーダーが表示される。

```
div {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 3;
　　 overflow: hidden;
  }
```

しかし、今回３点リーダーが表示されないどころか、下記のようにdivの高さを指定しても高さが50px以上になっても文字が表示されていた。

```
div {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 3;
    overflow: hidden;
    height: 50px;
  }
```

色々調べた結果、既存のCSSでdivにpadding-bottomを指定していると、その分も高さがあると判定されていたらしい。

```
div {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 3;
    overflow: hidden;
    height: 50px;
  }
...
div {
    padding-bottom: 20px;
}

```

結構ググっても出てこなかったので、「CSS clamp 効かない」とかで見つかるようになると嬉しいと思った。

参考URL：
https://qiita.com/yoshida-hi/items/055c36e015f0bf8fe4f6
SoapUIでデフォルトのencodingを指定する方法

##Soap UIでMockサービスを作ったら日本語が文字化けする場合の対処法
Soap UIはAPIのテストやMockを作るのに非常に便利なツールです。

Soap UIでMockサービスを作り、日本語を返したかったのですが、やってみると文字化けをする、、、
Headerにcharset=Shift-Jisを設定すればブラウザで日本語で表示することは可能なのですが、UTF-8に設定したい。さてどうするか。

##vmoptionを指定して設定可能
インストールディレクトリ/bin/の下にSoapUI-5.2.1.vmoptionsといったファイルがあるので、そこに、以下の1行を追加し、再起動すればOKです。

```-Dfile.encoding=UTF8
React用OSSを開発した話。

## 概要

社内プロジェクトの大半がReactとGoで開発されています。
社内ライブラリが沢山増えてきたので、その中でもOSSをまとめてみました。
画面があるものはStorybookを使って「デモページ」として公開しています。

## npm パッケージ

### @gemcook/table

Reactのテーブルを簡単に作れるようにしたものです。
大量のデータをさばけるようになっていて、IE11でもサクサク動くように作っています。
7,738ダウンロードされておりよく伸びてるので、もっと開発に力入れていきたいです。

* デモページ: https://table.storybook.gemcook.com  
* GitHub: https://github.com/gemcook/table  

### @gemcook/pagination

Reactで簡単にページネーションを表示することができます。
データを流し込めばすぐにページネーション機能を使うことが出来ます。
上記のテーブルライブラリと組み合わせて使うことが多いですが、突発的に5,000ダウンロード突破しておどろきです。

* デモページ: https://pagination.storybook.gemcook.com  
* GitHub: https://github.com/gemcook/pagination  

### @gemcook/notification

Reactで通知を簡単に表示できます。
成功と失敗時で通知の見た目が変わったり、実用的に使えるようになっています。

* デモページ: https://notification.storybook.gemcook.com  
* GitHub: https://github.com/gemcook/notification  

### @gemcook/modal

Reactで簡単にモーダルを表示できます。
モーダルはよく使うものなので、特に簡単に使えるようにしました。

* デモページ: https://modal.storybook.gemcook.com  
* GitHub: https://github.com/gemcook/modal  

### @gemcook/validates

Redux Formでよく使うバリデーションをまとめています。
メールアドレス検証や必須入力項目チェックするための関数があります。

* GitHub: https://github.com/gemcook/validates  

### @gemcook/auth

Amazon Cognitoのサービスを使う時に一通り必要な関数をまとめています。
[AWS Amplify](https://aws.github.io/aws-amplify/)のラッパーです。

* GitHub: https://github.com/gemcook/auth  

### @gemcook/utils

汎用的に使える関数があります。
日付やURLクエリパラメータ等を便利に扱えるような関数をまとめています。

* GitHub: https://github.com/gemcook/utils  

## その他

React用OSS以外にも出し始めました。
GoとServerlessもどんどん出していきます。

### Serverless

#### cognito-trigger-sls

Cognitoのトリガーで発火するLambdaをslsで作成したライブラリです。よくあるサインアップ後に送るメールなどを簡単に修正できる様になっています。

* GitHub: https://github.com/gemcook/cognito-trigger-sls  

#### resize-image-sls

Amazon S3に置いた画像をリサイズやクリッピングできます。

* GitHub: https://github.com/gemcook/resize-image-sls

### Go

#### pagination-go

@gemcook/pagination と組み合わせるページング用APIをGoで実装するためのライブラリです。

* GitHub: https://github.com/gemcook/pagination-go

## OSS出してみた後に思うこと

今回OSS出してみて意外とダウンロードされて、びっくりしてます。
便利に使えることを目標に作成していますが、せっかくライブラリに出すなら新しい技術を取り入れたかったので[Rollup.js](https://rollupjs.org/guide/en)を導入して、超軽量ライブラリになるように作り込みました。
Flowも導入したり、エンジニアとして楽しんでいければいいなと思っています。
StripeのwebhookをUltraHook使ってローカルで受け取るやつ


stripeのwebhookの確認をローカルでやりたかったので[UltraHook](http://www.ultrahook.com/)を使ってみた

### 環境
- Host -> windows
- Guest(virtualbox) -> debian

# やったこと

## rubygems
`sudo apt-get install ruby rubygems`

インストール確認
`gem -v`

## UltraHook

### ユーザ登録
[UltraHook](http://www.ultrahook.com/)でユーザ登録する
`sudo gem install ultrahook`

インストール確認
`ultrahook -v`

### UltraHook設定
`echo "api_key: {APIKEY}" > ~/.ultrahook`
`ultrahook stripe http://{sitedomain}/webhook`

apacheでバーチャルホスト設定していたのでそれでやってみたところ、アクセスするとエラーで止まる。
localhostで目的のサイトにつながるようにapacheとvirtualboxのポートフォワードを設定しなおして再チャレンジ
`ultrahook stripe http://localhost/api/stripe`
macでzipファイルサイズが大きすぎますと出るとき エラー27

# OSイメージなどの巨大ファイルを解凍しようとしてファイルサイズ大きすぎるといわれたら

権限変更してtarコマンドで解凍できます

```
chmod -R oug+r ファイル名.zip
tar xvf ファイル名.zip
```
Python: datetimeで確実に日本時間を取得する方法

## 概要
- Pythonのdatetimeで確実に日本時間を取得したい。
- datetime.datetime.now()などdatetimeで今の時刻や日付を取得しようとすると、環境次第では日本時間以外が取得されてしまう。
- ローカル開発環境では日本時間だったのにデプロイしたらUTCになってたりする。
- Python2.7でやってます。


## 方法1: pytzの利用
datetime.datetime.now()の引数にpytz.timezone()で東京を指定する。

```py:method1.py

# coding: utf-8

import datetime
import pytz


now = datetime.datetime.now(pytz.timezone('Asia/Tokyo'))


>>> now
2018-05-17 13:26:50.224163+09:00

```




## 方法2: UTCとの差分を計算
JSTとUTCの差分は+9時間なので、UTC時間を取得して+9時間する。

```py:method2.py

# coding: utf-8

import datetime


# JSTとUTCの差分
DIFF_JST_FROM_UTC = 9
now = datetime.datetime.utcnow() + datetime.timedelta(hours=DIFF_JST_FROM_UTC)


>>> now
2018-05-17 13:26:50.224208

```
使えるGem

##1. Devise
- 言わずもがな。認証系を司る化身

##2. ransack
- 検索を凄く簡単に実装できる凄いやつ

##3. whenever
- rubyファイルの定期実行。cronを司る

##4. better_errors
- エラーメッセージをわかりやすく

##7. letter_opener_web

- 開発環境で飛ばしたメールをブラウザで確認できるgem

http://rubyandrails.hatenablog.com/entry/letter_opener_web
https://github.com/ryanb/letter_opener

##3. devise-i18n

- Devise日本語化
https://github.com/tigrish/devise-i18n

##2. Devise_invitable
- 招待機能の追加

##9. pundit
- 権限管理

##10. twitter
- ツイッターの化身

##11. dotenv-rails
- 環境変数を管理するためのGem。
    - https://pikawaka.com/rails/dotenv-rails
[WordPress]foreach内でget_template_partがうまく機能しない

# 概要
```php
<?php get_template_part( $slug, $name ); ?>
```
これだと変数に値を読み込んでくれないなどの問題が発生した。

[関数リファレンス/get template part](https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_template_part)

# 解決策

```php
<?php include( locate_template( './slug-name.php' ) ); ?>
```
これに置き換えたらどうにかなった。

# 参考
[get_template_part in a foreach loop and access to a var of item
](https://stackoverflow.com/questions/35886508/get-template-part-in-a-foreach-loop-and-access-to-a-var-of-item)
Windows10のロック画面の画像がキレイだから壁紙のスライドショーにしたいと思った

#Windows10のロック画面の画像ってキレイじゃないですか？
Windows10のロック画面の画像って、キレイだし、定期的に変更されるからメッチャ良いじゃないですか。これをストックして、壁紙でスライドショーできたら嬉しくないですか？俺は嬉しいよ。

![4b6e60030cde390047c7001ee5975ed7f65a64d2e41daf818a450fe609cf6612.jpg](https://qiita-image-store.s3.amazonaws.com/0/257548/9a0a0aa0-9653-4fb4-7273-189a8d341717.jpeg)
_こんなやつ_

#どこに保存されているか探してみる
グーグル先生に尋ねてみたら、どうやら以下のパスにあるらしい。
C:\Users\(ユーザ名)\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets

ちなみにファイル名を指定して実行(Win+R)で以下を打ちこんでも行けるらしい。
%LOCALAPPDATA%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets

#実際にフォルダ内を見てみる
拡張子がないし、ファイルのサイズを見た感じ、たぶん壁紙になるようなサイズじゃないファイルというか、たぶんアイコンとかで使われているっぽい画像もある感じ。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/257548/c89cfd63-a66e-07c6-bcff-cf9c391b5387.png)

とりあえず、ファイルのケツに適当に.jpgをつけてみたら、画像として認識してくれるっぽい。
![2.png](https://qiita-image-store.s3.amazonaws.com/0/257548/ddf20fa7-393b-c415-df38-804b7843c718.png)

#jpgにして使えるやつだけより分けてマイピクチャへコピー
一応マイピクチャのパスは「C:\Users\(ユーザ名)\Pictures\」だよ。

```java
// パスのセパレータ
String spa = FileSystems.getDefault().getSeparator();

// コピー元フォルダ
Path fromFolder = Paths.get("C:\\Users\\Kerlon\\AppData\\Local\\Packages\\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\\LocalState\\Assets\\");
// コピー先フォルダ
Path toFolder = Paths.get("C:\\Users\\Kerlon\\Pictures\\");

// コピー元にあるファイルでループ
for (String fileName : fromFolder.toFile().list()) {
    // ファイルを画像として取り込み
    BufferedImage image = ImageIO.read(new File(fromFolder + spa + fileName));

    // 1920x1080サイズの場合
    if (image.getWidth() == 1920) {
        // コピー元ファイル
        Path fromFile = Paths.get(fromFolder.toFile().getAbsolutePath() + spa + fileName);
        //コピー先ファイル(拡張子.jpgをつける)
        Path toFile = Paths.get(toFolder.toFile().getAbsolutePath() + spa + fileName + ".jpg");

        // 一応存在確認をする
        if (!toFile.toFile().exists()) {
            // コピー実行
            Files.copy(fromFile, toFile);
        }
    }
}

```
実行するとめでたく1920x1080サイズの画像だけマイピクチャにコピーできていて嬉しい。
![3.png](https://qiita-image-store.s3.amazonaws.com/0/257548/32b34cb6-40d0-4bc6-f2ee-4a0d71125511.png)

#Windowsの壁紙の設定をいじる
デスクトップの空いているところを適当に右クリックして「個人用設定」を選択。
![4.png](https://qiita-image-store.s3.amazonaws.com/0/257548/01895adb-f88f-b51f-8a27-2d25b475eba6.png)

以下のような設定にする

- 「背景」を「スライドショー」に
- 「スライドショーのアルバムを選ぶ」を「ピクチャ」に
- あとは適当に好みで

![5.png](https://qiita-image-store.s3.amazonaws.com/0/257548/d8c52108-d87f-2ff3-7251-c2e6bffb9a1d.png)

#定期的に実行してくれるようにする
スタートアップに実行ファイルを突っこむ。こうすれば起動時に勝手に実行してくれる。PCの電源は切らない派の人は「windowsスタートメニュー→全てのプログラム→アクセサリ→システムツール→タスクスケジューラ」で仕込むと良いでしょう。
![6.png](https://qiita-image-store.s3.amazonaws.com/0/257548/ebd9870e-fcc1-768e-4e5d-1d503bf3d8aa.png)

#めでたしめでたし
![7.png](https://qiita-image-store.s3.amazonaws.com/0/257548/91ac75f6-7bd1-12c8-bffb-dbaddc008a45.png)
Ansibleのmakeモジュールを使ってPHPをインストールしてみる

今更ながらmakeモジュールを使ってPHPをインストールしてみた。

```yaml:roles/php/vars/main.yml
---
php_version: "7.0.13"
php_install_dir: /usr/local
php_lib_dir: "{{ php_install_dir }}/lib"
php_bin_dir: "{{ php_install_dir }}/bin"
php_extensions_dir: "{{ php_lib_dir }}/php/extensions/no-debug-non-zts-20151012"
php_src_dir: /usr/local/src
php_make_dir: "/usr/local/src/php-{{ php_version }}"

php_with_jpeg_dir: /usr/lib
php_with_png_dir: /usr/lib
php_with_openssl: /usr/local/ssl 
php_with_iconv: /usr/local 
php_with_apx2: /usr/local/apache/bin/apxs
```

```yaml:roles/php/tasks/main.yml
# ファイル・バージョンチェック
- name: Check php dir.
  stat: 
    path: "{{ php_bin_dir }}/php"
  register: php
- name: Check php version.
  shell: "{{ php_bin_dir }}/php -v"
  changed_when: false
  register: php_current_version
  when: php.stat.exists
- set_fact: php_installed=true
  when: php.stat.exists and
        php_version in php_current_version.stdout
- name: Ensure package directory exists
  file: 
    path: "{{ php_src_dir }}"
    state: directory

# php install
- name: Install php.
  block:
  - unarchive:
      src: http://jp2.php.net/distributions/php-{{ php_version }}.tar.gz
      dest: "{{ php_src_dir }}"
  - name: ./configure
    shell: >
      ./configure 
      --prefix={{ php_install_dir }} 
      --enable-sigchild 
      --enable-mbregex 
      --enable-bcmath 
      --enable-sockets 
      --enable-ftp 
      --enable-soap 
      --enable-opcache
      --with-iconv={{ php_with_iconv }} 
      --with-apxs2={{ php_with_apx2 }} 
      --with-openssl={{ php_with_openssl }} 
      --with-jpeg-dir={{ php_with_jpeg_dir }}
      --with-png-dir={{ php_with_png_dir }}
      --with-pgsql 
      --with-pdo-pgsql 
      --with-curl 
      --with-gd 
      --with-zlib-dir 
      --with-mcrypt 
      chdir={{ php_make_dir }}
  - name: make all
    make:
      chdir: "{{ php_make_dir }}"
      target: all
  - name: make install
    make:
      chdir: "{{ php_make_dir }}"
      target: install
  when: php_installed is not defined

# php config
- name: Copy php.ini.
  copy: 
    src: php.ini
    dest: "{{ php_lib_dir }}"
- name: Copy php extensions.
  copy: 
    src: "{{ item }}"
    dest: "{{ php_extensions_dir }}"
  with_items:
    - mbstring.so
    - memcached.so
```

「Ansible Galaxy使えば？」という声には耳を傾けない。
Vue.jsをVSCodeで書く時はVeturを入れてjsconfig.jsonを書こう

vue-cliで新しいプロジェクトを作ります。バージョンは3.0.0-beta.10です。

```bash
$ vue create hoge
```

Manually select featuresで、以下のような設定でプロジェクトを作ります。

<img width="551" alt="スクリーンショット 2018-05-17 12.13.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/256922/ac2e4ae2-9a8d-6e11-cc2e-b8594fb51dd0.png">

そのままの状態ではVisual Studio Codeは.vueファイルをうまく扱えないので、拡張機能のVeturを導入します。

<img width="1104" alt="スクリーンショット 2018-05-17 12.29.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/256922/fe61c364-5e34-3e12-6c17-efab74e8751f.png">

vueファイルが正しくシンタックスハイライトできるか見ましょう。

<img width="1067" alt="スクリーンショット 2018-05-17 12.31.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/256922/54315f98-ef76-fcbe-1226-4da5b2a091ca.png">

はい。次に便利設定を行います。
Visual Studio CodeはMacの場合は`コマンド`+`マウスクリック`で定義元へ飛ぶ機能が付いています。
本来ならば上記画像中の`HelloWorld`オブジェクトをクリックすれば当該ソースコードへ飛んで欲しいのですが、デフォルトではそのようになりません。

そこで、プロジェクトのルートフォルダに`jsconfig.json`を置きます。内容は以下の通りです。
具体的にいうとVue.jsは`@/`を`src/`として扱うため、インクルードパスを合わせてあげます。

```json
{
  "include": ["./src/**/*"],
  "compilerOptions": {
    "module": "es2015",
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    }
  }
}
```


これで満ち足ります。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">VisualStudioCodeはプログラム中を適当にCtrl+クリックするとその定義元に飛べて便利だぞっていう動画 <a href="https://t.co/VTP322xom4">pic.twitter.com/VTP322xom4</a></p>&mdash; ysk (@nyallpo) <a href="https://twitter.com/nyallpo/status/996962765339115520?ref_src=twsrc%5Etfw">2018年5月17日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
FileMaker & VisionAPI // 名刺管理ソフトの認識精度すごいなと思った話

#発端：外部連携をやってみたい
と思い立って、名刺やらなにやらの読み取りができるカスタムAppを作ってみて、名刺管理ソフトの認識精度すごいなと思った話。途中の手順の記憶があいまいだけど、忘れないうちに覚えていることを書いておく

#準備
VisionAPIで検索-> [検索](https://www.google.co.jp/search?q=VisionAPI&oq=VisionAPI&aqs=chrome..69i57j69i61j0l4.2291j0j4&sourceid=chrome&ie=UTF-8)

1.VisionAPIのページからコンソールを開き、有効化する
2.認証情報のAPIキーを取得する

#FileMakerの設定
・写真を格納するオブジェクトフィールド
・結果を返すテキストフィールド
最低限この二つは必要

```FileMaker:VisionAPI
変数を設定[ $YOUR_API_KEY; 値:"(APIキーを入れる)" ]
変数を設定[ $photo; 値:Base64Encode ( 写真オブジェクトフィールド名 ) ]
変数を設定[ $ContentType; 値:"Content-Type: application/json" ]
変数を設定[ $JSON; 値:JSONSetElement ( ""; ["requests[0].image.content";$photo;JSONString]; ["requests[0].features.type";"TEXT_DETECTION";JSONString]
) ]
変数を設定[ $URL; 値:"https://vision.googleapis.com/v1/images:annotate?key=" & $YOUR_API_KEY ]
URLから挿入[ $$getJSON; $URL; cURL オプション: "curl -v -s -H " & $ContentType  & "\--data " & $JSON ] [ 選択; ダイアログなし ]
変数を設定[ $Description; 値:JSONGetElement ( $$getJSON ; "responses[0].textAnnotations[0]description" ) ]
フィールド設定[ (テキストフィールド); $Description ]
```

##全行説明
1.APIキーを設定
2.写真データを変数に取り込んで、Base64エンコードする
3.コンテンツタイプの設定
4.JSONのエレメントを設定する

```FileMaker:SCRIPT_JSONELEMENT
JSONSetElement ( "";
["requests[0].image.content";$photo;JSONString];
["requests[0].features.type";"TEXT_DETECTION";JSONString])
```
5.URL設定

```FileMaker:SCRIPT_URL
"https://vision.googleapis.com/v1/images:annotate?key=" & $YOUR_API_KEY
```
6.cURLの設定

```FileMaker:cURLOption
"curl -v -s -H " & $ContentType  & "\--data " & $JSON
```
7.取得したデータのDescriotionを格納
8.フィールドに書き出し

##結果
結果はなかなか惨憺たるもの。ざっくり切り分けて自動的に名前を登録。みたいなレベルに達するには何段階か階段がある様子。とりあえずここまでで、Eightでいいやという結論

###参考
・[Google Cloud Vision APIベスト プラクティス](https://cloud.google.com/vision/docs/best-practices?hl=ja)
・[FileMaker/JSON 関数の使い方](https://fmhelp.filemaker.com/help/16/fmp/ja/#page/FMP_Help%2Fjson-functions.html%23wwconnect_header)
ciで走るコマンドをgitのpre-commitで全部走らせる

git pushしてから、ciで数分後にコケましたってなるのがイライラしすぎたので、gitのpre-commit時点で全部叩くだけ

```bash
#!/bin/bash

git diff --cached --name-only --diff-filter=AM | grep '\.rb$' | xargs bundle exec rubocop
cop=$?

git diff --cached --name-only --diff-filter=AM | grep '^app/.*\.rb$' | xargs bundle exec spec
spec=$?

git diff --cached --name-only --diff-filter=AM | grep '^app/assets/stylesheets/.*\.scss$' | xargs bundle exec scss-lint
scss=$?

git diff --cached --name-only --diff-filter=AM | grep '^app/views/.*\.haml$' | xargs bundle exec haml-lint
haml=$?

exit $(($cop || $spec || $scss || $haml))
```


```bash
chmod a+x .git/hooks/pre-commit
```

あとはgit commit -vして待つだけ
[Rails]Deviseで任意のルーティングだけを行う

## 目標

```bash:terminal
$ rails routes
```

下のように一部のルーティングだけを行いたい。

```
new_user_session GET    /login(.:format)               
  devise/sessions#new
  
user_session POST   /login(.:format)
  devise/sessions#create

destroy_user_session DELETE /logout(.:format)
  devise/sessions#destroy
```

## 結論

```ruby:route.rb
devise_for :users, skip: :all
devise_scope :user do
  get 'login' => 'devise/sessions#new', as: :new_user_session
  post 'login' => 'devise/sessions#create', as: :user_session
  delete 'logout' => 'devise/sessions#destroy', as: :destroy_user_session
end
```

```
devise_for :users, skip: :all
```

ここの部分で、Deviseのマッピングはするけど、skipして何も設定しないみたいことを行います。

その上で、devise_scope以下に自分の好きなようにルーティングしてあげればOKです。

[devise_for vs devise_scope routes #2840](https://github.com/plataformatec/devise/issues/2840)


## 注意: destroy_user_session

link_toとかで、`destroy_user_session_path`を指定すると、DELETEではなく、GETしてしまい、ルーティングエラーがでるかもしれません。

一番簡単な方法としては、`button_to`とすることで、この問題を回避できます。


[RailsでjQueryを読み込まずにmethod: :deleteのリンクを実現する（Routing Error No route matches [GET] ... の対処法）](https://qiita.com/y-temp4/items/2d50feb3ff0d65acdf67)


## 参照
[Rails: deviseのURLをカスタムしたい](https://qiita.com/suin/items/b479000c49d2468a6260)
Matplotlibで使えるフォントを可視化して確認する

自分のPCからMatplotlibで日本語が使えるフォントってどれやねん...？
常々思っている人は多いのではないでしょうか？  
そんな悩みを解決するコードを書いてみました。

```python
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm


fonts = set([fm.FontProperties(fname=font).get_name() for font in fm.findSystemFonts()])

fig = plt.figure(figsize=(8, 100))
ax = fig.add_subplot(1, 1, 1)
ax.set_ylim([-0.5, len(fonts)])

for i, f in enumerate(fonts):
    ax.text(0.2, i,  '日本語 {}'.format(f), fontdict={'family': f, 'fontsize': 16})

plt.show()
```

筆者の環境(Windows 10)ではこんな感じになりました。
Windowsのデフォルトでは `游明朝` が使えるほか、MS Officeがインストールされていると `HG丸ゴシックM-PRO` が使えるようです。

![fonts.png](https://qiita-image-store.s3.amazonaws.com/0/22023/ffa939cc-a461-2a1b-b5cc-e36d1962a7fd.png)

> 参考: [python matplotlib 内で日本語を利用する(使用できるフォントを探す)](http://paper.hatenadiary.jp/entry/2016/11/06/222223)
WSL(Windows Subsystem for Linux)の初期パーミッション設定

# はじめに
Windows on Linuxを使うとWindows10でLinuxを使うことができるようになります．
これを用いて，Ubuntuを動かすことができます．
しかし，**新たに作成したファイルやディレクトリの初期パーミションによってはGitを使うときにエラーがでる**など，苦労することあります．
なので，初期パーミッションをただしく理解して設定しておくと安心してつかえるでしょう．
(私も初期パーミッションの設定でGitをうまく動かせずに苦労しました)

この記事を書く前に[gitでcheckoutでpermission deniedが出る問題](https://qiita.com/minwinmin/items/ca1f2599a5d81db0747a)を書きました．
これはこれでうまくいったのですが，**Ubuntuを閉じてしまうとパーミッションが初期パーミッションに変わってしまいとても不便**でした．

なので，おおもとの設定を変更する必要があります．

※筆者はLinux初心者なので間違いがあったらすみません．

# 環境
今回の実行環境は以下の通りです．
OS:Windows 10 
PC: HP HP Spectre x360
WSL（Windows Subsystem for Linux）, Ubuntu

# Windows on Linux(WSL)の初期設定を変更する．
まず，問題を確認してみます．以下のようにコマンドを打ちます．

```
$ ls -la
```
すると，画像のようになります．赤枠部分が初期パーミッション変更前につくったフォルダです．「rwxrwxrwx」というようにパーミッションが「777」と「全てのユーザーからの書き込みや削除を許可する」というようになっています．

![problem.png](https://qiita-image-store.s3.amazonaws.com/0/212276/e7280ef0-8d5c-277e-7d6e-360a2f542fdc.png)

このパーミッションだとGitを使うときにひっかかったので変更します．
通常，Linuxのパーミッションでは
- **ディレクトリは755**
- **ファイルは644**
が基本となるので，そのように変更します．

新規作成されるファイルやディレクトリのパーミッションを制御するのが「umask」というコマンドです．これを以下のようにコマンドを打ちます．
下記の意味は，
**[現在のパーミッションの値]-[指定した数値]**
を表します．
なので初期パーミッションが777と設定されいれば
777 - 022 = 755
また666なら
666 - 022 = 644
となります．

```
$ umask 022
```

このコマンドをうったあとに**mkdirで新規フォルダやファイルを作成すると初期パーミッションが777なら755というように変更されている**はずです．

しかし，ただコマンドを打つだけだと，ubuntuを再起動したときにまた先ほどのコマンドを打つ必要があるので，そうならないように設定を変更します．
Linuxを導入したときに.profileという環境変数を読み込むファイルができます．

そのファイルの最後の行に

```
umask 022
```

と記述すると，ubuntuが起動するたびにパーミッションの値が変更されるようになります．

なので，今回はnano editorを使ってコマンドライン上から.profileを編集しました．nano editorのインストールの仕方や使い方は[こちらのHP](http://dotnsf.blog.jp/archives/1066662653.html)が参考になるかと思います．

以下のようにして.profileを開き，
```
$ nano .profile
```
画像のように「umask 022」を追加します．そしてファイルを保存すれば設定変更は終了です．
![nano.png](https://qiita-image-store.s3.amazonaws.com/0/212276/6e05a44a-6ca1-033f-cb48-911b08dcf669.png)

それでは，**ubuntuを再起動**したあとmkdirでファイルやフォルダをつくってみましょう．
すると上手くパーミッションが755と変更されているので成功です！

![after.png](https://qiita-image-store.s3.amazonaws.com/0/212276/1058bb53-5463-8d54-e1c8-c4c03965d42b.png)

# おわりに
初心者なのでLinux大変ですが，なかなか面白いものです．
参考程度に参考にしてください．
pycharmの日本語化

色々調べて試して成功せず、pycharmが起動しなくなって再インストールになったため、健忘録としてのメモ書きです。

## pycharmについて
PyCharmはPythonの統合開発環境 (IDE) の一つである。PyCharmはコード解析・グラフィカルなデバッガ・統合単体テスター・統合されたバージョン管理システム・Djangoを用いたWeb開発環境を提供する。・・・（省略
wiki参照

デフォルトではメニューは英語なので、英語が苦手なのもあり、日本語化したい思います。
手順は、以下の通り

## pycharmの日本語化
http://mergedoc.osdn.jp/
1. URLからPleiadesプラグインをダウンロード
2. 解凍後setup.exeを実行
3. 日本語化するアプリケーションからpycharmを選択
4. 日本語化するボタンを実行

設定を入力するとかせずにこれだけで終わるので、よかったら参考にしてください
Linux フォルダに入っているファイルの中の文字列を検索するコマンド

```
$ find ./ -type f -print | xargs grep 'hoge'
```
【上記コマンドの説明】

find
find の次で指定したディレクトリ以下のファイルを検索する。
ファイル検索の構文は「find [path] [検索条件] [アクション]」

—

./
今いるディレクトリ以下が検索対象。「~/」とするとホームディレクトリ以下が検索対象となる。
./ の代わりにフルパスでも可。この場合も指定したディレクトリ以下が検索対象になる。

—

-print
検索結果を標準出力する。このとき結果をフルパスで表示する

—

-type f
指定したファイルタイプを検索する。fが通常ファイルを，cまたはdとするとディレクトリを，lとするとシンボリック・リンクを検索します。

—

xargs
標準入力からコマンドラインを作成し、それを実行する

—

grep
ファイルから文字列を検索する。grep の後に検索したい文字列を指定する。
Unityにfabric(crashlytics)SDKを入れる際に「Exception: [Fabric] API key not found Fabric.Internal.Editor.Utils〜」とエラーがでたら



### たびたび下記エラーに遭遇するのでメモ

```
Exception: [Fabric] API key not found Fabric.Internal.Editor.Utils〜省略
```

ちなみに、unitypackage版です。

チームでUnityを触っていると、Unityの環境設定系の情報が引き継げていない事がある。

### **FabricSettings**にAPIの情報が設定されていないのが原因

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/9ef129d4-2003-bfc5-7538-93910a78cae0.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/2198a46c-48d2-c432-7ba8-39d86a79273a.png)


### なので、初期設定を。

#### メニューの　Fabric > Prepare Fabric 

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/715c6fbb-1acd-ddf5-e35d-4f42de3da1e1.png)


#### Fabricのダイアログが出て来るので、

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/01a6d8e7-85ca-61e0-a441-a851c29dfff3.png)


ログインして、crashlyticsを入れれば。
先程のFabricSettingsのインスペクタにAPI情報が入力されています。

これで、ビルドしたところ先程のエラーが消えました、、！
おつかれさまでした〜〜
PHPでhttps環境か調べる

```php
//SSL
if (
	isset($_SERVER['HTTPS']			)																					||
	isset($_SERVER['REDIRECT_HTTPS'])																					||
	( isset($_SERVER['HTTP_X_FORWARDED_PROTO']			) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO']			)	||	//AWS
	( isset($_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO']	) && 'https' === $_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO'])		//AWS(CloudFront)
) {
	return true;
//非SSL
} else {
	return false;
}
```
InstrumentsのMetal System Traceの使い方

InstrumentsにMetal System Traceというテンプレートがあります。

![instruments.png](https://qiita-image-store.s3.amazonaws.com/0/3180/1ca1c2c1-eb7b-7d3b-a854-cfef16dbde6a.png)


これを選択してアプリを起動し、しばらく操作して終了すると、次のように解析結果が出てきます。

<img width="1396" alt="instruments2.png" src="https://qiita-image-store.s3.amazonaws.com/0/3180/dac5ce6d-ab40-5429-af16-2ad1766bf465.png">


Metal System Traceテンプレートは次の5つのInstrumentで構成されており、次のような処理の負荷を計測します。

- Metal Application Instrument - コマンドバッファの作成やコマンド完了時に呼ばれるコールバックの処理
- Graphics Driver Activity Instrument - GPUへのコマンドバッファのスケジューリングやGPUへの送信イベント
- GPU Hardware Instrument - 頂点シェーダ、フラグメントシェーダ、コンピュートシェーダといったGPUで処理されるプログラムの処理
- Displayed Surfaces Instrument - ディスプレイへの描画処理
- Time Profiler Instrument - タイムプロファイラ

画面にも上からこの順で表示されます。上の2つがCPU側の処理で、3つ目がGPU側での処理、4つ目がディスプレイへの描画を示すことから、**CPU→GPU→ディスプレイへの一連の描画の流れを上から下に向かってビジュアルで把握**することができます。

詳細は「[Instruments User Guide](https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/ProfilingTemplates.html#//apple_ref/doc/uid/TP40004652-CH19-SW13)」をご参照ください。またWWDC 2015の「[Metal Performance Optimization Techniques](https://developer.apple.com/videos/play/wwdc2015/610/)」というセッションではデモを交えてMetal System Traceを使ったデバッグ・最適化方法が解説されています。


## 関連情報

- [Metalのデバッグまとめ（随時更新） - Qiita](https://qiita.com/shu223/items/1e88d19fbb31298146ca)
  - Metalのデバッグに関連する機能やツールの使い方をまとめた記事
- [Metal入門 - shu223 - BOOTH](https://booth.pm/ja/items/826318)
  - 日本語では初のMetal解説書
JavaScriptを利用してCSSを切り替える

#最初に
IE11においてウェブサイトのレイアウトが崩れたため、その対策を考える必要があった。
レイアウト崩れの対策として、以下の３点があることを知った。

- メディアクエリを利用し、CSSの設定を行う
- jQueryを用いて専用クラスを追加し、CSSの設定を行う
- JavaScriptを用いて、CSSを切り替える

今回は、メディアクエリを用いてレスポンシブ対応するため、メディアクエリの設定が煩雑になること、jQueryを利用しない場合を考えてJavaScriptを利用することにした。

※メディアクエリを利用する場合は、ブラウザ判定する条件とレスポンシブ用の条件を入れ子構造で対応するにはLessやSassが必要になる（CSSのみでは出来ない）。
また、ブラウザ判定のための「-ms-high-contrast」の使用は良くないという記事もあるので気をつける必要がある。（Edgeに対する判定が別途必要であったり、ハイコントラストモードの設定によって、IEに適用されない場合がある）


参考ページ
[JavaScript Tutorial](https://www.w3schools.com/js/default.asp)
[開発者向けのウェブ技術](https://developer.mozilla.org/ja/docs/Web)
[HTMLクイックリファレンス](http://www.htmq.com/)
[JavaScriptを使って、linkタグで外部cssを読み込みたい](https://teratail.com/questions/29854)
[-ms-high-contrast を CSS ハックに使ってはいけない、ただひとつの理由](https://jeffreyfrancesco.org/weblog/2017042601/)


##参考ソースコード
テスト用に作成した、IE11で開くと背景が黒・文字が白、
IE11以外で開くと背景が白・文字が黒となるように設定した
ソースコードを記載する。

###html
```html
<!DOCTYPE html>
<html lang="jp">
  <link id="layout-css" href="./css/common.css" rel="stylesheet">
  <script>
    function changeCSS(newCSS){
      var target = document.getElementById('layout-css');
      target.href = newCSS;
    }
    var userAgent=window.navigator.userAgent;
    if(userAgent.indexOf('Trident')!=-1){
      document.write(userAgent,'<br><br>',data='OK!  IE11');
      changeCSS('./css/IE-layout.css');
    }
    else{
      document.write(userAgent,'<br><br>','No! IE11');
    };
  </script>
</html>
```
###IE11以外のCSS

```css
@charset "utf-8";

html {
  background: white;
  color: black;
}
```
###IE11用のCSS

```css
@charset "utf-8";

html {
  background: black;
  color: white;
}

```
Eclipse "Footnote XXXX missing"

Eclipse "Footnote XXXX missing"
===

## Disable to "WikiText Markup Problem"

The cause of this trouble is the Mylyn bug.

日本人は頑張って英語を読んで下さい‼️

<img width="627" alt="2018-05-17_11-36-26.png" src="https://qiita-image-store.s3.amazonaws.com/0/67460/fc6aeb84-2477-4429-023b-24cdd44a5a8e.png">

<img width="764" alt="2018-05-17_11-26-25.png" src="https://qiita-image-store.s3.amazonaws.com/0/67460/461d9502-54b7-8650-8b08-ea5e6d512395.png">
tab補完効かねーぞ

新しい環境で作業してたらtab補完効かなくてストレス溜まってきたからしらべた。

```
$ echo $SHELL
/bin/tcsh
```

bashじゃなくてtcsh使ってた。

tcshでtab補完を有効にするには

```
$ set autolist
```

これでストレスが15%減る
C-Firstボードをe2 studioのGCCで割り込みを使ってみる

C-Firstボードの割り込みをe2 studioのGCCで使ってみたので状況を紹介します。

e2 studioでGNUのGCCを使うときの基本はこちらです。
https://qiita.com/Fuji_chan/items/0fd5bda8b4b34caa6c71

今回は割り込み処理のGCCへのポーティングの紹介です。
GCCでExecutable Projectを新規作成します。ターゲットデバイスはR5F104LE，Hardware Debugの構成はEZ(RL78)を選択します。

ポーティングしてみたのは，\03_サンプル・プログラム\第8章\リスト3_sample1_3です。
元のサンプルコードはこれです。

```
#include "iodefine.h"

void main(void)
{
	PM1 = 0x7F;
	OSMC |= 0x10;
	RTCEN = 1;
	ITMK = 0;
	ITMC = 0x8000 + 15000/4-1;
	__EI( );
	while( 1 )  {
	}
}

unsigned char p1;

#pragma interrupt intit(vect=INTIT)
void intit(void)
{
	P1 ^= 0x80;
	p1 = P1;
}
```
ポイントは2つ。割り込み許可のコードと割り込み処理関数の指定。

```
__EI( );
#pragma interrupt intit(vect=INTIT)
```

GCCでは

```
EI();
void INT_IT(void) __attribute__ ((interrupt));
```

となるので，サンプルと同じ関数構成とするなら，

```
#include <iodefine.h>
#include "iodefine_ext.h"

void main(void)
{
	PM1 = 0x7F;
	OSMC |= 0x10;
	RTCEN = 1;
	ITMK = 0;
	ITMC = 0x8000 + 15000/4-1;
	EI( );
	while( 1 )  {
	}
}

unsigned char p1;

#include "interrupt_handlers.h"
void INT_IT (void)
{
	P1 ^= 0x80;
	p1 = P1;
}
```

inhandler.cファイルのINT_IT関数はデフォルトで生成されているので，コメントアウトしておきます。

```
/*
 * INT_IT (0x38)
 */
//void INT_IT (void) { }
```

以上で完成。

![image001.png](https://qiita-image-store.s3.amazonaws.com/0/254490/717585a0-a98a-981f-8c55-08dba03e3ff4.png)

ビルドして実行するとLEDが設定した時間で点滅します。
Devise覚書

### DeviseのConfirmが効いている状態で、アドミンが他のログインユーザーを作成する場合

- 普通のuser.new部分で confirmed_at を入れてあげればいい。
- Deviseのconfirmableのメール飛ばすロジックはdevise/lib/devise/models/confirmable.rbにある。
- Deviseのconfirmableはconfirmed_atにtimeを入れることで発動する。

```user_controller.rb
 
  def create
    User.new(user_params)
    ##省略
  end

  private

  def user_params
    confirmed_at = Time.zone.now
    params.fetch(:user, {}).permit(:confirmed_at)
  end
```

これでアドミンが作成したユーザのアドレスに認証メールが飛ぶ。

### devise日本語化

https://qiita.com/Forrest_D/items/4a85e8f9588fcfe9cafe#2-devise-i18n
【Unity】AddressableAssetsSystemを使ってみる

# はじめに
先日のUniteで発表されたAddressableAssetsを早速使ってみようと意気込んで触っていましたが、ビルドして動かすまでに色々とトラップがあったので、とりあえずビルドしてローカルで動かすところまでのやり方をまとめておきます。

基本的には下記のスライドを参考に触っていきます。
https://www.slideshare.net/UnityTechnologiesJapan/unite-2018-tokyo-96499382/UnityTechnologiesJapan/unite-2018-tokyo-96499382

# 環境
Unity2018.2.0b4

※AddressableAssetsは現状Preview状態なので、正式にリリースされたら本記事は恐らく役に立たなくなるので注意
　まぁそのときには公式ドキュメントも出てくるので大丈夫でしょう。

**ハマりポイントその1**
Proxyの設定によっては、UnityEditorの起動中にTimeOutしてEditorが起動しないことがあります。
どうやら起動時にPackageManagerがサーバとやり取りしているようで、対象のポートが空いてないとTimeOutしてしまうようです。
会社でProxyを使っている場合は、管理者の人になんとかしてもらいましょう！


## 準備
まずは、AddressableAssetsを導入します。
AddressableAssetsは現状Preview状態なので、Unity2018から導入されたPackageManagerではインストールできません。
そのため、[ProjectRoot]/Packages/manifest.jsonを直接編集してAddressableAssetsをインストールします。

以下を貼り付けてください。
当たり前ですが、Typoすると通りません！(1回それで微妙にハマりました)

```manifest.json
{
	"dependencies": {
		"com.unity.addressables":"0.0.22-preview"
	}
}

```

上記を保存するとEditor上でAddressableAssetsSystemのインストールが始まります。

# AddressableAssetsでローカルパスの豆腐をロードしてみる

Editorが開いたら、Assets/[StreamingAssets](https://docs.unity3d.com/ja/current/Manual/StreamingAssets.html)フォルダを作りましょう。

次にとりあえずなんでもいいのでPrefabを作りましょう。
めんどくさいので、今回はCubeを作ってPrefab化します。

**ハマりポイントその2**
このとき、PrefabはStreamingAssetsフォルダに配置します。
その他のフォルダに置くと、Editor上では動くけどビルドしたら動かないので注意。
冒頭の資料だとStreamingAssetsに置いてないので、その辺もAddressableAssetsがいい感じに処理してくれるのかと期待してハマりました。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/216921/8dc9acc1-ee60-e9f8-66fd-b60b04b36170.png)

次に上記画像の通り、AddressableのチェックボックスをOnにします。
これで、CubeのPrefabをAddressableAssets化することができました。

次に、以下のコードを適当なGameObjectに貼り付けます。

``` AddressableTest.cs
using UnityEngine;
using UnityEngine.AddressableAssets;


public class AddressableTest : MonoBehaviour
{
	public AssetReference m_Ref = null;

	private GameObject m_Obj = null;

	private void Update()
	{
		if( Input.GetKeyDown(KeyCode.Space) )
		{
			Addressables.Instantiate<GameObject>( m_Ref )
				.Completed += op => m_Obj = op.Result;
		}

		if( Input.GetKeyDown(KeyCode.Delete) )
		{
			Addressables.ReleaseInstance( m_Obj );
		}
	}
}

```

Refには先ほど作ったCubeを設定しましょう。
AssetReferenceにはAddressableAssetsとして登録してあるオブジェクトが登録できるようになっています。

![3.png](https://qiita-image-store.s3.amazonaws.com/0/216921/d6918a0a-45a8-d6c5-a8a9-96147918d064.png)


**ハマりポイントその3**
上記までで動きそうなもんですが、実はこのままでは動きません。
実際にEditor上で動かしてみると良いと思いますが、恐らくCubeのロードに失敗して動かないと思います。
ただしこの状態でもBuildすると動きます。
これはAddressableAssetsのPlayMode設定(冒頭の資料p37を参照)が誤っているためです。

そのため、下記の通り設定していきましょう。
まずは、AddressableAssetsWindowを表示します。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/216921/fc8b93df-5b9a-4c40-c3df-60daa1513460.png)

下記の通りPlayModeをVirtualからPackedに変更します。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/216921/0e0d735c-7609-ec1e-47d2-92f6d6082249.png)

以上で設定は完了です。
Editor上及び、Buildして実行してみてください。
きっと動くはずです。

# 最後に
やっていることは非常にシンプルなのですが、正式なドキュメントが無い中、
冒頭の資料と現状のUIが違っていて結構混乱しました。
そのうちリモート上でのAddressableAssetsSystemの利用についても書きたいですが、
その前に正式版でちゃうかも。
PlayFramework for Scala でDataDogのAPMを使う

ウェブアプリケーションサーバはPlayFramework for Scalaを使うことを想定します。


## DataDogとは

サーバ監視サービスです。
類似のサービスにNewRelicなどがあります。

## システム構成


[公式サイト](https://docs.datadoghq.com/tracing/#what-is-apm)の動画を見るのが速いですが、一応説明




DataDogAgent : ネットワーク内に常駐させて、DataDogのクラウドに情報を投げるサービス。API_KEYとport:8126 さえ開けておけばとりあえず機嫌よく動いてくれる。なおDataDogはこいつの数が課金単位なので気を付けよう。
APM(datadog-java-agent)：アプリケーションサーバの起動箇所にフックしてアプリケーションの挙動をDataDogAgentにチクる装置。送信先のホストとポートが間違ってるとアプリごと死ぬ。



https://docs.datadoghq.com/agent/basic_agent_usage/docker/



## 公式の導入方法


```bash
DD_AGENT_HOST=$DD_AGENT_PORT_8126_TCP_ADDR \
DD_AGENT_PORT=$DD_AGENT_PORT_8126_TCP_PORT \
java -javaagent:/path/to/the/dd-java-agent.jar -jar /your/app.jar
```

簡単に言ってくれちゃってこのやろう…
実際の運用でjavaコマンドをダイレクトに叩いてる人はいないんじゃないでしょうか。
そう、例えば　`sbt docker:publishlocal` で最小限のコンテナを構築してコンテナリポジトリからk8sに展開するなど。


```bash
sbt docker:publishlocal

docker-compose up
```

こんな風にね。


そうした場合、`-javaagent`なんてオプションを差し込むのにも一筋縄では行かず、sbtのプラグインで[sbt-javaagent](https://github.com/sbt/sbt-javaagent)の導入が必要になります。

project/plugins.sbt
```scala
addSbtPlugin("com.lightbend.sbt" % "sbt-javaagent" % "0.1.4")
```

```scala
lazy val root = (project in file(".")).enablePlugins(PlayScala, JavaAgent, JavaAppPackaging)
  .settings(
    javaAgents += "com.datadoghq" % "dd-java-agent" % "0.7.0"
  )

libraryDependencies += "com.datadoghq" % "dd-java-agent" % "0.7.0"
```

`dd-java-agent` のplayframework対応は、β版で、標準では対応していません。
そのため、java実行時に以下のオプションを指定する必要があります。  

```bash
-Ddd.integration.java_concurrent.enabled=true -Ddd.integration.play.enabled=true
```

> 参考：https://docs.datadoghq.com/tracing/setup/java/#beta-instrumentation

これも一筋縄では行かない。
結論から言うとdockerエントリポイントに引数を追加しましょう。

```scala
dockerEntrypoint := Seq("bin/" + name , "-Ddd.integration.java_concurrent.enabled=true", "-Ddd.integration.play.enabled=true")
```

なぜdockerエントリポイントに引数を追加するのがオプションになっているのかというと、
`sbt-docker`の生成する自動起動スクリプトの構造で、引数の中で`-D*`, `-agentlib*`, `-J* *`のオプションはjava実行時に引数として渡すようになっているからです。

> 参考： 
https://github.com/sbt/sbt-native-packager/blob/v1.3.4/src/main/resources/com/typesafe/sbt/packager/archetypes/scripts/bash-template#L197-L198
Unity Tutorialを実際やってみた（メモ版）

# 本文について 
- やりながら追記しています。まだ未完成です。

# なぜUnity Tutorialやってみようと思ったか
- Unityを勉強したくて、いろいろ見た結果、Tutorialをやってみるのが楽しそうだったから
- 他にUnityやってみようと思った人の参考になればいいな。

# 実行環境
- Unity Personal 2018.1.0f2 (64-bit)
- Windows10

# やってみたTutorial
## 1. Roll-a-ball tutorial（済）
[Roll-a-ball tutorial](https://unity3d.com/jp/learn/tutorials/s/roll-ball-tutorial)

- 特につまづくところはなかった。動画通りにやっていけば完成する。
- 操作方法すら怪しい状態で2~3hでゲームが完成して感動。rigidbodyすごい。
![RollaBoll.PNG](https://qiita-image-store.s3.amazonaws.com/0/67206/8067326b-3c5f-9848-0150-fec253c8d535.png)

## 2. Survival Shooter tutorial(途中）
[Survival Shooter tutorial](https://unity3d.com/jp/learn/tutorials/s/survival-shooter-tutorial)

### 「2.Player Character 」
- 「2.Player Character 」の動画を進めていくと、「Unity 2018.1.0f2 (64-bit)」では、idle-Move間のTransitionの「Has Exit Time」のチェックを外さないとPlayerがMove時に踊ってくれない。ちょっとはまった。


![HasExitTime.PNG](https://qiita-image-store.s3.amazonaws.com/0/67206/4cf22009-214f-7f92-08fb-fe50ab830a2c.png)

### 「4.Creating Enemy #1 」
- 「4.Creating Enemy #1 」にて、Tutorial通りに実行しても、追尾されず。。Unityを再起動したら追尾するようになった。原因は不明。Unityあるあるなのか？ 
- Navigation-Bakeの設定項目が「Unity 2018.1.0f2 (64-bit)」とTutorialのバージョンで違うけど、項目自体はあるので、落ち着いて設定すれば大丈夫、なはず。Advanced設定の**Inaccuracyは明らかにパラメータがないのだけど、とりあえず無視して大丈夫だった（あとで困るかもしれないので覚えておく）。
  - nav Agentの自動追尾すごい。感動。Zombunnyかわいい。
![creatingEnemy1.PNG](https://qiita-image-store.s3.amazonaws.com/0/67206/7f6ade64-ff3b-45b1-6ffa-64bd709fd7a8.png)

###  「6.Player Health」
- EnemyAttack.csのAwake()メソッドで[player.GetComponent <PlayerHealth> ();]でなぜかPlayerHealthをゲットできなくてはまる（泣）。現象として、EnemyAttack.UpdateでplayerHealth.currentHealthを呼び出したところでNulReferenceExceptionとなる。~~GUI上でPlayerHealthコンポーネントをRemoveしたりAddしたりしたがダメで、物理的にAssetフォルダのファイルを消したり足したりしたら治った。~~ Playerオブジェクトの中のplayerに「Player」タグをうっかりつけてしまっていたのが間違いだった。タグのつけ方が間違っていただけだった・・



###  「7.Harming Enemies」
- 説明ではPositionsの下に設定項目「Parameters」があるが、「Unity 2018.1.0f2 (64-bit)」ではない。Widthを0.05にすると、説明と同じになる。軌道のStartとEndの幅を変えたい場合は、グラフがあるので、丸をドラッグして弾の軌道サイズを変更できる。丸は追加できるのでいろいろな軌道幅にできそう（ショットガンとかだと使える？）。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/67206/e74aad28-1ce2-a1f7-2b02-cb352e17c215.png)

### 「10.Game Over」

- Animationウィンドウを開く。説明だとcurveとかになってていろいろ文言違うが、add propertyを開くであっている。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/67206/4ef26387-b11b-487d-cb24-747395353910.png)

- Gameoverの画面がなぜかループしっぱなしになるが、Asset/Animation/GameOverClipの「Loop Time」を外すとうまくいった。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/67206/9b600600-a2d2-ce78-c865-d1afe20830de.png)

- 完成！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/67206/c8e70656-803d-25ff-e8b4-d3524100246c.png)
コマンド結果のバッファへの出力

[前のエントリ](https://qiita.com/astrorobot110/items/7e1aba0d4de6329ee8e7#正直lsは使いづらくて)で困っていた`:ls`やら`:ol`やらの出力の問題なんですが、そもそもメッセージで出すよりバッファで出してしまったほうがやっぱり楽だったんですよ、特にファイル履歴に関しては`gf`ですっ飛べる事も考えたら`:e #<[0-9]`なんてやっぱやってられない。かと言って今まで使い続けてた[viewoutput](https://github.com/vim-scripts/ViewOutput)もなんかいまいち…飛ぼうとすると「保存しないの？」ってなったりするので…じゃあ作るか！`execute`関数あるしなんとでもなるやろ！

## 今北三行

```vim:pipe.vim
function! s:pipe(...) abort
	let l:messages = execute(join(a:000,' '))
	execute('new +set\ nonumber\ bt=nofile|put=l:messages '.a:1)
endfunction

command! -nargs=* -complete=command Pipe call s:pipe(<f-args>)
```

いやこれ関数書く必要ある？何はともあれこれで`:Pipe ol`で手っ取り早く直近のファイルにアクセス出来るようになりました。
EC2でRailsアプリを起動したけどブラウザからアクセスできないとき

# 環境

OSは AmazonLinux

```
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
$ rails -v
Rails 5.2.2
```

# 困ったこと

EC2インスタンスの中に、Railsアプリを作りました。

```
$ bundle exec rails server -p 3000
=> Booting Puma
=> Rails 5.2.0 application starting in development 
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.11.4 (ruby 2.5.1-p57), codename: Love Song
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
```

とやって、サーバーは起動しました。

ブラウザから

`http://(インスタンスのパブリックIP address):3000`

にアクセスすると

![ng.png](https://qiita-image-store.s3.amazonaws.com/0/8612/848c5709-229d-72a4-fcf0-786dc82589e9.png)


になってしまいました。こまった。

# 解決策

**-b 0.0.0.0** をつけるといい。

```
$ bundle exec rails server -p 3000 -b 0.0.0.0
=> Booting Puma
=> Rails 5.2.0 application starting in development 
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.11.4 (ruby 2.5.1-p57), codename: Love Song
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
```

ってやって　`http://(インスタンスのパブリックIP address):3000`　にアクセスするとYay!

![ok.png](https://qiita-image-store.s3.amazonaws.com/0/8612/07a41f7c-3d20-0927-2f20-45a61f81307d.png)


こちらの情報をいただきました。ありがとうございます。

- [EC2 に Rails の開発環境をサクッと作る](https://blog.manabusakai.com/2015/06/rails-setup-on-ec2/)