OmniAICreator/Qiita-1.07M huggingface dataset:
楽しいブラックボックス

今回は、規定されたアイテムだけを取り出すランダムナンバーセレクタの提案です。

#何を作ったか。
箱にアイテムをいくつか突っ込んで、箱をシャカシャカして取り出す動作を真似たものです。
アイテムの重複を許すので便利かもしれません。
その代わり領域を結構食います。

#何をしているか。
クラスオブジェクトの構造は配列にアイテムを設定してシャッフルしているだけです。
そしてその手続きを書いたものです。

#余談
クラス名に"II"がついていますが、これには余り意味がありません。
私のローカルに別版の同名があったため分けたかっただけです。
意味は本当にないです。

#コード
```C++:BoxRandom.h
#pragma once
#include <vector>
#include <random>
#include <cstdint>
#include <algorithm>

template <class T>
class BoxRandomII {
public:
	typedef T ValueType;

	bool Push(const T& In) {
		Box.push_back(In);
		return true;
	}

	const T& Get()const {
		return Box[Idx % Box.size()];
	}

	template<class Rnd>
	bool Shuffle(Rnd& R) {
		std::shuffle(Box.begin(), Box.end(), R);
		Idx = 0;
		return true;
	}
	bool Randomize(const unsigned int& Seed=0) {
		std::mt19937 mt(Seed);
		std::shuffle(Box.begin(), Box.end(), mt);
		Idx = 0;
		return true;
	}
	std::intmax_t Remaining() const{
		return ((std::intmax_t)Box.size()) - Idx;
	}

	const T& operator [](std::size_t In)const {
		return Box[In%Box.size()];
	}
	bool Forward() {
		Idx++;
		Idx %= Box.size();
		return true;
	}
	bool Round() {
		Idx %= Box.size();
		return true;
	}
	std::size_t Now() const{
		return Idx;
	}
	std::size_t Size() const {
		return Box.size();
	}

	bool Clear() {
		Box.clear();
		Idx = 0;
		return 0;
	}

	typename std::vector<T>::const_iterator begin()const {
		return Box.cbegin();
	}
	typename std::vector<T>::const_iterator end()const {
		return Box.cend();
	}
protected:
	std::vector<T> Box;
	std::size_t Idx = 0;
};
```
```C++:Source.cpp
#include <iostream>

#include "BoxRandom.h"

int main() {
	BoxRandomII<std::size_t> B;
	std::size_t L = 16;
	for (std::size_t i = 0; i < L; i++) {
		B.Push(i);
	}
	std::mt19937 mt(0xdeadbeef);
	B.Shuffle(mt);
	for (std::size_t i = 0; i < B.Size(); i++) {
		std::cout << B.Get() << ',';
		B.Forward();
	}
	std::cout<<std::endl;

	return 0;
}
```
【Swift】TableViewのセクションの色を変更する

# やりたいこと
![Screenshot 2019-11-02_00-16-14-502.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509577/8479e3a6-6cc4-99eb-6709-093f0ceb8f20.png)

これを...

![Screenshot 2019-11-02_00-15-34-522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509577/7460de72-36aa-16ba-6f84-3175ac8990c9.png)

こうしたい



##やりかた
```swift
    // セクションの背景とテキストの色を変更する
    func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        // 背景色を変更する
        view.tintColor = .red

        let header = view as! UITableViewHeaderFooterView
        // テキスト色を変更する
        header.textLabel?.textColor = .white
    }
```

##おまけ
セクションごとに背景とテキストの色を変更したい

```swift
    func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){
        // switch文でsectionごとに色を変更する
        switch section {
        case 0:
            view.tintColor = .green
            let header = view as! UITableViewHeaderFooterView
            header.textLabel?.textColor = .yellow

        case 1:
            view.tintColor = .red
            let header = view as! UITableViewHeaderFooterView
            header.textLabel?.textColor = .white

        default:
            view.tintColor = .lightGray
            let header = view as! UITableViewHeaderFooterView
            header.textLabel?.textColor = .blue
        }
    }


```
Gatsby.jsでpages/indexディレクトリを"/"として認識する

# やりたいことはタイトルそのまんまです

pages/indexディレクトリを作成して、以下のような感じにするとできます。

gatsby-node.jsに以下のonCreatePageに関する挙動を設定してください。

```react:gatsby-node.js
// to avoid making path "/index/" instead of "/" with index directory
// see https://github.com/gatsbyjs/gatsby/issues/7363
exports.onCreatePage = ({ page, actions }) => {
	const { deletePage, createPage } = actions;

	return new Promise(resolve => {
		if (page.componentPath === `${__dirname}/src/pages/index/index.tsx`) {
			deletePage(page);

			// create a new page but with '/' as path
			createPage({
				...page,
				path: '/'
			});
		}
		// if you have any directories or files under the src/pages/index
		else if (page.componentPath.match(`${__dirname}/src/pages/index`)) {
			deletePage(page);
		}
		resolve();
	});
};

```

page作成時にもしそれがindexディレクトリのindex.tsxだったら削除してパスを"/"としてページを作ります。
pages/index配下に他のファイルがあった場合"/index/any"のような感じでページが作られてしまうので、index配下のファイルは削除するようにしています。

# まとめ
pagesディレクトリ配下のファイルはルーティングに専念した方がいいと思うので、ここに書いてある方法を試すより別のディレクトリで同じことをやった方がいいと思います()。
mac 起動音を消す方法 ~コマンドを実行して起動音のみ消す~

# 目的

- コマンドラインからのmacの起動音の消し方を知る。
- macの起動音のみを消したい時の方法を書く。

# 実施環境

- OS: macOS High Sierra 10.13.6
- 機種: MacBook Pro (15-inch, Early 2011)
- CPU: Intel(R) Core(TM) i7-2675QM CPU @ 2.20GHz

# 実施方法

1. ターミナルを開いて下記コマンドを実行する。
※実施後は音が出る設定にして再起動などを行い起動音が鳴らないか試した方が良い。

    ```terminal
    sudo nvram SystemAudioVolume=%80
    ```

1. 上記の設定にしてしまってやっぱり起動音鳴らしたいと思った時は下記コマンドを実行する。

    ```terminal
    sudo nvram -d SystemAudioVolume
    ````
線形代数を使用したQMLの紹介 (Quantum Machine Learning)

# Introduction to QML

<img width="504" alt="qnla.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526211/0b3897ad-edf3-39ea-8aa1-1d64305ff89c.png">

# Presentation [Link](https://drive.google.com/file/d/1xzVvFUWnk8-2mBBs26k_g0E6TsN3dup1/view?usp=sharing)
Pythonで[Errno 2] No such file or directoryがでた時の対処

*間違っていたこと一覧*
---
相対パスの書き方をプログラムのファイルの位置が起点だと思っていた。
　　↓
カレントディレクトリが起点
[Python 3\.x \- pythonでの相対パスの設定｜teratail](https://teratail.com/questions/119421)

Windowsでのパスの書き方を`temp/file.txt`だと思っていた。
　　↓
`temp\file.txt` 上の書き方はUNIX


*対処法*
---
絶対パスで参照した。

*感想*
---
パスの書き方違うのまじで衝撃
年末まで毎日webサイトを作り続ける大学生 〜14日目 DOMのノード関係 + mousemoveを学ぶ〜

##はじめに
初めまして。
年末まで毎日webサイトを作っている者です。
今日もMDNを見て勉強しましたが、実装は違うものを作りました。
DOMを操作して要素ノードをつけたりテキストノードをつけたりです。
というか、ノードについていまいち理解できていなかったので復習しました。
はやりたいことあったけど実力が及ばず・・・今日は残念な仕上がりになりました。
扱う技術レベルは低いですが、同じように悩んでる初心者の方を勇気付けられれば幸いです。
今日は14日目。(2019/11/1)
よろしくお願いします。

##サイトURL
- https://sin2cos21.github.io/day14.html


##前提
覚えておくといいノードは4つです。全部ではないですが、大体これだけ知っていればwebサイト制作には困らないと思います。


1. ドキュメントノード (htmlより上の文書の大元になるノード、よって1つしかない)
2. 要素ノード (pとかdivとか）
3. テキストノード (pで挟まれている文字とか）
4. 属性ノード (idとかclassとか、タグの中に書かれているやつ)


##やったこと
1. 灰色の部分にJavaScriptで要素やテキストを加える
2. マウスの位置を表示する
3.##

本当はマウスを動かすといい感じの丸がついてくるようにしたかったんです・・・。
でもうんともすんとも言わず、結果位置だけの表示に・・・

![test.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/516248/c6bdbeab-0dd6-e440-cd28-d5a845593da9.gif)

### 1. 灰色の部分にJavaScriptで要素やテキストを加える

では1から行きます。

JSで要素、テキストを加える方法↓

```html
 <div id="mouseMove"></div>
```

```javascript
            let circle = document.getElementById('mouseMove');
            let div = document.createElement('div');
            div.setAttribute('id', 'test');
            let text = '肉';
            let textNode = document.createTextNode(text);
            div.appendChild(textNode);
            let plusDiv = circle.appendChild(div);
```

まずcreateElementで要素を作ります。setAttributeで属性を付け加えられます。
createTextNodeは要素ノードの中にあるテキストノードを作る役割です。作ってどこに加えるかはappendChildを使います。

一見、テキストノードを作らなくてもinnerHTMLでいいと思うかもしれませんが、
innerHTMLは要素ノード内のテキストを丸ごと書き換えてしまうので、+@で文字を加えたい場合はテキストノードを使う必要があります。

要素内にテキストを入れたい場合
- 追加 → createTextNode
- 書き換え　→ innerHTML


### 2. マウスの位置を表示する
基本は大切ということで一応書きます↓

```javascript
mouseMove.addEventListener('mousemove', function (e) {
                let coordinate = ' (X座標：' + e.pageX + ' Y座標：' + e.pageY + ')';
                eNode.innerHTML = coordinate;
            })
```

イベントリスナーでmousemoveを指定しています。mouseMoveというIDがつけられたdivの中でマウスが動かされるとマウスの座標を表示します。


### 3. 5秒ごとに通知する
setIntervalという関数を使いました。この関数は一定間隔で繰り返し処理をしてくれます。

```javascript

       let plusTime = 5;
            function timeCount() {
                alert('遊び始めてから' + plusTime + '秒経ちました');
                plusTime += 5;
            }
            setInterval(timeCount, 5000);
```
> setInterval(timeCount, 5000);
↑これで呼び出しています

第一引数が呼び出す処理で、第二引数が処理間隔(ms)です。5000なので5秒間隔ですね。


##感想
mousemoveでいい感じの丸が動くやつを作りたかったな〜。
多分cssに原因があったはずだから、javascriptだけじゃなくcssもやらないと。
明日も頑張ります！

最後まで読んでいただきありがとうございます。明日も投稿しますのでよろしくお願いします。


##参考
1. MouseEvent - Web API | MDN (https://developer.mozilla.org/ja/docs/Web/API/MouseEvent)

参考になりました。ありがとうございます！
いまさらPython3（その他）

# はじめに
自分用のPython3として基本的な制御構造とデータ構造以外の文法を記載する。正確性より実用性を重視する。
（Javaや.NETを主に使ってる自分が、Pythonを使うためのページです）

制御構造は[いまさらPython3（制御構造編）](https://qiita.com/hos20r1/items/acd331c36403b96b5a1b)
データ構造は[いまさらPython3（データ構造編）](https://qiita.com/hos20r1/items/3326bdf6b4d2d75e33c0)

# モジュール
## import文
```
(1) import モジュール名 as 別名
(2) from モジュール名 import 定義名 as 別名, 定義名 as 別名
　※定義名は、クラス名、関数名、変数名など
```
```py:importの例
import math as m
from math import pi

print( m.pi )
print( pi )
```
(1)は、モジュールをインポートし、モジュール名.定義名で利用する。
(2)は、モジュール内の定義されている名前をインポートし、定義名で利用する。(モジュール名を書かずに定義名のみでアクセスできるので、クラスをインポートするときに便利）
モジュールを階層構造でまとめたパッケージのモジュールをインポートする場合、モジュール名を指定で、パッケージ名.サブパッケージ名.モジュール名と指定することができる。
ESXi6.7備忘録

#やりたいこと
-これまでTV録画用として構築していたPCを仮想化して、TV録画と軽い3Dゲームを動かしたい
#ハードウェア構成
・M/B ASUS P8Z77-M pro(microATX)
・CPU i5(sunday/ivy brigde（どっちか忘れた））
・memory 16GByte
・stroge SSD500GByte/HDD4TByte(録画データ入り）/USB32G
・GPU GForce1030
・PT3
・NIC　INTEL X550
#基本構成
・USBからESXiを起動
・SSDはESXiのVMFS領域
・GPUはPCIパススルーで仮想Windowsへ接続
・PT3はPCIパススルーで仮想Linuxへ接続
・HDDはパススルーでLinuxへ接続（データをLinuxへそのまま持っていきたい）
・できればUSBをパススルーしてWindowsのマウスやスキャナーをつなぎたい
#構築
1.事前にBIOS(UEFI)上でINTEL VT-D(仮想化支援機能）を有効化（ASUSのマザーボードはなぜかデフォルトで無効になってるような・・・？）
2.起動時のBIOS/UEFI優先設定をUEFI優先、もしくは専用に（これはいらないかも）
3.優先グラフィックをPCIEに
4.内臓サウンドを切る

・普通にインストール用USBメモリからESXiシステム用のUSBメモリへインストールする。
うちではUSBバーチャルディスクってのを使ってISOイメージからインストールしてるけど、普通にUSB起動でもインストールできると思う
・M/BのNICは蟹なので、NICとして認識しない。面倒だから余ってたINTEL　X550を使って設定。（この辺も安いINTELNICとかでも問題ないと思うし、起動CDに蟹ドライバ入れてM/B内蔵NICを利用してもいいけど面倒だったので）
#インストール時注意事項
・サーバのIP設定などはインストール直後に行うこと！
（GPUパススルー設定をしてしまうとローカルコンソールが操作できなくなる（後述）ので、ローカルコンソールで設定しないといけない項目はインストール直後に！）
#webクライアント上の設定
・ストレージの設定（○○＞○○＞○○でSSDをvmfsストレージに設定）
・SSHの起動時有効設定（後述）
・SSHの起動
・インストール用ISOイメージをVMFSストレージへ転送
（本来WEBクライアントからアップできそうな感じで何度かやってみたが、なぜかWEBクライアントが止まってしまう感じだったので、winscpにて直接転送した。
#SSHを起動時に有効にする
まずはこれ。
ホスト＞管理＞サービス＞TSM-SSHを右クリック＞ポリシー＞手動で起動および停止します。
から、「ホストと連動して起動および停止します。」へ変更

![スクリーンショット 2019-11-01 23.05.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526192/9f761dcb-ccfd-e5db-05d3-ce1ff2dc5651.png)

これやっとかないとWebクライアントがつながらなくなったときにはまる。
（まぁローカルコンソールにアクセスできれば有効にはできるが）
#順番はどっちでもいいと思うけど
・WEBクライアントから管理＞ハードウェアで、一旦GPUのパススルー設定をする
・サーバ再起動
・新規仮想マシンの作成。以下SSのように（後で追加する）
・仮想マシンのインストール、そののちVMWareToolsを入れる
・いったん仮想マシンを停止して、PCIeデバイスを追加する。
あとNvidiaのグラフィックカードを物理環境と誤認させないといけないので、以下設定の追加
・起動、GF1030のドライバインストール。
・こんな感じで動く。ここでグラフィックカードに！が出ている場合、どこかの設定が抜けている可能性が大きいので、確認する。
（自分の場合はBIOSでサウンドを切るのを忘れていた・・・あんまり関係ありそうに見えないので飛ばしてたんだけど。）

#注意事項
・GPUをパススルー設定すると、ESXiサーバの起動が途中で止まる。
「dma_mapper_iommu loaded sucessfully」　の画面で止まったように見えるが！内部的には普通に動いていて、普通にWEBクライアントにアクセスできる。
ここで２日ぐらい悩んだんじゃないかな・・・orz
#うまく動くと
・GPUの出力にWindowsの画面１が、仮想コンソールのに画面２が出力されるデュアルモニタ状態になるので、windows上から画面２のみ有効にして、仮想コンソールの出力のみにする

#ESXiWebコンソールにアクセスできなくなった
webコンソールにアクセスするとき証明書エラーが出て気持ち悪かったので、Let'sEncryptで取得したワイルドカード証明書を入れようとしてしくじり、webコンソールが起動しなくなる
- pingは通り、ローカルコンソールも見えているので起動はしていると思うのだが、操作できない
sshでログインし、以下コマンドを入力
```ssh
/sbin/generate-certificates
```
[VMWare公式](https://docs.vmware.com/jp/VMware-vSphere/5.5/com.vmware.vsphere.security.doc/GUID-EA0587C7-5151-40B4-88F0-C341E6B1F8D0.html?hWord=N4IghgNiBcIKIGUAaBLABIOwZANpodQZAiDIFeBgj7qBO-oLAqgPFGBwZoB9mGg+K6AIRiAL5A)
再起動し、webクライアントにアクセスできることを確認

#qiitaって下書きとか限定公開とかあるじゃないですかー
・すいません、わかりにくいのであとで別記事でまとめなおします。
・いったん公開したら引っ込めないとか
vscodeをコマンドラインから起動する(linux, snapインストール)

# はじめに
Visual Studio Codeをインストールしたがコマンドラインからの起動方法がわからず、ググッてもすぐに出てこなかったのでメモします。
# 環境
GalliumOS on Edgar(Acer Chromebook14 CB3-431)
snapにてvscodeをインストール(オフィシャルサイトの通り)
`$ sudo apt install snapd`
`$ sudo snap install --classic code`
# 問題点
snapにてvscodeをインストールしたが、`$ code`にてvscodeが起動しない。
ググって得た情報でもダメ。インストール方法による保存場所の違いか。
# 解決策
`$ /snap/bin/code` を実行する。
パスが通っているところにシンボリックリンクをはる。
`$ sudo ln -s /snap/bin/code /usr/local/bin/code`
これによって`$ code` でvscode が起動してくれます。
# 他情報
- /snap/bin/code は/usr/bin/snap へのシンボリックリンクとなっている。
- 解決策がわかる前は、`$ code` を実行しても、No such file or directory というパスが通っていないエラーとなった。
- snapでインストールしてもvscodeアイコンはGUIアイコンに現れず、アイコンから起動ということができない。
- 軽量とはいえGUIアプリのためか、画面の出現までは2,3秒かかります。一方neovimは1秒くらいかな。
- まずは起動したところまでです。

以上です。
Rails6のActionDispatch::HostAuthorizationとELBのヘルスチェックの共存

Rails6の[ActionDispatch::HostAuthorization](https://github.com/rails/rails/pull/33145)設定と[okcomputer](https://github.com/sportngin/okcomputer)を利用した `Nginx - Rails - RDS` という経路のヘルスチェックの共存に少しコツが必要だったので記事にしました。

## ActionDispatch::HostAuthorization
https://github.com/rails/rails/pull/33145
Rails6から追加された、[DNSリバインディング攻撃](https://en.wikipedia.org/wiki/DNS_rebinding)から保護する新機能です。

下記のように設定することで、指定したホスト以外からのアクセスはエラーとなります。

```ruby
Rails.application.config.hosts << "product.com"
```

## okcomputer
https://github.com/sportngin/okcomputer
HealthCheck系のgemです。
2019/10/26(執筆時点の一週間前)にRails6対応がリリースされました。

`Rails - DB`という経路のヘルスチェックを簡単に追加することができます。
例えば、下記のような設定で、`/custom_path`というパスにDBまでのヘルスチェック機能を追加することができます。

```ruby
# config/initializers/okcomputer.rb
OkComputer.mount_at = false

# config/routes.rb, at any priority that suits you
mount OkComputer::Engine, at: "/custom_path"
```

## 発生した問題
Rails6 + AWSで下記の構成のようなアプリを開発していました。

```
            ECS
      +----------------+
ALB---|--Nginx--Rails--|---RDS
      +----------------+
```

Rails6の`HostAuthorization`と`okcomputer` gemを利用し、`/healthcheck`というパスでALBからのヘルスチェックをDBまで通して行おうとしました。
しかし、Railsが`403エラー`を返し、ヘルスチェックが失敗してしまいました。

## 問題の原因
Nginx、Railsの設定はそれぞれ下記のようになっていました。

Nginxの設定

```nginx
# healthcheck部分のみ抜粋
server {
  location /healthcheck {
    access_log off;
    proxy_pass http://rails:3000;
  }
}
```

Railsの設定

```ruby
Rails.application.config.hosts << "product.com"
```

原因はシンプルで、**「ヘルスチェック時のホスト名が`product.com`でないからエラーになっていた」**というものです。

## 対策
いくつか対策方法が考えられますが、今回はシンプルにNginxでHostヘッダを設定する対策を採用しました。

Nginxの設定

```nginx
server {
  location /healthcheck {
    access_log off;
    # 以下を追加
    proxy_set_header Host healthcheck.localhost;
    proxy_pass http://rails:3000;
  }
}
```

Railsの設定

```ruby
Rails.application.config.hosts << "product.com"
Rails.application.config.hosts << "healthcheck.localhost"
```

この設定で無事、ALBからのhealthcheckでhealthyとなりました！

**もう少しスマートな対応方法ありましたら、教えていただけると嬉しいです**
【はじめてのWebAPI】RubyでのHTTPClientの基本構文

## はじめに
RubyでHTTPClientを使うときの基本構文について記載しました。
Web APIを使って外部データを引っ張るための第一歩！

## この記事が役立つ方
- Web APIを触ったことがなくて
- HTTPクライアントを使ったことのない
- Ruby初心者

## この記事のメリット
- 外部からデータを引っ張る第一障壁をクリア出来る

## 環境
-  OS： macOS Mojave version 10.14.6
* ターミナルのシェル：　zsh
* Ruby 2.6.3

## HTTPClientとは？
Rubyで標準で入っているnet/httpよりも機能面が充実しているHTTPクライアントライブラリ。

これを使うことにより、プログラムで外部へHTTPリクエストを送ることが出来るようになります。

## 導入
まずは以下のようにgemをインストールして下さい。

```zsh
gem install httpclient
```

## 基本コード
以下が基本のコードです。
ここからは活用したいデータによって書き方が異なります。

```zsh
# HTTPClientを呼び出す
require 'httpclient'

#ベースとなるURLを設定(e-Statからデータを引っ張る場合)
url = 'https://api.e-stat.go.jp/rest/2.1/app/json/getStatsData'

# 新しいインスタンスを作成
client = HTTPClient.new

#クエリの設定(appIdとstatsDataIdはサンプルです。)
query = { 
  'appId' => 'XXXXXXXXXXXXXXXXXXX'
  'statsDataId' => '0000000000'
}
#APIリクエスト
res = client.get(url, query)
#ハッシュ化して返す
return JSON.parse(res.body)
```


## おわりに
今回はかなり部分的な内容となってしまったので、また後日加筆修正します。

**e-Stat**のデータを取り出す方法についてもまとめるつもりです。

外部データを引っ張ると、**ハッシュ in 配列 in ハッシュ**みたいな複雑な構造が多く、勉強になりますね。
[政府統計の総合窓口(e-Stat)−API機能へようこそ | 政府統計の総合窓口(e-Stat)−API機能](https://www.e-stat.go.jp/api/)

## 参考にさせて頂いたサイト（いつもありがとうございます）
[Class: HTTPClient      — Documentation for httpclient (2.8.3)](https://www.rubydoc.info/gems/httpclient/HTTPClient)
[Ruby HTTPクライアントの比較表 - Qiita](https://qiita.com/aosho235/items/559603ef98587ae4cfc1)
[Rubyを使って天気予報を取得してみた - Qiita](https://qiita.com/Co_Pilot/items/02255167813013dd4075)
PocketBeagleにUSB Wi-Fiを追加する

PocketBeagleにUSB Type-Aコネクタを追加して、そこにUSB Wi-Fiアダプタを追加してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109634/cf768413-72e3-15be-c5af-a0efe2cd05bd.png)

## PocketBeagleにUSB Type-Aコネクタを追加する

[この資料](https://github.com/beagleboard/pocketbeagle/wiki/FAQ#How_do_I_get_additional_USB_connections)に習って、PocketBeagleにUSB Type-Aコネクタを配線します。

図では、microUSBですが、図の下の本文に、USB Type-Aを配線する補足事項が書かれていますので、ちゃんと読んで配線しましょうw

## USB Wi-Fiアダプタを取り付ける

エレコムの[WDC-150SU2MBK](https://www.elecom.co.jp/products/WDC-150SU2MBK.html)が転がっていたので、これを取り付けます。

どうでもいいけど、このアダプタ、2014年に発売していて今でも買えるんですね。すごい。

## USB Wi-Fiアダプタを認識しているか確認する

`lsusb`で見えました。（一番上）

```bash
debian@beaglebone:~$ lsusb
Bus 002 Device 002: ID 056e:4008 Elecom Co., Ltd
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
debian@beaglebone:~$
```

ドライバはOSに入っているっぽい。  
`ip a`で`wlan0`として認識されています。

```bash
debian@beaglebone:~$ ip a
...
6: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,DYNAMIC,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether bc:5c:4c:26:b2:e7 brd ff:ff:ff:ff:ff:ff
debian@beaglebone:~$
```

## アクセスポイントをスキャン

```bash
debian@beaglebone:~$ sudo iwlist wlan0 scan | awk '/ESSID/'
                    ESSID:"rt500m-666b88-2"
                    ESSID:"0024A5F45EE3"
                    ESSID:"rt500m-666b88-1"
                    ESSID:"B8763F210473"
                    ESSID:"TP-Link_4C38_2G"
                    ESSID:"0024A5F45EE3-1"
                    ESSID:"0024A5F45EE3"
                    ESSID:"0024A5B51D44"
                    ESSID:"0024A5B51D44-1"
debian@beaglebone:~$
```

## アクセスポイントに接続

[こちら](https://qiita.com/yujimny/items/c2c85d7338f65129602b)の手順でOK。
AWSで作成したWordPressのサイトをSSL化する

##はじめに
自分はインターネット初心者です。
無料枠が残っているAWSを有効活用するためにEC2を使い、WordPressでブログでも書こうと思った際、SSL化がよくわからなかったので記事に残しておく事にしました。
正直なぜこれで動いてるのかわかりません。(色々な記事を参考にしてもうまくいかなかった)
この記事を参考にしてSSL化する際は自己責任でお願いします。

##いろいろやる
Certificate Managerで証明書を発行し、ロードバランサーの作成、Route 53でドメイン名とELBとの関連付けまでは他の方々と同じです。
##WordPressにログインし、プラグインをインストール
WordPressにログイン後、メニューの「プラグイン」から「新規追加」を選択。
<img width="430" alt="スクリーンショット 2019-11-01 22.15.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197222/6814637b-9ca9-1a3c-60a8-82f601db4d1b.png">
「プラグインの検索」に「ssl」と入力し、「Really Simple SSL」をインストール後有効化。
<img width="1519" alt="スクリーンショット 2019-11-01 22.08.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197222/0bb86e85-bba3-3e33-ef56-c5ff48449a89.png">
##サーバーにSSHでアクセス
アクセス後、以下の方法で「wp-config.php」ファイルを書き込み可能にする。
`chmod 4273 /opt/bitnami/apps/wordpress/htdocs/wp-config.php`

実行後、WordPressに戻りページを再読み込みしてSSL化ができてるか確認。
確認後、権限を一応戻しておく。
`chmod 4253 /opt/bitnami/apps/wordpress/htdocs/wp-config.php`

これでSSL化は完了。
##さいごに
ほぼツールに頼ってSSL化しました。
セキリュティ的によろしくなかったらコメントで教えてもらえると助かります。
よろしくお願いします。
そして、この一言に尽きます。
###とりあえず動いてるからヨシ!!
初心者によるプログラミング学習ログ 143日目

# 100日チャレンジの143日目

twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。

100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。

143日目は、

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">おはようございます<br>143日目<br><br>udemyで架空のwebサイト制作<br>新着記事一覧部分<br><br>技術書でjavascript学習<a href="https://twitter.com/hashtag/100DaysOfCode?src=hash&amp;ref_src=twsrc%5Etfw">#100DaysOfCode</a> <a href="https://twitter.com/hashtag/%E9%A7%86%E3%81%91%E5%87%BA%E3%81%97%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%A8%E3%81%A4%E3%81%AA%E3%81%8C%E3%82%8A%E3%81%9F%E3%81%84?src=hash&amp;ref_src=twsrc%5Etfw">#駆け出しエンジニアとつながりたい</a><a href="https://twitter.com/hashtag/%E6%97%A9%E8%B5%B7%E3%81%8D%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8?src=hash&amp;ref_src=twsrc%5Etfw">#早起きチャレンジ</a><a href="https://twitter.com/hashtag/WEB%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#WEBデザイナー</a></p>&mdash; ぱぺまぺ@webエンジニアを目指したい社畜 (@yudapinokio) <a href="https://twitter.com/yudapinokio/status/1188567178552860672?ref_src=twsrc%5Etfw">October 27, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
gonum/matで単位行列を生成する


# コード

```go
idSlice := make([]float64, n*n)
for i := 0; i < n; i++ {
	idSlice[i*(n+1)] = 1
}
idMat := mat.NewDense(n, n, idSlice)
```

これでできる。


# サンプルコード

`go get gonum.org/v1/gonum/mat`を実行して、コピペすれば動く。

```go
package main

import (
	"fmt"

	"gonum.org/v1/gonum/mat"
)

func matPrint(X mat.Matrix) {
	fa := mat.Formatted(X, mat.Prefix(""), mat.Squeeze())
	fmt.Printf("%v\n", fa)
}

func main() {
	n := 4
	idSlice := make([]float64, n*n)
	for i := 0; i < n; i++ {
		idSlice[i*(n+1)] = 1
	}
	idMat := mat.NewDense(n, n, idSlice)

	matPrint(idMat)
}
```

# 解説

gonum/matでは、`[]float64`を渡して行列を作る。

例えば、3x3の単位行列

```
⎡1  0  0⎤
⎢0  1  0⎥
⎣0  0  1⎦
```

を作るには、要素数$3 \times 3 = 9$のスライス`[1 0 0 0 1 0 0 0 1]`を渡す。
これは、1を4個の要素ごとに、全部で3個代入したスライスである。


4x4の場合、

```
⎡1  0  0  0⎤
⎢0  1  0  0⎥
⎢0  0  1  0⎥
⎣0  0  0  1⎦
```

を作るには、要素数$4 \times 4 = 16$のスライス`[1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1]`を渡す。
これは、1を5個の要素ごとに、全部で4個代入したスライスである。

つまり、nxnの場合、1をn+1個の要素ごとに、全部でn個代入したスライスを生成すれば良い。

これをコードに落とし込むと、

```go
idSlice := make([]float64, n*n)

for i := 0; i < n; i++ {        //全部でn個
	idSlice[i*(n+1)] = 1        //1をn+1個の要素ごとに代入
}
```

となるので、あとは

```go
idMat := mat.NewDense(n, n, idSlice)
```

でコンストラクタに渡せば良い。
Homebrewでrictyが更新出来ない

# はじめに
`brew upgrade` でパッケージの更新をかけようと思ったらエラーが起きて完了させることが出来なかった。

# どんなエラーか
発生箇所を抽出

```
==> Upgrading sanemat/font/ricty
Error: An exception occurred within a child process:
  RuntimeError: /usr/local/opt/fontforge not present or broken
Please reinstall fontforge. Sorry :(
```

# やったこと
* 最終行に再インストールしろって書いてあるので`brew reinstall fontforge`をかけてみた
    * 変わらない
* `brew uninstall fontforge`でアンインストールしてから`brew install fontforge`してみる
    * 変わらない

# 解決した方法
`cd /usr/local/opt/`してから`brew link fontforge`をしてみたらエラーが出なくなった。

# 終わりに
brewのほうでいい感じにやってくれたらいいんですけどね。

# 参考
[github](https://github.com/Homebrew/legacy-homebrew/issues/37160#issuecomment-76617530)
iPadOSでの現在表示しているSceneの取得方法

iOS，Android開発初心者です．Qiita投稿もほぼ初心者なので間違っていたら色々指摘していただけると幸いです．

iPadOS13よりUIScene APIが導入されました．UIApplicationでは1つのウィンドウのみを考えて開発してたのに対し，UISceneにより複数ウィンドウを管理できるようになりました．そこでSceneごとに変数を設定したいと思ったら意外にもハマってしまったのでここで共有します．

## 今までの異なるView Controller間の変数の共有方法
いくつか方法があるそうですが，初心者向けのサイトなどで紹介されている方法としてはAppDelegate.swiftに変数を宣言．

```swift
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    var hogehoge: String = "hogehoge"
```

そして使いたいView Controllerで以下のように取得できる．

```swift
let appDelegate: AppDelegate = UIApplication.shared.delegate as! AppDelegate
let hogehoge = appDelegate.hogehoge
```
しかしながらこの方法ではすべてのマルチウィンドウで同じ変数を共有してしまう．
またこの方法以外にもシングルトンを使う方法などがあるがシングルトンもマルチウィンドウで同じ変数を共有してしまう．そのためシングルトンなどを今まで使っていた人は`UISceneSession#persistentIdentifier`で対応する必要がある．（https://qiita.com/snoozelag/items/fe95df7e748ad5fc3205 参照）

## マルチウィンドウにおける異なるView Controller間同士の変数の共有方法
まずいままでと同じようにSceneDelegate.swiftに変数を宣言．

```swift
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?
    var hogehoge: string = "hogehoge"
```
そして使いたいView Controllerで以下のように取得可能．

```swift
let scene:UIScene! = UIApplication.shared.connectedScenes.filter{
      $0.session.configuration.storyboard == self.storyboard
}.first
let sceneDelegate:SceneDelegate! = scene.delegate as? SceneDelegate
let hogehoge = sceneDelegate.hogehoge
```
UIApplication.shared.connectedScenesはマルチウィンドウに表示しているすべてのSceneを取得してしまう．そこで現在表示しているstoryboardが`$0.session.configuration.storyboard`と等しいことを確認することで取得可能になる．
他にいい方法とかあれば教えてほしい．．．．
[バッチ] 毎月の勤怠表のpw付きzip作成を自動で行う

**もくじ**
→https://qiita.com/tera1707/items/4fda73d86eded283ec4f

# やりたいこと
月末に勤怠表を毎回数名分zipして、パスワードかけて、メールでおくらないといけない。
zipしてパスワードかけるのが地味に面倒なので、自動でやりたい。

# やり方
フリーソフトの「7-zip」を使う。

# 前提
7-zipがインストールされていて、`C:\Program Files\7-Zip\7z.exe`に実行ファイルがあること。
7-zipは下記からダウンロードできる。
https://sevenzip.osdn.jp/

# サンプル
サンプルでは、下記のようなことをしている。

- 勤怠表ファイル名に付ける「〇月度」の〇をユーザーに入力させ、
- そのファイル名で、人数分のxlsxを含めてパスワード付きzipを作る

※面倒なので固定パスワードにしてるが、本当はパスワードも入力させるべきかも。

```勤怠表をパスワード付きでzipサンプル.bat
@echo off
chcp 932

rem 対象の勤怠ファイル
set TARGETEXCELFILE1=●●さん.xlsx
set TARGETEXCELFILE2=■■さん.xlsx

rem zipにかけるパスワード
set PASSWORD=password

rem 月の入力を受け付ける
echo 何月度の勤怠表ですか？
set /P INPUT_MONTH=

set ZIPFILE="勤怠表%INPUT_MONTH%月度.zip"
echo %INPUT_MONTH% 月度勤怠表をzipします。

rem 勤怠表をzip(パスワード付きzip)
echo %PASSWORD%| "C:\Program Files\7-Zip\7z.exe" a  %ZIPFILE% %TARGETEXCELFILE1% %TARGETEXCELFILE2% -p

rem 終わり
pause
```

# 今後
本当は、メールでエクセル表を送るのでメール作成～ファイル添付～送信も自動でやりたいのだが、そこまで手がでなかった。今後余裕があるときに調べる。

# 参考
7-zipのダウンローページ
https://sevenzip.osdn.jp/

7-Zipでの圧縮をコマンドプロンプトから実行！
https://www.lisz-works.com/entry/compression-7zip-command
picoCTF 2019 Flags - Points: 200

#問題

https://2019game.picoctf.com/problems

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/568984f6-80f1-2e1d-739b-789f82d0c925.png)

#解いてみた

問題のファイルを開いてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/b7323107-8ca7-e6c2-8ad0-2458c17e2af0.png)

国旗っぽいけど少し違いますよね？

文字数的に最初の「{」まではpicoCTFで7文字。
この旗も7枚なので、それぞれ1枚が1文字に紐づいてそう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/5aae6b41-68e2-d38d-d710-05b827de01fb.png)

前から「picoctf」だと仮定すると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/6fa48b03-3338-7547-bd05-59e360de5908.png)

こんな感じになりますけど、ここから先はどうすればよいのか。
ヒントを見てみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/d4ae504f-d21f-f9f6-2421-23b49321e228.png)

今回は全部大文字だそうです。
それ以外はわかりませんが。

更新します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/a964d438-b591-a5d9-aba0-18704dc2e200.png)

ここからは完全に勘ですが、これまでのフラグの傾向を見ると旗の問題だしflagという単語が入ってそうということを踏まえると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/3ec2979e-e350-211f-d00f-1a20890ea95d.png)

という感じでしょうか。
ここから先いろいろ考えてもわからなかったので、単純に画像検索してみることにします。

国旗っぽいやつやると国旗が出てくるだけなので、一番国旗っぽくなくて、特徴がありげな画像を。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/f5f0afe8-45ac-902f-459a-9610096abfce.png)

類似画像を見ると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/1bf7e776-e07c-4f79-ab22-6b9bdd21131b.png)

なんと、左上のやつ一緒ですね！
このサイトに行ってみます。

信号（形象物）籏 - マリンサービス児嶋　ウェブショップ
https://www.mskojima.yokohama/?mode=cate&cbid=2460348&csid=0

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/dece4c9f-806e-007a-d36c-a71e583b2f8e.png)

おお。
文字旗！
あてはまる文字を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/86f362f4-632f-09ef-1f6b-080077692496.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/0b7c1a0c-2cad-4afa-ba06-59516ef31e4c.png)

なぜかこの2つだけ書かれていませんでした。
商品名になっている「信号旗」で検索。

国際信号旗 - Wikipedia
https://ja.wikipedia.org/wiki/%E5%9B%BD%E9%9A%9B%E4%BF%A1%E5%8F%B7%E6%97%97

にたどり着きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/1a7979f3-75d1-c6c7-0ec6-cb5b03e1ffa3.png)

NATO旗という謎ジャンルですが、これで全部の旗が解決しました。
つなぎあわせたものが答えです。
Macbook Air 11inch (Mid 2013) のBootcampにハマる（その２）

# 概要

[前回](https://qiita.com/uenopa/items/5ac957da3c8c92cf94b6) の続き。Windows 10は諦めて Windows8.1 に変えて試してみます。

# Windows 8.1

Windows10 っではどうしてもうまく行かなかったので、Windows8.1 に切り替えることにしました。とはいえ、最新の Bootcamp アシスタントは Windows10 以外は入れさせてくれないので、以下のサイトに書かれている手段を取ります。

* 自称健全ブログ
    * [MojaveのMacBookでWindows8.1を無理矢理BootCampする](http://ardtv27.blogspot.com/2018/11/mojavemacbookwindows81bootcamp.html)

しかし、ここに書かれている方法を実施するには Windows 機を用意する必要があります。それも面倒なので、以下の方法でショートカットすることにしました。

1．Bootcamp アシスタントでは Windows10 の ISO ファイルを指定し、bootcampのパーティションを作成し、Windows10 の installer を開始します。ここは通常の作業どおりです。
2. Windows のインストールが始まって言語などのセットアップ画面が出たら、 option キーを押しながら電源ボタンを押して再起動し、再度 MacOS を立ち上げます。
3. Windows10のインストーラーが入っているUSBメモリのうち、以下に表示されているファイル**以外**を削除します（これらのファイルは残しておいてください）。
   ![](https://3.bp.blogspot.com/-xeCGJwomTZg/W-LtB1ZfK1I/AAAAAAAAnVg/fgTb0L_yDMoJmqPXjF87iqdaPF2CUp-SwCLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2018-11-07%2B22.05.06.png)
4. ディスクユーティリティを起動し、Windows8.1 の ISO ファイルをマウントします。
5. Windows8.1 のディスク内のファイル全てを USBメモリにコピーします。
6. コピーが終わったら、再度 option キーを押しながら再起動し、EFIパーティションを選択します。すると、Windows8.1 のインストールが開始されます。

これで、Windows8.1のインストールができるはずです。

# Windows Update

さて、ここからが問題。Windows8.1 をインストールできても、そのままでは Windows Upadate ができません。検索すると大量に出てくる「WindowsUpdate終わらない問題」を食らうからです。Windows10 のときと同じですね。でもWindows8.1 の場合は回避できます。そのためには、以下の方法を使います。

* スタッフブログ
    * [WindowsUpdate が終わらんよ！](http://pc-world.co.jp/blog/2019/05/08/1905081930/)

ここを参考に、マイクロソフトのサイトから以下のファイルを取ってきてまずはこれらを先に install し、その直後に Windows Update をかけると成功するようになります。

* [セキュリティ マンスリー品質ロールアップ](https://www.catalog.update.microsoft.com/Search.aspx?q=KB4493446)
* [セキュリティ更新プログラム (Adobe Flash Player 対応)](https://www.catalog.update.microsoft.com/Search.aspx?q=KB4493478)

注意点としては、

* これら２つのファイルを事前にダウンロードしておき、ネットの接続を解除する。
* ネットにつながない状態で Windows8.1 を再起動し、上記の update を１つずつ当てる。
* １つのインストールが成功したら、必ず再起動する。
* ２つのインストールとも終わって再起動後、ネットワークに接続し、すぐに Windows Update をかける。

を実施することで、Windows Update に成功するようです。

# 結論

Mojave でも工夫すれば　Windows 8.1 の Bootcamp が成功するのではないでしょうか。私はもう疲れました...

ちなみに、ようやく動くようになった Bootcamp での Windows8.1 ですが、電源プランを変更するだけで固まります。それはつまり、電源に接続していて、バッテリー駆動に変更すると固まることを意味します。使いにくくてたまらない。なんとかならないかなーと思っていて、ドライバ等を更新してみたけど変わらない。

半分諦めていたのですが、ふと気づきました。電源ケーブルを外してバッテリー使用に変えると固まるということは、バッテリー使用時も省電力モードにならなければよいのです。ということで、常に高パフォーマンスモードになるようにしてみました。

![](https://www.fmworld.net/cs/azbyclub/qanavi/private/201801/1500000022/034.gif)

正解！電源ケーブルが外れてもハングアップしなくなりました。外すとガンガンバッテリーを消費していきますので、Macbook Air の本来の使い方ではないかもしれませんが、とりあえず落ちなくなったのでこれで良しとします。

# 補足

Bootcamp エリアもバックアップは取りましょう。無料／有料のいろいろなツールが出ていますが、オススメはディスクユーティリティで「"BOOTCAMP"からイメージ作成」を選択して BOOTCAMP.dmg を作成して TimeMachine ですかね。その分 Mac 側にディスク領域が必要ですが。
ALSAミキサーで音声解析をする

15年以上関わって来たあるプロジェクトで、音声ノイズが問題となり、
継続的に音声解析をすることになりました。

…というのも、音声を録音してて同時にスペクトル解析をしていると
突然ノイズが被ったり、不可解な現象が起こるという問題が数年間
継続的に起こっていると。

非常にレベルが小さい信号を拾うため、ノイズは大敵なのです。
あと、年間で記録する時期が決まっていると言う、ことで、
日常で何が起こっているのか知らなくてはならないわけです。

そこで、余った古いノートPCにUbuntuサーバを入れて、
ひたすらサンプリングをして統計処理をすると言うことを
開始しました。

本来ならばスペクトル解析を行わなくてはなりませんが、
計算負荷と、データ量からすると、統計処理しかないと言う
訳です。

分散と、平均、最大値、最小値の4種類だけで何がわかるか
考えることにしました。

ばらつきを示す分散は、時間によって大きく変化すると。
これは、振幅が一定になれば下がるので、ある程度は
何が起こっているのか、知ることができそうです。

最大値、最小値は、信号の大きさを知ることができますが、
最大値は比較的時間変化があるみたいで、何が知る事が
できそうです。

平均値は…殆ど変化がありません。多分、サウンドカードの
経年変化が見えるのかと思います。


継続して行う事により、見える事があると思います。
さて何が見えるが…

発表できるかも知れません。
AWS Cloud9でherokuコマンドがnot foundになった時の対処法

Railsチュートリアルの6.4でherokuコマンドを見失ったので対処法のメモ。
１．herokuコマンドみつからないエラー
　■入力したコマンド
　`$ heroku run rails db:migrate`

　■エラー内容
　`bash: heroku: command not found`

　■やったこと
　[Cloud9でHerokuが使えない時の対処法](https://qiita.com/bdogrep/items/8620dbba5e4c3fd859df)

　■結果
　上記記事内のコマンドを上から実行していったときに、新たなエラーに遭遇。

２．herokuをアップデートしなさいエラー
　■エラー内容
　$ heroku -v
　 ›   Warning: heroku-cli update available from 7.0.9 
　 ›   to 7.29.0.

　■やったこと
　`$ heroku update`

　■結果
　heroku-cli: Updating CLI... not updatable

３．herokuアップデートできませんエラー
　■やったこと
　[AWS Cloud9でHerokuのインストールが毎回必要?になる(Railsチュートリアル )](https://qiita.com/bashinkei/items/c8d9bd1e622811e9c950)
　※補足※
>ということで「$HOME/.bash_profile」に$PATHの設定を追加して再起動してみる。

　上記記述がよくわからなかったんですが、いろいろ調べながら以下の作業を実施。
　・以下の画像とおり、Cloud9のコンソールの左ペインの歯車をクリックして、全てのファイルを表示させる。
　・.bash_profileファイルが表示されるのでダブルクリックして開く。
　![aws.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239929/2fcdb724-fc10-f94c-983b-594ecd27da2e.jpeg)
　・10行目くらいにすでにPATHの記述があるのでコメントアウト（以降の作業で環境がおかしくなった時に、アンコメントして元に戻すため）
　・以下の記述を足して保存する。
　`PATH=/usr/local/heroku/bin:$PATH`
　・EC2のコンソールを開き、インスタンスを再起動する。（詳細な説明は割愛します。）
　・再起動後rails sしようとしたらエラーが出たので、bundle isntallを実行
　・rails sが実行されたら、再度以下のコマンドを実施
 `git push heroku`
　・herokuにログインを促されるので、以下の情報を入力
　　－Username:herokuのログインID（メールアドレス）
　　－Password:Herokuの[Account settings]ページ内にある、[API Key
]のRevealをクリックしたときに表示されるコードをコピペ
　・[Opening browser to https://cli-auth.heroku.com/auth/browser/[id]]と表示されるので、別ウィンドウでURLを開く

上記の手順でやっと[$ heroku run rails db:migrate]ができました。
調べながらあっちやったりこっちやったりしたので、上記の流れのとおりじゃなかったかもしれませんが、今後の自分のためと同じようにつまづいた人のためにメモ。
何かご指摘があれば遠慮なく教えてください。初投稿なのでお手柔らかにお願いします。
[バッチ] コマンドの確認入力([Y/N?]みたいなの)を自動で入力する

**もくじ**
→https://qiita.com/tera1707/items/4fda73d86eded283ec4f

# やりたいこと
バッチで、対話式のコマンド「よろしいですか？(Y/N)？」とか聞かれるやつを、自動で回答できるようにしたい。

# やり方
`echo`の出力をパイプ`|`でコマンドに渡してやる。

# サンプル
delコマンドでフォルダを消そうとすると、通常は「よろしいですか？(Y/N)？」と聞かれる。

```例えばフォルダを消す.bat
rem aaaという名前のフォルダを消そうとする
del aaa
```
出力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352601/1fbf15c4-fc39-6eb5-3023-c2da69de7069.png)

バッチでこういう処理を書くときに、いちいち入力できないので、聞かれたことに自動で答えてもらう。

```例えばフォルダを消す自動版.bat
rem aaaという名前のフォルダを消そうとする
echo Y|del aaa
```

出力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352601/18fc073e-4c5f-9f28-1a18-ed01f25d3043.png)

→？？？なぜかフォルダ消えてくれない。。要確認
ただやり方はこんな感じ。

# 注意点

`echo Y|del aaa`のところで、「Y」のあと「｜」の前にスペースを入れると、それも質問に対しての文字列に入ってしまう。注意。
Coolorsが選んだ色でグレースケール画像を自動着色する（Processing）

いいかんじの配色をピックしてくれるサービス[Coolors](https://coolors.co)がにわかに話題なので、グレースケール画像をとりこんだら勝手に着色してくれるようなものをProcessingで作成しました。

CoolorsのURLからカラータグを抽出するところはこちらのプログラムを参考にさせていただきました。
[Coolorsからカラーパレットを作成 by Processing](https://note.mu/outburst/n/nec6c0b8cf022)

```java

PImage img;
//任意の画像を読み込み
img = loadImage("input.jpeg"); 
//coolorsからとってきたURLをここに貼る
String url = "https://coolors.co/49306b-87bba2-635380-a581a0-d1cbc4";
color[] coolors = new color[5];
color[] cMap = new color[256];

void setup() {
  noLoop();
  //urlをカラーコードに変換
  String[] str = split(url.substring(19), "-");
  for (int i=0; i < str.length; i++) {
    int r = unhex(str[i].substring(0,2));
    int g = unhex(str[i].substring(2,4)); 
    int b = unhex(str[i].substring(4,6)); 
    coolors[i] = color(r, g, b);
  }
  //グラデーションマップを作成
  for(int i=0; i < 256; i++){
    float t = i%64 * 1.0/64;
    int n = floor(i/64);
    float r = (1-t)*red(coolors[n])+t*red(coolors[n+1]);
    float g = (1-t)*green(coolors[n])+t*green(coolors[n+1]);
    float b = (1-t)*blue(coolors[n])+t*blue(coolors[n+1]);
    cMap[i] = color(r, g, b);
  }
}

void draw(){
  img.loadPixels();
  PImage new_img = createImage( img.width, img.height, RGB );
  //グレースケールの濃淡をグラデーションマップに置き換え
  for(int y=0; y < img.height; y++){
    for(int x=0; x < img.width; x++){
      int pos = x + y*img.width;
      color c = img.pixels[pos];
      int n = int(red( c ));
      new_img.pixels[pos] = cMap[n];
    }
  }
  new_img.updatePixels();
  //作成した画像を保存
  boolean blRet;
  blRet = new_img.save("img1_1.jpeg");
  if(blRet == false){
    print("error");
  }
}

```

配色に悩んだ時に色々試してみるとインスピレーションの助けになるかもしれません！
ルベーグ積分入門６　可測関数の性質３

連続関数は可測関数である。このことを証明する前に、位相空間のお話として連続関数を定義する。

#位相空間論　連続な関数
>定義　**連続写像**
X、Yを位相空間とする([位相空間？](https://qiita.com/king_of_theneet/items/113c485dbec0f65d14a7)前説で少し説明を書いた)。それぞれの位相を$\mathcal{O}$,$\mathcal{T}$とする.
$f:X\rightarrow Y$が連続であるとは、任意のYの開集合$O$に対して逆像$f^{-1}(O)$がXの開集合になっている時をいう。
とくに、$f:X\rightarrow \mathbb{R}$がXから$\mathbb{R}$への連続写像を連続関数と呼んでいる。

注:これが連続の定義であるというのはすごく抽象的？に感じるかもしれないが、ちゃんとした整合性のある定義である。詳しくは、解析学か位相空間論の教科書を参照して

例　$f:\mathbb{R}\rightarrow \mathbb{R},f(x)=x$は連続関数である。

#ボレル可測関数
Xを位相空間とする。Xにボレル代数$\mathcal{B}$を定義して(([ボレル代数？](https://qiita.com/king_of_theneet/items/113c485dbec0f65d14a7))、可測空間
X上の関数fがBorel可測関数であるとは、fが$\mathcal{B}$について可測関数のときをいう。

>命題6.1 連続関数はBorel関数である
位相空間X上の連続関数fはBorel可測関数である。

証明
可測関数の定義より任意の実数$a$に対して、$f^{-1}((a,\infty))$がボレル集合なら良い。$(a,\infty)$は開集合なので連続の定義から$f^{-1}((a,\infty))$はXの開集合であり、開集合は定義からボレル集合であるので証明される。
証明おわり
CENTOSでデュアルディスプレイのプライマリ設定（恒久的） メモ

# 環境
- centos7

# 目的
PC再起動後にディスプレイのプライマリ設定を自動で設定したい

# 準備
``` 
xrandr      
 ```
## 実行結果
```
Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 16384 x 16384
DVI-D-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 698mm x 393mm
   1920x1080     60.00*+  59.96    50.00    50.00    59.94    59.93  

   ~~省略~~

   320x180       59.84    59.32  
VGA-1 connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 476mm x 268mm
   1920x1080     60.00*+  59.96    59.93  

   ~~省略~~

   320x180       59.84    59.32  
```

プライマリとして設定したいディスプレイポート(HDMI、VGA等)を確認

# 設定
```
sudo vi /etc/gdm/Init/Default
```

```
#!/bin/sh
# Stolen from the debian kdm setup, aren't I sneaky
# Plus a lot of fun stuff added
#  -George

PATH="/usr/bin:$PATH"
OLD_IFS=$IFS

/usr/bin/xrandr --output HDMI-1 --auto --primary  # ここに設定したいコマンドを記載(今回はHDMIで設定)

gdmwhich () {
  COMMAND="$1"
  OUTPUT=
  IFS=:
   ~~~省略~~~
}
```

# 確認
再起動後、HDMIで接続したディスプレイがプライマリディスプレイとして表示されるか確認

# 上記方法で行った理由
rc.localで実行させる方法を試したが、上手くいかないため
vue + webpack の非nuxt環境でコンポーネントをまるっとrequireする

タイトルのまんまです。 `require.context` を利用して、或るディレクトリ配下にあるコンポーネントファイル(.vue）をまるっとrequireしたい。

エントリーファイル（main.js）に次のように記述します。

```javascript
function requireAll (context) {
  const components = {}
  context.keys().forEach((_path) => {
    const name = _path.split('/')
      .filter((s) => !/^\./.test(s))
      .map((s) => s.charAt(0).toUpperCase() + s.slice(1))
      .join('')
      .replace(/\.vue$/, '')
    components[name] = context(_path).default
  })
  return components
}

const components = requireAll(require.context('./pages', true, /\.vue$/))
```

`components` にはパス名がPascalCaseされた名前をキーにしたコンポーネントが格納されるので、あとは環境にあわせて煮るなり焼くなり好きにしましょう。

```javascript
new Vue({
  el: '#app',
  components
})
```

プロジェクトの都合でnuxtを導入できなかったりする時などに出番があるやもしれません。
もう二度とpipenv shellを忘れないようにするためのshellscript

# はじめに

###*pipenv、使ってますか？*

pipenvはそのプロジェクトのパッケージ管理や仮想環境の構築を簡単に自動で行ってくれるツールです。
pyenvとの連携もしてくれる、かなり便利なやつです。

  
  

####でもこんな経験ありませんか？
> 実行したらエラー起きたからpipで入れたけど仮想環境入ってないだけだったわ...　　

自分はめっちゃやります。

# そこで！
####Pipfileがあるところにcdしたらpipenv shellするshellscriptを書きました

# 作った

```bash:~/.bash_autopipenv
#!/bin/bash

function ispipenv()
{
if [ "$PIPENV_ACTIVE" == 1 ]; then
  :
else
  if [ -e "Pipfile" ]; then
      pipenv shell
  fi
fi
}

function pipenv_cd()
{
  \cd $@ && ispipenv
}

alias cd='pipenv_cd'
```

ポイントは以下の部分。

```bash
if [ "$PIPENV_ACTIVE" == 1 ]; then
   ...
```
仮想環境に入ると、PIPENV_ACTIVEという環境変数が定義されるのを利用しています。
仮想環境に入っていない場合はPIPENV_ACTIVEは定義されないため、エラー回避の意味で"$PIPENV_ACTIVE"で評価しています。
これで仮想環境に入った状態ではpipenv shellが実行されません。  

またpipenv_cd内の\cdをcdとしてしまうと、
pipenv_cd内でpipenv_cdが呼ばれその中でpipenv_cdが呼ばれ・・・となってしまうので注意が必要です。  

##常時読み込ませる
.bash_profileや.bashrcに以下を追記すれば常時読み込みしてくれるので、pipenv shellを実行し忘れることはなくなりました:ok_hand:

```bash
if [ -f ~/.bash_autopipenv ]; then
  . ~/.bash_autopipenv
fi
```

# まとめ
- shellscriptで自分だけのbashを作り上げるの楽しい:innocent:
- つぎはexitを忘れないようにしよう！
初めてのVulkanプログラミング step5 シェーダモジュールの作成

パイプラインにシェーダーを渡すには、シェーダーをVkShaderModuleオブジェクトに入れてして渡します。
CreateShaderModuleを行うクラスを作成します。

```cpp
void Shader::create_shaderModule(const std::vector<char>& code, VkShaderModule *shaderModule )
{
	 

	VkShaderModuleCreateInfo shaderCreateInfo;
	shaderCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
	shaderCreateInfo.pNext = nullptr;
	shaderCreateInfo.flags = 0;
	shaderCreateInfo.codeSize = code.size();
	shaderCreateInfo.pCode = (uint32_t*)code.data();


}
```
CreateShaderModuleで指定された構造体を作成します。１つ問題として、バイトコードを入れる、pCodeはcharポインターではなく、uint32_tタイプです。そのためキャストしてあげる必要があります。

```cpp
	auto err = vkCreateShaderModule(_device, &shaderCreateInfo, nullptr, shaderModule);
	if (VK_SUCCESS != err) {
		assert(0 && "Vulkan ERROR: Create ShaderModule failed!!");
		std::exit(-1);
	}
````

オブジェクト作成のパラメータは、論理デバイス、CreateInfoを格納するポインター、カスタムアロケータのポインター、処理する変数です。
6行HTMLブラックジャック

[上海](https://qiita.com/nagtkk/items/fc1904966d81e9730964)が短くならなかったので気晴らしに。

絵文字版
<p class="codepen" data-height="347" data-theme-id="0" data-default-tab="result" data-user="nagtkk" data-slug-hash="jOOYNQd" style="height: 347px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="jOOYNQd">
  <span>See the Pen <a href="https://codepen.io/nagtkk/pen/jOOYNQd">
  jOOYNQd</a> by nagtkk (<a href="https://codepen.io/nagtkk">@nagtkk</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

テキスト版
<p class="codepen" data-height="227" data-theme-id="0" data-default-tab="result" data-user="nagtkk" data-slug-hash="rNNpBQN" style="height: 227px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="Blackjack6">
  <span>See the Pen <a href="https://codepen.io/nagtkk/pen/rNNpBQN">
  Blackjack6</a> by nagtkk (<a href="https://codepen.io/nagtkk">@nagtkk</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

再ゲームはリロード(右下の Rerun) で。

なんか最近 CodePen 重いなあ。

github.io のほう
https://nagtkk.github.io/shortcoding/bj6-text.html
https://nagtkk.github.io/shortcoding/bj6-emoji.html
OnGUIをSafeArea内に収めつつ、いろんな解像度の端末で程よい大きさで表示する

```csharp:SafeAreaIMGUI.cs
using UnityEngine;

public class SafeAreaIMGUI : MonoBehaviour
{
    [SerializeField]
    private float _longEdge = 1920f;

    [SerializeField]
    private float _shortEdge = 1080f;

    [SerializeField]
    private float _scale = 6;

    private void OnGUI()
    {
        var referenceWidth = Screen.orientation == ScreenOrientation.Landscape ? _longEdge : _shortEdge;
        var referenceHeight = Screen.orientation == ScreenOrientation.Portrait ? _longEdge : _shortEdge;
        var scaleFactor = _scale * Mathf.Min(Screen.width / referenceWidth, Screen.height / referenceHeight);
        BeginScaledSafeArea(scaleFactor);
        {
            _scale = GUILayout.HorizontalSlider(_scale, 6, 30f);
            GUILayout.TextArea($"scale : {_scale}", GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true));
        }
        EndScaledSafeArea();
    }

    private static void BeginScaledSafeArea(float scale)
    {
        if (Mathf.Approximately(scale, 0f)) return;
        var safeArea = Screen.safeArea;
        GUI.matrix = Matrix4x4.TRS(
            new Vector3(safeArea.xMin, Screen.height - safeArea.yMax),
            Quaternion.identity,
            new Vector3(scale, scale, 1f));
        GUILayout.BeginVertical(
            GUILayout.Height(safeArea.height / scale),
            GUILayout.Width(safeArea.width / scale));
    }

    private static void EndScaledSafeArea()
    {
        GUILayout.EndVertical();
    }
}
```

スケール値の計算をいい感じにやれば、 `BeginScaledSafeArea` と `EndScaledSafeArea` で囲むだけでセーフエリア内に好きなスケールでIMGUIを描画できる、かもしれない。

4倍表示
<img width="741" alt="スクリーンショット 2019-11-01 午後9.15.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5973/aeb45bce-848b-3f7e-6713-72784d386aef.png">
<img width="741" alt="スクリーンショット 2019-11-01 午後9.15.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5973/e2fcf780-0ecc-20a2-01ac-5a2d810e8413.png">
15倍表示
<img width="741" alt="スクリーンショット 2019-11-01 午後9.16.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5973/812a62b2-e7ed-eea9-ce31-e8b462ef96fc.png">
<img width="741" alt="スクリーンショット 2019-11-01 午後9.16.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5973/859428aa-50ae-8e28-f2ec-0d1d338261c4.png">
GO言語でmapの値に構造体を使う時はポインタにすると良いらしい

# mapの値に構造体を入れたらエラーが・・・
先日、職場でこんな感じのコードを書いたらエラー。（コードはサンプルです）

```go:umaimono.go
package main
import "fmt"

type Food struct {
  ID          int
  Name        string
  Description string
}

func main(){
  fmt.Println(MakeResult()["うまいもの"])
}

func MakeResult() map[string]Food {
  result := make(map[string]Food)
  result["うまいもの"] = Food{
    ID: 1,
    Name: "焼肉",
  }
  result["うまいもの"].Description = "すこぶるうまい"

  return result
}

```
これを実行すると `cannot assign to struct field result["うまいもの"].Description in map` というエラー。なんでや〜。


# ポインタ型にしたら解決
色々とググった結果、構造体をポインタ型にしたら解決した。
理屈は一旦置いておいて、これでうまくいく。

```go:umaimono.go
package main
import "fmt"

type Food struct {
  ID          int
  Name        string
  Description string
}

func main(){
  fmt.Println(*MakeResult()["うまいもの"])
}

func MakeResult() map[string]*Food {
  result := make(map[string]*Food)
  result["うまいもの"] = &Food{
    ID: 1,
    Name: "焼肉",
  }
  result["うまいもの"].Description = "すこぶるうまい"

  return result
}
```
結果：`{1 焼肉 すこぶるうまい}`

無事に説明が追加された。

# どうしてもポインタ型で返したくない場合は？
他の機能との兼ね合いで、どうしてもポインタ型で返したくないという場合もあるかもしれない。
そんな時は、こう。（自分が思いついたのではなく、先輩がこうしていた）

```go:umaimono.go
package main
import "fmt"

type Food struct {
  ID          int
  Name        string
  Description string
}

func main(){
  fmt.Println(MakeResult()["うまいもの"])
}

func MakeResult() map[string]Food {
  pointerResult := make(map[string]*Food)
  pointerResult["うまいもの"] = &Food{
    ID: 1,
    Name: "焼肉",
  }
  pointerResult["うまいもの"].Description = "すこぶるうまい"

  result := make(map[string]Food)
  for k, v := range pointerResult{
    result[k] = *v
  }
  return result
}
```
なるほどなあ。

#最後に

無事、焼肉はうまいという結果を返す関数が実装できましたね。うれしいです。

ちなみに今回がQiita初投稿なので、どういう口調で書けば良いのかなどが色々と分からない感じでしたが、最後まで読んでくださってありがとうございます。
picoCTF 2019 First Grep: Part II - Points: 200

#問題

https://2019game.picoctf.com/problems

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/62aa6056-6285-ed4e-7f00-b6bd56538d33.png)

#解いてみた

フォルダ内でgrepする問題でしょうか。
shellで中身を見てみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/2aa9b59f-488e-8f1c-168e-75b99b92ad9e.png)

フォルダがたくさんあります。
試しにフォルダの中身を見てみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/6567bd92-245a-72e9-5c95-4f5f6751eda1.png)

30個くらいあります。
まぁ「picoCTF」でgrepすればよいですかね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17681/366d288d-3ae1-e7af-4ee7-9abb1452b640.png)

できました。
バッチファイルにC#コードを埋め込み実行する

バッチファイル内でpowershell経由でC#コードを実行する記事は既にいくつか存在しますが、1ファイル内でバッチファイル部とC#コード部が綺麗に分かれているものが見つからなかったので、より可読性とメンテナンス性向上を目指しつつ作成してみました。

#コード
```RunCSCode.bat
@echo off
setlocal
set BAT_PATH=%~f0
powershell -NoProfile -Command "& {$cscode=[regex]::Split([IO.File]::ReadAllText($env:BAT_PATH,[Text.Encoding]::UTF8),':EndBatch')[2]; Add-Type -TypeDefinition $cscode -Language CSharpVersion3; [CSBatch.Program]::Main($Args);}" %*
endlocal
exit /b

:EndBatch

//CSCode
using System;
using System.Runtime.InteropServices;

namespace CSBatch
{
    public class Program
    {
        [DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)]
        private static extern int MessageBox(IntPtr hWnd, string text, string caption, int options);

        public static int Main(string[] args)
        {
            string msg = "";
            for( int i=0; i<args.Length; i++)
            {
                msg += String.Format("args[{0}]={1}\r\n", i, args[i]);
            }
            if( msg=="" )
            {
                msg = "no args.";
            }

            int MB_OK = 0;
            MessageBox(IntPtr.Zero, msg, "CSTestCode", MB_OK);
            return args.Length;
        }
    }
}
```

#実行結果
```
>RunCSCode.bat あああ いいい ううう
3
```
![実行結果](https://i.imgur.com/aueW4O4.png "実行結果")

#動作原理
1.通常のバッチファイルとして起動
2.環境変数にバッチファイル自身のパスを格納（直接powershellコマンドに埋め込んでもいいかも）
3.(powershellコマンド) バッチファイル自身をFile.ReadAllTextでutf-8 stringデータとして読み込む
4.(powershellコマンド) Regex.Splitを使用して上記stringデータを:EndBatchラベルで分割し、C#コード部を分離
5.(powershellコマンド) 分離したC#コード部をAdd-Typeで型追加し、C#のメソッドを実行
6. powershellでのC#メソッド実行終了後、exit /b でバッチファイル終了。
 （これにより、以降のC#コード部の影響を受けなくなる）

注意）バッチファイル読み込み時にutf-8エンコーディングを指定していますが、BOM無しutf-8でバッチファイルを保存しないと、実行時にゴミが付きます。

MessageBox.Show じゃなくて WinAPI の MessageBox 使っているのは、WinAPIも呼び出せますよっていうのを見せたかっただけです。まあC#なので出来て当たり前ですが…
なんか色々面白い事（危ない事ともいう）出来そうですね。

#参考記事
[バッチファイルにC#コードを書く](https://qiita.com/cat2151/items/0f60bb6ab0ca811346d1)
バッチファイルからps1ファイルに記述したC#コードを呼び出して満足した後にこの記事を見て、目から鱗が落ちました。
C# イベントハンドラ登録の書きかた変遷

いまさらだけども。

## 書き方#1

以前はこんな感じで書いていた（気がする）。

```csharp:イベントハンドラの追加処理

class クラス
{
    メソッド
    {
        ：
        button1.Click += new EventHandler(button1_Click);
        ：
    }
}
```

```csharp:イベントハンドラのメソッド記載

void button1_Click(object sender, EventArgs e)
{
    ：
}
```

## 書き方#2

`new EventHandler`は省略できて、下記のように書ける。

```csharp:イベントハンドラの追加処理

class クラス
{
    メソッド
    {
        ：
        button1.Click += button1_Click;
        ：
    }
}
```

```csharp:イベントハンドラのメソッド記載

void button1_Click(object sender, EventArgs e)
{
    ：
}
```

## 書き方#3

ラムダ式で匿名メソッドとして書ける。かなり短くなった。
「処理内容」は、1行で書けないならメソッド化したほうが見やすい気がする。

```csharp:イベントハンドラの追加処理

class クラス
{
    メソッド
    {
        ：
        button1.Click += (sender,e)=>{ 処理内容 };
        ：
    }
}
```

# 使いわけ

`EventArgs`（もしくはその派生クラス）の引数を使いたいときは書き方#2を使いたくなるところ。
同じ`.cs`ファイル内では、書き方#2か書き方#3で統一したい。


# 参考サイト

https://www.ipentec.com/document/csharp-add-event-handler-by-code
https://tnakamura.hatenablog.com/entry/20090309/1236549534