OmniAICreator/Qiita-1.07M huggingface dataset:
【AWS】CodeCommitのプルリクエストをSlack通知する【開発支援】

## はじめに
過去の記事(https://qiita.com/Nana_777/items/a1c082dc9f2507cb1290)
ではSlackへのStepFunctionsのアラート通知を記事にしたが、今回はCodeCommitのプルリクエストをSlackへ通知する方法を記事にしました。
複数のチームで開発を行っていたり、コードのマージの申請と承認の担当者が異なる場合にプルリクエストを出された後にそのことの共有が忘れられていつまでもマージされないなどの問題が発生するため、その対策としても有効にります。

## 使うAWSサービス
・AWS CodeCommit
・Amazon SNS
・AWS Lambda

## アーキテクチャ図
![CodeCommit-SNS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/a75a6a7c-27ee-6627-31a7-6ea3977d9eea.png)



## 構築手順
1．AWS Lambda関数の作成
・SNSトピックからメッセージを作成してSlackに送信するLambda関数を作成する
<コード例>
※送信内容は要件によって要調整(この例ではタイトルと作成者、プルリクエストのURLをメッセージにして送信している)

```python:sample.py
import json
import requests

def lambda_handler(event, context):
    sns_message = json.loads(event['Records'][0]['Sns']['Message'])

    # プルリクエスト情報の取得
    title = sns_message['title']
    description = sns_message['description']
    pull_request_url = sns_message['pullRequestUrl']
    created_by = sns_message['createdBy']

    # Slackへの通知処理
    slack_url = '【SlackのURL】'
    slack_payload = {
        'text': f"New Pull Request: {title} - {description}\n"
                f"Created by: {created_by}\n"
                f"Pull Request URL: {pull_request_url}"
    }

    response = requests.post(slack_url, json=slack_payload)
    return {
        'statusCode': response.status_code,
        'body': response.text
    }
```

2．SNSトピック作成とサブスクライブ設定
①SNSトピックを作成する
![SNSトピック作成２.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/28e522c6-1780-d7d3-456a-c6ff114974ec.png)
②サブスクリプションを作成する
・①で作成したSNSトピックを選択してサブスクリプションを作成する
![SNSサブスクリプションの作成.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/adbf2697-c06b-ce88-a10d-1da59a453125.png)
・SNS通知の通知先に1で作成したLambdaを指定する
![SNSサブスクリプションの作成_２.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/81a3b566-a506-129f-3d17-324209f33afe.png)

3．AWS CodeCommitのイベント通知の設定
①通知を行いたいリポジトリを選択して「通知ルールの作成」を選択する
![CodeCommit通知の作成1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/971ab048-7b8f-f196-ac7b-bae5e2c417c3.png)
②通知をトリガーするイベントで「Pull request > Created」を選択する
![CodeCommit通知の作成2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/194017fb-fb3b-d638-3715-1755429b34f8.png)
③ターゲットで2で作成したSNSトピックを選択する
![CodeCommit通知の作成3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/3b49377d-ae7c-14e2-b0ed-166575d24991.png)


## さいごに
プルリクエストの承認作業依頼は申請者が手作業で個人的にメッセージを承認者に出せばそれで事足りるが、毎回そのメッセージを作成して送るのは手間がかかります。
手作業の運用にするとメッセージの送り忘れの可能性もあります。
そこでプルリクエストの内容をLambdaであらかじめカスタマイズした定型文で送ることでその手間と送り忘れを防ぐことができます。
Flutter導入時に警戒すべき要件X選

[Flutter Advent Calendar 2023](https://qiita.com/advent-calendar/2023/flutter) 2日目の記事です。
(時間過ぎてるのですが、シリーズ２の２日目が空いてるのが気になったので埋めましたｗ)

この記事は、[YOUTRUST x ゆめみ Flutter LT会@渋谷 #3](https://yumemi.connpass.com/event/294763/)でプレゼンした内容を元にしています。

https://speakerdeck.com/k9i/flutterdao-ru-shi-nijing-jie-subekiyao-jian-xxuan

## はじめに
単一のコードベースでAndroid・iOSに対応でき、開発体験が良いこともあってFlutterの人気は高まり続けています。とはいえ全てのアプリをFlutterで作ればいいとはならず、Flutterに不向きな要件というのもあります。
今回ゆめみのFlutterテックリードチームのエンジニアにFlutterに不向きと感じる要件・その理由を聞き込みました。技術選定の際の参考にしていただければと思います🫡

:::note warn
この記事で取り上げた要件を１つでも満たせば、Flutterを採用すべきではないという話ではないです。
総合的な判断のための参考としていただければと思います。
:::

## Flutter導入時に警戒すべき要件

### プラットフォームに強く依存する要件がある場合（ヘルスケア・カーナビ系）
理由：共通して使えるpluginがあったとしても、個別のプラットフォーム実装について理解が必要で、Flutter採用によるシングルコード故の開発効率化が図りづらいから。一方で、上記要件のある案件でも、UI部分のみFlutter適用するなどの方式は効果的

### アプリサイズを可能な限り削減したい
理由：Flutter コアエンジンを含めないといけない関係上、どうしてもアプリサイズが一定増える（約4MB）ため
App Clipは15MBの容量制限があった（iOS 17からは50MBに緩和されたが、NFCタグなどの物理呼び出しだと15MBのままとか）

### 高度なグラフィックを要する時 (3Dグラフィックやマップ等の大容量かつ複雑なデータを扱い描画する場合)
理由：
Impeller Scene を用いることでFlutter側で3Dグラフィックを表示することは可能だが 安定していない
PlatformViewを用いることで、既存のAndroid・iOS向けの資産(Ex. Google MapやMapBox)を利用することができるが、MethodChannelにて大量のデータをやり取りすると、画面・やり取り自体が重くなってしまいUXが悪くなってしまう
解決するためには非常に多くの工数を割かなければならないため それならネイティブで実装した方が安心で早い場合がある(それでも、高度なグラフィックを必要としない部分の共通化・ロジックの共通化という観点でFlutterを選ぶのもありなのかも)

### できる限り早くプラットフォームの新機能をアプリに組み込みたい
理由：Flutter 自体やプラグインの新プラットフォーム対応を待たざるを得ず、新機能を早く対応するためにはネイティブのみでの開発に劣るため

### iOS、Android でまったく異なるデザインシステム・UI/UX にしたい
理由：場合によってはこれでも選ぶ可能性はあるが、Flutter の最大のメリットであるはずのデザインシステム・UI/UX の共通化をしないということになると、メリットよりデメリットのほうが上回ってしまう可能性が高いため

## まとめ
ゆめみのFlutterエンジニアに聞いたFlutter向きでない要件を紹介しました
【Ruby Gold3.1詰まったシリーズ】selfの参照先

# はじめに
今回はselfに関する内容です。selfの参照先はselfが呼び出される場所で異なるらしいのでかんたんにまとめてみます。

# 確認してみた
環境はruby2.5.3です。
まず、selfを呼出すメソッドが定義されたClsを作成し実行する。
~~~ruby
class Cls
  p self
  def hoge
    self
  end
end
~~~
すると、
~~~
Cls
~~~
が表示され、Cls内のselfはClsクラスを参照している。
次に、Aインスタンスを作成し、AとA.hoge（=self）が同じかどうか確認すると、
~~~
irb(main):007:0> A = Cls.new
=> #<Cls:0x0000563638a63190>
irb(main):008:0> A.equal?(A.hoge)
=> true
~~~
trueとなり、メソッド内のselfはレシーバ（Aインスタンス）を参照していることが分かった。

# おわりに
確認した結果、selfの参照先はselfがクラス内に定義された時はクラス自身を、メソッド内に定義された時はレシーバを参照することが分かった。もし誤っていたらご指摘いただけると助かります！

# 参考
https://www.amazon.co.jp/gp/product/B0756VF9Y3/ref=ppx_yo_dt_b_d_asin_title_o00?ie=UTF8&psc=1
フロントにもドメインモデルを使おう！

この記事は[検索エンジンプロダクトを一緒に開発してた同窓会 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/alumni)の4日目の記事です！
退職してからも、同窓会としてアドベントカレンダーできて嬉しいです :blush: 

### 書いてる人
私は、フルサイクルエンジニアです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289114/7899b78f-c4b6-57ae-b194-a423daeece08.png)
[出典]()
※ フロントのみが専門ではないので、内容へのツッコミ大歓迎です！！

### 書くこと
1. フレームワークについて
1. フロントでドメインモデルを使わない事に対する課題感
1. 例を見よう
1. まとめ

### 1. フレームワークについて
Vue + TypeScript

## 2. フロントでドメインモデルを使わない事に対する課題感
Vueを描いてると、コンポーネントにどんどん切り出したいですよね！
コンポーネントに切り出すと、可読性が上がる一方で、他コンポーネントで定義した諸々を、戦略的選択により他コンポーネントに再度定義したくなることもありますね。

すると、メンテが大変になります。できません！
しかもコンポーネントは、そもそもそのロジックを知らなくていいんです。


ロジックを持つべきじゃない人がロジックを持ち、同じロジックが散らばってしまう危険性があります。

## 3. 例を見よう
※ コードは、雰囲気です
### ドメインモデルなし
```userTable.vue
<template>
    <table>
        <thead>
          <tr>
            <th>名前</th>
            <th>年齢</th>
            <th>成人に達している</th>
          </tr>
        </thead>
        <tbody>
          <tr v-for="user in users">
            <td>{{ user.name }}</td>
            <td>{{ user.age }}</td>
            <td>{{ isAdult(user) }}</td>
          </tr>
        </tbody>
    </table>
</template>

<script>
export default {
  name: 'userTable',
  data () {
    const dummyData: User[] = [
        { 'KOKONA', 17 },
        { 'RINO', 20 },
        { 'MOMONA', 20 },
        { 'NAGOMI', 16 },
        { 'RIN', 17 },
        { 'KEIKO', 18 },
    ];
    return {
      users: { type: Array as PropType<User[]>, default: dummyData },
    }
  },
  methods: {
      // userTableコンポーネントの興味の範囲外のロジック
      isAdult(user: User): boolean {
          return user.age >= 18;
      }
  },
}
</script>
```

```User.ts
// 最低限の情報のみ
export interface User {
    name: string;
    age: number;   
}

```

### ドメインモデルあり
```userTable.vue
<template>
    <table>
        <thead>
          <tr>
            <th>名前</th>
            <th>年齢</th>
            <th>成人に達している</th>
          </tr>
        </thead>
        <tbody>
          <tr v-for="user in users">
            <td>{{ user.name }}</td>
            <td>{{ user.age }}</td>
            <!-- 呼ぶ側はロジックを気にしなくても良くなる -->
            <td>{{ user.isAdult() }}</td>
          </tr>
        </tbody>
    </table>
</template>

<script>
export default {
  name: 'userTable',
  data () {
    const dummyData: User[] = [
        { 'KOKONA', 17 },
        { 'RINO', 20 },
        { 'MOMONA', 20 },
        { 'NAGOMI', 16 },
        { 'RIN', 17 },
        { 'KEIKO', 18 },
    ];
    return {
      users: { type: Array as PropType<User[]>, default: dummyData },
    }
  }
}
</script>
```

```User.ts
export class User {
    constructor(
        readonly name: string,
        readonly age: number,      
    ) {}

    // 成人かどうかのロジックは、Userクラスのみが知っていれば良くなった
    get isAdult(): boolean {
        return this.age >= 18;
    }
}

```



## 4. まとめ
フロントで、ドメインモデル導入するのはいいぞ！！
[ODC]External Logicの実行速度について考える

[ODCでC#を取り込んでみる（External Logic）](https://qiita.com/jyunji_watanabe/items/2698fb5a80b857875a48#%E6%B3%A8%E6%84%8F%E3%81%99%E3%81%B9%E3%81%8D%E4%BA%8B%E9%A0%85)で確認した、External Logic（ODCでC#ロジックをServer Acrtionとして取り込む方法）の注意点について確認してみる。

# 環境情報
ODC Studio(Version 1.3.5)

# External Logicの注意点
External Logicで作成したServer Action実行時には、作成したコードをホストする外部サービスに（内部的に）HTTPSを介してリクエストを行う。

この点は、[External Libraries SDK README - Architecture](https://success.outsystems.com/documentation/outsystems_developer_cloud/building_apps/extend_your_apps_with_external_logic_using_custom_code/external_libraries_sdk_readme/#architecture)に

> Each time your app calls a server action from an external library, it makes an HTTPS call to an external service that hosts and runs the custom code

と記載されている。

これにより、以下の注意点がある。

1. 状態を保持しない：前に呼び出されたときの状態は、次に呼び出されたときにはもうなくなっていて保持されない
1. 遅延：HTTPS通信経由で呼ばれるということは、同じサーバーのメモリで実行される場合と比べ、ネットワークを通過する分余分な時間がかかる
1. 呼び出し元Actionから独立：つまり、呼び出し側のActionの変数等にアクセスできない。よってExternal LibraryのActionのInput Parameterに値を渡さないといけない

3.については、必要な値をInput Parameterに渡すことに注意すればよい。

# 1. 状態を保持しない
例えば、大きなファイルを処理するActionをExternal Logicとして作成したとする。
大きなファイルの例としては、例えばCSVやExcel、WordなどのOfficeファイルが考えられる。

Excelファイルの帳票を作成するのに

1. Excelファイルのテンプレートを送信
1. タイトルを書きこむ
1. ヘッダ部分のセルをいくつか書き込む
1. ボディ部分のデータ100行を書き込む

という処理を行うとする。各処理呼び出し時にExcelファイルのバイナリーをExternal Logicに送り、ファイルを開き、書き込みを行った後のバイナリーをExternal LogicのHTTPS通信のレスポンスとして受け取ることになる
（O11のExtensionであれば、インメモリでオープンしたExcelファイルのオブジェクトを呼び出し側とやりとりできる）

Excelファイルを毎回通信に載せることによる通信時間と通信料のオーバーヘッドに気を配る必要がある。

# 2. 遅延
HTTPS通信に載せるということは（インメモリで処理できたO11のExtensionと比べて）実行時間がかなり遅いことが想定される。

そこで、実行時間の感覚をつかむために実験してみる。
以下のように、繰り返し処理の中でExternal LogicのActionを呼び出し、ループの開始前・後でどのくらい時間がかかっているか確認した。呼び出したロジック自体はごく短時間しかかからないもの。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/5af6ec58-2f97-9c11-9e8e-d115f0b1d8bd.png)

以下は、100回実行してみた結果。OutSystemsでは組み込みの機能ではミリ秒を見られないため、秒までしかわからないが、3秒くらいしかかかっていない。つまり1回あたり20-30ms程度。
```
繰り返し回数：100
開始日時：2023/12/03 12:47:24
終了日時：2023/12/03 12:47:27
```

HTTPS通信に載せているとはいえ、思ったほど遅くはない。
オーバーヘッドがある以上、気軽に実行回数を増やすべきではないが、保守性等の理由により実行回数が多く成るロジックは無理に忌避するほどではない、という感じに見える。
SigfoxとLIFF(LINE)を利用した車両トラッキングデバイス構想


# LINE DC Advent Calendar 2023
LINE DC Advent Calendar 2023 の5日目に参加します！！！

https://qiita.com/advent-calendar/2023/lineapi

# はじめに
LTでも少し紹介したのですが記事としてなかったので改めて記事にします。
構想している背景としては、私が車好きであること、最近日本車の盗難が相次いでいることがあげられます。
GPS情報をsigfoxで送信して、LINE上でモニタリング・トラッキングと通知ができるシステムです。
またリッチメニューからMAPを選択すると現在の位置情報やその時間を見ることができます。


# 構想イメージ
LINEでログインするだけで利用開始でき、車両などに置いておくことで日常のトラッキングだけではなく盗難時の位置情報を参照することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342722/eac89143-4f67-ac83-a063-27c10ce8b855.png)


このデバイスのメリットとして
* wifiなどがない屋外でも低コストで運用できる
* 専用アプリが不要でLINE上でモニタリング・通知が完結する
* ユーザー側は友達登録とアカウント連携を実行するだけです。デバイスに電源を入れてすぐに使い始めるられます。
* デバイスごとに個別の設定などを変更する必要がなくエンジニアでは無い方も使えます。

# デバイス概要


## Sigfoxとは？
LPWA（Low Power Wide Area）に該当する通信方式であり、IoTデバイスに特化した通信方式で省電力性に優れます。

###  比較表
| 通信方式 | 通信速度        | カバー範囲 | 消費電力 | 通信料金       | モジュール        |
|-------|----------|----------------|------------|---------|---------------|
| LTE-M | ◎(1Mbps) | ◯              | △          | △(月1000円) | △(入手困難)   |
| Sigfox| ×(10～100bps) | △          | ◎          | ◎(年1500円) | ◯(安価に購入可) |

## 使用マイコン・モジュール
ESP32という省電力に優れたマイコンを使用します。
sigfoxモジュールも同じく省電力性に優れていますので、将来的には乾電池などで長時間稼働させることができる可能性もあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342722/8c9849b8-de40-fa74-8373-b77ef48532d6.png)

ESP32を使ったsigfoxの利用方法ばこちら

https://qiita.com/taiyyytai/items/4b83aba34c1626a6f2b5

# システム概要
デバイスのGPS情報をsigfoxのクラウドにアップロードして、その後はAWSなどと連携してDBへ格納していきます。
LINE側はアカウント連携することによって、デバイスIDとLINE IDが素早くかつ・セキュアに紐付けされるので、デバイス個別設定することなくモニタリングなどが可能になります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342722/a0b82c31-bbea-ea6d-ffd9-e5c5bc57a55c.png)

### リッチメニューとMAP
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342722/330e443d-1897-a52a-93f9-133a296f0a9f.png)



## (Tips)LINEアカウントとIoTデバイスを連携させる方法

このシステムはLINEアカウントとIoTデバイスの紐づけが実装の多くを占めるのですが、なかなか情報がなく苦労しました。
試行錯誤の結果、下記フロー図のように実装する必要があります。
同様の実装をしたい方は私の過去記事を参考にしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342722/e6b758ec-f23a-a6bd-79c1-b826ffcdb926.png)

https://qiita.com/taiyyytai/items/aa79a4dd144b4fabf2bc



# その他の活用シーンについて
ここまでSigfoxデバイスとLINEの連携させるメリットを紹介しました。
特徴としては通信の制限は大きいけど、低コストかつ省電力で運用できて、LINEですぐ使えることがメリットです。
本日はGPSデバイスを例に紹介しましたが、センサーの部分は何でもよくて、このように様々なセンサーとの連携ができる可能性があり、そのような汎用性のあるシステムなので様々なシーンで活用できるのではないでしょうか

* 農業などの電源やネットワーク環境がないところ
* 監視・管理としてメータの値や、扉の開け締め、照明の管理など
* 防災・見守りデバイスなど

# おわりに
今回はGPSトラッキングを紹介しましたが、このIoTデバイスとLINEミニアプリを紐づけるシステムは汎用的に使えるものだと思います。
今後も引き続き何ができるか妄想していきたいと思います。
もし、良いアイディアがあればぜひ教えてください。
PHP7.4 / Laravel 6.3 を PHP 8.2 / Laravel10.2 にアップデートする

今年やったことの１つに「PHP7.4 / Laravel 6.3 を PHP 8.2 / Laravel10.2 にアップデートした」もありました。
躊躇している人がまだいるなら、失敗せずすんなりできるのでやっておこうというおすすめの意味で、まとめてみます。

# コツみたいなもの

- Laravelはいきなり10に上げるのではなく、いったん9に上げてから、10にすると失敗しにくいと思います
- Laravel9にあげる前に、６→７→８→９のアップグレードガイドは全て読んで、対応しておく。
- phpは8.2に作業の最初から上げて大丈夫。

# Laravel 6 → 7 → 8 → 9

対応が必要なアップグレード内容は公式に従います。

https://readouble.com/laravel/7.x/ja/upgrade.html

https://readouble.com/laravel/8.x/ja/upgrade.html

https://readouble.com/laravel/9.x/ja/upgrade.html

# 6 → 9にあげるときにちょっとハマったこと

- composer がそのままではうまくupdateできない...。
    - そんな時は一度アンインストールしてから再度 install で解決できる（深く考えない）。
- パスが通らないとエラーが出る
    - psr-4に従った記述をしてない箇所で出る。
    - 私は `/app/Repositories/Heading/HeadingRepository.php` にて `namespace App\Repositories\heading;` と書いていたのを怒られました。 `namespace App\Repositories\Heading;` （Hを大文字）に直したら動きました。

# Laravel 9 → 10

これ読んで、対応する。自分はKernelとModelの一部に書き換え箇所がありました。

https://readouble.com/laravel/10.x/ja/upgrade.html

# 9 → 10 にあげるときちょとハマったこと

- Laravel/ui を引き続き使いたかった。いったん、composer.jsonから削除してからアップデート。その後、もう一度Laravel/uiの最新をインストールしたら動いてくれた。

# そのほか、忘れがちなことなど

- LaravelMixも大丈夫、動いてくれます
- LolipopサーバでCron動かしてたんですが、phpのパスが変わるので設定ファイルを変更するのを忘れずに 


とまぁ、こんな感じでした。やってみたら怖くなかったです。ほっ。
【個人開発】ゲームを作ってみた。


https://github.com/HeesuKim0203/Re-shooting-game

https://heesukim0203.github.io/

# はじめに
子供の頃、誰もが一度はゲームを遊んだことがあると思います。私も子供の頃、ゲームが大好きでした。そして、いつか自分でゲームを作ってみたいと思ったことがありました。その思いから、個人プロジェクトとして「Plane Shooting Game」というゲームを作ってみました。

# Plane Shooting Gameとは？
このゲームは、「敵のPlaneが左側に到達したら負け」、「敵のPlaneをすべて撃墜したら勝ち」というシンプルなルールを持っています。　

![game.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569778/e656b82c-e847-29ad-1bc4-e6644878bce2.gif)

# 作り
自然なアニメーションを実現するために、JavaScriptの```requestAnimationFrame```と```canvas```を使用しました。必要なアニメーション画像を入手し、それらを配列に格納して、requestAnimationFrameで連続的に描画するように実装しました。できるだけデータ操作だけでゲームを設定できるようにしましたが、まだ不足している部分があるかもしれません。

# 今回の開発で思ったこと
最近、開発に対するスランプがあり、悩みも多かったのですが、この個人プロジェクトを通じてスランプを乗り越える努力をしました。

する理由はあります。私もプロジェクトで最も重要なのは「開発した理由」だと思います。しかし、多くのプロジェクトアイデアの中で、今回は私が以前からやってみたかったゲームを選びました。ただやりたかったことを実現したので、特に悩むことなく、想像していた通りにスムーズに実装できたと思います。今回のプロジェクトはスランプを乗り越えるのに大きく役立ったと感じています。このように、何も考えずにやりたいことを個人プロジェクトで試すのも良いと思います。

# これからは？
2人用のプレイも実装したいと考えています。また、リファクタリングが必要な部分があるので、テストケースを作成してから試してみる予定です。ちなみに、様々なフィードバックを歓迎します。
ローリングハッシュの斉次性

ローリングハッシュの線形性です。
前回: https://qiita.com/lowking/items/dae75be02d397530273b


# ローリングハッシュ (再掲)
$n$ 要素の配列 $\lbrace a_1, a_2, a_3, \cdots, a_{n}\rbrace$ のローリングハッシュ $f(\lbrace a_n\rbrace)$ を次のように定めます。

```math
f(\lbrace a_n\rbrace)=a_1b^{n-1}+a_2b^{n-2}+\cdots+a_n \mod{M}
```
ただし、$b$ はローリングハッシュの基数、$M$ は見ての通り割る数です。

# スカラ倍
```math
f(k\lbrace a_n\rbrace)=k(a_1b^{n-1}+a_2b^{n-2}+\cdots+a_n) \mod{M}
```
分配すると、
```math
f(k\lbrace a_n\rbrace)=ka_1b^{n-1}+ka_2b^{n-2}+\cdots+ka_n) \mod{M}
```
したがって、
```math
f(k\lbrace a_n\rbrace)=f(\lbrace ka_n\rbrace)

```
このように斉次性があると言えます。

# 応用
ローリングハッシュを再計算することなく、配列の全要素を定数倍したときのハッシュ値を得ることができます。

# おわり
前回のと合わせて線形性の証明になります。改めて書くとかなり当たり前っぽいですが、ローリングハッシュで解ける問題の範囲が広がる内容になったと思います。
最新のRaspiOSでRealVNCが使えない問題の解決方法

# 新しいRaspberry Pi OSの問題と対処法

## 使用環境
- Raspberry Pi 4 Model B（8GB RAM）
- リリース日: 2023年10月10日
- システム: 64ビット
- カーネルバージョン: 6.1
- Debianバージョン: 12 (Bookworm)

新しいRaspberry Pi OSがリリースされ、インストールし直したところ、RealVNCが使えなくなりました。Raspberry Piの設定からVNCをオンにしても、右上のアイコンがアクティブにならず、表示されません。

## 原因の特定

調査した結果、Raspbian OSがBullseyeからBookwormにアップデートされ、この過程でX11からWaylandに変更されたことが原因であることが判明しました。

- Waylandについての詳細は[こちら](https://ja.wikipedia.org/wiki/Wayland)

この変更により、RealVNCが正常に機能しなくなったようです。
このあたりの動作チェックってリリース前に行われ無いのでしょうか？
チェック修正がされていれば問題を避けることができたとおもいますが。。。
## VNCの設定方法

RealVNCを再度有効にするためには以下の手順を実行します。

1. ターミナルを開き、以下のコマンドを入力します。
    ```
    sudo raspi-config
    ```
![image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588700/4da0a1d1-bdbb-3d59-1ecf-26261ed4b955.jpeg)


2. 次に、X11に切り替えるために、詳細オプションまでスクロールダウンします。
![image2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588700/b3f6b1df-b6b9-c04b-1d60-91538a18a703.jpeg)

3. **終了**をクリックし、Raspberry Piを再起動します。

4. Bullseye OSで行うのと同じように、アプリケーションメニュー → 環境設定 → ラズベリーパイの設定 → インターフェースをクリックし、VNCを有効にします。
![image3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588700/a58469b4-1363-12b9-8cec-e004c9e7668b.jpeg)


これでRealVNCが自動的に有効になり、設定が完了します。メインコンピュータにRealVNCビューアーがあれば、Raspberry Pi Bookworm OSのデスクトップにリモートアクセスできます。
![4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588700/24a5ef06-1e89-ddba-c4e8-2c71c086e709.jpeg)

### Chromeブラウザの日本語入力問題
ChromeブラウザではWaylandの影響で日本語入力ができません。しかし、以下の方法で対応可能です。

#### 解決方法1: Firefoxへの切り替え
Raspberry Pi OS BookwormにはFirefoxが標準搭載されており、fcitx5-mozcで日本語入力が可能です。

#### 解決方法2: Waylandの無効化
`sudo raspi-config` コマンドを使用してWaylandを無効にすると、日本語入力が可能になります。

#### 解決方法3: Chromiumの特定の起動オプションを使用
以下のコマンドでChromiumを起動すると、Waylandを無効にし（X11で動作させ）、日本語入力が可能になります。

```css
chromium-viewer --ozone-platform=x11
[4日目] 学校の食堂をIT化させる話　混雑度カメラのサーバー構成を考える（案出し）

こんにちは、なりかくんと申します。
この記事はなりかくん Advent Calender 2023の4日目の記事です。

この話は、1日目から始めた学校の食堂をIT化させる話の続きとなります。今回は、前回混雑度カメラの構成を考えたので、その中で出てきたサーバー構成を考えていきたいと思います。

https://qiita.com/narikakun/items/6670daedad4ba3a759e3

# 前回のおさらい
前回（3日目）の記事で、最終的にRaspberry Pi上でYOLOv8で物体検出をしてクラウドに人数と画像をクラウドに送信するように決めました。

また、混雑度をWebページからリアルタイムの映像と人数・混雑度（パーセンテージ）を見れるようにすることも決めました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/435f36ad-4359-a787-66a3-6bf9851388b1.png)

# Webページからリアルタイムで情報を見れるようにする
まず最初にWebページからリアルタイムに情報を見れるようにする方法を考えます。私が思いついたのは、以下の手順です。
- WebSocketを使ってリアルタイムに情報を受信する
- HTTPでポーリングしてリアルタイムのようにする
- YouTubeライブなどを使って映像としてリアルタイム性を持たせる
- Firebase Realtime Databaseでリアルタイムにデータを更新する

最終的には、現時点で「HTTPでポーリングしてリアルタイムのようにする」を採用します。これに至った理由（それぞれの特徴）をこれから長々と書いていきます。
お時間があれば、ぜひお読みいただければと思います。

# WebSocketを使ってリアルタイムに情報を受信する
まず最初に思いついたのが、WebSocketを使ってリアルタイムに情報を送信する手段です。これが、一番いいと思ったのですが、一つデメリットがあって接続数が増えた際にサーバーが負荷に耐え切れるかが分かりません。

実はこの食堂IT化には予算があまりありません😭 そのため、今回はつよつよサーバーが使えないので、この方法は候補からなくなりました。

```plantuml
== Raspberry Pi と サーバー間 ==
RaspberryPi->サーバー : WebSocketに接続させて！
RaspberryPi<-サーバー : 接続確立するよ！！
RaspberryPi<->サーバー : 双方向通信
== サーバー と ブラウザ間 ==
ブラウザ->サーバー : WebSocketに接続させて！
ブラウザ<-サーバー : 接続確立するよ！！
ブラウザ<->サーバー : 双方向通信
== 実際のデータの流れ ==
RaspberryPi->サーバー : 画像データと人数データ
サーバー->ブラウザ : 画像データと人数データ
RaspberryPi->サーバー : 画像データと人数データ
サーバー->ブラウザ : 画像データと人数データ
```

# HTTPでポーリングしてリアルタイムのようにする
この方法が一番手軽で安定させれるのではないのかなと思いました。
また、値段についてもHTTP APIであればレンタルサーバーを使えば最悪無料でも構築できるわけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/c9c80ee3-b47a-8847-6342-c8c124454447.png)

ただし、デメリットとして大きいのがWebサーバーに負荷がかかりやすい点です。不必要にリクエストを送ってしまう事があるためです。

そこで、キャッシュを利用して負荷を減らします。間にCDNを挟むことで最初のリクエストのみ元のオリジンサーバー（Webサーバー）にアクセスし、それ以降のリクエストはすべてCDNのキャッシュから返すようにします。

Cloudflareというサービスを利用すれば無料でキャッシュサーバーを利用することが出来ます。また、世界各地のサーバーから最も最適な経路・サーバーでのリクエストが可能なためレスポンスタイムの最適化にも期待が出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/5db3bc91-e44f-38cb-5e36-1748e337972b.png)

# YouTubeライブなどを使って映像としてリアルタイム性を持たせる
この方法が一番リアルタイム性を持たせれるのではないかと考えましたが、今回は見送りました。理由としてはRaspberry PiでYOLOv8で重たい画像処理を常にしながらYouTubeライブを行う際にRaspberry Piが負荷に耐えきれないと考えたためです。（実際の実験は行えてないです。）

また、YouTubeライブにOBSを利用して行うと考えてましたがカメラはディスプレイが無くCUI環境での動作なのでどうすれば対応できるかを私の頭で思いつかせることが出来ませんでした。
（OBS以外でもRTMPで直接プログラムから配信すればもっと軽いのだろうが、私の技術力不足でコードを作れません。。）

また、学校のネットワークでの運用なので常にライブ配信をするとネットワークの負荷がすごいことになりそうです。

ですが、プログラムや負荷問題が解決したら一番コストも安く出来るのではないかと考えてます。（これは完全に技術力不足）

# Firebase Realtime Databaseでリアルタイムにデータを更新する
最近FirebaseというGoogleが運営している（Firebase, Inc.がGoogleに買収された）サービスでサーバーレスを体験して感動していたので、Firebase Realtime Databaseでリアルタイムにデータを更新する方法も良いのかなと考えたのですが、以下の懸念点が出てきました。
- 画像データなので転送量が凄いことになる = お金が凄いかかる
- クライアントからのリクエストを処理すると凄いことになる = お金が凄いかかる
- とにかくすごいことになる = お金が凄いかかる

ということですね。無料枠を超えて凄いお金がかかるかと思うので、高額請求が怖くこの案は一瞬で消え去りました。

# 最終的に
最終的に実際に開発を行っていくうえで、「HTTPでポーリングしてリアルタイムのようにする」を採用しました。

おっと、日付が超えそうだ。続きは5日目に書くこととします（許して）

最後までお読みいただきありがとうございました。
Luma AIで生成した3DモデルをBlender→Unityへインポートするまでの手順

## はじめに
Luma AIを使って生成した3Dモデルを
Blenderで加工して、Unityへインポートするまでの手順です。
なおBlenderもUnityもチュートリアルを触ったくらいの知識なので、不要な手順があるかもしれません。。

## Luma AIからBlenderへ
1.Luma AIにて生成された3Dモデルをobjの形式でファイル出力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/dca0d13c-2f12-867c-4d5f-7e251c9378db.png)

2.Blenderを起動して初期オブジェクトを消しておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/3229d836-dde5-9606-18f9-e0f3453cbad1.png)

3.ファイルタブのインポートから、objをクリックして、Luma AIから出力したファイルを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/4c0e87a7-ac95-d5e2-2775-2b6b67fc0b0e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/81f55be9-4f75-7239-27a7-2797836df5ab.png)

4.インポートが完了したら、モードをスカルプトモードへ変更する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/39f1c28a-3e7b-b4c6-280b-00aab5620b0e.png)

5.左のツールからボックストリムを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/0d8fbb3f-5f29-8efe-ac13-d66bc8e5f000.png)

6.インポートしたオブジェクトの不要な部分をドラッグで切り取る

:::note warn
 この時、範囲選択した場所に色のついた箱が作成された場合は削除する
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/5cde2c4f-6ab8-96eb-012c-fcfa85a0b959.png)

7.不要な部分の削除が完了したら、ファイルタブのエクスポートからobjクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/5c5d8111-a384-2905-d08f-06494c64a32d.png)

8.パスモードをコピーに変更してエクスポートする（テクスチャをエクスポートするため）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/468abc1b-3c97-1dea-9f8f-7cabac7e9a28.png)

## BlenderからUnityへ
1.Unityを起動して、3Dモデルを追加したいプロジェクトを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/df2e3ccb-194a-c4b8-7410-1f6b38e7934b.png)

2.Blenderでエクスポートした objファイル、mtlファイル、pngファイルをすべて
ドラッグアンドドロップで、UnityのAssetsへ追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/e9944ce2-d0a8-5c53-090d-29a40f299487.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/e0a2af55-6a55-24ad-93ad-63a2b08649fa.png)

:::note info
追加したオブジェクトを選択して表示されるInspectorでGenerate Collidersにチェックを入れておくと衝突判定が生まれる
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/a8f4d68a-2a0d-fb08-4893-0925875448cd.png)

3.Unityへのインポート完成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/09d0ac6a-ccdd-50ce-ebd7-102184b2f674.png)

:::note info
そのままの設定ではオブジェクトにRigitdbodyを設定しても地面をすり抜けてしまうため、追加したオブジェクト（default）を選択して、コンポーネントのMesh ColliderのCovexプロパティにチェックを入れる。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/5d1c1ab6-aed6-dce5-5166-3b1a29c6facd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/5db303ee-8c00-dbdd-73ac-78df8b9e3a4e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634049/9dc60821-5457-f57a-49a7-90600480adbf.png)

## 参考記事
Blenderのインポート手順はすでに実施されている方の記事を参考にさせていただきました。
・https://qiita.com/Kenty1003/items/59c9305f70bd998dc75d
Altキーを使いこなせ！パソコン操作を効率化するテクニック

## はじめに
　あなたは、Altキーを活用できていますか？便利なショートカットを知ることでパソコン作業の時間を節約し、効率を上げることができます。そこで本日は、`Alt`を活用したショートカットやテクニックをご紹介します。ぜひ身につけてかっこよくパソコン操作をしてみましょう！

　ちなみに「Alt」は「Alternate」の略で、代わりの・代替のという意味があります。
 
**【この記事の目的】**
- Altキーの使い方を習得する
- パソコン操作の効率と速度を飛躍的に向上させる
- 脱マウスに1歩近づける


**【この記事の対象読者】**
- Altキーを普段使わない人
- キーボードだけで、できる操作を増やしたい方
- ここまで読んで ` Alt + ← ` を押さなかった人

## 目次
- [Altキーの基本活用法](#altキーの基本活用法)
- [ブラウザでのAltキー活用テクニック](#ブラウザでのaltキー活用テクニック)
- [ExcelでのAltキーを使ったショートカット技](#excelでのaltキーを使ったショートカット技)
- [Altキーテクニック 特殊文字とシンボル](#altキーテクニック-特殊文字とシンボル)


## Altキーの基本活用法
### 開いているウィンドウを切り替える
`Alt + tab`　
現在開いているウィンドウが表示されます。`tab`を押してカーソル移動して、切り替えたいウィンドウを選択したら`Alt`を離すことでウィンドウ切り替えができます。
`shift + tab`で逆移動になります。　

### ウィンドウを閉じる
`Alt + F4` 
現在アクティブなウィンドウを閉じます。

### ウィンドウサイズを切り替える
`Alt + Space`
ウィンドウのシステムメニューが開きます。
続けて特定のキーを押すとサイズを切り替えます。
- `Alt + Space, N` 最小化
- `Alt + Space, X` 最大化
- `Alt + Space, R` サイズを元に戻す
- `Alt + Space, S` サイズ操作
- `Alt + Space, M` ウィンドウの移動モード

### プロパティの表示
`Alt + Enter`
ファイルのプロパティを表示します。

## ブラウザでのAltキー活用テクニック
　一般的なウェブブラウザで利用可能なAltキーショートカットをご紹介します。一部のショートカットについてはファイルエクスプローラでも利用可能です。
 
### ページの移動
`Alt + ←`
前のページに戻ります。

`Alt + →`
ページを進みます。

### ホームページを開く
`Alt + Home`
ブラウザのホームに移動します。

### アドレスバーを選択
`Alt + D`
アドレスバーにフォーカスします。

### ドロップダウンメニューを開く
`Alt + ↓`
入力フィールでドロップダウンを展開することができます。


## ExcelでのAltキーを使ったショートカット技
### メニューバーの選択
`Alt`
Altキーを単独で押すと、メニューバーにナビゲーションが表示されます。ここに表示されるキーを押すことで、メニューの操作ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3601651/50ffe479-1fad-a34e-70ca-67f841477b50.png)

### SUM関数
`Alt + ＝`
選択したセル範囲の合計を求めるSUM関数を入力します。

### セル内改行
`Alt + Enter`
同じセル内で複数行の入力が可能になります。

### シート内移動
`Alt + Page Up/Page Down`
シート内で左右の画面移動できます。

### グラフの作成
`Alt + F1`
選択されたデータからグラフを作成します。

### 名前を付けて保存
`Alt + F2`
 「名前を付けて保存」ダイアログボックスを開きます。

 ### マクロを開く
 `Alt + F8`
マクロダイアログボックスを開き、マクロの実行や編集ができます。

### VBAを開く
`Alt + F11`
VBAエディタを開くことができます。

## Altキーテクニック 特殊文字とシンボル
　Altキーを押しながら特定の数字を入力すると特殊文字やシンボルを入力することができます。数字を入力するときは、テンキーでNum Lockが有効の状態にしてください。
 `Alt + 0169`: © (著作権記号)
`Alt + 0174`: ® (登録商標記号)
`Alt + 0153`: ™ (トレードマーク記号)
`Alt + 0128`: € (ユーロ記号)
`Alt + 0162`: ¢ (セント記号)
`Alt + 0163`: £ (ポンド記号)
`Alt + 0165`: ¥ (円記号)
`Alt + 0176`: ° (度記号)
`Alt + 0177`: ± (プラスマイナス記号)
`Alt + 0181`: µ (マイクロ記号)
`Alt + 0188`: ¼ (4分の1)
`Alt + 0189`: ½ (2分の1)
`Alt + 0190`: ¾ (4分の3)
`Alt + 0161`: ¡ (逆感嘆符)
`Alt + 0191`: ¿ (逆疑問符)


## さいごに
　Altキーを使ったショートカットやテクニックをご紹介しました。Altキーをうまく活用してパソコン操作を効率化しましょう。今回ご紹介したショートカット以外でも便利なAltキーの活用法がある場合は、教えていただけたらありがたいです。
AWSストレージのAZ, リージョン間配置

### EBS
- 基本的に同一AZの一つのインスタンスのみにアタッチ
- プロビジョンドIOPS SSDだけ同一AZの複数インスタンスにアタッチできる

### S3
- 自動で複数(3)AZに複製
- 複数リージョンに非同期コピーすることができる

### EFS
- 自動で複数AZに複製
- クロスリージョンレプリケーションは読み取りのみ
MapLibre Nativeを使ってNode.jsで地図をレンダリングする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/a6c4f182-ae85-9f7d-007e-acd05217137e.png)


[MapLibre User Group Japan](https://dayjournal.notion.site/MapLibre-User-Group-Japan-Official-Web-Site-4ecb7ea313f945f39ccc2ca8dfbaad4f)の@Kanahiroです。今回はMapLibre Nativeを紹介します。

# TL;DR

- MapLibre NativeとNode.jsでStyle Specificationをレンダリング
- ラスタータイルをレンダリングできたりした
- MapLibre Nativeのドキュメントは
ショボい
のびしろがある
- そんなわけで依存関係がわかりにくくてDockerfileも作りにくかった

# MapLibre Native

https://github.com/maplibre/maplibre-native

C++で書かれたMapLibre Style Specificationのレンダラーです。iOS/Android向けのSDKが最もポピュラーですが、そのほかNode.jsやQt向けのビルドがあったりします。

iOS向けのquick startには以下の記事が易しいです。

https://qiita.com/kyotonagoya/items/6b9ca9fca2f659665050

本記事では、あえてNode.jsでNativeを動かしてみます。

# Node.jsでタイルサーバーを書いてみたい！

MapLibre Nativeのタイルサーバーといえば[TileServerGL](https://github.com/maptiler/tileserver-gl)が有名ですが、機能がちょっと多過ぎて・遅かったりして、「すっごくシンプルなタイルサーバーが欲しい」と思って実装してみました。

https://github.com/Kanahiro/chiitiler

ひらがなでは「ちいたいらー」と読みます。今流行りのアレとは関係ありません。

ただひたすら「Style Specificationのレンダリング」をするためのサーバーです。ここまで薄く書いておくとコンテナランタイムに乗せて動かしたりしやすいですね。ちなみにまだ若干、描画がおかしいことがあります。バグってる…ってコト！？

## 使い方

Node.jsでの動かし方はドキュメントで書いてありますが、コンテナイメージも配布しているので、下記のように動かすのが簡単だと思います。

```sh
docker pull ghcr.io/kanahiro/chiitiler
CHIITILER_DEBUG=true docker run -p 3000:3000 ghcr.io/kanahiro/chiitiler
```

http://localhost:3000/debug で以下のような地図が表示されるでしょう。裏側では[demotiles](https://github.com/maplibre/demotiles)を見に行って、タイルをレンダリングしていたりします。いい感じにキャッシュしたりするオプションがあったりなかったりするのでドキュメントを見てみてください。コンテナランタイムに乗せたかったので、環境変数でコントロール出来るようにしています。

![Screenshot 2023-11-28 at 20.42.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/3b30830c-f2a4-9e7e-9f18-29a18815171e.png)

また、http://localhost:3000/debug?url=https://tile.openstreetmap.jp/styles/osm-bright/style.json のようなURLでアクセスすると、指定したstyle.jsonをレンダリングしようとします。demotilesより重たくなっていくことに留意。

## 所感

- Lambdaで動かして遊んでみたが、ラスタライズの処理は本質的に重たい処理なので、いくら並列処理出来ても遅いものは遅い。キャッシュは必須
- Node.jsでの動かし方も、Dockerfileも、ドキュメントがしょぼくて辛かった（コントリビュートチャンス）
Visual Studio CodeとGitHub Actionsを使ってローカル環境での開発が捗る！

ローカルでの動作確認に便利なツールを紹介！

VS Codeの拡張機能で、GitHub Actionsを使った開発ができることをご存知でしょうか？[こちらのリンク](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-github-actions)から、詳細をご覧いただけます。

この拡張機能は、ローカル環境での動作確認を容易にしてくれます。もし、GitHub Actionsを試してみたいと思っているのであれば、[こちらのリンク](https://github.com/nektos/act)から、`act`というローカル実行ツールもご覧ください。

実は、このツールにはLinter機能も搭載されており、GitHubに接続せずにYAMLのチェックが行えるのです。さらに、VS Codeの拡張機能と組み合わせて使用することもできます。

「yamlを書くのが面倒だな」と感じている方にとっては、とても便利なツールですよね。GitHubにPRしてマージされたら、ブラウザを開かずに済むため、効率的に作業が進められます。

以上のような使い方をしたいと考えるなら、VS Codeユーザーであれば、両方のツールを導入してみることをおすすめします。LinterでYAMLのメンテナンスを行い、ローカル実行には`act`を使用すれば、スムーズな開発フローが実現できるでしょう。

私のような異端者は、日々の生活で魔女狩りに遭わないように気をつけながら、これらのツールを駆使して開発に取り組んでいます。
ワインの作り方についての新しい研究の発表

ワインの作り方が変わった？新しい研究結果からの洞察

ワインの作り方には、年々進化しているトレンドがあります。最近、京都大学の研究チームが発表した研究によれば、ワインの作り方が古くからの方法とは異なっていることがわかりました。特に、アマローネのようなワインについて、その作り方の変化が注目されています。

アマローネは、イタリアのワインで、特定のブドウ品種を使用して製造されることで知られています。従来、アマローネの作り方は複雑で、ブドウを乾燥させることから始まります。しかし、京都大学の研究によれば、最近のワイン製造において、この乾燥のプロセスが変化していることが明らかになりました。

具体的には、アマローネの製造において、ブドウを乾燥させる方法が変わったことが研究結果から分かりました。これまでは、ブドウを特定の部屋に吊るして乾燥させる方法が一般的でしたが、最近ではより効率的な方法が採用されています。

この研究は、ワイン製造における技術の進化について新たな見方を提供しています。従来の方法に比べて、より効率的で短期間でワインを製造することが可能になるかもしれません。また、ブドウの品質や風味にも影響があるかもしれません。

ワイン愛好家や業界関係者にとっては、この研究結果が興味深いものとなるでしょう。ワインの作り方が進化し続けていることは、ワイン業界にとっても重要な情報です。

さらに研究チームは、今後もワイン製造に関する研究を続ける予定です。より洗練されたワインの作り方や品質向上のための技術開発など、ワイン愛好家にとっては嬉しいニュースです。

この研究の詳細については、以下のリンクをご覧ください。

[京都大学の研究ニュース（2023年6月21日）](https://www.kyoto-u.ac.jp/ja/research-news/2023-06-21)

ワインの未来がますます楽しみになる研究結果ですね。今後のワイン業界の動向に注目です。
Qiita CLIのインストールに躓いた

# ※2024/02/04現在この問題は解決されていますので、何かの参考程度に見ていただければ...

# 目次
[なぜこの記事を書いたか](#なぜこの記事を書いたか)
[2024-02-04現在の状況](#2024-02-04現在の状況)
[環境](#環境)
[エラー内容](#エラー内容)
[解決方法](#解決方法)
[おわりに](#おわりに)

# なぜこの記事を書いたか
2023-12-3、 [Qiita CLI](https://github.com/increments/qiita-cli#readme)を使おうと思い立ったのですがインストールで躓きました。
根本解決ではない気がします。しかし、エラー内容でググってもヒットしなかったのでこの記事が誰かの救いになれば嬉しいです。

# 2024-02-04現在の状況
[@dghntsさんのコメント](https://qiita.com/yuga_k/items/8d3a8078c72064a55459#comment-393e7b5ce8a197a38e10)のとおり、この問題は現在では解決されているようでした。
現時点でのLatest versionである`v21.6.1` で確認しましたが問題なさそうです。
解消したときのバージョンも載せておきます。
|名称|バージョン|
|---|---|
|OS|MacOS Ventura 13.4.1|
|Nodenv|1.4.1|
|Node.js|21.6.1|
|@qiita/qiita-cli|^1.4.0|

`/Users/username/.cache/qiita-cli/latest-package-version`が作成されていることも確認しました。

[@dghnts](https://qiita.com/dghnts)さん、コメントありがとうございました！

# これ以降は 2023-12-3 時点の古い情報です。
# 環境 
|名称|バージョン|
|---|---|
|OS|MacOS Ventura 13.4.1|
|Nodenv|1.4.1|
|Node.js|21.3.0|
|@qiita/qiita-cli|^1.3.0|

# エラー内容
[GitHubのREADME](https://github.com/increments/qiita-cli)通りにやってみましたが、うまくインストールできませんでした。
```
$ npm install @qiita/qiita-cli --save-dev
...(省略)...

$ npx qiita version
node:fs:2352
    return binding.writeFileUtf8(
                   ^

Error: ENOENT: no such file or directory, open '/Users/username/.cache/qiita-cli/latest-package-version'
    at Object.writeFileSync (node:fs:2352:20)
    at setCacheData (/Users/username/git/qiita/node_modules/@qiita/qiita-cli/dist/lib/get-latest-package-version/package-version-cache.js:28:23)
    at getLatestPackageVersion (/Users/username/git/qiita/node_modules/@qiita/qiita-cli/dist/lib/get-latest-package-version/get-latest-package-version.js:18:50)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async packageUpdateNotice (/Users/username/git/qiita/node_modules/@qiita/qiita-cli/dist/lib/package-update-notice.js:8:27)
    at async exec (/Users/username/git/qiita/node_modules/@qiita/qiita-cli/dist/commands/index.js:36:27) {
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: '/Users/username/.cache/qiita-cli/latest-package-version'
}

Node.js v21.3.0
```

# 解決方法
nodeのバージョンをLTS（2023/12/03時点では`20.10.0`）にすれば解決しました。
```
$ nodenv global 20.10.0
$ npm install
$ npx qiita version
1.3.0
```

# おわりに
すみません、エラー原因はわからずじまいです...。でも解決はできたのでとりあえず記事を書きました。
原因がわかったら追記します。わかる方いらっしゃったらコメントしていただくと嬉しいです。
湧水を自動計測してみた

# はじめに
しがない高校生をしているBasalte(ばざると)と申します
今回は地学に関する話です。
全然完成度が高くないのであまり突っ込まないでいただけると助かります

# 背景
弊校の地学部では新宿にある御留山という場所の湧水を13年間計測し続けているらしいのですが、
計測できない日があったり人によって違いが出てしまったりするため、
定量的に継続して計測できる装置が欲しかったことが動機でした。

# 概要
ということで、湧水を自動計測する装置を作りました。

制作した作品の写真です。

![IMG_1713.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1895796/187ee537-27f1-675a-55fe-521fffe00820.jpeg)


水槽に水を溜め、三角堰のようなもので水を流し、その水位によって水量を測るというものです。
水位から水量を求める計算は以下の資料を少し工夫して使いました。
https://www.eng-book.com/pdfs/fb9edca04a8bab5082cbc6cb4c645064.pdf

# 使ったもの、技術等
・Arduino
・ラズパイ
・赤外線センサー
・その他温度センサー等

![図14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1895796/17c28eac-81a7-3a3c-6b36-05e1ff931b94.png)

少し見づらいですが、赤外線などのセンサーのデータをラズパイを通してスプレッドシートとwebに落としています。
Webは通年運用の目処が立ったら公開、運用していく予定です。

アメダスなどの一般公開されているデータもリアルタイムでスクレイピングして同じ時間のデータに含んでいます。
今後webでもグラフが見れるように、Chart.jsとかで実装できたらいいですね！(昔触ったことある)

# 作成までの課題
作るための課題がいくつかあったので、解決した方法とともに記録します。
### 水量の計測
湧水と言っても川などに比べてとても水量が少なく、かといってアメダスの計量機構を作るには多いというような水量で、とても計測を行う手段を定めるのが難しかったです。
(アメダスの雨量計の仕組み)

https://www.jma-net.go.jp/fukuoka/kansoku/raingauge.files/raingauge.htm

計画時は血迷って画像のような鹿おどし(笑)を作ろうとしていました。

![図1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1895796/94d3b47a-43ef-cff9-9272-6e17a4b4432f.jpeg)


### 落ち葉
とても木々が多く茂っていて自然豊かな公園なので、冬場は落ち葉が多く溜まります。
夏場は装置が劣化する日差しを防いでくれて頼もしいのですが、冬場は大敵になります。
直接水流で駆動する機構は確実に詰まることがわかっていたので、落ち葉が含まれていても耐えれる、誤差の範囲に収まる機構が必要でした。

### メンテナンス
誰でも触れてしまう場所であり、設置場所の地面もあまり綺麗ではないので、少し位置がズレただけで動かなくなるのは困ります。
そのため、ある程度誤差を認めつつ、継続して計測し続けることができる装置を目指しました。

### 結論
結果的に、上三つの課題を全てクリアした(と思われる)機構がこちらになります。

![図2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1895796/1425766c-6706-7cbf-c421-3525eb5e28bc.jpeg)

水面に発泡スチロールを浮かべ、それを太めの塩ビパイプで覆うことによって湧水が流れ込む勢いを抑え、落ち葉などの影響を最小限にします。
それを上部にある赤外線センサーで読み取り、水面の変化を直に読み取ることができます。
また、装置が少しズレても耐えれる設計となっています。
Arduinoなどの電子機器は、プラスチックの箱に防水をガチガチにして少し離れた場所に置いています。


# 取得できたデータ
今の所2~3日のデータしか取れておらず、１週間や１ヶ月のデータが取れたらまた更新します...

# 今後の見通し
今後、装置自体の強度が足りないので、ちゃんと運用しようと思うと2号機で強度のことも考えた設計にしないといけないですね。

また、データの活用も多分できることがあるはずなので時間がある時にやります。

今の所リアルタイムでデータ飛んできて楽しい〜〜だけなので...

質問等はこちらにお願いします！最後まで見てくださってありがとうございます。
https://twitter.com/basalte1199
App Serviceプランの作成は計画的に

船井総研デジタルのよもぎたです。

この記事は[船井総研デジタルのアドベントカレンダー](https://qiita.com/advent-calendar/2023/fsdg)の3日目の記事です。
昨日は[@tuna828](https://qiita.com/tuna828)の「[【8080を使ってるのは誰だ】error [http11protocol] エンドポイントを起動中のエラーです](https://qiita.com/tuna828/items/c8bfad2740b74f9ac849)」でした。
明日は[@hidekko](https://qiita.com/hidekko)の記事の予定です。
よろしければこれらの記事もお読みいただければと思います。

# サマリと結論

App Serviceプランを作成する際は、同じリソースグループに所属する既存のApp Serviceプランに制約を受けることがあります。運悪くその条件にあたってしまった場合でも、同じサブスクリプションの別のリソースグループで希望のApp Serviceプランを作成することができます。そして、その後に必要に応じてリソースグループ間でApp Serviceプランを移動することが出来ます。

忘れがちですが、Azure Functionsをプロビジョニングする際にはApp Serviceプランもプロビジョニングされるので、ご注意ください（私はこれでハマりました）。

# 背景と経緯

Azure FunctionsをAzure Portalからデプロイしようとしたところ、デプロイ直前の「確認と作成」のうちの「確認」プロセスは問題なくて実際に作成が始まるものの、その途中でエラーメッセージを出力してこけました。作成のプロセスで設定する項目を見直しても問題ないように見えます。エラーメッセージは ``The pricing tier is not allowed in this resource group`` と出力されました。

このリソースグループでこの価格tierは許可されていない？なぜ？どうして？となりました。

他のサブスクリプションで同じ手順でAzure Functionsをデプロイしてみたところ、問題なくデプロイできます。サブスクリプションで何か制限があるのかと思い、サブスクリプションの作成者に聞いても、特に心当たりはないとのことでした。

サポートの方に問い合わせさせて頂いたところ、原因と対策は速攻で分かりました。MSのサポートさんデキる！

私の拙い文章で説明するよりは、公式のMS Learnのドキュメントをご覧いただくのが早いです。

- [Azure で App Service プランを管理する](https://learn.microsoft.com/ja-jp/azure/app-service/app-service-plan-manage#create-an-app-service-plan)
- [既存のリソース グループに新しい関数アプリを作成するための制限事項](https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-scale#limitations-for-creating-new-function-apps-in-an-existing-resource-group)

私の場合、BasicプランのApp Serviceプランを作成済みのリソースグループに、追加で従量課金の（Azure Functionsのための）App Serviceプランを作成しようとしていたため、制限を受けてしまう条件に合致し、エラーになってしまっていました。

# 対応

サマリと結論で書いた通り、別のリソースグループに目的のAzure FunctionsとApp Serviceプランを作成し、当初の目的のリソースグループに移動させました。

このときに一時的にAzure FunctionsとApp Serviceプランを作成するリソースグループは、それ専用の一時的なリソースグループを作成するのが良いと思います。そして作成したリソースを当初の目的のリソースグループに移動した後はそのリソースグループを削除してしまうのが紛らわしくなくてよいと思います。

# 最後に

クラウドを使っているとその背後にあるコンピューティングリソースのことをついつい忘れてしまいますが、今回のことはクラウドの向こうで動いている膨大なハードウェアたちの存在を思い出させてくれるいい機会になりました。

最後までお読みいただきありがとうございました。
Docker エラー(個人的)まとめ

エラー文
services.app.build must be a string


原因: build: 以下ののインデントが下がっていなかった

    build:
    context: .
    dockerfile: dockerfile
を以下に書き換える

    build:
      context: .
      dockerfile: dockerfile

services.app.ports must be a list
原因:　- port番号　が　-　と間が空いていた

    ports:
      -3000:3000
を以下に書き換える
      
    ports:
      - 3000:3000
MP3のメタデータを一括削除するスクリプト【さらにEXE化】

# はじめに

ゲーム開発中にMP3のメタデータがあるとうまく読み込めないシーンがあったため、フォルダを選択すると一括でメタデータを削除する MP3 Matadata cleaner なるスクリプトを作りました。ついでに exe 形式で配布可能な形式にすることも調べてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34295/77d61763-ce6c-d573-6a16-6111bd5a9e19.png)


```python
import os
import tkinter as tk
from tkinter import filedialog, messagebox, simpledialog
import eyed3

def clear_metadata():
    for file_path in file_paths:
        try:
            audiofile = eyed3.load(file_path)
            if audiofile is not None:
                # メタデータを初期化
                audiofile.initTag()
                # メタデータを保存
                audiofile.tag.save(version=eyed3.id3.ID3_V2_3)
        except Exception as e:
            messagebox.showerror("エラー", f"メタデータの削除中にエラーが発生しました: {e}")
            return
    messagebox.showinfo("完了", "メタデータの削除が完了しました。")

def select_folder():
    directory = filedialog.askdirectory()
    if directory:
        listbox.delete(0, tk.END)  # 既存のリストをクリア
        for filename in os.listdir(directory):
            if filename.endswith(".mp3"):
                file_path = os.path.join(directory, filename)
                try:
                    audiofile = eyed3.load(file_path)
                    if audiofile is not None and audiofile.tag is not None:
                        # 基本的なメタデータ（アーティスト、アルバム、タイトル）が存在するかチェック
                        if any([audiofile.tag.artist, audiofile.tag.album, audiofile.tag.title]):
                            file_paths.append(file_path)
                            listbox.insert(tk.END, filename)
                except Exception as e:
                    messagebox.showerror("エラー", f"ファイルの読み込み中にエラーが発生しました: {e}")
                    continue

# GUIの設定
root = tk.Tk()
root.title("MP3 Metadata Cleaner")

# ファイルパスを保存するリスト
file_paths = []

# リストボックスとスクロールバーの作成
frame = tk.Frame(root)
scrollbar = tk.Scrollbar(frame, orient="vertical")
listbox = tk.Listbox(frame, width=50, height=15, yscrollcommand=scrollbar.set)
scrollbar.config(command=listbox.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
frame.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)

# ボタン
select_button = tk.Button(root, text="フォルダ選択", command=select_folder)
select_button.pack(padx=10, pady=5)

clean_button = tk.Button(root, text="メタデータ削除", command=clear_metadata)
clean_button.pack(padx=10, pady=5)

# GUIのメインループ
root.mainloop()
```

# EXE化作業

Python スクリプトの EXE 化には PyInstaller を利用しました。

## PyInstallerの使用方法

### PyInstallerのインストール
   PyInstallerをインストールするには、次のコマンドを実行します：

   ```bash
   pip install pyinstaller
   ```

### EXEファイルの作成
   スクリプトファイルがあるディレクトリで、次のコマンドを実行してEXEファイルを作成します：

   ```bash
   pyinstaller --onefile --noconsole your_script.py
   ```

   このコマンドは、`your_script.py`をEXEファイルに変換しますが、実行時にコンソールウィンドウは表示されません。

### EXEファイルの配布
   `dist` フォルダ内に作成されるEXEファイルは、インストールが不要で、他のWindowsシステム上で直接実行可能です。
Google Cloud Functionを久しぶりに触ったら動かなかったメモ

第二世代で今までの感覚で普通にpythonコードとrequirements.txtを設定したら以下のエラーが出た

    ERROR: failed to build: executing lifecycle. This may be the result of using an untrusted builder: failed with status code: 51

requirements.txtはローカルで確認して、動作成功しているものをそのままコピペで転記
・・・をした際に、余計なものまで上書きしていた模様。

https://cloud.google.com/functions/docs/writing/specifying-dependencies-python?hl=ja
を確認すると
requirements.txtに
`functions-framework`
が必須で必要になった模様で、こいつを消してしまっていた。
Explanation of Safe API for hardware accelerators, AUTOSAR 1086, R23-11, AP

 Explanation of Safe API for hardware accelerators, AUTOSAR 1086, R23-11, AP
https://www.autosar.org/fileadmin/standards/R23-11/AP/AUTOSAR_AP_EXP_SafeAPIHardwareAccelerators.pdf

<この項は書きかけです。順次追記します。>
This article is not completed. I will add some words in order.

# Release Overviews
Classic Platform Release Overview, AUTOSAR No.0 ,R23-11, CP
https://qiita.com/kaizen_nagoya/items/8468435185e109189ead

Foundation Release Overview, AUTOSAR 781, R23-11, FO
https://qiita.com/kaizen_nagoya/items/f249bdb8c313d8bff883

Adaptive Platform Release Overview, AUTOSAR 782, R23-11, AP
https://qiita.com/kaizen_nagoya/items/13a104606a34fe24fcf7
# Terms
|terms(Acronyms and abbreviations)| Description|
|:--|:--|
SYCL|A C++ based high-level heterogeneous programming model to improve programming productivity on various hardware accelerators.
Device|A Device is one of the available hardware accelerators e.g. GPU, FPGA, DSP etc., typically a non-cpu ones, but the CPU also can be considered as Device for computations.
Kernel|A function that is executed on a device
Host|A Host Device is native computation unit of the ECU. Usually it is a CPU hardware.
Single-source programming model|This model allows the kernel code to be embedded in the host code, meaning the host & kernel code in same language in same translation unit.

# Reference

[1] Design guidelines for using parallel processing technologies on Adaptive Platform AUTOSAR_AP_EXP_ParallelProcessingGuidelines
[2] Glossary AUTOSAR_FO_TR_Glossary
https://www.autosar.org/fileadmin/standards/R23-11/FO/AUTOSAR_FO_TR_Glossary.pdf
[3] Guidelines for using Adaptive Platform interfaces AUTOSAR_AP_EXP_InterfacesGuidelines
[4] Specification of Manifest AUTOSAR_AP_TPS_ManifestSpecification
[5] List of Adaptive Platform Functional Clusters AUTOSAR_AP_TR_FunctionalClusterList
[6] Specification of Platform Health Management AUTOSAR_AP_SWS_PlatformHealthManagement
[7] Specification of State Management AUTOSAR_AP_SWS_StateManagement
[8] Specification of Execution Management AUTOSAR_AP_SWS_ExecutionManagement
[9] Specification of Health Monitoring AUTOSAR_FO_ASWS_HealthMonitoring

# 補足資料（Additions）

2023 Countdown Calendar 主催・参加一覧
https://qiita.com/kaizen_nagoya/items/c4c2f08ac97f38d08543

CountDownCalendar月間　いいねをいただいた記事群　views　順
https://qiita.com/kaizen_nagoya/items/583c5cbc225dac23398a

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
This article is an individual impression based on the individual's experience. It has nothing to do with the organization or business to which I currently belong.

# 文書履歴(document history)
ver. 0.01 初稿　　20231203
ver. 0.02 URL訂正 20231218
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
Technical Report on Operating System Tracing Interface, AUTOSAR 1083, R23-11, AP

Technical Report on Operating System Tracing Interface
https://www.autosar.org/fileadmin/standards/23-11/AP/AUTOSAR_AP_TR_OperatingSystemTracingInterface.pdf

<この項は書きかけです。順次追記します。>
This article is not completed. I will add some words in order.

# Release Overviews
Classic Platform Release Overview, AUTOSAR No.0 ,R23-11, CP
https://qiita.com/kaizen_nagoya/items/8468435185e109189ead

Foundation Release Overview, AUTOSAR 781, R23-11, FO
https://qiita.com/kaizen_nagoya/items/f249bdb8c313d8bff883

Adaptive Platform Release Overview, AUTOSAR 782, R23-11, AP
https://qiita.com/kaizen_nagoya/items/13a104606a34fe24fcf7
# term
Table 2.1: Acronyms and abbreviations used in the scope of this Document

Short Name (Abbreviation / Acronym)|Description:
|:--|:--|
Adaptive Application|see [1] AUTOSAR Glossary
ARTI|see [1] AUTOSAR Glossary
AUTOSAR Adaptive Platform|see [1] AUTOSAR Glossary
Executable|see [1] AUTOSAR Glossary
Execution Management [2]|The element of  AUTOSAR Adaptive Platform responsible for the ordered startup and shutdown of the AUTOSAR Adaptive Platform and Adaptive Applications.
Execution Manifest|Manifest file to configure execution of an Adaptive Application. An Execution Manifest is created at integration time and deployed onto a Machine together with the Executable to which it is attached. It supports the integration of the Executable code and describes the configuration properties (startup parameters, resource group assignment etc.) of each Process, i.e. started instance of that Executable.
Machine|see [1] AUTOSAR Glossary
Manifest|see [1] AUTOSAR Glossary
Modelled Process|A Modelled Process is an instance of an Executable to be executed on a Machine and has a 1:1 association with the ARXML/Meta-Model element Process. This document also uses the term process (without the “modelled” prefix) to refer to the OS concept of a running process.
Operating System|Software responsible for managing Processes on a Machine and for providing an interface to hardware resources.
Process|see [1] AUTOSAR Glossary
Task|see [1] AUTOSAR Glossary. In case of POSIX a task is called thread.

# Reference
[1] Glossary AUTOSAR_FO_TR_Glossary
https://www.autosar.org/fileadmin/standards/23-11/FO/AUTOSAR_FO_TR_Glossary.pdf
[2] Specification of Execution Management AUTOSAR_AP_SWS_ExecutionManagement

# 文書履歴(document history)
ver. 0.01初稿　　20231203
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
[Vagrant][NFS] Windows 10でVagrant up/realodの共有フォルダ mount が失敗する 解決法



# 問題

Vagrant を通して使っているVM の調子がおかしいため、

念の為 VMを `vagrant reload` で再起動しようとしたら
mountの部分で失敗してしまった

```
==> default: Mounting NFS shared folders...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

mount -o vers=3,udp,rw,async,fsc,nolock,vers=3,udp,rsize=32768,wsize=32768,hard,noatime,actimeo=2 192.168.33.1:/C/vagrant/shared/dev /home/vagrant/dev

Stdout from the command:

mount.nfs: Connection timed out
```
# 調査

当ファイル共有で使っているplugin である`vagrant-vbguest` の問題かと思って 念の為再度 installしてみたが、
変わらなかった

```
vagrant plugin install vagrant-vbguest
```
-> `vagrant reload` 変化なし

VM 自体は起動はし、SSHアクセスできるため 試しに↑のエラーが出ているコマンドを実行してみると
同様に hangした

```
mount -o vers=3,udp,rw,async,fsc,nolock,vers=3,udp,rsize=32768,wsize=32768,hard,noatime,actimeo=2 192.168.33.1:/C/vagrant/shared/dev /home/vagrant/dev
...
```

# 原因

どうやら、Windows のセキュリティの設定?
と思い、Firewall 周りの設定の解除=緩める を試してみたら
正常に mount できたため、
その周りで アクセスが弾かれてしまっていたよう..

# 解決法

というわけで、
Windows Firewallの設定で
Public networkの
`MicroSoft Defender Firewall`
をOff にした

->
`vagrant reload` で mountが通るようになった

# 参考

https://github.com/hashicorp/vagrant/issues/11555

https://support.microsoft.com/en-us/windows/turn-microsoft-defender-firewall-on-or-off-ec0844f7-aebd-0583-67fe-601ecf5d774f

https://support.microsoft.com/ja-jp/windows/microsoft-defender-%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%BE%E3%81%9F%E3%81%AF%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B-ec0844f7-aebd-0583-67fe-601ecf5d774f

https://www.google.com/search?q=MicroSoft+Defender+Firewall+vagrant+mount
minikubeを動かしてみる

・Ubuntu22.04でminikube動かしてみた
①Dockerインストール
　　余計な所見ないで、↓見てインストールするのが間違い無い
　　https://docs.docker.com/engine/install/ubuntu/
②グループ　docker　を作成して、ユーザを追加
　　$ sudo groupadd docker
　　$ sudo usermod -aG docker ユーザ
　　↑しないで、minikube startすると、グループ dockerに
　　加わりなさいとご提案されて、動かない。
③minikubeをインストール
　　これも余計な所見ないで、↓見てインストールするのが間違い無い
　　https://minikube.sigs.k8s.io/docs/start/
④　$ minikube start　してみよう。

・windowsでも動かしてみた
①WindowsにVirtureBoxインストール
　　ただ、インストールするだけで良い
  　↓の③で仮想マシンがここ上に作成される   
②minikubeをインストール
　　余計な所見ないで、↓みてインストールすのが間違い無い
　　https://minikube.sigs.k8s.io/docs/start/
　　powershell用のコマンドをコピペでOK
③　minikube start　してみよう。
30歳小学校教員が未経験からのエンジニア転職を目指す話

# 現職について
　公立小学校教員７年目。学級担任。校務文章（一般企業でいう役職みたいなものだろうか）は社会科教科主任。ICT主任。
# 転職に向けて
　未経験からのエンジニア転職をするにあたってのロードマップを整理する。
　まず、自分はエンジニアとしての実務経験を一切持たない未経験である。そんな自分を客観的に見たときに、大前提として採用したいと思う企業はない。と考えるのが自然である。そんな自分がアピールすべきポイントは、自走力があることの証明だと考えた。
 　自ら立てた仮説に基づいて学習計画を立て、実行していく。その中でトライ&エラーをくり返すことを通して、自走力を身に付けていき、アピールするに値する技量に到達させていく。
***
今後の記事には、学習のアウトプットと自走力を付けるために取り組んだことの記録をしていくものとする。