OmniAICreator/Qiita-1.07M huggingface dataset:
SPSS License Key Centerにメンバーを追加する

SPSSの認証コードやライセンス・コードはSPSS License Key CenterというWebサイトで管理します。
デフォルトの管理者はPAサイト担当者になります。SPSSをご購入いただくと以下のようなメールがPAサイト担当者に送られます。ここからログインを行っていただくと、認証コードの発行などのライセンスの管理を行うことができるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/5e2ed1bd-4c5f-f09d-a61a-759c17c27ac4.png)


しかしながら、PAサイト担当者は購買部門やIT部門の担当者であって、分析者の部門とは異なることがよくあると思います。そのため、ライセンスの管理は分析者の部門で行いたいということがあります。
その場合、SPSS License Key Centerにメンバーを追加することで、PAサイト担当者以外でもLicense Key CenterでのSPSSのライセンス管理が可能になります。この記事では、PA担当者以外のメンバーの追加方法を解説します。

PAサイト担当者がSPSS License Key Centerにログインし、「アカウント/メンバー設定」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/aee134d1-8a1a-f68e-6fe8-7a48faba8504.png)


「新しいメンバの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/2c9200b8-985f-38cf-7b06-f010830965d8.png)

新しいメンバーのEメールアドレスなどを入力して「保存」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/781ac297-d61a-727b-1c13-3ea0450cf7c1.png)



新しいメンバーが追加されると、PAサイト担当者に送れられたものと同様のメールが新しいメンバーのEメールアドレスにも送られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/5e2ed1bd-4c5f-f09d-a61a-759c17c27ac4.png)

その後は以下の手順でライセンス認証などが行えるようになります。

SPSS Modelerのライセンス認証（Authorizedライセンス） - Qiita 

https://qiita.com/kawada2017/items/e8472203482e5eecb85d
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client (SQL: select * from information_schema.tables where table_schema = hogehoge and table_name = migrations and table_type = 'BASE TABLE')

# 前提
・Mac m1チップ
・Laravel8系
・MySQL8系
・PHP7系
・envファイルに正しくDB情報を書いた。 ← ここまでちゃんと切り分けしましたか？

#補足：.envに正しく書いたらしいことを確認する方法
・ターミナルで下記を打って、パスワードをちゃんと入力して入れますか？

```php
 mysql -u 書いたユーザー名 -p 
 show databases;
```

・下記コマンドを打って、対象DBをちゃんと用意したことを確認しましたか？

```php
show databases;
```
　→ 結果に対象のDB名が出て来れば良い。

・接続先がDockerのMySQLコンテナである場合、別途調べてください。

#注意
・タイトルのhogehogeを接続先となるDB名に置き換えて、もし手元のエラーと等しくないならやらない方が良いかもしれません。DBなので。（とは言っても、やってしまっても大丈夫なよう新規ユーザーを作成するような形にしてます。）

# 解決方法
・利用しているユーザーのパスワードを「mysql_native_password」で変更してやる。

・自分としては、新しくユーザーを作成してから試してみることをお勧めします。

```php
// ユーザー作成
create user fuga@localhost identified by 'fugafuga';

// 権限付与（とりあえず全て。ここは必要に応じてドキュメント読みながら調整。）
grant all privileges on *.* to fuga@localhost;
flush privileges;

// パスワードをmysql_native_passwordを利用して変更する
alter user fuga@localhost identified with mysql_native_password 'fugafuga';
```

#解決するまでに読んだ記事
・https://trialanderror.jp/mysql-8x-laravel-migrate/
・https://blog.janjan.net/2018/11/01/mysql8-request-authentication-method-unknown-to-the-client/
・https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
・https://www.digitalocean.com/community/tutorials/how-to-create-a-new-user-and-grant-permissions-in-mysql-ja
・https://www.dbonline.jp/mysql/user/index6.html
GA4のRECORD型カラムを扱う時のポイント

# この記事は何？

[BigQuery Advent Calendar 2021](https://qiita.com/advent-calendar/2021/bigquery) の 6日目の記事です。
BigQueryに転送したGoogleAnalytics4の生データを扱う際に、RECORD型の扱いに苦戦したので、その時の解決方法について書かせていただきます。

# 何に苦戦した？

GoogleAnalytics4では、`イベント`という単位でレコードが生成されており、イベント名(event_name)に対して、複数のパラメータ(event_params)が紐付く形式でレコードが保存されています。
具体的には、下記のようにpage_viewというイベント名に対して、RECORD型のevent_paramsがkey-value形式で値を持っています。

![スクリーンショット 2021-11-30 16.24.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311026/904c9263-cb2f-6454-258c-ef1dba2d5ed5.png)

例えば、「page_titleに"SQL"という単語を含むページビューを集計したい」という場合は

``` sql
SELECT 
  COUNT(event_name) AS count_page_view
FROM
  `project_id.dataset_id.table_id`
  , UNNEST(event_params)
WHERE
  event_name = 'page_view'
  AND key = 'page_title'
  AND value.string_value LIKE '%SQL%'
```

と書けば集計できます。

しかし、「page_titleに"SQL"という単語を含む、かつ流入元のsourceがgoogle、mediumがorganicのページビューを集計したい」という場合はどうでしょうか？

RECORD型は縦持ちのため、WHERE句の中でkeyやvalueに対して複数条件を書くことができず苦戦していました。

# どう解決した？

結論から言うと、EXISTS関数を使うことで解決しました。

``` sql
SELECT 
  COUNT(event_name) AS count_page_view
FROM
  `project_id.dataset_id.table_id`
WHERE
  event_name = 'page_view'
  AND EXISTS(SELECT * FROM UNNEST(event_params) WHERE key = 'page_title' AND value.string_value LIKE '%SQL%')
  AND EXISTS(SELECT * FROM UNNEST(event_params) WHERE key = 'source' AND value.string_value LIKE 'google')
  AND EXISTS(SELECT * FROM UNNEST(event_params) WHERE key = 'medium' AND value.string_value LIKE 'organic')
```

各EXISTS関数の中では、RECORD型であるevent_paramsをUNNEST関数によりフラット化した上で条件式を記述しています。

EXISTS関数の判定対象はあくまでFROM句で指定したテーブルのレコードのため、このように条件式を書くことでRECORD型のカラムの中身を対象に複数条件を記述することができました。
2021.11.30現在 → nRF9160 で Secure Boot を使用する

商用利用を視野に入れると、HTTPS で FOTA を使えるようになっても、
肝心の更新ファイルが誰でも作れて改ざんされたりしていては困る。

そこで NRFConnectSDK v1.7.1 にて SecureBoot に対応させてみることにした。

公開鍵と秘密鍵のペアを作り、更新ファイルに公開鍵で署名するのだ。


https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.7.1/zephyr/guides/west/sign.html?highlight=boot_signature_key_file


https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/ug_fw_update.html#ug-fw-update-keys


https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/samples/bootloader/README.html#bootloader


https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/mcuboot/imgtool.html



上記サイトを参考にした。


なお、MCUBOOT と SECURE_BOOT という機能のを利用するのだが、
ブートローダーのデフォルトの秘密鍵は、公開サーバーからダウンロードしたものなので、
そのままコンパイルすると、。

```
        ---------------------------------------------------------
        --- WARNING: Using default MCUBoot key, it should not ---
        --- be used for production.                           ---
        --------------------------------------------------------- 
```
こんなワーニングが出力される。

bootloaderのプロジェクトファイルは、
```ncs/bootloader/mcuboot/boot/zephyr```
にあるので、使用するボードの conf ファイルに以下をつけたした。

```
CONFIG_BOOT_SIGNATURE_KEY_FILE="秘密鍵のフルパス"
CONFIG_BOOT_SIGNATURE_TYPE_ECDSA_P256=y
```
今回はECDSA_P256の鍵を作ったので、その情報網明記する必要がある。


これで、コンパイル時のワーニングが消える。


アプリケーション側は、prj.conf ファイルに下記を追加すれば良い。

```
CONFIG_SECURE_BOOT=y
CONFIG_SB_SIGNING_KEY_FILE="秘密鍵のフルパス"
```


これで、SecureBootに対応するようになる。

注意点としては、 FOTA を実行すると署名の無いファイルもダウンロードするので、
一見、更新しているようにみえるところ。

実際は更新されずに元のプログラムが残るので、更新されたファイルとの違いがわかるようにしてテストとするとよい。


* * *
以上
* * *
ppa レポジトリからソフトをインストールする

Ubuntuは公式パッケージとして apt で管理されているソフトウェアが数万ありますが､それで網羅されていないソフトや､公式パッケージでは追いついていない最新バージョンなどを配布するひとつの方法として ppa(パーソナル・パッケージ・アーカイブ) レポジトリを使う方法があります｡

PPA は Ubuntu 専用の仕組みであり､ launchpad でホストされています｡これを信頼する提供元として登録すると､公式のパッケージと同様に apt コマンドでインストールやアップデートの管理ができるようになります｡

# PPA
 
PPAのレポジトリを追加するために必要なフレーズは以下のように表示されていることが多いです｡


> ppa:kicad/kicad-dev-nightly 

上の例は KiCad の Nighty の PPA で､

> ppa:[user]/[ppa-name] 

という意味になります｡ これを Ubuntu のパッケージマネージャに登録します｡

# GUI で PPA レポジトリを登録するやりかた

一般には､｢ソフトウェアとアップデート｣を呼び出して以下の画面から行うことができますが､


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/5122ce0f-d4ca-648a-45b5-e0d477eda258.png)

こちらの説明は今回は省略して､今回は CUI で登録する方法をまとめます｡

# CUI で PPA レポジトリを登録するやり方

上に示した､ KiCad を例にして説明します｡
現時点 2021/11/30 現在､Ubuntuの公式パッケージに収められている KiCad のバージョンは 5.1.5 ですが､


( cf., https://packages.ubuntu.com/focal/kicad )


執筆時に KiCad 公式ページで配布しているものは 5.1.12 となります｡ 更に Nighty としてバージョン6 の RC版も取得できます｡

今回はこの nightly をインストールします｡

コンソールから以下のようにします｡

```

$ sudo apt-add-repository ppa:kicad/kicad-dev-nightly
```

なお､ apt-add-repository が入っていない場合は以下のようしてインストールしておきます｡

```

$ apt install software-properties-common
```

レポジトリが追加できたら､以下のようにしてデータベースを更新しておきます｡

```

$ sudo apt update
```

# PPA からソフトをインストールする

下記の説明に従い､nighty build の KiCad をインストールします｡
https://www.kicad.org/download/ubuntu/


> sudo apt install kicad-nightly
# You can also install debug symbols:
sudo apt install kicad-nightly-dbg
# Demo
sudo apt install kicad-nightly-demos
# and libraries
sudo apt install kicad-nightly-footprints kicad-nightly-libraries kicad-nightly-packages3d kicad-nightly-symbols kicad-nightly-templates


インストールできました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/0b7a6812-b52c-1042-8917-a77643c150fd.png)

# apt-add-repository で行っていること


apt-add-repository を行って ppa をインストールすることで､ 以下の2つが自動で処理されます

- GPG public key のダウンロード､登録
- apt line にレポジトリを追加

この apt line の追加については､実際には

```


/etc/apt/sources.list.d/kicad-ubuntu-kicad-dev-nightly-focal.list
```

に

```

deb http://ppa.launchpad.net/kicad/kicad-dev-nightly/ubuntu focal main
# deb-src http://ppa.launchpad.net/kicad/kicad-dev-nightly/ubuntu focal main
```


が生成されています｡
「毎日誰かのプルリクを脳死でマージするアドベントカレンダー」を始めました

## 概要

以下のアドベントカレンダーを開始しました。

https://qiita.com/advent-calendar/2021/full-scratch-awesome-app-nextjs

簡単に言うと、僕が初日に空っぽのNext.jsプロジェクトを作って公開しておくので、2日目以降毎日どなたかが機能実装してPull Requestを出してください、というものです。

https://github.com/TeXmeijin/anyway-merge-app

前日時点で23人参加で、最終2日だけ空いている状況というまあまあの盛況をいただいております。

## きっかけ

例によって例のごとく、ツイートしたら反応があったのでやることにしました。

https://twitter.com/Meijin_garden/status/1455062665160638470?s=20

## 期待しているもの

ネタ丸出しのマージから、ESLint等の設定調整、新しいライブラリの導入など、どんなものが飛んでくるのか楽しみです。

Providerを必要とするUIライブラリは何個も入れるとカニバるのかなと思うので、早い者勝ちだなとも思います。

## まとめ

特にまとまりのない記事ですが、とりあえずGitHub公開というミッションは達成したので後の担当の皆さんに期待しております。

2日目は @sassy_watson さんです。よろしくお願いします！
从信息论解构桥牌叫牌①

# 写在前面
笔者不是一个真正意义上的桥牌爱好者，坊间俗称桥牌小白。对桥牌攻防基本一窍不通，也不感兴趣。
本系列不涉及任何实战牌例，攻防技巧及叫牌测试。
本系列旨在以随笔形式从信息论层面对叫牌过程及叫牌体系的本质进行探索，因为完全原创并且笔者水平有限，不排除有谬误之处。
既然是随笔，也就是想到哪里写到哪里，最后把零散的点串成线继而织成面。
看完此系列，如果对您有以下方面的启发，不胜荣幸。
1.叫牌的本质与信息论的关系
2.叫牌过程的定量化
3.叫牌体系与信息论的关系及定量衡量
4.从信息论看叫牌体系
5.从信息论看竞争叫牌
6.接力叫牌的本质
7.转移叫牌的本质
8.etc.

#先看一个例子
>　北　　　　　南
> 1💗　pass　4💗　all pass
>
>你坐南手持：♠ 876
>　　　　　　💗KT987
>　　　　　　🔸3
> 　　　　　　♣QJ54


以上持牌和叫牌进程经常发生，你或许已经熟读桥牌书，大致类似于下面的牌(为简化定义忽略各种详细约定)
开叫1H:5张h以上，12p-21p,s长度小于h长度，非15p-21p均型牌
应叫4H:5张h以上，8p以下
附加一个速达原则。

我们从另一个角度看这个叫牌过程，
从信息论来看，
这个叫牌过程的本质是什么？
信息论是怎么定量化这个叫牌过程的？
速达原则的本质是什么？
这个叫牌过程究竟合理不合理？

- 从信息论来看，北家可以看成是信源，将持牌编码成1💗后发出，经过信道（这里可以理解为无噪声），接收方南家收到1💗后，经过对照体系得到北家的持牌信息。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311521/78005219-3e94-fab9-6425-3ecfab6ce2bf.png)

- 信源北家传递的这个1💗,究竟包含了多少信息量，南家接受到这个信息后结合自己的牌掌握了多少信息，这个信息如何定量化。基于这个信息做出的4💗叫牌是否合理？
话不多说，直接上香农信息量的定义公式：

``` math
I(x)= -\log_2 p(x)
```
I为信息量，x为北家手里持牌随机变量，等于以2为底的持牌概率取负
（具体为何以2为底，后面会仔细解释，这里可以不必细究）
北传递给南的信息量可代入计算：

``` math
\begin{align}
I(1💗)&= -\log_2 p(5张h以上，12p-21p,s长度小于h长度，非15p-21p均型牌) \\
       &≈ -\log_2 0.05* \\
       &≈ 4.32(bit)
\end{align}
```
**\*此结果为计算机模拟10万副发牌算出**
那南得到北传送过来的4.32信息量后，结合自己的手牌，得到的两手牌的信息量为多少？
话不多说，直接上联合分布变量香农信息量公式：

``` math
\begin{align}
I(x,y)&= -\log_2 p(x,y) \\
      &= -\log_2 p(x)p(y|x) \\
      &= -\log_2 p(x)-\log_2p(y|x) \\
      &= I(x)-\log_2p(y|x)
\end{align}
```
其中，y为南家持牌随机变量，x为北家随机持牌变量,p(y|x)为x下y的条件概率,I(x)已经计算得到结果为4.32
继续计算得到

``` math
\begin{align}
I(1💓,4💗)&= I(1💗)-\log_2p(4💗|1💗) \\
           &≈ 4.32-\log_20.03* \\
           &≈ 4.32+5.06 \\
           &≈ 9.38
\end{align}
```
**\*此结果为计算机模拟1万副发牌算出**
**由此可知，南家掌握了两手牌总共信息量为9.38的信息做出了4💗的决定。**
看到这里，也许各位看官会觉得不知所云，这些东西和桥牌有什么关系，但请稍安无燥。
本篇只是开头，只是给大家一个直观的感受。
南家掌握了9.38的信息量，叫出4💗是否合理？
信息量和各种定约的关系是什么？
信息论叫牌体系如何设计才合理？
等等，这些问题都会在以后的篇章中一一从信息论的角度给与解答，揭开桥牌叫牌的本质。
敬请期待下篇。
Windows10のパソコンにBluetoothキーボードを接続したいがPINコードが表示されない問題

# 要約
Windows10のパソコンにBluetoothキーボードを接続したい時、何回かPINコードの入力に失敗するとPINコード自体が表示されなくなる。これは有名なバグで、すでに多くのサイトで対策案が公開されている。この記事では、それらとは違ったやり方について紹介する。参考にしたのは、[こちら](https://ugetfix.com/ask/how-to-fix-check-the-pin-and-try-connecting-again-bluetooth-error-in-windows-10)の記事。

# 内容
## 環境
- OS: Windows 10 Pro
- Bluetoothキーボード: HHKB Professional BT

## 既出の対策
PFU（HHKBを作っている会社）が[FAQ](https://faq.pfu.jp/faq/show/3107?category_id=267&site_domain=hhkb)の中で紹介している。

## 別のやり方
1. 「**Windows Key + R**」（「ファイル名を指定して実行」画面が左下にポップアップする）
1. 出てきた画面内に「**regedit**」と入力しOKボタンを押す
1. "**Computer\HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Bluetooth\ExceptionDB\Addrs**"まで移動
1. 該当フォルダ内に存在するファイルもしくはフォルダを消去
1. Bluetooth接続を再試行する

# 補足
PFUのサイトで紹介されている二つのやり方が一番分かりやすいので、解決するならその方法がいいと思う。
Proxy環境下でのUbuntuにおける環境構築のため設定

# はじめに
本記事はプロキシ環境下でUbuntuの環境構築をする際に必要な設定を紹介します。
社内や大学でプロキシを通さないと何も入れられない！！！aptは通るのにpipが通らない！！！
と禿げそうになり、社内でもよく聞かれるのでそれぞれ設定方法をまとめます。
また、Ubuntuは16.04で確認しています。
# aptにおける設定
apt及びapt-getを使う場合は/etc/apt/apt.confを作成し、以下を記入します。[IP]、[port]はproxy環境に応じて記入してください。
また、etc内を弄るのでsudo権限が必要です。
`$ sudo vi /etc/apt/apt.conf`

    Acquire::http::Proxy "http://[IP]:[port]";
    Acquire::https::Proxy "https://[IP]:[port]";

# pipにおける設定
pythonを使う方はpipが必須と言って過言ではないでしょう。
pipはbashrcに記入するだけで通るようになります。
`$ vim ~/.bashrc`
以下2行を追加します。

    export HTTP_PROXY=http://[IP]:[port]
    export HTTPS_PROXY=https://[IP]:[port]

追加後忘れずにsourceしましょう。
`$ source ~/.bashrc`
これでpipが使えると思いきや

    WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1108)'))':
はい．．．たまにProxyは通っているのにSSL認証が通らない時があります。
そんな時はhome直下にpipディレクトリを作成し、pip.confを作成します。
`$ mkdir ~/.pip`
`$ vim ~/.pip/pip.conf`

    [global]
    trusted-host = pypi.python.org
                   pypi.org
                   files.pythonhosted.org

私の環境ではこれで通りました。
# wgetにおける設定
wgetはwgetrcを作成します。
`$ vim ~/.wgetrc`

    http_proxy=http://[IP]:[port]/
    https_proxy=https://[IP]:[port]/
# まとめ
aptはapt.conf、pipはbashrc、wgetはwgetrcそれぞれ設定方法が違い毎回個別に調べるのが面倒な人や会社や大学での環境構築に苦しんでいる人の助けになればと思います。
salesforceアドミニストレーターに向けて①


忘備録

1.会計年度
→1月開始
標準会計年度からカスタム会計年度に設定後は変更できない
標準会計年度に戻すために、通常のカレンダー (グレゴリオ暦) と同じ構成のカスタム会計年度を、Salesforceの標準会計年度として定義することは可能
カスタム会計年度を有効化または定義すると、売上予測、売上予測、レポート、および目標に影響
2.営業時間
→設定
・エンタイトルメントプロセスのマイルストン
・エンタイトルメントプロセス
・ケース
・ケースのエスカレーションルール
項目は、リストビューやレポートに含めることは不可

エスカレーションルールに組み込まれている営業時間を無効化はできない
営業時間に対してエスカレーションルールを削除する必要がある
最大1000件の休日を営業時間の各セットに関連付けができる

3.マルチ通貨
→通貨の設定が行える、設定後は変更不可
デフォルトでは、組織内の換算後の金額はすべて、組織で定義された現在の換算レートに依存する。換算レートの設定および更新は、手動で行う必要あり。換算レートを変更すると、完了した商談を含む、すべてのレコードの換算金額が自動的に更新される

必要なユーザの権限
通貨を表示したい場合
→「設定・定義の参照」
通貨を変更したい場合
→「アプリケーションのカスタマイズ」
高度な通貨管理を有効にしたい場合
→「アプリケーションのカスタマイズ」
有効な通貨 — 組織が業務に使用する通貨。商談、売上予測などの項目には、有効な通貨のみ入力可能。通貨を有効にすると、完全に削除することは不可
無効な通貨 — 組織が過去に使用していた通貨。無効な通貨を使用している既存のレコードがあっても、無効な通貨で新規に金額を入力することは不可
laravelでJWT(Json Web Token)を使いたい

#JWT(Json Web Token)を勉強していく上で参考になったサイトを紹介していきます


##laravel８でとりあえずJWTを実装してみる
https://www.avyatech.com/rest-api-with-laravel-8-using-jwt-token/

ほぼコピペで動きました

##JWT+SNSアカウント でOAuthの認証機能をつくる
https://qiita.com/kz_morita/items/e7baeb423d0a9bdd2efb

コードを参考にしました
デジタルカードゲームの組み合わせテストでやったこと感じたこと

#概要
膨大なカードの中から、組み合わせて検証ができるカードを探す方法を考え、やったことや問題点をまとめてみました。

#目次

- 組み合わせテストとはなんだろう？

- テストチャーター編(検証する観点を決めよう！)

- ピックアップ表編(検証に必要なカードを探そう！)

- カード抽出編(検証に必要なカードを探すのをもっと簡単にしよう！)

- 未来編(未来の自分にまかせた！)

#組み合わせテストとはなんだろう？
カードの効果に対して他のカードの効果を組み合わせたとき、その効果の内容に不具合がないかを確認するテストです。

組み合わせテストでは、テストを行うカードに対して、膨大なカードの中から検証が行えるカードを探さなければいけません。

では、その組み合わせをどうやって見つけているのか、自分がやったこと、これからやりたいことを話していきたいを思います。


#1.テストチャーター編
カードの効果から、どういった効果が発動するのかと影響範囲を軸にカードの効果に対して、どの観点が必要なのかわかりやすくするためにテストチャーターを作成しようとした。
しかし、カードの効果には様々な種類があり、軸となる効果の内容や影響範囲が多くなってしまった。
そのため、テストチャーターを作成を中止し、検証したいカードの効果から組み合わせのできるカードを探せるピックアップ表を作成することにしました。

![aaaaaaaaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2318974/6714d3a2-9a08-e818-ac86-f25bc68025eb.png)


######テストチャーターの問題点
・カードの効果には様々な内容があり、効果内容や影響範囲をまとめきることができなかった
・作成したテストチャーターから実際に検証する観点が瞬時に理解ができない


#2.ピックアップ表編
カードの効果毎に、対応した効果や影響範囲にチェックを付けるピックアップ表を作成した。
作成したピックアップ表を使用しケースを作成してみたが、検証したい効果を探す際、
作成する人の観点次第で項目の組み合わせが見つけられない等、設計者に依存してしまう点があり、
また、カードゲームに詳しくない人がテストケースを作成をする場合、作成に時間がかかってしまう点が問題点として挙がった。


![ピックアップ表.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2318974/2ad45eca-1a4a-6e14-ad04-8a784df3e922.png)





######ピックアップ表の問題点
・テストケースを作成する人の理解度により、観点を漏れが発生する
・カードゲームに詳しくない人はテストケースの作成に時間がかかる
・カードの追加があった場合、その都度ピックアップ表に追加しチェックを付ける必要がある

#現在編(カード抽出)
カードゲームに詳しい人でも観点が簡単に出せるように、カード一覧から検証が出来そうなカードを抽出する関数を組んでいます。
検証を行いたい効果を張り付けると、その内容から検証ができるカードが抽出できるようにしたいと考えています。
カード抽出のフローは↓みたいな感じを想定

　　　　　　　　　　　　　　　　![フロー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2318974/44f3377e-bd38-0471-3736-bc0a782b501f.png)



#未来編(こんなことやってみたいなぁ)
カード抽出をVBAで作成して、検索で出てきたカードが何のキーワードで抽出したかがわかるようにしたい。
また、ほかにいい感じの機能があれば追加したい。
現状、VBAに関しては何も知らないレベルなので、勉強する必要がある・・・
完成するのはいつになるんでしょうか・・・


#最後に
カードが追加されるたびにカードどうしの組み合わせは増えていきます。
現状では、カードゲームに詳しい人が観点を出すのが一番効率がいいです。
しかし、同じ人が組み合わせのケースを作成するだけでは様々な観点でケースを作成することは難しいです。
組み合わせテストの作成をもっと簡単に、詳しくない人でもできるようにしていきたいなあ。





























![ピックアップ表.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2318974/48de3fa8-285d-bf68-f5c9-117445ccddee.png)
不具合報告書はなんのために？~天気予報は天気を予報するためにあるのではない~

QAの成果物の一つに、不具合報告書があります。

QAのスタッフの多くは、不具合報告書を渡すことはあっても、受け取ったことは無いと思います。受け取り手(つまりプログラマやプランナー)の目線に立ってみて、改めて不具合報告書を見つめ直してみようじゃありませんか！


なお、下記内容は個人の意見です。
「ソフトウェアテストの常識」というわけではないので、そこのところを踏まえてお読みいただけると幸いです。


## 報告書は何のために書くのか？
ところで、不具合報告書に限らず、報告書って何のために書くのでしょうか。
「報告するために決っとるやろ！」と思ったそこのあなた！
そんなあなたに質問しますが、例えば、天気予報は何のためにあるのでしょうか。
天気を予報するためですか？
ちがいますね、未来の天気を知ることで、その後の行動の参考にするためです(傘を持ってくとか、ピクニックに出かけるとか)

報告書も同じです。読んだ人が次の行動の参考にできるのが、良い報告書なのです。

例をあげましょう。
私は子どもを保育園に預けているのですが、保育士と保護者の間で、毎日、子供の様子をドキュメントでやり取りをします。ここでは、良いドキュメントと悪いドキュメントを紹介します。まず悪い例から。

```悪い例：
今日、息子は体温がいつもよりも高いです。
```

はい。状況を報告しただけですね。これを読んだ保育士は、何をすればよいかわかりません(親が何を期待しているかわからない)。おそらく、現場の保育士さん達は混乱するでしょう。続いて良い例。

```
良い例：
今日、息子は体温がいつもよりも高いですが、
季節の変わり目にはよくあることなので、登園させました。
ただ、大事をとって、水遊びは控えていただけますでしょうか。
それ以外はいつも通りで大丈夫です。
もし、体温が37.5度を超えるようでしたら、両親までご連絡ください。
```

どうでしょうか。
これを読んだ保育士は、迷わずに行動に移せますね。これが良い報告書です。

さて、話を不具合報告書に戻しましょう。不具合報告書はなんのために書くのでしょうか。
「不具合を報告するために決っとるやろ！」と言う人はもういませんね？
そう、不具合報告書は、「開発者にバグを直してもらうため」に存在するのです。
では、どうすれば直してもらえるでしょうか。

開発者の手元で現象を再現させ、そしてその現象がバグだと認識してもらえば、直してもらえる気がしますね。したがって、大事なポイントは以下のふたつです。
・再現させる
・バグと認識させる


## 再現手順
不具合報告書には様々な情報がありますね。ざっと上げると
要約、詳細、再現手順、期待値、環境、再現率、といったところでしょうか
これらの情報で大事なものはなんでしょうか。
私の中での優先度は以下の通りです。

再現手順 > 期待値 > 環境 > それ以外

テスターなら、誰もが一度は開発者から「私の手元では発生しませんね。もう一回確認お願いできますか？」という返事をもらったことがあるでしょう。
では、なぜこの返事が帰ってきてしまうのでしょうか。理由は主に3つです。
手順が伝わってない、期待値がズレている、環境依存

バグ報告書を受け取った開発者は何をするでしょうか。
おそらく、自分自身が所持している端末で再現を試みることでしょう。
したがって、まずは、誰が読んでも同じ手順を踏むような再現手順を書くことが大切です。
エンジニアのAさん、プランナーのBさん、QAのCさん、CSのDさん、パン屋のEさん、全員が同じ手順になるような再現手順を書きましょう。

抽象的な表現は極力避け、なるべく具体的に詳細に書くことをオススメします。
再現してもらえなければ、その時点で、「私の手元では発生しない」のコメントとともに、バグ報告書はテスターに帰ってきてしまいます。
何はなくとも、エンジニアにバグを再現してもらうことを、最優先にしましょう！

## 期待値を示す
「再現手順」で現象を再現してもらうことはできました。
次は、その現象が不具合であるということを認識してもらう必要があります。

クラッシュバグのような分かりやすい不具合なら、再現手順だけでも十分ですが、仕様書との相違のような、一見、不具合かどうか判断しずらい症状のときは、期待値をしっかりと書くようにしましょう。
期待値欄に仕様書のURLだけをペタっと貼るケースが散見されますが、あまりオススメしません。
それは期待値ではなく、期待値が書いてある場所、でしかないです。

サボらずに「Aという仕様書のBの項目にCという期待値が書いてあるが、再現手順を踏むとDという挙動をしている」くらい、詳細に書くことをオススメします。

##環境
スマホアプリやWebページの実行環境は、無限のパターンが存在するので、環境の明記は重要です。
たとえば、下記３つのパターンだと、エンジニアが取る行動は、それぞれ異なるでしょう。

1.iOSとAndroid両方で発生する。
2.iOSとAndroid両方で検証した結果、iOSのみで発生する。
3.iOSではバグを確認したけどAndroidは未検証。

1の場合、ロジックの不具合だと予想できるので、コードを見直すはずです。
2の場合、iOSの環境依存だとあたりをつけてデバッグを行なうでしょう。
3の場合、ロジックのバグなのか環境依存なのかを切り分けたいので、テスターに「Androidだとどうなるか確認してほしい」というリクエストが来るでしょう。
環境の情報のひとつとっても、次の行動にこれだけ差が生まれます。

## おわりに
誰かが言ってましたが、良い不具合報告書とはブーメランのようなものです。
手を離れると(バグチケットを担当者にアサインすると)、獲物を仕留めて(不具合を修正してもらって)、手元に帰ってきます(報告者にアサインが帰ってくる)。
これが、テスターと開発者で何度もやり取りが発生するようだと(延々とコメントでやり取りが行われるようだと)、良い不具合報告書とは言えません。
バグ報告書は現状を伝えるだけではなく、問題を解決する道具であるべきです。その意識の差があるだけで、ドキュメントの質は変わってくるでしょう。
それでは！
さばぴょい伝説

位置について ROBOCOPY どん！

Woooooooo(さばおっち)
Woooooooo(さばぴょい さばぴょい)
Woooo(うつだっち) Woooo(さばぽい)
さばさばうつうつ 5 1 0 RAID！！

オレンジぱっぱか怪ストレージ(はいっ)
ちょこちょこなにげに(そーわっ So What)
第一第零第五RAID(だんだんだんだん異音が近づき)
めんたまギラギラ障害でーす(はいっ)
今日もめちゃめちゃはちゃめちゃだっ(ちゃー)
がち追い込み(睡眠カット)
家帰りてー(でも帰れなーい)
DATは(からっぽ)HDDは(消した)
どいつもこいつも あらら(リワインド)
泣かないで(はいっ) 拭くんぢゃねー(おいっ)
業者呼んでも(なおらないっ)(はーっ？)

きょうの総務の女帝は
あたしだけに注意する
サーバルームへゆこう
電源を切って マウント外して
業者のなかに 光ともす
(どーきどきどきどきどきどきどきどき)

機密ファイルが！
ずきゅんどきゅん 戻らないー(ふっふー)
ばきゅんぶきゅん 消えてーゆーくーよー
こんなー思いはー はーじめてー(5 1 0 RAID！)
ピピーピピー アラートが鳴りー(ふっふー)
ピピーピピー 冷や汗ーだーよー
今日もーかなでーるー
発狂発狂 部長 3 2 1 Go Fight
鬱々 メンタル 3 2 1(うーーClinic！)

----

# なんだこの様は…くそっ…

社内全体で使用していたファイルサーバが老朽化し、さらに出張やリモートワークにも対応するため、某クラウドストレージサービスに移行することになりました。
AWSのS3をベースとしたもので、そのままS3として利用することもできたので、ファイル移行はS3に直接ファイル転送することにしました。
全部で数TBの容量だったのでAWS Snowballの利用も考えましたが、なるべくコストかけたくなかったので、Windows ServerからS3をネットワークドライブとしてマウントして、ROBOCOPYで全転送することにしました。
このときAWS Snowballを利用していれば・・・。

ROBOCOPYは1週間経っても終わりませんでした。S3へのアップロードって意外と転送速度出ないんですよね。

ROBOCOPY実行から1週間以上経過したある日、社内のサーバルームから嫌なWooooという異音と、ピーピーというアラートオンらしきビープ音が・・・。

ファイルサーバをみると、2台のHDDにオレンジのLEDがぱっかぱっか点灯していました。そう、HDD故障のランプです。
RAID5のストレージのHDDの2台が故障したということは・・・、普通には復旧できないことを意味します。
管理コンソールにアクセスすることもできず、どうやらRAIDコントローラごと故障したようです・・・。

契約書や営業資料など、社内の全ての機密情報が入ったファイルサーバが死亡したことで、社内業務は停止。
総務の女帝からは激しく怒られることになりました。

バックアップをデイリーでDATにとっていたので、真っ先にこれからの復旧を試みたのですが、実は機械が壊れていたのかバックアップはずっとうまく取れておらず、中身は空っぽ。こここからの復旧はできませんでした。

過去にメンテナンスのため一時バックアップをとっていた外付けHDDに古い資料だけでも残っていないか見てみましたが、やはり機密文書含むため綺麗に消し去っていました。

他にもあれこれ試すも結局復旧できず、最後の頼みの綱で数百万円かけてデータ復旧業者に希望の光をともすことにしました。
祈る思いでどきどきしながら業者の連絡を待ちましたが・・・、結局復旧はできないとの連絡。

結局データ復旧はあきらめ、各社員のPCやメールの履歴などからファイルをかき集めることになりました。

# この結果、次回に活かすとしよう

元々老朽化していたファイルサーバに1週間以上連続してHDDにアクセスし続ける処理を行わせることが、今考えるとそもそも無茶がありました。
AWS Snowballのコストをケチったせいで、データ復旧業者への支払いに数百万かかった挙句にデータも全て失うことになりました。
失敗したら困るようなものはケチらず、安全と安心と買う意味で厚めにコストをかけましょう。

またHDDが故障した際は余計なことはせず電源をすぐに切った方が、データ復旧業者で復旧できる可能性が高いそうです。

# 信念を曲げなければ理想は必ず芽吹く

それを示せなかった私が“悪い例”として皆の人柱となろう

![93468977_p0_master1200.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21645/70454cf3-315f-bebb-02ec-5e653d78890a.jpeg)
[©︎エアグルーヴ(ウマ娘) 女帝フリーアイコン - ことうのイラスト - pixiv](https://www.pixiv.net/artworks/93468977)
Site matching query does not exist. 

サイトマップ作成後にサイトにログインしようとしたところログインできなくなってしまった。

server error(500)
と表示されており、詳細が不明だった。

```python:setings.py
DEBUG = True
```

エラーログを表示
Site matching query does not exist.


原因
サイトマップを作成中にドメインを変更しなければいけないところを誤ってドメインを削除して新しく追加してしまった。

削除してしまったドメイン
```pk=1, domain='www.example.com', name='example.com'```

ログインができない状態なのでシェルで追加することにした。

アプリのディレクトリ上で実行
シェルの起動

```
python3 manage.py shell
```

Siteのインポート

```
from django.contrib.sites.models import Site
```

削除してしまったドメインの作成

```
Site.objects.create(pk=1, domain='www.example.com', name='example.com')
```
実行後の出力 
`Site: www.example.com`

参考にした動画

<iframe width="560" height="315" src="https://www.youtube.com/embed/Gr8CVnRUoDo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
IBMCloud SSL-VPN 64サブネット制限

##SSL-VPNの制限について
意外と認知されていなかったので、改めて記載する。

IBMCloudのSSL-VPNでは、アクセス先のアカウントで64サブネット以上のネットワーク存在した場合、アクセスしたいネットワークセグメントにアクセスできない場合がある。その際は、SSL-VPNの設定でアクセス先のセグメントを自動アサインからマニュアルアサインに変更して対応する。

[SSL VPN サブネット制限](https://cloud.ibm.com/docs/iaas-vpn?topic=iaas-vpn-about-iaas-vpn&locale=ja#iaas-vpn-ssl-vpn-subnet-limit)

### マニュアルアサインへの変更方法
SSL-VPNの自動割り当てをオフにして、サブネットを選択する
[IBMCloud Web Portal] -> [Manage] -> [Access(IAM)] -> [Users] -> [User selection] -> [Classic Infrastructure] -> [VPN Subnets] -> [Auto-assign] -> [OFF] -> [Select the subnet you want to connect to] -> SAVE
【AndroidStudio】俺のエミュレーターがインターネットに繋がらないわけがない！

# この記事 is 何
仕事でエミュレーターがインターネットに接続されず一生会社のアプリにログインできない...。
ひどいよ！こんなのってないよ！！！

![スクリーンショット 2021-11-30 14.50.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906559/11fbe912-40e7-86ab-c73b-8e4e9dfd0f65.png)

となったので色々頑張って解決して無事お仕事を進められるようになった私の物語です。

# 考えられる基本的な原因
まず初めに以下は確かめておきましょう

1. PC自体がインターネットにつながっているか？
2. エミュレータが機内モードになっていないか？

もし1の場合はPCをインターネットに繋いで欲しいですし、2の場合は機内モードを解除して欲しいです。

# 上記以外の場合の解決策
まず、こちらの記事を試してみましょう！
[Android エミュレーターでネットワークに繋がらない時](https://qiita.com/maaaaaiiiisan/items/fdcf1c370fc381bb9dd2)

私の場合は一旦これでいけました！
でも、一定の時間がたつとまたインターネットの接続が切れてしまいます！
こんなのってあんまりだよ！！！！

しかし、世界はそんなに残酷ではないのです。

救世主(メシア)現る。
[ネットワークのDNSアドレスを8.8.8.8（GoogleのDNS）または別の好みに変更します。](https://isolution.pro/q/so55733836/android-emyure-ta-ga-inta-netto-ni-akusesu-dekinai)

あなたが救われますように。。。ｱ-ﾒﾝ
そうだセキュリティ、しよう

#はじめに
こんにちは！
DMM WEBCAMP Advent Calendar 2021の5日目を担当することになりました。
メンターの@ta-igaです。

近年サイバー攻撃とかセキュリティ関連のニュースが多いな〜〜（俺もサイバー攻撃してみたいな〜）ということで、この事について調べてみたことをちょっとまとめていきたいと思います。実際、地方の病院がサイバー攻撃受けて患者の情報が全てなくなり医療を提供することができなくなった事例があるとか、、、。これからIT技術がどんどん普及していく時代だと思うので皆さんもこの記事を読んで一緒にITリテラシーを身につけていきましょう！（あとLGTMしてね！）

#実際の事例
2021年10月末徳島県つるぎ町の町立半田病院がサイバー攻撃に襲われました。病院のシステムに侵入して情報を暗号化し、復旧と引き換えに金銭を要求するコンピューターウイルス「ランサムウエア」に感染させられ増田。約8万5千人分の電子カルテが閲覧できなくなり新規患者の受け入れを停止状態。命を守る地域の重要インフラは大打撃を受ける大惨事となりました。。。この他にもサイバー攻撃はたくさん起きており日々の生活を脅かす事態となっています。
実際の記事は[こちら](https://www.nikkei.com/article/DGXZQOUE071OK0X01C21A1000000/)

#サイバー攻撃とは
サイバー攻撃とは、__インターネットなどを通じてコンピュータシステムに進入し、情報の盗撮や摂取、データの改さんや破壊などを行うこと__を指すそう。攻撃手法もどんどん多岐にわたって、とりあえずウイルス対策ソフトを入れるだけではなかなか厳しくなってきているらしい。
サイバー攻撃は大きく分けて5つ。次から1つずつ説明していきます。

#1、標的型攻撃
特定の官公庁や企業など、標的を決めて行われる攻撃を標的型攻撃といいます。さらに2つに分けられる。

##・APT（Advanced Persistent Threat)攻撃
特定の組織を標的に、複数の手法を組み合わせて気づかれないように執拗に攻撃を繰り返す攻撃。Persistentは「執拗な」という意味。

##・水飲み型攻撃
よく利用される企業などのWebサイトにウイルスを仕込み感染させる。肉食動物が水飲み場に潜み、おとづれる草食動物を襲う様子に由来するだとか。

#２、パスワードクラック攻撃
パスワードを割り出し、解析することをパスワードクラックという。さらに3つに分けられる。

##・辞書攻撃
攻撃対象とする利用者IDを一つ決めて辞書にある単語やその組み合わせをパスワードとして、ログインを試す。辞書にある単語をパスワードに使っている利用者が多いことに漬け込んだ攻撃

##・総当たり攻撃
攻撃対象とする利用者IDを一つけて総当たりでログインを試行する。逆によく用いられるパスワードを1つ定め、利用者IDを総当たりしてログインを試行することを「逆走当たり攻撃」と呼ぶ。

##・パスワードリスト攻撃
不正に取得した他サイトの利用者IDとパスワードの一覧表を用いてログインを試行する。複数サイトで同じIDとパスワードを使ってる利用者が多いことに着目した攻撃。（え、怖い。）

#3、サービスを妨害する攻撃
Dos（ドス）攻撃は特定のサーバなどに大量の情報を送りつけて負荷を与え、サーバの機能を停止させる攻撃。さらに複数のコンピュータから一斉に攻撃するのはDDos（ディードス）攻撃と呼ばれている

#4、不正な命令による攻撃
Webサイトなどの入力欄に不正な命令をすることで管理者が考えてもいなかった動作を起こさせる攻撃です。主に2つ。

##・クロスサイトスクリプティング
脆弱なWebサイトに対して、悪意のあるスクリプトを埋め込んだ入力データを送ることによって、利用者のブラウザで実行させる攻撃を指す。
例えば、攻撃者が罠をかけたサイトAを利用者が閲覧し、当該ページ内のリンクをクリックした時に悪意のあるスクリプトを含む文字列が脆弱なWebサイトBに送り込まれ、利用者ののWebブラウザで実行させる攻撃。サイトを跨いで悪意のあるスクリプトが送り込まれ実行されるところが「クロスサイト」と呼ばれています。

##・SQLインジェクション
攻撃者が脆弱せいのあるWebアプリの入力欄に悪意のある命令文を入れることで管理者の意図していないSQL文を実行させる攻撃を指す。

#5、なりすましによる攻撃
攻撃者が正規の利用者を装い、情報資産の窃盗や不正行為などを行う攻撃。主に4つ

##・セッションハイジャック
利用者がWebサイトなどにログインするとセッションを識別するセッションIDがWebサーバから払い出されログアウトまで維持されるという仕組みがある。攻撃者はこのセッションIDを盗み出して正規の利用者になりすます。

##・DNSキャッシュポイズニング
パソコンが参照するDNSサーバに偽のドメイン情報を送って利用者を偽造されたサーバに誘導する

##・SEOポイズニング
検索サイトの順位付けアルゴリズムを悪用し、悪意のあるサイトだけが上位に表示されるようにする

##・IPスプーフィング
送信元IPアドレスを詐称して標的ネットワーク上のホストになりすまして接続する。

#対策
ここまでザーッとサイバー攻撃の種類についてまとめてきました。実際にこれらの攻撃から身を守るにはまず__サイバー攻撃に対する自覚を持つ__ことが何より大事になります。地方だろうが都心だろが関係ありません。現に地方の病院が被害にあっています。最低限以下の4つを意識しましょう。

1.身に覚えのないメールやメッセージは触らない。
2.違法なダウンロードやファイル閲覧のできるwebサイトを訪問しない
3.個人情報を使用するサービスを増やし過ぎない
4.メールアドレスやパスワードを一つに絞らない

これらを意識する人が増えるだけでかなり変わると思われます。ぜひ一旦インターネットの使い方を見直してみてください。

#最後に
いかがでしたでしょうか。サイバー攻撃する側の人たちもめちゃくちゃ頭良くてあの手この手で侵入を試みてくるようです。その頭を正規の方で使ってくれればいいのですが、、、なかなか難しいようで。これからこの問題はどんどん大きくなってくると思うので少しでも知識をつけておきましょう！最後まで読んでいただきありがとうございました！

参考...イメージ&クレバー方式でよくわかる栢木先生の基本情報技術者教室
IBM Cloud CIS トラブル時に取得する情報

##目的
IBMCloud InternetServicesを利用している際のトラブル時に取得する情報を記載

##取得情報
大きくわけて６つ

###1~3ポータルトップから取得する
1.Domain Name
2.Domain ID
3.CRN
![貼り付けた画像_2020_09_17_17_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/81d9a710-5e2c-7969-3edf-459e9d679b39.png)

###4.トラブル時の時間

タイムゾーンを含めた発生時刻
例:Thu, 29 Nov 2021 08:30:54 GMT

###5.トラブルが発生したURL

例:https://glb.m365.work/

###6.HTTアーカイブ(HAR)の生成

リクエストヘッダー、レスポンスヘッダー、本文コンテンツ、ページの読み込み時間を含め、全てのWebブラウザ要求を記録した情報
取得方法はブラウザ毎に異なるので、下記サイトを参考に実施する。
参考:[トラブルシューティングサイトへの情報収集](https://support.cloudflare.com/hc/ja/articles/203118044-%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B5%E3%82%A4%E3%83%88%E3%81%B8%E3%81%AE%E6%83%85%E5%A0%B1%E5%8F%8E%E9%9B%86#h_8c9c815c-0933-49c0-ac00-b700700efce7)

Chromeブラウザで実施した例
MacOSXの場合は、ブラウザの画面で**⌥ + ⌘ + I**を押し、Chromeデベロッパー・ツールを起動する。

Chromeデベロッパー・ツールが起動したら、<font color="Red">●</font>および右下に**Recording network activity**となっている事を確認
Recording担っていない場合は、●になっているはずなのでクリックする。
![https___glb_m365_work.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/a28ec70c-6536-682e-93a0-603f3a0b0835.png)

Recording状態で、一度URLにアクセスするとアクセス記録が下に記載される。
![https___glb_m365_work.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/1bf4b0f0-4059-7969-ff48-113eaed395c8.png)

↓矢印マークを選択すると、ファイルをダウンロードできる。
![Slack_と_https___glb_m365_work.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/244c8ba2-3c3b-4441-19c2-6808d13b47f2.png)

###HARファイルの中身の確認
下記サイトへアクセスする。
[Google HAR Analyzer](https://toolbox.googleapps.com/apps/har_analyzer/)

先ほどダウンロードしたHARファイルを選択する。
![HAR_Analyzer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/e4ae0a1f-de56-267a-82d2-5ba2d1790f85.png)

アクセス時のリクエストヘッダなどが参照できるため、この情報をもとにサポートで解析する。
![HAR_Analyzer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/82b30042-6e97-a71b-4ed9-a8cd94d63c9b.png)
GCPの情報を追う時に見ているものたち

GCPに限った話ではありませんが、パブリッククラウドはアップデートやリリースが頻繁に発生するため、
その情報を追い続ける難しさを日々感じています。
自分が使ったことのあるサービスであるはずなのに、同僚が自分の知らない機能をいつの間にか使いこなしていたり、Slackチャンネルで自分の知らない機能について話されているのを私は何度か経験しました。

私自身は現在GCPを業務でがっつり触っているわけではありませんが、GCPのことは好きなので、新機能やより深い情報を知りたい場合に参照している情報源を書きます。
GCPを学ぶ人や、継続的にGCPを利用する方の参考になれば幸いです。

※記載順と重要度は関係がありません。

## Twitter

私がGCPの新機能を知る場面はほとんどがTwitterです。
Google Cloud で働いている方々やユーザコミュニティのメンバーがドキュメントに起こされたばかりの機能について情報を発信してくれています。
この場で特定のアカウントを紹介することは避けますが、`#gcpja` などのハッシュタグで見つけることができるはずです。

## [release notes](https://cloud.google.com/release-notes)

これは絶対に外せません。
(ほとんど?)全ての更新情報が記載されているため、自身に必要のない情報の方が多いかもしれません。
それでもGCPの更新をこれほど網羅している情報は他には無いはずです。

`container optimized os`を利用している方は、たまにでいいのでその[リリースノート](https://cloud.google.com/container-optimized-os/docs/release-notes)も覗いておきましょう。
脆弱性に関する情報が記載されているため、OSイメージのアップデートの必要性に気づけるかもしれません。

## REST API References

各GCPのサービスには機能説明のドキュメントに加え、REST APIのリファレンスも記載されています。

Compute Engine APIであれば[ここ](https://cloud.google.com/compute/docs/reference/rest/v1)
IAM APIであれば[ここ](https://cloud.google.com/iam/docs/reference/rest)
といったように。

これらは普段Cloud Consoleを利用している限りでは知る必要のないことですが、Cloud Functionsなどのプログラムからリソースの操作をしたり、terraformにおけるパラメータの意味を理解する場合に役に立っています。

## [Issue Tracker](https://cloud.google.com/support/docs/issue-trackers)

Issue Trackerは、GCPの機能リクエストやバグの報告を行える場所、という認識です。
私は、**このサービスでこういうことってできないのかな**という疑問を持った時に、よくIssue Trackerを参照しています。

例えば、「IAPを利用してBackend Bucketに設定した公開Cloud Storageバケットへのアクセスを制御できないかな」という疑問を持ったとします。
この場合はIAPのIssue TrackerなのかCloud StorageのIssue Trackerなのか少し迷いますが、迷ったら両方探します。
すると、[IAP on Cloud Storage - backend buckets](https://issuetracker.google.com/issues/114133245)というIssueがあるので、中身を覗いて最新の情報を入手できたり入手できなかったりします。
どうやらこの機能はまだリリースされていないようですので、別のアーキテクチャの検討を始めることができます。

Issue Trackerに記載された機能リクエストは実装が約束されるわけではありませんが、もし実現したら嬉しい機能を見つけられたなら、StarをポチっとしておくとGoogleが優先度を上げてくれるかもしれません（無責任)。

## [Medium google-cloud-jp](https://medium.com/google-cloud-jp/tagged/%E6%97%A5%E6%9C%AC%E8%AA%9E)

サービスはなんでもいいのですが、Google Cloudで働いている方々がより多く投稿している気がするので、私はGCPの情報に飢えた時にこのMediumグループを巡って興味のあるものを読んでいます。
触ったことないけどあの機能ってどんな感じなのか気になる〜という場合に日本語で紹介記事があると嬉しくなります。

## 関連OSSのCHANGELOG

もはやGCPが関係なくなりましたが、GKEやDataflowで実行されるKubernetesやApache BeamといったOSSは日々更新され続け、GCPがそれに対応する流れとなっています。
OSS側に変更があると自分たちのワークロードに何らかの影響を与える場合があるため、自分たちのサービスを支えるソフトウェアの変更についてはきちんと追って意味を理解するようにしています。
いいかんじにAWS上のネットワーク構成図を作りたいから手鍋した話


この記事は[ディップ株式会社 Advent Calendar 2021の](https://qiita.com/advent-calendar/2021/dip-dev) 5日目の記事ですっ

4日目は @bikun_bikunさんの [SendGridのDynamicTemplateでハマった話](https://tech-note.bikunbikun.com/entry/2021/12/04/162742) でした。
これはなかなか気づけない仕様ですね・・linterが欲しいレベルです・・

# やったこと

**ネットワーク構成図だけを描くシンプルなツールを書いた**。
~~やってみたかっただけのスカンクワーク~~

# 現状の課題

- **クラウドに移行したサーバーのネットワーク管理がぱっと見レベルの可視化ができていない**

簡略化した可視化が出来ていないので、セキュリティレベルを上げるための許可ポートのリファクタとか
何かあったときの侵入経路みたいなのがサクッとレベルで分からない。

# 実現したい事の分析

- **リスクがある通信の流れ**
- **リソース障害発生時に影響をうける個所**

これらをうまいとこ資料化出来ていればいいと思った。つまり、

- **サブネットの種類**
- **ゲートウェイやサブネットをまたいだ通信の向き**
- **セキュリティグループ**

が、あればいい。何のサーバーが何台あって、何の機能があって、どのくらいの性能か、は不要。
むしろそれはサーバー側のリソース管理でやってる。

# 色々ソリューションあるやん？

[AWS Perspective](https://aws.amazon.com/jp/solutions/implementations/aws-perspective/#)

アーキテクチャを作図するツール。ネットワーク構成とリスクの観点で見れるものじゃなくね？
[CloudCraft](https://www.cloudcraft.co/)、[CDK-Dia](https://github.com/pistazie/cdk-dia)も同じ部類。ネットワーク視点じゃない。

[aws-security-viz](https://github.com/anaynayak/aws-security-viz)

SGの相関図を描くやつ。かなり惜しいんだけど、侵入リスクで考えたいのでEC2単位で見たい。

### SaaSとかシステムとかじゃなくて、シュっとアミダ状に構成みれるやつ。そういうシンプルなの無いんだよね。。

# というわけで

↓押してみろ 飛ぶぞ
<a href="https://github.com/dip-kato/godia"><img src="https://github-link-card.s3.ap-northeast-1.amazonaws.com/dip-kato/godia.png" width="460px"></a>
↑押してみろ 飛ぶぞ

**作りました！**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2334211/c7c54750-2632-5321-94df-84c10a63bd74.png)
※ネットワークIDみたいなのが見えている所を念のため黒塗りしてます

# 特徴

・アウトプットフォーマットが[Graphviz](https://graphviz.org/)形式なのでDOT言語で出力される。つまり、**SVG等に出来るのでパワポぽく編集可能**!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2334211/a2c68abf-ad8d-d7b9-3540-3c9141b37e49.png)
[対応している出力フォーマット](https://graphviz.org/docs/outputs/)

・**awscli**+**シェルスク**＋**Go言語**＋Graphvizと連携して生成するので**自動生成**が出来る。つまり**バッチ処理、リアルタイム更新**が出来る！

どういうことだってばよ・・？

[GraphVizをECSでHTTPサービス化して社内どこからでも使えるようにした話](https://blog.3qe.us/entry/2020/03/04/090000)
↑こういう世界です。素敵！！

・Go言語だから**ワンバイナリで環境構築が要らないという**大正義＆大勝利

# で？

小分けにプロダクト／コンポーネント単位で作って可視化・管理していきまっしょ！という事です。

- **サブネットの種類**
同じサブネットに所属する事で外部との通信が出来るか、それは片方向か、出来ないかを判別

- **ゲートウェイやサブネットをまたいだ通信の向き**
ハックされたのと逆算でGatewayまでのルートを追う事でどのサーバーを跨いできたかを判定できる

- **セキュリティグループ**
セキュリティグループ内で共通の通信が出来ることから、どのようなプロトコル／ポートを使った通信かを調査できる。

これにより、

    情報の漏洩
        xxがハックされるとどのルートでアクセスされるので何が漏れるか
    情報の改ざん
        xxがハックされるとどのルートでアクセスされるので何が改ざんされるか
    業務の停止
        xxがハックされ止まると、システム的に何が起こるか

この視点で可視化出来ました。めでたしめでたし

# 続編を期待

　このツールを使う欠点として横断的な見方が難しいというのがある。最終防御壁がセキュリティグループなので、セキュリティグループが攻略された場合は全構成をチェックしていかないとならない。
~~けど、どうせ全構成チェックが起きる規模のハッキングなので手間としては大して変わらないと思う。~~

　あとセキュリティグループ名から実際に空いてるセグメント、ポート番号を直観的に見れないよねってのもある。こっちは図に直接書くと文字が多すぎて見辛くなるので、そこまではやってないって意図がある。命名規則とかでカバーするのがよろし、と思ってる
ONLYOFFICEで使う日本語フォント(RHEL系)

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

# 0. はじめに

弊社スタイルズは、ONLYOFFICEの販売代理店です。主にNextcloudとのインテグレーションで活用しています。
日本語フォントについてRHEL系のパッケージでインストールできるものを調べました。

# 1. RHELの日本語フォントパッケージ

yum searchコマンドで検索してみたところ以下の日本語パッケージが引っかかりました。

```
$ sudo yum search japan font
adobe-source-han-sans-jp-fonts.noarch : Adobe OpenType Pan-CJK font family for Japanese
google-noto-sans-cjk-jp-fonts.noarch : Japanese Multilingual Sans OTF font files for google-noto-cjk-fonts
vlgothic-fonts.noarch : Japanese TrueType font
vlgothic-p-fonts.noarch : Proportional Japanese TrueType font
texlive-wadalab.noarch : Wadalab (Japanese) font packages
```

一つずつインストールして、ONLYOFFICEで表示してみます

# 2. vlgothic-fonts.noarch

Vine Linuxの歴史の古い日本語フォントです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/691c8cdf-754b-64ce-f2c9-9d2101e6e480.png)

# 3. vlgothic-p-fonts-20141206-15.el8.1.noarch

こちらもVine Linuxを発祥とするプロポーショナルな日本語フォントです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/f8453639-1e87-b290-dc15-e4910cd2dc52.png)

# 4. google-noto-sans-cjk-jp-fonts.noarch

GoogleとAdobeが開発した日本語フォントのGoogleパッケージ版です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/7a44222a-85e1-9580-23ce-7aaeac26af36.png)

# 5. adobe-source-han-sans-jp-fonts-2.002-1.el8.noarch

こちらもGoogleとAdobeが開発した日本語フォントのAdobeパッケージ版です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/d3530f9f-fcb9-825b-b397-9b3bb1c88323.png)

元は同じハズなのですが、Adobeのフォントの名前の方が私は好きですね。
Pandas DataFrameをMATLABのTableに変換する

Pandas DataFrameオブジェクトが入っているpickleファイルをMATLABで読み込み、Table型に変換する処理を作成する際に若干詰まったためメモとして残しておきます。MATLABのバージョンによってやり方が多少変わります。

### MATLAB R2021bでやる場合
非常にシンプルに行うことができます。

```matlab
fid = py.open('{ファイル名}.pkl','rb');
data = py.pickle.load(fid);
t = double(data.values);
t = array2table(t);
```

### MATLAB R2019bでやる場合
R2019bだと上記のコードではエラーが発生します。そのため次の関数を作成します。
この関数はNumpy配列をMATLABの2次元配列に変換するものになります。

```matlab
function mat = np2mat(npary)

    % convert python (Numpy) ndarray to matlab
    sh = double(py.array.array('d',npary.shape));
    npary2 = double(py.array.array('d',py.numpy.nditer(npary)));
    mat = reshape(npary2,fliplr(sh))';  % matlab 2d array 

end
```
下記のgithubのコードをそのまま持ってきました。
https://gist.github.com/samtx/108e88bbfcdc3b4fbe9073b470e6668e

そして以下のコードを実行すればtableになります。作成したnp2mat関数で配列に変換後、MATLABのarray2tableで配列からtableにします。

```matlab
fid = py.open('{ファイル名}.pkl','rb');
data =py.pickle.load(fid);

t = np2mat(data.values);
t = array2table(t);
```

### 終わりに
MATLABは大学の統計学か機械学習の授業で軽く触れた程度でしたが、文法がPythonとそこそこ似ているため使いやすかったです。しかしあまり文献が多くなさそうなのが難点だと思いました。
IBMCloud 機器オーダ後Gatewayに通信できない時

#ネットワークのgatewayに通信できない場合
最近、新規機器の購入や、Secondaryセグメントの購入後
割り当てられたネットワークのgatewayへの通信ができない場合が多い
この場合、IBMCloud側の問題である事が多い。

購入後のなんらかの自動プロセスがうまく機能しておらず、<font color="red">サポートに連絡して設定を修正してもらう事で解決</font color>する。
２つの平方数の和の組合せを求める（ヤコビの二平方定理）

### 二平方の和の個数

今回は[ヤコビの二平方定理 (Wiki)](https://ja.wikipedia.org/wiki/%E3%83%A4%E3%82%B3%E3%83%93%E3%81%AE%E4%BA%8C%E5%B9%B3%E6%96%B9%E5%AE%9A%E7%90%86)という面白い定理を見つけたので、これを使うプログラムを書いてみました。以下のような問題を考えてみます。

**問題：　$N=10^{12}$、$a^2+b^2=c^f (a,b,cは自然数,0<a<b, f\geq 3,\space c^f<N)$となる(a,b,c)の数を数えよ**


これを素直にインプリすると、以下のようになりますが、Python(Google Colab)では約45分かかります。

```python
from time import time

def count2sq(f,N):
  ret = 0
  for c in itertools.count(2):
    c_f = c**f
    if c_f > N: break
    for b in itertools.count(2):
      b2 = b**2
      if (1+b2) > c_f: break
      a2 = (c_f - b2)
      if a2 >= b2: continue
      a = int(a2**(1/2)+0.00001)
      if (a**2 == a2):
        ret += 1
  return ret

N, count = 10**12, 0
start = time()
for f in itertools.count(3):
  if 2**f > N: break
  count += count2sq(f,N)
print(f"**** count = {count},  {time() - start:.2f}sec ****")
# **** count = 15992,  2697.05sec ****
```

### ヤコビの二平方定理 

日本語版の[ヤコビの二平方定理 (Wiki)](https://ja.wikipedia.org/wiki/%E3%83%A4%E3%82%B3%E3%83%93%E3%81%AE%E4%BA%8C%E5%B9%B3%E6%96%B9%E5%AE%9A%E7%90%86)の説明だと分かりづらいので英語版の[Sum of squares function](https://en.wikipedia.org/wiki/Sum_of_squares_function)の$k=2$の説明を引用します。

```math
\begin{align}
&a^2+b^2=nを満たす整数のペア(a,b)の個数をr_2(n)を求める \\ \\
&nの素因数分解が以下のように表されるとすると、\\
&\space n=2^gp^{f_1}_1p^{f_2}_2\cdots q^{h_1}_1q^{h_2}_2\cdots\\
&\ \ \ \ ここで \\
&\ \ \ \ p_i\equiv 1\space \pmod 4\\
&\ \ \ \ q_i\equiv 3\space \pmod 4 \\
&r_2(n)は以下の式で求められます\\
\end{align}
```
```math 
\begin{eqnarray}
r_2(n)=\left\{ \begin{array}{ll}
4(f_1+1)(f_2+1)\cdots &(h_1,h_2,\cdotsがすべて偶数の時）\\
0 & (h_iの一つでも奇数の時)
\end{array} \right.
\end{eqnarray}
```

要は$n$の素因数を求めてmod 4が１になるものの数を数えればいいということになります。元の問題は$n=c^f$なので、$c$の素因数分解をして各々$f$倍すれば良いということでヤコビの二平方定理が効率よく利用できます。
ただしこの$r_2(n)$は$a,b$の各々の$\pm$と$a,b$の入れ替えを含んでいるので問題の数を求めるには$4\times 2=8$で割る必要があります。

Pythonでインプリメントすると以下のようになり、無事、同じ答えが0.10secで求まりました。

```python
from sympy import factorint
import itertools
from time import time

def sumE2f(N, f):
  sum = 0
  for c in itertools.count(2):
    c_f = c**f 
    if c_f > N: break
    cfct = factorint(c)
    rn, p3 = 4, 0
    for p in cfct.keys():
      cfp = cfct[p]*f
      if p%4==3 and cfp % 2 == 1: rn = 0
      if p%4==1: rn *= (cfp+1)
    if rn > 4:
      sum += rn // 8
  return sum

start = time()
np, sum2 = 12, 0
N = 10**np
for f in itertools.count(3):
  if 2**f > N: break
  sm = sumE2f(N,f)
  if sm > 0:
  sum2 += sm 

print(f"**** count = {sum2},  {time() - start:.2f}sec ****")
#**** count = 15992,  0.10sec ****
```
このアルゴリズムはEuler Project: Problem 678等を解くのに役に立ちます。
IBM Certified Technical Advocate - Cloud v3 を取得しました

# はじめに

業務で[Red Hat OpenShift on IBM Cloud](https://www.ibm.com/cloud/openshift)を触る機会があったので、2021年11月29日にIBM Cloudに関する技術職向けの入門資格である[IBM Certified Technical Advocate - Cloud v3](https://www.ibm.com/training/certification/C0002202)を取得しました。

:::note warn
下記は受験時の情報です。必ず最新の情報を確認してください。
:::

## IBM Certified Technical Advocate - Cloud v3 とは

紛らわしいですが、`Exam C1000-125: IBM Cloud Technical Advocate v3` に合格すると取得できます。費用は20000円（税別）、試験時間は90分、選択式で64問中42問当たれば合格というものでした。実際のところ、考えてわかるわけでもないので30分少々で終了し86%で合格しました。

試験の大まかな内容は公表されていて、以下の通りでした。

| セクション | 内容 | 出題比率 |
| :--------| :---- | :------ |
| 1 | Introduction to Cloud | 10 |
| 2 | IBM Cloud Essentials  | 13 |
| 3 | Compute Options       | 13 |
| 4 | Storage               | 10  |
| 5 | Networking            | 11 |
| 6 | Services              | 14 |
| 7 | Security              | 13 |
| 8 | Building Cloud Native and Multicloud Solutions | 16 |  

IBM Cloudの概要に加えて、IaaSとクラウドネイティブの知識が問われています。ことさらCloud Native and Multicloud Solutionが別セクションになっているあたり、IBMらしいと思いました。

## 受験方法

[IBM Certified Technical Advocate - Cloud v3](https://www.ibm.com/training/certification/C0002202)の`Register for exam`をクリックするとベンダー資格受験者にはおなじみのPearson VUEに飛ぶので、いつも通り受験しました。

## 学習方法

[Learning Path](https://www.ibm.com/training/path/ibmcloudtechnicaladvocate)が公開されていました。特に[IBM Cloud Essentials V3](https://cognitiveclass.ai/courses/ibm-cloud-essentials)はIBM Cloudを広く知ることができ有益でした。

また、模擬試験のようなものとして`A1000-125: Assessment: IBM Cloud Technical Advocate v3`があり、3000円（税別）でした。[IBM Certified Technical Advocate - Cloud v3](https://www.ibm.com/training/certification/C0002202)の右のほうにある`Assessment Exam`リンクをクリックしてPearson VUEに飛んで受験できます。受験必須ではありませんが、感触を得るのによかったです。

## 合格通知

受験直後にPearson VUEのサイトでスコアレポートを参照でき、合否がわかりました。正式にはメールで送られることになっており、私の場合は2営業日後に送られてきました。
マテリアルズ・インフォマティクスの概要と最近の研究事例

こんにちは。スキルアップAI編集部です。

現在、X線吸収スペクトルの測定結果を解釈する際には、第一原理計算という計算手法が多く用いられています。ただ第一原理計算は、とても複雑で計算に膨大な時間がかかります。もし第一原理計算を用いずに、X線吸収スペクトルの測定結果から化合物構造の性質を直接推定できるようになるとすれば、解析時間を大きく短縮することが可能となります。これを実現するための取り組みとして、近年、マテリアルズ・インフォマティクス（MI）が注目されています。
そこで本ブログでは、MIの概要と最近の研究事例についてご紹介します。

<目次>
1.マテリアルズ・インフォマティクス（MI）の概要
2.最近の研究事例
3.おわりに
4.マテリアリズインフォマティクス関連ブログ
5.参考文献

# 1.マテリアルズ・インフォマティクス（MI）の概要
マテリアルズ・インフォマティクス（MI）とは、機械学習やデータマイニングなどの情報科学の技術を用いて、材料開発の効率化を図る分野や技術のことです。従来型開発とMI型開発の比較を図1に示します。従来型の材料開発では、主に先行研究や研究者の経験を頼りに材料設計を行っていました。そのため、いくつもの候補材料に対して何度もシミュレーションや実験を行う必要があり、開発に多くの時間が費やされていました。
一方で、MI型材料開発では、情報科学の技術を用いることによって目標性能を満たす材料を効率的に探索します。これによって、開発期間を大幅に短縮することができます。

<img width="700" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/aa713365-72b0-8c4d-626e-4e6d36fbd78b.png">
図1. 従来型開発とMI型開発の比較

# 2.最近の研究事例
MIを使った最近の研究事例として、ここでは科学技術振興機構（JST）による決定木を用いたスピン熱電材料開発をご紹介します。
スピン熱電材料とは、スピン（磁石）の力を使った熱電材料のことを言います。このスピン熱電材料は、結晶構造がとても複雑であり、物理化学的な性質が明らかになっていません。そこで、この課題を解決するために、機械学習が用いられました。用いられた機械学習手法は、決定木です。決定木によって、結晶格子ミスマッチ、希土類元素の分子量、スピン磁気モーメント、軌道磁気モーメントから熱起電力を予測するモデルを構築しました。

図2に決定木による予測結果を示します。この予測結果から次の3つのことが明らかとなりました。

- **SR**（スピン磁気モーメント）が小さいほど熱起電力が大きい
- **nR**（希土類元素の分子量）が大きいほど熱起電力が大きい
- **∆𝑎**（結晶格子ミスマッチ）が小さいほど熱起電力が大きい
<img width="700" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/b36d2e63-0004-d168-5a83-4f2ab85b4b1d.png">
図2. 決定木の予測結果
（参考文献[2]より引用）

この研究事例のように、MIを用いると、化学や物理学ではまだ解明できていないことについての知見を得ることができます。

# 3.おわりに
モビリティの進化や5Gの進展など我々を取り巻くテクノロジー環境が大きく変化していく中、これらを加速させることができる新材料へのニーズが高まっています。各国の素材メーカーではすでに激しい開発競争が繰り広げられており、これからますますMIに対しての注目が高まることでしょう。

スキルアップAIでは、「[マテリアルズ・インフォマティクス（MI）講座](https://bit.ly/31ds9gK)」を開講いたしました。本講座では、MIの現在の動向やMIでよく用いられる主要な解析手法を学ぶことができます。MIにご興味のある方は、ぜひ受講をご検討ください。

# 4.マテリアリズインフォマティクス関連ブログ
[マテリアルズインフォマティクス ことはじめ -化学構造生成器の紹介-](https://qiita.com/skillup_ai/items/30f4d184859d4b18829e)

# 5.参考文献
[1] 金子弘昌：[Pythonで学ぶ実験計画法入門](https://amzn.to/3EiQm3i)、講談社（2021）
[2] Y. Iwasaki et al., Machine-learning guided discovery of a new thermoelectric material, Sci. Rep., 9, 2751 (2019)

# 25卒向け！AIエンジニアになるための長期インターンプログラム参加者募集中！
25卒学生向けに、AIの基礎を学びながら就活も一括サポートする無料カリキュラムを提供しています。
修了するとE資格の受験資格も獲得できるプログラムとなっています！

<img width="700" alt="長期インターン" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/bfce4c26-1ebe-c54d-bacb-e804048a7a08.png">

**特長①AIエンジニアやデータサイエンティストの基礎が身に付く**
AIジェネラリスト基礎講座や機械学習のためのPython入門講座など、市場価値向上のための基礎を習得。

**特長②AI・データ分析領域の優良求人を紹介**
非公開求人や選考直結型インターンをご紹介し、早期内定の獲得をサポート。

**特長③長期インターンプログラム専用の学生コミュニティ参加可**
学生同士で就活情報をシェアしたり、学習を進めるうえでアドバイスをしあったりできるコミュニティに参加可能。

＞＞[長期インターン詳細](https://bit.ly/3pXW5JM)

☆☆☆
スキルアップAIのメールマガジンでは会社のお知らせや講座に関するお得な情報を配信しています。
配信を希望される方は[こちら](https://share.hsforms.com/1_XlReV-4Te-zcxCl9lhffA2mtef)

また、SNSでも様々なコンテンツをお届けしています。興味を持った方は是非チェックしてください♪
Twitterは[こちら](https://twitter.com/SkillupAi)
Facebookは[こちら](https://www.facebook.com/skillupai)
LinkedInは[こちら](https://www.linkedin.com/company/skillup-ai)
ニューモーフィズムを実装してみた

![neumorphism.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/877812/edaf0ab0-7b15-4283-64f0-5380bce24129.png)

### 言語
 - html
 - css

### 用いたツール
 - neumorphism.io

https://neumorphism.io/#e0e0e0

### 実装例

以下の実装で上記の様に実装できます。

```sample.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel="stylesheet">
    <link rel="stylesheet" href="sample.css">
</head>
<body>
    <div class = "contents">
        <div class="button1">
            <a class="icon" href="#">
                <i class="fas fa-user-alt"></i>
            </a>
        </div>
        <div class="button2">
            <a class="icon" href="#">
                <i class="fas fa-search"></i>
            </a>
        </div>
        <div class="button3">
            <a class="icon" href="#">
                <i class="fas fa-heart" style="color: #902727;"></i>
            </a>
        </div>
        <div class="button4">
            <a class="icon" href="#">
                <i class="fas fa-home"></i>
            </a>
        </div>
    </div>
</body>
</html>
```


```sample.css
body{
    background: #ebebeb;
}
.icon{
    display: block;
    font-size: 2em;
    margin-top: 25px;
    align-items: center;   
    color: rgb(88, 88, 88);
}
.contents{
    text-align: center;

}
.button1{
    width: 100px;
    height: 100px;
    margin: 10px;
    display: inline-block;
    border-radius: 20px;
    background: #ebebeb;
    box-shadow:  24px 24px 20px #d1d1d1,
                 -24px -24px 20px #ffffff;
}
.button2{
    width: 100px;
    height: 100px;
    margin: 10px;
    display: inline-block;
    border-radius: 50px;
    background: linear-gradient(145deg, #d4d4d4, #fbfbfb);
    box-shadow:  24px 24px 20px #d1d1d1,
                 -24px -24px 20px #ffffff;
}
.button3{
    width: 100px;
    height: 100px;
    margin: 10px;
    display: inline-block;
    border-radius: 20px;
    background: linear-gradient(145deg, #fbfbfb, #d4d4d4);
    box-shadow:  24px 24px 20px #d1d1d1,
                 -24px -24px 20px #ffffff;
}
.button4{
    width: 100px;
    height: 100px;
    margin: 10px;
    display: inline-block;
    border-radius: 50px;
    background: #ebebeb;
    box-shadow: inset 24px 24px 20px #d1d1d1,
                inset -24px -24px 20px #ffffff;
}
```
[CentOS7]Apacheの古いバージョンの導入とデーモン化

:::note info
この記事のあとに、PHPと連携する際に躓いた点を新しく記事にしました。
参考にしてみてください。
:::

[リンク](https://qiita.com/Marny/items/b51c4968d949eba252a4)
# はじめに

ども。僕です。

最近、脆弱性のある環境を作成するさい、Apache+PHPで脆弱性のあるWEBページを構築する機会がありました。
そこで、Apacheの脆弱性である[CVE-2021-41773, CVE-2021-42013](https://www.ipa.go.jp/security/ciadr/vul/alert20211006.html)を使ってみたく、古いApacheのインストールを行いました。

古いバージョンをピンポイントで導入するのと、そのデーモン化について調べたので、記していきます。

今回の環境↓

- CentOS 7
- Apache 2.4.49


# Apacheの古いバージョンのインストール

古いバージョンのインストールなんてできないので、リポジトリから`curl`してきます。

```
# curl -OL http://archive.apache.org/dist/httpd/httpd-2.4.49.tar.gz
# tar -xvzf httpd-2.4.49.tar.gz
# yum install -y libtool apr-devel apr-util apr-util-devel pcre pcre-devel
# cd httpd-2.4.49
# ./configure
# make
# make install
// /usr/localにインストールされます

// インストール確認
# cd /usr/local/apache2/bin
# ./httpd -v
Server version: Apache/2.4.49 (Unix)
```

`make install`をすると/usr/local/apache2ディレクトリができて、そこで設定していきます。

# Apacheのデーモン化
このままだといちいちファイル指定して起動しないといけないので、デーモン化して`systemctl`で制御しましょう。

```
// 新規作成
# vim /etc/systemd/system/httpd.service
[Unit]
Description=The Apache 2.4.49 HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
EnvironmentFile=/usr/local/apache2/conf/httpd.conf
ExecStart=/usr/local/apache2/bin/apachectl -k start
ExecReload=/usr/local/apache2/bin/apachectl -k graceful
ExecStop=/usr/local/apache2/bin/apachectl -k stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# systemctl start httpd.service
# systemctl status httpd.service
// 起動していることを確認する

```

以上で古いバージョンのApacheのインストールが完了します。

# 参考文献

[CentOS7にapache2.4.46をソースからインストール](https://qiita.com/print_hello/items/9a873f0474b48017e462)

[【CentOS7】httpd 2.2 (Apache)をコンパイルからインストールする手順](https://go-journey.club/archives/7659)