OmniAICreator/Qiita-1.07M huggingface dataset:
あの人のSubversionを乗っ取れるかもしれないというお話

<!-- markdownlint-disable MD033 -->

初投稿です。技術的におかしい点等あればコメントで教えていただきたいです。

## 環境

- Windows10 1803
- TortoiseSVN 1.9.7
- Subversion 1.9.7

## 前提条件

- VMに開発環境を作っている
- プロジェクトに新規参加したメンバーには、元からいるメンバーのVMをコピーして渡している

## そもそもやりたかったこと

- 忘れてしまったSubversionの認証情報を調べる

## 経緯

先日、面倒を見ている後輩にRevertの仕方を教えました。終わったら次の作業を説明するから声をかけるように言ったのですが、なかなか来ません。様子を見に行くと画面の前で固まっている彼がいました。Subversionの認証情報が分からなくなったとのこと。

しょうがなく、パスワードを取り出す方法がないか調べました。

## パスワードの救出手順

[StackOverflow](https://stackoverflow.com/questions/5910965/recover-svn-password-from-local-cache "StackOverflow")に手順がありました。

> Update: In TortoiseSVN 1.9 and later, you can do it without any additional tools:
Settings Dialog -> Saved Data, then click the "Clear..." button right of the text "Authentication Data". A new dialog pops up, showing all stored authentication data where you can chose which one(s) to clear. Instead of clearing, hold down the Shift and Ctrl button, and then double click on the list. A new column is shown in the dialog which shows the password in clear.

スクリーンショットで説明します。
「Setting Dialog」と言っているのは、デスクトップで右クリックすると出てくるこれ。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227939/499994bf-4010-3e56-e055-1df9cf880ae7.png)

「Setting」を選択すると開く画面です。「Saved Data」という項目が左側に表示されています。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227939/9e8d5a66-ed5c-9bb7-9f8d-79cb0590dcaa.png)

「Saved Data」の「Clear...」をクリックすると、この画面になります。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227939/97b9e216-5771-64ee-6caa-a2d0e2550fcf.png)

コントロールとシフトを押しながら、リストをダブルクリックでパスワードが見えます。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227939/4b027e40-2b14-1770-448d-d95bce5f254d.png)

## これの意味すること

これを他の人にコピーさせてもらったVMでやると、その人の認証情報も表示されます。仕事で開発している環境の端末がそうだったので、いきなり他の人の情報も見えてびっくりしました。もちろん、何もせずにその認証情報は消しました。**でも、次の案件では嫌いな人からVMをコピーさせてもらうことにします。**

私は証拠隠滅が下手なので何もしませんが、「いざとなったらお前のアカウントでXXXXXXXXXXできるんやぞ」っていう精神安定剤になるかもしれません。
[nuxt.js その１] プロジェクトの作成と生成されるディレクトリ構成まとめ

# nuxt.jsとは？
[公式ページ](https://ja.nuxtjs.org/guide/)をみるのが一番わかる
って言ってしまうと終わりなので、現状の自分的な解釈を述べるなら
　Ruby  　→　Ruby on rails
　Vue.js　→　Nuxt.js
の関係性って感じ。
Vue.jsで開発しようと思ったらだいたい必要になるものを最初からいろいろ含めた状態で生成してくれて、よく使う機能は自動で生成してくれたり、ある程度開発に規則を設けることでその分nuxt側で勝手にやってくれるようになってる　みたいな？

実際まだ何も使ってないけど、公式サイト見た感じはそんな印象。

自分で勝手に作ってるといろいろとどこに書いたかわからなくなってしまうというのはよくあることなので（？）ある程度ルールで縛られていたほうが楽でいいってのはある。

余談だけど、
実際、Nuxt.jsを今こうやって触ろうとしているのも、もともとVue.jsでサイト作ってたんだけど、２か月ほど放置していたせいで、自分で何をやってたかわからなくなってしまったのと、後々自分で見返せるようにやったことまとめておきたかったので、いっそのことNuxtに乗せ換えてここにその内容を残そうと思ったわけです。

# とにもかくにもプロジェクトの生成

筆者の環境はすでにnpmとかもろもろのセットアップは終わってる。
きっとググれば出てくるだろう。ここは省略。Vue.jsのセットアップをやっておくこと。

```
> npx create-nuxt-app "project-name"
```

```
npx: 377個のパッケージを74.73秒でインストールしました。
create-nuxt-app v2.8.0
✨  Generating Nuxt.js project in C:\Users\YM\Desktop\vue\monosashi-nuxt
? Project name monosashi-nuxt
? Project description My impeccable Nuxt.js project
? Author name yaizaaaa
? Choose the package manager Yarn
? Choose UI framework Vuetify.js
? Choose custom server framework None (Recommended)
? Choose Nuxt.js modules Axios, Progressive Web App (PWA) Support
? Choose linting tools (Press <space> to select, <a> to toggle all, <i> to invert selection)
? Choose test framework AVA
? Choose rendering mode Universal (SSR)
'yarn' �́A�����R�}���h�܂��͊O���R�}���h�A
����\�ȃv���O�����܂��̓o�b�` �t�@�C���Ƃ��ĔF������Ă��܂���B


- Installing packages with yarnTrace: { Error: spawn yarn ENOENT
    at notFoundError (C:\Users\YM\AppData\Roaming\npm-cache\_npx\20164\node_modules\create-nuxt-app\node_modules\cross-spawn\lib\enoent.js:6:26)
    at verifyENOENT (C:\Users\YM\AppData\Roaming\npm-cache\_npx\20164\node_modules\create-nuxt-app\node_modules\cross-spawn\lib\enoent.js:40:16)
    at ChildProcess.cp.emit (C:\Users\YM\AppData\Roaming\npm-cache\_npx\20164\node_modules\create-nuxt-app\node_modules\cross-spawn\lib\enoent.js:27:25)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
  code: 'ENOENT',
  errno: 'ENOENT',
  syscall: 'spawn yarn',
  path: 'yarn',
  spawnargs: [ 'install' ] }
    at sao.run.catch (C:\Users\YM\AppData\Roaming\npm-cache\_npx\20164\node_modules\create-nuxt-app\cli.js:18:13)
    at process._tickCallback (internal/process/next_tick.js:68:7)
```

# 生成されるディレクトリの説明
実際ここも[公式ページ](https://ja.nuxtjs.org/guide/)を読み込めばいいね

```
~/
├─assets
│  └─style
Stylus や SASS、 Image、 Font のようなコンパイルされていないファイルを入れます。
```

```
├─components
components ディレクトリには Vue.js のコンポーネントファイルを入れます。
これらのコンポーネントでは asyncData や fetch を使うことはできません。
```
```
├─layouts
layouts ディレクトリはアプリケーションのレイアウトを含みます。
```
```
├─middleware
アプリケーションのミドルウェアを入れます。ページやページグループ（レイアウト）をレンダリングするよりも前に実行されるカスタム関数を定義できます。
```
```
├─pages
アプリケーションのビュー及びルーティングファイルを入れます。
```
```
├─plugins
コンポーネントをグローバルに登録したり、関数や定数を挿入するための場所
```
```
├─static
ディレクトリは直接サーバのルートに配置され（/static/robots.txt は http://localhost:3000/robots.txt でアクセス可能です）
```
```
├─store
Vuex ストア のファイルを入れます。
```
```
└─test
    ├─helpers
    └─specs
テスト用ファイルを入れます。
```
【勉強の記録】_2019/7/1


## 勉強内容
◆PyQ
35.例外処理
&nbsp;・暗号メッセージを作るプログラムの例外処理をしてみよう

## 学んだこと
###例外処理

```
try:
    1.例外の可能性あり
except ValueError:
    2.例外処理
else:
    3.例外が起こらなかったとき
finally:
    4.例外の有無に関わらない
```

###エラー内容

```
KeyboardInterrupt  #Ctrl-Cを押したためキーボードの処理が中断されるという例外が発生
ValueError　#引数の型はあっているけれど誤った値を取っている場合に発生
```
[matplotlib] カラーマップの上にグリッドに合わせた境界線を引く

# 困っていたこと
matplotlibでカラーマップを描き、その上に、ある条件を満たす領域の境界線をグリッドに合わせて描きたい。

「ある条件＝boolの２次元配列」として、 `ax.contour` で `levels=[0.5]` を指定するとうまく行きそうだが、グリッドに沿わずに斜めの境界線になってしまう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260547/2fc63d55-6c3d-2090-21b4-69fdb244d5ae.png)
↑の境界線を格子に沿ったカクカクにしたい。

# 理想図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260547/4f6376a2-c50a-280d-d218-c4f0baaac702.png)

# 失敗図の書き方

失敗図は次のように描いている。

## データ
```Python:
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 10)
y = np.linspace(-1, 1, 10)

extent = (x.min(), x.max(), y.min(), y.max())

X, Y = np.meshgrid(x, y)
Z = np.exp(-((X-0.5)**2 + Y**2))
condition = Z > 0.8
```

## 失敗図のプロット（斜めの境界線になる）
```Python:
fig, ax = plt.subplots(dpi=200)
ax.imshow(Z, vmin=-1, extent=extent)
ax.contour(condition, levels=[0.5], extent=extent)
plt.show()
```

# 解決策
途方に暮れていたところ、 `matplotlib imshow contour horizontal` でググったら以下のstackoverflowが出てきた。
[How can I have straight contourlines in matplotlib?](https://stackoverflow.com/questions/29254765/how-can-i-have-straight-contourlines-in-matplotlib)

発想は、**extentを固定し、二次元配列(bool)の解像度のみを上げていき、斜めが目立たないようにする** というものだった。天才かよ。

## 成功図のプロット(まっすぐの境界線になる)
np.kronを使えば、二次元配列(bool)の解像度を上げつつ、extentで端点を固定した時に全体的な値は変化しないようにできる。


```Python:
fac = 10
condition = np.kron(Z > 0.8, np.ones((fac, fac)))
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260547/4f6376a2-c50a-280d-d218-c4f0baaac702.png)

# 結論
ググり方は大事。**horizontal**というワードを思いついたら正解にたどり着けた。
【チャット編】海外IT企業でのチーム開発で頻繁に出てくる簡単な英文法10選+おまけ

#前提
海外IT企業のチーム開発現場でよく使う英文法をまとめてみました。
今回はチャットでよく出てくる英文法をまとめておきます。
個人的主観が入っているので、今度Chatのログを取ってどの英文法が頻繁に使われているか、確認してみたいですね。

#チーム開発でのやり取り

##コミットを作成してチームメンバーにレビューをもらう時

`I created a new PR for ********. Please check it. `
私は*****の新しいプルリクエストを作りました。確認お願いします。

##チームメンバーのコミットにリクエストを出した時(コメントを書いた時)
`I added my comment this PR. Please fix it.`
私はこのPRにコメントを追加しました。修正をお願いします。

##修正して再レビューをしてもらう時
`I fixed this PR. So,Please check it again.`
私はこのPRを修正しました。だからもう一度確認お願いします。

##プルリクエストを承認する時
`I approved this PR.` もしくは
`Approved` :thumbsup:
私はこのプルリクエストを承認しました。

##プルリクエストをdevelopブランチにマージする時
`I merge this PR. Please update develop branch`もしくは
`Merged` :thumbsup:
私はこのプルリクエストをマージしました。devlopブランチを更新してください。

##質問したい時
`I have a question about this task. Let me know if you are free`
私はこのタスクに質問があります。あなたが時間がある時に教えてください。

##dev環境で確認後、検証用環境に更新をお願いする時。
`I checked Dev Server. No problems were found. Please update Prod server now.`
私はDev環境を確認しました。問題は見つかりませんでした。検証用環境を更新してください。

##Bugを発見してレポートにまとめた時
`I created bug report. Priority is set to normal.
Please confirm.`
私はバグレポートを作成しました。優先度は普通に設定しています。
確認してください。

##MTGのドキュメントをシェアする時
`It is the document of the Sprint meeting by 12:00.
Please update it.`
それは12時からのスプリントMTGの資料です。
更新をお願いします。

##進捗を報告する時
`
＊Progress
I created *****
＊Problem
I'm having trouble *****
＊Tomorrow's Plan
I will try *****`

基本箇条書き
進捗は*****
問題は*****
明日は*****


#日常系(おまけ)

##遅刻する時
`I will be late. Because of *****`
私は少し遅れます。なぜなら*****。

##休む時
`I will be absent today. Because of *****`
私は今日休みます。なぜなら*****。

#最後に
思った以上に簡単な英文法だと思いますが、実際の現場ではシンプルな英文法が多用されています。
中学生の英文法さえマスターできれば、チャットでのコミュニケーションは取れるかと思います。

文法が間違っていたら、指摘してくれると助かります。
Yolo, Darknetを用いたリアルタイム物体検出(QuickStart用リポジトリ作成)

# リアルタイムに物体検出したくなった
カメラに映っている内容から、任意のアクションをフックするようなシステムを構築したく調査してみた
その際、公式のDarknetでは素直にリアルタイム検出ができず後述する諸問題がでてきたため、修正版のdarknetとしてリポジトリをフォークした
問題点のメモとしてこの記事にまとめておく。

# 成果物
フォークしたDarknetがこちら

<a href="https://github.com/iaoiui/darknet"><img src="https://github-link-card.s3.ap-northeast-1.amazonaws.com/iaoiui/darknet.png" width="460px"></a>

下記のページから、いつもありがたく使わせてもらっています
[みんなにOSSを見てもらいたい人の為に、GitHubリポジトリのOGP的画像を自動生成してくれるサービスを作った](https://qiita.com/po3rin/items/eac851304cf058c532af)


# つまづいた内容
## Githubに行ったけど、何をしていいかわからない問題
下記がdarknetのgithubだが、READMEがさらっとしか書いていなかった...
https://github.com/pjreddie/darknet

また、[別サイトのリンク](https://pjreddie.com/darknet/)もあるが、こちらにもpythonという文字列が見つからず。
pythonで動かしたい場合の方法が一切わからない状況だった

## ソースそのままじゃうごかない問題
下記のpython用のコードを見つけて実行してみるとまぁまぁエラーが出る
https://github.com/pjreddie/darknet/blob/master/python/darknet.py


### python3じゃ動かないぜ？のエラー
python2系の表記やないですか(絶望

```:実行してみた
(py) $python python/darknet.py 
  File "python/darknet.py", line 154
    print r
          ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(r)?
```

下記のように修正し解決

```
print(r)
```

### libdarknetないで？のエラー
これはdarknetをビルドすることで解決
方法はインストールディレクトリでmakeってするだけ

```
OSError: dlopen(libdarknet.so, 10): image not found
```

### 型おかしいで？のエラー
Cのコードにpythonの文字列を渡してあげるときに、b"文字列"って書くとのこと
エラー内容: 「ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type」
参考: https://github.com/pjreddie/darknet/issues/241


### そんな設定ファイルないで？のエラー

```
Couldn't open file: cfg/tiny-yolo.cfg
```

とりま新しげなやつも同じディレクトリにあるので、下記のファイルに変更した(適当

```
cfg/yolov3-tiny.cfg 
```


### 重みないよ？のエラー

```
Loading weights from tiny-yolo.weights...Couldn't open file: tiny-yolo.weights
```

下記コマンドで(cfgに併せて適当なものを)取得して解決

```
wget https://pjreddie.com/media/files/yolov3-tiny.weights
```


## 上記により、画像一枚分の物体検出が可能
しかし、リアルタイムに物体検出がしたい

そのままのDarknetでは、OpenCVから取得したリアルタイム画像を扱うことができない。
下記のIssueにて回避策も提示されているが、darknetのソースに修正を加えるもののため面倒
https://github.com/pjreddie/darknet/issues/289

# 上記までの課題部分を解決し、すぐにdarknetを試せるようFixしたDarknetを下記の通り公開中(２回目)
上記で述べた問題点を改修して、READMEにQuick Start方法を記載してあります。

<a href="https://github.com/iaoiui/darknet"><img src="https://github-link-card.s3.ap-northeast-1.amazonaws.com/iaoiui/darknet.png" width="460px"></a>
Colaboratory で年金積立金管理運用独立行政法人 (GPIF) の運用をシミュレーションしてみたい

## はじめに

最近、年金がいろいろとニュースになっていますが、[「GPIF 年金運用成績を参院選後まで隠蔽か」](https://www.excite.co.jp/news/article/Gendai_549126/)という記事が気になりました。

[GPIFの基本ポートフォリオは公開されている](https://www.gpif.go.jp/gpif/portfolio.html)ので、公開を待たなくても、ある程度はシミュレーションできるんじゃね？と。

## Colaboratory でやってみる

やってみました。→ [Gist](https://gist.github.com/kunigaku/a2b5769b60eb2f675dd2f91f72adc0ab)

### 解説

[eMAXISのサイト](https://emaxis.jp/)から各投資信託の設定来データをダウンロードします。
使う投信は「ｅＭＡＸＩＳ ＴＯＰＩＸインデックス」、「ｅＭＡＸＩＳ 国内債券インデックス」、
「ｅＭＡＸＩＳ 全世界株式インデックス」、「ｅＭＡＸＩＳ 先進国債券インデックス」の4つです。面倒なのでダウンロードしてpandas.DataFrameにする `jpfund` というパッケージを作りました。

``` python
!pip install jpfund
import jpfund
emaxis = jpfund.EMaxis.get_list()
jp_stock = [x for x in emaxis if "250888" in x.id][0].get()
jp_bond = [x for x in emaxis if "250893" in x.id][0].get()
world_stock = [x for x in emaxis if "260434" in x.id][0].get()
world_bond = [x for x in emaxis if "250925" in x.id][0].get()
```

``` python
def sim_portfolio(assets, weights, start_price=10000):
  w = np.array(weights)
  w = w / w.sum() 
  align_assets = align_start_date(assets)

  # 各資産の変動率を計算
  changes = [price_to_change(df) for df in align_assets]
  # 各変動率にポートフォリオの重みをかける
  weight_changes = [x[0]*x[1] for x in  zip(changes, w)]
  # 重み付き変動率を足し合わせてポートフォリオの変動率を計算する
  daily_change = None
  for change in weight_changes:
    if daily_change is None:
      daily_change = change
    else:
      daily_change = daily_change + change
  # ポートフォリオの変動率を価格に戻す
  return change_to_price(daily_change, start_price)
```

``` python
# 基本ポートフォリオ
assets = [jp_stock, jp_bond, world_stock, world_bond]
weights = [25, 35, 25, 15]
gpif = sim_portfolio(assets, weights)
# 各四半期の収益率
q_return = gpif.asfreq("Q", method="ffill").pct_change().fillna(0).tail(12) * 100
```

## 計算結果

|  | 四半期収益率 |
|:--|--:|
| Date |  |
| 2016-09-30 | 1.970105 |
| 2016-12-31 | 8.366616 |
| 2017-03-31 | 0.316310 |
| 2017-06-30 | 3.205794 |
| 2017-09-30 | 2.852240 |
| 2017-12-31 | 3.941257 |
| 2018-03-31 | -3.514218 |
| 2018-06-30 | 1.306749 |
| 2018-09-30 | 3.411030 |
| 2018-12-31 | -8.447312 |
| 2019-03-31 | 5.862487 |
| 2019-06-30 | -0.041640 |

[GPIFが公開している運用状況速報](https://www.gpif.go.jp/operation/state/pdf/h30_q3.pdf)は次の通り。

<img width="984" alt="スクリーンショット 2019-07-01 23.59.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15990/2762527d-887a-5e21-3ed9-cfb49b0ce69b.png">

プラマイ0.5ポイントぐらいの誤差があるのかな？
ということで、まだ公開されていない2018年度第４四半期の運用成績は5%〜6.5％ぐらいになるのかなあ？

## 2019/7/5 追記

公開されましたね。

https://www.gpif.go.jp/operation/last-years-results.html

https://www.gpif.go.jp/operation/annual2018_report_q4.pdf

<img width="329" alt="スクリーンショット 2019-07-05 15.48.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15990/8241cfa4-f549-61c2-faf6-adbddfbeaf35.png">

第４四半期の実績は 6.21% だったみたいです。だいたい合ってたっぽい。
大学四年生になり、研究テーマが決まってした事まとめ(論文調査)

##はじめに
はじめまして、理系大学4回生になり研究配属された者です。まず初めに、初めて記事を書くので何かおかしな点などがあればアドバイスよろしくお願いします。
今日は僕が今研究室でどのような事をしているのか、今回は論文検索についてを書いていければと思います。

##研究室について
まず、僕が所属する研究室でどのような事がされているか簡単に説明しますと、基本的には画像処理を用いて医療現場での問題を解決に近づけていくという感じです。
ですので基本的にどこかの病院や企業の方と連携して研究している方が多いです。

##論文調査について
研究をするにあたって論文調査を行いますが、これは自分が研究しようとするテーマに対して現段階で分かっている事、分かっていない事、すでに達成されている事、達成されていない事等を確認するために行います。その際に私が参考にしたサイトを紹介します。


###Google　Scholar
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432837/6ce8ec79-8c55-8c6d-0d38-0f21b3270ffc.png)

私は基本的にここから論文検索を始めています。
日本語だと日本での論文に限られてしまうので英語で調べるのがおすすめです。加えて全文を見ようとしたりPDFをダウンロードしようとすると有料会員登録が必要なものが多いと感じました。
いろいろなサイトでの研究がまとめてあるので、ここで調べてみて関連した論文が多いサイトで再度探すという感じで調べていけばよいかと思います。

###Pub Med
![pubmed_home_First_Frame.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432837/1af673df-f291-6009-b295-f2b0355f7f43.png)

これは医療に特化したサイトだったので私的にはたくさん関心のある論文が検索できました。
主に骨折検出をどう行われているか「fracture detection」と入れながら探していました。

###Research gate
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432837/b2d602c5-30a8-fc19-d7df-23fdd01021ef.png)

この画像だけ見ると会員登録しないと検索できないみたいな感じが出ていますが、そんなことはありません。(なんでこの画像にした)
「research gate」で検索し、関連ワードを入力して検索すると全文のPDFに直接飛ぶことができたので論文の保存も簡単でした。

###IEEE
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432837/957f1625-41f3-d8d6-e069-6c03c0e162d0.png)

愛称「イエエエ」通称「アイ・トリプルイー」
これ言いたいがために載せたみたいなところありますが(笑)、まじめに医療・情報系統のものを調べるために使いました。他にも電気・電子工学、通信工学など他分野に渡って出典されています。
私は研究室の意向で会員に登録されました。学会での交通費が支給されるとかされないとか。

他にも分野ごとに特化したものはいろいろあると思いますが、現時点ではこれらを駆使して論文調査を行っています。

最後まで読んでいただいた方、ありがとうございます。
少しでも参考にしていただけると幸いです。
Docker内でvi使えなかった時の対処

- 0.こんな時の対処
- 1.containerにログイン
- 2.Vimのインストール

## 0.こんな時の対処
・コンテナ内でvi/viewコマンド使おうとしたら「Command not Found」になった

## 1.containerにログイン
・docker container exec -ti コンテナ名 bash

## 2.Vimのインストール
OSによってインストール方法が変わる。

・Redhat系

```
yum install vim
```

・Debian/Ubuntu系

```
apt-get update
apt-get install vim
```
vscodeでgit bash環境を作成する。

VSCodeのターミナル環境にGit Bashを使えるように設定した備忘録です。

## 実施時の環境とバージョン情報

|項目|バージョン|
|---|---|
|Windows 10 Home | 1803 |
|Visual Studio Code | 1.35.1 |
|Git for Windows(Portable) | 2.22.0 |

## 参考URL

こちらに全て手順が載っています。

https://qiita.com/psychoroid/items/63cc0ece70fce0f0cfc0

※ただ、バージョン差異があったたため、VSCodeへのGitBash設定が少し異なりました。

## 手順

### Git for Windowsのインストール

Windows用のGitを次のリンク先よりダウンロード。

https://git-scm.com/download/win

インストーラー版/ポータブル版どちらでもOKですが、今回はポータブル版を使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203502/3515bc0a-c03f-cc79-ab5b-a8609c3ec3f7.png)

ファイルをダウンロードして、exeファイルを実行します。

解凍先を指定するよう表示されますが、変更等なければそのまま「OK」を押下します。

しばらく待つと解凍完了し、インストール終了となります。

### VSCodeにGit Bashを設定

VSCodeの左下のギアアイコンからメニューを開き、設定をクリックしてSettingsを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203502/579b0afa-4096-68de-9a59-b586b585e248.png)

表示されたSettingsの検索バーにterminal.integrated.shell.windowsを入力し、ターミナル設定をフィルタリング表示。 「setting.jsonで編集」のリンクを押下する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203502/0ede1495-ae72-4cc7-caa5-cd9c2c639ee8.png)


setting.jsonの編集画面が表示されるので、以下のように修正する。

```bash:setting.json
{
    ～省略～
    "terminal.integrated.shell.windows": "PortableGitのbin配下のbash.exeを指定"
    ～省略～
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203502/ee7132cb-dc44-b4e9-3b07-66192def09d5.png)

※上記画像のように、Windows環境のPATHを記載する場合、```\```をエスケープ記載(```\\```)にて記述すること。

上記にて設定は完了です。

最後にCtrl+@で開いたターミナルで新しいターミナルを＋アイコンから開くと、新規のターミナルがGit Bashになっていることを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203502/47fee72e-ea45-4949-95fa-d57e2a6b68a5.png)
文章を書くときに考えていること

仕事柄，技術的な用語を含んだプレーンテキスト（メール，ドキュメント，Wiki, etc）を書くことが多いわけですが，そのうち日本語の文章を書くときに自分が意識している "形式" に関してまとめてみます．
あくまで，自分が意識的に気をつけていることを明文化してみようというただの備忘録で，文章とはこう書くべきというのを述べたいわけではありません．むしろ他の方のこだわりを聞いてみたい．

### これはただの好み
- 句読点にはコンマ（，）とピリオド（．）を用いる
- カタカナ用語は JIS 規格のあれ（コンピュータ，エクスプローラ，ディレクトリ，フォルダ，etc）

### 日本語とアルファベットの間は半角スペースを開ける

```
私の好きなプログラミング言語は Ruby です
```

ただし，数字の扱いはあやふや（気分によりけり）

```
リストから要素を 1 つ選ぶ
リストから要素を1つ選ぶ
```

### 句読点の全角半角は直前の文字に合わせる

```
最近，趣味では Python, Go を書くことが多いです．
```


### 固有名詞は勝手にアレンジしない
```
o Jenkins を起動します
o GitHub にアクセスしてください
x haskell を学習中に挫折した
x 好きな linux ディストリビューションは manjaro です
```
要するにできるだけ正式な表記を使いたいということ．
当然，`git コマンド` とか `Python はパイソンと読みます` という文脈では `git` や `パイソン` と表記する．



### カタカナで表現できるものを英語にしない

＃ これは私の働いている会社でやたら多く見かける

```
修正を commit して build 可否を確認し package を作ります
Jenkins master の IP Address は xxx です
```

```
修正をコミットしてビルド可否を確認しパッケージを作ります
Jenkins マスタの IP アドレスは xxx です
```

### 順序が関係する列挙は `(1), (2), ...` を用いる
```
このアプリケーションをビルドするには，以下の手順が必要です
(1) xxx でアカウントを作成し SDK をダウンロードする
(2) 必要なソフトウェアをインストールする
(3) yyy コマンドを実行する
(4) ...
```

### 順序が関係ない列挙は `(a), (b), ...` または `-` を用いる

```
利用可能なテキストエディタ
- Vim
- Emacs
- nano
```

とくに，後ろの文章で選択肢を参照する必要があるときは，`(a), (b), ...` を用いることが多い．

```
以下の修正案があります
(a) ...
(b) ...

(a) の場合は高パフォーマンスが期待できますが，実装コストが高そうです．
...
```


### カッコは中身によって使い分ける

半角文字だけなら半角を，

```
macOS (Catalina)
```

それ以外の場合は全角を用いる

```
人気の IDE（例えば Visual Studio Code）
```


＃ ほかにもまだありそう
RPAツール　WinActor　開発未経験・初心者に聞いてほしい話

#初めに
筆者は全くのド素人です。
辛うじて地方の工業高校電子科卒ですが卒業から4年間事務の仕事をしていたため、開発に関する事務的な知識は皆無、RPAについての知識も**「なんかタクシーの広告で見た気がする……」**というところからスタートしています。

今回の記事では、そんな私のように**突然WinActorの担当になってしまった！専門知識がない！**という方向けの、開発の流れを書いていきます。

#WinActorとは？
[WinActor公式サイト](https://winactor.biz/)

NTT-ATが提供しているRPAツール。
業務効率支援を目的としたソフトウェア型ロボットです。
特徴として、**「難しい知識は不要」**、**「誰でも手軽に業務の改善が出来る」**という部分が公式サイトでは挙げられています。

##「難しい知識は不要・誰でも手軽に」は本当か？
「じゃあ実際、本当に誰でも簡単に作れちゃうの？」そう聞かれると、**はい、とは答え難い**ですね。
もしかしたらちょっとPCが得意で、理解が早い人なら作るのは簡単かもしれません。
実際に私もそう思っていました。

でも、こういうものは**作った！動いた！だけではダメ**なのです。

#実際の制作の流れ

下記は私が普段WinActorで制作をしている時の流れです。

1. 社内全体の業務を管理している上司からRPA化してほしい業務の依頼が届く
2. 対象の業務のマニュアルを確認する
3. マニュアルを見ながら**作業を細分化**（1クリック単位で考える）
4. 細分化したものを元に実際に作業を行っている社員へ**ヒアリング**
5. ヒアリングの中で出てきたイレギュラー処理を組み込みながら**フローチャート**を書き起こし、**設計書**を作る
6. WinActorで制作
7. テストデータ作成、テスト
8. テスト仕様書を作成して、問題がなければ完成！
9. 利用する社員へマニュアルを作成・配布

工程を文字に起こしてみると結構長いですね。

**最初の案件は約2か月程度**で完成させました（他の業務もあるので1日2~4時間程度の作業だったり終日だったりはしますが）。

これを見ると簡単、とは考えづらいのではないでしょうか？

##何故、作って・使うではいけないのか？こんなに沢山の工程は必要？
**絶対に**必要です。
それぞれの役割、

- 設計書
    - 処理の流れをフローチャートと1工程1行で書いていく
    - 他には文書自体の更新日・更新者を記載
    - 実業務の担当者にも内容が伝わりやすい事を意識
    - 修正の際は以前のバージョンを残してどんな作りだったかわかるように
    - 複数人で担当する、担当者が変更になった場合の引継ぎがスムーズ

- テストデータ
    - テストを実行するための試験データ
    - 実行可能なデータとエラーが出るデータを用意する必要がある

- テスト仕様書
    - **実務で使用する前に本当に正しく動いているか確認する**
    - 「全体の動きの確認」と「テストデータが期待した通りに実行されているか」という2つの観点でテストする必要がある
    - 一連の流れを**行われる動作**、それに対して**得られた結果**というように書いていく
    - 修正をした時、どのような動きをしていたか確認出来る

というように、それぞれに役割があります。
どんなものでもそうですが、**作って終わり**はありません。
本当にそれが正しく動くのか、いつかの修正や引継ぎの時に困らないか、そういう観点でも作業を見てみてください。

##制作面での難しさ
制作の際はほぼドラッグ&ドロップで作ります。
ノードやライブラリというものが事前に用意されているので、実行したい動作に合わせてそれをフローチャートの中に落とし込んでいきます。
そのあと、変数やプロパティを設定していくだけなので、だいたいは付属のマニュアルを読めば作れてしまいます。
実際に私も付属のチュートリアルを一通りこなしてから制作を始めました。
その点、WinActorは未経験・初心者に優しいと言えますね。

難しいと感じる部分は
- 変数の扱い
- ライブラリの組み合わせ
- エラーへの対処
かと思います。

変数の扱いやライブラリの組み合わせはこれも回数をこなせば慣れてくると思います。
でもエラーへの対処は根本的に**エラーと向き合えるか**というのが大事です！

私の経験ですが、一番最初の制作の時に大きなエラーにぶつかりました。
数日データの確認をしたり対処方法を考えたり、結局解決は出来たのですがもっと簡単に出来るものだと思っていたのでこんなに時間がかかるなんて、と思いましたね……。

よくわからないエラーは結構好きです。
PCに向かって時間も嫌いじゃないです。
私は心が折れずに続けられましたが、そうじゃない人もきっといるでしょう。
**エラーと向き合える心が大事**だと思います。

#まとめ
ここまで読んでいただいてありがとうございます。

これを読んで、「本当に出来るだろうか？」と不安になってしまった人もいるかもしれません。
なにはともあれ**とりあえずやってみる事も大事**です！

まだまだWinActorについてはネットでも情報が少ないので、求める答えが出ないかもしれませんが、RPA化出来れば業務はずっと楽になります。

これは**楽をするための努力**です！


これからもWinActorや制作の流れに関する記事を書いていく予定ですので、よければそちらもよろしくお願いします！
Azure DevOps の試したいプラグインまとめ

# 動機

- 私のとある開発案件ではAzure DevOps を利用していますが、今ひとつプラグインを使いこなせていないなあという感覚はありました。
- そんな中、2019/07/01(月) 開催の **[Scrum on Azure DevOps - Avanade tech talk #1](https://techplay.jp/event/735479)** に参加し、デモで様々なプラグインを紹介していただいたので書き留めて置こうと思います。

# 試したいプラグイン
- [**estimate new item**](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.estimate) 
  - **プランニングポーカーのオンライン版**
- [**Configure the Velocity widget**](https://docs.microsoft.com/ja-jp/azure/devops/report/dashboards/team-velocity?view=azure-devops)
  - 過去の実績から可能な「ベロシティ」を示してくれる機能

- **[Linking Work Items to Git Branches, Commits, and Pull Requests](https://devblogs.microsoft.com/devops/linking-work-items-to-git-branches-commits-and-pull-requests/)**
  - コミットログとタスクを紐付けることができる
- **[Definition of Done](https://docs.microsoft.com/ja-jp/azure/devops/boards/boards/definition-of-done?view=azure-devops&viewFallbackFrom=vsts)**
  - タスクを終了したとき、Azure DevOps にチームで決めたDoneの定義がダイアログが出て、チェックリストで通知してくれる機能
- [**Retrospectives**](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.team-retrospectives)
  - KPTがAzure DevOps上でできる
  - Sprint Review でのフィードバックに使い、Problemをそのままプロダクトバックログに移動する、といったこともできる

- その他プラグインは**[Widget catalog](https://docs.microsoft.com/ja-jp/azure/devops/report/dashboards/widget-catalog?view=azure-devops#velocity-team-scoped)** に色々ありそうなのでチェックする
  - 人々が考えそうなプラグインはだいたいありそうなのでチェックしてみる
あまり知られていない？個人的便利なマイナーショートカット集

######はじめに
社会人となり早1年と少しが経過し、仕事にも慣れてきたような・・・。
そんな境遇の私が、身につけた知識をアウトプットするためにQiitaを始めました！
新人さんであったり、同じような境遇の人の役に少しでも立てるような記事を書いていきたいです。

AWSに関心があるので、今後はそっち方面の記事を書いていけたらなと思っております。
初投稿は当たり障りのないものですが、知られていないかもしれない便利なショートカットを。
知らない人にはためになる。そんな知識をどうぞ。


#####1.　フォルダの新規作成　*(CTRL + SHIFT + N)*

>新しいフォルダを作成することができる。
作業用のフォルダ作りたいなーって時なんかにすぐ作れる。
右クリック→新規作成→ファイルと操作した時と同じ挙動で、そのまま名前も付けられる。

#####2.　ファイル(フォルダ)の完全削除　*(SHIFT + DELETE)*

>対象を完全に削除することができる。
ゴミ箱にも入らずに削除されるため非常に扱いには気を付けたいが、
使いどころを誤らなければ非常に便利。

#####3.　デスクトップ画面を表示　*(Windowsキー + D)*

>どんなウィンドウを開いていてもデスクトップを表示してくれる。
色々開きすぎちゃったときとかによく使う。もう一度押せば直前の画面に戻れる。

#####4.　任意のウィンドウをすぐに開く　(Windowsキー + 数字キー)

![pic1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452099/c7014146-a308-a48b-8b69-d9a250193d26.png)
>数字はタスクバーの左から順に対応している。
ドキュメントを開きたければ**Windowsキー+2**
閉じているものを開くこともできるので、よく使うアプリケーションをタスクバーにピン止めしておくと便利。
ブラウザのタブに対しては**CTRL+数字キー**で同じようなことができるのでこちらも試してみてください。

#####5.　選択しているものの名前を編集　*(F2)*

>これは地味だけど便利。ファイル名変えたいときとかにカーソルをあわせた状態で押せば、名前の変更状態に。
Excelのアクティブセルを入力状態にすることもできるので、作業がはかどること間違いなし。

#####6.　タスクマネージャーの起動　*(CTRL + SHIFT + ESC)*

>有名どころだと、**CTRL+ALT+DELETE**で切り替わった画面からタスクマネージャーを選択する。
っていうのが紹介されている気がします。こっちのやり方だと、直接開けるんですよね。ちょっと早い。


######終わりに:boy_tone1:
Qiitaの投稿画面、すごいですね。プレビューが常に横にあるので、体裁を整えやすい！嬉しい！
しかもCTRL+Zで戻れたり、CTRL+Yでやり直しにも対応してるんですね・・・。やりやすいが過ぎる。
そしてマークダウン記法のヘルプ付き。知ってはいたんですけど使いどころがあまりなくて。
本記事では必要以上に使ってみました。これを気に覚えていきます。

`以上。最後までご覧いただきありがとうございました！`
プロキシとリバースプロキシの違いまとめ

# はじめに
**プロキシ**と**リバースプロキシ**ってややこしいですよね。
この記事では、概念図を交えながら混乱しやすいプロキシとリバースプロキシの違いをまとめていきます。

# プロキシとは
一般的に使われる**プロキシ**といえば、「**forward proxy**」のことをさします。
**forward proxy**とは、ある別のWebサイトへのリクエストを受け取り、クライアントの代わりにWebサイトへリクエストを送信するサーバのことです。

こちらの図がforward proxyの概念図です。
クライアントXがとあるWebサイト（サーバZ）にアクセスする時にプロキシサーバYを利用している例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260547/0e086cee-af85-f21c-0995-7cd1e86540e7.png)

リクエストは `クライアントX → プロキシY → WebサーバZ` という流れで伝わっていきます。

## プロキシを使う目的
このようなforward proxyを使う目的が、**WebサーバZに直接アクセスできないクライアントXからZにリクエストを送信できるようにすること**です。例としては、

- クライアントがWebサイトの権限者からブロックされているとき（IPでブラックリスト）
- Youtubeへの通信をブロックしている会社からYoutubeにアクセスしたいとき
- 政府が特定のニュースサイトへの通信を遮断しているとき
- 大学がHTTP以外のプロトコルを制限しているとき（研究室内のサーバにアクセスするために踏み台としてプロキシを使う）

などが挙げられます。

# リバースプロキシとは
続いて、リバースプロキシについてみてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260547/396255a3-00de-5f8d-8d0d-5d850bb66239.png)

リクエストの流れはプロキシと同様で、 `クライアントX → リバースプロキシY → WebサーバZ` のように伝わっていきます。しかし、リバースプロキシでは、**クライアントXは、WebサーバZの存在を知らない**という大きな違いがあります。

クライアントXは、Publicに存在しているリバースプロキシYと通信することで、リクエスト送信とレスポンス受信ができると考えるはずですが、実際はWebサーバZがその処理を行っています。

## リバースプロキシを使う目的
リバースプロキシを使うと、クライアントとWebサーバの間にワンクッションが入ることで、様々な恩恵が得られます。
例えば、

- 機密上の理由などでWebサーバをPublicにしたくないとき
- Webサーバをダウンせずに何かしらのPublicな通信を遮断したいとき（リバースプロキシだけダウンさせれば良い）
- 巨大なサイトを扱う場合（一つのWebサーバではトラフィックをさばけない。リバースプロキシの先に多数のWebサーバを用意することで、クライアントに近いサーバを選択的に使用できる）

などが挙げられます。

# プロキシとリバースプロキシの違いまとめ
`クライアントX　→　Y　→　サーバZ` という流れがあるとき

- `Y = プロキシ` ：クライアントXはサーバZの存在を**知っている**
- `Y = リバースプロキシ` ：クライアントXはサーバZの存在を**知らない**

[実践編ーDockerを使ってnginxでリバースプロキシを立ててみる](https://qiita.com/zawawahoge/items/d58ab6b746625e8d4457)も書いています。
【Python】2次元配列を二番目の要素に注目して降順にソートする

#はじめに
自分が忘れないように書き留めたものです。
n番目の要素に着目してソートするのは知らない人は苦労するかも？と思って記事にしてみました。
ついでにsortedにおける降順ソートのやり方も紹介してます。

#コード
```python
li = [[1,4,3],[2,3,4],[3,4,5],[4,5,6],[2,3,4],[1,5,3],[2,3,4],[5,6,7]]
li = sorted(li, reverse=True, key=lambda x: x[1])  #[1]に注目してソート
print(li)
```

keyにlambdaを使って関数を渡しているところがポイントです。key関数が示すのは**リストの各要素に対して行う前処理**です。
上記の例でいえば、[1,4,3]という0番目の要素をkey関数に渡し、仮引数xで受け取ります。その後、x[1]すなわち[1,4,3]の内の4を返す処理を行います。この返ってきた値をソートの基準として用います。
これを全ての要素について行うことで、2番目の要素を用いた並べ替えが実行出来るわけです。
また、reverse = Trueとすることで降順ソートも実現しています。

#実行結果
```
[[5, 6, 7], [4, 5, 6], [1, 5, 3], [1, 4, 3], [3, 4, 5], [2, 3, 4], [2, 3, 4], [2, 3, 4]]
```

#結論
結構簡単です。
他にもkey関数でやれることは色々あるので知りたい方は[こちらの公式ドキュメント](https://docs.python.org/ja/3/howto/sorting.html)をご覧ください。
凄くわかりやすいと思います。
【リンク集】今すぐ勉強を始めよう！プログラミングをブラウザ上で学習できるサイト(随時更新)

#想定読者
手取り早くプログラミングを学習したい方。
駆け出しエンジニア！手頃でかつすぐに勉強を始めたい方。
環境構築がよくわからない方。


#前提
駆け出しエンジニアがプログラミングを簡単に早く学習したい方に向けて書いています。
環境構築とか一切不要で、ブラウザのみでプログラミングを実行できるサイトを紹介しています。
有料の場合は明記しておきます。
なるべく日本語対応、英語は明記。

お勧めできるサイトを集めました。

#ブラウザ開発環境

- [PaizaCloud](https://paiza.cloud/ja/)(一部有料)
- [AWS Cloud9](https://aws.amazon.com/jp/cloud9/)(1年間無料)
- [CodeAnywhere](https://codeanywhere.com/)(月額制)


#プログラミング別
##HTML&CSS

- [Coding Tab](http://codingtab.net/) ※英語
- [Code pen](https://codepen.io/) ※英語

##SQL

- [SQL Fiddle](http://sqlfiddle.com/) ※英語

##Ruby

- [TryRuby](https://ruby.github.io/TryRuby/) ※英語
- [ドットインストール はじめてのRuby](https://dotinstall.com/lessons/basic_ruby_v4) ※現在試験運用中
- [run.rb](https://runrb.io/) ※英語


##PHP
- [3v4l](https://3v4l.org/) ※英語


##Python

- [Google Colaboratory](https://colab.research.google.com/notebooks/welcome.ipynb) ※英語

##Git

- [Learn Git Branching](http://k.swd.cc/learnGitBranching-ja/)

#総合学習サイト
実際にコードを書いて勉強ができるサイト

- [Progate](https://prog-8.com/)(一部有料)
- [Codecademy](https://www.codecademy.com/)(一部有料) ※英語

#終わりに
本当にリンク集になってしまいましたが、
もし他にもあれば教えてください！
自炊の表紙と本文を結合する

初投稿です
メモ程度の書きなぐりなので読みにくくても許して
## 自炊について

本を買いすぎてカラーボックスのそこが抜けそうになったので自炊を始めたが、漫画などで表紙をカラー、本文をモノクロで読み取ると結合がいちいち面倒。 
今までは[cubePDF](https://www.cube-soft.jp/cubepdf/)でやっていたがGUIでの処理は面倒なのでプログラムで処理する。

## できたもの
```python:sample.py
#!/usr/bin/env python3
"""
カレントディレクトリ内にあるpdfファイルを
指定した数ごとに１つのpdfにまとめる
"""

from PyPDF2 import PdfFileMerger
import sys

filelist = sys.argv[1:]
filelist = sorted(filelist)

FILE_STEP = int(input("何ファイルごとに1冊にしますか？ : "))
FILE_NAME = input("出力ファイル名を指定<NAME_index.pdf> : ")
START_NUM = int(input("開始番号を入力 : "))

for i in range(len(filelist)//FILE_STEP):
    marger = PdfFileMerger()
    for index in range(FILE_STEP):
        marger.append(filelist[i*2+index])
    marger.write(f"{FILE_NAME}_{str(i+START_NUM).zfill(2)}.pdf")
    marger.close
    ORIGINAL_FILE_NAMES = " ".join([filelist[i*2+j] for j in range(FILE_STEP)])
    print(f"{ORIGINAL_FILE_NAMES} > {FILE_NAME}_{str(i+START_NUM).zfill(2)}.pdf")
```
実行は`python3 ./sample.py <結合したいpdf>`

## 課題

* pdfファイルのソート順
    * `%Y%m%d%H%M%S`みたいなファイル命名則ならちゃんと動くはず
* globを使っていない
    * `glob.glob("./*.pdf")`みたいにしてもいいかもしれない
AutoLayoutで横画面の時だけのレイアウト？できらぁ！

## え！？ AutoLayoutで横画面の時だけのレイアウトを？

StoryboardでAutoLayoutを設定する際に、縦画面、横画面ではなく、画面の縦(Height)もしくは横(Width)が短い(Compact)か長い(Regular)かどうかで制約を設定していきます。CompactかRegularかは端末によって異なります。

![layout.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92886/969f65c5-183e-4e23-f64b-3ff66705906e.png)

* Storyboardを使わずコードで縦画面、横画面それぞれのレイアウトを書くことはできそうです（なんとなく大変そうですが)

## Storyboardの設定方法

実際のStoryboardで設定する時の画面です。詳細は書きませんが、AutoLayoutの制約を縦(Height) or 横(Width)が短い場合(Compact) or 長い場合(Regular) or どちらでも(Any)かで制約を決めていきます。デフォルトは縦も横もAnyの場合ですね。

* フォントとか色とかも場合を分けて設定できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92886/06f466fc-7ed2-e508-60a1-e66a9fcaefad.png)

* 左端に「＋」ボタンがある項目は、そのボタンを押すと設定できます。

次に端末ごとの縦横の長さを表にしました。

※同じ解像度のものは省略
※Split Viewの時も省略

### 縦向き

#### iPhone

| 機種 | Width | Hight |
| :-: | :-: | :-: |
| iPhone 4s | Compact | Regular |
| iPhone SE | Compact | Regular |
| iPhone 8 | Compact | Regular |
| iPhone 8 Plus | Compact | Regular |
| iPhone XS | Compact | Regular |
| iPhone XR | Compact | Regular |
| iPhone XS Max | Compact | Regular |

#### iPad

| 機種 | Width | Hight |
| :-: | :-: | :-: |
| iPad Pro 9.7 inch | Regular | Regular |
| iPad Pro 10.5 inch | Regular | Regular |
| iPad Pro 12.9 inch | Regular | Regular |
| iPad Pro 11 inch | Regular | Regular |
| iPad Pro (3rd) 12.9 inch | Regular | Regular |

### 横向き

#### iPhone
| 機種 | Width | Hight |
| :-: | :-: | :-: |
| iPhone 4s | Compact | Compact |
| iPhone SE | Compact | Compact |
| iPhone 8 | Compact | Compact |
| iPhone 8 Plus | Regular | Compact |
| iPhone XS | Compact | Compact |
| iPhone XR | Regular | Compact |
| iPhone XS Max | Regular | Compact |

#### iPad

| 機種 | Width | Hight |
| :-: | :-: | :-: |
| iPad Pro 9.7 inch | Regular | Regular |
| iPad Pro 10.5 inch | Regular | Regular |
| iPad Pro 12.9 inch | Regular | Regular |
| iPad Pro 11 inch | Regular | Regular |
| iPad Pro (3rd) 12.9 inch | Regular | Regular |


## 横向きの時だけのレイアウトはどうするの？

### iPhoneの場合

色々パターンはありそうですが、そのうちの１つのパターンとして以下のような設定があります。

* WidthをAny、HeightをAnyでのAutoLayoutの制約で縦画面を含むデフォルトのレイアウトを作る
* WidthをAny、HeightをCompactでのAutoLayoutの制約で横画面のレイアウトを作る

### iPadの場合
横画面だけってのはできなさそうですね。。。



iPadは縦向きでも横向きでもiPhoneに比べて正方形に近いので、縦画面も横画面も同じレイアウトで作ってね、って感じですかね

iPadだけまた別のレイアウトにしたい場合は、WidthをRegular、HeightをRegularのパターンでレイアウトを作れば良いですね :ok_hand:
専門用語を知らなくてもわかるビットコイン論文

## ビットコインが発明された目的

電子通貨の取引では通貨が誰から誰に渡ったかを記録する必要がある。
この記録をこれまでは政府や銀行など一つの団体が管理していた。
これを通貨の利用者たちで管理できるようにしたい。

## ビットコインの取引記録の流れ

取引するとき支払い元と支払い先、金額を記録する。
この記録は集められ10分に1回ブロックとして公表される。

## 過去のブロックとの関係

新しいブロックには過去のブロックの情報も含める。このブロック構造をブロックチェーンという。

過去のブロックを変更するとそれに続くブロックも全て作り直す必要がある。

## 考えられる不正行為とその対策

####  他人を支払い元にして勝手に記録をつくる

支払い元が取引記録に電子署名する決まりにする。電子署名は仮名が使えるが、偽造や使い回しが不可能な技術。

####  お金を持っていないのに支払いする

取引の全記録が公表されているから、お金を持っているかどうかもすぐにわかる。

####  ブロック作成者が過去の取引を無効にして、自分自身の支払い額を減らす

ブロックを作る権限を毎回違う人に持たせる。

## ブロック作成者の決め方

各自のコンピュータに早くても10分程度かかる宝探しをさせ、一番早く発見した人をブロック作成者と認める。
発見の早さはブロックチェーンの長さで測る。
参加者を広く募るため、ブロックの作成に成功すると報酬がビットコインで与えられる。

この宝探しをマイニングという。

## ブロックチェーンの安全性

ブロックチェーンの安全性は、攻撃者のコンピュータの処理能力が他の参加者全体を上回らないことが1つの前提となっている。
過去の取引を無効にするには、そのとき以降に他の参加者が作成したブロック数を上回る必要があるが、過去に遡るほど難しくなる。

こうして取引記録が保たれることをプルーフオブワークという。

## 参考
https://bitcoin.org/bitcoin.pdf
使っているvimプラグインURL一覧

githubに直アクセスできない環境用。zipをDLして使います。


https://github.com/Shougo/neosnippet.vim
https://github.com/Shougo/neosnippet-snippets
https://github.com/vim-scripts/vim-auto-save
https://github.com/tomtom/tcomment_vim
https://github.com/terryma/vim-expand-region
https://github.com/bronson/vim-trailing-whitespace
https://github.com/vim-airline/vim-airline
https://github.com/airblade/vim-gitgutter
https://github.com/ctrlpvim/ctrlp.vim
https://github.com/tpope/vim-endwise
https://github.com/Townk/vim-autoclose
https://github.com/scrooloose/nerdtree
https://github.com/jistr/vim-nerdtree-tabs
https://github.com/Xuyuanp/nerdtree-git-plugin
https://github.com/Shougo/neocomplete.vim
https://github.com/Shougo/neosnippet.vim
https://github.com/Shougo/neosnippet-snippets
https://github.com/thinca/vim-quickrun
https://github.com/Yggdroot/indentLine
https://github.com/rhysd/accelerated-jk
https://github.com/tyru/caw.vim
https://github.com/tyru/open-browser.vim
https://github.com/tpope/vim-fugitive
https://github.com/simeji/winresizer
https://github.com/rhysd/accelerated-jk
https://github.com/Shougo/vimproc.vim
https://github.com/vim-scripts/taglist.vim
https://github.com/ervandew/supertab
https://github.com/osyo-manga/vim-monster
https://github.com/todesking/ruby_hl_lvar.vim
https://github.com/ngmy/vim-rubocop
https://github.com/ElmCast/elm-vim
https://github.com/mechatroner/rainbow_csv
https://github.com/mattn/emmet-vim
https://github.com/plasticboy/vim-markdown
https://github.com/aklt/plantuml-syntax
https://github.com/pangloss/vim-javascript
https://github.com/othree/yajs.vim
https://github.com/othree/es.next.syntax.vim
https://github.com/othree/javascript-libraries-syntax.vim
https://github.com/othree/html5.vim
https://github.com/maxmellon/vim-jsx-pretty
https://github.com/ternjs/tern_for_vim
https://github.com/udalov/kotlin-vim
https://github.com/othree/yajs.vim
色々なコードリファクタリングの技術

最近、私はWebアプリケーションに取り組んできましたので、たくさんコードを書きました。しばらくして、私はコードをチェックした、そしてたくさんの悪いコードがあることを見つけました。私はいくつかのコードリファクタリングをするべきであることに気づいた。だから今のところ、色々なコードリファクタリングの種類を説明したいと思います。

# コードリファクタリングとは

基本的に、コードのリファクタリングは、意味や出力を変えずにコードの書き方を改善することです。それはコードをより明確にそしてより単純にできます。コードリファクタリングは開発プロジェクトによって大事なプロセスです。コードがきれいであれば、コードを保守するのはずっと簡単です。それだけじゃなくて、他の開発者がコードを理解できるようにコードが読みやすくなります。

## コードリファクタリングを行うためのヒント

- コードのリファクタリングは、一連の小さい変更として実行する必要があります。それぞれ変更することで、プログラムを正常な状態に保ちながら、既存のコードを少しずつに改善できます。
- コードがきれいになるはずです。
- リファクタリング中に新しい機能を作成しないべきです。
- あなたの仲間のために理解しやすいように作成してください。自分のために書かないでください。
- あなたとあなたのチームがプロジェクトに取り組むのをより簡単にしてください。

## 色々なコードリファクタリングの技術

### Red-green Refactoring
これがリファクタリングの最初のステップです。失敗した"Red"テストから始めて、一番単純なコードを書いて、それから"Green"テストを合格ためにコードを修正して改善します。具体的には、"Red"が良くないコードと"Green"が良いコードです。

### Preparatory Refactoring 

開発者として、次の機能の作成を簡単にするためにコードにいくつかできることがあります。あなたが既にリファクタリングしているようにコードを書きなさい。

### Composing Methods Refactoring

ほとんどの場合、とても長い機能はすべての悪いことのソースです。機能をできるだけ小さくするようにしたり、冗長化コードを機能に変更したり、パラメータを使用したり、いくつかの変数をグループにします。

### Simplifying Conditional Expressions Refactoring 

条件は本当に複雑な論理を持っています。条件式を少なくしたり、重冗長化条件を除くしたり、フラグを除くすることで、条件のコードをリファクタリングできます。

### Simplifying Method Calls Refactoring

クラスたちのやり取りのためのインターフェースを単純化にします。
例：パラメータを使用したり、使用しないパラメータを除くしたり、クエリと変更子を分けるしたり

### Breaking Code Apart Into More Logical Pieces Refactoring

理解しやすいようにコードを小さなコードに分割します。
例：大きな関数を小さな関数に分けるしたり、類似したクラスを1つに交えるしたり、類似したコードを関数に入れます。

### User Interface Refactoring

コードを単純化してもUIは何も変更しません。
例：意味がないdivを除くしたり、共通のスタイルを使用したり、冗長化CSSを除きます。

ソース: 
https://apiumhub.com/tech-blog-barcelona/code-refactoring-techniques/
jQueryの$.each()メソッド

#jQueryの$.each()メソッド
jQueryの$.each()メソッドを使用すると、
配列やハッシュに対して繰り返し処理を行うことができる。

第一引数には繰り返し処理を行いたい配列、
第二引数には取り出した要素に対して行いたい処理を設定する。

##例
前提として、変数inputにはユーザーが入力した値がに代入される

```javascript
    var fruits = ['apple', 'grape', 'orange'];
    $.each(fruits, function(i, fruit) {
      if (input === fruit) {
        $("#result").text(input);
        return false;
      }
    });
```
※第二引数で指定した処理の引数
　第一引数…配列の要素番号(インデックス)
　第二引数…配列の要素

ユーザーが入力した値と配列に格納されている値を一つ一つ比較する。
一致した場合、$("#result").text(input)を実行し、
"return false"で処理から抜ける。
Nginxとphp-fpmのシンタックスチェックをするコマンド

nginxとphp-fpmを使用して環境構築をしていて起動した際によく分からないエラーが出た際にシンタックスチェックをして原因の解決に役立ったのでメモ。

## 起動コマンド（CentOS7）

~~~
sudo systemctl start php-fpm.service
~~~

    sudo systemctl start nginx.service

rootの場合はsudoなし

---

## シンタックスチェックを実行
```
php-fpm -t
```
```
nginx -t
```
$ rails g controller で作られたはずのコントローラが見つからない

##3行で
- なぜかゴミ箱の中の同名アプリの中に作られていた
- 一度削除したアプリと同じ名前のアプリだとエラーになるっぽい
- ゴミ箱を空にして `$ spring stop` を実行してから作ることができた

<b>( ´∀｀)＜詳しく書きますね</b>

##コントローラを作ったけど

railsでコントローラを作成するためには、ターミナルで下のコマンドを入力しますね

```
$ rails g controller コントローラ名
```

すると、たしかに

```
  create  app/controllers/コントローラ名.rb
```

という結果が返ってくるんですが、ディレクトリを見ても作られたはずのコントローラが見つかりません。

##同じ状況の人がいないか検索した

こちらの記事を見つけました。

<b>rails generateコマンドでモデルを生成したはずなのにファイルがない</b>
https://teratail.com/questions/8672

「まさか」と疑いつつ、自分のゴミ箱を見ると、現在作成中のアプリケーションと同名の、過去に消したアプリケーション（なんらかの事情で作り直すつもりで消しました）の `app/controllers/` ディレクトリから、上記で作成したコントローラが出てきました（理由はわかっていませんが、知ってる方がいたら教えていただきたいです）。

##試み 1

かといってゴミ箱のアプリのディレクトリからそのコントローラのみを持ってくるのはよくないと思いました。なぜなら `$ rails g controller コントローラ名` によって作られるのはコントローラだけではないからです。あなたもぼくと同じく、Railsの中身についてよくわかっていないのならば、なおさらやめたほうがいいでしょう。
まず、ゴミ箱を空にしてから、再度ターミナルでコマンドを実行することにしました。

```
$ rails g controller コントローラ名
```

すると、ターミナルが固まってしまい、強制終了コマンドなども受け付けない状態になってしまいました。
あまりやりたくはないのですが、仕方がないのでターミナルのウインドウの✗ボタンを押して終了させました。

##試み 2

『rails g controller フリーズ』で検索し、参考になりそうなものを探しました。その中からひとつだけピックします。

<b>rails generateがハングアップする</b>
https://qiita.com/mom0tomo/items/b3f6c34f48c5dcaef78b

いくつかの記事にも「 `ctrl + c` で強制終了すると下記のエラー文が現れた」とありましたが、ぼくの場合は `ctrl + c` が効かなかったので、エラー文が現れることはありませんでした。

もう一点共通しているのは、どうも `spring` というものが影響している、ということでした。これを止めてみることにします。
ターミナルで下記のコマンドを入力します。

```
$ spring stop
```

その後、あらためて

```
$ rails g controller コントローラ名
```

を入力すると、無事、現在作業中のアプリケーションの `app/controllers/` にコントローラが作成されました。
ちなみに

```
$ spring status
```

と入力すると

```
Spring is running:
```

となっているため、ストップを解除してあげるといった作業は必要無さそうです。

##まとめ

やみくもに試みて直した感じもあるので、正攻法とは言えないのかもしれません（記事どおりの再現でも無かったですし）。
`spring` がなんなのかも正直よくわかっていませんが、ぼくと同じく作り直しグセのある初学者の方にワラのようでも助けになれば幸いです。

<b>( ´∀｀)＜読んでくれてありがとう</b>
Raspberry Piのマインクラフトの画面が表示されない時の対処法

Raspberry Piにはマインクラフトが標準でインストールされているらしい。

あっ、ホントにプリインストールされてる！（今まで興味が無かったから気が付かなかった）
![menu.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353289/313956b8-f044-3c0f-8624-f775317564ba.png)

ただ、マインクラフトを起動してみても画面が真っ暗…
![black.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353289/bae3ba0a-658d-e509-9bad-f837a51c571a.png)

LXTerminalで以下のコマンドで治るらしいということで実行してみたが変化なし。

```
sudo sudo chmod 777 /dev/vchiq
```

どうやらVNC経由で接続するときは、設定を変更する必要があるらしい。

タスクバーにあるVNCマークを右クリック　＞　Options　＞　Troubleshooting　で、「Enable direct capture mode」をチェック。
![trable.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353289/d00dcb1f-5291-1395-f5ac-e0fe11e732f8.png)

マインクラフトのタイトル画面が表示できた。
![minecraft.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353289/c9c9a613-3eb4-9a29-b3b7-e2063f8eef59.png)
UWPでDesktopに固定したいのにできなかった話

## この記事の結論：
UWPデスクトップアプリを作るなら 
**参照→参照の追加→Universal Windows→拡張→Windows Desktop Extensionsにチェック**

使い方とリファレンス：

```CS:Windows.Globalization.JapanesePhoneticAnalyzer
IReadOnlyList<JapanesePhoneme> list = _
 Windows.Globalization.JapanesePhoneticAnalyzer._
GetWords(anyTexts);
```
[JapanesePhoneticAnalyzer Class リファレンスページ](https://docs.microsoft.com/en-us/uwp/api/windows.globalization.japanesephoneticanalyzer)

## 以下、メモがてら動機とやったこと

結論に至るまでの内容なので、時間がある人だけどうぞ。

### 漢字→ひらがなにする良い方法

Windowsアプリケーションで漢字をひらがなに戻す作業をしようとすると、今まではコンソールアプリを作って試してました。しかし、この方法ガ結構な時間がかかる方法で、さすがにこれだけしかないのは厳しいなあと感じてまして、なにか良い方法はないかと探してたところ、以下のような記事を見つけました。

[日本語の読み仮名を取得するには？［UWPアプリ開発］](https://www.atmarkit.co.jp/ait/articles/1511/25/news028.html)

環境は、Win8.1以降、ほぼWin10に限定されるぽいけど、今後はもうWin10以外ターゲットにしなくていいだろう。

これはいい、最高！
早速やろう！

というわけで、UWP開発なんてのはやったこともなく、Windowsフォームでお茶を濁していた関係で右も左もわからず。
それと記事はVisual Studio 2015だけど、今のPCにはVisualStudio2017しかない。ま、なんとかなるだろうと

**新しいプロジェクト→Windowsユニバーサル→空白のアプリ**

で、意気揚々と始めてみたものの、Windows.GlobalizationにJapanesePhoneticAnalyzerなんてクラスは出てこない。

なんかおかしいなあ、もしかしたら、うちのPCではそんなことできないのかな…。という不安もよぎりつつ、VS2015 Communityをいれるか？と考えてもそこはやっぱり入れ直すのもなんかちがう。

UWPは元々、デバイス関係なく動くようにするのが目的なわけですが、ここで「デスクトップ」とわざわざ断る以上、なにかあるんだろうと思ったものの、どこで設定するのかわからず。

探すこと半日
**参照→参照の追加→Universal Windows→拡張→Windows Desktop Extensionsにチェック**
たったこれだけ。

さて、次はTreeViewとかDataGridViewが使えないかを探すことにしよう。
Oracle認定Java Silver SE 8 合格体験記

2019年6月に、Oracle認定のJava Silver SE 8に合格したので、その時の勉強法などをまとめてみました。

# Java Silverとは

* [Oracle社が認定するJava技術者の資格](https://www.oracle.com/jp/education/certification/jse8-2489021-ja.html)の1つで、「開発初心者向け資格」という位置づけになっています。
 * Java Gold：中上級者向け資格
 * Java Silver：開発初心者向け資格
 * Java Bronze：言語未経験者向けの入門資格
* 最上位のGoldを取得するためには、事前にSilverに合格している必要があります。
* なお、[ITSSキャリアフレームワークと認定試験・資格の関係](http://www.ssug.jp/docs/isv/ITSS%E3%82%AD%E3%83%A3%E3%83%AA%E3%82%A2%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%A8%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93%E3%83%BB%E8%B3%87%E6%A0%BC%E3%81%AE%E9%96%A2%E4%BF%82(ISV%20Map%20Ver9r1).pdf)を見ると、Java Silver（OCJP Silver）はITパスポートと同じレベル1に位置付けられています。
 * ですが、実際の試験のレベルはITパスポートよりは難しいと思います。
* 受験料は為替によって変化するかもしれませんが、私が受験した時は26,600円（税抜）でした。
 * これまでに受験した資格試験の中で最も高い受験料だったので、受験申込をするのに少し躊躇しましたが...

# 受験までの大まかな流れ

|実施したこと|実施日|
|---|---|
|受験を思い立った時期|2018/02頃|
|試験に関する情報収集の開始|2018/02頃|
|問題集（白本）の購入|2019/02/11|
|問題集（黒本）の購入|2019/05末頃|
|受験申込日|2018/06/06|
|本格的な学習の開始|2018/06/09|
|試験日|2018/06/29|

* 問題集を2月に買った後、引っ越しや身内の不幸などが相次いだ結果、ずっと勉強せずに4ヶ月ほど経ってしまいました。
* そこで、これではダメだと思い立ち、「先に受験申し込みをして引っ込みがつかない状態にする」という荒業を使いました。
 * そうでもしないと勉強に身が入らない"うつけ者"なのです...
* Javaを使った開発の経験はのべ5年以上あったため、参考書は買わずに問題集だけを買いました。
 * 最初は[Kindle版の白本](https://www.amazon.co.jp/dp/4798142743/)を買いましたが、しばらくは「たまに電車の中で読む程度」でした。
 * 5月末頃に[書籍版の黒本](https://www.amazon.co.jp/dp/4844339931/)を買いましたが、巻末の演習問題以外はほとんど見なかったです。
* 私の勉強スタイルは、[通勤時間でJava Silverを取得しよう！](https://qiita.com/Keitaro-G-21/items/41bf46e123b04e58abdc)の@Keitaro-G-21さんと同じく、通勤電車内で勉強するのがメインで、休日は演習問題を1回分解いたらお終い...というあっさりした感じでした。
 * 通勤電車内での勉強時間が長いとは言っても、単に白本をパラパラと読むだけだったので、そこまで頭に入っていなかったと思います。
 * ですが、これまでにJavaの経験がそれなりにあったので、これで平気だったのだと思います。
* 結局、黒本と白本の演習問題を2周やっただけですが、正解率90%で無事に一発で合格することができました。
 * Javaの経験が5年以上ある人の中では、正解率が低い方だと思います...

# 白本と黒本

* 以下の記事にも書かれていますが、Java Silverの受験者の方から絶大な支持を受けているのが「[黒本](https://www.amazon.co.jp/dp/4844339931/)」です。
 * [Java SE8 Silver はJava開発業務に役立つか！？](https://qiita.com/yutaka_oshiro/items/5d319392e7c5af680420)
 * [０から始め、Java Silver習得した話](https://qiita.com/tnvjwldms1541/items/007ebad66997c854fcfe) 
* 皆さんが指摘されているように、黒本と同じ問題、あるいはほぼ同じ問題が幾つも出題されていたので、黒本は必ず読んでおいた方が良いと思います。
* 白本の問題とほぼ同じ問題も出題されていましたが、白本の問題の方が全体的にレベルが低めなので、黒本の問題を解いて自信と実力を養っておいた方が良いと思います。
 * 白本にも目を通しておけば、様々な問題に対応できるようになると思いますが、費用対効果を考えると微妙かもしれません。

# 最大の難所：受験申し込み

* [こちらの記事](https://qiita.com/Channel/items/31e50323d2b7ee78f7cc)にも書かれていますが、受験申し込みがとても厄介でした。
 * 上記の記事は非常に分かりやすく書かれているので、受験申し込みに迷う前にぜひご覧下さい。
* 受験申し込みの入口が分かりづらいだけでなく、「ピアソンVUEのアカウント」と「Oracleアカウント」を別々に作成するところがとてもややこしいです。

# その他

* 受験後30分程度で、合否を通知するメールが届きますが、私は合否をすぐに確認できませんでした。
* なぜかと言うと、ピアソンVUEのアカウントのパスワードを3回連続で間違えてしまい、それが原因でアカウントがロックされてしまったからです(涙)
* アカウントがロックされてしまった場合は、エラー画面に表示されている連絡先（メールアドレス）へ以下の3点を伝えれば、早ければ翌営業日にロックを解除してもらえます。
 * 名前
 * Oracle Testing ID
 * Oracle.comアカウントのユーザー名（メールアドレス）

# 参考URL

* [Java SE8 Silver はJava開発業務に役立つか！？](https://qiita.com/yutaka_oshiro/items/5d319392e7c5af680420)
* [０から始め、Java Silver習得した話](https://qiita.com/tnvjwldms1541/items/007ebad66997c854fcfe)
* [通勤時間でJava Silverを取得しよう！](https://qiita.com/Keitaro-G-21/items/41bf46e123b04e58abdc)
* [Java Bronze資格試験の申し込み手順がややこしすぎるぅぅぅぅ泣](https://qiita.com/Channel/items/31e50323d2b7ee78f7cc)
【Express】trailing slash(URL末尾のスラッシュ)なしのURLにリダイレクトさせる方法　

## 【Express】trailing slash(URL末尾のスラッシュ)なしのURLにリダイレクトさせる方法　
以下のmiddlewareを使いましょう。

```javascript
  app.use((req, res, next) => {
    if (req.path.substr(-1) === '/' && req.path.length > 1) {
      const query = req.url.slice(req.path.length)
      res.redirect(301, req.path.slice(0, -1) + query)
    } else {
      next()
    }
  })
```
参考: https://stackoverflow.com/questions/13442377/redirect-all-trailing-slashes-globally-in-expre
## 終わりに
私は現在、Web3のサービスの開発をしています。詳しくはこちらの記事をご覧下さい。
        [無料でイーサリアムが当たる、Web3時代の寄付サイトを作った話](https://note.com/kenroda/n/n814347fbdcd7)
ELK7.2の新機能「SIEM」を使ってみた！

# これは何？  
2019年6月26日に`ELK7.2`がリリースされました。
新機能の１つに、「SIEM」というものがあります。
使うためには`filebeat`, `winlogbeat`, `auditbeat`, `packetbeat`などでログを流し込んであげましょう。


<strong>今は概要程度の内容です。そのうちしっかり書きます。</strong>

インストールとかは割愛します。
#### SIEM（しーむ）とは？  
SIEMとは`Security Information and Event Management`のこと。
>和訳：セキュリティ情報イベント管理


# 何が見られる？
## Hostsで見られるもの
### Hostの数  
![hosts_count.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301091/407d9250-59a5-92e2-0211-54922793344e.png)
### ログイン認証した数  
![auth_count.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301091/5be3a0f2-089b-4d99-ba35-8fce13c889c2.png)
### src/dstのIPアドレス（設定してないのでまだ見られない）  
![Unique_IP.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301091/ac65fcd0-269e-4828-958f-ca4244a34924.png)
### Host一覧  
![hosts_list.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301091/3f7be8b4-c2d8-5f99-eab1-fb61408eb196.png)
### ログイン認証一覧
![auth_list.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301091/a22f4b30-df37-0634-a3d0-ad74bc3e64be.png)
### プロセス一覧
![processes.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301091/6277e699-1a2a-0d8f-6535-f1ade2b6b164.png)

## 特定の端末を選択した状態で見られるもの
### MACaddrとかIPaddrとかOSとか
![tanmatsu.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301091/df4b1d9c-4b37-18c4-b84b-19f01ff51e14.png)
### イベント一覧（ページ一番下）
![events.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301091/7077bf79-7100-f23b-e617-631a9d504399.png)


すっごーい！！
【Linux】touchコマンドの使い方とタイムスタンプの意味を解説

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

最近Linuxについて勉強をしていて、そこで基本コマンドのtouchコマンドについて勉強しました。

その時に

**「タイムスタンプってなんの意味があるん？」**

って思って少し調べたので、今回は、touchコマンドの紹介とともにタイムスタンプの意味について紹介します。


#Linuxのコマンドである「touch」とは？

Linuxのコマンドである「touch」では、空のファイルの作成や、更新日時やアクセス日時を刻めるタイムスタンプの変更ができます。

空のファイルを作ることはよくあるかもしれませんが、タイムスタンプの変更ってなんの意味があるんだろう…

僕はそう思いました。

##タイムスタンプの意味とは

どうやらタイムスタンプには2つの意味があるらしいです。

1) 更新日時やアクセス日時を更新して、いつ更新したか・いつアクセスしたかを明らかにする＆その日時以降改ざんがないことを示す

2) ある日時に確かにデータが存在したことを示す

2)の意味は正直予想外でした。

でもよくよく考えれば、共同開発の場合などはこのタイムスタンプは非常に重要ですね。

##コマンド「touch」の基本的な使い方

###空のファイルを作る

空のファイルを作るのは非常に簡単です。

```
touch ファイル名
```

で作れます。

ただし、空のファイルを作成する場合、このファイル名は既に存在するファイル名であってはなりません。

もし存在するファイル名を指定した場合、以下の「タイムスタンプの更新」が実行されます。

###タイムスタンプを更新する
既存のファイルのタイムスタンプを更新する場合、

```
touch 既存のファイル名
```

として実行します。

##コマンド「touch」のオプション

コマンド「touch」にはオプションがあるので、以下で確認してください。

###-aオプション

-aオプションは、**アクセスの日時のみ**を更新するためのオプションで、

```
touch -a ファイル名
```
で、指定したアクセス日時のみを更新できます。
更新はしてないけど、アクセスはしたということを示すことができます。

###-cオプション
上記の「空のファイルを作る」「タイムスタンプを更新する」で述べたように、存在しないファイル名をtouchしたときは、新しい空のファイルが作成されますが、それを阻止したいときにこのオプションを使います。

使い方は、

```
touch -c ファイル名
```

###-dオプション
タイムスタンプの日時を現在ではなく、指定した日時にしたいときにこのオプションを使います。

使い方は、

```
touch --date="2019/7/1 23:00" ファイル名
```

###-mオプション
**最終更新日時のみ**を更新する時にこのオプションを使います。

使い方は、

```
touch -m ファイル名
```

###-rオプション
指定した別のファイルと同じ日時にタイムスタンプを更新したいときにオプションを使います。

使い方は、

```
touch -r 基準となるファイル 更新したいファイル
```

これを知っていると、複数のファイルのタイムスタンプを更新するのが非常に楽になりますね。

#まとめ
今回は、タイムスタンプとLinuxのコマンド「touch」について紹介しました。

これからもどんどん記事をあげていくので楽しみにしていてください！
【Rails】カラムの合計値を求める！

#やりたいこと
保存されているデータの特定のカラムの合計値を出したい！と思いました。
最初考えたのは、

①取得したいカラムのモデルをeach文で１件ずつ取得し、そのデータのカラムを一度配列にする
②↑の配列に対してsumメソッドで合計を求める

これでも全然問題なかったのですが、
sumメソッドの引数で直接カラム名を指定し、合計値を求めることも出来ると知ったのでまとめます！

#カラムの合計を求める方法①
これは私がもともと考えていたやり方です。

```test.rb
#booksテーブルのpriceカラムの合計値を求めたい場合
array = [] #空の配列を用意し、
Book.all.each do |book|
  array << book.price 
  #bookテーブルのレコードを１件ずつ取り出し、priceカラムのデータを配列に入れる
end
array.sum #ここで合計を求める
```

#カラムの合計を求める方法②
次に、もっと簡単な1行でできるやり方です。

```test.rb
Book.all.sum(:price)
```
これだけでいけました。
sumメソッドの引数でカラムを指定できるとは知らなかったです！
とても楽ですね:relaxed:

また、さらにオプションを付けることもできます！
興味のある方はぜひこちらのサイトをご参考ください！
http://railsdoc.com/references/sum