OmniAICreator/Qiita-1.07M huggingface dataset:
JUnitのテストで嵌ったパス指定

# はじめに

今回、Javaでの開発中にテストを行うため、テストクラスを作成しました。
そして、`JUnitCore`の実行を行う際にパス指定を行うのですが、記述方法で躓いたのでまとめておこうと思います。

**~注意~**
開発環境や Shell などの違いで予想と異なる結果の場合があるかもしれません。
下記環境を参照.

# 環境
* macOS 11.0.1
* JDK 11.0.10
* JUnit 4.13.2
* vscode 1.54.3

# 前提条件

Javaプロジェクトの構成
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091516/b6d4c251-aa49-8716-76af-a7d5353267f4.png" width="320px">

Javaプロジェクトの src 直下に移動
注意:上記のプロジェクト構成の場合

```
cd ~/Workspace/Java/Project/src 
```

# 問題点

下記を実行するとエラーが出力される。

```
java -cp ../lib/junit-4.13.2.jar:../lib/hamcrest-core-1.3.jar: org.junit.runner.JUnitCore com/test/MainTest
```

コンパイルの段階ではパスは通っていたのだけれど...
詳しい原因はわからないが、おそらく、`Could not find class [com/test/MainTest]` が問題だと思われる。

```
JUnit version 4.13.2
.E
Time: 0.002
There was 1 failure:
1) initializationError(org.junit.runner.JUnitCommandLineParseResult)
java.lang.IllegalArgumentException: Could not find class [com/test/MainTest]
        at org.junit.runner.JUnitCommandLineParseResult.parseParameters(JUnitCommandLineParseResult.java:100)
        at org.junit.runner.JUnitCommandLineParseResult.parseArgs(JUnitCommandLineParseResult.java:50)
        at org.junit.runner.JUnitCommandLineParseResult.parse(JUnitCommandLineParseResult.java:44)
        at org.junit.runner.JUnitCore.runMain(JUnitCore.java:72)
        at org.junit.runner.JUnitCore.main(JUnitCore.java:36)
Caused by: java.lang.ClassNotFoundException: com/test/MainTest
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:398)
        at org.junit.internal.Classes.getClass(Classes.java:42)
        at org.junit.internal.Classes.getClass(Classes.java:27)
        at org.junit.runner.JUnitCommandLineParseResult.parseParameters(JUnitCommandLineParseResult.java:98)
        ... 4 more

FAILURES!!!
Tests run: 1,  Failures: 1
```

# 解決方法

`MainTest`クラスをパスを指定する際、以下のように`/`で区切ることもできるが、
`JUnitCore` の実行を行う際は、`com.test.MainTest` のように`.`で区切る必要がある。

また、`junit-4.13.2.jar`と`hamcrest-core-1.3.jar`の間の`:`の左右にスペースはいれてはいけない。
もし入れていた場合はエラーとなるためエラーが出た場合は確認してほしい。

* 失敗例

```
java -cp ../lib/junit-4.13.2.jar:../lib/hamcrest-core-1.3.jar: org.junit.runner.JUnitCore com/test/MainTest
```

* 成功例

```
java -cp ../lib/junit-4.13.2.jar:../lib/hamcrest-core-1.3.jar: org.junit.runner.JUnitCore com.test.MainTest
```

成功例では以下のように示される。

```
JUnit version 4.13.2
.
Time: 0.007

OK (1 test)
```

`JUnitCore` の実行時に`.jar`を分けて記述したため冗長になったが、下記のようにワイルドカードを使うことで、簡略化して記述できる。

```
java -cp ../lib/*.jar: org.junit.runner.JUnitCore com.test.MainTest
```

# さいごに

今回は意外なところで嵌ってしまったので、よい勉強になりました。
ネット上で検索しても解決方法がなかなか見つからなかったので、苦労しました。
けれど、同じようなことで解決できていない方の助けになれば幸いです。

最近は、vscode を使って Java 開発をしているのですが、Eclipse などの IDE と違って細かな違いに慣れるのに苦労しています。
開発環境用MySQL+Admin(2021年睦月)

# 初めに

今回は、docker-composeでDB環境(MySQL + PHP MyAdmin)を整える。

## MySQL (MariaDB)
### データディレクトリ
PowerShellにてディレクトリを作成。

```powershell
mkdir c:\home\develop\local-db
cd c:\home\develop\localdb
mkdir var_lib_mysql_dev
```

### Docker Compose 定義
以下のYAMLファイルを「mysql-admin.yaml」という名前で作成する。
「sakura mysql-admin.yaml」
改行コードはLFとする。

```yaml:mysql-admin.yaml
version: "3.2"
# docker-compose -f docker-compose.yml up -d

services:
  lcl-db:
    image: mysql:5.7
    hostname: 'lcl-db'
    restart: always
    environment:
      MYSQL_DATABASE: mydb
      MYSQL_USER: admin
      MYSQL_PASSWORD: admin
      MYSQL_ROOT_PASSWORD: mypassword
    ports:
    - "13306:3306"
    # --- WSL2 ---
    volumes:
    - "./var_lib_mysql_lcl:/var/lib/mysql"

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    hostname: 'phpmyadmin'
    environment:
      PMA_HOST: lcl-db
      PMA_PORT: 3306
      MYSQL_ROOT_PASSWORD: mypassword
      MYSQL_PASSWORD: admin
    ports:
    - 0.0.0.0:18080:80
    # depends_on:
    # - lcl-db
```

### 起動
PowerShell または bash から実行する。
 
```powershell
docker-compose -f mysql-admin.yaml up -d
```

### 確認
PowerShell または bash から以下のようにして確認。

```powershell
docker-compose -f mysql-admin.yaml ps
docker ps
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/726f6062-0e4a-dac8-dea6-be671b536c0f.png)

ブラウザでPHPMyAdminを確認。
http://localhost:18080/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/103deef0-bfab-8377-293b-9c1033f8cbb0.png)
素のMqSQL
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/7409d290-09d2-5394-415b-a5d3b78bd96f.png)


### 停止
PowerShell または bash から以下のようにして停止。

```powershell
docker-compose -f mysql-admin.yaml down
docker ps
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/f94c3092-63cf-629b-2692-d7f7aca0e6b4.png)

## コードは以下のリポジトリにある。

https://github.com/korabo/docker-components.git


親記事：[WSL2とVSCで作るWindowsでのDocker内開発環境(2021年睦月)](https://qiita.com/CinTAKE/items/ee348acec54195ef5bd1)
Tailwindcssのレスポンシブで「min-width」から「max-width」へと変える方法

最近僕が一押ししているTailwindcss

これ本当に素晴らしいです。

圧倒的にCSSの記述量が減りました。

Tailwindcssをご存じでない方は僕が書いた記事で良ければご覧ください。

・[もう生のCSSを書くのはやめようぜ。。。TailwindcssでCSS記述時間を圧倒的に減らす方法](https://qiita.com/akki-memo/items/5768b02971f877462a60)

いつも通りTailwindcssでCSSを記述していたところ思わぬ壁にぶち当たりました。

```javascript
// 省略
module.exports = {
  theme: {
    screens: {
      sm: '560px',
      md: '768px',
      tb: '960px'
    },
  },
}
// 省略
```

このように``screens``プロパティを定義し、いざレスポンシブ対応させようとすると、Tailwindcssは標準では``@media and (min-width: ***) {}``となり、``min-width``の設定になっています。

僕は最初にデスクトップ画面用のレイアウトを行い、その後かタブレット、スマホ画面へのレスポンシブ対応を行うので``max-width``の方がやりやすいんですよね。

とまぁ安定のネットサーフィンを行っていると、公式ドキュメントに書いてありました。

結論から言うと、下記のように設定してあげれば``max-width``でのブレイクポイントに設定される。

```javascript
// 省略
module.exports = {
  theme: {
    screens: {
      sm: {'max': '560px'},
      md: {'max': '768px'},
      tb: {'max': '960px'}
    },
  },
}
// 省略
```

後はクラス指定でレスポンシブ対応を行えば完璧。

```html
<!-- 480px未満でflex-wrapが適用される -->
<div class="sm:flex-wrap"></div>
```

以上、「Tailwindcssのレスポンシブで「min-width」から「max-width」へと変える方法」でした！

Thank you for reading
web系自社開発企業に求められるスキルレベル(新卒採用)

## はじめに
- 本記事は新卒でweb系自社開発企業に就職する際に求められるスキルについてpaizaのランク別にまとめたものになります。空白欄もあるけど許して~。(2021/4/1時点のpaizaの新卒求人をもとに作成)
- 対象者 : 新卒でwebエンジニアを目指す人

## 企業リスト

|求人のランク|企業名|主要サービス|
|---------|------|------|
|    S    |アカツキ| 空白|
|    S    |mixi| mixi |
|    S    |チームラボ| 空白|
|    A    |エブリー| delish kitchen|
|    A    |ロコガイド| トクバイ|
|    A    |ネクストビート| KIDSNA(子育て支援アプリ)|
|    A    |freee| 会計ソフト|
|    A    |モバイルファクトリー|空白|
|    A    |ナビタイムジャパン|交通系アプリ|
|    B    |DeNA|空白|
|    B    |チームラボ|空白|
|    B    |LIFUL|不動産ポータル|
|    B    |ラクーンホールディングス|空白|
|    B    |レバレジーズ|teratail|
|    B    |コネヒト株式会社| ママリ(お母さん向けサービス)|
|    C    |ディップ| バイトル,はたらこねっと|
|    C    |EPARK グルメ| グルメサイト|
|    C    |GA technologies| 不動産×AI|
|    D    |カカクコム| 食べログ,価格ドットコム|
Salome_Meca-2019 のインストール方法（Ubuntu20.04）

Salome_Meca-2019 を VirtualBox 上の Ubuntu20.04 にインストールする際に躓いたので、その解決方法と設定方法のメモを残します。

参考にしたのは以下のページ
- [Procedure to install salome_meca 2019 on Ubuntu 20.04](https://www.code-aster.org/forum2/viewtopic.php?id=24883)

作業環境は以下の通り。
- Ubuntu20.04LTS（VirtualBox）
- Python3.8.5

## 1. 事前準備

事前に必要なライブラリ類をインストールしておきます。

```
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install wget net-tools python3-dev python3-numpy tcl tk bison flex
$ sudo apt install liblapack-dev libblas-dev libopenblas-dev libopenblas-base
$ sudo apt install python2-minimal
```

## 2. Download & Install

~/softwareにダウンロード後、展開してインストールします。

```
$ mkdir ~/software
$ cd ~/software
$ wget http://code-aster.org/FICHIERS/salome_meca-2019.0.3-1-universal.tgz
$ tar xvf salome_meca-2019.0.3-1-universal.tgz
$ ./salome_meca-2019.0.3-1-universal.run
```

インストール先と言語設定を聞かれるので、好きな場所と言語を決定します。

## 起動できない
本来ならここまででインストール完了となるはずですが、アイコンがアプリ一覧に出てきません。
さらにターミナルモードで起動しようとしても失敗します。

## 3. インストール後の設定

~/salome_meca/V2019.0.3_universal の create_appli.sh を編集して，4か所 の`python` （105，129，131，263行目）という記述を `python2` に変更した後、以下を実行します。

```
$ cd salome_meca/V2019.0.3_universal
$ ./create_appli.sh
```

これで appli_V2019.0.3_universal の中身が作成され、アプリケーションのアイコンも出てきます。


さらに、libffi6_3 をインストールします。

```
$ wget -O $HOME/Downloads/libffi6_3.2.1-9_amd64.deb http://ftp.br.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-9_amd64.deb
$ sudo dpkg -i $HOME/Downloads/libffi6_3.2.1-9_amd64.deb
```

libffi.so.6 のシンボリックリンクを作成

```
$ cd ~/salome_meca/V2019.0.3_universal/prerequisites/debianForSalome/lib
$ ln -s /usr/lib/x86_64-linux-gnu/libffi.so.6 libffi.so.6
```

~/salome_meca/V2019.0.3_universal/prerequisites/debianForSalome/lib の libstdc++.so* の名前を変更します。

```bash
$ mv libstdc++.so _libstdc++.so
$ mv libstdc++.so.6 _libstdc++.so.6
$ mv libstdc++.so.6.0 _libstdc++.so.6.0
$ mv libstdc++.so.6.0.22 _libstdc++.so.6.0.22
```

## 4. PATHを通す

最後にPATHを通して完了です。

```~/.bashrc
PATH="$PATH:/$HOME/salome_meca/appli_V2019.0.3_universal"
```
【Microsoft Azure】AWS脳の人がAzureをはじめてみた

# はじめに

この記事では Amazon Web Services の SAA を取得した一般男性が
Microsoft Azure のあんなことやこんなことについて
AWS の情報を交えながら用語をまとめた記事です。

ベストプラクティスや間違いがあれば
書き直していく予定です。

## 参考資料

[Microsoft Azure 公式ドキュメント](https://docs.microsoft.com/ja-jp/azure/?product=featured)

[AWS サービスと Azure サービスの比較](https://docs.microsoft.com/ja-jp/azure/architecture/aws-professional/services)

[Azure 合格教本](https://www.amazon.co.jp/dp/B0872LVYD6/ref=cm_sw_r_tw_dp_91AD3H6C7PHGCMRV75WN)

## Microsoft Azure とは

Microsoft のクラウドコンピューティングサービス
アズレではなく「アジュール」と読む

2010 年に提供を開始しているサービスで当時は「Windows Azure」と呼ばれていたそうで
現在の名前で親しまれるようになったのは 2014 年頃。

## とにかく用語だらけ

なんだけど、AWS を知っている人ならば
すぐにキャッチアップできるかも。
ということで用語解説いってみよう

## 用語解説

### リージョン

世界中に分散されたデータセンターの地理的なグループのことを指す。
ここは AWS と同じ意味合い

### 可用性ゾーン

AWS でいうところのアベイラビリティゾーン
めっちゃ距離をおいたファシリティを使うゾーンのこと

※ここでいうファシリティとは：ネットワークや電源設備のことをいう

### 可用性セット

AWS にはない概念？
可用性ゾーンをさらに分割したセットのことを指す。

AWS では〇〇の地域の区画 A にある設備を使うという指定であるのに対して
Azure では〇〇の地域の区画 A にある設備の ×× サーバを利用するといった細かい指定が可能

つまり、サーバーラック単位で保護される単位のこと

### Azure 仮想マシン

とりわけ、Azure では
Hyper-V 上で動く仮想コンピュータのことを仮想マシンと呼ぶ。

AWS では仮想サーバ、つまりはざっくり言うと EC2 みたいなやつ

### サービス管理者

AWS では root 権限と呼ばれるモノを持つアカウント
つまり、常用してはいけないなんでもできるアカウント(ん？いまなんでもって)

普段は後述の RBAC を使う。

### ロールベースアクセスコントロール(RBAC)

AWS でいうところの IAM に相当する仕組み

つまり、最小限のサブスクリプション、リソースグループ、リソースの権限を
ユーザに割り当てることで最小権限の原則を実現する。

RBAC を利用する場合は Azure Resource Manager(ARM) を使う

### Azure Resource Manager(ARM)

これは AWS では何とも例えにくい
一応、Microsoft のドキュメントでは

> Azure のデプロイおよび管理サービスです。
> お使いの Azure アカウント内のリソースを作成、更新、および削除できる管理レイヤーを提供します。

[Azure Resource Manager(ARM)](https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/management/overview)

公式の比較ではどうやらCloudFormationの位置付け

### Azure Resource Manager テンプレート(ARM テンプレート)

AWS でいうところの Cloud Formation テンプレート的なやつ。
つまり、IaC

[Azure Resource Manager テンプレート(ARM テンプレート)]
(https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/templates/overview)

json で書けます。
さらに、 Bicep という言語で書ける。(なんじゃそりゃ)

あれ？これが Cloud Formation テンプレートに例えられるなら
ARM は Cloud Formation か？

少なくとも AWS マネジメントコンソールに匹敵するモノではない。
※Azure の管理コンソールのことを Azure 管理ポータルと言います。

### Azure サブスクリプション

リソースを束ねる単位のこと、契約
全てのリソースはこの「Azure サブスクリプション」にまとめられる。

AWS のようにアカウントがリソースを管理しているのではなく
アカウントが管理するサブスクリプションでリソースを管理している。

### リソース

読んで字のごとく
Azure 内で使われている設備のことを指す。
AWS でも同じ

### リソースグループ

リソースを束ねる単位のこと
AWS にも似たようなモノがある。

プレイスメントグループとか AutoScalingGroup とかとかとか

### ネットワークセキュリティグループ(NSG)

AWS で言うところのセキュリティグループにあたる。

対象は仮想マシンのインターフェイスだけなくサブネットにも有効であり
ステートフルなファイアウォールで同じリージョン内なら再利用可能

### アプリケーションセキュリティグループ(ASG)

NSG を束ねることができる。
セキュリティグループのグループみたいな感じ

### Azure Firewall

AWS で言うところのネットワーク ACL
※AWS の場合はステートレス

完全にステートフルなファイアウォールでネットワークレベルで動作する。

[Azure Firewall](https://docs.microsoft.com/ja-jp/azure/firewall/overview)

## まとめ

ここまで調べてみてわかりましたが
AWS を学んでいれば Azure もほぼ自然な流れでキャッチアップできる(確信)

次はサービスを見ていきます。

## おわり
python 数値  備忘録

# pythonの数値　扱い方

個人用の備忘録として、数値の計算方法を記載しました。

```
#以下例
# 足し算
1 + 1 
# 引き算
2 - 1

# 掛け算
2 * 2

# 割り算
6 / 2

# 割り算　商
5 // 3

# 割り算 あまり
6 % 4

# べき乗
2 ** 4

```

参照元
[python tutorial](https://docs.python.org/3/tutorial/introduction.html#numbers)
GCPのプロジェクトの概念とは？

## 勉強前イメージ

最初に作るけどなんだろうね・・・
プロジェクトの中でしかサービス使えない？

## 調査

### プロジェクトとは

GCPで利用するリソースなどはすべてプロジェクトに紐付けられます。
プロジェクト単位で課金やユーザー管理を行うということになります。
プロジェクトは複数作成することが可能です。

### プロジェクトの作成

- 新しいプロジェクトを作成

右上の `新しいプロジェクト` を進む

![1ホーム – My First Project – Google Cloud Platform - G.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/f114181b-89fa-6153-1844-03a3c050afd3.png)


- プロジェクトの設定を記載

プロジェクト名と場所を記載して、作成します

![2新しいプロジェクト – Google Cloud Platform - Google Chrome.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/d3a44422-8a62-21e5-894c-4b162962c84d.png)


- プロジェクトが作成出来ました

![3ホーム – test-create-project – Google Cloud Platform.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/a57609cf-be9d-3daa-366e-460f4f17c210.png)


### プロジェクトの削除

- プロジェクト設定に移動

![4ホーム – test-create-project – Google Cloud Platform.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/1b16a0c6-3914-5bb5-641c-6d6d2efb3fd3.png)


- シャットダウンに進む

![5設定 – IAM と管理 – test-create-project – Google Cloud.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/4e6c1310-87a2-627a-cd04-34cda0fef6e7.png)


- シャットダウンを行う

![6設定 – IAM と管理 – test-create-project – Google Cloud.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/bb98e35d-8283-3a7b-c088-73f98481a954.png)


## 勉強後イメージ

イメージ全然つかなかったけど、アカウントみたいに使えるのね。
複数アカウント必要とかだったら管理楽そう！

## 参考

- [プロジェクトの作成と管理](https://cloud.google.com/resource-manager/docs/creating-managing-projects?hl=ja&visit_id=637528761953003605-1958091249&rd=1#:~:text=Google%20Cloud%20%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AF%E3%80%81API,%E4%BD%BF%E7%94%A8%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%A8%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82)
- [【GCP入門編・第2回】まずは、ここから！ Google Cloud Platform (GCP) の事前準備！](https://www.topgate.co.jp/gcp02-getting-started-guide)
[Unity]Android向けIL2CPPビルドエラー：UnityLinker.exe did not run properly!

新しく、記事を下のリンク先に移行しましたので、よろしかったら、参考になってください。

[[Unity]Android向けIL2CPPビルドエラー：UnityLinker.exe did not run properly!](https://fanblogs.jp/3apes/archive/8/0)
Rails シンボル

#【Rails シンボル】

[【無料補講】Ruby on Rails でたくさん出てくる「 : (コロン)」← これ理解できてる！？](https://www.udemy.com/course/ruby-on-rails-c/)

コロン、シンボルの理解が乏しいなと思いました。
そのため、こちらで学ばせていただきました。

##3つのシンボル

###・シンボル

**先頭にコロンがあったらシンボルと覚える。**
　→　文字列の上位版

同じシンボルであれば、同じ場所に保存される。
そのため、実態は1つである。
　→　コンピューター内部で一意である。

###・シンボルをキーにしたハッシュの定義

**{ } の中に後ろコロンがあったらシンボルをキーにしたハッシュ。**

ハッシュとの相性が良い。
 →　シンボル、ハッシュのキー 共に重複を許さない。

```:Rails
//シンボルをキーにしたハッシュ（省略形）

{ id: 1 }

```

###・メソッドで使うキーワード引数

**メソッドの引数部分に後ろコロンがあったらキーワード引数**

引数に見出しをつけている。
　→　わかりやすくなる。
　→　メソッドの呼び出しは括弧省略可
Ruby 変数

##変数とは
~~箱をイメージしてください。箱には値を入れることができます。~~
~~またこの箱には名前をつけることができ、どんな値が入っているのかを簡単に識別することができます。~~
~~箱を変数と呼び、箱の名前を変数名と呼びます。変数を利用することで、~~
~~値を再利用したい場合に、変数の名前を使うだけで呼び出すことができます。~~
>変数を箱でイメージするのは後々のことを考えて良くないとご指摘を頂きました。
>[こちら](https://qiita.com/scivola/items/2775fce84ff911fde36f)で詳しく解説されていますが、箱よりも名札をイメージすると良いです。

##変数の宣言
変数名をつけて変数を作ることを変数の宣言と言います。

##変数の定義
宣言した変数にどのような値を入れるのか記述することを変数の定義と言います。
=を使用して値を代入することで定義します。
基本的に前述の宣言と定義は同時に行います。

```ruby
number = 10
```

##再代入
1度値を代入したあとの変数に、別の値を再び代入することで、変数の値は別の値に変更されます。
これを再代入と言います。

```ruby
number = 10

puts number
=> 10

#再代入
number = 100

puts number
=> 100
```
転職ドラフトを利用して転職しました！

今回は転職ドラフトを利用して転職活動をし、内定まで取得した体験記を記載したいと思います。
[こちらの記事は転職ドラフト体験談投稿キャンペーンに参加しています](https://job-draft.jp/articles/251)

***

# 転職ドラフトに登録したきっかけ
きっかけとしては、
・自分の市場価値を確認してみたかった
・可能であればステップアップとして転職したかったから
の2点が軸としてあり、いろいろな転職サービスを見ていたのですが
***ドラフト形式で想定年収を知りながら転職活動ができる***
という点に惹かれて、本サービスに登録したというのが経緯となります。

周りには、使ってる人がまったくいなかったので不安は多少ありましたが…
結果としては良かったのでこのサービスに出会えてよかったなと思っております！
# 転職ドラフトでの指名状況
自分は2020年10月回から2021年2月回まで参加しました。
そこで指名された総計としては
10月回→2件
11月回→1件
12月回→2件
1月回→1件
2月回→2件
で、一応どの回も指名をいただけることができたという結果でした。
個人的には、他に参加者も多く指名されないかもな～と思っていたのですが
案外指名されたのでとてもよかったなと思ってました！
# 面接で感じたこと
基本は指名をもらったら、カジュアル面談という形で、双方の考えだったり、会社のことに関してを
深堀するというところから始まり、その話を聞いたうえで選考に進むか選択するという形で進みました。

レジュメを事前に書いているかつそのレジュメを読まれてドラフトしているという点から
基本はこちらのステータスに関して深堀されるといった面接が多かったです。
会社さんによってはその後、スキルテストがあったりなかったりといった形で進みました。
私の実績としては、承諾し最終面接まで行ったのは2社でした。

転職ドラフトのいいところは
***提示年収が分かった状態で指名をもらい面接に進められる***という点であって
それ以降の面接は、個人の力量によると思っております。
なので、指名されたからいけるでしょとは思わず、
通常の転職活動と同じように企業分析だったり自分の転職する上での軸というものを
きちんと考えていくのがとても大事だと思います。

でも、提示年収が分かった状態で進められるのは
とてもモチベーションが上がりましたね…

# 転職ドラフトへの改善要望
自分としては、レジュメ審査も問題なく通り
スムーズにサービスを利用できたので改善したい点はあまり挙げられないのですが
強いて言うのであれば
***メッセージでのやり取りの通知が即時で通知されない***
というところは、改善できるのであればしてほしいなと思ってました。
すぐメールが来れば、レスポンスが速くできたなと何回も思ってました。
常に時間を空けてログインして確認するといった感じでやってたので今後は改善されることを祈ってます。
# 転職ドラフトを使ったことがない方へのメッセージ
この世の中には、たくさんの転職サービスがあり、様々なアプローチができる世の中だなと思ってます。
その一つとして、年収が分かった状態で転職活動ができるのは
モチベーションも上がって楽しく転職活動することができたので、
転職活動をしている方たちも本サービスを使用して無事内定が取れるように祈ってます。

***

以上、体験記でした。
[Android × Kotlin]端末の位置情報がOnかOffを判断

<h1>位置情報をOnかOffを判断</h1>
```kotlin.kt
private fun isLocationEnabled(): Boolean {
        val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
        return LocationManagerCompat.isLocationEnabled(locationManager)
    }
```
<p>オンならtrueオフならfalseが返ってきます</p>
Symbolでモザイクを作って転送してみるところまで

https://docs.symbolplatform.com/index.html

でモザイクを作って転送してみるだけでチョイチョイ詰まってしまったのでメモ。以下の作業の前には[アカウント作成](https://docs.symbolplatform.com/ja/guides/account/index.html)は完了しているものとする。

ちなみに、モザイクとはトークン発行機能のこと。

## symbol-cli transaction mosaic の質問項目
質問項目が何を聞かれているのかわからなかったのでメモ。([英語ドキュメント](https://docs.symbolplatform.com/concepts/mosaic.html)開いたら対応する語は一発だった)

```
# モザイクの作成
% symbol-cli transaction mosaic

✔ Enter your wallet password: … 
# 期限の切れないモザイクをつくるか？
✔ Do you want a non-expiring mosaic? …
# モザイクがどれくらいの小数点以下に分割できるかを決定。可分性2はモザイクが最小で 0.01 に分割できることを意味します。
✔ Enter the mosaic divisibility: … 
# 供給可変性. yesの場合、モザイクの供給量は後から変更できます
✔ Do you want this mosaic to have a mutable supply? …
# 転送可能性. yesの場合モザイクは任意のアカウント間で転送できます。そうでない場合、モザイクはモザイク作成者へ送り返すことしかできません。
✔ Do you want this mosaic to be transferable? …
# 制限可能性. yesの場合、モザイク作成者は 制限 を設定できます。
✔ Do you want this mosaic to be restrictable? …
# モザイクの供給量の総数
✔ Amount of mosaics units to create:  …
# 絶対量。絶対量を取得するには作成または送信するアセット量に 10divisibility を乗じてください。例えば、モザイクが 可分性 2 である場合、10 単位 (相対) 作成または送信するには 1,000 (絶対) と定義します。
✔ Enter the maximum fee (absolute amount): …
# 
✔ Select the transaction announce mode: ›
```

結果、Mosaic Id:6641234AF84CB89Dのモザイクができた。


## 作ったモザイクを確認してみる

transactionが成功していたかを確認。入力にミスがあると失敗していたりする。

```
% symbol-cli transaction status

## 残高が足らずに失敗しているケース
Transaction Status
┌─────────────┬──────────────────────────────────────────────────────────────────┐
│ Property    │ Value                                                            │
├─────────────┼──────────────────────────────────────────────────────────────────┤
│ Group       │ failed                                                           │
├─────────────┼──────────────────────────────────────────────────────────────────┤
│ Hash        │ F0BFD765F1C90B6BD00A06D6C04B8307A114B37AC0220776F5996F66D7326D1D │
├─────────────┼──────────────────────────────────────────────────────────────────┤
│ Status Code │ Failure_Core_Insufficient_Balance                                │
├─────────────┼──────────────────────────────────────────────────────────────────┤
│ Deadline    │ 2021-04-01 22:43:18.325                                          │
└─────────────┴──────────────────────────────────────────────────────────────────┘
```

モザイク情報を取得

```
% symbol-cli mosaic info --mosaic-id <mosaic id>
```

アカウント情報でもモザイクを確認

```
% symbol-cli account info --address <Address>
```

##モザイクを転送してみる

他のアドレス：TDS3ZA-G6BI26-UZAOXS-GAL7TL-FZLYOP-S3SODM-SFI にモザイクを送信する。いつまで経ってもProcessingから進まない時は、手数料(max fee)が少なすぎるのかもしれない。

```
% symbol-cli transaction transfer --recipient-address TDS3ZA-G6BI26-UZAOXS-GAL7TL-FZLYOP-S3SODM-SFI --mosaics "<mosaic id>::<Absolute Amount>" --max-fee 2000000 --message "Qiita Test" --sync
```

送信できていることを確認

```
% symbol-cli account info --address TDS3ZA-G6BI26-UZAOXS-GAL7TL-FZLYOP-S3SODM-SFI
```



# 参考
- https://docs.symbolplatform.com/concepts/mosaic.html
- https://docs.symbolplatform.com/ja/concepts/mosaic.html
- https://docs.symbolplatform.com/getting-started/setup-workstation.html
[Android×kotlin]端末がオンラインかオフラインを判断

<h1>オンラインかオフラインか</h1>
<p>タイトルの意味のままです</p>
```kotlin.kt
private fun isOnline(): Boolean {
        val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val networkInfo = connectivityManager.activeNetworkInfo
        return networkInfo?.isConnected == true
    }
```
<p>オンラインならtrueオフラインならfalseが返ってきます</p>
ECS周りのログを見る方法共有

## 結論
- ECSのtaskが起動した後は、 `CloudWatch logs` で確認可能です
  - task definitionのlogConfigurationのlogDriverをawslogsに設定した場合だけ
- ECSのtaskが起動する前は、AWSコンソール上でcluster -> service -> **Events** で確認可能です
  - ECSのclusterにserviceを作った場合だけ可能
- ECSのContainer Agentログはコンテナインスタンスにsshで入って `/var/log/ecs/ecs-agent.log` で確認可能です
  - https://docs.aws.amazon.com/AmazonECS/latest/developerguide/logs.html



## 紹介始めます
### ECSのtaskが起動した後は、 `CloudWatch logs` で確認可能です
![console_task_detail1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/83d016b6-5afc-2f0f-ae07-60a0c88ac45d.png)
![console_task_detail2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/db1a0219-d442-2aba-1178-c0b10b42181b.png)
![console_task_detail3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/ab34ddeb-b2c8-dac4-da25-472e8c85809e.png)

### ECSのtaskが起動する前は、AWSコンソール上でcluster -> service -> **Events** で確認可能
![console_service1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/24599fdf-4265-8787-8e44-678e4a135e95.png)
![console_service2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/43f0659f-fccf-d200-c469-7012d184ba01.png)
![console_service3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/44f65273-598b-a5e1-f004-577f599d11f4.png)



### ECSのContainer Agentログはコンテナインスタンスにsshで入って `/var/log/ecs/ecs-agent.log` で確認可能
- AWSコンソール上でECSのコンテナインスタンスの情報を確認します
 ![console_container_instance.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/c1b96f8e-53ca-2aad-ea55-d3d569415170.png)
- コンテナインスタンスにsshで入ります
- `/var/log/ecs/ecs-agent.log` を見ます
CodeCommitのPRイベントとかをTeamsに通知する

CodeCommitのイベント(ブランチ/PR作成、マージなど)をMicrosoft TeamsのIncoming Webhookに通知する仕組みを作りました。
Teamsがメインのコミュニケーションツールで、CodeCommitでコード管理することが多い皆様(某弊社)向けです。

## イメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434589/f02c1f21-010c-abf8-99f6-243df2e517a9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434589/0ce5441b-3b42-a1a3-8231-c780cbd0b87c.png)

## 使い方

[Serverless Application Repositoryで公開](https://serverlessrepo.aws.amazon.com/applications/ap-northeast-1/521635626865/codecommit-notification-4-teams) してみたのでポチッとデプロイすれば使えると思います。

詳細はGithubからREADMEをご覧下さい。
<https://github.com/answer-d/aws-codecommit-notification-4-teams>
SiliconLabs Bluetooth5対応格安開発ボード BGM220 Explorer Kitを見る

SiliconLabsからBGM220Pモジュール搭載のBGM220 Explorer Kitが販売されていたので入手してみました。
BGM220PモジュールにはEFR32BG22が搭載されており、もちろん技適を取得しているのでそのまま実証可能です。
# EFR32BG22とは
EFR32BG22とは、Bluetooth5.2対応のSoCになります。
Bluetooth5.2に付加されたオーディオ機能に対応するべくデジタル・マイクロフォン・インタフェース（PDM）を搭載しています。
https://jp.silabs.com/wireless/gecko-series-2/efr32bg22
EFR32BG22の技術適合取得済みモジュールとしてBGM220P/BGM220Sが
開発者ボードとして技術適合がないSLWSTK6021AとThunderboard EFR32BG22（SLTB010A）が販売されています。
# BGM220 Explorer Kitとは
BGM220 Explorer KitはBGM220Pの開発者ボードとなりBGM220Pが技術適合を取得済みの為、国内において申請等無く使用可能です。
価格は1123円（2021年4月1日現在）とモジュール単体（¥907.5）と大差ない上に、本体にはJ-Linkが搭載されておりそのままデバック可能です。
### 拡張端子
- ボタン
- LED
- I2C（QWIIC)
- MikroBus
- 2.54ピッチピン(スルーホール）
### 接続
- USB接続
- （Mini Simplicity端子は背面にコネクタをはんだ付け）

## BGM220 Explorer Kit ユーザーガイド
https://www.mouser.jp/datasheet/2/368/ug465_brd4314a-1919591.pdf
# 比較
今回は、同じEFR32BG22を搭載するThunderboard EFR32BG22と比較します。
まずは、パッケージです。
付属品は、USBケーブルのみです。
![DSC_0131 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/603fa368-d81c-fdcf-e4ca-6ad2ee65b4ce.jpeg)
左がBGM220 Explorer Kit、右がThunderboard EFR32BG22です。
![DSC_0138 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/72cb08ee-1c93-a4ad-88b4-dfad61177a98.jpeg)
![DSC_0137 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/17702cdb-b890-7688-6712-df9546020eec.jpeg)
### Thunderboard EFR32BG22（SLTB010A）とは
Thunderboard EFR32BG22はコイン電池で本体だけで実証可能なようにセンサーやMini Simplicity端子、そしてマイクなどが搭載されています。
## 開発環境
開発環境は
Silicon Labs BGM1xx：クイック・スタートガイド
https://www.macnica.co.jp/business/semiconductor/articles/silicon_labs/133247/
プログラミング初心者が競技プログラミング始めた感想

## これは何
僕競技プログラミング（[AtCoder](https://atcoder.jp/home)）を始めて4ヶ月経ってしまったので記事を書きます。（記録的な意味が強い）

## 本文
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632093/4f819e2c-6df1-77f1-0831-ce778c1d016e.png)

早いもので、僕の初めてのコンテストである12/5の[鹿島建設プログラミングコンテスト2020（AtCoder Regular Contest 110）](https://atcoder.jp/contests/arc110)で惨敗してから四ヶ月が経ちました。プログラミングをやりたいなあ、という感じだった僕は、軽い気持ちで競技プログラミングをはじめました。
どんな問題が出るかもわかっていない状態で臨んだ初めてのコンテストは、一問も解けずに終わりました。
（ARCの最初の問題は今でも解けないのですが...）

しかし、二回目に参加したコンテストで最初の問題をAC（正解）することができました！
強い方は、最初の問題などプログラミングを初めて触った人でもできる、というかもしれませんが、競技プログラミングを始めたばかりの僕には大きな一歩でした。

問題を解く楽しさ、理解する楽しさに気づけた僕は、いつしか「競技プログラミング」が「手段」から「目的」に変わっていました。（何かを成し遂げた人のように語っていますが何も成し遂げていません）

そして、もうすぐ茶色コーダー（レーティングの基準で、灰色→茶色→緑色・・・という順で強くなってゆく）になろうとする今、記録として記事を書いているのです。
## そんなわけで

競技プログラミングをいっしょにやりましょう！という話でした。ちゃんちゃん。
GitHubでコミットメッセージの検索が出来る

これまで私が知らずに損をしていたので記事にしました。

タイトルの通り、GitHubのサイト上でコミットメッセージの検索が出来ます。以上。スミマセン。

私は最近初めてこの機能を知ってかなり感動したのですが、実は2017年ごろから出来ていたようです。完全に取り残されていた。

* [Search commit messages](https://github.blog/2017-01-03-search-commit-messages/)
* [Githubにコミットメッセージの検索機能が追加](https://hacknote.jp/archives/25741/)

勉強熱心な方は知っていて当然だと思いますが、私のような怠惰な男は全く気付いていませんでした。悲しい。


## リポジトリ検索

リポジトリ検索で検索できるのは以下になります。

[GitHubでの検索の種類](https://docs.github.com/ja/github/searching-for-information-on-github/about-searching-on-github#)

```
GitHubでの検索の種類

以下の情報は、GitHub でアクセスできるすべてのリポジトリから検索できます。

リポジトリ
Topics
Issue およびプルリクエスト
ディスカッション
コード
コミット
ユーザ
パッケージ
Wiki
```

### 部分一致ではなく単語一致
GitHub のリポジトリ検索では「部分一致ではなく単語一致」したものしか検索結果に出てこないことは注意が必要です。これは結構紛らわしい。やはり、ちゃんと検索したいならCloneしてGrepですかね。

[GitHub のリポジトリ検索を使う時には「部分一致ではなく単語一致」「Clone して Grep する」の二点を意識する](https://qiita.com/sta/items/1023ef3cf1cec7b56689)


## 高度な検索
"Advanced search" から高度な検索も出来ますが、取り急ぎ私のような怠惰な男では使いそうにないので、詳細は省きます。

あることだけ覚えておけば、今後役に立つ時が来るでしょう。


## コード検索

ちなみにコード検索も出来ますが結構制約が多いです。ある程度仕様を理解した上で使った方が良さそうですね。

### [コード検索での留意点](https://docs.github.com/ja/github/searching-for-information-on-github/searching-code)

```
コード検索での留意点

コードの検索は複雑なため、検索の実行には一定の制限があります。

* You must be signed into a user account on GitHub to search for code across all public repositories.
* フォークのコードは、親リポジトリより Star が多い場合に限って検索可能です。 親リポジトリより Star が少ないフォークは、コード検索ではインデックスされません。 親リポジトリより Star が多いフォークを検索結果に含めるためには、クエリに fork:true または fork:only を追加する必要があります。 詳細は「フォーク内で検索する」を参照してください。
* コード検索では、デフォルトブランチのみインデックスされます。
* 384 KB より小さいファイルのみ検索可能です。
* 500,000 ファイル未満のリポジトリのみが検索可能です。
* 昨年アクティビティがあった、または検索結果に返されたリポジトリのみが検索可能です。
* filename の検索を除き、ソースコードを検索する場合、常に少なくとも検索単語を 1 つ含める必要があります。 たとえばlanguage:javascript は有効な検索ではありませんが、amazing language:javascript は有効な検索です。
* 検索結果では、同一ファイルから取り出される部分は 2 つまでです。そのファイルはさらに多くの部分でヒットしている可能性があります。
* クエリの一部として次のワイルドカード文字を用いることはできません: . , : ; / \ ` ' " = * ! ? # $ & + ^ | ~ < > ( ) { } [ ]。 検索では、これらのシンボルは単に無視されます。
```

__「コード検索では、デフォルトブランチのみインデックスされます。」__

→まぁ、検索したいのは基本的にマスタブランチなので大丈夫

__「検索結果では、同一ファイルから取り出される部分は 2 つまでです。」__

→これは知っておかないと痛い目に遭う


## 参考サイト

* [GitHub – リポジトリ内のコードやファイルを検索する方法 | Howpon[ハウポン]](https://howpon.com/8149)
* [GitHub のリポジトリ検索を使う時には「部分一致ではなく単語一致」「Clone して Grep する」の二点を意識する](https://qiita.com/sta/items/1023ef3cf1cec7b56689)
* [Githubにコミットメッセージの検索機能が追加](https://hacknote.jp/archives/25741/)
【辞書不要】文字種区切りによる分かち書き

# はじめに
<b>辞書不要</b>の「文字種を用いての分かち書き」の考察・評価メモ。

IT関係文章（カタカナ、英字が多い）と、法律関係文章（漢字多い）で実験する。

本書の結論は<b>「汎用的な実装は難しいが、ドメイン特化の工夫をすれば使えそう」</b>。

## 参考
[文字種の変化に基づく日本語単語の切り出し](https://www.mlab.im.dendai.ac.jp/~yamada/ir/MorphologicalAnalyzer/CharactorType.html)


# 実験
IT関係の文章であるstr1と、法律関係の文章であるstr2を用意して評価している。

```python
str1 = "システム・リソースへのアクセスを表現する抽象クラスです。すべてのアクセス権は、特定のPermissionサブクラスのセマンティックスを定義するための抽象機能を持つほか、実装をサブクラスに依存する名前を持ちます。"
str2 = "前項の場合において、未成年者がその営業に堪えることができない事由があるときは、その法定代理人は、第四編（親族）の規定に従い、その許可を取り消し、又はこれを制限することができる。"

```

正規表現委はregexを用いる。[\u3041-\u3093]はひらがな、[\u30A1-\u30F4]はカタカナ。実行する箇所はfindallメソッドのみで、リストが返される。

```python
import regex
p = regex.compile('(\p{Han}+|\p{Script=Latin}+|[\u3041-\u3093]+|[\u30A1-\u30F4]+)')
p.findall(str1)
```

## まずはIT文章から（工夫前）

実行結果は以下の通り。

```shell-session
['システム',
 'リソ',
 'ス',
 'への',
 'アクセス',
 'を',
 '表現',
 'する',
 '抽象',
 'クラス',
 'です',
 'すべての',
 'アクセス',
 '権',
 'は',
 '特定',
 'の',
 'Permission',
 'サブクラス',
 'の',
 'セマンティックス',
 'を',
 '定義',
 'するための',
 '抽象機能',
 'を',
 '持',
 'つほか',
 '実装',
 'を',
 'サブクラス',
 'に',
 '依存',
 'する',
 '名前',
 'を',
 '持',
 'ちます']
```

### 気になる点
リソース -> 'リソ', 'ス'
持ちます -> '持', 'ちます'
アクセス権 -> 'アクセス', '権'
などがある。

### 良い点
「抽象機能」や「サブクラス」が一つのトークンになっている。

## 改善案（工夫後）

少し工夫する。カタカナに伸ばし棒（正式名称わからん）、漢字一文字とひらがな（\p{Han}[\u3041-\u3093]+）、カタカナと漢字を追加した。

※ 伸ばし棒は、適宜ほかの箇所にも追加したほうがよさげ。

```python
p2 = regex.compile('(\p{Han}[\u3041-\u3093]+|[\u30A1-\u30F4ー]+\p{Han}+|\p{Han}+|\p{Script=Latin}+|[\u3041-\u3093]+|[\u30A1-\u30F4ー]+)')
p2.findall(str1)
```

実行結果は以下の通り。

```shell-session
['システム',
 'リソース',
 'への',
 'アクセス',
 'を',
 '表現',
 'する',
 '抽象',
 'クラス',
 'です',
 'すべての',
 'アクセス権',
 'は',
 '特定',
 'の',
 'Permission',
 'サブクラス',
 'の',
 'セマンティックス',
 'を',
 '定義',
 'するための',
 '抽象機能',
 'を',
 '持つほか',
 '実装',
 'を',
 'サブクラス',
 'に',
 '依存',
 'する',
 '名前',
 'を',
 '持ちます']
```

「リソース」や「アクセス権」は改善している。

漢字二文字とカタカナを追加すれば「'抽象', 'クラス'」も「抽象クラス」になる。副作用も出てくると思われる。ドメインごとの文章の特徴を掴めば利用できそうな気もする。

## つぎに法律文章

法律文章についてもやってみる。

```shell-session
['前項',
 'の',
 '場合',
 'において',
 '未成年者',
 'がその',
 '営業',
 'に',
 '堪えることができない',
 '事由',
 'があるときは',
 'その',
 '法定代理人',
 'は',
 '第四編',
 '親族',
 'の',
 '規定',
 'に',
 '従い',
 'その',
 '許可',
 'を',
 '取り',
 '消し',
 '又はこれを',
 '制限',
 'することができる']
```

民法においては、接続詞を漢字からひらがなにreplaceしておく必要があることがわかっている（「又は」->「または」など）。
 '取り', '消し'は「取り消し」になってほしいので漢字一文字ひらがな一文字漢字一文字ひらがな一文字を追加すべきかどうか。

# 考察
法律においては、漢字がまとまった専門用語が多く、辞書を用いた形態素解析器より使える感触を得た。

IT文章で工夫したカタカナに伸ばし棒を追加したが、法律（条文には）カタカナは含まれていない（古い法律除く）ので、効いていないはずである。

IT文章ではカタカナベースに工夫できる余地が多々ありそう。漢字二文字とカタカナの「'抽象', 'クラス'」も「抽象クラス」など。

文章のドメインごとに特徴があり、工夫していく必要がある。
Qiitaさんに「更新頻度が高すぎます」と怒られました

Y子です。

さっそく2本目の記事を書こうとしたところ、Qiitaさんに怒られました。
![Qiita Error Ex4cYJGVoAUOJ2D.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1265690/96794ca4-4fca-eccf-ed9d-900de8130a02.jpeg)
「投稿する」ボタンから「記事」を選んだ時点で、こんなメッセージが。

> 投稿頻度が高すぎます。しばらく時間をおいてから再度アクセスしてください。

「[最初の記事](https://qiita.com/koiwaiwaiko/items/74d9f881fea774001469)」から、5分ちょっとのタイミングでした。

ググってみると、どうやら次の記事まで30分は開けないといけないみたいですね。勉強になります。
* [連続投稿はできない](https://qiita.com/s-y-sg/items/b1398867a7ce74a9f883#%E9%80%A3%E7%B6%9A%E6%8A%95%E7%A8%BF%E3%81%AF%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84)

焦らず、ゆるーく続けていきたいです。
インスペクタ上でList配列をデフォルトオープン状態にする

メンバー変数にListがあるクラスScriptをアタッチしてInspectorで操作しようとすると、毎回1から手入力しないといけないの何とかならないんすかね?と社内で言われたので探ってみました。エディタ拡張によりListのデフォルトサイズを指定できました。また、要素を展開された状態にする事もできたので需要あるかわかりませんが投稿します。

[こちらのGithubページ](https://github.com/NiaRucaChannel/CustomList)からどうぞ

#使い方
1.CustomListEditor.csをAssets/Editor以下に配置
2.CustomList.csを任意のオブジェクトにアタッチ
3.デフォルトサイズが1, 展開状態のListがHierarchyで確認できます
![CustomList.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681503/f42ae2da-87fe-cf19-b88a-cb64ed6bc7b8.gif)

上記はintのListですが、もちろん色んな型やクラスにもできます。
CustomList.csのint num値を変更すればListのデフォルトサイズがその値に変わります。
CustomListEditor.csでisExpandedプロパティをfalseに変更すればデフォルトで要素が閉じた状態になります。
VSCode for macのLaTeX Workshopで自動整形できるようにする(latexindent)

# はじめに
texをVSCodeの「LaTeX Workshop」を使って書いている人は多いと思いますが，自動整形ツールはデフォルトでは入っていません．文章ベースであれば必要ないと思いますが，数式をゴリゴリ書く人にとっては便利なツールになると思います．
macではbrewを使って簡単にインストールすることができるのでメモとして書いておきます．

<a id="#Chapter1"></a>
# 1, LaTeX Workshopでtex環境を作る
多くの先駆者がいると思うので，ここでは割愛します．

https://m12watanabe1a.hatenablog.com/entry/2019/09/30/020036#latexmk%E3%82%92%E4%BD%BF%E3%81%8A%E3%81%86

<a id="#Chapter2"></a>
# 2, perl, latexindent.plをインストール

```
brew install perl
brew install latexindent
```

<a id="#reference"></a>
# 3, 設定ファイルにPATHを書く

brewでインストールしたものは基本的に"/usr/local/bin"にあります．
なので，設定ファイル(JSON)に以下を追加します．

```
"latex-workshop.latexindent.path": "/usr/local/bin/latexindent.pl",
```

VSCodeで，
texファイルを開く→右クリックで「ドキュメントのフォーマット」
これでフォーマットできると思います．
【トラブルシューティング】 CodeDeploy detected that the replacement task set is unhealthy.


# はじめに

CodeDeployにて以下のエラーメッセージの形で失敗してしまう事象に遭遇。

> CodeDeploy detected that the replacement task set is unhealthy.

このエラーメッセージでググっても原因がわかる記事がなかったので作りました。

![CodeDeploy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91562/c73c912c-5b4f-117c-9525-5a2889f09d3b.png)

# 前提

* ECS Fargate 利用
* Blue/Green Deployment 設定のApplication、Deployment Group にて CodeDeployでECS Fargateへデプロイする作り
  * BlueなTarget GroupとGreenなTarget Group2つ存在
  * ELB (NLB) がリスナーでどちらかを指定している

# 原因

ECS ServiceのEventのログを確認することで原因がわかりました。

ELBのAvailability Zoneが1つしか設定されていない、かつ、ECS Service (Cluster)では複数AZ対応であったため、立ち上がるTaskのTarget Groupへは届かずエラーになっていました。

> (service XXX-service, taskSet XXX-svc/9900447640397688999) (port 80) is unhealthy in target-group XXX-blue due to (reason Target is in an Availability Zone that is not enabled for the load balancer).

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91562/2ea87d39-41cb-4dee-ac3b-08b3b6baedd4.png)


# 修正 / 解決

ELBの対象のAZをECS Serviceに合わせるように追加することで解決しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91562/8a47da07-afb5-e54d-02d7-558a2e74674b.png)
LabVIEW XYグラフへの楕円のプロット方法

# はじめに
LabVIEWのXYグラフに、楕円をプロットする方法を紹介します。
下記サイトを参考にし、傾いた楕円のプロットについてviを作成しました。

python を使った楕円のプロットの仕方
https://daily-tech.hatenablog.com/entry/2018/04/13/084734

# 処理のながれ
1. (準備) 2次形式をベクトルと係数行列を使った形へ書き直し、係数行列の値を画面上の制御器へ入力する。
1. 係数行列の固有値・固有ベクトルを求める。
1. 媒介変数 $\displaystyle x=\frac{1}{\sqrt{\lambda _{1}}}\cos t,\ y=\frac{1}{\sqrt{\lambda _{2}}}\sin t\ (0\leq t< 2\pi )$ を使ってX,Y配列を求める。
1. 3で求めたX,Y配列に、2で求めた固有ベクトルを列の成分とする直交行列をかけ、楕円を回転させる。

# フロントパネルとダイアグラム
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674241/3db7c7ba-232a-a4d3-48eb-fa2a075b00de.png)
![snippet.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674241/23fc8fbe-320b-ce4b-410c-e3f334952a68.png)
学習記録

こんばんは！taroです！

今日の学習のアウトプットはコンピューターの回路です！

and回路　入力がどちらも１だった場合に１を出力
or回路　入力がどちらか1つでも１だったときに１を出力　　　　　　　　　　　　　　　　　not回路　入力が０なら１、１なら０を出力するように入力値を反転させて出力

NAND回路　andとnotを組み合わせたもの。andの結果を反転させたもの。
NOR回路　orとnotを組み合わせたもの。orの結果を反転させたもの。
EOR XOR回路　二つある入力のうち片方だけが１の場合に１となる。
【ミライトデザイン社内勉強会#22】「IDDD本から理解するドメイン駆動設計」輪読会~第13章「分散システム設計」~

### 前回の記事
[「【ミライトデザイン社内勉強会#21】「IDDD本から理解するドメイン駆動設計」輪読会~第12章「リポジトリ」~」を編集 - Qiita](https://qiita.com/drafts/7f58a3aa26b325331345/edit)

## [実践DDD本 第13章「境界づけられたコンテキストの統合」～分散システム設計～ (1/3)：CodeZine（コードジン）](https://codezine.jp/article/detail/11178)

### カスタムメディアタイプは自分で定義できるものなの？

[p1](https://codezine.jp/article/detail/11178)

- そもそもMIMEタイプとは
    - Multipurpose Internet Mail Extensions または MIME タイプ
    - 参考：[https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types](https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types)

- MIMEタイプの自作はできるっぽい
    - [メディアタイプ - GitHub Docs](https://docs.github.com/ja/github-ae@latest/rest/overview/media-types)
    - [メディアタイプとALPSプロファイル - Qiita](https://qiita.com/koriym/items/2e928efb2167d559052e#vendor%E5%9B%BA%E6%9C%89%E3%81%AE%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2%E3%82%BF%E3%82%A4%E3%83%97)
- MIMEタイプを設定するメリットがいまいちわからない
    - やってることは `（3）中間フォーマット（JSON等）` ってことでいいの？
    - [カスタムメディアタイプの増加はRESTFul？](https://www.infoq.com/jp/news/2010/01/subbu-custom-media-types/)
    - `application/vnd.saasovation.idovation+json` が指定してあると、送信する側と受け取る側で、どこから送られてきたjsonなのかがわかるとか？
        - 受け取る側で独自のメディアタイプがきたら中身がどうなっているか推測できる
        - 単一のエンドポイントから複数の種類のjsonが飛んでくる時とかがあればMIMEタイプで判定できたりするのかも
    - ~~BearSundayも独自のカスタムメディアタイプを使ってたりする~~

### `（4）メッセージング基盤を用いたイベント連携（追跡トラッカー導入版）`の`追跡用のトラッカー（ChangeTracker）` はドメイン知識なの？実際の業務ではなくてメッセージング基盤を使ったアプリケーションの中だけの知識な気がするけど

[p3](https://codezine.jp/article/detail/11178?p=3)

- いつ変更したかが業務的に必要だから値オブジェクトになっているんじゃない？
- ドメイン知識とは言い切れないかもしれないけど利便性を考えると、値オブジェクトにあってもいいきがする

### メッセージング基盤を使いたいモチベーションって？
- sidekiqにメール送信したい内容と宛先をためて、後でメール送信するとか
    - [https://github.com/mperham/sidekiq](https://github.com/mperham/sidekiq)

# 調べた単語

- [RESTful](https://e-words.jp/w/RESTful_API.html)
    - APIを作る時とかにRESTという設計原則に則ったことをいう。
    - RESTに則ったWebサービスをRESTfulなサービスという。

- RPC方式
    - Remote Procedure Call
    - [RPC概論](https://www.tsone.co.jp/blog/archives/960)
    - [https://twitter.com/kahirokunn/status/1251677442424504320?s=20](https://twitter.com/suin/status/1251846122152157184?s=20)

## 次回
[【ミライトデザイン社内勉強会#23】「IDDD本から理解するドメイン駆動設計」輪読会~第14章「アプリケーション」~ - Qiita](https://qiita.com/tkek321/items/4a34bdd74c891cfa47eb)
【初心者】Swift UIを勉強する その⑧ ーーー transition delay

# はじめに

前回はカードをタップしたら、リストを表示されるようにしたけど、リストのアニメーションを遅らせて欲しい。
今回はこの課題を踏まえて進んできます。完成品のこんな感じです。↓

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1065841/01c30f6a-185e-b76d-af7b-03913503a4d2.gif" width=40%>　




# 目次
<!-- タイトルとアンカー名を編集 -->
1. [transition delay](#transition delay)
2. [まとめ](#まとめ)
3. [参考文献](#reference)

<!-- 各チャプター -->
<a id="#transition delay"></a>
# transition delay
・アニメーションを遅らせるには`delay()`というインスタンスメソッドを使います。
・若干複雑に見えますが、ひとつづつ分解すれば、1つの`transition`があって、この`transition`は複数の条件が付けられています。
1つ目の条件は`opacity`(透明)、2つ目は`animation()`(アニメーションのタイミング)。
アニメーションのタイミングは何かというと、`spring`(弾力)と`delay`(遅れ)。


```swift
.transition(
     AnyTransition.opacity.animation(
            Animation.spring().delay(0.3)
     )
)
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1065841/c8e94f21-b08d-6b86-5800-d95555b44c87.gif" width=20%>　


・開くアニメーションができたけど、閉じるほうもやる必要があります。
・また、今回のケースでは非相称のtransitionなので、`asymmetric(insertion: , removal:) を使えます。([appleが提供されたコード例も確認してみましょう](https://developer.apple.com/tutorials/swiftui/animating-views-and-transitions))

```swift:CoursesView.swift
.transition(
      .asymmetric(
          insertion: AnyTransition.opacity.animation(
                Animation.spring().delay(0.3)
          ),
          removal: AnyTransition.opacity.animation(
                .spring()
          )
       )
)
```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1065841/1f6ffba4-400f-558a-497b-c7a1029a7021.gif" width=20%>　

・2枚目のカードを追加します。もちろん、2枚目のカードに対して何もしないと、リストと2枚目のカードは被らせてしまいます。
とりあえずは`background`をホワイトにして、続きは次回進んでいきます。
・また、カードを複数を追加していくので、カードを全部`ScrollView`に詰めて、タップされた後の領域も決めたいので、`frame(maxWidth: .infinity)`を使います。

```swift:CoursesView.swift
ScrollView {
   VStack(spacing: 20) {
        CourseItem()
            .matchedGeometryEffect(
                id: "Card", in: namespace, isSource: !show
            )
            .frame(width: 335, height: 250)
         CourseItem()
            .frame(width: 335, height: 250)
    }
    .frame(maxWidth: .infinity)
}
```


<a id="#まとめ"></a>
# まとめ

**ソースコード[Github](https://github.com/wsimple1028/swiftUI_ios14)**

<a id="#reference"></a>
# 参考文献
- [Design Code --- SwiftUI for iOS 14](https://designcode.io/swiftui-ios14)
git HEADについて

# HEAD

HEADは
今いるブランチの最新のコミット　
の代わりの呼び名。





例えば
沢山の子が順番に自分を訪ねて来ました。
最後に来た子の名前が分かりません。

最後に来た子は？と尋ねると
返事をしてくれます。

ここでいう名前がハッシュ値で、
「最後に来た子」という言葉自体がHEADです。

![89C821D3-5CB5-45A7-B7F9-285F089DCB61.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/9c85d8d3-43b0-6cc5-c66f-b2b71cee31b1.png)


![B0CC1CCA-398C-4A15-A17A-72E654FA502C.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/f1df57cc-de42-bd3b-4096-585ade104ec3.png)


![618D335A-FAC1-48A5-8566-6F2DD88F3EE8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/53321774-460d-49e4-6d15-61ebc5c60449.png)
Railsで複数の画像をスライド表示させる

#WHY
オリアプで複数の画像をスライド表示させる機能を実装しましたのでアウトプットしていきます。

今回はrailsでjqueryのslickというプラグインを使用して画像をスライド表示させていきます。

#準備
画像を貼り付けたりしてビューを整えていきます。

ビューファイル

```html
<div class="background">
  <div class="images">
    <%= image_tag "sample1.jpg" %>
    <%= image_tag "sample2.jpg" %>
    <%= image_tag "sample3.jpg" %>
    <%= image_tag "sample4.jpg" %>
  </div>
</div>

----CSS----
.images{
  width: 50vw;
  height: auto;
}
```

このようになっています。
![slider1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076167/8898afba-146d-3436-eed4-d61adf2119be.gif)

それではこの並んでいる画像をスライドで表示していけるようにしていきたいとおもいます。

まずはJqueryを導入します。views/shared/application.html.erbに以下のように記述します。

```html
↓を記述
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
↓もともとある
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
```

続いて下に3行追加します。

```html
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css"/>
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick-theme.css"/>
<script type="text/javascript" src="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>
```

最後にjavascript/packs/application.jsの最後に以下の記述をします。

```javascript
$(function() {
  $('.images').slick({
      dots: true,
  });
});
```

#確認
ブラウザを確認してみましょう
![slider2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076167/7b6bf232-f859-5038-fc58-8969ee1923a6.gif)

画像が一枚になり、見づらいですが点が４つつきました。ビューをもう少し見えやすくします。

```css
.background{
  background-color: gray;
  width: 40vw;
  height: auto;
  margin: auto;
}
.images{
  width: 30vw;
  height: auto;
  padding: 30px;
  margin: auto;
  background-color: lightblue;
}
.images img{
  width: 50%;
  height: auto;
}
```

するとこのように矢印が見え、画像をスライドさせることに成功しました。

![slider3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076167/ce74ce19-e06a-89ce-b198-5ea800eaaf00.gif)


slickでは多数のオプションやイベントが用意されており、矢印を変更させたり、自動再生をするか否かを設定できたりと自分好みにカスタマイズできます！
詳しくはこちらの記事がわかりやすかったです。
https://webdesignday.jp/inspiration/technique/jquery-js/3847/

--------
今回おそらく初のライブラリを導入しましたが、とても便利さに驚きました！今後もどんどん調べていきたいと思います！
rankFM使ってみた

# rankFMとは
FM（factorization machine）のライブラリの1つ。
メソッドがレコメンドで使用する前提の物が多い（気がする）
GitHub: https://github.com/etlundquist/rankfm
# インストール方法
```shell
pip install rankfm
```
# 大体の使い方
## 用意するもの
### ユーザーの行動履歴（必須）
各ユーザーがどのアイテムを閲覧したor購入したといったログデータ。
よくあるFMのライブラリだと**rating**のような評価値のカラムが必要だが、
rankFMに置いてはそもそも閲覧・購買といった行動した（つまり絶対1になる)というDFが入力されることを前提としているため、そのようなカラムは不要である。

| user_id | item_id |
|:-:|:-:|
| 1  | 10  |
| 1  |  11 |
| 1  | 12  |
| 2  | 20  |
| 2  | 21  |

### ユーザーの特徴（任意）
| user_id | age_10 | age_20 | gender |
|:-:|:-:|:-:|:-:|
| 1  | 1  | 0  | 1  | 
| 2  | 0  | 1  | 0  | 


### アイテムの特徴
| item_id | category_1 | category_2 | category_3 | price |
|:-:|:-:|:-:|:-:|:-:|
| 10  | 1  | 0  | 0  | 1  |
| 11  | 0  | 1  | 0  |  2 |
| 12  | 0  | 0  | 1  |  3 |
| 20  | 0  | 1  | 0  |  4 |
| 21  | 1  | 0  | 0  |  5 |
## 動かし方
### インポート
```python
from rankfm.rankfm import RankFM
```

### 初期化
```python
model = RankFM()
```

### 学習
#### model.fit()
modelをclearしてから学習する
#### model.fit_partial()
modelをclearしないで学習する（追加学習）

```python
data: PandasDataFrame
user_features_df: PandasDataFrame
item_features_df: PandasDataFrame

data.columns
> ['user_id', 'item_id']
user_features_df.columns
> ['user_id', 'age_10', 'age_20', 'gender']
item_features_df.columns
> ['item_id', 'category_1', 'category_2', 'category_3', 'price']


model.fit(data, user_features=user_features_df, item_features=item_features_df, epoch=100, verbose=False)
```

### レコメンド
model.recommend()という関数があって、これが便利
ユーザーIDを以下のどれかで投げてあげれば、レコメンドする商品を返してくれる。

- pandas.Series
- np.ndarry
- list

また、`filter_previous`というパラメータは、既にユーザーのログに存在する商品をレコメンド先に出さないようにしてくれる。
つまり、既閲覧・購買商品を勝手に取り除いてくれる（楽）

```python
model.recommend(users, n_items=10, filter_previous=True)
```

### 注意点
- モデルの保存がなさそう
WordPressプラグイン zipファイルでインストールできないとき対処法

# はじめに
・WordPressで、プラグインがインストールできない方。

・その他、PHPでファイルがアップロードできない方。

## 原因
PHPの**`初期設定でのファイルアップロード最大値(2M)`**を超えているためです。
それ以下のサイズの場合は、問題なくアップロードで、インストールできます。

## php.iniを編集

まずは、**`php.iniを編集します。`**

以下のコマンドで、**`php.ini`**のパスを確認します。

```:phpコマンド
php --ini
```

```:実行例
Configuration File (php.ini) Path: /usr/local/etc/php/7.4
Loaded Configuration File:         /usr/local/etc/php/7.4/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.4/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.4/conf.d/ext-opcache.ini
```

次に、**`vi`**を使用して編集します。
※今回の場合は以下のようにします。

```:viコマンド
vi /usr/local/etc/php/7.4/php.ini
```

**`php.ini`**の中身の、
**`upload_max_filesize = 2M`**を、以下のように編集してください。
※必要に応じて、サイズは各自で選定してください。20Mを例にします。

```:php.ini
upload_max_filesize = 20M
```

## PHPの設定情報の確認

先程変更した、内容を確認します。

PHPの設定情報を確認するには、
**`phpinfo関数`**を使用します。

※index.phpを作成してください。

```php:index.php
<?php 
phpinfo(); 
?>
```
**`index.php`**を実行し、
**`Core`**の中に**`upload_max_filesize `**があるので、
**`upload_max_filesize = 2M`**から**`upload_max_filesize = 20M`**
となっているのを確認してください。

## まとめ

・PHPの初期設定のファイルアップロードサイズは、2M

・ファイルのアップロードサイズを変更した際は、
　php.iniのupload_max_filesizeを変更。

・PHPの設定情報の確認は、phpinfor関数を使用。

参考サイト
・[php.iniでファイルのアップロード可能サイズを設定する](https://gray-code.com/php/setting-for-file-upload-by-phpini/)
Ethereum ETL でブロックチェーンデータを解析したいメモ

## 背景

Ethereum のブロックチェーンデータを解析したい.

しかし archive node 建てたり, Infra の archive node 課金とかめんどい...

Ethereum-ETL(extract, transform and load) がありました.

https://github.com/blockchain-etl/ethereum-etl


Infra アカウント自体は必要ですが, ブロックチェーンのデータこれで引っこ抜いて CSV 化して解析とかやりやすそうです!
サブネットマスクを使う効果

#概要
社内の雑談で、サブネットとかサブネットマスクとかよく聞くけどどこで何に使っているのかわからないという声があったので、説明用にざっくりとまとめてみました。

初心者（ITパスポートくらい？）の方向けの内容です。

#前提
ネットワークの話の前に、ビット演算について少し理解している必要があります。

・入力値と0をANDすると、必ず0になる
・入力値と1をANDすると、必ず入力値になる
この特性を活かしたテクニックを、マスキングといいます。

例1

```
    10111100 入力値　
AND 00000000 マスク
--------------
    00000000 結果
```

例２

```
    10111100 入力値　
AND 11111111 マスク
--------------
    10111100 結果
```

例3

```
    10111100 入力値　
AND 11110000 マスク
--------------
    101110000 結果
```

こういうテクニックがあるよ、くらいの理解で大丈夫です。

#サブネット
会社のネットワークは
・部署A　192.168.13.X
・部署B　192.168.16.X
・・・・・
・・・・・
のように小さい単位（=サブネット）に分けて管理するのが一般的です。
こうすると「部署BだけがDBサーバーにアクセス可能、それ以外の部署は拒否」のように、部署（=サブネット）単位でコントロールできるので管理が容易になります。

#サブネットマスク
例えば上記の「部署BだけがDBサーバーにアクセスできる」の設定は
DBサーバーのファイアウォールに
"192.168.16.0/255.255.255.0 を 許可”
のように記述します。

このようにサブネットは、
"サブネットアドレス"と"サブネットマスク”
の組み合わせで表現できます。

サブネットマスクは、サブネットの表現方法として考え出されたものです。
なおサブネットマスク単体で使う、ということはありません。

#具体的に
"192.168.16.0/255.255.255.0 を 許可”、と設定したファイヤーウォールでは、以下の順で処理されます。

①アクセス要求したマシンのIPアドレス
　と
②サブネットマスク（255.255.255.0）
　をマスク（= ビット演算 AND）し、
③結果
　を
④サブネットアドレス(192.168.16.0)
　と比較。一致すれば許可、しなければ拒否します。


例1　部署AのPC　192.168.13.55

```　
    11000000.10101000.00001101.00110111 (=①PCのIPアドレス　192.168.13.55)
AND 11111111.11111111.11111111.00000000 (=②サブネットマスク　255.255.255.0)
-------------------------------------------
    11000000.10101000.00001101.00000000 (=③結果　192.168.13.0)

③結果（192.168.13.0）
　は
④サブネットのアドレス（192.168.16.0）
　と一致しないので、拒否！
```

例2　部署BのPC　192.168.16.3

```
    11000000.10101000.00010000.00000011 (=①PCのIPアドレス　192.168.16.3)
AND 11111111.11111111.11111111.00000000 (=②サブネットマスク　255.255.255.0)
-------------------------------------------
    11000000.10101000.00010000.00000000 (=③結果　192.168.16.0)

③結果（192.168.16.0）
　は
④サブネットのアドレス（192.168.16.0）
 と一致するので、許可！
```

#効果
##サブネットマスクがないと
サブネットマスクがないと、ファイヤーウォールに
192.168.16.1　許可
192.168.16.2　許可
・・・・
192.168.16.55　許可
・・・・
のように、ネットワークの中にある端末全部について設定する必要があります。

##サブネットマスクがあると
サブネットマスクの最後の8桁が0なので、接続要求したPCのIPアドレスが
192.168.13.1
でも
192.168.13.55
でも
マスクした結果は
192.168.13.0
になります。

同様に
192.168.16.1
でも
192.168.16.3
でも
192.168.16.201
でも
マスクした結果は
192.168.16.0
になります。

この特性を活かして、ファイヤーウォールには
"192.168.16.0/255.255.255.0 許可”
と書くだけですみます。

#最後に
ここではファイヤーウォールの設定を例に説明しましたが、ネットワークに関するあらゆるところで使われています。

また組織内のネットワークを小さい単位で分ける必要が全く無いのであれば、もちろんサブネットやサブネットマスクを使うことはありません。