OmniAICreator/Qiita-1.07M huggingface dataset:
スマホ画面でのfacebookページプラグインの2つ目のボタンの潜り込み対応について

facebookページプラグインは以下リンク先にてサイズや表示内容などを設定して作成できる。
[※リンク先](https://developers.facebook.com/docs/plugins/page-plugin?locale=ja_JP) 

■facebookページプラグイン
PC/スマホ兼用の設定になるが、facebookページ側の設定によってページプラグイン内の右側のボタン（下記画像だと「Share」ボタン）がカスタマイズされたボタンになるケースがある。
![facebookページプラグインTOP画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429583/1d80b1a2-bb61-ad96-1387-f98e5b7fae84.png)

■ページプラグイン内の２つ目のボタンが「メッセージを送信」になった例
![facebookページプラグインの設定画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429583/cb1f8e16-d568-0ed7-e3f5-9da668a64a6a.png)


画面の横幅が広い場合は問題ないが、iPhone5/SEサイズくらいの横幅になると、右側のボタンが左側の真下に潜り込んで表示されてしまうという悩ましい問題がある。。。
![facebookページプラグインのボタン入り込み画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429583/62b51ce5-adf3-c619-4990-1b73783230f4.png)


ボタンの潜り込みに対しては以下2つの対応方法がある。

# ■1. 右側のボタンを強制的にシェアボタン表示にする方法

facebookページプラグイン作成ページで最終的にコードを取得する際、Step3の画面にて、divタグ内に色々な設定値が記載されている(赤矢印の付近)。
![facebookページプラグインコード画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429583/d831b485-b862-8624-4aa2-a0de357202b4.png)
そちらに以下のコードを追記するだけで、簡単に右側のボタンをシェアボタンに変更ができる。
`data-hide-cta=false`

これはfacebookページ側で設定していたボタン（カスタムのコールトゥアクションボタンと呼ぶ）を非表示にするという設定である。次の方法に比べて、こちらの方がシンプルな対応である。

# ■2. 横幅が特定px以下であればfacebookページプラグインの横幅を強制的に279pxにする方法

状況によっては、右側のボタンをシェアボタンではなくfacebookページ側で設定していたボタンを使いたいというニーズがあると思う。

`※facebookページプラグインの仕様として、横幅が280px未満だと、右側のボタンを強制的にシェアボタンとして表示するという仕様がある。` 

そこで、妥協策にはなるが、iPhone5/SEサイズの横幅のみfacebookページプラグインの横幅をcssで強制的に279pxになるようにし、右側のボタンをシェアボタンにするようコントロールすれば良い。

この方法のデメリットは、他の項目と横幅がズレる可能性が出てくるので、デザインのコントロールが難しい側面がある点だろう。
GitHub Pagesの作り方（404が出てしまい挫折した人向け）

#前書き
自身のWebサイトを作成したい、または簡単なWebサービスツールを使ってもらいたいといった際に、レンタルサーバを借りてサイトを作成したりするのは面倒だしコストが掛かってしまうからと敬遠していた人の為の内容です。
GitHub Pagesを利用すれば、簡単にWebサイトを作成することができます。
その手順を以下に記載します。
（GitHubのアカウントは事前に作成してください。）

#構築手順
## 手順1 GitHubのTOPページへアクセスして、「New」を押下してリポジトリを生成する。
![スクリーンショット (1)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204260/9ab95d0a-5aa5-48b6-31f1-04340e779d52.jpeg)

## 手順2 リポジトリ名を入力して「Create Repository」を押下する。
![スクリーンショット (2)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204260/3476ab50-c397-3147-80b0-b4914301c53a.jpeg)

## 手順3 「Creating a new file」リンクを押下する。
![スクリーンショット (3)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204260/cab53ae8-0802-d7b8-66a9-b6816f01da5b.jpeg)

## 手順4 ファイル名は「index.html」とし、ファイル内は適当な内容を記述して「commit new file」を押下する。
Sorry, no image...

## 手順5 「Settings」タブを押下する。
![スクリーンショット (7)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204260/ba2e6e7f-c6de-bb12-3586-ec40e93a6eee.jpeg)

## 手順6 「GitHub Pages」カテゴリ内の「Source」を「none」から「master branch」を選択する。
![スクリーンショット (8)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204260/0f92f07c-24af-6555-e162-1b62e34e4ada.jpeg)

## 手順7 オートコミットが走るため、自動的にリロードが行われます、その為、再度「GitHub Pages」までスクロールする。表示されているリンクを押下する。
![スクリーンショット (9)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204260/58fa52c0-74ab-c9b2-0c34-5157b91dc8f3.jpeg)

## 手順8 ページが表示されます。
![スクリーンショット (10)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204260/20d73ff5-9b35-fea7-8055-e982aba06c44.jpeg)

## 補足
404ページが表示されてしまう場合は、index.htmlをコミットして刺激を与えて上げると表示されるようになります。
Ubuntu 18.04 LTS に phpenvをインストールしphpのバージョンを切り替える

Ubuntu 18.04 LTS にphpenvをインストール、phpバージョンを切り替えるまでの手順です。

## 利用したクラウドサービス
Google Compute Engine
構成：4コア/16GB
ブートディスク：Ubuntu 18.04 LTS(amd64 bionic image built on 2019-05-30)

## パッケージの更新
```bash
$ sudo apt-get update
$ sudo apt-get -y upgrade
```

## phpenvのインストール

公式のインストーラーを利用する。Readmeの手順に従いインストールする。
https://github.com/phpenv/phpenv-installer

```
$ curl -L https://raw.githubusercontent.com/phpenv/phpenv-installer/master/bin/phpenv-installer \
    | bash
```



インストール後のメッセージに従い`.bash_profile`に設定を追加する。

```bash
WARNING
 |  # Seems you still have not added 'phpenv' to the load path.
 |  
 |  # Load phpenv automatically by adding
 |  # the following to ~/.bash_profile:
export PHPENV_ROOT="/home/your_user_name/.phpenv"
if [ -d "${PHPENV_ROOT}" ]; then
  export PATH="${PHPENV_ROOT}/bin:${PATH}"
  eval "$(phpenv init -)"
fi
```

```bash
$ vi ~/.bash_profile
$ source ~/.bash_profile    # profileの再読込
```

バージョンを表示して利用できることを確認

```bash
$ phpenv -v
```

## phpのビルドに必要なライブラリ等のインストール

```bash
sudo apt -y install build-essential
sudo apt -y install libxml2-dev libssl-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libmcrypt-dev libreadline-dev libtidy-dev libxslt-dev autoconf
```

## phpのバージョン切り替え

installコマンドでビルドが始まる。完了するまで5-10分ほど。

```bash
$ export PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j4  # php-buildによるビルドを複数スレッド使って高速化する
$ phpenv install 7.2.19
```

ビルドが完了したらphpのバージョンを切り替えて完了。

```bash
$ phpenv global 7.2.19
$ php -v
PHP 7.2.19 (cli) (built: Jun 12 2019 13:51:06) ( NTS )
```
ネスト化された辞書の値(Value)の合計を計算する

## やりたいこと

ネスト化された辞書の値（Value，ただし数値のみ)の合計を計算したい．なお，事前にネストの深さがわかっていないとする．

たとえば以下のような辞書`x`を考える．

```python
x = {'a': 1.1,
     'b': {
         'c': [1, 1],
         'd': {
             'e': (1, 1),
             'f': {
                 'g': 'foo'
             }
         }
     }}

```

この場合の合計は`5.1`になる．

## 方法

再帰関数を使う．

```python
def f(x):
    y = 0
    if isinstance(x, int) or isinstance(x, float):
        y += x
    elif isinstance(x, tuple) or isinstance(x, list):
        for _x in x:
            y += f(_x)
    elif isinstance(x, dict):
        for v in x.values():
            y += f(v)
    else:
        pass
    return y
```

```python
assert f(x) == 5.1  # OK
```


## 感想

再帰関数最近使ってなかったので完全に忘れていた
Xamarin.FormsでButtonにアイコンフォントを配置する方法

## アイコンフォントとは
画像ではなくテキスト形式でアイコンをViewに埋め込むことができるものです。
コードの中に指定された文字列を埋め込むことで、アイコンを表示することができます。
メリットとしては直接画像を使用する場合に比べて、データ量を抑えることができる、端末に合わせて表示してくれるなどが挙げられるようです。

今回はアイコンフォントをボタンに使う際につまずいた点を備忘録として書いておきます。
Xamarin.Formsでのアイコンフォントの使い方については以下のQiitaに詳しく載っています。
参考：[Xamarin.Forms でアイコンフォントを使う](https://qiita.com/amay077/items/4c315e7f212834183316)

## アイコンフォントをButtonの中に配置
まずは初歩的な方法から。
以下のようなコードを書けばたしかにボタンにアイコンフォントを配置することができました。
\&#xFBBC;の部分がアイコンフォントですね。

```ButtonSample.xaml
<Button FontFamily="{DinamicRecource MaterialFontFamily}" Text="&#xFBBC; Setting" FontSize="25" BackgroundColor="#f9f9f9"/>
```
しかしこの方法だと確かにアイコンフォントは表示されるのですがFontFamilyがTextの部分にまで影響を与えてしまって、"Setting"と表示したい部分が"setting"になってしまいます。
ここをいかに解決するかという部分で随分とハマってしまいました。

## 解決方法
```ButtonSample.xaml
<Button Text="Setting">
    <Button.ImageSource>
        <FontImageSource FontFamily="{DinamicRecource MaterialFontFamily}" Glyph="&#xFBBC;"/>
    </Button.ImageSource>
</Button>
```
ButtonクラスのなかにButton.ImageSourceをネストし、そのなかにFontImageSourceを使うことで解決しました。
これで"Setting"の頭文字を大文字にしたまま、ボタンにアイコンフォントを配置することができました。
FontImageSourceにはプロパティとしてColorなども指定することが可能です。
M5StickCを動かしてみる

とりあえず動かせるとこまでやりました．

今回はArduino IDEで動かしてみます．
[![Image from Gyazo](https://i.gyazo.com/bbc8719b224e6a4ab2be22c9fbea3024.png)](https://gyazo.com/bbc8719b224e6a4ab2be22c9fbea3024)

## 環境

- Windows10
- M5StickCがある

## 環境つくるよ

### 必要なものをインストール

1. Arduino IDE  
   <https://www.arduino.cc/en/Main/Software>
2. USB to Serial Driver  
   <https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/drivers/CP210x_VCP_Windows.zip>  

Arduino IDEはサイトに飛んで"Download the Arduino IDE"より，対応するものをダウンロードしてインストールしてください．  
USB to Serial Driverはリンクをクリックするとzipがダウンロードされます．  
解凍すると中にいくつかのファイルがあると思います．対応するexeを選んで実行してください．

| バージョン | インストーラ |
| --- | --- |
| Windows10 32ビット版 | CP210xVCPInstaller_x86_v6.7.0.0.exe |
| Windows10 64ビット版 | CP210xVCPInstaller_x64_v6.7.0.0.exe | 
| Windows7 | CP210xVCPInstaller_Win7_v5.40.24.exe |

うまくUSB to Serial Driverが入ったか実際にM5StickCをつないで確認していきます．

   1. M5StickCをUSBで接続，
   2. Windowsのデバイスマネージャを起動
   3. ポートの中にUSB Serial Portが現れるはずです．(COM*)はUSBを刺したポート等で変わると思います．
   [![Image from Gyazo](https://i.gyazo.com/d2d2fb8f7826529ad737cc2a13750581.png)](https://gyazo.com/d2d2fb8f7826529ad737cc2a13750581)


### Arduino IDEの設定

Arduino IDEを開いて実際にM5StickCを動かせるように準備していきます．

   1. "ファイル -> 環境設定" を開く
   2. "追加ボードマネージャのURL" に  
   `https://dl.espressif.com/dl/package_esp32_index.json` を入力して`OK`
   3. "ツール -> ボード"Ard...." -> ボードマネージャ" を開く
   4. 検索バーで"esp32"を検索
   5. でてきたのをインストールしたのち`閉じる`
   [![Image from Gyazo](https://i.gyazo.com/cf704560c398766d8a7a5ee5c650c1fa.png)](https://gyazo.com/cf704560c398766d8a7a5ee5c650c1fa)
   7. "スケッチ -> ライブラリをインクルード -> ライブラリを管理" を開く
   8. 検索バーで`m5stick`を検索，インストールしたのち`閉じる`
[![Image from Gyazo](https://i.gyazo.com/39ac7f88f0cb9d200618dc69f5d499a9.png)](https://gyazo.com/39ac7f88f0cb9d200618dc69f5d499a9)
   1.  "ツール -> ボード -> M5Stick-C" を選ぶ
   2.  ツールのなかにボード情報とかが表示されるようになった
   [![Image from Gyazo](https://i.gyazo.com/41d275fe582af84f14c93a0e45e46c76.png)](https://gyazo.com/41d275fe582af84f14c93a0e45e46c76)

## テストプログラムを動かしてみる！

"ファイル -> スケッチ例 -> M5StickC" のなかに様々なテストプログラムがあるので好きなものを選んでください．

ファイルとかの下にある右向きの矢印を押すとプログラムがコンパイルされ転送されます！

## まとめ

かなりはやくここまで来れました．
テストプログラムをたくさん用意してくれているのでそれで遊んでるだけでも結構たのしいです．
こっからいろいろプログラム頑張って書いていきます．
また気が向いたら記事にします．

言いたいこと等あれば以下まで 
Twitter: <https://twitter.com/itiB_S144>

## 参考記事

- M5Stack公式ページ
    - <https://m5stack.com/>
- Github
    - <https://github.com/m5stack>
- M5StickC Quick Start - Arduino Win
    - <https://docs.m5stack.com/#/en/quick_start/m5stickc/m5stickc_quick_start_with_arduino_Windows>

いろいろとM5StickCについて検証してくださっているわかりやすい記事様↓↓
Lang-ship: <https://lang-ship.com/blog/>
同一端末で、複数のGitHubアカウントを使い分ける


## アカウント毎に公開鍵と秘密鍵を設定、それぞれ`id_rsa` の名前を特定できるようにする

vi ~/.ssh/config 

```
Host mygit
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa_local    →ここを変更する
  TCPKeepAlive yes
  IdentitiesOnly yes
Host othergit
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa_other    →ここを変更する
  TCPKeepAlive yes
  IdentitiesOnly yes
```

## git cloneの際に一部変更する

#### localアカウントの場合
`git clone git@github.com:hogehoge/fugafuga.git`
↓
`git clone mygit:hogehoge/fugafuga.git`

#### otherアカウントの場合
`git clone git@github.com:mofumofu/ugauga.git`
↓
`git clone othergit:mofumofu/ugauga.git`


## 参考
- [同一端末で、複数のGitHubアカウントを使い分ける方法](https://github.com/youkinjoh/TrainingWebSocket/wiki/%E5%90%8C%E4%B8%80%E7%AB%AF%E6%9C%AB%E3%81%A7%E3%80%81%E8%A4%87%E6%95%B0%E3%81%AEGitHub%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%82%92%E4%BD%BF%E3%81%84%E5%88%86%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95)
Android端末の満充電を検知してIFTTT＋MacroDroid＋meross(スマートプラグ)で充電終了させる

# やりたいこと
* Android 端末で、満充電を検知して充電終了させる
* つまり、過充電を防いでバッテリー消耗を防止する

# 使うもの
* [IFTTT](https://ifttt.com/)
    * [IFTTT Android アプリ](https://play.google.com/store/apps/details?id=com.ifttt.ifttt&hl=ja)
* [MacroDroid](https://play.google.com/store/apps/details?id=com.arlosoft.macrodroid&hl=ja)
* [meross](https://www.amazon.co.jp/dp/B07BT58131)
    * [meross Android アプリ](https://play.google.com/store/apps/details?id=com.meross.meross&hl=ja)
    * その他 IFTTT に対応したスマートプラグであれば何でも可

# 事前準備
* 上記、使うものに挙げたそれぞれのアカウント作成ならびにインストールおよび購入
* meross Android アプリで meross 端末を登録しておく
* IFTTT で meross アカウントと連携しておく


# IFTTT
* New Applet を選択して this へ進む

## this
* Webhooks を選択
* Receive a web request を選択
* Event Name を入力
    * 任意の英数
    * あとで webhook 用の URL に含まれるので、半角スペースなどは使わない方が無難
    * ここでは仮に battery99 などとしておく
* Create trigger を押す

## that
* Meross を選択
* Turn off を選択
* Device を選択
    * ここで Device のプルダウンが効かない場合、アカウント連携がうまくできていないということなので、要見直し
* Create action

## Review and finish
* 内容の確認
* 問題なければ Finish を選択
    * Receive notifications when this Applet runs についてはお好みで

## Webhook URL の取得
上記でトリガー＆アクションは設定できたが MacroDroid が叩くための Webhooks URL を取得しておく必要がある。
そしてだいぶ分かりづらい場所に書いてある……

* My Applets を選択
* Services タブを選択
* Webhooks を選択
* 右上の Documentation を選択
    * IFTTT Android アプリ上では表示されない場合は WEB で確認すること
* Your key is: ****************************** と表示されているのがアカウント固有キー
    * その下の方にある Make a POST or GET web request to: が今回つかうもの
    * https://maker.ifttt.com/trigger/battery99/with/key/****************************** という感じになるので、この文字列を取得しておく


# MacroDroid
最初に マクロの追加 をタップする。

## トリガー タブ
* バッテリー／電源 をタップ
* 電池残量の変化 をタップ
* 指定残量への増加／減少時 を選択
* ～まで増加 を選択
* ％のバーを任意の数字に設定
    * ここでは 99% としておく

## アクション タブ
* アプリケーション をタップ
* Webサイトを開く／HTTP GET をタップ
* URLを入力 欄に IFTTT の Webhooks で取得しておいた URL を入力
* HTTP GET (Webブラウザ不使用) にチェックして OK

## 条件 タブ
* バッテリー／電源 をタップ
* 電源の接続状態 をタップ
* 電源に接続中 を選択
    * なお、この条件は入れなくても動作するはずですが……

## 保存
* ちょっと分かりづらいですが、右下のチェックマークボタンで保存完了


# 動作確認
* meross 端末に挿した USB 電源から給電させてみて、充電が 99% になった時に meross 端末がパチッと音を立てて OFF になれば OK


# ToDo
* OFF にした meross 端末を再度 ON にするのはどうする？
    * ~~meross を turn on するための Webhooks を IFTTT で作って MacroDroid で充電ケーブルがささったら URL 叩かせればよいかな……？~~
        * meross が off 状態の場合、「充電ケーブルがささった」と認識されないのでダメ
    * アイディア浮かんで実装＆検証したら追記予定
tmux 初心者!!

##tmuxを使ってみた!!
今回研究をしていく中で開発の効率化に向けてtmuxを使ってみました!!
少しづつアウトプットしていきます!!

###インストール

私はmac osを使用していてHomebrewでインストールを行いました!!

```
$ brew install tmux
```
###操作キー
まず、以下のコマンドでtmuxを起動します!!

```
$ tmux
```
tmuxにはプレフィックスキーというtmuxの各機能を実行するために必要なキーがあります。

デフォルトでは恐らく 「control + b」 がプレフィックスキーになります。

このプレフィックスキーと何かのキーを押すことで各機能を実行することが出来ます。

・画面の縦分割

```
control + b から %
```

・画面の横分割

```
control + b から “ 
```

・右のウィンドウへの移動

```
control + b から →
```

どのキーを押すかはデフォルトで決まっていますが自ら変更を行うこともできます。

##まとめ

上記で挙げたコマンド以外にも様々なものがあります!!

また、tmux.confというファイルを作成し、その中で自らコマンドを設定することもできます!!

次回に紹介していきますね!!

開発効率を挙げていきましょう!!
42日目　テーブルをスクレイピングしてCSVで保存

今日もスクレイピングにチャレンジしています。

こちらの記事をお手本にしました。

[【Python】BeautifulSoupを使ってテーブルをスクレイピング](https://qiita.com/hujuu/items/b0339404b8b0460087f9)

ところが最初からヘンテコなデータが吐き出されている。なんでだー！？

###複数のテーブルがあった!

ソースをよく見たらテーブルが１０個以上あり、最初のテーブルのみ出力されていました。
幸い、それぞれdivではさんでいましたので、

こちらのサイトを参考に、divで絞ってテーブルを指定してみました。
[Beautiful Soupを使ってスクレイピング](https://qiita.com/rusarusa/items/d7f014ba80d6fe7a3e07)

```html
<div id="hoge">
  <table>
  	<tr>
  		<td>
  			<div class="name">fugaの里</div>
  		</td>
  		<td>
  			<div class="button"><a href="fuga.html"><div>
  		</td>
  	</tr>
  </table>
</div>
```

```python
# テーブルを指定
div = bsObj.find('div',id="results_list")
table = div.select_one("table")
rows = table.findAll("tr")
```

だけどリンク先が表示されません。
リンク先は別途取得するみたいです。


[<a>タグ内にあるリンク先を取得方法について](https://teratail.com/questions/131124)

```python
with open("ebooks.csv", "w", encoding='utf-8') as file:
    writer = csv.writer(file)
    for row in rows:
        csvRow = []
        for cell in row.findAll(['td', 'th']):
            csvRow.append(cell.find(class_="name").get_text())
            csvRow.append(cell.find(class_="button").get('href'))
        writer.writerow(csvRow)
```

できました！
スクレイピングしたら簡単かと思ってましたが、手作業の方が早かったかな・・・？

（所要時間 90分）
RecyclerViewの更新は adapter.notifyItemChanged(position, hoge)でやろう

StaggeredGridLayoutのビューの更新をしようと思ったらビューの配置までズレて大変なことになった。

# 何をしようとしたか
高さが可変の画像サムネイルがGrid(格子状)に並んだアイテムのリストを表示させていた。
読み込み→サイズ取得→サムネが入る位置を計算→配置→表示、と段階を踏むので
画像が非同期で読み込まれると、画面を見ている途中で要素が「ぬるっ」と移動する。

ちなみに、この「ぬるっ」は仕様（イヤなら非同期読み込みをやめるか画像の高さ固定にするしかない）

このリストの要素1つ1つにトグルのアイコンがあって（お気に入りとかいいねボタンのイメージ）、
次の画面でもお気に入りの操作ができるので、リストに戻ってきたときの変更結果を
反映させたい。ただし、リストの再読込はしないでスクロール位置もキープしたままで。

**嘘でしょ、と思いました。（感想）**

# どういう失敗をしたか
notifyDataChangedだと、要素の配置まで大きくズレてGridにならなかった。


# 解決方法
`adapter.notifyItemChanged(position, hoge)`を使おう

https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#notifyItemChanged(int,%20java.lang.Object)
raspberrypi nfcpy


ICカードで施錠 https://qiita.com/carpenders/items/94d29098127faaffe1fc

```
pi@raspberrypi:~ $ sudo apt-get -y install python-pip
これで失敗したら、
pi@raspberrypi:~$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
pi@raspberrypi:~$ sudo python get-pip.py

pi@raspberrypi:~ $ sudo pip install -U nfcpy

SONY RC-S380を接続してnfcpyの動作を確認する。

pi@raspberrypi:~ $ python -m nfc
This is the 1.0.1 version of nfcpy run in Python 2.7.13
on Linux-4.14.98-v7+-armv7l-with-debian-9.8
I'm now searching your system for contactless devices
** found usb:054c:06c3 at usb:001:004 but access is denied
-- the device is owned by 'root' but you are 'pi'
-- also members of the 'root' group would be permitted
-- you could use 'sudo' but this is not recommended
-- better assign the device to the 'plugdev' group
   sudo sh -c 'echo SUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"054c\", ATTRS{idProduct}==\"06c3\", GROUP=\"plugdev\" >> /etc/udev/rules.d/nfcdev.rules'
   sudo udevadm control -R # then re-attach device
I'm not trying serial devices because you haven't told me
-- add the option '--search-tty' to have me looking
-- but beware that this may break other serial devs
Sorry, but I couldn't find any contactless device

エラーが表示されるので画面に表示された「sudo」の２行を実行する。

pi@raspberrypi:~ $ sudo sh -c 'echo SUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"054c\", ATTRS{idProduct}==\"06c3\", GROUP=\"plugdev\" >> /etc/udev/rules.d/nfcdev.rules'
pi@raspberrypi:~ $ sudo udevadm control -R

pi@raspberrypi:~ $ sudo reboot

pi@raspberrypi:~ $ sudo apt-get -y install git

pi@raspberrypi:~ $ git clone https://github.com/nfcpy/nfcpy.git

nfcpyのサンプルを実行してカードのIDを読み取る。手元にあった交通系ICカードで以下の結果

pi@raspberrypi:~ $ ./nfcpy/examples/tagtool.py
[nfc.clf] searching for reader on path usb
[nfc.clf] using SONY RC-S380/P NFC Port-100 v1.11 at usb:001:004
** waiting for a tag **
Type3Tag 'FeliCa Standard (RC-S915)' ID=01100A10D7174A36 PMM=04014B024F4993FF SYS=040F
```

本家
https://nfcpy.readthedocs.io/en/latest/index.html
sense()
https://qiita.com/LinaNfinE/items/945a795e53427e768e47
nfc.tag.activate_tt3()
https://qiita.com/undo0530/items/89540a03252e2d8f291b
サンプルファイル リンク集

![uploading...0]()

## サンプルファイルなど


### 調査中

■Jupyter Notebook

* データ分析ツール Jupyter入門　<br>
https://goo.gl/dLqqfZ


■Python

* 実践 Python データサイエンス
http://www.tsjshg.info/udemy/notebooks.html

* できる 仕事がはかどるPython自動処理 全部入り
https://book.impress.co.jp/books/1118101147
openpyxl 
markdown2
pdfminer.six
python-pptx
python-docx

* すぐに使える！業務で実践できる！Pythonによる AI・機械学習・深層学習アプリのつくり方
https://github.com/kujirahand/book-mlearn-gyomu

* pythonによるスクレイピングと機械学習
https://github.com/Tattsum/python_scr_mlearn

* 機械学習のチュートリアルをJupyter Notebook形式で公開 
https://github.com/terapyon/python-machinelearning-tutorial

* Introduction to Machine Learning with Python
https://github.com/amueller/introduction_to_ml_with_python/

* 現場ですぐに使える！ Pythonプログラミング逆引き大全 313の極意
https://www.shuwasystem.co.jp/support/7980html/5363.html

* はじめてのディープラーニング
https://www.sbcr.jp/support/14734.html

* Excelで学ぶ統計解析本格入門
https://www.sbcr.jp/support/15059.html

* Pythonによるあたらしいデータ分析の教科書
https://www.shoeisha.co.jp/book/detail/9784798158341

* Pythonで学ぶあたらしい統計学の教科書
https://www.shoeisha.co.jp/book/detail/9784798155067

* Pythonで動かして学ぶ！ あたらしい機械学習の教科書
https://www.shoeisha.co.jp/book/detail/9784798144986

* Pythonで動かして学ぶ! あたらしい深層学習の教科書 機械学習の基本から深層学習まで
https://www.shoeisha.co.jp/book/detail/9784798158570

* 退屈なことはPythonにやらせよう ――ノンプログラマーにもできる自動化処理プログラミング
https://www.oreilly.co.jp/books/9784873117782/#files
https://github.com/oreilly-japan/automatestuff-ja

* 統計アドインのダウンロード
https://www.h-fj.com/statbook2016/download.php

* 最短コースでわかる ディープラーニングの数学
https://github.com/makaishi2/math_dl_book_info


■R言語

* R統計解析 パーフェクトマスター
https://www.shuwasystem.co.jp/books/r_prog_permas/

* 改訂3版 R言語逆引きハンドブック(sample.zip)
http://www.c-r.com/book/detail/1076
http://www.c-r.com/data/201-3/sample.zip
6b3372726576
6439773370

* 現場ですぐに使える！ R言語プログラミング逆引き大全 350の極意
https://www.shuwasystem.co.jp/smp/book/9784798053622.html

* RStudio Cheat Sheets
https://www.rstudio.com/resources/cheatsheets/

■Excel

* Excel最強の教科書
https://www.sbcr.jp/support/13698/
Rubyでカックロを解いてみた-その１(導入)

今回は導入です。

Rubyの勉強も兼ねて、カックロ(足し算クロス・加算クロス)を
解くアルゴリズムを開発してみました。
[カックロとは] (https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%83%E3%82%AF%E3%83%AD)

カックロは大きさや難易度によって時間は変わりますが、
現在のアルゴリズムはあまりよくありません。

こちらは作成中のサイトです。
[カックロ解答サイト] (https://www.sentohsharyoga.com/)
オストル のゲームAIを作る第一回

オストルのゲームAIを作りはじめました。
コンソールに初期配置を表示するところまで出来ました。

```python:ostle.py
# -*- coding: utf-8 -*-
from __future__ import print_function

SPACE = 0
WHITE = 1
BLACK = 2
HOLE = 3

class OstleBoard(object):
    def __init__(self):
        # 初期配置
        # 2次元リストを生成する
        self.cells = [[WHITE, WHITE, WHITE, WHITE, WHITE],
        [SPACE, SPACE, SPACE, SPACE, SPACE],
        [SPACE, SPACE, HOLE, SPACE, SPACE],
        [SPACE, SPACE, SPACE, SPACE, SPACE],
        [BLACK, BLACK, BLACK, BLACK, BLACK]]

    def show_board(self):
        """ボードを表示する"""
        print("--" * 20)
        for i in self.cells:
            for cell in i:
                if cell == WHITE:
                    print('W',end='')
                elif cell == BLACK:
                    print('B',end='')
                elif cell == HOLE:
                    print('H',end='')
                else:
                    print('*',end='')
            print("\n")

def main():
    board = OstleBoard()
    board.show_board()

if __name__ == '__main__':
    main()
```


```text:output.txt
----------------------------------------
WWWWW

*****

**H**

*****

BBBBB
```
俺のvimrc

最新記事をこちらに投稿させていただきました。もしよろしければこちらも御覧くださいませ
https://red-full-moon.com/vimrc-2020/

何百億番煎じかはわからないが、メモ代わりに自分のvimrcを晒す
（2019年6月12日現在）
それだけの記事です

完成時の見た目はこんな感じ
<img width="646" alt="aaa.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125791/a28680c5-a7bc-9712-515d-a67a98d3244e.jpeg">


はい、本編
**ででん！！！！！**

```vimrc
" 機能型
"" 互換モードの廃止(要先頭記述)
set nocompatible
"" コマンドの履歴を10000件残す
set history=10000
"" 行を跨いでのカーソル移動を有効にする
set whichwrap=b,s,h,l,<,>,[,]
"" w!!でsudoを忘れても保存
cnoremap w!! w !sudo tee > /dev/null %<CR> :e!<CR>
"" バックスペースの有効化
set backspace=indent,eol,start
"" 左右スクロールは一文字づつ行う
set sidescroll=1
"" 左右スクロール時の視界を確保
set sidescrolloff=8
"" 文字コードの設定
set encoding=utf-8
"" vimのマルチバイトへの対応
scriptencoding utf-8
"" 保存時の文字コード
set fileencoding=utf-8
"" 読み込み時の文字コードの自動判別. 左側が優先される
set fileencodings=ucs-boms,utf-8,euc-jp,cp932
"" 改行コードの自動判別. 左側が優先される
set fileformats=unix,dos,mac
"" NeoVimのインストール確認
if has('vim_starting')
    set runtimepath+=~/.vim/bundle/neobundle.vim/
    if !isdirectory(expand("~/.vim/bundle/neobundle.vim/"))
        echo "install NeoBundle..."
        :call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim")
    endif
endif
call neobundle#begin(expand('~/.vim/bundle/'))
NeoBundleFetch 'Shougo/neobundle.vim'

" プラグインの個別記載
"" カラースキームのmolokaiを導入
NeoBundle 'tomasr/molokai'
"" ステータスラインの情報を強化
NeoBundle 'itchyny/lightline.vim'
"" 末尾のスペースを強調表示
NeoBundle 'bronson/vim-trailing-whitespace'
"" インデントの可視化
NeoBundle 'Yggdroot/indentLine'
"" NeoVimの設定系
call neobundle#end()
filetype plugin indent on
NeoBundleCheck
"" molokaiが存在すれば有効化する
if neobundle#is_installed('molokai')
    colorscheme molokai
endif

" 表示系
"" ステータスラインを表示
set laststatus=2
"" カーソル行の背景色を変える
set cursorline
"" 行番号を表示する
set number
"" 上下4行の視界を確保
set scrolloff=4
"" カラーbitの指定
set t_Co=256
"" 括弧入力時の対応する括弧を表示
set showmatch
"" 入力中のコマンドを表示
set showcmd
"" 現在のモードを表示する
set showmode
"" 編集中のファイル名を表示
set title
"" カーソルの位置表示を有効にする
set ruler
"" キャレットの形状変更
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
"" コードの色分け
syntax enable
" □ や○ 文字が崩れる問題を解決
set ambiwidth=double
"" 対応する括弧の強調表示
set showmatch
source $VIMRUNTIME/macros/matchit.vim
"" 長文が表示されなくなる問題の解決
set display=lastline

" 入力補助系
"" オートインデント
set smartindent
"" smartindentで増減する幅
set shiftwidth=4
"" インデントのスペースを設定
set tabstop=4
"" 貼り付け時にインデントを無効化
set paste
"" タブ入力を複数の空白入力に置き換える
set expandtab
"" 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅
set softtabstop=4
"" ペースト時の自動インデント
if &term =~ "xterm"
    let &t_SI .= "\e[?2004h"
    let &t_EI .= "\e[?2004l"
    let &pastetoggle = "\e[201~"
    function XTermPasteBegin(ret)
        set paste
        return a:ret
    endfunction
    inoremap <special> <expr> <Esc>[200~ XTermPasteBegin("")
endif
"" 改行時に前の行のインデントを継続する
set autoindent

" 検索系
"" 大文字と小文字を区別しない
set ignorecase
"" インクリメンタルサーチを行う
set incsearch
"" 大文字と小文字が混在した言葉で検索を行った場合に限り、大文字と小文字を区別する
set smartcase
"" 検索文字列をハイライトする
set hlsearch
"" 最後尾まで検索を終えたら次の検索で先頭に移る
set wrapscan
```

以上！

各種、解説は[この方](https://qiita.com/ahiruman5/items/4f3c845500c172a02935)の解説が神です。
他はググるとすぐ出るので、検索すると新たな発見もあるかも。

ブログ始めました、よかったら遊びに来てください
https://red-full-moon.com/
githubで複数アカウントをgitで利用するときにハマッたときの解決方法

githubで個人、会社など複数アカウントを利用していると下記のような `~/.ssh/config` を書いて切り替えて使うことがあると思われる。

```config:~/.ssh/config
Host github1
  HostName github.com
  IdentityFile ~/.ssh/id_hogehoge1_for_enterpirse
  User git
  TCPKeepAlive yes
  IdentitiesOnly yes
Host github2
  HostName github.com
  IdentityFile ~/.ssh/id_hogehoge2_for_personal
  User git
  TCPKeepAlive yes
  IdentitiesOnly yes
```

 * 切り替えるとき

```bash
# github1 を使うとき
$ssh github1

# github2 を使うとき
$ssh github2
```

これで、例えば、`github1`のアカウントのプライベートリポジトリを `git clone` するときに、下記のようにやるとエラーになる。

```bash
$ git clone git@github.com:hogehoge1/private_repo.git
Cloning into 'private_repo'...
ERROR: Repository not found.
fatal: Could not read from remote repository.

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

ここの　`git@github.com:hogehoge1/private_repo.git` は、githubの`clone or download` ボタン からコピーしたものだがエラーになってしまう。

この場合は、下記のようにすると`git clone`できる。

```bash

$ git clone git@github1:hogehoge1/private_repo.git
```

`git@github1:hogehoge1/private_repo.git` の `github1` 部分は `~/.ssh/config`の`Host`を指定する必要がある。
githubで複数アカウントを利用していないと気づかない落とし穴だと思いました。結構ハマってしまった。。。
Git/Git Hubについてまとめ

Gitとは、ソースコードをはじめとするファイルの変更履歴を管理するシステム。

Gitの特徴は「ファイルの変更管理が出来る」「過去のファイルを復元できる」という点がある。

＜Gitを扱う上での基礎知識＞
・変更履歴の保存場所
ファイルの変更を管理する場所をリポジトリという。
リポジトリには、ローカルリポジトリとリモートリポジトリの二種類があり、
ローカルリポジトリとはローカル環境上でファイルやディレクトリを管理すること。
リモートリポジトリとは、ネットワーク上でファイルやディレクトリの管理を行うこと。複数人での開発を行う際は必須となる。
・変更の記録
リポジトリに変更を記録することをコミットと言い、記録するファイルを一時的に保存されている場所をインデックスと呼ぶ。

＜Gitの基本操作＞
・Git init
新規リポジトリを作成するコマンド
・Git add
インデックに記録するコマンド
・Git commit
リポジトリに記録するコマンド
・Git log
リポジトリにコミットされたログを確認するコマンド





Git Hubとは、Git機能に対してチーム開発に便利な機能を付け加えたWebサービスで、Gitにおけるリモートリポジトリ。

Git　Hubの特徴は「世界中のプロダクトが保存されている」「チーム開発に役立つ機能が搭載されている」点にある。

・Git Hubにリモートリポジトリを作成し、これをローカル環境に複製してローカルリポジトリを作成することをクローンという。

これからお世話になるGit Hubのまとめ
Datadog Infrastructure の課金を止める


Datadog APM (Application Performance Management) の機能だけを使いたい時も Datadog Agent は動かしておく必要がある。

Datadog Agent を動かすと自動的に Datadog Infrastructure へのメトリクス送信が走って課金されるのでそれを止めたい場合はどうするか。そもそもできるのかという話。

## Datadog Agent での Infrastructure 無効化

[How to setup only Logs](https://docs.datadoghq.com/ja/logs/faq/how-to-set-up-only-logs/?tab=host) というドキュメントに記載されている。Datadog Agent v6.4+ で可能とのこと。

ソースコードでいうとこの辺 https://github.com/DataDog/datadog-agent/blob/d64e4532289c599a47ef091ceab15e4aefa3a660/pkg/config/config.go#L192-L195

設定ファイルで設定する場合

```yaml:datadog.yaml
enable_payloads:
  series: false
  events: false
  service_checks: false
  sketches: false
```

環境変数で設定する場合

```
DD_ENABLE_PAYLOADS_EVENTS=false
DD_ENABLE_PAYLOADS_SERIES=false
DD_ENABLE_PAYLOADS_SERVICE_CHECKS=false
DD_ENABLE_PAYLOADS_SKETCHES=false
```

## Datadog Agent での Process Agent 無効化

Datadog の Infrastructure ページを見ていると [Process Monitoring](https://docs.datadoghq.com/ja/infrastructure/process/?tab=linuxwindows) もされているので、念のためそれも止めてしまう。

設定ファイルで設定する場合

```datadog.yaml
process_config:
    enabled: 'false'
```

環境変数で設定する場合

```
DD_PROCESS_AGENT_ENABLED=false
```

## GCP Integration からの除外

GCP Integration を有効化していると標準で Infrastructure Metrics を取り込んでしまうのでそれも無効化する必要がある。

terrafrom で設定を表現すると、以下のように `host_filters` に存在しないタグを指定すれば収集対象から外れる。

```
resource "datadog_integration_gcp" "integration_gcp" {
  project_id     = var.gcp_project_id
  private_key_id = var.gcp_private_key_id
  private_key    = var.gcp_private_key
  client_email   = var.gcp_client_email
  client_id      = var.gcp_client_id

  host_filters = "something_does_not_exist"
}
```

## 確認

しばらく(数日）待って、https://app.datadoghq.com/infrastructure を見ると Status UP のゴミのようなホストが残ったままではあるが(消えない)、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9641/b4846d4b-4c4d-c3a7-f01e-94b7102b4511.png)

https://app.datadoghq.com/account/usage を見るとしっかり数が減っていたので課金対象から外れたことがわかる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9641/20545de0-578a-b57d-0cd7-8a6b2e1a66aa.png)

## 追記: RUNTIME_METRICS について

Datadog APM の画面で下部に表示される JVM Metrics などの [RUNTIME_METRICS の機能](https://docs.datadoghq.com/ja/tracing/runtime_metrics/) はどうやら payloads 機能を使っているらしく、

```
DD_ENABLE_PAYLOADS_EVENTS=false
DD_ENABLE_PAYLOADS_SERIES=false
DD_ENABLE_PAYLOADS_SERVICE_CHECKS=false
DD_ENABLE_PAYLOADS_SKETCHES=false
```

この設定をしてしまうと使えなくなってしまうようだ、、、、
ClickOnceの起動時の挙動について

#概要
初めて記事を投稿します。よろしくお願いします。

仕事でClickOnceを使ってWindowsアプリケーションを配布していますが、主に起動時に問題が起きていました。最近やっと解消のめどが立ってきたので、自分のやってきたことを纏めることとClickOnceに関していまいち情報がネット上になかったりするので、誰かの役に立てばいいなと思ったりもします。

##開発環境
VisualStudio 2017 Professional

##言語
C#

##ClickOnceとは
WindowsFormやWPFを配置するためのMicrosoftの技術（Wikiより）

###利点
１、インストールは管理者権限を必要としないため、配布用サイトを構築しておけばユーザがインストール、更新を行えるので配布が楽。

###欠点
１、更新作業に失敗するとアプリケーションをアンインストールしないと再インストールできない。
２、アプリケーションの実体が「Program Files」直下になく、「c:\Users\＜ユーザー名＞\AppData\Local\Apps\2.0\」等にインストールされるため、設定ファイルなどに間違いがあると修正が難しい。

##問題点とは
１、起動が遅い、ものすごく遅い。アプリの起動に１～２分かかる。
２、Windows10では早い場合がある。Windows8,Windows7はほぼ遅い。
３、現象が起きている環境はほぼインターネットの接続がない環境だが、同じ環境を作っても再現しない。
４、通常のexeをダブルクリックする起動では、遅い環境でも早く起動する。

##何が原因か？
起動が遅いので起動時に行われるClickOnceの更新のチェックが原因と考えました。

ClickOnceの設定はプロジェクトのプロパティの発行から行えますが、下の画像のように更新の確認を「アプリケーションの開始前に行う」にしているため、更新チェックが起動の遅い原因になっていると予想し、
![ClickOnce設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238324/ea93e11b-d453-43fa-ba5f-5cf4664f2441.png)

次のように設定を変更し、遅い環境で実行
![ClickOnce設定2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238324/68c25ce9-eea7-58e8-f26f-746a8576ebeb.png)
結果、まったく変わりません。びっくりするほど変わりません。むしろ遅くなったまである。
「アプリケーションの更新プログラムを確認する頻度を指定してください」項目が「アプリケーションが実行されるたびに確認する」になっているために改善しないと予想し、以下のように変更し実行
![ClickOnce設定3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238324/db665f0a-23e7-c1ca-6303-901688069f86.png)
それでもやはり起動速度は変わらない。チェックに行くのは1日に一回にしているのに起動が遅い。多分チェック処理はどうやっても動き起動が遅くなる原因ではないかと結論付けた。

##解決方法
結局、VisualStudioの更新方法の設定ではどうやっても早くならないので更新チェックをしないように設定し、プログラム側で対応するようにすると劇的に早くなりました（EXEを直接起動したときの同じぐらい）。コードは以下の通りです。

```C#:vercheck.cs
 //バージョンチェック＆更新処理
 ApplicationDeployment deploy;
 deploy = ApplicationDeployment.CurrentDeployment;
                
 bool bolCheckUpdate = false;
 //アップデートがあるかチェック
 bolCheckUpdate = deploy.CheckForUpdate();

 if (bolCheckUpdate)
 {
     //アップデートがあるので、アップデート処理
     bool bolUpdate = deploy.Update();
     if (bolUpdate == true)
     {
         //更新処理が終わったのでアプリケーションをリスタートする
         Application.Restart();
     }
     else
     {
         //更新がエラーしたので任意の処理
     }
 }
```
上記のコードをアプリケーションの起動時（Program.cs等）に記述すると起動時にバージョンチェックが行われ、更新プログラムがある場合更新処理が行われます。ただし、deploy.Update()はダイアログなど表示されず、何もしていないようでいきなりアップデートするので、更新中メッセージを表示したりするのがいいと思います。

遅い環境に関しては、クライアントから複数のセグメントを介してサーバに接続するような環境（自分では手が出せない）なので等いろいろ原因を考えましたが、ネットワーク関連は変更等することができないのでこういった対応をしました。あまり需要のない仕組みだとは思いますが、同じようなことで悩んでいれば試す価値はあるかもしれません。

技術的な説明、コードの変な個所などあればツッコミお待ちしてます。
ビットコインに使われるブロックチェーンの仕組みについてまとめてみる①

# はじめに
少し前？に話題になったビットコインですが、そのビットコインの根幹にかかわる仕組みであるブロックチェーンについて、勉強したことをまとめていきます。結構長くなると思うので、ゆるりと付き合っていただければ幸いです。

# ビットコインとは
皆さんはビットコインについてはご存知でしょうか？メディアにも多く取り上げられていたため、聞いたことがないという人はほとんどいないと思います。ビットコインは仮想通貨といわれ（現在は暗号通貨という名前に改称されていますが）、いわゆるネット上のみに存在する通貨です。
しかし実際には、通貨というよりは「ただのプログラム」というほうが近いと個人的には考えています。具体例をみていきましょう。
***
今ここにAさんがいたとします。Aさんは今、100ビットコイン持っています。今、AさんがBさんに10ビットコイン送金しました。さて、今Aさんは何ビットコイン持っているでしょうか？
計算するまでもないですよね。答えは90ビットコインです。しかし、ここで考えてみてください。今、Aさんが90ビットコイン持っていると保証してくれるのは誰でしょうか？ビットコインを生産している会社でしょうか？しかし、実はビットコインにはビットコインを管理、生産しているような会社は存在しません。では、誰がAさんが今90ビットコインを持っていることを保証してくれるのでしょうか？少し考えてみてください。
***
少し意地悪な答えですが、実はAさんが90ビットコインを今現在保有していると保証してくれるのは「みんな」です。正確には、みんなが作ってくれた「ブロックチェーン」です。もう少し詳しく解説します。
Aさんが今90ビットコインを保有していることは、どうすれば確かめられるでしょうか？これがお金であれば、実際にそのお金を確認すればよいですが、ビットコインは実態がありません。そのため、ビットコインの今現在の保有量を決定するためには、「Aさんの今までの取引データ」を確認する必要があります。つまり、AさんがCさんから10ビットコインをもらい、またDさんから30ビットコインをもらい、そしてDさんに・・・という今までの全てのAさんの取引データを確認することで、Aさんが今現在保有するビットコインの量が分かるというわけです。しかし、ここで大きな問題があります。もしもAさんの友人のDさんが凄腕のハッカーで、この取引の内容を書き換えたらどうなるでしょうか？そう、Aさんの保有ビットコインを自由に変えることができるのです。しかし当然ビットコインにはそれを防ぐ仕組みがあります。それが「書き換え不可能なデータの集合体」である、ブロックチェーンです。
##ブロックチェーンとは
今までの話から、ビットコインのためには取引データが改ざん不可能な形で保持される必要があることが分かります。また、ビットコインは管理する会社が存在しないため、その取引データの集合体（ブロックチェーン）はみんなで保持していくものであることもわかります。つまり端的に言うと、ブロックチェーンとは

- 記録を変更・改ざんできない
- 管理者不在であり、参加者で運用する

という特徴が必要であることが分かります。

***
なんとなくブロックチェーンやビットコインの仕組みについて理解することができたでしょうか？次回はもう少しブロックチェーンの仕組みについて掘り下げていきたいと思います。
ここまで読んで下さり、ありがとうございました。
[ビットコインに使われるブロックチェーンの仕組みについてまとめてみる②](https://qiita.com/renesisu727/items/5476bad886e7396f7c25)
AWS EC2+Rails+Nginx+Unicorn+CapistranoでRDS(MySQL)に接続できているのにデータが保存できない

#エラーの経緯
- AWSでEC2とRDSは接続できている
- アプリケーションは正常に表示できている
- しかしユーザー登録や投稿を行おうとするとエラーが発生する

#環境
- Ruby 2.5.1
- Rails 5.2.3
- AWS EC2+RDS(MySQL)
- Nginx+Unicorn+Capistrano

#経緯詳細
- AWSでEC2とRDSは接続できている<br>
AWSサーバー（EC２）にて下記コマンドを実行したところ問題なくmysqlに接続できた。

```
//AWSサーバー（EC２）
mysql -h RDSエンドポイント -P 3306 -u ユーザ名 -p
```

- アプリケーションは正常に表示できている<br>EC2で設定したElastic IPにブラウザでアクセスしたところ正常に表示できている

- ユーザー登録や投稿を行おうとするとエラーが発生する
しかしながら上記の通りDBに保存が発生するアクションが発生すると下記のようなエラーが発生する

![エラー画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332038/26b1daa2-a9a4-2ccd-01c9-97cebe9668bf.png)

#原因
下記ログを確認したところ文字コードによる文字化けが発生しておりました。

```/var/www/アプリケーション名/current/log/production.log
//一部抜粋
F, [2019-06-12T10:04:33.736907 #29116] FATAL -- : [8aa6dabe-fac5-4afa-8c4c-752532c49217] ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value: '\xE3\x81\xAF\xE3\x82\x80...' for column 'nickname' at row 1: INSERT INTO `users` (`nickname`, `email`, `encrypted_password`, `created_at`, `updated_at`) VALUES ('はむ太郎', 'test@test.com', '$2a$11$AIOoTtfj8lzGvmxnqmHBzO7bpKt8J3fyDe3sCQN0y.DWFW8cF5hHC', '2019-06-12 10:04:33', '2019-06-12 10:04:33')):

//この部分が文字化け箇所
'\xE3\x81\xAF\xE3\x82\x80...'

```
日本語ではこういった症状が発生するようです。

#対策
- パラメータグループの設定
- DBの文字コード変更
- /etc/my.cnfの設定

上記の対応により改善しました。
DB作成前であればパラメータグループの設定のみで文字化けは発生しないようです。
すでにDB作成後であれば他変更も必要となります。
下記や「RDS 文字化け」を検索すると参考になるページが見つかると思います。

[MySQL 文字化けを防ぐ、文字コードの確認と設定](http://ext.omo3.com/linux/mysql_character_set.html)
[日本人ならRDSを使う際にかならずやらなければならないこと](http://ria10.hatenablog.com/entry/20130619/1371603765)
[MySQL のテーブルの文字コードを utf8 に変更する](http://ucwd.jp/blog/814)

以上です。
いいねやQiitaやTwitterのフォローいただけると励みになります！
お気軽にどうぞ〜

お疲れ様でした！！！
<hr>

##参考ページ
[MySQL 文字化けを防ぐ、文字コードの確認と設定](http://ext.omo3.com/linux/mysql_character_set.html)
[日本人ならRDSを使う際にかならずやらなければならないこと](http://ria10.hatenablog.com/entry/20130619/1371603765)
[MySQL のテーブルの文字コードを utf8 に変更する](http://ucwd.jp/blog/814)
[xaml]xamlで定数を使う

# やりたいこと
C言語でいうところの「#define (100)」みたいな感じで定数を定義して、同じ定数を割り当てたものは一括して乗数変更できるようにしたい。

# やり方
`xmlns:sys="clr-namespace:System;assembly=mscorlib"`を使う。

# サンプルコード

```MainWindow.xaml
<Window x:Class="WpfApp20.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp20"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"★これを追加
        mc:Ignorable="d"
        Title="MainWindow" Height="100" Width="200">
    <Window.Resources>
        <!-- 定数定義部分。Keyをつけて、下で使う-->
        <sys:Double x:Key="EllipseWidth">20.0</sys:Double>
        <sys:Boolean x:Key="ButtonEnable">true</sys:Boolean>
        <sys:String x:Key="ButtonText">ボタン</sys:String>
    </Window.Resources>

    <StackPanel Orientation="Horizontal">
        <!-- 定数使用部分。上で定義した定数をKeyで紐づける-->
        <Ellipse Width="{StaticResource EllipseWidth}" Stroke="Red"/>
        <Ellipse Width="{StaticResource EllipseWidth}" Stroke="Red"/>
        <Ellipse Width="{StaticResource EllipseWidth}" Stroke="Red"/>
        <Ellipse Width="{StaticResource EllipseWidth}" Stroke="Red"/>
        <Ellipse Width="{StaticResource EllipseWidth}" Stroke="Red"/>
        <Button Content="{StaticResource ButtonText}" IsEnabled="{StaticResource ButtonEnable}"/>
    </StackPanel>
</Window>
```
Leetcode #234: Palindrome Linked List

```swift
func isPalindrome(_ head: ListNode?) -> Bool {
    if head == nil || head?.next == nil {
        return true
    }
    var slow = head
    var fast = head
    while fast != nil && fast?.next != nil {
        slow = slow?.next
        fast = fast?.next?.next
    }
    var secondHead = slow?.next
    slow?.next = nil

    var pre: ListNode?
    while secondHead != nil {
        let tmp = secondHead?.next
        secondHead?.next = pre
        pre = secondHead
        secondHead = tmp
    }

    var head = head
    while pre != nil {
        if pre!.val != head!.val {
            return false
        }
        pre = pre?.next
        head = head?.next
    }
    if head?.next == nil {
        return true
    } else {
        return head!.val == head?.next!.val
    }
}
```
Foundation Sass for Railsでのアイコン導入


###はじめに
CSSフレームワークは[BootStrap](https://getbootstrap.com/)が有名だと思いますが、弊社の[メルプWEB問診](https://monshin.melp.life/)では[Foundation](https://foundation.zurb.com/)を使っていますので、Foundationでの紹介になります。

webサイトを作成していて、アイコンで表記したい場合ありますよね？
印刷は「印刷する」という文字ではなくて「印刷アイコン」で表示とか、「更新する」ではなくて「リロードマーク」で表示とか。アイコンの方が場所を取らないというメリットもありますし。

CSSフレームワークではアイコンもデフォルトでサポートされていますので、そちらを使えば、**わざわざフリー素材のアイコンをダウンロードして、ファイルに読み込ませてといった作業をする必要がなくなります。**

***
###設定
[こちら](https://github.com/zaiste/foundation-icons-sass-rails)に方法が簡潔に記載されています。

**１）Gemfileにgemを追加**
Rails>4の場合は

```:Gemfile
gem 'sass-rails', "  ~> x.x.x"
gem 'coffee-rails', "~> x.x.x"
gem 'uglifier'
gem 'foundation-icons-sass-rails'
```

**２）bundle install**
ターミナルで`bundle install`してgemを読み込みます

```:ターミナル
$ bundle install
```


**3）@import記載**
app/assets/stylesheets/application.css.scssファイルに@importを記載してiconファイルを読み込みます。

```application.css.scss
@import 'foundation-icons';
```


**4）サーバーを一旦停止、再起動**
新しく入れたgemを反映するため、railsサーバーを再起動します。
（よくこれを忘れて、インストールしたはずなのに反映されないとなることが、個人的にはあり（汗


**5）アイコンのコードを挿入**

```
<i class="fi-[icon]"></i>
```
[icon]部分を、[こちらのサイト](https://zurb.com/playground/foundation-icon-fonts-3)より、選んで記載。例えば、印刷アイコンを使いたい場合は、印刷アイコンは`print`と記載があるので

```sample.html.erb
<i class="fi-print"></i>
```
hamlの場合は

```sample.html.haml
%i.fi-print
```

と記載すると反映されます。アイコンのサイズは、`font-size`で規定されているので、cssファイルで記載するとサイズが変更されます。

```sample.scss
.fi-print{
  font-size: 32px; //アイコンサイズを32pxに
}
```

以上

***
###参考にしたサイト
[Foundation Font ICons on Sass for Rails](https://github.com/zaiste/foundation-icons-sass-rails)
変数をvalueに使う場合

if文で、変数を使いたいときのこうするといい。わすれそなのでメモ。

`<mt:SetVarBlock name="sc_cast_name">
<mt:ContentField content_field="test"><mt:ContentFieldValue></mt:ContentField></mt:SetVarBlock>
<mt:getvar name="sc_cast_name">
<mt:If name="sc_cast_name" eq="$cast_name">
</mt:if>
`
Leetcode #210: Course Schedule II

```swift
func findOrder(_ numCourses: Int, _ prerequisites: [[Int]]) -> [Int] {
    var inDegrees = Array(repeating: 0, count: numCourses)
    var dict = [Int: [Int]]()
    for prerequisite in prerequisites {
        inDegrees[prerequisite[0]] += 1
        if let list = dict[prerequisite[1]] {
            dict[prerequisite[1]] = list + [prerequisite[0]]
        } else {
            dict[prerequisite[1]] = [prerequisite[0]]
        }
    }
    var queue = [Int]()
    var answer = [Int]()
    for (index, inDegree) in inDegrees.enumerated() {
        if inDegree == 0 {
            queue.append(index)
        }
    }
    while !queue.isEmpty {
        let currentCourse = queue.removeFirst()
        answer.append(currentCourse)
        if let list = dict[currentCourse] {
            for course in list {
                inDegrees[course] -= 1
                if inDegrees[course] == 0 {
                    queue.append(course)
                }
            }
        }
    }
    return answer.count == numCourses ? answer : []
}
```
Leetcode #207: Course Schedule

```swift
func canFinish(_ numCourses: Int, _ prerequisites: [[Int]]) -> Bool {
    var inDegrees = Array(repeating: 0, count: numCourses)
    var dict = [Int: [Int]]()
    for prerequisite in prerequisites {
        inDegrees[prerequisite[0]] += 1
        if let list = dict[prerequisite[1]] {
            dict[prerequisite[1]] = list + [prerequisite[0]]
        } else {
            dict[prerequisite[1]] = [prerequisite[0]]
        }
    }
    var queue = [Int]()
    for (index, inDegree) in inDegrees.enumerated() {
        if inDegree == 0 {
            queue.append(index)
        }
    }
    while !queue.isEmpty {
        let currentCourse = queue.removeFirst()
        if let list = dict[currentCourse] {
            for course in list {
                inDegrees[course] -= 1
                if inDegrees[course] == 0 {
                    queue.append(course)
                }
            }
        }
    }
    for inDegree in inDegrees {
        if inDegree != 0 {
            return false
        }
    }
    return true
}
```
XAMPP for OS Xでディレクトリの場所が参考書と違う場合について


#ディレクトリの場所が参考書と違う!
PHPを学習し始めたそこのアナタ。特に本を購入して「さあ!がんばるぞ!」となっていたけど、```/Application/xammp/etc```や```/Application/xammp/xamppfiles```といったファイルが見つからないというアナタ。
**VM版インストールしてますよ!**
というだけの記事です。

##VM版とは
大雑把に言うと仮想環境を構築してそこで開発を行う機能を持ったXAMPPです。
<img width="100%" alt="2019-06-12 21.21.14.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430774/cff1de2d-a378-6b0b-696c-1c1040739e13.jpeg">
XAMPPの「Open Terminal」を開くとターミナルが起動しますが、上を見るとroot@ 192.168.x.xにssh接続をして接続先ではLunux debian が動いてるよという旨の表記を確認できます。これがVM版の本質でありmacOS上でも、広く本番環境で用いられているLinux環境で開発できるためアプリの公開時に不具合が生じづらい事が考えられます。
##installer.dmgもあるぞ
それでも最初は参考書と同じ環境でやりたいという方は <a href="https://sourceforge.net/projects/xampp/files/XAMPP%20Mac%20OS%20X/">XAMPPのsourceforgeリポジトリ</a>からバージョンえらんでinstaller.dmgをダウンロードすれば多分うまく行くんじゃないかと思います。
#ところで```/Application/xammp/etc```とかは?
はい。VM版だと```/Application/xammp/```下をいくら探してもお目当てのファイルは見つかりません。なにせVM版という事で特殊な形で梱包されています。
ではどうやって目当てのファイルを編集するのかと言うと、<img width="80%" alt="スクリーンショット 2019-06-12 21.38.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430774/a0ad337e-ceeb-f84c-ee00-133069283ee9.png">
の**mount**をクリックして次に**Explorer**をクリックするとFinderがlamppという場所を表示してくれます。
これが目当てのファイル達です。
（ターミナルからもファイルへアクセスはできるけど、流石に辛いので今回は無しで）
この動作をより詳しく説明すると**mount**でFinderを192.168.x.x（VMでLinuxが立ち上がっている）と接続させ、**Explorer**でFinderにその接続している内容を表示させています。
もちろん接続しているので編集も可能です。

##余談
……ところでPhpstormで開発したいな〜と思ってたんですけどVM版だとsave時になんか「Unable to save setting」と出てあまりいい気分じゃないんですが、いい案知ってる人がいたらコメント欄で教えていただけると幸いです。
Leetcode #221: Maximal Square

```swift
func maximalSquare(_ matrix: [[Character]]) -> Int {
    if matrix.isEmpty || matrix[0].isEmpty {
        return 0
    }
    var dp = Array(repeating: Array(repeating: 0, count: matrix[0].count+1),count: matrix.count+1)
    var length = 0
    for i in stride(from: 1, through: matrix.count, by: 1) {
        for j in stride(from: 1, through: matrix[0].count, by: 1) {
            if matrix[i-1][j-1] == "0" {
                dp[i][j] = 0
            } else {
                dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
                length = max(length, dp[i][j])
            }
        }
    }
    return length * length
}
```
brew update でエラー（brew reinstall git で修復）

こんにちは。
```brew update``` でエラーとなりましたが（下記）、```brew reinstall git```[^1] で修復できたようです。

[^1]: 参考： "[git formula breaks brew update](https://github.com/Homebrew/brew/issues/1437)" (Homebrew/brew/issues)


```console
$ brew doctor
Your system is ready to brew.
$ brew update
fatal: could not read Username for 'https://github.com': terminal prompts disabled
fatal: unable to access 'https://github.com/Homebrew/homebrew-core/': LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
```

```console
$ brew reinstall git
 :
 :
$ cat /usr/local/etc/gitconfig 
[credential]
	helper = osxkeychain
$ brew update
Already up-to-date.
```

もしも上記の ```brew reinstall git``` でも失敗する場合には、次には下記を試してみると良いようです。

```console
$ brew unlink git
$ brew install git
```
AWS Summit - データ駆動型サービスの為の生きたプラットフォームの構築

## 環境の変化と課題
- ApplicationとRelease Cycleの短縮
- サービスを駆動させる為のモデル

## Amazon EKSへの移行とOprationの改善
- 既存ペアメタル環境
- kubernatesのメリット
  - テスト簡単
  - LambdaでSchema変換

## Amazon SageMakerによる画像
- 不適切な画像の排除
- Privacyの処理
- 既存の課題
  - システム管理の複雑さ
  - 無駄なコストの発生
  - 本番利用の難しい, リリース後のアップデート
- 導入後
  - Notebook -> Train -> Deploy
  - 開発のプロセスの効率化
  - コスト削減, Multi Instance
  - Train cost削減, 30%
  - MXNet/Gluon YOLOv3, GluonCV

## 何時でもHotな分析する環境
Athena, Elasticsearch, Kibana, Kinesis Firehose

## Terraform と CloudFormationの同時運用
* インフラテストの実装が必要だと思います
[AWS] VPC、サブネット、セキュリティグループまとめ

#概要
AWSのVPC、サブネット、セキュリティグループについてのまとめ

#リージョンとアベイラビリティーゾーン
リージョンはAWSがサービスを提供している拠点(国と地域)を指す

リージョン内にはアベイラビリティーゾーン(AZ)が含まれ、AZは複数のデータセンターから構成される

各AZが地理的・電源的に独立した位置にあることがリージョンの耐障害性を高めている

複数のAZを利用してシステムを構成することをマルチAZと呼び、マルチAZは可用性を高める

#VPC
Amazon Virtual Private Cloud(VPC)はAWSサービスの中心であり、利用者ごとのプライベートなネットワークをAWS内に作成する

VPCはインターネットゲートウェイ(IGW)という呼ばれる出口をつけることによりインターネットに出ていくことができる

###IPアドレス
VPCには自由にIPアドレス(CIDRブロック)を割り当てられる

CIDRブロックは/16から/28の範囲で作成できる
CIDRブロックはIPアドレスのネットワーク部がどこまでであるかを定義するので数が小さいほどネットワークが確保するIPアドレスの数が多いということになる

###サブネット
サブネットはVPC内部につくるアドレスレンジ

VPCに設定したCIDRブロックの範囲に収まる小さなCIDRブロックを割り当てることができる(CIDRブロックのサイズはVPCと同様に16ビットから28ビットまで)

個々のサブネットには1つの仮想ルータがあり、このルータがルートテーブルとネットワークACLの設定を持っており、サブネット内のEC2インスタンスのデフォルトゲートウェイになっている

[注意]
1. サブネットの最初の4つおよび最後の1つのアドレスは予約されていて、使用できない
2. 必要以上にサブネットを分割することはアドレスの浪費につながる
3. パブリックサブネットやプライベートサブネットという表現がされることがあるが、インターネットゲートウェイ・ルートテーブル・ネットワークACLなどを利用して、そのような役割を割り当てているだけ

###セキュリティグループ
セキュリティグループはEC2など、インスタンス単位の通信制御に用いる

インスタンスには少なくとも1つのセキュリティグループを割り当てる必要がある

通信の制御としてはインバウンド(内向き、外部からVPCヘ)とアウトバウンド(外向き、内部から外部へ)の両方の制御が可能

制御項目はプロトコル(TCPやUDPなど)とポート範囲、送受信先のCIDRかセキュリティグループを指定する

###ネットワークACL
ネットワークACLはサブネットごとの通信制御に利用する

インバウンド・アウトバウンドでの制御が可能

送受信先のCIDRとポートを指定できるが、セキュリティグループの指定はできない


#ゲートウェイ
###インターネットゲートウェイ
インターネットゲートウェイ(IGW)はVPCとインターネットとを接続するためのゲートウェイ

各VPCに1つだけアタッチできる

ルートテーブルでインターネットゲートウェイをターゲットに指定するとその宛先アドレスとの通信はインターネットゲートウェイを通してインターネットに向けられる

パブリックサブネットの条件の一つはルーティングがインターネットゲートウェイを向いていること

プライベートサブネットとはルーティングが直接インターネットゲートウェイを向いていないネットワーク

EC2インスタンスがインターネットと通信するにはパブリックIPを持つかNATゲートウェイを経由するかのどちらかの方法を用いる

NATゲートウェイはプライベートIPをNATゲートウェイが持つグローバルIPに変換する

###仮想プライベートゲートウェイ
仮想プライベートゲートウェイ(VGW)はVPCがVPNやDirrect Connectと接続するためのゲートウェイ

各VPCに1つだけだが複数のVPNやDirrect Connectと接続可能

#VPCエンドポイント
VPC内からインターネット上のAWSサービスに接続する方法としてインターネットゲートウェイを利用する方法の他にVPCエンドポイントを利用する方法がある

S3やDynamo DBと接続する際に利用するゲートウェイエンドポイントとその他のサービスで利用するインターフェイスエンドポイントがある

#参考
https://www.amazon.co.jp/gp/product/B07R1H87Y1/ref=ppx_yo_dt_b_d_asin_title_o00?ie=UTF8&psc=1
AWS Summit - インダストリーX.0が変える製造業の未来と日本の挑戦

## アクセンチュア
- Transform the core business
- Grow the core business
- Scale new Business
- Make a wise business

## Agenda
- スマイルカーブ
  - 製品の価値が名詞 -> 動詞
- 支援内容
  - スマートコネクテッドプロダクトとサービスの発明
  - 製品からサービスへビジネスモデルとoperationを変格
  - 新しいエコシステム
  - Softwareと顧客経験を提供する
  - コアprocessの自動化（研究開発、設計）
  - アナリティクス、AI活用
  - 次世代の製造技術
- 製品、サービスの価値は、アトムからビットに変化
  - Digital 70%
- マインドセットとアプローチ
  - Think Big
    - not partialy but holisticaly
  - Start Small
    - not POC but Beta
  - Scale Fast
    - with multilaterally
- 日本企業の挑戦
  - AWS Manufacturing Refenrence Architecture(Brownfield)
  - グローバル企業
    - 産業特化
    - エコシステム
    - クラウド
  - 日本
    - プロダクト
    - 自前に提供
    - オンプレミス
- デジタル当初に成功している企業は２２％
  - RODI (Return on Digital Investment)
  - 組織上のチャレンジ分離
    - DIgital 価値に冠する認識のズレ
    - カルチャーの献血
    - 指標なし
    - platform
Paloalto 次世代FWのログに関する調査

セキュリティログ分析を行う上で理解が必須のフィールド及びその値、その意味に関する調査。
完全に自分がわかるレベルの意訳です。

# Severityの考え方
> https://docs.paloaltonetworks.com/pan-os/8-1/pan-os-admin/monitoring/view-and-manage-logs/log-types-and-severity-levels/threat-logs

|Severity|Description|
|---|---|
|Critical|広く世の中に展開されているソフトウェアで、デフォルト設定でインストールされている状態に影響を与える脅威。<br>エクスプロイトコードが広く公開され、攻撃を成功させるために特別な認証・資格情報や被害者特有の情報は不要で、特殊な環境を準備しなくて良い脆弱性が対象とされる。|
|High|重大な影響を与える可能性があるが、軽減する要因も有する脅威。<br>特権昇格の脆弱性だが悪用されにくいなど。|
|Medium|ターゲットとなるものを危険にさらさないDoS攻撃や攻撃方法として、ターゲットと同じLAN上に存在することが要求されるDoS攻撃、または標準以外の構成のみに影響がある場合など。|
|Low|インフラにほとんど影響を及ぼさない警告レベル。ローカルもしくは物理的なシステム・アクセスを必要とするものなど。|
|Infomational|差し迫った脅威を引き起こさない、疑わしいレベルのイベントなど|

# Threat Vulnerability Signatures
> https://docs.paloaltonetworks.com/pan-os/8-1/pan-os-admin/threat-prevention/threat-signatures

|Category|Description|
|---|---|
|brute force|特定期間内に複数の条件の発生によって検出される|
|code execution|成功するとログインユーザーの権限でシステム上のコードを実行できる脆弱性を狙ったコード実行が検出される|
|code-obfuscation|難読化されたコードが検出される|
|dos|標的のシステム使用不可を狙った攻撃を検出する。|
|exploit-kit|エクスプロイトきっとのランディングページを検出する|
|info-leak|攻撃者が情報漏えいを目的に悪用する可能性があるソフトウェアの脆弱性を検出する|
|overflow|要求に対する適切なチェックの欠如を悪用しようとしたオーバーフローの脆弱性を狙った攻撃を検出する|
|phishing|フィッシングキットのランディングページに接続しようとしたときを検出する|
|protocol-anomaly|プロトコルの振る舞い及び標準及び準拠の使用法から逸脱した場合のプロトコル以上を検出する|
|sql-injection|DBからの読み取りもしくは変更を目的としたSQLクエリの挿入要求を検出する|