OmniAICreator/Qiita-1.07M huggingface dataset:
Ruby on Rails Tutorial 2章

# ミス一覧  
引用先が多すぎるので割愛

 - bundle installを実行時、「Could not locate Gemfile」と表示されて失敗した  
- toys_appに移動してませんでした　バカかよ　　　
 - Qiitaに投稿するにあたって改行ができなくて参る
- スペースを入れると改行可能らしいです、MarkDown 方式へ理解が足りてないので何とかしたいところ  
プレビューでリスト表記がクッソ大文字に化けてビビることがちょくちょくある
 - なんとかUsersファイルの起動に成功。思ってたよりいろいろできてビビった、Railsってホントに楽なんですね  
なによりうれしい
 - コラム2.2のREST理論、意味が分からない　リソース化ってなんだよ……  
後でなんとかする
 - micropostsを実行するときになんか失敗。  
The action 'index' could not be found for ApplicationController  
って出てくる何これ？
- route.rbのコードがusersに変更しなおしてなかったわこれ
 - validatesを加えてmicropostsを実行したらエラーが発生した
- 再実行かけたら直った　なにそれ
 - 演習2.15の問題文の意味が分からない　なんだshowページの編集って  
言葉通りの意味なら、関連付けたmicropostsをuser/1の画面に出せってことですかね
Laravelで0始まりの数字文字列をDBから取得した時、String型からInt型に自動変換（0除去）される罠

# 環境
PHP：7.1.3
Laravel：5.3.31
MySQL：5.7.17

# テーブル構成
sample_numbersテーブル

| カラム     　　       |型　　　　　　  |    NULL   |    サンプルの値   |
|:--------------------|:--------------|:---------:|:---------:|
| number (主キー)      |varchar(255)   |     ×     |     012345678     |
| created_at          |timestamp      |     ×     |     割愛     |
| updated_at          |timestamp      |     ×     |     割愛     |

# 課題
numberに格納された0始まりの数字文字列をコレクションでDBから取得（データアクセス）した際、String型からInt型に自動変換される事象が発生しました。

〜自動変換の動き〜
　DBにある状態　012345678
　コレクションの状態　012345678
　コレクションからデータアクセスした状態　12345678

今回、0始まりのまま値を使用する必要があるので、自動変換をしないようにする方法を探していました。

# 対応
該当モデルの `$casts`プロパティ にカラム名と変換したい型を指定すると、データアクセス時に型変換をしてくれることがわかりました。

```php:app/Models/SampleNumber.php

class SampleNumber extends Model
{
    protected $primaryKey = 'number';

    protected $fillable = [
        'number'
    ];

    // ここを追加
    protected $casts = [
        'number' => 'string'
    ];
}
```


#補足
String型からInt型に変換されるのは、 Laravelのコレクションからデータアクセスしたとき。
コレクションの状態で `dd(変数);` などでデバッグし、値を見た場合はまだString型のままです。
PHPのexec(),system()でタイムアウト処理する


PHPスクリプト全体のタイムアウトならset_time_limit()でよさそうだが、exec()単体で止めたかった。
http://php.net/manual/ja/function.set-time-limit.php

OS依存だけど、UNIX系なら動く

```php
exec("timeout 10 XXXXX.....", $retval);

system("timeout 10 XXXXX.....", $retval);

if ($retval === 124) {
    echo 'timeout';
}
```

Windowsだとtimeoutはsleep的な動きなので動きません
Macも多分ないので動きません
ちなみにLaravelだとsystem()はエラー出力した瞬間Exceptionに飛んでった。
tig操作 超簡易版

#tigって？

Gitのコミット操作（ステージ/アンステージ）が素早く行えるようになる。
diffの確認がしやすくなる。
というコンソール上のgitブラウザらしい。

インストールは`homebrew`から簡単にできる

#操作
基本の上下移動は`方向キー↑↓`でもできる
操作に困ったらとりあえず**`q`連打**でtig操作を終了できる

####起動

```zsh
#起動（gitプロジェクト内で）
tig
#ステータスビュー表示
s
```
####ステータスビュー

```zsh
#ステージ操作（↑↓で選択して）
u
#diffビュー表示（ファイル選択した状態で）
Enter
#1つ前の画面に戻る（連打でtig終了）
q

#コミットコメント入力（git commit と同等）
shift+c
```
####diffビュー

```zsh
#カーソル移動
j
k
#ページ単位で上下移動
ctrl-u
ctrl-d

#ハンク（変更点のかたまり）単位でステージ/アンステージ
u
#行単位でステージ/アンステージ
1
#ファイル選択（左側のビュー）を上下移動
shift-j
shift-k
#diffビューを閉じる
q
```

#参考
>https://qiita.com/YusukeHosonuma/items/d81397ab70a8c26a2902
https://qiita.com/suino/items/b0dae7e00bd7165f79ea
【TouchDesigner】読み込んだ3D*obj形式ファイルをジオノードとして管理する

#読み込んだ3D*obj形式ファイルを使いたかった
普通にobj形式ファイルをドラックアンドドロップするだけではFineIN SOPとして表示されるだけなので、
ジオノードして使用するための準備方法です。

#手順
GeometryCOMPを置きます。
<img width="600" alt="obj_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/80661/7a2a9f2f-2574-933b-f502-057ead03dce0.png">
<br>

ズームしてGeometryCOMPの中に入るとデフォルトのTorus SOPが表示されますので、
Torus SOPを選択して消します。
<img width="600" alt="obj_02.png" src="https://qiita-image-store.s3.amazonaws.com/0/80661/9c874336-5b32-3a19-0fdc-19db73358a99.png">
<br>

objファイルをドラッグアンドドロップでGeometryCOMPの中に挿入します。
<img width="600" alt="obj_03_edit.png" src="https://qiita-image-store.s3.amazonaws.com/0/80661/15b50066-091c-9a85-3314-592b68dcf0a4.png">
<br>

そのままだとFineIN SOPなので、Null SOPを挿入して繋ぎます。
<img width="600" alt="obj_04_edit.png" src="https://qiita-image-store.s3.amazonaws.com/0/80661/20de1ed3-de37-9ed6-6f00-cad395ecb91c.png">

<img width="600" alt="obj_05.png" src="https://qiita-image-store.s3.amazonaws.com/0/80661/b24a3c86-b036-a124-f18b-4be1396796c1.png">
<br>

繋いだNull SOPのRenderフラグとDisplayフラグ（紫色と青色の点）を有効にします。
<img width="600" alt="obj_06_edit.png" src="https://qiita-image-store.s3.amazonaws.com/0/80661/edf1331c-4d5e-dc43-f256-a209aafc8743.png">
<br>

ズームアウトで1つの階層に上がるとジオノードで使用できることができると思いますので、
あとはTouchDesignerで３DCGをレンダリングする際の必要最低限３点セットのRender TOP、
Camera COMP、Light COMPを繋げるとレンダリングが確認できると思います。
<img width="600" alt="obj_07.png" src="https://qiita-image-store.s3.amazonaws.com/0/80661/22200f22-8289-730f-6be4-13b6b757a672.png">
CreateJS 2.0が待望のES Modules対応。使い方とwebpackによるバンドル方法

「CreateJS」は、リッチコンテンツを制作するためのJavaScriptライブラリです（参考記事「[CreateJS入門サイト \- ICS MEDIA](https://ics.media/tutorial-createjs/index.html)」）。リッチコンテンツ作成には便利なものの、ES Moduleに対応していないのがネックでしたが、**[次期バージョン2.0](https://github.com/createjs/easeljs/tree/2.0)でES Moduleに対応します**。その使い方とwebpackによるバンドル方法についてまとめました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/67884/27a91955-027c-b57a-ddf4-32ed2b701f86.png)


# 使用準備
まずはプロジェクトを初期化します。

```bash:プロジェクトの初期化コマンド
npm init -y
```

続いて、ES Moduleに対応したCreateJS 2.0のパッケージ「[@createjs/easeljs](https://www.npmjs.com/package/@createjs/easeljs)」、「[@createjs/tweenjs](https://www.npmjs.com/package/@createjs/tweenjs)」をインストールします。

```bash:CreateJSのインストールコマンド
npm i @createjs/easeljs @createjs/tweenjs
```

バンドル用にwebpackをインストールします。

```bash:webpackのインストールコマンド
npm i -D webpack webpack-cli
```

インストール手順に不明であれば、次を参照ください

- webpackのインストール手順：[webpack 4入門 - ICS MEDIA](https://ics.media/entry/12140)
- `-y`や`-D`など：[GulpやSassを使う時に覚えて幸せになったnpmの便利な使い方](https://qiita.com/tonkotsuboy_com/items/32b56eef5c8114cae43c)

# CreateJS系のモジュールをimport

webpackで`Stage`や`Tween`などを読み込む場合は、次のようにします。

```js:JavaScript
// EaselJS系の読み込み
import { Shape, Stage } from '@createjs/easeljs/dist/easeljs.module';
// TweenJS系の読み込み
import { Tween } from '@createjs/tweenjs/dist/tweenjs.module';
```


# サンプルコードとバンドル

「[CreateJS でのトゥイーンの作成方法 \- ICS MEDIA](https://ics.media/tutorial-createjs/tween.html)」のデモを元に、CreateJSのES Moduleを使って簡単なデモを作りました。

```js:JavaScript
// EaselJS系の読み込み
import { Shape, Stage } from '@createjs/easeljs/dist/easeljs.module';
// TweenJS系の読み込み
import { Tween } from '@createjs/tweenjs/dist/tweenjs.module';

const stage = new Stage('myCanvas');

const circle = new Shape();
circle.graphics.beginFill('DarkRed').drawCircle(0, 0, 50);
stage.addChild(circle);

circle.x = 300;
circle.y = 200;

Tween.get(circle, {loop: true})
  .wait(300)
  .to({x: 740, y: 400, scale: 2}, 700)
  .to({x: 400, y: 0, scale: 1.4}, 1200)
  .to({x: 500, y: 300, scale: 3}, 1200)
  .to({x: 300, y: 200, scale: 1}, 700);

update();

// 毎フレームステージを自動更新する
function update() {
  stage.update();
  requestAnimationFrame(() => update());
}
```

webpackを用いてバンドルします（参考記事「[設定ファイル不要のwebpack 4で、BabelやTypeScriptのゼロコンフィグのビルド環境を作ってみる \- Qiita](https://qiita.com/clockmaker/items/8620cf6bd99d810dbf2a)」）。

```bash:バンドルコマンド
npx webpack --mode production
```


## デモが動作している様子
バンドルが成功し、デモが動作している様子がこちらです。

![](https://qiita-image-store.s3.amazonaws.com/0/67884/6cabfa61-a8e8-da52-bede-1f207169305f.gif)

ソースファイルはこちらにアップロードしました。

- [kanobox/180409_createjs_esmodule](https://github.com/tonkotsuboy/kanobox/tree/master/180409_createjs_esmodule)


# 最後に
CreateJSのES Module対応は長らく待ち望んでいた機能でした。早く正式リリースされますように。

なお、本エントリーにおけるCreateJSモジュールの確認バージョンは次のとおりです。

確認バージョン

- @createjs/easeljs: 2.0.0-beta.2
- @createjs/tweenjs: 2.0.0-beta.1
【備忘録】クラウドサーバーを使ってみる(4)--NavicatをAlibaba Cloud 上のデータベースを接続

Navicatを使ってクラウドサーバー[AlibabaCloud](https://jp.alibabacloud.com/campaign/coupon-freetrial?spm=a21mg.8121077.1027958.dbanner1.2e9d1c7bwrApqi)上のデータベースを管理したい。
設定に挫折しながらやっと成功したので、備忘として書いておく。



##1.Alibaba Cloudのセキュリティーグループを設定：
特に一行目にmysqlの3306　Portを外部訪問を可能にする。

![FireShot Capture 12 - ECS Management Console_ - https___ecs.console.aliyun.com_.png](https://qiita-image-store.s3.amazonaws.com/0/117741/9cc9fec3-e039-ea5e-3dbc-a6a3f1800010.png)

##2.クラウドサーバのmysqlを設定する:

user root に接続権を付与(他のuserも可能)
123456は仮のパスワードです。

```mysql
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;  
mysql>FLUSH PRIVILEGES;  
```
##3.Navicatで接続してみる
a. **"基本"**の所に、クラウドサーバのmysqlの接続権があるユーザーの名前とパスワードを入力
port:3306

b.**"SSH"**の所に、
ホスト：クラウドサーバーのIPアドレス
ユーザー名：クラウドサーバーのユーザー名
パスワード：クラウドサーバーのパスワード

##4.知識補足
ユーザー名はjoyで、ホスト名は10.2.1.11だけ訪問できるように接続権を付与する
[参考資料](https://qiita.com/pinohara/items/481c95dc4c8c2568bf8d)

```mysql
mysql>grant all privileges on *.* to 'joy'@'10.2.1.11';
```
Raspberry Pi > Geany > Line Wrapping > Alt + D, L

```txt:動作環境
Raspberry Pi 2 Model B (以下RPi)
Raspbian Jessie
Python 2.7.9
Geany 1.24.1
```

RPiで使っているGeanyというeditor。

行のwrappingをするにはどのショートカットを使うのか?

https://askubuntu.com/questions/310312/how-to-configure-geany-to-wrap-lines
> answered Oct 29 '13 at 11:09
user25656

1. <kbd>Alt</kbd> + <kbd>D</kbd>
2. <kbd>L</kbd>

上記のキーは、メニュー[Document] > [Line Wrapping]に該当する。

### 検索用キーワード

- Word Wrap
    - Sublime Textでの機能名
[react-native][ios] error: PCH was compiled with module cache path が出たら。。

# 現象
git pullしてきて、他の人のPCHを読みに行き、エラーが出る。
その他、プロジェクトをコピーしたときにもよく起きる。

# 対応
```
{react-nativeのアプリのディレクトリ}/ios/build/ModuleCache
```
を消す。

=> ビルドし直す
=> 動いた！
Link > awk > cat httpd.conf | awk NF > 空白とタブだけの行を除く方法 by nakataSyunsukeさん

@nakataSyunsuke さんの[コメント](https://qiita.com/qoAop/items/7141830086629c3a1abd#comment-aef272b684bbaf2fbadc)
にて下記のコードが紹介されています。

```shell-session
% cat httpd.conf | awk NF
```

詳細はコメントを参照ください。

Qiitaコメントは検索できないので、リンク記事としました。

### 試してみた

https://ideone.com/L3voeR

```txt:awk書式
NF
```

```txt:stdin
pi=3.14

napier=2.718
```

```txt:stdout
pi=3.14
napier=2.718
```
clickの引数をまとめて受け取る話

pythonでコマンドラインツール書く時ほぼ必須レベルの、
clickっていうコマンドラインの引数とかいい感じにしてくれるイケてるpackageがあるけど、

http://click.pocoo.org/6/
http://blog.amedama.jp/entry/2015/10/14/232045

デコレータに指定したオプション名と引数名を対応させないとならないので、
オプションが多いと冗長になってしまうのがちょっと残念で、なんとかしたい。

# before

```python:a.py
# coding: utf-8
import click

@click.command()
@click.argument('arg_a')
@click.argument('arg_b')
@click.option('--opt-c')
@click.option('--opt-d')
def cmd(arg_a, arg_b, opt_c, opt_d):
    print(locals())

if __name__ == '__main__':
    cmd()

```

```bash:bash
$ python a.py  a b --opt-c c --opt-d d
{'opt_d': 'd', 'opt_c': 'c', 'arg_b': 'b', 'arg_a': 'a'}
```

# そこで

とりあえず `**kwargs` で受けるようにしてみれば、まとめて受け取れるけど、
dictだとtypoが検知しづらいつらみがあるので、もうひと工夫。

ビルトインの `type` には2種類の使い方があって、
http://jfine-python-classes.readthedocs.io/en/latest/type-name-bases-dict.html
`type(name, bases, dict)` で新しい型のインスタンスを作って、dict の内容で初期化できる。

# after

無名structみたいな感じで使える。
元が `**kwargs` なので、普通に引数で受け取った残りをdictでまとめるのもできる。

```python:b.py
# coding: utf-8
import click

@click.command()
@click.argument('arg_a')
@click.argument('arg_b')
@click.option('--opt-c')
@click.option('--opt-d')
def cmd(**kwargs):
    opts = type('hoge', (object,), kwargs)

    print(dir(opts))
    print(type(opts))
    print(opts.__name__)
    print(opts.arg_a)
    print(opts.arg_b)
    print(opts.opt_c)
    print(opts.opt_d)

if __name__ == '__main__':
    cmd()
```

```bash:bash
$ python b.py  a b --opt-c c --opt-d d
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'arg_a', 'arg_b', 'opt_c', 'opt_d']
<class 'type'>
hoge
a
b
c
d
```

っていう話。
AWS CLI のインストールと設定

Amazon Web Service Command Line Interface (AWS CLI) は AWS のサービスをコマンドラインから操作するためのツールです。
必要なことは [AWS Command Line Interface - ユーザーガイド](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-welcome.html)に書いてありますが、長いのでここでは私が普段行っている手順を記載します。
環境が適合する方の参考になれば幸いです。

## 動作環境

### OS 

※ 以下いずれか

 - Windows 上に docker をインストールして、Linux 系コンテナにアタッチ
 - Windows 上の cygwin
 - 最近の Mac
 - AWS EC2 インスタンスを Linux 系 OS で起動

### python

※ 以下どちらか

 - python2 (2.6.5+)
 - python3 (3.3+)

## 準備

1. どうにかして AWS アカウントを取得します
2. アクセスキーを 1 つ作成します
    1. Webブラウザを起動して AWS マネジメントコンソールにログイン
    2. 「IAM」を選択
    3. 「自分のユーザ」を選択、もしくは新規作成
    4. 「認証情報」タブを選択
    5. 「アクセスキーの作成」をクリック。
    6. 「.csv ファイルのダウンロード」をクリックし保存します。デフォルトで「accessKeys.csv」という名前です。セキュリティキーはこの作成時一回しかダウンロードできないので、大事に保管しましょう。

※ <font color=red>とても重要なこと</font>
ここで作成したセキュリティキーは AWS を使うためのパスワードのようなもので、これを誰かに知られてしまうと自分の AWS アカウントを無断で使用されたりします。セキュリティの甘いサーバに置いておく、誰かと共有する、github に commit する等は絶対にやめましょう。
また、頻繁に作り直すことをお勧めします。

## AWS CLI をインストール

自分の環境でコンソールを起動し、以下コマンドを実行します。

```Bash
 pip install awscli --upgrade --user
```

pip がない場合は以下のようにしてインストールしてください。

```Bash
curl -O https://bootstrap.pypa.io/get-pip.py
python get-pip.py --user
```

curl がなければ curl をインストールするか、wget で代用するか、web ブラウザでアクセスするなりして `get-pip.py` ファイルを入手しましょう。

## AWS CLI のアカウント設定

[準備](#%E6%BA%96%E5%82%99)でダウンロードした「accessKeys.csv」ファイルを開いてください。
この情報を AWS CLI に登録します。

「accessKeys.csv」ファイルの例 (<font color=red>赤字部</font>を使用します)
 > AWS_ACCESS_KEY_ID=<font color=red>AKIAIOSFODNN7EXAMPLE</font>
 > AWS_SECRET_ACCESS_KEY=<font color=red>wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY</font>

```Bash
$ aws configure
    AWS Access Key ID [None]: <your AWS_ACCESS_KEY_ID> (短いほう)
    AWS Secret Access Key [None]:<your AWS_SECRET_ACCESS_KEY> (長いほう)
    Default region name [None]:ap-northeast-1
    Default output format [None]:json
```

region と output について

- region name – 使用する AWS リージョンです。今回は東京を設定していますが、[ここ](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions)から選択できます。
- output format – コマンド実行結果の出力形式です。「text」等も使用できますが、個人的には 「json」形式をお勧めします。私は出力結果を python スクリプトで読み込んで実行結果の確認に使用しています。
Xcodeのprojectで最後に開発されていたversionを確認する方法

## 前振り
先任からprojectを引き継いだものの、どのXcodeのversionで開いたらいいか悩んだ経験ありませんか？
**私はあります！！💢**

projectによって、どのversionのXcodeで開発していたかを、引継書とかREADMEとかコミットメッセージ…最悪口頭で知ることもあるでしょう。
しかし、それすらない時、どうしたらいいでしょうか？

私の知る限りでは3パターンあります。

* xcodeprojの`LastUpgradeCheck`を確認する
* ipaからinfo.plistの`DTXcode`を確認する
* 総当たりでXcodeで開いてbuildする

## パターン1. xcodeprojの`LastUpgradeCheck`を確認する
XcodeのVersion editor(![スクリーンショット 2018-04-06 13.25.49.png](https://qiita-image-store.s3.amazonaws.com/0/154832/d80b759c-9df4-3e4f-cead-21cadb3dd14c.png))でプロジェクトの内部構成を見れます。
その中で`LastUpgradeCheck`を探すと、 `LastUpgradeCheck = 0920` のように記述されています。

読み方としては、![名称未設定.jpg](https://qiita-image-store.s3.amazonaws.com/0/154832/e526da72-b65b-b0f0-87b8-2f013dd2bf00.jpeg)のようになっています。

下1桁だけは、PatchVersionかと思いましたがXcode7.3.1の時は`LastUpgradeCheck = 0730`で記載されているためよくわかりません。

### 注意点
まともなprojectであれば、LastUpgradeCheckで最後に開発していたXcodeのversionを知ることができますが、1つ注意点があります。

**`LastUpgradeCheck`が更新されるのは、warning「Update to recommended settings」を解消した時のみです。**

↓を見てもらえればわかるかと思います。

1. Xcode 7.3.1でprojectを作成した時、`LastUpgradeCheck = 0730`と表示されている
![スクリーンショット 2018-04-06 11.12.25（2）.png](https://qiita-image-store.s3.amazonaws.com/0/154832/1efeee4a-21fc-9d8e-8e47-a9809b97a80f.png)

2. 「1.」のprojectをXcode 9.2で開いた時、`LastUpgradeCheck = 0730`と表示されている
![スクリーンショット 2018-04-06 11.15.49（2）.png](https://qiita-image-store.s3.amazonaws.com/0/154832/652b47b6-0e14-b5f2-0122-a8333ece17e2.png)

3. 「1.」のprojectをXcode 9.2で開き、warning「Update to recommended settings」を解消した後、`LastUpgradeCheck = 0920`と表示されている
![スクリーンショット 2018-04-06 11.28.56（2）.png](https://qiita-image-store.s3.amazonaws.com/0/154832/b6776a2c-228b-2ccc-e260-a6b93ac652a6.png)

## パターン2. ipaから`Info.plist`の`DTXcode`を確認する
ipaがあれば、以下の手順でbuildされたXcodeを特定できます。

hoge.ipaから特定する手順
1. `hoge.ipa`の拡張子を`hoge.zip`に変える
2. `hoge.zip`を解凍する
3. Payloadフォルダの中にある`hoge.app`を右クリックでメニューを開き、「パッケージの内容を表示」を選択する
4. `Info.plist`を開き、`DTXcode`の値を確認する

Xcode 7.3.1でbuildしたipa内に含まれるInfo.plist
<img width="712" alt="スクリーンショット_2018-04-06_17_32_22.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/154832/8f78fd6b-fd96-3abe-13d5-755c8ba7d357.jpeg">

Xcode 9.2.0でbuildしたipaに含まれるInfo.plist
<img width="712" alt="スクリーンショット_2018-04-06_17_33_06.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/154832/bcb2b21d-82b3-ac30-0684-53112f2d1ee0.jpeg">

`Info.plist`で確認する場合は、PatchVersionまで記載されているのが良いですね。

## パターン3. 総当たりでXcodeで開いてbuildする
文字通り、あらゆるversionのXcodeで開き、buildが通るどうかで判断します。
postmanでCSVファイルからパラメータをセットしてリクエストする

APIの検証に[postman](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop/related?hl=ja)が便利です。

▼postman
![logo.png](https://qiita-image-store.s3.amazonaws.com/0/186397/cb5ab222-5373-8b9c-d1b6-7d098b8329a1.png)

動的にパラメータ変えながらリクエストしたくて調べたら、CSVインポート機能があったので紹介です。

# CSVから動的にいパラメータを設定する方法
## 1.リクエストを作る
http://example.com/ にemailとpasswordを送る例です。
パラメータは以下のようにセットします。

| key|value| 
|:-----------------:|:------------------:|
| email|{{email}} |
| password|{{password}}|

![01.png](https://qiita-image-store.s3.amazonaws.com/0/186397/8b72bdc2-1c2f-8e2b-fd54-9c5f1fffd519.png)

設定したらSaveで保存します。

## 2.CSVを作成する
１行目にkeyを記載して、２行目以降にセットしたいvalueを記載します。

今回は以下のような感じで。

```csv:sample.csv
email,password
sample-01@example.com,password-01
sample-02@example.com,password-02
```

## 3.runnerで実行
### 3-1.runner起動
画面左上の「runner」をポチッといきます。

![02.png](https://qiita-image-store.s3.amazonaws.com/0/186397/000e8907-eb33-6ce5-38f7-da40943a6009.png)

### 3-2.CSVセット
runnerが起動したら、Data FileにCSVをセットします。

一応sample.csvの内容をPreviewで確認しましょう。
![03.png](https://qiita-image-store.s3.amazonaws.com/0/186397/bad576bf-7580-8673-0627-6c51da3d631d.png)

こんな感じです。
![04.png](https://qiita-image-store.s3.amazonaws.com/0/186397/6771abe3-e73b-bf50-c3d6-b8137054f294.png)

### 3-3.実行

今回２行分実行するので、Iterationを２にしました。
プレビュー画面でもIterationの表示があるので、CSVに合わせて処理したい行数をセットします。
あとはRunするだけです。　:runner_tone3:=３

![05.png](https://qiita-image-store.s3.amazonaws.com/0/186397/cd95f97b-059d-03cd-ac76-742caeb676da.png)

簡単ですね。いろいろ使い道がありそうです。!
Unityでdllを参照するメモ

##1.Visual Studioでクラスライブラリプロジェクトを作成する。
Visual Studioで新規プロジェクト->クラスライブラリを作成。
##2.Buildする。
ソースコードを書いてビルド。
デフォルトではDebug/binにdllが作成されるが、プロジェクトのプロパティより"出力するパス"のオプションをUnityのプロジェクトファイルにしておくと変更するときに一度ですむ。
##3.Unityのプロジェクトに加える。
前述の出力パス変更、またはBuildされたdllファイルをUnityのプロジェクトにドラッグすることによって、dllのアセンブリの参照が効くようになる。
データベース設計

##１. アプリケーションに必要なデータを洗い流す
|画面|機能|項目|
|:--|:--|:--|
|サイトトップ画面|ログイン|メールアドレス|
|||パスワード|
|ユーザ登録画面|ユーザ情報入力|名前|
|||メールアドレス|
|||パスワード|
|||プロフィール画像|
|マイトップ画面|プロフィール表示|名前|
|||プロフィール画像|
||投稿画像一覧表示|投稿画像|
|||タイトル|
|||店舗名|
|||投稿ユーザ|
|画像投稿画面|画像投稿|投稿画像|
|||タイトル|
|||店舗名|
|||ひとこと|
|投稿画像の個別表示画面|投稿画像の個別表示|投稿画像|
|||投稿ユーザ|
|||タイトル|
|||店舗名|
|||ひとこと|
|||投稿日時|
|||投稿コメント（複数個）|
|||コメント投稿ユーザ（複数個）|
|コメント投稿画面|コメント投稿|投稿コメント|
|||コメント投稿ユーザ|
|||コメント先画像|
|||コメント投稿日時|

##2.　簡単なデータベース設計を行う
* カラム名を考える
* データ型を考える

|型名|用途|
|:--|:--|
|string|文字列|
|text|テキスト(不定長文字列)|
|integer|整数|
|float|浮動小数点数|
|decimal|日時|
|timestamp|タイムスタンプ|
|time|時刻|
|date|日付|
|binary|バイナリ文字列|
|boolean|真偽値|
|references|他のテーブルへの外部キーの定義、_idのついた整数|
* 作成後,実際にシミュレーションして確認

【例】

| userid | name | mailaddress | password | profileimage |
|:--|:--|:--|:--|:--|
| Integer | text | text | text | text |

##3, データベースの関連付けを考える
* 内容の変更(update)が行われた場合、動作の複雑化、関連付けへの影響がないか確認する
* 関連付けを行ったら`(任意の名前)_id`をつける


| title | postimage | userid | shopname | caption | postdate |
|:--|:--|--:|:--|:--|:--|
| 海鮮丼 | http://locahost/images/posts/kaisendon.jpg | 1 | 寿司のうおマサ | お給料日にやさしいワンコインランチです！ | 2017/7/21 13:20 |

* カラムに設定するその他の制約について
今回、例にしたuseridのようなプライマリキーとなっているカラムには、以下のようなルールがデータベースで自動的に設定されます。全てのレコードを区別するためのIDとして必要なルールですので、INDEX以外は覚えておいてください。

AUTO INCREMENT　  新しいデータが保存されるたびに、データベース側でIDを1ずつ増やして採番する
NOT NULL 　　　　　IDに空のデータを保存することを禁止する
UNIQUE 　　　　　　IDについてはテーブル内で重複することを禁止する
INDEX 　　　　　　　検索速度を早くするために索引を作成する
Realsense D435 を Macで動かす

<a href="https://github.com/IntelRealSense/librealsense/blob/master/doc/installation_osx.md" target="_blank" title="Realsense D435 を Macで動かす">Realsense D435 を Macで動かす</a>のにいろいろハマったのでメモ。

#１．Xcodeの”Command Line Tools”をインストール
Macのターミナル上で
$ xcode-select --install

#2. Homebrewをインストール
<a href="https://brew.sh/index_ja" target="_blank" title="Homebrewのサイト">Homebrewのサイト</a>の最初に載っていたコマンド
\$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

ではProxy関連のエラーがでたので、
\$ /usr/bin/ruby -e "$(curl -x http://proxy.xxx.xxx.co.jp:10080/ -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
のようにして実行。

ただし、その後の
\$ brew install libusb pkg-config
\$ brew install homebrew/core/glfw3
\$ brew install cmake
などでもProxy経由ではエラーがでたので、結局Proxyを使わないネットワークに接続しなおして対応。

#3. <a href="https://github.com/IntelRealSense/librealsense" target="_blank" title="librealsenseのgit">librealsenseのgit</a>からファイル群をdownload

#4. 以下の手順でXcodeを起動
\$ cd hogehoge/librealsense
\$ mkdir build && cd build
\$ cmake .. -DBUILD_EXAMPLES=true -DBUILD_WITH_OPENMP=false -DHWM_OVER_XU=false -G Xcode
\$ open librealsense2.xcodeproj

#5. ビルドターゲットをrealsense-viewerにして、Xcodeでビルド

#6. <a href="https://www.intel.com/content/www/us/en/support/products/128255/emerging-technologies/intel-realsense-technology/intel-realsense-cameras/intel-realsense-depth-camera-d435.html" target="_blank" title="Realsenseのファームウェア">Realsenseのファームウェア</a>のアップデート
ファームウェアが古いままでは動作しなかった。
ファームのアップデートだけはWindowsで対応。

<a href="https://qiita.com/OTL/items/ce49410580730d6dd499" target="_blank" title="参考にしたサイト">参考にしたサイト</a>

Mac版のTouchDesignerではrealsenseに対応していないし、Windows版でもまだD435に対応していなかった・・。
Ubuntu Tomcat-catalina.outのローテーション設定

tomcatのcatalina.outを世代管理するためにローテーションの設定をした際のメモ

◇実行環境
Ubuntu 16.04.3
Apache Tomcat/8.5.23

◇ログローテートにviでtomcat8を作成
　※名前は適当に。ここではtomcat8とする。
\# vi /etc/logrotate.d/tomcat8

以下を設定する。
\============================================================
/opt/tomcat/logs/catalina.out
{
    copytruncate
    daily
    rotate 31
    compress
    copytruncate
    missingok
    create 0644 root root
}
\============================================================

※オプション詳細
copytruncate：
　copyの動作を行った後、元のログファイルの内容を消去する
daily：
　ログローテーションを毎日行う
rotate：
　残す世代の数を指定する
compress：
　圧縮する
copytruncate：
　ログファイルのコピー後に元ファイルの中身を削除する
missingok：
　指定のログファイルがない場合でもエラーを出さない
create：
　ローテーション後に空のログファイルを新規作成。ファイルのパーミッション、ユーザー名、グループ名を指定可能
C++ Builder XE4 > LME288 (2018-04-06版) (Windows 7) > 対処 > DEPにilink32.exeとbcc32.exeを登録

```txt:動作環境
C++ Builder XE4
```

LME288 が発生してビルドできなくなったXE4環境。

https://stackoverflow.com/questions/28929516/c-builder-xe7-lme288-error
> answered Nov 18 '15 at 15:05
manlio

Data Execution Preventionの設定にilink32.exeを追加するとのこと。

1. コントロールパネル > システム > システムの詳細設定 > 詳細設定タブ
2. パフォーマンス > 設定
3. データ実行防止タブ
4. 「次に選択するものを除くすべてのプログラムおよびサービスについてDEPを有効にする」チェックをつける
5. [追加(D)...]ボタン押下
6. `C:\Program Files\Embarcadero\RAD Studio\11.0\bin\ilink32.exe`を選択
7. 適用
    - >> Incremental Linkerが一覧に追加される
8. [追加(D)...]ボタン押下
9. `C:\Program Files\Embarcadero\RAD Studio\11.0\bin\bcc32.exe`を選択
    - >> Embacardero C/C++ Compilerが一覧に追加される
10. PC再起動

ilink32.exeの対処だけではLME288エラーが再発したので、bcc32.exeもDEPに足した。

再起動後、以下のプロジェクトでLME288は出ていない。

- 新規プロジェクト
- 既存プロジェクト

油断はできない。

### link

- [C++ Builder 10.2 Tokyo Update 3 > LME288 (2018-04-06版) (Windows 10) > Link: C++ Builder XE7 LME288 Error](https://qiita.com/7of9/items/160bc3825c28c234e17e)
- [C++ Builder XE4 > LME288 (2018-04-06版) (Windows 7) > Link: editbinを使った対処 > Windows10向け](https://qiita.com/7of9/items/d5631fd6eefcb4989b04)
- [c++ builder / bug > Link > LME288の回避策](https://qiita.com/7of9/items/86b872fe9b4986973454)
- [c++ builder > LME288 (2015-06-20版) > Enable to perform link (リンクできません)の回避策](https://qiita.com/7of9/items/9c51a3d961c768d8881f)


### 再発した

(2018/04/11)
再発した。

DEPの設定は残っている。

IDEを再起動後(OS再起動なし)、正常動作に戻った。
Gitの署名

同じ内容の記事が既にありますが自分用の備忘録です.
macOS + Fishでの設定手順です.

```sh
$ brew install gnupg pinentry-mac gpg-agent
$ gpg --version
gpg (GnuPG) 2.2.5
libgcrypt 1.8.2
...
$ vi alice_gpg.txt
Key-Type: RSA
Subkey-Type: RSA
Key-Length: 4096
Subkey-Length: 4096
Expire-Date: 0
Name-Real: alice
Name-Email: alice@example.com
Name-Comment: alice gpg key
Passphrase: mypassphrase
%commit
%echo done
$ gpg --gen-key --batch alice_gpg.txt
$ gpg --list-keys alice
$ gpg --armor --export XXXXXXXXXXXXX | pbcopy
```

`pbcopy`でクリップボードにキーが保存されているので、GitHub等にキーを登録します.

キーを削除したいときは以下の手順で、`secret`から削除します.

```sh
$ gpg --list-keys alice
$ gpg --delete-secret-key alice
$ gpg --delete-key alice
```

## Fishでの設定
自分の環境はFishで使ってるので以下の感じで初期化してます.

- `~/.config/fish/conf.d/gpg.fish`

```sh
# Launch GPG Agent or connect to it
set -x GPG_TTY (tty)
export GPG_AGENT_INFO="$HOME/.gnupg/S.gpg-agent:0:1"
if [ ! (pgrep -x -u $USER "gpg-agent" | head -1) ]
  set -el DISPLAY
  echo "Invoking gpg-agent"
  gpg-connect-agent /bye
end
```


## macOS だと`pinentry-curses`で日本語使えない

HomeBrewでインストールしたものは日本語は使えませんでした、
多分自力でビルドすれば多分いけますが、ここは大人しく`brew install pinentry-mac`で済ませましょう.

### pinentry-macに切り替える

- `~/.gnupg/gpg-agent.conf`

```
use-standard-socket
pinentry-program /usr/local/bin/pinentry-mac
```

`gpg-agent`が起動していると設定が反映されないので、反映されない場合は一旦終了してください.

- `gpgconf --kill gpg-agent`

## Gitで使う

どのキーを利用するかと、デフォルトで署名するようにします.
自分の場合、リポジトリ毎に管理したいので `--global` は付けずにやっています.

```sh
git config user.signingkey XXXXXXXXXXXXXXXX
git config commit.gpgsign true
```
チェビシェフ多項式による関数近似:Juliaで眺めてみる。

チェビシェフ多項式を使って、関数を近似する方法をまとめる。
最後にデルタ関数を例にして近似された様子をJulia 0.6.2でgifアニメにした。

## チェビシェフ多項式とは
チェビシェフ多項式とは、$-1 \le x \le 1$の範囲で
$$
T_{n}(x) = \cos (n \arccos x)
$$
で定義される関数である。もう少しわかりやすく書くと、$x = \cos t$
$$
T_{n}(x) = \cos (n t)
$$
と書くことができて、cosの加法定理を使ってバラバラにしていくとどんどん計算できる。
そして、この多項式は漸化式：
$$
T_0(x) = 1
$$
$$
T_1(x) = x
$$
$$
T_{n+1}(x) = 2 T_{n}(x) - T_{n-1}(x)
$$
に従う関数である。

##チェビシェフ多項式の直交性
チェビシェフ多項式には、以下のような直交性がある
$$
\frac{2}{\pi (1 + \delta_{n0})}\int_{-1}^{1} T_n(x)T_m(x)\frac{dx}{\sqrt{1-x^2}} = \delta_{nm} 
$$
この直交性を使うと、任意の$-1 \le x \le 1$の範囲にある関数を
$$
f(x) = \sum_{n=0}^{\infty} a_n T_{n}(x)
$$
とチェビシェフ多項式で展開することができる。
これは、この式の両辺に$\frac{2}{\pi (1 + \delta_{n0})} T_m(x)/\sqrt{1-x^2}$をかけて$x$で積分すれば確かめることができて、
$$
\frac{2}{\pi (1 + \delta_{m0})}\int_{-1}^{1} f(x)T_m(x)\frac{dx}{\sqrt{1-x^2}} = a_n
$$
という係数を用いれば良いことがわかる。

##デルタ関数の展開
試しにデルタ関数を展開してみよう。展開係数は
$$
a_n = \frac{2}{\pi (1 + \delta_{m0})}\int_{-1}^{1} \delta(x)T_m(x)\frac{dx}{\sqrt{1-x^2}} = \frac{2T_{m}(0
)}{\pi (1 + \delta_{m0})}
$$
である。
これを使ってプロットしてみよう。
言語はJulia 0.6.2を用いる。
Juliaは高速で書きやすい言語で、
www.juliabox.com
で簡単に試すことができる。
デルタ関数のチェビシェフ多項式展開とそのカットオフ依存性のgifアニメを描画するJuliaコードは

```julia:chebyshev.rb
using Plots
gr()

function calc_f(nmax,x)
    f = 0.0
    ax = acos(x)
    Tn(n) = cos(n*π/2) 
    for n in 0:nmax
        an = 2*Tn(n)/(π*(1+ifelse(n==0,1,0)))
        f += cos(n*ax)*an
    end
    return f
end

L = 200
x = linspace(-1,1,L)

@gif for nmax in 1:100
    plot(x,calc_f.(nmax,x))
end
```
と書ける。これを実行すると、

![tmp.gif](https://qiita-image-store.s3.amazonaws.com/0/246113/93a9e61e-4c1e-4c0d-6b06-4ae824825187.gif)

となる。
dev.toに匹敵する速度を出せるWordPressテーマを開発した話

本日、
無料
WordPressテーマ
 [Godios.]() 
をリリースしました。

![demo.gif](https://qiita-image-store.s3.amazonaws.com/0/135478/b0c2e9cf-cbb9-1b10-c99c-9f15cc50cd06.gif)



[公式サイト]()
を見ていただけるとわかると思うのですがページが一瞬で遷移しています。
どうでしょう、[dev.to](https://dev.to)と同じくらい速いんじゃないでしょうか。

この記事ではテーマを高速化するにあたって用いたテクニックを書いていきたいと思います。



## 圧縮
テーマに含まれている画像・CSS・JSファイルの圧縮。
画像は[Optimizilla](http://optimizilla.com)・[TinyPNG](https://tinypng.com)、CSSは[CSS Minifier](https://cssminifier.com)、JSは[JSCompress](https://jscompress.com)を使用しました。

## CSS・JSファイルの遅延読み込み
レンダリングをブロックするファイルが大量にあると表示が遅くなりますので、JSファイルはdeferまたはasync属性を付与し、CSSファイルはインライン、またはJSで非同期に読み込んでいます。

## 無駄なSQLクエリを減らす
データベースへのアクセスが多いと負荷が掛かる上、速度的にも影響が出るため不必要なクエリを省きました。
具体的には、get_theme_mod()でテンプレートごとに設定値を一回一回取得するのではなく、functions.phpでget_option()を使い、一度に全ての設定値を取得しグローバル変数に格納。テンプレートではグローバル変数から設定値を使うようにしています。

## WP_Queryのno_found_rowsをtrueに設定
記事を取得する時に使うWP_Queryですが、パラメータにno_found_rowsを設定しないとデフォルトでno_found_rowsがfalseとして実行されます。
no_found_rowsがfalseだと何が起こるかというと**全ての記事数を取得します。**
これはページネーションを行う際に使用するもので、ページネーションを使わない場面（関連記事など）では無駄な処理が増えるのでno_found_rowsをtrueに設定しています。

記事数がほとんどない状況ではそんなに影響はないと思いますが、1000、1万と増えてきた場合に影響が出てきます。
ましてやテンプレート毎にfalseで実行された場合、悲惨なことになります。（いつでもどこでもno_found_rowsを設定していないテーマを良く見かけます。）

## Lazy Load
読み込み速度向上のため、Lazy Load（画像・iframeの遅延読み込み）を導入しました。
Lazy Load有効時、不可視範囲のimgタグにダミー用の極めて小さいインライン画像を読込み、可視範囲に入った際に本来の画像を読み込むようにしています。

ライブラリは[lazysizes](https://github.com/aFarkas/lazysizes)を使いました。
当初、[Layzr.js](https://github.com/callmecavs/layzr.js)を使っていたのですが、後述するpjaxとの相性が良くなかったためlazysizesに変更。

## pjaxの導入
高速化に関して、これが一番効果がありました。
pjax有効時、ヘッダー・フッター・サイドバーはファーストビューでのみ読込み、2回目からはコンテンツ部分のみを読み込むようにしています。
ライブラリは[Barba.js](https://github.com/luruke/barba.js)を使用。
プリフェチをデフォルトで有効化しています。

## jQueryではなく素のJavaScriptで（※追記 2018/4/26）
当初pjaxの遷移処理をjQueryを使って行っていましたが、機能追加に伴い動作がモッサリしてきたので8・9割方素のJavaScriptで書き換えました。
計測してみるとjQueryは素のJavaScriptに比べて数倍から数十倍遅かったので、こういった速度を追い求めるものには向いていないですね。便利ですが。

以上がテーマ側で行った施策になります。


## その他の高速化
正直、テーマだけではdev.to速度を出すことは厳しいと思います。

[公式サイト]()
ではサーバー側での対策も行いましたのでざっと書いておきます。（逆にGodios.を使ってサーバー側での対策をしっかり行えばこれくらいの速度は誰でも出せるということです。）

サーバー：KUSANAGI for AWS
インスタンスタイプ：t2.small
・PHP 7.2
・SSL対応
・HTTP/2対応
・bcache、fcacheの有効化
・ブラウザキャッシュの有効化
・gzip圧縮転送有効化


※CDNは使っていません。

## PageSpeed Insights
最後にトップページのPageSpeed Insightsの点数を載せておきます。
スマホ
![speed-insights-sp.png](https://qiita-image-store.s3.amazonaws.com/0/135478/c45ceae1-e08d-7b26-a87f-683540794c63.png)

PC
![speed-insights-pc.png](https://qiita-image-store.s3.amazonaws.com/0/135478/4014d534-c8c1-22d6-0758-87df2c5048c5.png)


アナリティクス・アドセンスが入ってるのでその分がマイナスになっています。
pinentryってなんだ

GnuPGで署名する時にパスフレーズとか入れるやつでした.
- [pinentry](https://www.gnupg.org/software/pinentry/index.html)

もう少し具体的に言うとパスフレーズ等の入力ダイアログ群で対話的に値を取得できます.
入力ダイアログ群っていうのは実装が色々あってコンソール内でテキストベースのダイアログとか、GUIのダイアログとかの実装がある感じです.

自分の環境だと以下のインストールしてました.

- pinentry-curses
- pinentry-mac
- pinentry-tty

## 対話型シェル

対話型なので以下のように実行していきます.

```sh
$ pinentry
OK Pleased to meet you
SETTITLE Title
OK
SETDESC PIN Code
OK
SETPROMPT PIN
OK
SETOK Ok
OK
SETCANCEL Cancel
OK
GETPIN
D 1234
OK
BYE
```

上記の場合は`pinentry-curses`を使っていると`GETPIN`で以下のようなダイアログが開きました、一昔前に良く見たやつですね.
[curses](https://ja.wikipedia.org/wiki/Curses)はテキストユーザインタフェースのライブラリです.

```
        ┌──────────────────────────────────────────────┐
        │ PIN Code                                     │
        │                                              │
        │ PIN ****____________________________________ │
        │                                              │
        │      <Ok>                        <Cancel>    │
        └──────────────────────────────────────────────┘
```

命令一覧は以下のコマンドで確認できます.

```sh
$ pinentry
HELP
```
【PHP】アンパサンドの謎

# 理想
```php
$str = "trim&";
var_dump(rtrim($str,"&amp;"));
// string(4) "trim"
```

# 現実
```php
$str = "trim&";
var_dump(rtrim($str,"&amp;"));
// string(3) "tri"
```

なんで？

## 追記
コメントで指摘をいただきました。rtrimの第二引数はリストで、渡された文字列にマッチするものを消していたのですね。なるほど...
C++ Builder 10.2 Tokyo Update 3 > LME288 (2018-04-06版) (Windows 10) > Link: C++ Builder XE7 LME288 Error

```txt:動作環境
RAD Studio 10.2 Tokyo Update 3
```

XE4にて発生しているLME288問題。

10.2 Tokyoでも起きるというのを以下に見つけた。
https://stackoverflow.com/questions/28929516/c-builder-xe7-lme288-error

対処法は色々あるので、実際に10.2 Tokyoで起きたときに試すことになるだろう。

### 備考

> Suddenly, out of the blue, I get the LME288 linker error.

意訳「突然、まったく突然、LME288リンクエラーが出るようになったよ！」

out of the blue(突然)でなく、once in a blue moon(めったにない）にしてください。

本当に。
constexprラムダ式で包んだconstexpr変数をconstexprではない関数に渡すお話

g++7.2.0とclang5.0.0で確認してたはず。

## 方法
constexprではない通常の関数にconstexpr変数を渡すことはできません。

```c++
// これはもちろんコンパイルエラー

void func(char const* x)
{
    constexpr auto y = x;
}

int main()
{
    constexpr auto x = "abc";
    func( x );
}
```

そこで、C++17で追加されたconstexprラムダ式を使います。constexprラムダ式でconstexpr変数を包むことで、通常の関数でもconstexpr変数を渡すことができるようになります。

```c++
// これは通る

template <typename F>
void func(F f)
{
    constexpr auto y = f();
}

int main()
{
    // 明示的にconstexprラムダ式を書いた場合
    func( []() constexpr { return "abc"; } );

    // constexprラムダ式でもキャプチャできるので
    constexpr auto x = "abc";
    func( [&]{ return x; } );
}
```

条件を満たせばラムダ式のconstexprを暗黙にすることができる（[N4659 [expr.prim.lambda.closure]/p4](#参考)）ので、引数がない場合に`()`を省略できることを合わせて、以下のように簡単にすることができます。

```c++
int main()
{
    func( []{ return "abc"; } );
}
```

## 最後に
これを応用することで、printfのフォーマットのコンパイル時チェック等ができたりします。
　
　

・・・やっぱり本当にいいの、これ？

## 参考
ラムダ式を使って関数の引数からconstexpr変数を定義できたことに関する質問 - スタック・オーバーフロー
https://ja.stackoverflow.com/questions/38123/
Elasticsearchでcurlとqueryを使ったドキュメントの削除

---
- 業務でElasticsearchのデータ削除の機会があったので日本語でメモ。

```
# queryの条件にhitするドキュメントを削除
curl -XDELETE localhost:9200/index_name/type_name/_query?pretty=true -d '{{ 削除したい条件のquery }}'
```
※もちろんlocalhost:9200, inedex_name, type_nameはそれぞれの環境に合わせて変更

---
### 例
```
# delete_ngというフィールドが存在しないドキュメントの検索
GET index_name/type_name/_search
{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "missing": {
                "field": "delete_ng"
              }
            }
          ]
        }
      }
    }
  }
}
```

これを削除したかったら、下記のcurlで削除可能。

---
#### リクエスト
```
curl -XDELETE localhost:9200/index_name/type_name/_query -d '{"query":{"filtered":{"filter":{"bool":{"must":[{"missing":{"field":"delete_ng"}}]}}}}}'
```


#### レスポンス
```
{
  "_indices" : {
    "index_name" : {
      "_shards" : {
        "total" : 5,
        "successful" : 5,
        "failed" : 0
      }
    }
  }
}
```
C++ Builder XE4 > LME288 (2018-04-06版) (Windows 7) > Link: editbinを使った対処 > Windows10向け

```txt:動作環境
Windows 7 Pro(32bit)
C++ Builder XE4
```


### 関連

- [c++ builder / bug > Link > LME288の回避策](https://qiita.com/7of9/items/86b872fe9b4986973454)
- [c++ builder > LME288 [2015-06-20版] > Enable to perform link (リンクできません)の回避策](https://qiita.com/7of9/items/9c51a3d961c768d8881f)

### LME288再来

LME288再次来临(zàicì láilín)
(LME288 comes again)

今回のLME288はたちが悪く、OS再起動でも解消しない。

色々手を尽くしたが、解消しない。

以下を見つけた。
[LME288エラーの対応](http://commutative.world.coocan.jp/blog3/2017/12/lme288.html) by あやたろうさん

> おお、ついにWindows 10の側でバグが解消されたかと気をよくしていたら、あるWindows Updateのあと、またLME288エラーが頻発するようになった。

Windows Updateで状況が変わり、問題が再発するようだ。

~~記載の方法を試すかどうか。~~

Windows 7 Proには記載のツールがないのかもしれない。

HAMarker.exeで検索しても該当するコマンドは見つからない。

### 余談

そのうち、「引っ越ししました」の多い角田光代さんの年賀はがき「引っ越ししました 2009年版」「引っ越ししました 2010年版」「引っ越ししました 2011年版」状態になりそうだ。

LME288に対する根本解決を知りたい。

下記の記事を書いた。根本解決であればいいが。

- [C++ Builder XE4 > LEM288 (2018-04-06版) (Windows 7) > 対処 > DEPにilink32.exeとbcc32.exeを登録](https://qiita.com/7of9/items/c01c23894389f881825e)
Google Chromeでメモリリーク

皆さんGoogle Chrome使っていますか？
私はメインブラウザとして使用しています。
ところが最近メモリリークが酷いようで、、、

![2018-04-06_11h23_53.png](https://qiita-image-store.s3.amazonaws.com/0/134325/17a0efda-026d-3f9a-d1de-1a9e5d2c0649.png)

このようにChromeプロセスだけで2GBとか3GBとか余裕で使っています。
少しだけ調べてみたのですがどうやらデベロッパーツールを開くとモリモリ消費することが分かりました。
ただし、閲覧するページにもよるようであまり変化のないページもありました。

詳しいことは調査中なのでまだ分かっていませんが、先程のスクリーンショットの状態からデベロッパーツールを閉じただけの状態が以下です。

![2018-04-06_11h24_29.png](https://qiita-image-store.s3.amazonaws.com/0/134325/a63e0664-2638-a63b-c6de-5c3b95dbad5d.png)

1.8GB程ズドンと回復しました。
デベロッパーツールを使って作業中に何か重いなーと感じることがあったら確認してみましょう。

疑わしいのはjavascriptか非同期通信あたりかなーとなんとなく思っていますが詳しい調査はできていません。
ご存知の方いらっしゃればコメントか何かで教えてくれたら嬉しいです。

Google Chrome
バージョン: 65.0.3325.181（Official Build） （64 ビット）

#2018/06/01追記
ブラウザの設定でjavascriptをオフにしたところ再現しなくなったので、あーそういうことかと思い広告をブロックする拡張機能を入れました。
ピタっと再現しなくなりました。
めでたしめでたし。
[Nginx][ngx_pagespeed]

[ngx_pagespeed](https://www.modpagespeed.com) モジュール導入して、[画像最適化系のフィルター](https://www.modpagespeed.com/doc/reference-image-optimize)使った時に以下のような Warning が発生することがあります。

```
[warn] 26433#26480: [ngx_pagespeed 1.13.35.2-0] [0405/031002:WARNING:resource_fetch.cc(195)] Fetch failed for resource url https://example.com/wp-content/uploads/2018/04/xhoge.jpg.pagespeed.ic.xxxxxxxxxx.jpg
```

画像最適化する際の元画像取得に失敗してます。
そんな時は [LoadFromFile オプション](https://www.modpagespeed.com/doc/domains#LoadFromFileScriptVariables) を使いましょう。

```
pagespeed ProcessScriptVariables on;
pagespeed LoadFromFile "https://example.com" "$document_root";
```

`https://example.com` から Fetch しないで、サーバのローカルディスクから直接ファイル取得してよしなに最適化してくれます。
arduinoでRGB LED

#概要
arduinoでRGB LEDやってみた。

#写真
![MVC-004F.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/9ad7ad86-d882-6185-74f4-79000b03f269.jpeg)

#RGB LED
WS2812
独自のシリアル方式
制御方法
図の通りのタイミングで1または0の信号を作ります。 
GRBの順に各色8bit,1モジュール当り24bitのデータが必要です。 
上位ビットを先に送信します。MSB FIRST。
７個連結なので、近い側のデータから受信します。
DIに入ったデータは、そのモジュールのデータが揃うまでは、DOには出力されません。 
そのモジュールのデータが揃った場合、DIから入ったデータはそのままDOに出力されます。 
データを送った後、50us以上、LOWが続くと、すべてのモジュールでデータが確定しLEDへの出力が反映されます。

signal

            350ns   800ns    (+-150ns)
    0:     |^^^^^|__________|
    
               700ns   600ns  (+-150ns)
    1:     |^^^^^^^^^^|_____|
    
                 >50us
    RESET: |________________|


#回路図
![image](https://qiita-image-store.s3.amazonaws.com/0/18104/2019db9b-65ad-70ae-cead-bacd4ce588ca.png)

#サンプルコード

```
#define USE_HSV
#include "WS2812.h"

#define LEDCount 		7
#define outputPin 		6
WS2812 LED(LEDCount);
cRGB value;
int h = 0;
byte steps = 15;
byte sat = 255;
byte val = 127;
long sleep = 100;

void Cycle()
{
	value.SetHSV(h, sat, val);
	h += steps;
	if (h > 360)
	{
		h %= 360;
	}
}
void setup()
{
	LED.setOutput(outputPin);
}
void loop()
{
	Cycle();
	for (int i = 0; i < LEDCount; i++)
	{
		LED.set_crgb_at(i, value);
	}
	LED.sync();
	delay(sleep);
}



```

以上。
[CakePHP3]本番リリースしたのに反映されない時！キャッシュを削除するシェル

バージョン 3.3.0 以降

```sh
bin/cake cache clear_all
```

キャッシュがファイルなら、一時ディレクトリ配下の以下のファイルが消えます。

- persistent/*
- models/*
- view/*

## 参考

### Cache シェル
https://book.cakephp.org/3.0/ja/console-and-shells/cache.html

### ORMキャッシュシェル
https://book.cakephp.org/3.0/ja/console-and-shells/orm-cache.html
これは特定の接続情報だけや、テーブルだけのキャッシュを削除することができます。
Google IME日本語変換で微調節メモ


Kotoeri の場合

|ショートカット(カーソル)|(mod)|動作|
|---|---|---|
|`Shift + ←`|`^Q`|選択範囲を一文字減らす|
|`Shift + →`|`^W`|選択範囲を一文字増やす|
|←|`^F` or `^S`|変換候補カーソルを前に|
|→|`^B` or `^D`|変換候補カーソルを次に|

## 例

「きょうかいしゅうにいきます」の変換で、
『今日会社に行きます』にしたいのに
『協会集に行きます』と変換されてしまう場合。

1. 協会|集|に|行きます
    * `Shift + ←` x2(範囲縮める「きょうかい」→「きょう」)
    * `→` (次の候補へ)
2. 今日|回首|雨|に|行きます `
    * `Shift + →` (範囲増やす「かいしゅ」→「かいしゅう」)
3. 今日|回収|に|行きます
    * `Enter` で終わり



![ime.gif](https://qiita-image-store.s3.amazonaws.com/0/40717/45a19b98-a478-c823-a0a4-9a26c91b1ef7.gif)
file-loader を使っている webpack でエントリーポイント毎に出力ディレクトリを分けたい

## やりたいこと

表題の通り。

```
{
  entry: {
    a: "./src/a.js",
    b: "./src/b.js",
  }
}
```

の様なエントリーポイントを作ったときに出力を

```
dist/a/a.js
dist/b/b.js
```

のようにしたい。

基本的に output の filename に`[name]/[hash].js`のように指定すれば`[name]` のプレースホルダーにエントリーポイント名が入るが、file-loader などで読み込んだファイルはこのプレースホルダーが使えず、dist 直下に出力されてしまったりする。
もっというと html plugin とかコピープラグインとかでファイル移動する場合も出力ディレクトリごとに設定を書かなきゃいけなくて面倒だし辛い。
file-loader は `[name]` プレースホルダーをチャンク名(エントリーポイント名)ではなくファイル名として埋めてしまうのでディレクトリを分けて出力することができないっぽい。

## 解決方法

webpack の multiple-compiler なコンフィグを作る。

https://stackoverflow.com/a/38132106/2014050

entry と output の組毎に設定を作ってやって、それらを配列として `webpack.config.js` でエクスポートする。
output の `path` を出力したいディレクトリにしてしまえば、loader とか plugin で `[name]` を意識したりする必要もなくなって楽。
CentOS 7(RHEL 7) 初期設定

はじめに
--------

AWS EC2 等で CentOS7 か RHEL7 を用意したところからスタートしてください。

ロケール、タイムゾーンの設定
--------------------------

```ruby:ロケールの設定
localectl set-locale LANG=ja_JP.utf8

localectl set-keymap jp106

localectl set-keymap jp-OADG109A

localectl set-x11-keymap jp-OADG109A
```

```ruby:タイムゾーンの設定
timedatectl set-timezone Asia/Tokyo
```

Proxyの設定
-----------

```ruby:サーバのProxy設定
cat << 'EOF' > /etc/profile.d/proxy.sh
PROXY="http://proxy.xxxxxxxxx.co.jp:port_no/"
export http_proxy=$PROXY
export https_proxy=$PROXY
export ftp_proxy=$PROXY
export HTTP_PROXY=$PROXY
export HTTPS_PROXY=$PROXY
export FTP_PROXY=$PROXY

export no_proxy=localhost,127.0.0.0/8,xxxx.co.jp,yyyy.co.jp
export NO_PROXY=$no_proxy
EOF

chmod 644 proxy.sh

source proxy.sh
```

```ruby:yumのProxy設定
# /etc/yum.conf に Proxy設定を追加
proxy=http://proxy.xxxxxxxxx.co.jp:port_no/
```

```ruby:パッケージの最新化
yum update -y --skip-broken
```

```ruby:rpmのProxy設定
# /etc/rpm/macros に Proxy設定を追加
%_httpproxy proxy.xxxxxxxxx.co.jp
%_httpport port_no
```

```ruby:wgetのインストール
yum install wget -y
```

```ruby:wgetのProxy設定
# /etc/wgetrc に Proxy設定を追加
http_proxy = http://proxy.xxxxxxxxx.co.jp:port_no/
https_proxy = http://proxy.xxxxxxxxx.co.jp:port_no/
ftp_proxy = http://proxy.xxxxxxxxx.co.jp:8080/
```

```ruby:gitのインストール
yum install git -y
```

```ruby:gitのProxy設定
git config --global http.proxy http://proxy.xxxxxxxxx.co.jp:port_no/
git config --global https.proxy http://proxy.xxxxxxxxx.co.jp:port_no/
```

社内CA証明書の設定
-----------------

```ruby:社内CA証明書の設定
# anchorsに移動
cd /etc/pki/ca-trust/source/anchors
# 社内CA証明書を入手
wget https://xxxxxxxx.co.jp/xxx.ca
# 社内CA証明書を登録
update-ca-trust extract
# 設定確認
grep `xxx.caの中身` /etc/pki/tls/certs/ca-bundle.crt
```

さいごに
--------

インフラをコードで管理するために、今回の内容を Ansible の Playbook に しておきます。
[CentOS 7(REHL 7) 初期設定 Ansible 編](https://qiita.com/kouji-kojima/items/102254bdb860ead3f89b)
AWS 非対応のEC2インスタンスタイプに無理やりAutorecovery設定してみる

## この検証の内容について
**Autorecovery非対応のインスタンスタイプで Autorecovery っぽい自動復帰を実現するという建設的な内容ではありません**のでご注意ください。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-recover.html

AWSが提供する --alarm-actions ec2:recover を、上記ページで謳っている対応インスタンス以外に設定したらどうなるのかというあまり実りのない検証です。

## 検証内容
i3タイプのインスタンス立てて以下AWS CLI投げ込んでみました。

~~~
aws cloudwatch put-metric-alarm \
 --alarm-name ec2_auto-recovery_i-0473259c7788121c9
 --alarm-description "EC2 Auto Recovery" \
 --metric-name StatusCheckFailed \
 --namespace AWS/EC2 \
 --statistic Maximum \
 --period 300 \
 --threshold 1 \
 --comparison-operator GreaterThanOrEqualToThreshold \
 --dimensions  Name=InstanceId,Value=i-0473259c7788121c9 \
 --evaluation-periods 1 \
 --alarm-actions arn:aws:automate:ap-northeast-1:ec2:recover
~~~

## 結果
ふつーに投入出来てしまいました。残念ながらCloudwatch側では設定時にvalidateしていないようです。

![2018-04-06_10h35_35.png](https://qiita-image-store.s3.amazonaws.com/0/99499/54cda9d9-fd40-5d70-37c8-68fe8fd65cbb.png)
※Statusが terminatedですが、これは検証完了直後にチキって削除し、その後にキャプチャした為です。CLoudwatch設定投入はStatus Runningのタイミングで検証しています。

![2018-04-06_10h38_20.png](https://qiita-image-store.s3.amazonaws.com/0/99499/ec8adcb6-fab3-c5f7-68af-16f01f42b0d9.png)
ブループリントのアクセス修飾子をデフォルトPrivateにする


こんばんわ。鈴木です。
記念すべき第一回はブループリントのアクセス制限の記事です

#まずはじめにとりあえずコード

これをエンジンに書き加えてもらうとブループリントの関数とプロパティのデフォルトアクセス修飾子が
Privateになります。
コードはUE4.17用（ちょっと古くてすいません）ですが多分同じ様な所を見つけて書き足せば大丈夫だと思います。

##メンバ関数のデフォルトPrivate化
FBlueprintEditorUtils::CreateFunctionGraph

```c++:BlueprintEditorUtils.h

            if ( bIsUserCreated )
            {
                // We need to flag the entry node to make sure that the compiled function is callable from Kismet2
//                int32 ExtraFunctionFlags = ( FUNC_BlueprintCallable | FUNC_BlueprintEvent | FUNC_Public );
                int32 ExtraFunctionFlags = ( FUNC_BlueprintCallable | FUNC_BlueprintEvent | FUNC_Private );    //追加
                if ( BPTYPE_FunctionLibrary == Blueprint->BlueprintType )
```

###結果

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223804/7f14d34c-29e8-d587-50f4-b2062668750c.png)


##メンバ変数のデフォルトPrivate化
FBlueprintEditorUtils::AddMemberVariable

```c++:BlueprintEditorUtils.cpp
    NewVar.VarType.bIsReference   = false;
    NewVar.SetMetaData(FBlueprintMetadata::MD_Private,"true");    //追加

    Blueprint->NewVariables.Add(NewVar);
```

###結果

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223804/be051858-4874-a5ee-d173-b69af57c48f6.png)


以上です。

#ブループリントを使った開発でありがちなこと

複数の開発者でブループリントを使った開発を行うと他のアセットへの参照を意図せずに追加してしまい
気づいた時にはアセット同士がルンバ(c)のブラシに絡まった髪の毛のような状態になることがあります

この状態になるといろいろなことが起こります

## 依存しないはずのアセットの読み込み

起動時に大量のアセットを読んじゃうとか
タイトル画面とかシンプルなレベルなのに、よくわからないキャラクターのメッシュが読み込まれてるとか

## 依存の無いプループリント編集時に謎のアセットが読み込まれる

イケてないブループリントインターフェイスや、ブループリントファンクションライブラリを作ってませんか？
これらはエディタを開く時に必ず読み込まれます。

## ブループリントのコンパイルが遅い

リファレンスが増えるとコンパイルが遅くなるそうです。。。

## パッケージビルドでブループリントにまつわる謎のエラーに遭遇する

これは何が原因なのか解らないのですが、関係ないアセットの編集で治ったり再発するところをみると
なにかBP間の参照が影響している可能性がある気がします。

## アクター単体テストが難しくなる

まず、ほげたつさんのすごく良い記事があったのでリンクをはっておきます
http://hogetatu.hatenablog.com/entry/2017/12/11/000638
どうでもいいですが、DIは dependency ejection だと思ってました。依存性を狂信的にちぎっていく的な。

強い相互依存が生まれていると、その一部のブループリントを複製して、入れ替えてテストするのが難しくなります
ソースコントロールを有効にしていると、編集対象が競合しているため誰かが取得しているロックが外れるのを待ったりする無駄な時間とか辛いですよね。
作業者が被らないように編集対象のアセットの分割したり、そもそもソースコントロールを無効にして作業したりと運用である程度カバーもできますが、
依存関係がなければ、Duplicateして別のBPで作業したりすることが可能です。

※個人的には作業のコンフリクトが発生し得る部分はネイティブコード推奨です。
※BPはロック不要でバージョン管理ツールでサクサクマージ可能な形式で保存してほしい。

# いざリファクタリング

このような問題を含みつつもブループリントは流れがイメージしやすかったりイテレーションも早いしでメリットも沢山あるので積極的に使うことになります。
これで問題がでなければ良いのですが、最適化やリファクタリングを行ったり(強いられたり)、ネイティブコード化したりすることがあります。

この際に
**この関数なんとなく内部呼び出し用なんだけどpublicになっている。
もしかすると外部からアクセス呼び出されている可能性が・・・**
とか
**メンバプロパティを外部から書き換えてるんですが、カプセル化とは・・・**
みたいな状況に度々遭遇します。

こうなるとまずBPを全検索して・・・みたいな悲しい作業が始まるのですが、
**private設定の変数や関数であればそのアセット内で作業が完結してくれます。**

しかしブループリントはアクセス制限設定がデフォルトでpublicとなっております。
汎用エンジンなのでまず適当にやっても動く（書ける）ことを重視しているのかもしれません。
もしこの辺りで困ったことがあれば冒頭のようなパッチを当てることで、不幸せなコードが減ってくれるかもしれません。

糸冬
プロジェクトがVisual Studioに表示されないとき

#はじめに
プロジェクトがVisual Studioに表示されないときについてのメモです。
間違いや勘違いに関しましてはご指摘いただけると幸いです。

#状況
Visual Studioを立ち上げてもプロジェクトの中身が表示されないことがありました。

![VisualStudioに表示されない.png](https://qiita-image-store.s3.amazonaws.com/0/247226/f2db4ddd-1628-aba5-ccee-1a55fcd95bf7.png)


原因は「プロジェクト名.sln」ファイルに、プロジェクトについての内容が書かれていなかったためでした。
その時したことをメモとして残します。

---
#####「プロジェクト名.sln」ファイル
ソリューションはプロジェクトの上にあるディレクトリのようなもので、.slnファイルはその構成について記しています。

#####「プロジェクト名.csproj」ファイル
個々のプロジェクトについての構成が書かれています。
csファイルが存在しても、このファイルに書かれていない場合、プロジェクトに入っておらず、Visual Studioに表示されません。
その場合、ソリューションエクスプローラーの「すべてのファイルを表示」をクリックしてください。
![すべてのファイルを表示.png](https://qiita-image-store.s3.amazonaws.com/0/247226/5190e864-18f3-3f69-302d-40d610b4f2bd.png)
点線の状態でファイルが表示されるので、表示させたい入れたいファイルを右クリックし、「プロジェクトに含める」を選ぶとプロジェクト内に格納されます。
逆にcsファイルが存在していなくてもこのファイルに書かれていると表示されます。

---

#対処
##.slnファイル

.slnファイルを開くと、「MinimumVisualStudioVersion = 10.0.40219.1」と「Global」の間に

```sln:
Project("{AB01234C-D567-89EF-0G1H-234IJK3L4567}")
      = "SlnProject", "SlnProject\SlnProject.csproj",
        "{012Z3YX4-5W6V-Y789-TSR0-1Q2PO34N5M67}"
EndProject

※{}の中の英数字は適当です。
```

上記の記述があるはずなのですが、なくなっていました。
Project以降の記述の構成は以下のようです。

```sln:
Project("{(1)(8文字-4文字-4文字-4文字-12文字)の英数字}") 
	= "(2)プロジェクト名", 
      "(3)プロジェクト名\プロジェクト名.csproj", 
      "{(4)(8文字-4文字-4文字-4文字-12文字)の英数字}"
EndProject
```

(2)はプロジェクト名、(3)はプロジェクトの「.csproj」ファイルまでの相対パスです。
新規作成時にVisual Studioがプロジェクト名のフォルダを作成し、その下に.csprojファイルが作成されています。

(1)、(4)の英数字ですが、こちらは「.csproj」ファイルに記載がありますので、そちらから取ってくるのが安全だと思います。

##.csprojファイル

.csprojファイルを開くと、
<Project >の下に<PropertyGroup>があります。
その中に<ProjectGuid>と<ProjectTypeGuids>に記載があります。


```sln:
<ProjectGuid>
    {012Z3YX4-5W6V-Y789-TSR0-1Q2PO34N5M67}
</ProjectGuid>
<ProjectTypeGuids>
    {1HK2L3F4-5M67-SE89-QP01-23X456GR7UL8};
    {AB01234C-D567-89EF-0G1H-234IJK3L4567}
</ProjectTypeGuids>
```

記述の構成は以下のようです。

```sln:
<ProjectGuid>
	{(あ)(8文字-4文字-4文字-4文字-12文字)の英数字}
</ProjectGuid>
<ProjectTypeGuids>
	{(い)(8文字-4文字-4文字-4文字-12文字)の英数字};
	{(う)(8文字-4文字-4文字-4文字-12文字)の英数字}
</ProjectTypeGuids>
```

見比べてみてわかったのですが、
まず(1)は(う)と対応しています。プロジェクトの形式を指定しているようで、同じ形式のプロジェクトであれば同じ英数字のようです。

(4)は(あ)と対応しています。プロジェクト個別の内容のようで、同じ英数字になっているものは見かけません。

(い)に関しては.csprojファイルの下のほうに<ProjectExtensions>に記載があります。

```sln:
<ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
```
また、同様の記載が「.csproj.user」ファイルにもあります。

##.slnファイルに記入
.csprojファイルの(あ)、(う)を.slnファイルの(4)、(1)にはめ込んだものを.slnファイルに記入するとVisual Studioでプロジェクトが表示されました。

#おわりに
正直に言ってしまうと.slnファイルからプロジェクトについての内容が消えた理由がよくわかってません。Visual Studioや設定ファイルをいろいろ見ているうちに間違えて消してしまったようです。
GitやSubversionなどのバージョン管理システムを使用し、こまめにコミットしておけばすぐに戻せたので、環境の準備って大事ですね。
【Salesforce:ケース】メール受信時にケースの項目を変更する方法

# これは何？
SalesforceのService Cloudのケース機能で、メール受信時にケースの特定項目を変更する方法です。

Salesforceには何かをトリガーにして、特定アクションを起こすために、
- ワークフロー
- プロセスビルダー
を使う場合が一般的かと思いますが、今回はプロセスビルダーを使いました。

ワークフローでもできるかな？と思ったのですが、
僕のやり方が間違っているせいか目的のことができなかったのでプロセスビルダー使いました。

# 実現したいこと
少し細かく書きます。

ケースのステータス管理のために「状況」という項目があります。
- 新規
- 保留中
- エスカレーション済み
- 完了

また、保留中には、「保留理由詳細」という項目を紐付けて、さらに以下にステータスを管理しています。
- 要返信（こちらが何かアクションしないといけない）
- 返信待ち（お客さんから連絡待ち）


今回は、お客様から連絡（メール）があった場合に、
「状況」を「保留中」
「保留理由詳細」を「要返信」
にします。

# バージョン
Salesforce: Spring_18_bonsai


# やり方
最終的には以下のフローができあがります。
以下に各設定項目のスクリーンショットを貼り付けています。
設定は画像の通り進めていけば動くはずです。

![スクリーンショット 2018-04-06 10.13.24.png](https://qiita-image-store.s3.amazonaws.com/0/30859/3d722c94-8112-c68e-2503-8e070b5bf1b3.png)


## 1.プロセスビルダー起動
プロセスビルダーを起動して、新規作成します。
![スクリーンショット 2018-04-06 10.11.30.png](https://qiita-image-store.s3.amazonaws.com/0/30859/49de9c3b-4820-10ff-ecda-a5014f7c32ff.png)

## 2.対象オブジェクト
対象オブジェクトとして、メールメッセージを選択します。

![スクリーンショット 2018-04-06 10.07.24.png](https://qiita-image-store.s3.amazonaws.com/0/30859/78a63836-1b49-d8a1-c671-d19b12818aa5.png)


## 3.条件
![スクリーンショット 2018-04-06 10.07.54.png](https://qiita-image-store.s3.amazonaws.com/0/30859/ec7d5075-40d0-c64c-8bc7-7a6b1419e5bd.png)

【条件の項目】
![スクリーンショット 2018-04-06 10.19.04.png](https://qiita-image-store.s3.amazonaws.com/0/30859/e635f99f-4d09-c386-984c-d9892551257e.png)



## 4.ルール適用時のアクション
![スクリーンショット 2018-04-06 10.08.24.png](https://qiita-image-store.s3.amazonaws.com/0/30859/59743510-c7d9-0e0c-1e2d-282693ed4ca0.png)

## 終わりに
以上で完了です。
不備有れば何かコメント頂けると助かります！
vimでキャメルケース、スネークケースのmotionに対応する方法

vimのwモーション便利ですよね。
しかし、キャメルケースや、スネークケースで命名されているものは、一つの単語として認識してしまいます。
結局hlでの移動となってしまい不便です。

それを防ぐためにvimでは以下で紹介されてるプラグインがおすすめです。

http://nanasi.jp/articles/vim/camelcasemotion_vim.html

またideavimでは独自ルールで以下のキーマップが割り振られています。

```vim
[w #各ケースの前方の単語の最初の文字に移動
[b #各ケースの後方の単語の最初の文字に移動
```

なのでideavimrcに以下を設定すれば使いやすいと思います。

```vim:ideavimrc
nnoremap w [w
nnoremap b [b
```