OmniAICreator/Qiita-1.07M huggingface dataset:
Xcode10に上げて自動変換かけたらdidFinishLaunchingWithOptionsが呼ばれなくなった時の対応

# 元のコード
```Swift
func application(_: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
```

# 自動変換後のコード
```Swift
private func application(_: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {}
```

# 修正後のコード
```Swift
func application(_: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {}
```

# 説明
自動変換に任せたら、privateがついていました。
その結果正しく動かなかったみたいです。
自動変換便利だけど気をつけよう...

## 参考
https://stackoverflow.com/questions/39888601/private-func-didfinishlaunchingwithoptions-not-being-called-swift-3

## 補足
おそらく以下のようにErrorとWarningが両方でるかとおもいます。
![スクリーンショット 2018-09-25 19.40.12.png](https://qiita-image-store.s3.amazonaws.com/0/121288/82dc6b80-1051-ccc3-7304-0e2b85c97a2d.png)
これに対して、Fix All Issuesを実行すると、本来は上のErrorだけを解決すればいいものが下のWarningも同時に解決されてprivateが付いてしまいます。
Xcode10 Error: Multiple commands produceを解決する

# 問題点

Carthageを使っているプロジェクトにおいて、Xcodeを9から10に上げたところ、`Error: Multiple commands produce` というエラーのためにビルドができませんでした。


<img width="814" alt=" 2018-09-25 17.40.55.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/31587/0e679aae-5b67-2757-6854-78bb5cfe44ff.jpeg">

エラー文言をみるとこんなことが書いてあるようです

* ビルドターゲットはcopy commandを持っている
* このコマンドはRun Script carthage copy-frameworksに依存している


Xcode10からデフォルトになった新しいビルドシステムは、フレームワークのコピーシステムが厳密に稼働するようで、コピーが重なるとエラーとなってしまうようです。

# 解決方法: 古いビルドシステムに戻す
後ろ向きな解決方法。
新しいのがだめなら古いのに戻す方針です。

Xcodeメニューから`File > Project/Workspace Setting...`をクリックします。

![ 2018-09-25 17.41.40.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/ff12cfe4-1d68-184a-7a40-cb27ca50d898.jpeg)

Build Systemを`Legacy Build System`に変更します。
![ 2018-09-25 17.41.52.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/e6610278-7c4c-e672-bde3-61d1ff8fb9d2.jpeg)

これでビルドがうまくいくはず


# 解決方法: 重複しているコピーを削除する
新しいビルドシステムを活かした方法。
まず先程`Legacy Build System`に変えた設定を`New Build System(Default)`に戻します

![ 2018-09-25 17.43.56.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/fd58ae8e-4a50-e0d0-6461-1ac7c5708273.jpeg)


Carthageのinputファイルはそのまま
<img width="829" alt=" 2018-09-25 17.44.23.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/31587/58cf4843-9cbe-e91e-87d5-55dc32e1bc8c.jpeg">

TARGETS → Build Phases → Embed Frameworks からエラーで怒られていたFrameworkを消します。
ここでは`Intercom.framework`を削除します。
<img width="734" alt=" 2018-09-25 17.44.12.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/31587/b1e68849-a0be-7ad0-f0b2-04a271ca22a9.jpeg">

すると新しいビルドシステムでビルドができるようになります。



# 参考


[swift - Carthage: Multiple build commands for output file framework - Stack Overflow](https://stackoverflow.com/questions/46800932/carthage-multiple-build-commands-for-output-file-framework)
iptablesのみでリバースプロキシ配下のアプリケーションサーバ（Webサーバ）の接続元IPアドレス制限を実現する方法

Amazon Web Services(AWS)のApplication Load Balancerや、リバースプロキシを構成したNginxなどのリバースプロキシ配下のアプリケーションサーバにて、iptablesのみで接続元IPアドレス制限を実現する方法です。

本手順のメリットは、接続元アクセス制御（接続元IPアドレス制限）のために、ApacheやNginxなどのWebサーバ（HTTPd）を立てる必要が無いことです。また、Linuxが標準で提供する（カーネルに内包される）機能を利用するため、デーモン（サーバ）が落ちるような心配をする必要がありません。

デメリットは、セグメント（サブネット）での制限が行えない、行えても前方一致での制限（例：192.168.1. → 192.168.1.0～255）に限られることです。ただし、膨大なIPアドレスを保有していなければ、それほど影響は無いものと思います。

## 特定のIPアドレスのみ拒否する
```
# iptables -A INPUT -m string --algo bm --string 'X-Forwarded-For: <拒否したいIPアドレス>' -j DROP
```

## 特定のIPアドレスは許可して、それ以外は拒否する
```
# iptables -A INPUT -m string --algo bm --string 'X-Forwarded-For: <許可したいIPアドレス>' -j ACCEPT
# iptables -A INPUT -m string --algo bm --string 'X-Forwarded-For: ' -j DROP
```
KotlinのListとSequenceって何が違うの？

KotlinのListとSequenceの違いについてまとめました。
一見するとほぼ同じ役割を持っているクラスに見えますが、裏側の動きは根本的に違います。
Sequenceでは関数をチェーンで繋げた場合、効率的に処理を実行することができます。

#KotlinのListとSequenceの違い
下記のサンプルコードを御覧ください。
サンプルコードではlistの関数をチェーンで繋げて、filter, filter, map, take の処理を実施しています。
resultListとresultSequenceはどちらも同じ結果（[2, 4, 6]のList）になります。

```kotlin
fun main(args: Array<String>) {
    val list = (1..1000000).toList()
    val resultList = list
            .filter { it < 500000 }
            .filter { it % 2 == 0 }
            .map { it.toString() }
            .take(3)

    val resultSequence = list
            .asSequence() // Sequenceに変換
            .filter { it < 500000 }
            .filter { it % 2 == 0 }
            .map { it.toString() }
            .take(3)
            .toList() // Listに変換
}
```
resultSequenceの方はlistをSequenceに変換して、処理後にListに戻しています。
一見すると無駄な処理に見えますが、この例の場合はListと比較するとSequenceの方が処理速度が早くなります。
その理由について見ていきましょう。

##Listの場合の操作
こちらのListの場合の操作について見ていきます。

```kotlin
fun main(args: Array<String>) {
    val list = (1..1000000).toList()
    val resultList = list
            .filter { it < 500000 }
            .filter { it % 2 == 0 }
            .map { it.toString() }
            .take(3)
}
```

Listの場合は関数のチェーンの上から順番にすべての値に対して操作が実行されます。
1. 500000より小さいリストを生成
2. 偶数のリストを生成
3. Stringに変換したリストを生成
4. 先頭から3つの値のリストを生成

最終的に欲しい値は先頭から3つの値だけで良いのに対して、
1.では100万件、2.では約50万件、3.では約25万件の値に対して処理を実行しています。
なんだか無駄な処理をしている気がしませんか？
そこでSequenceの出番です。

##Sequenceの場合の操作
こちらのSequenceの場合の操作について見ていきます。

```kotlin
fun main(args: Array<String>) {
    val list = (1..1000000).toList()
    val resultSequence = list
            .asSequence() // Sequenceに変換
            .filter { it < 500000 }
            .filter { it % 2 == 0 }
            .map { it.toString() }
            .take(3)
            .toList() // Listに変換
}
```
この例のSequenceの場合は、filter, filter, map, take　は中間操作として扱われます。
また、toListは終端操作になります。
中間操作は終端操作が呼び出されるまで実行されることはありません。
これを遅延評価と言います。
（中間操作と終端操作に関しては別の記事にしたいと思います。）

Sequenceは以下のように値ごとに処理を実施していきます。
list[0]の値の処理を実施 → list[1]の値の処理を実施 → list[2]の値の処理を実施 → ...

このように値ごとに処理を実施することで、list[5]の処理を実施した時点で、resultSequenceの結果（[2, 4, 6]のList）を求めることができます。
結果を求められた時点で、**それ以降の処理は実施しません**。
つまり、list[6]以降の処理は実行されないので、Listと比較して処理が高速化されます。

##実測値
手元のマシンで実測したところ、Listの方は**100ms**程度、Sequenceの方は**15ms**程度で処理が終了しました。
100万件のリストで実測すると顕著な違いが出ました。

ちなみに100件のリストで試したところ、Listの方は1ms程度、Sequenceの方は10ms程度で処理が終了しました。
恐らくasSequence()やtoList()のコスト分Sequenceの方が遅くなったのかと思います。

実行環境

| 環境 | 詳細 | 
|:-----------------|------------------:|
| macOS High Sierra | ver.10.13.6 | 
| プロセッサ |  Intel Core i7 3.5GHz |
| メモリ | 16GB |

#まとめ
- ListとSequenceは似ているけど裏側の処理は根本的に違います
- Listはすべての値に対して上から操作を実施します
- Sequenceは値を順番に処理して、結果が出た時点で処理を終了します
- 大量件数のリストを関数のチェーンで操作する場合はSequenceにすることで処理効率を上げられます
アイコンフォントを使うと何が嬉しいのか

多くのウェブサイトでアイコンとして，アイコンフォントが導入されている．Webページのみならずスマホのアプリケーションなどでもアイコンフォントが利用されている．

htmlでアイコンを表示する方法としては，アイコン画像をimgタグを用いて記述することもできるが，アイコンフォントを用いると何が嬉しいのだろうか
FontAwesomeを例にアイコンフォントのメリットとデメリットを挙げていく

#メリット
###読み込みが速い
一般にブラウザ上でのアイコンフォントの読み込みは，imgタグによるアイコンの読み込みに比べると速いとされている

###色や大きさを簡単に変えられる
文字と同じようにcssを当てることができるので文字の大きさや色を変えるようにアイコンフォントもいじれる

```html:html
<i class="fa fa-android fa-4x fa-green"></i>

```
`fa-nx`のnを変更することでhtmlのみで大きさを変更することができる



```css:CSS
.fa-green:before
{
	color: #A4C639 ;
}
```
このようにして色やフォントサイズも自由に設定できる


###拡大しても綺麗に表示される
よくある画像ファイルはラスター画像であり，ピクセルによって表示されている．拡大したら輪郭がギザギザになる．
アイコンフォントによって表示される画像はベクター画像であり，拡大しても表示はギザギザにならない．

#デメリット
###特殊なフォントを使用しているときに表示されない可能性
ブラウザのデフォルトのフォントなどを変更している場合は豆腐になってしまう可能性がある
IEでは次のことをすれば簡単に確認できる
インターネットオプションの「全般」タブを開き、「デザイン」セクションの「フォント」で任意のフォントを選択する。そのうえで、同「デザイン」セクションの「ユーザー補助」で「Web ページで指定されたフォント スタイルを使用しない」を選択する。（らしい）

###サイトの読み上げ機能で意図しない動作する可能性
要素に
`aria-hidden="true"`
を指定することによって解決できる


#おまけに
FontAwesomeだとこういう書き方もできる

まずFontAwesome専用のクラスを作り

```css:css
.fb:before
{
	font-family: 'FontAwesome' ;
	padding-right: 5px ;
}
```

各アイコンごとにクラスを作る

```css:css
.fb-sellsy:before
{
	content: '\f213' ;
	color: #0174C8 ;
}
```
この`conntennt:`にはアイコンのユニコードを指定する

```html:html
<span class="fb fb-sellsy">sellsy</span>というウェブサイトがかっこいいですね。
```

とかくとspanタグで囲んだ部分の前に対象のアイコンを置ける
基本的な書き方よりもhtmlを綺麗に書ける（といっているひとがいた）


##参考にしたサイト
http://web-bu.hatenablog.com/entry/2016/10/11/002816
https://syncer.jp/how-to-use-fontawesome
https://saruwakakun.com/html-css/basic/font-awesome

ありがとうございました
at coder beginner 047

B
xy 平面上に、左下の座標が (0,0)、右上の座標が (W,H) で、各辺が x 軸か y 軸に平行な長方形があります。最初、長方形の内部は白く塗られています。
すぬけ君はこの長方形の中に N 個の点を打ちました。i 個目 (1≦i≦N) 点の座標は (xi,yi) でした。
また、すぬけ君は長さ N の数列 a を決めて、各 1≦i≦N に対し、
ai=1 のときは長方形の x<xi をみたす領域
ai=2 のときは長方形の x>xi をみたす領域
ai=3 のときは長方形の y<yi をみたす領域
ai=4 のときは長方形の y>yi をみたす領域
を黒く塗りました。
塗りつぶしが終わったあとの長方形内での白い部分の面積を求めてください。

うーん思いつかない

```
#include<iostream>
using namespace std;
int main() {
	int w, h, n;
	cin >> w >> h >> n;
	int xmax = w, xmin = 0, ymax = h, ymin = 0;
	int x, y, a;
	for (int i = 0; i < n; i++) {
		cin >> x >> y >> a;
		if (a == 1) {
			if (xmin <= x) {
				xmin = x;
			}
		}
		if (a == 2) {
			if (x <= xmax) {
				xmax = x;
			}
		}
		if (a == 3) {
			if (ymin <= y) {
				ymin = y;
			}
		}
		if (a == 4) {
			if (y <= ymax) {
				ymax = y;
			}
		}
	}
	if (xmax - xmin <= 0 || ymax - ymin <= 0)cout << 0 << endl;
	else cout << (xmax - xmin)*(ymax - ymin) << endl;
	return 0;
}
```
うわー賢いてか普通かこれくらい、、白い部分が常に長方形であることに着目やな

C
きつねの次郎と三郎が一次元リバーシで遊んでいます。一次元リバーシでは、盤面には白か黒の石が一列に並んだ状態となっており、列の右端か左端に新たに石を打っていきます。通常のリバーシと同じように、たとえば白の石を打つことで黒の石を挟むと、挟まれた黒の石は白い石に変わります。
ゲームの途中で三郎に急用ができて帰ってしまうことになりました。このとき、盤面の状態は文字列 S で表されます。石は |S| (文字列の長さ) 個並んでおり、左から i (1≦i≦|S|) 個目の石の色は、S の i 文字目が B のとき黒、W のとき白です。
次郎は現在の盤面に対して、できるだけ少ない個数の石を新たに打つことで全ての石を同じ色にしようと考えました。最小で何個の石を打てばよいかを求めてください。
制約
1≦|S|≦105
S に含まれる文字は B または W のいずれかである

```
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<list>
#include<cmath>
#include<map>
using namespace std;
using ll = long long;
const int INF = 1e9;
#define rep(i,n)for(int i=0;i<n;++i)
#define p pair<int,int>
int main() {
	string S;
	cin >> S;
	int sum = 0;
	for (int i = 0; i < S.size()-1; ++i) {
		if (S[i] != S[i + 1]) {
			sum++;
		}
	}
	cout << sum << endl;
	return 0;
}
```
AWS Well-Architected Framework

##■クラウドでの一般設計原則##

AWS Well-Architected Framework の説明の前に！

- 必要なキャパシティを勘に頼らない
- 本番環境でのシステムテストを行う
- アーキテクチャ試行の回数を増やすために自動化を取り入れる
- 発展的なアーキテクチャを取り入れる
- データ計測に基づいてアーキテクチャを決定する
- 本番で想定されるトラブルをあらかじめテストし、対策する



##■AWS Well-Architected Framework とは##
アーキテクチャーの評価、改善のためのフレームワークです。
設計意思決定がどのようにビジネスに意思決定するのか？
５つの柱（観点）に分けて設計の原則、レビューするための質問事項を整理した資料です。

例えば、セキュリティ対策ってどこまでやったらいいの？とか難しいところだと思います。
やるとキリがない！
そこで、AWS Well-Architected Framework を利用することで判断することができます。



##■５つの柱とは##

- セキュリティ
- 信頼性
- パフォーマンス効率
- コストの最適化
- 運用上の優秀性

では、一つ一つ見ていこう！



##■セキュリティ##

- IAM
- 検出制御　
- インフラストラクチャの保護　
- データの保護
- インシデントの保護

認証の仕組みといったIAM、どういう風に侵入や問題が検出されるかといったことに対しての制御や保護、万が一何か起こってしまったときにどう対応するかといった点がポイントです。

では、設計していくときに、

- 強固な認証基盤を整備する
- 後から追跡できるようにトレーサビリティを有効にする
- すべてのレイヤーにセキュリティを適用する
- ベストクラティスを自動化する（できるだけ手動をやめる）
- 転送データ、保存データともに保護する
- できるだけデータにはアクセスできない権限にする
- 万が一に備える



##■信頼性##

- 問題、障害から復旧する
- ベストクラティスを適用する
- 障害を予測、対応、防止する

可溶性を高めるという点はもちろんですが、万が一何か起こったときに適切に復旧できる、万が一を起こさないようにするための予測をするという点がポイントです。

では、設計していくときに、

- 回復手順をリハーサルする
- 障害からの回復を極力自動化する（手作業によるミスを防ぐ）
- 冗長化する
- キャパシティ予測をやめる


##■パフォーマンス効率##

- カスタマイズ可能なソリューションを選択する
- 継続的な革新のためにレビューし、AWSのサービスでモニタリングする

継続的な革新とは、今手動で行っているものも未来ではAWSの新しいサービスとして提供されるかもしれません。その場合は手動による運用上のコストがなくなり、効率が上がります。

では、設計していくときに、

- 最新技術を積極的に導入する
- グローバル化を即座に実行する
- サーバレスアーキテクチャを用意する
- 試行の回数を増やし、最適な技術を選択する



##■コストの最適化##

- コスト効率の高いリソースを利用する
- 需要と配給の一致
- 支出の認識を高め、最適化する

では、設計していくときに、

- 従量課金の導入
- TCOツールを活用して予算を予測する
- データセンタ運用のため投資をやめる
- 見えないコストを分析し、マネージドサービスを利用して、所有コストを低減する



##■運用上の優秀性##

- 変更管理の自動化
- イベントに対応する
- 標準を定義する

では、設計していくときに、

- 運用をコード化する
- ドキュメントに注釈をつける
- 頻繁に運用手順を見直し、障害を予測し、失敗を改善に役立たせる


##Well-Architected Guidance Engine##

[AWS Well-Architected Guidance Engine がAWS Control Tower で利用可能に](https://aws.amazon.com/jp/about-aws/whats-new/2020/12/aws-well-architected-guidance-engine-now-available-in-aws-control-tower/)

- 質問と回答に基づいて、コンソールで規範的ガイダンスを受け取ることができます。
- Control Tower が利用できるリージョンで利用できる必要がある。
- Control Tower は推奨設定に基づくAWSアカウントを数クリックで立ち上げるサービスです。
【Java】ファイルの出力、書き込みの方法！

#はじめに
ファイル操作において、ファイルへアクセスするときにIOEceptionというエラーが発生することがあるので、例外処理を施すと良いです。

最下部に用語説明をつけています。

Java勉強の一環として、知識をアウトプットしたいと考え投稿をはじめました。
間違いなどあったらご指摘よろしくお願いいたします！
##ファイルの内容を出力する
importするクラスは、FIle, FileReader, BufferedReader.
流れとしては、**ファイルの選択→登録→バッファリング→読み込み→出力**となります。

まず、今回使用するファイルを選択するため、Fileオブジェクトを作成する。
引数には、指定したいファイル名を入れる。

```ruby:qiita.rb
File file = new File("ファイル名");
```
次に、選択したファイルを登録するため、FileReaderオブジェクトを作成する。
（ここでは登録とは、ファイルを読み込む宣言のようなものだと捉えています。）
引数には、Fileオブジェクトを入れる。

```ruby:qiita.rb
FileReader fr = new FileReader(file);
```
さらに、効率良く処理ができるように、BufferedReaderオブジェクトを作成することでバッファリング。
引数には先ほどのFileReaderオブジェクトを入れる。

```ruby:qiita.rb
BufferedReader br = new BufferedReader(fr);
```
BufferedReaderのreadLineメソッドを使い、ファイル内容を読み込む。
readLineメソッドは文章を1行ずつ読み、最後まできたらnullを返す。

読み込んだ文章を出力するため、while文で文字列変数にreadLineメソッドで得た文を代入し、それを出力。

```ruby:qiita.rb
String str = "" ;
String data ;

while((data = br.readLine()) != null) {
			str+=data;
			}

System.out.println(str);
```


##ファイルに書き込む
importするクラスは、FIleWriter, PrintWriter, BufferedWriter.
流れとしては、**ファイルの選択→登録+バッファリング→書き込み→保存**となります。

ファイルに書き込む時は、FileWriterオブジェクトを作成し、ファイルを選択する。
第1引数には、選択したいファイル名を入れる。ファイルに文字を書き込み・上書きするだけでなく、追記していきたい場合は、第2引数にtrueを入れる。

```ruby:qiita.rb
FileWriter fw = new FileWriter("ファイル名",true);
```

その後、書き込むファイルを登録するため、PrintWriterオブジェクトを作成する。
引数にて、BufferedWriterオブジェクトを定義する。BufferedWriterオブジェクトの引数には、FileWriterオブジェクトを入れる。

```ruby:qiita.rb
PrintWriter pw = new PrintWriter(new BufferedWriter(fw));
```
PrintWriterのprintlnメソッドを使い、文字列を書き込むことができる。
引数には書き込みたい文字列を入れる。

最後に、PrintWriterのcloseメソッドを使うことで、書き込んだ文字列をファイルに保存することができる。

```ruby:qiita.rb
pw.println("書き込みたい文字列");
pw.close();
```


##バッファリング
データを一定量までメモリにためて、たまったら処理命令を実行すること。

通常ReaderやWriterのクラスはストリームでデータを読み書きしていくが、それではデータ量が多い場合に処理が多くなりパフォーマンスが悪い。そのため、バッファリングを用いる。
##ストリーム
データを文字単位、バイト単位で処理していくこと。
##例外処理
エラーが発生したときにどのような処理をすれば良いかあらかじめ設定しておくこと。
try-catch文を用いる。
環境変数 LESS_TERMCAP_* を fish shell に設定する

# 概要
[あなたの知らない less の世界](https://qiita.com/delphinus/items/b04752bb5b64e6cc4ea9)の中で書かれている以下のbash向け環境変数を fish shell で使えるようにしたときのめも

```.sh:.bashrc
export LESS='-g -i -M -R -S -W -z-4 -x4'
export PAGER=less
export LESS_TERMCAP_mb=$'\E[01;31m'      # Begins blinking.
export LESS_TERMCAP_md=$'\E[01;31m'      # Begins bold.
export LESS_TERMCAP_me=$'\E[0m'          # Ends mode.
export LESS_TERMCAP_se=$'\E[0m'          # Ends standout-mode.
export LESS_TERMCAP_so=$'\E[00;47;30m'   # Begins standout-mode.
export LESS_TERMCAP_ue=$'\E[0m'          # Ends underline.
export LESS_TERMCAP_us=$'\E[01;32m'      # Begins underline.
```

```config:config.fish
set -x LESS '-g -i -M -R -S -W -z-4 -x4'
set -x PAGER less
set -x LESS_TERMCAP_mb (printf "\e[01;31m")
set -x LESS_TERMCAP_md (printf "\e[01;31m")
set -x LESS_TERMCAP_me (printf "\e[0m")
set -x LESS_TERMCAP_se (printf "\e[0m")
set -x LESS_TERMCAP_so (printf "\e[01;47;33m")
set -x LESS_TERMCAP_ue (printf "\e[0m")
set -x LESS_TERMCAP_us (printf "\e[01;32m")
```

まだまだ fish 力が足りないので養っていきたい
メールの添付ファイルをGoogleドライブにアップして、件名と本文に加えてファイルのリンクをChatworkに投稿するGoogleAppsScript

# 使用用途
WEBの問い合わせフォームなどに設定しているメールを、Chatworkで複数人対応したいときに使用したりすると良いでしょう。※Gmail使っていない場合は、Gmail上で他のアカウントを受信できるようにすれば良い。

## プログラム概要
Gmailから未読+条件で検索
未読のメールを既読すると同時に
添付ファイルをGoogleドライブの特定のフォルダにセット
セットしたファイルのファイル名＆URLリンクを取得する
メールの件名、本文の後にファイル名＆URLリンクをメッセージとして特定のルームに投稿する。

## 設定箇所
#### コードに変数記入4か所
+ ChatworkAPIトークン（BOTアカウントのAPIトークン）
+ ChatworkのROOMID（BOTアカウントは事前にルームに加入させておく）
+ Chatwork宛先ID（TOを入れる人数を増やすときはコード変更）
+ Gmail検索条件（is:unread に続く条件）
#### その他設定
+ GoogleドライブフォルダID(フォルダの権限を閲覧可にしておく)

<br>

```js:コード.js
function main() {
  //チャットワークトークン・ID
  const CW_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";                    
  const CW_ROOM = "99999999";
  const CW_TO = "9999999";

  //Gmailから特定条件のスレッドを検索しメールを取り出す
  var strTerms = 'is:unread label:hogehoge@hoge.co.jp';
  var myThreads = GmailApp.search(strTerms, 0, 50); //条件にマッチしたスレッドを取得
  var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する→二次元配列で格納

  //チャットワークAPI
  var client = ChatWorkClient.factory({
    token: CW_TOKEN
  });

  //各スレッド×メール
  for (var i = myMsgs.length - 1; i >= 0; i--) {
    var msgsInThread = myMsgs[i];
    for (var j = 0; j < msgsInThread.length; j++) {
      var msg = msgsInThread[j];

      //未読のみ
      if (msg.isUnread()) {
        //メールを既読にする
        msg.markRead();
        //添付ファイルを処理
        var filelist = ""
        var myFolder = DriveApp.getFolderById("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); //フォルダを取得
        var attachments = msg.getAttachments(); //添付ファイルを取得
        for(var k in attachments){
          var file = myFolder.createFile(attachments[k]); //ドライブに添付ファイルを保存
          filelist = filelist + "\n" + attachments[k].getName() + "\n" + file.getUrl()
        }

        //メッセージ作成
        var msgBody = "[To:" + CW_TO + "]" + 
                      "[info]" +
                          "[title]" + msg.getSubject() + "[/title]" +
                          msg.getFrom() + "[hr]" +
                          msg.getPlainBody().slice(0,5000) + "[hr]" +
                          msg.getDate() + filelist +
                      "[/info]";

        //チャットワークに送る
        client.sendMessage({
          room_id: CW_ROOM,
          body: msgBody
        });
      }
    }
  }
}
```
Everythingでフォルダ名を指定して絞り込み検索する

小ネタですがパッと記事が見当たらなかったのでメモします。
Everything バージョン 1.4.1.895 (x64) にて確認済

#検索ワードに「path」を追加する
単に検索ワードにpath:を追加するだけです。
```(検索したいファイル名) path:(指定したいフォルダ名) ```

例：```hogehoge.txt path:UserDir```
この例では「UserDir」フォルダにある「hogehoge.txt」だけを抽出できます。

(https://sites.google.com/site/everythingjphelp/searching より)
Ubuntu 18.04LTSとchromium-browser(Headless)とpython3でSeleniumする

# 条件
* Ubuntu 18.04.1 LTS (bionic)を使用する
* Ubuntu標準リポジトリを使用する
* Google Chromeはインストールしない
* Chromium BrowserはHeadlessで使う
* pip(pip3)は使わない（インストールしない）

# 必要なパッケージのインストール
```
# apt update && apt upgrade -y
# apt install chromium-browser
# apt install chromium-chromedriver
# apt install python3-selenium
```

# サンプル
以下のコードを実行すると、Headless ChromiumでYahoo! Japanにアクセスし、body属性以下の文字列が結果としてprintされる。

```Python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--window-size=1024,768')

driver = webdriver.Chrome(executable_path="/usr/lib/chromium-browser/chromedriver", chrome_options=options);
driver.implicitly_wait(600)


setup_url="https://www.yahoo.co.jp/"
driver.get(setup_url)
print(driver.find_element_by_xpath("//body").text)

driver.close()
```
AWS Trusted Advisor

##1.AWS Trusted Advisorとは？##
AWS側であらかじめ用意されているベストプラクティス（こうゆう風にすればいいよ！）の情報に基づいて、今設定されているものを自動的にをチェックしてくれます。問題がある場合はアドバイスをしてくれるサービスです。





##2.カテゴリ##
5つの観点から提供しています。

- コストの最適化
- パフォーマンス
- セキュリティ
- 耐障害性
- サービスの制限

参考：[インフラストラクチャの最適化](https://aws.amazon.com/jp/premiumsupport/trustedadvisor/?nc2=h_m1)

なお、アップグレードしないとすべてのカテゴリは使えません。

[ビジネスレベルのサポートにアップグレードして Trusted Advisor にアクセス](https://aws.amazon.com/jp/premiumsupport/trustedadvisor-access/)





##3.機能##

例えば↓の図では、[コストの最適化]で"月額料金節約の可能性"ができるというアドバイスが表示されています。
![スクリーンショット 2018-09-20 21.07.44.png](https://qiita-image-store.s3.amazonaws.com/0/280929/cb63099a-8eff-4ce9-2aa7-905532bdf382.png)

レポートをだすことも可能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/280929/fa82be3d-5f68-0574-f78e-ed22a37da27a.png)

通知設定で更新結果とコスト節約の見積もりを毎週メールで受けとることも可能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/280929/2ddfb1fe-24df-e121-374b-44ad694550b3.png)




##4.アラーム##
ビジネスおよびエンタープライズサポートのお客様は、個々のサービス制限に対してカスタマイズ可能なアラームを作成することができる。
例えば、EC2 On-Demandインスタンスの制限の60％に達したときに警告するように設定するなど。。
[Monitoring Service Limits with Trusted Advisor and Amazon CloudWatch](https://aws.amazon.com/jp/blogs/mt/monitoring-service-limits-with-trusted-advisor-and-amazon-cloudwatch/)
統計検定２級への第一歩-ベルヌーイ分布試してみた.

#なんでこんなこと今更やったの?
統計検定2級取ろうと勉強始めた.
けど...挫折した...
大学時代は数式を見ればなんとなくイメージ付いたのに,からっきし..年取った...

なので,,,pythonで計算したり図に起こしたりして試すことにした.
また大学時代のノートなんて一生使わないと思って廃棄したけど,今必要じゃん...
だから簡単でも自分メモで投稿することにした.

#使用している教科書
* 統計検定2級公式テキスト
* 確率モデル(学生時代に独学で使っていた本.数学の証明とかを省いて,実例の紹介が多い)

#いろいろな分布(離散分布編)
* ベルヌーイ分布
* 2項分布
* ポワソン分布
* 幾何分布

# ベルヌーイ分布

初めに紹介されている分布,2択問題に該当するのか.
成功する確率をp(失敗する確率を1-p)とする.

```math
P(X=1) = p,P(X=0)=1-p\\\
(0 < p < 1)\\\
```

```math
μ = p,σ^2 = p(1-p)
```

よし,計算してみよう.

### コイントス
普通のコインであれば,裏と表の確率は

```math
P(X=0,1)=p\\\
μ = 0.5,σ^2 = 0.25,(σ=0.5)
```

実際やってみよう.
1万個の0,1からなるリストを作りその平均や分散値を求める.

```python
import numpy as np
import pandas as pd
rand_list = [np.random.randint(2) for i in range(10000)]
rand_df = pd.DataFrame(rand_list)
rand_df.describe()
#count	10000.000000
#mean	0.501000
#std	0.500024
#min	0.000000
#25%	0.000000
#50%	1.000000
#75%	1.000000
#max	1.000000
```
おお,大体一致した.

これから,進めていく予定.
『Go x IntelliJ x delve』 : デバックの第一歩目

この記事は、IntelliJでGo言語のデバックを『delve』のツールで行う時にデバックできるまでを記載していきます。


#### ■ Overview
- Go言語で書かれたソースをIntelliJで開いて、delveツールを使ってデバックします。
- ソースコードは以下です。シンプルに

```go:main.go
package main

import "fmt"

type rect struct {
	width, height int
}

// This `area` method has a _receiver type_ of `*rect`.
func (r *rect) area() int {
	return r.width * r.height
}

// Methods can be defined for either pointer or value
// receiver types. Here's an example of a value receiver.
func (r rect) perim() int {
	return 2*r.width + 2*r.height
}

func main() {
	r := rect{width: 10, height: 5}

	// Here we call the 2 methods defined for our struct.
	fmt.Println("area: ", r.area())
	fmt.Println("perim:", r.perim())

	// Go automatically handles conversion between values
	// and pointers for method calls. You may want to use
	// a pointer receiver type to avoid copying on method
	// calls or to allow the method to mutate the
	// receiving struct.
	rp := &r
	fmt.Println("area: ", rp.area())
	fmt.Println("perim:", rp.perim())
}
```
- 網羅する範囲としては、高度なデバックではなくデバックの第一歩目です。
- IntelliJ及びGoのセットアップは終わっている前提です。
- またIntelliJのGoのPlugin([go-lang-idea-plugin](https://github.com/go-lang-plugin-org/go-lang-idea-plugin))が入れるようにしてください。

#### ■ "delve" setUp
デバッグツールである、[delve](https://github.com/derekparker/delve)をインストールしていきます。

詳しくは、[installation](https://github.com/derekparker/delve/tree/master/Documentation/installation)にありますがMacの場合はおおよそ以下の2つの方法のどっちかになります。

```bash
$ go get -u github.com/derekparker/delve/cmd/dlv
```

```bash
$ brew install go-delve/delve/delve
```

無事インストールが完了したら、バージョンを確認しましょう。

```bash
$ dlv version
Delve Debugger
Version: 1.1.0
```
setUpはこちらで完了です。

### IntelliJでのデバック方法
では、IntelliJを開いてデバックしてみましょう。

まずは大前提としては、先程のソースコードを`main.go`に記載します。
①にある、`Run 'go build main.go'`を押下するとしたのコンソール(②)に結果がでます。
<img width="807" alt="スクリーンショット_2018-09-25_17_11_57.png" src="https://qiita-image-store.s3.amazonaws.com/0/122901/bd48e6f1-b703-3215-dc16-3e0ef0d7a98b.png">


デバックをするには、処理がみたいところで『ブレークポイント』といった印を付ける必要があります。
今回は、以下の2つにつけてみたいと思います。
<img width="509" alt="スクリーンショット 2018-09-25 17.18.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/122901/cc877561-0538-629f-7481-debb9f9b2c8d.png">

この中で、main.goを実行後`r`といった型にはなにが入っているのだろうというのがデバックをすることでわかります。

では、ブレイクポイントを張った状態で、`Debug 'go build main.go'`を押下します。
<img width="792" alt="スクリーンショット 2018-09-25 17.22.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/122901/a28ab0af-b199-41b4-f7ce-72887c6a75cf.png">

そうするとはじめのブレイクポイントである『go:24』つまり24行目で止まり、その結果である`r`の中にどんな値が入っているかがわかるようになります。
<img width="545" alt="スクリーンショット_2018-09-25_17_24_28.png" src="https://qiita-image-store.s3.amazonaws.com/0/122901/a00648d0-0aa1-1d81-01a9-7a639c27a562.png">


以上です。
dlvコマンドはさまざまな設定ができるため奥が深いです。
以下は、CLIでの操作ですが網羅されているのでご参照ください。
https://qiita.com/minamijoyo/items/4da68467c1c5d94c8cd7
macOS MojaveにしたらGitコマンドが動かなくなった


さっそくMojaveにアップデートしたんですけど、

> [人柱覚悟でさっそくmacOS Mojaveにしてみました。](https://dotstud.io/blog/macos-mojave-update-process/)

恒例っぽいですがGitコマンドが動かなくなったのでまたメモです。内容は全く同じ。

> [macOS SierraにしたらGitコマンドが動かなくなった](https://qiita.com/n0bisuke/items/0ad33fa466c3de5ac763)

```bash
$ git

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
```

## 以下のコマンドで直ります

```
xcode-select --install
```

インストーラーが立ち上がるのでインストールすればOKです。

![](https://i.gyazo.com/0f2c40aab9848abd43ba048d34ec368f.png)


無事にインストールできました。

```
$ git version

git version 2.17.1 (Apple Git-112)
```

早速ダークモード使ってみてますが、今の所は新鮮さを感じてるくらいですね笑
at coder beginner 046

B
シカのAtCoDeerくんは一列に並んだ N 個のボールをそれぞれ K 色のペンキの色のうちのどれかで塗ろうとしています。見栄えが悪くならないように、隣り合ったボールは別の色で塗ることにします。ボールの塗り方としてあり得るものの個数を求めてください。

```
#include<iostream>
using namespace std;
int main() {
	int N, K;
	cin >> N >> K;
	long long ans = K;
	for (int i = 1; i < N; ++i) {
		ans *= K - 1;
	}
	cout << ans << endl;
}
```
ただの簡単な数学

C
シカのAtCoDeerくんは選挙速報を見ています。選挙には二人の候補高橋くんと青木くんが出ています。速報では、現在の二人の得票数の比が表示されていますが、得票数そのものは表示されていません。AtCoDeerくんは N 回画面を見て、 i(1≦i≦N) 回目に見たときに表示されている比は Ti:Ai でした。ここで、AtCoDeerくんが選挙速報の画面を1回目に見た段階で既にどちらの候補にも少なくとも一票は入っていたことがわかっています。 N 回目に画面を見たときの投票数(二人の得票数の和)として考えられるもののうち最小となるものを求めてください。ただし、得票数が途中で減ることはありません。
制約
1≦N≦1000
1≦Ti,Ai≦1000(1≦i≦N)
Ti と Ai は互いに素 (1≦i≦N)
答えが 1018 以下になることは保証されている

```
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<list>
#include<cmath>
#include<map>
using namespace std;
using ll = long long;
const int INF = 1e9;
#define rep(i,n)for(int i=0;i<n;++i)
#define p pair<int,int>
int main() {
	int N;
	cin >> N;
	int T[1010], A[1010];
	for (int i = 0; i < N; ++i) {
		cin >> T[i] >> A[i];
	}
	ll b = T[0];ll c = A[0];
	for (int i = 0; i < N; ++i) {
		ll ratio = max((b + T[i] - 1) / T[i], (c + A[i] - 1) / A[i]);
		b = ratio * T[i];
		c = ratio * A[i];
	}
	cout << b + c << endl;
	return 0;
}
```
TrustedInstaller，Admisistratorsの権限を変更してフォルダを削除する

#概要
AdministratorやTrustedInstallerの権限が必要なフォルダの削除
##注意点
普通に消せないフォルダであることは，それなりに重要なフォルダのため慎重に操作を行うこと。
##使用例
WindowsPEの元フォルダの削除
→OSの一部分を消すため，権限が制限されている。

#方法
1. 対象のフォルダ/ファイルを右クリック→プロパティ→セキュリティ→詳細設定(V)
2. 所有者がUsersではない場合，「変更(C)」をクリック
3. 「選択するオブジェクト名を入力してください」に，```Users```と入力し，「名前の確認(C)」を押したのち，「OK」を押す。
4. 「サブコンテナーとオブジェクトの所有者を置き換える」と，「子オブジェクトのアクセス許可エントリすべてを，このオブジェクトからの継承可能なアクセス許可エントリで置き換える(P)」にチェックを入れ，「適用(A)」を押した後に「OK」を押す。
5. 普段通りに削除する。
Swiftで継承とプロトコルとprotocol extensionが絡んだ時のメソッド呼び出し

Swiftで継承とプロトコルとprotocol extensionが絡んだ時に呼び出されるメソッドがわかりづらい事があるのでまとめました。

### バージョン

```
$ swift --version
Apple Swift version 4.2 (swiftlang-1000.0.36 clang-1000.10.44)
Target: x86_64-apple-darwin17.7.0
```

# ソース

```swift
protocol AnimalProtocol {
    func a()
    func c()
    func d()
}

extension AnimalProtocol {
    func a() {
        print("AnimalProtocol.a")
    }
    
    func b() {
        print("AnimalProtocol.b")
    }
    
    func c() {
        print("AnimalProtocol.c")
    }
    
    func d() {
        defaultD(self)
    }
}

func defaultD<X: AnimalProtocol>(_ obj: X) {
    print("AnimalProtocol.d")
}

class Animal : AnimalProtocol {
    func a() {
        print("Animal.a")
    }
    
    func b() {
        print("Animal.b")
    }
    
    func d() {
        defaultD(self)
    }
}

class Cat : Animal {
    override func a() {
        print("Cat.a")
    }

    override func b() {
        print("Cat.b")
    }

    func c() {
        print("Cat.c")
    }

    override func d() {
        print("Cat.d")
    }
}

func invokeA<X: AnimalProtocol>(_ x: X) {
    x.a()
}
func invokeB<X: AnimalProtocol>(_ x: X) {
    x.b()
}
func invokeC<X: AnimalProtocol>(_ x: X) {
    x.c()
}
func invokeD<X: AnimalProtocol>(_ x: X) {
    x.d()
}

let cat: Cat = Cat()
invokeA(cat) // => Cat.a
invokeB(cat) // => AnimalProtocol.b
invokeC(cat) // => AnimalProtocol.c
invokeD(cat) // => Cat.d
```

# 解説

上記のコードは、`AnimalProtocol`というプロトコル、`Animal`という親クラス、 `Cat`というサブクラスにおいて、メソッドをどのように実装するかによって、挙動がどう異なるかを示したものです。
パターンはA, B, C, Dの4種類あります。
ある`Cat`型の式がある時、それに対するメソッド呼び出しは、`Cat`で定義されたメソッドが呼ばれます。しかし、このコードのように`<X: AnimalProtocol>`というジェネリックな型に対して呼び出した場合は、`Cat`で定義されたものが呼ばれる場合と、そうでない場合があります。

## パターンA

このパターンは以下のとおりです。

- プロトコル定義にメソッド定義が **ある**
- (共通)protocol extensionに実装が **ある**
- 親クラスに実装が **ある**
- サブクラスに`override func`実装が **ある**

この場合、サブクラスの実装が呼ばれます。

## パターンB

このパターンは以下のとおりです。

- プロトコル定義にメソッド定義が **ない**
- (共通)protocol extensionに実装が **ある**
- 親クラスに実装が **ある**
- サブクラスに`override func`実装が **ある**

この場合、protocol extensionの実装が呼ばれます。

## パターンC

このパターンは以下のとおりです。

- プロトコル定義にメソッド定義が **ある**
- (共通)protocol extensionに実装が **ある**
- 親クラスに実装が **ない**
- サブクラスに`func`実装が **ある**

この場合、protocol extensionの実装が呼ばれます。

## パターンD

このパターンは、パターンAと同じ状態です。
ただし、親クラスの実装において、
protocol extensionと同様の処理を行うために、
そのデフォルト実装をトップレベル `func` に切り出した上で、
親クラスの実装とprotocol extensionの実装の両方から、
その切り出したメソッドを呼び出すようにしています。
パターンCを書き換えてパターンAに変更したい場合に、
親クラスの実装でデフォルト実装を再利用したいができなくて不便、
という際の参考にしてください。

# なぜこのような実行結果になるのか

Swiftにおいてはプロトコルのメソッドを実装したwitness tableと、
クラスのメソッドを実装したvtableというものがあります。
このようなプロトコルと継承が組み合わさったパターンでは、
インスタンスが親クラスでもサブクラスでも、
witness tableは親クラスのconformanceによって定義されたものが使われます。
そして、サブクラスのメソッドの呼び出しは、
witness tableを引いたその中で、vtableをさらに引く、
という2段ディスパッチによって行われます。

パターンAではこの2段ディスパッチによって、
サブクラスの実装が呼び出されます。

パターンBではプロトコルにメソッドの定義が無いため、
witness tableのレイアウトにそのメソッドのエントリが無いため、
protocol extensionの実装が呼び出されます。

パターンCではプロトコルにメソッドの定義があるため、
witness tableのレイアウトにそのメソッドのエントリはあるが、
親クラスにメソッドの定義が無いため、
そのエントリはprotocol extensionの実装がセットされており、
それが呼び出されます。
たとえサブクラスでメソッドを実装していても、
conformanceは親クラスで解決されており、
vtableを参照するようになっていないので、
サブクラスのメソッドは呼び出されません。
at coder beginner045 bit 全探索

B
A さん、B さん、C さんの 3 人が以下のようなカードゲームをプレイしています。
最初、3 人はそれぞれ a、b、c いずれかの文字が書かれたカードを、何枚か持っている。これらは入力で与えられた順番に持っており、途中で並べ替えたりしない。
A さんのターンから始まる。
現在自分のターンである人がカードを 1 枚以上持っているならば、そのうち先頭のカードを捨てる。その後、捨てられたカードに書かれているアルファベットと同じ名前の人 (例えば、カードに a と書かれていたならば A さん) のターンとなる。
現在自分のターンである人がカードを 1 枚も持っていないならば、その人がゲームの勝者となり、ゲームは終了する。
3 人が最初に持っているカードがそれぞれ先頭から順に与えられます。 具体的には、文字列 SA、SB、SC が与えられます。文字列 SA の i 文字目 ( 1≤i≤|SA| ) に書かれている文字が、A さんの持っている中で先頭から i 番目のカードに 書かれている文字です。文字列 SB、 SC についても同様です。
最終的に誰がこのゲームの勝者となるかを求めてください

```
#include <iostream>
#include<string>
using namespace std;
int main() {
	string A, B, C;
	cin >> A >> B >> C;
	int Acount=0, Bcount=0, Ccount = 0;
	int Turn = 0;
	while (true) {
		if (Turn == 0) {
			if (Acount == A.size()) {
				cout << 'A' << endl;
				break;
			}
			else {
				if (A[Acount] == 'b') {
					Turn = 1;
				}
				else if (A[Acount] == 'c') {
					Turn = 2;
				}
				Acount++;
			}
		}
		else if (Turn == 1) {
			if (Bcount == B.size()) {
				cout << 'B' << endl;
				break;
			}
			else {
				if (B[Bcount] == 'a') {
						Turn = 0;
				}
				else if (B[Bcount] == 'c') {
						Turn = 2;
				}
				Bcount++;
			}
		}
		else {
			if (Ccount == C.size()) {
				cout << 'C' << endl;
				break;
			}
			else {
				if (C[Ccount] == 'a') {
					Turn = 0;
				}
				else if (C[Ccount] == 'b') {
					Turn = 1;
				}
				Ccount++;
			}
		}
	}
	return 0;
}

```


```
#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
#include<queue>
using namespace std;
int main()
{
	queue<char> aa,bb,cc;
	string a,b,c;cin>>a>>b>>c;
	for(int i=0;i<a.size();i++)aa.push(a[i]);
	for(int i=0;i<b.size();i++)bb.push(b[i]);
	for(int i=0;i<c.size();i++)cc.push(c[i]);
	char t=aa.front();
	aa.pop();
	for(;;)
	{
		if(t=='a')
		{
			if(aa.empty())
			{
				cout<<"A"<<endl;
				return 0;
			}
			t=aa.front();
			aa.pop();
		}
		else if(t=='b')
		{
			if(bb.empty())
			{
				cout<<"B"<<endl;
				return 0;
			}
			t=bb.front();
			bb.pop();
		}
		else
		{
			if(cc.empty())
			{
				cout<<"C"<<endl;
				return 0;
			}
			t=cc.front();
			cc.pop();
		}
	}
}
```
キューを使った書き方

C
1 以上 9 以下の数字のみからなる文字列 S が与えられます。 この文字列の中で、あなたはこれら文字と文字の間のうち、いくつかの場所に + を入れることができます。 一つも入れなくてもかまいません。 ただし、+ が連続してはいけません。
このようにして出来る全ての文字列を数式とみなし、和を計算することができます。
ありうる全ての数式の値を計算し、その合計を出力してください。
制約
1≤|S|≤10
S に含まれる文字は全て 1 〜 9 の数字

```
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<map>
#include<math.h>
#include<queue>
#include<deque>
#include<stack>
#include<cstdio>
#include<utility>
#include<set>
#include<list>
#include<cmath>
#include<stdio.h>
#include<string.h>
#include<iomanip>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using piii = pair<pii, pii>;
const int INF = 1e9 + 7;
int main() {
	string S;
	cin >> S;
	ll ans = 0;
	ll tmp;//+で分割したものを代入
	for (int bit = 0; bit < (1 << S.size()-1); ++bit) {
		ll sm = 0;
		ll tmp = S[0] - '0';
		for (int i = 0; i < S.size()-1; ++i) {
			if (bit&(1 << i)) {
				ans += tmp;
				tmp = 0;
			}
			tmp = tmp * 10 + (S[i + 1] - '0');
		}
		sm += tmp;
		ans += sm;
	}
	cout << ans << endl;
    return 0;
}
```
やっと理解できた
Mac OS MojaveでXcodeをダークモードにする方法

# ダークモード

<center><img width="685" alt="スクリーンショット 2018-09-25 15.11.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/111366/3672048a-2966-ea12-33c2-f569d7e38952.png"></center>

ついに9月25日に[Mac OS Mojave](https://www.apple.com/jp/macos/mojave/)が正式公開され、**ダークモード**が使えるようになりました！

# MojaveでXcodeをダークモードにする方法

ポイントは、**Mac OSの設定をダークモードにすること**です。Xcodeにある機能ではなく、Mac OS Mojaveにある機能です。

### システム環境設定を開く
<img width="266" alt="スクリーンショット 2018-09-25 14.23.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/111366/58e9ab63-abf7-800e-cfc8-c81e521bdbc7.png">

### 一般を選択
<img width="259" alt="スクリーンショット 2018-09-18 17.41.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/111366/0fbc9de2-778b-6368-8d32-2b06f225eab0.png">

### 外観モードをダークに変更

<img width="663" alt="スクリーンショット 2018-09-25 16.40.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/111366/06bd3295-0b6e-5be4-599e-22caa36a88f0.png">

**おおお！！しかもアクセントカラーも変えれる！！**

<img width="684" alt="スクリーンショット 2018-09-25 16.40.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/111366/7148a9cd-a3cb-883d-a319-e7cbebfd0e64.png">


### DONE 🎉

|Before|After|
|:-:|:-:|
|<img width="1280" alt="スクリーンショット 2018-09-25 16.44.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/111366/5409c33d-50a0-944b-fc1f-d6a2da27b7ce.png">|<img width="1280" alt="スクリーンショット 2018-09-25 16.43.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/111366/b3cbd6eb-c5eb-18c3-f820-203fb6212526.png">
|

# High Sierraでなんちゃってダークモードにする方法

ちなみにHigh Sierraでも**なんちゃって**ダークモードにはできます。

### システム環境設定を開く
<img width="266" alt="スクリーンショット 2018-09-25 14.23.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/111366/58e9ab63-abf7-800e-cfc8-c81e521bdbc7.png">

### 一般を選択
<img width="259" alt="スクリーンショット 2018-09-18 17.41.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/111366/0fbc9de2-778b-6368-8d32-2b06f225eab0.png">


### アピアランスの「メニューバーとDockを暗くする」にチェック

<img width="661" alt="スクリーンショット 2018-09-18 17.38.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/111366/31cec9c8-75aa-3385-2d26-0c814455a87e.png">

### DONE

|Before|After|
|:-:|:-:|
|<img width="744" alt="スクリーンショット 2018-09-18 17.39.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/111366/6f521400-b518-cbf6-7d02-b71684a0eff1.png">|<img width="745" alt="スクリーンショット 2018-09-18 17.39.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/111366/f03ec4b8-1b3c-0886-16f4-34f4794d637e.png">|

**※ちなみにHighSierraではXcodeはダークモードになりません**
cでnn　その7


#概要

cで、ニューラルネットワークやってみた。
CIFAR-10 をcで、学習して、webで、表示してみた。

#ライブラリー

https://github.com/ohisama/catseye

#写真

![image](https://qiita-image-store.s3.amazonaws.com/0/18104/6fb7c84d-14cc-3cf1-3b70-29de922a126e.png)

#jsdoで実行

http://jsdo.it/ohisama1/QNjX

以上。
concurrent.futuresがimportできないエラー

boto3がimportできるようになった途端、concurrent.futuresがimportできないエラーをはかれました。


##そもそもconcurrent.futuresとは？
- Python3.2で追加されたモジュール
- 複数の処理を並列実行するための機能を提供している

##どこで使われているやつなのか
自分の書いたプログラムでは使ってないということはどこかのパッケージに入っているやつだな〜
ということでエラーからどこで使われているか確認すると、
`/usr/local/lib/python3.5/dist-packages/s3transfer/__init__.py `で使われているらしい

##なんでimportできないんだ？
####確認したこと
- defaltのpythonのバージョン

 ```
 $ Python —version
 $ Python 2.7.13
 ```
したがって、python3.2で追加されたモジュールが使えない状態なのか？

もしそうなら、デフォルトのpythonのバージョンを3.5にすれば通るはず！
　
がしかし、Python3としてpython3.5はインストールされているみたいだ。
Python2.7とPython3　両方使えるようにしたんだった。

これじゃあ、解決できなさそう

- もともとコマンドラインでは動く！けど、php上からは動かない。。。
環境変数の問題？？

##解決策
futuresをインストールする
```pip install futures
```

[参考]
https://stackoverflow.com/questions/31086530/importerror-no-module-named-concurrent-futures-process
もっと早く見つけたかったな,,,
PHP+Python  boto3をimportできない

このエラーに１日悩まされたのでとりあえずやったことをまとめておく

###問題
>
boto3をimportできない

###まず確認したこと
- コマンドライン上でならboto3を正常にimport可能
- Webから（php）からpythonファイルを実行したときimport不可
- `pip show boto3`でboto3がインストールされていることは確認済み


###なぜphpからの実行ができないのか？？？
phpとpython　実行ユーザーの違いからboto3 をimportできないのでは。。。？

####とりあえず試したこと一覧
- boto3を誰でも参照できるようにパーミッションを777に変更してみる
```sudo chmod 777 /home/pi/.local/lib/python/site-packages
```-> ✖

- .bashrcにPYTHONPATHを書き込み-> ✖
- pythonのコードに直接　`sys.path.append(‘/home/pi/.local/lib/python/ite-packages’)`と記述
-> ✖
- php上でputenv関数を使って環境変数を`PYTHON=/home/pi/.local/lib/python(バージョン)/site-packages`と追加
-> ✖
- `pip install —upgrade boto3`で更新してみる
-> ✖
- `sudo pip show boto3`で表示されるlocationのディレクトリを変更
`/home/pi/.local/lib/python/site-packages`
↓
  `/usr/local/lib/python/dist-packages/`

###解決策
#####`sudo pip show boto3`で表示されるlocationのディレクトリを変更
>
`/home/pi/.local/lib/python/site-packages`
↓
  `/usr/local/lib/python/dist-packages/`

#####phpのなかに`putenv(‘/usr/local/lib/python/dist-packages/’)`と記述

これはおそらくどのディレクトリ内にboto3がインストールされているかによって指定してやらないといけないということかと。。。

インストール時にもっと気をつけておくべきだったと反省
Flick HAT に必要なピン接続

# Flick HAT - 3D Tracking & Gesture HAT for Raspberry Pi

![flick_hat.png](https://qiita-image-store.s3.amazonaws.com/0/283293/17069075-6991-f005-62cb-1a12eca8efc7.png)

## 目的

上記の画像から見て取れるように**[Flick HAT](https://uk.pi-supply.com/products/flick-hat-3d-tracking-gesture-hat-raspberry-pi)**はRaspberry Piでの使用が大前提です。
[こちらのサイト](https://pinout.xyz/pinout/flick_hat)に、この製品で使われているピンの説明があるが、正確ではなかった。（Raspberry Piのピンヘッダーにぐさっと挿せばよいので、どのピンが本当に使われているのか、余り気にする必要がない？？）
そこで、Raspberry Pi以外で使用する場合のために、どこのピンを接続すればよいかを調べた。

## Flick HAT に必要なピン接続

必要なピンは以下の6本だけです。

| Flick Hat | Raspberry Pi |
|:--:|:--:|
| SDA | 3 |
| SDL | 5 |
| GND | 9 |
| Reset | 11 |
| TS | 13 |
| 3.3V | 17 |

![flick_hat_wired.png](https://qiita-image-store.s3.amazonaws.com/0/283293/fd24f9d0-a800-76b6-6198-8e788711a0bd.png)

## まとめ

一番想定外だったのは、3v3のピンでした。
[先ほどのサイト](https://pinout.xyz/pinout/flick_hat)では、3v3はRaspberry Piの1番ピンから取る説明になっていたので、Arduinoにつないでもまったく反応が無く、途方に暮れました。
Raspberry Piにジャンパ線を使って片側20ピンをつないで、1ピンづつ外していって、今回の結論に達しました。


#### 追伸；
**[obniz](https://obniz.io/)**が3vを出力できる電流は**[1mAまで](https://obniz.io/doc/sdk/doc/io)**のため、このデバイスを**obniz**につなげるためには、別電源を用意するか、5vから3vに分圧/降圧する必要があります。
なお、姉妹商品の**[Flick Large](https://uk.pi-supply.com/products/flick-large-standalone-3d-tracking-gesture-breakout)**であればレベルシフト内蔵のため5v電源でも大丈夫のようです。
checkstyleで「zzz.yyy.Xxxは前のインポート・グループから分離する必要があります。」が出て困った話

### はじめに
チラシの裏です:laughing:。
[Google Java Style Guide](https://google.github.io/styleguide/javaguide.html)を使用しています。

### 警告が出て困った話
今携わっているプロジェクトの開発の区切りがついたので、`checkstyle`で出ている警告を撲滅しましょう。という話になり、コメントの書式を直したり、1行あたりの文字数が100文字以下になるように改行したりしていました。

で、あらかた対応はできたのですが……一部のクラスのimportで以下のメッセージが表示され、解決策がわからず困っていました。

> *zzz.yyy.Xxxは前のインポート・グループから分離する必要があります。*

`zzz.yyy.Xxx`はimportしたクラスです。
日本語のエラーメッセージでググってもメッセージコード`custom.import.order.line.separator`に対する和訳であることくらいしかわからず、[checkstyleのimportに関するページ](http://checkstyle.sourceforge.net/config_imports.html#CustomImportOrder)を見てもよくわかりませんでした:disappointed_relieved:。

ちなみに、以下が警告が出るJavaのコードです。

```java:警告が出るjava
/*
 * Copyright (c) 2018 Neriudon.
 */

package com.sample.neriudon.hoge;


import zzz.yyy.Xxx;
import zzz.yyy.Foo;
import zzz.yyy.Bar;
```

### あっさり解決
もしかしたら、↑のコードを見た時点でピンときた方もいらっしゃるかもしれませんが……

他の人にも相談したところ、こんなことを言われました。

「う～ん、警告が出てないコードと比べてもpackageとimportが2行空いてるくらいしか違いがないなぁ」



あっ！

というわけで、無駄な改行を消すことで警告をなくすことが出来ました。

```java:警告を解消したjava
/*
 * Copyright (c) 2018 Neriudon.
 */

package com.sample.neriudon.hoge;

import zzz.yyy.Xxx;
import zzz.yyy.Foo;
import zzz.yyy.Bar;
```

めでたし、めでたし:relaxed:。
Elixirでループを作ってみた

# Hello Qiita

@kikuyuta さんからの「Qiita書くでね」「これからはアウトプットでね」ってメンション圧力を忖度して、これまでリードオンリーだったQiitaに不定期で自分の勉強まとめもかねて投稿しようと思います。


# やったこと
で、初めての投稿は最近色んな意味でハマりつつあるElixirでループさせてみることにしました。
いろいろな書き方があると思いますがまずは永久ループさせてみることに。

## 環境
OS: macOS High Sierra 10.13.6
Elixir: `% brew install elixir`でインストール

```
% iex --version
Erlang/OTP 21 [erts-10.0.8] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] [dtrace]

IEx 1.7.3 (compiled with Erlang/OTP 21)
```

## 解説
countから開始してcount_upだけ増分、sleep_msecミリ秒だけスリープを繰り返します。

```elixir:loop.exs
defmodule Qiita do
  def loop(count, count_up, sleep_msec) do
    IO.puts "count => #{count}, count_up => #{count_up}"
    :timer.sleep(sleep_msec)
    count = count + count_up
    loop(count, count_up, sleep_msec)
  end
end

Qiita.loop(0, 1, 1000)
```


# まとめ
ループはサクッとできたき個人的にはElixirにも馴染んできたのかなぁと実感できたのと、sleepのやり方を調べて実装できたのが収穫 :grinning:
GitLab APIを利用する


GitLabにはAPIが用意されていて、いろいろな情報を取得したり、更新したりすることが出来ます。

## 準備
まず、APIを利用するには、private tokenが必要になります。

Profile Settings > Access Tokens で表示される画面から生成が可能です。

![image](https://qiita-image-store.s3.amazonaws.com/0/132118/1e42d3dc-a52a-43e5-4563-281833a2f3f1.png)

「Name」「Expreis at」の２項目を入力し、「Create Personal Access Token」ボタンを押下すると自動生成されます。

![image](https://qiita-image-store.s3.amazonaws.com/0/132118/c0778250-92b8-2608-a38a-9f3ca883e875.png)

あとから、AccessTokenを参照することが出来ないので、必ずコピーしてください。

## つなぐ

以下のように指定して、GETで呼び出せばOK。

```bash
http://example.com/api/v3/projects?private_token=5C2Aos5ch7CFePyeZGf3
```
Spring Boot を使って特定のリクエストだけ文字エンコードを変更する


Spring Boot を利用して、WebAPIをつくった際の覚書。
特定のシステムから呼び出されるリクエストのみ「Shift-JIS」で呼ばれるためデフォルトの文字エンコード（UTF-8）だと文字化けしてしまいます。

かといって他のシステムからの呼び出しは、「UTF-8」なんで一部のURLのみエンコードする文字列を変更する必要があります。

@Configurationをつけたクラスに以下の記述を追加するだけ。

```java
    public static class EncodingFilterConfig {

        // ここで指定されたURLを含むリクエストの場合、文字エンコードを変更します。
        private static final String TARGET_URL = "<targetURL>";
        @Autowired
        private HttpEncodingProperties properties;

        /**
         * Shift_JIS用のフィルターを追加
         * 
         * @return FilterRegistrationBean<OrderedCharacterEncodingFilter>
         */
        @Bean
        public FilterRegistrationBean<OrderedCharacterEncodingFilter> sjisCharacterEncodingFilter() {

            OrderedCharacterEncodingFilter filter = new OrderedCharacterEncodingFilter() {
                @Override
                protected String getAlreadyFilteredAttributeName() {
                    return OrderedCharacterEncodingFilter.class.getName() + ALREADY_FILTERED_SUFFIX;
                }
            };
            filter.setEncoding("Shift_JIS");
            filter.setForceRequestEncoding(properties.shouldForce(Type.REQUEST));
            filter.setForceResponseEncoding(properties.shouldForce(Type.RESPONSE));

            FilterRegistrationBean<OrderedCharacterEncodingFilter> bean = new FilterRegistrationBean<OrderedCharacterEncodingFilter>(
                    filter);

            bean.addUrlPatterns(TARGET_URL);
            bean.setOrder(Integer.MIN_VALUE);

            return bean;

        }

        /**
         * デフォルトの文字コードエンコードフィルタを上書き
         * 
         * @return CharacterEncodingFilter
         */
        @Bean
        public CharacterEncodingFilter characterEncodingFilter() {

            OrderedCharacterEncodingFilter filter = new OrderedCharacterEncodingFilter() {

                private AntPathRequestMatcher matcher = new AntPathRequestMatcher(TARGET_URL);

                @Override
                protected String getAlreadyFilteredAttributeName() {
                    return OrderedCharacterEncodingFilter.class.getName() + ALREADY_FILTERED_SUFFIX;
                }

            };
            filter.setEncoding(this.properties.getCharset().name());
            filter.setForceRequestEncoding(properties.shouldForce(Type.REQUEST));
            filter.setForceResponseEncoding(properties.shouldForce(Type.RESPONSE));
            filter.setOrder(Integer.MIN_VALUE+1);

            return filter;

        }
    }
```
Android Studioのプラグインを無効にして高速化させる

# 

Android Studioの起動/動作が遅い時は、プラグインを捨てまくってシンプルにするべし！

という訳で、最低限のプラグインを残してあとは無効にしてみる。

## 環境

```
Android Studio 3.2
Build #AI-181.5540.7.32.5014246, built on September 18, 2018
JRE: 1.8.0_152-release-1136-b06 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.12.6
```

## デフォルトで入ってる全プラグイン

* Android APK Support 
* Android Games 
* Android NDK Support 
* Android Support 
* App Links Assistant 
* Copyright 
* Coverage 
* CVS Integration 
* EditorConfig 
* Firebase App Indexing 
* Firebase Services 
* Firebase Testing 
* Git Integration 
* GitHub 
* Google Cloud Tools Core 
* Google Cloud Tools For Android Studio 
* Google Developers Samples 
* Google Login 
* Google Services 
* Gradle 
* Groovy 
* I18n for Java 
* IntelliLang 
* Java Bytecode Decompiler 
* Java Stream Debugger 
* JUnit 
* Kotlin 
* Mercurial Integration 
* Properties Support 
* Settings Repository 
* Smali Support 
* Subversion Integration 
* Task Management 
* Terminal 
* Test Recorder 
* TestNG-J 
* YAML 

この中から不要なプラグインを無効にする

無効にするプラグインは以下urlでJake Whartonが列挙してくれている。

- Android Studio slower when using Kotlin : androiddev https://www.reddit.com/r/androiddev/comments/7sxhig/android_studio_slower_when_using_kotlin/dt88pgn/

Android Studioのプラグイン設定は、`Preferences > Plugins`から管理できる。

## 無効にしたプラグイン

* Android APK Support 
* Android Games 
* Android NDK Support 
* App Links Assistant 
* Copyright 
* CVS Integration 
* EditorConfig 
* Firebase App Indexing 
* Firebase Services 
* Firebase Testing 
* Git Integration 
* GitHub 
* Google Cloud Tools Core 
* Google Cloud Tools For Android Studio 
* Google Developers Samples 
* Google Login 
* Google Services 
* Settings Repository 
* Subversion Integration 
* Task Management 
* Terminal 
* Test Recorder 
* TestNG-J 
* YAML 

上記プラグインのチェックを外し、OKを押して、Android Studioを再起動する。
（こんなに無効にしてビルドは大丈夫だろうか...）

## 無効にして起動/動作させてみた感想

プロジェクトのビルドは普通に成功した。

起動/動作が軽くなったのか自分のマシンではよく分からなかった。
おそらく、長時間起動しっぱなし＋他アプリをガンガン起動していると効果が現れてくるはず！

## 参考にした記事/リンク

- あの Jake Wharton さんが伝授する Android Studio を高速化する方法 https://android.benigumo.com/20180128/%E3%81%82%E3%81%AE-jake-wharton-%E3%81%95%E3%82%93%E3%81%8C%E4%BC%9D%E6%8E%88%E3%81%99%E3%82%8B-android-studio-%E3%82%92%E9%AB%98%E9%80%9F%E5%8C%96%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/
【Rails】Selenium/RSpecでconfirmダイアログのテストをする

railsでconfirmダイアログのテストコードのメモです。

```erb
<%= link_to user_destroy_path, method: :delete, id: "delete_button", data: {confirm: "本当に削除しますか？"} %>
```
scaffoldなどでデータ削除の時に書かれているこんなコードのテストです。

# confirmダイアログでOKを選択する
```rb
click_on :delete_button
page.driver.browser.switch_to.alert.accept
```

【2020/04/25追記】
Capybaraで用意している`accept_confirm`を利用して以下のように記述する方が望ましいようです。

```rb
page.accept_confirm do
  click_on :delete_button
end
```

# confirmダイアログでキャンセルを選択する
```rb
click_on :delete_button
page.driver.browser.switch_to.alert.dismiss
```

【2020/04/25追記】
Capybaraで用意している`dismiss_confirm`を利用して以下のように記述する方が望ましいようです。

```rb
page.dismiss_confirm do
  click_on :delete_button
end
```

# confirmダイアログの表示内容をテストする
```rb
click_on :delete_button
expect(page.driver.browser.switch_to.alert.text).to eq "本当に削除しますか？"
page.driver.browser.switch_to.alert.dismiss
```
ちなみにconfirmをだしたままscenarioを終えるとエラーになるので、表示内容のテストのあとに`dismiss`をいれておく必要があります。

【2020/04/25追記】
Capybaraで用意している`dismiss_confirm`を利用して以下のように記述する方が望ましいようです。

```rb
page.dismiss_confirm("本当に削除しますか？") do
  click_on :delete_button
end
```

# Reference
- [capybara で確認ダイアログを含む js をテストする - おもしろwebサービス開発日記](https://blog.willnet.in/entry/20110805/1312541109)
- [Class: Capybara::Session — Documentation for jnicklas/capybara (master)](https://www.rubydoc.info/github/jnicklas/capybara/Capybara/Session)
WindowsでOracle 11g xe shift jis dbを作成する手順メモ

## リスナーとデータベースを停止して，SIDを削除
```
C:\oraclexe\app\oracle\product\11.2.0\server\bin\CleanUp.bat
```

## 残骸のファイルを削除
```
cd C:\oraclexe\app\oracle\product\11.2.0\server\dbs
del *
```

## 環境変数ORALCE_HOMEを設定する
```
set ORACLE_HOME=C:\oraclexe\app\oracle\product\11.2.0\server
echo %ORACLE_HOME%
```

## SJISデータベースを作成する
```
C:\oraclexe\app\oracle\product\11.2.0\server\bin
CreateDB.bat -dbchar JA16SJIS
```

## Oracle起動確認
```
tasklist | find "oracle"
```

## TNS Listner起動確認
```
tasklist | find "TNSLSNR.EXE"
```

## TNS Listnerを起動する
```
cd %ORACLE_HOME%/bin
dir LSNRCTL.EXE
lsnrctl.exe start
tasklist | find "TNSLSNR.EXE"
```


## systemユーザのパスワードを設定する
```
sqlplus /nolog
connect sys as sysdba
ALTER USER system IDENTIFIED BY manager;
exit
sqlplus system/manager@xe
```
## 存在しているユーザを確認
```
SQL> select username from dba_users;
```


### 変更後の文字コードを確認する
```
SQL> select value from nls_database_parameters where parameter='NLS_CHARACTERSET';
```


## 新規ユーザ作成
```
sqlplus system/manager
SQL> 
CREATE USER doraemon IDENTIFIED BY "doraemonpassword" DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
grant CONNECT to doraemon;
grant RESOURCE to doraemon;
grant DBA to doraemon;
grant EXP_FULL_DATABASE to doraemon;
grant IMP_FULL_DATABASE to doraemon;
GRANT UNLIMITED TABLESPACE TO doraemon ;
```

## dump インポート
C:\Windows\system32>imp doraemon/doraemonpassword file=C:\DBDUMP\dmpfile.DMP ignore=y LOG=imp.log  full=y