OmniAICreator/Qiita-1.07M huggingface dataset:
Raspberry Pi 3 model b+

Raspberry pi 3 B+ のセットアップ
--
Rasbian
---
まずは、Operating SystemをMicroSDカードに書き込むためのImagerをダウンロードします。

https://www.raspberrypi.com/software/



Rasberry pi imager からMicro SDカードにイメージを書き込む
Rasbin は 32bit (標準で選択していくとこちら）と64bitがあります。
意図的に64bitを使用したい場合には、Operating Systemの選択でRasbin Otherから64bitを探してください。

<H3> Sambaのインストール</H3>

``` 
pi@raspberrypi:~ $ sudo apt install samba
```

<H4> samba.confの編集</H4>
<H4> samba へのユーザーの追加とパスワードの設定</H4>

```
pi@raspberrypi:~ $ sudo pdbedit -a username
```

```
pi@raspberrypi:~ $ sudo smbpasswd username
```

<H3> webmin のインストール</H3>
https://www.webmin.com/download.html

ここからdebian用をダウンロードしてインストールします。




<H3>省電力機能で画面が復帰できなくなる問題</H3>
省電力機能でディスプレイの電源がOFFになったあと、マウスやキーボード入力で復帰できないケースがあり、これを防止するにはxscreensaverをインストールして電源をOFFにしないように設定する必要があります。
switchbot で IOT

swithbotで実現するIOT
---
swithbotでスマートスピーカーと連携してsmart homeを実現するというのがだいぶ前から流行っていますね。
具体的には下記のようなデバイスが販売されています。
- 温湿度計
- Hub mini リモコン
- 加湿器
- カーテン
- スイッチ
- 電球
- 開閉センサ
- 人感センサ
- 屋内カメラ（固定カメラ）
- 見守りカメラ（雲台カメラ）

https://www.switchbot.jp/collections/all
samrt homeをこれらで実現するという話は多くの人がやっているのであまり面白みがないので、より限定的な事を試して見ようと思います。

Hub Mini リモコンの電力はほとんどゼロ
---
これは特筆すべき点だと思うので記載しておきますが、Hub Mini リモコンはほとんど電力を消費しません。USBの電力計では電圧は測れても電力はほぼゼロを指したままとなっており、モバイルバッテリーで動作させていますが、1日経ってもほとんど減っていません。おそらくはデータをクラウドへ転送する際やBluetoothで温度計からデータを回収する際に電力をわずかに消費するだけで、ほとんど電力を食わないように設計されているのでしょうね。ホームユースの製品ながら、とても優秀なパワー・マネージメントだと思いました。

温湿度計は乾電池
---
温湿度計は単4乾電池2個で動作していて、ほとんど電力を消費しない設計となっています。

温湿度計とHub Miniのための電力はほとんどゼロ
---
温湿度計（乾電池）とHub Mini（USB電源）の電力はほとんどゼロに近く、Wifiルーターの電力さえ十分に確保できればデータの収集は容易に実現できます。Wifiルーター自体のバッテリーも加味すると1日、2日程度であれば大型のバッテリーを用意しなくても実現できそうです。

自動車の温度管理
---
直射日光が非常に暑くなる、春と夏に自動車内の温度は非常に高温になりがちです。
子供を車内に置き去りにしてなくなるという事件が毎年のようにニュースになっていますが、実際問題非常に高温となるため車内に子供やペットなどを残して車外に出るような人には特別の注意が必要となります。

車内の温度は部分的に異なる
---
運転席、助手席、後部座席、そしてトランクとで温度には差があります。日照の度合いに加え冷房の効果が強い部分と弱い部分があります。
効率的に全体を冷却するためには、自動車の冷房だけではなく、扇風機やサーキュレーターといった送風機も使用することで全体を冷やすのに役立ちますが、トランクが別の区画になっているセダンのような車の場合にはトランクは非常に高温になることがあります。
それぞれどの程度温度に差が生じるのかトラッキングしてみたいと思うので、温湿度計デバイスを複数用意して、Hub miniを使用して温度データを収集してみます。

※この夏データを集めて天候や外部環境によりどの程度影響するのかみてみたいと思います。

実際のアプリの画面
---
設定した画面表示は下記のように表示されます。
![Screenshot_20220419-203930.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831262/5794ab1a-1793-2662-931c-52d5dd05e33c.png)
borderで作成できる三角形の原理について今更追ってみる【備忘録】

CSSで三角形を表現する時、  
CSSプロパティの`border`を使うのか、原理をあまり意識してなかったので改めて深掘りをしてみた！

## borderが単一の時と複数の時での動き

### 一本の時

![border01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130422/711f180d-339d-a6a1-efcc-7162f0922ddd.png)


```
  width: 100px;
  height: 50px;
  border-top: 5px solid;
  display: inline-block;
```

まぁ予想通りの結果ですね、ただ横に線が引かれているだけ


### 複数本の時

![border02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130422/04389d36-f065-0da1-f2e4-4ca71a92fe7e.png)


```
  border: 5px solid;
```

これも予想通りの結果、けどこれがどこに三角の要素があるんだと考える・・・  
試しに上下左右に色をつけてみた。

![border03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130422/779c7ab4-2dbc-b16d-806f-26a47febf820.png)


```
  border: 5px solid;
  border-color: red blue;
```

繋ぎ目が斜めになっている！三角を作る上での兆しが見えてきた！  
たしかに縦と横の繋ぎ目がどうなっているかなんてあんまり考えてなかったなと探究心のなさに今更ショックを覚えつつw

## borderの動きを踏まえてよくある三角を作成

* 1本の場合は、繋ぎ目が並行または垂直に切られる
* 複数本の場合は、繋ぎ目が斜めに切られる

ということは見えない`border`を用意するんだということに行き着く


![border04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130422/fcba096a-2f52-e693-c7a1-b5e4844dcd8e.png)

↓

![border05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130422/cb7d8c6e-33ba-7764-5dfa-86e2c0e1bea0.png)


```
  height: 5px;
  border: 5px solid;
  border-color: transparent transparent transparent blue;
  box-sizing: border-box; /* 要素のwidth/height内にborderも含める */
```

borderの幅に合わせて高さを指定し、三角形になった！！  
これを応用すれば上下左右どの三角形も作れますね！！

![border06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130422/b61d2763-9385-0d51-f5f1-54f79903d8c1.png)

## borderの動きを踏まえてよくある”くの字”を作成

今回の`border`の原理は不要ですが、  
2本の`border`があれば”くの字”の矢印も作れるので、合わせて記載しておく

![border07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130422/560336bc-d511-e1c8-9050-68aba0796a6b.png)

↓

![border08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130422/d2a5ce05-303c-f898-53bb-acb369343e02.png)



```
  width: 10px;
  height: 10px;
  margin: 50px;
  border-top: 5px solid black;
  border-right: 5px solid black;
  transform: rotate(45deg); /* 上と右のborderを45°回ることで右矢印に */
  display: inline-block;
```


## 最後に

CSSのテクニック集とかを参考に使うこともありますが、  
なぜそのプロパティで実現できるのかっていうことを見ていくのが改めて大事だなと今更痛感することが多くあります。  
(脳死コピペをしてしまうことが多かったので、やっちまったなぁと後悔が残る・・・)

表現が可能になるための根拠が必ずあるはずなので私のように後悔が残る前に、  
どんどん`Why(なぜ)`に直面し調べていくことをすすめて行ってみてください！

最近は`clip-path`で三角形を実現できるみたいなので、  
そちらも知識として貯めていきたいなと思います！
Java Silver SE 11 合格体験記

## はじめに
主に弊社の新入社員の参考になればと書きました。
どれくらいのレベルからどういった教材を使って勉強を始めてどれくらいの時間をかけたかを書きました。
弊社新人の場合ですが，3ヶ月の外部研修が終わる頃にはBronze，ちょっと？頑張ればSilverの取得を目指せると思います。

## Oracle認定資格について
[認定資格一覧](https://www.oracle.com/jp/education/certification/allcertification-172551-ja.html)
- この記事はいわゆるJava Silverの合格体験記です。
    - 正式名称は「Oracle Certified Java Programmer, Silver SE 11」
    - 認定に必要な試験名は「Java SE 11 Programmer 1」
    - 範囲は一応弊社新人が受講する外部研修の範囲内です。繰り返しになりますが頑張れば研修と並行して取得を目指せます。
    - 問題数： 80問（180分）
    - ボーダー： 63%（80問中50問正解すれば良い）
    - 試験料： 税込32340円（高い）
- ついでにBronzeについて
    - 日本独自。範囲はSilverより少し狭く，問題も少し易しい
    - Silver取得の前提資格というわけではない
## 前提
Silverの試験対策を始めた頃の私のスキルであるとか使った教材について
- 前提知識
    - Bronze取得済（外部研修終了後すぐに取得）
    - 基本情報受験経験有（午後試験を受験できていれば合格していた...はず）
- 使用教材
    - いわゆる紫本（教科書）と黒本（問題集）。黒本はほとんど使えていない
    - 紫 [オラクル認定資格教科書 Javaプログラマ Silver SE11（試験番号1Z0-815）](https://www.amazon.co.jp/%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E6%95%99%E7%A7%91%E6%9B%B8-Java%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E-Silver-SE11%EF%BC%88%E8%A9%A6%E9%A8%93%E7%95%AA%E5%8F%B71Z0-815%EF%BC%89-%E5%B1%B1%E6%9C%AC/dp/4798162043/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2XH4P5L2N7PRD&keywords=Java+silver&qid=1650067312&sprefix=java+silver%2Caps%2C199&sr=8-3)
    - 黒 [徹底攻略Java SE 11 Silver問題集[1Z0-815]対応](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5Java-SE-11-Silver%E5%95%8F%E9%A1%8C%E9%9B%86-1Z0-815/dp/4295007625/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2XH4P5L2N7PRD&keywords=Java+silver&qid=1650067312&sprefix=java+silver%2Caps%2C199&sr=8-1)

## 試験対策
- 期間にして2週間，勉強時間は大体20時間くらい費やしました。
- 一番大事なコツですが，__試験では紫本の模試と似た問題が出ます。__ 
  - なので巻末の模試2回は絶対に解くべきです。私はBronzeの受験経験からこれを知っていたので模試の1回目を解くところから試験対策を始めました。
- 紫本は一通りやりましたが黒本に手を付ける時間はほとんどなかった。
  - 黒本は問題集として購入したのですが解説がかなり充実していて問題も本番より少し難しい印象でした。これ一冊で受験するのも良いと思います。

## 申込方法 (2022年4月時点)
初めて受験する人向け。おそらく全てのOracle認定資格がこの方法で申し込みます。
念のため，アカウントには私用のメールアドレスを使ってください。
- 以下の説明でうまくいかない場合は[CertViewの利用手順](https://www.oracle.com/jp/education/certification/migration-to-certview.html)をよく読んで頑張ってください
- だいたいの手順
  - Oracle.comのアカウントをつくる。[Oracle University](https://education.oracle.com/ja/)![Oracle.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629212/c60799ba-4033-b404-bd7b-3925dbcfaef0.png)

  - ↑で作ったアカウントで[Certview](https://catalog-education.oracle.com/pls/apex/f?p=1010:26:107171661889305)にログイン![CertviewTop.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629212/f4a4735c-a591-a0d2-2b81-57857d443c35.png)
  - ピアソンViewで試験の申込 ![InkedCertview_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629212/e4205dae-f34e-eb36-7fc4-08cfadf3d679.jpeg)
- ピアソンViewで試験名を検索し，申し込み（割愛）
    - 試験，会場，日程等を決めて支払いまで行います。
        - 会場と日程の変更は5回まで可能。5回変更した後でも前日までにキャンセルすれば全額返金
        - いかなる理由でも試験日後の返金は受け付けてくれません（試験日変更間違いで1敗）
    - 受験の際の注意事項であったり必要な身分証には気を付けましょう。身分証が不十分だと受けられないです（基本情報午後d1敗）。
    ![スクリーンショット 2022-04-16 093912.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629212/25058912-f3bd-b918-e8e1-de10df923d8f.png)
- 私の場合は試験後モニターで点数が確認でき，１時間もしないうちに合否のメールが届きました。合格証やバッジ等は数日中に発行されました。
jQueryで横スクロールボタンの実装

# [<font color="#333">横スクロールボタン作ります</font>](#-横スクロールボタン作ります)
なんで作るかと言うと、最近のスマホはスクロールバーがデフォルトで表示されなかったりするんですよね。
頑張ってCSSで実装してchromeの検証ツールではしっかり表示されているのに・・・・実機では:frowning2:
なのであった方がユーザー的には親切かなと。

こんな感じで投稿記事をforeachで展開しているとします。
矢印はFont Awesomeから
```hoge.php
<section id="mypage" class="js-wrapper">
　　//左スクロールボタン
    <span class="c-btn__arrow p-mypage__scrollPrev js-prev">
      <i class="fa-solid fa-angles-left fa-2x"></i>
    </span>

   //投稿記事を展開しているとする
    <section class="p-mypage js-scroll-content">
      @foreach($posts as $post)
      <div class="c-card">
       <h3 class="c-card__title">{{$post->title}}</h3>
       <div class="c-card__body">
        {{$post->content}}
       </div>
      </div>
      @endforeach
    </section>

　　//右スクロールボタン
    <span class="c-btn__arrow p-mypage__scrollNext js-next">
      <i class="fa-solid fa-angles-right fa-2x"></i>
    </span>
 </section>

```


```app.js

 $(function () {
    
    $('.js-next').on('click', function () {
      
   　//親要素を取得してその子要素のスクロールさせたい要素を取得
      var target = $(this).parent('.js-wrapper').find('.js-scroll-content');
      var width = target.width();
      
      target.animate({
        //右にスクロール
        scrollLeft: target.scrollLeft() + width
      }, 300);
      return false;
    });
  });
  
  $('.js-prev').on('click', function () {
    
    var target = $(this).parent('.js-wrapper').find('.js-scroll-content');
    var width = target.width();
    

    target.animate({
      //左スクロール
      scrollLeft: target.scrollLeft() - width
    }, 300);
    return false;
  });
```
以上です。
スクロール量とスピードはお好みで。
あとはスクロール量を取得して、どちらかの端っこまで行ったら矢印消す。みたいな処理だともっと親切ですね。
パーセプトロンについて

# はじめに
ディープラーニングの元であるパーセプトロンについて理解する。
私が調べて学習した範囲なので、抜けている点や疑問点がありましたら、そちらは各々調べていただければと思います。
また、間違っている部分がありましたらご指摘いただけると幸いです。


# 前提知識
パーセプトロンについて理解するうえで必要となる前提知識。

## ANDゲートとNANDゲート
**ANDゲート**
二値の条件を満たしている(True)時、出力することができる。
x1 | x2 | y
:---:|:---:|:---:
 0 |  0 | 0
 1 |  0 | 0
 0 |  1 | 0
 1 |  1 | 1

**NANDゲート**
二値の条件を満たしていない時にTrueになる。逆に二値の条件を満たしている時はFalseになる。
NANDゲートはANDゲートの逆のゲートである。
x1 | x2 | y
:---:|:---:|:---:
 0 |  0 | 1
 1 |  0 | 1
 0 |  1 | 1
 1 |  1 | 0

## ORゲートとNORゲート
**ORゲート**
二値の条件のうちどちらかが満たしている(True)ならば出力することができる。
x1 | x2 | y
:---:|:---:|:---:
 0 |  0 | 0
 1 |  0 | 1
 0 |  1 | 1
 1 |  1 | 1

**NORゲート**
二値の条件を満たしていない時にTrueになる。逆に二値の条件を満たしている時はFalseになる。
NORゲートはORゲートの逆のゲートである。
x1 | x2 | y
:---:|:---:|:---:
 0 |  0 | 1
 1 |  0 | 0
 0 |  1 | 0
 1 |  1 | 0

## XORゲート
XORゲートは排他的論理和と呼ばれている。排他的論理和とは自分以外は拒否するという意味である。
下図にあるようにx1、x2のどちらかが1の時にだけ出力できる。
x1 | x2 | y
:---:|:---:|:---:
 0 |  0 | 0
 1 |  0 | 1
 0 |  1 | 1
 1 |  1 | 0


# パーセプトロンとは
パーセプトロンはアルゴリズムであり、1957年にアメリカの研究者のローゼンブラットによって考案された。
これは人間の脳神経回路を真似た学習モデルである。

## 仕組み
* 複数信号を入力とし、1つの信号を出力
* 出力は信号を流す **1** か流さない **0** の二値分類
* 閾値を超えるか否かで出力信号が決定

<!--
「x」を入力信号、「y」を出力信号とする。
下図のように、パーセプトロンというアルゴリズムに「x」を入力をすると、「y」を出力する。この出力は、1か0の2通りで表現される。
-->

パーセプトロンは入力された信号の総和が計算され、この総和がある限界値を超えた場合にのみ「1」を出力する。これを"ニューロンが発火する"と表現することがある。
ここでは、その限界値を**閾値**と呼ぶ。
パーセプトロンの動作原理は、これだけである。以上のことを数式で表すと次の式(1)のようになる。

``` math
y = \left\{
\begin{array}{ll}
0 & (x_{1} + x_{2} \geq 0) \\
1 & (x_{1} + x_{2} \lt 0)
\end{array}
\right.\tag{1}
```

![パーセプトロン.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2001115/95bf0324-160e-90af-9fb8-6d0506079653.jpeg)

## パーセプトロンの実装
今回は、Pythonを用いて簡単なパーセプトロンの実装を行う。
パーセプトロンには閾値があるが、これに加えて入力の個数分**重み**も用意する。

### ANDゲート

``` python:ANDGate.py
def AND(x1, x2)
    # 重みをw1とw2、閾値をthetaとする
    w1, w2, theta = 0.5, 0.5, 0.7
    tmp = x1*w1 + x2*w2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1

AND(0, 0) # 0を出力
AND(1, 0) # 0を出力
AND(0, 1) # 0を出力
AND(0, 0) # 1を出力
```


# まとめ
今回は、ディープラーニングの元であるパーセプトロンについて私が学習した範囲でまとめてみました。
あくまで私の記録用の意味合いが強いですが、私のような初心者の方のお役に立てたら幸いです。
さらに理解したことが増えれば随時更新していこうと思います。


# 参考
[0から作るディープラーニング](https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8BDeep-Learning-%E2%80%95Python%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E5%AE%9F%E8%A3%85-%E6%96%8E%E8%97%A4-%E5%BA%B7%E6%AF%85/dp/4873117585)
printfの%sで、表示文字数を動的に指定

# printfでできます
- 動的に指定した文字数による文字列切り詰め処理と、左詰め・右詰め処理は標準の `printf` だけで実現可能です。
    ```c++
    char* buf = "abcde";
    printf("%*.*s", 10, 3, buf); // --> '       abc'
    printf("%-*.*s", 10, 3, buf); // --> 'abc       '
    ```

  - %**sだけ** → 最後まで表示
  - %**Xs (ドットの前)** → 最低表示幅 **X** を確保し、最後まで表示。右詰め。左に空白。
  - %**.Ys (ドットの後)** → 文字数 **Y** で切り詰めて表示
  - %**-s (マイナス)** → 左詰め。右に空白挿入
  - **これら数字は"*"にすれば、引数で指定できる！**

- 例
  | フォーマット指定 | 引数 (buf="abcde") | 結果 |
  | - | - | - |
  | "%s" | buf | 'abcde' |
  | "%3s" | buf | 'abcde' |
  | "%10s" | buf | '_____abcde' |
  | "%-10s" | buf | 'abcde_____' |
  | "%10.3s" | buf | '_______abc' |
  | "%-10.3s" | buf | 'abc_______' |
  | "%3.10s" | buf | 'abcde' |
  | "%*.*s" | 10, 3, buf | '_______abc' |
  | "%-*.*s" | 10, 3, buf | 'abc_______' |

これを知ってしまうと今まで入れていた前処理がいらなくなって随分楽できるようになりました。

# 関連
### formatライブラリ
- [std::format](https://cpprefjp.github.io/reference/format/format.html)を使うとC++風に文字列処理を実現できる、はずですが、現時点(2022/04/18)ではmacではまだ使えないようです。
- 昔から標準のstd::coutは、全体の文字列の途中にオペレータを記述しなくてはならず、出したい文字列の全体像がつかめなくなりがちで不便です。
- ということで結局、2022年今日でも30年前から続いている`printf`が使われることが多いです。
- ライブラリごとに書式は異なりますが、`printf`の場合は`%3.1f`のように`%`と`f`の間に`全体幅.小数点以下の幅`をすることで表示する精度を指定できます。
    ```c++
    // coutは表示される全体像がつかみにくい
    cout << "これは、" << nameofmycat << "を飼うために貯めた" << totalmoney << "円です。" << endl;
    // printfなら文章として読みやすい。
    printf("これは、%sを飼うために貯めた%d円です。", nameofmycat, totalmoney);
    // 数字の精度指定
    printf("%4.2f", 3.141592653589); // --> 3.14
    ```

# 参考
https://qiita.com/keitean/items/7cd52af571d27a1173d0
ブラックジャックのなんちゃって設計(js) part2 プロパティとかメソッドをもう少し詳しく

# この記事について
各クラスのプロパティ､メソッドの役割を説明
以下`c()`はコンストラクタから値を受け取ることを指す
コードはこちらにあります

https://github.com/s19013/webBlackJack-jsOnly-


# Card
**説明**
カードの情報を保存するクラス
### プロパティ
| 変数/定数 | 名前 |型| 説明 | 初期値 |
|:-:|:-:|:-:|:-:|:-:|
|定数|value|int|カードの点数|c()|
|定数|img|string|カードの画像のurl|c()|

# Deck
**説明**
カードクラスをまとめたクラス
### オブジェクト
| 名前 |型| 説明 | コンストラクタ |
|:-:|:-:|:-:|:-:|
|S01|Card|`♠の1`を表す|1,"./img/s01.png"|
|S02|Card|`♠の1`を表す|2,"./img/s02.png"|
|:|:|:|:|
|S13|Card|`♠の13`を表す|10,"./img/s13.png"|
|C01|Card|`♣の1`を表す|1,"./img/c01.png"|
|:|:|:|:|
|D01|Card|`♦の1`を表す|1,"./img/d01.png"|
|:|:|:|:|
|H01|Card|`♥の1`を表す|1,"./img/h01.png"|
### プロパティ
| 変数/定数 | 名前 |型| 説明 | 初期値 |
|:-:|:-:|:-:|:-:|:-:|
|定数|list|[Card()]|カード達をしまうリスト|[s01,s02...c01...d01...h01]|
|変数|counter|int|カードを取り出した回数を数える|0|
### メソッド
#### shuffle()
**役割**
`list`の並びをランダムに変える
※Fisher-Yatesシャッフルを使ったので各自検索したほうが理解が早いかと
#### pickupCard()
**役割**
`list`から`counter`と同じインデックス番号の要素を取り出す

#### plusCounter()
**役割**
`counter`の値を1増やす

## Q&A
Q:なんで[J][Q][K]のvalueが10なの?
A:ブラックジャックのルール上[J][Q][K]は10点として扱う
XRハードウェア

# Project Cambria（meta)
２０２２年発売（QUEST2 Proと同じ）
https://www.moguravr.com/project-cambria-revealed/

「今日の技術で可能な、最先端の、新しい種類のコンピューティングを試したい人に向けて設計」

# QUEST2 Pro
https://www.phileweb.com/news/hobby/202204/11/5352.html
https://smhn.info/202204-meta-project-cambria

# magic leap2 
OS : Android
重量：重量は248g（１は316)

https://www.moguravr.com/magic-leap-2-3/



# メガーヌX（パナソニック）
QEUST約半分くらいの約250g

https://www.businessinsider.jp/post-249702


# HalfDive →　クラウドファンディングを中止
https://www.moguravr.com/halfdive-2/
OpenAPIとSwaggerについて

# 概要

- OpenAPIとSwaggerについて調べたのでまとめる。

# OpenAPIとは？

- yaml・JSONの記載フォーマットのことだよ。
- REST APIの仕様書を記載するフォーマットだよ。

# OpenAPI Specification

- OpenAPIを記述するための書式ルールのことだよ。
    - 「Markdownだったら`#`でタイトルにできるよね」とかそういう感じの書き方のことだと思う。
- 公式ドキュメント達
    - [https://swagger.io/specification/](https://swagger.io/specification/)
    - [https://spec.openapis.org/oas/v3.0.3](https://spec.openapis.org/oas/v3.0.3)
    - [https://github.com/OAI/OpenApi-Specification/blob/main/versions/3.0.3.md](https://github.com/OAI/OpenApi-Specification/blob/main/versions/3.0.3.md)

# Swagger

- OpenAPIを作成・表示・利用するツール群のことだよ。
- そのツール群の中には下記が含まれるよ。
    - Swagger Editor
        - OpenAPIを記述・編集するためのエディターだよ。
    - Swagger Codegen
        - Swagger Editorで記述・編集されたOpenAPIを読み取ってスタブやクライアント側のコードを生成してくれるよ。
    - Swagger UI
        - OpenAPIを読み取って仕様書として表示してくれるよ。

# 簡単な歴史

1. 2010年 Swaggerの開発スタート
    - OpenAPIはSwaggerフレームワークの一部でSwagger Specificationって名前だったよ。
1. 2015年 OpenAPI Initiativeという組織に管理移管
1. 2016年 Swagger SpecificationからOpenAPI Specificationに名称変更

# つぶやき

- 「OpenAPIで仕様書作成しておいて」という指示があったら「APIの詳細情報をyamlファイルにOpenAPI Specificationの書式ルールで記載しておいて」って解釈すればいいのかな・・・？
pyOCDによるarm Flash ROMの書き込み

# はじめに
この記事はarm CPU core を組み込んだ SoC (System On Chip)のちSWDコネクタを持つボードのプログラムを開発するとき、Flash ROMの書き込み／消去／読出し／デバッグを行う方法を記します。
方法としては、様々な方法がありました。
ここではpyOCDというPython packageを用いCMSIS-DAP仕様のDebuggerをSWDワイヤで接続して書き込む方法を書きます。
# Debuggerの用意
![DSC_0005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245853/c7379f73-63b2-3e87-6bda-d112418a7a8a.jpeg)
写真は（株）日昇テクノロジーが販売している[MulutiTOOL3 (以下iTOOL3)](https://www.csun.co.jp/SHOP/2019070101.html) Debuggerです。SWD用に2個の異なる形状のコネクタがありますがここでは5Pを使いました。
arm SWDは様々な機械仕様のコネクタが使われていますが、電気仕様は同一ですのでアダプタを作ってTarget bouardに接続します。
![DSC_0023.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245853/fa406cb7-c398-ad7a-da0b-107156d2e49f.jpeg)
5P接続は電源が供給されないので別途接続します。今回はUSBから取りました。
# ソフトウエアの準備
Windows 11のPower ShellにPython3を導入します。
https://www.python.jp/install/windows/install.html

pyOCDをinstallします
``` shell:
 pip install pyocd
```
使用するarm SoCの仕様をDFP (Device Family Pack) [database](https://www.keil.com/dd2/)からDLします。
取得した *.pack をダブルクリックすると解凍するか尋ねるのでその通りにします。
pyOCDに取得したSoCの仕様を取り込みます。
まず、サポートされているSoCを検索します。
```
PS C:\Users\mac> pyocd pack find s6e2gm
  Part       Vendor    Pack           Version   Installed
-----------------------------------------------------------
  S6E2GM6H   Cypress   Keil.FM4_DFP   1.6.0     True
  S6E2GM6J   Cypress   Keil.FM4_DFP   1.6.0     True
  S6E2GM8H   Cypress   Keil.FM4_DFP   1.6.0     True
  S6E2GM8J   Cypress   Keil.FM4_DFP   1.6.0     True
```
もし、見つからなければ前の手順のDFP組み込みに失敗してますので、やり直します。
DFPを組み込みます。
```
PS C:\Users\mac> pyocd pack install s6e2gm
Downloading packs (press Control-C to cancel):
    Keil.FM4_DFP.1.6.0
Downloading descriptors (001/001)
```
試しに消去してみます。
```
PS C:\Users\mac> pyocd erase --chip
  #   Probe                       Unique ID
--------------------------------------------------------------------
  0   Cypress Cypress CMSIS-DAP   RND-8540413381570778512647434064
  1   GINGKO GINGKO-CMSIS-DAP     888888888888

Enter the number of the debug probe or 'q' to quit> 0
0010944 W Generic 'cortex_m' target type is selected by default; is this intentional? You will be able to debug most devices, but not program  flash. To set the target type use the '--target' argument or 'target_override' option. Use 'pyocd list --targets' to see available targets types. [board]
0011088 I Erasing chip... [eraser]
0011088 I Done [eraser]
```
# 別のDebuggerを繋ぐ
同じ日昇テクノロジーの[OpenLink](https://www.csun.co.jp/SHOP/2009121901.html)もやってみました。
![img132.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245853/7611ba4f-f8db-eef1-8105-601b96684108.jpeg)
最初からやるなら全く同じ手順です。先にiTOOL3を繋いだなら、OpenLink用のアダプタを作って接続するだけです。ハードウエアの違いはpyOCDに吸収されPCを操作している限り見えません。優秀な抽象化レイヤーです。
SlackのIncoming Webhookアプリを新規追加、WebHookURLを取得するには


Link: https://api.slack.com/apps

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629773/85a9b0d9-09fc-82c0-1184-8db4da790152.png)

。アプリを作成するよう、“Create New App”ボタンをクリックして、

その後、”From Scratch”を選んで新規作成頂きます

。App Nameを入れて、本アプリがこれから使うworkspaceを選んでください。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629773/53ab8af9-1100-e9a1-2c4d-194fc832bab8.png)
。上記の必要情報を全部入れ終わったら、”Create App”のボタンをクリックして新アプリを作ります。

。”Create App”のボタン押下後、下記のページに自動に飛んできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629773/8e15d310-531b-6278-065e-1215762f6c1a.png)
。Add features and functionalityを選んで、次はIncoming Webhooks を選択してください。

。Activate Incoming Webhooks のところをONにしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629773/3b732424-021a-41e6-da3a-02469df7a446.png)


。通知先の対象チャネルへ作成されたアプリを追加してください。

![274bc11c-322c-40ca-a9cd-34ae966e623e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629773/9f2aaef2-703b-23a3-2e01-f2367d8a6b24.png)
。WebHook URLが生成されるのでこれをご利用可能になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629773/5d0701f0-8a23-210d-a67c-a7b469e41115.png)
Makefileで独自コマンドを作成するときは.PHONYを書く

## PHONYとは何？

英単語の意味は「偽物」です。
Makefileで独自コマンドを作成するときは、`.PHONY`にも同じコマンドを書きましょう。

## 具体例

```makefile
.PHONY: up lint format
up:
	docker-compose up

lint:
	docker-compose run --rm next npm run lint:fix

format:
	docker-compose run --rm next npm run format
```

## なぜ.PHONYが必要なのか？
これがないと、もしディレクトリにコマンドと同じ名前のファイルが存在した場合に困る。
今回の例だと、`lint`というファイル名が存在して、`$ make lint`を実行すると失敗する。

```
$ make lint
make: `lint` is up to date.
```

## 結論
独自コマンドの数だけ、PHONYにも同じコマンド名を書く。
これにより、予期せぬエラーを防ぎます！
Railsでエラーメッセージ表示されない時の対処法

mac OS バージョン11.6
Rails 6.0.4

# やりたいこと
ユーザー登録に失敗した場合、エラーメッセージが出るようにする

# エラー内容
どこか1つを空欄で登録しようとした場合、本来ならエラーメッセージが出るはずだが出ない。

![66c676ebe92b0cec674b3199da319983.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962714/f38ca33f-0981-f5a6-0cc8-d7bb81578f1a.png)

# 原因
form_withがajax通信になっていたので、画面が更新されていなかった。

Rails 5.1〜6.0 の form_with ではデフォルトでajax通信が行われる仕様になっていて、非同期通信になってしまうのです。
ここにlocal: trueと引数を渡す事で、HTMLをレンダリングできるようになります。（Railsの6.1からはデフォルトでajaxではなくなったのでlocal: trueは不要です）


# 解決策
local: trueを設定することでajax通信を無効にする。

```users/new.html.erb
<%= form_with(model: @user) do |f| %>
      <%= render 'layouts/error_messages', model: f.object %>
```
↓
```
<%= form_with(model: @user, local: true) do |f| %>
      <%= render 'layouts/error_messages', model: f.object %>
```

# 参考
https://ecoyamas.biz/102
https://qiita.com/kakudaisuke/items/e032c7705db00e8081dc?utm_campaign=popular_items&utm_medium=feed&utm_source=popular_items
llがcommand not foundになって解決した話

llコマンドはカレントディレクトリの権限を表示するコマンド
叩いたらcommand not foundになった

## 解決したやりかた
以下記事の方法で解決
https://qiita.com/Oyuki123/items/3f890f8aa2dda5291314


## bashrcとは
bashを起動したときに読み込まれるファイル
rcとはrun commandの略。
https://wa3.i-3-i.info/word13649.html

### bashrcとbash_profileの違い
画面上からbashを起動したときに読み込まれるのが.bashrc
ログインシェルがbashでログインしたときに読み込まれるのが.bash_profile（bash_profileの中で読み込むよう指定されている場合.bashrcも読み込まれる）

### 使い分け
#### .bashrc
対話モードで使うものはすべてここに書く
何も出力してはならない
`EDITOR`変数
プロンプト変数
etc

#### .bash_profile
余計なものは極力書かない
右の順に読み込むだけにする
~/.prosileがあれば読み込む
~/.bashrcがあれば読む


https://techracho.bpsinc.jp/hachi8833/2021_07_08/66396
vimtutor(1.7)　 削除、移動、取り消し　(初心者)

# 削除コマンド

#### dw 指定した文字の先頭から単語を削除していく。

#### d$ 指定した文の末尾から削除していく。

# 2.3 オペレータとモーション
テキスト変更を加えるコマンドはオペレータとモーションになる。

削除コマンドdのオペレータは次のようになる。
d モーション

### d 削除コマンド
#### モーション　何に対して働きかけるか
### モーション一覧の一部
#### w 空白を含む単語の末尾までを削除
#### e 空白を含まない単語の末尾まで削除
#### $ 選択した位置から行末まで削除

## わからないところ
ややこしくてよくわからない。
オペレータ、モーションの区別がわからない。

# 2.4 モーションにカウントをつける
#### [数字] e　選択している単語から[数字]番目の単語の語尾に移動
#### [数字] w　選択している単語から[数字]先の単語の先頭に移動
#### 0　　　　 行の先頭に移動

# 2.5 より多くを削除するためにカウントをつける
オペレータとカウントとモーションをつけると多くの文字を消すことができる。

### 例
#### d2w　カーソルから２つ先の単語の先頭まで削除する
#### d2e　カーソルから２番目の単語の末尾まで削除する
...

# 2.6 行の操作
#### dd　行の全体を削除する
#### [カウント] dd　カウント分を削除

# 2.7 やり直しコマンド
#### u　       最後のコマンドを取り消す
#### U　       行全体のコマンドを取り消す
#### ctrl + r　コマンドを再実行　取り消しの取り消し
SQLを理解する

# SQLとは？
**SQLとはデータベースを操作するための言語である。**
SQLを使用することによって、データベースに挿入されているデータを「検索する」「抽出する」「書き変える」といったことが可能になる。
イメージとしては、データベースを操作するためのプログラミング言語のようなもの。
プログラミング言語はコンピューター全般に処理を送るためのものですが、SQLはデータベースに特化した言語。
# そもそもデータベースとは何か？
**データベースとは、蓄積されたデータの集まりである。**
データベース自体は特別なものではなく、たとえば電話帳、企業の一覧表、LINEの連絡先一覧などもデータベースに該当する。
電子媒体だけがデータベースというわけではなく、紙媒体で管理されているデータも広く見ればデータベース。
データベースはデータがただ蓄積されているだけではなく、データを引き出しやすいように整理されているのが特徴であり重要なポイント。
# SQLの種類
**・データを定義するDDL（Data Definition Language）
・データを操作するDML（Data Manipulation Language）
・データを制御するDCL（Data Control Language）**

具体的な説明
・DDLはDBやテーブルを作成する、削除する
データベースを大幅に変更する命令になる。
|  命令	　|  機能  |
| ------ | ---- |
|CREATE	　　|データベースやテーブルの作成 |
|ALTER	　　|データベースやテーブルの更新 |
|DROP　　　　 |データベースやテーブルの削除 |

・DMLはデータを探す、登録する、更新する
SQLには大きく分けて3種類ありますが、その中でもDML(データ操作言語)はもっとも使用頻度の多いSQLである。
|命令     |機能   |
|------  |------|
|INSERT  |データの登録|
|UPDATE	 |データの更新|
|DELETE	 |データの削除|
|SELECT	 |データの検索|

・DCLは変更を確定する、取り消す
使用頻度は少ない。
|命令      |機能  |
|------   |------|
|COMMIT	  |DBの変更の確定|
|ROLLBACK |DBの変更の取り消し|
|GRANT	  |ユーザーに操作権限を付与|
|REVOKE	  |ユーザーの操作権限を無効化|

`また、SQLはどのような種類のリレーショナルデータベースに対しても、基本的に同じ文法で操作ができる。
それはISO（国際標準化機構）で規格化が行われているから！！`

# SQLの使える主要なデータベース
※以下データベースはDBと記述します

**・MySQL**
MySQLは、Oracle社が開発ならびにサポートするオープンソースのDBです。
無償のGPLライセンスと、商用ライセンスがあり、基本的には無償で使用することが可能です。
MySQLはリレーショナルDBといって、データを表形式で扱います。
他のデータベースの種類には、階層型とネットワーク型があります。
現状多く使われているのはリレーショナルDBで、人気のデータベースはほとんどがリレーショナルDBです。
MySQLは高い柔軟性、拡張性があることが特徴的で、複数のテーブルの結合などがしやすいです。
処理速度も速く、使いやすいDBと言えるでしょう。その結果、もっともシェアの大きいDBとなっています。

**・PostgreSQL**
PostgreSQLはオープンソースのリレーショナルDB管理システムです。
すべてオープンソースで無償で利用できます。
PostgreSQLはもともとは、カリフォルニア大学バークレー校で開発されたIngresDBの後継としてできたものです。
リレーショナルDBという点ではMySQLと同じで細かな違いはあるものの大まかな扱い方はどちらも共通します。
PostgreSQLはMySQLよりも機能性が高く、使い方が多少難しい分できることが多いという特徴があります。
具体的には、プログラミングの際にDBの処理を組み込みやすいということが挙げられます。
オブジェクト指向のプログラミング言語（Javaなど）には継承といって、一度定義したロジックを使いまわせる機能があります。PostgreSQLはテーブルで継承が使える分プログラミングとの相性が良いので、プログラマーに好まれる傾向があります。

**・Oracle Database**
Oracle Databaseとは、Oracle社が開発・販売しているリレーショナルDB管理システムです。
Oracle Databaseは無償で使う方法と、有償版があります。Oracle DatabaseをMySQLなどと比較すると細かな違いは複数ありますが、大まかな使い方は同じです。
もともとOracle Databaseを使っていたシステムが、MySQLに移行するケースが多いです。
Oracle Datebaseは高い堅牢性、同時に複数人が編集しないようにロックを行う、プラットフォーム間の移植が容易、Oracle社からのサポートが充実している、費用が高い、といった特徴があります。
Oracle Datebaseはコストがかかりますが、その分バグ対応などのサポートを受けられるという点がメリットと言えるでしょう。

**・Microsoft SQL Server/Access**
Microsoft社が提供するMicrosoft SQL Server/Accessは、同社が提供しているExcelなどとも互換性があるリレーショナルDB管理システムです。
SQL ServerとAccessは類似するツールですが、Accessの方がより手軽に使用できるDB、SQL Serverの方が本格的なDBと考えるとわかりやすいでしょう。
Windows製品との親和性が高い。ただしMySQLやPostgreSQLは、より安価でかつWindowsを含めた幅広い環境に適応しているので、具体的にWindows Serverやその他のWindows製品と連携させる方法が決まっている場合にMicrosoft SQL ServerやAccessがおすすめです。

# 最後に
データはシステム開発やビジネスにおいてとても重要なものなのでSQLをしっかりと理解し、
環境や予算・使い勝手・親和性などを考慮して使用データベースを選択する必要があると感じた。
インフラ部分との関係も深いと思うのでプログラミングだけでなく、データベースやインフラ部分も少しづつ理解を深められるよう学習していく:writing_hand_tone2:
renderエンティティに一斉にコリジョンを設定する

1000をこすようなentityで構成された大規模な3D空間に対して
RayCastやウォークスルーのためにcollisionを設定したいケースがあると思います。

例えば以下のような椅子や机、植物などすべてのエンティティが独立しているケースです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148084/d3269418-e54e-f6d5-591f-e6e58cf19a26.png)
この場合、GUIで全てにcollisionをつけるのは大変です。そこでEditor APIを利用します。

Editor APIの利用方法についてはこちらから確認できます。
https://developer.playcanvas.com/ja/user-manual/designer/editor-api/
 
以下コードをコンソールに入力することでrenderコンポーネントを持つentityにcollisionを適用する事ができます。
```
//すべてのrenderコンポーネントを持つエンティティを取得
const renders = editor.entities.root.filter(entity => entity.has('components.render'));
for(const render of renders){
    //renderコンポーネントを持ち描画対象assetを保有していれば
    if(render.get('components.render.asset')){
    　　//コリジョンを追加
        render.addComponent('collision');              
        //コリジョンのタイプをmeshに設定
        render.set('components.collision.type','mesh');   
        //コリジョンのrenderアセットIDを描画しているrenderアセットのIDから適用
        render.set('components.collision.renderAsset',render.get('components.render.asset'));
    }
}
```
実行後適用されるまで数十秒かかりますのでEditorを閉じずtrue の表示が出るまで待つ必要があります。
私の環境では3500程度のentity全てに実行するのにおよそ80秒程度かかりました。マシンパワーとエンティティ数に応じて増減します。
![image (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148084/ddf6f895-09dd-9a92-36aa-64ee14bb2b09.png)

こうすることで簡単にすべてのrender エンティティにcollisionを設定することができます。
MacでLaTeXを使う（TeXLive、ただしMacTeX不使用）

# 目的
　Windows,LinuxでのXeLaTeX＋VSCode＋LaTeX Workshop環境構築については以下の通り以前に書いた。

https://qiita.com/okemessi/items/92844ed647861ecafe17

　Windows用の記事だが、Linuxでもさほどトラブルなくインストールはできる。（Linuxで環境を汚したくなければtexliveインストーラーではなくdnfなりaptなりで個別にパッケージ```texlive-(ctanのパッケージ名)```をインストールすればいい）
　しかしこれをMacでやろうとしたら絶望的に上手くいかなかったので、やらないといけないことを備忘録も兼ねて全て順に書いておこうと思う。

# 条件
* macOS 12.3.1をインストール・ユーザー作成完了したところ
* MacTeXは使わない（環境が派手に汚れる、使わない専用エディタやら何やらが勝手にインストールされる）
* 専用エディタは不要（上のVSCodeを使う）

# 手順
## 要約
* XCodeインストール(Perlが含まれる)
* Homebrewインストール（パッケージ管理システム）
* HomebrewからGhostscriptインストール
* TEXLiveインストール
* PATHを通す
* あとはVSCodeのインストールからWindowsとほぼ同様。

　以下順を追って説明する。

## XCodeのインストール
　これがないとperlすら動かないのでさっさとインストールしてしまいましょ。

https://apps.apple.com/jp/app/xcode/id497799835


　インストール後に再起動が必要かもしれない。

## Homebrewインストール
　Ghostscriptを楽にインストールするために（なぜか公式サイトにMac用インストーラーがない…？）使いたいので、インストールする。

　ターミナルに貼り付け→Enter（公式サイトより転載）

```bash
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

　勝手にインストールされる。

## Ghostscriptインストール（重要）
 　ここで思いっきりハマった。Windows版なら同時インストールされるのにMac版には同梱されてない（強引にその他諸々と共に同梱したのがMacTeXだが…）。ターミナルに貼り付け→Enter。

```bash
$ brew install ghostscript
```

　こちらも勝手にインストールされる。

## TeXLiveインストール
　まずここからインストーラー```install-tl-unx.tar.gz```をダウンロードする

https://ftp.kddilabs.jp/CTAN/systems/texlive/tlnet/

　ダウンロードしたら解凍して、中に```install-tl```があることを確認しておく

　ターミナルを開いて、以下のコマンドを実行。```sudo（半角スペース）```だけ打ち込んでドラックアンドドロップ→Enterで良い

```bash
$ sudo （ここに先ほどのinstall-tlをドラックアンドドロップ）
または
$ sudo （先ほど確認したinstall-tlへのフルパスを入力）
```

　あとは画面に従う。Windowsと同じだが、CUIな分設定がめんどくさいのでfull-schemeで何も変更せずインストールしてしまって良いと思う（ディスク容量に余裕があれば）。

## PATHを通す
　これもWindows版と違ってやってくれない。何で？


```bash
$ sudo /usr/local/texlive/????/bin/*/tlmgr path add
```

　これについては公式サイトでも言及されている

https://texwiki.texjp.org/?TeX%20Live%2FMac#texlive-install-official

## VSCodeとか
あとはWindowsとほぼ同様。下のリンクから元記事の該当箇所まで飛べる（「VSCodeのダウンロード・インストール」から順にやっていけば良い）。

https://qiita.com/okemessi/items/92844ed647861ecafe17#vscode%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

## 完了
　以上で完了。テストファイルのコンパイルが通るかだけ確認しておく。

# まとめ
　何でMac版のパッケージはこんな厄介なことになっているんだ。（というより同じインストーラーを使うLinuxでは最初からghostscriptもperlも走るからそんなに問題はないのだろう。何ならdnfからインストールできるし。にしても何故PATHを通さない？）
　とりあえず何やかんやでインストールできたので良いということにしておく。
Vue3環境を仮想サーバーで構築してnpm run dev を実行した際に3000番ポートにアクセスできない

# npm run dev でhttp\://localhost:3000にアクセスできない
Viteというビルドツールで開発を行うため、必要な環境構築を行いました。
ブラウザで挙動を確認するため、お馴染みの **「npm run dev」** を実行し、ブラウザからhttp\://localhost:3000にアクセスしたところ、上手く画面が表示されませんでした。
[Viteとは](https://ja.vitejs.dev/guide/)

ターミナルを確認したところ、下記のようになっていました。
```console:console
  vite v2.8.6 dev server running at:

  > Local: http://localhost:3000/
  > Network: use `--host` to expose

  ready in 206ms.
```
Local環境にアクセスするならば http\://localhost:3000/、
Network環境にアクセスするならば **「use `--host`して公開（expose）しなさい」** 、と書かれています。

したがって、configファイルを修正します。
```ts:vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  base: './',
  plugins: [vue()],
  // ここから追加
  server: {
  host: true
  }
  // ここまで追加
})

```

再び「npm run dev」を実行します。
```console:console
  vite v2.8.6 dev server running at:

  > Local:    http://localhost:3000/
  > Network:  http://192.xxx.xxx.xxx:3000/ // ここにアクセスする。
  > Network:  http://172.xxx.xxx.xxx:3000/

  ready in 209ms.
```
Networkが解放されていることが分かります。
再び、ブラウザでアクセスすると、画面が表示されることが分かります。
SATA・IDEの違いについてまとめました

## はじめに
ストレージ領域の学習する際に登場するSATAやIDE。

両方ともHDDの接続規格（インターフェイスの規格）であるということはわかってはいるもの、なんか出会すたびに調べていてあまり理解してないかなと思ったので、この機会にメモベースでまとめてみました。

実際検索すると基本的なことなだけあり、
情報としてはたくさんでできますが、
今回参照したページは下記のURLとなります。

参考URL：https://www.dospara.co.jp/5info/cts_str_parts_ide


### IDEとSATAの概要

そもそもこいつらなんぞやについて改めて触れていくと、
上記でも触れているように簡単にいうと、
**HDDの通信・接続の規格**ということ。

データ送信の決まり事って感じ。

どのように違うのかというと、

IDE→「パラレル方式」で送信。並行でデータが送信。

SATA→IDEとは対照的にシンプルな構成で一本でデータをやり取りする。


### 現状の主流

参考URL：https://www.pasonisan.com/pc-storage/hdd-01-sata.html

現在主に使われている規格は、**SATA**になる。

理由としてはCPUの性能が関係していて、
より高クロック性能になった。要するにより早い処理はできるようになった。

IDE、パラレル方式だと速すぎると弊害があり、
データ送信後にパラレル的に送ったデータを同期ができなくなってしまう。。

要するにCPUの処理が早すぎてたくさんのデータが、複数の経路からデータがくる。
そうすると、データを同期作業ができなくなる
（複数のデータがくるのでそれらを複数の形に分ける前にもどす。
その際データがたくさんきすぎて、元々どれかどのデータのものかわからなくなるイメージ）

一方はSATAは、経路を一本にし構造をシンプルにしているので、
同期の問題がない。

一本だけなので、データの辻妻を合わせるみたいなことはいらなくなるイメージ。




今回はざっくり、以上です。
あなたは本当に「プログラミングができない、向いてない」のか？ 〜うるう年判定プログラムで考える〜


## この記事の目的

- 「プログラミング学習につまずいている」
- 「基礎的な式や文は覚えたけど、応用できずに悩んでいる」

そんな人達に、「自分がうまくいかない原因が何なのか」を考えるきっかけにしてほしいです。

特に、「プログラミングで何か問題を解く」的なことが苦手な人に、少しでも参考になればと思います。

## 「プログラミングができない」をもっと細かく切り分けてみる

「プログラミング難しい、向いてないかも...。」と思う前に、「自分が何につまずいているのか」を分析してみましょう。

### 実は、難しいのはプログラミングじゃない？

プログラミング自体は、あくまでコンピュータに何かを実行させるための命令でしかありません。

なので、その<b>やりたい「何か」自体が難しい場合、自ずとそれをプログラミングするのも難しく</b>なります。

ただ、目の前で取り組んでいるものが「プログラミング」なので、その状態を「プログラミングが難しい」と考えてしまう人も多いのではないでしょうか。

## 例: 「うるう年判定プログラム」がうまく書けないケース

スクールの課題でもよくある（らしい）、「うるう年判定プログラム」を作る問題を例にとって見ていきたいと思います。

なお、言語はPythonを使用しますが、重要なのは考え方であり、その点は他の言語（JavaでもRubyでも）と共通です。

※あくまで解くこと優先なので、「うまい」「きれいな」書き方ではないことはご了承ください。

### 問題の概要

- ある西暦（整数）を入力すると、それがうるう年か、そうでない（平年）か、を判定するプログラムを作成せよ。
- うるう年と判定する条件は、以下のとおりである。
    - A: 4の倍数の年は、うるう年
    - B: ただし、100の倍数の年は、うるう年ではない（平年）
    - C: ただし、400の倍数の年は、うるう年


#### 必要なプログラミングスキル

この問題を解く時に最低限必要なスキルは、大きく分けると

- 変数への代入
- 条件分岐（Pythonなら、 `if - elif - else`文）
- （標準入力・標準出力）

のみです。

逆に言えば、<b>「これらの書き方がわかるのにこの問題ができない場合、それはプログラミングができなくてつまずいているわけではない」</b>のかもしれません。

主なハマりポイントとしては、

- 倍数の判定方法がわからない
- <b>条件が多すぎて、どうやって考えたらよいかわからない</b>

あたりだと思います。

典型的な、「考える内容が難しい」問題であり、実は求められるプログラミングスキル自体は、それほど高くありません。

### 必要な要素・考え方

入力される西暦を、`year`という変数に代入する前提で進めていきます。

#### 「〇〇の倍数」の判定

- 「〇〇倍数」は「〇〇で割り切れる（割った時に余りが0である）数」と言い換えることができます。
- 例えば「2022を4で割った時の余り」は、 `2022 % 4` で求められます。
- なので、
    - 「`year`が4の倍数かどうか」という条件は、「`year % 4 == 0`」
    - 「100の倍数かどうか」は、「`year % 100 == 0`」
    - 「400の倍数かどうか」は、「`year % 400 == 0`」


#### 条件同士の関係を考える

これが一番重要です。

<b>条件が複数あるときは、その条件同士の関係をしっかり理解</b>しましょう。

与えられた条件をもう一度整理すると、

- A: 4の倍数ならばうるう年
- B: 100の倍数ならば平年
- C: 400の倍数ならばうるう年

になります。

ここで、AとBの条件に注目して、

- 100の倍数ならば、4の倍数である

ことに気づくと、

- 100の倍数は平年。そして100の倍数でない4の倍数はうるう年。

という形で、AとBの関係を整理することができます。

同様に、BとCについても、

- 400の倍数ならば、100の倍数である

ので、

- 400の倍数ならばうるう年。そして400の倍数でない100の倍数は平年。

という形で、BとCの関係を整理することができます。

まとめると、ある西暦に対して、

- 400の倍数ならば、うるう年
- 400の倍数でない、100の倍数ならば、平年
- 100の倍数でない、4の倍数ならば、うるう年
- 4の倍数でないならば、平年

ということになります。

ここまで整理できれば、上から順に`if-elif-else`文で書いていくだけになります。

```python
year = int(input())
if year % 400 == 0:  # 400の倍数なら「うるう年です。」
    print("うるう年です。")
elif year % 100 == 0:  # 100の倍数なら「うるう年ではありません。」
    print("うるう年ではありません。")
elif year % 4 == 0:  # 4の倍数なら「うるう年です。」
    print("うるう年です。")
else:  # どれにも当てはまらなければ、「うるう年ではありません。」
    print("うるう年ではありません。")
```

※簡略化のため、`main`関数とか書いてないのはごめんなさい。



### 振り返り

この問題では、

- 倍数についての知識
- 条件間の関係性を考察する論理的思考力

が必要になります。

特に後者については、<b>高校数学の「論理と集合」の考え方を理解しているか</b>が大きな分かれ目になってます。
※勉強していないとできないわけではもちろんなくて、この考え方自体が自然にできるならば問題なく解けるはずです。

このように複数の条件を扱うときに、その条件同士の関係を整理できるかどうかは非常に重要で、<b>一般的に、プログラミングには数学が必要と言われる背景の一つ</b>はこれではないかと考えています。


## まとめ：あなたに足りないのは、本当にプログラミングスキルなのか

以上、うるう年判定を例に上げて、「プログラミングの問題を切り分け」してみました。

ここでは高校数学の話に少し触れましたが、<b>決して「数学やってなかったらプログラミングできない」と言うつもりはありません。</b>

今回お伝えしたかったのは、以下の2点です、

- <b>現実の問題に立ち向かうためには、数学に限らず幅広い知識や感覚が必要になることがある。</b>
- <b>これらの知識・感覚が自分に有るのか・無いのかを自覚して、無いならそれを補っていくことが重要。</b>

「プログラミング向いてない」と諦めてしまう前に、自分がなんで詰まってしまったのか、しっかり振り返って前に進んでもらえると良いな、と思います。


## おわりに

弊社では、経験の有無を問わず、社員やインターン生の採用を行っています。
興味のある方は[こちら](https://www.recruit.nuco.co.jp/)をご覧ください。
nvm-windowsをつかう

MSのドキュメントにしたがってnvm-windowsをいれてみた

https://docs.microsoft.com/ja-jp/windows/dev-environment/javascript/nodejs-on-windows

最初に管理者でインストールして、いくつかのバージョンのnodejsをいれた。
さて、使おうかということで、管理者ではないターミナルを開いて `nvm use` しようとしたところ、 `exit status 1` とでたので調べてみたところ、
シンボリックリングを Program Files 以下に作るが、そのシンボリックリンクが管理者でないと変更できないために発生するらしい。

ということでシンボリックリンクの位置を示す環境変数 `NVM_SYMLINK` を変更することで、管理者用のターミナルでなくてもnvm useで変更できるようになった。
vimtutor(1.7)で学んだこと 1（初心者）

# Vimはエディターである。
### エディターとは？
コンピュータ上で何らかのデータを編集するためのソフトウェア。 

# 1.1カーソルの移動
#### k 上移動
#### j 下移動
#### l 右移動
#### h 左移動

### かな表示だと文字が打たれてしまうので注意！

# 1.2Vimの起動と終了
#### esgキーでノーマルモードにする
ノーマルモードは後述
#### :q!<enter>　保存せずエディタを終了 変更を破棄
#### vimtutor<enter> vimのチュートリアルを開始

# 1.3テキスト編集ー削除
#### x 文字の削除

# 1.4テキスト編集ー挿入
#### i 　iを押した後文字を入力できる
#### ＜esc＞を押して削除を終わる

# 1.5テキスト編集ー追加
#### A(ラージA) 文字列を追加
#### ＜esc＞ を押して追加を終える

# 1.6ファイルの編集
#### vim テキスト名 テキストを編集
#### :wq ファイルを保存　変更を保存
ShopifyデータをHTMLベースでJSへ渡す方法

今回は、どうしても面倒だった、Liquid　data ＞ jsへjsonで渡す ＞ jsでHTMLテンプレートにデータを入れて出力 の工程で楽出来ないかと思い…試行錯誤した結果、上手くいったので共有したいと思います。

なぜ、この方法を考えたかと言うと、たまにある一覧データでのもっと見るボタン。
Liquidでの実装も可能だが、独自カスタムをした場合、jsを組み込む必要があるため、どうしても一旦は全データをjsへ渡す必要がある。
今までは、Liquidでjsonを作成し、それをjsで加工し、HTMLへ流し込むとやってはいたが…。jsがスパゲッティ化してしまう。
というか、条件に応じてどれだけでも存在するロジックを組み、コードを書くのが面倒くさかった。

理想としては、Liquidで判定 ＞ Liqiud　dataをHTMLに入れる ＞ HTMLごとjsへ ＞ jsは必要な分だけ出力。
こいつができたので、以下で説明していきます。
## まずはコードの共有
今回は注文履歴一覧での、もっと見る実装だったのでcustomer.ordersで実装しています。
```
{% paginate customer.orders by 250 %}

  <div id="container"></div>

  {%- comment -%} jsに渡すためのデータを作成 {%- endcomment -%}
  {%- assign order_array = "" -%}

  {% for order in customer.orders by 250 %}
    {% capture html %}
      {%- comment -%} ここにrenderか直書きでカードHTMLを入れ込む {%- endcomment -%}
      {%- render "order-list-card", order: order -%}
    {% endcapture %}

    {% capture one_order %}{"data": {{ html | json }}}{% endcapture %}
    {% assign order_array = order_array | append: "," | append: one_order %}
  {% endfor %}

  {% assign order_array = order_array | remove_first: ","  %}
  {%- comment -%} オーダーJSON作成 {%- endcomment -%}
  {% capture order_list_data %}[{{ order_array }}]{% endcapture %}

{% endpaginate %}

<script type='text/javascript'>
  const ORDER_LIST_DATA = {{ order_list_data }};

  let cards;
  // ORDER_LIST_DATAを加工して必要なぶんだけ取り出した配列に変更してもOK
  cards = ORDER_LIST_DATA.map(item => { return item.data });
  cards = cards.join('');

  document.getElementById('container').insertAdjacentHTML('beforeend', cards);
</script>
```

## 説明
{%- render "order-list-card", order: order -%} で読み込んでいるところがHTML本体になるところです。
ここは、renderを使って別ファイルを読み込んでもいいし、HTML直書きでもOKです。

一番大事なところが、{% capture one_order %}{"data": {{ html | json }}}{% endcapture %}で、この時点でHTMLをjsonで入力し、これ以降でLiquidオブジェクトをjson化しないことです。このタイミングでjsonにしてあげないと、jsに上手くオブジェクトとして伝わってくれません。

あとは、Liquidで作成した配列をjsへ渡し、必要な分だけcontainerの中に出力してあげればOKです。

## まとめ
特定のデータの全取得からの表示…。今までとても面倒で嫌いでしたが、これで実装・管理しやすくなったと思います。
まだ試していませんが、これなら一度に取得する情報量も、Liquidのページネーションで制限し、もっとみるを押した時点で次のページのデータを取得するとかもいけそう…。
それもどこかで試していこうと思います。
　

あと…
ARCHETYPでは、Shopifyのテーマ開発やアプリ開発をやりたいエンジニアを募集しております！
気になった方はお気軽にエントリーをお待ちしております！
https://www.archetyp.jp/recruit/
（業務委託の方もお待ちしておりますー！）
ReSwiftでRedux DevToolsを動かす

[ReSwift](https://github.com/ReSwift/ReSwift)と[Redux DevTools](https://github.com/reduxjs/redux-devtools)を連携させる方法のメモです。

![スクリーンショット 2022-04-18 9.07.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36771/f25239cd-8df4-e365-f080-a767060e6648.png)

大きくは以下の３Stepになります。

1. ReSwiftMonitorをインストールする
1. redux-devtoolsをインストールする
1. ツールを起動してモニタする

## ReSwiftMonitorをインストールする

Redux DevToolsと連携するプラグイン [ReSwiftMonitor](https://github.com/t-osawa-009/ReSwiftMonitor) が公開されている。
CocoaPodsなりでインストール。コードに組み込む。
[READMEに書いてある通り](https://github.com/t-osawa-009/ReSwiftMonitor#project-integration) `MonitorMiddleware.make(configuration:)` を使ってミドルウェアを生成して登録する。

```swift
var middleware: [Middleware<AppState>] = {
    var _middleware: [Middleware<AppState>] = []
    #if DEBUG
    let monitorMiddleware = MonitorMiddleware.make(configuration: Configuration())
    _middleware.append(monitorMiddleware)
    #endif
    return _middleware
}()

let store = Store<AppState>(reducer: AppState.reducer(), state: AppState(), middleware: middleware)
```

## redux-devtoolsをインストールする

リモート接続する形でredux-devtoolsと連携するため、nodejsのリモートサーバ兼クライアントになるスタンドアローンアプリをインストールする。


#### スタンドアローンアプリのインストール

ReSwiftMonitorのREADMEではremotedev-serverをインストールと書かれているが、redux-devtools本体にマージされた模様。
[redux-devtools/cli](https://github.com/reduxjs/redux-devtools/tree/main/packages/redux-devtools-cli#usage) をインストールすればOK。

以下はプロジェクト配下にのみインストールする手順。グローバルにインストールする手順もあるが、リンク先参照でここでは割愛。

```console
npm install --save-dev @redux-devtools/cli
```

`package.json` に起動スクリプトを追記する

```json
  "scripts": {
    "redux-devtools": "redux-devtools --open"
  }
```

`package.json` の全体像は以下のようになる。

```json
{
  "devDependencies": {
    "@redux-devtools/cli": "^1.0.7"
  },
  "scripts": {
    "redux-devtools": "redux-devtools --open"
  }
}
```

これで `npm run redux-devtools` でスタンドアローンアプリが起動するようになる。

## ツールを起動してモニタする

以下の順番で実行してください。

1. redux-devtoolsスタンドアローンアプリを起動
1. redux-devtoolsスタンドアローンアプリを接続する
1. ReSwiftアプリを起動

#### redux-devtoolsスタンドアローンアプリを起動

```console
npm run redux-devtools
```

Electronのウィンドウが開く。

#### redux-devtoolsスタンドアローンアプリを接続する

`Settings` タブを選択　> `use local (custom) server` をチェック > デフォルトのまま `Connect` 。
![スクリーンショット 2022-05-08 23.50.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36771/fdb0d1d8-9085-1ff0-07e0-c0280aa3e6a6.png)
Actionsタブを選択して、モニターする。

#### ReSwiftアプリを起動

シミュレータでReSwiftを組み込んだアプリを動かす。Actionが発行されると、Redux DevToolsに更新内容が記録される。
![スクリーンショット 2022-05-08 23.52.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36771/9c806549-6473-aab6-3b89-fefc356fb4d5.png)
TypeScriptのfindでundefinedが返らないようにする方法

## findの使用例

findとは、提供されたテスト関数を満たす配列内の**最初の値**を返すものです。

```example.ts
const array1 = [1, 2, 3, 4, 5];

const result = array1.find(element => element > 3);

console.log(result); // 4
```
例のコードだと、配列の要素で3より大きい最初の要素は４なので、resultには４が返ります。

別に何の問題もないコードに見えるのですが、resultにカーソルを当ててみます。

![スクリーンショット 2022-04-17 19.03.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664202/161c478c-593d-5b71-3227-9c12a27ac585.png)

**え、undefined…？**

そうなんです。findは、テスト関数を満たす配列内の要素がなかった場合に、undefinedを返すようになっているので、仮にテスト関数を満たす要素があったとしてもundefinedが返るようになっています。。

## undefinedが返らないようにするにはどうするか

```example.ts
const array1 = [1, 2, 3, 4, 5];

const result = array1.find(element => element > 3) ?? 0;

console.log(result);
```

??をつけることで、テスト関数を満たす要素がなかった場合、つまりundefinedの時に代わりに返す値を設定することができます。

![スクリーンショット 2022-04-18 9.15.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664202/04e57a53-db4f-63e8-5284-72b0fd4a62fe.png)

これでundefinedが返らないようになりました。めでたしめでたし。

### 参考記事
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/find
Ubuntuのログイン画面ループ対処法

# 状況
Ubuntu20.04をインストールしたら，ログイン画面がループした．

# 対処法
調べてみると，GPU周りが怪しいらしい．
①「ctrl + alt + F3」でCUI画面に遷移
②以下のコマンドでGPUの型番を確認
```
$ sudo update-pciids
$ update-pciids
$ dpkg -l | grep nvidia
```
③[nvidia公式ページ](https://www.nvidia.co.jp/Download/index.aspx?lang=jp "nvidia公式ページ")で対応するnvidia-xxx（xxxが必要）を確認
（私の場合は510でした）
④確認したら以下のコマンドを実行
```
$ sudo apt install nvidia-driver-xxx -y
```
⑤再起動
```
$ sudo reboot
```
動きました！
Mockitoでのユニットテストに入門してみた

# Mockitoとは
Mockitoとは、Javaアプリケーション開発においてデファクトスタンダートになっているモックライブラリです。
ユニットテストを記述するする際、テスト対象が他のコンポーネントに依存している場合、その依存しているコンポーネントとそっくりな振る舞いをするテストダブル（影武者）を作成する必要があります。
自前でテストダブルを作成するのは大変ですが、Mockitoを使えば依存コンポーネントとテスト対象とのやりとりを簡単に実装することができます。
今回は、MockitoのKotlin向けラッパーアプリである [Mockito-Kotlin](https://github.com/mockito/mockito-kotlin) を使用していきます。

# テストダブルについて
テストダブルの役割は以下の5つです。

- スタブ
- モック
- スパイ
- フェイク
- ダミー

今回は、特によく使われるスタブ・モック・スパイオブジェクトについて入門していきます。
スタブ: テスト対象に対して、事前定義した任意の値を与える
モック: テスト対象メソッド実行時に、テスト対象が依存コンポーネントに与える挙動を検証するためのテストダブル
スパイ:スタブの上位互換のようなもので、テスト対象に値を与えるのが主な責務 
それぞれの役割は上記の通りです。正直、読んでいてもいまいち理解が追いつかなかったためとりあえず実際にコードを書いていきます。

# テスト対象クラスと依存コンポーネントの作成
下記のように、天気予報を行うためのクラスとして`WeatherForecast`を作成し、それに対してユニットテストを行なっていきます。
`WeatherForecast`は`shouldBringUmbrella`メソッドを持ち、依存先の`Satellite#getWeather()`メソッドで取得した天候をもとに傘が必要かどうかの真偽値を返します。

```kotlin
class WeatherForecast(val satellite: Satellite) {
    fun shouldBringUmbrella(): Boolean {
        val weather = satellite.getWeather()
        return when (weather) {
            Weather.SUNNY, Weather.CLOUDY -> false
            Weather.RAINY -> true
        }
    }
}

open class Satellite {
    open fun getWeather(): Weather {
        return Weather.SUNNY
    }
}

enum class Weather {
    SUNNY, CLOUDY, RAINY
}
```

# モックの生成
`WeatherForecast`のテストクラスである`WeatherForecastTest`クラスを生成します。
`WeatherForecast`クラスは`Satellite`クラスの挙動に依存しているため、テストするにはSatellite`クラスのモックが必要となります。
Mockitoを使うと、下記のようにモックオブジェクトの作成ができます。

```kotlin
class WeatherForecastTest {
    @Mock
    lateinit var satelite: Satellite

    @Before
    fun setup() {
        MockitoAnnotations.openMocks(this)
    }
}
```
モックオブジェクトに@Mockアノテーションをつけ、`MockitoAnnotations.openMocks`を呼ぶことでテスト実行時にフィールドにモックオブジェクトが挿入されます。

# スタブメソッドの設定
上記で作成した`Satellite`のモックオブジェクトに対して、スタブメソッドを設定します。

```kotlin
whenever (satelite.getWeather()).thenReturn(Weather.SUNNY)
```
今回は常にSunnyを返すように設定しました。
以上で、テストダブルの設定は終了です。

# テストコードの記述と実行
テストダブルの設定が完了したので、実際にテストコードを書いていきます
今回は、`satelite.getWeather()`が常にSunnyを返すため、テスト対象クラスの`shouldBringUmbrella`はfalseを返すことが期待値です。
下記のようなテストコードを記述し、実行していきます。

```kotlin
class WeatherForecastTest {

    @Mock
    lateinit var satelite: Satellite

    lateinit var target: WeatherForecast

    @Before
    fun setup() {
        MockitoAnnotations.openMocks(this)
        whenever(satelite.getWeather()).thenReturn(Weather.SUNNY)

        target = WeatherForecast(satelite)
    }

    @Test
    fun shouldBringUmbrella_givenSunny_returnFalse() {
        val actual = target.shouldBringUmbrella()
        assertThat(actual).isFalse
    }
}
```

テストを実行し、結果を確認します。
期待通りにテストが通っていることが確認できました。
![スクリーンショット 2022-01-06 15.56.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466399/9527824b-8df7-848a-bd5e-017361567d74.png)

今日はここまで！
【Azure 資格】AZ-900 勉強方法メモ（2022/1合格）

先日、Microsoft Azure Fundamentals(以下AZ-900)を受験し、無事合格しました。
その際の勉強方法を備忘録を兼ねて記載しようと思います。

# 受験時の知識レベル
基本的にはアプリ側の人間だったこともあり、誰かがAWS等で構築してくれた環境で開発を行うといったことしかしたことがなく、本格的にクラウドサービス自体はほぼ触ったことがない状態でした。
もちろん、AWSの資格なども一切持っていませんでした。ど素人です。
Azureについても、業務に携わることになり初めて知りました。
一方で、基本情報技術者、応用情報技術者、LinuC Level1等は持っていたため、基礎の基礎はわかっている部分があったかもしれません。

# 勉強時間
(年末年始のさぼり期間があったため不正確ですが)12月中旬～1月中旬までの約1か月です。毎日30分～1時間ほど勉強していたと思います。
会社で「誰も落ちてないよ？」とプレッシャーをかけられていたこともあり、少し多めに勉強しました。

# 勉強方法
Azureどころかクラウドサービスに本格的に触れることが初めてだったため、丁寧に勉強しました。
実施した内容は下記です。
- Microsoft Azure Virtual Training Days（[Microsoft Azure Virtual Training Day: Azureの基礎](https://www.microsoft.com/ja-jp/events/top/training-days/azure?activetab=a1%3aprimaryr4)）
　この講座を受講すると無料バウチャーがもらえます。
　無料バウチャー目当てに申し込みました。~~（が、時間的に出れない部分が多く、聞けたのは半分もなかった気がします。）~~
- MSLearn（[試験 AZ-900:Microsoft Azure の基礎](https://docs.microsoft.com/ja-jp/learn/certifications/exams/az-900))
　「MSLearn AZ-900」などで検索すると出てくるものかと思います。
　下の方にスクロールすると「準備する2つの方法」が出てきます。
　その[オンライン-無料]のタブを見ると6つのラーニングパスが出てくるので、それをすべて実施しました。
　基本も何もわからなかった自分にとっては有益でしたが、とにかく時間がかかるので実力に応じて取捨選択するのもよいと思います。
- Udemy 模擬問題
　下記2つのUdemy講座を使って、問題への対策を行いました。2～3周して9割とれるまで学習しました。
　- [これだけで合格！AZ-900:Microsoft Azure Fundamentals模擬試験問題集（7回分430問）](https://www.udemy.com/course/az-900-microsoft-azure-fundamentals4176/)
　- [AZ-900:Microsoft Azure Fundamentals 模擬問題集](https://www.udemy.com/course/az-900-microsoft-azure-fundamentals/)
　Udemyはよくセールを行っていますので、購入する場合はセールを狙いましょう。
　（私は会社がUdemy for Businessを導入してくださっていたため無償でした。ありがたい。）

# 試験本番の感想
　今回はテストセンターで受験しました。（オンラインで自宅での受験も可能ですが、環境等を整える必要があり、しり込みしてしまいました。。）
　写真を撮ったり、説明を受けたりし、試験が開始となります。
　試験時間が60分だと思っていたら45分だったため少し焦りましたが、見直しも含め30分かからずに終わりました。
　最後の終了(完了?)ボタンをクリックすると、合否と得点が表示されます。
　1000点満点中700点取ると合格となります。今回は無事に820点取ることができ、合格することができました。

# 最後に
　合格して振り返ってみると比較的簡単だったと言えますが、やはり超初心者としては範囲も広いですし、わからない用語だらけですし、ある程度勉強しないと合格できないと思いました。
　また、この資格のために勉強したことで基本的な知識が得られ、クラウドサービスへの抵抗がなくなったことが一番良かったことかと思います。
Laravel「くっ。X-Serverのエントリポイントはpublic_htmlだと…」

Laravel「エントリポイント変えたろ」

```php:app/Providers/AppServiceProvider.php
public function register()
{
   // set the public path to this directory
   $this->app->bind('path.public', function() {
     return base_path().'/public_html';
   });
}
```

```php:server.php
// require_once __DIR__.'/public/index.php';
if ($uri !== '/' && file_exists(__DIR__.'/public_html'.$uri)) {
    return false;
}

require_once __DIR__.'/public_html/index.php';
```

```php:webpack.mix.js
mix.setPublicPath('public_html/')
```

## Laravelのバージョンについて
バージョンは８系です。ご了承ください。

## 参考リンク
https://stackoverflow.com/questions/67328616/how-to-change-public-folder-to-public-html-in-laravel-8/67328617
Next.jsのREADME.mdの日本語意訳

# はじめに
自分用に作成
適当に翻訳したため違う部分もあるかもしれません。

README.md
---
これは [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) で自動生成された [Next.js](https://nextjs.org/) のプロジェクトです.

## 始めるために

まず, 開発サーバーの実行をする:

```bash
yarn dev
```

ブラウザで結果を確認する: [http://localhost:3000](http://localhost:3000)

ページの編集は `pages/index.tsx` を修正することで開始することができます。ファイルを編集すると、ページも自動的に更新されます.

[API routes](https://nextjs.org/docs/api-routes/introduction) は [http://localhost:3000/api/hello](http://localhost:3000/api/hello) にアクセスできます.
エンドポイントは `pages/api/hello.ts`で編集できます.

`pages/api` ディレクトリは `/api/*` に関連付けされます. このディレクトリにあるファイルは、Reactページではなく [API routes](https://nextjs.org/docs/api-routes/introduction) として扱われます.

## 詳しく学ぶ

Next.jsの詳細については、以下のリソースを参照してください:

- [Next.js Documentation](https://nextjs.org/docs) - Next.jsの機能やAPIを学ぶ.
- [Learn Next.js](https://nextjs.org/learn) - インタラクティブなNext.jsのチュートリアル.

[the Next.js GitHub repository](https://github.com/vercel/next.js/) を参照することができます 
- ご意見・ご感想をお待ちしております!

## Vercelへのデプロイ

Next.jsのアプリをデプロイする最も簡単な方法は、Next.jsの制作者が提供する [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) を使用することです.

詳しくはこちらの [Next.js deployment documentation](https://nextjs.org/docs/deployment) を参照してください.