OmniAICreator/Qiita-1.07M huggingface dataset:
RailsでのWebフォント（Google Fonts）の使い方

## はじめに
Railsでフォントを自由に変えたいのにどうしたら良いか良くわからないという人のために、簡単な設定方法をメモしておきます。
　かつて自分も少し苦戦しまして、というのも調べてもいろいろ情報が出てきて、「もっとわかりやすい記事ないんかー怒」となったので、特に初心者の方の一助になれば幸いです。

## 実装の流れ
簡単に流れだけ説明しておくと、
① Google FontsのWebページから使いたいフォントを探す
② インポートするURLとCSSに記述するプロパティをコピーする
③ コピーしたものをscssファイルに貼り付ける
みたいな流れになります。
一言で言えば探してコピペです。とっても簡単ですね

ではイメージを使って説明していきます

## Google Fontsのページ
検索すればすぐ出てきますが、一応URLを以下に載せておきます。
https://fonts.google.com/

ここにアクセスして使いたいフォントを探してそのページに飛びます。
種類はかなり多いですが、日本語対応のものは少ししかありません。
キーワード検索やカテゴリー検索など探し方はいろいろ試してみると良いでしょう！
（ちなみに検索フォーム横のAlmost〜の部分はフォームになっていて、文字入力するとその文字のプレビューが表示されるようになっています。）

#### Google fontsのページ
<img width="1271" alt="b5802cf8502c24de1b9490fbf180098b.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605568/c9c770ee-ab7c-21df-7da9-22e47396e40c.png">

今回は少しわかりやすいように「Kosugi Maru」というフォントを使おうと思います。
一覧から詳細ページにアクセスするとこんな感じです。（以下）

#### Google Fonts 詳細ページ

<img width="1268" alt="fcaff8d20641eb71b04aa55d5de6e82e.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605568/c395123e-87ef-8272-e554-935a7c02bfec.png">

StylesとGlaphsの間にあるAlmost〜の部分の右側に青字で「**＋ Select this style**」とあるかと思いますのでそこをクリック
すると以下のようにサイドメニューが現れます
<img width="1293" alt="c922054e4bd9f9824ed8bc76da478e3b.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605568/71f708b7-50dc-be97-91c1-0b94790f7038.png">

この中の**Embedタブ**をクリックし、中の**＠import（青字）**をクリックします。

<img width="301" alt="a5618b76d56ae1f4016bff5df7018c23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605568/8dc08da4-bfc4-02b5-789a-03580c16e2f5.png">

そしたら**使うのはグレーの背景の部分２つ**です。
＠import〜;まで（styleタグの中身）とfont-family〜;までをコピーしておきます。

ちなみにこのフォントではデフォルトのfont weightが400のものしか選べませんが、他のフォントではいろいろ選べたりします。（以下）
<img width="1251" alt="573d6ca57088b1df21e55ca04fd2de3a.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605568/11b62a74-b3ef-ad26-c723-4ebe2c537fb7.png">

デフォルトで使用したい太さのフォントを選んで同じようにコピーすればOKです。

## コーディング
それではcssファイルに記述していきましょう！
先ほどコピーしたものを貼り付けるだけです。

```scss:application.scss
@import url('https://fonts.googleapis.com/css2?family=Kosugi+Maru&display=swap');
```
```scss:使いたいscssファイル
セレクタ {
  font-family: 'Kosugi Maru', sans-serif;
}
```
実際の使い方としては、アプリ全体のフォントはapplication.scssに```* { font-family〜 }```と記述し、さらに個別に使いたいフォントがあればその都度cssファイルに書いていけば良いかと思います。
ちなみに＠importはscssファイルじゃないと使えないのでご注意ください。（.cssはNG）

## ブラウザで確認
では実際適用されてるか見てみましょう！
<img width="486" alt="a8f6126ddef3d8b17b39bc1901a26fcf.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605568/44f601ea-8afe-1a18-19fb-7e0b71c9f3f8.png">

ちゃんとフォントが変わってますね。

## 最後に
いかがでしょうか。
Google Fontsを使えばRailsで手軽にフォントを変更できるのがわかったかと思います。

凝ったフォントを使いたい場合は別のやり方になってしまうと思いますが、このやり方で十分きれいなデザインは可能かと思いますので、是非ご活用くださいませ。

間違いやその他意見ありましたらコメントいただけると幸いです。
Docker　主に使うコマンド(備忘)

主に使うDockerコマンド

```
・docker デーモンの実行(再起動などでデーモンが起動していないとき)
$ sudo systemctl start docker

・Dockerfileをビルド
$ docker build -t イメージ名:タグ名 Dockerfileのディレクトリ

・イメージからコンテナを起動
$ docker run --name コンテナ名 イメージ名:タグ /bin/bash
    -i　：ホスト側の入力をコンテナの標準出力とつなげる
    -t　：Dockerコンテナ内の標準出力とホスト側の出力とつなげる
    -p xxxx:yyyy　：ホストのportxxxxをDockerコンテナのportyyyyに転送する
    -d　：バックグラウンドで実行
ex) docker run -it -p 10000:8888 --name tmp tmp:latest /bin/bash

・docker imageの確認
$ docker images

・実行中のコンテナの確認
$ docker ps
    -a　：停止中のDockerコンテナも含めて表示

・コンテナに入る(対話コマンドを実行)
$ docker exec -it コンテナ名orコンテナID /bin/bash

・停止しているコンテナを起動
$ docker start コンテナ名orコンテナID

・起動しているコンテナに入る
$ docker attach コンテナ名orコンテナID

・コンテナを削除(複数指定可能)
$ docker rm コンテナ名orコンテナID (コンテナ名orコンテナID・・・)

・イメージを削除(複数指定可能)
$ docker rmi イメージ名orイメージID (イメージ名orイメージID・・・)

・コンテナをコミット
docker commit コンテナ名orコンテナID イメージ名:タグ名

・イメージを保存する
docker save イメージ名 > 任意.tar

・保存したイメージをロードする
docker load < 任意.tar
```
【iOS13】PDFをUIWebViewで開くとクラッシュする

### TL; DR

WKWebViewを使う

### 環境

iOS 13.4.1
Xcode 11.5
iOS Deployment Target iOS 8.0

### 落ちる

古ーいアプリでPDFを開くとクラッシュするとご連絡が。
10ページほどのPDFをUIWebViewで開いて、スクロールしていくとEXC_BAD_ACCESS発生。
`CGContextDrawPDFPageWithDrawingCallbacks`という聞き慣れない場所で落ちてる模様…
スタックには

```
CGContextDrawPDFPageWithDrawingCallbacks
CGContextDrawPDFPageWithProgressCallback
[UIPDFPageContentDelegate drawLayer:inContext:]
[UIPDFPageRenderJob renderImage]
```

などなど。
ググってみるも特に解決策は見つからず。

### WKWebView

試しにWKWebViewに変えてみたら問題なく開けた。
早いとこUIWebViewは捨てないとですね。
お気に入りのtmuxの複数ペインとvimのセッションの復元・自動化



MacやLinuxのターミナルマルチプレクサtmuxで開発作業は、複数のペインやウインドウを開いて作業しますが、毎回同じな作業が発生するため、自動化します。

プロジェクトのパスに移動し、tmuxの上部ペインにvim起動と同時にセッションを復元し、tmuxの下部ペインに
カレンダーを表示するバッチファイルです。

# 自動化のバッチファイルの内容
```sh
$ cat project.sh
#!/bin/bash

# 作業ディレクトリフルパス名
WORK_DIR="$HOME/project/"
# セッション名
SESSION="project01"
# ウインドウ名
WINDOW="main_window"
tmux new-session -d  -s $SESSION -n $WINDOW -c $WORK_DIR
#tmux split-window -h -c "$DIR"
tmux split-window -v -c "$DIR"
# 下部ペインのサイズ変更
tmux resize-pane -D 5
# ペイン0に移動
tmux select-pane -t 0
# vimセッションの再開
tmux send-keys -t 0.0  'vim -S Session.vim' C-m
# calコマンドの実行
tmux send-keys -t 0.1  'cal' C-m
# セッション名を指定してアタッチ
tmux attach -t $SESSION
```
# バッチの実行方法
```
$ bash project.sh
```

# ターミナルマルチプレクサtmuxの表示結果

![tmux_vim_cal_20200602_135846.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263312/1e442884-f9d8-6ff4-1e2d-7044c3e6b86a.png)



# tmuxのバージョンの確認
```sh
$ tmux -V
tmux 3.1b
```
いいね機能の追加について

#非同期通信でのいいね機能
しばらくJavaに浮気をしていて久しぶりに個人アプリ(Ruby)に触れたら結構記憶が飛んでたので思い出すためにいいね機能を搭載してみました。
いろいろな記事を見ながら実装したので自分用に纏めるメモです。
userとarticleを紐付けてボタンを押すといいねができるようになるまで。

注意点...すでにアプリとしての形はある程度できている状態からの説明です
##①モデル、テーブルの追加
rails g model favorite　をしてマイグレーションファイルを修正

```ruby:マイグレーションファイル
class CreateFavorites < ActiveRecord::Migration[5.2]
  def change
    create_table :favorites do |t|
      t.references :user, null: false, foreign_key: true
      t.references :article, null: false, foreign_key: true
      t.timestamps
    end
  end
end
```
その後rails db:migrate

モデルにアソシエーションを追記

```ruby:user.rb
  has_many :favorites, dependent: :destroy
  has_many :favorite_articles, through: :favorites, source: :article
```
```ruby:article.rb
  has_many :favorites, dependent: :destroy
  has_many :favorite_users, through: :favorites, source: :user
```
```ruby:favorite.rb
  belongs_to :user
  belongs_to :article

  validates :user_id, presence: true
  validates :article_id, presence: true
  validates_uniqueness_of :article_id, scope: :user_id
```
###②コントローラの追加(ついでにルーティング)
rails g controller favorites　でfavoriteコントローラを追加する
そして以下のように追記

```ruby:favorites_contoroller.rb
before_action :set_article, only: [:create, :destroy]

  def create
    @favorite = Favorite.create(user_id: current_user.id, article_id: @article.id)
  end

  def destroy
    @favorite = Favorite.find_by(user_id: current_user.id, article_id: @article.id)
    @favorite.destroy
  end

  private
  def set_article
    @article = Article.find(params[:article_id])
  end
```
ルーティングも編集

```ruby:routes.rb
  resources :articles do
    resources :favorites , only: [:create, :destroy] #追記
  end
```

####③ビューの編集
いいねをするボタンを部分テンプレートを用いて追加

```ruby:view
.content
  = render "layouts/favorite", article: @article
```

```ruby:_favorite.html.haml
.content__favorite{id: "like-#{@article.id}"}
  - if Favorite.find_by(user_id: current_user.id, article_id: article.id)
    .btn1
      = link_to article_favorite_path(article.id, current_user.id), method: :delete, class: "like-delete", remote: true do
        = icon('fa', 'star')
        お気に入り追加済み
        = article.favorites.length
  - else
    .btn2
      = link_to article_favorites_path(article.id), method: :post, class: "like-create", remote: true do
        = icon('fa', 'star')
        お気に入り
        = article.favorites.length
```
remote:trueをつけるとリンクを踏んだ時ajaxが起動する。


####④ボタンを非同期通信にする
create.js.haml と destroy.js.hamlファイル作成し追記

```ruby:views/favorites/create.js.haml
$("#like-#{@article.id}").html("#{j(render partial: 'layouts/favorite', locals: { article: @article })}");
```
```ruby:views/favorites/destroy.js.haml
$("#like-#{@article.id}").html("#{j(render partial: 'layouts/favorite', locals: { article: @article })}");
```
ボタンにつけたidを参照してボタンが押されるとファイルを再読み込みするようにしてあるっぽい。

あとはボタンの見た目とかを綺麗に整えたら完成。

参考にした記事
https://qiita.com/yummy888/items/2b7708a498861e5ba733
https://qiita.com/nojinoji/items/2c66499848d882c31ffa
ローカル環境でシンプルにtailwindcssのみを構築する

# tailwindcssとは
css設計などがまだなかった時代によく使われていた手法を使ったフレームワーク。

```
mb-10 {
margin-bottom: 10px;
}
```
こういう指定を`px`数ごとに設計しておいて、HTMLで`class`を付与するだけで必要な箇所に必要な時だけ指定できたもの。

いわゆるUtility FirstなCSS。
公式サイトは以下から。
[tailwindcss](https://tailwindcss.com/)

# プロジェクトフォルダを作成
なんでも良いんですが、とりあえず作業フォルダを作成しましょう。

```
- tailwind/
    - assets/
        - css/
            - style.css
    - index.html
```

最低限必要なのは、`index.html`と`style.css`

# Node.jsでのインストール
前提として、Node.jsが入っている想定。

```
% npm init
```

これで`package.json`が作成される。
インストールには、npm使います。yarnでもいけるみたい。

```
% npm install tailwindcss --save-dev
```

`--save-dev`使用で`package.json`の`devDependencies`に保存


公式サイト
[tailwindcssをインストール](https://tailwindcss.com/docs/installation/#1-install-tailwind-via-npm)

# style.cssにtailwindのスタイルをひっぱる準備
以下のように`style.css`に記述する

```style.css
@tailwind base;

@tailwind components;

@tailwind utilities;
```

公式サイト
[tailwindcssの呼び出し](https://tailwindcss.com/docs/installation/#2-add-tailwind-to-your-css)

# cssを書き出す（ビルドする）

```
% npx tailwindcss build assets/css/style.css -o assets/css/output.css
```

package.jsonに書くのなら

```package.json
"scripts": {
    "build": "npx tailwindcss build assets/css/style.css -o assets/css/output.css"
  }
```

その上で

```
% npm run build
```

そうすると、`style.css`と同じ階層に`output.css`が作成される。

あとは、HTMLで好きなようにclassを付与していくだけでスタイルが適用してく。
classのリストなどは公式サイトから。

[tailwindcss FontSize](https://tailwindcss.com/docs/font-size)

要素ごとにページが分かれているのでリンク貼るにも膨大になります。
とりあえずFontSizeのURL貼っておこうかと。

### ちなみに

```
% npx tailwindcss help build
```

buildする際のコマンドヘルプはこれで確認。

# CDNでも可能、だけど
tailwindcssではCDNからの利用も可能になっています。

```index.html
<link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet">
```

ただし

- デフォルトテーマのカスタマイズはできない
- `@apply` `@variants`は利用できない
- [Group-hover](https://tailwindcss.com/docs/pseudo-class-variants/#group-hover)を利用することはできない
- サードパーティのプラグインのインストールはできない

と、いろいろと制約がついてしまうので、わかるのなら`npm`や`yarn`から利用するのが良いかも。

# まとめ

公式サイトみながらインストールしてたんですけど、使いはじめるまでよくわからないことが多かったのでメモに残しておこうと思った次第。

誰かが同じように悩んでいるならぜひ活用してもらえればと思います。
SwiftUIで使えるArchitectureとデザインパターン

# 新しいプログラミング言語を勉強する
SwiftUIなどの新しい言語を勉強する時に、いくら勉強しても、プロの様な綺麗なコードがかけないというのが、多くの人の悩みです。

ソフトウェア開発では綺麗なコードとは、ファイルなどが綺麗にフォルダーに分かれていて一つのファイルが一つのこと以上をしないということです。

最初から、綺麗に分けられるわけがありません。そもそも、どの様に分けたら良いの？それが、デザインパターンやアーキテクチャーなのです。両方ともソフトウェア開発では同じこ事を示します。

SwiftUIは新しい言語ですが、多くの人が既に開発を始めています。SwiftUIのコミュニティーではMVVMというモデルが圧倒的な人気になっています。

## MVVM - Model View ViewModelとは？
まず、Model, View, ViewModelってそれぞれ何？

Modelはデータとビジネスロジックです。ビジネスロジックとは、サービスの絶対に変わらない部分です。Qiitaなら、記事を投稿する（データベースに記事を加える。）です。データは全ての記事です。

Viewはユーザーがみるものです。

ViewModelはそれをつなげる橋と考えてください。実際にエンジニア達はBridge（橋）と読んでいます。

Modelは実際にデータベースにあることが多いですか、SwiftUIはデータのリストとビジネスロジックをstructの中にまとめて、Modelと呼ぶことが多いです。

図にしてみると。
![6C73F2A4-B37A-4E67-85F2-DFF1A0D27158.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645819/38fb8069-271f-38ba-4c04-fb1469ae63c6.jpeg)

解説すると、Viewは常にModelが変わると更新する様にViewModelが話しています。アプリとしてとても安全です。Viewは独立していて、ViewModelからきたModelを映し出すことしかできません。ユーザーがModelを変えたいときはViewがViewModelにIntent(変えたいと言う意思)を送り、それに応じて、Modelに反映されます。反映されると新しいモデルが、ViewにViewModelを返して、帰ってきます。

この三つをしっかり分けてコードを書くとプロの様な綺麗なコードがかけます！さらにこの様に、常にModelとViewのState(状態）が一緒になるためにMVVMは有効です。
ViewModelでよくみる物とViewでよくみる物をリストしてみました！


今後MVVMを中心に、記事をどんどん投稿していきます。よろしくお願いします。
PEP 613 (Explicit Type Aliases) を読んだよメモ

最近 [python/peps](https://github.com/python/peps) をフォローして PEP の更新を追いかけるようにしているのだが、GvR が [PEP 613 (Explicit Type Aliases)](https://www.python.org/dev/peps/pep-0613/) は (3.9 ではなく) 3.10 に入れよう的なことを言っていたのでちょっと読んでみた。

>I think it’s too late to add to 3.9, but it can be added to typing_extensions, and of course 3.10 is open (the master branch is now 3.10).
https://github.com/python/peps/issues/1412#issuecomment-633641359

## 概要

* [PEP-484 (Type Hints)](https://www.python.org/dev/peps/pep-0484) では型エイリアスの存在については言及しているが、どう定義するのかを詳しく決めていなかった
    * 今のところ **グローバル変数** でなおかつ **型ヒントの付いていない変数** を型エイリアスとみなしている
    * Forward Reference 問題やスコープなどで問題が起きがち
* そこで明示的に型エイリアスを定義できるようにするよ
* これまで通り暗黙的な型エイリアスの定義もしてもいいよ
* ステータスは Accepted なのでいずれ実装される (たぶん 3.10)

## アプローチ

* 新たに `typing.TypeAlias` を追加する
* 型エイリアスを定義するときは `T: TypeAlias = int` のように型エイリアス型の変数を記述する
* グローバルレベルで定義された変数を型エイリアスとみなす
* ForwardReference するときは `T: TypeAlias = "int"` と書いてもよい

## 例

明示的な文法では以下のように扱われる。

```py
# 単なるグローバル変数
x = 1
x: int = 1

# 単なるグローバル変数
x = int
x: Type[int] = int

# 型エイリアス
x: TypeAlias = int
x: TypeAlias = “MyClass”
```

## 感想

* Forward Refernece を考えると単なる文字列文字列定数も **型を指している可能性がある** と扱う必要があったのが、explicit syntax だとセマンティックに書けるようになった
* とはいえ、これまでの implicit syntax がなくなるわけではないので、なにかが変わるわけでもない
* 利用する側としてはとりあえず `TypeAlias` 型を付けておけば安心
    * なのだけど、その実装は(はやくても) 3.10 からなので使えるのは来年秋以降ですよ…
* 理由もわかるし、反対する理由もないのだけど、出るのがおそすぎて使われない予感しかしない
* 動作確認してないけど pyre ではすでに実装されてるっぽい?
【Maven】ライブラリの同期が物凄く遅くなった話と対処

# TL;DR
- `Maven`は`dependency`の検索を`repositories`の上の方に定義したリポジトリから行う
- このため、`Maven Central`など、優先度の高いリポジトリを`repositories`の下に書くと、他のリポジトリから検索を始めてしまい、同期にかかる時間が伸びる

# 状況
ある日から突然ライブラリのアップデートにかかる時間が物凄く伸びました。
回線速度には特に問題が無かったため、`pom`の設定の方が原因だと思われました。

現象前後では、`Maven Central`の`https`必須化に伴って発生した問題を修正するため、以下のように確実に`https`で繋ぐための設定を`repositories`に足していました。

```xml:pom.xml
<repositories>

    <!-- その他リポジトリ -->

    <repository>
        <id>central</id>
        <url>https://repo1.maven.org/maven2/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
</repositories>
```

# 問題点
`Maven`は`repositories`に定義されたリポジトリを上から順に検索します。
つまり、上記設定では「その他リポジトリを全て舐めた後に`Central`を見にいく」という挙動になります。

一方、利用しているライブラリは大半が`Central`に存在しているため、結果としてアップデート全般が物凄く遅くなっていました。

# 対処
優先度の高いものから順に書き直せば問題は解決します。

```xml:pom.xml
<repositories>
    <repository>
        <id>central</id>
        <url>https://repo1.maven.org/maven2/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>

    <!-- その他リポジトリ -->

</repositories>
```

## 応用
有用性は微妙な感が有りますが、ライブラリの同期をその場だけ高速化したい場合、一時的に`repository`の優先度を変えた上で、キャッシュできたら優先度を戻せば早くなります。
Mac購入したらやることリスト（自分用忘備録）

## はじめに
Macを購入したときにやることや、便利なツールを自分用の忘備録としてメモ書き！
あとは思いついたりしたら追記！



## 更新履歴
2020603_ライブ変換を解除を追加

## マウスの調整
システム環境設定から「マウス」を選択して調整。


## メニューバーに音量表示
システム環境設定から「サウンド」を選択し、「メニューバーに音量を表示」にチェック。


## メニューバーにBluetooth表示
システム環境設定から「Bluetooth」を選択し、「メニューバーにBluetoothを表示」にチェック。


## メニューバーのバッテリーに割合%を表示
デスクトップのバッテリーアイコンを選択し、「割合%を表示」にチェック。


## Google Chromeのインストール
[Google Chrome](https://www.google.co.jp/chrome/?brand=CHBD&gclid=EAIaIQobChMIhKi12KDi6QIVw6qWCh3BCQp0EAAYASAAEgIsePD_BwE&gclsrc=aw.ds)

## Google日本語入力
Macのデフィルトの日本語変換でも良いが、こっちの方がオススメ。
[Google 日本語入力](https://www.google.co.jp/ime/)


## Git
[Download for macOS](https://git-scm.com/download/mac)
ついでにXCodeもインストールできます。



## iTerm2
インストール
[iTerm2](https://www.iterm2.com/)
.configの設定。



## Homebrewのインストール
[Homebrew](https://brew.sh/index_ja)


## Homebrew Caskのインストール
https://github.com/Homebrew/homebrew-cask


## Fork
[Fork](https://git-fork.com/)
IntegrationのTerminal Client:をIterm2にする。


## Visual Studio Codeのインストール
[Visual Studio Code](https://code.visualstudio.com/)
Extensionについては別記事で後日追記。

(2021/4/23追記)
自分用VSCode Extension
https://qiita.com/tkw0129/items/f5c134377731be0247b2


## Dockerのインストール
[Docker Desktop for Mac](https://hub.docker.com/editions/community/docker-ce-desktop-mac)


## Finderの「よく使う項目」に作業フォルダを表示させる。
作業フォルダをドラッグ＆ドロップ。
地味だけど便利。


## カレンダーに自分のアカウントを追加
1. Mac標準のカレンダーアプリを立ち上げる
2. メニューバーの「カレンダー」から、「アカウント」を選択。もしくは「環境設定」から自分の使用しているアカウントを登録。（Googleアカウントなど）


## Dockバーのサイズを変更&Dock内のアプリを変更。
- 「システム環境設定」から「Dock」を選択。スライドを調整しサイズ変更をする。
- 必要、不必要なアプリは、Dockのアイコン右クリックから、編集する。


## ライブ変換を解除
- 「システム環境設定」から「キーボード」を選択。「入力ソース」タブ内の「ライブ変換」のチェックを外す。

## Sorcetreeのインストール(2021/4/23追記)
https://www.sourcetreeapp.com/

## Slackのインストール
https://slack.com/




## 最後に
何かオススメなどあれば是非教えてください！
Pythonのインポートディレクトリの順番(anaconda上)

#Pythonのインポート順

EC2(amazonlinux2)上にanacondaを入れています。
環境にもよるみたいですがインポート順は下記。

```
(base) [ec2-user@ip-172-31-42-102 wk]$ echo $PYTHONPATH
/home/ec2-user/wk/lib
(base) [ec2-user@ip-172-31-42-102 wk]$ pwd
/home/ec2-user/wk
(base) [ec2-user@ip-172-31-42-102 wk]$ ls
path.py lib
(base) [ec2-user@ip-172-31-42-102 wk]$ cd ../
(base) [ec2-user@ip-172-31-42-102 ~]$ pwd
/home/ec2-user
(base) [ec2-user@ip-172-31-42-102 ~]$ python3 ./wk/path.py
['/home/ec2-user/wk',
 '/home/ec2-user/wk/lib',
 '/home/ec2-user',
 '/home/ec2-user/anaconda3/lib/python37.zip',
 '/home/ec2-user/anaconda3/lib/python3.7',
 '/home/ec2-user/anaconda3/lib/python3.7/lib-dynload',
 '/home/ec2-user/anaconda3/lib/python3.7/site-packages']		
```

①pyファイルがあるディレクトリ
②PYTHONPATHに設定しているディレクトリ
③カレントディレクトリ
④anacondaの標準、サードパーティディレクトリ

下記でインポート順を調べれるため、気になったときは試してみる。

```path.py
import sys
import pprint

pprint.pprint(sys.path)
```
Cognos Configurationの「共通対称鍵ストアの有効期限：365日」と「証明書の有効期間：730日」について

#Cognos Configurationの「共通対称鍵ストアの有効期限：365日」と「証明書の有効期間：730日」について
Cognos Configurationの設定で、
こちらの「共通対称鍵ストアの有効期限（日）：365」という設定と、
<img width="533" alt="001.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/806eb16a-b306-88ec-2291-33fc9b9103b4.png">
「証明書の有効期間（日）：730」という設定って、
<img width="545" alt="002.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/1f6d0bec-ce2e-f889-7319-6f6481f907db.png">
イマイチ違いが良くわからんなと思って、最近違いを調べてみましたので共有します。

ポイントはこの二つの設定、
「ゲートウェイ URI」と
<img width="674" alt="003.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/921eb329-6bc9-c4cf-0bed-32fb6e24f0af.png">
「外部ディスパッチャー URI」がhttpになっているか、httpsになっているか、です。
<img width="676" alt="004.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/2ee472d5-dc31-ca53-58b4-6aec2bd668b6.png">

#共通対称鍵ストアの有効期限（日）：365
「ゲートウェイ URI」及び「外部ディスパッチャー URI」が「http」の場合、つまりエンドユーザーのブラウザからのCognosアクセスはSSLを使用しない通信となります。
とは言え、Cognosのノード間の内部通信は暗号化されて行われますので、こちらの設定の期限(365日)が切れると、ある時Cognosノード間の通信ができず、あるノードの起動ができない、とか発生する事があります。

以前、こちらの記事も書いてますのでご参照下さい。
**Cognos BI で暗号情報の再生成が必要な時の対応**
https://qiita.com/shinyama/items/23324e0126916cdf8688

**期限の確認方法**
期限の確認方法は、\<CognosInstall>\configuration\cskフォルダを見て、「cCSKKeystore」「jCSKKeystore」ファイルの更新日時を見て、そこから設定値分(デフォルト365日後)という判断をするようです。
<img width="734" alt="005.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/046cd97b-9939-a00b-2fce-f98fe8b3349c.png">


#証明書の有効期間（日）：730
「ゲートウェイ URI」及び「外部ディスパッチャー URI」が「https」の場合、つまりエンドユーザーのブラウザからのCognosアクセスはSSLを使用している場合に、この設定は使用されます。
Cognosノード間の通信の暗号化期限にも、この設定値が使用されるようです。

**期限の確認方法**
ikeymanツールで確認が必要との事です。
C:\Program Files\IBM\cognos\analytics\jre\bin\ikeyman.exeを実行し、パスワードがNoPassWordSetで以下のファイルを開きます。
\<CognosInstall>\configuration\encryptkeypair\jEncKeystore
\<CognosInstall>\configuration\signkeypair\jSignKeystore

どちらも「CAMUSER」という証明書を参照すると、有効期限が確認できるようです。
CSSで見出しタグに連番をつけて「手順書」っぽくする

この投稿では見出しタグに連番をふったり、装飾したりして手順をいいかんじに表現する方法を紹介します。

## 実現したいこと

次のようななんの変哲もないHTMLにスタイルを当てて、

```html
<h1>カレーライスの作り方</h1>

<div class="steps">
  <h2>野菜と肉を切る</h2>
  <p>いい感じの大きさに野菜と肉を切ります。</p>

  <h2>煮込む</h2>
  <p>切った具材を鍋に入れて煮込みます。</p>

  <h2>味付け</h2>
  <p>カレールーなど調味料を入れて完成です。</p>
</div>
```

下のように各ステップに1,2,3と連番がついた表示になるようにしたいと思います。

<img width="311" alt="CleanShot 2020-06-02 at 12.50.36@2x.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889/f7ebaba9-0760-0ef5-bfbb-3ae2d5b17d17.png">

## 見出しに連番をつけたり、装飾したりして「手順」を表現する方法

いきなりですが、完成形のCSSを示します。細かい説明はコード内にコメントで書いてあるのでご覧ください。

```css
.steps {
  /* 連番カウンター名の定義 */
  counter-reset: step-counter;
  /* 縦棒との位置関係に必要 */
  position: relative;
  /* 縦棒と連番のためのスペースを左に確保 */
  padding-left: 2rem; /* 連番(1.5rem) + 余白 */
}

/* 縦棒 */
.steps:before {
  content: "";
  /* 幅と色 */
  background-color: #d59533;
  width: 2px;
  /* 位置 */
  position: absolute;
  top: 0.7rem; /* 円のwidthの半分 */
  left: 0.7rem; /* 円のwidthの半分 */
  height: calc(100% - 0.7rem); /* 100% - top */
  /* 連番より後ろに表示するため */
  z-index: 0;
}

.steps > h2 {
  /* 連番カウンターを+1する */
  counter-increment: step-counter;
  /* 連番カウンターを垂直方向に中央揃えで表示する */
  display: flex;
  align-items: center;
}

/* ①②③など連番 */
.steps > h2:before {
  /* 連番カウンターの値を表示する */
  content: counter(step-counter);
  /* フォントと色 */
  background: #d59533;
  color: white;
  font-size: 0.8rem;
  font-weight: normal;
  /* 文字を中央に表示する */
  line-height: 1.5rem;
  text-align: center;
  /* 円で表示する */
  width: 1.5rem;
  height: 1.5rem;
  border-radius: 1.5rem;
  /* .stepsでmargin-left +2rem したぶん左に戻す */
  position: absolute;
  left: 0;
  /* 縦棒より手前に表示するため */
  z-index: 1;
}
```

## どうやって連番を表示しているか？

連番を表示するために`counter-reset`、`counter-increment`、`content: counter(step-counter)`を使っています。

* [counter-reset - CSS: カスケーディングスタイルシート | MDN](https://developer.mozilla.org/ja/docs/Web/CSS/counter-reset)
* [counter-increment - CSS: カスケーディングスタイルシート | MDN](https://developer.mozilla.org/ja/docs/Web/CSS/counter-increment)
* [counter() - CSS: カスケーディングスタイルシート | MDN](https://developer.mozilla.org/ja/docs/Web/CSS/counter)

## 動作デモ

一応動くデモとしてCodePenを貼っておきます:

<p class="codepen" data-height="549" data-theme-id="dark" data-default-tab="css,result" data-user="suin" data-slug-hash="bGEbxdr" style="height: 549px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="CSSで見出しに連番をつけたり、装飾したりして「手順」を表現する">
  <span>See the Pen <a href="https://codepen.io/suin/pen/bGEbxdr">
  CSSで見出しに連番をつけたり、装飾したりして「手順」を表現する</a> by suin (<a href="https://codepen.io/suin">@suin</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>


---

最後までお読みくださりありがとうございました。Twitterでは、Qiitaに書かない技術ネタなどもツイートしているので、よかったらフォローしてもらえると嬉しいです:relieved:→[Twitter@suin](https://twitter.com/suin)
VBEの設定

個人的なVBEの設定を備忘的に記述

#エディターのフォント
| 項目名 | 設定内容 |
|:-:|:-:|
|タブ間隔|4|
|フォント名|MeiryoUI(日本語)|
|サイズ|10|

#背景色
|項目名|前景色（文字）|背景色|
|:-:|:-:|:-:|
|標準コード|黄色|黒|
|選択された文字|白|青|
|構文エラーの文字|赤|黄色|
|次のステートメント|黒|黄色|
|ブレークポイント|白|茶|
|コメント|濃い灰色|  黒 |
|キーワード|水色|黒|
|識別子| 白|黒|


#コメントアウト
- 表示   →  ツールバー  →  ユーザー設定  → ショートカットメニュー
 ショートカットメニューをツールバーにドロップ

- コードウィンドウ  → コードエディタウィンドウ
  ユーザー設定  → コマンド  → コメントブロック/非コメントブロックをドロップ
grep コマンドのよく使うオプションまとめ

CentOS 7 で確認。grep のバージョンは GNU grep 2.20。

### 拡張正規表現を使用
```
-E
```

### 大文字小文字を区別しない
```
-i
```

### ディレクトリ内のすべてのファイルを検索
```
-R
```

シンボリックリンクもたどる。


### バイナリファイルは検索しない
```
-I
```

### マッチした文字列のみを出力
```
-o
```

### マッチしない行を出力
```
-v
```

### 行番号も出力
```
-n
```

### 前後の行も出力
```
-C <行数>
```
（V11.3.4のみ）IQ Botインストール手順（２）DBのインストールと設定　④必要なテーブルの手作成

この記事は、以下の記事のサブカテゴリです。

[IQ Bot インストール手順](https://qiita.com/IQ_Bocchi/items/529dc72b6ab3d26dbfe0)　＞　[（２）DBのインストールと設定](https://qiita.com/items/7f02939799347b4db501/)

[前のステップ：③SSMSのインストールとログインの作成](https://qiita.com/IQ_Bocchi/items/1a32db34514634260a6e)

#④必要なテーブルの手作成（V11.3.4のみ）

CRのV11.3.4では、SQL Server上に以下のデータベースを手作成する必要があります。

- CRDB
- BotInsight
- BIVisualization
- BIVisualization-keyset
- BIVisualization-scheduler
- BIVisualization-upload

##DBの新規作成のやりかた

1) SSMSを開き、「データベース」を右クリック→「新しいデータベース」をクリックします。

![新しいデータベース.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/b2220f95-4e7a-0280-4e3b-392a821f68b0.jpeg)

2) データベースの名前をつけて「OK」（名前以外の部分はすべてデフォルトのままで大丈夫です）
![DB名.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/97e839ba-5b8f-e1a7-f6e0-06e1ff24f882.jpeg)

3) するとこのように、「データベース」配下に今作成したデータベースができています。
![作成完了.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/d2e4c533-2c37-9fcc-d059-14d490e95739.jpeg)

4) 同じ要領で、以下のすべてのデータベースを作成します。

- CRDB　←　図で説明したDB
- BotInsight
- BIVisualization
- BIVisualization-keyset
- BIVisualization-scheduler
- BIVisualization-upload

#次のステップ

次は[CRのインストール](https://qiita.com/IQ_Bocchi/items/37d0632770bffb1e33f8)を行います。
マークダウン記法まとめ

|記法|書き方|
|---|---|
|見出し|# 見出し<br>## 見出し|
|箇条書きリスト|- 箇条書き<br>&nbsp;&nbsp;- インデントはタブ
|番号付きリスト|1. テキスト|
|空行・改行|半角スペース2つ、<br>など|
|リンクの挿入|\[タイトル](URL)|
|文字色|\<font color="Red">テキスト</font>|
|水平線|\***|マークダウンのエスケープ|\|

# 見出し
### 記述例
```
# 見出し1
## 見出し2
### 見出し3
#### 見出し4
##### 見出し5
###### 見出し6
```

###表示例
# 見出し1
## 見出し2
### 見出し3
#### 見出し4
##### 見出し5
###### 見出し6

# 箇条書きリスト
### 記述例
```
- 1
    - 1-1
        - 1-1_1
        - 1-1_2
    - 1-2
- 2
- 3
```

### 表示例
- 1
    - 1-1
        - 1-1_1
        - 1-1_2
    - 1-2
- 2
- 3

# 番号付きリスト

### 記述例

```
1. 1
    1. 1-1
    1. 1-2
1. 2
1. 3
```

### 表示例
1. 1
    1. 1-1
    1. 1-2
1. 2
1. 3

# リンクの挿入
### 記述例
```
[Google](https://www.google.co.jp/)
```

### 表示例 
[Google](https://www.google.co.jp/)

# 文字色
### 記述例
```
<font color="Red">テキスト
```

### 表示例
<font color="Red">テキスト

# 水平線
### 記述例
```
上
***
下
```

### 表示例
上
***
下
さくらのVPSにNginxをインストールしてhttpsで接続

## 前提、環境
- CentOS7
- さくらのVPS
- ドメインレジストラでネームサーバーをさくらにVPSに向けている
- さくらのコンパネでドメインの登録をしている
- Firewallの設定でhttpとhttpsを許可している
- ssh接続してrootユーザーに切り替え済み

その他、基本的な設定は以下の記事の通りです。
[さくらのVPSにSSH接続+最低限のセキュリティ対策](https://qiita.com/d0ne1s/items/6d205744588e0f2c5d62)

## Nginxをインストール
`yum install nginx`だけでもインストールできますが、
バージョンが若干古い & デフォルトで生成される設定ファイルが少ない
ため、リポジトリを追加してからインストールします。

```zsh
$ vim /etc/yum.repos.d/nginx.repo
```
```/etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
```
```zsh
$ yum info nginx #インストールできるnginxのバージョンが良い感じになっていることを確認
$ yum -y --enablerepo=nginx install nginx
$ nginx -v
$ systemctl start nginx #起動
$ systemctl enable nginx.service #自動起動設定
```
ブラウザでipアドレスにアクセスして、nginxの初期画面が表示されることを確認

## 公開ディレクトリの作成、設定
ファイルをデプロイするディレクトリを作成します。

```zsh
$ mkdir -p /var/www/html/site1
$ cd /var/www/html/site1
$ vim index.html
```
```/var/www/html/site1/index.html
hello from site1
```
nginxの設定ファイル`/etc/nginx/conf.d/default.conf`をコピーして編集

```zsh
$ cd /etc/nginx/conf.d
$ cp default.conf site1.com.conf
$ vim site1.com.conf
```
```php:/etc/nginx/conf.d/site1.com.conf
server {
    listen       80;
    server_name  site1.com;
    location / {
        root   /var/www/html/site1;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
```
```zsh
$ systemctl reload nginx
```
http://site1.com にアクセスして表示を確認。

マルチドメインで運用する場合、公開ディレクトリ、nginxの設定ファイルをドメインの数だけ作成します。

## SSL証明書を導入
```zsh
$ yum install -y certbot
$ systemctl stop nginx #証明書の導入前にサーバーを停止(standaloneモード用のサーバーを立てるため)
# 証明書をインストール。以下の2ファイルが手に入る
# /etc/letsencrypt/live/site1.com/fullchain.pem;
# /etc/letsencrypt/live/site1.com/privkey.pem;
$ certbot certonly --standalone -d site1.com # メールアドレスとか聞かれるので答える
$ systemctl start nginx
$ vim /etc/nginx/conf.d/site1.com.conf
```
```php:/etc/nginx/conf.d/site1.com.conf
server {
    listen       80;
    server_name  site1.com;
    return 301 https://$host$request_uri;  # 追加。httpへのリクエストをhttpsにリダイレクト
    location / {
        root   /var/www/html/site1;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

# 以下を追加。https用の設定
server {
        listen  443 ssl;
        server_name     site1.com;
        ssl_certificate         /etc/letsencrypt/live/site1.com/fullchain.pem;
        ssl_certificate_key     /etc/letsencrypt/live/site1.com/privkey.pem;
    location / {
        root   /var/www/html/site1;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
```
```zsh
$ systemctl reload nginx
```
http://site1.com にアクセスして、httpsにリダイレクトされれば成功。

## ハマったところ
さくらのVPSには**パケットフィルタ**という独自のファイアーウォールのような機能があります。
管理画面からパケットフィルタの設定を変更して、80番や443番のポートを開放する必要があるので注意してください。
PHP 7.4 でTrying to access offset on value of type nullのエラーが出た

#概要

Twitter APIを利用して、ポートフォリオを作成中、たまに出てくるこのエラー。

```
Trying to access offset on value of type null
```
このエラーを解決するまでの方法をメモ。

#環境

laravel : 7.13.0
PHP : 7.4.5

※2020/6/2時点で共に最新バージョン。


#原因

調べてみるとPHPのバージョンが違うことにより、起こったエラー。

詳しいところは分かりませんが、PHP7.4が原因みたいです。

#解決策

PHPをダウングレードしたら解消しました。

PHP7.4.5 ➡️ PHP7.2.31

[Homebrew で PHP7.2 をインストール](https://qiita.com/naente_dev/items/b7c4b89616473dcec2fd)
docker-compose down

docker-composeで作られたコンテナやネットワークのを一括で削除するコマンドです。

```bash
docker-compose down
```

デフォルトではコンテナとネットワークのみを削除しますが、オプションを付ければイメージやボリュームも削除できます。


## イメージの削除

```bash
docker-compose down --rmi 'type'
```

typeには任意の値を指定します。
指定できるのは、`all`と`local`です。

* all

  サービスで使われている全てのイメージを削除します。

* local

イメージフィールドにカスタムタグのないイメージだけ削除します。


## ボリュームの削除
```bash
docker-compose down -v, --volumes
```

composeファイルの`volumes`セクションのボリュームを削除します。
MySQL ↔︎ MongoDB 早見表

# Terminology

用語です。

| MySQL　　　　　　　　　　　　　　　　| MongoDB　　　　　　　 　　　　　　|
|:-------------------------|:----------------------|
| databases  | database          |
| table  | collection          |
| row  | document          |
| column  | field          |


# Commands

公式の情報があるので、こちらを見てほしい。→ https://docs.mongodb.com/manual/reference/sql-comparison/

| MySQL　　　　　　　　　　　　　　　　| MongoDB　　　　　　　　 　　　　　　　|
|:-------------------------|:----------------------|
| show databases;  | show dbs          |
| create database new_db;  | use new_db          |
| use new_db;  | use new_db          |
| show tables; | show collections<br>または<br>db.getCollectionNames()|
| create table users (name varchar(20)); | db.createCollection("users")|
| drop table users | db.users.drop() |
| desc users; | なし |
| insert into users (name) values ("taro"); | db.users.insertOne( { name: "hoge" } ) |
| update users <br>　　set name = "maro"<br>　　where name = "taro"; | db.users.updateMany(<br>　　{ name: "taro" }, <br>　　{ $set: { name: "maro" } }<br>) |
| select * from users; | db.users.find() |
| select * from users order by name asc; | db.users.find().sort( { name: 1 } ) |
| select * from users order by name desc; | db.users.find().sort( { name: -1 } ) |
| select * from users limit 1; | db.users.find().limit(1) |
| select count(*) from users; | db.users.count() |
| select name from users where age = 90; | db.users.find(<br>　　{ age: 90 },<br>　　{ name: 1 }<br>) |

# Null and Missing field

MySQL の場合はシンプル

| MySQL　　　　　　　　　　　　　　　　|
|:-------------------------|
| select * from users where age is null; |  
| select * from users where age is not null; |  

MongoDB の場合は null と missing があるので少し複雑

| users    |
|:-------------------------|
| { name: "100",　　age: 100 }<br>{ name: "null",　　age: null }<br>{ name: "missing" } |

| MongDB　　　　　　　　　　　　　　　　　　| users.name　　|
|:-------------------------|----|
| db.users.find( { age: null } ) | null, missing |
| db.users.find( { age: { $ne: null } } ) | 100 |
| db.users.find( { age: { $exists: true } } ) | 100, null |
| db.users.find( { age: { $exists: false } } ) | missing |
| db.users.find( { \$and: [ <br>　　{ age: { $exists: true } },<br>　　{ age: null } <br>] } ) | null |
| db.users.find({ age: { $type: 10 } }) | null |
| db.users.find( { age: { \$not: { $type: 10 } } } ) | 100, missing |




# Docker

Docker のおかげで、それぞれの環境がすぐ使えます。

```terminal:MySQL
$ docker run --name study-mysql --rm -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:8.0

$ docker exec -it study-mysql bash
root@51c68a47680f:/# mysql
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
```

```terminal:MongoDB
$ docker run --name study-mongo --rm mongo:4.2

$ docker exec -it study-mongo bash
root@c2ab8e8878c3:/# mongo
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
```


# GUI

この辺が王道かと。MongoDB Compass 使いやすいです。

- [Sequel Pro](https://www.sequelpro.com/)
- [MongoDB Compass](https://www.mongodb.com/products/compass)
【Corda】Corda Developer Certification Exam に合格した話

ご無沙汰です。
どーも、のぶこふです。
「のぶこ**ぶ**」に間違われやすいので、「のぶを」にしてみたりしてます。


さて最近、Corda Developer Certification Exam に合格しました。
普段からCordaを触っていう人でも、あまり馴染みが無いと思いますので、少し解説等をしようと思います。

とはいえ、詳細に書きすぎると、R3の方から怒られそうなので、オブラートに包みながら、それとなく伝えていきます。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Corda Certified Developer合格なう。<br><br>View my verified achievement from <a href="https://twitter.com/inside_r3?ref_src=twsrc%5Etfw">@inside_r3</a>. <a href="https://t.co/kDkWhF69mr">https://t.co/kDkWhF69mr</a></p>&mdash; のぶを (@nobkovskii) <a href="https://twitter.com/nobkovskii/status/1263730981640507392?ref_src=twsrc%5Etfw">May 22, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## Corda Developer Certification Exam

|概要|説明|
|:--|:--|
|What is ?|Cordapp開発に必要な知識を確認するためのテスト|
|セクション数|23（うち、解説やフィードバックが3つ）|
|問題数|112問くらい|
|合格|75％以上|
|制限時間|無し|
|設問言語|英語（Google翻訳可能）|
|回答方式|ほぼ4択、たまに正誤の2択。極稀に複数選択。|
|URL|https://corda-certification.myshopify.com/products/corda-standard-certification-test|
|費用|$150.00（※）|
|再受験|無制限|

※R3主催のイベントに行くと良いことがあるかもしれません（私はR3の回し者ではありません）


上記URLでは、70問の多肢選択問題と記述されていますが、嘘です。たっぷり112問あります。
「Cordapp開発に必要な知識を確認するテスト」と銘打っていますが、その実は基本となる概念からアーキテクチャ、開発について、非常に多岐にわたります。

ドキュメントを読むだけでは不足する箇所もありますし（実際に作ってみてわかることもある）、ローカルの開発だけではNetworkの部分は触ることは無いでしょう。
ただ、試験結果は即時わかりますし、再受験はいくらでも可能ですし、間違えた箇所も結果でわかるので、間違えたところを復習したりして、根気強く続ければ合格は可能です。

## 詳細

もう少し試験の中身を詳しく説明します。

各セクションは、Consensus、Network、Framework、Nodes、States、Reference States、Contracts、Commands、Flows、Transactions、Attachments、Oracles、Timestamps、Code Related Questions、Cordapp Related Questions（6つ）の合計20セクションです。
設問数はセクションによりますが、だいたい10問前後。内容が薄いところもあります。

基本的には、Cordaのドキュメントを読み進めていくのが正攻法です。
https://docs.corda.net/

ただ、この試験でのCordaのバージョンが必ずしも最新版と一致しているわけではないので（Identity Managerが旧名のThe Doormanになってたりする）、微妙なところは気をつける必要があるかもしれません。

ラスト6つの「Cordapp Related Questions」は、実際にGithubにあがっているサンプルからの出題になります。
一通り動かしてみて、挙動を確認しておくと、回答がスムーズになると思います。

▼Cordaのサンプル
https://github.com/corda/samples

流石に設問内容は記述できないので、詳細はここまでとします。

## やってみて

なかなか難易度も高いですし、設問数の多さから、じっくり腰を据えてやることをおすすめします。
そこそこ触ってきたと自負する私は、初回ノー勉で実施してみたら60%いかないくらいでした。。。
この試験を通じて勉強になる部分も非常にあったので、合否に関わらず設問に目を通すのもありだと思います。

Cordaをこれからやろうと思っている方は、アプリ作成といった技術の部分だけでなく、こういった知識も抑えておくと、今後役に立つと思います。


では、素晴らしいCorda Lifeをお過ごしください。

今回はここまでです。
ありがとうございました。
macOSのターミナルにてdmgのappをインストール

ちゃお・・・†

Homebrew Caskを利用するとmacOS用のGUIアプリケーションをターミナル上だけでインストールを完了することが出来ますが、Homebrew Caskは全てのアプリに対応しているわけではありません。そこでこの記事では、Homebrew Caskを利用せずにmacOS用のアプリをコマンドだけでインストールを完結させる方法を紹介します。なお、この記事ではdmg内のappファイルをコピーしてインストールする場合の方法のみ扱います。

dmg内のpkgファイルからインストールする方法は[MacOS(OSX)でコマンドラインからdmgインストール](https://qiita.com/skycat_me/items/be78d27c5f6c5422e3b6)をご覧ください。

# 実行環境
```zsh

% sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.5
BuildVersion:	19F96
```

# コマンド

例としてMacVim-KaoriYaをインストールする方法を紹介します。`export`コマンドでの設定を変えることで他のアプリにも対応出来ます。

```zsh:copy_app_from_dmg.sh

export BASENAME="MacVim-KaoriYa-20180324"
export URL=https://github.com/splhack/macvim-kaoriya/releases/download/20180324/${BASENAME}.dmg
export VOLUME="MacVim-KaoriYa 20180324"
export APPNAME="MacVim.app"
curl -L ${URL} > /tmp/${BASENAME}.dmg
hdiutil mount /tmp/${BASENAME}.dmg
cp -r /Volumes/${VOLUME}/${APPNAME} /Applications
hdiutil unmount "/Volumes/${VOLUME}/"
rm /tmp/${BASENAME}.dmg
unset BASENAME URL VOLUME APPNAME
```
Qiitaの記法練習

練習のため、記述。
詳細は編集画面の右上の？より確認可能。

#大見出し
"# 大見出し"

##中見出し
"## 中見出し"

###小見出し
"### 小見出し"

#**強調**
"**強調**"

**リンク**
[Google](https://www.google.com/)
[リンク名]'(URL)
シングルクォートは除く

#**コード**
最初の行に```とファイル名を記述

コードを記述

最終行にも```を記述する

「```」は@のキーをShiftを押しながら押すことで入力可能。

文中で文字列を囲むと隣接する文字列の背景が灰色となる。
```目立たせたい時などに使用できる。```


```VBA:filename.bas
program
```

リストのタイトル
-
- リスト1
- リスト 2
   - リスト 2-1 
   - リスト 2-2

リストの文字列の前に"-" をつけることでリスト記述が簡単にできる。
最初の行にタイトル、次の行に「-」のみを記述することで、それ以下の文がリスト表記となる
またインデントを変えることで子リストの作成ができる。
改行時に自動で"-"が入力される。

#**番号付きリスト**
改行時に自動で次の項番が入力される。

1.  番号付きリスト 1 
2.  番号付きリスト 2

#**チェックボックス**
改行時に自動でチェック卜ボックスが入力される。
一行空白行を設け、その次の行から「- [ ]項目」と記述することでチェックボックスが作成される。
チェックボックスにチェックを入れるには[x]と記述する。

- [ ] チェックボックス１
- [x] チェックボックス２
CentOS 7 に Apache Guacamole 1.1.0 をインストールしてみた

# 0. 前提条件
|マシン|IPアドレス|OSユーザ|OSパスワード|
|---|---|---|---|
|接続元PC|任意|-|-|
|Guacamole CentOS 7|192.168.56.10|-|-|
|接続先 Windows 10|192.168.56.11|windows10_user|windows10_pass|
|接続先 CentOS 7|192.168.56.12|centos7_user|centos7_pass|

# 1. 事前準備 【Guacamole CentOS 7】
```
# systemctl stop firewalld
# systemctl disable firewalld
```

# 2. リポジトリの追加 【Guacamole CentOS 7】
```
# yum -y --disablerepo=updates install epel-release
```
# 3. パッケージのインストール 【Guacamole CentOS 7】

```
# yum install -y --disablerepo=updates \
  guacd \
  libguac-client-kubernetes \
  libguac-client-rdp \
  libguac-client-ssh \
  libguac-client-telnet \
  libguac-client-vnc
```
# 4. WebUI (Tomcat) のインストールと設定 【Guacamole CentOS 7】
```
# yum install -y --disablerepo=updates -y tomcat
# curl -Lo /var/lib/tomcat/webapps/guacamole.war \
  http://archive.apache.org/dist/guacamole/1.1.0/binary/guacamole-1.1.0.war
```
# 5. 接続先の設定 【Guacamole CentOS 7】
```
# mkdir -p /etc/guacamole/
# cat <<EOF >/etc/guacamole/user-mapping.xml
<user-mapping>
    <authorize username="guacuser" password="guacpass">
        <connection name="Windows 10">
            <protocol>rdp</protocol>
            <param name="hostname">192.168.56.11</param>
            <param name="username">windows10_user</param>
            <param name="password">windows10_pass</param>
            <param name="ignore-cert">true</param>
        </connection>
        <connection name="CentOS 7">
            <protocol>ssh</protocol>
            <param name="hostname">192.168.56.12</param>
            <param name="username">centos7_user</param>
            <param name="password">centos7_pass</param>
        </connection>
    </authorize>
</user-mapping>
EOF
```
# 6. Guacamole の起動 【Guacamole CentOS 7】
```
# systemctl start guacd
# systemctl start tomcat
```
# 7. 動作確認【接続元PC】
1. ブラウザで http://192.168.56.10:8080/guacamole/ にアクセスする。
2. user-mapping.xml に設定したユーザ名とパスワード (上の例だとguacuser/guacpass) でログインする。
tsharkコマンドでpcapデータを解析

[1.tsharkコマンドとは](#tsharkコマンドとは)
[2.環境設定](#環境設定)
[3.実行](#実行)
[4.pcapファイルのフィルタリング方法](#pcapファイルのフィルタリング方法)
[5.オプション](#オプション)
[6.参考](#参考)

# tsharkコマンドとは
Wiresharkの実行をCLIで実現できるものです。
CLIなので、並列処理、シェルスクリプトでの記載、cron、grepなどなど、CLI職人にとってはpcapデータをかなり楽に扱えるようになります！

# 環境設定
本記事ではMacOSで試しています。
まずお持ちのMacでtsharkを利用できる状態にします。GUIでもCLIでもどちらからでも可能です。

**GUI(Webから)でインストールの場合**
　下記からインストールできます。
　https://www.wireshark.org/download.html

**CLI(ターミナル)でインストールの場合**

```text:インストール
　brew install wireshark
```

※まだhomebrew(brewコマンド)が利用できない場合は、下記を参考に利用できるようにしてみてください！
[Homebrewのインストール方法](https://qiita.com/zaburo/items/29fe23c1ceb6056109fd)

# 実行
早速実行していきましょう！今回はtest.pcapというデータを見ていきます。

```text:実行
　tshark -r test.pcap
```

これでデータの中身が確認できたと思います。
ちなみにデータの並び方と表示されている項目はデフォルト状態ですが、確認したいデータや表示順などを指定することができます。
GUIのWiresharkで列の表示変更を行った場合もtsharkコマンドの結果に影響されます。

# pcapファイルのフィルタリング方法
今回は下記の条件をつけてフィルタリングして、再度実行してみましょう。
**条件**
(※)通常のWireShark(GUI)で利用できるフィルター
　・smb2プロトコルの通信に絞る
　　　`smb2.tree && tcp.dstport==445`
　・ファイル名や利用アカウント名が抜けている余分な通信は除去する
　　　`smb2.filename != "" && smb2.acct != ""`
**表示**
(※)通常のWireShark(GUI)で利用できる列の書き方
　・アカウント名
　　　`smb2.acct`
　・フォルダパス（共有パス）
　　　`smb2.tree`
　・操作ファイル名
　　　`smb2.filename`
　・アクセスしている端末名
　　　`smb2.host`

```text:実行
　tshark -r test.pcap -T fields -e smb2.acct -e smb2.tree -e smb2.filename -e smb2.host -Y 'smb2.tree && tcp.dstport==445 && smb2.filename != "" && smb2.acct != ""'
```

下記のようにパイプやリダイレクトを利用して簡単に扱えるデータに変換ももちろん可能です。

```text:参考
　tshark -r test.pcap ＜オプション系＞ | grep -i test
　tshark -r test.pcap ＜オプション系＞ > test.csv
```

#オプション
|オプション  |内容|
|:---|:---|
|-i \<interface>|キャプチャするインターフェイスを指定|
|-f \<capture filter>|libpcapフィルタsyntaxによるフィルタを指定|
|-s \<snaplen>|snapshot lengthを指定（デフォルト：65535）|
|-p|プロミスキャスモードを使用しない|
|-y \<link type>|リンクレイヤータイプを指定（デフォルト：first appropriate）|
|-D|インターフェイスリストを表示|
|-L|インターフェイスのリンクレイヤータイプリストを表示|
|-c \<packet count>|指定したパケット数で停止（デフォルト:無限）|
|-a \<autostop cond.>|・duration:NUM <br> NUMで指定した秒数経過により停止 <br> ・filesize:NUM <br> NUMで指定したサイズ(KB)に保存ファイルが達したら停止 <br> ・files:NUM <br> NUMで指定した数の保存ファイル数に達したら停止|
|-b \<ringbuffer opt.>|・duration:NUM <br> NUMで指定した秒数経過により次のファイルへ保存 <br> ・filesize:NUM <br> NUMで指定したサイズ(KB)に保存ファイルが達したら次のファイルへ保存 <br> ・files:NUM <br> NUMで指定した数の保存ファイル数に達したらファイルの置き換え|
|-r \<infile>|パケットfileから読出し|
|R \<read filter>|Wiresharkディスプレイフィルタを指定|
|-n|すべての名前解決を無効にする(デフォルト:有効）|
|-N \<name resolve flags>|特定の名前解決を有効にする|
|-d \<layer_type>==\<selector>,\<decode_as_protocol>|特定のポートを特定のプロトコルと紐付け <br> tcp.port==8888,httpの場合は<br>「tcpポート8888番はhttpとする」となる|
|-C \<config profile>|設定ファイルを指定|
|-F \<output file type>|出力ファイルタイプを指定|
|-V|表示にパケットツリーを追加|
|-S|[-w]オプションを有効にしている場合でもパケットを表示|
|-x|hex、ACSIIダンプ表示を追加|
|-e \<field>|アウトプットしたいフィールドを指定|

# 参考
[Homebrewのインストール方法](https://qiita.com/zaburo/items/29fe23c1ceb6056109fd)
[tshark オプションメモ ](http://n.pentest.ninja/?p=202)
[Rails]初学者がform_withの流れを整理・理解するための記事

#はじめに
Rails学習初期に、form_withの流れが理解できなかったのでまとめます。
Rails5.2.4です。

#先にまとめ
「早くまとめろよ！」という方もおられるかと思いますので、先に流れをまとめます。
<img width="773" alt="スクリーンショット 2020-06-02 1.08.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602794/5cd2e57e-cc2f-ea1a-af97-ad1baf830ae4.png">

#簡単に解説
UserモデルとPostモデルがある状況です。

**①newアクションで、ビューページ（new.html.erb）を表示**
newアクションを呼び出すリクエストが出されたら、まずはpostの新規投稿(new）ページが表示される
※イメージ
<img width="1277" alt="73ee6ee22fb145fb7034907eef85317e.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602794/f7bf5dc4-e076-1c52-5e8b-9cf0a05db331.png">

**②newアクションで生成している`@post`インスタンスをビューに渡す**

```ruby:post_controller.rb
class PostsController < ApplicationController
~~
  def new
    @post = Post.new #ここで生成されている@postが、new.html.erbに渡される
  end
~~
```

**③インスタンスのプロパティに値を入力してsubmit**
![f3253df790131a6ac795eeff52d4ee5d.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602794/40af928e-30cf-545a-6b59-753e960b004c.gif)


**④createアクションを呼び出す**
上記の画像のように、`投稿する`ボタン（form_withのsubmit）をクリックすると、form_withがcreateアクションを呼び出してくれます。

>※form_withヘルパーメソッドは、渡されたインスタンス（この場合は`@post`）のプロパティを見て、createに飛ばすかupdateに飛ばすかを判断してくれる便利な子です。

```:form_withが考えてること
- @post が空 →　初めて作るんだな！じゃあcreate！
- @post が空じゃない　→　変更したいんだな！じゃあupdate！
```
**⑤post_paramsメソッドを呼び出す**

```ruby:post_controller.rb
class PostsController < ApplicationController
~~
  def create
    #createアクションが呼び出され、Post.create(post_params)が実行される→ post_paramsが呼び出される
    Post.create(post_params) 
    redirect_to root_path
  end

  private
  def post_params 
    params.require(:post).permit(:title, :content).merge(user_id: current_user.id)
  end
~~
```
**⑥paramsで受け取った値のうち、permitで受け取る値を指定（許可）**

```ruby:paramsで受け取る値の状態
[1] pry(#<PostsController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"oLGgLMTcqSPi7cbK9j1wFhH5rqiwXYO7GyRoZcZFZe6Y5VdbHrWCOyeo37kgW/bsl+eANQrz7p/lAzZMnAS8Gg==", 
"post"=>{"title"=>"今日学んだこと", "content"=>"form_withは賢い子！"}, 
"commit"=>"投稿する", "exept"=>:index, "controller"=>"posts", "action"=>"create"} permitted: false>
```
見にくいので本来ない位置で改行していますが、通常は1行で返ってきます。

`"post"=>{"title"=>"今日学んだこと", "content"=>"form_withは賢い子！"}, `
が`post_params`で扱う値です。

`permit`で受け取る値を許可しておかないと、意図しない値がテーブルに保存される可能性があるので、指定がほぼ必須です。

**⑦post_paramsの値でPostをcreateする（成功すればテーブルに保存される）**
post_paramsメソッドで返された値で、Post.createすることになるので、
実質下記と同じ状態です。

```ruby
  def create
    Post.create(title: "今日学んだこと", content: "form_withは賢い子！", user_id: 1) 
    redirect_to root_path
  end
```

この流れを確認した上で、もう一度冒頭の画像を見ると理解が深まると思います！

#おわりに
form_tag、form_forとの違いはこちらの記事にまとめています。
[[Rails]hamlでのform_with／form_for／form_tagの書き方](https://qiita.com/masato-teshita/items/8a4f4503c73fb930490c)

間違い等ありましたらご指摘いただけると幸いです。
【備忘録：jQuery】thisを明示的に使用する

## 関数内でthisを使用したい！
関数内でthisを使用し、呼び出したかったのですがエラーになり呼び出せませんでした。。。

調べると、**「$.proxy」**なるものでできそうなのでそれで対応してみました。

```javascript:index.js
  let $selectProduct = $('.js-product-select');
  let $selectService = $('.js-service-select');

  function select(){//関数
    let $this = $(this);
    if($this.hasClass('is-select')){
      $this.removeClass('is-select');
    } else {
      $this.addClass('is-select');
    }
    return false;
  }

  $selectProduct.on('click',$.proxy(select));//$.proxy()で関数内のthisを明示的に指定する
  $selectService.on('click',$.proxy(select));
```

内容としては、クリックするとクラス.is-selectが付き、枠線の色を変更するといった動作です。

以前は、

```javascript:index.js
$selectService.on('click',function(){
  select();
});
```
このように記述していたのですが、そうすると関数内のthisが分からずにエラーがでていました。。

```javascript:index.js
  $selectService.on('click',$.proxy(select));
```
今回このようにclickイベントに$.proxyで関数を指定することで、関数内のthisがエラーにならず挙動することができました。


参考元：
https://javascript.programmer-reference.com/jquery-proxy/
ReactNative + EXPO動作環境でのfirebase動作確認についての質問

ReactNative + EXPO　で簡単なアプリ開発を勉強してる初心者です。簡単なApkファイルの作成・動作確認までできる状態で、次のステップとしてFirebaseの連動を試しています。

ところが、どうもFirebaseのコードを記載するとwebブラウザで動作確認するときに画面が真っ白になってしまいます。
コンパイル時点でのエラーはないため、firebase接続のエラーではないかと考えています。

そこでfirebaseの接続を確認できる方法などあれば教えていただきたく投稿しました。独学で調べていますが、設定などでどこかに見落としがあるのでは？考えていますが、それがどこか特定できていません。


<実施している動作>
コマンドプロンプト起動
1.$ expo init (プロジェクト名）
2.$ cd (プロジェクト名）
3.$ npm install --save firebase 
4.プロジェクトフォルダ内のApp.js に以下コード記載

　import * as firebase from 'firebase' ;
　　var firebaseConfig = {
   　 apikey: "（省略）",
    　authDomain:"（省略）",
    　databaseURL:"（省略）",
    　projectId:"（省略）",
    　storageBucket:"（省略）",
    　messagingSenderId:"（省略）"
　　　}
　　(以下練習プログラム程度のコマンドが続く）　

5.コマンドプロンプトでプロジェクトフォルダに移動
　npm start で動作確認
　
コンパイルエラーはないものの、画面は真っ白な状態です。（render部分の表示もない状態）


疑っている部分は以下の点などです。
・google-services.jsonの保存場所や読み込み方法
（現在はプロジェクトフォルダのApp.jsと同じ階層に保存）
・package.jsonやapp.json、あるいはその他の設定ファイルなどの変更必要性など、あれば。



>追記
上記の問題解決しました。
どうもfirebase側の設定がうまくできていなかったようです。

matinanaさんの記事（以下）を参照してfirebaseの設定をするとうまく通信できました。
https://qiita.com/matinana/items/c6270503f47498e3d5ce
【Rails】rails newしてPostgreSQLでデータベース作成まで

##はじめに
今年はWebにも少しづつ挑戦しようということで、参考文献の一番多そうなRailsをイジイジしています。取り敢えずローカルでの環境構築を終えてRails newして色々と試しているところです。
このあたりで一度頭の中を整理しつつテンプレ化しておきたいのと、間違いの指摘など頂けたら嬉しいなあと思って記事を書いています。
あとはRails newがうまくいかない人の参考になれば嬉しいです。

##環境
```terminal:terminal
Windows10
ruby 2.6.6
Rails 6.0.3.1
psql (PostgreSQL) 12.3
```
環境構築に関しては書きませんので必要に応じてお調べください。
データベースはPostgreSQLに変更します。
それとgemについては基本的にローカルに入れてます。どちらでもいいみたいなんですが、なんとなくそうしています。

##アプリケーションのディレクトリ内にGemfileを作成する
ディレクトリは適当に作ってください。

```terminal:terminal
C:\Users\user\sample_app> bundle init
```
##Gemfileに追加するgemを記述する
作成したGemfileをエディタで開き、以下を追加する。

```tex:Gemfile
gem 'rails'//コメントアウト(#)を外すだけ
gem 'pg'//PostgreSQLに変更する場合
```
gemのバージョンを指定したほうがいいのか、よく分からなかったので一先ず指定しないでおく。

##bundle installする

```terminal:terminal
bundle install --path vendor/bundle
```
--path vendor/bundleはgemをローカルにインストールする場合に指定する。こうすることでvendor/bundle内にgemがインストールされるらしい。
--path vendor/bundleは最初の一回目だけ指定すれば、あとは省略できるみたい。

##rails newする

```terminal:terminal
bundle exec rails new . -d postgresql --skip-turbolinks --skip-test
```
bundle execはRailsをローカルにインストールした場合につける。以降全てのrailsコマンドにつけます。
-d postgresql --skip-turbolinks --skip-testはオプションでこれら以外にも色々あるみたいなので必要に応じてお調べてください。
いまいち分からないものが多いので取り敢えずみんな書いているものだけ書く。

##SQL Shellでデータベースを作成する

```terminal:SQLShell(psql)
create role APPLICATION_NAME with createdb login password 'PASSWORD';
select * from pg_user;
```
APPLICATION_NAMEにはユーザーネーム(アプリ名)、PASSWORDには任意のパスワードをいれます。
select * from pg_user;でロールが作成されているか確認します。

##database.ymlを更新する
configフォルダ内のdatabase.ymlに以下を記述します。

```yml:database.yml
・
・
default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

  username: APPLICATION_NAME//追加(データベース作成時に決めたユーザーネーム)
  password: PASSWORD//追加(データベース作成時に決めたパスワード)
  host: localhost//追加
・
・
```
database.ymlを保存したらデータベースも更新します。

```terminal:terminal
bundle exec rails db:migrate:reset
```

##サーバーを起動する

```terminal:terminal
bundle exec rails s
```
ブラウザでhttp://localhost:3000/
にアクセスして画像が表示されれば成功。

![rails.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637123/69eb2de3-5463-962f-ed33-c59fca968032.png)
【Azure】WVDを触ってみた

WVDの検証環境を提供していただいたので、触ってみた感想を記載。

【セットアップ時】
・手順はあったので、すぐに始めることはできた。（リモートデスクトップで使いはじめるまで5分くらい）
・リモートデスクトップから初回ログインするときに、2回ログインが求められたので少し迷った。

【エッジ利用時】
・エッジを使ってみて、少しかくかくしているが、そんなに気にならない。
・千葉さんが言ってたように、ローカルのタスクバーにリモートのアプリが表示されるとき、わかりやすいようにリモートのマークが付いているので、間違いづらいと思う。
・タブを5つくらい開くと、ちょっと動作が遅くなる。文字変換の反応が遅いなど。
・ローカルのインターネット接続を奪われないので、便利。しかし、両方でネットを使うと動作は重くなり、文字の入力に時間がかかるなどが発生。（ローカルはmiroを利用、リモートデスクトップはネットサーフィン）

【paint利用時】
・paintが重い。マウスは動くが、書いた図が10秒くらい反応しない。
・しばらくして、接続が切れた。

【word pat利用時】
・wordpatは使い心地良い。
・保存も問題なくできる。
・ファイルを保存してwordpatを閉じる⇛再度wordpatを開く⇛ファイルから保存したファイルを開くときに動きが重くなった。

【session desktop利用時】
・session desktopは利用できなかった。

【再度リモートデスクトップにログインしたとき】
・アイコンをクリックするとログイン情報を求められず入れるので、便利。
・エッジ接続時には、パスワードのみ求められる。
HP P2000 G3 の初期化手順

* [公式マニュアル](https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c03231043)

## 初期化

```sh
# restore defaults
WARNING: The configuration of the array controller will be re-set to default settings.  The Management Controller will restart once this is completed. Are you sure? yes
他の管理コントローラーがデフォルト値を復元するまで待機しています...
パートナーコントローラーはデフォルトの復元に成功しました。
ストレージコントローラー(SC)がデフォルト設定にリセットされました。
保持されているデフォルト値が適用されています...
Success: コマンドは正常に完了しました。 - デフォルト構成に復元されました。 MCは、約60秒で再起動します... (2019-11-11 11:31:19)
```