OmniAICreator/Qiita-1.07M huggingface dataset:
ゲームSEの作り方①初級編 [ツールの基本操作~射撃SEの作成]

SE作成のための備忘録です。主にツールの使い方の説明が多めです。
使用ツールはこちらの「studio one 4」です。

https://www.mi7.co.jp/products/presonus/studioone/prime/

↑無料で簡単なBGM,SEを作成できます。多数のエフェクトを利用できるため、studio one を使っていきます。
(今回はインストールなどの手順は初回ですが省いてツールの使い方から紹介していきます。DLなどはこちらから→https://sleepfreaks-dtm.com/for-beginner-studioone/studio-one-4-prime/)

##プロジェクトファイルを開くまで

はじめに、stdio one 4を開くと以下のような状態になります。左上にある「`①新規ソングを作成`」を押して、プロジェクトファイルを開きましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558933/5c6f628d-4702-26f7-c2ff-f0b2ad284c73.png)

左上の`②空のソング`を押し、右下の`③OK`ボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558933/4096d1de-1449-48d3-f60f-322363da558c.png)


これでプロジェクトファイルを開けました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558933/14e25602-7f15-dc72-c252-883da689a2f0.png)


##基本操作 + 射撃SEの作成

右側の`①インストゥルメンタル/Sampler/Presence`と押していくと、初期から様々な鍵盤を叩けるファイルの一覧が出てきます。
今回は、射撃のSEを作っていきます。
studio one の魅力と言っても良いのが、多彩なエフェクト音声の存在です。
基本的なギターやベースなどの楽器類に加え、ゲームSEに最適なエフェクト素材があります。
今回は、`②Effects/GunShot`を、中央にドラッグアンドドロップしてください。

ドラッグアンドドロップをすると、以下の状態になります。ここでは、流していく音の高さやピッチを確かめる場所です。
ここでいじるのは、FiltorとAmp Envグラフと鍵盤が中心になるかなと思います。鍵盤を押しながら、求める音と近くなるよう、Filtor内の数値をいじっていきましょう(ここは今の所間隔です)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558933/ba0ab039-3a35-1c82-55c6-e6f56e5a51fe.png)


最初に`③Filter`を押して、使用可能にします。
次に、`④Drive = 40`,`⑤Punch = 100`,`⑥Res = 50`に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558933/1e94c50f-aea7-1b3e-bd27-ca3af98d4cb1.png)

音の調整は終わったので、`⑦バツボタン`を押して、調整画面を閉じます。
次は、実際に音を打ち込んでいく作業です。
studio one の打ち込みをしていく概念は、「1.使用音声の箱を作り、 2.箱の中に打ち込んでいく」 というものです。


使用音声の箱を作るには、ペイントツールを使います。`⑧ペイントツール`を押して、使いたい長さまで`⑨ドラッグ`します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558933/d46e1f14-ae76-5521-cda6-bedb85fee152.png)

ドラッグしたものを`⑩矢印ツール`に戻してドラッグした箇所を`⑪ダブルクリック`すると、打ち込み画面が現れます。
先程ドラッグした範囲のみに打ち込むことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558933/8c3c0b1b-83cf-49d7-1280-b0c21c5ff61c.png)

タップするとそのたびに音声が登録されるので、ここで自分好みの音声を作りましょう。


今回はとてもシンプルに以下のように設定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558933/bf62fbdf-eae8-189e-a9f9-5929ecb2d0ca.png)

##音声の書き出し


まずは、書き出す範囲を指定します。GunShotの上の部分を`①ドラッグ`し、書き出したい範囲を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558933/4f9d09c9-992e-da04-8890-8232f6243a7d.png)

ツールバーの`②ソング/ミックスダウンをエキスポート`を押し、設定画面で`③OK`を押すことで、書き出すことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558933/4e23e7e4-f52e-c48f-29e0-1a76c5f1f03e.png)

##最後に。

studio one は使いがってのよい素材を多数組み合わせることができるので、細かい調整も可能そうです。
また新しく作っていったら共有していきます。
4 Reasons Why React Is So Cool – The Perspective Of Software House CEO

Why ReactJS is one of the best picks when it comes to building your front-end? Here are four main reasons from the perspective of the CEO of software development agency - [Robert Krajewski](https://www.linkedin.com/in/robertkrajewski) from [Ideamotive](https://www.ideamotive.co/).

##React has an awesome community##

The one reason why React has gained so much popularity so fast is its origin. Initially React was created by Facebook to maintain and develop its front-end app. When Facebook decided to open-source React, it was already battle-proven in a large application and ready to use. So the decision-makers thought like this: „If they run the whole Facebook on React, then I’m using it to my next startup” … and it started. Additionally React proved to be very developer-friendly and extensible. Everyone can create and publish his/her own component or contribute to the main projects like React or Redux. Today React code repository is about 3 times as popular as Angular. So React development is a clear winner when it comes to community support.

##React is scalable##

The first and main evidence of React scalability is Facebook. It’s made entirely on React, has over 50000 different components and still grows without performance problems. In general, the growth can be sustainable due to the modular nature of React. A different part of the application could be written independently and reuse within the project or outside. The community has provided thousands of components ready to include in any application. It shortens development time. Instead of writing on your own, you can use a complete, well tested and community opinionated solutions.

##React is preferred by developers##

React development established a whole new pattern of creating front-end web apps and changed the way developers think of user interfaces. A simple idea of components and states fruited in great growth of programmer interest. The unclear situation in the Angular environment (Angular stuck between versions 1 and 2 for a long time) only increased the popularity expansion.

##React is just cool##

Migration to React become an industry standard. Top brands are rewriting their front-end to React. To name a few: BBC, Imgur, Netflix, Pinterest, Reddit, Yahoo. Statistics confirm that trends. [The survey](https://stateofjs.com/2017/front-end/results/) carried out in 2017 and based on 23 704 votes clearly confirms React’s highest satisfaction. Both developers and entrepreneurs agree that React is a future-oriented framework, worth investing money and time.
資料作成に役立ちそうなマクロを作ってみた

### 1. マクロを作成しようと思ったきっかけ
設計書などの資料をエクセルで作成する際、以下のような点で困ることがある。

* レビュー前などに、ブック内の全シートの選択セルをA1にする。
* 文字列検索した際にオブジェクト内の文字やシート名は検索されない。
 
---

### 2. 今回作成したマクロ
* ブック内の全シートの選択セルをA1にする

---

### 3. 作成手順
#### 3.1. 個人用ブックで「マクロの記録」を行う。

![excel1.jpg](https://qiita-image-store.s3.amazonaws.com/0/189384/902efb62-17bb-ee06-448e-6b69613b34e9.jpeg)

---

#### 3.2. 以下の項目の入力を行う。

| 項目名 | 入力内容 |
| :---- | -------- |
| マクロ名 | 任意のマクロ名 |
| ショートカットキー | マクロを実行するショートカット |
| マクロの保存先 | 個人用マクロブック |

例）
![excel2.jpg](https://qiita-image-store.s3.amazonaws.com/0/189384/a3d42661-af97-13c9-b07d-b3ecf08a3b55.jpeg)

---

#### 3.3 「マクロの記録」を終了する。

![excel3.jpg](https://qiita-image-store.s3.amazonaws.com/0/189384/d0b6a592-43fc-7210-4fb1-68f82dc3e852.jpeg)

---

#### 3.4 記録したマクロにロジックを記述する。

```vb
' ブック内の全シートの選択セルをA1にし、倍率を100%にする

Sub focusOnA1()
    ' ループ変数
    Dim targetSheet As Object
    
    ' ブック内のシートでループ
    For Each targetSheet In ActiveWorkbook.Sheets
        targetSheet.Activate
        ActiveSheet.Range("A1").Select
        ActiveWindow.Zoom = 100
    Next targetSheet
    
    ' ブック内の先頭シートをアクティブにする
    Sheets(1).Select
End Sub
```

---

### 4. ソースコードについては以下を参照
[ obscure723 / VBA ](https://github.com/obscure723/VBA)

### 5. 参考にしたサイト
[ 個人用ブック作成とマクロの記録 ](https://support.office.com/ja-jp/article/%E5%8D%98%E4%B8%80%E3%81%AE%E3%83%96%E3%83%83%E3%82%AF%E3%81%AB%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%9E%E3%82%AF%E3%83%AD%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%A6%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B-aa439b90-f836-4381-97f0-6e4c3f5ee566)


こちらは当人のブログ[ よねらぼ ](https://yone-lab.com/)です。
プログラミングに関する情報を発信していますので、よければ読んでください。
【個人メモ】Githubへの再ログインでPersonal access tokensを設定場所について

#はじめに
久々にMac/WindowsでのUnity開発での環境を再構築していた時に、SourceTree for Macで再ログインした際に"Must specify two-factor authentication OTP code."となり、いろいろ調べた結果、設定場所が変更になっていたのでメモとして残しておく
※内容はたいしたことないです

#SourceTree(Mac)からGithubへのログイン
今回のケースでは、SourceTreeからGithubアカウントでのログインが完了した状態で、再度ログインしようしたら、できなかったので調べたところ、[GitHubの２段階認証でSourceTreeを使えるようにするには](https://qiita.com/hiroshi1000/items/4eb65695e4e5d4dfe9ef)を参考に、Settingを探していたら、設定場所が変更になっていたようだ

１．Github設定からPersonal Settingにある"Developer Settings"を押下する
![GH_Your_Profile.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18545/32bc41ba-9d71-f84c-a203-321a184acaea.png)
２．次に表示された画面で"Personal access tokens"を押下する
![GitHub_Apps2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18545/31c3ba53-1985-3c13-7f4e-cfc85bd72a43.png)
３．ここでリポジトリに対して操作可能なTokenを設定が可能となる
![GH_Personal_Access_Tokens.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18545/4bde2a63-dbb1-4b30-59da-0a16f9f1accd.png)
Raspberry Pi で .Net の Web アプリケーションを publish

次のバージョンで確認しました。

```text
$ dotnet --version
6.0.302
```

こちらで作成したプロジェクトを publish する方法
です。

[Raspberry Pi で .Net Core の Web アプリケーションを作成](https://qiita.com/ekzemplaro/items/1f2c2e37de0225e40a4e)

1:  appsettings.json の修正
　　localhost 以外からもアクセスできるようにする。

```json:appsettings.json
{
"urls": "http://*:5000",
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}
```

2: publish　(bin/Release 以下にリリース版を作成)

```text
$ dotnet publish -c Release
Microsoft (R) Build Engine version 17.2.0+41abc5629 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.

  Determining projects to restore...
  All projects are up-to-date for restore.
  Web01 -> /home/uchida/tmp/Web01/bin/Release/net6.0/Web01.dll
  Web01 -> /home/uchida/tmp/Web01/bin/Release/net6.0/publish/
```

3: Kestrel サーバーを実行

```text
$ dotnet bin/Release/net6.0/Web01.dll
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://[::]:5000
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /home/uchida/tmp/Web01/
```

4: ブラウザーで http://host:5000/ にアクセス
AndroidのRDclientから自宅サーバに安全に接続する

ラズパイにxrdpサーバ立てたのはいいものの、パスワード認証なので3389ポートをそのままインターネットに晒すのは気が引けます。
Androidからxrdp on sshできないかなと思って試したところ上手くいったのでそのメモ。

## 環境

*  Raspberry Pi 3B+
  * xrdpサーバは構築済み
  * LANではssh,xrdp用のポートを開放
  * WAN(インターネット)上にはssh用のポートのみを開放
  * xrdp, vncserver
  
```
pi@raspberrypi:~ $ sudo apt show xrdp
Package: xrdp
Version: 0.9.1-9+deb9u3

pi@raspberrypi:~ $ sudo apt show tightvncserver
Package: tightvncserver
Version: 1:1.3.9-9
```

* Android apps
  * [Termux](https://play.google.com/store/apps/details?id=com.termux): 0.84
  * [Microsoft Remote Desktop](https://play.google.com/store/apps/details?id=com.microsoft.rdc.android): 8.1.75.406

## 準備

先に同一LANでpublic keyを登録しておきます。

```
(Termux)$ ssh-keygen -b 256 -t ecdsa
(Termux)$ ssh-copy-id pi@<LAN上でのRaspiのipaddr> -p <port>
```

## 方法

外出先からrdp接続するときは、Termux上でローカルの33333ポートから自宅のRaspiの3389ポートへポートフォワードします。

```
(Termux)$ ssh -i .ssh/id_ecdsa -L 33333:localhost:3389 pi@<自宅のGlobal-ipaddr> -p <インターネットに開放しているポート> -N
```

そのあと、RD Clientからlocalhost:33333へ接続します。

## おわり

Termux使うと色々できちゃうのでとても好き。
以上。
docker(86) 今日のdocker error: too many failed login：翌日解決


```
$ docker push kaizenjapan/python23
The push refers to repository [docker.io/kaizenjapan/python23]
f67603864e96: Preparing 
e80c789bc6ac: Preparing 
6c3332381368: Preparing 
ef1a1ec5bba9: Preparing 
a1aa3da2a80a: Preparing 
unauthorized: incorrect username or password
$ docker login kaizenjapan
Username: kaizenjapan
Password: 
Error response from daemon: Get https://kaizenjapan/v2/: Service Unavailable
```

dockerアプリでlogin後再度。

```
$ docker push kaizenjapan/python23
The push refers to repository [docker.io/kaizenjapan/python23]
f67603864e96: Preparing 
e80c789bc6ac: Preparing 
6c3332381368: Preparing 
ef1a1ec5bba9: Preparing 
a1aa3da2a80a: Preparing 
toomanyrequests: too many failed login attempts for username or IP address
```

2回errorになっただけなのにtoo manyとはいかに。

アプリでloginできているのにエラーになるのはいかに。

# 解決(resolution)

１日ほったらかして、docker pushしたらエラーが出なかった。

loginのためのどこかのcacheで不具合が生じたのかもしれない。

OSを再起動すればよかったのかもしれない。


# 文書履歴(document history)
ver. 0.01 初稿 20191229
ver. 0.02 解決 20191230
### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
今日のpython error: SyntaxError Non-ASCII character 

プログラムちょい替え（5）pyhon中央値
https://qiita.com/kaizen_nagoya/items/2f02d5f8af808e322e3c

dockerでも確認しようとして作業中に遭遇。


dockerでapt install python2.7で導入した状態。
viで編集して

```
# python2.7 median.py
  File "median.py", line 4
SyntaxError: Non-ASCII character '\xe8' in file median.py on line 4, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
```
pythonファイルの中身は

```median.py
# https://qiita.com/manzyun/items/833ae7fba582d899c618
data = [100, 300, 423, 328, 516, 412]

data.sort() # **?~E大?~K**

if len(data) % 2 == 0: # ?~C??~B??~C~H?~A??~A?| ?~A??~U??~A??~G?~U??~C??~A??~~
U??~H??~Z
    # ?~A??~U??~A??~A~W?~A~_
    m1 = len(data) / 2
    m2 = (len(data) / 2) + 1
    # ?~U??~U??~A??~I?~O~[?~A~W?~A??~M置?~P~H?~B~O?~A~[
    m1 = int(m1) - 1
    m2 = int(m2) - 1
    print(data[m1] + data[m2]) / 2
else:
    # ?~G?~U??~A??~A~W?~A~_
    m = (len(data) + 1) / 2
    m = int(m) - 1
    print(data[m])
```
PHP初心者の小さな気付き2019

###はじめに

慣れている人にとっては、「別に」だけど、初心者や業務で全く使わない人が
チャレンジした時に「ゴリゴリに書いているあの処理」の場所にどうやっても行きつかない。
というかH1タグに書いた「hello world」だけしか表示されない。
そんな経験はないだろうか？

そんな間違いやすかった点を幾つかまとめてみた。
さほど年齢も重ねていないのに「仕事に関係ないし、やったことのない事は若いもんに任せて(丸投げして)」という人をチラホラ見かける。
(というか私より年下だよね？みたいな人達もいる)

そんなことを言っていいのは__[人生50年...]という名台詞を残した織田信長だけだ__
と密かにおもっている。
初心者中の初心者の小さな気づきを残そうと思う。

#1.開始タグ<?php

どうしても、実行したい処理があったのだけど、実行しない。
確か
if($i==0){
//なんかの長い表示
//セレクトボックスやテキストボックスなどいろいろ配置
}else{
//重要な処理
}

みたいな雰囲気だったと思う。
どうやってもelseの処理にたどり着けない。
elseの処理だけ切り出してみても通らない。

悪さをしていたのはelseの前に、鎮座していた存在でした。
↓これです。
__<php?__
__「?とphpの位置が逆だったのです！！」__

#2.文字列置換関数str_replace

誰もが遭遇する全角スペース。
入力欄にこいつが出てくるとウザイ。
空白なんだから、はじいて登録できないようにしたい。
便利なtrimで一発削除できないニクイ奴。
丁度下記のような状況だ。

\$tmpstr="　　";(全角スペース2個)

これは、全角スペースを半角スペースに変換して、trimした後に、空文字判定
すればいいんじゃね？
空文字ならはじくと。。。

__\$tmpstr2=trim(str_replace($tmpstr,"　"," "));ーー（１）__

その結果、なんと$tmpstrに全角スペースや連続した半角スペースが入ってきても、
ちゃんとはじいてくれるようになったんです！！！

ところが、\$tmpstr="abc"でもはじく。

使用例を詳しく見ると。。。

###「str_replace("置換前文字列","置換後文字列","検索対象文字列")」
という衝撃的なことがわかった。

つまりあれです。
（１）は__半角スペースの中に$tmpstrが含まれていれば、全角スペースに変換する
という呪文だったのです。__

#３．$_POST["名前"]が未定義！？

正確には、
\$val0=\$_POST["名前"];
と書いた$val0がUndefined variableと表示されたのですが。

時間ができたので、久しぶりにプログラムを書いていた。
幾つかしょぼい画面遷移をして、終盤に差し掛かったころだ。

__$_POST["btn1"]が未定義です__みたいなことが表示される。
その変数を別変数に置き換えて加工した場所もエラーが出ている。
嘘だろー、前画面から引っ張ってきてるし。

遷移元のプログラムを見る。

\<form action="xxxx1111.php" method="post">
\<input type="hidden" *__name="btn11"__* value="<?=$ret0?>"><---あっ！！！
\<input type="submit" value="確定">

そうです。
ボタン名の打ち間違いです。。。

__【皆さんは、ボタン名にhidden属性使って、取得しようとしていたりしていませんか？そんな時に使う
前画面のボタン名の確認はしていますか？】__

以上３つの気付きでした。
link_toメソッド

Railsではリンクを追加する際にlink_toメソッドを使うと<a>タグの役割をはたすことが出来る。

```ruby

 <%= link_to("第一引数,第二引数") %>
```

第一引数には表示する文字を入力する。
第二引数にはURLを設定する。

以下の様にaタグとして変換される

```html
 <a href="第二引数">第一引数</a>
```
WSL上のLaTeXで、Windowsの日本語フォントを埋め込む

WSL上のLaTeXで、Windowsの日本語フォントを埋め込む。

# 前提条件

- Windows 10 Pro 1909
- Ubuntu 18.04.3 LTS
- TeX Live 2017.20180305-1

# 手順

通常のフォントとしてMS明朝、太字用のフォントとしてHG明朝E (要MS Office) を埋め込んだ。

```bash
NAME=msmincho
FONT_RML=msmincho.ttc
FONT_GBM=hgrme.ttc

TEXMFLOCAL=`kpsewhich -var-value=TEXMFLOCAL`

# フォントの設置
sudo mkdir -p $TEXMFLOCAL/fonts/truetype
sudo ln -s {/mnt/c/Windows/Fonts,$TEXMFLOCAL/fonts/truetype}/$FONT_RML
sudo ln -s {/mnt/c/Windows/Fonts,$TEXMFLOCAL/fonts/truetype}/$FONT_GBM

# mapの設置
sudo mkdir -p $TEXMFLOCAL/fonts/map/dvipdfmx/$NAME
sudo tee $TEXMFLOCAL/fonts/map/dvipdfmx/$NAME/ptex-$NAME.map <<EOF
rml     H       :0:$FONT_RML
rmlv    V       :0:$FONT_RML
gbm     H       :0:$FONT_GBM
gbmv    V       :0:$FONT_GBM
EOF

# フォントの設定
sudo mktexlsr
sudo kanji-config-updmap-sys $NAME
```

# 参考

- [(u)pLaTeXのデフォルトの日本語フォントを好きなやつに変える方法 - Qiita](https://qiita.com/zr_tex8r/items/15ec2848371ec19d45ed)
- [MS明朝でLaTeXする話（Mac編） - 知識のサラダボウル](https://omedstu.jimdofree.com/2019/05/29/ms%E6%98%8E%E6%9C%9D%E3%81%A7latex%E3%81%99%E3%82%8B%E8%A9%B1-mac%E7%B7%A8/)
【Rails】devise_token_authを導入後、ユーザー登録しようとしたらcreateアクションがないと言われた

## はじめに

以下記事を参考にgem `devise_token_auth`を導入し、**Postman**で新規ユーザー登録しようとしたら**エラーが発生**したので解決法を残します。

（記事通りの手順に沿っていて、漏れがなければ発生しない内容です）

[Rails 5 API + Vue.js + devise_token_authでTwitterと連携するSPAを作る（①RAILS編） - Qiita](https://qiita.com/natsukingdom-yamaguchi/items/15142bd4ad77679afb04)
※とても分かりやすい記事でした！ありがとうございます。

### エラー内容(rails serverより抜粋)
```shell
AbstractController::ActionNotFound (The action 'create' could not be found for Api::V1::Auth::RegistrationsController):
```



## 環境
```yaml
OS: macOS Catalina 10.15.1
Ruby: 2.6.5
Rails: 6.0.2.1
```
## 結論
**クラスの継承漏れ。**

## 解決法
```shell
$ rails g controller api/v1/auth/registrations
```

上記コマンドで自動生成された
`registrations_controller.rb`
の書き換え漏れが原因でした。

```ruby
class Api::V1::Auth::RegistrationsController < ApplicationController

...略

end
```
上：自動生成されたコントローラー
↓
下：書き換え後のコントローラー

```ruby
class Api::V1::Auth::RegistrationsController < DeviseTokenAuth::RegistrationsController

...略

end
```

or

```ruby
module Api
  module V1
    module Auth
      class RegistrationsController < DeviseTokenAuth::RegistrationsController

...略
      end
    end
  end
end
```

## おわりに
最後まで読んで頂きありがとうございました:bow_tone1:

しょうもないミスでしたが、どなたかの参考になれば幸いです:relaxed:

## 参考にさせて頂いたサイト（いつもありがとうございます）
- [ruby on rails - Unknown action: The action ‘create’ could not be found for RegistrationsController? - Stack Overflow](https://stackoverflow.com/questions/11002553/unknown-action-the-action-create-could-not-be-found-for-registrationscontroll)
- [Rails 5 API + Vue.js + devise_token_authでTwitterと連携するSPAを作る（①RAILS編） - Qiita](https://qiita.com/natsukingdom-yamaguchi/items/15142bd4ad77679afb04)
systemd の systemctlコマンドでインスタンスを使用して引数を渡す方法

`systemctl`コマンドでインスタンスを使用して引数を渡す方法を紹介します。

# 環境
+ OS：CentOS Linux release 7.7.1908

# 1. Unit定義ファイルを作成

以下のUnit定義ファイルを作成する。

+ サービス名（ここでは`test`） + `@` + `.service`とする。
+ `%i`を使用する。

```:/etc/systemd/system/test@.service
[Unit]
Description=TestService

[Service]
ExecStart=/bin/echo %I
```

# 2. systemctlコマンドで引数（インスタンス名）を指定して起動

`systemctl start test@"arg1 arg2"`

```
[root@CENTOS7 ~]# systemctl start test@"arg1 arg2"
[root@CENTOS7 ~]#
```

`journalctl -u test@"arg1 arg2"`で確認。

```
[root@CENTOS7 ~]# journalctl -u test@"arg1 arg2"
-- Logs begin at 日 2019-12-29 17:19:15 JST, end at 日 2019-12-29 20:06:21 JST.
12月 29 20:06:21 CENTOS7 systemd[1]: Started TestService.
12月 29 20:06:21 CENTOS7 echo[1602]: arg1 arg2
```


※`/etc/systemd/system/test@.service`で`%I`ではなく`%i`を使用すると、`arg1`と`arg2`の間の半角スペースがエスケープされ、`arg1\x20arg2`となってしまう。


# 参考

ユニットファイルがロードされる際に置換されるユニット指定子は以下となります。

|ユニット指定子|意味|詳細|
|:------------:|:---|:---|
|%n|フルユニット名||
|%N|フルユニット名（エスケープなし）|%nと同じだが、文字列がエスケープされない。|
|%p|接頭辞|インスタンスになったユニット名の中の "@" 文字の前の文字列を参照する。<br/>そうでないユニットの場合、接尾辞を除いたユニット名が使用される。|
|%P|接頭辞（エスケープなし）|%pと同じだが、文字列がエスケープされない。|
|%i|インスタンス名|インスタンスになったユニット名の"@" 文字と接尾辞の間の文字列を使用する。|
|%I|インスタンス名(エスケープなし)|%iと同じだが、文字列がエスケープされない。|
|%f|ファイル名(エスケープなし)|エスケープされていないインスタンス名。|
|%c|ユニットのコントロールグループ|このグループ名には、/sys/fs/cgroup/systemd/の接頭辞が含まれない。|
|%r|コントロールグループの親グループのパス|"%c"の親のcgroupパスが使用される。|
|%R|スライスとユニットが置かれるルートコントロールグループパス|システムインスタンスの場合、「/」になる。<br/>なおコンテナの場合、コンテナのルートコントロールグループパスを使用する。|
|%t|ランタイムディレクトリ|/run又は、$XDG_RUNTIME_DIRが使用される。|
|%u|ユーザ名|マネージャーを実行しているユーザのユーザ名が使用される。<br/>通常はroot。|
|%U|ユーザのUID|マネージャーを実行しているユーザのUIDが使用される。<br/>システム管理者の場合は0が使用される。|
|%h|ユーザのホームディレクトリ|マネージャーを実行しているユーザのホームディレクトリが指定される。<br/>システム管理者の場合は、「/root」が使用される。|
|%s|ユーザのシェル|サービスマネージャーが使用しているシェル。<br/>システム管理者の場合は、「/bin/sh」が使用される。|
|%m|マシンID|システムのマシンID。|
|%b|Boot ID|システムのブートID。|
|%H|ホスト名|ユニットがロードされた時点でのシステムホスト名。|
|%v|kernelのリリースバージョン|「uname -r」の出力で取得できる文字列を使用。|


以上
Djangoでbitflyerの収支管理アプリを作ってみる（01.URLマッピングを作成する。）

前記事（っぽいなにか）

Djangoでbitflyerの収支管理アプリを作ってみる（00.事前準備とプロジェクト作成編）
https://qiita.com/redmeteor777/items/54178a7229b70fce55b3

着手する前にMVCを理解しておきたかったので書いたやつ

Djangoでbitflyerの収支管理アプリを作ってみる（90.[MVC]という概念を理解したい）
https://qiita.com/redmeteor777/items/76fc4df4c0d330297ca2

今回はまずログイン画面、新規ユーザー登録画面を含むアプリケーションを作成します。

```
# manage.pyがあるディレクトリで以下を実行
# これはアプリケーション作成のコマンド
# [login]という名前のアプリケーションを新規作成する
>python manage.py startapp login

# ディレクトリの中身を確認してみる
>dir
2019/12/29  16:19    <DIR>          .
2019/12/29  16:19    <DIR>          ..
2019/12/29  13:48    <DIR>          bfmonitor
2019/12/29  13:48                 0 db.sqlite3
2019/12/29  16:19    <DIR>          login
```
おっと、そういえばデフォルトのデータベースはSQLiteになってるんでした。
これはのちほどPostgresに変更します。

```
# loginディレクトリが出来ているので、とりあえず中身を見に行ってみる
>cd login
>dir

2019/12/29  16:19    <DIR>          .
2019/12/29  16:19    <DIR>          ..
2019/12/29  16:19                66 admin.py
2019/12/29  16:19                90 apps.py
2019/12/29  16:19    <DIR>          migrations
2019/12/29  16:19                60 models.py
2019/12/29  16:19                63 tests.py
2019/12/29  16:19                66 views.py
2019/12/29  16:19                 0 __init__.py
```

なんか色々なファイルが出来てます。
使うのは今回のパートではなく後々なので、しばらく置いておきます。

1つ上のディレクトリに戻って、bfmonitor内のbfmonitorディレクトリに移動します。(ほんと紛らわしい)

```
>cd ..
>cd bfmonitor
>cd dir

2019/12/29  13:07               411 asgi.py
2019/12/29  13:07             3,217 settings.py
2019/12/29  13:07               772 urls.py
2019/12/29  13:07               411 wsgi.py
2019/12/29  13:07                 0 __init__.py
```

今回いじるのは、ここにある[urls.py]です。
まずは中身を見ていきましょう。
上半分くらいコメントアウトされているので、コメントアウトされてない部分のみです。

```urls.py
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]
```

これが今回の肝になる部分です。

path(アクセスするアドレス , 呼び出される処理)

って感じでアクセスするページの情報を書いていきます。

```
from django.contrib import admin
from django.urls import path
import login.views as login

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', login.login),
    path('registration/', login.registration),

]
```

ここでやってることを順に。

```
import login.views as login
```

loginディレクトリにあるviews.pyを[login]という名前でインポートします。
紛らわしくて本当にすみません…

```
urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', login.login),
    path('registration/', login.registration),

]
```

login/にアクセスしたら、[login]に書かれている[login]という関数を実行。
registration/にアクセスしたら、[login]に書かれている[registration]という関数を実行。

つまり、views.pyに書かれているregistration関数を実行することになるわけですね。

しかし、まだviews.pyにそんな関数は書かれていません。
この状態でrunserverを実行するとどうなるでしょうか？

```
>python manage.py runserver

File "C:\Users\Owner\Desktop\bitflyer_monitor\bfmonitor\bfmonitor\urls.py", line 22, in <module>
    path('login/', login.login),
AttributeError: module 'login.views' has no attribute 'login'
```

はい。
「loginディレクトリにあるviews.pyファイルには、loginという関数ないっすよ」
というエラーですね。

関数未定義だと[NameError: name 'hogehoge' is not defined]が出そうなものですが、ここではimportしてオブジェクトとして呼び出しているのでAttributeErrorが出ている…とかそんな感じでしょうか？

というわけで、まずはここまで編集したら、アクセスする前にviews.pyを編集しに行きます。

というわけで次回は「02.ログイン画面を作る。」です。
【Android】5分でFloatingActionButtonを実装する

いつも忘れるのでメモ。所要時間5分。

# Material Componentsを使えるようにする
dependenciesに追加（←これを忘れがち）。

```groovy:build.gradle
dependencies {
    implementation 'com.google.android.material:material:1.1.0-alpha06' // 追加
}
```

最新バージョンは下記から確認できる。
https://github.com/material-components/material-components-android/releases

# Fabをレイアウトに追加する
```xml
    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        app:srcCompat="@drawable/ic_add"
        app:backgroundTint="#00BCD4"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />
```

## 表示する画像を指定
```xml
app:srcCompat="@drawable/ic_add"
```

app > src > res > drawable あたりに作っておいたVectorAssetを`app:srcCompat`で指定する。
<img width="320" alt="スクリーンショット 2019-12-29 19.38.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/866baea5-128a-83d3-6f4e-497072448f38.png">


## 背景の色を指定
```xml
app:backgroundTint="#00BCD4"
```

好きな色を`app:backgroundTint`で指定する。

# タップしたときの処理を追加する
```kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 以下を追加
        val fab: View = findViewById(R.id.fab)
        fab.setOnClickListener { view ->
            Snackbar.make(view, "Fabを押しました！", Snackbar.LENGTH_LONG)
                .setAction("Action", null).show()
        }
    }
}
```

`setOnClickListener`を入れるだけ。
FabタップでSnackbarが表示されるようになる。

タップ前 | タップ後
---- | ----
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/c6a09877-3c39-36c9-6042-bc76f856c77c.png" width="320"/> | <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/a2f63591-46bc-73d2-c6fc-78b0787667b2.png" width="320"/>

# 参考
* [Getting Started - Material Components for Android](https://material.io/develop/android/docs/getting-started/)
* [フローティング操作ボタンを追加する  |  Android Developers](https://developer.android.com/guide/topics/ui/floating-action-button?hl=ja)
Unity WebGL x IoT ~スマートロックをつくったよ~ Unity WebGL編

# はじめに
　とある事情があり、スマートロックほしい。スマートロック超便利。作ろう。となったので作ったのですが。色々な罠を踏み抜いたのでそれを書いていきます。なお、大量に罠を踏み抜いた理由は以下のような変な構成にしたからです。<font color="gray">(この構成にした理由は、上からの「早く作りなさい」という圧力と、私のスキル)</font>
![image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338159/5344ff27-a7bb-6818-67b4-58a8af3e3d83.jpeg)

 さて、三回目の今回はUnity WebGL編です。

# in Unity WebGL (on Web)
　前回のNCMBの罠はヌルゲーです。ここからが鬼門でした。ここで1・2月ほどとられた。

## Unity WebGLの罠
　罠と言うか、もともと想定していない使い方をしているため大変な罠を踏み続けていきました。

### 罠1 : InputFieldに英字しか入力できない
　PCだと英字しか入力できないだけで済みますが、スマホだと入力できません。[UnityがWebGL専用のInputFieldを公開している](https://github.com/unity3d-jp/WebGLNativeInputField)のでそれを使いましょう。使い方は、InputFieldにアタッチされている`InputField`に代わって`WebGLNativeInputField`をアタッチするだけです。
　…と言いたいところですが、入力をキャンセルすると、事前に入力されていた入力欄の文字が全消えするクソ仕様なので以下のように変更しました。キャンセルを押すと操作をキャンセルしたことになります。

```js:WebNativeDialog.jslb

6 --    if(result){
----------------------------------
6 ++    if( result == null){
----------------------------------
7           result = defaultValue;
8       }
```

### 罠2 : index.htmlから起動できない
　スタートがhtmlだから直接起動できるのではと思ったけどできませんでした。これはChromeのセキュリティの問題でできないようになっていて、設定を変えるとできるようになります。（詳しくは[**UnityでWebGL出力**](https://boccilog.wordpress.com/2016/05/08/unitywebglbuild/)にのってました。）もしくは`Build & Run`でずっとやるかのどちらかです。

### 罠3 : モバイルに対応していない

　そもそもUnityのWebGLはモバイルに対応していません。なので、スマホからUnityのWebGL使っているところに行くと、`このページはモバイルには対応していません。それでもいいですか？`的なものが出ます。
　これは、公式として対応していないだけで実はスマホでも問題なく使えます。パフォーマンス的な問題で保証できないから対象外となっている模様です。つまり、軽いものなら問題なく動きます。
　しかし、毎回この表示が出るのは面倒なので、出ないようにします。
　ビルドして出力された`index.html`を以下のように改造します。

```html:index.html

11    <script>
--------------------------------------------------
12 ++     UnityLoader.SystemInfo.mobile = false;
--------------------------------------------------
12        var gameInstance = UnityLoader.instantiate("gameContainer","Build/xxx.json",{ onProgress: UnityProgress });
13    </script>

```

※参考サイト[Unity WebGL のスマホ対応](https://blog.gfb.io/unity-webgl-for-mobile)

### 罠4 : .NETの一部の名前空間が使えない
　名前からすると大したことなさそうですが、これが一番致命的です。[Unityの公式](https://docs.unity3d.com/ja/2018.2/Manual/webgl-networking.html)にあるように名前空間`System.Net`が使えません。つまり、**.NETのネットワークを使うのは全滅です。**AWSとかのライブラリも全滅です。唯一生き残ってるのを見つけたのはNCMBです。


# The next is...

　今回は区切りの都合上短いですが、破壊力満点の回でした。次は[WebHook編](https://qiita.com/kumaS-kumachan/items/af1d87e75d534360984a)です。

# シリーズ一覧

* [NCMB編](https://qiita.com/kumaS-kumachan/items/bd4df506f01f5014b154)
* Unity WebGL編　←いまここ
* [WebHook編](https://qiita.com/kumaS-kumachan/items/af1d87e75d534360984a)
* [ラズパイ編](https://qiita.com/kumaS-kumachan/items/d6407d7c9c62f90af9b7)
【RPA】メールの送受信/ツール別比較

業務の自動化において、メールで情報を通知するシナリオは結構ありますよね。また、メール受信をきっかけにした自動化の開始、受信メールの中から特定の内容のメールを保存したり添付ファイルを取得するなど、メール操作はExcel、CSV、Webなどと並んでRPAで必要不可欠な操作の一つですよね。
ということで、メールの送受信機能について主要5大RPAソフトウェア (WinActor、BizRobo!、UiPath、Automation Anywhere、Blue Prism)の比較をしてみたいと思います。

# メールの送受信 - ずばり比較！

凡例

* 👍: 機能がある。
* ❌: 機能がない。

|RPAソフトウェア|SMTP送信|POP/IMAP受信|Outlook送受信|説明|
|:--|:--:|:--:|:--:|:--|
|WinActor|👍|👍|👍|SMTPでのメール送信機能あり。バージョン6よりWinActor自体にメールの受信機能を持ち、メーラーを介さずに本文や添付ファイルの取得ができるようになりました。クライアント側のOutlookで送受信を行う機能はライブラリで持っています。|
|BizRobo!|👍|❌|❌|サーバーによるメール送信機能はあるが、メール受信、Outlook送受信機能はない。|
|UiPath|👍|👍|👍|メールアクティビティにより、サーバー側はIMAP/POP3/SMTP、Exchange、IBM Notesでメールの取得、移動、送信、削除に対応。Outlookはさらに返信にも対応。メールの保存や添付ファイルの保存も対応。|
|Automation Anywhere|👍|👍|👍|サーバーによる受信はIMAP/POP/EWS (v11.3.4)に対応。SMTP送信も対応。メールの削除や添付ファイルの保存もできる。Outlook操作はv11ではBot Storeからモジュールをダウンロードすることで複雑な操作が行える。A2019では、EmailアクションでサーバーかOutlookかの選択ができる。トリガーでメール受信をきっかけにできるところは他社にない特徴である。|
|Blue Prism|👍|👍|👍|Email - POP3/SMTP VBOと、MS Outlook Email VBOでサーバー/クライアント両方の送受信が可能です。|

# 参考記事

* WinActor:
    *  [🔰WinActor ライブラリ一覧 (インストール済み/クラウド)](https://qiita.com/KamiyaMT/items/2da0e23e25bf29d904ac) by @KamiyaMT さん
    * [WinActorシナリオ作成の基礎 メールを受信し添付ファイルを保存する](https://work-pj.net/archives/3982)
* BizRobo!: [Kofax/メール送信 (Send Email)](https://docshield.kofax.com/RPA/ja_JA/10.4.0_rp4hrvtqrq/help/kap_help/reference/c_sendemail.html)、[BizRobo!/メール操作](https://knowledge.bizrobo.com/hc/ja/sections/360006492971)
* UiPath: [About the Mail Activities Pack](https://docs.uipath.com/activities/lang-ja/docs/about-the-mail-activities-pack)
* Automation Anywhere: [Eメール自動化コマンド](https://docs.automationanywhere.com/bundle/enterprise-v11.3/page/enterprise/topics/aae-client/bot-creator/commands/email-automation-command.html?_LANG=jpjp)
* Blue Prism: [🔰blue prismの標準VBOとDXで入手できる主なVBO](https://qiita.com/KamiyaMT/items/67e81d8e74218b2f7fc6) by @KamiyaMT さん 


# 関連記事

* [【RPA】ロボット実行環境のOS対応状況/ツール別比較](https://qiita.com/Okura_/items/8975d6cd7ba0ff2ff61b)
* [【RPA】基本用語/ツール別比較](https://qiita.com/Okura_/items/2cb0dd2ce17356bb50ea)
* [【RPA】どのランタイム環境上で作られているか/ツール別比較](https://qiita.com/Okura_/items/a3f9393267e655e7300d)
* [【RPA】自動化に対する思想/ツール別比較](https://qiita.com/Okura_/items/1c8b29d40d98f2e5ce63)
* [【RPA】サーバー管理の仕組み/ツール別比較](https://qiita.com/Okura_/items/dfc380ec50df6b289391)
* [【RPA】トリガー・スケジュール機能/ツール別比較](https://qiita.com/Okura_/items/7d5e617260378fd2947f)
* [【RPA】ロボットの稼働方法 (ヒトロボ協働型・ロボ自律型)別ライセンス提供/ツール別比較](https://qiita.com/Okura_/items/e9c9f394ae5805481b2b)
* [【RPA】オブジェクト指向のロボット作成/ツール別比較](https://qiita.com/Okura_/items/923706e8f4c8e3628522)
* [【RPA】シンクライアント操作への対応/ツール別比較](https://qiita.com/Okura_/items/13de777603cd9912992b)
* [【RPA】SAP対応/ツール別比較](https://qiita.com/Okura_/items/b265ca3f083b92471b58)
* [【RPA】対応ブラウザー/ツール別比較](https://qiita.com/Okura_/items/8501117954139300f427)
* [【RPA】コーディング知識の必要度/ツール別比較](https://qiita.com/Okura_/items/71a577e2141591c88a33)
* [【RPA】UI Automation 対応状況/ツール別比較](https://qiita.com/Okura_/items/95a78c46454ae0dac036)
* [【RPA】ログイン情報の保管方法/ツール別比較](https://qiita.com/Okura_/items/12cdcc743670c6d9c7c7)
一意性制約（UNIQUE KEY)と主キー制約 (PRIMARY KEY)は違う

制約を「データベース内でデータを識別するためのもの」とアバウトに認識していたがどうやら一意性制約（UNIQUE KEY)と主キー制約 (PRIMARY KEY)は違うらしい。

まず、二つの制約についてそれぞれ見ていこう。

「主キー制約 ／ プライマリキー」
表の各行を完全に一意に識別できるカラムまたはカラム集合であり、すべてのカラムに NULL を含まない。 


「一意キー制約 ／ ユニークキー」
表の NULL 以外の各行を一意に制約する。しかし NULL 値を許容するため、値なしの状態が複数存在することは許される。

#####ユーザー登録で例えるなら

主キー制約の場合「すがわら」という名前を登録したいときカラムに「すがわら」が入っていれば登録することはできない。

一方、一意性制約の場合「すがわら」という名前を登録したいとき同じカラムに「すがわら」が入っていても他のカラムの組み合わせに対して一意性制約を設定していれば登録することができる。

#####ユーザー登録における主キー制約を設けないことによる不都合


例えば
　　　　name       　　　　password
　　　「すがわら」　　「A」
　　　「すがわら」　　「b」
　　　「すがわら」　　「c」       　　　
 というテーブルが存在したとする場合、パスワードカラムに一意性制約を持たせる。また、２つのカラムの組み合わせに対して一意性制約を設定すればレコードごとに一意性制約をもたせれることもできるみたい。

実際にログインするとき、どの「すがわら」のレコードにログイン（データを取得）するのかはSQLの種類によってそれぞれ決まりが異なっているため異なる。よって必要とされるパスワードも異なる。これだと使い物にならなくなってしまうためプラマリキーを設定してすがわらを重複させないようにする必要がある。

認識に間違いがあれば教えていただけるとありがたいです。
macOS で go-z3 を動かす (ビルドを通す)

# 結論

`go get -u github.com/mitchellh/go-z3` したあと，
`$GOPATH/src/github.com/mitchellh/go-z3/Makefile` を以下のように変更して `make` をします．

```Makefile:変更前
libz3.a: vender/z3
	cd vendor/z3 && python scripts/mk_make.py --staticlib
	cd vendor/z3/build && ${MAKE}
	cp vendor/z3/build/libz3.a .
```

```Makefile:変更後
libz3.a: vender/z3
	cd vendor/z3 && CXX=clang++ CC=clang python scripts/mk_make.py --staticlib
	cd vendor/z3/build && ${MAKE}
	cp vendor/z3/build/libz3.a .
```

# 経緯

macOSだと，`go-z3` パッケージのインストールに失敗します．
`go-z3` のREADMEでも「単純に `go get` するだけだと動かないぜ，自分でz3を `make` してくれよな！」みたいなことが書いてあって， `git clone` したあとに `make` を叩くだけでいいと書いてあるんですが，それだと(おそらく)あらゆるプラットフォームでビルドがコケます．
この原因は，本家z3のバージョンアップに伴って `Z3_get_error_msg_ex` が `Z3_get_error_msg` に改名されたり，cgoの仕様でCのBoolが見えなかったり，とかそのあたりです．

`go get` すると@mattnさんが修正したあとのコードが降ってくるっぽくて，Windowsだとビルドが通るっぽいです．しかし，macOSだと通りません．
この原因は，z3をビルドするときにgccを使っていることっぽいです（なんで？）．ビルド時に `CC=clang CXX=clang++` を設定するとビルドが通ります．

# その他

`Makefile` の中でmacOSのときに `CC` と `CXX` を設定するやつを書くとOSSコミットチャンスな気がするんですが， `go-z3` のリポジトリはissueもずーっと放置されているので微妙です． `go get` で降ってくるコードがgithubのものと別物なのが不思議なんですが，どういうことなの？
IntelliJでGo書いてる時に特定のpackageをauto importしないようにする

# TL;DR
Preferences → Languages & Frameworks → Go → Imports → Exclude from import and completion → `+` 押して除外したいパッケージの名前を入力

# 経緯
IntelliJで `fmt.Println` とか書く時に、 `fmt` と `golang.org/x/tools/go/ssa/interp/testdata/src/fmt` がimportするpackageとしてサジェストされてた。
僕としては勝手に `fmt` がimportされて欲しいんだけど、同じ名前のパッケージが2つあるせいで、毎回選択してimportする必要があり、めんどくさかった。
で、特定のpackageをauto importしない設定を見つけた。 `golang.org/x/tools/go/ssa/interp/testdata/src/fmt` を除外設定したら勝手に `fmt` がimportされるようになって便利。

# 環境
IntelliJ IDEA 2019.3.1 (Ultimate Edition)
【Human Interface Guidelines】Loading機能 和訳

モバイルアプリを設計する上で、ローディング（読込み）機能についてiOSの推奨を理解しましょう。
「[Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/ios/app-architecture/loading/)」のLoadingの章について紹介します。
モバイルのアクション処理では、機械学習を用いた高負荷な演算処理や、大容量データの取り扱いなど、
ユーザーに不快感を与えることなく、実装することが求められます。

## 前提
コンテンツの読込み中に、空白または静的な画面が表示されていると、アプリがフリーズしているように見えます。
ユーザーや混乱とフラストレーションが生じ、アプリから離脱してしまう可能が高まります。
![iPhone-Loading.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168714/c5929440-e98d-59c7-866c-a5e3290131e6.png)


## 1. 読込み中が発生していることを明確にする
最低限何かが起こっていることを伝えるために、アクティビティスピナーを表示してください。
より良くするために、ユーザーの待機時間を測定して、明示的に進捗状況を表示することを推奨します。

## 2. 出来るだけ早くコンテンツを表示する
コンテンツの読込みが完了するまで、画面の表示の切替えを待たせてはいけません。
直ちに画面を切替えて、読込み中のコンテンツの部分のみ、プレースホルダーテキストやグラフィクス、アニメーションを使用して、まだ利用できない場所を明確にします。
コンテンツの読込みが完了したら、プレースホルダー要素部分を置き換えましょう。
ユーザーがアニメーションの再生中や機能案内を閲覧している間に、できる限りバックグラウンドで非同期的に処理実行することが大切です。

## 3. 読込み中の退屈をごまかすために、機能説明やコンテンツを再生する
ミニゲームを開始できたり、面白いビデオを再生したり、興味深いグラフィック画面を表示することを検討するとよいでしょう。

## 4. ローディング画面をカスタマイズする
標準の進行状況をインジケーターで示すことは通常問題ないが、時折適切でない場合があります。
アプリやゲームのスタイルに合った特有のアニメーションや要素を使用して、より没入感のあるUXを設計することを検討してください。

![iPad-Loading.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168714/ebedb38b-f637-27bd-f6f0-6ae54253c3c9.png)

## まとめ
YouTube動画のようにコンテンツを細かく分割して配信することで、読込める部分から優先的に表示するなど、配信の仕方やサーバー側での工夫でも改善できることはあります。
しかし、サーバーにアクセスが集中している場合や、Wi-Fiや電波が不安定な環境など、コンテンツ取得に時間がかかる場合はどうしても生じてしまいます。
他のアプリの処理や読込みにストレスを感じている時に、ついつい自分のアプリを開きたくなると非常に良いと思います。
Rundeckプラグイン開発メモ

毎回忘れるので自分用にメモ。

## Dockerイメージ
https://hub.docker.com/r/rundeck/rundeck/

## ログイン情報
`/home/rundeck/server/config/realm.properties`に記載。3.1.4ではユーザー・パスワードともに`admin`でOK。

## locale
デフォルトではユーザー設定が見られる。中途半端に日本語が入っててしんどいので、URLに`?lang=en_US`などを付けて英語にする。

## プラグインのデプロイ
`/home/rundeck/libext`におけばOK。例えばこう。

```shell
$ docker cp build/libs/foo.jar rundeck:/home/rundeck/libext
```

## 起動してshellに入る
`docker run`一発でbashは起動できないので。

```shell
# -itにしとくとログが流れる
$ docker run --name foo -it rundeck:latest
# 別シェルで実行
$ docker exec -it foo /bin/bash
```
ReferenceError: fetch is not definedで困ったときに読む記事

### 少年は困っていた。
#### node-fetch がfetchできない。

``` Typescript
ReferenceError: fetch is not defined
    at Client.request (/var/task/node_modules/amazon-cognito-identity-js/lib/Client.js:55:3)
    at /var/task/node_modules/amazon-cognito-identity-js/lib/CognitoUser.js:333:18
    at AuthenticationHelper.getLargeAValue (/var/task/node_modules/amazon-cognito-identity-js/lib/AuthenticationHelper.js:96:4)
    at CognitoUser.authenticateUserDefaultAuth (/var/task/node_modules/amazon-cognito-identity-js/lib/CognitoUser.js:309:24)
    at CognitoUser.authenticateUser (/var/task/node_modules/amazon-cognito-identity-js/lib/CognitoUser.js:270:16)
    at /var/task/dist/index.js:69:21
    at new Promise (<anonymous>)
    at fetchCredentials (/var/task/dist/index.js:68:12)
    at cognitoProvider (/var/task/dist/index.js:65:18)
    at async Runtime.exports.handler (/var/task/dist/index.js:34:31)
```

### 環境
- TypeScript 3.7
- Node.js 12.13.1
- AWS Lambda

### やろうとしていたこと
エンドユーザーがHTTP通信を介してLambdaに認証情報を送り、それをバックエンドAPIで独自認証し、CognitoIdPoolから得たCredentials情報を返すLambdaを作成していた。

初期構築時も同じ問題に詰まったが、Module内に書き込むことでなんとか問題を解決することが出来た。
しかし、 **node-fetchは2度刺す。**

### 二度 刺すっ・・・・・！
Lambdaのリポジトリをcodepipelineを用いたCI/CD環境へと移行する際に再度問題が発生。

再度同じエラーが発生するようになった。
しかしリポジトリにnode_modulesをプッシュしている人はいるのだろうか、いやいない。私もプッシュをしていないその一人だった。

あれ、これどうやって実行するんだ……？
あらゆる記事を探しまくった結果解決を得ることが出来たのでここに記しておきたい。
結局公式に丁寧に書いてくれてたんだけどね。

npmのReadmeによると
>This library uses the Fetch API. For older browsers or in Node.js, you may need to include a polyfill. For example.
このライブラリではfetchAPIを利用するため、古いブラウザやNode.jsでは以下のようにpolyfillを行う必要があります。
※polyfill = 隙間家具のイメージ。APIを利用するために準備が必要ですよということ。

``` Typescript
global.fetch = require('node-fetch');
var AmazonCognitoIdentity = require('amazon-cognito-identity-js');
```

やってることはnode-fetchをグローバルオブジェクトとして読み込み、呼び出した場所で扱えるようにしてるってわけですね。
なるほど。
まぁJavascriptだったんで、Typescriptとして動くように書き換えます。

``` Typescript
import Global = NodeJS.Global;
export interface GlobalWithCognitoFix extends Global {
    fetch: any
}
declare const global: GlobalWithCognitoFix;
global.fetch = require('node-fetch').default;
```

こんな感じでfetchAPIを使用するコードでimportしてやるとfetchAPIが機能するようになります。
ここで注意して欲しいのが、fetchAPIを含むライブラリよりも先にimportが必要なので、脳死でコードの先頭に置いておくと良いと思います。

[npm - amazon-cognito-identity-js](https://www.npmjs.com/package/amazon-cognito-identity-js)
systemd の Unit定義ファイル で 変数 を使用する方法

`systemctl`コマンドでサービスを起動する際に、Unit定義ファイル内で**変数**を使用する方法を紹介します。

# 環境
+ OS：CentOS Linux release 7.7.1908

# 1. Unit定義ファイル内で変数を指定
Unit定義ファイル内で`Environment`を使用して変数を指定することができます。
ここでは`test.service`のUnit定義ファイルを作成して、確認してみます。

+ 変数`TEST_VALUE1`に`display1`、変数`TEST_VALUE2`に`display2`を設定します。
+ `echo`で変数を表示させます。

```shell:/etc/systemd/system/test.service
[Unit]
Description=TestService

[Service]
Environment=TEST_VALUE1=display1
Environment=TEST_VALUE2=display2
ExecStart=/bin/echo ${TEST_VALUE1} ${TEST_VALUE2}
```

`systemctl start test`で起動します。

```console
[root@CENTOS7 ~]# systemctl start test
[root@CENTOS7 ~]#
```

`journalctl -u test`で確認します。

```console
[root@CENTOS7 ~]# journalctl -u test
-- Logs begin at 日 2019-12-29 17:19:15 JST, end at 日 2019-12-29 18:07:04 JST.
12月 29 18:07:04 CENTOS7 systemd[1]: Started TestService.
12月 29 18:07:04 CENTOS7 echo[1398]: display1 display2
```

変数`TEST_VALUE1`、`TEST_VALUE2`の値、`display1`、`display2`が表示されました。


# 2. Unit定義ファイル内で環境変数を指定

Unit定義ファイル内で`EnvironmentFile`を使用して、環境変数ファイルを指定することができます。
ここでは`test2.service`のUnit定義ファイルを作成して、確認してみます。

```:/etc/sysconfig/test2
TEST_VALUE1=display1
TEST_VALUE2=display2
```

+ `EnvironmentFile`に環境変数ファイル`/etc/sysconfig/test2`を設定します。
+ `echo`で変数を表示させます。

```shell:/etc/systemd/system/test2.service
[Unit]
Description=Test2Service

[Service]
EnvironmentFile=/etc/sysconfig/test2
ExecStart=/bin/echo ${TEST_VALUE1} ${TEST_VALUE2}
```

`systemctl start test2`で起動します。

```console
[root@CENTOS7 ~]# systemctl start test2
[root@CENTOS7 ~]#
```

`journalctl -u test2`で確認します。

```console
[root@CENTOS7 ~]# journalctl -u test2
-- Logs begin at 日 2019-12-29 17:19:15 JST, end at 日 2019-12-29 18:19:45 JST.
12月 29 18:19:45 CENTOS7 systemd[1]: Started Test2Service.
12月 29 18:19:45 CENTOS7 echo[1444]: display1 display2
```

`/etc/sysconfig/test2`に設定した、変数`TEST_VALUE1`、`TEST_VALUE2`の値、`display1`、`display2`が表示されました。

# 補足
なお、環境変数ファイル`/etc/sysconfig/test2`の中で、`TEST_VALUE1=$PATH`等を指定しても、以下の通り`$PATH`は展開されません。

```:/etc/sysconfig/test2
TEST_VALUE1=display1
TEST_VALUE2=＄PATH
```

```console
[root@CENTOS7 ~]# systemctl start test2
[root@CENTOS7 ~]# journalctl -u test2
-- Logs begin at 日 2019-12-29 17:19:15 JST, end at 日 2019-12-29 18:25:04 JST.
12月 29 18:25:04 CENTOS7 systemd[1]: Started Test2Service.
12月 29 18:25:04 CENTOS7 echo[1457]: display1 $PATH
```


以上
MBRとGPTって、なーに？

#MBRとGPTって、
そもそも
初めて、HDDを追加しようとして

まず「windowボタン」を押し、検索欄に「コンピューターの管理」を検索
![コンピューターの管理.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514585/26107434-dee0-bfd8-4051-225c87b80f60.png)

コンピューターの管理画面を表示したら、記憶域の中のディスクの管理をクリック

![コンピューターの管理の説明.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514585/1186545e-9a07-b98d-f544-c63372796854.png)

(ちなみに8.5ZBをTB換算したら、85億TBとなる)

基本これからは、GPTでいいと思う。
作成したマイグレーションファイルをデータベースに反映させる方法

```
 $ rails g model テーブル名　カラム名:データ型
```
上記の方法にてマイグレーションファイルを作成したものをデータベースに反映させるには
ターミナルにて

```
$ rails db:migrate
```
を実行する必要がある。
マイグレーションファイルとは



マイグレーションファイルとはデータベースに変更を指示するファイルの事

作成方法

```
　$ rails g model テーブル名(頭文字は大文字、単数形にする)　カラム名:データ型
```

これだけではデータベースには反映されない
下記のURLにデータベースに反映させる方法を記載してあります！
[作成したマイグレーションファイルをデータベースに反映させる方法](https://qiita.com/MIRAI1221/items/2c5604e9112f7109d252)
Vimでバッファファイルをすべてウィンドウに表示する

こんにちは、ゴリラです。

Vimでウィンドウに表示されていない複数のバッファをまとめて開きたいときってたまーにありますが、都度バッファ番号を指定するのは面倒ですよね。

そこで`:tab sball`を実行するとすべてのバッファをタブページで開いてくれます。
タブページで開きたくない場合は`:sball`だけでもいけます。

詳細を知りたい方は`:h sball`でヘルプを読んでみてください。
【AWS完全に理解したへの道】 S3 基本編

# 【AWS完全に理解したへの道】 S3編
### 本記事を書くための主とした動機
クラウドサービスがデフォルトスタンダードになりつつある昨今、私もそろそろAWSを理解していかないとまずいということで、まずは基本レベルを記事としてまとめることで記憶の定着に役立てる。さらに深掘りした内容は別の題目として記述することとする。
※AWSの公式ドキュメントを見れば、基本レベルのことは全て書いてあるとは思うし、情報がアップデートされている可能性もあるので正確な情報を見たい人はそちらを見てください。

## S3とは
### 特徴
##### データ形式  
Key-Value形式でのデータ管理を行う

##### 耐久性 
データを失わないことを保証するレベル
99.999999999% / 1年間
##### 可用性
システムが稼働し続けることを保証するレベル
99.99% / 1年間

#### データ整合性
結果整合性なので操作完了のステータスが返ってきたとしても結果が反映されるまでにタイムラグがある
##### 具体例
* 【読み込み整合性】新しいオブジェクトの書き込み
S3から「完了」が返されるまで新しく書き込んだオブジェクトはバケット内の一覧には表示されない

* 【結果整合性】既存オブジェクトの上書き
S3から「完了」が返された後でも上書き前のデータが返ってくることがある。
一定時間経つと上書き後のデータが返ってくるようになる。

* 【結果整合性】オブジェクトの削除
S3から「完了」が返された後でも、削除操作を行った後のデータがバケットの一覧に表示されたり、データにアクセスできたりする。一定時間経つとバケットの一覧に反映されなくなり、当然データにもアクセスできなくなる。

### アクセス制限

#### アクセス管理の方法
S3へのアクセス管理方法は以下の4つ

1. アクセスコントロール(ACL)
2. バケットポリシー
3. IAMポリシー(ユーザポリシー)
4. 署名付きURL

1.アクセスコントロール(ACL)
【できること】
バケットとオブジェクトそれぞれについて、読み取り/書き込みの許可を他のAWSアカウントに与えることができる。 オブジェクトに付与されているURLにHTTPSアクセスの許可をあたえることができる。
【できないこと】
条件付きアクセス許可を与えること、アクセス拒否の設定、自アカウント内のIAMユーザやグループのアクセス制限をすることはできない。

2.バケットポリシー
【できること】バケットごとに、自アカウント内のIAMユーザやグループ、他アカウントのユーザに対してアクセス許可を与えることができる。 条件付きのアクセス許可やアクセス拒否の設定もできる。
【できないこと】

3.IAMポリシー(ユーザポリシー)
【できること】
S3に対するアクセス可否許可を設定した自アカウント内のIAMユーザやグループ、ロールに割り当てることができる。またバケットポリシーと同様に 条件付きのアクセス許可を与えること、アクセス拒否の設定をすることもできる。
【できないこと】他アカウントを指定したアクセス権の設定はできない。

4.署名付きURL
S3バケットに格納された特定のオブジェクトを限られたエンドユーザにのみアクセスさせる

### S3オブジェクトの暗号化とアクセスログ
S3オブジェクトの暗号化やアクセスログの取得はデフォルトではなくユーザ責任によって行う。
* オブジェクトの暗号化
【クライアント側】
クライアント側で事前に暗号化したデータをS3バケットにアップロードする
【サーバサイド側】
AWS側が管理する鍵やユーザが管理する鍵を使ってS3上で暗号化する
* アクセスログ
S3バケットへのアクセスログを任意で同じかまたは異なるS3バケットに取得することができる
アクセスログに関して完全性は保証されず、アクセスログ格納バケットへのログの格納は実際のアクセスから時間をおいて行われる。

### S3の静的Webサイトホスティング機能
【できること】
サーバ側のプログラム実行による動的なページはS3でホスティングできない
【できないこと】
静的なページやJavaScriptなどクライアント側で実行されるプログラムを含んだページ
【メリット】
EC2を利用するよりも運用の負荷やコストを抑えることができる。
アクセス先のエンドポイント
バケット名.s3-website-リージョン名.amazonaws.com
独自のドメインでアクセスさせるためにはRoute 53などのDNSサービスにより名前解決する必要がある。

### S3のバージョニング機能
ユーザ任意でオブジェクトのバージョン管理を行う機能、デフォルトはOFF
S3バケット単位で有効にすることができる。
オブジェクトを誤って上書きしたり、削除した後でも操作前のオブジェクトを復元することができる。

### Glacierとは
【用途】
参照する頻度の少ないデータを長期保管する
【データ格納方法】
1. S3のライフサイクル機能
2. SDKを利用して直接格納する

1. S3バケットに格納したオブジェクトを指定した日数が経過した後にGlacierに移行したり、削除したりすることができる機能
2. SDK(基盤となるREST APIをラップすることによりプログラミングの作業を簡素化したもの)を使って格納。 

【デメリット】

* Glacierに格納した後、データを取得するのにデータの大きさに関わらず3~5時間時間がかかる。
* Glacierに保管しているデータ量の5%を超える場合、データ取り出しのための料金がかかる。
【Chrome拡張機能】1分でできる！URLチェッカー

Chrome拡張機能で、特定のURLのページでアラートを出す機能を作成する方法です。

## 経緯
業務で気を付けてはいても、本番環境と開発環境を間違ってしまうことがある（←危ないやつ汗）。
少しでも間違いを防止するため、また、本番環境作業時は気を引き締めて作業に臨めるようにするため、本ツールを作ってみました。

## 作成手順

作り方はとっても簡単！手際よくやれば1分もかからないでしょう。

### 1. Javascriptファイルの作成
本番環境訪問時に出力させたいアラートを記述します。

```javascript:content.js
window.alert("本番環境です！");
```

### 2. manifest.jsonの作成
設定ファイルです。
ポイントは、matchesの行に、上のアラートを出力させるページのURLを記述すること。これで、指定したURLのページ訪問時のみアラートが出力されるようになります。

```json:manifest.json
{
  "name": "URL Checker",
  "version": "1.0.0",
  "manifest_version": 2,
  "description": "Check URL and show alert if it's production environment",
  "content_scripts": [{
    "matches": ["https://www.hogehoge.jp/*"],
    "js": [
      "content.js"
    ]
  }]
}
```

各項目の説明です。

* name：拡張機能の名前を記載。最大45文字。
* version：バージョン。1～4つの数字をドットで区切ります。
* manifest_version：マニフェスト・バージョン。現状有効なのは2のみなので、そのまま記述。
* description：拡張機能の説明。最大132文字。
* content_scripts：matchesに処理を行いたいURLのパターンを、jsに処理を記述したJavascriptファイルを記述。

### 3. 拡張機能の読み込み
あとは上の2ファイルをひとつのフォルダにまとめて、Chromeに読み込ませるだけ！

## 注意点
本ツールはChromeのみ対応なので、別ブラウザを使用している場合、また、クロスブラウザテストの際には残念ながら使えません。。
その場合は、URLをひとつのページにまとめ、本番環境遷移時にはアラートを出す、とかにしたほうがよいかも。


## 参考
本手順は、主に、@RyBBさんの
[Chrome拡張の作り方 (超概要) | Qiita](https://qiita.com/RyBB/items/32b2a7b879f21b3edefc)
を参考にさせていただきました。
というか、「特定の画面でアラートを出す」ほぼそのままです。
最初もっと複雑な作り方をしようとしていたのですが、調べていてこれでいけるやん！となりまして。めっちゃ感謝です！
タイトルの通り、Chrome拡張の作り方の概要が詳しく書かれているので、ぜひご参考に！

manifest.jsonの内容については、
[Chrome 拡張機能のマニフェストファイルの書き方 | Qiita](https://qiita.com/mdstoy/items/9866544e37987337dc79)
を参考にさせていただきました。

ありがとうございました！
MDXでJSX Componentが無視される


# 問題

Next.jsにおけるpagesディレクトリにある.mdファイルからレンダリングする際に、mdファイル内に記載されたjsxのコンポーネントが無視されてしまう。

# 解決
import文の直下にコンポーネントを置くと無視されてしまう模様。
つまり

```md

# Hello World!!!
import MyComponent './mycomponent';
<MyComponent />

# This is MDX!
```
と書くとMyComponentが無視されてしまう。

```md
# Hello World!!!
import MyComponent './mycomponent';

<MyComponent />

# This is MDX!
```
こうすれば大丈夫。必ず一行以上空けること。
対した問題ではないが、うっかりやってしまいそう。

# 環境
念のため環境を記載しておく。

- @mdx-js/loader": "1.5.3",
- @next/mdx": "9.1.6"

## next.config.js

```javascript
const withMDX = require('@next/mdx')({
  extension: /\.mdx?$/
})
const withCSS = require('@zeit/next-css')
const withSourceMaps = require('@zeit/next-source-maps')

module.exports =
  withSourceMaps(
    withCSS(
      withMDX({
        pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'md', 'mdx'],
        cssModules: true,
        cssLoaderOptions: {
          importLoaders: 1,
        },
        webpack: (config, { dev }) => {
          if (dev) {
            config.watchOptions = {
              poll: true
            }
          }
          config.resolve.extensions = [".js", ".jsx", ".ts", ".tsx", ".json", ".css", ".md", ".mdx"];
          return config
        }
      })
    )
  )

```
Reactでcssをオブジェクトとして読み込む

<h1>cssファイルを読み込んだのに{styles.〇〇}で使えない</h1>
import React from "react";
import styles from "./styles.css";
このように読み込んだ。

className={styles.〇〇}で設定してもスタイルが適応されない！！
console.logで確認したらundifined。


ハマってしまったので備忘録

<a src="https://kapu-kapu.hatenablog.com/entry/2018/11/19/132655">create-react-appで簡単にcss moduleが使えるようになってた。</a>

↑ここが参考になった。

<h2>cssファイルを〇〇.css→〇〇.module.cssにする</h2>
import React from "react";
import styles from "./styles.<b>module</b>.css";
そしてこのように読み込んだ。

これだけで解決。
ちゃんとオブジェクトとして取り出せるようになった。
OneDriveのブラウザ画面でファイル検索結果のファイルの格納パスを確認する方法

## 方法

OneDriveのブラウザ画面で画面左上で検索ワードを入力して検索実行すると、下記のように検索結果のファイルが表示される。
![image.png](https://image.docbase.io/uploads/b56528dc-2372-4ad3-aa11-bb4b93998aa8.png)

格納パスを確認したいファイルを選択し、[開く] - [XXX Onlineで開く]をクリック。
![image.png](https://image.docbase.io/uploads/4955316c-ce6c-4334-96c6-6cfc0df3b456.png)

ブラウザの別タブでファイルが開かれ、赤枠の箇所でファイル格納パスが確認できる。
![image.png](https://image.docbase.io/uploads/9fd1ffb5-6b31-4f11-99e6-817231c4a6e4.png)

以上
Unityのinterpolateオプションを図にしてみる

描画補完処理について探ってたところ、unityのRigidbodyInterpolationが勉強になりそうだったので、理解のため調べてました。

RigidbodyInterpolationについては以下の記事で詳しく書かれています。
https://ekulabo.com/rigidbody-interpolate

こちらの記事でも軽く触れられてますが、それぞれのオプションの振る舞いについて具体的な例題＋図式を交えて書いてみようと思います。
といっても基本的にはこちらのアンサーの簡約＋図式化になります。
https://answers.unity.com/questions/767134/physics-what-is-interpolate-extrapolate-discrete-c.html

### 例題
* 物理演算処理(fixedUpdate)がt=0.0s, t=0.5s, t=1.0s, t=1.5s, ...というような一定タイミングで計算されるとする。
* ここでt=1.2sのときに描画処理を行われた際、実際どのように描写されるか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81823/26431fa4-b619-61c4-9fbf-a64f4d237272.png)


#### none（デフォルト設定）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81823/6d4ba8a9-ae2d-6374-3ddc-110a87af3dad.png)

最も直近であるt=1.0s時のパラメータを使って描画します。一切補間処理をしないので当然負荷も軽いですが、見た目がカクカクしがち。

#### extrapolate（外挿補間）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81823/c69574a8-6c25-be41-48a1-6761e2a525cb.png)


オブジェクトのvectorなどを使えば、次に来る位置は予測できます。このオプションではそれを利用してt=1.2時の位置を予測描画します。
`none`に比べてスムーズになりますが、あくまで予測なので状況によっては変な位置に描画される可能性があります。

#### interpolate
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81823/6d83bbf6-3a5c-060b-6cb9-d9c409ce8a31.png)

このオプションに設定してると最新ではなく、敢えて１ステップ古いパラメータを使って描画してると考えられます。
例えば描画タイミングがt=1.0sだった時、最新のパラメータは1.0sのものになりますが、そこであえて一個前のデータであるt=0.5sのときのパラメータを使用します。そうすることでt=1.2sの時は、0.5~1.0sの2点間での補間によって算出可能になります。（t=1.2sを一ステップ前の基準で考えるとt=0.7s相当）
算出済データを使うので`extrapolate`と比べて補間精度が高くなります。ただし負荷も高めとのこと。

### 注意
interpolationの具体的振る舞いについては公式リファレンスでも詳細が無いため、あくまで想像になることに注意。ただ、

>  Interpolation will always lag a little bit behind but can be smoother than extrapolation. 

という[公式の表現](https://docs.unity3d.com/ScriptReference/RigidbodyInterpolation.Interpolate.html)や、[こちらの記事](https://ekulabo.com/rigidbody-interpolate)での実験画面でもinterpolateオプションでは遅れて描画されていることから、過去データを使っていることは間違いないようです。