OmniAICreator/Qiita-1.07M huggingface dataset:
Ruby on RailsのStrong Parameters（ストロングパラメータ）について~基礎編~

# はじめに
私は半年間、プログラミングスクールでRuby on Railsを用いたアプリの開発を学びました。
この半年の振り返りとして、HTML(haml), CSS, Ruby on Rails, JavaScript等で理解が難しかった箇所を、アウトプット（解説）していこうと思います！
第１回目テーマは、**『Ruby on Railsのストロングパラメータ』**についてです。

※誤り等ございましたら、コメント頂けたら幸いです

# Ruby on Railsのストロングパラメータって何？
- CRUDを用いたアプリケーション（create、read、update、deleteが出来る）において、フォームからデータベースへデータを登録・変更する際に、不正なデータを送付されるのを防止する機能。

# 具体的には？

- 悪意のある人がサーバーに、改ざんされたデータを送付し、不正行為をすることが考えられる
   - 例）有料会員しか使えない機能がある場合、userカラムのデータを改ざんし、有料会員になりすまして有料機能を利用してしまう...など。。
- そのようなことを防ぐために、フォームから送信されたデータは、ストロングパラメータを経由することで、パラメータ内のどの属性を許可して、どの属性を除外するかを制御される必要がある


# Strong Parametersの使用方法
- ここでは、userが、imageとtextを投稿出来るTwitterのようなアプリを想定します。

  **投稿フォーム**
![スクリーンショット 2019-11-10 19.05.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402722/076f3a50-1af6-6691-606d-5e70a59ab25f.png)

**ER図とassociationはこんな感じです。**
![スクリーンショット 2019-11-10 18.32.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402722/560e81a1-b31c-325c-3506-1b5ef451859b.png)


```
・user
  has_many :tweets

・tweet
  belongs_to :user
```


**ユーザーがつぶやきを投稿（create）する時について考えていきます。**

流れとしては、**投稿画面（new）→DBへ登録(create)です。**

我々がイメージする、投稿フォームからDBへの保存ってこんな感じですよね。
![スクリーンショット 2019-11-10 17.53.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402722/f08abb0b-1c31-c35b-60e1-bad36c4ddf9d.png)




...こんな感じでシンプルに、DBに送れたらいいんですけどね:disappointed:

フォームからsubmitされた**実際のデータを**見てみると、こんな感じでハッシュ形式の物がリクエストパラメータとして送られています。

![スクリーンショット 2019-11-10 14.46.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402722/15fb8a2f-5757-351c-af6e-0319f6583afe.png)


想定していたよりも、だいぶ複雑なデータですね:confounded:

このデータを、**Strong Parametersで、必要な属性値のみを指定し、DBに保存出来る形式に整理**していきます。


コードを見てみましょう！

```ruby:tweets_controller.rb
  def new
    @tweet = Tweet.new
  end

  def create
    tweet = Tweet.new(tweet_params)
    tweet.save!
    redirect_to root_path
  end

private

  def tweet_params
    params.require(:tweet).permit(:image, :text).merge(user_id: current_user.id)
  end
```
ここで見ていきたいのは、private以下の、**tweet_paramsメソッド**です。
このメソッドは、下記のような手順で、paramsをDBに保存出来る形に生成していきます！

１. params.require(:tweet)
  paramsのうち、"tweet" => {"image" =>...}のデータのみを読み込むことを指定

２. .permit(:image, :text)
  1で読み込んだうちの、キー：image, :textの値を読み込むことを指定

３. .merge(user_id: current_user.id)
tweetテーブルには:image, :textの他に、投稿したユーザーを特定するuser_idを格納します。mergeメソッドを使用することで、1、2で生成されたデータ（ハッシュ形式）に、(user_id: current_user.id)という組のハッシュを追加します

**tweet_paramsメソッドで仕上がったデータを見てみましょう**
**(Let's binding.pry:keyboard:)**
![スクリーンショット 2019-11-10 18.01.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402722/b3284d6c-1660-85c2-0578-d23bd921e158.png)

最初のparamsに比べて、断然、スッキリしましたよね:grin:

そして、permittedの値が、**true**に変わりましたね。
これは、strong parametersを経て、許可されたパラメータ以外は除去し、安全にDBに保存出来る形式にしたことの証です。

以上が、Strong Parametersの概要です。
今度は、より複雑なparams(tweetに他のデータも紐付いている場合など)のStrong Parametersの使用方法を書ければと思います。

ご覧いただき、ありがとうございます。
プログラミング、お互い頑張っていきましょう！:keyboard:
Access マクロアクション Calc.exeを起動

#VBAではなくアクションマクロです
Windows電卓、計算機と呼ばれる`Calc.exe`の起動はよくあるマクロで、とても便利です

https://www.moug.net/tech/acvba/0090002.html

##Excelは実はQATにある
Quick Access Toolbarをすべてのコマンドにして「だ」行の読みができる漢字、
電子メールの下に電卓があります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/2ab658a3-6b1b-1549-e5a2-8e823299c36c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/633fc172-e176-7ee5-457c-3e9cba3424a6.png)
電卓は演算誤差がありますし、最新の電卓は異常に使いづらくなっていますが、一応値のコピペができるという特徴があります。
このため電卓で計算した結果をエクセルに再度入力するという手順は、Windows電卓で計算して、その結果をコピペするほうが正確です。
しかし、電卓はこのようにクィックアクセスツールバーに登録できるので、あまり必要がありません。

##AccessはQATにない
Excelと同じようにすべてのコマンドを表示します。
しかし、そのようなコマンドは存在しません。
電子メールの下に、電卓がないのです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/f5bf8ca5-4c17-5167-9af9-3b013e6bce7c.png)

##VBAより手軽なMacroActionで起動する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/66ce17ca-1fd8-6527-4fb5-1db38792df69.png)
作成からマクロをクリックします。
###隠しコマンドを表示
マクロツール　アクションカタログ そしてすべてのアクションの表示の2つをクリックして選択状態にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/d1598c06-73cc-c993-ab83-1b0c5315d08b.png)
アクションカタログに検索バーが表示されているので`アプリケーションの`と入力します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/5ae983f0-2ade-578c-446f-1039dec669f6.png)
するとアプリケーションの実行が表示されます。これをダブルクリックすると、左に命令が入ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/dbc6097e-172e-1d5a-994a-33662a7cfc03.png)
このコマンドラインにcalc.exeを入れて、ctrlキー+wで閉じます。MacroAcrtionの名前は`T_Calc`とします。これは主にツール系のマクロアクションと言えるからです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/45ebb35f-f10e-8d23-0215-a0bdb85608c5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/4516d3f5-acea-618a-731a-95152ef7a078.png)
これでナビゲーションペインのマクロに表示されます。いつでもここから表示できます。
##VBAからでもアクションマクロを使って電卓が起動可能で、コードもシンプル

```vb
Sub RunCalc()
DoCmd.RunMacro "T_Calc"
End Sub
```

シンプルと言うか、そのまんまです。
ところでなぜフルパスでなくていいのかは、おそらく、環境変数を読み込んでいることが原因と考えられます。
###Docmd.Runcommandの補完
https://www.moug.net/tech/acvba/0090028.html
実はDoCmdに直接アプリケーションを実行する命令はありません。
RunCommadにもないです。
このため、このRunMacroを介してアプリケーションを実行する方法が必要になります。

###応用としてNotepad
実はExcelとWordはQATにあるので、いらないといえばいりません。
しかし、Calc.exeと同様に

 - メモ帳なら Notepad.exe T_NotePad
 
というように応用できます。

###英語名はRunApp
大体変わらないので2010でも十分ですが、ここに英語の対応表があります。
https://www.helpforest.com/access/ac_list/ac100002.htm
これによるとマクロアクションのアプリケーションの実行はRunAppになります。
はてなブログのカスタマイズ（brooklyn）自分がやってきたことのまとめ(MarkDownで記事を書く人向け)

### はてなブログのカスタマイズ
 
 自分が今まではてなブログに行ってきたカスタマイズについてひと段落したのでここに貼ります。
自分がMarkdownモードユーザーなのでMarkdownで記事をかきhtmlなどの編集を行わなくてもそれなりの記事になるよう変更しています。
  
#### 完成する記事概要
以下、私のブログです。だいたいこんな感じになります。
https://mahimahironron.hateblo.jp/entry/2019/11/09/docker-compose%E3%83%81%E3%83%BC%E3%83%88%E3%82%B7%E3%83%BC%E3%83%88

※ベースとなるテーマとしてbrooklynを使用していますが、基本、他のテーマでも問題ないと思いますが、ナビゲーションバーのカスタマイズは今回のコードでできないかもしれません。

#### フォントをメイリオにする
 フォントを一般的に読みやすいと言われるメイリオに変更します。
記事コンテンツ内のフォントがメイリオになります。

```css
/* フォントをメイリオにする */
.entry-content {
    font-family: 'Meiryo UI';
}
```

#### ナビゲーションバーの色変更
 Brooklynは画面の上にカテゴリを示すナビゲーションバーを表示することができます。デフォルトでは黒なので、自分好みの色に変更します。
色については以下のサイトで探しましょう。
https://www.colordic.org/search

```css
/* ナビテーションバーの色変更 */
#blog-title {
    border-bottom: 2px solid #a1dbe6
}
.global-menu-list li a {
    background-color: #a1dbe6;
}
#global-menu {
    background-color: #a1dbe6;
    border-bottom: 2px solid #a1dbe6
}
```

#### 見出しのデザインを変更する（h3）
```css
/* 見出しと見出しの文字の色を変更する、角を丸くする*/
.entry-content h3 {
    color: #ffffff; /* 文字の色 */
    background: #a1dbe6; /* 背景色 */
    border-left:0px;
    #border-color: #ffffff; /* 左の境界の色を白に変更 */ 
   /* 角を丸くする */
    border-radius: 10px;/*角の丸み*/
}

/* 吹き出し部分の色の変更 */
.entry-content h3:before {
    border-top-color: #a1dbe6
}
```
#### コードブロックを変更する
はてなブログに限った話ではないですが、コードブロックでは言語ごとの色付け(シンタックスハイライト)を行うことができます。

- ※シンタックスハイライトの付け方
   - 念の為書いておきますがコードブロックを「```python」のように書くことで言語ごとの色付けを行うことが可能です。

```css
/* コードブロックの背景色変更 */
pre.code{
    margin: 0 0 1.5em 0;
    padding: 1em;
    border: 1px solid #dad8d800;
    background: #efefef;
    border-radius: 2px;
}
```

### コードブロックに言語表示
```css
/* 言語名表示 */
pre.code::before {
    content: attr(data-lang);
    position: relative;
    bottom: 1em;
    right: 0.9em;
    background: #8e8e8e;
    padding: 0 0.35em;
    color: #ffffff;
    font-size: 90%;
    line-height: 130%;
    display: inherit;
    width: fit-content;
}
```
### コードブロックの言語表示を言語ごとに色分け
```css
/* 言語名ごとに色分け*/
pre.lang-yaml::before {
    background: #3f5845;
}
pre.lang-sh::before {
    background: #acc100;
}
pre.lang-python::before {
    background: #199e8c;
}
pre.lang-html::before {
    background: #ff9e26;
}
```
### 参考サイト
- https://www.granfairs.com/blog/staff/make-triangle-with-css
  - cssで三角形を表示する方法が乗っています。

- https://saruwakakun.com/html-css/reference/box#section4
  - 有名なサルワカサイトです。
- http://needneoneet.blog.fc2.com/blog-entry-54.html
- https://www.foxism.jp/entry/2017/09/11/165452
  - コードブロックの改造方法がわかりやすかったです。ただhtmlモードむけなのか、Markdownで記事を書いただけではできないように感じました。
- https://www.webprofessional.jp/category/html-css/
JupyterLabで.NETのコードを実行する

Twitterを見ていたら以下の記事が流れてきました。

[Announcing .NET Jupyter Notebooks](https://www.hanselman.com/blog/AnnouncingNETJupyterNotebooks.aspx)

Jupyterの環境で.NETコードを実行できるということで、さっそく試してみました。

# 実行環境

JupyterLabで.NETのコードを実行するためには、以下の環境が必要になります。

> ・.NET Core 3.0 SDK and 2.1 as currently the dotnet try global tool targets 2.1.
> ・Jupyter : JupyterLab can be installed using Anaconda or conda or pip.

# .NETカーネルのインストール

まず、Anaconda Promptを起動し、`dotnet tool install --global dotnet-try`を実行します。
ちなみにですが、私の環境には最初、.NET Core 3.0 SDKが入っておらず、その状態で上記コマンドを実行したところ、下記のエラーが出て怒られました。

![Capture1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530906/3b8db636-8a40-2edd-0c77-ca2058ba5321.jpeg)

.NET Core 3.0 SDKをインストールしたら、正常に動作しました。
インストール前には、きちんと実行環境を確認しないとダメですね。

![Capture2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530906/cf639f25-7eda-3d26-090b-08a8da70fe30.jpeg)

次に、.NETカーネルのインストールをします。
コマンドは、`dotnet try jupyter install`です。

![Capture4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530906/bceedb89-a2cc-e79b-3e50-b97a987c85bc.jpeg)

ちゃんとインストールされたか確認してみましょう。
コマンドは`jupyter kernelspec list`です。

![Capture5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530906/e6488ef9-914f-6a40-c2a0-b1e1d263250f.jpeg)

正常に`.net-csharp`と`.net-fsharp`のカーネルがインストールされていることが確認できました。

# JupyterLabで.NETを動かしてみよう

JupyterLabを起動します。（なお、Jupyter Notebookでも大丈夫です。）
NotebookとConsoleの一覧に`.NET(C#)`と`.NET(F#)`が追加されています。

![Capture6.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530906/c7f87e78-f959-45a2-17bd-43a02b7ea1ca.jpeg)

サンプル通りにコードを実行してみると、ちゃんと動きました！

![Capture7.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530906/0cbdd425-990d-4041-139d-adaef8a4d6fb.jpeg)

# まとめ

Jupyterの環境で.NETコードを実行できる環境を構築しました。
まだまだpythonに比べてできることは少ないかもしれないですが、簡単なコードの確認くらいであればJupyterでやってみるのもいいかもしれません。
micro:bitを工場出荷状態に戻す

#はじめに

micro:bitに初めて通電したときに、内蔵のセンサや機能が試せるデモンストレーションが実行されます。

オリジナルのプログラムを書き込んでしまうと消えてしまいますが、工場出荷時のプログラムが入手出来るので、下記に手順の覚え書きを示します。

ハンズオンなどで使い回しするときなど、事前に初期化する際の参考になれば幸いです。


#１．工場出荷時のプログラムの書き込み

下記のサポートページに、プログラムがあります。

 - https://support.microbit.org/support/solutions/articles/19000021613-first-experience-demo-program

 1. 文章中の`download and flash this .hex file `の部分をクリック
 2. hexファイル`OutOfBoxExperience-v2.hex`をダウンロード
 3. hexファイルをmicro:bitに書き込み

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145581/ade11f68-a14f-ee8d-f51d-314a51676ebb.png)


#２．ファームウェアの更新

micro:bit公式サイトに手順が載ってるので、こちらを参考にしてください。

 - https://microbit.org/ja/guide/firmware/

 1. ファームウェアをダウンロード
 2. micro:bitの**裏面のリセットボタンを押しながら**、**USBケーブルをPCに接続**
 3. 「MAINTENANCE」というドライブ名で接続される
 4. ダウンロードしたファームウェアを書き込む

以上
git push しようとすると Authentication failedと出てpushができない

#　エラー内容
Githubデスクトップでpushしようとすると以下のポップアップが出てpushできない。

![git.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323010/3ff00acd-5d25-faef-e9ff-af42a5c659ca.png)

# 解決方法。
```bash:
git remote set-url origin {new url}
```
{new url} にはsshのURLを貼る
例えば
Githubユーザーネームがhoge 
リモートリポジトリ名がhogehoge
だった場合は

```bash:
git remote set-url git@github.com:hoge/hogehoge.git
```
となる。

# 解決までに試したこと

## sshキーの確認

```bash:
ssh -T git@github.com
```
と入力後

```bash:
Hi hoge! You've successfully authenticated, but GitHub does not provide shell access.
```
と表示されたのでsshの鍵は設定できている

## ターミナルで直接入力

```bash:
git push origin master
```
と入力

```bash:
fatal: 'git@github.com/hoge/hogehoge' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```

と出て、よくわからんとなった。



# 原因
どうやら Live Share拡張機能が原因みたい
(Githubのissueでも上がっていたので
https://github.com/MicrosoftDocs/live-share/issues/1566?fbclid=IwAR2kYkmxwStTbY1G7gG7qQC6_G8Guu-Y61x0KQxsWWtQjUN9vY8F3yPiRNY)

Vscode操作中に
キーチェーンのパスを求める画像がでてきた。
パスワードを入れて「常に許可」を押した後にタイトルのエラーがでた。
なのでsshのアドレスの読み込みがその操作でできなくなり
再度設定することで読み込むことができるようになったのかなと。

# ぼやき
昨日まで操作に問題なかったのでこれといった原因を特定できず。
 `git remote -v`で現在のアドレスを確認したがもちろん、問題なかった。
アドレスの変更をした覚えはないので。思わぬ時間をくってしまった。


参考URL:https://qiita.com/minoringo/items/917e325892733e0d606e
Expoで作成したreact-nativeにstorybookを追加する方法

## 概要
react-nativeを簡単にセットアップしたり便利ツールがまとまっているExpoですが、storybookで扱おうとすると元々react-nativeとstorybookの相性が良くないこともあり、なかなかセットアップできませんでした...:sob:そこで簡単にセットアップする方法についてぐるぐると探していたところ、灯台下暗しでExpoのリポジトリに見つけたので、備忘録代わりにまとめます!:smile:

## 解決方法について

Expoのリポジトリにてまとめられている設定方法が以下になります:point_down:
そちらを見れば以降について見る必要はありません

https://github.com/expo/examples/tree/master/with-storybook

## 手順まとめ

リポジトリに飛ぶのが面倒な人用に以下に同様の手続きをまとめます:raising_hand:

1. `expo init`でプロジェクトを作成します(個人的には`npx expo init`を使ってます)

2. 作成されたプロジェクトに移動し、`npx -p @storybook/cli sb init --type react`によりReact用に設定されたstorybookをインストールします。どうもreact-native-webを使って表示しているっぽいです。

3. 後にstorybookに導入するwebpackの設定用に`yarn add -D @expo/webpack-config`をインストールします

4. `.storybook`配下の`webpack.config.js`に以下の設定を記入します

```javascript

const { resolve } = require('path');
const webpack = require('webpack');
const withUnimodules = require('@expo/webpack-config/withUnimodules');

module.exports = ({ config }) => {
  return withUnimodules(
    config,
    {
      projectRoot: resolve(__dirname, '../'),
    }
  );
};

```

5. `yarn storybook`でstorybookが起動します！デフォルトでは`stories`フォルダにstoriesファイルを作っていく形になっていますが、変更する際などは`.storybook`配下の`config.js`などを触ってよしなにしてください。

## まとめ
react-native面白いのですが、Expoとの相性問題があったり、そもそものreact-nativeとの相性問題があったりして結構思ったように動きが確認できないところが難ですね…。とはいえ、上記のExpoリポジトリのように探せばちゃんとカバーされているので、そこはありがたいです。これからもreact-native/Expoを使っていきたいと思います！:muscle:
[メモ]Linux syslog ファシリティ・プライオリティ一覧

## ファシリティ

| ファシリティ       | ファシリティコード       | 説明|
|:-----------------|:------------------|:------------------|
| kern    |0 | カーネルメッセージ |
| user   |1 | ユーザーレベルメッセージ |
| mail   |2 | メールシステム |
| daemon   |3 | システムデーモン |
| auth   |4 | セキュリティ/認証メッセージ(最近のシステムでは、authprivが使用される) |
| syslog   |5 | syslogdによる内部メッセージ |
| lpr   |6 | Line Printerサブシステム |
| news   |7 | newsサブシステム |
| uucp   |8 | UUCPサブシステム |
| cron   |9 | cronデーモン |
| authpriv   |10 | セキュリティ/認証メッセージ(プライベート) |
| ftp   |11 | ftpデーモン |
| local0~local7   |16~23 | ローカル用に予約 |



## プライオリティ

| プライオリティ       | 説明       |
|:-----------------|:------------------|
| emerg   | emergency:パニックの状態でシステムは使用不可 |
| alert   | alert:緊急に対処が必要 |
| crit   | critical:緊急に対処が必要。alertより緊急度は低い |
| err   | error:エラー発生 |
| warning   | warning:警告。対処しないとエラーが発生する可能性がある |
| notice   | notice:通常では無いが、エラーでも無い |
| info   | information:通常の稼働の情報 |
| debug   | debug:デバッグ情報 |
| none   | none:ログメッセージを記録しない |


※`/etc/rsyslog.d/*.conf`の設定や、`journalctl -p warning`、`journalctl SYSLOG_FACILITY=2`のように使う。

参照：本気で学ぶLinux実践入門
さくらインターネットでWebフォントを設定していたら、ドメイン切り替えで表示されなくなった

さくらのレンタルサーバを使って、初期ドメインから、通常ドメインに切り替えたらフォントが表示されなくなり、焦りました。3時間ほど悩んだ挙句、さくら側の設定がなされていないことが問題だと突き止めました。

なので、その画面をお伝えします。

1. サーバーコントロールパネルにログインする（UIは新旧どちらでも）
2. 画面左下の運用に便利なツールにある[Webフォント]をクリックする。
3. 画面下の「* Webフォント利用ドメインの設定 *」にある、登録ドメインが初期ドメインである事を確認したら、
4. ドメイン設定の「お選びください」をクリックし、該当のドメインを選択して、設定ボタンをクリックします。
![スクリーンショット 2019-11-10 18.59.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18072/bc3103af-a156-7b8b-717a-733a99e8bb36.png)
5. 登録したドメインが登録ドメインに反映されている事を確認します。
　　![スクリーンショット 2019-11-10 18.57.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18072/ce214f66-99b8-5c69-9194-9dab01c5593d.png)
6. 登録されていることがわかったら、ウェブサイトに行って反映されているのか確認してください。

以上となります、お疲れ様でした。
[Vue.js]パスワードの表示・非表示を切り替えるinput

備忘録

---

### デモ
![onclick.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309799/ea9bd4ea-d976-91e1-1a76-06100a1ad214.gif)

[コード(JSFiddle)](https://jsfiddle.net/d_matsuoka/4ou05v7s/)

### 解説
input内のアイコンに、
dataプロパティのフラグを切り替えるイベントを設定する。

```html
<span :class="iconType" @click="onClick"></span>
```

```js
methods: {
  onClick: function() {
    this.isChecked = !this.isChecked;
  }
}
```


inputのtypeを算出プロパティで切り替える。

```html
 <input :type="inputType" id="password" class="input">
```

```js
  computed: {
    inputType: function () {
      return this.isChecked ? "text" : "password";
    },
  }
```

もっとよいやり方をご存じの方がいたら教えてください。
Macに関する操作やショートカットについて 

###MacOS 各種設定
たいていのappは、appの起動画面をアクティブにした状態にすれば
左上のappleマークの右隣に設定メニューが出てくるので、そこで設定を行う。

何もアクティブになっていなければ、MacOSのシステム設定を開ける。

###command + space spotlight検索(windowsでいうファイル名を指定して実行)
 *app名をローマ字指定で検索。起動したいappがトップヒットしてるならそのままエンター。
 - finder(windowsでいうexplorer)
 - slack(コミュニケーションツール)
 - terminal
 - sequel pro(GUIでデータベースの操作を行う)
 - visual Studio Code(テキストエディタ)

###terminal

|コマンド|効果|
|---|---|
|↑/↓|コマンド履歴表示|
|tab|コマンドの頭から数文字打ってからtabを押すことで入力候補表示|

###visual Studio Code(テキストエディタ)

|コマンド|効果|
|---|---|
|command + ↑/↓|ファイル頭/ファイル末尾に移動|
|command + ←/control + a|行頭に移動|
|command + →/control + e|行末に移動|
|command + z|元に戻す|
|command + option + z|やり直し|
|command + w|タブを閉じる|
|command + [|インデントを戻す|
|command + ]|インデント|
|control + o|カーソル部に行挿入|
|command + shift + Enter|カーソル行の上に行挿入|
|command + Enter|カーソル行の下に行挿入|
|shift + option + f|インデント自動整形(htmlは確認済み。他言語は設定が必要？)|
|command + /|コメントアウト|
|control + p/n/f/b|カーソル↑/カーソル↓/カーソル→/カーソル←|
|control + k|選択位置以下の行削除|
|command + control + k|カーソル行削除|
|control + h/control + d|デリート/バックスペース|
|control + r|ワークスペース(プロジェクト)を切り替える|
|control + tab/control + shift + tab|開くファイル(タブ)を切り替える|

#####マルチカーソル [使いこなせば恐ろしい・・・](http://mugi1.hateblo.jp/entry/2018/12/11/215808)
|コマンド|効果|
|---|---|
|(文字選択状態で)command + d|同じ文字列を順次選択する|
|(文字選択状態で)command + shift + l|同じ文字列を一括選択する|
|option + クリック|任意の位置にカーソルを複製|
|(文字選択状態で)option + shift + i|選択文字の各々右端にカーソル移動|

HTMLとCSSはEMMET記法で展開
RHEL 8 で Ruby 2.5 から Ruby 2.6 へアップグレード（AppStream）

# はじめに

Application Stream(AppStream)を利用してRHEL8にRuby2.6をアップグレードインストール
参考：[ユーザー空間コンポーネントのインストール、管理、および削除 Red Hat Enterprise Linux 8 \| Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html-single/installing_managing_and_removing_user_space_components/index#switching-to-a-later-stream_managing-versions-of-appstream-content)

## サポート

各Streamのサポート期間は[Red Hat Enterprise Linux 8 Application Streams Life Cycle - Red Hat Customer Portal](https://access.redhat.com/node/4079021)を参照。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### Ruby2.5(default)インストール

```shell-session
# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.1 (Ootpa)

# yum install -y ruby
... 略

# ruby -v
ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux]
```

### Stream切り替え

```shell-session
# yum distro-sync
# yum module reset ruby
# yum module enable ruby:2.6
# yum distro-sync

# ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
```
RHEL 8 で PHP 7.2 から PHP 7.3 へアップグレード（AppStream）

# はじめに

Application Stream(AppStream)を利用してRHEL8にPHP7.3をアップグレードインストール
参考：[ユーザー空間コンポーネントのインストール、管理、および削除 Red Hat Enterprise Linux 8 \| Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html-single/installing_managing_and_removing_user_space_components/index#switching-to-a-later-stream_managing-versions-of-appstream-content)

## サポート

各Streamのサポート期間は[Red Hat Enterprise Linux 8 Application Streams Life Cycle - Red Hat Customer Portal](https://access.redhat.com/node/4079021)を参照。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### PHP7.2(default)インストール

```shell-session
# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.1 (Ootpa)

# yum install -y php
... 略

# php -v
PHP 7.2.11 (cli) (built: Oct  9 2018 15:09:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
```

### Stream切り替え

```shell-session
# yum distro-sync
# yum module reset php
# yum module enable php:7.3
# yum distro-sync

# php -v
PHP 7.3.5 (cli) (built: Apr 30 2019 08:37:17) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.5, Copyright (c) 1998-2018 Zend Technologies
```
Redux + Clean Architecture の構造イメージ

# 背景
前回、`Redux+RxSwift`のデーターフローをイメージで覚えようとしました。
個人的には文章を読むだけより、色付きのイメージを覚えておきたいというのが役立ちました。

今回`CleanArchitecture`を`Redux`と一緒に使用することになったのでどこがどうなっているのか前回のイメージを使用して記す。
なお、ディレクトリ構成等は人によって違うと思います。

# やること

- Redux + CleanArchitecture を掛け合わせた時どこに何があるかとか

# やらないこと

- レイヤー毎の詳しい説明

こちらあたりが詳しく書かれております。
参考：
[実装クリーンアーキテクチャ](https://qiita.com/nrslib/items/a5f902c4defc83bd46b8)

# その前に
軽くそれぞれのアーキテクチャの説明。

### Redux

- データの動きは一方向
- 通信系処理などはActionCreatorに積まれることが多い
- ActionCreatorとMiddlewareに処理を積むことで拡張性が上がる
- ちょくちょくRxSwiftとセットで利用される
- GUIアーキテクチャ

### Clean Architecture

- Modelの内部部分まで切り込んだ設計
- データベースへのアクセスレイヤーなど各責務を持ったレイヤーが細かく分かれている
- MVVM+CLや、Redux+CLといったような活用が可能

# 構造イメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274090/305b5c2a-36fb-6477-6ef4-7828d23d106e.png)


# 使用上のポイント

- `State` `Reducer` `Action` は `Entity`
- `ActionCreator`(データをどうこうするロジック)は`UseCase`
- `Reducer`によって変更された`State`は`RxSwift.subscribe`されることで`View`に反映される
Redux(ReSwift)+RxSwift のデータの動き図

# 背景
業務で今まで触れたことのなかった**Redux**というアーキテクチャに触れることが多く、最初より慣れてきた気がするので忘れないように、より定着できるようにメモがてら書いておきます。
割と断捨離して大枠を記憶するイメージで記します。
文章の説明はたくさん上がっているので、それらをざっくりまとめて一枚絵で覚えたかった次第。

# 内容
### やること
- ReduxとRxSwiftを使っている場合のデータの動きを絵で記す

### やらないこと
- Redux、Rxのそれぞれ構造の詳しいお話

設計の説明を細かくしないので`Redux`の理解はこちらなどで。
参考：

- [ReSwift Docs](https://reswift.github.io/ReSwift/master/getting-started-guide.html)
- [Redux+Rxを活用したiOSアプリアーキテクチャ](https://qiita.com/susieyy/items/23d44f28c6a6915c58e2)
- [Create Redux Sample App](https://www.raywenderlich.com/516-reswift-tutorial-memory-game-app)

# 構造イメージ
詳しいことは上記等で。

#### 使用されるアイテム

- Redux
- ReSwift
- RxSwift

![redux.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274090/07ef1f56-bcb3-b6cb-2ee1-ea94ea88d785.png)

#### 特徴
- データの動きは一方向
- イベントに値する`Action`が、`dispatch`に乗せられて`state`に届けるイメージ
- 通信系処理などは`ActionCreator`に積まれることが多い
- `ActionCreator`と`Middleware`に処理を積むことで拡張性が上がる
- 処理全体に`RxSwift`を使用することによって、データが単一方向へ流れることと統一性が出る

#### 使用上のポイント

- API処理などは`ActionCreator`内で作成
- RxSwiftを使用することで通信の並列・直列処理がしやすい(`.zip`等で**Y**こんな感じでフローをまとめたり)
- `Middleware`は`action`と`Reducer`の間に挟む処理なので、logを書き出してあげたり、別のactionを読んであげたりと、一連の処理の間に拡張をもたせたい時に使用できる。
laravelでfontawesome-free

インストール


```
npm install @fortawesome/fontawesome-free --save
```

app.scssに入れれば良い。
リソースのsassの所にいる。


```:app.scss

// Fonts
@import url('https://fonts.googleapis.com/css?family=Nunito');

// Variables
//@import 'variables';

// Bootstrap
@import '~bootstrap/scss/bootstrap';

#app {
    background-color: #f8fafc;
}

#追加
$fa-font-path: "~@fortawesome/fontawesome-free/webfonts";
@import "~@fortawesome/fontawesome-free/scss/fontawesome";
@import "~@fortawesome/fontawesome-free/scss/solid"; // fas
@import "~@fortawesome/fontawesome-free/scss/regular"; // far
@import "~@fortawesome/fontawesome-free/scss/brands"; // fab



```


あとはphpかhtmlかvueから呼べば良い。


```:hoge.html
<i class="fas fa-camera"></i>
<i class="far fa-bell"></i>
<i class="fab fa-css3"></i>
```




# 参考

https://headsigned.com/posts/importing-and-using-font-awesome-with-vue/
csvファイルのマージ（bat）

背景
　RPA化案件で
　　①システムからcsvデータをDL（複数）
　　②DLしたcsvデータをマージ
　　③マージしたデータをExcel台帳に貼付け
　というような要求事項があり、②の実現方法について検討した。

方法
　バッチ（bat）によるマージの方法を今回は採用した。
　
　なお以下のコードは、マージ元がヘッダー付であり、マージ先に予めヘッダーを記入しておく必要がある。

```bat:merge.bat
@echo off

# csvファイルの数だけ繰り返し処理
for /f %%i in ('dir /b *.csv') do (

    # csvファイルの2行目以降のすべてのデータを「merge.csv」に追加
    for /f "tokens=* skip=1" %%b in (%%i) do (
        echo %%b>>.\merge\merge.csv
    )
)
```

以下の条件で、マージは実現できる。
　・ローカル環境の同一フォルダ配下にバッチファイルおよびマージ元ファイルを置く
　・バッチファイル格納先フォルダ配下にmergeフォルダを作成し、マージ先ファイルを置く
OWASP_ZAPをAdoptopenJDK(Windows10)で使う

#1.JDKの乗り換え
OWASP_ZAP(2.8.0)はJDK8を利用していますが、OracleJDKのライセンス変更に伴い商用利用は2019年1月まで、個人利用は2020年1月以降OracleJDK8のアップデートを使う場合はOracleの有償サポートが必要となります。
WindowsではOracleJDK以外をあえて使う理由はかつてはありませんでしたが、これを機に無償で配布されているAdoptOpenJDKに乗り換えてみました。
#2.乗り換えたらOWASP_ZAP(2.8.0)が起動しない
AdoptOpenJDKのサイトからOpenJDK8をダウンロードし、インストールします。
HotSpotでもOpenJ9でもどちらでも構いません。
OracleJDKをアンインストールし、実行したところ
![JREnotfound.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233381/54999557-dd2e-69df-fca5-a05268ad2e77.png)
 JAVA_HOME,JRE_HOMEを設定するとか～.batで直接指定すれば実行できるようにはなりましたが、ショートカットからの起動はやっぱりだめでいまいち。　

#3.AdoptOpenJDKの再セットアップ
AdoptOpenJDKの「変更」を行います。
![resetting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233381/a92b431d-f636-871c-4ea3-9d93eb9b843d.png)
「JavaSoft(Oracle) registry keys」をインストール
![setting.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233381/5aab512f-a35e-07c8-9e71-cfb2f7ecc50a.jpeg)
無事AdoptOpenJDKでOWASP_ZAPが起動するようになりました。
![openjdksuccess.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233381/935da5dd-ca38-b049-5292-cddec72d18e6.png)
AWS SAMの環境変数設定方法

## AWS SAM とは
[https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/what-is-sam.html](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/what-is-sam.html)

`AWS SAM` でGoogle先生に聞けば、色んな回答が出ます。

## Background
`Lambda` のローカルテストよく使われるツールで、`template.yml` に `Lambda` や `API Gateway` の設定を書いて、`AWS SAM CLI` から実行し、テストします。

## Example
```yaml:template.yml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Runtime: nodejs10.x
    Handler: index.handler
    Timeout: 10
    MemorySize: 1024
    Environment:
      Variables:
        DYNAMO_ENDPOINT: DUMMY_ENDPOINT

Resources:
  A001:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ../build/A001/
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /groups
            Method: GET
      Environment:
        Variables:
          TABLE_GROUP_WORDS: DUMMY_GROUP_WORDS
```

## Goal
`DUMMY_ENDPOINT` と `DUMMY_GROUP_WORDS` を置き換えます。

## Start Command
```
sam local start-api -t template.yml --env-vars vars.json
```

## Implement
`Globals` と `Resources` sectionの書き方が違います。

```jsonc:vars.json
{
  "Parameters": { ## Globals Section
    "DYNAMO_ENDPOINT": "http://host.docker.internal:4569"
  },
  "A001": {  ## Resources Section
    "DUMMY_GROUP_WORDS": "T_GROUP_WORDS"
  }
}
```

## Summay
`Globals` は **Parameters** で設定し、`Resources` は実際の **Resource** 名となります。
新Github Actions を使って npm audit fix と PR 作成を自動化してみた

Security Alerts に怒られる前になんとかしたい！

## やりたいこと

Node.js であれば```npm audit fix```で行える依存ライブラリの更新のような保守作業…。
日頃意識していないとなかなか手につかないので自動で Pull Request 作成までできるようにしたい。
欲を言えば、Approve や Merge も自動でやってほしい。（今回はやらない）

## Github Actions

11月13日ごろに正式リリースとなる Github Actions のβ版を試してみました。

### なぜ Github Actions なのか

[Github Marketplace](https://github.com/marketplace?type=actions) で公開されているツールを使って Workflow が組めるので、他の CI/CD サービスよりも Github の操作がしやすいのではと思いました。

## 実装

今回は [Create Pull Request](https://github.com/marketplace/actions/create-pull-request) を使って PR作成までを自動化することにしました。

Github Actions は Push や Create Pull Request がトリガーできる他、スケジュール起動ができるので今回はそれを使ってみます。
（Security Alerts で発火できるようにならないですかねー）

Push トリガーや、Pull Request トリガーはそのブランチ上で Workflow が実行されますが、 スケジュール起動の場合は master ブランチ上でのみ動作します。Workflow も master ブランチ上に置いてあるものが読み込まれます。

こんな感じで Workflow を用意し、master ブランチに展開します。
スケジュール設定はなんとなくで週一としました。

[Create Pull Request](https://github.com/marketplace/actions/create-pull-request) は Github のアクセストークンを使うので、リポジトリの "Settings" -> "Secrets" から予め登録しておきます。

``` ./.github/workflows/createPullRequest.yml
name: Create Security Fix Pull Request
on:
  schedule:
    - cron: '0 3 * * 3' # 毎週水曜日の正午に実行 ( 12+JST = 3+UTC )

jobs:
  patch:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/setup-node@v1 # Node.js 環境の構築
        with:
          node-version: '10.x'

      - uses: actions/checkout@master # リポジトリを読み込み

      - run: npm install -g npm

      - run: npm -v

      - run: npm audit fix

      - name: Create Pull Request # ブランチを作成して PullRequest を作成
        id: cpr
        uses: peter-evans/create-pull-request@v1.7.0
        with:
          title: Security Update into master.
          labels: Auto PR
          branch: securityFix #作成されるブランチは securityFix-xxxxxxx
          token: ${{ secrets.GITHUB }}
```

## 動作確認

こんな感じに Workflow が動き、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172469/d4b00bf4-2e63-7e78-af07-66e5d4833df7.png)

PR が作成されています。（Approve、Merge は手動です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172469/a2658165-e71f-2dfa-8f50-5d54f33c389c.png)

## 感想

今回は Pull Request 作成まででしたが、[Auto Approve](https://github.com/marketplace/actions/auto-approve) や [Merge pull requests](https://github.com/marketplace/actions/merge-pull-requests) を組み合わせればリリース作業も完全に自動化できそうです。
Excelでトレース＆CADしたい

# 目的： 3Dプリンタ向けデータ作成の効率化

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145884/b0536600-169a-94a4-80fa-a66ece6e1453.png)
(先に結果を言っておきます。今回はカメラで得た画像からエッジ検出し、その座標データをテキスト化しその先のCADソフトに渡す**Excelアドイン**を作成中です - [github](https://github.com/WaToI/xlTraceDNA)）

私は趣味で電子工作を行っており、3DプリンタでABS製のケースや治具など作っています。
しかし、安いFDM（熱溶解積層法）３Dプリンタを使用しているため、一度で狙い通りのアウトプットを得ることが難しいです。
作成するものは単純形状ですが、設計通りの寸法になっていないと「はまらない」「しまらない」等の問題により、微調整して再プリントを繰り返すことになります。
この微調整作業を簡単に行うために、形状データの作成を[OpenSCAD](https://www.openscad.org/)というスクリプト型CADソフトによる数値入力によるモデリングを行っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145884/a15d10f3-425a-2e2a-70f3-3de15ce5843d.png)

## データ作成作業の問題点

* 既存の形状にぴったりフィットする形状を目指すため微妙なカーブ形状にしたいが出来ない（プリント後に加工するのが面倒）
* 
## 解決案

* 既存形状をトレースし形状データを作成する

## 実践プラン

* 既存形状をトレースするには3Dスキャナがあれば良いのだが、既製の家庭向け3Dスキャナで形状データを取得しても、そのまま使える精度(±0.1m)が得られるとは思えないので、自分で何とかする。
* 自分用のものづくりのときは、思い付きでさらっと設計するためプロっぽいことはしない。めんどくさいことはできるかぎりやらない。

> KinectやRealsenseで2D画像と深度による3D計測すれば・・・特殊なカメラだと誰でも使えない。というか売ってるものを買うほうが早い。3D計測はあきらめて、正確な2Dの面データを作成し複数の面データをCADで手作業でくっつけて3D化することにする。


画像からエッジ検出し、その座標データをExcelに送る
あとは罫線とオートシェイプで2D図面を書けばいい。

エクセルを使えば、専用ソフトを探して使い方を覚える必要がないので誰にでも使えるものができるはず
こういう専用ソフト・機能は既に存在しているが、おまけ機能程度のお遊びレベルのものしか知らない。いいのがあったら教えてください（２万円まで）

## 作ったもの ＆ 使い方
![capture.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145884/6fef49fb-5fa4-33ad-9c63-fa0ecf6dfd41.gif)

1. windows10 office2010以降のPCとusbWebカメラ（内臓も可）を用意する
* xlTrace-AddIn-packed.xllを[ダウンロード](https://github.com/WaToI/xlTraceDNA/releases)してダブルクリックで開く（Excel立ち上がる）
* 新規ブックを開く（既存ブックも可）
* リボン：アドインxlTrace-Capture（別ウィンドウ開く）
* カメラに映ったものが白黒変換して表示されるので右上のTakeOneShotをクリックする（Excelオートシェイプにする）
* 取り込まれたAutoShapeを選択し、リボン：アドインxlTrace-SelectionFreeformToOpenSCADを押す。
* クリップボードにOpenSCAD向けスクリプトが書き出される

## あとがき

* 3Dプリンタtipsとかあればコメントにて教えてください

* [github](https://github.com/WaToI/xlTraceDNA/releases)に公開
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145884/79cddfae-4ae8-f696-e6b6-1c999b5d79f2.png)

> Excelの32/64bitは別なので自分の環境に合わせたものをダウンロードしてください。

* Excelアドイン開発方法についてニーズがあれば解説記事を書きます。コメント下さい

> ソース解説もしようと思ったけど作ったものの紹介記事を書くだけで力尽きました・・・
解説できるのは独自リボンタブの実装・作業ウィンドウの実装・高速処理tipsくらい。もちろん我流です。
.NetでのExcelアドインの作成の難点はどうやってExcelに組み込むのか？だけで、実装方法はVBAをC#に書き換えるだけです。組み込む部分はVSTO・ExcelDNAがやってくれるのでVBAを書く力とWindows向けアプリの実装力があれば誰でもできます。難点は昔ながらのCOMなのでインスタンス開放忘れ＝メモリリークとなり、Excelを閉じたのにプロセスに残り続ける現象に陥りやすいです。いい加減になんとかしてほしいのだけど、MSでもどうにもできないのだろう・・・
> また、Excelアドインの開発は通常はVSTOを使うと思いますが、VSTOで作ると「インストールしないと使えない」点が個人的に気に入らないためExcelDNAを使っています。所見では*.vstoって何？アンインストールの仕方がわからないという事態になった。
ExcelDNAは*.xllをダブルクリックするだけ！シングルバイナリだし素晴らしいね![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145884/49562336-0f6c-76f0-f71d-db56aefdc3d7.png)

* まだカメラからの取り込みしか実装していないので、使い物にならない。

> ほんとはスクリーンキャプチャで罫線取り込みから実装したかったのだけど大人の事情で出来なかった。今後スクリーンキャプチャ、色フィルタ、範囲指定などをやりたい
Macで仮想環境を構築する（Virtual box+Vagrant）

#はじめに
Macで仮想環境を構築しましょう
仮想環境とはPCの中にもう一つPCを作るというイメージです

プログラミング初心者の方に是非やってもらいたいです！
最初は記事などを参考に環境構築をしていくと思いますが、そこで設定を間違えたりすると後々めんどくさいことになります。
以前、私も環境構築した時にミスして時間を取られまくり泣きそうになりました。
皆さんにはそんなことにはなって欲しくないので、

**この記事で仮想環境を構築してみてください！！**


#前提
ホストOSMac
　　macOS(Mojave)
使用するツール
　　virtual box
　　　　仮想環境を作成するツール
　　vagrant
　　　　仮想環境を操作するツール

#仮想環境を構築しましょう
それでは仮想環境を構築していきましょう
##VirtualBox、Vagrantのインストール
下記の公式サイトからVirtualBox、Vagrantダウンロードしてください
ダウンロード後は指示に従いインストールしてください

**VirtualBox　公式サイト**
　　https://www.virtualbox.org/wiki/Downloads

**Vagrant　公式サイト**
　　https://www.vagrantup.com/


インストール終了後、PCを再起動してください

##vagrant-vbguestのインストール
ターミナルからプラグインのvagrant-vbguestをインストールしましょう

```:ターミナル
$ vagrant plugin install vagrant-vbguest
```

##共有ファイルの作成
vagrantで操作するファイルを作成していきます
これから作るファイルが仮想環境で操作するファイルです
作成するファイル名vagrantは好きな名前をつけてください

###ファイル作成

```:ターミナル
$ cd Desktop
$ mkdir vagrant
$ cd vagrant
```

###vagrantの初期設定
vagrantの初期設定しましょう

下記のコマンドで仮想環境のOSの一覧を表示しましょう

```:ターミナル
$ vagrant box list
```

下記が実行結果の例です。

```:実行結果
ubuntu/bionic64 (virtualbox, 20190705.0.0)
```

下のコマンドを打つとvagrantfileが作成されると思います

```:ターミナル
$ vagrant init ubuntu/bionic64
```

**これで環境構築は完了です！！**

#Vagrantの基本操作
vagrantの基本操作について解説します

##vagrant起動
下記のコマンドがvagrantを起動させるコマンドです
初回は時間がかかる１〜３時間時があります

```:ターミナル
$ vagrant up
```

##ssh接続開始
下記のコマンドでssh接続します
こちらのコマンドで仮想環境に接続できます

```:ターミナル
$ vagrant ssh
```

##共有ファイルに移動
仮想環境で共有しているファイルに移動します
/を忘れずにつけてください

```:ターミナル
$ cd /vagrant
```
##接続切断

```:ターミナル
$ exit
```
##vagrantシャットダウン
```:ターミナル
$ vagrant halt
```

#参考記事

MacにVagrantでCentOS7環境を作成
https://qiita.com/sudachi808/items/3614fd90f9025973de4b

**疑問、気になるところがございましたら、質問、コメントよろしくお願いします！！！**
初学者のためのAWS入門(6) - Lambdaでサーバレス実行してみる

ここでは、AWSを基礎から学ぶ人向けに必要な情報をまとめていきます。
#### 初学者のためのAWS入門シリーズ
- [初学者のためのAWS入門(1)] (https://qiita.com/mshinoda88/items/e7557227f7060b52d8ae) 
- [初学者のためのAWS入門(2) - CloudFormation入門1] (https://qiita.com/mshinoda88/items/c5b238212c2de850efdd) 
- [初学者のためのAWS入門(3) - CloudFormation入門2]
(https://qiita.com/mshinoda88/items/65e7e145c7ec943af403) 
- [初学者のためのAWS入門(4) - S3でBasic認証を設定してリポジトリを公開](https://qiita.com/mshinoda88/items/dfb1ee355fbcb08e47e5)
- [初学者のためのAWS入門(5) - S3+Athena+QuickSightでデータ分析結果の可視化](https://qiita.com/mshinoda88/items/54d1d8c3b660e88e6198)
- [初学者のためのAWS入門(6) - Lambdaでサーバレス実行してみる](https://qiita.com/mshinoda88/items/1b44f2a19c0a0895ab60)

# 1. Lambdaとは
Lambdaはサーバーのプロビジョニングや管理を行わずにコードを実行してくれます。
イベント駆動によえい処理を実行する環境で、「難しいサーバー構築などが不要で簡単にアプリのコードが動かせます」

## 1-1. 特長
- 最大のポイント：EC2のような仮想サーバを立てる必要がない。（サーバレス）
- コンピューティングのオートスケール<br>
つまり、処理件数が増えてくると、自動的に実行ユニットを増やして並列にスケールアウトしてくれる。CPUやメモリを使用率に応じてオートスケール設定を調整するなどの作業は不要。
- 低コスト少ない労力でサービスを開発できる
- API Gateway をエンドポイント（ただのURLとして）とし、組み合わせて利用することで、簡単なWebサービスやAPIサービスを公開できる。<br>
時間帯によってアクセス数の変動が多いサイトや、特別な日だけアクセス数の急増するサイトに効果的。

## 1-2. 注意点
- 稼働時間やステートレス、リレーショナルデータベースとの相性があり、全てをEC2からLambdaに置き換えることは困難。
- 以下のような場合は向いていない。
    - 1回の処理時間が長いワークロード
    - 24時間絶えずリクエストがあるWebサービス

# 2.料金
関数を実行するのにかかった時間だけ料金がかかります。

- コードを実行していない時は課金されません。
- ミリ秒単位の課金<br>
AWS Lambda では、コードが実行される 100 ms ごと、およびコードがトリガーされた回数に対して課金されます。
- 毎月1,000,000 件のリクエストは無料<br>
以後は 1,000,000 件のリクエストあたり 0.20USD

# 3.スペックと制約

| 項目       |値 | 
|:-------------|:------------------|
| ディスク容量    |512MB | 
| メモリ         | 128Mbyteから1536Mbyteまで|
| タイムアウト     |最長15分 |
| ペイロード     |リクエストとレスポンスの本文のペイロードは最大6Mbyte |
| イベントリクエストの本文     |最大136Kbit |
| 同時実行数     |ソフトリミットで、リクエストに応じて増やせる |

- デプロイのパッケージサイズとファイル記述子の最大数に制約を受けます。
- コードがトリガーされる回数の基づいて、実行時間の1ミリ秒ごとに構築されます。

# 4.連携するAWSサービス
## 4-1. Lambda がイベントを読み取るサービス
- Amazon Kinesis
- Amazon DynamoDB
- Amazon Simple Queue Service

## 4-2. Lambda 関数を同期的に呼び出すサービス
- Application Load Balancer
- Amazon Cognito
- Amazon Lex
- Amazon Alexa
- Amazon API Gateway
- Amazon CloudFront (Lambda@Edge)
- Amazon Kinesis Data Firehose
- AWS Step Functions

## 4-3. Lambda 関数を非同期的に呼び出すサービス
- Amazon Simple Storage Service
- Amazon Simple Notification Service
- Amazon Simple Email Service
- AWS CloudFormation
- Amazon CloudWatch Logs
- Amazon CloudWatch Events
- AWS CodeCommit
- AWS Config
- AWS IoT Events

# 5.lambdaのモデル
## Pushモデル
- S3／Cognito／SNSなどのAWSサービスとカスタムイベントが直接実行することにより起動するLambdaファンクション
- サービスもしくはアプリが直接実行する
- 3回までリトライ
- さらに細かくわけるとリソースによって処理結果をレスポンスとして受け取る同期呼び出しと処理の完了は待たない非同期呼び出しがサポートされている。

## Pullモデル

- DynamoDBとKinesisなどのデータ処理はLambdaに対して直接的にイベント発行を行わないためLambdaがそれらへポーリングを行い自らイベントを取得
- 上記のようなストリームベースとSQSのキューベースがある。
- ストリームに入ってきた順に処理される
- イベントソースとして登録したストリームに対してLambdaが自動的にデータ取得などのファンクションを実行する
- イベントごとに複数レコードを取得可能
- データが期限切れになるまでリトライ

# 6. 触ってみよう

AWS Lambda とりあえず触ってみた
https://qiita.com/leomaro7/items/d8d8d4e10214115fc188
フォームアプリケーションに疑似Update関数を実装し，コンソールで確認する

#概要
WindowsフォームアプリケーションでUnityのUpdate関数のような毎フレーム自動更新する環境を実装してみました
また，フォームアプリケーションでコンソールを使う方法も今回調査してわかったので共有
#環境
windows10
Visual Studio 2019
#実装
プロジェクトの作成までは[過去記事](https://qiita.com/miwazawa/items/50cf5b913b058f59daa6)を参照してください
###コンソールをフォームアプリケーションで実装する
1.プロジェクトを作成したらまずform1を右クリックして，コードの表示を選択してコードを表示する

2.以下のコードを入力

```cs:Form1.cs
public partial class Form1 : Form
    {
        [System.Runtime.InteropServices.DllImport("kernel32.dll")]
        private static extern bool AllocConsole();
        public Form1()
        {
            InitializeComponent();
            AllocConsole();

            Console.WriteLine("hogehoge");
        }
    }
```
実行すると，フォームとコンソールウィンドウの2つが表示され，Console.WriteLineが使用可能になる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/518001/bc6d4292-c9db-545e-ec3a-9ac8b061175d.png)

###Update関数の実装
Form1_Activatedイベントを追加し，そこでWhile(true)を回す方法もあるが，邪魔になりそうなので今回はbackgroundWorkerを使用し，個別にUpdate関数を実装することにする

1.ツールボックスから「backgroundWorker」をform1上にD&Dし，ダブルクリックしてbackgroundWorker1_DoWorkイベントを追加する

2.backgroundWorker1_DoWorkに以下のコードを入力


```cs:Form1.cs
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            while (!backgroundWorker1.CancellationPending)
            {
                Console.WriteLine("hoge");
            }
        }
```
3.BackgroundWorkerのプロパティタブで下図のように「WorkerReportsProgress」「WorkerSupportsCancellation」の2つをfalseからtrueに変更する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/518001/1842031d-f140-f34c-b18a-39beac631c04.png)



4.FormClosingイベントを追加し，下記コードを追加(詳しいやり方は[過去記事](https://qiita.com/miwazawa/items/50cf5b913b058f59daa6)参照)


```cs:Form1.cs
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //スレッドの終了を待機
            backgroundWorker1.CancelAsync();
            Application.DoEvents();
        }
```
5.Form1関数に


```
backgroundWorker1.RunWorkerAsync();
```
を書き加えて完成
一応namespace以下のコード全体を載せておきます

```cs:Form1.cs
public partial class Form1 : Form
    {
        [System.Runtime.InteropServices.DllImport("kernel32.dll")]
        private static extern bool AllocConsole();
        public Form1()
        {
            InitializeComponent();
            AllocConsole();

            backgroundWorker1.RunWorkerAsync();

        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            

            while (!backgroundWorker1.CancellationPending)
            {
                Console.WriteLine("hoge");
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //スレッドの終了を待機
            backgroundWorker1.CancelAsync();
            Application.DoEvents();
        }
    }

```
#実行結果
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
...

失礼しました
これでUnityっぽい感覚を少しでも得られるかも
#参考URL
コンソールの表示方法
https://www.wareko.jp/blog/output-text-string-to-console-window-with-windows-form-application-in-c-sharp
英語嫌いが英語の仕様書を読む羽目になったとき

※この記事は https://kunosu.qrunch.io/entries/VYrARPsO1E9cAeA7 に移動しました。

---

仕様書は日本語で書いてあっても難解なのに、その上英語だともはや呪文にしか見えません。
しかも仕様書はだいたい社外秘なのでGoogle先生に丸投げすることもできません。
というわけで私は主に以下のサイトを利用して解読、もとい翻訳をしています。

1. 英文を読まずに済む方法を考える
	1. 社内サイトで翻訳サイトがないか聞いてみる（大手だとあったりする）
	1. なかったら、とにかく文節で区切り、一つの文にせずに片っ端から直訳していく
1. 英単語の意味が分からないとき
	1. [Weblio辞書](https://www.weblio.jp/): 単語単位なら検索OKなことが多いので積極的に検索してみる。
1. 専門用語の意味が分からないとき
	1. [「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/)
		1. 「コンテキストって何？」「エンディアンって何？」といったことも分かりやすく解説しています。
	1. [IT用語辞典 e-Words](http://e-words.jp/)
	1. 組込み技術の場合: [くみこみックス](http://mix.kumikomi.net/index.php/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8)
1. 上記で出てこないとき
	1. 「○○ コンピュータ」でググる
	1. スペルミスの可能性を考慮する
1. ググったけど分からないとき
	1. 周りに聞く

最後の「ググったけど分からない」はその仕様書または業界での専門用語である可能性が高いです。
企業によっては用語集をまとめていることもあるので、あるか聞いてみましょう。
組み合わせ計算（パスカルの三角形）(Java)

##数学的な公式

組み合わせ計算は、数学的には以下の式で表現できます。

```math
nCr=\frac{n!}{r!{(n-r)!}}
```


##プログラムにおける問題

プログラミングにおいては数学の公式通りに計算して、組み合わせを求められるケースは少ないです。
理由は分子の階乗計算で、**オーバーフロー**してしまうからです。

```math
n! = n\times(n-1)\times(n-2)\cdots2\times1
```
例えばn=13とするだけでint型の最大値を上回りオーバーフローします。
n=22とすると、long型でもオーバーフローします。
従って、公式通り計算することはできません。

そこでオーバーフローしにくい計算方法で実装することになります。
本稿では、パスカルの三角形を利用した計算方法を説明します。

##パスカルの三角形を利用した計算

パスカルの三角形は以下の図の通りです。[1]
上段から順に、横並びの２数の和を１段下に記述していくことで作成できます。
組み合わせ計算の結果に対応することが知られていますので、これを利用します。

![alt](http://www.mathlion.jp/capture/ar103picture3.png)

プログラムでは、事前にパスカルの三角形を２次元配列などに作成しておき、必要に応じて利用します。
パスカルの三角形を作成する際の計算は足し算のみで、階乗の計算がないため、公式よりもオーバーフローしにくくできます。



>[1]図の引用 http://www.mathlion.jp/article/ar103.html

##実装例

パスカルの三角形を二次元配列で作りきるところまで実装します。
１段目を1つの配列、２段目をまた別の配列といったようにして、１段を１配列で書きます。

![pascal_array_explanation.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398217/d6eb8cd1-8554-f524-49a1-10b920827d0a.jpeg)

上段から順番に埋めていきます。
以下の図のように、上段の要素を、下段の**真下と、1つ右**に加えることでパスカルの三角形になります。
![UNADJUSTEDNONRAW_mini_3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398217/6c4700f0-85ce-dfc8-ad7e-82770ffd0140.jpeg)


その他の条件
・計算量：nCrにおいて、n=2000くらいまで計算したいとします。
・オーバーフロー対策：組み合わせを考える問題では、計算過程だけでなく答そのものがオーバーフローするほど大きいことも珍しくないので、以下のように答えさせられます。
>答えを計算し、 1000000007で割った余りを答えてください。

ここでは、このようなオーバーフロー対策の指定がある前提で実装します（つまり、1000000007の法の下で正しい実装）。
オーバーフロー対策の指定がない場合は、コメントで"オーバーフロー対策"と記した行を削除してください。

```java:Pascal_Array
        // 配列の準備
		int c[][] = new int [2005][2005];//n=2000段作りきれるように、少し余裕を持って作成します。

		//パスカルの三角形作成
		int mod = 1000000007;// オーバーフロー対策：問題で指定されます。
		c[0][0]=1;// 初期値として、最上部の1を与えます。
		for(int i=0;i<2003;i++) {//2000段作りきるようにループを回します。細かい事を考えないで済むように少し余裕を持たせて回しています。
			for(int j=0;j<2003;j++) {
				long tmp =  c[i][j]%mod;// オーバーフロー対策
				c[i+1][j]+=tmp;
				c[i+1][j+1]+=tmp;
			}
		}
```

完成です。
例えば、5C2を求めたい時には、c[5][2]で取得できます。

##例題
ABC132 D問題　Blue and Red Balls
https://atcoder.jp/contests/abc132/tasks/abc132_d
spleeterをdockerで実行できる環境を作った

## はじめに

- 楽曲を機械学習を用いてヴォーカル、ドラムなどのパート分けを行う[spleeter](https://gigazine.net/news/20191107-spleeter/)というツールが出ましたね。
- こちらのツール、[github](https://github.com/deezer/spleeter)で公開されており、誰でも利用が可能となっています。
- この記事では、Dockerを使ってローカル環境をほぼ汚さずspleeterを実行できる環境を作ったので、その紹介になります。

## Dockerでspleeterを実行できる環境を作る

- コード、サンプルの音楽ファイルなどは下記リポジトリに置いてあります。(サンプルの音楽ファイルは筆者が適当に作った4小節なので好きに使ってもらって構いません。)
  - https://github.com/fussy113/spleeterDock

```docker:Dockerfile
FROM continuumio/anaconda3:latest

RUN apt-get update \
 && apt-get install -y git

WORKDIR /work

RUN git clone https://github.com/Deezer/spleeter \
 && conda env create -f spleeter/conda/spleeter-cpu.yaml \
 && echo "conda activate spleeter-cpu" >> ~/.bashrc

```

### Dockerfileの工夫点

- anaconda3のインストールされているイメージがあるため、これをベースに作れば少ない記述量でDockerfileを書き終えられます。便利。
- `docker run`のした場合、デフォルトだとcondaのactibateされている仮想環境がbaseになっており、実行の度に毎回仮想環境の切り替えのコマンドを入力する必要がありました。
  - 流石に面倒なので、`.bashrc`に下記を書き込むことで、`docker run`の際にactivateする手間を省きました。

`echo "conda activate spleeter-cpu" >> ~/.bashrc`

### リポジトリのクローンから実行まで

- コマンド5つ程で導入、分割まで可能です。

```
git clone https://github.com/fussy113/spleeterDock
cd spleeterDock
docker build -t spleeter-dock:lts ./
docker run --rm -it -v "#{APPLICATION_PATH}/spleeterDock/input:/work" spleeter-dock:lts bash

# Container内で実行
spleeter separate -i sounds/input/sample.wav -p spleeter:5stems -o sounds/output/
```

- 実行後、`sounds/output/sample`というディレクトリができていて、その中に分割された音声ファイルがあるかと思います。
- ~~若干ドラムの音がこもってる気がする。~~

## 終わりに

- 3分ほどの音声ファイルだとうまく処理されなかったり落ちるなどあるらしく、発展途上な所もまだまだありますが、個人的に成長が楽しみなツールです。(otherで分類されてしまう音声もどんどん分類できるようになると良いですね。。。！)
- 耳コピなどをするバンドマン系エンジニアやサンプリングが欲しいトラックメイカー系エンジニアの方にはぜひ使ってみてください。(用法用量はきちんと守りましょうね)
- 別な話ですが、spleeterをgoogleの力でさらに利用しやすくされてる方もおり、感服です。[(こちら)](https://qiita.com/Ryo0o0oOO/items/65acd38f4034800388c0)
【React】学習記録（２）

##コンポーネントについて
・Reactの特徴はコンポーネント
>■表示の流れ
Dog.js→App.js→index.js→index.html
■ファイル構造
src
└index.js
└components
　　└App.js
　　└Dog.js

##App.jsへのコンポーネントの受け渡し方法とpropsについて
```react:Dog.js
import React from 'react';
//class以下のDogがコンポーネント名
class Dog extends React.Component {
  render() {
    return (
      <div className='dog-item'>
{/*「this.props.props名」とすることでpropsの値を取得できる */}
        <div className='dog-name'>{this.props.name}</div>
        <div className='dog-age'>{this.props.age}</div>
      </div>
    );
  }
}

export default Dog;

```

```react:App.js
import React from 'react';
class App extends React.Component {
 render() {
   return (
      <div>
{/*dogコンポーネントを利用*/}
{/*propsを表示*/}
      <dog 
      name = 'pagg'
      age = 4

/>
     </div>
   );
 }
}

export default App;
```
##propsが多い場合はmapメソッドを使える
propsが多い場合は、App.jsの中で`dogList`の配列を定義して、mapメソッドでdogItemとして代入することができる。

```react:App.js
import React from 'react';
import Language from './Dog';

class App extends React.Component {
  render() {
    const dogList = [
      {
        name: 'pagg',
        age: 5
      },
      {
        name: 'poodle',
        image: 4
      },
     ];

    return (
      <div>
        <div className='dog'>
          {dogList.map((dogItem) => {
            return (
           <Language
{/*各propsのプロパティをいれる*/}
              name = {dogItem.name}
              age = {dogItem.age}
              />
            )
          })}
           </div>
      </div>
    );
  }
}

export default App;

```
xibからImage生成する方法

先日の記事
[viewをimage化する](https://qiita.com/mumei1/items/b1fad360f219c71f39c4)
の中で「XibからImage化させたい。。。！」
と言っていたが、案外簡単にできてしまったので備忘録としてここに記す。


#xibのView化
xibを作成したら

```swift

 func createImage2() {
        // xib読み込み
        // let view2: UIView = Bundle.main.loadNibNamed("CustomeView", owner: self, options: nil)?.first as! UIView こっちでも可
        let view: UIView = UINib(nibName: "CustomeView", bundle: nil).instantiate(withOwner: self, options: nil).first as! UIView
        let return1 = createImage(view)
    }
```
。。。これだけ

#Image化
```swift

 func createImage(_ view: UIView) -> UIImage {
        UIGraphicsBeginImageContext(view.bounds.size)
        UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0)
        let context = UIGraphicsGetCurrentContext()!
        view.layer.render(in: context)
        let image = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return image
    }
```
。。。これだけパート２
<img width="607" alt="スクリーンショット 2019-11-10 17.15.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302540/fb0c31fa-031e-d0ea-8de6-333541d7614c.png">

できあがり

#締めの全体コード

```swift

class CustomeView: UIView {
    
    func createImage2() {
        let view: UIView = UINib(nibName: "CustomeView", bundle: nil).instantiate(withOwner: self, options: nil).first as! UIView
        let return1 = createImage(view)
    }
    
    func createImage(_ view: UIView) -> UIImage {
        UIGraphicsBeginImageContext(view.bounds.size)
        UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0)
        let context = UIGraphicsGetCurrentContext()!
        view.layer.render(in: context)
        let image = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return image
    }

}
```
[メモ]Linuxの主なログファイル

## CentOS

| ファイル名       | 説明       | 形式|
|:-----------------|:------------------|:------------------|
| /var/run/utmp    | システムにログイン中のユーザー情報を格納。whoコマンドで表示 | バイナリ        |
| /var/log/wtmp | ログインユーザーおよび利用時間、システムのリブート情報を格納。lastコマンドで表示 | バイナリ|
| /var/log/btmp | パスワード認証の失敗など不正なログイン履歴を格納。lastbコマンドで表示 | バイナリ|
| /var/log/messages | 主要なシステムログ情報を多く格納 |テキスト         |
| /var/log/dmesg | 起動時にカーネルから出力されるメッセージを格納。検出されたハードウェアや起動シーケンスなどの情報が含まれる |テキスト|
| /var/log/maillog | メールシステムに関する情報を格納 | テキスト |
| /var/log/secure | ユーザー認証などのセキュリティ関係の情報を格納 | テキスト　|
| /var/log/lastlog | ユーザー単位での最終ログイン情報を格納。lastlogコマンドでヒュおじ | バイナリ |
| /var/log/yum.log | パッケージ管理システムのyumの履歴情報を格納 | テキスト |
| /var/log/cron | スケジューリングサービスcronの履歴情報を格納 | テキスト |

## Ubuntu
| ファイル名       | 説明       | 形式|
|:-----------------|:------------------|:------------------|
| /var/log/wtmp | ログインユーザーおよび利用時間、システムのリブート情報を格納。lastコマンドで表示 | バイナリ|
| /var/log/btmp |パスワード認証の失敗など不正なログイン履歴を格納。lastbコマンドで表示 | バイナリ|
| /var/log/auth.log | システムへのログイン履歴情報を格納 | テキスト|
| /var/log/syslog | システムログ情報が多く格納 |テキスト |
| /var/log/kern.log | カーネルより出力されるメッセージ情報を格納 |テキスト |
| /var/log/boot.log | 起動じのサービスの起動メッセージなどが格納 | テキスト|
| /var/log/dmesg |起動時にカーネルから出力されるメッセージを格納。検出されたハードウェアや起動シーケンスなどの情報が含まれる |テキスト |
| /var/log/maillog | メールシステムに関する情報を格納| テキスト|
| /var/log/lastlog | ユーザー単位で最終ログイン情報を格納。lastlogコマンドで表示 |バイナリ|
| /var/log/apt/history.log | パッケージ管理システムaptの履歴情報を格納 | テキスト|

※logの設定は、`/etc/rsyslog.conf`や`/etc/rsyslog.d/*.conf`に記載されている

参照：本気で学ぶLinux実践入門