OmniAICreator/Qiita-1.07M huggingface dataset:
Windows 10 で使っていきたいキーボードショートカットたくさん

# 前提

OSビルド情報：Windows10 Pro Version 10.0.18362.387
Windowsキーは**Win**と記載します

# 基本編

## スタートメニューを表示する

Win

## アプリケーションやウィンドウを切り替える

Alt + Tab

## 右クリックの代わり

Shift + F10

## クリップボードの履歴を表示する

Win + V

## エクスプローラーを開いている状態で、アイコンの表示形式を変更する

Ctrl + Shift + 1 ～ 8

ちなみに6が好き (隙自語)

## エクスプローラーを開いている状態で、前のフォルダに戻る

Alt + ←

## エクスプローラーを開いている状態で、戻る前のフォルダに進む

Alt + →

## エクスプローラーを開いている状態で、親フォルダに移動する

Alt + ↑

## エクスプローラーを開いている状態で、新しいフォルダを作成する

Ctrl + Shift + N

## ファイルやフォルダを選択した状態で、名前を変更する

F2

## 離れている要素を複数選択する

Ctrl + 上下左右キーで移動しながら、Ctrl + Space を押して選択、また移動して選択を繰り返す (Ctrl キーはずっと押したまま)

## ウィンドウを閉じる

Alt + F4

## ファイルやフォルダを選択した状態で、そのプロパティを表示する

Alt + Enter

## ファイルやフォルダを選択した状態で、そのファイルやフォルダをゴミ箱に移動せず完全に削除する

Shift + Delete

## タスクマネージャを表示する

Ctrl + Shift + Esc

# デスクトップ関連

## 全てのウィンドウを隠してデスクトップ画面だけ表示する

Win + D

元の状態に戻したいときは再度Win + D を押すことで元に戻せる

見られたくないような画面を瞬時に隠すことができる

## Windows をロックする

Win + L

## ウィンドウを全て最小化する

Win + M

ただし応答待ちになっているようなものは最小化できない

元に戻す場合はWin + Shift + M を押す

## ウィンドウを透明化

Win + ,

## ウィンドウを最小化する

Win + ↓

## ウインドウを最大化する

Win + ↑

## ウィンドウを左半分に寄せる

Win + ←

## ウィンドウを右半分に寄せる

Win + →

## 現在ウィンドウ以外は最小化

Win + Home

## タスクビューを表示する

Win + Tab

## 仮想デスクトップを追加する

Win + Ctrl + D

## 仮想デスクトップを切り替える

Win + Ctrl + ← / →

## 仮想デスクトップを閉じる

Win + Ctrl + F4

# タスクバー関連

## クイックリンクメニューを表示する

Win + X

## タスクバーアイコンN番目のジャンプリストを表示する

Win + Alt + N

# 起動関連

## アクションセンターを表示する

Win + A

## エクスプローラーを表示する

Win + E

## 設定画面を表示する

Win + I (アイ)

## 接続画面を表示する

Win + K

## ファイル名を指定して実行を表示する

Win + R

## Cortana ちゃんを呼び出す

Win + S

## システムプロパティを開く

Win + Pause

# キーボード関連

## 絵文字パネルを開く

Win + .

# 特殊なもの

## ディスプレイドライバのリセット

Win + Ctrl + Shift + B

## 指定した範囲のスクリーンショットを取得する

Win + Shift + S
スピーカーを作る-01　調査編

# はじめに
今回からスピーカーの自作をしていきます。
理由としては、比較的簡易な電子工作であり、筐体加工について学習するためです。

なので、スピーカーユニットは自作しません。
スピーカーの仕組みや、エンクロージャーの加工から筐体加工を学習します。
あくまで電子工作の学習なので素材や形状にはあまりこだわらない予定です。

この記事では個人的に参考になったサイトを列挙していきます。
一部、アンプICについても調べたので、その辺りの情報も少しあります。

# 参考サイト
(16) 音楽再生回路でコンデンサのありがたさを知る – 電子工作やってみる！
https://www.dogrow.net/elecronics/blog16/
圧電スピーカーで電子回路的な説明がされています。
基本ですが大事な内容ですね。

【武蔵野電波のプロトタイパーズ】第11回「スタバのカップでアンプ内蔵スピーカーを作ってみよう」 - PC Watch
https://pc.watch.impress.co.jp/docs/column/musashino_proto/310499.html
イメージとしてはこんな感じ。
小型で取り回しがよく、ゆくゆくは小型アンプを内蔵してミニパワードスピーカーとして使えるようなイメージです。

実は簡単！？自作スピーカーのきほんの「き」 | 虹クルーのブログ
https://nijicrew.net/2018/09/09/selfmade-speaker/
読みやすいのに内容が充実している素敵なページ。
スピーカーユニットの規格について説明してあるので、スピーカーユニット選定時にカタログの読み方を知りたい場合は目を通してみるといいかも。
説明も簡潔ながらわかりやすい。

自作スピーカーのエンクロージャーを設計しよう | 虹クルーのブログ
https://nijicrew.net/2018/10/12/enclode/
上記サイトの続きで、エンクロージャーについての記事。

かんすぴ | 気軽にスピーカークラフト体験！コンパクトDIYスピーカー | FOSTEX(フォステクス)
https://www.fostex.jp/kanspi/
上記の虹クルー氏が紹介していたFOSTEXの自作スピーカーキット。
心くすぐられたので使う予定はないがメモ。

コイズミ無線 ～秋葉原のスピーカー＆パーツ専門店～
http://www.koizumi-musen.com/index.php
これも虹クルー氏が紹介していた、秋葉原のスピーカー系専門店。
とりあえずここに行って小型のスピーカーユニットを探してみる予定です。

スピーカー自作に手を出してみた件 | ツクルヒト
https://tukuru-hito.com/2017/07/09/post-338/
こちらはざっくり書いてある記事ですが、ポイントはスピーカーユニット。
コスパ最強といわれている「P-06275」について書いてあります。

たった300円で売られている秋月スピーカー『F77G98-6』が凄いらしい!? - NAVER まとめ
https://matome.naver.jp/odai/2147407522991477101
「P-06275」で検索したら引っかかったのがこちらのまとめ。
「F77G98-6」の方が通称なのか？
よくわからないが、ここでも変わらず絶賛されているのでかなり期待できそう。
サイズが77mmなので、今回の工作ではちょっと大きいから使わないかもしれない。

# アンプについて
『スピーカー　電子工作』とかで検索すると、けっこうアンプがメインの記事が多い。
とりあえず今回は後回しにするが、今後必要となりそうなのでメモしておく。

デジットBlog:【アンプまみれ】定番オーディオアンプIC各種のご紹介！
http://blog.digit-parts.com/archives/51556224.html
こちらはオーディオアンプICの紹介ページ。

386アンプをちょっと真剣に作ってみた: 電子工作あれこれ
http://hpabegin.cocolog-nifty.com/blog/2012/02/386-1413.html
昔からの定番ICらしい386についての記事。

# どういうスピーカーを作るのか？
現時点でのイメージはこんな感じ。
・小型（スピーカーユニット5cm以下）
・安価
・パッシブスピーカー
・エンクロージャー素材は百均等で調達

とりあえず、コイズミ無線さんに行ってきます。
Python３　使用した関数メモ

#Python３　使用した関数

##小文字を大文字に変換する関数

```python01.py
s = input()
print("s.upper()")
```

##printで改行しない関数

```python02.py
print("hello" , end = "")
print("world)
```


##入力input()を並列で記法

```python03.py
x , y = input().split()
```

##特定の文字列を置換
str型で「AA」→「BB」

```python04.py
print(s.replace('AA', 'BB'))
```

##行列

行列式
必要なライブラリ一覧

```python05.py
import scipy.linalg as linalg
from scipy.optimize import minimize_scalar
import numpy as np
```

行列式

```python06.py
a = linalg.det(mat)
print("行列式 : " + a)
```

逆行列

```python07.py
b = linalg.inv(mat)
print("逆行列 : " + b)
```

固有値と固有ベクトル

```python0.py
c , d = linalg.eig(mat)


print("固有値")
print("固有値 : " + c)

print("固有ベクトル")
print("固有ベクトル : " + d)
```


数値の切り捨て

```
import math

total = 5
n = 2
print(math.floor(total / n))
# 結果 
2

```
PySparkでArrayTypeの中身を一個づつcolumnにする

# どういう時に使うの？
主にPysparkにおいてArrayTypeを保持しているDataFrameをcsvに出力したいときに使うと思います。

# イメージ

### input

|ID|array|
|:-:|:-:|
|a|[1, 2, 3]|
|b|[4, 5, 6]|

上記のようなDataFrameを

### output
| ID | num1 | num2 | num3 |
|:-:|:-:|:-:|:-:|
| a | 1 | 2 | 3 |
| b | 4 | 5 | 6 |

こんな感じにArrayの中身を分解するイメージです。

# サンプルコード
```python:sample.py
import pyspark.sql.functions as F

hoge = ''
top_N = 10 
# Arrayの中身を左から何個取るか。 1 ≦ top_N ≦ len(array)

for i in range(top_N):
    exec(f'top{i + 1} = F.udf(lambda x : x[{i}])')
    hoge += f'.withColumn("num{i + 1}", top{i + 1}("array"))'
exec(f'df2 = df1{hoge}.drop("array")')
```


udfでarrayのN番目を取ってきてwithColumnで列を作るだけなのですが、
列の分だけudfの関数を定義し、withColumnを書かなければならなかったのを、execを用いることで自動化しています。

top_Nを変えることで、arrayの中身を左から5個取ってきてTOP5だけ、みたいなことも出来ます。
ios開発、addTargetメソッドを調べてみた

### addTargetの引数

| target | アクションメソッドが呼ばれるオブジェクトを指定。 |
|:--|:--|
| action | 呼ばれるメソッドを記述 |
| controlEvents | UIControlEventsの定数を記述 |

controlEventsに入るUIControlEventsには以下がある

| touchDown | コントロール内でのタッチダウン |
|:--|:--|
| touchDownRepeat | 複数回のタッチダウンイベント |
| touchDragInside | コントロール内で指がドラッグされた |
| touchDragOutside | コントロール外で指がドラッグされた |
| touchDragEnter | コントロール内へ指がドラッグされた |
| touchDragExit | コントロール内から外へドラッグされた |
| touchUpInside | コントロール内でタッチアップされた |
| touchUpOutside | コントロール外でタッチアップされた |
| touchCancel | 不明 |
| valueChanged | 値の変化 |
| primaryActionTriggered | タッチアップと同じ？ |
| editingDidBegin | TextFieldでの編集開始 |
| editingChanged | TextField内の文字変化や入力 |
| editingDidEnd | 画面外タップでのTextFieldの編集終了 |
| editingDidEndOnExit | リターンキーによるTextFieldの編集終了 |
| allTouchEvents | すべてのタッチイベント |
| allEditingEvents | TextFieldに関するイベント |
| applicationReserved | 予備だと思う |
| systemReserved | 予備だと思う |
| allEvents | 全てのイベント |

## 参考
https://pg-happy.jp/swift-addtarget.html#toc_id_1
AWS Auto Scalingを使ってみた

やっと秋らしい天気になってきました!
読書の秋、スポーツの秋といいますが私は断然食欲の秋です:apple:
今年は、美味しいものたくさん食べる計画を立てているrisakoです。
今回はAutoScalingとはなんぞやというところから、使い方について簡単に紹介します。

#AWS Auto Scalingってなに？

AWSの説明によると、AWS Auto Scalingとはこのようなものらしいです。
>AWS Auto Scaling は、安定した予測可能なパフォーマンスを可能な限り低コストで維持するためにアプリケーションをモニタリングし、容量を自動で調整します。AWS Auto Scaling を使用すると、複数のサービスにまたがる複数のリソースのためのアプリケーションスケーリングを数分で簡単に設定できます。

まとめると、指定した容量に達した場合にEC2を自動で増やしたり減らしたりしてくれる機能です。

##仕組み

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/b3791842-f171-e0dc-d02e-f1be553a4f9d.png)

>参照: https://aws.amazon.com/jp/autoscaling/

##AWS Auto Scalingを使うメリット

- 耐障害性の向上
→EC2インスタンスの異常を検出して停止し、自動で新しいインスタンスを作成してくれるので耐障害性に強いと言えます。
- 可用性の向上
→複数のAZ(Availability Zone)で設定した場合、一つのAZが使用不可になっても違うAZで新しいインスタンスを作成してくれます。
- コスト効率の向上
→指定した数のEC2インスタンスを自動で必要な分だけ作成してくれるので、無駄なEC2を作成しなくていいという点でコスト効率の向上と言えます。通常よりも多いアクセスにも指定した最大数のインスタンスを作成できるため、必要な時に必要な分だけインスタンスを動かせます。

#作ってみよう

##Auto Scalingグループの起動が使用するパラメータの作成

今回は、`起動設定`での、作成方法について紹介します。

EC2コンソールから作成可能します。

1. 起動設定作成を選択。
2. 今回は、自分のEC2から作成するため、`マイAMI`で自分のEC2を選択する。
3. 利用するインスタンスサイズを選択。
4. インスタンスの名前・IAMロールの有無（今回は無し）・cloudwatchのモニタリングの有無を入力。
5. ストレージの追加・セキュリティグループの設定を行う
6. 作成

![スクリーンショット 2019-09-04 18.48.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/d97ecad9-ed04-518c-e519-650067d38cbd.png)



印象としては、EC2インスタンスを作成する手順とほぼ変わらなかったです:clap_tone2:


##Auto Scaling グループの作成

1. 上記と同様にEC2コンソール内から作成する。
2. Auto Scalingグループの作成を選択
3. 先ほど作成した`起動設定`の名前を選択する。
4. AutoScalingグループの作成の各設定を入力する。
5. グループのサイズ:起動したいインスタンスの数を設定する。
6. ネットワーク；使用したいVPC
7. サブネット：インスタンスを起動させるAZを選択
8. `高度な詳細` の通知の送信では、でAuto Scalingが`起動・終了・起動失敗・終了失敗`した時に指定したメールアドレスに通知を飛ばしてくれるので、何かあった時に気づくことができる。

![スクリーンショット 2019-09-04 15.53.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/81cdfe6c-1e6c-f041-1b7f-349470ae7d21.png)

##EC2コンソールから確認する

`autoscaling`の名前でインスタンスが立ち上がっていることが確認できます。
希望するキャバシティの数のインスタンスが立ち上がっていればokです。


![スクリーンショット 2019-09-04 16.51.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/3d70700f-539d-8cf7-86fa-a1b6ce9cd470.png)
(https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/9467ac6c-b7a2-f974-c6cc-0c76a6f47220.png)


インスタンスが立ち上がったのと同時にメールでの通知が来ました。

<img width="982" alt="スクリーンショット 2019-09-04 15.55.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/1a31534c-2ca7-ede9-373e-6a13433cb62e.png">



不具合が生じたときだけ通知を飛ばしてほしいなど通知をカスタマイズできるのもステキです:sparkles:


#AutoScalingを使ってみた感想

簡単にEC2インスタンスを増減できることに驚きました。
AWSサービスをしっかり使うようになってから約３ヶ月ですが必要な時に必要な分だけEC2インスタンスを立てることができるのはお客様の要望にも幅広く対応していけそうだと感じました。
この機能はECS（EC2 Container Service）でも使われているので、ECSと共にマスターして行きたいです！



##参考

Amazon EC2 AutoScaling ドキュメント　https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html

AWS Auto Scaling
https://aws.amazon.com/jp/autoscaling/

[AWS]Auto Scalingする前に知っておくべき7つのこと
https://miyabi-lab.space/blog/30
express mongoDB app




## 記事

https://dev.to/beznet/build-a-rest-api-with-node-express-mongodb-4ho4

# packege

- dotenv

node.jsの環境変数設定packege

https://www.npmjs.com/package/dotenv


- https://nodemon.io/

reatrtを勝手にしてくれるみたい

https://nodemon.io/
importで別ファイルの変数を取得

#目的
別のファイル（A）で定義している変数を別のファイル（B）で使えるようにする。
BでimportしたAの変数を利用する。

#構成
-A.py
-B.py

#やり方

```python:A.py
size = 50
name = "hoge"
rate = 0.3
```
この変数をimport先で使う

```python:B.py
import A

print(A.size)
print(A.name)
print(A.rate)
```

結果
`$ python B.py`

```
50
hoge
0.3
```
#Ruby 2.5 では 1行のBodyだけのCSV ファイルで headers が取得できないっぽい？ ( Ruby 2.6 では可能 )

# Unable to headers with only one line no body CSV file in Ruby 2.5

# Ruby 2.5

```rb
require 'csv'

CSV.parse("A,B,C", headers: true).headers
# => []

CSV.parse("A,B,C\nX,Y,Z", headers: true).headers
# => ["A", "B", "C"]

CSV.parse("A,B,C", headers: true).to_s
# => "\n"
```

以下で動作確認。

- `ruby 2.5.2p104 (2018-10-18 revision 65133) [x86_64-darwin18]`
- `ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-darwin18]`
- `ruby 2.5.6p201 (2019-08-28 revision 67796) [x86_64-linux]` (docker+mac)

# Ruby 2.6

```rb
require 'csv'

CSV.parse("A,B,C", headers: true).headers
# => ["A", "B", "C"]

CSV.parse("A,B,C\nX,Y,Z", headers: true).headers
# => ["A", "B", "C"]

CSV.parse("A,B,C", headers: true).to_s
# => "A,B,C\n"
```

以下で動作確認。

- `ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-darwin18]`
- `ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18]`
- `ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]`
- `ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]` (docker+Mac)

# Docs

どこに違いがあるのだろう？

https://ruby-doc.org/stdlib-2.5.3/libdoc/csv/rdoc/CSV.html#method-i-headers
https://ruby-doc.org/stdlib-2.6.1/libdoc/csv/rdoc/CSV.html#method-i-headers

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2534








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
MicroK8sを外部のクライアントからkubectlで接続する

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

# 0. はじめに
MicroK8s 便利です。何が便利かというと、Kubernetesのインストールが簡単、だけじゃなくて
Kubernetesのバージョンを気軽に変更したり、Kubernetes環境をリセットしてやり直したり、
いつのまにかjaegerとか、istioがコマンド1つで動かせるようになっていたり
と便利さ満点です。

ローカルのコンソールで使うというのが基本ですが、MicroK8sがインストールされているホストに対して
外部のクライアントからも当然接続できる(kubectlで利用したりも可)ので、お手軽に試す環境として利用できます。

MicroK8s自体がsnapで動くというのはまあ非常に微妙なところではありますが、ローカルループバックマウントは見ないでくださいというところがポイントです(苦笑)

# 1. MicroK8sのホストにkubectlで接続する構成

さて、本題です。
図にするほどでもないですが、以下のような構成になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/c95d1ed9-0265-6862-07ae-e5b5c04535d0.png)

リモート側にはkubectlコマンドを入れておいてください。

# 2. configをmicrok8s.configで出力する

MicroK8sがインストールされているローカルからのkubectlは認証なんて何それ？必要なの？ぐらいの勢いですが、外から接続する場合にはそうはいかないので.kube/configに書き込む設定をローカル側で出力します。

microk8s.configコマンドで設定が出力されますのでリダイレクトしてファイルに保存しましょう。

```sh
$ microk8s.config | tee microk8s-kube-config
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
    server: https://xx.xx.xx.xx:16443
  name: microk8s-cluster
contexts:
- context:
    cluster: microk8s-cluster
    user: admin
  name: microk8s
current-context: microk8s
kind: Config
preferences: {}
users:
- name: admin
  user:
    username: admin
    password: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

# 3. 2で作成したmicrok8s-kube-configファイルをリモート側に設定

microk8s-kube-configファイルをリモート側のkubectlを動かすホスト側にコピーして、既存のconfigファイルとマージしましょう。contextを設定してもいいですし、KUBECONFIGでファイルを指定してもOKです。

```sh
$ kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
ubuntu   Ready    <none>   15d   v1.14.6
```
【リリース】Nextcloud のバージョン 16.0.5、15.0.12 がリリースされました

2019年9月26日に Nextcloud の最新バージョンとして、16.0.5、15.0.12 がリリースされました。

半分以上が出荷されたライブラリの更新であり、非常にマイナーなものとなっております。その他、さまざまな小さな問題が修正されております。

Nextcloud のマイナーリリースは、ユーザデータを危険にさらす主要なシステムの書き換えではなく、セキュリティと機能のバグフィックスとなっております。また、コード・ベースのテストと、実際のシステムをアップグレードするテストの両方を行います。これにより、マイナーリリースへのアップグレードが簡単で信頼性の高いものになります。このアップデートでは、機能の問題だけでなくセキュリティの問題も修正されるため、アップグレードが強く勧められます。

### 【重要!】
**Nextcloud 14系以前のバージョンはサポート終了となっており、今後はアップデートが提供されません。16系もしくは15系へのアップグレードの検討／適用を強くお勧めします。**

### 主な改善点

* 監査ログにメール共有が含まれるようになりました。
* 隠し SMB 共有 ($で終わるもの) を設定できるようになりました。
* 色のコントラストの修正。
* 新しいテキストアプリとの混乱を避けるため、現在のテキストエディタを `Plain Text Editor` に名称変更。

**★この記事は、[スタイルズ社のNextcloudサイト](https://nextcloud.stylez.co.jp/) の [Nextcloudブログ](https://nextcloud.stylez.co.jp/nextcloudblog)にも公開しております！**
windows10でdockerを開発する環境を用意するまで

# 条件
OS：Windows 10 Pro
# Hyper-V 有効化
Windowsキー + R を押して、**appwiz.cpl** と入力しOKを押す
![2019-09-29 15_41_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136348/7694b2c0-3639-c4e2-5471-972a97d61444.png)
**Windows の機能の有効化または無効化** をクリック
![2019-09-29 15_29_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136348/b61f6a0c-6411-4b48-7d24-84b3e9d344aa.png)
**Hyper-V** にチェックを入れ、OKをクリックする
![2019-09-29 15_43_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136348/84ef4664-af44-c147-5620-6665b83a85bb.png)
**今すぐ再起動** をクリック
![2019-09-29 15_47_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136348/a2d74304-607c-d2d6-a59a-16dcd8ed136f.png)
# Docker のインストール
[Docker Hub](https://hub.docker.com/?overlay=onboarding) にログイン (Docker Hub のアカウントが必要)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136348/67caa710-d720-18d4-7b44-4f593db03448.png)
**Get started with Docker Desktop** をクリックする
![2019-09-29 16_04_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136348/89c5afd9-187a-f55a-ac14-d9e248f3cda3.png)
**Download Docker Desktop for Windows** をクリックする
exeファイルを実行し、指示に従いDocker をインストールする
指示に従い、いったんログアウトする
![2019-09-29 19_08_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136348/f6a6b721-8a30-61ba-baec-358ea6352baa.png)
デスクトップにあるDocker Desktop を実行する
コマンドプロンプトを開き、**docker version** を実行する
![2019-09-29 19_29_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136348/e98f17b2-5611-e6b6-6bbb-4c6f6ae368aa.png)
# hello world の実行
**docker run hello-world** が問題なく実行できればOK
![2019-09-29 19_33_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136348/b0555dc5-4d42-d57e-50aa-e69db065ac3e.png)
MacでのPostgreSQLコマンド備忘録

## homebrewでインストール

```sh
$ brew install postgres
```


## 起動

```sh
$ postgres -D /usr/local/var/postgres
```

## スーパーユーザーの作成

```sh
$ createuser -s -P <user_name>
```

## ユーザーの削除

```sh
$ dropuser <user_name>
```

## ログイン

```sh
$ psql -U <user_name> <db_name>
```

## DBの作成

`sample` DBを作成。postgresqlが起動している状態で。

```sh
$ createdb sample
```

## DBの削除

```sh
$ dropdb <db_name>
```

### shopというDBを作成してログイン

```sh
$ createdb shop
$ psql -U <user_name> -d shop
```
ATOM(基本編)

コード書いていくならATOMって事で・・・・
https://pg-happy.jp/atom-texteditor.html
を参考に日本語化して準備する。

そして最初に教えてもらったshortcut一覧です。

| 操作 | キー |
|:-----------|------------:|
| タブを開いたり閉じたりできる      | ctrl＋ｋ＋ｂ        | 
| プレビューが見れる   | ctrl＋shift＋m      | 
| インデント      | tab        | 
| 戻す         | shift＋tab          | 
| 要素移動      | ctrl ＋矢印      | 
| コメントアウト    | ctrl ＋/     | 
| 選択    | ctrl ＋ L     | 
| 設定画面    | ctrl　+ -     | 
| タブを閉じる    | ctrl + W     | 

設定も幾つか変えてみました。
htmlと入力するだけでHPの基本タグセットが一括で呼び出されたり、時短になりかなり便利だと感じてますし、ぐちゃぐちゃになっていたら編集→自動インデントでキレイにしてくれたりと。。

他にもかなり良さげな設定があるらしく、詳しくは「　[atom　おすすめパッケージ](https://www.google.com/search?q=atom+%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8&oq=atom+%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8&aqs=chrome..69i57j0.679j0j7&sourceid=chrome&ie=UTF-8)　」で検索してみれくれとの事です。

しかし現在は・・・・
JAVAならvimでC#ならVisualStudio2017でJavaScriptやJSPサーブレットならeclipseを使ってるのでほぼ出番はないですね。。。
【Laravel】publicディレクトリの中にサブディレクトリを作成したら「Access forbidden」が出た

publicディレクトリの中にサブディレクトリを作成したらAccess forbidden(403エラー)が出た。
気づかずにしばらくハマったのでメモ。

ディレクトリ構成

```
/
  resources/
    public/
       foo/
         css/
    views/
       foo/
         index.blade.php
```

```php:routes/web.php
Route::get('/foo', 'FooController@index');
```

publicディレクトリの.htaccessを確認したら下記の記述があった。

```:public/.htaccess
    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
```

LaravelはURLにアクセスした場合フロントコントローラーで処理されているが、
`RewriteCond %{REQUEST_FILENAME} !-d`の記述によって既存のディレクトリは除外されているよう。

publicディレクトリの既存のディレクトリに直接アクセスしていたため Access fobidden がでていたと思われる。

## 解決策

### 1.`RewriteCond %{REQUEST_FILENAME} !-d`をコメントアウトする

```:public/.htaccess
    # Handle Front Controller...
    # RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
```

でもLaravelの他の機能に影響が出そうでちょっと怖い。


### 2.Routeのurlを変更する 

```php:routes/web.php
Route::get('/foo/index', 'FooController@index');
```

無難な気がする。
CircleCI + fastlane で Firebase App Distribution に ipa をアップロードする 

## Firebase App Distribution とは

公開前のAndroid/iOSアプリを配布できるサービスです。
https://firebase.google.com/products/app-distribution?hl=ja

## config.yml

CircleCI 上で firebase CLI を使用するため、`firebase-tools` をインストールしましょう。

```
  fad:
    steps:
      ...
      （いろいろ設定）
      ...
      - run:
          name: Install Firebase Tools
          command: npm install firebase-tools
      - run:
          name: Deploy IPA file to Firebase App Distribution
          command: |
            bundle exec fastlane ios fad
```

## Fastfile

Fastlane に `firebase_app_distribution` という action が用意されているのでそれを使います。

[Distribute iOS apps to testers using fastlane  \|  Firebase](https://firebase.google.com/docs/app-distribution/ios/distribute-fastlane)

```
  desc "Push a new develop build to Firebase App Distribution"
  lane :fad do
    ...
    （ここでipaを作る）
    ...
    firebase_app_distribution(
      app: "1:123456789:ios:abcd1234",
      testers: "tester1@company.com, tester2@company.com",
      release_notes: "Lots of amazing new features to test out!",
      firebase_cli_path: "./node_modules/.bin/firebase"
    )
  end
```

これで継続的に Firebase App Distribution に ipa をアップロードできるようになりました！

## リンク

- [App Distribution \| Distribute pre\-release versions of your app to your trusted testers](https://firebase.google.com/products/app-distribution?hl=ja)
- [デプロイの構成\-CircleCI](https://circleci.com/docs/2.0/deployment-integrations/#firebase)
- [Firebase CLI を使用してテスターに iOS アプリを配布する  \|  Firebase](https://firebase.google.com/docs/app-distribution/ios/distribute-cli)
Linuxでプロンプトの色を変更する方法（個人メモ）

# プロンプトの色を変更する

- いろんな環境のターミナルを開いてる場合（それが良くないっていう指摘もありそうだけど），違う環境を操作しないようにターミナルに色を付けたい．
- 以下を ~/.bashrc に記載する（CentOSの場合で，他のOSは不明）．

```
PS1_COLOR_BEGIN="\[\e[1;36m\]"
PS1_COLOR_END="\[\e[m\]"
export PS1="${PS1_COLOR_BEGIN}[\u@\h \W]\\$ ${PS1_COLOR_END}"
```

- 簡単に言うと，ここから　xxx色です，という指定を入れる，という記述．実際にコマンドを入力する際は白にしたかったので，ENDを入れている．
- どういう指定が可能かは未確認．
即時関数 使用例 (Go言語で)

# はじめに
入門書で言語の基礎を学んでいる時に即時関数ってどんな時に使うのかピンと来なかったのですが、インターンで使う機会があったので残しておこうと思います。
実際はJavaScriptを書いている時に使ったのですが、慣れる為にGo言語で書き換えました。

# 変数の初期値を引数によって変える
変数を作って、``if,switch``等で分岐して作られている変数に代入は面倒だなぁ～って時に使いました。

```main.go
package main

import "fmt"

func main() {
	country := "日本"
	greeting := (func(country string) string {
		switch country {
		case "日本":
			return "こんにちは"
		case "アメリカ":
			return "Hello"
		default:
			return "xxxxx"
		}
	})(country)

	fmt.Println(country)    // 日本
	fmt.Println(greeting)   // こんにちは
}

```

# おわりに
変数の初期値を引数によって変えようって時の書き方ってこれ良いのでしょうか？即時関数を使っていい場面なのか？
初心者すぎる疑問ばかりです。もっとコードを書いていき最適を考えられるようになりたいです。
Androidの各webブラウザアプリの挙動調査

androidのwebブラウザアプリからリンクタッチで自アプリを起動するときに、各webブラウザアプリがintentにどのようなフラグを付けているか調べた

#  背景
自アプリから自webページをwebブラウザアプリを起動して閲覧 
→ webブラウザアプリで色々やって最終的に自webページ上のリンクをタッチ
→ そのリンクを自アプリのActivityに設定したintentfilterを用いて拾ってやり、自アプリのActivityを起動
ということをするにあたってActivityのlaunchModeなどを決めるため各webブラウザアプリの挙動を知りたくなった。

# 調べたもの
Huawei nova3 (android 9) : 

- chrome
- FireFox
 
Fujitsu F-05J (android 7.1.1) : 

- chrome
- FireFox
- プリインストールブラウザアプリ
 
SONY SO-02E(android 4.4.2) : 

- chrome
- プリインストールブラウザアプリ


# 結果
chrome : 3端末とも FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP
FireFox : 2端末ともフラグ無し
プリインストールブラウザアプリ : 2端末ともフラグ無し

- chrome以外はフラグ無し。
- ユーザーがchromeで開いてもそれ以外のアプリで開いても同じ挙動になるようにするにはintentfilterを付けるActivityのlaunchModeをsinglesingle taskにしたらよさそう。それでもchromeはFLAG_ACTIVITY_CLEAR_TOPも使用しているので完全に同じ動きにはならないけど…

# 調べ方
- 最初はテスト用に、自アプリ→webアプリ→自アプリという動きをするアプリを作って、端末にインストールし、各webアプリごと・各launch modeごとに、webから自アプリに戻ってきた後に端末の戻るボタンを押してどういう挙動をするかということを地道に調べた。その結果をもとに推理した。(すごく時間がかかった)

- その後、システムがLogcatにintentが飛ばされた時にどのフラグが使われているか見れるログを出しているということを聞き、再度調べてみた。

# 裏話
テストアプリで調べて推理した結果では実は

 - chromeはFLAG_ACTIVITY_NEW_TASKを使用している
 - それ以外のアプリはフラグを使用していない
  
という結論になっていたのだが、実はchromeはFLAG_ACTIVITY_CLEAR_TOPフラグも使用していることが発覚した。
Logcatで調べる方が簡単だし得られる結果が正確だった。

# 感想
Logcatで意外に色々情報が見れる事があるみたいなので、今後何か疑問に思った時に調査のためにテストアプリを作って時間をかけたりする前に一度Logcatをじっと眺めてほしい情報が落ちていないか確認していきたい。
【SQL】SELECT文　あれこれ part2

# SQLの条件検索メモ
※今回もメモ用　
※修正あれば都度UPD

さて、今回は[前回の記事:SQL SELECT分あれこれ](https://qiita.com/jyunia0110/items/ddd5475b6bd6a10950ad)で書いた 別Verをメモとして記載。

テーブルは以下2つ存在している中で、どんな風にデータ抽出できるかを記述してきます。

####部活テーブル
|id|部活名|部費|
|:--|--:|:--:|
|1|茶道部|100|
|2|剣道部|200|
|3|柔道部|300|

####部員テーブル
|id|部員名|部活id|
|:--|--:|:--:|
|1|あいうえお|1|
|2|かきくけこ|2|
|3|さしすせそ|3|
|4|たちつてと|1|
|5|なにぬねの|NULL|


①部費（feeカラム）が高い順に部活テーブルを並べ替え、上位3位までのレコードを取得する（取得カラム：全て）

```
SELECT * FROM `部活テーブル` ORDER BY fee DESC LIMIT 3
```

表示はこの通り

|id|部活名|部費|
|:--|--:|:--:|
|3|柔道部|300|
|2|剣道部|200|
|1|茶道部|100|

②部員テーブルの「部活id」カラムは、所属している部活のid(部活テーブルのid)を表しています。
このカラムをキーにして部員テーブルと部活テーブルを「内部結合」し、誰がどの部活に入っているかを取得する（取得カラム：部員テーブルのname、部活テーブルのname）

```
SELECT 部員テーブル.部員名, 部活テーブル.部活名 FROM `部員テーブル` INNER JOIN 部活テーブル ON 部員テーブル.部活id = 部活テーブル.id

```

表示はこの通り

|部員名|部活名|
|:--|--:|
|あいうえお|茶道部|
|かきくけこ|剣道部|
|さしすせそ|柔道部|
|たちつてと|茶道部|


③②のSQLを結合方法を変えて、部員テーブルの「部活テーブルid」カラムが「NULL」の人も含めて取得する（取得カラム：部員テーブルの名前、部活テーブルの名前）

```
SELECT 部員テーブル.部員名, 部活テーブル.部活名 FROM `部員テーブル` LEFT OUTER JOIN 部活テーブル ON 部員テーブル.部活id = 部活テーブル.id

```

表示はこの通り

|部員名|部活名|
|:--|--:|
|あいうえお|茶道部|
|かきくけこ|剣道部|
|さしすせそ|柔道部|
|たちつてと|茶道部|
|なにぬねの|NULL|


④部員テーブルの部活idを重複なく取得する。※NULLは除いてください（取得カラム：部員テーブルの部活id）

```
SELECT DISTINCT 部員テーブルの部活id FROM `部員テーブル` WHERE 部員テーブルの部活id is not null
```

|id|
|:--|
|3|
|2|
|1|
※例が少ないからわかりにくいか。　

⑤④の派生。「not in」を使って、誰も所属していない部活の部活名を取得する（取得カラム：部活テーブルのname）

```
SELECT DISTINCT 部活テーブル.部活名 FROM 部活テーブル WHERE 部活テーブル.id not in (SELECT DISTINCT 部員テーブル.部活id FROM 部員テーブル WHERE 部員テーブル.部活id IS NOT NULL)

```

|部活名|
|--:|

※今回は該当するものがなかったため、表示はされない。
フロントエンドがHTMLでやることとは

例えば一般向けのテキストをうつとき、求められるのは国語能力。そして一般の人にわかりやすく伝える能力。それはコーディングではない。タグはこれからも変化し、JAVAからさらに高度なテクノロジーが使われていく。そんな中で、CMSは多くの人にプログラミングの壁を乗り越えさせてきた。<a href="https://kaitori-coin.net/2020-tokyo-olympic-memorial-coin-purchase-price-list/" >2020東京五輪コイン売りたい</a>
プログラマーしかホームページが作れなかった時代。ホームページビルダーというものはあったが、自作HPをきれいに作れるというだけで自慢できた時代もあった。最近ではCMSの進歩も著しく、コーディングを知らない素人がきれいなデザインでホームページを作れるようになった。そこで求められることはタグではない。フロントエンドの仕事だから。
Reduxの理解で参考にしたサイト

以下のサイトはReduxについて非常にわかりやすくまとめてくれていた。
#Reduxのみの理解
https://qiita.com/kitagawamac/items/49a1f03445b19cf407b7
#React+Reduxの理解
https://qiita.com/mpyw/items/a816c6380219b1d5a3bf
webarenaでubuntu その51

#概要

webarenaでubuntu18.04やってみた。
練習問題やってみた。

#練習問題

phpで使えるデーターベースを準備せよ。

#mysqlをインストール。

```
sudo apt-get install mysql-server php-mysql
```

#mysql_secure_installationを実行。


#mysqlに入る。

```
mysql -u root -p 
```

#databaseを作る。


```
CREATE DATABASE mydb;
```

#userを作る。


```
CREATE USER 'user0'@'localhost' IDENTIFIED BY 'pass';

```

#権限を与える。


```

GRANT ALL PRIVILEGES ON mydb.* TO 'user0'@'localhost';
```

#phpでテスト。

```
<?php
	$db = new PDO("mysql:host=localhost;dbname=mydb;", 'user0', 'pass');
	$sql = 'create table test(id INT(10) AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20), age INT(4), r_time DATETIME)';
	$res = $db->query($sql);
	print "ok\n";
?>
```

以上。
[Err] [REST.cc:205] Error in REST request during startup gazebo

# [Err] [REST.cc:205] Error in REST request during startup gazebo

```console
$ gazebo /opt/ros/crystal/share/gazebo_plugins/worlds/gazebo_ros_joint_state_publisher_demo.world

[Err] [REST.cc:205] Error in REST request

libcurl: (51) SSL: no alternative certificate subject name matches target host name 'api.ignitionfuel.org'
```

# Fix bug 

change ~/.ignition/fuel/config.yaml as following.

    url: https://api.ignitionfuel.org

to

    url: https://api.ignitionrobotics.org
Xcode11で作成したプロジェクトのDeployment Targetを下げるとブラックアウトする問題の対処法

Xcode11とUISceneとUIWindowにまつわるトラブルシュートに追われている。
個別のケースに分解してお届け。

## 現象

Xcode11で作成したプロジェクトをiOS13未満の環境で実行するとブラックアウトしてしまう。

## 再現手順

1. Xcode11にて、新規プロジェクトの作成を行う。
    - test off
    - SwiftUI off
2. Project設定を開き、Deployment Targetを iOS12 にする。
    - iOS13未満ならなんでもいい
3. iOS シミュレーターのうち、iOS12のもので実行する。
    - iOS13未満ならなんでもいい

## 原因

コンソールに「`AppDelegate` に `UIWindow *window` が必要だ」と説明されている。

```
2019-09-27 07:34:57.175062+0900 sample-xcode11[52812:454025] [Application] The app delegate must implement the window property if it wants to use a main storyboard file.
```

新規プロジェクトではScene Based Lifecycleが有効になっている。そしてDeployment Targetも iOS 13 になっている。
Deployment targetがiOS 13であれば、Application Based Lifecycleは使われないため、AppDelegateに`window`は必要ないというAppleのおせっかいである。
※SceneDelegateがwindowを所有している。

## 対応

- `AppDelegate`に`window`を生やす。

```swift
// AppDelegate.swift
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
}
```

```objc
// AppDelegate.h
@interface AppDelegate: UIResponder <UIApplicationDelegate>

@property (nonatomic, strong) UIWindow *window;

@end
```

あとは `SceneDelegate` などに `@available(iOS 13.0, *)` を付けるようXcodeが出してくれるエラーを解決する。
webarenaでubuntu その50

#概要

webarenaでubuntu18.04やってみた。
練習問題やってみた。

#練習問題

プライマリーDNSサーバーを更新せよ。

#BINDをインストール。

```
sudo apt-get install bind
```

#ポートを開ける。

```
udp:53,53,ip4:0.0.0.0/0
tcp:53,53,ip4:0.0.0.0/0
```

#named.confを修正。

```
zone "foge.com" IN {
	type master;
	file "foge.com.zone";
};
```

#zoneファイルを書く。

```
$TTL    86400
@   IN  SOA foge.com. root (
    2019081301
    10800
    3600
    604800
    86400
)
@   IN NS ns.foge.com.
@   IN MX 10 mail.foge.com.
ns  IN A 100.100.100.100
www IN A 100.100.100.100
mail    IN A 100.100.100.100
```

#digでテスト。

外部から

```
dig @100.100.100.100 foge.com any
```

#hostでテスト。

外部から

```
host -t axfr foge.com 100.100.100.100
```

#セカンダリーDNSに登録。

```
maihama-net.comを使う。
```

#レジストリに登録。

```
Primary: ns.foge.com
Secondary: ns1.maihama-net.com
Secondary: ns3.maihama-net.com
```

#DNSの浸透を待つ。

一週間待つ。

以上。
Railsチュートリアル 第5章（余談） - Rails5環境で学習を進めているのに、なぜRails5で非推奨のassert_templateが正常動作するのか

# Rails5では、`assert_template`は非推奨

Railsチュートリアルで使われているコードのうち、`assert_template`は、Rails5では非推奨となりました。[Ruby on Rails - issue #18950](https://github.com/rails/rails/issues/18950)に、非推奨とするに至った経緯の説明、および関連するやり取りが残っています（英語）。

[Deprecation of assigns and assert_template in controller tests - BigBinary Blog](https://blog.bigbinary.com/2016/04/19/changes-to-test-controllers-in-rails-5.html)にも、この変更についての説明が記述されています（英語）。

# 今Rails5でRailsチュートリアルを進めている

```
# rails version
Rails 5.1.6
```

…ちょっと待って下さい。現在Railsチュートリアルを進めているRailsのバージョンは5.1.6ですよね。なぜ`assert_template`が動いているのです？

# Railsチュートリアルで`assert_template`が正常動作する理由

答えは`/Gemfile`にありました。

```/Gemfile（抜粋）
group :test do
  gem 'rails-controller-testing', '1.0.2'
  gem 'minitest',                 '5.10.3'
  gem 'minitest-reporters',       '1.1.14'
  gem 'guard',                    '2.13.0'
  gem 'guard-minitest',           '2.4.4'
end
```

```
gem 'rails-controller-testing', '1.0.2'
```

`rails-controller-testing`というGemがインストールされていれば、Rails5でも`assert_template`を動かすことができます。Railsチュートリアルでは、第3章の[リスト 3.2](https://railstutorial.jp/chapters/static_pages?version=5.1#code-gemfile_sample_app)時点で`rails-controller-testing`を`/Gemfile`に追加していますね。
ssh の公開鍵認証を使用したGithub にあるリポジトリの cloneのしかた

備忘録です。

ssh の公開鍵認証を使用してgithubからクローンしたい時は以下のようにする。

```bash:~/.ssh/config
Host forGithub ← ここ大事
User git
Hostname github.com
Port 22
IdentityFile ~/.ssh/id_rsa_for_git ←各リポジトリ毎に鍵を作成する。
ServerAliveInterval 120
```

github の各リポジトリで公開鍵を登録する。

```
$ git clone forGithub:githubのログイン名/リポジトリ名.git
```

例えば hoge さんの huga リポジトリをとってくる場合。

```
$ git clone forGithub:hoge/huga.git
```

とすればオーケー。

#補足
ssh-add をするのをお忘れなく。
A5SQLでPostgreSQLに接続した方法

A5SQLを開き、
編集からデータベースの追加と削除を開きます。
次に、追加ボタンからPostgreSQL(直接接続)を選択します。
すると、データベースの内容を登録という画面が開くので、テスト接続ボタンから接続が成功することを確認し、OKを押します。
上記の手順でPostgreSQLへの接続が完了しました。
【Go, golang】Microsoft ExcelでもNumbersでもcsvファイルを文字化けしないように作成する。

# 前置き

Goでcsvを扱う記事はQiitaでも色々ありますが、半分自分のメモ代わりということで。
Microsoft Excelでも、Numbersでもcsvファイルを開いた時、文字化けしないファイルを作って出力するようにします。
サンプルは、比較的見たこともあるものかと思います。

## 環境
go version: 1.11.4
os: MacOS

# サンプルコード
``` go
package main

import (
       "encoding/csv"
       "os"
       "log"
       "bufio"
)

func main() {
        // ファイルがあれば開く、なければ新しく作成するようにしています。
        file, err := os.OpenFile("new_company.csv", os.O_RDWR|os.O_CREATE, 0755)
        if err != nil {
                log.Fatal(err)
        }

        // Excelでも見れるようにするには、BOM付きUTF8にする必要があるので、fileの先頭にBOMを付与。
        bw := bufio.NewWriter(file)
        bw.Write([]byte{0xEF, 0xBB, 0xBF})

        // csvデータ
        records := [][]string{
                {"id", "name", "address"},
                {"1", "Softbank", "日本のどこか"},
                {"2", "au", "多分日本のどこか"},
                {"3", "Docomo", "おそらく日本のどこか"},
        }

        w := csv.NewWriter(bw)
        // w.Writeで1行づつやってもいいですが、一括でデータを取り込みできるので、今回はWriteAllにしました。
        // 必要に応じて使ってください。なお、WriteAllの場合、w.Flush()をしなくて良いのでわずかですがコード短縮になる（...？）
        w.WriteAll(records)

        if err := w.Error(); err != nil {
           log.Fatal(err)
        }

        // 最後にfileを閉じます。
        if err := file.Close(); err != nil {
                log.Fatal(err)
        }
}
```

# 個人的ポイント
## bufioを使ってBOMの付与
https://qiita.com/bbq-all-stars/items/03fa27eeb6f46b580525
や
https://pinzolo.github.io/2017/03/29/utf8-csv-with-bom-on-golang.html
を参考にしつつ試してみました。

やはりcsvデータとなるデータの前にBOMを付与するところでしょうか。

## どんな感じになったか
上記サンプルコードで、`go run main.go`してファイルを生成した後、
lessコマンドで中身をみてみると、

``` sh
<U+FEFF>id,name,address
1,Softbank,日本のどこか
2,au,多分日本のどこか
3,Docomo,おそらく日本のどこか
new_company.csv (END)
```
のように、先頭にBOMが付いているのがわかります(catコマンドだと付いているかわからない)。

Cot Editorでファイルを開いてみると...
<img width="500" alt="スクリーンショット 2019-09-27 2.44.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232071/ef1d2692-2a42-63f6-2998-ab5c1d5d2d7a.png">
エンコーティングのところが「Unicode（UTF-8）B...」(これ、BOM付きってことです。見難いですが...)となっていて、BOM付きなことがわかります。

MacのMicrosoft Excelで開いてみると、最初にテキストファイルウィザードのウィンドウは表示されますが、
区切り文字の取り扱いとかを選んで「完了」を押すと、
<img width="500" alt="スクリーンショット 2019-09-27 2.47.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232071/29345205-ccac-b044-dcf4-4305a6ab443d.png">
こんな感じでみることができます。...よかった。
React + Typescript + Next.js に font-awesome を追加

# 概要
React + Typescript + Next.js プロジェクトでfont-awesomeを使えるようにする
だいたいここに書いてある↓
https://www.npmjs.com/package/@fortawesome/react-fontawesom

# 手順
## 1. パッケージのインストール
- 色々パッケージがあるらしいので、用途に応じて入れる
- 今回はとりあえずこの2つを使った例

npm でやる場合

```bash
$ npm i --save @fortawesome/free-solid-svg-icons
$ npm i --save @fortawesome/react-fontawesome
```

yarn でやる場合
以下 `npm i --save` は `yarn add` に読みかえればokなので、省略

```bash
$ yarn add @fortawesome/free-solid-svg-icons
$ yarn add @fortawesome/react-fontawesome
```

## 2. アイコンを選ぶ(確認中; 現状うまくいっているやり方) 

1. https://fontawesome.com/icons/　にいく
2. フリーのアイコンを選ぶ
3. HTML の class 名を camelCase に変える →次のステップで使う

例 https://fontawesome.com/icons/chevron-right?style=solid
アイコンの上の `<i class=...` のところを見ると、

```HTML
<i class="fas fa-chevron-right"></i>
```

となっている
クラス名は `fa-chevron-right` なので、`faChevronRight` としてメモっとくか覚えと
く
## 3. アイコンを入れたいページでインポート

- 今回は [chevron-right](https://fontawesome.com/icons/chevron-right?style=solid) というアイコンを使った例

```jsx

import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faChevronRight } from '@fortawesome/free-solid-svg-icons';

const myComponent = () => (
  <>
    <p>right icon</p>
    <FontAwesomeIcon icon={faChevronRight} />
  </>
```

## おまけ サイズとか色とかいじってみる

- サイズを大きく、アイコンの色を白くしたいときは、こんな感じ↓で書く
- 他にも回転とかいじれるらしい
- 詳しくはこちら https://www.npmjs.com/package/@fortawesome/react-fontawesome#features

```jsx
<FontAwesomeIcon icon={faChevronRight} size="lg" color="#fff" />
```
【川原のGo言語＆Elixir奮闘記】#3　今日はGoで並行機能遊び

Hello world私だよ。

前回でHello worldまで行けたよ。

今日はGoの並行機能で遊んでいくよ。

以下のプログラムを作るよ。

```Go
package main

import (
    "fmt"
    "time"
)

func readword(ch chan string) {
    fmt.Println("なんか入力して～")
    var word string
    fmt.Scanf("%s", &word)
    ch <- word
}

func timeout(t chan bool) {
    time.Sleep(10 * time.Second)
    t <- true
}

func main() {
    t := make(chan bool)
    go timeout(t)

    ch := make(chan string)
    go readword(ch)

    select {
    case word := <-ch:
        fmt.Println("承り～", word)
    case <-t:
        fmt.Println("はい、時間切れ～")
    }
}
```

####ここで重要なのは、"go"ルーチンと"select”っていう文だよ。

####両方の"go"ルーチンからの戻り値を"select”で受け付けているよ。

これを使うことによってプログラム上で非同期を表しているよ。

今日はGoの並行機能で遊んだよ。

最近、左目の上裏がちょっと痛いよ。

また来週。
NanoPi Fire3 のkernelをBuildする

#はじめに
一般にLinux Kernel Buildは一仕事です。
訳あってNanoPi Fire3-LTSの独自カーネルを作りましたので、ここにまとめます。

#摘要
通常，Linux Kernel Build是一项工作。
我翻译了NanoPi Fire3-LTS的原始内核，所以这里是一个总结。

# 資料を読む
まず[これ](http://wiki.friendlyarm.com/wiki/index.php/NanoPi_Fire3#Compile_Kernel)をしっかり読んでください。

# Kernel Sourceを入手する
資料を読んだ方は分かってますね。
kernel.org の生のSource ではダメです

``` shell
git clone https://github.com/friendlyarm/linux.git -b nanopi2-v4.4.y --depth 1
```
gitでfriendlyarmの特製パッチが当たったものを入手してください。

# 時計を合わせる
makeを使う前には時計を合わせましょう。

``` shell
ntpdate ntp.jst.mfeed.ad.jp
```

# Build環境を整える
ここでは調達したNanoPi Fire3しかLinuxを持っていないという前提で行きます。もちろんx86_64のLinuxを持っていればクロスコンパイル環境を作りそちらでBuildすることは可能です、というかソースコードはそういう前提で作られています。

``` shell
cd /usr/bin
ln -s gcc aarch64-linux-gcc
ln -s ld aarch64-linux-ld
ln -s nm aarch64-linux-nm
ln -s ar aarch64-linux-ar
ln -s objcopy aarc64-linux-objcopy
```
お分かりでしょう。
クロスコンパイラーの代わりにレジデントコンパイラーを充ててしまいます。

# .config を作る
普通動いているkernelの/bootにbuildしたときのconfigが残してありこれを改造して独自カーネルを作りますが、fire3にはありませんし、kernel自身からconfigを取り出せるようにもなっていません。素から作っては見たものの案の定走りません。.configは自動生成されるのです。

``` shell
touch .scmversion
make nanopi3_linux_defconfig
```

# Kernel Huck する
作業に自信がある方はこの工程でconfigをいじり、ドライバーを整理します。
慎重な方はここはいじらず最後まで推奨カーネルが動くことを検査してから、２度目に行うが良いでしょう。

``` shell
apt install ncurses-dev
make manuconfig
```
たくさんの項目があります。
肝心なものを削ると、立ち上がらなくなります。

# build

``` shell
make -k -j4
```
数時間かかります。-j8を指定したいところですが、memory不足でかえって遅くなるようです。
寝る前に仕掛けてさっさと寝ましょう。
起きたらエラーが出てました。
こういう時にmake -k を指定するとエラーが影響しないところは先に進めてくれます。
/usr/src/linux/arch/arm64/include/asm/vdso.h
です。
42行目に
\#define vdso_offset_sigtamp 0x06c0
を書き加えたらおとなしくなりました。
まあ、この程度は気のせいでしょう (^^;

# backupする
ここでおもむろにSDをバックアップします。
SDをreaderに挿します。

``` shell
ddrescue -f /dev/mmcblk0 /dev/sda
```

backupのSDを抜き、安全なところに保管してから、

``` shell
mount /dev/mmcblk0p1 /boot
make install
reboot
```

どうでしょう？上がりますか？
Ruby gem を調べる

#Ruby gem を調べる

業務でRubyの簡単な改修をするようになり、当然のように既存のgemを利用していますが、改めてgemについて簡単にまとめてみました。
![9bc6cc57395af0baa8f335ba96b2be69_s.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234246/46bac598-ba6c-3b17-9477-640af7191a23.jpeg)


###gemとは何か
RubyにおけるgemとはRubyのライブラリのことです。
gemを使用することで1からコードを書かなくても機能を実装できるため便利です。
しかし、注意点としてフレームワークのバージョンによる相性やgemのバージョン同士の組み合わせによっては動作しない可能性があります。その為インストールやアンインストールにはRubyGemsやbundlerといったパッケージ管理ツールを使うことが多いです。
Rubyのバージョン1.9以降はRubyGemsは標準添付となっていますが、それ以前のバージョンの場合は自分でインストールする必要があります。

###gemを探す
gemは主にRubyGems.orgに置いてあります。その他にはgemコマンドを使用したりWebサイトを直接閲覧したりして探します。
またruby関連のリポジトリとしてGitHubが広く使われている為、gemのソースコードのほとんどがGitHubで見ることができます。

###gemコマンド
ターミナルでgemコマンドを使うことでgemをインストールしたり一覧を見ることができます。

$gem search -r #入手可能な全てのgemの一覧を調べます
--local(-r)オプションを使うと、インストール済みのgemに対してローカルで検索をすることが出来ます
$gem install  [gem名] #gemをインストールします
--version/-vフラグを使うと、バージョンを指定してインストールすることができます。
$gem update #gemをアップデートします
$gem install bundler #未インストールのバンドルがある場合インストールします。
$gem list #インストール済みのgemを見ることができます。
$gem help #ドキュメントをターミナルで参照することができます。

###bundleコマンド
gemのバージョン管理を行うコマンドです。
![eab9eb13cb26e6a2a20ed224c7d94185_s.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234246/ef7c8a7b-10de-cd16-457b-fb5af98b9dc3.jpeg)

$gem install bundler #bundlerをインストールします。
$bundle install #これだけで使用するとRuby共通フォルダにgemをインストールします。
$bundle install --path #プロジェクトフォルダにgemをインストールします。
以降--pathオプションを付けなくてもプロジェクトフォルダにインストールされます。
$bundle install --without #デプロイする際に余計なgemを入れない為に使用します。
$bundle list #プロジェクトで使用しているgemのバージョンを確認します。

###よく使われるgem
#####devise
IDとメールアドレスを使用して登録、ログインをする一般的なログイン機能を実装することが可能になります。
登録処理、仮登録、ログイン処理、認証機能、パスワードの変更/再発行などログイン機能として十分な機能を備えている為広く使用されています。

#####active admin
管理画面を自動で作成します。
権限付与・管理を行えるcancancanというgemなどをセットに使用することがよくあります。
また、管理画面を作成するのに使用されるgemは他にもrails adminやAdministrateなど有名なものがありますが、それぞれ特性がある為調べて使用しましょう。

#####i18n
Ruby on Rails 2.2以降からRailsに同梱されている多言語化に用いるgemです。
多くの言語ファイルが用意されていて、様々な言語を翻訳してくれる為サイトの国際化などに便利です。

#####Kaminari
長い文章の記事をページ分割して各ページへのリンクを表示してくれるページネーション機能を実装するGemです。
表示件数やデザインも簡単に設定変更できます。

#####better errors
エラーメッセージをわかりやすく表示してくれるgemです。
ブラウザからのirbによるdebugが可能で、どうなっているかわからない箇所ターミナルの表示をせずにすぐ確認できます。
デバッグ作業が捗る人気なgemです。


###最後に
![f622389b613ac3eeb40a6726b3491a90_s.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234246/422d049d-218c-2ab0-01f5-43bb6640d3b5.jpeg)
今回はRubyのgemについて簡単な説明とよく使われるgemを少し紹介しました。
脱Ruby初心者に向けて既存のgemをただ使用するだけでなくソースを確認し一歩踏み込んだ読み方をして自分でもgemを作れるようになるとよりRubyを知ることができると思います。
C# Stack のシリアライズ


## 問題

コントリビュートをしているプロジェクトでシリアライズ/デシリアライズしているStackが毎回反転していることに気が付いた。公式ドキュメントや、[NewtonJsonのIssue](https://github.com/JamesNK/Newtonsoft.Json/issues/971)を発見して問題を理解したのでメモしておく。


```csharp

        static void Main(string[] args)
        {
            var stack = new Stack<int>();
            stack.Push(1);
            stack.Push(2);
            stack.Push(3);
            var json = JsonConvert.SerializeObject(stack);
            Console.WriteLine(json);
            var restored = JsonConvert.DeserializeObject<Stack<int>>(json);
            var count = restored.Count;
            for (int i = 0; i < count; i++)
            {
                Console.WriteLine(restored.Pop());
            }
            Console.ReadLine(); 
        }
```

実行結果を見ると反転している。

```
[3,2,1]
1
2
3
```

## 分析

原因を知りたいところだが、[Stack](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.stack-1?view=netframework-4.8)の公式ドキュメントを見ると、`Stack<T>(IEnumerable<T>)` のコンストラクタは、Stackにリバースして格納するようになっている。StackもIEnumerable<T>を実装しているので

```csharp
var stack = new Stack<int>();
var stack = new Stack<int>(stack);
```

とかするとオーダーが反転する。このあたりが問題かもしれない。こちらの[チケット](https://github.com/dotnet/corefx/issues/40479)を見ると近い将来実装するかもしれない。このチケットを見ると、原因は、Json.NET の実装で次のようにいっている。

> Deserialization: if the payload is "[1,2,3]", we return a stack with 3 at the top.
Serialization: if stack's contents are [1, 2, 3] with 3 at the top, we return JSON payload [3,2,1].

今デコンパイラが動かないので見れないけど、こういう振る舞いだというのは理解できた。

## 問題の解決

カスタムのシリアライザを書いているけど、カスタムなので復元の際にリバースさせることにした。

```csharp

        public static TraceContextBase Restore(string json) 
        {
            if (!string.IsNullOrEmpty(json))
            {

                var typeName = JObject.Parse(json)["$type"];
                Type traceContextType = Type.GetType(typeName.Value<string>());

                var restored = JsonConvert.DeserializeObject(
                    json,
                    traceContextType,
                    new JsonSerializerSettings()
                    {
                        TypeNameHandling = TypeNameHandling.Objects,
                        PreserveReferencesHandling = PreserveReferencesHandling.Objects,
                        ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
                    }) as TraceContextBase;
                restored.OrchestrationTraceContexts = new Stack<TraceContextBase>(restored.OrchestrationTraceContexts);
                return restored;
            }
            else
            {
                return TraceContextFactory.Empty;
            }
        }
```
Java基礎学習内容9（ラムダ式）

# 概要
ラムダ式…命名せずに定義する関数(=無名関数)の記法の一つ。
引数と処理を記述する。

# 記法
```java:ラムダ式(基本文法)
 Function<int> func1 = (int num) -> { return num + 1};
 Function<int> func2 = num -> { return num + 2};
 Function<int> func3 = num -> num + 3;
```

※引数の型はインターフェイス宣言時に決定するため省略可能
※引数が一つの場合、引数の()を省略可能
※処理が一行な場合、{}およびreturnを省略可能。

# 使い道
ラムダ式を引数とするメソッドを活用すれば、処理の一部を引数として渡すことが可能となる。
・Stream関連
・ArrayListのreplaceAll
・自作メソッド
等々…
一例として、([前記事](https://qiita.com/hory-tmp/items/2d24c40642fddf0462b5))参照
ONNXで eliminate_nop_pad 最適化

NNXがサポートしている最適化 eliminate_nop_pad を調べてみました。

最適化をしている箇所のソースがこちらです。
https://github.com/onnx/onnx/blob/master/onnx/optimizer/passes/eliminate_nop_pad.h


```c++
static bool is_nop_pad(Node* node, Graph& graph) {
    if (node->hasAttribute(kpads)) {
      // opset 10 and below
      const auto& pads = node->is(kpads);
      for (size_t i = 0; i < pads.size(); i++) {
        // if pad constant_value is non-zero, this is not a nop pad
        if (pads[i] != 0) {
          return false;      			
        }
      }
      return true;
    } else {
      // opset 11 and above
      const auto& pads_name = node->inputs()[1]->uniqueName();
      const auto pads_initializer = graph.getInitializer(pads_name);
      // 'pad' node has the 'pads' input which has not been initialized -
      // can't proceed with elimination
      if (pads_initializer == graph.initializers().end())
        return false;

      // validate values within 'pads'
      if (pads_initializer->elem_type() == TensorProto::INT64) {
        const auto& pads = ParseData<int64_t>(&*pads_initializer);
        for (const auto& val : pads) {
          // if pad constant_value is non-zero, this is not a nop pad
          if (val != 0) {
            return false;
          }      
        }
        return true;
      }
    }

    return false;
  }
```

padサイズが0の時、何もPaddingしないの(nop)ので削除する最適化ですね。いちいち名前つけないで、operationがnopと同等の時削除する最適化でくくった方が良いような気がします。

これも実際にやってみましょう。

![eliminate_nop_pad.onnx.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327/b7dc5085-bd0f-535f-a872-d6cf687bc950.png)


二つあるPadsのうち、片方がpads = [0, 0, 0, 0]、もう片方がpads = [0, 1, 0, 1]です。
最適化すると、片方だけ削除されるはずです。

```python
passes = ['eliminate_nop_pad']

optimized_model = optimizer.optimize(model_def, passes)
```

![eliminate_nop_pad_optimized.onnx.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327/07461310-e01d-7867-f280-c36fde3f932c.png)



上手く行きました。

全ソースはこちら。

```python
import onnx
from onnx import helper
from onnx import TensorProto
from onnx import optimizer

X = helper.make_tensor_value_info('X', TensorProto.FLOAT, [1, 2])
Y = helper.make_tensor_value_info('Y', TensorProto.FLOAT, [1, 4])

pad0 = helper.make_node(
    'Pad',
    ['X'],
    ['pad0_out'],
    mode = 'constant',
    value = 1.5,
    pads = [0, 1, 0, 1]
)

pad1 = helper.make_node(
    'Pad',
    ['X'],
    ['pad1_out'],
    mode = 'constant',
    value = 1.5,
    pads = [0, 0, 0, 0]
)

concat = helper.make_node(
    'Concat',
    ['pad0_out', 'pad1_out'],
    ['Y'],
)

graph_def = helper.make_graph(
    [pad0, pad1, concat],
    'test-model',
    [X],
    [Y]
)

model_def = helper.make_model(
    graph_def,
    producer_name='onnx_example'
)

onnx.save(model_def, 'onnx/eliminate_nop_pad.onnx')

# 最適化パスを指定
passes = ['eliminate_nop_pad']

optimized_model = optimizer.optimize(model_def, passes)
onnx.save(optimized_model, 'onnx/eliminate_nop_pad_optimized.onnx')
```
Docker-composeをDjangoにセットアップしてみた

##はじめに
未来電子テクノロジー(https://www.miraidenshi-tech.jp/intern-content/program/)
でインターンをしているrayaと申します。
プログラミング初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正するのでどんどん指摘してください。

##今回の内容
DjangoにDocker-composeをセットアップします。
失敗談も載せています。
mac上でPostgreSQL11.5を使っています。

##Dockerとは
誰もが、どこでもスムーズにアプリケーションを開発、共有、動作できるようにするためのプラットフォームを提供しているサービスです。
１つのパソコンの中で、いくつものサーバーを動かせるようにする仮想化技術を用いることで、WindowsでもLinuxでも使いたい環境で作業ができます。
動作が軽いことと仮想環境の共有がしやすいという特徴があります。
参考：公式サイト(https://www.docker.com/why-docker)

##コンテナとイメージ
Dockerでは、コンテナという形で仮想環境などを共有します。
コンテナに付随してイメージという概念も押さえておきます。
イメージ：アプリケーションの基盤。アプリケーションのために必要な物を備えている
コンテナ：イメージの中でアプリケーションの実行機能を果たす
参考：公式サイト(https://docs.docker.com/get-started/)

##Quickstart
まずDjangoのプロジェクト内にファイルを作ります。

**注意：プロジェクトと言ってもDjangoのインストールされた仮想環境ディレクトリが入っているだけのディレクトリです。``$django-admin startproject project_name .``で実際にプロジェクトは作らないでください。既にstartprojectコマンドで作成されたプロジェクト内で操作すると後々エラーします。（後述）**

プロジェクトディレクトリ直下にDockerfile、requirements.txtファイル、docker-compose.ymlファイルを作成し、Docker-composeを導入します。
最後にデータベースに接続すれば終了です。
参考：公式サイト(https://docs.docker.com/compose/django/)
##Dockerfile
Dockerfileはイメージの中身を定めています。

```dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
```
このDockerfileは親となるPython3のイメージによって動きます。
そのイメージを適切な形に定めているのが、requirements.txtファイルです。
ここに記述のある``RUN pip install -r requirements.txt``によって、requirements.txtファイルが動きます。
##requirements.txt
```text
Django>=2.0,<3.0
psycopg2>=2.7,<3.0
```
##docker-compose.yml
docker-compose.ymlファイルは、このアプリケーションを作る際に利用するサービスを定めます。
今回は、``db``と``web``サービスを使用します。
どんなDockerイメージを使うのか、volume、ポート番号が定められています。

```yml
version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
```
上記の過程でDjangoにDocker-composeを導入する準備が整いました。

##プロジェクト作成(失敗談込み)
プロジェクトディレクトリで以下のコマンドを実行します。
このコマンドはDocker-composeに``composeexample``というプロジェクトをコンテナ上で動かすように指示しています。
このコマンドを実行する際には、docker-compose.ymlファイルで定めた``web``サービスイメージが作られます。
Docker-composeはそのイメージを使ってプロジェクトディレクトリやその他のファイルを作ります。

```
$ sudo docker-compose run web django-admin startproject composeexample .
```

私は、最初にDocker-composeをセットアップする際に、既存のDjangoプロジェクトディレクトリ（startprojectコマンドでプロジェクトを作成済みのディレクトリ）でここまでの操作を実行しました。
すると、以下のエラーが出ました。

```
CommandError: /code/manage.py already exists, overlaying a project or app into an existing directory won't replace conflicting files
```
既にmanage.pyファイルがあるからプロジェクトを作れないよというエラーと思われます。
このエラーが出たので、先ほどの注意点を挙げています。
ということで、新規に仮想環境ディレクトリのみが入ったディレクトリを作成し、そのディレクトリ上で再び、Dockerfile、requirements.txtファイル、docker-compose.ymlファイルを作成した後に、docker-composeコマンドを実行しました。
無事エラーは発生せずに次のステップに進めました。

##データベース接続
Djangoは、デフォルトではsqliteを使用しているので、PostgreSQLに設定します。
プロジェクト直下のsettings.pyファイルの内容を書き換えます。

```python
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}
```

あとは、プロジェクトディレクトリの一番上の階層で、以下のコマンドを実行し、ブラウザで``http://localhost:8000``にアクセスします。
Welcomeページが表示されていれば成功です。

```
$ docker-compose up
```
Project Euler 028を解いてみる。「螺旋状に並んだ数の対角線」

# Project Euler 028
[028](http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2028)
>1から初めて右方向に進み時計回りに数字を増やしていき, 5×5の螺旋が以下のように生成される:
<img width="272" alt="スクリーンショット 2019-09-26 23.09.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346690/ef3b5b20-f0b4-7984-028f-83cae5d77a76.png">

>両対角線上の数字の合計は101であることが確かめられる.
1001×1001の螺旋を同じ方法で生成したとき, 対角線上の数字の和はいくつか?


->[次の問題](https://qiita.com/radiol/items/4a3ceea3dec954ccae2a)

## 考え方
当直で呼ばれ、時間も元気もなくなったので定番のゴリ押しで行きます(^q^)
最も内側の四角形は3,5,7,9と2ずつ増え、その1つ外側では13,17,21,25と４ずつ増えます。外周が1つ外側に行くと辺の長さは2ずつ増えるので、それぞれの角の差も2ずつ増えていきます。
これをコードにして1001まで回します。

## コード
```Python:euler028.py
def main():
    num = 1  # 対角線上の数
    answer = 1  # 答え用の変数
    for i in range(2, 1001, 2):  # iは2ずつ増える
        for _ in range(4):
            num += i  # 対角線の数を計算し、
            answer += num  # 合計に足す
    print(answer)


if __name__ == '__main__':
    from time import time as t
    st = t()
    main()
    print(t() - st, 'sec')
```
[paiza](https://paiza.io/projects/new)にて実行
`結果
669171001
0.0002090930938720703 sec
`