OmniAICreator/Qiita-1.07M huggingface dataset:
IE11でAutoprefixerを使っても、CSS Gridが効かないときに確認したこと

最近、Autoprefixerを設定しているのに、IE用のベンダープレフィックスが適用されていない事があったのでの、設定を見直してみました。

確認時のモジュールバージョンです。

```js
"devDependencies": {
...
"autoprefixer": "^10.0.1",
"postcss": "^8.1.1",
"postcss-loader": "^4.0.4",
"postcss-preset-env": "^6.7.0",
"webpack": "^5.0.0",
"webpack-cli": "^4.0.0",
...
}
```

## 確認ポイント１　Autoprefixerの設定

PostCSSプラグインの設定で、`grid: "autoplace"` にします。


```js
require("autoprefixer")({ 
    grid: "autoplace" 
}),
```



## 確認ポイント２　CSSの見直し

Autoprefixer がIE用に正しく変換できるように、grid-template や grid-area などの設定に間違いがないか確認します。

https://github.com/postcss/autoprefixer/blob/master/README.md#grid-autoplacement-support-in-ie


## 確認ポイント３　他のプラグインの影響

他のPostCSSプラグインによって、ベンダープレフィックスが消されている可能性があります。
私の場合、 `postcss-preset-env` の設定が原因でした。


```js
// これだとgridのベンダープレフィックスが効かない
plugins: [
  'postcss-preset-env',
  require("autoprefixer")({ grid: "autoplace" }),
  require("css-mqpacker")(),
  require("cssnano")(),
],

// このように修正して解決
plugins: [
  require('postcss-preset-env')({ autoprefixer: { grid: true } }),
  require("autoprefixer")({ grid: "autoplace" }),
  require("css-mqpacker")(),
  require("cssnano")(),
],

```
Googleタグマネージャーでプレビューモードに切り替わらないとき

後から考えるとめちゃめちゃ初歩的な躓きですが、わかったとき嬉しかったので書いときます。

## 現象
GTMワークスペースの「プレビュー」ボタンを押しても、プレビューモードに切り替わらない

## 環境
MacOS10.15.4 + Safari13.1

## 原因
Safariの「サイト越えトラッキングを防ぐ」がオンになってた

## 対処法
Safari環境設定＞プライバシー＞Webサイトによるトラッキング：サイト越えトラッキングを防ぐのチェックボックスをオフにする
<img width="936" alt="スクリーンショット 2020-07-20 10.36.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621295/b061453e-c70d-76b7-d430-6451a5ba116c.png">

## 追記
cookieをブロックするサードパーティーアプリや機能拡張でも同様の現象が起こるみたいです。
C#で簡単にイージング

# C#で簡単にイージング
C#で簡単にイージングができるライブラリを作ってみました!
[NuGetのリンク](https://www.nuget.org/packages/EasingSharp)
![Nuget](https://img.shields.io/nuget/dt/EasingSharp?color=%234197cc&label=ダウンロード数&style=for-the-badge)
#インストール方法
VisualStudioの上にある、**ツール**をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694381/1407672f-a7d5-3b12-9dfe-be2737925045.png)
そして、**Nuget パッケージマネージャー**
**→ソリューションのNuGetパッケージの管理(N)**
をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694381/65f11887-2354-49fa-063a-4e8750347516.png)
そして、出てきた検索ボックスに、
``EasingSharp``
と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694381/0d4e1787-c0c3-dc97-721b-58b2e22efdd8.png)
一番上のものをクリック、
そして右の画面でインストールするプロジェクトを選択。
インストールをクリックしたらインストールが開始されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694381/46cbcbc3-18da-74ab-7e58-44597208533b.png)

# 使い方
```
using EasingSharp; //コードの一番上に書いてください
```
```cs
Easing.easeOutExpo((x) => //easeOutExpoで375から3まで1000ミリ秒でアニメーションさせる
{
               //処理  (アニメーションが終了するときには、xは3になります、 intにキャストして使用できます)
}, 初期値,最終値,アニメーションさせる時間ms);
```
**初期値 , 最終値 , アニメーションさせる時間(ms)を任意の値へ置き換えてください**
イージングのCallbackは、別スレッドから行われるので、
コントロールなどを操作しようとすると、System.InvalidOperationExceptionが発生します。
そういう場合は、Invokeを使用してください
例 : ``Button1.Invoke((Action)(() => { 処理 }));``

その外にも、

```cs

Easing.Run((x) => //easeInExpoで375から3まで1000ミリ秒でアニメーションさせる
{
  //処理
},"easeInExpo", 375, 3, 1000);//easeInExpoが見つからなかった場合、EasingNotFoundExceptionをスローします
```
や、

```cs

Easing.Run((x) => //easeInExpoで375から3まで1000ミリ秒でアニメーションさせる
{
    //処理
},Easing.Easings.easeOutCubic, 375, 3, 1000);
```
といった方法でも実行できます
#Q&A
- FPSは？
**60FPS**です。

- ライセンスは？
**MITライセンス**です。
MITについての詳細は、[こちら](https://opensource.org/licenses/MIT)を参照してください

- System.InvalidOperationException が発生した!
イージングのCallbackは、別スレッドから行われるので、
``Control.Invoke`` などで実行してください。
Railsでturbolinksを無効にする

#1.よくある事象（リロードすると治る）
・ページに飛ぶとそのページだけ揺れ続ける。
・form_for/withのsubmitを押しても遷移しない。
・スライダーの画像が配列になってしまう。
#2.turbolinksを無効にする必要がある

```rails:views/layout/application.html.erb

<div 
　<% if content_for?(:body_attributes) %>  
   <%= yield(:body_attributes) %>
　<% end %>
>
　<%= yield %>
</div>

```
divの閉じかっこを閉じずに 
 `<% if content_for?(:body_attributes) %>  
  <%= yield(:body_attributes) %>
　<% end %>`を中に入れる
####無効にしたいviewページの一番上に下記のコードを挿入
```
<% content_for(:body_attributes) do %>
      data-turbolinks="false"
　　<% end %>
```
##リンク先のturbolinksを無効にしたい場合はlink_to内に
`,data: {"turbolinks" => false}`をつけてあげれば無効化できます。
## a href で無効化したい時
```
<div data-turbolinks='false'>
    <a href="/"></a>
</div>
```
#3.終わりに
こんなに簡単にできてしまうとは！！
まだまだ勉強せねば！！
sFlow/NetFlowによるトラフィックフロー分析

# sFlow/NetFlowによるトラフィックフロー分析

フロー管理システムのInMon Traffic SentinelによるSNMPカウンターしきい値分析からトラフィックフロー分析の流れを追っていきます。

##### SNMPしきい値管理
多くのノードやインターフェース、あるいは、サーバーやアプリケーションを管理していると思います。その多くの監視ポイントを目視確認するのは無理があるので、SNMPのカウンター値によるしきい値管理を前段で行うことが有効です
以下チャートにて、Data Centerで、Framesのしきい値越えが発生してる事を検知
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/bc68eb26-cfd0-d014-aeac-6eef1394091c.png)
Data CenterのFramesの赤印をクリック

##### Data Center下でFramesで問題がある要素の表示
Framesでしきい値超過（赤くなっている）要素の
　エージェント：switch.sf.inmon.com
　インターフェース：ethernet2
に問題がありそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/00faf5ab-8ad8-13d5-2a55-d692ddb885bf.png)
Framesの赤印をクリック

##### 該当インターフェースのFramesのSNMPカウンター値を時系列レポートで表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/02e381b5-f383-8eeb-448f-cdeae9b3705a.png)

##### Utilization（帯域幅使用率）も見てみよう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/e9c81682-8b52-d177-acad-4c5e420ba25a.png)

##### これらのフレームや帯域を使用しているのは誰？
トップNを選択
Top Sourceチャートが表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/1044aaa7-db95-de56-b7d0-0946ae4210a6.png)
上位利用者（Top Talker）として赤い棒グラフで表示された
　xenvm1.sf.inmon.com (10.0.0.150)
が、全時系列で利用していることがわかる

##### では、誰と誰の通信？
Top Source Destination Pairsチャートが表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/0d34b7c4-1e89-66f2-833b-49f78f75b506.png)
xenvm1.sf.inmon.com (10.0.0.150)とxenvm3.sf.inmon.com (10.0.0.152)の通信が大半

##### では、どのような通信？
Top Source Destination Flowsチャートが表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/0e36b590-e31e-3eaa-5af7-e80ad5e13fbf.png)
03:08の時点では、いろいろな通信があるが多くはhttpの通信とわかる

##### いろいろな条件でフィルタリングしてみる
ケースとして、データセンターで、特定のWebサーバーにhttpアクセスする状況として、
Webサーバー「198.61.172.141」へ、TCP:80のhttpアクセスを行う通信
フィルタリング条件；destinationport='TCP:80' & destinationaddress='198.61.172.141'
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/099092a0-2426-fb8f-dd99-f3feb7694c36.png)
git add できないときの対応方法

自分用のメモ書きです:fist:
間違っている等ありましたらコメントください！！

ことの発端として、、、
デザイナーさん「<code>git add style.ccs</code>できない...:frowning2:」
ということがありました。

## ☆対応方法
まず、プロジェクトのトップにある<code>.gitignore</code>を確認
→同じファイル名や拡張子がないか確認しましょう。
→ない場合は下の解決策を試してみて下さい！

## <code>.DS_Store</code>が悪さしている
Mac用に<code>.DS_Store</code>を<code>.gitignore</code>に記述してあることがあります。
![スクリーンショット 2020-10-13 12.58.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429019/65440280-d4fb-b172-1eaa-a6b5b3c100b4.png)

### 解決策
<code>.gitignore</code>から<code>.DS_Store</code>
を削除
↓
追加できなかったファイルがGitに認識されているか確認し

```
git add 対象ファイル
```
↓
<code>.gitignore</code>に<code>.DS_Store</code>を追記

## 設定かキャッシュが残っている
一度Git管理下にしたファイルは、<code>.gitignore</code>や<code>.git/info/exclude</code>に管理を無視する設定があっても適用されません。
そういう場合にGitに追加の設定として、"assume-unchanged"としてあえて無視させている場合があります。
これが、ステージングできない理由の1つです。

### 解決策
ターミナルで、プロジェクトのTOPから下記コマンドを入力

```
$ git update-index --no-assume-unchanged ファイルパス
```

上記コマンドで認識されない場合
→キャッシュを削除し、最後のコミットからGitインデックスを再ロードさせます。
※"Stack Overflow"の直訳なので間違っていたらすみません。

```
$ git rm --cached ファイルパス
$ git reset ファイルパス
```

## ☆参考文献
https://qiita.com/arabian9ts/items/61cfe6a5e2655e857e23
https://qiita.com/usamik26/items/56d0d3ba7a1300625f92
https://stackoverflow.com/questions/16993082/why-doesnt-git-recognize-that-my-file-has-been-changed-therefore-git-add-not-w/24316479
未来が目前に？！完全自動ロボタクシー！ Python 3.9.0 , Dart 2.10 リリース【やっすんのエンジニアニュース 10月2周目】

# はじめに
今週もやっすんの独断と偏見で、エンジニア向けニュースをピックアップしていきます！

先週はGitHubのmasterブランチがmainブランチに変更されたり、Rubyのリリース情報を紹介しました。
https://qiita.com/yassun-youtube/items/59bfd517c1d72cb67874

今週は自動タクシー、Python、Dartに関するニュースを紹介します。

YouTubeでも2分程度の動画で公開しているので、ぜひ確認してみてください。

[【YouTube動画】未来が目前に？！完全自動ロボタクシー！ Python 3.9.0 , Dart 2.10 リリース](https://youtu.be/7ZV8CjbHvhg)
[![未来が目前に？！完全自動ロボタクシー！ Python 3.9.0 , Dart 2.10 リリース](https://img.youtube.com/vi/7ZV8CjbHvhg/0.jpg)](https://www.youtube.com/watch?v=7ZV8CjbHvhg)

# 自動タクシー 一般提供！！
米Alphabet傘下でGoogle系列のWaymoは、完全自動ロボタクシーを提供しています。
今までは、テストユーザーにのみ提供していましたが、一般人も利用できるようになったそうです。
アメリカのアリゾナ州フェニックスのみとはいえ、未来が近づきましたね！

[参考]
[Google系列のWaymo、完全自動ロボタクシーの一般への提供をフェニックスで開始](https://www.itmedia.co.jp/news/articles/2010/09/news118.html)
[Waymo starts to open driverless ride-hailing service to the public](https://techcrunch.com/2020/10/08/waymo-starts-to-open-driverless-ride-hailing-service-to-the-public)

# Python 3.9.0 リリース
｜を用いた辞書マージ用の演算子が追加されました。
他にも、接頭辞や語尾を削除するメソッドや使用できる型が増えました。

# Dart 2.10 リリース
nullsafeに関連する機能が追加されました。

# まとめ
今週のニュースはいかがでしたか？
自動タクシー、日本でも使えると良いですね。

意見や感想等ありましたら、コメントよろしくお願いします！

[twitter](https://twitter.com/yassun_youtuber)や[youtube](https://www.youtube.com/channel/UCajrdoGzHzDogrNrLYYmGsg/featured?view_as=public)でのコメントもお待ちしています！
[CentOS]apache-loggenをインストールする

諸事情でパフォーマンスの悪いアクセスログを扱うシェルの改善をしなければならなくなり、
自宅で事象に関する調査をしたいのでアクセスログのテストデータを作ることにしました。
（別にそんな仕事は好きではないですが、単純にどうしたら早くなるかはエンジニアとして興味深いですよね。）

```

yum install ruby
gem install apache-loggen

```

たったこれだけ。CentOSではなくAmazonLinuxの情報が多かったり上位に来る情報がなんかmakeとか色々やってて頭がパンクしてしまったので記事として残しておく。

ちなみにシェルの改善については、おそらくログの読み書き及び検索にて時間がかかってると想定している。
CPU使用率はまったく高くないためだ。niceコマンド等も使われてない。
ログを直接扱わず、メモリに負荷を与えすぎない行数を変数として保持し、
そこから処理をさせることで大幅な改善が望めるのではと思っている。
結果が出たらこれも記事にしたい。
docker上のubuntuでapacheを動かすまで

phpの動作環境を作るため、ひとまずapacheを動かす。

## ゴール
* dockerで作ったubuntu上でapacheを動かす
* ローカルから確認する。


## apt update
aptのパッケージリストを更新する。
コンテナを作ってすぐのときには、パッケージリスト `/var/lib/apt/lists`　に何も入っていない。`apt install xxx`をしても、`Unable to locate package xxx`というエラーメッセージが出てくるはず。

以下のコマンドで`/etc/apt/sources.list`から`/var/lib/apt/lists`にパッケージリストをコピーする。

```
apt update
```

## apacheの起動
* apacheはインストール不要。ubuntuのイメージに既に入っている。
nginxは起動せず、apache2をひとまず起動

```
source /etc/apache2/apache2.conf
apache2
```


## アクセス確認
ローカルのChromeから`http://localhost`にアクセスすると、以下のような画面が出る。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230450/57fa296f-c7da-d86d-78f8-fa1908d1d950.png)

※コンテナを作ったときには`docker run -d -p 80:80 --name test ubuntu`でローカルのポート80とコンテナのポート80をつないでいます。


## 諸々インストール（備忘録）
私が勝手に入れたものです。apacheに関係ありません。
dockerで作ったubuntuではvimも使えなかったのでインストールしました。

* vimインストール

```
apt install vim
```

* golangインストール

```
apt install gcc make
apt install golang
```

* nginxインストール

```
apt install nginx
```

* python関連

```
apt install python
apt install python3-pip
```

* boto3 （AWS SDK for Python)

```
pip3 install boto3
```

* php関連

```
apt install php
```

## まとめ
* apacheインストール不要
* sourceコマンドでconfファイルを実行必要
* コンテナ作成時に80ポートをつなぐことが必要
データフレームからの条件要素抽出：Rは%in%、Pythonは.isin()

Rユーザーの私がpythonを書く上で頻繁にど忘れしてしまう操作をメモしておく。
"R %in% in python"などと都度検索しても欲しい情報にすぐにたどり着けなかったため。

## 特定の列が複数の要素のいずれかにマッチする行を抽出する

データフレーム: iris
特定の列名: Species
複数の要素: cond ("setosa"もしくは"virginica"のみ抽出)

Rで%in%演算子を使って書ける操作は、

```{R}
### R ###
library(dplyr)

cond <- c("setosa", "virginica")
df <- iris %>% dplyr::filter(., Species %in% cond)
```

Pandasだと.isin()で書ける。

```{python}
### python ###
import pandas as pd
from sklearn import datasets

### iris データセット準備
iris_sk = datasets.load_iris()
iris = pd.DataFrame(iris_sk.data, columns=iris_sk.feature_names)
iris['Species'] = iris_sk.target_names[iris_sk.target]

cond = ["setosa", "virginica"]
df = iris[iris["Species"].isin(cond)]
```

マッチする行を除外したい場合は、それぞれ`!`や`~`を使う。

```{R}
### R ###
df2 <- iris %>% dplyr::filter(., !Species %in% cond)
```

```{Python}
### Python ###
df2 = iris[~iris["Species"].isin(cond)]
```
Julia早引きノート［05］if文

###if文(書き方例)

```ruby:note05

if x > y
    println("x is greater than y.")
elseif x == y
    println("x is equal to y.")
else
    println("x is less than y.")
end

◆複数条件(&&, ||)
　if x > 0 && y > 0
　    println("x and y is greater than 0.")
　elseif x == 0 || y == 0
　    println("x or y is 0.")
　end

◆三項演算子
　if x > 0 ? true : false

```

##解説

・Pythonと大きく異なる点は、**end**があることです。ifで開始し、endで終わることが必要です。
・elseifとelseは必須ではありません。必要な場合に付加できます。
・**三項演算子**とは「a ? b : c」の形で、aの評価結果がtrueの場合はbを、falseの場合はcを返す演算子です。


##もくじ
[Julia早引きノート［01］変数・定数の使い方](https://qiita.com/ttabata/items/a1ada2c0cba03672e105)
[Julia早引きノート［02］算術式、演算子](https://qiita.com/ttabata/items/90900d0914fa317f652d)
[Julia早引きノート［03］複素数]
(https://qiita.com/ttabata/items/225c77a4d71fafc3e482)
[Julia早引きノート［04］正規表現](https://qiita.com/ttabata/items/8b6e4a2b7c2ca299de03)
....
<details><summary>もくじを開く</summary><div>
[Julia早引きノート［05］if文]
(https://qiita.com/ttabata/items/4f0bcff1e32f60402dfb)
[Julia早引きノート［06］ループ処理]
(https://qiita.com/ttabata/items/2a53825101b0b75fb589)
[Julia早引きノート［07］try, catch, finally]
(https://qiita.com/ttabata/items/1d6fe990526c99b65b5f)
[Julia早引きノート［08］変数の型(Int, Float, Bool, Char, String)]
(https://qiita.com/ttabata/items/2b84a826e39bfe432b62)
[Julia早引きノート［09］関数 (1)基本編]
(https://qiita.com/ttabata/items/d9b4f2728ec0dbcc6394)
[Julia早引きノート［10］関数 (2)応用編]
(https://qiita.com/ttabata/items/462e216c43d519f1969d)
[Julia早引きノート［11］Nothing型]
(https://qiita.com/ttabata/items/0e5a6b21968d8752cf0b)
[Julia早引きノート［12］複合型(Composite Type)型]
(https://qiita.com/ttabata/items/27469216a3c33101c825)
[Julia早引きノート［13］タプル]
(https://qiita.com/ttabata/items/ebe35dbfec4efbc1c29a)
[Julia早引きノート［14］リスト(Array型一次元配列)]
(https://qiita.com/ttabata/items/7528863ccbb282e8260d)
[Julia早引きノート［15］辞書(dictionary)]
(https://qiita.com/ttabata/items/77a4f1d02b51d067bfb7)
[Julia早引きノート［16］集合]
(https://qiita.com/ttabata/items/ca8137922a785122037e)
[Julia早引きノート［17］多次元配列 (1)初期化]
(https://qiita.com/ttabata/items/01fecbd14363460a27a6)
[Julia早引きノート［18］多次元配列 (2)様々な演算や関数]
(https://qiita.com/ttabata/items/f35896a5fa005fba7fbc)
[Julia早引きノート［19］多次元配列 (3)サブ配列]
(https://qiita.com/ttabata/items/045c00406fe45270b42e)
[Julia早引きノート［20］ファイル入出力]
(https://qiita.com/ttabata/items/5a99c3998060d161ace8)
[Julia早引きノート［21］JSON、XMLファイルの入出力]
(https://qiita.com/ttabata/items/65ebec11830271f9be71)
[Julia早引きノート［22］Python関数やPythonモジュールの呼び出し]
(https://qiita.com/ttabata/items/3afc8cef40d1e98a7b17)
[Julia早引きノート［23］JuliaでのMatplotlibによるグラフ描画]
(https://qiita.com/ttabata/items/96a0e172addfac690cca)
[Julia早引きノート［24］CSVFiles(DataFrameとの連携)]
(https://qiita.com/ttabata/items/51446731a703b5aca524)
[Julia早引きノート［25］線形代数演算(ベクトル・行列計算)]
(https://qiita.com/ttabata/items/5abe14d5c510e8ca0f54)
(※引き続きコンテンツを増やしていきます)
</div></details>


##関連情報

:paperclip: Julia - 公式ページ
https://julialang.org/

:paperclip: Julia - 日本語公式ドキュメント
https://julia-doc-ja.readthedocs.io/ja/latest/index.html

:paperclip: 初めてのJuliaとインストール (Windows & Linux)
https://qiita.com/ttlabo/items/b05bb43d06239f968035

:paperclip: Julia - Mathematics
https://docs.julialang.org/en/v1/base/math/


##ご意見など

ご意見、間違い訂正などございましたらお寄せ下さい。
記号の読み方（自分用）

##! 　エクスクラメーション　ビックリマーク
##"　ダブルクオート　ダブルクオーテーション
##＃　ナンバーサイン
##$　ダラー　ドル記号
##%　パーセント記号
##&　アンバサンド　アンド
##'　シングルクオート　アポストロフィ
##`　バッククオート
##()　丸括弧　小括弧　
##*　アスタリスク
##+　プラス記号
##,　コンマ　カンマ
##-　ハイフン
##・ ピリオド
##/　スラッシュ
##:　コロン
##;　セミコロン
##<>　山括弧
##=　イコール　符号
##?　クエスチョンマーク
##@　アットマーク
##[]　角括弧　大括弧
##\　バックスラッシュ
##^　キャレット
##{}　波括弧　中括弧
##~　チルダ
##_　アンダースコア　アンダーバー
##|　バーティカルバー
【Python】標準入力について

標準入力の取得について学んだ事を記載します

## N 行の入力
```python
【入力】
afd
agdp
hj

【出力】
afd
agdp
hj

for a in range(3):
    c = input()
    print(c)

```

##2 つの整数の半角スペース区切りの入力
```python
【入力】
6 90
【出力】
6
90

input_line = input().split()

for a in input_line:
    print(a)
```



## 2 行目で与えられる N 個の整数の入力
```python

【入力】
6
56 78 39 26 4 553

【出力】
56 
78 
39 
26 
4 
553

【構文】
input_line = int(input())
#入力の1つ目を取得する

try:
    for a in range(input_line):
        v = input().split()
except EOFError:
    pass
#１．for文にて1つ目に取得した数値までをrangeで回して0～順に変数aに代入する
#２．for分の2行目にて2つ目の入力を取得し，split()で文字列を分割する
#３．1つ目に取得した数値分，繰り返す

for d in v:
    print(d)

※try-except文を入れないと，EOFError: EOF when reading a lineというエラーが出てしまう
```
## 2 組の整数の入力
```python
【入力】
4
57 10
53 38
9  46
96 29

【出力】
57 10
53 38
9  46
96 29

【構文】
input_line = int(input())

for i in range(input_line):
    a, b = input().split()
# ここでa, bに1行目と2行目の値を分けている
    print(a, b)
```

##整数の組からの選択（特定の組数目からの抽出）

```python
【入力】
10
46 5
2 7
89 6
81 0
46 675
2 948
68 35
17 10
26 64
28 95

【出力】
26 64

【構文】
# if文にて出力
input_line = int(input())

for a in range(input_line):
    x, y = input().split()
    if a == 7: 
        print(x, y)


【別解】
# リストに追加して出力
myinput = []
input_line = int(input())

for a in range(input_line):
    x, y = input().split()
    myinput.append((x, y))

print(' '.join(myinput[7]))

```

入力には関係ないけど

```python
import string
# stringモジュールは文字列を取得するモジュール

alphabets = string.ascii_uppercase
# ABCDEFGHIJKLMNOPQRSTUVWXYZ
# ascii_lowercaseはa～zまでを取得する
# ascii_uppercaseはA～Zまでを取得する
# digitsは数字を取得する

# X はインデックスの何番目？
print(alphabets.index("X") + 1)  # 24
```

随時更新
【Vue.js】Vue.jsでfontawsome(Free版)を使用する方法　　

##【ゴール】
Vue.jsでfontawsomeを使用する。(Free版)
``※Vue.jsバージョンは2.6.12です！！！``

##【メリット】

■Vue.jsの理解度向上
■UI向上

##【環境】
`mac catarina 10.156`
`Vue.js v2.6.12`

##【実装】

####`※node.js, vue.jsのインストールは割愛。ページ下に参考リンク貼っておきます🙇‍♂️`

####兎にも角にも、「npm install」
`アイコンのコード入れたら全部使えるよにします〜`

```mac.terminal
//ワークスペース作成
$ vue create fontawsome

// fontawsomeのパッケージ（無料版のみ）
$ npm i --save @fortawesome/fontawesome-svg-core
$ npm i --save @fortawesome/free-solid-svg-icons
$ npm i --save @fortawesome/free-brands-svg-icons
$ npm i --save @fortawesome/free-regular-svg-icons
$ npm i --save @fortawesome/vue-fontawesome@2  //ここだけバージョンによって異なります。

```

####インストールしたパッケージを読み込む

```js:main.js
import { library } from '@fortawesome/fontawesome-svg-core'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { fas } from '@fortawesome/free-solid-svg-icons'
import { fab } from '@fortawesome/free-brands-svg-icons'
import { far } from '@fortawesome/free-regular-svg-icons'

library.add(fas, far, fab)
Vue.component('font-awesome-icon', FontAwesomeIcon)

```

####使ってみる

```js:app.js
<template>
  <div>
    <font-awsome-icon icon="お好きなアイコンのコード">
  </div>
</template>
```

####以上！！！

##【まとめ】

■ npm install
■「main.js」でパッケージを読み込む
■ < font-awsome-icon icon="お好きなアイコンのコード"> でviewに描画する


##【オススメ記事】

■公式ドキュメント
https://github.com/FortAwesome/vue-fontawesome

■ 【node.js】 node.jsインストール 芋っていたけど、簡単だった件...
https://qiita.com/tanaka-yu3/items/739db5ffed24a8d9ae4b

■ 【HOMEBREW】 Mac OSのパッケージマネージャーについて node.jsやってたら学んだ事
https://qiita.com/tanaka-yu3/items/65dac47443cc08914a86
Djangoでモデル関係図を自動生成

#概要
Django extensionsのgraph_modelsを使用し、モデルの関係図を自動生成する方法の自分用まとめ。
envではなく、dockerコンテナ内で実行する手順になっています。

#準備
##インストールなど
必要なパッケージをインストールする。

```python
pip install pygraphviz
pip install pydotplus
pip install django-extensions
```

windows環境でpygraphvizをインストールしようとするとVCビルドツールをインストールしたりする必要があるので注意。

また、dockerコンテナで行う場合、次の作業も必要でした。
graphvizをインストール。

```python
apt-get install -y graphviz
```

日本語で出力したい場合、日本語フォントのインストール。ttcファイルはwindowsなどから適当に用意。
Dockerfileに記載してしまうのが楽です。

```python
$ cp meiryob.ttc /usr/share/fonts
$ fc-cache -fv
```

##その他
あらかじめモデル自体やフィールドにverbose-nameを付けているとモデル図でもその名前を使用することができます。

#コマンド

`python3 manage.py graph_models -g -o <出力名>.png --verbose-names --disable-abstract-fields <app名>`

私の環境ではjpgは出力できませんでしたが本当はできるらしい？
また、`--verbose-names`はverbose-nameを使用するオプション、`--disable-abstract-fields`は継承元のフィールドを含めないようにするオプションです。他にも不要なモデルを除外する`--exclude-models`など多くのオプションがあります。

#参考

[Django で Models.py の ER図をPDF化](https://qiita.com/ShortArrow/items/3aa68044e7c8d5c029b3)
【備忘録】vCSA構築手順

vCSAの構築が苦手なので、備忘録として構築手順をまとめてみました。
何回作ってもいつも変なところで詰まるので、二度の失敗をしないために・・・
この手順通りにすれば、環境の差異がなければ問題なく構築できると思います。
※この手順はとりあえずvCSAを構築する場合です。
ちゃんとしたDNSサーバがある場合は、1と２の作業は不要です。

＜手順概要＞
1. DNSサーバを構築する
2. DNSを設定する
3. ESXiでDNSサーバを設定する
4. 作業端末でvCSAインストールをする（Step1）
5. Step1終了後、vCSAで疎通確認する
6. ESXiで疎通確認する
7. vCSAインストール（Step2）をする
8. エラーなく構築完了！


##1.DNSサーバを構築する
vCSAのインストール中に名前解決が必要なので、DNSサーバを構築しましょう。
構築するDNSサーバの場所は、踏み台サーバ上でもESXi上でもOK。
ESXiとvCSAとネットワークが繋がっているところであれば大丈夫。


##2. DNSを設定する
私はいつもWindow ServerでDNSサーバを立てています。
設定内容は以下の通り。

* 正引きでゾーンを作成（ゾーン名はなんでも良い）
* 逆引きでゾーンを作成（ネットワーク内容を記載）
* ゾーン内にESXi、vCSA、DNSを登録  
　※PTNも一緒に作成する

※DNSサーバを構築後にDNSサーバのネットワーク設定で自身のDNSがDNSサーバに設定されていない時がたまにあります。再度ネットワーク設定を見直してみてください。
　「DNSサーバ構築→DNS役割→DNS設定→ネットワーク設定」だと自身がDNSだと自動的に設定が入るみたいですが。
　私は一回これが設定されてなくて詰まったことあります。


##3. ESXiでDNSサーバを設定する
vCSAを載せるESXi構築の際にDNSサーバを設定していない時があります。
その際は忘れずにESXiのネットワーク設定でDNSを設定してください。
また、ESXiのネットワーク設定後は再起動が必要なので、仮想マシンは落としてくださいね。
（ESXiのコマンドでネットワークのみ再起動ってあるのかな）


##4. 作業端末でvCSAインストールをする（Step1）
vCSAのisoファイルを作業端末にマウントして、vCSAのインストールをしましょう。
この時、ネットワーク設定でDNSサーバを指定してください。
また、SystemNameはFQDNじゃないといけないので、「test.local」と言った、ドットをつけましょう。

##5. Step1終了後、vCSAで疎通確認する
Step1終了後、すぐにStep2に進まずに疎通の確認をしましょう。
※Step2でこけてしまったら、またStep1をしないといけないので・・・

1. ESXi Host ClientでvCSAのコンソールを開く
2. コンソール上で[Alt]+[→]を押下してコマンドコンソールを開く
3. rootユーザでログインする（パスワードは設定したもの）
4. 「ssh」を実行してSSHシェルに入る
5. 以下のコマンドを実行して、疎通の確認をする  
　nslookup 'ESXiのIPアドレス'  
　　→「'ESXiのホスト名'.'DNSで設定したゾーン名'」が表示されること  
　nslookup 'DNSのIPアドレス'  
　　→「'DNSのホスト名'.'DNSで設定したゾーン名'」が表示されること  
　nslookup 'vCSAのIPアドレス'  
　　→「'vCSAのホスト名'.'DNSで設定したゾーン名'」が表示されること  
　ping 'ESXiのホスト名'.'DNSで設定したゾーン名'  
　　→疎通が取れること  
　ping 'DNSのホスト名'.'DNSで設定したゾーン名'  
　　→疎通が取れること  
　ping 'vCSAのホスト名'.'DNSで設定したゾーン名'  
　　→疎通が取れること  

VMware公式サイトの方にはショートネームで疎通が取れることも確認してくださいと記載がありましたが、
実際はショートネーム（ホスト名のみ）で疎通が取れなくても大丈夫だったので、無理に設定しなくても良いと思います。

##6. ESXiで疎通確認する
ESXiで疎通確認しましょう。
急いで構築した際にESXiのホスト名を設定し忘れていてStep2がこけていたこともあるので、
ホスト名の確認も最後に付け加えました。

1. ESXiにteratermなどでログインする
2. rootユーザでログインする（パスワードは設定したもの）
3. 以下のコマンドを実行して、疎通の確認をする  
　nslookup 'ESXiのIPアドレス'  
　　→「'ESXiのホスト名'.'DNSで設定したゾーン名'」が表示されること  
　nslookup 'DNSのIPアドレス'  
　　→「'DNSのホスト名'.'DNSで設定したゾーン名'」が表示されること  
　nslookup 'vCSAのIPアドレス'  
　　→「'vCSAのホスト名'.'DNSで設定したゾーン名'」が表示されること  
　ping 'ESXiのホスト名'.'DNSで設定したゾーン名'  
　　→疎通が取れること  
　ping 'DNSのホスト名'.'DNSで設定したゾーン名'  
　　→疎通が取れること  
　ping 'vCSAのホスト名'.'DNSで設定したゾーン名'  
　　→疎通が取れること  
4. 以下のコマンドを実行して、ホスト名の確認をします。  
　hostname

##7. vCSAインストール（Step2）をする
ブラウザを起動して、「https://<vCSAのIPアドレスまたはFQDN>:5480」にアクセスすると、
vCSAインストールのStep2に進むことができます。
ウィザードに従ってドメインなどを設定して進めていきましょう。
インストールに進むと、途中で中止して再実行などはできないので、最後の確認項目ではしっかり設定を確認しましょう。


##8. エラーなく構築完了！
名前解決で詰まるときは2%くらいで止まるので、そこで察します。
そこを乗り切ったら名前解決で詰まることはないので大丈夫です。



#補足
インストールの時のみの一時的なDNSサーバの場合は、以下のことをしてからDNSサーバを削除しましょう。
vSphere Web Clientは名前解決が必要なので、hostsをいじらないとコンソールを起動できなくなります。
※hostsファイルはDNSサーバよりも優先されますが、プロキシサーバの設定をインターネットでしていると注意です。
　私が構築していたときは、全然nslookupで名前解決されなくて詰まっていて、いろいろ調べた結果、プロキシ設定がされていたことが原因でした。
　ブラウザのプロキシ設定がされていると、hostsよりもプロキシサーバの名前解決が優先されるようです。
　[参考サイトさん](http://poppory.hatenablog.com/entry/2015/03/29/021104)
メールアドレスの検証

# ヘルプ記事より

以下の数式でチェックできるとヘルプに書かれています。
オブジェクトの入力規制の場合は Not()を更に追加
フロー画面のユーザ入力の検証は以下のまま

```
REGEX({!検証したいアドレス},"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}")
```

しかし、上記だと１つのメールアドレスにしか対応できません。
**,**で区分された複数アドレスの場合は以下のようになります。

```
REGEX({!検証したいアドレス},"([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}){1}(,[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4})*$")
```

正規表現で複数チェックをする場合のポイントは**太字**のところ。

"**(**[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}**){1}(,**[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}**)*$**")

# 実際の質問から

+ [メールの入力規制](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000HEKQC)

Email Message objectに設定できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/6bf903f5-cec8-c4de-7cd1-9c014f0cb84e.png)
https://trailhead.salesforce.com/trailblazer-community/download/file/0694S000000FyudQAC

消されている
+ [複数入力版](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000HELtA)


+ [Survey email address validation..](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000MhpF2)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/fdbde428-797c-cc76-168b-c11c3cffcb75.png)



```
[a-zA-Z0-9._%+]+@[a-zA-Z0-9.]+.[a-zA-Z]{2,4} 
```
配列同士の要素を比較する方法

配列同士の要素を比較するプログラムを書いてプルリクした際､レビューでもっといい方法を教えて頂いたのでメモです！

具体的には､下記のとおり､**Afterの方がより目的(配列同士の要素を比較)に沿った方法になっている**ということです｡
Before → 配列2つを文字列にして一致するかどうかチェック
After → 配列の中身をすべて比較してチェック

## やりたいこと
｢配列A,Bの要素に差分があるかどうか｣を知りたい｡
配列内の数字はajaxで通信して取得していて､今の所いつでも昇順で入っている｡

## やったこと

### Before

```index.vue
~ 略 ~

methods: {
    isDiffArrays() {
        let arrayA = [1, 2, 3, 4];  // 仮で入れています　実際はfunctionの外からもってきました
        let arrayB = [2, 3, 4, 6];　// 仮で入れています　実際はfunctionの外からもってきました
        return (arrayA.toString() != arrayB.toString());
    }
}

~ 略 ~
```

いちおう､中身の比較はしていますが､何らかの原因で昇順以外で格納されてしまうと､
例えば[1, 2, 3, 4]==[2, 3, 4, 1]でfalseが返らないという結果にもなり得ます｡


### After

```index.vue
methods: {
    isDiffArrays() {
        let arrayA = [1, 2, 3, 4];  // 仮で入れています　実際はfunctionの外からもってきました
        let arrayB = [2, 3, 4, 6];　// 仮で入れています　実際はfunctionの外からもってきました

        let numOnlyInA = arrayA.filter(i => arrayB.indexOf(i) == -1);
        // 上記の方法でarrayBが持たないarrayAの値(ここでは1)をnumOnlyInAに入れることができます。
        // 同じ方法でarrayAが持たないarrayBの値(ここでは6)をnumOnlyInBに入れます｡
        let numOnlyInB = arrayB.filter(i => arrayA.indexOf(i) == -1);

        return ((numOnlyInA.length != 0) || (numOnlyInB.length != 0))
    }
}
```

この方法なら､配列の要素ひとつひとつをfilterでチェックしているので､
[1, 2, 3, 4]と[2, 3, 4, 1]を比較したときには【中身の要素は同じ】という結果になります｡
biomaRt, getBM で "Error in scan(file = file, what = what, sep = sep, quote = quote,..." というエラーが出る問題

こんにちは！バイオインフォマティクス系オタク修士学生のroadricefieldです！今日は2020年10月13日現在発生しているbiomaRtの`getBM()`で起こっている問題についてです.  

# 起きている問題

```R
db <- useMart("ensembl")
hs <- useDataset("hsapiens_gene_ensembl",mart=db)

symbol <- getBM(attributes = c("ensembl_gene_id", "uniprot_gn_symbol"),
                filters = "ensembl_gene_id", 
                values = ID, #IDはensembl_gene_id
                mart = hs)
```
これでやると以下のように怒られます.  

```
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : line 1 did not have 3 elements.
```  

**なんでや！！ この前まで元気に動いとったやろ！！**  

調べるともしかしたらEnsembl側の問題かもしれないというコメントを見つけました.  

https://support.bioconductor.org/p/134587/  

どうやら通信の障害でサーバーから正しい形のテキストファイルが返って来ない問題なようです.  

# ミラーサイトを指定したら直った！！  

上記の私のスクリプトではデフォルトでEnsemblサーバーが指定されていると思うので[こちら](https://qiita.com/antiplastics/items/a5cf3907cfb6b3245b21)を参考にして以下のようにアジアのサーバーを指定してみました.  

```R
mart <- useEnsembl(biomart = "ensembl", 
                   dataset = "hsapiens_gene_ensembl", 
                   mirror = "asia")

symbol <- getBM(attributes = c("ensembl_gene_id", "uniprot_gn_symbol"),
                filters = "ensembl_gene_id", 
                values = ID, #IDはensembl_gene_id
                mart = mart)
```  

動いた！！　動きました！！　ありがとう......ありがとう......アジアのサーバーは生きていました......  

# 同日 11:09 追記  

```
Request to BioMart web service failed.
The BioMart web service you're accessing may be down.
Check the following URL and see if this website is available:
http://asia.ensembl.org:80/biomart/martservice?type=registry&requestid=biomaRt
Error in if (!grepl(x = registry, pattern = "^\n*<MartRegistry>")) { : 
  argument is of length zero
```  

**あああああぁぁぁぁぁぁぁぁぁぁぁ！！！！！！！**  

ミラーを`useast`に変えたらまた動きました. とりあえずミラーを色々変えてみてください！
AWSアカウントにつけられるエイリアス（別名）の命名規則

AWSのマネジメントコンソールにサインインするときに入力する「12桁の数字」ことAWSアカウントID、これには「[自社名 (または他のわかりやすい識別子)](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/console_account-alias.html#AboutAccountAlias)」をエイリアス（別名）として設定することができます。設定は[マネジメントコンソール](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/console_account-alias.html#CreateAlias_Console)からでも[AWS CLI](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/console_account-alias.html#CreateAlias_API)からでも可能です。

ただし完全に任意のエイリアスを付けられるわけではありません。マネジメントコンソールでの表示からすると、以下の制約があるようです。

* 28文字以内
* 使用できる文字は英子文字、数字、`-`（ハイフン）だけ
* すでに使われているエイリアスは使用不可（おそらく世界中でユニークであることが必要）<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/bd27230a-dfcb-136f-32bd-c5233cb67ee7.png)

ユニークな文字列（まだ使われていないエイリアス）かどうかは、以下のようなサインインURLを試してみればわかりそうです。

```
https://your_account_id.signin.aws.amazon.com/console/
```

「your_account_id」に、例えば以下のURLのうち、1つ目のいかにも使われていそうな `master` を入れたURLにアクセスしてみるとサインイン画面が表示されます。つまり `master` というエイリアスは存在する、すでに使われてるということです。しかしでたらめな文字列 `grauysdsrosvlxgd094ue` を入れたほうは404 not foundになります（いまのところ）。これはエイリアスとしておそらく使われていない文字列です。

* https://master.signin.aws.amazon.com/console/
* https://grauysdsrosvlxgd094ue.signin.aws.amazon.com/console/<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/5a07433b-fbd9-0894-f719-a3069686bbea.png)

AWSアカウントを識別できないといけないので重複不可だろう、URLに使われるので文字種制限があるだろう、つまり「[AWS S3バケットの命名規則](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules)」みたいな感じだろうと思っていましたが、文字列長が短くピリオドが使えないなどもう少し厳しいですね。

エイリアスの命名規則などを公式ドキュメントでうまく探せなかったので、メモでした。

# 参考

* [AWS アカウント ID とそのエイリアス - AWS Identity and Access Management](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/console_account-alias.html)
【物体検出】ACFPN : FPNの進化系

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/92e3a054-e8bd-7c61-9bad-c1ee84b23e29.png)

2019年にSOTAを取ったAC-FPN(Attention-guided Context Feature Pyramid Network)をざっくりと見ていく。

FPN(Feature Pyramid Network)とdilated ConvolutionとDenseNetを理解してると分かりやすいと思う。

よりReceptive Fileldを広げる為CEMというModuleを提案し、CEMにより失われた位置についての情報を補完する為、AMというモジュールをさらに追加している。

より広く、より正確な位置を学習させる為の改善である。


<h2>Context Extraction Module (CEM)</h2>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/e97e7fda-61a2-c000-94f5-8dcb0cc038a2.png)

名前の通りコンテキスト(画像の文脈)を取り出すモジュールとなっている。

複数のdilated Convolutionを重ねる事で様々なのreceptive Fieldを学習できる。

消失勾配問題を解決するために使われたDenseNetの構造を取り入れる。画像ではみにくいが、複数のdilationのlayerの特徴を結合していくので、様々なScaleの情報を最後の層まで伝える事が出来る。

「dilated LayerのFeature Map(粗い)」と「uinputをupsampleしたFeature Map(細かい)」を結合することで全体的なContextを捉えながら細かい特徴も保持する事が出来る。

最後にChannel方向に結合されてきた特徴量を1x1 convolutionを行いChaneel方向に畳み込みを行う。





<h2>Attention-guided Module (AM) </h2>

Mask-RCNNみたいにSemantic情報を一緒に学習する事で、物体の細かい特徴まで捉えられるようになり物体認識の精度をあげるという試みだと思う。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/035567ed-c0fb-d928-1d56-1a4ede2bc0d5.png)

図から分かるようにCEMから出てきたFeature Mapを使いsemantic情報を学習している。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/fbbf2dca-70ba-57b2-c454-0a1d858d2c0b.png)


図から分かるようにF5(FPNの最上位層)から出てきたFeature Mapを使いsematic情報を学習している。




<h1>結果</h1>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/ba730ae0-a58e-8534-4b88-72a28611ed86.png)
CEMとAMを使う事で認識出来てなかった物体が認識出来るようになっているのが分かる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/54a4a9b5-2dc0-bb94-5b65-5df4d337194d.png)
Mask R-CNNでもよりSemanticの情報が学習されている事が分かる。

<h1>結論</h1>

CEMでReceotive Fieldを広げAMでSemantic情報を学習する事で細かな特徴まで捉えるようにすることでFPNの精度を上げたって感じかな。

まだ100%理解できてない部分があるから、もう少し勉強をしてupdateしたいと思う。たぶんSemantic Segmentationの基礎理解が必要そう。

<h1>参考文献</h1>
Attention-guided Context Feature Pyramid Network for Object Detection
https://arxiv.org/pdf/2005.11475v1.pdf
【DX Suite】画像補正豆知識

## はじめに
AI-OCRサービスの DX Suite にある画像補正設定の、各設定項目がよく分からなかったので調べてみた。

※ あくまでもサービス利用者の視点なので、実態とは違うことを書いている可能性あり。

### OCR豆知識
だいたいのOCRエンジンは、事前処理として画像を __カラー画像 → グレー画像 → 二値化画像__ と変換していく。
最後の二値化画像がいかにOCRしやすい状態になっているかが、OCRの精度に影響する。
DX Suite も同じで、それぞれのステップごとの設定を調整することによって、よりOCRしやすい画像を得られることがある。

## カラー画像
カラー原稿をグレー画像へ変換する際に行う補正について設定する。

### フィルタ：色背景除去(HSVモデル)
HSVモデルとは、色相(H)、彩度(S)、明度(V)の3つからなる色空間のこと。
それぞれ、0～255の範囲で、残したい値の範囲を指定する。
既定値は `H=0～255, S=0～200, V=0～180` で、鮮やかで明るい色が除去されるようになっている。

#### 色相(H)
色合いを0～360までの数字にしたもの。
DX Suite では、残したい色相を0～255の範囲で指定する。下記に、両方の場合の数字を大まかに記載した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424975/d05a4f82-bc26-8402-34c3-40c55830229f.png)


参考：[色相 - Wikipedia](https://ja.wikipedia.org/wiki/%E8%89%B2%E7%9B%B8)

#### 彩度(S)と明度(V)
鮮やかさと明るさ。
Google検索で出てくるカラーピッカーを使うと、以下のような感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424975/81f5768b-47f1-a9e8-9772-eaf8ddb2a9ee.png)

### 変換：RGB係数
カラー画像をグレースケールへ変換するときの設定値。
既定値は `R=0.299, G=0.587, B=0.114` で、これは「NTSC加重平均法」での重み係数となっている。
カラーをグレーへ変換するときはRGBの平均値を求めるが、上記の重み係数をRGBそれぞれに加えると、より自然に見えるグレー画像が出来上がる。
テレビ放送でも使われている国際規格らしい。

DX Suite で設定できる係数の範囲は0～1なので、例えばRを0にすれば、赤色の部分がより黒く変換される。

参考：

* [グレースケール変換 - IGUNOSS,Inc.](http://www.igunoss.co.jp/imageproc/imageproc1-3.html)
* [より自然なグレースケール変換 - 【ゆるゆるプログラミング】](https://talavax.com/grayscale2.html)

## グレー画像
グレースケール化した画像を二値化する際に行う補正の設定。

### フィルタ：平滑化処理
画像の輝度の変化を滑らかにする処理。ノイズ除去ができる。やり方が、ガウシアン、中間値、平均値、の3パターンがある。ある特定の画素(ピクセル)を中心として、周りの画素とどう比べてどう輝度を直すかが異なる。

### 変換
二値化(白と黒しかない画像)する際の処理方法を指定する。

* マトリックス単位二値化 - 薄い色でも、周りと比較して色が濃いのであれば黒とする、らしい。詳細不明。
* 自動二値化 - 適切な閾値を自動で判定して二値化する。
* 閾値二値化 - 閾値を手動で指定して二値化する。
レポートでのソートの注意事項

レポートの並び替えの注意事項

[sort report snapshot date](https://trailblazers.salesforce.com/answers?id=9064S000000DE7cQAG)

日付項目を一旦数式などで、テキスト化してしまうと　日付の順番で並ばないようです。
日付の順番で並べたいときは、日付型のままにすることらしい。
IntelliJ IDEAのGitHub Pull RequestsでCould not read from remote repositoryが表示される場合

IntelliJ IDEAにはGitHubプラグインがバンドルされており、IntelliJ IDEAからPull Requestsが閲覧できたりできます。

ところが表題の通り、プルリクエストを確認しようとすると、「Could not read from remote repository」というエラーが表示されることがあります。

これはログインしているGitHubのアカウントがOrganizationに所属しているためで、このエラーの解消にはオーナーの承認が必要です。

承認方法は[Organization 用の OAuth アプリケーションの承認 \- GitHub Docs](https://docs.github.com/ja/free-pro-team@latest/github/setting-up-and-managing-organizations-and-teams/approving-oauth-apps-for-your-organization)に書いてあります。
GoogleSheets


# Google Spreadsheet 

## 便利な関数

### =QUERY(range, sql query)

### =ArrayFormula(INDEX(B2:B19, MATCH(1, FIND(E2, C2:C19)), 0))
Case Sensitive Search

### =IFERROR(ArrayFormula(INDEX(B2:B27, MATCH(CONCATENATE(F2:F4), A2:A27&C2:C27&D2:D27, 0),)), "Not found")
Multiple Criteria search 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546056/db75a679-90e6-24d3-bf85-6b0a8c1ae8bf.png)


### =INDEX(reference,MATCH(search_key, range, [search_type]),[column])
>https://www.ablebits.com/office-addins-blog/2020/02/04/google-sheets-index-match/

Note. Faster than normal VLOOKUP
Match gets which row the key is and then index uses match result to return the row data or specific column in the row

#### =INDEX(reference, [row], [column])
**Index RETURNS value from specific cell if both row and column are declared, otherwise it returns the entire row**

#### =MATCH(search_key, range, [search_type])
**Match looks in ONE column for the KEY and RETURNS POSITION**
Note. MATCH only accepts one-dimensional arrays: either row or column.

### =VLOOKUP(search_key, range, index_key)
Note. VLOOKUP searches the range for a match on the first left column ONLY 
>https://support.google.com/docs/answer/3093318?hl=en

### =ARRAYFORMULA()

###  =IFERROR(formula, in case error)
just like try catch 

### =IMPORTRANGE()
import spreadsheet
[k8s]ServiceAccount や User を作って Role の権限を kubectl auth を使って確認する。

検証した時のメモです。

# 環境

```
alias | grep kubectl
k=kubectl

k version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.13-eks-2ba888", GitCommit:"2ba888155c7f8093a1bc06e3336333fbdb27b3da", GitTreeState:"clean", BuildDate:"2020-07-17T18:48:53Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
```

# 確認方法

`kubectl auth can-i` コマンドを使って権限のチェックを行う。
また、`--as` オプションを指定することで確認したい ServiceAccount や User の指定が出来るのでこれも使ってみる。

# ServiceAccount を作ってテストする時

以下では `sa-pod-reader` という ServiceAccount を作り、確認をする
`--as` で指定する時は `system:serviceaccount:<namespace><service_account_name>` という形式で指定する。

[Referring to subjects ](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#referring-to-subjects)

>system:serviceaccount: (singular) is the prefix for service account usernames.

```
# service account 作成
k create sa sa-pod-reader

# role 作成
kubectl create role pod-reader --verb=get --verb=list --resource=pods

# rolebinding 作成
kubectl create rolebinding binding-sa-pod-reader --role=pod-reader --serviceaccount=default:sa-pod-reader

# pod の get は可能
k auth can-i get po --as system:serviceaccount:default:sa-pod-reader
yes

# pod の作成は不可
k auth can-i create po --as system:serviceaccount:default:sa-pod-reader
no
```




# User を作ってテストする時

以下では `john` という ユーザーを作り、確認をする。
作成する Role などの情報は以下から抜粋

[Normal User](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/#normal-user)

```
kubectl create role developer --verb=create --verb=get --verb=list --verb=update --verb=delete --resource=pods

kubectl create rolebinding developer-binding-john --role=developer --user=john
```

確認。

```
# pod の get は出来る
k auth can-i get po --as john
yes

# deployment の権限はない
k auth can-i get deployment --as john
no
```
golang profiling

参考資料をメモするだけ
----
- https://github.com/adjust/go-wrk
- https://golang.org/pkg/net/http/pprof/
- https://github.com/uber-archive/go-torch (すでにGo1.11から含まれてる）

# Video
- GopherCon 2019: Dave Cheney - Two Go Programs, Three Different Profiling Techniques https://youtu.be/nok0aYiGiYA
- Profiling and Optimizing Go(古いけど) https://youtu.be/N3PWzBeLX2M
Boost Note (BoostNote.next) の起動方法

## 参考

* http://boostnote.hatenablog.com
* https://github.com/BoostIO/Boostnote.next/
* https://boostnote.gitbooks.io/boostnote/content/

## ビルド

* https://github.com/BoostIO/BoostNote.next/wiki/How-to-contribute

```sh
git clone "https://github.com/BoostIO/BoostNote.next"
```

```Dockerfile:Dockerfile
FROM node:14

COPY BoostNote.next /opt/BoostNote.next
WORKDIR /opt/BoostNote.next

RUN touch .env
RUN npm i
# localhost以外からのアクセスも許可。dockerコンテナで動かす場合必要。
# もしくはnginxでリバースプロキシする
RUN sed -i -e "s/host: 'localhost',/host: '0.0.0.0',/g" webpack.config.ts
ENV PORT=8000
CMD sed -i -e "s/3000/$PORT/g" webpack.config.ts && npm run dev
```

ビルド

```
docker build . -t tukiyo3/boostnote.next
```

起動

```
docker run -it --rm -p 8000:8000 tukiyo3/boostnote.next
```

* http://localhost:8000/app

![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/575fbb58-d2bf-4d67-3b60-913449dbc7dc.png)

動いた

データー保存場所

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/49cbe029-449b-2995-00e4-ead5434b38e9.png)


## Boost Note で気に入っているところ

* 日本語検索に対応
* 高速

### バージョンについて

* 最新版の Boostnote.next は Dropbox連携は対応していない。
* 従来の Boostnote だとDropbox連携が[可能な様子](https://github.com/BoostIO/BoostNote.next/issues/637)。


### ここにたどり着くまで

■ かんたんMarkdown ☆

* 日本語検索に非対応
* 
開発が止まっている

    * [プレビュー時、上メニュー非表示改良版](https://github.com/raugisu/KanTanMarkdown/tree/master/dist)がありました。使わせていただきます :sushi: 

■ mdwiki ☆

* mdwiki <b>```</b> で間違った指定をすると固まる。
* 日本語検索に非対応
* 開発が止まっている

■ wikitten ☆

* ファイル名での検索には対応
* .mdファイルを置くだけなので扱いやすい
* phpが別途必要

■ Qiita

* 気に入っているが、仕事の内容を載せるわけにはいかない。

■ gitbook.io (gitbook 2)

* 日本語検索に非対応
* 入力しづらい
* 大量の記事を書くには向いてなさそう。

■ gitbook (gitbook 1), honkit

* ビルド、デプロイの環境構築が面倒。
* Github Pagesなどで公開用にはよかった。
* 日本語検索に対応できた。

■ Gatsby

* 日本語検索がイマイチだった。
* phpが別途必要

■ Potmum

* 日本語検索に対応。とても使いやすい
* 開発が終了してしまった。

■ Growi

* 日本語検索に対応
* サーバースペックが多少必要

■ Redmine ( Redmica )

* 日本語検索に対応
* チケットを記事代わりに使って便利

■ Gitlab

* 重い

■ Gogs, Gitea

* 検索に対応していない

■ DokuWiki ☆

* おすすめ。日本語検索やIE6にも対応している。
QiitaのTwitter連携を解除する方法


[Qiita:アカウント連携を解除するには](https://help.qiita.com/ja/articles/qiita-release-account-coop)

>1.Qiitaにログインし、Qiitaトップページへアクセス
2.右上の自分のアイコンをクリックし、 [設定] をクリック
設定から連携解除をしてください。

Twitterの連携解除は[外部サービス]-[Twitterの紐付けを解除」でできました。
![スクリーンショット 2020-10-13 9.49.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123796/8d401182-44f8-7b41-baff-59c4a45e4f25.png)
セッションとクッキーって結局なんぞや！？

#セッションとクッキーについて
##セッション
Webページを移動してしまうと前のページで利用していた変数の値は使えなくなってしまう。  
他のページでも使いたい！！
って時に、セッションを利用すると、他のWebページで共通して使える変数(セッション変数)を利用できるようになる。

##クッキー
一度ログインしたあるアプリケーションページから離れても、またアクセスした時にログイン状態が保たれる仕組みなどで使われている。(twitter,instagram,オンラインショッピングサイトなど)
クッキーとセッションはよく似た機能だが、セッションは複数のページに渡って利用する変数を保持するという目的で利用されるの対し、クッキーは、ブラウザから離れてもユーザの値を保管しておく目的で利用されます。
ログイン機能などに使われる。ブラウザにクッキーが保存されるので、一度ブラウザを閉じても次開いた時、ログインした状態を保持してくれる。

###具体的説明
####前提知識
Webアプリケーション：オンラインショッピングサイト
Webブラウザ：私たちのパソコン

まず、HTML通信でWebブラウザからWebアプリケーション（Webサーバー）に「Urlでこのページ見せて欲しい」とか「ログイン情報（メールアドレス、パスワード）を渡すからログインさせてください」と依頼する。
そして、WebサーバーからHTML通信でWebブラウザに欲しい情報が返ってきて、依頼した結果が返ってくる(ページ情報や、ログイン可否情報)
####クッキーについて
簡単に言うと、最初にログインした時に、Webブラウザに**クッキー**という形で保存される。そのため、次にアプリケーションにurlでアクセスするときに保存された**クッキー**も一緒に送信するので、ログインした状態の画面がWebサーバーから返ってくる。

ログアウト時、Cookieが表示されていたリクエスト・ヘッドの**クッキー**部分にはdeletedと記載され、同じUrlであるに関わらず、ログイン情報としてはCookieが送られなかったため、ログイン失敗となった。

##終わりに
随時、よりわかりやすく更新していく予定です。
MaixAmigo を試す

# はじめに

Sipeedの新製品MaixAmigoを入手してみました

![MaixAmigo1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/6e79a5bd-f7ab-0bbd-3f24-d87ae3027409.jpeg)

# 仕様

CPUはK210で、基本的な仕様はMaixシリーズ、M5StickVと同じです。

Sipeedの仕様で目に付く点では、

| 仕様       | 説明         |
|:-----------|:------------|
| ストレージ  | micro-SD 最大128G    |
| ディスプレイ| タッチスクリーン付き 3.5インチTFT液晶320*480 |
| カメラ     | フロント GC0328 30万画素<br>リア OV7740 30万画素 |
| 外部I/F    | Grove*3、SP-MOD*3、USBタイプC*2 |

回路図: https://dl.sipeed.com/MAIX/HDK/Sipeed-Amigo/Maix_Amigo_2960(Schematic).pdf

# 使ってみる

### 起動画面

![MaixAmigo2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/6c5f7faf-45a2-4d41-63a9-0e3a9846d46c.jpeg)

### 初期ファームウェア

v0.5.0-168

![MaixAmigo3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/b3ded6d9-0e7c-56c7-4f11-b57b3ad0cdcf.png)

### MaixPy

カメラ画像を表示してみるサンプル。リアとフロントのカメラを交互に表示します。
Sipeed社MaixPyのドキュメントより
https://maixpy.sipeed.com/dev/zh/develop_kit_board/maix_amigo.html

```py
# -*- coding: UTF-8 -*-
# Amigo_sensor - By: Echo - 周五 4月 2 2020
# start of pmu_axp173.py
import sensor, image, time, utime, lcd
from machine import I2C, Timer
from fpioa_manager import fm
from Maix import GPIO

'''
说明: 该例程为 Amigo 前后摄像头切换的 example.
注意事项: 由于 Amigo 电源管理电路的设计 需要配置 PMU AXP173 的输出电压, 才可以正常使用摄像头
'''

# -------------
class AXP173:
    class PMUError(Exception):
        pass
    class OutOfRange(PMUError):
        pass
    def __init__(self, i2c_dev=None, i2c_addr=0x34):
        from machine import I2C
        if i2c_dev is None:
            try:
                self.i2cDev = I2C(I2C.I2C0, freq=400000, scl=24, sda=27)
            except Exception:
                raise PMUError("Unable to init I2C0 as Master")
        else:
            self.i2cDev = i2c_dev
        self.i2cDev.scan()
        self.axp173Addr = i2c_addr
    def __write_reg(self, reg_address, value):
        self.i2cDev.writeto_mem(
            self.axp173Addr, reg_address, value, mem_size=8)
    def writeREG(self, regaddr, value):
        self.__write_reg(regaddr, value)

# end of pmu_axp173.py
# ------------------------

# i2cDev = I2C(I2C.I2C0, freq=400000, scl=24, sda=27)
# print(i2cDev.scan())
axp173 = AXP173()
axp173.writeREG(0x27, 0x20)
axp173.writeREG(0x28, 0x0C)

lcd.init(freq=20000000)

while True:
    try:
        sensor.reset(choice=1)
        sensor.set_pixformat(sensor.YUV422)
        sensor.set_framesize(sensor.QVGA)
        sensor.skip_frames(time=2000)
        for i in range(50):
            img = sensor.snapshot()
            lcd.display(img)
    except Exception as e:
        print(e)

    try:
        sensor.reset(choice=2)
        sensor.set_pixformat(sensor.YUV422)
        sensor.set_framesize(sensor.QVGA)
        sensor.skip_frames(time=2000)
        for i in range(50):
            img = sensor.snapshot()
            lcd.display(img)

    except Exception as e:
        print(e)
        
```
ユーザビリティテストについて

#ユーザビリティテスト
今回は品質の観点から分類されるテストの中のユーザビリティテストについてご紹介します。
#ユーザビリティテストとは？
ユーザビリティテストとは，ソフトウェアの使いやすさを確認するテストです。
普段利用されているソフトウェアで，使いにくいと感じることもあるかと思います。
例　・機能要件は確かに満たされているけれども，実際使ってみると使いにくい。
　　・使い方がわからずあきらめてしまう場合
機能は豊富だが，使いにくくて誰も利用していないのでは，機能の目的を果たせていません。　
有効に利用されなければソフトウェア開発に対する費用対効果が出てきません。
このようなことが起こらないよう，使いやすさを確保することを重視するケースが増えてきています。
今の時代ソフトウェアの生産性が向上し，機能要件を満たしていることが当たり前となった今，使いやすさの重要性が増していると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612217/21e407d8-2c19-65a1-a43f-cb5199d2cb8d.png)

#そもそもユーザビリティとは？
ユーザビリティは，日本語では「使いやすさ」と表現されます。
ソフトウェアのユーザビリティが悪いとか，使いにくいと言う人はいますが，具体的にどう悪いのか説明できる人は少ないのではないでしょうか。
例えば「ある画面のボタンが使いにくい」といった場合以下のような点があがります。
・ボタンの形が悪い
・ボタンの色が悪い
・ボタンのラベルが悪い
さまざまな問題が考えられます。つまり，使いにくさの中にはさまざまな原因が存在すると考えられます。また，テストでは結果を客観的に示す必要があります。ユーザビリティが悪いといった場合にどの部分を指しているのか他の人が理解し，改善につなげられるようにしておかなければなりません。

そのためには，結果を客観的に判断する評価軸が必要になります。

#ユーザビリティの評価軸
評価軸としてニールセンの10原則をご紹介します。
※ここに紹介するのはあくまで原則です。実際のテストの際にはソフトウェアの特性などに合わせて具体化しチェックリストレベルにするのが良いと思います。
##[1]システム状態の視認性を高める（Visibility of system status）
《システム上で何が起こっているのか，適切な時間の範囲内で適切なフィードバックをユーザに通知しましょう》
##[2]実環境に合ったシステムを構築する（Match between system and the real world）
《システム上では，普段ユーザが利用していたり，聞き慣れている言葉や言い回しを用いましょう。システム指向の用語を用いてはいけません。現実の環境の慣習に従い，現実世界の順序を守り，かつ論理的な順序を持たせましょう》
##[3]ユーザにコントロールの主導権と自由度を与える（User control and freedom）
《ユーザがシステム上で操作を間違えるのはよくあることです。間違った場合にユーザが前の状態に戻れるようなしくみを提供しましょう。システム上のあらゆる操作に対して，取り消し（undo⁠）⁠，やりなおし（redo）ができるようにしましょう》
##[4]一貫性を保持し，標準に従う（Consistency and standards）
《システム上で文言が同じであるのに，画面ごとにその文言の意味やアクションが異なるようなことは避けましょう。また，OSや規格などはその分野の標準に従いましょう》
##[5]エラーの発生を事前に防止する（Error prevention）
《丁寧なエラーメッセージやマニュアルを作成するよりも，ユーザがミスを起こさないような設計をしましょう。画面遷移する前の入力項目検証機能や事前説明を用意し，ユーザのミスを防ぐようにしましょう》
##[6]記憶しなくても，見ればわかるようなデザインを行う（Recognition rather than recall）]
《操作対象となる情報やアクションを適切なときにユーザに見えるようにし，操作の途中でユーザに記憶させたり，ユーザの記憶に依存しないようにしましょう》
##[7]柔軟性と効率性を持たせる（Flexibility and efficiency of use）
《ヘビーユーザと初心者が混在するシステムでは，ヘビーユーザ用に便利な機能を設けるか，ユーザが画面や機能をカスタマイズできるようにしましょう》
##[8]最小限で美しいデザインを施す（Aesthetic and minimalist design）
《1つの画面上に多くの情報を載せるのではなく，その画面で必要な情報を吟味しましょう。情報が多過ぎると，画面全体の見やすさが損なわれてしまいます》
##[9]ユーザによるエラー認識，診断，回復をサポートする（Help users recognize,diagnose, and recover from errors）
《エラーメッセージは，メッセージをわかりやすい場所に表示し，メッセージを見ただけでユーザが次の行動へ移れるようにしましょう。システムのエラーメッセージをそのまま出すことだけは避けましょう》
#ユーザビリティのテスト方法
##(1)評価は最低2人が実施するようにしましょう
評価を一人で行うと評価軸の捉え方に偏りが出る可能性があります。偏りを排除するために最低2人で評価しましょう。
##(2)評価は別々に実施し，後で結果を合わせましょう
評価軸は共通のものを利用しますが，意見調整などは行わず各人が個別に評価し，あとで結果を突き合わせる方法をとると，より多くの気付きが得られます。最初から2人で行うと，他人の意見に流されてしまったり，遠慮して意見を出し切れない場合があります。別々で実施すると効率が悪いように感じますが，他の人が見ると思わぬ観点が出る可能性もあります。まずは洗い出しの範囲を広げましょう。
##(3)優先度付け
ソフトウェアの利用者が限定されている場合や，特殊な業務でのみ利用される場合などニールセンの10原則のすべてを満たす必要が無いこともあります。ソフトウェアの想定利用者や目的を考慮して改善の優先度付けを行いましょう。また，コスト（費用，時間）に対する改善効果によって優先度付けを行うことも有効です。

#まとめ
今回はユーザビリティテストについてまとめてみました。ソフトウェアの使いやすさを追求するということに着目してテストケースを作成していきたいと思います。
お客様が一番求めてる機能が簡単にシンプルにかつ満足いただけるソフトウェアが費用対効果も高く理想のものだとわかりました。原則などは分かりずらかったのでリンク先に詳しく解説されてますので見てみてください。

引用：[第9回ユーザビリティテスト](https://gihyo.jp/dev/serial/01/tech_station/0009)
Typoraで数式を書く

##はじめに
Typoraはすごく便利なMarkdownエディタです。私は主にプログラミングのちょっとしたコードを残したり,Qiitaに投稿する前の草稿として書き溜めたりしたい時に使っています。そのTyporaはLaTeXも簡単に記述することができるので,数学のちょっとしたアウトプットにも使えます。この記事ではTyporaで数式を扱う手順を誰でもわかるように書ければと思います。

## 1.Typoraをインストールする
[コチラ](https://typora.io)からTyporaをインストールできます。

##2.Typoraを開く

Typoraを開くと画像のような画面になります。
<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549093/c8ec6d75-bf50-8d3b-ccba-18bcda484ca8.jpeg">

##3.$$と入力し,Enterを押す
次のような画面になります。
![2020-10-13 8.37のイメージ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549093/2385734e-66f4-61af-cb46-a911d0fa36b6.jpeg)



##LateX数式を入力する
四則演算だけではつまらないので,ちょっとしたコマンドと改行を扱います。LaTeXコマンドについてはweb上にたくさんのサイトがあるのでそれらを参考にします。[参考](http://www.latex-cmd.com)

```
\begin{align}
\frac{192}{342} &= \frac{96}{174}\\
&= \frac{48}{87}\\
&= \frac{16}{29}
\end{align}
```

![2020-10-13 8.36のイメージ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549093/a88acfaf-5837-38af-2be9-ba456884aba5.jpeg)

これでTyporaに数式を入力することができました。楽しい！
WBS作成プロセスが含まれるマネジメントプロセス

AP試験学習記録27年秋 午前51

WBS作成プロセスが含まれるマネジメントプロセスはどれか。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/82ebc9f6-6550-b26a-6012-452f7d9b82e0.png)


１、プロジェク卜・スコープ・マネジメントは、
プロジェクトの遂行に必要な作業を過不足なく含め、プロジェクトを成功させることを目的とした管理プロセスで、以下の作業プロセスが含まれます。

・スコープマネジメント計画
・要求事項収集
・スコープ(実施範囲)定義
・WBS作成
・スコープコントロール
・スコープ妥当性確認

２、WBS(Work Breakdown Structure)
プロジェクトにおいて作成される成果物を基準に、全体の作業をトップダウン的に階層化して、各作業に内容・日程・目標を設定する手法

３、
・プロジェクトコストマネジメント
　プロジェクトコストマネジメントは、プロジェクトを決められた予算内で完了させることを目的とする管理プロセスで、
　・「コストの見積り」
　・「予算の編成」
　・「コストのコントロール」
などのプロセスが含まれます。


・プロジェクト品質マネジメント
　プロジェクト品質マネジメントは、プロジェクトが取り組むニーズを満足させることを目的とする管理プロセスで、　
　・「品質の計画」
　・「品質保証の実施」
　・「品質コントロールの実施」
などのプロセスが含まれます。

・プロジェクトリスクマネジメント
　プロジェクトリスクマネジメントは、プロジェクトにプラス又はマイナスとなる潜在的な事象を特定し，評価し，対策を決定した上でコントロールし，好機を高め脅威を軽減することを目的とする管理プロセスで、
　・「リスクの特定」
　・「リスクへの対応」
　・「リスクのコントロール」
などのプロセスが含まれます。


参照：
https://www.ap-siken.com/kakomon/27_aki/q51.html