OmniAICreator/Qiita-1.07M huggingface dataset:
【AWS】dumpファイルをmysqlにインポートする

dumpファイルはあるのと、ssh接続ができる前提(AWSでなくてもインポート部分だけはローカルとかその他でも使えると思います)
# 手順

## scpでdumpファイルをコピー
この手順はアクセス制限外部アクセスが不可の場合必要ですがいらない場合は飛ばしてOKかと思います。

```
scp -i 【sshに使うpemファイル】 【ec2にコピーしたいファイルまでのパス】ec2-user@*******:【設置したいパス基本はルートパスでいいかも？】
#圧縮されているファイルは解凍まえに入れましょう。dumpするときは基本.gzで圧縮されてるんかな？自分とこはそうだった
```

の後設置した所にssh接続する

## 解凍

```
gzip -d 【ファイル名】
#圧縮されている場合は上記で解凍
```

## インポート

```
mysql -h 【DBのendpoint】 -u 【user名】 -p 【DB名】 < 解凍したファイル名
#パスワードを求められるので入力
```

# 余談
今回はやらかしました。
内容としてはmigrationファイルを作成した時に旧verと作成したファイルの型が違っていたせいで
ファイルの中身が容量オーバーで消えてしまうという事。
旧verから型が変わっている場合があるので皆さんも気をつけましょう。

## 発生させないための対応策

migrationファイルの型チェック
普通は変更する所だけ記載するのが最近のフレームワークでよくあると思います(?)
今回起こったのはphalconというPHPのフレームワークですが、原因はまだ不明ですが、なぜか型が変わってました。というかこのフレームワーク変更しないカラムも全部書かないといけなかった(オプションが足りなかっただけ？)


ちゃんとした所は最低でも1日に1回はdumpファイル(DBなどのバックアップ)を取っていると思います。
途中から参加したのですがちゃんと一日一回バックアップを作るバッチも回っていました。（当たり前かもですが、本当に感謝です。

**これだけはまじでやりましょう。やってなかったら今すぐにでも**
※migrationや、データ操作する場合は更にやる前にdump取りましょう！！
STS ではまったところ

## デフォルトのプロジェクトフォルダが鬼門
MacでiCloudを利用していると
/User/{ユーザー名}/Documents がクラウドと繋がったりしますよね。
新規プロジェクトの場所をここに設定してしまうと権限やらなんやらでうまく動かないことがあります。

pivotal tc のサーバーが上手く立ち上がらずはまっておりました。。
まとめ記事のリンク集

随時更新します。

* [PHPのハマりポイントのリンク集 - Qiita](https://qiita.com/suin/items/3a6780bb56d740eecd10)
* [PHPの実装パターンとデザインパターンのリンク集 - Qiita](https://qiita.com/suin/items/60d5cef2959bdf7958e0)
* [エラーハンドリング関連の記事リンク集 - Qiita](https://qiita.com/suin/items/1000a7a72ad44554175c)
* [オブジェクト指向のリンク集 - Qiita](https://qiita.com/suin/items/bc24045062b289e45e96)
エラーハンドリング関連の記事リンク集

エラーハンドリング関連の設計をするにあたって個人的に参考になる記事。

* [Swiftのエラー4分類が素晴らしすぎるのでみんなに知ってほしい - Qiita](https://qiita.com/koher/items/a7a12e7e18d2bb7d8c77)
* [SwiftはどのようにJavaの検査例外を改善したか - Qiita](https://qiita.com/koher/items/e4c1d88981291c35d571)
* [Swiftのエラーハンドリングはなぜ最先端なのか - Qiita](https://qiita.com/omochimetaru/items/c30f7a021fb9b8f0fa92)
* [「例外を投げない」という選択肢をとる言語 - Qiita](https://qiita.com/suin/items/bf67ceaba72a9cdcb1ac)
* [PHPの例外 - Qiita](https://qiita.com/koriym/items/17cfd1bbbaead1a2e5a9)
* [アサーションを使用したプログラミング](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/language/assert.html)
* [なぜGo言語はエラー返却に例外機構を使わないのか - 嵐の小舟より](https://tmrtmhr.info/tech/why-does-golang-not-have-exceptions/)
* [ポケモン例外ハンドリング : まだプログラマーですが何か？](http://dotnsf.blog.jp/archives/1061565357.html)
* [Javaの理論と実践: 例外をめぐる議論](https://www.ibm.com/developerworks/jp/java/library/j-jtp05254/index.html)
* [Go言語の例外を必ず扱うような言語機能のありがたさ - 日記マン](http://i101330.hatenablog.com/entry/2018/08/26/004005)
* [Replacing Throwing Exceptions with Notification in Validations](https://martinfowler.com/articles/replaceThrowWithNotification.html)
* [Notification](https://martinfowler.com/eaaDev/Notification.html)
* [エラー処理 · Scala研修テキスト](https://dwango.github.io/scala_text/error-handling.html) 「例外安全性」「強い例外安全性」
* [Distinguish operational vs programmer errors · i0natan/nodebestpractices](https://github.com/i0natan/nodebestpractices/blob/master/sections/errorhandling/operationalvsprogrammererror.md) 操作上のエラーとプログラマーのエラーを区別しよう
* [Error Kernels – Jesper L. Andersen – Medium](https://medium.com/@jlouis666/error-kernels-9ad991200abd) Erlangの堅牢さを支える「Error Kernels」というデザインについての解説\
* [Let It Crashとは何か - mookjp.io](https://blog.mookjp.io/blog-ja/let-it-crash%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B/) Erlangのエラーハンドリング方針の一つである "let it crash" についての解説。
Route53に登録しているドメインを別AWSアカウントでも利用する

既存のAWSアカウント(**aws-1**)で既にドメインの登録を行っている場合、もう一つ（例えば開発環境）のAWSアカウント(**aws-2**)でも同一のドメインからサブドメインを切りたい場合の手順です。

今回の手順は以下のような環境を想定していますが、適宜読み替えて下さい。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/747066c9-8b0f-43bc-aa12-eb5210ed1217.png)

### 対象アカウントのプロファイルを作成

アカウントをまたいで作業が入るので、それおぞれのアカウントのプロファイルを定義します。
同一の端末から実行することを想定しているので、複数のプロファイルを定義していますが、同一の端末からする必要性はありません。

```sh
aws configure --profile aws-1
  # AWS Access Key ID [None]: AK****************5Q
  # AWS Secret Access Key [None]: cV************************************hh
  # Default region name [None]: ap-northeast-1
  # Default output format [None]:
aws configure --profile aws-2
  # AWS Access Key ID [None]: AK****************2Q
  # AWS Secret Access Key [None]: s6************************************Bg
  # Default region name [None]: ap-northeast-1
  # Default output format [None]:
```

### aws-2にホストゾーン作成

作成するホストゾーンは `dev.example.com`

```sh
ROOT_DOMAIN=example.com
SUB_DOMAIN=dev.${ROOT_DOMAIN}

aws route53 create-hosted-zone \
  --name ${SUB_DOMAIN} \
  --caller-reference `date +%Y%m%d%H%M%S` \
  --profile aws-2
```

作成したホストゾーンIDを取得します

```sh
HOSTED_ZONE_ID=$(aws route53 list-hosted-zones \
  --query "HostedZones[?Name==\`${SUB_DOMAIN}.\`].Id" \
  --output text \
  --profile aws-2)
echo ${HOSTED_ZONE_ID}
  #
```

ホストゾーンIDから作成したホストゾーンのNSレコードを取得します
これは次にルートドメインのホストゾーンにNSレコードを登録するためです

```sh
NS_RECORDS=($(aws route53 list-resource-record-sets \
  --hosted-zone-id ${HOSTED_ZONE_ID} \
  --query "ResourceRecordSets[?Type==\`NS\`].ResourceRecords[].Value" \
  --output text \
  --profile aws-2))
echo ${NS_RECORDS}
  #
```

### aws-1に、aws-2で作成したホストゾーンのNSレコードと同じ値のNSレコードを作成

レコード作成の前にルートドメインのホストゾーンIDを取得します

```sh
ROOT_HOSTED_ZONE_ID=$(aws route53 list-hosted-zones \
  --query "HostedZones[?Name==\`${ROOT_DOMAIN}.\`].Id" \
  --output text \
  --profile aws-1)
echo ${ROOT_HOSTED_ZONE_ID}
  #
```

ルードドメインのホストゾーンにNSレコードを作成します
作成するNSレコードの値は、aws-2側で作成したホストゾーンのNSレコードと同じ値を登録します

```sh
cat << EOT > change-resource-record-sets-aws-1.json
{
  "Changes": [{
    "Action": "CREATE",
    "ResourceRecordSet": {
      "Name": "${SUB_DOMAIN}",
      "Type": "NS",
      "TTL": 300,
      "ResourceRecords": [
        { "Value": "${NS_RECORDS[0]}" },
        { "Value": "${NS_RECORDS[1]}" },
        { "Value": "${NS_RECORDS[2]}" },
        { "Value": "${NS_RECORDS[3]}" }
      ]
    }
  }]
}
EOT

aws route53 change-resource-record-sets \
  --hosted-zone-id ${ROOT_HOSTED_ZONE_ID} \
  --change-batch file://change-resource-record-sets-aws-1.json \
  --profile aws-1
```

### aws-2にAレコード(例:4.4.4.4)を登録

最後にaws-2側にAレコードを作成します
今回はEC2インスタンスのパブリックIPアドレスを直接指定するよな記述ですが、AliasでALBを指定するなど、もちろん可能ですので、読み替えて下さい

```sh
cat << EOT > change-resource-record-sets-aws-2.json
{
  "Changes": [{
    "Action": "CREATE",
    "ResourceRecordSet": {
      "Name": "app.${SUB_DOMAIN}",
      "Type": "A",
      "TTL": 300,
      "ResourceRecords": [
        { "Value": "4.4.4.4" }
      ]
    }
  }]
}
EOT

aws route53 change-resource-record-sets \
  --hosted-zone-id ${HOSTED_ZONE_ID} \
  --change-batch file://change-resource-record-sets-aws-2.json \
  --profile aws-2
```
vesselを使用して最短でlaravel、dockerの環境を構築する


# 概要 
Vesselを使って簡単にdockerの環境構築ができる。

##前提
・dockerのインストールをしておく。
・laravelのインストール(こちらは下で解説しています。)


##Laravel　インストール
######・composerを使ったバージョン

・composerをインストール


```ターミナル
＄composer global require laravel/installer
```


・laravel new testを実行すると、testという名前のディレクトへ、必要とするパッケージが全部揃った、真新しいLaravelがインストールされます。

```ターミナル
$laravel new test
```



######・composerのcreate-projectコマンドを使ったバージョン
(私はこちらでやりました！)

```ターミナル
$composer create-project --prefer-dist laravel/laravel test
```


・サーバー起動するときはディレクトリを移動してください。

```ターミナル
$cd test
```

・サーバー起動

```ターミナル
$php artisan serve
```


ブラウザで　http://localhost:8000　
を確認してみてください！


サーバーは
　`Ctl + C`でストップ出来ます！

ここまでがLravelのインストールです。
これだけでも開発はできます！！

今回はここからが本番です。

##Vessel　インストール

・ディレクトリはtestに移動しておいてください！

```ターミナル
$cd test
```
・Vesselをインストール

```ターミナル
$composer require shipping-docker/vessel
```

(↓こちらは、versionによります)
・Laravel <= 5.4を使用している場合は、Vesselのサービスプロバイダを登録してください（Laravel> = 5.5は自動的にこれを行います）。

```config/app.php


'providers' => [
    // ....
    Vessel\VesselServiceProvider::class,
    // ...
];
```

・vesselコマンドファイルとDockerファイルを公開します。

```ターミナル
$php artisan vendor:publish --provider="Vessel\VesselServiceProvider"
```

・初期化

```ターミナル
$bash vessel init
```


・起動

```ターミナル
$./vessel start
```
これで終了です！
ブラウザでhttp://localhost
を開いて、確認してください！！



`＄bash vessel init` ではなく　`＄./vessel build`を使う方がいいのではないか。
と思いました。
ログが残るので
`＄./vessel start`　ではなく　`＄./vessel up`を使用しています。



一度インストールすると、次回からは`＄./vessel start`　または　`＄./vessel up`で
ブラウザでhttp://localhost　　
を開けます。
CSSリファクタリング

#使ってないCSS,スタイルを、みつけて、あぶりだして消す

reset cssとか消さないよう注意

![image.png](https://qiita-image-store.s3.amazonaws.com/0/364471/592e856c-e00c-1135-ad4a-1b1fed53cbff.png)
エラーが出ているのは気にしてはいけない

Consoleが無かったら下記で表示
![image.png](https://qiita-image-store.s3.amazonaws.com/0/364471/d3652991-7e75-13ca-45c5-9d95d2068be2.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/364471/e1b7112c-edd3-9848-f7b4-4574a8f230e3.png)


みっけ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/364471/198dec64-926a-a49d-900c-8af05164800a.png)


#SCSSに変換
https://www.css2scss.com/

#ざっくりSASSに変換

同じセレクタをソートしてまとめておくこと
http://css2sass.herokuapp.com/


#SASSチート

```sass

/* 範囲&ビルド時消えないコメントアウト 圧縮時消える */
/*! 範囲&ビルド時消えないコメントアウト 圧縮時消えない */
// 1行 & ビルド時消えるコメントアウト
```

#autoprefixer
https://autoprefixer.github.io/
[Doc] RFPの書き方と読み方

# はじめに

開発コンペに参加されている開発会社の皆様、RFPの書き方を勉強して読み方も知ろうというのが今日です。

# RFPとは
RFPとはRequest For Proposal、日本語で言うと提案依頼書です。これを読んで私たちに提案をしてください、ということです。

なので、ちゃんとRFPを読み込まないといい提案ができません。

# どうやったらRFPを読めるようになるのか

どうやって読み込めるようになるのか？
それは作ってみると読めるようになります、作るプロになると読むプロにもなれます。　ということで早速作ってみましょう。

# 目的

RFPが何か？これはもう説明しましたね。

では、なぜRFPを書く必要があるのか。　RFPはよい提案をいただく為にあるのですが、よい提案をしていただくためには、**正確かつ確実** に情報を開発会社渡す必要があります。その手法がRFPなのです。

さらに言うと、複数の開発会社さんに **正確かつ確実** に情報を伝えるためにドキュメント化する必要があります。

何度も同じことを説明していると説明が雑になったり、前日飲みすぎたため説明がうまくされなかったりと、**正確かつ確実** に伝えられない可能性をドキュメント化することによって軽減することができます。

# ステップ 1 概要

開発の目的、目標、予算、スケジュールを記載します。

## 開発の目的
なんで開発することになったのかを記載します。開発会社はこの目的をベースに隙間を埋めて提案してます。

## 目標
どの領域でいつまでにどうなっていればいいのか。重要、この設定がしっかりできていないプロジェクトは高い確率で失敗します。

## 予算
上限？決まっていなければ予算の考え方を記載します。初期でどれぐらい？保守運用でどれぐらい？予算に含まれるもの、含まれていないものは何か具体的に記載します。

## スケジュール
いつまでに提案してほしいか、いつまでに決めるのか、いつまでに開始する必要があり終わる必要があるのかを記載します。　（ 開発側の心叫び：無理なスケジュールはやめましょう、そして検討期間を短く、作業時間とテスト時間にできるだけ時間を当てましょう。）

## 規模
開発の規模がわかる定量的な情報があればここに記載します。

## 提案前提条件

提案するにあたっての条件を記載します。例えばISMSもってないとダメ、こういう実績がないとダメ、など。提案はよかったけど最後条件満たしていませんでした・・は大きな悲しみと時間の無駄を生みます。

# ステップ 2 スコープ

具体的に提案をしてほしい範囲、役割、機能、運用・保守内容、成果物を記載します。

## スコープ

提案してほしい範囲・スコープを記載。何をお願いしたいのかここに具体的に記載します。ここでは認識の違いが生まれないように、具体的かつ分かりやすく記載しましょう。

## 機能

必要な機能一覧を記載します。 必須、あればよし、あったらいいな、のようなグレードに分けると、いい選定ができるかもしれません。　必須に関してはどうして必須なのか、補足されているともっと効率のいい代替案が提案されるかもしれません。（ヒント）

## 非機能

機能ではないが、必要なものを記載。セキュリティー、品質などなどを記載します。

## 運用・保守・教育

必要な運用体制、保守体制、教育体制を記載します。

## 成果物

最後に納品されるべきもの一式を記載します。

## 体制

自社の体制、開発会社に求める体制を記載します。開発会社さん（私たちも）は基本提案は1軍が来ます、実行部隊まで１軍である必要があるか、どんな体制を求めているか記載します。自社の体制もしっかり伝えましょう。自社に体制が構築できないのであれば、それを補う体制が提案されるかもしれません（されないかもしれません・・）特にプロジェクトマネージャーとなる**人**の必須条件などを記載します。

# ステップ 3 検討事項の記載

検討事項、まだ決まってない・悩んでる・提案の段階で相談したい内容などを記載します。開発会社としては、該当項目がRFPになく、決まっていないのか、漏れているのかによって提案内容も異なります。

# ステップ 4 提案方法の記載

複数のベンダーに提案してもらう為にも公平な環境と条件を用意する必要があります。提案書はどこにいつまでに、地球が何回回ったら出すのか、どのように出すのかを記載します。

# サンプル

こちらにサンプルRFPがありますので、ご参考までに
https://www.itc.or.jp/foritc/useful/rfpsla/rfpsla_doui.html

フォーマットは読みやすい＋わかりやすければ拘る必要はありません。


# 最後に

RFPをいただく側の人は不明な点やわからない点があればすぐに聞きましょう。そしてRFPを出す側の方は、その時点で追加する情報は全ベンダーに教えてあげましょう。

書き方読み方、これでわかったでしょうか。**正確かつ確実**に要件は伝えられましたでしょうか、そして**正確かつ確実**に伝わりましたでしょうか。

ではでは。
自習用メモ　HTMLやCSS関連のメモ

@charset "文字コード"

プロパティは親子要素間で継承の有無がある
https://www.w3.org/
CSSプロパティのInherited　を確認

font-family : 記載準が優先、系統で指定も可能
color       : 色名、16進数、hsl(色相、彩度、明度)
opacity     : 透明度 0 ~ 1

list-style  : 一括指定可能 (type, position, image)
line-height : px,em,単位指定なし(line-height - font-size /2 = 上下余白)

Vertical-align : top,midle,px等（baselineから見た、imgの位置調整）

■Cssで管理するボックスモデルの仕組み
・margin
・border
・padding
・width,height

■セレクタ詳細度(降順)
・!important　: h1{ color:red !important; }
・style属性   ：h1 style="color:skyblue"

・id
・class,属性,擬似クラス
・要素,擬似要素

セラクタの詳細度は優先度の高いセレクタが複数指定されているもの
が優先される
優先度が同一であった場合は、cssの記載が後からのものが適応

■セレクタ
・クラス名 > 要素名 (クラス直下の要素)
・クラス名   要素名（クラス内の全ての要素）
・クラス名 , 要素名（クラス,要素の両者を個別指定）

■セレクタの種別
[要素名] 要素セレクタ
[#]　IDセレクタ
[.]クラスセレクタ
[要素名.]要素のクラスセレクタ
[*]全称セレクタ

■属性セレクタ
属性の一致を指定するセレクタ

・a[href="#"] (完全一致)
・a[href^="#"] (前方一致)
・a[href$="#"] (後方一致)
・a[href*="#"] (一部一致)

■擬似クラス-要素の状態に基づいてスタイリング
・:hover　等

■擬似要素-要素の特定の部分をスタイリング
・要素の前後を装飾できる
h1::before{
	content:'-';
}
h1::after{
	content:'-';
}

・data属性と併用する場合
・h1 data-subtitle = "- maintitle"
h1::after{
 content: attr(data-subtitle);
}

■複数の要素からカウント
・nth-child
子要素の中から指定できる
・nth-of-type
子要素の種別で指定

・3n
nは自然数なので3の倍率なども可能

・odd  奇数
・even 偶数

・first-child 一番上
・last-child　一番下

・not
・p:not(:last-child)

■Floatについて
要素を左右に寄せる
下の要素などに被ってしまう

clear
floatしている要素の方向と同じもの

両者のときは
clear:both;

clearはディスプレイブロック要素のみ

■ボックスモデルの種類
	display : block
	display : inline
	display : inline-block
	display : none;
	左詰め
	width,heightがある
	左詰めだがサイズ指定可能
	非表示

■px指定、％指定
	％指定は親要素を参照して決まる
■overflow	
overflowは中の要素がはみ出した時の処理方法

■margin
上下左右を指定できる

・左右余白を均等にする
margin-left: auto;
margin-right: auto;

※marginの相殺現象が起きる
垂直方向でmarginの重なりは
少ないほうが無かったことになる

■border
サイズ,種類,色
・border-radius
枠線の丸み
・指定
時計回り,上　左右　下,上下　左右

■border込みでboxサイズ調整
・box-sizing: border-box

■影
・box-shadow
引数
本体から横、縦の移動数
ぼかし具合
拡大px数
カラー
・text-shadow
拡大の引数がないので注意

■position
・relative
static時の位置から見た相対位置

・fixed
windowの左上からの相対位置
仕様上、windowが移動しても固定位置
fixedのobjectは上下要素の作用しなくなる(無視される)

・親子作用
親要素 static
子要素 absolute
ページの左上を起点に子要素が配置される

親要素　relative
子要素　absolute
親要素を起点に子要素が配置される

■複数のクラスを持つオブジェクト
・cssで後から記述されたものが優先(同プロパティ時の優先順位)

■Z数値
・初期値 0
・数値が多きものほど、後から描画される

■list-style-type
circle,lower-alpha,none
リスト時の表示方法
〇とかabcとか

・一括指定も可能、typeとimageの場合はimage優先
初期値はdisc outside none(無記入の場合)
個別設定後に一括設定をすると、同プロパティは
後から記載したものが優先されるので注意
	
list-style: circle, inside,url(../img/icon.png); 

■Verticle-alignの仕組み
文中のimg画像は、小文字aに合わせた
baselineを下限として調整される

下限を元に画像位置を調整する為のプロパティ
top,bottom,middle
5px,-5px ベースラインからの差分を表す
SVNの認証情報を忘れたとき

## 概要
TortoiseSVNで認証情報を保存して使っていたら、Windows7からWindows10に移行した時にユーザ名を忘れていてログイン出来なくなったので、ローカルキャッシュから認証情報をサルベージすることになった。

## 環境
Windows10はパーティションを切って別ドライブにインストールしたので、Windows7の頃のデータは別ドライブに残っていた。

## 認証情報の格納場所

```
C:\Users\(ユーザ名)\AppData\Roaming\Subversion\auth\svn.simple\認証情報のファイル
```

リポジトリごとに認証情報のファイルがあるのでテキストエディタで開くとユーザ名、パスワードがサルベージ出来る。

今回はユーザ名さえ分かればよかったので平文のユーザ名を確認して解決。
パスワードも調べたいときはbase64っぽい文字列に暗号化されているので復号化する必要がある。
Render PropsとHooksでシンプルな状態管理層を作る

Storybookとか、デザインシステムのドキュメントを作るときに便利。

## コード(TypeScript)

```react
import React, { useState } from 'react'

interface RenderProp {
  (
    object: {
      state: boolean
      setState: (newState: boolean) => void
    }
  ): React.ReactNode
}

interface Props {
  render?: RenderProp
  children?: RenderProp
  initialState: any
}

function StateManager(props: Props) {
  const [state, setState] = useState(props.initialState)

  return <div>{props.children({ state, setState })}</div>
}

export default StateManager

```

## 使い方
モーダルの表示非表示を制御するサンプル。

```react
<StateManager initialState={false}>
  {({ state, setState }) => (
    <div>
      <button onClick={() => setState(true)}>
        モーダルを開く
　　　 </button>
      {state && <Modal onClose={() => setState(false)}/>}
    </div>
  )}
</StateManager>
```
twitter APIで遊んでみる #1(環境作り)

##Twitter APIを発行する
以下のサイトを参考にAPIのキーを発行しました。
https://4-bh.com/twitter-api/

## 環境作り
OSは`CentOS7`を使用しました。今回は`python3`でコードを書きます。

ちなみに最初はCentoOS7標準の`python2.7`でやっていたのですが、後々エンコード周りでハマってしまいました。python3系なら大丈夫という記事をどこかで見たので、途中からpython3でやることに変更しました。その記事通り、python3系にしたらハマっていた部分でエラーが出ること無くスルリンとうまくいきました。

**yum**
まずは`pip3`を使用できるようにします。

```bash
$ sudo yum -y install epel-release.noarch
$ sudo yum -y install install python36 python36-devel python36u-pip
```

また`python3.6`を`python3`として使えるようにシンボリックリンクを貼ります。

```bash
# python3.6のパスを確認
$ which python3.6
/usr/bin/python3.6

# python3のシンボリックリンク作成
$ sudo ln -s /usr/bin/python3.6 /usr/bin/python3

# "python3" と打って正しく動作するか確認
$ python3 --version
Python 3.6.2
```

**pip**
必要なpythonモジュールを追加します。
Twitterへのアクセスは`OAuth認証`を必要とします。

PythonでOAuth認証をするために、今回は`Requests-OAuthlib`というライブラリを使ってみます。

```
$ sudo pip3 install requests requests-oauthlib
```

このライブラリの`OAuth1Session`を使用します。これには以下４つのデータを与えてあげます。

- Consumer Key
- Consumer Secret
- Access Token
- Access Token Secret

これら４つの取得方法は上記 `Twitter APIを発行する`のサイトを参考にしてください。

## ファイル構成
こんな感じです。

```
twitter                  # アプリディレクトリ(名前はなんでもいい)
├── config.py            # OAuthの認証情報
├── config.pyc           # 最初はないが、実行すると勝手にできる
└── getTimelineTweet.py  # 次回作成するアプリ
```

**config.py**
認証情報を格納しておきます。

```
CONSUMER_KEY = "********************"
CONSUMER_SECRET = "********************"
ACCESS_TOKEN = "********************"
ACCESS_TOKEN_SECRET = "********************"
```

## 終わりに
これで一旦の環境作りは完了です。次回以降、twitterからデータを引っ張ってきて遊んでみようと思います。
Unityのセキュリティパッチ当てたらビルドエラーになる件の解消


## 概要

**環境**

|Platform|Unity Version|
|---|---|
|Mac|2018.3.7f1|

数日前にUnityのセキュリティパッチが配布されたので早速適用しました。
早速ビルドエラーが一部で出ました。

それの対応をした記事です。

## やったこと

> Assets/unity-chan!/Unity-chan! Model/Scripts/AutoBlink.cs(8,23): error CS0234: The type or namespace name 'Policy' does not exist in the namespace 'System.Security' (are you missing an assembly reference?)

これはUnityChanModelで出てたエラーです。
読めばわかりますがSystem.Securityの中にPolicyがないのでエラーになってるのがわかります。
大抵こういう場合は新しいバージョンになって移動したか名前が変わったかなので適当に検索してみます。

System.Security.Policy Namespace | Microsoft Docs 
 https://docs.microsoft.com/ja-jp/dotnet/api/system.security.policy?view=netframework-4.7.2
当然MSのドキュメントが引っかかります。存在はするみたいですね。
では新しいバージョンに自分のプロジェクトが対応できてないとかですかね。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/116607/1396f018-c7b0-e916-3bd8-cd9f0ac88d9f.png)

その辺りのことを設定するのは大体SettingのPlayerです。
ビルドエラーになってた時は上図が.NET 2.0になってました。互換性を保つためでしょう。
特に2.0のバージョンは必要ないので.NET 4.xに上げます。
上げたらビルドエラーはなくなりました。

対応方法が合ってるかは大丈夫かは知りませんが、とりあえずビルドエラーはなくなりました。
まぁやってることも特に問題ないとは思うので多分大丈夫でしょう・・・と思いたい。

問題は互換性を保たないといけない古いライブラリ使ってるものとかですかね。
seabon.jointplotに相関係数とp値を書き込む

# seaborn.jointplotで同時分布を書く

* Seabornモジュールの [jointplot](https://seaborn.pydata.org/generated/seaborn.jointplot.html?highlight=jointplot#seaborn.jointplot) は同時分布（ヒストグラム付き散布図）を簡単に描ける

例えばirisデータを使うと、

``` {python}
import seaborn as sns
df = sns.load_dataset('iris')
sns.jointplot(x=df["sepal_length"], y=df["sepal_width"])
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/185939/33c1ee8f-a778-071a-086d-931d8a8c5cf4.png)

こんな感じで簡単にグラフが描ける。

# 相関係数をグラフ上に書き込む

* 調べていると、少し古い記事ではjointplotを使ったときにピアソンの相関係数とp値がグラフ内に自動的に書き込まれている。羨ましい。それ欲しい。
* seabornの新しいバージョン(0.9.0)では [jointplot](https://seaborn.pydata.org/generated/seaborn.jointplot.html?highlight=jointplot#seaborn.jointplot) のデフォルト引数を見ると、 `stat_func = None` になっている上、公式で非推奨(*Deprecated*)になっている。
* 仕方がないのでscipyのstatsを使ってピアソンの相関係数とp値を計算し、annotate(意：注釈)に渡して書き加える→`.annotate(stats.pearsonr)`
 
※もちろんpeasonr以外のscipy.statsで計算できる他の統計値も使える

``` {python}
from scipy import stats
sns.jointplot(x=df["sepal_length"],y=df["sepal_width"]).annotate(stats.pearsonr)
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/185939/ff5b179e-0ce1-8b48-4437-478ab34209f7.png)

* 無事書き加えられた。
* しかし、annotateの枠が邪魔だから消す→ `frameon=False`

``` {python}
sns.jointplot(x=df["sepal_length"], y=df["sepal_width"]).annotate(stats.pearsonr,frameon=False)
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/185939/6ee0955d-55b1-664c-1c23-6517dbded4ab.png)

完成。

***
参考
https://kite.com/python/docs/seaborn.axisgrid.JointGrid.annotate
自分メモ用（ruby　方角）編集中


今向いている方角を角度を使って表記

```ruby
#dは方向を示す北＝0　東＝90　南＝180　西＝270としている。
d = 90
```

90度ずつ増やして行き３６０度になった時に0度に戻す。

```ruby
-90.modulo(360) => 270
360.modulo(360) => 0
```
動く処理をした際にこれで ０<= d < ３６０ の範囲で表記できる。
ハッシュの書き方・取り出し方まとめ

まとめてみた。
最も一般的なのは一番下の3の書き方なので、個人的には3で統一したい。
ただし、既存のコードで2、3の書き方が使われていることもあるので、どの書き方にも慣れておきたい。
## 1. 基本的な書き方
```ruby 
# 文字列で書く方法
user = {"name" => "マツモト", "sex" => "male", "age" => 24}

#取り出すときは「ハッシュ名[キー名]」で書く
puts user["name"]
# 結果：マツモト
```
## 2. シンボルを使った書き方
```ruby 
# 「:キー名 => 値」で書く方法
user = {:name => "マツモト", :sex => "male", :age => 24}

#取り出すときは「ハッシュ名[:キー名]」で書く
puts user[:name]
# 結果：マツモト
```
## 3. 2をさらに省略した書き方
```ruby 
# 「キー名: 値」で書く方法
user = {name: "マツモト", sex: "male", age: 24}

#取り出すときは2と同じで「ハッシュ名[:キー名]」で書く
puts user[:name]
# 結果：マツモト
```

## 備考
値の取り出し方について、1と2、3では違いがある。
2および3はシンボルを使っているので取り出すときは「ハッシュ名[:キー名]」で書くこと。
httpd.conf ver2.4 ってシンプルになったんですねってだけの話

# From Apache2.2 to Apche2.4 
記事を見ると、moduleがhttpd.confに書かれてて、コメントアウトするとかの記事が見られるが、今の仕様に関しては当たり前すぎるのか記事として見受けられなかった。
ので、気づいた差異を書いておこうと思いました。

## ディレクトリ構成の違い

### httpd2.2
```
root/
　└ etc/
     └ httpd/
         └ conf
         ┝ conf.d
         ┝ logs
         ┝ modules
         └ run
```

### httpd2.4
```
root/
　└ etc/
     └ httpd/
         └ conf
         ┝ conf.d
         ┝ conf.modules.d
         ┝ logs
         ┝ modules
         ┝ run
         └ state
```
ディレクトリ構成がやや変わっています。confがスッキリしている理由は2.4のconf.modules.dディレクトリですね。

## ファイルの長さの違い
### 2.2のhttpd.conf

```
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
#LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
                      .
                      .
                      .
                      .
                      .
```

ポートListenの記述以外にこんな風にmoduleを読み込む記述が全て詰まっています。これを適宜コメントを外してmoduleを有効化させたり、逆にコメントアウトして無効化させたりしていました。

### 2.4のhttpd.conf

```
Include conf.modules.d/*.conf
```

すごいですね、さっきのもっさり部分をディレクトリ切ってそのディレクトリを一括で読ませちっているというわけです。

#まとめ
ディレクトリ構造の変化で、ファイルの記述を冗長化させない工夫のいい例だと思います。
自分もこんなディレクトリ構成を目指していきたいですね。
PHPの型宣言のObjectタイプヒントはPHP7.2.0からだった…

# PHPの型宣言でObjectタイプヒントがうまくいかない！

`gettypeメソッド`で間違いなく`object型`で有ることを確認

```php
public function hoge(object $object) {
    // 何かの処理
}
```

## エラーになる

```
local.ERROR: Type error: Argument 1 passed to ...
```

何故だ！！
型宣言したいのに！

## PHP7.2.0から対応だった

`php -v`で確認すると7.0系だった。

[PHP7.2リリース情報](http://news.php.net/php.internals/101207)

#### 原文

>PHP 7.2.0 comes with numerous improvements and new features such as
>
>- Convert numeric keys in object/array casts
>- Counting of non-countable objects
>- Object typehint
>- HashContext as Object
>- Argon2 in password hash
>- Improve TLS constants to sane values
>- Mcrypt extension removed
>- New sodium extension

#### Google翻訳

>PHP 7.2.0には、次のような多数の改良と新機能が付属しています。
>
>- オブジェクト/配列キャストの数値キーを変換する
>- カウント不能オブジェクトのカウント
>- オブジェクトタイプヒント
>- オブジェクトとしてのHashContext
>- パスワードハッシュ内のArgon2
>-  TLS定数を正しい値に改善
>-  Mcryptエクステンションを削除
>- 新しいナトリウム増量
【初心者向け】コマンドプロンプトでよく使う基本的なコマンド

# はじめに
この記事は筆者自身の備忘録として書いています。
プログラミング初心者の方が対象となっている記事です。
筆者はMacを使用しているので、掲載例は全てMacとなっております。

#目次
-なぜ、この記事を書いたか
-cd:フォルダを移動
-cd,pwd:現在のフォルダを表示
-dir,ls:ファイルの一覧を表示
-最後に


#なぜ、この記事を書いたか
筆者自身、コマンドプロンプトに触れている際、　　　　
「よく使うコマンドがあるな…じゃ、まとめておいたほうがよくね？」　　
と思いました。  
よって、こちらの記事を作成した次第です。

#cd:フォルダを移動
フォルダを移動する際にはcdコマンドを使います。
cdの後に半角スペースを入れ、フォルダ名を入力します。
以下はtestbookというフォルダ名に移動する例です。

```cd testbook ```

ちなみに、1つ上のフォルダへ移動する際には、フォルダ名に..を指定します。

```cd ..```

初心者の方がやりがちなのが、全角スペースを入れてしまうことです。
全角スペースだと下記のようなエラーが出ます。
 ```bash: cd　..: command not found```

#cd,pwd:現在のフォルダを表示
現在のフォルダを表示するコマンドです。
注意点は2つ。
1.cdはWindows、Macはpwdを使用。
2.フォルダはWindowsは¥(円マーク)、Macは/（スラッシュ）で区切る。

```$ pwd
/Users/sukesato/testbook```  

なお、
```/Users/sukesato/testbook ```の
```sukesato```の箇所がユーザー名です。

#dir,ls:ファイルの一覧を表示
現在のフォルダ内にあるファイルやフォルダの一覧を表示するコマンドです。
こちらの注意点は1つです。
・dirはWindows、lsはMacで使用

```$ ls
hello.rb```    
lsを使用した結果、 
```hello.rb```
というファイルが存在することを確認できました。

#最後に
本記事が初投稿です。  
お見苦しい点もあると思いますが、何卒よろしくお願いいたします。
Djangoのカスタムコマンドをソース内から呼び出して、戻り値を取得する方法

# やりたいこと
Djangoのカスタムコマンドを作成して「python manage.py custom_command_name」というように呼び出していましたが、とある事情でDjangoソース内のpythonファイルからカスタムコマンドを実行し、かつ戻り値を取得することになりました。

意外と日本語のサイトには載っていなかったので記事にしておきます。

# pythonファイルへの記述方法
「custom_command_name」という仮のDjangoカスタムコマンドを呼び出すには以下のように記述します。
これでカスタムコマンドが実行され、変数「result」にコマンドからの戻り値が返却されます。

~~~python:call_command_sample.py
from django.core import management
result = management.call_command('custom_command_name')
~~~

## 【参考】コマンドを呼び出せるけれど推奨されない方法（戻り値も返却されない）
参考情報ですが，参考文献欄に記載したDjango公式ドキュメントには以下のとおり記載されています。
> カスタム管理コマンドを実行するためにコード中から　execute() を直接呼び出す事は避けてください。代わりに call_command() を利用してください。

execute_from_command_lineというメソッドでも以下のようにカスタムコマンドを呼び出せますが、内部でexecute()を呼び出しているので避けた方が良さそうです。

~~~python:
from django.core.management import execute_from_command_line
execute_from_command_line(['', 'custom_command_name'])
~~~

詳細は参考文献を参照してください。

# 参考文献
◆Django公式ドキュメント
カスタム django-admin コマンドの実装「コード中での管理コマンドの呼び出し」という欄に記載されています。
https://docs.djangoproject.com/ja/2.1/howto/custom-management-commands/

※execute_from_command_lineがexecute()を呼び出していることがわかるドキュメントです。参考程度に。
Code source de django.core.management
https://docs.djangoproject.com/fr/1.8/_modules/django/core/management/

◆stack overflow
「Can Django manage.py custom commands return a value? How, or why not?」
（Djangoのカスタムコマンドは戻り値を返却できますか？その方法と、さもなければできない理由は？）
https://stackoverflow.com/questions/22571320/can-django-manage-py-custom-commands-return-a-value-how-or-why-not
[Amazon Connect] 外部の電話番号に転送する際にサポートされた新しいオプションを試してみた

## 1 はじめに

Amazon Connect（以下、Connect）で追加された外部の電話番号に転送する際にサポートされるオプションを試してみました。

## 2 問合せフロー

今回の問い合わせフローは、外部の電話番号に転送設定を実施し、転送先で会話が終わったらConnectのフローに戻ってきて、Pollyに「成功しました」と発話するフローを作成しました。

![Flow2.PNG](https://qiita-image-store.s3.amazonaws.com/0/367936/e099f677-2d7b-4c8a-877a-1f529658a3ae.png)

##3 実際に電話をかける

問い合わせフローに電話番号を紐づけて電話をしてみました。
外部の電話に転送されて、電話終了後にPollyが「成功しました」と喋って電話が切れました。
これでConnectのフローに戻ってきたことが確認できました！！

##4 最後に

新しくサポートされたオプションのうち、顧客が通話を完了したあとも、対応フローのやりとりを再開する機能を確認しました。
他の機能も引き続き確認したいと思います。

以上
MacBookProのデータ移行手順

1. 両方をThunderbolt2ケーブルで接続する(USB-Cの場合は変換アダプタを使用)
2. 旧PCの「ターゲットディスクモード」を開いて設定する
3. 受け側のPCを「移行アシスタント」モードで開く
4. 案内にしたがって復元する
gitでuntrackedファイルを削除する方法

untrackeファイルについては、`git checkout .`で削除できないため、調査

```
$ git clean --dry-run
 # 削除されるuntracked filesを表示

$ git clean -d --dry-run
 # 削除されるuntracked files%&directoriesを表示

$ git clean -df .
 # カレントディレクトリ配下の untrackedファイルとフォルダを削除する
```
untracked ファイル（-d: ディレクトリも含め） を 強制的に(-f) 削除する

[git-clean - Remove untracked files from the working tree](https://git-scm.com/docs/git-clean)
【一時解決】XCode10.1 iOS12でメモリ使用量が多くなった

# 追伸

- Appleが公に認めました
  - https://developer.apple.com/news/?id=03202019a
- 上記リンクから事象をAppleへ送ると、legacy_footprint でのビルドの提出を認めてくれます。
- legacy_footprint に対応すると Xcode9 のメモリ仕様としてビルドされるので、よく落ちるのが改善されるかも

# 事象

- 2019年3月より Apple申請するには XCode10.1 へあげる必要がある
- XCode10.1 iOS12にてメモリ使用量が増えたとの報告があがる

## Apple Forums

Apps takes a lot of more memory in ios12
https://forums.developer.apple.com/thread/108187

サンプルプロジェクトでのメモリ使用量が記載されており、

```
Memory used on an empty project (with the same excact device):
ios11 : 34.2 MB
ios12 beta 12 : 109.7MB
```

と大きく使用量が上がっていると報告されている

## Unity Forums

iOS Large Memory Usage = Apparently Feature, Not a Bug?
https://forum.unity.com/threads/ios-large-memory-usage-apparently-feature-not-a-bug.637660/

Unityの方が原因なのかというスレッドも経っているが
今の所、対応策などは出ていない

# 対応と対策

- Apple社かUnity社の対応を待つ
- 一縷ののぞみにかけてXCode10.1未満でビルドしたものを申請する
- 頑張って使用メモリ量をさげる
【Tips】aptから入れたUbuntuのyarnが正しくupdateできないときの対応

# 問題：sudo apt update
yarnをaptからインストールしたUbuntuで```sudo apt update```したときに公開鍵が云々言われてyarnが正しくアップデートされない。

## 入力
```sh
sudo apt update
```

## 出力
```

～～～【前略】～～～

Err:1 https://dl.yarnpkg.com/debian stable InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 23E7166788B63E1E

～～～【中略】～～～

Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://dl.yarnpkg.com/debian stable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 23E7166788B63E1E
W: Failed to fetch https://dl.yarnpkg.com/debian/dists/stable/InRelease  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 23E7166788B63E1E
W: Some index files failed to download. They have been ignored, or old ones used instead.
```

日本語だとこちら。

```
W: 署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: https://dl.yarnpkg.com/debian rc InRelease: 以下の署名が無効です: EXPKEYSIG ■■■■■■■■ Yarn Packaging <yarn@dan.cx>
W: https://dl.yarnpkg.com/debian/dists/rc/InRelease の取得に失敗しました  以下の署名が無効です: EXPKEYSIG ■■■■■■■■ Yarn Packaging <yarn@dan.cx>
W: いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。
```

# 環境
- Windows 10 Home 1809
    - Windows Subsystem for Linux (WSL)
        - Ubuntu 18.04.2 LTS
- Lubuntu 18.04 LTS（上記日本語エラーメッセージ例）

WSL固有の症状ではなく、UbuntuもといDebian系共通の問題とのこと。

# 解決方法：キーの更新
キーが変わったとのことなので更新する。

## 入力

```sh
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
```

## 出力
```sh
OK
```

# 補足
[年一ぐらいやってくれ](https://github.com/yarnpkg/yarn/issues/4505#issuecomment-332698773)とのこと。

# 追記
2021年2月5日に遭遇した際のエラーメッセージは以下の通り。時期によって微妙に変わっている模様。環境は Windows 10 Home 2004 下の WSL においてインストールした Ubuntu 18.04LTS および 20.04LTS。

```
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://dl.yarnpkg.com/debian stable InRelease: The following signatures were invalid: EXPKEYSIG 23E7166788B63E1E Yarn Packaging <yarn@dan.cx>
W: Failed to fetch https://dl.yarnpkg.com/debian/dists/stable/InRelease  The following signatures were invalid: EXPKEYSIG 23E7166788B63E1E Yarn Packaging <yarn@dan.cx>
W: Some index files failed to download. They have been ignored, or old ones used instead.
```

2023年2月28日現在、記事内同様の対応で解決可能であることを確認。

# 参考文献
- [The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E074D16EB6FF4DE3 #4505](https://github.com/yarnpkg/yarn/issues/4505)
uGUIのLayoutElementのMin/Preferred/Flexible解説

# 概要
LayoutElementコンポーネントには主に３つのパラメータを設定できます。

* `Min`
* `Preferred`
* `Flexible`


多くの人はドキュメント等の字面からは、Minの理解はすぐ出来ますが、PreferredやFlexibleの挙動を掴みにくいと思います。
解説を記していこうと思います。


# 結論
結論を先に書きます。

* Min		ピクセル
    * 親が縮んでもサイズ保証する
* Preferred	ピクセル兼割合
    * 親が広がった時、自分も広がる。が、ある程度のサイズで止めたい場合に利用する。

* Flexible	割合
    * 余白を出さずに伸ばしきる。
    * 例えば、親が広がって余白ができる場合、Flexibleを設定すると**割合**に応じて伸びる
    * **割合**とは同居している他のLayoutElementのFlexible。

# 解説
### Min
* Minは最低表示領域を保証します
* 下記はAB共にmin=100が設定されている状態です。
* 数字はHeightです。

<img width="177" alt="min.png" src="https://qiita-image-store.s3.amazonaws.com/0/340906/abfcd08f-4abe-163c-1812-bd9277d88074.png">

* 親を150まで縮めてみます。

<img width="180" alt="min_2.png" src="https://qiita-image-store.s3.amazonaws.com/0/340906/2d0b6132-fa8d-36c1-2f06-72b3ed69616a.png">
うまくHeightが保証されました。
これがMinの機能です。

### Preferred
* Preferredはサイズに余裕がある時に、開発者が設定したサイズまで伸びます。
* 下記はMinを一旦Offにし、ABそれぞれPreferred=150の状態です。
* 親をまた縮めた状態にします。

<img width="176" alt="fix.png" src="https://qiita-image-store.s3.amazonaws.com/0/340906/500f24d9-7950-804b-c36a-57f867e8fc94.png">

Minが無いのでいくらでも縮まりますが、親を伸ばすとどうでしょうか？

<img width="169" alt="preferred150_2.png" src="https://qiita-image-store.s3.amazonaws.com/0/340906/e55c881e-cd6c-db01-17d3-a588ea6af53e.png">

子の要素Preferredに設定したサイズまでまで伸びました。
しかしそれ以上伸びることはありません。



### Flexible
* Flexibleは余白を埋めるように引き伸ばしします。
* 下記は先ほどのABそれぞれPreferred=150の状態です

<img width="169" alt="preferred150_2.png" src="https://qiita-image-store.s3.amazonaws.com/0/340906/e55c881e-cd6c-db01-17d3-a588ea6af53e.png">

* **B**にだけPreferredを外してFlexibleを設定してみます。設定値はデフォルトの１

<img width="190" alt="flexible.png" src="https://qiita-image-store.s3.amazonaws.com/0/340906/61c42a90-52f9-77d8-b41a-7a68e38ad760.png">

* Bによって余白を埋めたことが分かります。
* 今度はABどちらもFlexible=1にしてみましょう

<img width="182" alt="flexible2.png" src="https://qiita-image-store.s3.amazonaws.com/0/340906/d66f8caf-07a8-9352-d396-856d8b1edd48.png">

* AB等しく引き延ばされました
* 次は値を変化させてみましょう
    * A:Flexible=2 B:Flexible=1


<img width="184" alt="flexible_1_2.png" src="https://qiita-image-store.s3.amazonaws.com/0/340906/5b582161-a78c-a369-0504-36a94aac8d89.png">

結果、伸ばされ具合が2:1になりました。
というわけで、どちらががどのくらい伸ばすかを設定するのがFlexibleとなります。

### Preferred + Flexible
* Preferred + Flexibleを双方設定した場合どうなるか？
* まずは前述のAB Flexible=1の状態から。

<img width="182" alt="flexible2.png" src="https://qiita-image-store.s3.amazonaws.com/0/340906/d66f8caf-07a8-9352-d396-856d8b1edd48.png">

* その状態でAにだけPreferred=100を追加してみます。

<img width="180" alt="flexible_preferred.png" src="https://qiita-image-store.s3.amazonaws.com/0/340906/eb0f1a9e-d068-6c9a-1fbf-62763e37ddf5.png">

* この場合、全長からPreferredもしくはMinを除いた長さ、つまり**本来余白となるはずだった部分**を、各Flexibleが按分して引き延ばします。
* 本来は300の余白を等しく分けるのでA=250 B=150となりそうですが`Flexible単品のオブジェクト`と`Flexible+Prefered混成のオブジェクト`が一緒に存在する場合は少し補正が入るようです。
【QuantX】ETFブルベアのアルゴリズム(SMA＋RSI)

##ご挨拶
こんにちは。Smart Tradeでインターンするリィァンです。
今回は[ETFブルベア両対応](https://qiita.com/Ric418/items/ac539b72f6368079b400)、日経指数が上がっても下がっても儲けられるアルゴリズムを作っていきたいと思います。
##設定
まず、いくつかの売買条件を定義します。

#####売買シグナル発動条件：
- 日経225を基準として、SMAとRSI両方の条件に達したら買い売りシグナルを出す。
- **SMA**：上昇/下降トレンドを見つかる
 - 買いシグナル：5日移動平均<25日移動平均<75日移動平均(株安)
 - 売りシグナル：5日移動平均>25日移動平均>75日移動平均(株高)
- **RSI**：トレンドが不安定なもみ合い期に相場の強弱を判断する。
 - 買いシグナル：rsi < 30　(売られすぎ)
 - 売りシグナル：rsi > 70　(買われすぎ)

```python:bullbear.py
      # 5日と25日移動平均線
      m5 = df.rolling(window=5, center=False).mean()
      m25 = df.rolling(window=25, center=False).mean()
      m75 = df.rolling(window=75, center=False).mean()
      
      # 移動平均線の位置
      up = (m5>=m25) & (m25>=m75)
      down = (m5<=m25) & (m25<=m75)

      ## RSI
      df_rsi = df.apply(lambda s: ta.RSI(s.values.astype(np.double), timeperiod=5),axis=0)
    
      # 売買シグナル
      buy_sig = down & (df_rsi < 30)
      sell_sig = up &  (df_rsi > 70)
```
#####損切/利益確定売り：
損切り/利益確定売りは設定していない。

#####注文方法：
1.  Sec.order(unit*10)　で指定した株を10株買う。
2.  日経225の買いシグナルが出ったら、ブル株を買い、ベア株を売る。(逆も同様)
3.  ブルの買いシグナルが出始まると、ベアの株を手仕舞い。(逆も同様)

```python:bullbear.py
    bear = ctx.getSecurity("jp.stock.1357")
    bull = ctx.getSecurity("jp.stock.1570")
    
    # 買いシグナル
    df_buy = current["buy:sig"][0]
    if df_buy:
      bull.order(bull.unit() * 10, comment="BULL BUY")
      bear.order_target_percent( 0, comment="BEAR SELL")
    
    # 売りシグナル
    df_sell = current["sell:sig"][0]
    if df_sell:
      bear.order(bull.unit() * 10, comment="BEAR BUY")
      bull.order_target_percent(0, comment="BULL SELL")
```
##結果
![ブルベアqiit1.png](https://qiita-image-store.s3.amazonaws.com/0/363919/66beecb5-b1be-d428-df39-f99d63c6b375.png)
Liveに設定して、ギリギリ販売審査標準に達したようです。

##反省
#####1. 注文単位(初期資金量対応)
order関数は指定した株の数量に従って買い注文を出しますので、初期資金量が変わっても同じ数量の株しか買えません。そうすると、初期資金量のの変更に対応できない。
なので、今度はポートフォリオに参考したorder.target_percent関数を使った方がいいと考えます。

#####2. シグナル回数の向上
今のシグナル回数は年31回で、審査標準の最低限30回とほとんど差がなかったです。
次回シグナル回数を向上するため、損切り、移動平均条件、シグナル基準(ブルベアを含む)などを仕掛けようと思っています。
Pythonのモジュールのインストール・インポートを自分用に解説

# モジュールの概念

コードを記述して、他のプログラムから再利用できるようにしたファイルのことを**モジュール**と呼びます。

# モジュールのインポート

## Pythonだけでは実は貧弱だったりします。

Pythonそれだけではシンプルという禅のモットーから、できることが少ないです。例えば、理系の皆さんが大好きなsin, cos tan関数の値を計算したくなったとしましょう。

```python
>>> sin(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sin' is not defined
```

上述のように、「sinなんてものはない」と怒られます。Pythonという名の工場は、実は取り扱い製品に限りがあるのです。

![スクリーンショット 2019-03-06 15.53.45.png](https://qiita-image-store.s3.amazonaws.com/0/335400/e58f2093-75ef-2d03-d501-4f0e3bcb2ae9.png)

## import

そこでPythonという我々の工場に、mathと呼ばれる機械を調達してくれば、sin, cos, tanを取り扱うことも可能になります。その調達作業が**import**です。ではそれを行ってみましょう。

```python
>>> import math
>>> math.sin(1)
0.8414709848078965
```

上の例ではmathというライブラリをimportし、その中のsin関数を使って1ラジアンのときのsinの値を計算しています。

![スクリーンショット 2019-03-06 15.57.08.png](https://qiita-image-store.s3.amazonaws.com/0/335400/8b598d03-b39c-5164-2855-193ae4d2b734.png)

「importされたmathの中のsinを使う」という意味で、```math.sin```と記述されることに注意しましょう。cosの計算の場合も同様です。

```python
>>> math.cos(1)
0.5403023058681398
```

## モジュールの一部のimport

mathと呼ばれる機械が提供してくれる機能はとても魅力的です。しかし、その機械の機能全てを使うわけではないので、その一部だけを持ってきたいとあるとき思いました。その場合には**from**を使って、以下のように記述します。

```python
>>> from math import sin
>>> sin(1)
0.8414709848078965
```

上の例では、mathの中でもsinしか用いない場合を想定したものです。今度はmathの中のsinを直接importしている、という意味合いから、math.sinとは記述せずsinだけで計算を行うことができます。

この場合、sinしかimportしていないため、cosを使うことはできません。

```python
>>> cos(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'cos' is not defined
```

## モジュールに略称をつける

Python工場に導入したmath機械ですが、多用しているうちに、いちいち正式名称で呼ぶのが億劫になってきました。そんな時は**as**を使って、以下のように記述します。

![スクリーンショット 2019-03-06 16.28.00.png](https://qiita-image-store.s3.amazonaws.com/0/335400/d22d4f46-98d2-2686-ca20-354c0d48f222.png)

```python
>>> import math as mt
>>> mt.sin(1)
0.8414709848078965
```

as以降は自分の好きな名称をつけることができます。numpyをnp、pandasをpdと略して使えているのは、この文法のためだったのです。

# モジュールのインストール

世の中には便利なモジュールが数多く存在します。NumPy(数値計算ライブラリ)やmatplotlib(グラフ描画ライブラリ)はその例です。当然ですが、これらを使うためには自分のパソコンにインストールする必要があります。

## PyPIとpip install

pipというパッケージ管理ツールを用いることで、PyPI(Python Package Index: Pythonパッケージを登録・管理するためのサービス: https://pypi.org )からインストールすることができます。以下はPyPIのトップ画面です。

![スクリーンショット 2019-03-06 16.34.16.png](https://qiita-image-store.s3.amazonaws.com/0/335400/2ac6b03b-ef32-9b7e-b2c2-ef5f644c1959.png)

マゼンタ枠のSearch projectsにnumpyとタイプすると、以下のような画面になります。

![スクリーンショット 2019-03-06 16.34.28.png](https://qiita-image-store.s3.amazonaws.com/0/335400/cbb8c64a-f840-6a8a-e22f-a76e27ce221d.png)

上枠がpip installを用いたインストール方法、下枠がnumpyの詳細情報が書かれたウェブサイトへのリンク先になっています。

これで自分が必要なモジュールを自分のパソコンにインストールし、自分のPython工場にimportすることで、PyPIで公開されている便利なモジュールを思いのままに使うことができるようになります。
Goでテスト時にflag引数に任意の値を渡す

こんにちわ
ゴリラです

Goでテストを書く時、コマンドライン引数に任意の値を渡したい事があったので、
そのやり方をメモとして残しておきます。

# flag引数
Goでは `-arg value` という感じで、flagパッケージ引数を定義することができます。

```go
var (
	name    = flag.String("name", "gorilla", "your name")
	age     = flag.Int("age", 10, "your age")
	isHuman = flag.Bool("isHuman", false, "are your human?")
)

func echo() string {
	return fmt.Sprintf("your status: name:%s, age:%d, isHuman:%v", *name, *age, *isHuman)
}

```

# やり方
この引数の値をテスト時に任意の変更して、分岐を網羅したいときがあります。
そういった場合は、flagパッケージで用意されている `flag.CommandLine.Set` 関数を使うことで、
任意の値をセットすることができます。

```go
func TestEcho(t *testing.T) {
	tests := []struct {
		name    string
		age     string
		isHuman string
		want    string
	}{
		{name: "gorilla", age: "26", isHuman: "false", want: "your status: name:gorilla, age:26, isHuman:false"},
		{name: "dog", age: "10", isHuman: "false", want: "your status: name:dog, age:10, isHuman:false"},
		{name: "bob", age: "30", isHuman: "true", want: "your status: name:bob, age:30, isHuman:true"},
	}

	for _, test := range tests {
		flag.CommandLine.Set("name", test.name)
		flag.CommandLine.Set("age", test.age)
		flag.CommandLine.Set("isHuman", test.isHuman)

		got := echo()
		if test.want != got {
			t.Fatalf("want %s, but got %s", test.want, got)
		}
	}
}
```

`CommandLine.Set` の引数は `key` と `value` があり、ともにstringですが、
`value` は内部でよしなに型変換してくれるので、intやboolも全てはstringで渡す必要があります。

# まとめ
flag引数とそれ以外の引数をまとめて持っているのが `flag.FlagSet` という構造体です。

```go
type FlagSet struct {
	// Usage is the function called when an error occurs while parsing flags.
	// The field is a function (not a method) that may be changed to point to
	// a custom error handler. What happens after Usage is called depends
	// on the ErrorHandling setting; for the command line, this defaults
	// to ExitOnError, which exits the program after calling Usage.
	Usage func()

	name          string
	parsed        bool
	actual        map[string]*Flag
	formal        map[string]*Flag
	args          []string // arguments after flags
	errorHandling ErrorHandling
	output        io.Writer // nil means stderr; use out() accessor
}
```

`args` がflag引数以外の引数が入り、 `formal` がflag引数が入っています。
深くは読んでいないのですが、interfaceを使用して、valueをparseしたりしているので、
シンプルだけど勉強になりそうなので、興味ある方はソースを読んでみてください。
element ui switch , radio , checkbox。 true,false を 1,0 にする

radioボタン、checkbox よりも switch を使ったほうがわかりやすい。

大切なのは以下の2点

・el-switch で active,inactive の設定
・created で axios などを使って初期値を設定する場合は String を使って文字列にしておく

```hoge.vue

<template>
    <div>

        <el-form ref="form" :model="form">
            <el-form-item label="Instant delivery">

                <!--active-value,inactive-value の切り替え-->
                <el-switch v-model="form.delivery"
                           active-value="1"
                           inactive-value="0">
                </el-switch>

            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="onSubmit">送信</el-button>
            </el-form-item>
        </el-form>


    </div>
</template>

<script>

    export default {

        data() {
            return {
                form: {
                    delivery: ''
                }
            }
        },
        created () {

            //最初に初期値を設定する場合は、 String を使って文字列化しておく
            this.form.delivery = String(1);

        },
        watch: {

        },
        methods: {



            onSubmit(){

                let dataform = new FormData();

                dataform.append('delivery',this.form.delivery);
                
                axios.post('/hoge/test/', dataform).then(e => {
                }).catch((error) => {
                });


            }



        }
    };
</script>

```


追記

配列の中の block を toggle したい場合
axiosで取得した配列を一旦文字列にしておく


```

<div v-for="(v,key) in list">

    <el-switch
            v-model="v.block"
            active-text="ブロック"
            active-color="#FF0000"
            active-value="1"
            inactive-value="0"
            inactive-text=""
            @change="addBlock(v.id,v.block)"
    >
    </el-switch>

</div>


//axios で取得したデータ
for (var key in e.data.res.data){
e.data.res.data[key].block = String(e.data.res.data[key].block);
}

```
Githubの2段階認証入れたらpushできなくなった人へ

# githubにも２段階認証
一応やられたら困るので2段階認証化した。
そしたらcloneとかpullとかpushとか諸々全部通らなくなった(当然)

基本的には[Githubのオフィシャル](https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line)にやり方が書いてあってそのとおりやれよという感じですが導入後にこれを必ずやらないと駄目だということなのでメモっとく。

## 2factorにしたらgitコマンド時に求められるIDPASS変わります。

いわゆるログインにつかう PASSではなくなって、`personal access token`が必要。

## 作業手順
1. [creating a personal access token - Github](https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line)に通りに`personal access token`を発行する。
2. 一度cloneやpullなどをした時に、以下のようにパスワードの代わりに`personal access token`を入れる

```
git clone https://github.com/username/repo.git
Username: your_username
Password: PersonalAccessToken
```

こうすると今後通るようになりまする。

参考： [creating a personal access token - Github](https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line)
Androidで動くBASIC!でcanvasのデータをファイルに保存（ BASIC プログラミング ）

※この記事はBASIC!利用者以外には意味が無い内容です。ご注意ください。

BASIC!は、Androidで動くBASIC インタープリタです。詳しくは以下をどうぞ。

* [AndroidでBASICを使う](http://qiita.com/basictomonokai/items/25bcb21ec69c00e9ad23)

BASIC!にはHTMLモードというモードがWebViewでHTMLを表示して画面UIを実装できます。JavaScriptやCSSも使えるのでJSライブラリやjQueryプラグイン等も使えて便利です。

但し、以下の困る点もあります。

* JavaScriptからローカルのファイルアクセスが基本的にできない

今回はファイルをダウンロードする場合で出来ない例とその回避策を記載します。 

## １．出来ない例

良くある例としてcanvasからダウンロードする例です。

```html:index.html
<button　id="btn">ダウンロード</button>
<canvas id="canvas" width="500" height="500"></canvas>
```

```javascript:index.js
function saveCanvas(){
    let canvas = document.getElementById("canvas");

    let link = document.createElement("a");
    link.href = canvas.toDataURL("image/png");
    link.download = "noname.png";
    link.click();
}

var btn = document.getElementById("btn");
btn.addEventListener( "click" , saveCanvas , false );

```

一般のブラウザーでは、上記のようにすれば「ダウンロード」ボタンを押せばダウンロードできると思います。

しかしBASIC!ではダウンロードボタンを押しても何も起こりません。

## ２．回避策

HTMLは特に変更しません。  JavaScriptを以下の通り変更します。

```javascript:index.js
function saveCanvas(){
    let canvas = document.getElementById("canvas");
    Android.dataLink(canvas.toDataURL());
}

var btn = document.getElementById("btn");
btn.addEventListener( "click" , saveCanvas , false );

```

`Android.dataLink(変数)`はBASIC!のみに存在する特殊な命令で実行されると変数の内容をBASIC!のネィティブプログラム(=BASICプログラム)に連携します。

BASIC!のプログラムは以下になります。

```basic:test.bas
console.title "HTMLモード"

! HTMLファイルを画面に表示
HTML.OPEN
HTML.LOAD.URL "index.html"

xnextUserAction:

! loop until data$ is not ""

DO
 HTML.GET.DATALINK data$
UNTIL data$ <> ""

type$ = LEFT$(data$, 4)

data$ = MID$(data$,5)

SW.BEGIN type$

 ! Back Key を押した時
 SW.CASE "BAK:"
  print "BACK key: " + data$
  popup "終了します",0,0,0
  pause 2000
  HTML.CLOSE
  exit
  SW.BREAK

 ! Android.datalinkでデータが来た時
 SW.CASE "DAT:"
   popup "透過型png生成",0,0,1
   ! datauri文字列の先頭部分を削除
   motox$=replace$(data$,"data:image/png;base64,","")

   ! datauri文字列をデコード
   ccc$=decode$("base64","ISO-8859-1",motox$)
   popup "デコード完了",0,0,1

xfset:
   ! ファイル名指定ダイアログ表示
   Input "保存ファイル名を指定",kkaf$,"hozon.png",iscanceled

   ! ダイアログをキャンセルされた時
   if iscanceled=1 then
     goto xfset
   endif

   ! デコード済データをバイナリーで書き出し
   byte.open w,flb,kkaf$
   byte.write.buffer flb,ccc$
   byte.close flb

   popup kkaf$+"を作成完了",0,0,1
      
  endif
  SW.BREAK

 ! その他の時
 SW.DEFAULT
  PRINT "Unexpected data type:", type$ + data$
  popup "終了します",0,0,0
  pause 2000
  exit

SW.END

goto xnextUserAction

end

```

簡単ですが説明は以下です。

* `SW.CASE "DAT:`のSW文ブロックで`Android.datalink`でHTML側から送られてきた変数（canvasのBASE64データ）を処理します。
* datauri文字列をカットして残りの部分を`"base64","ISO-8859-1"`でデコードしています。
* 後はバイナリーで保存するだけです

## ３．おわりに

多分、この情報が必要な方はいないとは思いますが特にネット上に情報も無いので書いておこうと思いました。

以　上
イミディエイトウィンドウ活用例

```VB:選択したセル範囲の値を一斉列挙する
'出力結果は1行目の左端～右端、2行目の左端～右端、3行目の左端～右端、…、と続く
for each r in selection:?r.value:next
```
https://thom.hateblo.jp/entry/2019/03/01/223729 より引用
CentOSでユーザー作成するときにパスワードの初期化をコマンドで行う

# 経緯
CentOSでユーザーをたくさん作るときに、パスワードの初期化がめんどくさい。
コマンド張り付けてパーッ！ってやりたい！

# 方法
useradd wakoit
echo InitialPassword | passwd --stdin wakoit
AWS PowerShell 名前でリソースを指定してみよう

#はじめに

ResourcesIDやARNは再作成すると変わってしまうため、
Nameタグ等の名前をキーにして個を特定したい事ってあると思います。

備忘録も兼ねていろいろなResourcesを名前で検索するときの書き方を載せておきます。

#コード

リソース名は適宜変更してください。

##Get-IAMRole
名前指定のパラメータがある

```Powershell
Get-IAMUser -UserName "UserX"
```

##Get-IAMRole
名前指定のパラメータがある

```Powershell
Get-IAMRole -RoleName "RoleX"
```

##Get-EC2Vpc
FilterでNameタグを指定する

```Powershell
Get-EC2Vpc -Filter @{Name = "tag:Name"; Value = "VpcX";}
```

##Get-EC2Subnet
FilterでNameタグを指定する

```Powershell
Get-EC2Subnet -Filter @{Name = "tag:Name"; Value = "SubnetX";}
```

##Get-EC2Instance
FilterでNameタグを指定する

```Powershell
Get-EC2Instance -Filter @{Name = "tag:Name"; Value = "instanceX";}
```

##Get-RDSDBInstance

DBInstanceIdentifierパラメータがあるので迷わないかも

```Powershell
$Param = @{
  DBInstanceIdentifier = "instanceX";
  Region               = "ap-northeast-1";
}
Get-RDSDBInstance @Param
```

##Get-EC2TagでName指定
###全パラメータsplat

事前にハッシュテーブルを作成するので縦に長い。
resource-typeのValueを変更すればAMIやEBSもNameからResourcesIDを取得できるのが特徴。
使用できるresource-typeについては後述。

```powershell

$Param = @{
  Filter = @(
    @{
      Name   = "key";
      Values = "Name";
    },
    @{
      Name   = "value";
      Values = "instanceX";
    },
    @{
      Name   = "resource-type";
      Values = "instance";
    }
  );
  Region = "ap-northeast-1";
}
$ResourceId = (Get-EC2Tag @Param).ResourceId
```

###Filterだけsplat

Filterにハッシュテーブルを直書きすればワンライナーでいけます。
ただし横に長い。
resource-typeのValueを変更すればAMIやEBSもNameからResourcesIDを取得できるのが特徴。
使用できるresource-typeについては後述。

```powershell

$ResourceId = (Get-EC2Tag -Filter @{Name = "key"; Values = "Name";}, @{Name = "value"; Values = "instanceX";}, @{Name = "resource-type"; Values = "instance";}).ResourceId

```

###使用できるresource-typeの調べ方

ここのFields - Nameに記載されている
https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TResourceType.html

もしくは
Get-Help Get-EC2Tag -Full
コマンドで表示されるパラメーター - Filterにあります。
ActiveDirectoryで適用されているポリシーをクライアント上で確認する

# 経緯
ActiveDirectoryでポリシーを設定しているけど、クライアントに反映されているかわからない。
複数ポリシーが同一OUに適用されていて、上書き関係を確認したいけど、どうすればいい？

# 方法
ポリシー結果セットを確認すれば大丈夫！
コマンドプロンプトや、コマンドを指定して実行から、以下のコマンドを実行しましょう。
`rsop.msc`
Result Set of Policy.msc と覚えましょう！
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/369361/bada49fe-b856-6c14-849b-0e4be37bc455.png)
WindowsServerでOffice系処理をバッググラウンドで動かすときにハマったこと

# 経緯
ExcelファイルをRubyで読み込んでごにょごにょする処理をバックグラウンドで動かそうとしたら、ジョブをキックすると即効でエラー終了してしまった。
調べたところ、どうやらOSユーザーでログインすらできていない。

かなり昔の情報のサルベージです。

# 対処法
以下のディレクトリを作成することで解決。
*C:\Windows\System32\config\systemprofile\Desktop*
*64bitの場合はSystem32、32bitの場合はSyswow64に読み替えが必要*

# 原因(予想)
Officeで何かしらの処理の自動化を行う場合、仮想デスクトップディレクトリなるものが必要だそうです。
サーバーOSだと、この仮想デスクトップディレクトリが初期状態では作られていないようで、手動で作成する必要があります。