OmniAICreator/Qiita-1.07M huggingface dataset:
Transformer(ViT)系より良いConvだけのネットワーク出たよ（画像認識向け）

追記２:　EfficientNetV2も仲間に入るってTwitterで言うてるんで、さらに追記。
追記:　ViTの中の人から物言いが入ってるんで、追記しました。

ViTが出てから、画像認識向けでもTransformer系が一気に流行り、Swine Transformerで、ピラミッド構造ありTransformer系がSOTAという流れになってたけれど、比較対象のCNNが古いResNetってどうよ？　もう2020年代に入って随分経つんだし、ちゃんと新しい手法入れたConvと比べようよ。ってことで、FAIRからConvNeXtってのが出ました。
[A ConvNet for the 2020s](https://arxiv.org/abs/2201.03545)

同規模間の画像認識でSOTAだそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730426/2dd74ee5-d299-1011-039f-9a0b6e6bd46b.png)

Object detectionでもinstance segmentationでもsemantic segmentationでも、今までのと同じくらいか、更に良いそう。
TransformerだMLPだと、あれだけ言って、結局Convに戻って来たなら、なかなか面白い。
と、言うことで、ちょっと詳しく見て行こうと思う。

あ、注意、普通のConvはなくて、Depthwise Convを使っている。

追記:　ViTの中の人がTwitter上で、ViTの実力は、そんなんじゃないとおっしゃっているので、そちらも。まあ、そもそもViTの学習手法は、すぐさまDeiTに塗り替えられたわけで、どれをオフィシャルと言うかは、いろいろありそうだけれども。Twitterの中で、Referしてる論文は以下。
[How to train your ViT? Data, Augmentation, and Regularization in Vision Transformers](https://arxiv.org/abs/2106.10270)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730426/d36d792f-6105-82aa-6fc4-ad9ca4dd88cf.png" width=50%>

追記２:　EfficientNetV2の中の人が仲間に入りたいそうで。さすがに、NAS系は仲間外れで良いんじゃないかとは思うけど。
[EfficientNetV2: Smaller Models and Faster Training](https://arxiv.org/abs/2104.00298)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730426/6f48ca54-c30c-e6b6-ee31-c7dd2659fc4b.png" width=50%>

## 新しい学習手法を使う

ResNetの時代から、どんどん進化している学習手法をきちんと追加。

- AdamW optimizer
- data augmentation: Mixup, Cutmix, RandAugment, RandomErasing
- regularization: SStochastic Depth, Label Smoothing
- 300 Epoch学習（元は90）

と、ここまでやると、元のResNet-50が、76.1%から78.8%に上がる。
これだけで、かなりの上がり具合。

## 大きく構造を変える
今までのCNN構造の英知を集め、更にTransformer系のピラミッド構造を元に、手を加える。

#### ピラミッド構造の層を変更
今までのResNet-50のピラミッド構造は、(3, 4, 6, 3)だったけど、これをSwine Transformerの構造を元に(3, 3, 9, 3)に変更。
計算量は、Swin-Tくらいになる。
これで、精度が78.8%から79.4%に。

#### STEMを変更
Swine TransformerのSTEMを元に、今までのSTEM：
　7x7 Conv stride=2
　3x3 maxPool stride=2
を
　4x4 non overlapping conv stride=4
に変更。
計算量がちょっと減って、精度がちょっと上がる。

#### いろんなConvのアイディアを入れる
ResNeXtのアイディアを使い、Depthwise Convにして、代わりにWidthを大きくする。(a)
ResNet-50のチャンネル数は、Swin-Tに合わせる。
これで、精度は、79.5%から、80.5%に。

次に、ResNetのBottleneck構造をInverted Bottleneck構造に変えて、計算量を削減。(b)
何故か、これでも精度が上がり、80.6%に。ResNet-200の方は、更に大きく良くなっている。

更に、3x3 Depthwise Convの位置を変えて、TransformerのMSA blockとMLP blockのようにして、計算量を削減。(c)
これだけだと精度が下がるが、この後、カーネルサイズを3x3から大きくして行く。7x7で80.6%に戻るが、計算量は増えない。
これらのアイディアを図示すると以下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730426/79890721-54c3-04ab-11c6-7f79935277e9.png)

##更に細かく変更

これまでのいろいろなNNのアイディアを入れていく。
ReLUはGELUに変更。BNはLNに変更。
Transformerを見るとReLUもBNもCNNと比較してずいぶん少ないので、以下のように減らしてみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730426/a12b7f70-aba2-7f71-ceee-c762e82e3381.png)
ReLUからGELUに変更して、GELUを減らすだけで、0.7%良くなる。
それから、BNをLNに変更して、LNを減らすと更に良くなる。

downsamplingをSwine Transformerのように、層の間に2x2 Conv stride=2に変更すると、そのままでは、学習がうまく行かないので、LNを入れて安定化させる。これで、更に精度が上がる。

## まとめ
ということで、これらのステップをまとめた結果がこちら。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730426/823610ef-5bb3-cfcd-47b9-0a738b633eab.png)

新しい子の名前はConvNeXtだそうです。
プログラミング未経験　C言語初心者にお勧めしたい勉強法

#はじめに
Qiitaに初めて記事を書く専門学校1年です。この記事ではプログラミング初心者である私が挫折することなく楽しくC言語の勉強を進められている勉強方法を紹介したいと思います。
##この記事の対象者
●プログラミング初心者でひとりでのプログラミング学習（学校や定額制サービスを除く）がなかなか手につかない方
●c言語に問わずこれからプログラミングを始めたい方
#本などの参考書を使った勉強が苦手
![参考書](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2302321/86c4bbac-bbf8-7f5a-1d36-aa63a2541b3f.jpeg)
多くの人が学習を始めるうえで最初に手に取るのは、本屋に行けばすぐに手に入る参考書が多いと思います。
参考書を読みながらスラスラと理解していけるのであれば、私のように挫折しそうになることはないと思うのでそのまま進めていけば大丈夫だと思います。
###理由1
参考書を使った勉強で私が挫折しかけたことの1つ目が、本に書いてあることを自分なりに解釈して進めていくということです。しかしこのケースは自分なりの解釈ができる方にとっては記憶に定着しやすく参考書の一つの利点とも言えます。
###理由2
パソコンを使って学習するプログラミングなのに、参考書を横において文字を追いながらパソコンの画面を見てコードを書く視線の忙しさ、手軽にどこでもできない、等が私のモチベーションを下げる要因になりました。
#動画を使ったプログラミング学習の勧め
![動画学習](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2302321/f8f23d9c-9fda-55e2-04b7-bd4deeccd156.jpeg)
以上のことを踏まえて私が個人的にたどり着いたのは動画学習でした。
###利点1
参考書と違って他人の考え方、理解の仕方などを知ることができより効率的に学習を進められる。
###利点2
とにかくお手軽！パソコン1台で学習しながらコードも打てるし、参考書のように持ち運ぶ必要がない。
動画を見るだけであれば通勤・通学の時でもスマホから見ることができる。
###利点3
復習のしやすさ！一回やった内容を再度復習したい場合でも動画を流し見したり、分野別のピンポイントの復習がしやすい。
###注意点
自分の開発環境と動画内で扱っている開発環境が異なると多少支障が出る場合があるので要注意！
#Udemy

https://www.udemy.com/ja/

動画学習と言っても有料のもの、無料のもの、YouTubeでさえたくさんの講座が上がっています。
その中の一つの選択肢として私がお勧めしたいのは[Udemy](https://www.udemy.com/ja/)です。
そして今私がC言語を学習している講座がこちらです。

https://www.udemy.com/course/cc-lubmn/

###オススメポイント1
プログラミングなど技術的な講座はもちろん、音楽やデザインなどの趣味関連の講座も豊富。
###オススメポイント2
YouTubeなどの講座とは違い、講師に直接質問できる講座もあったり、講座ごとに練習問題が用意されていたり、等々有料なだけにサービスが豊富。
###オススメポイント3
通常一つの科目につき20000円前後の値段で気軽に手を出せる金額ではありません。
しかし定期的に行われるセール期間になると一つの科目につき1000~2000円ほどで買える大幅値下げが入ります、この値段であれば参考書一冊買うのと大差ないと思います。
#最後に
今回の記事では個人的に一番いいと思った勉強方法を紹介しました。
私がこの記事を通して伝えたいのは、ダメだと思ってすぐに挫折するのではなく自分から様々な方法を模索し、試していくことが大事ということです。
私の勉強法が皆さんの選択肢の一つになれたら光栄です。
コマンドプロンプトでファイルをパソコンAからパソコンBに共有する

<h1>はじめに</h1>
この記事はプログラム初心者である自分が気ままに調べて試行錯誤した結果を記している記事です。
間違えてもいいじゃない。人間だもの。
ファイルの共有にはOneDriveなどの便利なツールを使っていると思いますがコマンドプロンプトでもファイルの共有が可能なのか気になりやってみることにしました。
<h1>コマンドプロンプト</h1>
コマンドプロンプトとはコマンドと呼ばれる命令を用いwindous上のいろいろな操作を行う機能です。
ディレクトリ構造やIPアドレスの確認などが行えます。起動方法は知っている人の方が大半だと思いますが一応記しておきます。<p>
①スタートメニューの検索でコマンドと打つ。
②予測変換に出てくるコマンドプロンプトをクリックする。
<p>
簡単ですね。
<h1>事前準備</h1>
まずファイルの共有を説明する前に設定を行います。ファイルの共有を行うには送信先のIPアドレスを知る必要があり（知らずに共有できる方法もあります）、そして通信相手と通信が確立できているか確認する必要があります。そこで送信先のパソコンで"ipconfig"と打ちます。![スクリーンショット 2022-01-12 193334.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500809/af9abb8c-b6a5-408b-e26f-70cf028cd06b.png)
今回自分の場合のIPアドレスはWireless LAN adapter WI-FIのIPv4アドレスに書いてある192.168.0.161です。
続いて通信が確立できる確認します。次は送信元のパソコンで"ping 192.168.0.161"と打ちます。![スクリーンショット 2022-01-12 193908.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500809/129ba22b-7571-7dd9-5462-1f24a56bdf9b.png)
大体、このような画面が出たら通信が確立しているため成功です。できない場合は調べてください。
続いてファイルの共有を有効にします。共有したい側のファイル、共有される側のファイル両方に次の設定を行います。![スクリーンショット 2022-01-12 194301.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500809/6b26ebac-43f0-0c4e-daae-8be7182e772c.png)
ファイルを右クリックしてアクセスを許可する。特定のユーザーをクリックします。![スクリーンショット 2022-01-12 194332.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500809/0a13a0db-b367-6801-dc07-bcc043d726b4.png)
表示された画面にあるｖを押してEveryoneを選択します。![スクリーンショット 2022-01-12 194350.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500809/bcffa1fb-4254-0daf-2ab0-39d512697999.png)
後はEveryoneのアクセス許可のレベルを読み取りから読み取り/書き込みに変更して共有で完了です。
<h1>robocopy</h1>
あと少しです。頑張りましょう。ここで登場するコマンドがrobocopyです。このコマンドはリモートのサーバのファイル同士で同期させるコマンドですがコピーするだけでも可能です。使い方は"(robocopy) (送信元のファイル)　(送信先のファイル)　(オプション)"です。![スクリーンショット 2022-01-12 190815.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500809/bc6fe66f-919e-d1ad-9719-35f8f5e0bc9f.png)
<span style=”background-color:#FFCBCB;”>robocopy
C:\Users|81805\OneDrive\ドキュメント\test2 
 \\192.168.0.161\Users\user\Documents\test1</span>
<p><p>
これでコピーの完了です。実際に確認してみましょう。![test11111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500809/a9a560bd-70c9-15c3-b90f-f248d75acf5a.png)![test32232.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500809/2b61694d-b6dc-5ce2-3c30-457f694641cf.png)
test1ファイルにtestmemo11.txtが追加されていますね。これで共有の成功です。お疲れ様です。今回使ったrobocopyにはコマンドがたくさんありそれを使用すると共有をより細かく設定できます。一例を紹介しておきます。
1  /MOV  |ファイルを移動する（コピー後にコピー元から削除される）
2 /XN |新しいファイルを除外する
3 /MAXLAD:YYYYMMDD   |YYYYMMDD日以降にアクセスしていないファイルを除外する
4 /S 	|サブディレクトリをコピーするが空のディレクトリはコピーしない

などなど、たくさんのオプションがあります。気になる人は調べてください。
<h1>最後に</h1>
今回使った方法はセキュリティ面を一切気にせず行ったため、たぶん脆弱です。なので普段使いするならパスワードを設定するやり方をした方がいいと思います。今回、自分はやらなかったのですが次の機会にやってみてもいいですね。
初めて書いた記事ですがいかがでしたか？つたない文章で申し訳ございません。次書く時までには修行してまいります。では。またの機会に。
googlecolabで画像を複数一気にアップロードして表示させる方法

#はじめに

googlecolabを使っているとローカルから画像をアップロードしたくなることがありますよね。
そんな時、ちゃんとアップできたか確認するために画像をすべて表示したくなることがあります。
複数パスの取得など躓いたところがあったので書いておきます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/50af088d-f76b-3d41-d1a6-e16b4f4035bc.png)


#コード




こちらの記事を参考にしました。

https://qiita.com/5at00001040/items/d7867974d2fd1d21dbbf

アップロードについては`files.upload()`ででき、以下のようなものが表示されるようになります。
この際、複数ファイルを選択してしたり、`ファイル選択`の部分に複数ファイルをドラックアンドドロップすることでまとめてアップロードすることができて便利です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/344504b7-4c63-1c2f-844c-6f29474cc788.png)


画像名の一括取得は以下のようにできます。

```.py
from google.colab import files
uploaded_files = files.upload()
uploaded_file_names = list(uploaded_files.keys())
```

これを利用して画像の表示までしたものが以下のコードです。


```.py
from google.colab import files
uploaded_files = files.upload()
uploaded_file_names = list(uploaded_files.keys())
uploaded_file_names.sort()
print(uploaded_file_names)

import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
  


fig = plt.figure(figsize=(30, 40))
images=[]
for i in range(len(uploaded_file_names)):
    img = Image.open(uploaded_file_names[i])    
    images = np.asarray(img)
    ax = fig.add_subplot(10, 10, i+1, xticks=[], yticks=[])
    image_plt = np.array(images)
    ax.imshow(image_plt)
    ax.set_xlabel(str(i), fontsize=20)               
plt.show()
plt.close()  
```
【EC2】GPUインスタンスの上限緩和リクエスト

# 起こったこと

AWSのEC2で、GPU搭載のEC2インスタンスタイプ（g4dn.xlarge）のインスタンスをコマンドラインから作成しようとしたところ以下のようなエラーメッセージが出て失敗しました。

```
10:57:19 AM | CREATE_FAILED        | AWS::EC2::Instance                    | Ec2ForDl-Instance
You have requested more vCPU capacity than your current vCPU limit of 0 allows for the instance bucket that the specified instance type
belongs to. Please visit http://aws.amazon.com/contact-us/ec2-request to request an adjustment to this limit.
```

https://tomomano.github.io/learn-aws-by-coding/#sec_jupyter_and_deep_learning

> 初期状態の AWS アカウントでは， GPU 搭載の Gタイプのインスタンスの起動上限が0になっていることがある． これを確認するには， AWS コンソールから EC2 の画面を開き，左のメニューから Limits を選択する． その中の Running On-Demand All G instances という数字が G インスタンスの起動上限を表している．

> もし，これが 0 になっていた場合は， AWS の自動申請フォームから上限緩和のリクエストを送る必要がある． 詳しくは 公式ドキュメンテーション "Amazon EC2 service quotas" を参照のこと．

エラーメッセージの通りなのですが、これですね。

先人の記事を参考にしてリクエストを送りました。ほぼ同じ内容になるのですが一応自分用メモとしても残しておきます。
https://zenn.dev/omakazu/scraps/8ec2e0f868f78b

# 対応内容
## 緩和後の上限
上限が0になっているのが問題なわけですが、上限をいくつまで引き上げればいいのでしょうか。これは計算ツールを使って、その結果に従えばいいようです。
結果としては、g4dn.xlargeの場合は上限を4まで引き上げればいいようでした。
![スクリーンショット 2022-01-10 20.12.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321705/eb49dfff-4151-30f3-567d-5160df16d12e.png)

## 申請フォームの入力
上限緩和リクエストは以下のリンク先のフォームで送ります。
http://aws.amazon.com/contact-us/ec2-request

内容は以下の通り。

* Create case
    * Service limit increase
* Case details
    * EC2 インスタンス
* リージョン
    * アジアパシフィック（東京）
* プライマリインスタンスタイプ
    * All G instances
* New limit value
    * 4
* Use case description
    * For study.（※これは適当）

![スクリーンショット 2022-01-10 20.14.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321705/eb8a15c6-9cfa-1c45-2d11-d9b2f76ae924.png)

![スクリーンショット 2022-01-10 20.14.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321705/b0963dbf-b843-0c2d-2ed4-6f5e1df1c2ac.png)

![スクリーンショット 2022-01-10 20.26.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321705/92cef444-57b2-44fb-450e-9a3e662a98dc.png)

この内容で送信しました。

今回は申請の6時間半後くらいに完了の連絡が来ました。その後、無事インスタンスを作成できました。
リストアップされた名前のフォルダーを一括作成！【OBGノウハウ】


各画面の設計書、テストのエビデンス格納先として、リストアップされた名前のフォルダーを一括で作成したい…できたら名前の前に連番も振りたいな……そんな時ありませんか？私はあります！

2、3個なら直接作っても良いのですが10個、50個、100個と必要なら1個ずつ作って名前を付けるなどと考えるだけで泣きたくなりますね。絶対にやりたくないですよね。

たまたま50個ほどリストアップされた画面名のフォルダを作る必要があり、簡単にできないか調べた結果を備忘録として残します。リストアップされた名前だけではなく、名前の前に連番を振り番号順にフォルダが作成されるように少しアレンジしてみました。


# 1.フォルダ名リストを作成

必要なリストはコピペできるけど、番号が振っていない場合を想定して進めます。都道府県名を例にしますね。

ExcelのB列にリストを記載、A列には番号を記載します。C列で、A列とB列の文字列結合を`&`を用いて行います。（CONCATENATE関数やCONCAT関数でも、結合が行えれば問題ないです）

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/290601d6-0268-3e60-fe17-30850fb643d2.png)

結合したC列をコピーしてD列に<font color=red>**値のみ貼り付け**</font>ます。こうすることでC列は式となっていますが、D列はただの文字となりますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/9f888025-e50d-f8c0-5e35-5325a827cbcc.png)

# 2.新規フォルダ作成コマンドを追加しCSV形式で保存

A～C列は不要となるので削除します。上記のD列をB列へ移動させ、A列に`md`とフォルダ作成のコマンドを記載します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/2bb0a9b9-bc55-9fb9-92c2-e655f6fd942e.png)
ファイル形式で<font color=red>**CSV（コンマ区切り）**</font>を選択して保存します。（データ損失の注意書きが表示されますが、進めてしまって問題ありません。）
作成したCSVファイルをテキストエディタで開くと`,`区切りでリストアップされていることが確認できましたか？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/fc6234f0-91f1-38b5-3c62-519976858b45.png)

# 3.バッチ作成

確認できたら、ファイルの「名前の変更」から拡張子を`.csv`から`.bat`へと変更します。アイコンが以下のように変わっていれば、バッチ(拡張子が`.bat`)となっていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/b61fedaf-6cd4-9324-3727-738c211c0cd5.png)

こちらの中身を見ていただくと、先ほどのcsvファイルと同じ内容が列挙されています。<font color=red>**md 番号_都道府県名**</font>の形式で47都道府県が並んでいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/061304dd-89d8-38dd-eeb0-d2f96577efeb.png)
`md`は**ディレクトリ（フォルダ）作成**のコマンドです。`md フォルダ名`で指定した名前のフォルダが作成されます。

作成されたバッチをダブルクリックすることで、指示された処理が走るので…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/423eb3a2-9bb1-7b0f-2c00-3562091e8b55.png)

都道府県名に連番が振られ昇順で並んだフォルダが作成されました！！！

この方法で100個でも200個でも作成できるのと、最初の手順で紹介した[Excelでの文字列結合](#1フォルダ名リストを作成)により連番だけではなく日付を後ろに入れることも可能です。部署名・姓・名とセルが分かれているデータから「部署名_姓名」のフォルダを作成することもできます。

作業としても難しくはないのでぜひ試してみてくださいね♪

参考:[【フォルダ作成】大量の連番フォルダを一括で作る方法](https://hiro2n.com/create-folder-993)

### list.bat

```
md,1_北海道
md,2_青森県
md,3_岩手県
md,4_宮城県
md,5_秋田県
md,6_山形県
md,7_福島県
md,8_茨城県
md,9_栃木県
md,10_群馬県
md,11_埼玉県
md,12_千葉県
md,13_東京都
md,14_神奈川県
md,15_新潟県
md,16_富山県
md,17_石川県
md,18_福井県
md,19_山梨県
md,20_長野県
md,21_岐阜県
md,22_静岡県
md,23_愛知県
md,24_三重県
md,25_滋賀県
md,26_京都府
md,27_大阪府
md,28_兵庫県
md,29_奈良県
md,30_和歌山県
md,31_鳥取県
md,32_島根県
md,33_岡山県
md,34_広島県
md,35_山口県
md,36_徳島県
md,37_香川県
md,38_愛媛県
md,39_高知県
md,40_福岡県
md,41_佐賀県
md,42_長崎県
md,43_熊本県
md,44_大分県
md,45_宮崎県
md,46_鹿児島県
md,47_沖縄県
```
【まとめ】React（Next.js）の良さを語りたい

#◆Reactとは
ReactはFacebook社が開発しているJavaScriptのライブラリ

##リアクティブプログラミング
Reactive: 反作用

何かの値が変化すると、それに反応して何かが起こります。
値の変化に反応して起こるのは表示の更新です。

リアクティブは値の伝播を中心にした考え方で、
元となる値を操作することでそれを利用する表示も自動的に更新されます。


#◆Next.jsとは
Vercelというホスティングサービスを提供しているVercel社が開発しているReactのフレームワークです。

https://nextjs.org/
公式サイトのファーストメッセージ The React Framework for Production をまさしく体現したような、プロダクトの本番環境で使える機能満載 & 設定が容易なフレームワークとなっています。


##Pre Renderingが便利
事前にHTMLをレンダリングすることです。


事前にHTMLをレンダリングすることで、Googleのbotへコンテンツを正しく認識してもらえたり、スペックの高いサーバでレンダリングしてブラウザへの負荷を下げたりと、Client Side Renderingでの課題を解決できます。
=SEO対策


##ルーティングなどのサポートが便利



#◆関数コンポーネントがオススメです
理由として、簡単に超ざっくり言うと

コードが短く済む
からです。（あとはReactチームがReactフックのサポートに結構力を入れているから）

＝＞　https://zenn.dev/killit/articles/5af626acfb2ab7


#React 初心者の難問、カスタムフック（Custom Hook）
https://zenn.dev/luvmini511/articles/df410f137d1e21



#Q.npm startコマンドを実行した後、バックグラウンドで何が起こっていますか？
webpack-dev-serverを使用して、通信可能な開発サーバーを起動します。

これにより、npm startによって実行されるスクリプトがアプリケーションディレクトリに直接配置されるため、Create-React-Appの動作を確認できます。さらに、これらのスクリプトで使用されるwebpack構成ファイルをディレクトリに追加します。最後に、package.jsonファイルを更新して、Create-React-Appが使用している依存関係を実際に確認できるようにします

package.json を調べると  そして、各コマンドが実際に行うことをたどることができる「スクリプト」セクションを確認してください。たとえば、「start」コマンドはここにあります。これは start.js を呼び出します  スクリプトフォルダ内のファイル。これは、webpack-dev-serverが開始されるのを見るファイルです。



#Q.ライフサイクル図ってなんぞ？
実装→更新　　未実装　のときの流れ　
４回目くらいでやっと理解…＞＜
https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/


#Q.理解せずにはいられない『props』『state』とは？？
◆props
this.props には、このコンポーネントの呼び出し元によって定義された props が含まれています。
props の紹介は コンポーネントと props を見てください。
https://ja.reactjs.org/docs/components-and-props.html

関数コンポーネントがオススメです
（コードが短く済む）


◆state
state には、そのコンポーネント固有のデータが含まれており、これは時間の経過とともに変化する可能性があります。state はユーザ定義のものであり、プレーンな JavaScript オブジェクトでなければなりません。

レンダーやデータフローに値が使用されていない場合（たとえば、タイマー ID）は、値を state にする必要はありません。そのような値は、コンポーネントインスタンスのフィールドとして定義できます。

state の詳細については、state とライフサイクルを参照してください。
https://ja.reactjs.org/docs/state-and-lifecycle.html



##JSXは深く理解しておこう
Reactといえば、このJSXが特徴的。
JSX では JavaScript のすべての能力を使うことができます。どのような JavaScript の式も JSX 内で中括弧に囲んで記入することができます。

https://ja.reactjs.org/docs/jsx-in-depth.html


#Q.これを言われてピンときますか？？
親コンポーネントから子コンポーネントに「props を渡す」こと



過去書いたReactのQiita記事はこちら

https://qiita.com/testMenta339/items/a88d17631d8b32338f17

https://qiita.com/testMenta339/items/cbf01abac0676f270902

https://qiita.com/testMenta339/items/84512d9126890616885c

https://qiita.com/testMenta339/items/886af0f2da2efe9e706c

https://qiita.com/testMenta339/items/097f536c56dc151725f6
FreeDOSでpccard

pccardはpcmcia(16bit)とcardbus(32bit)の総称として言われることがあります。ホスト側は初期の一時期はpcmciaのみのサポートのチップ(i82365SLや互換のCirrus Logic CL-PD6710/’22など)がありましたが、じきにほとんどがcardbusもサポートされるようになりました。

pcmciaはISAバス由来でcardbusはPCI由来のものになります。

PCMCIAはi386の頃に出てきたのですが、i386は32Bitでしたが、当初はDOSで早い16Bit CPUとして使われていたので、DOSもサポートされていました。

一般ユーザーがホットプラグ(活性交換)ができる、初めてのデバイスでした。

Windows 95でサポートが入りましたが、それ以前のWindows 3.1やMS-DOSではサードパーティ製のドライバーソフトが必要でした。

pcmciaは90年代中期(Windows 3.1の後期からWindows 98くらい)
に良く使われ、後期にはcardbusが出てきましたが、USBもすぐにその後でてきて、cardbusのデバイスはそれほど普及しませんでした。

当時FreeBSDのPAOを使っていてcardbusへの移行がかなり大変だったような記憶があります。

pcmciaの場合はカードの情報により、ISAアドレス空間にデバイスを配置して、cardbusの場合はpciバス空間にデバイスを配置します。

FreeBSDのpccbbのmanを見ると以下のようなcardbusチップがあったようです。

```
     Cirrus Logic PD6832
     Cirrus Logic PD6833
     Cirrus Logic PD6834

     O2micro OZ6812
     O2micro OZ6832
     O2micro OZ6833
     O2micro OZ6836
     O2micro OZ6860
     O2micro OZ6872
     O2micro OZ6912
     O2micro OZ6922
     O2micro OZ6933
     O2micro OZ6972
     O2Micro OZ711E1
     O2Micro OZ711M1
     Ricoh RL4C475
     Ricoh RL4C476
     Ricoh RL4C477
     Ricoh RL4C478

     TI PCI-1031
     TI PCI-1130
     TI PCI-1131
     TI PCI-1210
     TI PCI-1211
     TI PCI-1220
     TI PCI-1221
     TI PCI-1225
     TI PCI-1250
     TI PCI-1251
     TI PCI-1251B
     TI PCI-1260
     TI PCI-1260B
     TI PCI-1410
     TI PCI-1420
     TI PCI-1450
     TI PCI-1451
     TI PCI-1510
     TI PCI-1515
     TI PCI-1520
     TI PCI-1530
     TI PCI-1620
     TI PCI-4410
     TI PCI-4450
     TI PCI-4451
     TI PCI-4510
     TI PCI-4520
     TI PCI-[67]x[12]1
     TI PCI-[67]x20
     ENE CB710
     ENE CB720
     ENE CB1211
     ENE CB1255
     ENE CB1410
     ENE CB1420

     Toshiba ToPIC95
     Toshiba ToPIC95B
     Toshiba ToPIC97
     Toshiba ToPIC100
```

このmanページが良く調べられているのは日本にいたPAOな開発者が書いたからだと思われます。

DOSでpccardを使う場合にはカードサービスが必要で下記のページが参考になります。

http://mcn.oops.jp/dev/pcat/pc_card.htm

http://www.thinkpad-lover.org/msdos/07-PCMCIA.htm

用語が一部混乱してますが、構成はこうなっているようです。

![PCCARD.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/adcc774c-5326-523e-ebae-89c609d3adb4.png)

Card Service(CS)とSoket Service(SS)を分けたのは、チップ依存部がSSにしていろいろなチップに対応できるようにしたのだと思われますが、今から思えばあまりチップの差は無くまた短命に終わったので、分けた意味はあまりなかったような気がします。というのは、後からだから言えるわけで、当時はどうなるか分からなかったので、そうしたのでしょう。

CSのAPIは共通化されてるようだし、IBMが作っていたものも、CSとSSに分かれているので、MSがなんらかのサンプルコードを提供していて、それを元に作られたんじゃないかな。

すでにほとんどのものが入手困難で、入手できたとしてもライセンス的に怪しいような気もします。

DOSやWindows 3.1で使われていたcardsoftのサポートはおそらくTIだと1xxxや1250のみで、これ以降はWindows 95からのサポートになっていたのではないかと思われます。

pciやcardbusは32Bitだが、DOSやBIOSは16bitで、今になってみると不思議な状態だ。

古いファイルを置いてあったサイトがなくなったり、googleが検索結果に出さなくなったりで、以前より状況は悪くなっています。

だれかPAOなどを参考にしてDOS用のfreeなカードサービス書いてくれませんか？

https://web.archive.org/web/20080308225938/http://www.linkclub.or.jp/~clover/cis/
【BizRobo!】 【DA】画像認識でステップを作成する方法

# はじめに
現在、RAPを実務で行っていますが、まだまだまだまだ経験が浅く、日々勉強中です。
本記事については、自身の備忘録も含め同じ様な所で頭を抱えている方に対して、
少しでもヒントになり、先に進める力となれれば良いなと思い記事にしましたーー！

## 今回のTips
Webページや、あるシステムを操作する際に、通常であれば、BizRobo!にてページの要素を認識し、クリックの入力処理が作成できると思いますが、DS、Cromium、DAで要素がうまく取れない場合に、画像指定にて、要素を認識させクリックやページの表示待ちなどを実施する方法のTipasになります。

## Tips概要
例えば…
以下の要素で確認すると、Componentに画像認識の設定を追加すると、「挿入」タブが認識するようになります。(挿入タブは普通でも認識すると思いますが、今回はあくまで例えです)
▼
![Excel_タブ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/715221/3e47be00-75f2-c535-3131-28d33cb065e6.png)
▼
![Excel_タブ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/715221/e3f2b8bc-30d5-870a-d6a7-3f339838d3f1.png)
(画像指定する事で、「Image」にチェックが入り、画像が追加されます)

## Tips詳細
**①デバイスオートメーションの画面で、画像認識させたい画面を表示します。**
→ステップオーバーで、該当箇所まで遷移させます。

**②画像指定したい箇所をドラッグで囲み、右クリックからClickステップを追加します**
→ドラッグすると、該当の箇所が紫の線で囲まれます。囲まれた分が、画像認識要素になりますので、問題なければ囲まれた部分を右クリックし、「Clickステップ」を追加します。
![Excel_タブ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/715221/e47e49d2-36e8-1fa4-9e97-e37f1a742b30.png)

## まとめ
いかがだったでしょうか。今回は、DAを使用したComponentにて画像指定する方法について、ご紹介しました。画像指定については、僕は現場であまり使用しない方法です。
(そこに手法にいきつく前に、要素を認識できる場合が多いです)

ただ、レガシーなシステムだと要素が認識できないケースもあると思いますので、そういった場合に、画像指定をご利用いただければと思います！
VSCodeのPrettier+black環境の作り方

# Formatterとは
コードの種類に応じて、自動で空白とか改行などの整形を行う拡張機能のこと。
有名なものでは、Prettier(JS, TS, yaml, html等が対応)やBlack(python用)などがある。
基本的にはPrettierを用いれば、大抵のプログラムは対応しているが、
PrettierはPythonに非対応のため、Pythonの時のみBlackを使うように設定する必要がある。

# Prettierのインストール
VSCodeでPrettierを使用するには、拡張機能をインストールします。
まずVS CodeのExtension panelでPrettier-Code Formatterを検索しインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346471/cd23be27-049c-8a10-552b-f0d04893b5b4.png)

## default formatterをPrettierに設定
画面左上のタブから`Code→基本設定→設定`を開き、
`editor.defaultFormatter`と検索して、`Prettier-Code Formatter`を選択
これでdefault formatterをPrettierに変更することができた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346471/54269df5-c1d1-a105-4729-3b0390130bb1.png)

次に`editor.formatOnSave`と検索してこれをTrueに変える。(ファイル保存時にFormatterを適用する設定)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346471/a89a7083-7c48-2262-2098-67c0f374d0c7.png)

# Blackのインストール
下記コマンドでBlackをインストールする。

```
pip3 install black
```

次に画面左上のタブから`Code→基本設定→設定`を開き、
`python.formatting.provider`と検索して、`black`を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346471/1f92b9d9-2f4d-bdfa-11c2-1b6e95956b54.png)

しかしこのままだと、Pythonであろうとdefault formatterであるPrettierが適用されてしまい、エラーが出る。
このため、pythonコードの場合のみ、prettierではなくblackを適用するよう下記の設定を追加する必要がある。

## python時のみdefault formatterを適用しない設定の追加
画面左上のタブから`Code→基本設定→設定`を開き、右上の３つのアイコンの一番左のものを押して、`settings.json`を開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346471/f78db856-cc13-03f7-4182-05e1465c262b.png)

そこで、一番下に

```
  "[python]": {
    "editor.defaultFormatter": null,
  },
```

というPythonの時のみ動作する例外設定を追加する。

最終的にsettings.jsonが以下のようになっていることを確認する。

```:settings.json
{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "python.formatting.provider": "black",
  "[python]": {
    "editor.defaultFormatter": null,
  },
}
```

# formatterの動作確認
## pythonファイルのフォーマット(black)
下記のようなフォーマットが壊れたpythonファイルを作成して、保存するとちゃんと整形されることを確認する。

```:test.py（整形前）
a = [     1, 
2,        3]
```
```:test.py（整形後）
a = [1, 2, 3]
```

## その他ファイルのフォーマット(prettier)
下記のようなフォーマットが壊れたjsファイルを作成して、保存するとちゃんと整形されることを確認する。

```:test.js（整形前）
const       test = 
    3;

const func =() =>      {
        return    0; 
};
```
```:test.js（整形後）
const test = 3;

const func = () => {
  return 0;
};

```
去年話題になった５Gについて

# 投稿理由 
去年ニュースや記事で耳にすることが多かった「**5G**」ですが、耳にするだけでどんなものなのか詳しく知らなかったので自分なりに調べて記事にしようと思いました。
#5Gとは
まず５Gとは**「第５世代移動通信システム」「5th Generation」**の略で、「高速大容量」「高信頼・低遅延通信」「多数同時接続」３つの特徴がある商用サービスのこと。
日本では２０２０年の春にサービスがスタートした。
#特徴１　高速大容量
**「高速大容量」**とは複数のアンテナをつかった無線通信技術「MIMO」を発展させたもの。これに電波を特定の方向に集中的に発射する技術「ビームフォーミング」くみあわせ、遠距離での高速通信を実現する技術のこと。
#特徴２　高信頼低・遅延通信
**「高信頼低・遅延通信」**とは通常の通信は、デバイス→基地局→インターネット→クラウドサーバーの流れでアクセスするのを逆の流れでアクセスし、デバイスとサーバーの物理的な距離を縮めて、通信時間を短くする技術のこと。
#特徴３　多数同時接続
**「多数同時接続」**とは、基地局1台から同時に接続できる端末を従来に比べて飛躍的に増やせること。５Gになったことで１００個程度の機器やセンサーを同時にネットに接続できるようになった。
#5Gと4Gの違い
現在最も使われている4Gですが5Gとの違いは、通信速度が4Gの20倍、遅延は4Gの10分の1、4Gの10倍ものデバイスを同時に接続できる。
#5Gのデメリット
4Gよりも大容量かつ高速な通信を行うため、端末も多くの情報を高速で処理しなければならないため端末に負荷がかかる。その結果端末のバッテリー消費が増えることが懸念される。
また、5Gが使える場所が、国内でも空港やキャリアショップなど限られている。
#まとめ
調べてみて、5Gは4Gに比べて勝る利点がたくさんあるがもっと普及するために改善しなければいけないこともたくさんあることが分かった。
Go言語について

#目次

1　Go言語の概要
2　Go言語の特色
3　Go言語で開発されているもの
4　まとめ
#Go言語の概要
Go言語は2009年にGoogleが開発したオープンソースのプログラミング言語である。
開発にはC言語の設計者やUNIXの開発者等の人物がかかわっている。
また、初期はLinuxとMac OSのサポートだったが、2013年にリリースされたバージョン1.0からはWindowsにも対応するようになった。
#Go言語の特色
Go言語はシンプルで高い信頼性をもつ効率的なソフトウェアを構築できる言語とされている。
Go言語はシンプルな構文のため、ほかの人が読んでも分かりやすいプログラミングを書きやすい。
また、高速な処理や並列処理が可能なため作業効率を上げることができる。
しかしGo言語はシンプル性を高めるために機能が最小限に抑えられており「例外処理」、「Generics」、「継承」等の機能が無いというデメリットも存在する。
#Go言語で開発されているもの
Go言語は主にスマートフォンアプリの開発、ドローンやロボットの組み込み開発、Webサービス、Webサーバーの構築等に使われている。
具体的な例
動画配信サービス「YouTube」
料理レシピの投稿・検索サービス「クックパッド」
フリマアプリ「メルカリ」
飲食店の情報を集めたウェブサイト「ぐるなび」
ニュース配信アプリ「Gunosy」
#まとめ
Go言語は今はまだPythonやJavaといった人気のある言語と比べると求人の数は少ないが、最新のIT技術でも活用しやすい点や大規模な開発をしやすい点、また2020年に行われた「エンジニアが学びたいプログラミング言語ランキング」では1位を取っている点からも将来性に期待でき、これからプログラミング言語を学びたい人におすすめの言語になっていると思う。
Bullseyeで緊急避難的なTFlite環境

# 1.はじめに

Raspberry Pi OSをBullseyeに変えたら、OpenCV（が要求するライブラリ）のインストールができなくてこまったりしたので、BullseyeでTFLite動かすための緊急避難的な覚書。ちなみにBusterなら[こちら](https://qiita.com/karaage0703/items/38f314d01a67ded949c2)や[こちら](https://qiita.com/airpocket/items/82fd19af15b068318e98)で動く（はず）。

OSのバージョンはこちら。

```sh
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 11 (bullseye)
Release:	11
Codename:	bullseye
```

# 2.OpenCVインストール

OpenCV（opencv-python）自体はpipでインストールできるのですが、依存ライブラリのうちlibqt4関連がBullseyeに対応してないっぽいのでインポートできません。ちょっとずるですが、[OAK-D](https://shop.luxonis.com/)のDepthAI動作環境をインストールするとOpenCVも一緒にインストールしてくれるのでこれを流用したらいいじゃない、ってことで

```sh

$ git clone https://github.com/luxonis/depthai.git
$ cd depthai
$ python3 install_requirements.py
```

```python
$ python
Python 3.9.2 (default, Mar 12 2021, 04:06:34) 
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.5.5'
>>> 
```

importできました。versionは4.5.5、最新ですね。


# 3.TFLiteのインストール

https://www.tensorflow.org/lite/guide/python#install_tensorflow_lite_for_python
こちらもBusterを推奨していますが、公式の方法でruntimeを入れてみます。

```sh
$ pip3 install --extra-index-url https://google-coral.github.io/py-repo/ tflite_runtime
```

インストールはできましたのでインポートしてみます。

```python
$ python
Python 3.9.2 (default, Mar 12 2021, 04:06:34) 
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> import tflite_runtime.interpreter as tflite
>>>
```

importもできましたね。

# 4.動作確認

TFLiteの動作確認はPINTO神さまのリポジトリが簡単なのでお借りします。

```sh
$ git clone https://github.com/PINTO0309/TensorflowLite-bin
$ cd TensorflowLite-bin
$ python3 mobilenetv2ssd.py
time:  0.08984041213989258
[[(128, 223), (320, 542), 0.96484375, 'dog'], [(114, 135), (564, 432), 0.953125, 'bicycle'], [(459, 80), (694, 173), 0.87890625, 'car']]
coordinates: (128, 223) (320, 542). class: "dog". confidence: 0.96
coordinates: (114, 135) (564, 432). class: "bicycle". confidence: 0.95
coordinates: (459, 80) (694, 173). class: "car". confidence: 0.88
```

無事動きましたね。同じフォルダにできているresult.jpgに認識後の画像も生成されています。
![result.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/37efbeca-f0b1-a568-ab2a-b28036dc1c63.jpeg)

# 5.動作確認2　USBカメラ入出力

```sh
import cv2
import time
capture = cv2.VideoCapture(0)

if capture.isOpened() is False:
    raise IOError

start_time = time.time()

while(True):
    try:
        ret, frame = capture.read()
        if ret is False:
            raise IOError

        elapsed_time = time.time() - start_time
        start_time = time.time()
        cv2.putText(frame,
             "Elapsed Time : " + '{:.1f}'.format(elapsed_time * 1000) + "ms" + " / " + '{:.1f}'.format(1 / elapsed_time) + "fps" ,
             (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 0), 2,
             cv2.LINE_AA)
        
        cv2.imshow('frame',frame)
        cv2.waitKey(1)

    except KeyboardInterrupt:
        # 終わるときは CTRL + C を押す
        break

capture.release()
```

以前やった[単眼震度推定](https://qiita.com/airpocket/items/7b75f13270d5ba2743d7)も動きました。
SPSS Modeler ノードリファレンス 2-1 条件抽出

# 2-1 条件抽出ノード[レコード設定タブ]
<img width="200" alt="107_89条件抽出.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/dacaa447-b0f1-09e7-02ea-e969c8ff304a.png">

## 1.ノードの目的
指定した条件によってレコードを抽出します。

## 2.解説動画（60秒）

<iframe width="560" height="315" src="https://www.youtube.com/embed/rEXMWx8dW80" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


## 3.クイックスタート
テーブルを実行します。
＊入力するCSVデータは[5.参考情報]からダウンロードできます。
![スクリーンショット 2022-01-12 17.53.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/8808119d-3bdf-f338-f702-4a416897e1e0.png)

テーブルから特定のセルをCtrlキーで指定します。
ここでは[国産車]と[タイプA]のふたつのセルを選んで[生成]メニュー＞[条件抽出ノード（AND）]を選択します。
![スクリーンショット 2022-01-12 14.53.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/83201a61-16bd-af92-4f90-75926be47691.png)


新しいノードが自動生成されました。編集して確認します。
![スクリーンショット 2022-01-12 17.56.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/bbeaed31-0e72-e1c3-2f9a-235e59e7a50e.png)

[モード：]は初期設定のまま[含める]で条件抽出します。なお[破棄]を選んで該当条件を破棄することも可能です。
![スクリーンショット 2022-01-12 15.05.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/3139355f-24b9-8496-5bf6-42804c3a91c3.png)


1500レコードから該当する27レコードが抽出されました。
![スクリーンショット 2022-01-12 15.06.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d49cf915-3cfb-6ba7-7d8e-dbe719fd0863.png)


### 式ビルダーを使った条件式の設定

[条件抽出]ノードの編集画面を開きます。

![スクリーンショット 2022-01-12 15.19.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/ce7ac97e-ca41-facb-d07e-73547e04f2e0.png)

右の電卓ボタンを押して式ビルダーを起動します。

![スクリーンショット 2022-01-12 15.21.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/29ff7487-bffd-b8b2-44f3-3710a31f8cbd.png)

右のフィールドリストからフィールドを選び、中央の四則演算ボタンで式を作成します。値は赤枠のボタンを用いて選択するとタイプミスを回避できます。値のリストが表示されない場合にはストリーム前方で[データ型]の値の読み込みをしてください。


## 4.Tips

#### ヒストグラムで領域指定をして条件を抽出する
ヒストグラムから[表示]＞[インタラクティブ]を選択して赤枠のバンドボタンを選び、年齢のどこかに立て、この場合はバンドの右側で右クリックして[バンドの条件抽出ノードの生成]を選びます。
![スクリーンショット 2022-01-12 15.35.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/561e018e-6078-8648-f979-717a4d2414db.png)

自動生成された年齢の値を整えれば完了です。
![スクリーンショット 2022-01-12 15.49.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/2d0ada8b-3fd0-59e0-16e3-d6e9a5906024.png)

ヒストグラム以外にも棒グラフ・散布図などさまざまなグラフから自動生成させられます。

#### 日付の抽出
日付で認識されたデータでは下のように条件抽出の式が記述できます。
```SQL
DATE >= "2021-04-01" and DATE < "2021-05-01"
```



#### クロス集計やWebグラフを使った抽出
こちらの記事ではPythonでは難儀する抽出をModelerで簡単に行える方法を紹介しています。

https://community.ibm.com/community/user/blogs/yoichiro-nishimaki/2025/01/14/modelertips21


## 5.参考情報

#### 利用データ

右クリックでリンク先を保存してください。

https://raw.githubusercontent.com/yoichiro0903n/blue/main/attitude.csv

#### ノードのヘルプ

https://www.ibm.com/docs/ja/spss-modeler/18.3.0?topic=nodes-select-node

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/items/4bf813e6cba84b2a1008

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee
コーディングの強い味方。正規表現もこれで怖くない。

プログラミングには正規表現ってつきまとうと思うんです。

[regex101: build, test, and debug regex](https://regex101.com/)

このサイト、正規表現のテストだけかと思いきや、
左側のメニューの**TOOLS**の中にある
**Code Generator**
を使うとコードまで生成してくれるという。
これはありがたい。

自分の備忘録として。

.

.


メモ：ついでに拡張機能が消えてて困ったURLコピー機能のブックマークレット

```javascript
javascript:prompt('ページタイトル + URL',   '['+ document.title + '](' + location.href+')')();
```
AWS 勉強メモ　～データベース～

～RDB～

●AWS RDS(Relation Database Service）
AWSのリレーショナル型のデータベースを提供するサービス。
通常データベースを利用する際のサーバ構築等が不要。
 Amazon Aurora、MySQL、MariaDB、Oracle、Microsoft SQL Server、PostgreSQLから選択できる。
※RDSを利用せずにEC2上にRDBをセットアップするやり方もあるが、RDSの方が運用面・可用性でメリットが大きい

　-RDB（リレーショナルデータベース）
   データを表形式で格納するデータベース
   表の行（横）を「レコード」、（縦）を「フィールド」、表を「テーブル」と呼ぶ

●Amazon Aurora
MySQL および PostgreSQL と互換性のあるAWS独自のRDB
最大15個のリードレプリカを持ち、高速・高可用性を実現する

　-リードレプリカ：
　更新用データベース（マスター）からレプリケーションされた参照専用のデータベースのこと
　参照用アクセスを分散し性能を向上させることができる

 -Aurora マルチマスタークラスター
　別AZにライトレプリカを作成する（マルチマスタ）機能（書き込み後の読み込み整合性もを持つ）
　どのノード・AZが落ちてもダウンタイムが０になる

～NoSQL～

●NoSQL (非リレーショナル) データベース
テーブル構造（スキーマ）を固定することなく、そのままの形で格納するデータベース
非定型な構造を持つデータを柔軟に管理することができ
key/value stores、wide column、DocumentDBなどのタイプがある

●key-value型データベース
非リレーショナルデータベースの一種で、キーと値によるシンプルな形でデータを保持する

●DynamoDB
AWSの提供するフルマネージドのKeyValue型データベースサービス

　-グローバルテーブル：
   複数のリージョンでDynamoDBのテーブルを自動で同期する機能
   アクセス元の国・地域によるネットワーク遅延をなくし、高速の読み取り/書き込み処理を行うことができる

●Amazon ElastiCache
AWSのマネージド型インメモリキャッシュサービスのこと
memcachedとRedis　の２種類が利用可能
フルマネージド、高速アクセス、スケーラブルという特長がある。

 (補足）キャッシュ
  データを高速にアクセスする形で（ストレージとは別に）保持しておくこと。
　データを保管しているストレージにアクセスする回数を減らし、データ取得のパフォーマンスをアップさせることができる

 (補足）インメモリデータベース
　データをディスクや SSDではなく、データストレージ用のメモリに保存するデータベース
　高速にアクセスすることが可能。
　電源を喪失した場合などいにデータが消失する場合があるため、永続性を保つにはデータをバックアップする必要がある

 (補足）揮発性メモリ
　電源供給が途絶えるとデータが消失するメモリのこと

-memcached（memory cache daemon ）
分散型キャッシュシステムを構築することができるソフトウェア。
・キーとバリューをシンプルな1対1で組み合わせて保存する。
・キーごとにマルチスレッドで動作する。
※AWSのElastic　memcachedの場合、ノード間の複製は行わないため障害が発生するとデータは消える

-Redis
オープンソースの非リレーショナルデータベース
・単純なKey-Valueだけでなく複雑な種類のデータも扱える
・メモリ上のデータをストレージに格納し、永続的に保持する機能がある
【Ruby】今日の曜日を表示するコード　Dateクラス

※初心者向け
※アウトプット練習の為

開発環境
rails 6.1.4.1
ruby 2.6.5

##問題内容##
今日の曜日を表示するコードをDateクラスを使用して記述してください。

ただし、金曜日だった場合だけ以下のように表示の内容を変えてください。

（出力内容）
「今日は水曜日」
「今日は金曜日だ ！！！」

ヒント
**Dateクラス**
DateクラスとはRubyの標準ライブラリの機能です。Dateクラスを使うには以下一文を記述します。

```ruby
require "date"
```
次に、Dateクラスを用いて「今日の曜日」を取得する場合は以下のように記述します。

```ruby
Date.today.wday
```
wdayは曜日を0(日曜日)から6(土曜日)の整数で取得することができるDateクラスに用意されているメソッドです。
たとえば、以下のように使うことができます。

```ruby
require "date"

day = Date.today.wday

puts day
```

これを実行すると、曜日に合わせた数字が出力されます。たとえば、木曜日だとすれば4が出力されることになります。

##解答##

```ruby
require "date"

day = Date.today.wday
days = ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"]

if day == 5
  puts "今日は#{days[day]}だ！！！"
else
  puts "今日は#{days[day]}"
end
```

##解説##
今回はRubyで日付を扱うため、RubyのライブラリにあるDateクラスを使用します。

**（1行目）**Dateクラスをライブラリから呼び出します。
**（3行目）**wdayメソッドを用いて曜日を0（日曜日）から6（土曜日）の整数にしたときの「今日」の値を取得します。
**（4行目）**配列daysを定義し、日曜日（0番）〜土曜日（6番目）まで文字列を格納します。
**（6〜10行目）**dayの値が5（金曜日）か否かで条件分岐させます。たとえば、今日が金曜日だった場合はday=5となり、daysの5番目の値である金曜日が出力されるようになります。
AWS 勉強メモ ～EC2～

●AWS　EC2（Amazon Elastic Compute Cloud）
AWS上にLinuxやWindowsなどの仮想サーバを作成できるサービス

●EC2インスタンス
EC2を利用した仮想サーバのこと

●インスタンスタイプ
サーバのスペック（CPU、メモリ）のこと。

●AMI（Amazon Machine Images）
EC2インスタンスの起動に必要な情報が入ったイメージ

●ゴールデンイメージ
最適なEC2インスタンス構成を反映したAMIのこと

●EC2 Image Builder
AMIを作るためのツール

●AWS Marketplace
AMIの購入や、自分で作成したAMIを他のユーザへ有償で提供することができるサービス

●インスタンスの利用形態（安い順）
  -スポットインスタンス：
　  待機しているEC2を安価で利用できるサービス。EC2の利用に中断が発生する可能性がある。

  -リザーブドインスタンス：
　   一定期間継続して利用することを前提に、大幅な割引を受けられるサービス
 
 -オンデマンドインスタンス：
　利用した分だけ支払う、一般的な利用方法

 -Dedicated Hosts：
　コンプライアンス上の理由がある場合などに、物理サーバを専有するサービス

●EBS(Elastic Block Store）
EC2インスタンスにアタッチして使われるAWSのストレージサービス
高性能で可用性に優れたブロックストレージ

　-マルチアタッチ：
   同じアベイラビリティーゾーンにある複数のインスタンスから同じEBSにアクセスすること

●AWS S3（Amazon Simple Storage Service）
AWSのオブジェクトストレージサービス
・容量無制限（1つのファイルについては5TBまで）
・9.999999999%(イレブンナイン)のデータ耐久性（最低3つのアベイラビリティゾーンに自動的に複製して保存される）
・静的コンテンツをホスティングできる
（S3に画像、動画、HTMLなどをアップロードするとインターネットからアクセスできるURLを生成できる）

●S3の種類６個
　S3 standard
　　頻繁にアクセスされるデータ向け

　S3 Standard IA(Infrequent Access)：
　　たまにしかアクセスしないデータ向け。standard と比べストレージコストが下がるが、取り出し料・転送量がかかる

　S3 Intelligent-Tiering
 　アクセスパターンに基づいてコスト効率の高いストレージ階層に自動で移動してくれる機能

　S3 One Zone-IA
　　1AZしか利用しないので可用性が下がる

　Amazon S3 Glacier
 　使用頻度の少ないファイルを長期的に保存（アーカイブ）するためのサービス
 　データを取り出す際に数時間かかる。

　S3 Glacier Deep Archive
　 データを取り出すのに12時間かかる
form要素内のエンターキーによる意図しないボタン発火防止

# シチュエーション
form要素内にあるテキストボックスにカーソルを当てた状態でエンターキーを押すと、
form要素内のボタンが発火する。

```html
<form>
    <input type="text" />
    <button onclick="hogeEvent()">hoge</button>
    <input type="submit" value="submit" />
</form>
```

上記の場合、hogeボタンが発火した。
hogeボタンをコメントアウトしてみたらsubmitボタンが発火した。

# 原因
HTMLの仕様がそうなっているから
https://developer.mozilla.org/ja/docs/Web/HTML/Element/form

# 対処
input要素はbutton要素にして、typeを `button` にする。
submitは `onclick="submit();"` を設定する。

```html
<form>
    <input type="text" />
    <button type="button" onclick="hogeEvent()">hoge</button>
    <button type="button" onclick="submit();">submit</button>
</form>
```

これにより、form要素内のボタンの意図しない発火を防ぐことができる。

# 参考
[Enterキーを無効にする方法](https://qiita.com/mimoe/items/89b317be5e38bfbc44ee)
[Enterキーを押すとsubmitされるのを防ぐ](https://style01.net/721/)
ゼロデイ攻撃 とは

## 勉強前イメージ

0day？
その日に攻撃？どういうこと？

## 調査

### ゼロデイ攻撃 とは

OSなどソフトウェアに脆弱性が発見された際、ベンダーは脆弱性の修正パッチを提供します。
修正パッチが提供された日を1日目として、修正パッチが提供される前を0日目(ゼロデイ) として
修正パッチが提供される前に脆弱性を悪用した攻撃のことを指します。

### ゼロデイ攻撃は防ぐのが難しい

脆弱性やセキュリティホールはホワイトハッカー等によっても発見されることがありその後情報が共有されます。
「脆弱性が公開されているが、対処がまだ」という状況が悪意のある人にも情報収集ができてしまう状態にあり、
セキュリティホールのリスクを共有するための情報が、いち早く悪意のある第三者に渡ってしまえばゼロデイ攻撃がされる可能性があります。

### ゼロデイ攻撃を防ぐ方法

修正パッチが提供されるまで物理的にネットワークから分離するのが、攻撃を受けることがない一番の方法です。
しかし、すぐさま完全に遮断するのは企業などでは難しい場合もあり、
その場合は [IDS/IPS](https://qiita.com/miyuki_samitani/items/b4676484119a89c00467) を導入し、通信の検知・遮断を行う方法も考えられます。

また、普段からソフトウェアなどの更新を行うことや、
脆弱性の最新情報を入手できるようにしておくことなども重要になります。

## 勉強後イメージ

そのままやったんか・・・
こういうのを見ると、脆弱性の情報をどれだけ早く手に入れれるかっていうのは重要だなって思う

## 参考

- [ゼロデイ攻撃とは？その特徴と対策](https://products.nvc.co.jp/carbonblack/blog/what-is-a-zero-day-attack)
- [意外と知らない？ITトレンド用語](https://www.ntt.com/bizon/glossary/j-s/0day-attack.html)
AWS 勉強メモ　～基本～

●AZ（Aveilavility Zone）
　お互いに影響を受けないように、地理、電源、ネットワーク的に分離して冗長化したAWSの各データセンター

 -シングルAZ：
　１つのAZを利用してシステムを構築する構成

 -マルチAZ：
 　複数のAZを利用してシステムを構築する構成
 　一つのAZで大規模な障害が発生しても他の正常なAZを使用して稼動を継続できるため、システムの可用性を向上させることができる

 -リージョン：
 　AWSの施設がある地域（都市）　例）東京リージョン、大阪リージョン

 -マルチリージョン
 　複数のリージョンにシステムをそれぞれ配置する構成
 　リージョンが全滅するような災害・障害時にも可用性を担保することができる

※補足
シングルAZ→マルチAZ→マルチリージョンの順に可用性が上がるが、コストと運用の複雑さも上がる

●フェイルオーバー
　稼働中のシステムから待機中のシステムへ切り替わること

●Auto Scaling
コンピューティングリソースを必要に応じて自動で増減させる機能

●AWS CLI（Command Line Interface）
AWSのサービスをコマンドラインから操作し、管理するためのツール
オブジェクト指向の勉強を始めて５ヶ月程度の自分がまとめるオブジェクト指向

#はじめに
この記事はあくまでプログラミング初心者である自分が、オブジェクト指向を自分なりに調べてまとめたものです。ほとんどの人には需要がないものだと思いますので人から借りたノートの端っこに書いてあるメモ程度に思ってくだされば結構です。
またこの記事は自分がオブジェクト指向の勉強のために様々なサイトを巡りその中で見つけた分かりやすい言い回し等を参考にしている箇所がありますのでもしかすると何処かで見覚えがある言い回しがあると思いますが、ご了承ください
もし間違い等がありましたらご指摘の方お願いします。

##オブジェクト指向とは
まず、オブジェクト指向とはソフトウェア開発やプログラミングのために用いられる考え方である。
オブジェクト指向では主に「モノ」とそのモノの「機能」を決める。

##オブジェクト指向を利用するメリット
オブジェクト指向ができる前までは「機能のすべてが一つに連続したプログラム」であったがオブジェクト指向ができてからは「機能一つ一つが個々のプログラムであり、それを組み合わせる」という考え方ができるようになり、機能を分割してプログラミングを行うことができるようになった。

機能ごとにプログラムが分割されているのでプログラム一つ一つはそこまで複雑にはならなくプログラムの流れが把握しやすい。また、プログラムが分割されているので開発の際に分業や共同作業がしやすくもし改善点や修正点ができた際にも簡単に修正を行うことができる。

Java、JavaScript、Python、C#などの広い言語で考え方を利用することができる

##オブジェクト指向の考え方の基本
システムの全体を現実にある物理的なものに見立てたオブジェクトという単位の組み合わせとして考える
カプセル化、抽象化、継承、ポリモーフィズムの四つの基本概念に則る

##オブジェクト指向を学ぶ上でよく聞く単語
+ オブジェクト
　データと処理の集まり
+ プロパティ
　属性や性質を表す、それがどんな物かを表すもの
+ メソッド
　オブジェクトの操作を定義したモノ　関数に近いもの
+ 継承（インヘリタンス）
　元クラスの「変数の定義」や「メソッド」を別のクラスへ引き継ぐこと
+ カプセル化
 関連するデータや処理をオブジェクトして一つに纏め必要な時以外は外部から秘匿すること
+ 抽象化
対象から必要なところを抜き出しそれ以外を無視すること
+ ポリモーフィズム
関数やメソッドが引数やデータ型などの異なるものを複数持ち呼び出す際に使い分けをすることができる
+ スーパークラス
　継承の元となるクラス　例えるなら　人間、犬などざっくりとしたもの
+ サブクラス
　メインクラスから継承されるクラス　例えるなら　大人、子供、柴犬、チワワなどスーパークラスから細かく細分化したもの
+ クラス
　オブジェクトの設計図にあたるもの
+ インスタンス
　クラスにもとづいて生成されたオブジェクトそのモノ
+ オーバーライド
　スーパークラスで定義されたメソッドを継承したサブクラスが独自に定義しなおして上書きすること
+ オーバーロード
　引数の数や戻り値の値が異なるが同じ名前のメソッドを複数定義すること
+ 汎化
　様々なクラスやオブジェクトの共通するものをそれらのスーパークラスとして定義すること

#終わりに
今回ここで自分がまとめたものはオブジェクト指向においても入り口に過ぎないので今後もオブジェクト指向についてしっかりと学習を深めていこうと思った。
また、ここまでもし読んででくれた方がいらしたらお目汚失礼しました。如何せん初めてこのように記事としてまとめた身ですので読みずらい箇所や誤字脱字等があったと思います。もし誤字脱字や情報が誤っている所を見つけましたら最初の方で記載した通りコメントの方によろしくお願いします。
Apache 2.4でのプロキシ設定 (Mac)

## はじめに

アプリケーション開発時などにローカル環境に接続するためのApacheのプロキシ設定方法について説明します
この設定はApache 2.4で動作を確認しています

## 使用しているApacheのバージョン

```:bash
# apachectl -v
Server version: Apache/2.4.46 (Unix)
Server built:   May  8 2021 03:38:34
```

## モジュールの有効化
Apacheの設定ファイル (`/etc/apache2/httpd.conf`) を編集して、
プロキシに必要なモジュールを有効化します

具体的には、以下の行のコメントアウトを解除します

```bash:/etc/apache2/httpd.conf
LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_connect_module libexec/apache2/mod_proxy_connect.so
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so
```

## プロキシ設定ファイルの作成

具体的なプロキシ設定を記述した設定ファイルを作成します

ここでは`/etc/apache2/other/proxy.conf`というファイルを作成し、
その中に以下の内容を書きます

```bash:/etc/apache2/other/proxy.conf
<IfModule mod_proxy.c>
        ProxyRequests   On
        ProxyVia        On
        AllowCONNECT    443
        Listen          44444
        CustomLog       /var/log/apache2/proxy_access_log       combined
        ErrorLog        /var/log/apache2/proxy_error_log
        <Proxy *>
                Order   deny,allow
                Deny    from    all
                Allow   from    all
        </Proxy>
        <VirtualHost *:80>
                ServerName              <%ServerName%>
                RewriteEngine           On
                ProxyPass               /       http://<%IP_ADDRESS%>/
                ProxyPassReverse        /       http://<%IP_ADDRESS%>/
                ProxyPreserveHost       On
        </VirtualHost>
</IfModule>
```

ここでの`<%ServerName%>`と`<%IP_ADDRESS%>`は、
それぞれ実際のサーバー名とあなたのサーバーのIPアドレスに置き換えてください

設定が正しく行われたかを確認するために、
Apacheを再起動し、設定したプロキシを通じての接続テストを行ってください

## さいごに
プロキシを介した接続が必要な開発環境であれば、この設定を行うことで、
適切にローカル環境に接続することが可能となります
CVE-2022-21907: HTTP プロトコル スタックのリモートでコードが実行される脆弱性

CVSS 9.8という数字のVulnerabilityなので、早急に適用しましょう。Windows Updateで配信されているので、チェックしてください。
Windows Updateで表示されない場合は下記のサイトからダウンロードできます。
https://msrc.microsoft.com/update-guide/ja-JP/vulnerability/CVE-2022-21907
https://www.catalog.update.microsoft.com/Search.aspx?q=KB5009543
[PowerShell] CSVファイルからリストと一致する行を抽出…できなかった話

CSVファイルからリスト（こちらも別のCSVファイル）と一致する行を抽出したい、
ということがあったので、LIGLOGさんのブログを参考にスクリプトを作成しました。

[PowerShellでCSVファイルからリストに一致する行を抽出してソートする](https://lig-log.com/using-powershell-to-extract-and-sort-rows-from-csv-file-that-match-list/)

**が、うまく動かない…**
「・ｿ」とだけ出力されました（笑）

なんでだろう、と思って変数の中身などいろいろみていたら、
リストとするCSVを`Get-Content`した「$SearchList」のすべての値に ダブルクォーテーションがついていることを発見！！

比較時の**「\$SearchList」を「$SearchList.Replace('"', '')」にすることで解決しました**とさ。

***
今回うまくいかなかったのは、リストに使ったCSVファイルの値のすべてにダブルクォーテーションがついていたからですが、
このもとにしたファイル、`Export-Csv`でとってきたやつなんですよね。
**`Export-Csv`すると、すべての値にダブルクォーテーションが勝手についてくる**とのこと。
だからかぁ～

このあたりの話は、@tak458さんの下記記事が非常に参考になりそうです。

https://qiita.com/tak458/items/d008ebd660be9a8a7ba8

解決してよかったー。それでは。
Return value of App\XXX\YYY::ZZZ() must be of the type string, none returnedの対応

# 環境
Laravel 6.*

# エラー内容
`http`の`post`実行時に、以下のエラーが表示される。

```php
Return value of App\XXX\YYY::ZZZ() must be of the type string, none returned
```

## エラーの意味
`App\XXX\YYY`の`ZZZ()`メソッドにおいて、戻り値として`string`の型指定があるが、`none`が返っている（メソッドの戻り値がない）という意味

## 問題点
`App\XXX\YYY`の`ZZZ()`メソッドでは、以下のように条件に応じて戻り値が記述されていたが、条件に当てはまらない場合の戻り値が記述されていなかった。

```php
if (条件A) {
  return x;
}

if (条件B) {
  return y;
}
```

## 解決策
条件に当てはまらない場合も戻り値を返すようにする。

```php
if (条件A) {
  return x;
}

elseif (条件B) {
  return y;
}

else {
  return 0;
}
```

# 最後に
エラー分で調べてもあまりダイレクトに解決策が出てこなかったので、Qiita投稿の復習も兼ねてアウトプットしてみました。誰かの参考になれば幸いです。
[AZ-104] 試験対策

###使用教材
参考書：[『合格対策Microsoft認定試験AZ-104:Microsoft Azure Administratorテキスト&演習問題』](https://www.amazon.co.jp/%E5%90%88%E6%A0%BC%E5%AF%BE%E7%AD%96Microsoft%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93AZ-104-Microsoft-Azure-Administrator%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-%E6%BC%94%E7%BF%92%E5%95%8F%E9%A1%8C/dp/4865943080/ref=sr_1_1?keywords=9784865943085&qid=1641976387&sr=8-1)
問題集：Udemy[「AZ-104 - Microsoft Azure Administrator - Practice Tests」](https://www.udemy.com/course/az-104-microsoft-azure-administrator-practice-tests-p/)

上記2つで対策しました。どちらも素晴らしい教材でしたので、おすすめします。
問題集の方は英語ですが、英語自体も難しくないですし、わからない部分はブラウザの翻訳機能を使えば問題ないかと。~~肝心の問題の内容については、「やってんなー」と思いました。~~

以前AWS SAAを取得しましたが、それよりは簡単だったかな。
これから受験される方の参考になりますように。
JestでReactのスナップショットテストするとexpect(tree).toMatchSnapshot()の行でエラーが発生する

#背景

Reactアプリのレンダリングが正常であるかをテストする場合、Jestのスナップショット機能を使用する方法がある。

今回、業務で単体テストとしてスナップショット機能を使用したのだが、テストを実行すると「expect(tree).toMatchSnapshot()」の箇所に波線が引かれ、エラーメッセージが出力されたのでその原因と解決策をまとめた。

#開発言語 (バージョン情報)
- React.js (17.0.2)
- Next.js (11.1.2)
- TypeScript (4.4.3)
- Jest (27.2.2)

#試したこと

src/pages/Page1/index.tsxのテストファイルとして、「src/pages/Page1/index.spec.tsx」を作成する。

そして下記のコードを書く。

```react:index.spec.tsx
import TestRenderer from 'react-test-renderer';
import Component1 from 'components/organisms/Component1';
import interfaceA from 'interfaces';

describe('Snapshots 1', () => {
 test('pattern 1'), () => {
  const sampleDatas: interfaceA[] = [
   {
    sampleId: '1',
    sampleName: 'Sample001',
    comment: 'test test',
   },
  ];
  const onClickPrepare = () = > {
   // 処理
  };
  const onClickApply = () = > {
   // 処理
  };
  const tree = TestRenderer.create(
   <Component1
    datas={sampleDatas}
    onClickPrepare={onClickPrepare}
    onClickApply={onClickApply}
   />,
  ).toJSON();

  expect(tree).toMatchSnapshot();
 )};
})
```

ターミナルにてコマンドを実行する。

```
jest pages/Page1/index.spec.tsx
```

下記メッセージのエラーが出力される。

```
1 snapshots obsolete from 1 test suite. To remove them all, run `npm test -- -u`.
```

#原因

直前に別のコンポーネントのスナップショットを撮ったにも関わらず、今回「-u」オプションで実行しなかったため。

「-u」オプションはスナップショットを強制的に更新するオプションで、別コンポーネントのスナップショットを撮るときは一度「-u」オプションで実行する必要がある。

#解決策

スナップショットを撮る対象のコンポーネントを切り替えた直後など、一回目の実行時は下記コマンドで実行する。

```
jest -u pages/Page1/index.spec.tsx
```

#まとめ

スナップショットでテストするとき、初回のみ「-u」オプションでコマンド実行する。
【個人的見解】2022年に流行る技術予想

#2022年に流行る技術予想について

https://qiita.com/official-events/5cb794f7cb9ac194ed70

「Python」、「AWS」、「GCP」等々・・・。
色々ありますが、あえて違う観点から考えてみます。

#結論

#####個人的見解から考えると「教える技術」です

#理由

##時代面での理由

まず、学校関連では以下のように予定されています。

* 2020年度、[小学校]　プログラミング教育の必修化が開始されます。
* 2021年度、[中学校]　「技術・家庭」でプログラミングに関する内容が拡充されます。
* 2022年度、[高校]　プログラミングを含む「情報Ⅰ」の必修化が開始されます。

本来、小学生に教育を行うのは、教員免許を持っている人のみなのですが、プログラミング学習の講師は免許の必要がありません。
この場合、ICT支援員となるそうです。

:::note info
詳しくは以下の記事を参考にしてください
:::
>[小学校でプログラミングを教えるには？教員募集以外に講師になる方法を解説](https://programmer-japan.com/koushi-houhou/)

##環境面での理由

コロナ禍において、未経験エンジニアへの転職をする人が多く見受けられます。
未経験でのエンジニアは独学で勉強して転職に臨むわけですが、独学では限界があります。
そのため、教えてもらえる家庭教師などを探していることがほとんどです。
しかも、IT技術の講師はオンラインで行うことも可能なため、講師の評判が良ければ日本中から案件があります。
また、新人教育の名目で会社からの応募などもあります。

:::note info
参考サイト
:::
>[MENTA](https://menta.work/)
>[Udemy](https://www.udemy.com/)

教育系ユーチューバーも多くなってきてます。

##精神面での理由

自分が一番に重きを置く理由はこの精神面になります。

**「人に何かを教えるためには自分は完ぺきに理解しておかないといけない」**

ということです。
そのため、人に教えることは自分が理解している「**確認**」となります。


#まとめ

以上の理由で、2022年に流行る技術は「教える技術」だと思います。
まずは、周りの仲間や後輩（新人含む）へシステムだけでなく、仕事の働き方も含めて教える習慣をつけてみてはいかがでしょうか。
TypeScriptのtypeof import("...")とは

この投稿ではTypeScriptの`typeof import("...")`とは何かを説明します。

## インポート型

`import("...")`は、TypeScriptで型レベルでモジュールを扱うための構文です。インポート型(import type)と呼ばれます。

## インポート型の構文

```ts
typeof import("モジュール名")
typeof import("モジュール名").変数の識別子
import("モジュール名").型の識別子
import("モジュール名").型の識別子<型パラメータ>
```

## モジュールの型

`typeof import("module")`はモジュール全体の型になります。`typeof import("moulde")`で得られる型には、`import * as module from "module"`でインポートした値が代入できます。

```ts
import * as module from "./module";

const a: typeof import("./module") = module; // OK
```

モジュールの型を満たしていれば、モジュールからインポートした値でなくても代入できます。

```ts
// module.ts
declare const a: string;
declare const b: number;
export { a };
export default b;

// useModule.ts
const a: typeof import("./module") = { a: "", default: 1 }; // OK
```
「歯科矯正の窓口」でサイト高速化のためにやっていること

# サイト高速化のためにやっていること
今回の投稿では、私達のWEBサイト「**[歯科矯正の窓口](https://dentaley.com/)**」でサイト速度高速化のために行っている技術的内容をご紹介します。
## ①lozad.jsを用いた画像・地図の遅延読み込み
lozad.jsというライブラリを使用して、オフスクリーン画像や埋め込みGoogleマップなどの遅延読み込みを実装しています。
## ②Squooshを用いた画像の圧縮
Googleによる画像圧縮ツールSquooshを利用して、画像を圧縮しています。
## ③ファーストビューに関係のないCSSなどの遅延読み込み
CSSファイルを分割し、ファーストビューに関係しないCSSを遅延読み込みしています。
##最後に：サイトの紹介
最後に、私達のサイトの紹介をさせていただきます。
「歯科矯正の窓口」では、以下のようなコンテンツを発信しています。
### ①地域ごとにおすすめな矯正歯科の紹介
地域ごとにおすすめの矯正歯科を紹介する記事を作成しています。
例：**[東京でおすすめな安い矯正歯科（マウスピース矯正など）](https://dentaley.com/tokyo/)**
### ②歯列矯正に関する解説記事
歯列矯正に関して、患者さんの役に立つような解説コンテンツを作成しています。
例1：**[歯列矯正の値段・費用相場](https://dentaley.com/orthodontics/cost/)**
例2：**[おすすめの安いマウスピース矯正ブランドを徹底比較](https://dentaley.com/orthodontics/mouthpiece/)**
また、キレイライン矯正・**[メンズキレイライン矯正](https://kireilign.com/lp/mens5/lp6/?ads=dentaley_mens)**など、各ブランドの紹介記事も作成しています。
例：**[キレイライン矯正の口コミ・評判](https://dentaley.com/orthodontics/kireilign_review/)**