OmniAICreator/Qiita-1.07M huggingface dataset:
ファッ⁉ enumってなんや？

どーも、ふぎとです。

最近はオブジェクト指向の学習を進める日々・・・。
進めるうち、classでもinterfaceでもない、
enumなる型に遭遇。

調べてみると「列挙型」というものだそう。

##列挙型？
列挙型はclassでもinterfaceでもない、「第3のクラス宣言」。
特徴は、**宣言と同時にその型のインスタンスが生成される**
ということ。そしてそれ以降、その型のインスタンスは生
成できず、宣言時に作られたインスタンスしか使えない。
この「間違った値を使えない性質」を「**型の安全性が保証
されている**」という（らしい）。

~~~ruby:
public enum Language{
    JAPANESE,
    ENGLISH,
    CHINESE
}
~~~
↑宣言した時点で、Language型のインスタンス"JAPANESE",
"ENGLISH","CHINESE"が作成される。どんな天才でもこれ
以降Language型のインスタンスを新たに作ることはできない

##使い方
列挙型のインスタンスを使うときは、"(型名).(列挙子＝インスタンス名)"
という風に記述する。というのも列挙型のインスタンスは、型の宣言時
から存在するstaticなインスタンスだからだ（らしい）。

~~~ruby:
import java.util.Arrays;
import java.util.List;

public class UseEnum{
    public static void main(String[] args){
        List<Country> list = Arrays.asList(
                             new Country("Japan", Language.JAPANESE),
                             new Country("America", Language.ENGLISH),
                             new Country("England", Language.ENGLISH),
                             new Country("CHINA", Language.CHINESE) );
        list.forEach(System.out::println);
    }
}
~~~
##まとめ
・列挙型enumはクラス宣言のひとつ
・特徴は「型の宣言と同時にインスタンスが生成される」こと
・「誤った値を指定できない」ことを「型の安全性が保障され
　ている」という
・列挙型のインスタンスはstaticなインスタンスになる
・そのため使用時は"(型名).(列挙子)"の形で記述する

(P.S.)
もっと勉強します(+o+)
【Rails】【DB】database.yml

#database.yml
Railsにおけるデータベースの設定ファイル。
Railsアプリケーションを作成すると自動的に生成され、デフォルトではSQLiteを使用する前提で作成されます。

##MySQL用のdatabase.yml
MySQL等のSQLite以外のデータベースを使用する前提で生成する場合は、アプリケーションを作成する際に明示的にオプションでデータベースを指定します。

```
$ rails new アプリケーション名 -d データベース
$ rails new アプリケーション名 --database=データベース
```
使用可能なデータベースは下記になります。

```
「mysql / oracle / postgresql / sqlite3 / frontbase / ibm_db / sqlserver / jdbcmysql / jdbcsqlite3 / jdbcpostgresql / jdbc」
```
実際にRailsでアプリケーションを作成すると、`config/database.yml`ファイルが自動生成されています。

```database.yml
# MySQL.  Versions 4.1 and 5.0 are recommended.
# 
# Install the MYSQL driver
#   gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
#   gem 'mysql2'
#
# And be sure to use new-style password hashing:
#   http://dev.mysql.com/doc/refman/5.0/en/old-client.html
development:
  adapter: mysql2
  encoding: utf8
  database: sample_mysql_development
  pool: 5
  username: root
  password:
  host: localhost

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: mysql2
  encoding: utf8
  database: sample_mysql_test
  pool: 5
  username: root
  password:
  host: localhost

production:
  adapter: mysql2
  encoding: utf8
  database: sample_mysql_production
  pool: 5
  username: root
  password:
  host: localhost
```
上記の設定ファイルのコマンドはそれぞれ下記の意味を示しています。

```
adapter:   使用するデータベース種類
encoding:  文字コード
reconnect: 再接続するかどうか
database:  データベース名
pool:      コネクションプーリングで使用するコネクションの上限
username:  ユーザー名
password:  パスワード
host:      MySQLが動作しているホスト名
```
MySQLでは特にホスト名、ユーザー名、パスワードの指定が必要になってます。
ユーザ名はデフォルトで`root`になっています。

##MySQL接続用のアカウント作成
MySQLではアカウント名、パスワード指定、ホスト名が必要になるのでそれぞれ設定していきます。

```
$ mysql -u root
:
:
mysql> create user 'ユーザー名'@'localhost' identified by 'パスワード';
```
`mysql -u root`でMySQLに接続をしアカウント名、パスワード、ホスト名を設定しました。

```
mysql> select User,Host from mysql.user;
:
:
mysql> grant all on *.* to '[ユーザー名]'@'localhost';
```
`select User,Host from mysql.user;`で作成されているかを確認し、`grant all on *.* to '[ユーザー名]'@'localhost';`をしアカウントに権限を付与しました。
###database.ymlの書き換え
設定したアカウント名、パスワード、ホスト名に変更します。

```
development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: [アプリ名]_development
  pool: 5
  username:設定したユーザー名
  password:設定したパスワード
  host: localhost

test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: [アプリ名]_test
  pool: 5
  username:設定したユーザー名
  password:設定したパスワード
  host: localhost

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: [アプリ名]_production
  pool: 5
  username:設定したユーザー名
  password:設定したパスワード
  host: localhost
```
これでMySQLにデータベース作成等の操作ができようになりました。

```
mysql> create database database名
```
【Webサーバ】nginxにアクセスできなくて調査したときの話

GCEにnginxをインストールしたが、接続できなかったので調査したときの話です。

以下のエラーがでた
curl: (7) Failed connect to ***.***.***.***:**; 接続を拒否されました

・ping確認

PING ***.***.***.***:** (***.***.***.***:**) 56(84) bytes of data.
64 bytes from ***.***.***.***:**: icmp_seq=1 ttl=55 time=127 ms
--- ***.***.***.***:** ping statistics ---
14 packets transmitted, 14 received, 0% packet loss, time 13017ms

https://eng-entrance.com/linux-command-ping
上記のサイトにあるとおり、正常に疎通はとれてる

apacheを入れなおして、apacheを起動したら正常にアクセスできた。

curl -I ***.***.***.***
HTTP/1.1 403 Forbidden
Date: Tue, 24 Mar 2020 22:39:08 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
ETag: "1321-5058a1e728280"
Accept-Ranges: bytes
Content-Length: 4897
Content-Type: text/html; charset=UTF-8

Curlの表示も変わった。

nginxが起動できてなかったという恥ずかしい話でした。

【思ったこと】
・GCPのファイアウォールの設定を理解は必要
https://dev.classmethod.jp/articles/gce-firewall/

【参考サイト】
http://yebisupress.dac.co.jp/2018/08/23/publish_website_with_google-cloud-platform/
Windows10タブレット、firefox70以降でsimple gesturesが反応しないとき

# Firefox68ESRから最新のFirefoxに切り替えたらジェスチャーが使えなくなっていた
https://github.com/utubo/firefox-simple_gesture
Winタブでsimple gestureというプラグインを便利に使っていたのだが、
最新のFirefoxに乗り換えたら指でのタッチジェスチャーが効かない。

simple gestureの設定画面ですら指でのタッチジェスチャーの軌跡が反応しないので、これはFirefox側の問題であろうとあたりをつける。

# about:configでtouchで検索し、適当に当たったら怪しいのを見つけた

![コメント 2020-03-25 142718.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25349/658e8dfc-021b-890a-7fdd-3730033790c4.png)

`dom.w3c_touch_events.legacy_apis.enabled`
これをtrueにしたら指でのタッチジェスチャーが反応するようになった気がする。
手元に確かな情報はないしうろ覚えだけど、このtouch検索で見つかるどこかを適当に押したら反応するようになった。

同じ状況でお困りの方のヒントになれば幸い。
【iOS13】（バージョンアップ対応）描画系の処理は、メインスレッド？！

## iOS13 バージョンアップ対応

現在、アプリケーションをバージョンアップ対応用に作業しているのですが、、、

iOS13 だと描画系の処理はメインスレッドで書かないと落ちる現象が起きているようですね。

メインスレッド、サブスレッド話は、プログラミング慣れてこないとわからない文言なのですが

簡単にいうと同時か同時じゃないかという感覚で、、、

ちょっとここでは逃げさせてください。

またこの表題の答えがはっきりした記事を見つけたら掲載しますね。

## iOS13 対応に関する記事まとめ
|iOS13対応||
|:--:|:--|
|iOS 13における必須対応について|https://techracho.bpsinc.jp/yoshi-k/2019_08_28/79514|
|iOS13のPopoverにつまずいた|https://qiita.com/am10/items/412dede2c59e02c4d86b|


## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

#スポンサー募集


## ネリム
https://nerim.co.jp/
配信事業などを映像コンテンツなどの制作しております

## ビヨンドXプロジェクト

[ビヨンドXプロジェクト全体会議](https://www.youtube.com/playlist?list=PLaR6-YWiGWkYhEHWnt8f1z-JC0g3nwwC9)
【Rails】Ransackで検索機能を作るときの細かいTips

# Ransackとは
Railsのgemで、簡単に検索機能を実装することができます。
[公式ドキュメントはこちら](https://github.com/activerecord-hackery/ransack)


# この記事の目的
僕が使っていてハマったところや、欲しかったけどなかなか見つからなかった情報なんかを入れていきます（たまに更新します）

# Ransackを使ったときの細かい?Tips



## 空欄で検索できないようにする

search_fieldの最後「required: true」が重要です。

```ruby:hoge.html.haml

.search_form
  = search_form_for(@q, url: search_path) do |f|
    = f.label :name, "keyword", placeholder:"商品名、一般名で検索できます"
    = f.search_field :standard_name_cont_all, required: true
    = f.submit "検索"
```

<a href="https://gyazo.com/a78c19b7b9e108f4c10e962950648f3b"><img src="https://i.gyazo.com/a78c19b7b9e108f4c10e962950648f3b.gif" alt="Image from Gyazo" width="604"/></a>


## AND検索

*_all　と足せばOKなのですが、検索窓に「鈴木　テニス」と入れても検索クエリは"鈴木　テニス"と一つにしかなりません。
コントローラーで分けてあげる必要があります。

```ruby
params[:q]['standard_name_cont_all'] = params[:q]['standard_name_cont_all'].split(/[\p{blank}\s]+/)
@q = Product.ransack(params[:q])
@products = @q.result(distinct: true).page(params[:page]).order(price: 'DESC')
```
大事なのはここですね、 **.split(/[\p{blank}\s]+/)**です
これを追加してあげると検索クエリが"鈴木"と"テニス"になるので、めでたくAND検索が可能になります。
【GCP】gcloudコマンドのインストール

私が利用しているOSはubuntuです。

【参考サイト】
https://laboradian.com/install-google-cloud-sdk-on-wsl-ubuntu/
ubuntu系もlinuxでやったほうがいいとかいてあるが、そんなことなかった。

https://cloud.google.com/sdk/docs/quickstart-debian-ubuntu
普通にubuntu系でやったほうがいい

linuxでやろうとしても、gcloudコマンドがインストールされてないので、使えるわけがない。
　例）コマンドを打ってもgcloudのコマンドはありませんと表示される

【gcloudコマンドを使ってみた】
・gcloud init 後、以下のように表示されるが、表示されるのはプロジェクトのID。
Pick cloud project to use: 
 [1] **************-272013
 [2] our-lamp-*******
 [3] Create a new project
Please enter numeric choice or text value (must exactly match list item):  

・以下のコマンドはgcloud initのあとではなく、ターミナルでそのままうっていい
gcloud compute ssh instance-1
gcloud compute instances list

・パスを空白にしてたら何も入れずにエンターすればいける

・gcloudコマンドやるとIPをいちいち調べる必要がなかったので、便利

====

https://blog.apar.jp/web/6912/
Google Cloud SDK のインストール
SDKのインストール部分でもう少し詳しいことが書いてある。
アノテーションコマンド TODO FIXME OPIMIZE HACK REVIEW など

アノテーションコマンドについて
---
~~~
// TODO: あとで追加すべき内容を表す
// FIXME: 修正すべき箇所を表す
// OPTIMIZE: パフォーマンスの最適化をすべき箇所を表す
// HACK: リファクタリングすべき箇所を表す
// REVIEW: レビューすべき箇所を記す
~~~

コメントで使えるもの使えないものがありましたが詳しくわかったら掲載します。
ある種、チーム内で処理の共有あとあとなんだっけというのがないようにグループのWikiなどに記載方法とか乗せるといいですね！


---


## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

#スポンサー募集


## ネリム
https://nerim.co.jp/
配信事業などを映像コンテンツなどの制作しております

## ビヨンドXプロジェクト

[ビヨンドXプロジェクト全体会議](https://www.youtube.com/playlist?list=PLaR6-YWiGWkYhEHWnt8f1z-JC0g3nwwC9)
【linux】検索コマンド

find / -name Debug -print

https://builder.japan.zdnet.com/os-admin/20363968/
find /
findを用いてシステム内にあるすべてのファイルを表示している

解説は以下
https://eng-entrance.com/linux-command-find
 find 検索先 -name ファイル名
冒頭のコマンドはhomeからdebugという名前のファイルとフォルダを探す

https://www.atmarkit.co.jp/ait/articles/1607/20/news024.html
-printはフルパスを表示する

https://www.atmarkit.co.jp/ait/articles/1607/12/news021.html
上記サイトの例を使うのもいい
find ~ -name "*bash*"

https://26gram.com/linux-find-command
他のコマンドも絡めながら解説　touch mkdir

https://blog.be-dama.com/2015/01/20/find%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B%E9%9A%8E%E5%B1%A4%E3%82%92%E6%8C%87%E5%AE%9Amaxdepth/
数字を指定すればカレントディレクトリのみ検索できたりする

・-name がないと、検索結果が全て出てしまうので注意。
【GCP】SSH鍵の登録

【参考サイト】
最初こっちでやってたがうまくいかず→https://sleepless-se.net/2018/09/15/gcp-ssh/
こちらのやり方だと正常にできた→https://qiita.com/rog-works/items/74402f09b5aecc73f823


キーペアの生成について、AWSはインスタンス作成時の流れで可能だが、
GCPだとキーペアを別で作成する必要があるので少し不便。

【コマンド】
 ssh-keygen -t rsa -f ~/.ssh/my-ssh-key -C ******
 chmod 400 ~/.ssh/my-ssh-key
 cat ~/.ssh/my-ssh-key.pub
 ssh *****@***.***.***.*** -i ~/.ssh/id_rsa

【ポイント】
・ユーザー作成の時にメールアドレスをそのままいれるのはよくなさそう
・ユーザができるというのは、メタデータ＞　ユーザー名のところに自動で生成されるということのよう
python beautifulsoup requests glob find_all

###サンプルコード1 (urlを指定)

```python:
import requests
from bs4 import BeautifulSoup

url = 'https://xxx'
r = requests.get(url)

soup = BeautifulSoup(r.text, 'html.parser')

#pタグのテキストを表示
tag_p = soup.find_all('p') 
for p in tag_p:
  print(p.text)

#--- 以下は、find_allメソッドの例(findメソッドも同じ) ---
#属性の指定
ids = soup.find_all(id='sample')

#属性の指定(class)
clss = soup.find_all(class_='sample')

#タグ名と属性を指定
divs = soup.find_all('div', class_='sample')

#複数のタグ
tags = soup.find_all(['a', 'b', 'c'])

```

### サンプルコード2 (ファイルを指定）

```python

from glob import glob
from bs4 import BeautifulSoup

# 同一ディクトリ内のhtmファイルを対象とする時
files = glob('*.htm')

for file in files:
  ff = open( file, 'r' ,encoding='utf-8' ).read() 
  soup = BeautifulSoup( ff ,'html.parser')

  #pタグのテキストを表示
  tag_p = soup.find_all('p')
  for p in tag_p:
    print(p.text)

```
Bracketsエディタからgit pushボタンで自動でデプロイされるCI環境を作る

# はじめに
「[AWS Codepipelineを使ってReactアプリのCI環境をゼロから作る](https://qiita.com/NorihitoYamamoto/items/a463c5641bc3401a4439)」で作ったCI環境を、エディタBracketsから直接実行できるようにします。Bracketsでソースを修正し、ローカルプレビューで確認した後、git pushボタンを押すことでデプロイまで自動で行います。
Bracketsは、Adobeによりオープンソースで開発されているWebアプリ開発向けのコードエディターです。

# 事前準備
* gitの導入とReactプロジェクトでの設定（参考：[AWS Codepipelineを使ってReactアプリのCI環境をゼロから作る](https://qiita.com/NorihitoYamamoto/items/a463c5641bc3401a4439)）

# 手順
### Bracketsのインストール
http://brackets.io からインストーラをダウンロードし、ダブルクリックしてインストールします。

### Brackets Git機能拡張をインストール
Bracketsを起動し、「ファイル」→「機能拡張マネージャー」を開きます。「Brackets Git」を検索し「インストール」ボタンを押してインストールします。

### BracketsでReactプロジェクトを開く

Bracketsを起動し、「ファイル」→「フォルダを開く」で、Reactプロジェクトのホームディレクトリを開きます。左ペインのファイル一覧から編集したいファイル名をクリックしてメインウィンドウに開きます。

### Bracketsからgit操作
Bracketsの右端にあるGit機能拡張アイコン（*1）を押すと下側にgit操作のパネルが開きます。
ソースコードを編集し保存すると、更新したファイルがgit操作パネルに表示されます。その左側にチェックを入れると、Commitアイコン（*2）が押せるようになります。Commitウィンドウがポップアップするので、コメントを書いて「OK」ボタンを押します。右側のgit pushアイコン（*3）に更新数が表示されます。git pushアイコンを押してpushウィンドウがポップアップするので、そのまま「OK」ボタンを押します（SSH鍵認証しているのでユーザ／パスワード不要です）。
[AWS Codepipelineを使ってReactアプリのCI環境をゼロから作る](https://qiita.com/NorihitoYamamoto/items/a463c5641bc3401a4439)で作ったCI環境があれば、これで自動でビルドし公開環境にデプロイされます。

*1 git機能拡張アイコン：
<img width="28" alt="git.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603113/e91f4004-c9d4-bf4f-e6ad-2c31f6aa2211.png">
*2 Commitアイコン：
<img width="80" alt="Commit.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603113/01cce63a-652a-6bc7-8dcf-e549c23c5940.png">
*3 git pushアイコン：
<img width="36" alt="push.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603113/12829244-38e3-0dc4-c154-9107af5b40dc.png">

# リンク
http://brackets.io
macOS CatalinaにMonocle3とphateRを導入

#macOS CatalinaにMonocle3を導入
MacOS 10.15.3初期状態
R 3.6.3/XCODE導入

XQuartz-2.7.11.dmgをインストール
https://www.xquartz.org/

##準備：gfortranのエラー対処
/usr/local/gfortran/libを参照しているのでシンボリックリンクをはる

###shellで操作
```
$ sudo mkdir -p /usr/local/gfortran/lib
$ cd　/usr/local/gfortran/lib
$ sudo ln -fs /usr/local/lib/gcc/9/libgfortran.* ./
$ sudo ln -fs /usr/local/lib/gcc/9/libquadmath.* ./
```

##準備：Bioconductor導入
###Rで操作
```
if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install()
```

##準備：gdalをインストールしておく
sfの導入に必要なのでターミナルでgdalを導入
brew使える環境なら以下のコマンドでok（と思う）

###shellで操作
```
$ brew install pkg-config
$ brew install gdal
```

##Monocle3をインストール
###Rで操作
```
BiocManager::install(c("SummarizedExperiment","SingleCellExperiment", "batchelor", "DelayedMatrixStats", "limma"))

install.packages("devtools")
devtools::install_github('cole-trapnell-lab/leidenbase')
devtools::install_github('cvarrichio/Matrix.utils')
install.packages("sf", dependencies = TRUE)
devtools::install_github('cole-trapnell-lab/monocle3')
```

##phateRをインストール
###shellで操作
```
$ pip3 install phate
```

###Rで操作
```
install.packages("phateR")
```

または

```
if (!suppressWarnings(require(devtools))) install.packages("devtools")
reticulate::py_install("phate", pip=TRUE)
devtools::install_github("KrishnaswamyLab/phateR")
```
AirSimをはじめてみる（Joystick操作、Python操作）

# はじめに
Microsft製OSSのフライトシミュレータAirSimを試してみる。環境は下記のとおり。

|項目  |バージョン  |
|---|---|
|OS |Windows10  |
|Python |3.7 |
|AirSim |1.2.2Windows |

# インストール
* マップ毎にビルドされたバイナリ版があるのでそちらを使用する。 
* 下記リンク先のAssetから任意のzipをダウンロード。今回は`Blocks.zip`と`Africa.zip`を入手。  
https://github.com/Microsoft/AirSim/releases
* zipを展開して中にある`run.bat`を実行。			
* 初回は必要なランタイム（UnrealEngine, VisualStudio）のインストールを促されるので従えばOK。
* GPUなしPCでは表示がかなり厳しい。下記を参考に`run.bat`を編集してクオリティを抑える必要あり。  
https://microsoft.github.io/AirSim/docs/use_precompiled/
* `run.bat`修正例。

```text:run.bat
start Blocks  -ResX=640 -ResY=480 -windowed
```

# 実機プロポで操作
* 実機用プロポ（ラジオ送信機）でマニュアル飛行を試してみる。
* 使用したプロポはこちら。  
https://betafpv.com/products/literadio-2-radio-transmitter
* AirSim起動後にプロポをUSB接続したらJoyStickとして認識される。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Microsoft製のフライトシミュレーターであるAirSimを試している。LiteRadio2は挿すだけでjoystickとして簡単に認識したけど、キーバインドの変更方法がわからないぞ。要ビルド？<br>あとMinibookではさすがにカクカク。 <a href="https://t.co/ojak3DKPEB">pic.twitter.com/ojak3DKPEB</a></p>&mdash; H.Fujikawa (@hfujikawa77) <a href="https://twitter.com/hfujikawa77/status/1242304137405935616?ref_src=twsrc%5Etfw">March 24, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
* キーバインドの変更方法がわからないのでまともに使えてないので継続調査要。
* この辺のソースを修正してビルドが必要？  
https://github.com/microsoft/AirSim/blob/master/Unreal/Plugins/AirSim/Source/SimJoyStick/SimJoyStick.cpp#L50  
https://github.com/microsoft/AirSim/blob/master/docs/remote_control.md

# Pythonから操作
* GithubからAirSimのプロジェクトをCloneしてAirSim起動後に下記Pythonスクリプトを実行する。  
https://github.com/microsoft/AirSim/blob/master/PythonClient/multirotor/hello_drone.py
* 実行手順。`pip install`の個所は実行者の環境によって異なる可能性あり。
    
```bash
$ git clone https://github.com/microsoft/AirSim
$ cd ./AirSim/PythonClient/multirotor
$ pip install opencv-python
$ pip install msgpack-rpc-python  
$ python hello_drone.py  
``` 

* 飛行するところ。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">わかりにくいけど、PythonスクリプトからAirSim上のドローンの離陸を実行。<a href="https://twitter.com/hashtag/AirSim?src=hash&amp;ref_src=twsrc%5Etfw">#AirSim</a> <a href="https://t.co/dXEMFzm4Pn">pic.twitter.com/dXEMFzm4Pn</a></p>&mdash; H.Fujikawa (@hfujikawa77) <a href="https://twitter.com/hfujikawa77/status/1242475478683750401?ref_src=twsrc%5Etfw">March 24, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
* `hello_drone.py`を見ると離着陸、移動など参考になるコードがある。

|用途|コード例|
|---|---|
|機体接続|client = airsim.MultirotorClient()|
|機体状態取得|state = client.getMultirotorState()|
|離陸|client.takeoffAsync().join()|
|移動|client.moveToPositionAsync(-10, 10, -10, 5).join()|

# まとめ
AirSimを使うことでプロポによるマニュアル操作、Pythonをつかったプログラミング操作のシミュレーションができることがわかった。
Laravel 新規プロジェクト作成手順（laravel コマンドが使えなかったとき、composerコマンドでやってみよう）

#　Laravel 新規プロジェクト作成手順


今回は、プロジェクト名を「laravelapp」にしています。
ここは、ご自身の指定したプロジェクト名に変更可能です。

```
laravel new new-project　laravelapp
```

上記のコマンドが上手く動作しなかった場合、下記のコマンドを実行してみてください！！

```
composer create-project laravel/laravel laravelapp --prefer-dist
```
ServiceNow 基本機能について

ServiceNowを[無償インスタンス](https://qiita.com/diapers_and_snow/items/35a37e51c9435b2c968b)を利用して、個人的に理解した内容をまとめます。
RDBの管理に慣れている方に、親和性のある製品だと思います。

# ServiceNowとは
SaaSによる、ITILに沿った<font color="blue">**インシデント登録型の定型業務アプリケーションの構築環境（Maria DB + 開発用UI）**</font>で、プログラミング無しでも一定品質のアプリケーション開発が可能。
業務アプリケーションの例：人事（申請系）業務、サービスデスク等

#Now Platformとは
Servicenowのメインの開発基盤で、この上で人事やサービスデスク等、個別のアプリケーション開発に特化した環境が稼働する。今回はNow Platformの持つ主要な機能を紹介する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251519/72b3f011-8fac-0a09-1802-0471c7130d71.png)

#ServiceNowの基本コンポーネント
+ **インスタンス**： Maria DB等を含む個別の開発環境　   
  例）開発、テスト、本番
+ **アプリケーションスコープ**： インスタンスに定義する、特定の業務アプリケーションの開発範囲　　
例）人事アプリ（給与）開発環境、人事アプリ（福利厚生）開発環境
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251519/3476f139-b9a8-2216-1396-c587b5b46a1a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251519/d28ce9b0-8b9f-52dd-a247-1b505f8428c3.png)

# ServiceNowの開発環境
+ **プラットフォーム（通称デフォルト）UI**： メインの開発環境
+ **サービスポータル**： プラットフォームUIのメニューの一部で、ポータル型のアプリケーションの開発に適したツール
（Service Portal > Service Portal configurationから呼び出す）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251519/9107b07b-988c-3d2e-3b25-6c6ed36c230f.png)

# サービスポータルの主な提供機能
+ **サービスカタログ**： リクエストベースのポータルページ
+ **ナレッジベース**： 記事の蓄積
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251519/437d756d-e296-4504-bccb-cf059ad48e0c.png)
【CSS】backgroundを使って棒グラフをつくる（アニメーション付き）

backgroundの機能で簡単にグラフを作りました。

##CodePen

<p class="codepen" data-height="265" data-theme-id="dark" data-default-tab="css,result" data-user="ryu38" data-slug-hash="QWbZZMm" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="make graphs by using background">
  <span>See the Pen <a href="https://codepen.io/ryu38/pen/QWbZZMm">
  make graphs by using background</a> by ryu38 (<a href="https://codepen.io/ryu38">@ryu38</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

##参考

「背景色を２色で分割表示する方法」
https://qiita.com/C-3PHobbit/items/1b53d5dd792111ed5a78

「CSSアニメーションで動く背景に！CSSアニメーションバックグラウンド12選」
https://webdesignfacts.net/entry/css-background-animation/
Scratch filesで気軽にコードの実行結果を確認する

# Scratch filesとは
手軽にKotlinやJavaなどを実行できるファイルだよ。
用途的に近いものとしてpaiza.io等のオンラインエディタだけど、モジュール内で定義したクラスやコード補完を使えるといった違いがあるよ。

# Scratch filesの特徴
- モジュール内で定義したクラスを使用できる
- Interactive modeでコードを書き換えても即反映してくれる
- コード補完がある
- プロジェクトフォルダと違う場所にファイルが作成されるのでGitに追加されない

# Scratch Fileの作成

1. `New` -> `Scratch File`を選択
2. `Kotlin`を選択

<img width="961" alt="スクリーンショット 2020-03-25 11.19.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434603/16bcfdf9-230c-0c81-a587-b06c32b5679a.png">

作成すると以下の画面が出ていると思います。
<img width="961" alt="スクリーンショット 2020-03-25 11.27.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434603/6773bd4a-22f5-dce5-06ba-0157035bc566.png">

## Scratch Fileの使い方
適当に処理を書いて `Run Scratch File` を押すと、右側に処理の実行結果が表示されます。(Interactive modeがONになっていると2秒毎に処理が実行される)
<img width="1155" alt="スクリーンショット 2020-03-25 11.33.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434603/1864553d-1863-cadc-31ec-03cad7dd1e22.png">

`Use classpath of module`を`app`に選択するとモジュール内で作成したクラスが使用できるようになります。
<img width="1402" alt="スクリーンショット 2020-03-25 12.50.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434603/ec2699df-efd1-6e3e-d0a4-6db026043844.png">

# おわりに
今までオンラインエディタでコードを試していたのですが、モジュール内で定義したクラスやコード補完がしっかりしている点でScratch files良きだなと思いました。
gem install railsができない人のためエラー解消法

gem install railsしてもrailsがインストールできなかったため、まとめておこうと思います。
#実行環境
OS: MacOS
rubyバージョン管理：rbenv
シェル:zsh

#エラー①内容
###実行コマンド
gem installを行い、インストールできたかrails -vで確認をする。

```ruby:
gem install rails
rails -v
```

###エラー内容
インストールは成功した風なのにインストールされていないと出てくる
「sudo gem install rails をしてくれ」ってなっているが、実行しても同様のエラーがでる。

```ruby:
Rails is not currently installed on this system. To get the latest version, simply type:

    $ sudo gem install rails

You can then rerun your "rails" command.
```

###原因
rbenvでrubyのバージョン管理を行っているとgemの参照先によってこのようなエラーが出るらしい。
基本は以下の方法で解決するらしいが、自分の環境では解消していない。

詳しくは以下のQiita記事を参考
とても助かりましたありがとうございます。

[MacOSX-Lionでrbenvを使ってRubyOnRailsの環境構築すると、以下のようなメッセージが出てドハマリしたけど、なんとか解決したことについてのメモ(推理なので正しいかどうかの確証持てない)](https://qiita.com/w7tree/items/0860e2856f2429b20eee)


#エラー②内容
gem install railsを行うと以下のようにインストールが成功しましたと出てくるが、rails -vを行うと同様にインストールできていないとエラーが出る。

```ruby:実行コマンド
gem install rails
```
```terminal:実行後のメッセージ
Successfully installed rails-6.0.2.2
Parsing documentation for rails-6.0.2.2
Done installing documentation for rails after 0 seconds
1 gem installed
```


```ruby:実行コマンド
rails -v
```
```terminal:実行後のメッセージ
Rails is not currently installed on this system. To get the latest version, simply type:

    $ sudo gem install rails

You can then rerun your "rails" command.
```

###原因を探る
とりあえずwhichコマンドを使いどこから実行されているかを確認することにした。

```terminal:実行コマンド
which ruby
//結果 ↓の違いがエラーの原因だと思われる。
/Users/hoge/.rbenv/shims/ruby
```

```terminal:実行コマンド
which rails
//結果　↓の違いがエラーの原因だと思われる。
/usr/bin/rails
```
この処理を行うのがエラー①の内容のはずだが、どうやらzshrcの反映がうまくできてなかったみたい。

###解決法
**ターミナルの再起動をする!**


結果はしょうもないことでしたが、 同様の症状になっている方が見えたら一度ターミナルを再起動して見てください。
dotnet coreにおけるhttp proxy設定に関する注意点

# はじめに

dotnet coreの2.1と3.0以降で、System.Net.Http.HttpClientのデフォルトhttpプロキシに関する挙動が異なるところがあったので記述する。

# dotnet core 3.0以降

正式な仕様としては https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.defaultproxy?view=netcore-3.1 に記載がある。訳すと、

* 明示的な指定がない場合、全てのプラットフォームで環境変数の値をまず確認する
    * http_proxy,https_proxy,all_proxy,no_proxyの三つ(大小文字問わず)
* ない場合は、OSごとに処理が異なる
    * linuxはプロキシなしとして扱う
    * winはOS設定(winhttpとwininetの設定)を使用する
        * winhttpとwininetの両方で設定があった場合、wininetの方の設定が優先される
    * macはOS設定を使用する

# dotnet core 2.1

HttpClient.DefaultProxyは2.1に存在しないため他にないか探したが、ドキュメントには存在しなかった。
自分で調べた結果、まとめると、

* linuxの場合は環境変数のみ
* winの場合は環境変数は無視され、OS設定(winhttp,wininet)を使用する
* macの場合はシステム設定は無視され、環境変数のみ使われる

という具合のようだ。

# 主な差異

* winの場合、netcoreapp3.0の時は環境変数を優先して使用するが、netcoreapp2.1では考慮もされない
* linuxの場合は挙動は同じ
* macの場合は、netcoreapp2.1ではOS設定が無視される

# まとめ

プロキシ設定というのは見過ごされやすい盲点になるので、挙動の違いは把握しておきたい。
特にmacは持ってないのでソースベースの解析になるが、間違っていたら指摘希望。
$thisとは。

#$thisとは。
簡潔にいう。
$thisを使っているクラスのことだ。

具体的にいうと、コントローラーを見てみよう。

```sample_controller.php

class NewsController extends Controller {

  public function add_index()
  {
      $this->なんやかんや;
  }
}

```


注目するのは、最初のここ！

```

class NewsController extends Controller {
```

これは、
Controllerクラスを継承して、NewsControllerクラスを作ります。中身は{}の中！！
という意味です。



**結論！！
$thisとは、ここでいうNewsControllerクラスのオブジェクトのこと！！**
Windows10にてReact公式チュートリアル用のローカル開発環境構築時、node最新化、npx実行で突っかかった備忘録

# はじめに
React公式チュートリアルをやってみたところ
ローカル開発環境構築中にnode最新化、npx実行で突っかかったので、備忘録。

実施したチュートリアル
[Reactチュートリアル(日本語)](https://ja.reactjs.org/tutorial/tutorial.html)

なお、自分はReactは触ったことが無い。

# 環境
- windows10 64bit
- node 6.9.4 -> 13.11.0
- npm 6.13.7

# ローカル開発環境の構築
チュートリアルを進める方法には、2つのオプションがある。

> オプション 1: ブラウザでコードを書く
> 始めるのに一番手っ取り早い方法です！
> ...
> オプション 2: ローカル開発環境
> これは完全にオプションであり、このチュートリアルを進めるのに必須ではありません！

今回はオプション2を実施した。

## node最新化
### 既存nodeバージョン確認
> 1. 最新の Node.js がインストールされていることを確かめる。

とあるので、nodeを最新化する。
現行入っているバージョンを確認。

```console
$ node -v
v6.9.4
```
### nodistでnodeインストール
入れ替え方法は下記を参考にした。
[windowsでNode.jsをバージョン管理する](https://qiita.com/irutack/items/606a2f55525c907bbf6f)

```console
$ nodist dist
...
  13.9.0
  13.10.0
  13.10.1
  13.11.0

$ nodist 13.11.0
13.11.0
Installing 13.11.0
 13.11.0 [===============] 53396/53396 KiB 100% 0.0s
Installation successful.

$ nodist + 13.11.0
13.11.0

$ node -v
v6.9.4
```
 
何故かnodeのバージョンが変わっていない。

### 既存nodeアンインストール
うーん。わからないので、「プログラムと機能」から「Node.js」をアンインストール。

### 再度nodeバージョン確認
その後、nodeのバージョンを確認。

```console
$ node -v
v13.11.0
```

### npm最新化
nodeが最新化された。npmも最新化しておく。

```console
$ nodist npm match
npm matc

$npm -v
6.13.7
```

## 新しいプロジェクト作成
### npxでcreate-react-app実行
> 2. Create React App のインストールガイドに従って新しいプロジェクトを作成する

チュートリアルに従いnpxを実行する。

```console
$ npx create-react-app my-app
'npx' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
```
npxが認識されなかった。
nodistでnodeインストール時にnpxもインストールされるはずだが……。

### npxを手動インストール
https://paradox-tm.hateblo.jp/entry/2018/04/25/115243
上記記事で同様の現象が出ていたので、記事を参考に強制的にnpxをインストール。

```console
$ npm install -g npx
...
added 493 packages from 654 contributors in XX.XXXs

$ npx create-react-app my-app
...
Happy hacking!
```
### プロジェクトの動作確認
以降、チュートリアルに従いソースファイル作成し、最後にnpm startでサーバ起動。
http://localhost:3000 を開くと、空の三目並べの盤面が表示されることを確認できた。

以上です。
Flutter for web を導入してデザイン作成を軽量化したい

# Flutter for web を導入してデザイン作成を軽量化したい

## はじめに

Flutter + Dart でモバイルアプリを作り始めたものの...
Gradleのビルド遅い。AndroidのVMの立ち上がり遅い。操作がしづらい。
Widgetレイアウトくらいは軽量な環境でやりたいんです。

基本的に [Building a web application with Flutter](https://flutter.dev/docs/get-started/web) の手順を実施したメモになります。

## 環境

- Mac OS X 10.14
- Visual Studio Code
- Flutter 1.14.6 channel beta
- Dart 2.8.0

2020/02/05時点で Flutter for web は Beta版です。


## 導入

導入要件
- Flutter SDK on your platform.
- Google Chrome (WebAppのデバッグにはChromeが必須とのこと)

上は既に導入済みなので、 BetaChannel切り替え => Upgrade => Flutter for web有効化 の順にコマンドを実行するだけです。

```
$ flutter channel beta
$ flutter upgrade
$ flutter config --enable-web
```

flutter config コマンドにより、 `~/.flutter_settings` に、 `"enable-web": true` が追記されます。
設定が更新されたので、エディタを開いてたら再起動してね。と言われるのでオープン中のプロジェクトがあれば再起動します。

## 接続デバイスの確認

`flutter devices` コマンドで、接続済みデバイスを確認します。
Webを使う場合には、 `chrome` と `web-server` の２つが見えればOKです。


```
$ flutter devices

Chrome                    • chrome        • web-javascript • Google Chrome 79.0.3945.130
Web Server                • web-server    • web-javascript • Flutter Tools
```

## プロジェクトのWeb設定適用

**新規プロジェクトの場合**

`flutter create` で作るだけです。Web設定済みです。


**既存プロジェクトの場合**

既存プロジェクトにWeb設定を追加する場合も、ディレクトリに移動するかパス指定で `flutter create` を実行するだけです。
プロジェクトルートに `web` ディレクトリが追加されます。


### 起動とビルド

**デバイスにChromeを指定して起動する**

```
$ flutter run -d chrome
```

**Webサーバーで立ち上げる**

```
$ flutter run -d web-server
```

**ビルドする**

```
$ flutter build web
```

## 動作確認

試しに flutter_gallery を動かしてみる。
表示範囲に若干の調整が必要そうですが、誤差の範囲か。大丈夫そうですね。

<img width="659" alt="表示比較.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371479/91948c6d-e788-6a21-e87e-cad6aff8c8aa.png">


## まとめ

いままではAndroidVMでWidgetの配置を確認しながら進めてましたが、
Chrome上でもAndroidMVの表示とほぼ同等の出力がされるので、手っ取り早くデザインを作るのに良さそうです。
カメラ等のデバイスの機能を使うものが動かない場合もありますが、作成したWidgetの確認が捗るようになったのは良いと思います。
リリースされたら導入方法が変わるかもしれませんが、その時はその時で。
【DeepL】【翻訳】話題のAI翻訳サービスでAAを再翻訳してみたら面白かった件について

技術的な要素なしのしょうもない記事ですが、割と笑ったので投下

# DeepLとは

* 今話題の翻訳サービス
    * ドイツのベンチャー企業が開発
    * Google翻訳よりも自然な翻訳が出ると評判
    * [記事](https://gigazine.net/news/20200323-deepl-translator-japanese/)もいろいろあります


# AAに対してやってみた

* 元AA([おえー鳥](https://wikiwiki.jp/inotti114514/%E3%82%AA%E3%82%A8%E3%83%BC%E9%B3%A5AA%E7%89%B9%E9%9B%86))

```
　　　　　　　　　　　　　　 ,, -―-、
　　　　　　　　　　　　　／　　　　 ヽ
　　　　　　　／￣￣／　　／i⌒ヽ､|　　　　オエーー！！！！
　　　　　　/　　（゜）/　　 ／　/
　　　　　/　　　　 ト､.,../　,ー-､
　　　　=彳　　　　　 ＼＼‘ﾟ。､｀ ヽ。、ｏ
　　　　/ 　 　　　　　　　＼＼ﾟ。､。、ｏ
　　　/　　　　　　　　　/⌒ ヽ ヽU　　ｏ
　　 /　　　　　　　　　│　　　`ヽU　∴ｌ
　　│　　　　　　　　　│　　　　　U　：l
　　　　　　　　　　　　　　　　　　　　|：!
　　　　　　　　　　　　　　　　　　　　Ｕ
```

* 翻訳

```
　　　　　　　　　　　　　　 ,, ---...
　　　　　　　　　　　　　Ikea.
　　　　　　　I want to see her in action...
　　　　　　/ / / / / ...
　　　　　/ T... ... / ..., ...
　　　　=＼＼'ﾟ. I want to see the following. O
　　　　/ SRS. ,. O
　　　/ If I want to see her again, I want to see her again.
　　 / I want to see him in action.
　　│ │ │ U : l
　　　　　　　　　　　　　　　　　　　　|:!
　　　　　　　　　　　　　　　　　　　　U
```
！！！？？？

* 再翻訳

```
　　　　　　　　　　　　　　 ,, ---...
　　　　　　　　　　　　　イケア
　　　　　　　彼女の行動を見てみたい・・・。
　　　　　　/ / / / / ...
　　　　　/ T... ... / ..., ...
　　　　=＼＼'ﾟ. ヽ(´▽｀)ノ ヽ(´▽｀)ノ ヽ(´▽｀)ノ O
　　　　/ SRS. ,. O
　　　/ もう一度彼女に会いたいなら、もう一度彼女に会いたい。
　　 / ＼ ヽ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ＼ ｗ
　　│ │ │ │ U : l
　　　　　　　　　　　　　　　　　　　　|:!
　　　　　　　　　　　　　　　　　　　　U
```

`もう一度彼女に会いたいなら、もう一度彼女に会いたい。` なんかエモいですね。。。


# どうゆうこと？

* 翻訳後文章の翻訳元箇所を確認してみる
    * `／￣￣／　　／i⌒ヽ､|　　　　オエーー！！！！` -> `I want to see her in action...`
    * `､｀ ヽ。` -> ` I want to see the following.`
    * `/　　　　　　　　　/⌒ ヽ ヽU　　ｏ` -> `/ If I want to see her again, I want to see her again.`

* つまり、日本語として全角記号を入れると謎の英語に翻訳されるようです
* 詳しい翻訳logicも確かめてみたいですね

# まとめ

* AAをDeepLの翻訳に入れると謎の英語が返ってくる
* AAには全角記号が多く使われるので、そこの翻訳が原因
* DeepL自体はすごく良いのでおすすめです
【簡単】Rails で作ったアプリでSEO対策をしてみた。

爆速で最低限のSEO対策をしたい方のために記事を書きました。


## meta-tagというgemを使用する
使用するgemは meta-tagというgemを使用します。

[github](https://github.com/kpumuk/meta-tags)はこちら。


Gemfileに

```
gem 'meta-tags'
```
と、書き込み、```bundle install```します。


次に```config/initializers/meta_tags.rb```を作るためにターミナルで以下コマンドを実行します。

```
$ rails generate meta_tags:install
```

## デフォルトの設定

次に全てのページに対してデフォルトのmeta-tagの設定をします。

view内のapprication.html.erbに書き込みます。

こちらのファイルはviewの共通ファイルになるのでこちらに書けば全てのviewファイルに書き込まれたことになります。

ただ、私のアプリの場合記事投稿機能がついておりまして、SEO的に記事を上位表示させるという目的があります。
したがってmeta-tagのgemに書かれている公式のやり方でmeta-tagを設定してしまうと記事ごとにタイトル、メタディスクリプションが全て同じになってしまう（例え変更できたとしても自動でタイトルを変更してくれない設定になってしまう）ため、少し変更を加えます。

```views/layouts/apprication.html.erb
<head>
  <%= display_meta_tags site: '自分のサイトの名前', title: @title, description: @description, keywords: @keywords %>
</head>
```
このように共通ファイルにてmeta-tagを変数で指定してあげることによって、ページごとに動的に更新してくれるようになります。


## インデックスをしたくないページの設定

インデックスをしたくないページの設定に関しては```<% set_meta_tags noindex: true %>```というテンプレートを使用します。

先ほどviewの共通ファイルの中でデフォルトの設定をしてしまったと思うのですが、特定のページで```<% set_meta_tags noindex: true %>```を使うことによってデフォルトのmeta-tagの内容を更新してくれるという便利なテンプレートです。



### 前提
・noindexにして検索エンジンの引っかからないようにする（クローラが回らないようにする）
・ページのタイトルは```問い合わせ```とする。


```views/static_pages/contact.html.erb
<% set_meta_tags noindex: true title: @title %>
<p>下記項目を入力してください</p>

   ~省略~
```

```controllers/static_pages_controller.rb
class StaticPagesController < ApplicationController
           ~省略~
  def contact
      @title = "問い合わせ"
  end
end
```

これでOKです。

### 個別記事表示ページのタイトルを設定する

個別記事表示ページ（モデルはblogモデル）のタイトルも変えてみます。
今回の場合だとblogモデルにはtitleカラムがすでに存在しているので、<% set_meta_tags%>を使ってtitleカラムを個別記事表示ページのタイトルに変更します。

```views/blogsshow.html.erb
<% set_meta_tags title: @blog.title %>
  <p><%= @blog.body %></p>
```
これでOKです。

元々SEOマーケティング出身でエンジニアに転向したのですが、テクニカルSEO（エンジニア視点からのSEO対策）についてはガッツリ触れたことがなかったため、知る良い機会になりました。

次にサイトマップを作成してクローラーにサイト内を回遊してもらうように設定する必要があるのですが、また次の機会に紹介したいと思います。


参考になった記事
https://holy-seo.net/blog/seo/sitemap-sml-method-described-merit/
https://qiita.com/colorrabbit/items/0864a082a0cee7bfaf93
https://blog.yucchiy.com/2014/06/28/rails-seo/
minecraft統合版でリソースパックを作り,minecraftに適応させる。

#初めに
ただのメモです備忘録な感じ。情報が少なすぎ,または情報がJavaEditionばかりなので....
ちなみにスマホではなくパソコンでのやり方です。
##やり方
**1.まずはマインクラフトのフォルダ場所を把握します。**
*C:\Users\(ユーザー名)\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe*
リソースパックを作りたい場合 
*C:\Users\(ユーザー名)\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\resouce_packs*

**2,公式サイトからアドオンダウンロードする**
[マインクラフト公式サイト](https://www.minecraft.net/ja-jp/addons/)に行き,下のほうにresouce_packsとbehavior_packsとリンクが張ってるのでresouce_packsの方をクリックするとzipファイルがダウンロードされます。

**3,新たにフォルダを作成してその中に解凍したものを入れる**
まず新たにフォルダを作ります。その中に先ほどダウンロードしたzipを解凍して出てきたものを入れますが、この時いれるのは変更したいものをいれます。32mbぐらいあるsoundsフォルダを今回はそのまま入れます。

**4,manifest.jsonをフォルダ内に作成**
manifest.jsonを作成してください。
[uuid](https://www.uuidgenerator.net/version4)　これをクリックすれば自動でuuidが生成されます。(生成されたuuidはheaderの方とmodulesの方、2つありますが同じuuidを使わず別のuuidを使ってください)

```manifest.json
{
    "format_version": 1,
    "header": {
        "description": "resoucepack desu",
        "name": "resouce pack test",
        "uuid": "ef17f9f6-10d0-495c-b3b4-10188453112b",
        "version": [0, 0, 1],
        "min_engine_version": [1, 2, 6]
    },
    "modules": [
        {
            "description": "tutorial pack resouce",
            "type": "resources",
            "uuid": "5c1fe028-3506-4cb7-9326-50c6b5cc02af",
            "version": [0, 0, 1]
        }
    ]
}
```

**5,圧縮する**
このフォルダを圧縮してください

**6, .zip -> .mcpack**
圧縮したら、拡張子を.mcpackに変更してください

**7,マインクラフトの草ブロックのアイコンをクリック**
草ブロックのアイコンをクリックすると起動し,インポートします。
グローバルリソースを見るとresouce pack test と出ています。
ただsoundsフォルダ(32.6mb)をそのまま持ってきたため、こちらも32.6MBと出ていますから、変更したいものだけをいれるべきですね。

#最後に
wikiを見たり色んなサイトを見たりと、とても苦労しました。
音楽を変更したりしたいので、変更できればまた記事を投稿します。
【Salesforce】オブジェクトの標準newアクション呼び出し方

#【Salesforce】オブジェクトの標準newアクション呼び出し方

##$actionから呼び出し

```haml
<apex:outputLink value="{!URLFOR($Action.Account.New)}">
    Create New Account
</apex:outputLink>
```
---
##pageReference Typesから呼び出し

```js

// Navigates to a new account object using these default field values.
//{
//    Name: "Salesforce, #1=CRM",
//    OwnerId: "005XXXXXXXXXXXXXXX",
//    AccountNumber: "ACXXXX",
//    NumberOfEmployees: 35000,
//    CustomCheckbox__c: true
//}
{
    type: "standard__objectPage",
    attributes: {
        objectApiName: "Account",
        actionName: "new"
    },
    state: {
        defaultFieldValues = "AccountNumber=ACXXXX,CustomCheckbox__c=true,Name=Salesforce%2C%20%231%3DCRM,NumberOfEmployees=35000,OwnerId=005XXXXXXXXXXXXXXX",
        nooverride: "1"
    }
}
````
---
##URLから呼び出し
```html:url
//    AccountNumber: "ACXXXX",
//    CustomCheckbox__c: "true",
//    Name: "Salesforce, #1=CRM",
//    OwnerId: "005XXXXXXXXXXXXXXX",
//    AccountNumber: "ACXXXX",
//    NumberOfEmployees: 35000,
//    CustomCheckbox__c: true
<a herf="https://yourdomainname.lightning.force.com/lightning/o/Opportunity/new?defaultFieldValues=AccountNumber=ACXXXX,CustomCheckbox__c=true,Name=Salesforce%2C%20%231%3DCRM,NumberOfEmployees=35000,OwnerId=005XXXXXXXXXXXXXXX"/>
```
---
##注意事項
1. パラメータの渡し方

　pageReference TypesからやカスタムURLボタンから呼び出し場合、defaultFieldValuesでパラメータが渡られます。
　<font color="red">**※大文字小文字区分**</font>
2. レコードタイプの設定

　URLから呼び出し場合、
　二つ方法のうち、一つ方法が若干不具合がある。

　　2.1. stateのdefaultFieldValues変数に設定する、画面は設定したレコードタイプの画面を使えますけど、タイトルは最初のレコードタイプの名前を表示される

```html

    <a herf="https://yourdomainname.lightning.force.com/lightning/o/Opportunity/new?defaultFieldValues=RecordTypeId=<recordtypeid:15桁英数字>,…" />
```

　　2.2. GETリクエストのパラメータとして設定する、タイトルの問題が解決できる

```html
    <a herf="https://yourdomainname.lightning.force.com/lightning/o/Opportunity/new?recordTypeId=<recordtypeid:15桁英数字>&defaultFieldValues=…" />
```
　<font color="red">**※パラメータ名は大文字小文字区分、ご注意ください！！**</font>
---
##参照
[Visualforce 開発者ガイド⇒$action](https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_variables_global_action.htm)
[Visualforce 開発者ガイド⇒$Action グローバル変数の有効な値](https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_variables_global_action_valid_values.htm)
[Lightning Aura Components Developer Guide(v48.0以降)](https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/components_navigation_page_definitions.htm)
[NavigationMixin to standard__objectPage passing recordType value](https://salesforce.stackexchange.com/questions/285658/navigationmixin-to-standard-objectpage-passing-recordtype-value)
[Spring 20 - Navigate to a Record’s Create Page with Default Field Values - How to pass the Recordtype id??](https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/components_navigation_dfv.htm)
【React初心者】create-react-appからReactプロジェクトの環境構築

プロジェクトとしてReactのアプリケーションを作成し、実際に動かしてみます。

#Node.jsの用意
以下URLからNode.js（LTS版）をダウンロードします。既にインストール済の方は不要です。
[https://nodejs.org/ja/](https://nodejs.org/ja/)

インストールが完了したら、Node.jsが動くかどうか確認します。
コマンドまたはターミナルを起動し、以下を実行してください。

```
$ node --version
```
「v12.16.1」のようなバージョン番号が表示されればOKです。

#Creare React Appでプロジェクト作成
Reactのアプリケーションを作成するには、「Create React App」というプログラムを使用します。
インストールは不要で、事前にインストールしたNode.jsに組み込まれている「npx」というプログラムを使用します。
コマンドまたはターミナルを起動し、cdコマンドを使ってプロジェクトを作成する場所に移動してください。
そして、以下コマンドを実行します。

```
$ npx create-react-app react_app
```
実行すると、その場に「react_app」というフォルダが作成されます。これがReactアプリケーションです。

#プロジェクトを実行
作成されたプロジェクトを実際に動かしてみます。
コマンドまたはターミナルから、「cd react_app」を実行してreact_appフォルダの中に移動します。
そして、以下コマンドを実行します。

```
$ npm start
```
npm startは、開発用のWEBサーバープログラムを起動し、そこでアプリケーションを公開し、アクセスできる状態にします。
「http://localhost:3000/」
に自動でアクセスされます。これがアプリケーションのアドレスになります。
Reactのロゴがゆっくりと回転する画面が表示されていたら成功です。
これで、プロジェクトを実行してWEBブラウザでアプリの画面を表示する操作ができました。
動作を確認できたら、コマンドまたはターミナルに戻り、Ctrlキーを押したまま「C」キーを押してスクリプトの実行を中断しましょう。

#プロジェクトの中身をチェック
作成したプロジェクトがどのようになっているのか、「react_app」フォルダの中身を見てみましょう。
画面表示に関するファイルのみピックアップしています。

◎**「public」フォルダ内**
公開フォルダです。HTMLやCSSなど公開されるファイル類が保管されます。

|　　　　　  | 説明                                                            |
|------------|------------------------------------------------------------|
| index.html | アクセスされるときに表示されるファイル。この中に、画面表示に関する基本的な要素がまとめてある。         |


◎**「src」フォルダ内**
Reactで作成したファイルなどがまとめられます。

|  | 説明                                                            |
|-----------|------------|------------------------------------------------------------|
|index.js     | アプリケーションのベースとなるスクリプト       |
| index.css  | index.jsで使用するスタイルシート         |
| App.js      | indexに組み込まれる、実際に画面を表示しているコンポーネント         |
| App.css     | App.jsで使用するスタイルシート        |


アプリケーションにアクセスすると、以下の流れで画面表示されます。

- index.htmlが読み込まれる。
- index.htmlを読み込む際、index.jsが読み込まれ実行される。
- index.jsの中でAppコンポーネントが読み込まれ表示される。

##終わりに
今回の記事で、プロジェクトの作成と実行、その中身ができました。
次は自分でコンポーネントを作成しそれを表示される操作についてやっていきます。
git hubで草が生えなかった

#草生えない
ある日、いつものように作業していると、、、、

__草が生えてない！！！__

おかしい、、、なぜだ、、、

色々調べてcontribution系のエラーはメールを変更するしかないとのこと。
セッティングのemail→add emailから新しいメールに変更。

忘れないうちにローカルのメールの設定も変更。

ターミナルを開いて

```
git config user.email
```

ここでローカルと設定したメールが違っていれば

```
git config user.email 新しいメールアドレス
```

これで新しいメールアドレスに設定すれば大丈夫だと思います。

pushしてみて無事に草が生えれば完了。
毎日作業しているのに草が生えなかった時のあの倦怠感何だろう、、、笑

######参考文献
[githubで草が生えない](https://tsushima164blog.com/github-why-are-my-contributions-not-showing-up-on-my-profile)
cargo buildがエラーしたとき

# cargo buildがエラー
外部crateを使うために`Cargo.toml`を変更して`cargo build`した際に、失敗しました。

```
failed to resolve address for github: nodename nor servname provided, or not known; class=Net (12)
```

# .gitconfigが悪いそうです

```
[url "github:"]
        InsteadOf = https://github.com/
        InsteadOf = git@github.com:
```
これは`git clone `などする際に

`[url "エイリアス前"]` InsteadOf = "エイリアス"

というふうに入力を省略できる設定です。

しかし、これが悪さをしていたそうなので削除した結果解決しました。

# 参考文献

https://kokeshing.com/unable-to-update-registry-error-cargo/
https://github.com/rust-lang/cargo/issues/2605
Ruby　指定バージョンへの変更

# ◆Rubyのバージョン指定方法
######自分用のコマンドライブラリです。ですが、同じお悩みの方はどうぞご利用ください。
表現がぶっきらぼうですが、そこはご容赦くださいませ〜〜。
## ◆コマンド一覧


◆希望する指定バージョン
rails：5.2.4　⇨　5.2.3
ruby：2.6.5　⇨　2.6.3

---

####① アプリ作成時にbundleを動かさないように設定

```ruby:ターミナル
$ rails _5.2.3_ new アプリ名 --skip-bundle
$ cd アプリ名
```
#### ② gemfileの記述バージョン変更

【例】
　　gem 'rails', '~> 5.2.4'
　　↓
　　gem 'rails', '5.2.3'  　にする。

　　※rubyも指定バージョンに記述変更


#### ③ .bash_profileへ記述
```
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
```

#### ④ エラー回避
　※「N/A: version "N/A -> N/A" is not yet installed.」が出たのでこれで回避
　※「You need to run "nvm install N/A" to install it before using it.」これをやれば回避できるんだろうけど放置

```
$ nvm unalias default
```

#### ⑤ 初期化設定の反映

```
$ source ~/.bash_profile
```

#### ⑥ インストールしたversionを使用可能な状態にする⇒shimsへの反映

```
$ rbenv rehash
```
#### ⑦ 使用するバージョンの指定
　※作成するプロジェクトのみでバージョン指定する場合は『rbenv local』
　※全体でバージョン指定する場合は『rbenv global』

```
$ rbenv local 2.6.3
```

#### ⑧ bundle install

```
$ bundle install --path=vendor/bundle
※　「--path=vendor/bundle」　はあってもなくても大きく変化なし。詳細はリンクをチェック。
```

#### 【最後】バージョン確認(ruby)

```
$ rbenv version
```

#### 【最後】バージョン確認(rails)

```
$ rails -v
```
[bundle installについての参考記事](http://https://qiita.com/jnchito/items/99b1dbea1767a5095d85)
[エラー][Spring Boot] インジェクトするBeanが複数存在する

MockitoのgetBeanName()にて、以下のような例外が発生した。

```terminal
Caused by: java.lang.IllegalStateException:
Unable to register mock bean <Hoge> expected a single matching bean to replace but found [<Class1>, <Class2>]
```

該当クラスの設定を確認してみる。

```java:HOGE.class
// インターフェース定義
public interface Hoge {
}
```
```java:Class1.class
// 実装クラス1
@Service
public class Class1 implements Hoge {
}
```
```java:Class2.class
// 実装クラス2
@Service
public class Class2 implements Hoge {
}
```

以下は利用側のテストクラス。

```java:HogeSpec.class
// テストクラス
@SpringBootTest
public class HogeSpec extends Specification {
    @MockBean
    Hoge hoge;
}
```

同じ`Hoge`インターフェースを実装した`Class1`と`Class2`が、共に`@Service`アノテーションによってDIコンテナに登録されてしまっている。
そのため、どちらのBeanをインジェクトすれば良いかが判断できずにエラーが発生する。
`Class1`、`Class2`どちらかのクラスをコンポーネントスキャン対象から外す（`@Service`）必要がある。
画像投稿機能実装時のNil location provided. Can't build URIエラー対処

#環境
・Rails 5.2.4.1
・gem 'carrierwave'
・gem 'rmagick'

##エラー
ArgumentError
Nil location provided. Can't build URI

この様なエラー表示されました。
スクショ撮るのを忘れました（汗）

色々とググった結果、、
画像投稿機能を実装前にテスト投稿したものに画像が含まれたいないため
エラーとなっている模様

##解決方法
すでに投稿しているもので画像が含まれていないものを削除
今回は全てを削除。

```
rails c
```
```
Post.destroy_all
```

これで解決できました！

参考サイト
https://simpledancer.hatenablog.com/entry/2019/05/19/Nil_location_provided__Can't_build_URI%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%81%9F%E6%99%82%E3%81%AB%E3%82%84%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8
[GAS][スプレッドシート]指定した背景色のセルの合計を計算する

### 参考にしたソース
[しゃのんあどべんとかれんだー 2日目 (忘年会幹事のちょっとしたお悩みをちょっと解決してくれるかもしれない GAS)](http://shanon-tech.blogspot.com/2015/12/2.html)

### スクリプトエディタを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103853/001a8890-5433-bc14-6899-e208fc08dc1e.png)

### スクリプトを書く
```js
// 指定範囲のセル背景色に合致するセルの合計数を返します
// color: 背景色    rangeSpecification: 範囲指定文字列
function countCellsWithBackgroundColor(color, rangeSpecification) {
  
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange(rangeSpecification);
  
  var x = 0;
  var i = 0;
  var j = 0;
  var cell;
  for (i = 1; i <= range.getNumRows(); i++) {
    for (j = 1; j <= range.getNumColumns(); j++) {
      
      cell = range.getCell(i, j);
      
      if(cell.getBackgroundColor() == color)
        if (+cell.getValue())
          x += cell.getValue();
    }
  }
  
  return x;
}

// 指定範囲のセル背景色に合致するセルの合計数を返します
// color: 背景色    rangeSpecification: 範囲指定文字列
function countCellsWithoutBackgroundColor(color, rangeSpecification) {
  
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange(rangeSpecification);
  
  var x = 0;
  var i = 0;
  var j = 0;
  var cell;
  for (i = 1; i <= range.getNumRows(); i++) {
    for (j = 1; j <= range.getNumColumns(); j++) {
      
      cell = range.getCell(i, j);
      
      if(cell.getBackgroundColor() != color)
        if (+cell.getValue())
          x += cell.getValue();
    }
  }
  
  return x;
}

// 指定セルの背景色を取得します。
function getBackgroundColor(rangeSpecification) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  return sheet.getRange(rangeSpecification).getBackgroundColor();
}
```

### セルに関数を設定

参考元のサイトには一色のケースしか載っていなかったのと、
セルの指定が文字列のため、オートフィルが難しかったり行列の削除でずれたりするため、改良しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103853/6b1f3e6e-eea8-4320-5828-5da36a750d3b.png)

例えば複数の色を合計する必要がある場合、ホワイトリスト（加算）の場合は以下のようにします。

```
=countCellsWithBackgroundColor(getBackgroundColor(CELL("address", $A$1)), CELL("address", C2)&":"&CELL("address", C13))
+countCellsWithBackgroundColor(getBackgroundColor(CELL("address", $A$2)), CELL("address", C2)&":"&CELL("address", C13))
```

ブラックリストの場合は以下のようにします。

```
=SUM(C2:C13)-countCellsWithBackgroundColor(getBackgroundColor(CELL("address", $A$3)), CELL("address", C2)&":"&CELL("address", C13))
```
『監視サーバ動いてますよ』メールを定時実行させる 

# はじめに

サーバの監視にzabbixを使います。
そこで話にあがってくるのが、「監視サーバー自体が落ちてたらどうするの？」という問題です。

監視サーバが動いていなかったらアラートを出すのがベストですが、今回はそこまで手間をかけずに
毎日AM 9:00に監視サーバが動いていることをメールでお知らせする方法で対処することにします。

外部チェックや、監視サーバ内のcronでシェルを書いて定期的にメール送信させるなど色々な方法があるようですが、今回は手っ取り早くZabbixのアイテム → トリガー → アクションで完結させる方法を紹介します。

# 環境
- RHEL 7.7
- Zabbix 4.0.18

# ホスト
まずは監視サーバのホストを作成します。
デフォルトのZabbix serverを使うでも良いです。
![スクリーンショット 2020-03-25 9.31.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104642/81b78812-b20d-6c21-a2b7-dbf6a20e8272.png)

# アイテム
基本的に動けばなんでも良いです。pingを実行させます。

Zabbix-serverのプロセス確認でも良いですが、今回の要件は
**メールが送れない＝Zabbixが動いていない**
を検知させるだけですので、プロセス監視は必須ではないです。

## 監視間隔のカスタマイズ
何時にメールを送信させるかを監視間隔のカスタマイズで調整します。

`h9m0,1` 
09:00、09:01に監視アイテムが実行されます。
2回実行させるのがミソです。（後述）

監視間隔のフォーマットについては[こちら](http://unam.hatenadiary.jp/entry/2018/01/17/204809)が分かりやすかったです。

![スクリーンショット 2020-03-25 9.33.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104642/cbb60271-553a-c016-057b-f8ae337846e1.png)

# トリガー
トリガーでは現在時刻を返す `time` 関数を使います。
この条件式で障害イベントと復旧イベントの発生を制御します。

- 9:00にアイテム監視が実行され、トリガー条件式がtrueで障害イベント発生。
- 9:01にアイテム監視が実行され、トリガー条件式がfalseで復旧イベント発生。

復旧イベントを発生させないとダッシュボードにずっと表示されていてなんだか気持ち悪いので、
アイテム監視を2回行うようにしています。

> [サポートされているトリガー関数 [Zabbix Documentation 2.2]](https://www.zabbix.com/documentation/2.2/jp/manual/appendix/triggers/functions)
> time | 現在の時刻をHHMMSS形式で返します。例：123055

![スクリーンショット 2020-03-25 9.41.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104642/1773f47c-9ddf-467f-349b-5f68b5e81674.png)

# アクション
あとはアクション設定に先ほど作成したトリガーを割り当てれば完了です。

![スクリーンショット 2020-03-25 9.43.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104642/7755708b-e5be-6ff5-0fa8-1035bae3b1af.png)
![スクリーンショット 2020-03-25 9.45.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104642/652989aa-ab67-cf51-3048-7d16bea81092.png)

# 終わりに
アイテム実行からトリガーの`time()`が発動するまでに１秒以上のラグがあったら
トリガー判定でfalseにならないかな？とも思ったのですが、今のところ動いているようなので様子見といったところです。

クリティカルな実装かもしれない。