OmniAICreator/Qiita-1.07M huggingface dataset:
at coder beginner 032 D ナップサックと半分全列挙

A
青木君は整数 a で割り切れる数が好きです。 高橋君は整数 b で割り切れる数が好きです。
n 以上の整数で、青木君と高橋君の両方が好きな最小の数を答えてください。
aとbの最大公約数でn以上の一番小さなやつを求めろってやつ。解法すぐにでてこなかった、、A問題なのに、、

```
#include<iostream>
using namespace std;
int main() {
	int a,b,n;
	cin >> a >> b >> n;
	for (int i = n; i > 0; ++i) {
		if (i%a == 0 && i%b == 0) {
			cout << i << endl;
			break;
		}
	}
	
	return 0;
}
```
最大公約数ってワードですぐに数学的に考え始めたのがだめだった。コンピューター的にぶん回して求めるのにも慣れなきゃな。

B
高橋君の会社には、秘密の金庫があります。この金庫にはパスワードをかけているのですが、高橋君はそのパスワードを忘れてしまいました。 しかし、幸運なことに、手元にはパスワードのヒントが以下のように書かれていました。
パスワードは、この紙に書かれている文字列 s の長さ k の部分文字列(※)のどれかである。
高橋君は、ありうるパスワードを全部試せば金庫を開けられる！と喜びました。 しかし、文字列 s はとても長い可能性があるし、しかも同じ部分文字列が複数個文字列 s 中に存在する可能性もあります。明らかに、重複したパスワードを繰り返し試す必要はありません。 そこで、手動で全てのパスワードを試す前に、試す必要がある異なるパスワードの数がいくつあるかを数えることにしました。
あなたの仕事は、文字列 s の内容が与えられるので、試す必要がある異なるパスワードの数がいくつあるかを高橋君に教えてあげることです。
(※)文字列 s の「部分文字列」とは、文字列 s に含まれるある区間を取り出した文字列のことです。 例えば、abc の部分文字列として a,b,c,ab,bc,abc などが挙げられます。 ac や ba などは部分文字列ではないことに注意してください。

うーん全部列挙してから重複するやつ取り除いてその個数を出力するってことはわかるんだけど実装どうやってやろう

substrをつかうのね。忘れてた。

```
% ./std_string_substr1
0123456789
abcdefghij
substr(5):      fghij
substr(2,3):    cde
```
実行例

```
#include<iostream>
#include<string>
#include<set>
using namespace std;
set<string>st;
int main() {
	string s;
	int k;
	cin >> s >> k;
		for (int i = 0; i + k <= s.size(); ++i) {
			st.insert(s.substr(i, k));
		}
	cout << st.size() << endl;
	return 0;
}
```
初歩的な文法が使えるかなって問題だった使えませんでした。こういうの瞬殺できるようになるまではb問題ひたすらやる必要がある気がするな。文法の勉強になるし二週目はpythonで書くか。

D
ナップサックとうまくいかない制約の場合は半分全列挙で解く。
iOS12 + ショートカットでWeb APIで取得したデータを読み上げる素振り

iOS12は地味めなアップデートだという声も聞かれますが、個人的には「ショートカット」アプリを使って様々な処理を自動化、マクロ処理できるようになった点は非常に大きな可能性を感じます。
まだ全容は追い切れていませんが、とりあえず以下、Web APIでなんらかのテキストデータを取得して読み上げるところまで素組みしてみたのでまとめておきます。
なお「ショートカット」アプリは元々「Workflow」というサードパーティ製のアプリで、Appleが買収してWi-FiオンオフなどのOS操作が行えるようになったり、iOS12のSiriショートカットから呼びだせるようになったようです。IFTTTのローカル版といったところです。現状、AppStoreから別途インストールが必要です。
マニュアルも読まずに手探りで試したので、実際にはもっと短くまとめられるかも知れませんし、ブロック、チェーンなどの用語なども適当です。

# Web APIで取得した内容を読み上げるまで
例えばビットコインの価格を返すAPIを想定してみます。テストの為に単に「700000」という数字を返すだけのHTMLを適当なサーバーに置いておきます。

```html

<html>
<body>
700000
</body>
</html>
```

これにアクセスして後ろに「円です。」とくっつけて音声で読み上げる、というレシピはこんな感じになります。
![shortcut.png](https://qiita-image-store.s3.amazonaws.com/0/128639/c8156278-6e9d-1501-53cd-cd0ac886305b.png)

初見でわかりにくいのは最初に「テキスト」でURLを定義してそれを「Webページの内容を取得」に渡してやるといったところでしょうか。ブロック(?)間が線で結ばれているところは情報が受け渡されていることを示しているようです。
Web APIから返ってきた「700000」という値を一旦resultという変数に格納し、ここで一旦線が途切れます。再び新たな「テキスト」ブロックからチェーンを始め、変数を使って前チェーンの情報を引き継ぎます。例えばここから更に別の情報源からデータをもってきて、2回目の「テキスト」で合成するなんてこともできそうです。最後に「テキストを読み上げる」ブロックに渡せば完了です。

これをひとまとまりのバッチ処理（ショートカット）として保存し、

- 「ビットコインの今の価格は？」のようにボイスコマンドを定義して、Siriから呼び出す
- 「ショートカット」アプリのウィジェット上にボタンを置く
- ホーム画面にアイコンを置く

などして呼び出すことができるようになります。夢が広がりますね。ブラウザ上でJavaScriptを実行するなんてブロックもあるのでブックマークレットレベルの簡単なスクレイピングとかもできるんじゃなかろうかと。

ただしSiriから呼び出した場合、実際の読み上げ内容は、

- ショートカットを実行します。
- ショートカットによると次の通りです。
- 70万円です。
- わかりました。

という感じになり、ちょっとスマートさに欠けます。特に「わかりました。」が意味不明です（笑）。Siriショートカットの規定動作なんでしょうけど、この辺りもう少し融通が利くといいんですけどね。
at coder beginner 031

B
高橋君は AtCoder 社のマスコットキャラクターである。
マスコットキャラクターとしての魅力を維持するために、高橋君は適度な運動をすることになっている。高橋君は週の運動時間が L 分以上 H 分以下でなければならない。
しかしながら、青木君は最近、高橋君が運動しているところを見ていない。高橋君の運動状況が気になった青木君は、高橋君の過去 N 週間の運動時間が制限にあっているのか、そして足りないなら少なくともあと何分運動する必要があったのかを計算するプログラムを作成することにした
入力
1 行目には、2 個の整数 L, H(1≦L≦H≦104) が空白区切りで与えられる。これは、高橋君が週に L 分以上 H 分以下の運動をしなければならないことを表す。
2 行目には、整数 N(1≦N≦50) が与えられる。これは青木君が N 週分の運動時間について調べていることを表す。
3 行目からの N 行には、高橋君の運動状況を表す整数が与えられる。N 行の内 i(1≦i≦N) 行目には、整数 Ai(0≦Ai≦104) が与えられる。これは i 個前の週において高橋君が Ai 分運動したことを表す。
出力
出力は N 行からなる。i(1≦i≦N) 行目には、i 個前の週において高橋君が必要な分よりも多く運動している場合は −1 を、そうでない場合は追加で必要な運動時間の最小値を分単位で 1 行に出力せよ。
出力の末尾にも改行を入れること。

```
#include<iostream>
using namespace std;
int main() {
	int L, H, N;
	int A[51];
	cin >> L >> H;
	cin >> N;
	for (int i = 0; i < N; ++i) {
		cin >> A[i];
	}
	for (int i = 0; i < N; ++i) {
		if (A[i] < L) {
			cout << L - A[i] << endl;
		}
		else if (L <= A[i] && A[i] <= H) {
			cout << 0 << endl;
		}
		else {
			cout << -1 << endl;
		}
	}
	return 0;
}
```
特になんのひねりもない？
ぶっちゃけgo get の後に何が起きているかわからない人！　

# 恥ずかしさはエンジニアの生きるエンジン
Go初心者の諸君！
GOPATH通し終えた君たちに質問がある
go get の後何が起きているか知ってるかい。
正直に言おう、僕は１ヶ月前まで思考停止していてただひたすらにgo get を使っていた。
その時の思考回路がこれだ！
①goでコードをかく
②エラー　cannot find package "github.com/hoge"
③go get github.com/hoge　する
④エラー解消
⑤よっしゃ　go get 神！！
①に戻る
独学あるあるのとりあえずできるから仕組みはいいや的な発想ですね
こういう思考は理解を後回しにする習慣を形成して最終的にまとめて勉強する必要があるので、
なるべくわからないものが溜まる前に消化しておきたいものです。

それでは解説していきます。
まず、GOPATH通しましたよね
bash_profile or zshrc
つまり自分のシェルの設定ファイルにこんな記述をしましたよねって話

```sh
export  GOPATH =$HOME/go
export PATH=$PATH:$GOPATH/bin
```
この作業で何やってるのかわからない人は下の記事を読んでまたこの記事に戻ってください！

環境変数を知らなくて呆れた顔されたので1日で勉強した内容をまとめる↓
https://qiita.com/yu19991013/items/852e1c0f299ddd9d3efd

これで何ができるようになったかっていうと実は2つのことができるようになっています。
①go getが叩かれるとGoで書かれたコマンドラインツールの実行ファイルをGOPATH/bin配下に自動的に置いてくれます。
②①と同じタイミングでGOPATH/srcにパッケージのソースコードが置かれます。ちなみに、go getでは取得したパッケージの依存パッケージ（importの中に書いてあるパッケージ）も一緒にダウンロードしてくれます。

以上！自分がつまずいた経験を元に記事を書いてみました。

追記(2019 12/1)
この記事を書いて、約1年後
少しだけ詳しくなった状態でGoについてまとめた記事があります。こちらもぜひぜひチェックしてください！！！
[脱初心者Gopherのための言語使用Tips](https://qiita.com/yu19991013/items/602cb4f17b8776f8ba6e)
偏差値を求める過程をPythonで書いてみた

今回は偏差値を求める式をPythonで書いてみました。
偏差値は
**偏差値 = 10 * (各データ - 平均値) / 標準偏差 + 50**
で求めれます。

参照先
https://sci-pursuit.com/math/statistics/deviation-value.html


以下pythonコードです。


```python:偏差値.py

import random
import math

# 処理対象のデータを作成
# 0～100の間で10個ランダムに数値を選択しリストに格納する。
test_data = []


for _ in range(10):
    test_data.append(random.randint(0, 100))

print('自動で生成したリストは以下です。')
print(test_data)
print()

# 平均値を求める。
# 平均値 = 全値の合計値 / 値の総数
mean = sum(test_data) / len(test_data)
print('平均値は' + str(mean) + 'です。')
print()

########################################
# 以下ライブラリを使用すれば平均は求められます。
# import statistics
# avg = statistics.mean(test_data)
# print(avg)
########################################


# 偏差を求める
# 偏差 = (平均値 - 各値) ** 2
dev_data = []

for dev in test_data:
    dev_data.append((dev - mean) ** 2)

print('偏差は以下になります。')
print(dev_data)
print()


# 分散を求めます。
# 分散 = 偏差の2乗の合計 / データの総数
dispersion_data = sum(dev_data) / len(dev_data)

print('分散は' + str(dispersion_data) + 'です。')
print()

# 標準偏差を求める
# 標準偏差 = 分散の平方根
result_sd = math.sqrt(dispersion_data)
print('標準偏差は' + str(result_sd) + 'です。')
print()


# 偏差値を求める
dispersion_value = []

for t in test_data:
    # 偏差値が小数で出力されるので、int()を使用して整数に直しています。
    # int() ⇒ 切り捨て、 round() ⇒ 四捨五入
    dispersion_value.append(int(10 * ((t - mean) / result_sd) + 50))

print('リスト内の各データの偏差値は以下となります。')
print(dispersion_value)
```

偏差値は切り上げで出力していますが、四捨五入や切り上げも可能です。
mathモジュールを使用すればかっこよくなるんかな？ｗ

以下出力結果です。
地味に平均値が45～55の外に出たの初めてかも。。。

```
自動で生成したリストは以下です。
[7, 41, 8, 35, 85, 16, 17, 85, 46, 18]

平均値は35.8です。

偏差は以下になります。
[829.4399999999998, 27.04000000000003, 772.8399999999998, 0.6399999999999955, 2420.6400000000003, 392.0399999999999, 353.4399999999999, 2420.640000000
0003, 104.04000000000006, 316.8399999999999]

分散は763.76です。

標準偏差は27.636208133533803です。

リスト内の各データの偏差値は以下となります。
[40, 52, 40, 50, 68, 43, 43, 68, 54, 44]
```

今後は機械学習も上げていけたらと思ってるけどインプットが追い付いてないから頑張ります。
DirectX Shader Compilerをビルドするまでにやったことのメモ

Visual Studio 2017 15.8.4，CMake 3.12.0，Windows 10 Pro 1803，Python 3.6.6 (anaconda)でDirectX Shader Compilerをビルドしようとした際の手順のメモ．

* Windows Driver Kitをインストール

* utils\hct\hctstart.cmd に 手元のCMakeのバージョンを追加

次の最後の行のようにCMake 3.12.0で警告が出ないように調整．

```
cmake --version | findstr 3.4.3 1>nul 2>nul
if "0"=="%ERRORLEVEL%" exit /b 0
cmake --version | findstr 3.7.2 1>nul 2>nul
if "0"=="%ERRORLEVEL%" exit /b 0
cmake --version | findstr 3.9.0-MSVC 1>nul 2>nul
if "0"=="%ERRORLEVEL%" exit /b 0
cmake --version | findstr 3.11.2 1>nul 2>nul
if "0"=="%ERRORLEVEL%" exit /b 0
cmake --version | findstr 3.12.0 1>nul 2>nul
if "0"=="%ERRORLEVEL%" exit /b 0
```

* CMakeLists.txtにC++14を利用するよう指定を追加．

```
add_compile_options("/std:c++14")
```

std::unary_functionがC++17からは削除されているため，それを使っている部分がビルドが通らない．

これで，あとは公式にある手順通り，utils\hct\hctshortcut.jsをダブルクリックし，デスクトップにできているHLSL Consoleでhctbuildを実行すれば良い．
((HD)) Schalke 04 Bayern Münih maçı canlı İZLE! SCHALKE Bayern şifresiz yayın

ŞİFRESİZ İZLE: Schalke 04 - Bayern Münih maçını canlı ızle...((HD)) Schalke 04 Bayern Münih maçı canlı İZLE! SCHALKE Bayern şifresiz yayın.. Schalke 04 Bayern Münih maçını canlı ızle 22 Eylül 2018...
CANLI MAC LINKLERI===> https://tinyurl.com/y7b2kjuz
-
CANLI MAC LINKLERI===> https://tinyurl.com/y7b2kjuz
-
https://installmentloanerx.org/total-11-trim/


Engage yourself in Total 11 Trim. We don't need to put the cart before the horse. This was the short version of Total 11 Trim. It was created by Total 11 Trim experts and in point of fact, "Win some, lose some." A few buddies are quite emotional. I am here to defend Total 11 Trim this way. You may have to take the time to choose a Total 11 Trim you like. That is serious. Those were many tricky results. 

I'm sure if that is you. I've never seen a review of Total 11 Trim either. Total 11 Trim isn't working out at all although they're quite motivated. 


https://installmentloanerx.org/total-11-trim/
at coder beginner 030

B
n 時 m 分のアナログ時計があります。短針と長針のなす角度のうち小さい方を度数法で求めてください。

```
#include<iostream>
#include<cstdlib>
#include<iomanip>
using namespace std;
int main() {
	int n, m;
	cin >> n >> m;
	float d = n * 30 - 5.5*m;
	if (d < 0) {
		d -= 1;
	}
	if (d < 180)
		cout << fixed << setprecision(7) << d << endl;
	else
		cout << fixed << setprecision(7) << 360 - d << endl;
	return 0;
}
```
これで半分くらいはねられて半分くらい通った。原因はいずこ。

```
#include<bits/stdc++.h>
using namespace std;
int main() {
	int n, m;
	cin >> n >> m;
	if (n >= 12) {
		n -= 12;
	}
	double x = n * 30;double y= 5.5*m;
	double d = abs(x - y);
	if (d < 180) {
		cout << fixed << setprecision(7) << d << endl;
	}
	else {
		cout << fixed << setprecision(7) << 360 - d << endl;
	}
	return 0;
}
```
通った。。nが12より大きいときに12を引く作業が必要だった。


C

```
#include <iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
using ll = long long;
const int INF = 1e9;
int main() {
	int N, M, X, Y;
	int a[100010], b[100010];
	cin >> N >> M >> X >> Y;
	for (int i = 0; i < N; ++i) {
		cin >> a[i];
	}
	for (int i = 0; i < M; ++i) {
		cin >> b[i];
	}
	int sum = 0;
	int a_now=0, b_now;
	for (int i = 0; i < N; ++i) {
		if (a_now <= a[i]) {
			b_now = a[i] + X;
			for (int j = 0; j < M; ++j) {
				if (b_now <= b[j]) {
					a_now = b[j] + Y;
					sum++;
					break;
				}
			}
		}
	}
	cout << sum << endl;
	return 0;
}
```
TLE解答

```
#include <iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
using ll = long long;
const int INF = 1e9;
int main() {
	int N, M, X, Y;
	int a[100010], b[100010];
	cin >> N >> M >> X >> Y;
	for (int i = 0; i < N; ++i) {
		cin >> a[i];
	}
	for (int i = 0; i < M; ++i) {
		cin >> b[i];
	}
	int sum = 0;
	int a_now = 0, b_now = 0, t = 0;
	while (1) {
		while (a_now < N&&a[a_now] < t)a_now++;
		if (a_now == N)break;
		t = a[a_now] + X;
		while (b_now < M&&b[b_now] < t)b_now++;
		if (b_now == M)break;
		t = b[b_now] + Y;
		sum++;
	}
	cout << sum << endl;
	return 0;
}
```
修正版
Ubuntu 16.04でIntel AC 3168 (無線LAN/Bluetooth) を使う

# やりたいこと
Mouseの[NB391Z](https://www.mouse-jp.co.jp/business/mpro-nb/nb300/)にUbuntu16.04をインストールして使っているが、デフォルトでは無線LAN/Bluetoothアダプタを認識しなかった。
無線LAN/Bluetooth使いたい。

# やったこと
[NB391Z](https://www.mouse-jp.co.jp/business/mpro-nb/nb300/)のスペックを見ると、無線LAN/Bluetoothモジュールとして[インテル® Dual Band Wireless-AC 3168](https://ark.intel.com/ja/products/94854/Intel-Dual-Band-Wireless-AC-3168)を載せてるとのこと。
ということで、[Intelのサポートページ](https://www.intel.co.jp/content/www/jp/ja/support/articles/000005511/network-and-i-o/wireless-networking.html)を見てみると、AC3168をサポートするのはkernel 4.6以降。
Ubuntu16.04で採用されているkernelは4.4.0系のため認識していなかったっぽい。

わざわざLTSを使っているのにkernelをアップデートするのもなんだかなーと思いつつ、途中から18.04に上げることにビビり、kernelを更新。

```
$ uname -a
Linux magneton 4.4.0-135-generic #161-Ubuntu SMP Mon Aug 27 10:45:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ iwconfig
lo        no wireless extensions.

ens1f1    no wireless extensions.

$ sudo apt install linux-generic-hwe-16.04
$ sudo reboot
$ uname -a
Linux magneton 4.15.0-34-generic #37~16.04.1-Ubuntu SMP Tue Aug 28 10:44:06 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ iwconfig
lo        no wireless extensions.

wlp1s0    IEEE 802.11  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=0 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on
          
ens1f1    no wireless extensions.
```

あたりっぽい。
タスクバーにbluetoothのアイコンも表示されるようになった（作業前の画面キャプチャ撮り忘れた。。。

![Screenshot from 2018-09-23 00-46-49.png](https://qiita-image-store.s3.amazonaws.com/0/37714/56c8078b-2d00-65c8-9ba0-36c79de641f7.png)

めでたしめでたし。

# まとめ
（次からは18.04にしよう。。。

# 参考
[Mouse NB391Z](https://www.mouse-jp.co.jp/business/mpro-nb/nb300/)
[インテル® Dual Band Wireless-AC 3168](https://ark.intel.com/ja/products/94854/Intel-Dual-Band-Wireless-AC-3168)
[インテル® ワイヤレス・アダプターの Linux* サポートについて ](https://www.intel.co.jp/content/www/jp/ja/support/articles/000005511/network-and-i-o/wireless-networking.html)
[How to enable the Wi-Fi network adapter “Intel AC 3168 ” in Ubuntu?](https://unix.stackexchange.com/questions/403739/how-to-enable-the-wi-fi-network-adapter-intel-ac-3168-in-ubuntu)
[Ubuntu 16.04のKernelをより新しいバージョンにアップグレードする](https://sicklylife.hatenablog.com/entry/2017/05/24/185955)
VS CodeでMarkdown編集の便利なアドイン

この記事はVS CodeでMarkdown編集の時の便利なアドインを紹介します。

# 使用するアドイン
- [Markdown PDF](https://github.com/yzane/vscode-markdown-pdf/blob/master/README.ja.md)
MarkdownファイルをPDFや画像、HTMLへ変換できます。そして、markdownがサポートされていないスタイル設定ができます。使用の時は**F1**または**ctrl+shfit+p**を押して、**export**を入力し、「markdown-pdf: Export (pdf)」などコマンドを選択して実施します。結果はmdファイルと同一フォルダに保存されます。

- Markdown Preview Github Styling
VS CodeのプレビューはGithubの表示のスタイルに変更されます。

- Markdown+Math
数式の編集はできます。ただし、上記 Markdown PDF で変換の時に正しく出力できません。

例：

~~~markdown
$$ a^2 + b^2 = c^2 $$
~~~

$$ a^2 + b^2 = c^2 $$

~~~markdown
$$ c = \sqrt{a^2 + b^2} $$
~~~

$$ c = \sqrt{a^2 + b^2} $$

~~~markdown
$$ N(x \midl \mu,\sigma^2)=\frac{1}{\sqrt{2 \pi \sigma^2}} e^{\{ -\frac{(x-\mu)^2}{2 \sigma ^ 2} \}} $$
~~~

$$ N(x \mid \mu, \sigma^2) = \frac{1}{\sqrt{2 \pi \sigma^2}} e^{\{ -\frac{(x-\mu)^2}{2 \sigma ^ 2} \}} $$
見たのでメモ：AWS Cloud Practitioner Essentials (Digital) (Japanese):  主要なサービス

AWS Cloud Practitioner Essentials (Digital) (Japanese): 
主要なサービス     (必須) 
e ラーニング  |  1.1.0  |  3 時間


//動画メモ

サービス
カテゴリ
ドキュメント

各サービスごとに詳細ドキュメントあり

入門
開発者
API
コンソールユーザ


・AWS global infra stracture

region 
　2つ以上のAZを持つ
　互いに完全分離

AZ
　特定リージョン内のデータセンターの集まり
　物理論理

edge location
 amazon cloudfront
  コンテンツ配信ネットワーク（CDN）
　コンテンツリクエストは最も近いエッジロケーションに自動的にルーティングされる


・VPC
まあNWの話

・AWS Security

セキュリティグループは
組み込みファイアウォールのように動作する

セキュリティグループルール
公開
中間
非公開

マネジメントコンソールから
変更可能


・コンピューティングサービス
定義は？


aws lambda　ラムダ

lambda関数で画像処理
 "使っている時だけ"課金


amazon elastic container service


・amazon elastic compute cloud (EC2)
概要
インスタンス構築
デモ

amazon EC2 instances

AMI
 amazon machine image

region
ami
instance type
Instance Details
Add Storage
Add Tags
Configure Security Group

//接続手順

puttyで接続
　ssh2が必要なため

puttygenを使用
.pemから.ppkを作成

puttyのSSH,auth設定から.ppkを指定
 ログイン
  ec2-user@ EC2のDNS or IP

OK!!


・AWS Lambda

イベントドリブン型
サーバレス
コンピューティングサービス

サービスのプロビジョニングや管理を行わずにコード実行可能


モノリスティックであるため
密結合をさけるため

リソースなどに制限あり


・先にS3　amazon simple storage service

キーを指定
選択リージョン内で冗長保管

aws management console
aws cli
aws SDKs
RET エンドポイント
　HTTP or HTTPS
  URLベースのアクセスサポートのため、
　　S3バケット名はグローバルに一意　リージョン内？
　　DNS準拠

オプション、リージョン跨ぎ可能

・AWS elastic beanstalk

　各種アプリケーションを実行するためのPaaS


本では　beanstalk + lambda で紹介

codeをアップロード
　URLが出力
　だれでもどこからでもアクセス可能


・application load balancer

elastic load balancer（classic）の後継
高レイヤをサポート
完全上位互換？

listener
target group
target



//疑問点

エッジロケーションが今一つ不鮮明
AZの内部的な話？
それがユーザのアクセスに染み出す？？

もしくは完全に別の概念の説明か。
→別の話だった。。。

エッジロケーション
主にサービスの利用者(エンドユーザ)に関係するデータセンター。
AWSのDNSやCDNサービスの提供のために利用される。

https://qiita.com/mechamogera/items/36eda0a2ee98fcbbba1d






//参考

小ネタ:AWSを使用する案件の設計書に"○○リージョンのみ使用する"と記載しない方がいい
https://qiita.com/noz_awsinf_sp/items/7fed07b67ef51b9f3f92
見たのでメモ：AWS Cloud Practitioner Essentials (Digital) (Japanese):  クラウドの概念

AWS Cloud Practitioner Essentials (Digital) (Japanese): 
クラウドの概念     (必須) 
e ラーニング  |  1.1.0  |  30 分


//動画メモ
・オンプレ
キャパ不足
or
過剰なプロビジョニング
　無駄

AGI　アジリティ
俊敏性

伸縮性/scalability?
　AWS tool
  Auto scaling
  Elastic load balancing

スピード
　数秒
実験
　低コスト低リスク
イノベーションの文化

高可用性
　Iaas観点

従量課金
　イノベーション、ビジネスに集中させる

//試験メモ
試験でミスった観点
　セキュリティ
　　責任分界点

　リージョンとAZの違い
PHP基礎（６）関数

#関数

中学生の数学で出てきた方程式を覚えていますか？例えば、
*y = x * 2*
というように未知数xを使って、yを定義する等式です。
この場合は、x=1のときyは2、x=2のときyは4、というようにxが決まるとyが分かります。
これは数学的に
*f(x) = x * 2*
という形で表現します。ここでfは関数を示すfunctionの頭文字です。f(x)は、「未知数xを関数に渡す」という表現をしているだけで、そのf(x)が、「x * 2」と等しい、つまりf(x)の答えは「x * 2」です、と言っています。
数学的には、xが決まれば、f(x)の値も決まるという意味になります。

プログラムの関数もこの数学の関数と同じです。プログラムの関数では、xは引数、右辺は戻り値と呼びます。
つまり、関数は引数を受け取って、どのような値でも返すことができるものなのです。

PHPの関数はfunction文で定義します。関数の命名は小文字始まりであれば自由です。引数は0個以上を受け取り、関数の中では演算をして、returnで戻り値を返します。

以下は関数の例を示します。

```php
<?php

/* 関数：素数チェック 
   引数で受け取った数が素数かどうかを判定し、素数の時true、そうでない時falseを返します。
*/
function prime($num) {

    if ($num < 2) {
      // 戻り値：false（素数ではない）
      return false;
    }

    $i = 0;

    while ($i < $num) {
        //　%は割った余りを返す演算子です。
        if ($i >= 2 && $num % $i == 0) {
            // 戻り値：false（素数ではない）
            return false;
        }
        $i ++;
    }

    // 戻り値：true（素数である）
    return true;
}

/* 素数列挙 */
$i = 0;
while ($i <= 233) {
    //素数チェック関数の呼び出し
    if (prime($i)) {
        echo "$i ";
    }
    $i ++;
}
?>

```

関数はある処理の単位ですので、関数を考えるとき、その処理を行うために必要なインプット（引数）と、処理の結果であるアウトプット（戻り値）を最初に決めるところから始めます。
引数の宣言は関数名の後に、変数をカンマ(,)で区切って列挙します。変数ですので$を先頭に付けます。
戻り値は、関数を抜けるときreturn文で値（変数）を返すことを明示します。この値（変数の中身）が関数の戻り値になります。（戻り値がないときは単にreturn;と書きます）



#演習0-3
**0-3-1）**
引数\$aと\$bの２つを整数として受け取り、\$aと\$bの平均を計算しその結果を返す関数を作って動きを確認して下さい。

**0-3-2）**
四角の面積を計算する関数を作って呼び出してください。縦(\$height)と横(\$width)を引数としてその関数に渡し、戻り値を面積とします。

**0-3-3）**
球体の体積（下記のURL参照）を計算する関数を作って呼び出してください。
参考URL：https://sci-pursuit.com/math/volume-of-sphere.html
球の半径(\$r)を引数としてその関数に渡し、戻り値を体積とします。

**0-3-4）**
適正体重（下記のURL参照）を計算する関数を作って呼び出してください。
参考URL：https://www.med.or.jp/forest/health/eat/11.html
身長(\$height)を引数としてその関数に渡し、戻り値を適正体重とします。


[＜＜PHP基礎（５）反復]
(https://qiita.com/taka027/items/95ebe9087f37dcb1d5a4)

[PHP基礎（７）クラス＞＞]
(https://qiita.com/taka027/items/3802b7b48b881ab6f48e)
Visual Studio Code で SFTP同期

## 目的
前職でxftpやfilezillaで毎回送受信してたけど面倒だからコマンドやら自動保存やらで同期とれないかしら。

## エディタ
Visual Studio Code
最近ハマってるのでこのエディタでないかしら？

## プラグイン
ありました。

[sftp - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=liximomo.sftp)

こちらをポチってインストールしてください。

## 設定方法

### 設定ファイル

まず、コマンド ``` Ctrl + Shift + P ``` を実行して、
``` SFTP: Config ``` を選択(入力)してください。

すると「どこに設定ファイル保存するんや」って聞かれます。

ローカルのプロジェクトフォルダを選択しておいてください。

選択すると ``` .vscode/sftp.json ``` が作成されます。見た感じで勘の良い方ならわかりますが、pemkeyなど設定することも可能です。
私の例としては、

``` json
{
    "protocol": "sftp",
    "host": "xxx.xxx.xxx.xxx",
    "port": 22,
    "username": "root",
    "remotePath": "/var/www/html",
    "password": "hoge"
}
```
です。

### ダウンロード

まずはローカルに落としてこないといけないので
コマンド ``` Ctrl + Shift + P ``` を実行して、
``` SFTP: Sync Remote -> Local ``` を選択(入力)してください。

エディタ左下が激しくぐるぐる動き出します。
最初なんで長いです。

``` done. ```と表示されれば完了です。

### アップロード
受信の逆ですね。
変更して保存したら送信。

``` SFTP: Sync Local -> Remote ```です。


## 所感
便利です。おそらく保存と同時に同期をとる方法もあるはずなので探してみますね。
このエディタに限定した話なのでPHPStormとかはデフォでありそう。

では。
遅延評価的なJavaScript(ECMAScript2018)で全ての漢字や絵文字を取得する

実際の遅延評価とは違うと思う(詳しく調べてないけど雰囲気はこれで合ってる、はず)ので詳しいひといたら参考になるURLとか書籍とか教えてもらえると助かります。


漢字

```
[...Array(10000000).keys()].map(function(value){
  return String.fromCharCode(value)
}).filter(function(value){
  return value.match(/[一-龠]/);
})
```


😇絵文字😇

```
[...Array(10000000).keys()].map(function(value){
  return String.fromCharCode(value)
}).filter(function(value){
  return /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu.test(value);
})
```

【参考】
https://stabucky.com/wp/archives/7594 →漢字の正規表現
https://stackoverflow.com/questions/31208058/loss-of-floating-point-precision-in-javascript-arrays-as-they-get-really-large/31208375 →maximum length of an Array is 4,294,967,295 とのことだがこの数で配列を作るとブラウザが止まった
https://blog.tes.co.jp/entry/2018/06/29/145450#Unicode%E3%81%AE%E6%96%87%E5%AD%97%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3 →ECMA script 2018の文字プロパティ
既存のReactアプリケーションにMobXを導入するときの手順

既存のReactアプリケーションに`Provider`と`inject`を使用してMobXの状態を注入する方法が公式で紹介されていますが、少しわかりにくかったので自分がやったことをまとめます。

非公式のチュートリアルに多く見られるようなstoreをまるごと全部ぶっこむような実装ではコンポーネントと状態が密結合すぎて落ち着かないので必要な要素だけinjectするようにします。MobXはそこを密結合にすることでReduxと比べて圧倒的に少ない記述量を可能にしているわけですが…。

## 1. storeを作成

```~/stores/food.js
import { observable, action } from 'mobx';

class Counter {
  @observable counter;

  @action.bound
  increment() {
    this.counter++;
  }
}

export default new Counter();
```

## 2. 既存のコンポーネントにProviderでstoreを提供

```~/App.js
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'mobx-react';
import RootContainer from '~/containers/RootContainer'; // 既存のクラス
import counter from '~/stores/counter';

// たくさんのクラスにstoreを注入したい場合、こんな感じの関数を用意しておくと便利です。
function provideStore(Component, stores) {
  return class extends React.Component {
    render() {
      return (
        <Provider {...stores}>
          <Component {...this.props}/>
        </Provider>
      );
    }
  };
}

const container = provideStore(RootContainer, { counter });

ReactDOM.render(
  container,
  document.getElementById('app')
);
```

## 3. Componentでstoreをinject

```~/containers/RootContainer.jsx
import React from 'react';
import { observer, inject } from 'mobx-react';

// 必要な要素だけ選択的に注入
@inject(({ counter }) => ({
  counter: counter.counter,
  increment: counter.increment
}))
@observer
export default class RootContainer extends React.Component {
  render() {
    return (
      <>
        <div>{ this.props.counter }</div>
        <button onClick={ this.props.increment }>Increment</button>
      </>
    );
  }
}
```

## 所感

- どこにでもいきなりstoreをinjectできるので大規模なアプリケーションになるとしんどい
- せめてComponentにstoreの存在を意識させないために選択的にinjectを行うのが良さそう
- 小さいアプリを個人で作るときなんかはReduxのように丁寧にやるのは面倒くさくてしかたがないので、そういうときはMobXはかなり便利
- TypeScript導入できんのかこれ
isRegisteredForRemoteNotificationsはシミュレータでは常にfalseが帰ってくる

Swiftをやっていて適度にハマってしまったので備忘録も兼ねて。

# プッシュ通知を許可の有無で判定する処理ッ！

タイトルみたいな処理ってあると思うんですね。
許可されていなければ、許可してください〜っていう感じのメッセージを出す的な。

```onegai.swift
if UIApplication.shared.isRegisteredForRemoteNotifications {
  // 通知が許可されている場合
} else {
  // 許可されていない場合
}
```

なんだけれでも、テストしてもテストしても許可されていない場合を処理が通る……
設定を確認して見る限り許可はしているんだけれども？

# そもそもとしてシミュレータでは動かないッ

**シミュレータではそもそもとして動かないんでした。**

そもそもとして、シミュレータではプッシュ通知を受信できないので当たり前といえば当たり前なんですが……

*なぜオレはあんなムダな時間を……*
GitHubのリポジトリにpushしたらpermission denied

## 事象
 ローカルのgit-bashからGitHubのリポジトリにpushしたら以下のエラー

```err.txt
$ git push origin master
remote: Permission to userBrepository.git denied to UserA.
fatal: unable to access 'https://github.com/userB/userBrepository.git/': The requested URL returned error: 403
```

## オペレーション
①git-bashでユーザAでログインしclone～pushまで完了
②さらにユーザBのリポジトリをクローンし、修正後pushしようとした

## ポイント
"Permission to *** denied to"で指定されているユーザがユーザAである

## 原因（と思われるもの)
おそらくOSに何か残っちゃってる？

## 対策
原因ファイルの特定と掃除をする時間がもったいなかったので、「.git」ファイルにpushしたいユーザを直接明記する方法をとった。

①ユーザBリポジトリのローカルディレクトリにできる「.git/config」ファイルを開く
②以下のように記載を変更

```before.conf
[remote "origin"]
	url = https://github.com/userB/personal_training.git
```


```after.conf
[remote "origin"]
	url = https://userB:password@github.com/userB/personal_training.git
```
CentOS6以降 での cron の設定

## 対象者
- CentOS6以降使ってる
- cronで時間帯指定して定期実行したい

### 環境

```
$ cat /etc/redhat-release
CentOS release 6.10 (Final)
```
多分 `CentOS7` もほぼ同じ手順

## 手順

### 1. `cron`インストール  
RHEL6からはデフォルトで`anacron`ってのが入ってる。
この`anacron`をアンインストールして従来の`cron`をインストールする。
(`anacron` ... 負荷が掛からない様にOSが良い感じに時間帯を調整して実行してくれる。つまり自分で実行時間を指定できない)

```
$ sudo yum -y install cronie-noanacron      # noanacronインストール
$ sudo yum remove cronie-anacron            # anacron削除
```
※パッケージの依存関係の問題で、`noanacron`をインストールしてから`anacron`を削除する必要があることに注意

### 2. 設定ファイル編集
```
$ sudo vim /etc/crontab
```

```:crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=hogehoge@example.com
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
  *  *  *  *  * root su - [実行ユーザ] -lc "cd /home/[実行ユーザ]/[実行ファイルDIR] && [実行コマンド]"
  # bundleみたいに実行パスを考える必要があるなら↑の方法が安心ぽい
```

※`$ crontab -e`で編集した方が好ましいかも

### 参照
- [キャッシュ屋blog : CentOSのcron実行時刻をcentos5以前と同様にジャストタイムにする方法](https://blog.redbox.ne.jp/centos6-crontab.html)  
  -> おおよその流れ
- [ALL about Linux : CentOS6 の cron.daily 実行時刻を CentOS5 以前と同様に設定する](http://luna2-linux.blogspot.com/2013/01/centos6-crondaily-centos5.html)  
  -> `anacron`のランダム実行についての説明が丁寧。
- [pospomeのプログラミング日記 : /etc/cron.monthly/ と crontabコマンド　の違い](http://pospome.hatenablog.com/entry/20130104/1357321062)  
  -> タイトル通り
- [qiita : cronからbundle exec...はsu - <USER> -lc ...が一番便利](https://qiita.com/kazuph/items/c530359eada5b2639e68)  
  -> タイトル通り
ユーザによるcssの切り替えで背景色を滑らかに変える方法

#はじめに

「ユーザにcssを切り替えさせる」って個人的には開発側のエゴ丸出しだと思ってます。ユーザがcssの切り替えを迫られることなんてまずないし、それをしたとて感動は知れてますからね。

とはいえ、気になったので実装してみました。

滑らかな変化はちょっとだけ面倒くさい！

##用意するもの
- 対象htmlソース
- デフォルトカラーのcss
- 変化後カラーのcss
- css切り換えのjquery


##対象htmlソース
ユーザにcssを選択させるソースを以下とします。

```
<!-- 変更対象のcss -->
<link rel="stylesheet" href="/assets/css/default.css" id="colorStyle">
～～～～～省略～～～～～
<div class="colorsArea">
	<span data-color="blue" data-bgclr="#afeeee">ブルー</span>
	<span data-color="red" data-bgclr="#ff7f50">レッド</span>
</div>
```

みんな大好きカスタムデータ属性を設定しています。
これ、内訳は

- data-color：cssファイル名
- data-bgclr：設定対象の背景色カラーコード

です。cssファイル名の方はスッとわかると思いますが、カラーコードについては後述。

##デフォルトカラーのcss
次にcssですが、デフォルトのcssに関しては特段言及することはありません。

ただ、通常は色に関する設定も他の設定と同じファイルに記載すると思いますが、動的な色変化を実装する場合は切り分けておいた方がなにかと便利です。ソース編集時の凡ミス予防にもなります。

##変化後カラーのcss
さて、変化後のカラーを記述したcssですが、こちらに実際の滑らかな変化の部分を書きます。
これはアニメーションで変化するので、以下のようにしてください。（色は任意のものに変更しましょう）

```
@keyframes colorChanger {
  100% {
	background: red;
  }
}
.mainWrap{
	animation: 1s colorChanger 1;
	animation-fill-mode: forwards;
}
```

## css切り換えのjquery

最後にjqueryです。これが一番肝心です。

```
$('.colorsArea span').on('click', function(){

	/* 単純なcssの切り替え */
	document.getElementById("colorStyle").href = "/assets/css/" + $(this).data('color') +".css";

	/* 背景色をアニメーション後に変更する */
	var $clr = $(this).data('bgclr');
    setTimeout(function(){
        $('.mainWrap').css('background',$clr);
    },1000);

});
```

cssの切り替えに関しては言わずもがなですが、滑らかの変更のポイントはあとのsetTimeout内の処理です。


変更後のcssでアニメーションによる滑らかな色の遷移を行っていますが、実はこれ、100%の状態の「background-color」は「background-color」に適用されないんですね。

cssで指定した「animation-fill-mode: forwards;」はアニメーション100%の状態で維持はしても「background」プロパティに設定したことにはなりません。

だから明示的に「background-color」を書き換えてやる必要があります。

この明示的な変更をしないと何が起きるかというと、アニメーションが走り出した瞬間パッと「background-color」の設定色に変ってしまいます。これでは滑らかもクソもないので、上記の通り、明示的な指定が必要になります。

#おわりに
実装時、結構戸惑ったんですが、アニメーションが完了したタイミングで色指定を改めてしてやれば疑似的に次に起こるアニメーションの0%時点の背景色を設定した感じになります。

ヤフーのトップもそうですけど、「カチッ」と変わるのはままありますが、スムーズなのはあまり見ない気がするのでちょっと差別化したいと思った方はどうぞ。
CakePHP3にてThe XXX association is not defined on YYY.

CakePHPでテーブルを結合するときはクエリービルダーで以下のように記述します。
（[マニュアル](https://book.cakephp.org/3.0/ja/orm/query-builder.html#contain)）

```php:
$query = $this->YYY->find()->contain(['XXX']);
```

その際に`The XXX association is not defined on YYY.`が発生してしまった場合の対応方法です。

### 確認１　DB上で外部キーが設定されているか
MySQLの場合は`SHOW CREATE TABLE YYY`で確認ができます。

### 確認２　CakePHP上でTableにアソシエーションが設定されているか
YYYTableとXXXTableにそれぞれへのアソシエーション（hasOne等）があるか確認します。（[マニュアル](https://book.cakephp.org/3.0/ja/orm/associations.html)）

#### アソシエーションが無い場合１：Bakeで生成
`cake\bake model YYY`、`cake\bake model XXX`でTableを再生成する。
アソシエーションが追加されたか確認してください。

#### アソシエーションが無い場合２：手動追加
命名規則の問題や一部のhasMany,belongsToはBakeでうまくアソシエーションが生成できない場合があるようです。
その場合は、手動で追加します。
ただし、次テーブル定義を変更した際にBakeで上書きしないように注意しましょう。

以上です。
concrete5 のページ送りの HTML を適度にお手軽かつ高度にカスタマイズする方法



concrete5 のページ送りを適度にカスタマイズする方法です。

## Bootstrap ベースの場合

デフォルトの concrete5 のページ送りはこれです。
Bootstrap 3 ベースでページネーションが表示されます。

```
<?php if ($pagination) { ?>
    <?=$pagination ?>
<?php } ?>
```

Bootstrap3 のページネーションが表示されます。
オプションをいろいろ追加できます。

```
<?php if ($pagination) { ?>
    <?php
    $pagination = $list->getPagination();
    if ($pagination->getTotalPages() > 1) {
        $options = array(
            'proximity'           => 2,
            'prev_message'        => 'Go to previous',
            'next_message'        => 'Go to next',
            'dots_message'        => 'Dots',
            'active_suffix'       => 'Current Page',
            'css_container_class' => 'my-container-class',
            'css_prev_class'      => 'my-prev-class',
            'css_next_class'      => 'my-next-class',
            'css_disabled_class'  => 'my-disabled-class',
            'css_dots_class'      => 'my-dots-class',
            'css_active_class'    => 'my-active-class'
        );
        echo $pagination->renderDefaultView($options);
    }?>
<?php } ?>
```

参考: Bootstrap3で使えるオプション
https://github.com/whiteoctober/Pagerfanta#twitterbootstrapview-twitterbootstrap3view-and-twitterbootstrap4view


## Bootstrap 以外のテンプレートで実装したい場合

Bootstrap ベース以外で独自に Wrapper とか作りたい場合があります。
https://github.com/whiteoctober/Pagerfanta#defaultview


```
if ($pagination) {
    $pagination = $list->getPagination();
    if ($pagination->getTotalPages() > 1) {
        $paginationView = new \Pagerfanta\View\DefaultView();
        $pagination = $paginationView->render($pagination, $pagination->getRouteCollectionFunction(), [
            'proximity' => 3,
            'prev_message' => 'もどる',
            'next_message' => '',
            'container_template' => '<div id="links">%pages%</div>',
            'span_template'      => '<b class="%class%">%text%</b>'
        ]);
        echo $pagination;
    }
}
```

参考: DefaultView で使えるオプション & デフォルト値
https://github.com/whiteoctober/Pagerfanta#defaultview

これで、Bootstrap 以外のページネーションを生成できます！
Lightning コンポーネント開発 TIPS: フローをモーダル表示する方法

最近なにかと注目を集めているフローですが、今回はそのフローについてです。
事前に Flow Designer で作成したフローをカスタム　Lightning コンポーネントでモーダル表示する方法をご紹介します。

# 動作イメージ
- リードのレコード詳細ページに配置された`フローを開始` ボタンを押すと、事前に作成した　`ExampleFlow` というフローがモーダル表示されています。
- フロー自体は２つのスクリーンで構成されており、ぞれぞれ以下の様に作成しています。
    - 1枚目: 入力変数に渡されたリードのレコードIDを表示
    - 2枚目: 「最後のページです。」というメッセージを表示
- フローが終了するとモーダルも自動で閉じます。
![ezgif-3-0754684aa68e.gif](https://qiita-image-store.s3.amazonaws.com/0/26378/2f318b83-ab12-e3c6-6cdc-fffaafa27db8.gif)

## コンポーネントの実装例
- フローをモーダルで表示する`FlowButton` という Lightning コンポーネントを作成します。
- ボタンが押されると、　`lightning:overlayLibrary` を利用してモーダルを表示した後、 `lightning:flow` によりフローが開始されます。
- フローに引数を渡したい時は、`lightning:flow`　を開始する時に値を渡します。(フロー側に入力変数を作成するのを忘れないように！)

```html:FlowButton.cmp
<aura:component implements="flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId" access="global" >
    <!-- Global Attributes -->
    <aura:attribute access="global" type="String" name="label"    default="フローの開始" />
    <aura:attribute access="global" type="String" name="flowName" default="ExmapleFlow" />
    
    <!-- Private Attributes -->
    <aura:attribute access="private" type="Aura.component" name="modal" />
    
    <!-- Overlay Library -->
    <lightning:overlayLibrary aura:id="overlayLib"/>
    
    <!-- User Interface -->
    <div>
        <lightning:button variant="brand" label="{!v.label}" onclick="{!c.onButtonClicked}"/>
    </div>    
</aura:component>
```

```js:FlowButtonController.js
({
    onButtonClicked : function(c, e, h) {
        h.createComponent(c, h, "lightning:flow", {
            onstatuschange: c.get("c.onStatusChanged"),
        })
        .then($A.getCallback(function (flow) {
            c.find("overlayLib").showCustomModal({
                body: flow
            })
            .then($A.getCallback(function(modal) {
                c.set("v.modal", modal);
                flow.startFlow(c.get("v.flowName"), [{ 
                    name : "recordId", 
                    type : "String",
                    value: c.get("v.recordId") 
                }]);
            }));
        }))
        .catch(function(reason) {
            console.error(reason);
        }); 
    },
    onStatusChanged: function (c, e, h) {
        switch(e.getParam("status")) {
            case "FINISHED":
                c.get("v.modal").close();
                break;
            case "FINISHED_SCREEN":
            case "STARTED":
            case "PAUSED":
            case "ERROR":
                break;
        }
    },
})
```

```js:FlowButtonHelper.js
({
    createComponent: function(c, h, componentDef, componentAttributes) {
        return new Promise(function (resolve, reject) {
            $A.createComponent(componentDef, componentAttributes, function(newComponent, status, errorMessage){
                if (status === "SUCCESS") resolve(newComponent);
                else if (status === "ERROR") reject(errorMessage);
            });
        });
    }
})
```
PHP基礎（５）反復

#反復
反復処理にはfor文、foreach文、while文を使います。

```php

<?php

/* for */
for ($i = 1; $i <= 10; $i++) {
    echo $i;
}

/* for */
for ($i = 1; ; $i++) {
    if ($i > 10) {
        break;
    }
    echo $i;
}

/* foreach */
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
var_dump($arr);
/*変数の前に&をつけるとデータそのものにアクセスできる参照渡しになります。*/

/* while */
$num = 0;
while ($num < 3) {
    echo $num;
    $num ++;
}
?>
```

#演習0-2

**0-2-1）**
if文を使い、整数の評価で、==, <, <=, =>, > を使ってif文の真偽判定を行い、様々な値を使って、条件分岐できることを確認して下さい。

**0-2-2)**
三項演算子を使い、ある2つの変数に入っている文字列の評価をして一致しているとき"一 致"と、一致していないときは"不一致"という文字列を新たな変数に代入することを確認して下さい。

**0-2-3）**
while文を使い、整数の1から9までの数値を全て加算して合計を計算するコードを作って動きを確認して下さい。

[＜＜PHP基礎（４）条件分岐]
(https://qiita.com/taka027/items/eba98138a9816ced69fc)

[PHP基礎（６）関数＞＞]
(https://qiita.com/taka027/items/dcd266c607ceb14da28e)
intellij IDEAでvue-cli3のコード補完を有効にする方法

# 概要
intellij IDEAでvue-cli3ベースの開発をしている際にエイリアス(@)を用いたimport文のコード補完がうまく行かなかったのでその対処法を書いておきます。

``` Home.vue
<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue' // <-ここで補完を有効にしたい

export default {
  name: 'home',
  components: {
    HelloWorld
  }
}
</script>
```

## 解決方法
1. 下記設定画面を開く  
Preferences -> Languages & Frameworks -> JavaScript -> Webpack

2. webpack configuration file:に下記をセットする  
{プロジェクトパス}/node_modules/@vue/cli-service/webpack.config.js

以上です。 
誰かの参考になれば幸いです。
update_attibutesとassign_attributes違い

###update_attibutes
updateは複数のattributeをまとめて変更してDBに保存します。

###assign_attributes
assign_attributesは特定のattributeを変更するためのメソッドです。
オブジェクトの変更をしただけで、DBには保存されていません。

参考
https://qiita.com/tyamagu2/items/8abd93bb7ab0424cf084
https://morizyun.github.io/ruby/active-record-attributes-save-update.html
【ASP.NET】JavaScriptで変更した値をポストバック後にも保持する

# 使いどころ
サーバー側で処理するまでもないちょっとした処理をjsで行いたいことがよくあります。

例えば下記のように、ユーザーが購入数（TextBox）の数字を変えると、合計金額（Label）の値が自動的に「単価 x 購入数」の金額になるような表示を作りたいとします。

> 購入数　：[　3]個　　←TextBox
単価　　：100円　　　←Label
合計金額：300円　　　←Label

```html:aspx
購入数　：<input type="text" id="購入数" onchange="calcTotal();" />個

単価　　：<asp:Label ID="単価" Text="100" runat="server" /> 円

合計金額：<asp:Label ID="合計金額" runat="server" />円

<script>
function calcTotal() {
    /*合計金額*/.innerText = /*購入数*/.value * /*単価*/.innerText
}
</script>
```

ところが、javascriptでラベルの値を変えても、何らかのポストバックが発生すると元に戻ってしまいます。

# ポストバックの仕様
実はポストバック時に現在の値が送信されるものとされないものがあり、それはその要素の種類によって決まっています。

例えばTextBoxなどは、ユーザーによって値が書き換えられることが想定されるため、ポストバック時に現在値が送信されます。そのため、特に何もプログラミングしなくても最新の値が適用されます。
逆にLabelなどは、基本的に値が変わることはありえないと想定されているため、ポストバック時に現在の値が送信されません。そのため、初期値が適用されます。

# HiddenFieldを使う
ということで、ポストバック時に現在の値が送信される種類のコントロールであるHiddenFieldを使います。
クライアント側ではラベルと隠しフィールドの両方の値を変更します。
サーバー側ではPageLoadイベントの中でラベルの文字列を隠しフィールドの値で上書きします。

```html:aspx
購入数　：<input type="text" id="購入数" onchange="calcTotal();" />個

単価　　：<asp:Label ID="単価" Text="100" runat="server" /> 円

合計金額：<asp:Label ID="Label合計金額" runat="server" />円
<asp:HiddenField ID="Hidden合計金額" runat="server" />
```
```js:javascript@aspx
function calcTotal() {
    const total =
        parseInt(document.getElementById('購入数').value, 10)
        * parseInt(document.getElementById('<%= 単価.ClientID %>').textContent, 10);

    document.getElementById('<%= Label合計金額.ClientID %>').innerText = total;
    document.getElementById('<%= Hidden合計金額.ClientID %>').value = total;
}
```
```cs:C#
protected void Page_Load(object sender, EventArgs e)
{
    Label合計金額.Text = Hidden合計金額.Value;
}
```
autocompleteと戦ってみた時の話

input type="password"のあるFormをsubmitすると出てくる「パスワードを保存しますか？」的なアレ。
いつもお世話になっているけれど、パスワードの変更画面等、いらない時にも出てくるのは困りもの。

IEやEdgeだと下にちょろっと出てくるだけなのであまり気にならないけれど、ChromeやFireFoxだと結構目立つダイアログが出てくるんで、いらない時は正直うざい。

という訳で戦ってみた。

対象ブラウザ:IE11,Edge,Chrome(68),FireFox(62)

#1.autocomplete="hoge"
https://developer.mozilla.org/ja/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
を参考に、passwordにautocomple属性をつけてみた。

```html
<input type="text" name="id" />
<input type="password" name="password" autocomple="xxx" />
```
こんな感じ。

**結果:NG**
全ての対象ブラウザで当然のようにパスワードの保存を尋ねてくる始末。こりゃダメだ、次。

#2.ダミーの`<input type="password">`を配置する
https://qiita.com/saitoxu/items/f565172da3028c1544f7
に記載の方法。これはちょっと期待できるかも？

**結果:IE11,EdgeのみOK**
IEとEdgeで上手くいったので「お？」と思ったが、FireFoxでは普通にパスワードの保存を聞いてきた。Chromeも現在のバージョンだとダメな感じ。

#3.onkeyupでhiddenに移し、●で置換する

type="password"を使わず、type="text"でkeyupイベントを拾って何とかしてみようとした。
うろ覚えな上に失敗なのでコードは雰囲気で。

```html:html
<input type="text" name="id" />
<input id="disp" type="text" name="passwordDisp" style="ime-mode:disabled" onpaste="return false" />
<input id="password" type="hidden" name="password" />
```

```javascript:javascript
$(window).load(function(){
  $("#disp").keyup(changePassword());
})
function changePassword(){
  // ここで$("#disp").val()を一文字づつ調べ、●でなければ$("#password")に移し、
  // dispの方は●に置換する
}
```
結果:NG
半角限定だし貼り付けも抑止したから本当に●が入ってくることもないし、これなら大丈夫、と思ったけれど、大きな誤算。
"ime-mode:disabled"ってブラウザによっては効かないのね。
しかもWindows10の予測変換をクリックで決定すると、何のイベントも起こさず文字が挿入されるし。

#4.入力の時だけpasswordにする
JQueryでinputのtype属性を弄り、フォーカスイン時にpasswordにしてフォーカスアウト時にはtextにしてしまう方法。

```html:html
<input type="text" name="id" />
<input id="disp" type="text" name="passwordDisp" styleClass="inputPassword" />
<input id="password" type="hidden" name="password" />
```
```css:css
/* chromeでの見た目をpasswordっぽくする */
.inputPassword{
  -webkit-text-security: disc;
}
```

```javascript:javascript
$(window).load(function(){
  $("#disp").focus(function(){
    $("#disp")[0].type = "password";
    // hiddenの値をpasswordに移動
    $("#disp").val($("#password").val());
    focus = true;
  });

  $("#disp").blur(function(){
    // passwordの値をhiddenに移動
    $("#password").val($("#disp").val());
    // passwordの値を●に置換
    var mask = "";
    for(var i=0; i<$("#disp").val().length; i++){
      mask += "●";
    }
    $("#disp")[0].type = "text";
    $("#disp").val(mask);
    focus = false;
  });

  // リンクでsubmitした時にblurイベントが発生しなかったので一応
  $("form").submit(function(){
    if(focus){
      $("#disp").blur();
    }
  });
})
```
結果:OK
やっと全ての対象ブラウザを騙すことができた。

IEだとフォーカスインした時にキャレット位置が勝手に最初に移ってしまうので、その辺を調整すれば完成。


パスワードを保存させたいっていうブラウザ開発者の意志は分かるけど、今回問題になったパスワード変更画面とかどう考えてるんだろうね。
Android5.1のWebViewでBootstrap4.1.0のモーダル表示時に「TypeError: Object.keys called on non-object」が発生する件


# 起きたこと
Android 5.1 内のWebViewにてBootstrap4のモーダルを表示させようとしたところエラーが発生しモーダルが表示されない。

```
TypeError: Object.keys called on non-object
```

```javascript
  function _objectSpread(target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i] != null ? arguments[i] : {};
      var ownKeys = Object.keys(source); //←ここで「TypeError: Object.keys called on non-object」が発生

      if (typeof Object.getOwnPropertySymbols === 'function') {
        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
        }));
      }

      ownKeys.forEach(function (key) {
        _defineProperty(target, key, source[key]);
      });
    }

    return target;
  }
```

# 環境など
Android5.1(シミュレーター)
Bootstrap 4.1.0


# 原因
Bootstrap側のバグ（？）でした。（IE11などでも同様の事象が起きるらしい）
https://github.com/twbs/bootstrap/issues/26266
https://github.com/twbs/bootstrap/pull/26291

# 対策
Bootstrapのバージョンアップ
4.1.0 → 4.1.1 で事象が解決することを確認済み。
Xcode10の背景をカスタマイズする手順書

備忘録として:writing_hand: 個人的に好きなカラーテーマ「Monokai」に変更する。
<img width="427" alt="スクリーンショット 2018-10-12 22.17.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/112818/c3c1a105-9186-9f7b-9ede-ccd45f0872b4.png">

# 環境
macOS：Mojave
Xcode：10.0

# 手順
## Alcatrazの導入
AlcatrazはXcodeのパッケージマネージャプラグイン。
下記の記事を参考にターミナルを叩いていく。
[Xcode9 で Alcatraz を入れる方法](https://qiita.com/YamagishiRyu/items/5667ea8b87beb4792469)

```
$ gem install update_xcode_plugins
```
↑はうまくいかなかった:skull:ので↓を叩く。

```
$ sudo gem install -n /usr/local/bin update_xcode_plugins
```
途中で求められるパスワードはPCを立ち上げるときのものを入力し、続けて↓2つを叩く。

```
$ update_xcode_plugins
$ update_xcode_plugins --unsign
```

`$ update_xcode_plugins --unsign`の途中でXcodeの確認を求められるので、間違ってなければエンター。
合わせて、`Unsign xcodebuild too?`と効かれるのでNoで答える（nと入力）。
参考：[最新Xcode環境(Xcode8)でプラグインを導入する方法](https://qiita.com/AiRKINGno9/items/012b76c9b42260764e4e)
<img width="568" alt="スクリーンショット 2018-10-12 14.44.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/112818/7414e5e9-548f-37ee-06d5-a09d8d313b56.png">
その後、パスワードを入力すれば導入は完了🎉

## Xcodeを起動
開くと`Unexpected code bundle "Alcatraz xcplugin"`というWarningが出るので、「Load Bundle」を選択。
<img width="417" alt="スクリーンショット 2018-10-12 22.03.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/112818/774a04c7-9e4c-fafe-f6e3-d8ee18374262.png">
その後キーチェーンのパスを求められたら入力して「許可」。
メニューバーのWindowに「Package Manager」が追加されているのを確認🎉
<img width="336" alt="スクリーンショット 2018-10-12 22.13.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/112818/cac2997b-950e-1b77-bd7b-36cdf2071f69.png">

## カラーテーマのインストールと設定
Package Managerから「monokai」を検索しインストール。
Xcodeを再起動してって言われるので再起動する。

PreferencesのFonts＆Coloresに「Monokai」が表示されるようになっているので選択。
<img width="792" alt="スクリーンショット 2018-10-12 22.20.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/112818/9b0e9d95-1455-0fe1-ff0c-16601bee674f.png">
あとはお好みで背景色とかフォントサイズとかカスタマイズして完成！🎉
PHP基礎（４）条件分岐

#条件分岐 
if文は条件に一致するかしないかで処理を分岐する制御文です。

```php
<?php
$x = 2;
$y = 2;
if ($x == $y) {
  print("xとyは同じです");
} else if ($x < $y) {
  print("xよりyは大きいです");
} else {
  print("xよりyは小さいです");
}
?>
```

比較演算子は主に下記のようなものがあります。

| 比較演算子       |       説明 |    説明   |
|:-----------------:|:------------------|:------------------|
| \$a == \$b	| 等しい	| 型の相互変換をした後で \$a が \$b に等しい時に TRUE。|
| \$a === \$b	| 等しい	| \$a が \$b に等しく、および同じ型である場合に TRUE 。|
| \$a != \$b	| 等しくない	| 型の相互変換をした後で \$a が \$b に等しくない場合TRUE。|
| \$a <> \$b	| 等しくない	| 型の相互変換をした後で \$a が \$b に等しくない場合TRUE。|
| \$a !== \$b	| 等しくない	| \$a が \$b と等しくないか、同じ型でない場合に TRUE 。|
| \$a < \$b	| より少ない	| \$a が \$b より少ない時に TRUE。|
| \$a > \$b	| より多い	| \$a が \$b より多い時に TRUE。|
| \$a <= \$b	| より少ないか等しい	| \$a が \$b より少ないか等しい時に TRUE。|
| \$a >= \$b	| より多いか等しい	| \$a が \$b より多いか等しい時に TRUE。|

論理演算子は、条件を組み合わせるときに使います。

&&	かつ
||	または
!	否定（TRUEとFALSEが逆転します）

if (\$a >= 0 && \$b > 0) という使い方をします。


 
#三項演算子 
条件に一致した場合は前の値、一致しない場合は後の値が返される構文です。

```php
<?php
// 三項演算子:条件がtrueだと最初の値、falseのときは後の値が採用される
$x = 2;
$y = 2;
$msg = ($x == $y ? "xとyは同じです" : "xとyは異なります");
?>
```

[＜＜PHP基礎（３）型の変換]
(https://qiita.com/taka027/items/d162b8eefad38c26bc05)

[PHP基礎（５）反復＞＞]
(https://qiita.com/taka027/items/95ebe9087f37dcb1d5a4)
Django2.0 + WeasyPrint でお手軽にPDF出力

# WeasyPrintとは
- HTMLを簡単なコードでPDFやPNGなどの静的ファイルに変換、出力ができるPythonで書かれたOSSライブラリです。
- [公式サイト](https://weasyprint.org/)

# 導入方法
- [ここ](https://weasyprint.readthedocs.io/en/latest/install.html)を参照
    - 環境にもよるが、 `libffi` などの外部ライブラリが必要なので必要に応じてインストールする。参考:[Macの場合](https://weasyprint.readthedocs.io/en/latest/install.html#macos)

# 基本的な使い方
[ここ](https://weasyprint.readthedocs.io/en/latest/tutorial.html#quickstart)にも書いてありますが、

```python
from weasyprint import HTML
```

で weasyprintのHTML classをimportして

```python
HTML('https://qiita.com/').write_pdf('/tmp/qiita.pdf')
```

のように引数に対象ページのURLを指定したHTMLオブジェクトの `write_pdf` メソッドで引数に出力パスを指定するだけでPDF化されます。

生のHTMLを渡してレンダリングされたものをPDF化することも可能です。

```python
from weasyprint import HTML

HTML(string='''
    <h1>Hello World</h1>
''')
```

# Djangoで表示されるTemplateをPDF化してみよう
DjangoのViewにPDF出力用の関数を用意し、そこにURLルーティングしている前提です。

```python
def pdf_export(request):
```

まずはDjangoのTemplateをロードする。

```python
from django.template.loader import get_template
html_template = get_template('hoge/fuga.html')
```

次に、ロードしたTemplateをHTML化する

```python
# Templateに渡すオブジェクトがある場合は、以下のようにdictで指定する。
html_str = html_template.render({
    'param1': 'hoge',
    'param2': 'fuga',
}, request)
```

生成したHTMLをPDF化する

```python
from weasyprint import HTML, CSS

# base_urlを指定し、Template内で {% static 'hoge' %} として参照しているAssetを絶対パスで読み込む。
pdf_file = HTML(string=html_str, base_url=request.build_absolute_uri()).write_pdf(
    # 必要に応じて追加CSSを指定できる。
    stylesheets=[
        CSS('static/css/hoge.css')
    ],
)
```

生成したPDFをHTTPのレスポンスとして返却する

```python
response = HttpResponse(pdf_file, content_type='application/pdf')
# ストレージに保存する際のデフォルトファイル名を指定できる
response['Content-Disposition'] = 'filename="fuga.pdf"'

return response
```


これだけです。
とても簡単ですね。


最終的に以下のような形になります。

```python
from django.http.response import HttpResponse
from django.template.loader import get_template
from weasyprint import HTML, CSS

def pdf_export(request):
    html_template = get_template('hoge/fuga.html')

    html_str = html_template.render(request)  # ここでrequestを渡してあげないと、Template側で必要な変数やプリセットなどが取得できずエラーになる場合がある

    pdf_file = HTML(string=html_str, base_url=request.build_absolute_uri()).write_pdf(
        stylesheets=[
            CSS('static/css/hoge.css')
        ],
    )

    response = HttpResponse(pdf_file, content_type='application/pdf')
    # ストレージに保存する際のデフォルトファイル名を指定できる
    response['Content-Disposition'] = 'filename="fuga.pdf"'

    return response
```


上記の関数にブラウザからアクセスすると、指定したTemplateのPDFがダウンロードできます。
Dockerで構築したPHP動作環境でLaravel実行の際のDB接続情報について





# Dockerで構築したPHP動作環境でLaravelフレームワーク動作させる。

## (1)コンテナのシチュエーション


```ini
version: '2'

services:
    app:
        build: "./docker-file"
        ports:
            - "11180:80"
        volumes:
            - "./source-file:/var/www/html"
        links:
            - "mysql:mysql"
            - "postgres:postgres"
    postgres:
      image: postgres:9.4
      environment:
        POSTGRES_USER: my_application
        POSTGRES_PASSWORD: my_application
      restart: always
      ports:
        - "5432:5432"
      volumes:
        - "postgres_db:/var/lib/postgresql/data"
        - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    mysql:
      image: mysql:5.7.22
      volumes:
        - "./mysql-data:/var/lib/mysql"
        - "./mysql-cnf:/etc/mysql/conf.d"
      ports:
        - "3306:3306"
      environment:
        # アプリケーションから利用するユーザー
        - MYSQL_DATABASE=my_application
        - MYSQL_USER=my_application
        - MYSQL_PASSWORD=my_application
        # root パスワード
        - MYSQL_ROOT_PASSWORD=root_password
volumes:
  postgres_db:
    external: true
```

この環境で
ホスト側の ./source-file/ というマウントされたディレクトリに
Laravelアプリケーションをインストール


## (2)Laravelの .env ファイルにDB接続設定を入力する

*** 当初何も考えずにDB接続環境を以下の用に設定した ***

```ini

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_application
DB_USERNAME=my_application
DB_PASSWORD=my_application
```

ところが、上記状態で実行させると

```php

SQLSTATE[HY000] [2002] Connection refused (SQL: select * from `members`)
```

上記の用にDB側から拒絶したというエラーが返却される。
結論としては

```ini
# 以下のように実行中のコンテナ名を記述
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=my_application
DB_USERNAME=my_application
DB_PASSWORD=my_application
```



## (3)Laravel php artisan tinker だと動く?
1時間ほど上記の、箇所でハマってしまって備忘録のために残します。
この、コンテナから他コンテナへの接続に関しては
どこかの記事で、docker-compose.yaml上で指定された
コンテナ名で接続できる云々が記載された記事をどこかで見かけましたが、残念がら失念してしまっていてうっかりこのようなミスではまってしいました。


ところが
Laravelのコマンド

```ini
php artisan tinker
```
このインタラクティブシェル上で

```ini
>>> App\SomeModel::all();
```
と実行するとなぜか host = 127.0.0.1 の指定でも動作していました。
※どなたか、当該事象についておわかりの方はご教授くださいますと幸いです。