OmniAICreator/Qiita-1.07M huggingface dataset:
【ChatGPT＋DALL-E3】Dream Machineを使ってみた。知見も。


　どうも、カーブミラーです。

　今回は、Luma AIのDream Machineを使ってみました。得られた知見を報告します。

:::note info
本記事は、ChatGPT（有料版）
＋DALL-E3で行なっております。
画像はありません。あしからず。
:::

　まずは、ニュース。

　OpenAIの理事会に
　　陸軍の元軍人さんが
　　　入るそうです。
[サム・アルトマンのポスト](https://x.com/sama/status/1801417160369311977?t=tZSHMFMw_Fz5vyvsGXWcqQ&s=19)
DeepL翻訳
「ポール・ナカソネ将軍がOpenAIiの理事会に加わることをうれしく思う。次の段階に向かうにあたり、安全性とセキュリティの専門知識を加えることが非常に重要であることなど、多くの理由がある」

　アメリカ軍が
　　ChatGPTを利用していたのは
　　　知っていました(X-Twitterかな)。

　やっぱり
　　アメリカは軍事国家、
　　　（語弊がある？）
　　　　国のバランスに
　　　　　関わることには、
　　　　　　国家安全保証上の
　　　　　　　抑えが必要と判断した
　　　　　　　　ということですね。
***
　さて、
　　本題です。

　今回は、昨日（2024/06/13）、
　　ニュースに書きました
　　　動画生成AIである
　　　　Luma AIの
　　　　　Dream Machineについて
　　　　　　書きます。
[Luma AI  Dream Machine](https://lumalabs.ai/dream-machine/creations)

　無料で利用でき、
　　アカウント取得も
　　　ほかのものと変わりません。

　X-Twitterのアカウントを
　　お持ちで、ごらんになりたい方は
　　　「#LumaDreamMachine」
　　　または「#DreamMachine」で
　　　　検索すると、タグ付けされた
　　　　　ポストすべてを見れます。

　Dream Machineは
　❶Promptから
　❷画像＋Promptから
　　　動画を生成することができます。

　Dream MachineのUIは
　　シンプルなので
　　　操作に迷うことは
　　　　少ないかと思います。

　私みたいなスマホで
　　操作する人間でも
　　　大丈夫なレベルです。
　　　　ちょっと不便さはありますが😅

　入力枠があり、
　　アップロードボタン、
　　　送信ボタン、
　　　　それと“Enhance prompt”と
　　　　　書かれたチェックボックス。

　チェックボックス以外は
　　ChatGPTで見慣れたものですね。

　昨日はあった
　　Sample Promptの書き出しボタンが
　　　なくなったのは、残念です。
　　　　どんなPromptを入れれば
　　　　　いいのかを教えてくれて
　　　　　　いましたからね。
***
　それは、ともかく。

　ここでは、
　　これまでに
　　　得られた知見を書きます。

　ここには
　　X-Twitter上で
　　　出てきた情報も含めます。
　　　　みなさん、手軽さなのか
　　　　　どんどんと出しています。
　　　　　　私もそのひとり😸
***
　まず、
　　Promptだけで生成する場合、
　　　出てくる人物が、
　　　　画像生成AIに比べて
　　　　　美人度が低く感じます。

　　Luma AIは
　　　もともとスマホの画像や動画を
　　　　扱っていたところだそうで
　　　　　そこからの学習なので
　　　　　　そうなるようです。
2024/06/15追記
Luma AIは、アメリカ・サンフランシスコ発のサービスで、スマートフォンで撮影した動画や写真、あるいはテキストを基に3Dモデルを生成するサービスです。
2024/06/15追記

　　ものによる気もしますけど😅

　次に
　　Prompt＋画像です。

　　こちらは
　　　Promptとともに画像を
　　　　アップロードして送信すると
　　　　　画像を使って
　　　　　　動画を生成してくれます。

　　画像のみの
　　　送信はできないように
　　　　UIが設計されています。

　　生成に掛かる時間は
　　　Queue（待ち行列）が
　　　　なければ、すぐに
　　　　　生成に入り、二分で完成。

　　とはいえ、現在
　　　混み合っていて
　　　　時間が掛かります。
　　　　　10分掛かる可能性も。

　　生成中は、
　　　“Dreaming”となるのが
　　　　カワイイとか😅
***
　“Enhance prompt”と
　　書かれたチェックボックスです。
　　　Enhance＝強化、
　　　　つまり、Promptを補強する
　　　　　ような意味合いらしいです。

　これ、常に
　　チェックされています。

　チェックあり・チェックなしで
　　比べてみると
　　　ありは、動作が大きくなる。
　　　なしは、動作がおとなしめ。

　だから
　　これは場面に
　　　合わせて使い分ければ
　　　　良さそうです。
***
　また、
　　生成された動画を
　　　逆再生すると
　　　　狙った絵になる、という話も
　　　　　ありました。

　動画の使い道としては
　　昔の写真を映像化したり
　　　家族などの写真を動かしたり
　　　　もちろん生成画像も。

　それから
　　Dream Machineは
　　　日本語のPromptも
　　　　使えます。
　　　　　どこまで使えるかは
　　　　　　わかりませんが。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
ISO 9000　品質マネジメントシステム（SCP財団パロ）

**アイテム番号:** ISO 9000
**オブジェクトクラス:** Safe

**特別収容プロトコル:** ISO 9000シリーズに定められる定義により、プロジェクトを管理してください。基本的な概念や用語に関しては、ISO 9000:2005を参照してください。
パフォーマンスに関しては、ISO 9004を、監査に関してはISO 19011を参照してください。
これらの手順は包括的なものであり、厳密に適用する必要はありません。
ISO 9001:2008の第三者認証制度を利用することで、ISOに適合していることを証明する認定を受けることができます。

**説明:** ISO 9000シリーズは、国際標準化機構（ISO）が定めた品質マネジメントシステムに関する一連の規格です。品質管理システムの基本概念、原則、および用語の定義を提供する文書です。

サイト-404で実施された応用技術者試験、「[ソフトウェア開発技術者平成20年春期 午前問78](https://www.ap-siken.com/kakomon/20_haru/q78.html)」において、「JIS Q 9000:2006で規定されている妥当性確認はどれか。」という出題がなされました。
布川博士は「共通フレーム2007」や「JIS Q 27002」など、心当たりのないランダムな数字を問われる問題を暗記することに困難を感じていたため、「出題者が即興で作ったそれらしい定義がランダムに出題されているのであろう（思考停止）」と推測し、記述を確認し、日本語として妥当であろうという選択肢を選んでいました。しかし、財団の追跡調査により、これらは一貫性のある記述であることが判明しました。

これらが何らかの規格に基づいていることが検証されたため、財団は文書の収容を開始しました。以下は「ISO9000シリーズ」に関する記述です。

## ISO 9000:2005（JIS Q 9000:2005）
**目的:** 品質管理システムの基本概念と用語の定義を提供
**内容:** 品質管理システムの基礎となる概念と原則を明示し、他の規格を理解するための基礎を形成

**実験：** 品質管理システムの基本概念と用語の定義を改変。
**結果：** 改変された定義が反映された。顧客重視->顧客重点など

布川「**顧客重視** を**猫の満足度重視** に改変するのはどうか？」

## ISO 9001:2008（JIS Q 9001:2008）

**目的:**  品質管理システムの具体的な要求事項を規定
**内容:** 組織が品質管理システムを確立し、運用するための基準。これにより、組織は認証を取得できる

監査部門により却下。

布川：「この認定には3年ごとに更新が必要で、50万円以上はかかるらしい」

## ISO 9004:2009（JIS Q 9004:2009）
**目的:** 持続的成功のための指針を提供
**内容:** 組織の全体的なパフォーマンス向上を目指し、品質管理を超えた持続的成功のための広範な視点を提供

## ISO 19011:2011（JIS Q 19011:2011）

**目的:** マネジメントシステムの監査に関する指針を提供
**内容:** 品質管理システムおよび環境管理システムの監査プロセスに関するガイドライン。監査の計画、実施、報告、およびフォローアップの手法を規定

# 補遺

>実際に読んでみても、箇条書きの羅列で、また、理念であるため、暗記をすればよいというものではないという印象がある。
ISO9000シリーズが品質マネジメントシステムであることを把握しておいたらなんとかならないだろうか？
――布川博士

# 参考

[ソフトウェア開発技術者平成20年春期 午前問78](https://www.ap-siken.com/kakomon/20_haru/q78.html)
[ISO 9000ファミリー規格　支援文書](https://webdesk.jsa.or.jp/common/W10K0500/index/dev/iso_iso9000_arc/)
[ITパスポート試験ドットコム](https://www.itpassportsiken.com/word/ISO_9000.html)
[東京都中小企業振興公社　第１章　ＩＳＯ 9000 規格の解説](https://www.tokyo-kosha.or.jp/support/shien/iso/rmepal000000hrax-att/iso.pdf)
[ISOコム株式会社 ISO9001の取得方法](https://isocom.co.jp/wp/?p=4305)
indexOf の備忘録

# indexOfを使った時にエラーが出る

忘れがちなので、備忘録として記録です。

```javascript
const str = 'tomato ha oishine!';
str.indexOf('tomato') // 結果：0
```

```javascript
const str = undefined;
str.indexOf('tomato') // 結果：エラー
```
:::note alert
VM181:1 Uncaught TypeError: Cannot read properties of undefined (reading 'indexOf')
:::
undefined（未定義）のプロパティは読み込めないよって言われる。

```javascript
const str = null;
str.indexOf('tomato') // 結果：エラー
```

:::note alert
TypeError: Cannot read properties of null (reading 'indexOf')

:::
nullのプロパティは読み込めないよって言われる。
ssh した時に Interrupted system call と出てしまった際の対処法

vnc 関連の設定を色々とした後に 手元のMacBook から 研究データの解析用計算機であるCentOS7にssh すると `ssh: connect to host xxxx port 22: Interrupted system call` と出てしまって接続できなくなってしまった。 `firewalld` が起動していなかったことが原因だった。
以下の手順で確認する。
# Firewalld の状況確認
```
# firewalld-cmd --list-all
FirewallD is not running 
```
動いていなかったので、以下を実行
```
# systemctl enable firewalld
# systemctl start firewalld
```
無事にactive になったことを確認
```
# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eno1
  sources: 
  services: dhcpv6-client ssh vnc-server
  ports: 8081/tcp 8443/tcp 49161/tcp 49162/tcp 1900/udp 3389/tcp 5903/tcp 5901/tcp 5910/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
```

これで `ssh` が繋がるようになった。めでたしめでたし。
スレッドによるデータポーリング監視

### 言葉の定義
ポーリングとは：一定の間隔（時間）で監視対象の変化があるかをループで回し続けること
スレッドとは：１つのプログラム処理において、メインスレッドとサブスレッドなどで複数のスレッドを並行に並べて処理すること

監視対象クラスとは：データシミュレーションなどでクラスのメンバー変数や内部の値が更新されることを想定

監視クラス（ポーリングクラス）とは、監視対象クラスと別のクラスになっていて、監視対象クラスの内部データを監視する仕組みで構成されていることを想定

### 用途

・シミュレーション
・スクレイピング
・バッチ処理
・ログ監視

### 監視クラス（ポーリングクラス）
```py
import time
import threading

class PollingClass:
    def __init__(self, observed_class, interval=0.5):
        self.observed_class = observed_class
        self.interval = interval
        self.running = False
        self.thread = None
    
    def start_polling(self):
        self.running = True
        self.thread = threading.Thread(target=self.polling_loop)
        self.thread.start()

    def stop_polling(self):
        self.running = False
        if self.thread is not None:
            self.thread.join()

    def polling_loop(self):
        while self.running:
            data = self.observed_class.get_data()  # 監視対象クラスからデータを取得
            self.process_data(data)  # データを処理
            time.sleep(self.interval)  # 次のポーリングまで待機

    def process_data(self, data):
        # データを処理するためのメソッド
        print("Received data:", data)
```
### 監視対象クラス
```py
class ObservedClass:
    def __init__(self):
        self.data = None
    
    def update_data(self, new_data):
        self.data = new_data
    
    def get_data(self):
        return self.data
```

### 実行

```py
# 監視対象のクラスを作成
observed_instance = ObservedClass()

# ポーリングクラスを作成し、監視対象を指定して開始
polling_instance = PollingClass(observed_instance)
polling_instance.start_polling()

# データ更新のシミュレーション
for i in range(5):
    observed_instance.update_data(i)  # データを更新
    time.sleep(1)  # ポーリング間隔より長い時間待機

# ポーリングを停止
polling_instance.stop_polling()
```

実行結果
```
Received data: None
Received data: 0
Received data: 1
Received data: 1
Received data: 2
Received data: 2
Received data: 3
Received data: 3
Received data: 4
Received data: 4
```
【ServiceNow】外部ユーザにウィジェットの閲覧権限を付与する方法（CSM）

# はじめに
CSMでポータルを作成していたところ、一部のページ・ウィジェットを外部ユーザが閲覧できないという問題が起きました。
本記事ではこの問題の解決方法について共有していきたいと思います。

:::note info
本記事ではユーザを以下のように呼びます。
外部ユーザ：snc_externalロールを持つユーザ
内部ユーザ：snc_internalロールを持つユーザ
:::

# 原因
ユーザクライテリアを設定できるようになる Service Portalユーザー基準サポートプラグイン (com.glide.service-portal.user-criteria) と システムプロパティ（Service Portal User Criteria Support）が有効化されている場合、ユーザクライテリアを設定しないと内部ユーザしか見られないページ・ウィジェットが存在するようです。

＜プラグインについて＞

https://docs.servicenow.com/ja-JP/bundle/tokyo-servicenow-platform/page/build/service-portal/task/activate-user-criteria.html

＜システムプロパティについて＞

https://docs.servicenow.com/ja-JP/bundle/tokyo-servicenow-platform/page/build/service-portal/task/activate-user-crit.html


また、CSM関連のテーブルへのアクセス権限も外部ユーザには付与されていないため、
テーブルを指定してレコードを表示するようなウィジェットも閲覧することができません。
ウィジェット例：簡易リスト、URL定義からのデータテーブル、等。

# 解決策
ページ・ウィジェットの閲覧権限については、外部ユーザが閲覧できるように、問題が発生したページ・ウィジェットにユーザクライテリアを設定しました。
ユーザクライテリアは、OOTBで外部ユーザ用と内部ユーザ用として使えるものがありました。
■外部ユーザ用
名前：Users with 'sn_customerservice.customer' role
ロール：sn_customerservice.customer
※sn_customerservice.customerロールに、snc_externalロールが含まれています。

■内部ユーザ用
名前：Users with 'snc_internal' role
ロール：snc_internal

テーブルへのアクセス権限については、外部ユーザがCSM関連のテーブルへアクセスできるように、プロパティ「sn_cs_queryrules.use_query_rules」を有効化しました。

https://docs.servicenow.com/ja-JP/bundle/utah-customer-service-management/page/product/customer-service-management/reference/csm-query-rules.html


# 注意事項
他のポータルのページでも使用しているウィジェットの場合は、外部ユーザ用のユーザクライテリアのみを付けてしまうと内部ユーザが閲覧できなくなってしまうため、他に付けるべきユーザクライテリアがないか横並び確認をするようにしてください。

# おわりに
はじめに書いた通り、すべてのページ・ウィジェットに対して外部ユーザに閲覧権限がない訳ではなく、一部のページ・ウィジェットに対してこの問題が発生しました。
そのため、作成したページやページに配置したウィジェットが外部ユーザからすべて閲覧できているのか、注意深くテストする必要がありそうです。
numpy配列の要素ごとの操作を直接行いたい！numpy配列を引数とした時のValueErrorを読む


NumPy配列を扱う際、特定の条件に基づいて要素ごとに異なる処理を行いたい場面がよくあります。しかし、このような操作を直接行おうとすると、ValueErrorに遭遇することがあります。この記事では、そのようなエラーの一般的な原因と、それを解決する2つの方法について解説します。

## エラーの原因
以下のコードを見てみましょう。
```
import numpy as np

def step(x):
    if x > 0:
        return 1
    else:
        return 0

step(np.array([1, 2, 3, -1, -2, -3]))
```

このコードは、配列の各要素が0より大きいかどうかに基づいて1または0を返すことを意図しています。しかし、実行すると以下のようなValueErrorが発生します。
```
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
```

このエラーは、if x > 0の部分で発生しています。NumPy配列に対する比較演算は要素ごとに行われ、真偽値の配列を返しますが、if文は単一の真偽値を期待しています。そのため、真偽値の配列をどう扱うかが曖昧であるとしてエラーが発生するのです。

## 解決法1: NumPyのvectorize関数を使用
この問題を解決する一つの方法は、NumPyのvectorize関数を使用して、元の関数を配列の各要素に適用できるようにすることです。
```import numpy as np

def step(x):
    if x > 0:
        return 1
    else:
        return 0

vectorized_step = np.vectorize(step)
result = vectorized_step(np.array([1, 2, 3, -1, -2, -3]))
print(result)
```

## 解決法2: リスト内包表記を使用
別の解決法として、リスト内包表記を使用して関数を配列の各要素に適用する方法があります。
```
import numpy as np

def step(x):
    if x > 0:
        return 1
    else:
        return 0

result = np.array([step(x) for x in np.array([1, 2, 3, -1, -2, -3])])
print(result)
```

## まとめ
どちらの方法も、配列の各要素に対して条件分岐を行い、期待される結果を得ることができます。このように、NumPy配列での条件分岐処理には注意が必要ですが、適切な方法を選ぶことで、エラーを回避しながら目的の処理を実現することが可能です。
# MySQL入門#2！！MySQLの基礎！！はじめてのSQL文【リレーショナルデータベース / PHPによるWebアプリケーション開発】

皆さんこんにちは、KoenigWolfです。今回はMySQL入門の続きをお届けします。前回はMySQLが公式サイトで配布しているExampleデータベースから「ワールドデータベース」というデータをインポートし、MySQLの基本的な操作について学びました。今回は、そのワールドデータベースを使って実際にSQL文を操作してみたいと思います。

## データの操作：基本のCRUD

まず、データ操作の基本としてCRUD（Create, Read, Update, Delete）の4つの操作があります。これらはそれぞれデータの作成、読み取り、更新、削除を意味します。これらの操作ができるようになれば、MySQLの入門としては十分です。

リレーショナルデータベースの特徴として、データの強い整合性と柔軟な検索機能があります。この2つの特徴を理解することで、MySQLの強みを活かしたデータ操作が可能になります。

## データの強い整合性

リレーショナルデータベースは、データの整合性を強く保つ機能を持っています。例えば、家計簿で今月の収支が合わないといった不整合が現実世界ではよくありますが、リレーショナルデータベースを正しく使うことでこうした問題を防ぐことができます。

## 柔軟な検索機能

リレーショナルデータベースに保存されたデータは、SQLという言語を使って自由に検索できます。SQLを使うことで、複雑な検索クエリを簡単に実行し、必要なデータを効率的に取得できます。

## SQL文の基本

SQL文を使ってデータベースからデータを取得する際に最も基本的な文が`SELECT`文です。以下の構文が基本となります：

```sql
SELECT カラム名 FROM テーブル名;
```

例えば、ワールドデータベースのシティテーブルからデータを取得する場合は次のように書きます：

```sql
SELECT * FROM city;
```

これは、シティテーブルの全てのカラムを取得することを意味します。

## 実際のSQL文を書いてみる

では、実際にSQL文を書いてデータを取得してみましょう。以下の手順に従って、PHPMyAdminを使ってクエリを実行します。

### 1. MAMPの起動

まず、MAMPを起動し、ApacheとMySQLをスタートさせます。

### 2. PHPMyAdminにアクセス

ブラウザから`localhost:8888/phpMyAdmin`にアクセスし、PHPMyAdminを開きます。rootユーザーでログインします。

### 3. ワールドデータベースのインポート

前回の続きとして、ワールドデータベースがインポートされていることを確認します。インポートがまだの方は、以下の手順でインポートしてください。

## ワールドデータベースのインポート手順

ワールドデータベースをインポートする手順は以下の通りです。リンクを使用して、データベースのダウンロードからインポートまでの手順を詳しく説明します。

### 手順1：ワールドデータベースのダウンロード

1. [MySQL公式サイト](https://dev.mysql.com/doc/index-other.html)にアクセスします。
2. ページを下にスクロールし、「Example Databases」のセクションを見つけます。
3. 「World database」のリンクをクリックしてダウンロードページに移動します。
4. 「world.sql.gz」ファイルをダウンロードします。

### 手順2：MAMPの起動

1. MAMPを起動します。
2. MAMPのコントロールパネルでApacheとMySQLをスタートさせます。

### 手順3：PHPMyAdminにアクセス

1. ブラウザを開き、`localhost:8888/phpMyAdmin`にアクセスします。
2. `root`ユーザーでログインします。

### 手順4：ワールドデータベースのインポート

1. PHPMyAdminのメインページで「インポート」タブをクリックします。
2. 「ファイルを選択」ボタンをクリックし、ダウンロードした`world.sql.gz`ファイルを選択します。
3. ページ下部の「実行」ボタンをクリックしてインポートを開始します。
4. インポートが成功すると「インポートは正常に終了しました」と表示されます。

これでワールドデータベースがインポートされ、使用できるようになります。以下に、インポート手順のスクリーンショットを追加して、さらにわかりやすくします。

上記の手順で、ワールドデータベースをインポートして、MySQLでのデータ操作を始めることができます。

### 4. SQL文の実行

PHPMyAdminの「SQL」タブをクリックし、以下のSQL文を入力して実行します：

```sql
SELECT * FROM city;
```

実行すると、シティテーブルの全てのデータが表形式で表示されます。

## 結論

今回は、SQLの基本である`SELECT`文を使ってデータを取得する方法を学びました。次回は、さらに複雑な検索方法や他のCRUD操作について学んでいきます。MySQLの学習は奥が深いですが、基礎をしっかり押さえることで、複雑な操作もスムーズに行えるようになります。

応援のコメントや高評価、SNSでの拡散をよろしくお願いします。では、次回の記事でお会いしましょう。さよなら。
Google AppSheet Coreライセンスでできることメモ

# Google AppSheet
* 2023年7月からGoogle WorkspaceのBusinessプラン以上でAppSheetのCoreライセンスが付与された
* Coreライセンスがあると、組織のドメインをGoogle Workspaceに認証させておけば組織内メンバーは無制限でAppsheetのユーザーになれる
* freeプランの場合は10人までの制限ありだが、Coreプランなら社内利用の用途であれば社内システムのノーコードアプリ開発・利用が実質無料！
* 地味にお金がかかってたKintoneのアプリを移行しよう

# AppSheetで社内アプリ実装をしていて気づいたこと
* 使用できない関数がある
    * 使える
        * USEREMAIL()　: AppSheetを使用しているユーザー本人のメールアドレスが返ってくる
    * 使えない
        * USERNAME() : 空で返ってくる
        * USERROLE() : Admin または User で返ってくるはずだが返ってこないことがある
* ベストプラクティス？
    * 下記のような列項目を作りたい時の自分なりのベストプラクティス
        * 作成日時： INITIAL_VALUE に NOW(), EDITABLE?　を FALSE にする
        * 作成者： INITIAL_VALUE に USEREMAIL(), EDITABLE?　を FALSE にする
        * 更新日時： TYPE を ChangeTimestamp　にする
        * 更新者： INITIAL_VALUE に USEREMAIL(), EDITABLE?　を FALSE にする,　Reset on edit? をTRUEにする

続く
カウントアップのオーバーフロー対策

![SS 192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/a41cd967-f549-8677-1efa-2e99bf69518d.png) カウンタが時計の針のように循環してほしい


## やること
Arduino系でタイマーなどをカウントアップする際に、最大値を超えるところの処理がちょっと面倒な感じになります。
変数の型の性質を利用して、処理手順を減らしたいと思います。

たとえば1-11=2という計算は間違っているような感じもしますが、
時計盤の上では11時と1時の差が2時間ということは明白です。
(いや10時間とか14時間とかもありえるだろうという指摘はごもっともですが、一旦無視してください。)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/f0ec8517-0dbc-1c50-d708-0ccaf81db5f4.png" width = 300>

具体的には、タイマー割り込みで刻々とカウントアップされる値があるとして、別途並列で計算処理してカウントアップをしている値と比較する時に使いたいと考えています。
カウントの値が循環してくれれば、型の最大値を跨いでも理屈上は永久に動いてくれるはずです。

## unsigned long を使おう
時刻を取得するコマンドである millis() や micros()はunsigned longの型で返されます。そこでこのunsigned longをカウンタに使おうと思います。
  
unsigned longは32ビットの符号無し整数型なので、ミリ秒を取得するmillis()の場合、値の最大値は4294967295となります。4294967295ミリ秒は約49日です。
もう少し実機でよく調べると、4294967295の最大値に対し、1を足すと0に戻ることがわかります。
  
引き算もエラーなく行うことができます。
たとえば、

1-2 = 4294967295
1-1 = 0 

となります。

# 実験コード

２つの変数を最大値付近からカウントアップし、毎回、差を求めてみます。

``` c++:arduino

unsigned long a = 4294967191;
unsigned long b = 4294967190;

void setup()
{
  Serial.begin(115200);
}

void loop()
{
  Serial.print("a=");
  Serial.print(a);
  Serial.print(", b=");
  Serial.print(b);
  Serial.print(", a-b=");
  Serial.println((a - b),DEC);
  a++;
  b++;
  delay(100);
}
```

# 実行結果

```
...
a=4294967292, b=4294967291, a-b=1
a=4294967293, b=4294967292, a-b=1
a=4294967294, b=4294967293, a-b=1
a=4294967295, b=4294967294, a-b=1
a=0, b=4294967295, a-b=1
a=1, b=0, a-b=1
a=2, b=1, a-b=1
a=3, b=2, a-b=1
a=4, b=3, a-b=1
...
```

最大値を跨いでも差分を保ってくれる時計盤のようなカウンタを実現できることがわかりました。


# まとめ
49日分もあればそもそもオーバーフローすることもないだろうとタカを括っていたのですが、ロボットの展示でマイクロ秒を使った際、何十分か経つとオーバーフローでシステムが停止するというトラブルに見舞われました。そんなうっかりがありました。
Singletonパターンにご注意を

## Singletonパターンとは
Singleton(シングルトン)パターンは多くの問題の解決に役立つパターンです。

このパターンでは、クラスのインスタンスは必ず1つしか生成されません。そのインスタンスは使用前に必ず初期化され、シングルトンをグローバルアクセスポイントとすることで、設計をシンプルにできます。

こう書いていくと良いことずくめのようですが、この「古典的な」デザインパターンに何か短所はあるのでしょうか。

## Singletonにご注意を
実はたくさんあります。

確かにシングルトンパターンは魅力的ですが、実はこのパターンには利点よりも弊害の方が多いと言えます。
まずテストの妨げになります。そして保守性の点でも不利です。残念ながらその事実は広く知られているとは言えないため、多くのプログラマを焚き付けているのです。つい使いたい誘惑にかられますが、その誘惑に抵抗しなくてはなりません。
### 具体的な問題例
- **「必要なインスタンスは1つだけ」という要望は、多くの場合推測にすぎない**
  
アプリケーションの設計段階では「インスタンスは絶対に1つしかいらないだろう」と考えていても、後にそうもいかなくなることが多いです。
アプリケーションを設計する時にそういう推測をあちこちでしていると、どこかで大きな問題に直面することになります。要件は変化するものであり、良いデザインとはそれを織り込んでいるもののことを言います。

シングルトンパターンは、要件の変化を織り込んでいるとは言えません。

- **理論的には独立しているはずのコード間に暗黙の依存関係を生んでしまう**
  
暗黙的な依存関係を生み出すことの問題は、まず依存関係が一見してわかりにくいからです。
また、生まれてしまう依存関係は本来不必要なはずで、問題の存在がはっきりするのは、単体テストの時です。

単体テストでは疎結合が前提となっていて、また実装コードの代わりに、適宜モック(テスト用の仮置き)実装に差し替えられることも多くあります。シングルトンパターンはその妨げになるのです。

- **シングルトンパターンは永続化された状態を暗黙のうちに伴う**
  
これも、単体テストの妨げになります。単体テストは、どのような順序でもテストが実行できるために互いに独立でなければなりません。
そしてどのテストにおいても実行前には必ずプログラムを既知の状態に設定できるはずなのです。

不変でない状態を伴うシングルトンを導入してしまうと、それが難しくなります。
加えてグローバルにアクセス可能で、かつ永続化された状態があるとコードから状態の推論が困難になります。特に、**マルチスレッド環境**で顕著になります。

- **マルチスレッド環境での使用は特に危険が大きい**
  
マルチスレッドでは、シングルトンオブジェクトへのアクセスにはロックが必要になりますが、単純なロックでは効率が良いとは言えないため、いわゆるDCL(Double-Checked Locking)を使うことが増えています。

しかしDCLだと危険性が高まってしまう恐れがあります。多くの言語でDCLPはスレッドセーフでないからです。
- **クリーンアップにも危険が潜んでいる**
  
プログラム終了の際には、シングルトンも自動的にクリーンアップされることになります。
ただし、複数のシングルトンがある時、どのような順序でクリーンアップされるかは決まっていません。相互に依存し合うシングルトンがアプリケーションに含まれている時などに問題が活性する恐れがあります。

アプリケーションのシャットダウン時に、あるシングルトンが別のシングルトンにアクセスしようといた時、そのシングルトンはすでにクリーンアップされてしまっている、という事態になる恐れがあるからです。


## まとめ
シングルトンパターンの欠点の中には、工夫次第で回避可能なものもありますが、それによってコードが複雑化してしまいます。しかし、シングルトンパターンを選ばなければ、そういった心配は不要です。

シングルトンパターンは、必要なインスタンスが絶対に1つだけであると確信できるクラス以外では使うべきではありません。また、シングルトンをグローバルアクセスポイントとすることも避けるべきです。どこからアクセスされるかわからないグローバルアクセスポイントは好ましくありません。

シングルトンへの直接のアクセスは、あらかじめ決められたごく少数の箇所からのみ行うべきです。他のコードからは、インタフェースを通じてアクセスするようにします。
そして他のコードは、そのインタフェースを実装するのがシングルトンなのか、他の種類のクラスなのかを意識する必要がありません。つまり、シングルトンに依存しない設計になります。これにより、ユニットテストの障害となる依存関係が生じることを防ぎ、保守性も向上します。

今後、シングルトンの実装やシングルトンへのアクセスを検討する際には、ここで述べたようなことをじっくりと考えてみてください。
Extend VM volume size without rebooting VM

# Extend VM volume size without rebooting VM

- ディスクを追加してVM再起動なしに認識させる方法( echo "- - -" > /sys/class/scsi_host/host#/scan あたり)も紹介されてますが、既存のディスクを拡張する方法が簡単そうなのでこちらを選択。LVM に足すのでね…

## Before
```
# fdisk -l /dev/sdc
ディスク /dev/sdc: 15 GiB, 16106127360 バイト, 31457280 セクタ
ディスク型式: Virtual disk
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x4eb35aa3

デバイス   起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/sdc1           2048 10485759 10483712     5G 8e Linux LVM
```

## vSphere 側で既存のハードディスクを拡張
## Rescan
```
# echo 1 > /sys/block/sdc/device/rescan
```

## After
```
# fdisk -l /dev/sdc
ディスク /dev/sdc: 30 GiB, 32212254720 バイト, 62914560 セクタ
ディスク型式: Virtual disk
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x4eb35aa3

デバイス   起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/sdc1           2048 10485759 10483712     5G 8e Linux LVM
```
## fdisk で拡張後
```
# fdisk -l /dev/sdc
ディスク /dev/sdc: 30 GiB, 32212254720 バイト, 62914560 セクタ
ディスク型式: Virtual disk
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x4eb35aa3

デバイス   起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/sdc1           2048 10485759 10483712     5G 8e Linux LVM
/dev/sdc2       10485760 62914559 52428800    25G 8e Linux LVM
```

## ついで (LVM 拡張)
```
# vgs
  VG #PV #LV #SN Attr   VSize   VFree
  rl   4   5   0 wz--n- <49.40g    0

# pvcreate /dev/sdc2
  Physical volume "/dev/sdc2" successfully created.

# vgextend rl /dev/sdc2
  Volume group "rl" successfully extended

# vgs
  VG #PV #LV #SN Attr   VSize  VFree
  rl   5   5   0 wz--n- 74.39g <25.00g
```
```
# df -hT /docker-data
ファイルシス                タイプ サイズ  使用  残り 使用% マウント位置
/dev/mapper/rl-docker--vol1 xfs      5.0G  2.8G  2.3G   55% /docker-data

# lvextend -L +5G /dev/rl/docker-vol1

# xfs_growfs /dev/mapper/rl-docker--vol1

# df -hT /docker-data
ファイルシス                タイプ サイズ  使用  残り 使用% マウント位置
/dev/mapper/rl-docker--vol1 xfs       10G  2.8G  7.2G   28% /docker-data
```
Excel VBA 最終行取得 使い方具体例

最終行を end(XlUp)で取得して、指定したセル範囲を ClearContents メソッドでセルの値を消すときの具体例
自分メモ

C列の最終行を指定
```vb

Sub セル範囲を削除()

Dim LR As Long
Dim ws As Worksheet
Set ws = Sheets("Sheet2")

LR = ws.Cells(Rows.Count, 3).End(xlUp).Row

ws.Range(Cells(2, 2), Cells(LR, 3)).ClearContents

End Sub
```
![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812230/d6905be4-8ce5-8824-9f00-27ff7d730211.png)
質問の仕方・答え方

# 概要
社会人として大事なことは様々ありますが、コミュニケーション能力は非常に重要です。
その中でも、**適切な質問の仕方とそれに対する適切な答え方**は、良好な関係を築く上で欠かせません。
今回は**正しい質問の仕方・答え方**について、これから社会人になる方も、社会人の先輩方も共に学んでいきましょう！！

# 目次

・ [質問の仕方](#質問の仕方)
・ [質問の答え方](#質問の答え方)
・ [まとめ](#まとめ)

# 質問の仕方
   まずは質問の仕方です。以下3点に注意して質問することを心がけましょう！

1. **具体的で明確な質問**
:::note alert
(悪い例)
「昨日のあの件ってこの間の感じでやっちゃっていいですか？」
:::
あの、この等の具体性のない質問は、回答者も何をどれ程の粒度で答えるべきか困惑してしまうため問題や疑問点を具体的に示し、わかりやすい形で質問をすることが大切です。
(私自身は特にこの点が上手くできておらず諸先輩方にご迷惑をお掛けしてしまうことが多いです、、、)

2 . **事前の調査と情報共有**

:::note alert
(悪い例)
「3Dプリンタってどうやってプリントすれば良いですか？」
:::

何も調べない状態で質問するのではなく、自分でできる限りの調査や情報収集を行い、それを共有することで、時間をとっていただいている相手に失礼もないですし、適切なアドバイスや解決策を提供してもらいやすくなります。

3 . **わかりやすい言葉と文脈**

:::note alert
(悪い例)
「anycubic mega-sではUltimaker Curaを使用してOBJのデータをプリントできますか？」
:::

この質問では何が何だかわかりません。
調査した結果、相手が知らない様な専門用語や技術用語が出てくることが多くあります。その用語等を相手が理解できる程度噛み砕いた言葉を使い、文脈を考慮して質問内容を説明することでより円滑なコミュニケーションをとることができます。

以下3点のポイントを踏まえた良い質問の具体例です。

:::note info
(良い例)
「昨日お話した3Dプリンタの件について、社内にあるanycubic mega-s(*1)のマニュアルを読み込みました。
その結果、プリントするために必要なスライサソフト(*2)としてUltimaker Curaというソフトを使用しようと考えております。
そこで質問なのですが、"OBJ"ファイル(*3)のデータは印刷可能でしょうか。ご教示をお願い致します。」

*1.3Dプリンタの型番
*2.3Dデータを3Dプリンター用のデータに変換できるソフトのこと
*3.ファイルのフォーマット
:::

# 質問の答え方
次は質問の答え方です。以下3点に注意して解答することを心がけましょう！

1 . **明確な回答**

:::note alert
(悪い例)
「このエラーはなぜ発生したの？」
「すみません。何かがうまくいかなかったみたいですね。」
:::

この回答では何も分かりませんね。
質問に対して明確かつ適切な回答を提供することが重要です。回答は簡潔でありながら、質問者の疑問を解決し、必要な情報を提供する必要があります。

2 . **詳細な説明**

:::note alert
(悪い例)
「このエラーはなぜ発生したの？」
「条件分岐の処理が不足しているようです。」
:::

回答には詳細な説明が含まれるべきです。質問者が理解できるように、関連する背景情報や具体的な手順、注意事項などを提供することが重要です。これにより、質問者が問題を理解し、適切に対処できるようになります。

3 . **アドバイスや提案**

:::note alert
(悪い例)
「このエラーはなぜ発生したの？」
「このエラーは、特定の入力値が正しく処理されていないことが原因で発生しています。」
:::

ただ報告するのではなく適切なアドバイスや提案を提供することで、質問者が問題を解決するための手助けを行います。可能であれば、質問者がより良い結果を得るためのヒントやベストプラクティスを共有することが良いでしょう。今回の質問においては解決策を提案することが良い答え方と言えます。

以下3点のポイントを踏まえた良い回答の具体例です。

:::note info
(良い例)
「このエラーはなぜ発生したの？」
「まず状況として、プログラム実行中に「IndexError: list index out of range」というエラーが発生しました。
このエラーは、プログラムがリストの範囲外のインデックスにアクセスしようとした場合に発生します。
改善策として以下3点を考えております。
1. リストの長さを確認する
2. エラーハンドリングを追加する
3. インデックスの計算ロジックを見直す

以上よろしくお願いします。
」
:::

# まとめ
社会人として適切な質問の仕方とその回答方法をマスターすることは、仕事や人間関係の構築において不可欠です。私自身社会人になってから、より質問の仕方・答え方についての重要性を強く感じ、学ぶことが多々あります。具体的で明確な質問をすることで、的確な情報を得ることができます。また、率直で明確な回答を心がけることで、先輩・後輩、上司や部下と信頼関係を築くことができます。社会人として、常に丁寧で意味のあるコミュニケーションを心がけましょう。
# MySQL入門#1！！MySQLとは何か？【リレーショナルデータベース / PHPによるWebアプリケーション開発】

皆さんこんにちは、KoenigWolfです。今回は、私がMySQLについて学んだ内容をアウトプットする形で、MySQLの基本について解説していきます。

Twitterでよく見かけるのが、スクールや教材ではあまり触れられないけど、実際の開発現場では非常に役に立つスキルの一つがMySQLやSQLだということです。Gitと並んでこれらのスキルは、現場でよく使われる重要なスキルです。このシリーズでは、私が学んだことを共有し、皆さんと一緒にMySQLをマスターしていければと思います。

## シリーズの概要と注意点

今回の記事は入門的な内容で、次回から本格的にMySQLの使い方を学び、データを取得する方法などを学んでいきます。

### シリーズを見る際の注意点

このシリーズではMySQLを使って学習を進めていきます。私の環境はMacですが、PHPMyAdminを使ったMySQLの操作はMacでもWindowsでもほとんど変わりません。この記事ではMySQLのインストールやMAMPのインストールは終わっている前提で話を進めますので、まだの方はインストール方法について別の記事を参考にセットアップしてください。

## MySQLとは？

### データベースとリレーショナルデータベース

MySQLとはリレーショナルデータベース管理システム（RDBMS）の一種です。データベースとは、データを整理して扱いやすくするためのものです。データベースには階層型やリレーショナル型などの種類がありますが、リレーショナルデータベースは最も一般的に使われているものです。

### リレーショナルデータベース管理システム（RDBMS）

RDBMSは、データベースを管理するためのソフトウェアです。MySQLはその一つで、他にもOracleやPostgreSQL、Microsoft SQL Serverなどがあります。MySQLは無料で使えるため、多くのプロジェクトで利用されています。

現在、MySQLの権利はOracleが持っていますが、MariaDBというMySQLのフォーク（分岐）も存在します。MariaDBとMySQLは非常に似ており、基本的に同じように使えます。

## 次回以降の準備

ここから次回以降の学習の準備をしていきます。パソコンを使いますので、パソコンを用意してください。今回はMAMPを使って進めていきます。MAMPのコントロールパネルを立ち上げ、ApacheとMySQLをスタートさせてください。ブラウザはChromeを使います。PHPMyAdminに移動し、rootユーザーでログインしてください。

### MySQLで用意されているサンプルデータベースの使用

次回の記事では、MySQLで用意されているサンプルデータベースを使います。公式サイトからワールドデータベースをダウンロードし、PHPMyAdminのインポート機能を使ってインポートします。

インポートが成功すると、「インポートは正常に終了しました」と表示されます。rootユーザーでログインしていれば問題なくインポートできるはずです。次回はこのワールドデータベースを使ってデータを取得する方法を学んでいきます。

## 最後に

次回からは、SQLを書いてデータベースの操作方法を学んでいきます。SQLは非常に奥が深く、基礎から学ぶことで複雑なSQLも書けるようになります。応援のコメントや高評価、SNSでの拡散をよろしくお願いします。では、次回の記事でお会いしましょう。さよなら。
React 19 の 新機能 useFormStatus を触ってみた

# はじめに
この記事では、React 19 で新たに追加された `useActionState` という hook で簡単な実装を行い、その動作を確認してみます。

https://react.dev/reference/react-dom/hooks/useFormStatus

# 開発環境
開発環境は以下の通りです。

- Windows 11
- VSCode
- JavaScript
- React 19.0.0-rc-cc1ec60d0d-20240607
- Vite 5.2.0
- Node.js 20.14.0
- npm 10.8.1

また、React 19 RC のインストール方法については、以下の記事に記載しています。

https://qiita.com/Yasushi-Mo/items/027503cbe4b299d99bed

# `useFormStatus` の実装

```
const { pending, data, method, action } = useFormStatus();
```

`useFormStatus` では、実行ステート、アクション実行時のフォームデータ、`<form>` タグの `method` prop （`get`、`post`）、`<form>` タグの `action` prop といった各種ステータスの取得ができます。

```App.jsx
import { useState } from "react";
import { useFormStatus } from "react-dom";

function FormButton() {
  const { pending } = useFormStatus();
  console.log("🚀 ~ App ~ pending:", pending);

  return (
    <button type="submit" disabled={pending}>
      Like
    </button>
  );
}

function FormWithUserFormStatus() {
  const [likeCount, setLikeCount] = useState(0);
  console.log("🚀 ~ App ~ likeCount:", likeCount);

  return (
    <form
      action={async () => {
        const response = await fetch("https://example.com/like", {
          method: "POST",
          headers: {
            Accept: "application/json",
            "Content-Type": "application/json",
          },
          body: JSON.stringify({ likeCount }),
        });
        const jsonResponse = await response.json();
        setLikeCount(jsonResponse.likeCount);
    >
      <strong>Like: {likeCount}</strong>
      <hr />
      <FormButton />
    </form>
  );
}

export default App;

```

:::note warn
`useFormStatus` は `<form>` タグの内側で呼び出す必要があります。
以下のように`<form>` タグの外側で呼び出すと、正しいステータスが取得できず、`null` が返ってきます。

```App.jsx
function App() {
  const { pending } = useFormStatus();
  console.log("🚀 ~ App ~ pending:", pending);

  return (
    <form action={action}></form>
  );
}
```

:::

# 動作確認
Like ボタンをクリックして、`action` 内の処理が開始されると、`isPending` が `true` になります。処理が完了すると、`isPending` は `false` になります。

![Vite-React-Google-Chrome-2024-06-13-22-15-38.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318188/e8d6c6a5-58c3-c293-9a2f-53ec56d3c048.gif)

# 所感
`useActionState` で事足りそう。

https://qiita.com/Yasushi-Mo/items/184d46d7d877df698c9e

# 参考
- [React 19 RC](https://react.dev/blog/2024/04/25/react-19)
- [useFormStatus](https://react.dev/reference/react-dom/hooks/useFormStatus)
- [\<form>とアクション](https://zenn.dev/uhyo/books/react-19-new/viewer/form-action)

# 関連記事
https://qiita.com/Yasushi-Mo/items/027503cbe4b299d99bed

https://qiita.com/Yasushi-Mo/items/184d46d7d877df698c9e

https://qiita.com/Yasushi-Mo/items/abaddd44b92ba007e0c7
iPhoneウィジェットで個人開発のモチベーションを1mm向上する

iPhoneウィジェットで個人開発のモチベーションを1mm向上する

## はじめに
みなさん個人開発進んでいますか？
個人開発は、自分のアイデアを形にすることができるので、とても楽しいですよね。
しかし、個人開発を進めていく中で、以下のような悩みを抱えていませんか？
『モチベーションが続かない』

### そんなあなたに
そんなあなたに、iPhoneウィジェットで個人開発のモチベーションを1mm向上する方法をお伝えします。💪
[iScreen](https://apps.apple.com/jp/app/iscreen-%E3%83%9B%E3%83%BC%E3%83%A0-%E3%83%AD%E3%83%83%E3%82%AF%E7%94%BB%E9%9D%A2%E3%82%A6%E3%82%A3%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88%E7%BE%8E%E5%8C%96%E3%82%A2%E3%83%97%E3%83%AA/id1534704608)というアプリを使って、ロック画面やホーム画面に戒めの言葉を表示させることで、モチベーションを維持することができると思います。(個人差あり)

### 手順
iScreenをダウンロードして、設定を行います。
iScreenホーム画面からお好きなウィジェットを選びます。
![IMG_1436.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403148/1f051d9b-c6b9-eedc-5d2e-4f0ff304e993.png)

文字の設定をして...📝
![IMG_1437.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403148/a64600c8-637b-e761-c4fd-f89e5cf60369.png)

配置します。🚜💨
![IMG_1435.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403148/2e9d2ce4-89ea-d82c-ab26-246a0f1285c3.png)

ロック画面にも配置できます...🔒
![IMG_1434.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403148/c271d2b8-e5a0-0af4-c8de-2ab9dfc7b2bc.png)

これで、モチベーションが1mm向上しました！(多分)🎉

## まとめ
個人開発のモチベーション維持はとても大変であることを日々痛感しております。
些細なことでも、モチベーションを維持するためには、行動を起こすことが大切だと思います。
今回の手法を使って、モチベーションを1mm向上させることができたら幸いです。😆
リンク層の役割とネットワーク機器

# リンク層の仕事

復習：TCP/IPモデルとは？
TCP/IPとは、インターネットを含む多くのコンピュータネットワークにおいて、世界標準的に利用されている通信プロトコル（手順や規約）のことです。
私たちがインターネットでWebページを見るときに利用するプロトコルは、TCP（Transmission Control Protocol）とIP（Internet Protocol）を利用しています。


**TCP/IPモデルのリンク層（ネットワークインターフェイス層）は
物理層（レイア１）、データリンク層（レイア２）に相当する。**

**役割**
①データを電気信号に変換
②同じネットワークに接続されたコンピュータを識別し、特定のコンピュータへデータを送信する

データを電気信号に正しく変換するために、リンク層では、データ伝送に必要なハードウェア（ケーブルやネットワークカード）を制御する。

## ケーブルの種類
**ツイストペアケーブル**
LANケーブルと呼ばれる。８本の導線を２本ずつより合わせたケーブル。

●UTP/STP
電磁ノイズを遮断するシールド加工を施したツイストペアケーブル。
STP(Shielded Twisted Pair)と呼ばれ、ノイズが多く発生する工場や研究所で使用される。がSTPは高価なため、一般的にはシールド加工なしのUTP（Unshilded Twisted Pair）を使用する。

●コネクタ
ケーブルの末端に取り付けられている部品をコネクタという。
コネクタを使うことで、ケーブル導線とPCやネットワーク機器の接続を容易にできる。

●ケーブルカテゴリ
ツイストペアケーブルは対応している規格によってカテゴリに分けられています。それぞれ、適合する通信速度や周波数が異なり、カテゴリ名に含まれる数字が大きいほど品質が高く、1秒あたりに送信できるデータ量も多いため高速通信が可能になります。

低速
100Mbps（CAT5）
↓
↓
↓
高速
40Gbps(CAT8)

●最大ケーブル長
UTPケーブルの最大長は基本的に１００メートルとされています。

**光ファイバーケーブル**
ガラスの中に光を閉じ込めて伝送する通信ケーブル。光を伝播する中心部分の「コア」とその周辺を覆う「クラッド」という２種類の素材で構成されている。

コアに差し込んだ光は、特定の角度で反射を繰り返しながら進んでいく。伝搬される光の通りのことをモードと呼ぶ。

●シングルモードファイバ
コアの怪が小さく、１つのモードしか通らない光ケーブル。光信号に歪みや分散がないため、高品質で安定した通信が可能です。長距離通信向き。

●マルチモードファイバ
複数のモードを通す光ケーブル。信号の伝搬に歪みが生じるため、シングルモードファイバに比べると伝送損失が大きい。価格が安価。近距離向き。

## イーサネット
**イーサネット**
TCP/IPモデルのリンク層に対応した規格。同じネットワークに接続されたイーサネット機器同士でデータをやり取りするための取り決めをしている。


●MACアドレス
MACアドレスはイーサネットや無線LANにおいてフレームの送信元や宛先を特定するためのアドレス。48ビットで構成され、次のルールで割り振られている。

●MACアドレスの表記
２進数ではなく１６進数で表記されています。

●MACアドレスの種類
・ユニキャストMACアドレス・・・「１対１」の通信に使用
・ブロードキャストMACアドレス・・・「１対全」の通信に使用
・マルチキャストMACアドレス・・・「1対n」の通信に使用

●CSMA/CD
イーサネットでは、通信を制御する方式として、CSMA/CDを使用している。

●CSMA/CDの動作
①ケーブルの空きを確認
データを送ろうとするホストは、ケーブル上に信号が流れていないことを確認。

②同じ回線を共有しデータを送信
複数のホストは同じケーブルを共用し、ケーブルの空きが確認できるとデータの送信が開始できます。

③衝突（コリジョン）を検出
１本のケーブル上に同時に送信された信号は衝突し、壊れてしまう。この電気信号の衝突をコリジョンという。コリジョンを検出したホストは、すべてのホストに衝突をジャム信号で知らせます。

④ランダムな時間待ってからデータを再送信
コリジョン発生時にデータを送信していたホストは、コリジョンを検出するとデータの送信を停止し、ランダムに設定された時間を待機してからデータを再送信する。
バックオフというアリゴリズムによって、待ち時間をランダムにすることで再送信のタイミングをずらし、再度衝突することを回避する。

# ネットワーク機器
 **スイッチ機能**
 MACアドレスを利用してデータを転送処理を行う集線装置のことをスイッチと言います。スイッチは、リンク層で動作する機器です。

 ●バッファ
 データを転送するときにデータを一時的に格納すること、または格納しておく場所を示す。

 ●バッファリング機能
 一般的なスイッチは、受信フレーム全体を一旦バッファに溜めて、フレームの末尾にあるFCSでエラーチェックを行います。エラーがなければ、転送処理を実行します。このような転送方式をストアアンドフォワードといい、これを可能にする機器をバッファリングという。

 ●全二重通信
 データ送信と受信を同時に行うことを全二重通信と言います。反対に、データの送信と受信を同時に行うことができず、切り替えて行うのは半二重通信です。

 ●MACアドレスの学習
 スイッチはMACアドレステーブルと呼ばれるデータベースを保持しています。このテーブルには、各スイッチのポートとその配下に接続されているホストのMACアドレスが記録されています。スイッチは、受信したフレームの宛先MACアドレスをもとに、 MACアドレスデーブルを確認して該当するポートにだけフレームを転送する。
スイッチがフレームを転送する時の動作は次の通りです。

①MACアドレスAを持つホストがD宛てにデータを送信しました。
②スイッチは受信したフレーム送信元MACアドレスを読み取り、そのアドレスをポートに関連づけてMACアドレステーブルを登録。
③フレームの宛先MACアドレスを読み取り、一致するアドレスがあるかどうかMACアドレステーブルを調べる。
④該当したポートのみフレームを転送（フォワーディング）する。

**コリジョンドメイン**
コリジョンドメインとは「データの衝突が起こる範囲」のことを言います。このコリジョンドメインは、集線装置としてスイッチとハブ（リピータハブ）のどちらを使用するかによって大きく異なります。

●ハブを使った場合のコリジョンドメイン
ハブとは...
複数のホストをケーブルで接続し、データを中継する物理層の機器です。

ハブとホストの間では、ツイストペアケーブルの構造から、ケーブル上で信号の衝突は起こりません。しかし、ハブは同時に２つのポートから電気信号を受信すると処理することができないのです。そこで、ハブの内部にあるコントローラでは、次のルールに従ってコリジョンを擬似的に作り出しています。

●スイッチを使った場合のコリジョンドメイン
集線装置にスイッチを使ったときの動作を見てみましょう。
スイッチは、複数のホストをケーブルで接続し、データを中継するリンク層の機器です。
【第2回】せや！自宅サーバーと業務用ルーターを導入したろ！

この記事は下記記事の続きです。

https://qiita.com/ogatomo21/items/1cecb9a1a3595670d84e

## で？業務用ルーターだから何がいいんだ？
そりゃ同じだったら安い方を選んでます。ちゃーんと理由はあります。

### その1. 処理速度が早い(たぶん)
どっかで業務用ルーターは何十台で24h365dの連続使用を想定して作られているし家庭用ルーターと違いWi-Fiなどがない分ルーター機能に全振りしてるらしいです。(知らんけど)

### その2. 設定変更の際に再起動がほぼいらない
上記と同じような理由で1秒たりとも千切れるわけにはいかないため、ポート開放などの設定変更の際にいちいち再起動がいりません！Softbank光の光BBユニットはいちいち再起動がいるうえ2分くらいネットがつながらなくなります。

### その3. VPN機能がついている
家庭用ルーターには絶対にないし絶対に使わないであろうL2TP/IPsecのVPNが搭載されています。
しかしAndroid11くらいからL2TP/IPsecの新規追加ができなくなったので自宅サーバーにTailscaleを導入して代用しています。なんならこっちの方が汎用性高い。

## 肝心の速度は？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518724/cb32c0e7-05ad-1d8d-2eb7-6ad7d412e6a5.png)
有線LANで結果は**下り・上りともに520Mbps**となりました。
あれ光BBのルーターでWiFi6接続した方が早i((ロマンだよ悪いか
ソフトバンク光が特殊なせいで私の環境ではv6プラスのようなあーゆーやつは使えないのですがIPv6ブリッジを設定したのでIPv6での通信はできます。

## ルーター夜景
![1718181871474.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518724/01ec2362-8795-a7c7-10b6-66f075e1d133.jpeg)
ちなみに電気を消してカメラの設定をいろいろいじることで工場夜景っぽい光が玉ボケしたいい感じの写真を撮ることができます。ちなみに意味はないです。

## まとめ
次回第3回　自宅サーバー編へ続く...

https://qiita.com/ogatomo21/items/9eea324cff3379af87bc
Visual Studioから実行時、コンパイルエラーでも実行するかを尋ねるダイアログを止めたい

これを出なくします。コンパイルエラー時はそもそも実行したくないことが多いためです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66160/8e40c677-fc90-6080-5bae-bed6df1ce1fb.png)

Option -> Projects and Solutions -> Build And Run -> On Run, when build or deployment errors occur: を、Do not launch に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66160/599c4779-9868-ee3d-bfdf-6e6d3c9c03cf.png)
EC2に設置したDB(MySQL)をRDSへ移行した時のコマンドのメモ


### 前提条件
- 移したいRDSは起動済みである
- OSはAmazonLinux2を利用

```PHP
//EC2からRDSにルートユーザでログイン
//adminはRDS作成時デフォルトのルートユーザ名
$ mysql -u admin -p -h RDSのエンドポイント

//mysqlログイン中
//移行するDBと同じ名前のDBを作成
CREATE DATABASE データベース名;
//DB用のユーザ作成＆権限付与
CREATE USER 'ユーザ名'@'%' IDENTIFIIED BY 'パスワード';
GRANT SELECT,UPDATE,DELETE, INSERT, CREATE, DROP, INDEX, ALTER, LOCK TABLES, EXECUTE, CREATE TEMPORARY TABLES, TRIGGER, CREATE VIEW, SHOW VIEW, EVENT ON データベース名.* TO 'ユーザ名'@'%';
//いったんログアウトする(exitとかctrl+dで抜けたはず…)

//既存のDBからdump.sqlを作成
//この時に既存DBのユーザ名とパスワードが必要。今回はルートユーザで行った。
$ mysqldump -u root -p データベース名 > dump.sql 

//RDSにdump.sqlをインポート
//この時にRDS側のユーザ名とパスワードが必要。RDSのルートユーザで実行
$ mysql -h RDSのエンドポイント -P 3306 -u admin -p データベース名 < dump.sql

//最初に作成したDB用ユーザでRDSにログインし、移行できたか確認
//OKならば、旧DBサーバーは停止するなど必要な操作を行う
$ mysql -u ユーザ名 -p -h RDSのエンドポイント
SHOW DATABESES;
USE データベース名;
SELECT * FROM データベース名;
```

### 感想 
- 思ってたより簡単に移行できた。
- あっちこっちログインしたりユーザ作ったりして、今何のユーザを使っているのか、どこにログインしているのか混乱した。

### 参考
https://qiita.com/YK0214/items/0a7438eceb2b0472de8c

https://developer.so-tech.co.jp/entry/2021/11/15/200155
HTML5 プロフェッショナル認定試験（Level ２）受けてみた

とある動機から、「HTML5 プロフェッショナル認定試験（Level ２）」を受験しました。
試験内容に関する知識は、js を少し読めるくらいで他知識はほぼ 0 から始めました。(Level1 は持っていましたが内容が全く違う)
ちょっと頑張ったので備忘として残しておきたいと思います。

## 📝勉強方法

使用した教材は主に 3 つです。
web 問題集
・Udemy(HTML5 プロフェッショナル 認定試験 レベル 2 模擬問題集)👈 本番くらいか少し易しい
・<a href="https://polaristation.com/">PolariStation</a>👈 易しめで基礎の基礎固めに最適

参考書
・HTML5 プロフェッショナル認定試験 レベル 2 対策テキスト＆問題集　 Ver.2.5 対応版 👈 分厚っ…
![2024-06-14 09_32_50-HTML5プロフェッショナル認定試験 レベル2 対策テキスト＆問題集.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788032/6b1ac2a1-0f3f-2226-5b12-fa4bf670092b.png)


教材は上記３つで十分だったように思います。
受験までは以下のような感じでした。
・準備期間：約３週間📅
・１日平均勉強時間：４～５時間⏰
・学習した順番：PolariStation⇒Udemy ときどき参考書に付いてる問題集

参考書の分厚さに初見で心折れそうになったため、
web 問題集を周回 ⇒ 解説を読み込む　作戦をとりました。
個人的に、 web 問題集は PolariStation と Udemy の併用をおススメします。

また、受験直前に<a href="https://html5exam.jp/measures/sample.html">公式サイトの例題</a>を見たところ、今までの問題集よりちょっと難しくてビビり散らかしました😨
本番の問題に近い、もしくは少し難しい くらいの内容だったため、こちらは目を通して理解しておくこと必須な気がします。

## 🏋️‍♀️いざ受験

私はテストセンターで受験しました。
本番では、４０問の設問に対して
web 問題集と似通ったものが３～ 4 割、詰め込んだ知識で正解を絞り込めたのが３割、初見のものが２割ほどでした。
すべて選択問題で、記述問題はありませんでした。
時間には余裕をもって終了でき、終了したらすぐ結果が表示されます。


## 🙈反省点
ほぼ問題集のみで勉強したため、本番の問題でちょっと深堀されたらヒェ…ってなりました。
短期間で最低限の知識を詰め込むには問題集のみでも十分良かったですが、やはりちゃんと身に付けるという意味では参考書を理解して読み込むべきでした(´・ω・)

## 🍜 〆

いろんな記事で皆さん仰っていますが、Level1 に比べて覚えることが格段に多くて苦労しました。
しかし、今までなんとなく使っていたjsの機能や仕様を、今までよりは理解できた(はず)と思います。
あと、これ 👇 が最初に言っていた動機です。Level1 と Level2 をそろえると合体する粋なデザイン...!
今どき HTML なんて、、、って声もありますが、これがしたくて受けたまであります(・∀・)

![20240613.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788032/ffae5595-2fb8-9019-9773-667806d52766.png)
買って得したアイテムたち【エンジニア1年目】

## 買える得は買っておきたい

良いエンジニアライフを送れるように色々課金してみましたが、1年間で **「これは買ってよかった」** と思うアイテムを記述します！

かなり初歩的な話になっているので、新人の方の参考になれれば嬉しいです。
オススメのアイテムがあればぜひお願いします。

## 業務直結編
### ・ロジクール ワイヤレスマウス トラックボール

これが一番買って正解と感じました。

元々会社から支給されたマウスを使っていましたが、手首が弱くてすぐ痛くなるためマウス購入を検討。せっかくならトラックボールを試したいと使ったところ、私には大ヒットしました。

購入したのはコチラ↓

https://item.rakuten.co.jp/logicool/m575gr/?iasid=07rpp_10095___el-lxdwg3pg-eq-a0c11669-f44c-4a7c-ad1a-5b2e48e6ee11

https://www.amazon.co.jp/dp/B08L51XVLF?tag=tn-trackball-mouse-white-white-22&linkCode=ogi&th=1

自分の気分が上がる物ということで、色をホワイトに絞って探しました。
知識がないため安心安全っぽいロジクール、その中でホワイトがあるトラックボールマウスはこれしかなかったのでこれにした感じです。
※2024年6月14日時点、検索で確認しましたが誤りがあるかもしれません。

#### 良いところ
・手首が痛くならない！（親指も今のところ無事）
・マウスを動かさなくていいので、机がごちゃごちゃしていてもノンストレス
・電池が全然減らない（1年弱経ちますが無問題）
・気分が上がる、なんか仕事ができる気分になる

#### もっと性能が良いやつの方がいい？
ホワイトカラーだと種類限られますが、黒でもよければもっと色々な種類があり、機能が多いものもあります。

個人的には、 **「機能が多くても使いこなせず、もったいない」** ので今の物で満足です。

バリバリコンピューターに慣れていてステップアップを目指す方なら別ですが、ショートカットもよくわからない初心者の状態で多機能の物に課金する必要はないんじゃないかなと思っています。

ただ、自分の気分が上がる物が一番です。

### ・中古のモニター
自宅でリモートワークする用のモニター、買おうとすると結構高いんですよね……。
私は「中古パソコン情報会館 楽天市場店」で購入し、1万円弱に収まりました。

https://www.rakuten.co.jp/mediatorconnect/

※特にこの販売元が良いとかはないです。

**HP N246v 23.8インチ 9,980円**
商品ページは消えてしまっているので情報だけ……。
傷もなく、全然中古とは感じさせない物が届きました。

直接触ることもほぼない物なので、他のアイテムと比べて中古の嫌悪感が薄いのではと思います。

スペックだけある程度決めて検索をかければ中古の商品も出てきます。
どうしても新品が良いわけでなければお金を抑えられるポイントです。

## 健康推進編
### ・持ち運べるクッション

これは研修中、毎日持って行っていました。

履歴がなかったので類似商品です。

https://item.rakuten.co.jp/hayaritsushin/kujo-gelcushion/

当社は社外の研修所でミッチリ研修を行うスタイルなのですが、研修所の椅子が固すぎて初日に腰痛を発症。
元々腰痛持ちではあったのですが、一日中座りっぱなしの状態に耐えられませんでした。

（腰痛に関する記事もぜひ……。）

https://qiita.com/redwings_a/items/95b0a00e4de78107f1b0


クッションがあるだけでかな～り改善！少なくとも一日は座っていられます。
**悪化する前の対策をオススメします。** 健康は大事です。

いつか椅子にも課金したいですね。

### ・ブドウ糖
すぐ頭が疲れて集中力が切れるので、ブドウ糖を大量購入しました。

https://item.rakuten.co.jp/sapri-bk/4901922713008-6/

一時期inゼリーのブドウ糖が流行っていたかと思います。あれも試しましたが特に効果は感じず……。
だったらただのブドウ糖の方が、無駄な摂取がなくて良いのでは？と購入。

正直このブドウ糖も集中力改善に役立っているかはわかりませんが、気持ち的にあると安心なので載せます。

## より良い勤務環境を！
買える得は買って、なるべく良い勤務環境を目指していきましょう。
今後も良いアイテムを見つけたら記述したいと思います。
新入社員研修を受けて

## はじめに

今日は株式会社オーイーシーの新入社員教育を若林さんから受けた。

技術的な部分の成長を促すための研修ということで最新の動向を含めてお話いただいた。

## 講義内容

### 世界の動向を知る

世界の動向を知るために術として、

[stackoverflow][stack]

というサイトを教えていただいた。

利用者が欧米の20~30代が中心ということだが、

今後参考にしていきたいと思う。

### コミュニティに参加しよう

- 若林さん自身が参加されているコミュニティ

  * AWS勉強会　[イベントページ][AWS]
  * プロジェクト管理勉強会　[イベントページ][project]

他にも多数のイベントに参加し、積極的に知見を広げているとのことで、

自分も積極的にコミュニティに参加し、自ら知識を増やしに行かねばと感じた。


### 開発言語

- 開発言語の人気
  * javascript
  * HTML/CSS
  * python
- エンジニアからのウケがいい言語
  * RUST
  * Elixir
  * Zig

開発言語の需要や拾得者の数に応じて収入にも差がある

→新しい言語を学ぶなど、意欲的に学習することの大切さを感じた


### AI活用

AI活用ツールは近年すごく期待されている。

検索ではchatGPT

開発ではGitHub Copilot

がそれぞれユーザーからの支持を得ている。

実際にchatGPTの機能に触れてみたりもした。

どちらも過去に触れた経験があり、

今後はもっと使いこなせるようになりたいと思う。


### 開発環境

開発環境としてVSCode

バージョン管理ツールとしてGitHub

をそれぞれインストールした。

拡張機能も多く、より扱いに慣れた　VSCode　にまた触れることができるのをうれしく思う。


### 開発体験

WEBフレームワークはPhoenixが人気

- クラウドプラットフォームの人気
  * AWS (49%)
  * Azure (26%)
  * Google Cloud (24%)


実習としてCloudflareのフリープランを活用してWEBサイトを公開

をする予定だったが、残念ながら今回は実習できなかった。


## 研修を経て

会社のトップエンジニアとして働く若林さんから

直接研修をしていただけたのは貴重な経験になったと思う。

特に今回は細かい技術面ではなく、

技術面で成長するためのツールを紹介していただく形になったので、

少しずつ学んで成長するための糧にしていきたい。


[stack]: https://survey.stackoverflow.co/2023/
[AWS]: https://jawsug-oita.doorkeeper.jp/events/173353
[project]: https://jbug.connpass.com/event/318851/
MacにおけるWindowsのアプリケーションキーの実装

# はじめに

Mac Bookを使用していて、Windowsのようにワンクリックでコンテキストメニューを表示できるアプリケーションキーが欲しいなと思い、調べて実施したことをこちらに記載します。

この実装をすることで、<b>キーボードから一旦離れて、トラックパッドで二本指のクリックするという煩わしい移動から脱却できます</b>。全て、キーボード上で完結しますから。

ここでは、fnキーをアプリケーションキーにします。

# ソフトウェアインストール

Karabiner-Elementsが必要なので、こちらの記事を参考にインストールしました。

https://qiita.com/TSY0SEC/items/fff6d9b0768882355493

常時、バックグラウンドでアプリを実行している必要があります。

# 実装

## 実際の挙動

fnを一回短くクリックすると、アプリケーションキーになります。
ですが、fnキーを押しながら例えばBackSpaceを押すと、元の挙動どおりdeleteキーになります。

## ソースコード

Karabiner-Elementsを開いていただき、「Complex Modifications」をクリックします。

その後、「Add your own rule」をクリックします。

そこに下記のコードを入力します。

```
{
    "description": "Map fn to Right Click when pressed alone",
    "manipulators": [
        {
            "from": {
                "key_code": "fn",
                "modifiers": {
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "fn"
                }
            ],
            "to_if_alone": [
                {
                    "pointing_button": "button2"
                }
            ],
            "type": "basic"
        }
    ]
}
```


これで完了です。お疲れ様でした。



# おわりに

同様の機能を実装するために、何かもっといい方法、簡単な方法があれば、教えてください。

よろしくお願い致します。

以上です。
最後までお読みいただき、ありがとうございました！
エラーハンドリングを重視した機能開発

# はじめに

設計の時点でエラーハンドリングの意識はできていますか？
読みやすくてバグを拾いやすいコーディングをすることで、レビューもしやすくなりますし、非機能要件の考慮もできます。ここでは、そんなことについて触れています。
駆け出しの人に向けた記事になっていますので、優しいマサカリはいつでもお願いします。
# 何がおいしいの？
これで実装するととりあえず
1. セキュリティ
1. 保守性
1. 可読性
1. テスト性
1. 例外処理の正確さ

が担保できると思います。

# 内容
処理に入る前に異常値はすべて弾くという記述法です。
メリットとしては、
①テストしやすい（正常系以外が拾いやすい）
②処理に余分な例外がなくなり読みやすい（例外処理がわかりやすい）
③レビューしやすい（設計書に照らし合わせやすい）
などがあると思います。

## コード例
あくまで一例ですが、このようなコーディングができます。
```
method A(int num, String str){

 //セッション情報の確認
 セッション確認
 
 //num値の確認
 if(num == null) {エラー処理1};//nullはだめ
 if(num <= 0){エラー処理2};//0以下はだめ
 if(num > 3){エラー処理3};//1,2,3以外だめ
 
 //num値OK、str値の確認
 if(str == null){エラー処理4};//nullはだめ
 if(str.equal("")){エラー処理5};//空文字はだめ
 
 //str値OK、処理
 if(num == 1){
  //処理１
 }else if(num == 2){ 
  //処理２
 }
}
```
処理に入るころには入力値系の例外はすべて拾えている
といった寸法です

#おわり
このようなコードがのちに書かれることを想定して設計することで、後工程でもメリットが得られます。
詳細設計レベルでは落とし込みができますが、基本設計レベルでは粒度の問題でできないので、コーディング規約で縛るのもアリかもしれませんね。
Nuxt 3.12.1 の useState の不具合

# 例

こんな簡単なコードでも正常に動かない

```vue
<script setup lang="ts">
const counter = useState('counter', () => 0)
</script>

<template>
  <div>
    Counter: {{ counter }}
    <button @click="counter++">+</button>
    <button @click="counter--">-</button>
  </div>
</template>
```

# 暫定解決

`plugins/payload-reactivity.client.ts`  ファイルを以下の内容で作成すると動くようになった

```ts
export default defineNuxtPlugin(nuxtApp => {
  const payload = nuxtApp.payload

  for (const key in ['_errors', 'data']) {
    if (!isReactive(payload[key])) {
      payload[key] = shallowReactive(payload[key])
    }
  }

  if (!isReactive(payload.state)) {
    payload.state = reactive(payload.state)
  }

})
```

# 正式対応

次のバージョンを待つのが良さそう

# Issue

https://github.com/nuxt/nuxt/issues/27536



# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura
Rancher Desktopが起動しない ( Unix domain socket )

# TL;DR
再起動をしたらエラーが解消しました。

# Detailed
OS I use is Ubuntu 22.04, Rancher Desktop Version is Version: 1.14.0.
I meet the following error on [Rancher Desktop](https://rancherdesktop.io) UI:

```shell
'--tty=false',
    '0'
  ],
  stdout: '',
  stderr: 'time="2024-06-14T07:49:28+09:00" level=info msg="Using the existing instance \\"0\\""\n' +
    'time="2024-06-14T07:49:28+09:00" level=fatal msg="errors inspecting instance: [failed to get Info from \\"/home/**/.local/share/rancher-desktop/lima/0/ha.sock\\": Get \\"http://lima-hostagent/v1/info\\": dial unix /home/**/.local/share/rancher-desktop/lima/0/ha.sock: connect: connection refused]"\n',
  code: 1,
  [Symbol(child-process.command)]: '/opt/rancher-desktop/resources/resources/linux/lima/bin/limactl start --tty=false 0'
}
```


## What I did

### 1. Understand error logs

This error says about lima at least. What is lima?
Lima is virtual machine (The official site: https://lima-vm.io ).

In addition to this, I cannot understand what is `.sock`
`.sock` may be a socket file used for UNIX.

- Reference: 
  - [sockets - What are .sock files and how to communicate with them - Stack Overflow](https://stackoverflow.com/questions/52599848/what-are-sock-files-and-how-to-communicate-with-them)
  - [UNIX domain socket tutorial](https://systemprogrammingatntu.github.io/mp2/unix_socket.html)

I start to understand what error says. 

However, I cannot understand why and when Rancher Desktop use UNIX domain socket.

I searched for the Internet but I cannot find a similar error, so I cannot understand what causes this error.

I moved to the Next Step.

### 2. Restart my PC

I think this error occurs from the inner side of rancher desktop.

First, I restarted rancher desktop apps, but error log cannot change.
So I restarted my desktop PC.

My error dissapears.
IBM i の実用的なSQLサンプル② 雑多なサンプル （システム応答リスト関連）

[こちらの記事](https://qiita.com/drafts/4c4c306746d5ed8765b5/edit)の続編です。
環境はIBM i 7.5を使用しています。

■今回ご紹介するサンプル一覧表


| どこから？ | SQLのカテゴリ | SQLサンプル | 操作内容 | |  |
|:-:|:-:|:-:|:-:|:-:|:-:|
| ACS  | 雑多なサンプル | CL ADDRPYLE | システム応答リストに自動応答させたいMSG IDを登録 |   |   |
| ACS  | 雑多なサンプル | CL CHGJOB INQMSGRPY(*SYSRPYL) | システム応答リストを参照するようにジョブ属性を変更 |   |   |
| ACS  | 雑多なサンプル | CL CHGJOB INQMSGRQY(*DFT) | システム応答リストの参照属性を元に戻す |   |   |
| ACS  | 雑多なサンプル | CL RMVRPYLE | システム応答リストからMSG IDを除去 |   |   |


## ACS SQLサンプル カテゴリー：Miscellaneous（雑多なサンプル）システム応答リスト関連

直訳ですみません^^;、よく使うであろうベーシックなサンプルが収められています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/e5045494-0077-8904-c857-927c91c5c176.png)

***[※システム応答リストの説明記事はこちらです。](https://www.i-cafe.info/column/serials/ibmionko_4)***

### CL ADDRPYLE
***システム応答リストに自動応答させたいMSG IDを登録***
```
CL: ADDRPYLE SEQNBR(3333) MSGID(CPA32B2) RPY(I);
```
コメント：上記のパラメーターは全て例です。実際必要なメッセージIDとその応答を入力します。SEQNBRは1OS上でユニークで、小さい番号から参照されます。
***実行例（CL ADDRPYLE）***：メッセージID CPA32B2 をシステム応答リストの3333番目に登録し、その自動応答は 'I' と指定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/5980e858-c3ae-2bb1-ccc8-eac7b28932af.png)

※メッセージID CPA32B2 はどんなときに発生する？
たとえばALTER TABLEでテーブル(PF)の属性を変更しようとした際、ワーニングとして出力されたりします。通常無視してよい場合も多くその際はメッセージ応答に 'I' を入力しないと処理が継続しません。この操作をシステム応答リストに登録するのがこのSQLサンプルです。

ただし、システム応答リストを参照する、しないはジョブ毎に属性を持っています。デフォルトでは参照しない、になっていることが多いため、次のサンプルが役に立ちます。


### CL CHGJOB INQMSGRPY(*SYSRPYL)
***システム応答リストを参照するようにジョブ属性を変更***
```
CL: CHGJOB INQMSGRPY(*SYSRPYL);
```
コメント：ジョブ属性 INQMSGRPYはシステム応答リストを参照する、しないを指定します。*SYSRPYLはシステム応答リストを参照するよう変更しています。


### CL CHGJOB INQMSGRPY(*DFT)
***システム応答リストをデフォルトに変更***
```
CL: CHGJOB INQMSGRPY(*DFT);
```
コメント：1つ上のサンプルと組み合わせて使う想定です。*SYSRPYLに変更したままだと別なメッセージIDへの自動応答を意図せずに参照してしまう可能性もあるため、参照させたい処理・コマンドが完了したら参照属性を元にもどします。サンプル *DFT はジョブ記述 *JOBD の照会メッセージ応答パラメーター INQMSGRPY などでジョブが開始時に設定されている属性を想定しています。環境によっては*DFT以外の値がINQMSGRPYパラメーターに指定されている場合もあると思いますので、ジョブ開始時の値に戻す、という操作で使用してください。

***参考：ジョブ記述 *JOBD のINQMSGRPYパラメーター
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/24f5e346-6e78-249f-eb9e-68a0d7eb8d03.png)


### CL RMVRPYLE
***システム応答リストからMSG IDを除去***
```
CL: RMVRPYLE SEQNBR(3333);
```
コメント：3333 は上のADDRPYLEの例と呼応したサンプルの番号です。実際のメッセージIDのSEQNBRを指定します。この操作でADDDRPYLEで追加したメッセージIDがシステム応答リストから除去されます。この操作も必須ではない、とも言えますが、自分のジョブが使用したいだけ、というようなシステム応答リスト登録は他のジョブに影響が無いように一時的な使用にする（ジョブ終了前に除去する）というのは適切な考え方です。
UnrealEngineのプロジェクトに配置したプラグインを無効化する

プロジェクトのPluginsフォルダに配置したプラグインを削除せずに無効化する方法を試したのでメモしておきます。

# 試した環境
UE5.3.2

# 試した内容

以下のようなプラグインをプロジェクトに配置しているとします。

 [プロジェクトのフォルダ]/Plugins/Hoge/Huga.uplugin

その場合は、uprojectに以下のように記述します。
SupportedTargetPlatformはHuga.upluginに記述がある場合は同じ内容を記述します（ない場合は記述しない）。

```json
"Plugins": [
  {
    "Name": "Huga",
    "Enabled": false,
    "SupportedTargetPlatform": [
      "Win64"
    ]
  },
]
```

これでプロジェクトを起動して確認するとプラグインが無効化されています。
モーダルを開いても正しい内容が表示されない！？

# はじめに
モーダルを開くボタンを複数表示させたのはいいけれど、どのボタンをクリックしてもモーダルに表示されるコンテンツが同じになってしまう…。そんな時はコンテンツを識別するidをモーダルに渡してあげよう！

# コードサンプル

```jsx

  const [loading, setLoading] = useState(false);
  const [hogeDatas, setHogeDatas] = useState([]);
  const [isModalOpen, setIsModalOpen] = useState(false);

    async function openModal(id) {
      setLoading(true);

      await UseAxios('get', 'hogehoge')
        .then(function (res) {
          if (res && res.data && res.data.response) {
            let d = datas.filter((data) =>
              res.data.response.dataIds.includes(data.id)
            );
            setHogeDatas(d);
            setIsModalOpen(true);
            setLoading(false);
          }
        })
        .catch(function (error) {
          console.log(error);
          console.log(error.response);
          setLoading(false);
        });
    }


  function Content() {
  //　モーダル内で表示させたいデータと対応するid
    return filterHoges.map((hoge) => {
      let idx = hoge.id;
    略
        onClick={() => openModal(idx)}
    }

  return (
    <Content></Content>
    )
```


# おわりに
idなどを渡してあげないと、非同期で取得し終わった最後のコンテンツがどのモーダルにも表示されることになります。