OmniAICreator/Qiita-1.07M huggingface dataset:
Ascorbic Acid Manufacturer in Delhi.

![hedron detergent (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932543/c1e7f1ce-1e06-3a99-855b-2bcab7b0144f.png)
At Akshat Rasayan, we are a leading manufacturer and supplier in Delhi, specializing in top-quality Ascorbic Acid, commonly known as Vitamin C. This versatile compound is vital in many industries due to its beneficial properties, such as its antioxidant and preservative functions.

We are dedicated to delivering high-quality Ascorbic Acid that meets industry standards. Our competitive prices help businesses maintain optimal performance without compromising on quality.

Whether you’re in the food, pharmaceutical, or cosmetic industry, our Ascorbic Acid ensures reliability and effectiveness in your processes. Partner with us and experience the difference our premium Ascorbic Acid can make in your operations.

Key Features:
 

Affordable Bulk Pricing: We offer cost-effective bulk pricing for ascorbic acid in India, making it an excellent option for manufacturers and industries that need large volumes.
Reliable Suppliers: As trusted suppliers in Delhi, we ensure that our customers receive high-quality Ascorbic Acid for a variety of applications.
Uses and Benefits:
 

Ascorbic Acid offers a range of uses and benefits, especially in food preservation, pharmaceuticals, and cosmetics:

Food Industry: Acts as a preservative and antioxidant, extending the shelf life of products like juices, jams, and canned foods.
Pharmaceutical Industry: Widely used in supplements, it supports immune health and serves as an essential ingredient in various formulations.
Cosmetic Industry: Used in skincare products for their brightening and anti-aging properties, reducing signs of aging and improving skin health.
Applications:
 

Food Preservation: Extends shelf life and improves the freshness of processed foods by preventing oxidation.
Pharmaceuticals: Essential for Vitamin C supplements and as an additive in various health products.
Cosmetics: Commonly used in creams, serums, and lotions to boost skin health and combat oxidative damage.
Formula and Composition:
 

The chemical formula of Ascorbic Acid is C₆H₈O₆, which highlights its composition of carbon, hydrogen, and oxygen. This structure contributes to its antioxidant properties, making it a key ingredient in many applications.

Where to Source Ascorbic Acid in India:
 

For businesses looking to source Ascorbic Acid in India, we provide reliable information on suppliers, pricing, and applications. Our dedication to quality and customer service ensures that you receive the best products for your needs. Contact us today to learn more about how we can support your business!
AWS SSO利用時のマネジメントコンソールアクセスのロギングと通知 

# 目的
**IAM Identity Center (AWS SSO) 利用時にAWSアカウントへのログインを記録する**
- AWS SSO利用時に認証やAWSマネジメントコンソールのアクセスを記録する
- 強い権限でAWSマネジメントコンソールにアクセスした場合、アラーム通知する

# 実装例
- `EventBridge`のルールで `"aws.sso"`のイベント発生時に`CloudWatch Logs`へ記録する
- ログ検索や通知したい: `CloudWatch Logs / Insightで検索 / アラームで通知`
  - 例) `CloudWatch Logs`の`メトリクスフィルタ`で権限毎にメトリクスを設定
      - 管理権限でログイン時に、`CloudWatchアラーム`で通知する

## 設定
- `EventBridge`のルールを作成する
  - 例）ルール名: `aws-sso-logging`

- イベントパターン: (JSON)
    ```json:イベントパターン
    {
      "source": ["aws.sso"],
      "detail-type": ["AWS Service Event via CloudTrail"],
      "detail": {
        "eventSource": ["sso.amazonaws.com"]
      }
    }
    ```
- 特定イベント (アクション) に限定する場合、`detail` の `"eventName"`で絞る
    - 例）`"eventName": ["Authenticate","Federate"]`
      - `Authenticate`: AWS SSOへのサインイン (認証)
      - `Federate`: AWSマネジメントコンソールへのアクセスなど
      
https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/sso-info-in-cloudtrail.html
 
- ターゲット: `CloudWatch Logs`
    - ロググループを指定: 例) `/aws/events/aws-sso-logging`


## ログ
- `CloudWatch Logs`にJSON形式でログが記録される
  - `detail.serviceEventDetails` にアクセスした`ロール`と`AWSアカウントID`が記録される
    ```json:CloudWatch Logs
      ...
      "serviceEventDetails": {
        "role_name": "AWSAdministratorAccess",
        "account_id": "123456789012" 
      },
      ...
    ```

## 特定のAWSアカウントで管理権限でログインしたときに通知する
- CloudWatch ロググループで`メトリクスフィルター`を作成し、`CloudWatchアラーム`で監視通知する
  - AWSアカウントIDやロールで集計したい場合：メトリクスフィルターの `ディメンション` を設定

### メトリクスフィルターの設定例
- フィルターパターン: `{$.detail.eventName= "Federate"}`
- メトリクス名前空間: 任意名称 例) `aws-sso`
- メトリクス名: 任意名称 例) `Federate`
- メトリクス値: `1`
- ディメンション: 例) AWSアカウントIDとロール名で集計
  - account_id: `$.detail.serviceEventDetails.account_id`
  - role_name: `$.detail.serviceEventDetails.role_name`

#### CloudWatchメトリクスからアラームを設定
- CloudWatchメトリクスで、AWSアカウントIDとロール単位にアラームを設定できる
    - 例) CloudWatch > Metrics > `aws-sso` > `account_id,role_name`
        - ※アクセスしてAWS SSOのログが記録されないとメトリクスは表示されない

# 参考
- IAM Identity Center でのログ記録とモニタリング

https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/security-logging-and-monitoring.html

- re:Post > Question > AWS IAM Identity Center - EventBridge Rules

https://repost.aws/questions/QUudzAd5IJQR-xF4nY2lKNNQ/aws-iam-identity-center-eventbridge-rules

https://qiita.com/sugimount-a/items/c8e8f9acd215f8d7ff23
【Unity】マウスホバー時にオブジェクトが光るようにする方法

# 結果
環境はunity6
![2024-11-11 16-05-35.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3741258/23e27745-dca8-111a-78af-60a92e596d3e.gif)

# コード
```c#
using UnityEngine;

public class HighlightOnHover : MonoBehaviour
{
    public Material highlightMaterial;
    // 現在使用しているマテリアル
    private Material originalMaterial;

    void Start()
    {
        originalMaterial = GetComponent<Renderer>().material;
    }

    // マウスがオブジェクト上にあるとき
    void OnMouseEnter()
    {
        GetComponent<Renderer>().material = highlightMaterial;
    }

    // マウスがオブジェクトから離れたとき
    void OnMouseExit()
    {
        GetComponent<Renderer>().material = originalMaterial;
    }
}
```

戦略シミュレーターとかで使えそう
Tableauの複数人で1つのテーマを同時分析する際の注意点

## 背景
TableauでのViz（ビジュアライゼーション）開発は、データ可視化を目的とした比較的短期の作業が一般的です。そのためか、1つのVizを複数人で共同開発するケースは少ないと言われています。しかし、業務上、大規模なViz開発を行う機会があり、初めて3人チームで財務データの分析を行う中で、思わぬ課題や落とし穴がいくつも見つかりました。

この記事では、その事例を振り返り形式で紹介し、同じ罠にはまらないための具体的な対策を提言します。特に複数人での開発や大規模な分析を行う方には、ぜひ参考にしていただきたい内容です。

## 事例と失敗談

### 分業体制
大規模な財務データの分析を行うため、私は指示役となり、実装者2名との3名体制で分業しました。分析量が膨大だったため、論点ごとに役割を分けて効率的に進めることが重要と考えました。また、データの不整合を防ぐために、私がベースとなる明細データの可視化をあらかじめ整備し、グラフの作成やデザインについては他のメンバーに分業してもらう形にしました。

しかし、いくつかの大きな失敗を経験したため、以下でその具体例を挙げていきます。

### 失敗1: データの更新頻度
データ量が多く、抽出での更新を採用しましたが、同時に一部のレポートはLive接続を使用することになり、更新タイミングのズレが発生。これにより、計算結果や数字が一致しない場面が頻発し、原因調査に多くの無駄な時間を費やすことになりました。特に財務データは信頼性が最優先のため、更新が不整合を起こすとチーム内での調整や修正作業が増え、負担が大きくなります。

### 失敗2: UI/UXの違い
各担当者が独自のスタイルでグラフやフィルタ、レイアウトを作成した結果、デザインやUI/UXがバラバラに。最終的には全てのVizを1つのレポートに統合する必要がありましたが、見た目やユーザー操作の統一感がなく、調整に時間がかかりました。特に異なるフォントサイズや色の選択、フィルタの配置の差異が原因で、完成したレポートの見た目に統一感が欠ける結果となりました。

### 失敗3: レポートの乱立
各メンバーが独立して作業する中で、同じレポートを複製したり、異なるバージョンを保存することが頻発しました。また、最新レポートをどれにするか明確に決めていなかったため、結果的に複数のバージョンが存在し、管理が難しくなりました。メンテナンス作業も煩雑化し、最新の修正が反映されていないレポートが閲覧されるなど、混乱が生じました。

## どうすれば失敗を避けられたか？

### 1. データの更新は基本的にはLive接続にする
大規模なデータ分析では、**データの更新頻度を統一する**ことが重要です。基本的にはLive接続にすることで、データのズレが生じにくくなります。また、Tableau ServerやTableau Onlineにデータソースをパブリッシュして共有する方法もありますが、これはデータの更新頻度やセキュリティポリシーによっては適用が難しい場合もあります。もしLive接続が難しい場合には、データ更新のタイミングや頻度をチームで合意し、更新日を明確にすることが有効です。

### 2. UI/UXガイドラインを共有して統一感を持たせる
特に複数人で同じレポートを作成する場合、**UI/UXの統一感を保つためのガイドライン**を設定することが重要です。グラフの形式、色、フォントサイズ、フィルタの配置などのデザインルールを明確にし、メンバーで共有します。場合によっては、ガイドラインを作成するのが得意なメンバーに協力してもらい、各メンバーがそれに従って作業するようにすると、最終的なレポート統合がスムーズに進むでしょう。

### 3. レポートの命名規則・配置ルールを明確にする
作成されたレポートが乱立しないように、**命名規則や配置ルールを統一**することが大切です。特にバックアップを取る場合は、専用のバックアップフォルダを設けて、使用済みのレポートを整理しておくと混乱が防げます。また、最新レポートを上書き保存し、履歴管理を行うためのルールも策定すると、チーム全体でのレポート管理が容易になります。

## まとめ
Tableauでの大がかりなViz開発では、特に複数人での分業体制が必要な場合、いくつかの落とし穴が存在することを今回の経験で学びました。データの更新頻度、UI/UXの統一、レポートの管理といった細部に気を配ることで、スムーズに共同作業を進められるようになるでしょう。Tableauの多人数でのViz開発を行う方は、ぜひ参考にしていただき、チームで効率よく成果を出せる体制を整えてください。
Testcontainers使ってみた

## Testcontainersとは

https://testcontainers.com/

`Testcontainers`は、データベース、メッセージ・ブローカー、ウェブ・ブラウザなど、`Docker`コンテナで動作するあらゆるものの軽量インスタンスを提供するためのオープンソース・ライブラリです。

テストの依存関係をコードとして定義し、テストを実行するだけで、コンテナが作成され、削除されます。
モックや複雑な環境設定はもう必要ありません。 

多くの言語とテストフレームワークをサポートしており、必要なのは`Docker`だけです。

## 背景

2023年12月、Docker社が`Testcontainers`の開発元であるAtomicJar社を買収したことが発表されました。
これにより、`Testcontainers`の開発はさらに活発になることが予想されます。
今まで、GoのDBのテストには`dockertest`を使っていましたが、この機会に`Testcontainers`を使ってみることにしました。

https://x.com/testcontainers/status/1734245890515140699

## サンプルコード

以下のコードは、Testcontainers for Goで、PostgreSQLのデータベースを使用してテストを行うサンプルです。

```go
package test

import (
	"context"
	"database/sql"
	"log"
	"path/filepath"
	"testing"
	"time"

	"github.com/testcontainers/testcontainers-go"
	"github.com/testcontainers/testcontainers-go/modules/postgres"
	"github.com/testcontainers/testcontainers-go/wait"

	_ "github.com/lib/pq"
)

var db *sql.DB // データベース接続用のグローバル変数

// テスト全体のセットアップとクリーンアップを管理するエントリポイント
func TestMain(m *testing.M) {
	ctx := context.Background()

	// データベースの設定情報
	dbName := "users"
	dbUser := "user"
	dbPassword := "password"

	// PostgreSQLコンテナを起動
	postgresContainer, err := postgres.Run(ctx,
		"postgres:16-alpine", // 使用するPostgreSQLイメージ
		postgres.WithInitScripts(filepath.Join("testdata", "init.sql")), // 初期化スクリプトを指定
		postgres.WithDatabase(dbName),                                   // データベース名を指定
		postgres.WithUsername(dbUser),                                   // ユーザー名を指定
		postgres.WithPassword(dbPassword),                               // パスワードを指定
		testcontainers.WithWaitStrategy( // コンテナの起動完了を待つための戦略
			wait.ForLog("database system is ready to accept connections"). // 特定のログ出力を待機
											WithOccurrence(2).                  // ログが2回出現するまで待つ
											WithStartupTimeout(5*time.Second)), // タイムアウトを設定
	)
	defer func() {
		// テスト終了後にコンテナを停止
		if err := testcontainers.TerminateContainer(postgresContainer); err != nil {
			log.Fatalf("failed to terminate container: %s", err)
		}
	}()
	if err != nil {
		log.Fatalf("failed to start container: %s", err)
	}

	// PostgreSQLへの接続文字列を取得
	dbURL, err := postgresContainer.ConnectionString(ctx, "sslmode=disable")
	if err != nil {
		log.Fatalf("error: %s", err)
	}

	// データベース接続を初期化
	db, err = sql.Open("postgres", dbURL)
	if err != nil {
		log.Fatalf("error: %s", err)
	}
	defer db.Close() // テスト終了時に接続を閉じる

	// テストを実行
	m.Run()
}

// 実際のテストケース（例）
func TestXXX(t *testing.T) {
	// ここにテストケースを記述
}

```

## 感想
`dockertest`には、`Testcontainers`のような`postgres.WithInitScripts`に相当する初期化スクリプトを実行する仕組みがないので、`Testcontainers`は便利だなと思いました。
inspectでデバッグログの快適性を爆上げする

## はじめに
Node.jsでオブジェクトや配列を`console.log`でデバッグ表示した際の`[Object]`や`[Array]`に辟易していませんか？`inspect`関数はオブジェクトやデータ構造を可読性の高いフォーマットで出力できる、デバッグやロギングに活用できる非常に強力なツールです。本記事では、`inspect`関数の使用方法、便利なオプションをいくつかのコード例を交えて解説します。

## Node.jsの`inspect`関数とは？
Node.jsの`util`モジュールに含まれている`inspect`関数は、オブジェクトを文字列として表示する際にその内容を詳細に確認できるように設計されています。`console.log`と比べて、`inspect`を使うと以下のような利点があります。

- ネストされたオブジェクトの深さを指定できる（無限も可）
- 色付きで出力することができ、見やすい
- 配列やマップなど特殊なデータ型にも対応

## `inspect`関数の基本的な使い方
まず、基本的な使用方法を見てみましょう。以下のコードは、`inspect`を使ってオブジェクトの内容を表示する例です。

```js
const util = require('util');

const user = {
  name: 'Yamada Taro',
  age: 30,
  address: {
    city: 'Tokyo',
    zip: '100-0001'
  }
};

// 標準のconsole.log
console.log(user);

// util.inspectを使用
console.log(util.inspect(user, { depth: null, colors: true }));
```
`console.log`では通常のオブジェクトの出力となりますが、`inspect`を使用すると、色付きで、ネストされたオブジェクトも全て表示されます。特に、`depth: null`オプションによりオブジェクトの深さが無制限となり、全ての階層が表示されます。

## `inspect`関数のオプション

inspect関数には、様々なオプションが用意されており、用途に応じて柔軟に設定できます。以下は主なオプションの一覧です。

- `depth`: ネストされたオブジェクトをどの階層まで表示するか（nullで無制限）
- `colors`: 色付きで表示するか（trueで色付き）
- `showHidden`: Symbolプロパティや非列挙プロパティも表示するか
- `compact`: コンパクトな形式で表示するか
- `sorted`: オブジェクトのキーをソートして表示するか
- `numericSeparator`: 数値をアンダーバー「_」によって3桁単位で区切って表示するか
  
## `depth`オプションの活用例
デフォルトでは`inspect`は2階層までしか表示しませんが、`depth`オプションを使うことで深い階層まで表示できます。
```js
const util = require('util');

const data = {
  level1: {
    level2: {
      level3: {
        level4: '4階層目'
      }
    }
  }
};

// デフォルトの深さ（2）
console.log(util.inspect(data));

// 深さを指定して表示（nullで無制限）
console.log(util.inspect(data, { depth: null }));
```

## `showHidden`オプションの活用例
デフォルトでは表示されない非列挙プロパティやシンボルも`showHidden`オプションで表示可能です。
```js
const util = require('util');

const obj = {};
Object.defineProperty(obj, 'hidden', {
  value: 'console.logだと見えないよ',
  enumerable: false
});

// {}
console.log(obj);

// { [hidden]: 'console.logだと見えないよ' }
console.log(util.inspect(obj, { showHidden: true }));
```

## まとめ
`util.inspect`はNode.jsでデバッグを行う際に非常に強力なツールです。特に、ネストされたオブジェクトや特殊なデータ型を扱う際には、`inspect`のオプションを活用することで、デバッグ作業を効率的に進めることができます。素敵なデバッグライフを！

## 参考
https://nodejs.org/api/util.html#utilinspectobject-options
【個人メモ】Ruby on Rails チュートリアル 第9章

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです

# 個人メモ
- ユーザーごとに記憶トークンと記憶ダイジェストを関連付けることで、永続的セッションを実現できる
- urlsafe_base64メソッド
長いランダムな文字列を生成
記憶トークンとして用いる
- attr_accessor :remember_token
記憶トークンをハッシュ化したもの(記憶ダイジェスト)をDBに保存したいため、attr_accessorで仮想の記憶トークン属性を定義
- update_attributeメソッド
特定の属性をDB上で更新したい際に用いる
バリデーションを回避できる
- cookiesメソッド
cookies.permanentで有効期限が20年に設定される
cookies.encryptedで値を暗号化してcookiesに保存できる（複合もできる）
高校の文化祭でレゴクレーンゲームを作った話

# はじめに
こんにちは！
海城中高物理部のクレーンゲーム班です。
2024年度の文化祭でレゴを使ってクレーンゲームを作りました。

# 機材
・動作不良のないマインドストームEV3
・レゴのボタン3つ
・2023年度に買った長いマインドストームのコード4本 (70×2, 90×2：予備もあったほうがいい)
・アクリル板4枚
・木の板４枚(中野の島忠で購入。運搬大変です。Discordに写真添付)
・プラスチック段ボール(中野の島忠)
・L字型レール(中野の島忠)

・レゴコード
・お菓子
　・うまい棒
　・パイン飴
　・ポテチ
  ・箱形のお菓子
  (直接つかめないお菓子は、厚紙でわっかを作って対応して下さい。)

・お菓子はタジマヤで買った。会員登録しないと買えないってホームページに書いてあるんだけど、電話で聞いたら１回購入するくらいなら会員登録は必要ないとのこと。卸売りで安いのでおすすめ。

# 作り方
・プログラムはスクラッチ。
・web版は機能制限があるので非推奨。
・discordにlmspファイルは上げてるけど、かなりぐちゃぐちゃだから作り直してもいいと思う。

11/11現在のEV3入出力
・IN1:なし(超音波センサー:景品取り出し口に設置して、景品が取れたか識別して、確率調整に使える。)
・IN2:ボタン1(横移動)
・IN3:ボタン2(奥移動)
・IN4:超音波センサー(アームとお菓子までの距離)
・OUTA:モーター(横移動)
・OUTB:モーター(奥移動)
・OUTC:モーター(上下移動)
・OUTD:モーター(アーム開閉)

・ボタンは3Dプリンターなどで印刷した部品に矢印を付けて視覚的に分かりやすいように。(Discordに画像添付)
・注意書きと操作説明を目の付くところに貼ること。

# 来年引き継いでくれる後輩へ
理想のスケジュール
・4月までにアクリル板を立てて大きさ確認。
・5月までにプログラム完成。(中一の入部)
・7月までに機材買う&仮組み。
・8月までに本番環境で動作確認＆お菓子の購入。
・9月にデバッグ

・夏休みは予定が合わなかったりなどして、あまり活動できない可能性があるので、1学期中に進めておく。
・アクリル板割らないように気を付けて。
・アクリル板が割れているので、気になったら、買い替えるか、別の素材で。
・デバッグはしっかり。(2023年度の時、ギリギリで完成したのでデバッグできず、当日不具合に悩まされた。)
・5月ごろに入ってくる中一を班に入れられそうなら入れてください、私たちは班員への仕事の割り振りが下手でした。すみませんでした。
・列整理をしっかり行うこと。操作説明を一回一回すると時間かかって列ができます。列は養生で線を引き、壁沿いに。
Yamaha RTX1200 の動的フィルタについてコマンドリファレンスの解読を試みる

# はじめに
ネットワークの勉強をしようと Yamaha RTX1200 を購入したはいいもの、如何せん設定方法が難解で公式の設定事例を見てもコマンドの解説までは載っていませんでした。なのでコマンドリファレンス ([PDF](https://www.rtpro.yamaha.co.jp/RT/manual/rt-common-old/Cmdref.pdf)) の該当部から理解を試み、その結果を記した記事になります。

# 動的フィルタ
(PDF p.151, 152 に記載されています。)

ある通信が RTX1200 (以下`ルーター`)に入ってきたとき、定義済みのフィルタに則ってそれを処理します。

# 定義コマンド
コマンドは以下に示す書式を持ちます。
`ip filter dynamic フィルタ番号 始点アドレス 終点アドレス filter 適用するフィルタのリスト`

フィルタ番号は、この動的フィルタの番号となる数字で 1 ~ 21474836 の間から 1 つを重複しないように指定します。

始点アドレス、終点アドレスはそれぞれ、このコネクションを発信した機器の IP アドレスと、コネクションの宛先となる機器の IP アドレスを指します。

`適用するフィルタのリスト`に列挙されたフィルタは、ここで指定したものの条件を満たすコネクションがルーターに入ってきたときに、そのコネクションとそれに対するレスポンスを通過させます。複数のフィルタを記載する際はそれぞれを半角空白で区切ります。複数のフィルタを列挙すると、それらすべての条件は AND で連結されます。(=列挙されたすべての条件を満たさなくてはいけない)

なお、`適用するフィルタのリスト`の前には `in` と `out` をそれぞれ配置することができます。
`in` を配置すると列挙したフィルタに記載された送信元 IP と送信先 IP が入れ替わった状態でコネクションに対して適用されます。
また、`out` を配置すると列挙したフィルタの送信元 IP と送信先 IP はそのままにコネクションに対して適用されます。

in, out が配置されている場合は、フィルタリストに列挙されたフィルタそれぞれで定義されている pass・reject などの動作種別と送信元・送信元 IP が無視され、 `ip filter dynamic フィルタ番号 送信元IP 送信先IP filter フィルタリスト` での `送信元IP` と `送信先IP` が適用されます。(検知時は除く)
動作種別の無視については、動的フィルタの「フィルタに合致したコネクションは**通す**」という性質により上書きされたことによる挙動です。

# 設定例とその解説
PDF p.152 の設定例をこれまでの解説に則って分解します。
(これ以降の例では、条件に合致しなかった通信をすべて破棄するフィルタ 2000 =(`ip filter 2000 reject * *` によって定義) が適用されていることとします。)

```
ip filter 10 pass * * udp * snmp
ip filter dynamic 1 * * filter 10
```

1 行目は、ルーター配下すべての IP のポート 1 ~ 65535 から発信され、同じくルーター配下すべての IP の SNMP 用ポート (=161) を送信先とする UDP プロトコルのコネクションをサーバーに記録することなく通過させるルールをフィルタ 10 として定義しています。

そして 2 行目では、フィルタ 10 に合致するコネクションが検知されたとき、そのコネクション自体とそれに対するレスポンスのコネクションを通過させるルールをフィルタ 1 として定義しています。

この 2 行の定義によりルーターは以下のように振る舞います。

- UDP プロトコルで 192.168.1.100 のポート 2000 から 192.168.2.100 のポート 161 に対しての通信とそのレスポンスを**通す**

- UDP プロトコルで 192.168.2.100 のポート 2000 から 192.168.1.100 のポート 161 に対しての通信とそのレスポンスを**通す**

- UDP プロトコルで 192.168.1.100 のポート 2000 から 192.168.2.100 のポート 2000 に対しての通信を**通さない**(宛先のポートが SNMP用=161 ではないため)

# in, out 付きの設定例
```
ip filter 10 192.168.1.0/24 192.168.2.0/24 * 3000
ip filter 11 192.168.2.0/24 192.168.1.0/24 3000 *
ip filter dynamic 1 192.168.1.0/24 192.168.2.0/24 filter 10 in 11 out 10
```

ルーターが 192.168.1.100 から 192.168.2.100 のポート 3000 に対する通信を検知したとき、その通信とそれに対するレスポンスを通す。

# おわりに
数多くあるコマンドの 1 つを抜き出しただけでこの量になってしまうので、コマンドリファレンスが 841 ページで収まっているのはすごいことなのかもなと思いました。（小並感）
The game module 'ProjectName' could not be loaded. There may be an operating system error, ...



The game module 'ProjectName' could not be loaded. There may be an operating system error, the module may not be properly set up, or a plugin which has been included into the build has not been turned on.

最近追加したPluginのuprojectに「"EnabledByDefault": true,」を追加する

エンジンのPluginは以下のパスを参考に確認。
C:\Program Files\Epic Games\UE_X.X\Engine\Plugins\


https://stackoverflow.com/questions/77348549/the-game-module-x-could-not-be-loaded-there-may-be-an-operating-system-error
【Parallels】黒魔術AviUtlをMacで使用する

# 🎥 はじめに
どうしてもMチップシリーズのMacでAviUtlを使用したいと思ったことはありますでしょうか．WineSkinで使用する方法が多く見られますが，ここではParallelsを使用していきます．また，最近流行りのダークモードなどにも対応させていきます．大前提として，通常のWindows機で実行するのが一番いいということは留意しておきましょう．

# 🎥 自己紹介
初めまして．趣味でweb開発を勉強している273*(ﾂﾅｻﾝﾄﾞ) / Kei.と申します．関西の大学生です．最近はフルスタック開発やツール制作を行なっています．

# 🎥 スクリーンショット

![スクリーンショット 2024-11-11 22.32.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530539/17316b16-9b00-1fc3-f249-3d606d066009.png)


この画像を初見で見ると混乱するかもしれませんね笑

# 🎥 手順

- MacにParallelsのWindowsを導入します．
- [こちらの記事](https://kisaragi2342.com/aviutl-download/)を参考にAviUtlを導入します．一番わかりやすかったので掲載させていただきました．
- patch.aulを**削除**してください．
:::note warn
[patch.aul](https://github.com/ePi5131/patch.aul)とは導入するだけで，バグ修正や便利機能の追加，軽量化などを行ってくれる**必須**のプラグインです．しかしParallelsのWindowsはArm版で，それには対応しておらず，導入するとAviUtlが起動しなくなります．
必ず導入したいプラグインなのですが，どうしても動作しなくなるので導入を断念しました．無いと困るので諦めて普通のWindowsを使うのが一番いいです．
※推奨環境であるAVX2命令がM4チップから対応するようなので，もしかするとそちらの環境では動くかも知れませんね．[参考](https://xenospectrum.com/apples-game-porting-toolkit-2-supports-avx2-instruction-set-enabling-next-generation-games-to-run-on-m4-chips-and-beyond/)
:::

- ダークモード化やシングルウィンドウ化するために，プラグインを導入していきます．
開発者の[蛇色(へびいろ)さんのリポジトリ](https://github.com/hebiiro?tab=repositories)から導入したいプラグインを探しましょう．開発した全てのプラグインを詰め込んだ素晴らしいプラグインもあるようですが，この環境では動作するかわからないので個別で入れていきます．
ダークモード化には[黒窓 5.5.0](https://github.com/hebiiro/AviUtl-Plugin-DarkenWindow/releases/tag/5.5.0)を使用していきます．それ以降はpatch.aulが導入されていないと正しく動かなくなります．シングルウィンドウ化には[SplitWindow](https://github.com/hebiiro/AviUtl-Plugin-SplitWindow)を使用します．その他お好みでプラグインを導入するといいかもです！
- 最後にParallelsの[表示]タブからCoherenceをクリックします．これで先程の画像のように，WindowsのウィンドウをMacのウィンドウと同様に扱うことができます．もちろん画像やテキストのコピペもそのまま可能です．Dockにアイコンを固定しておくと次回からの起動が楽です．

# 🎥 動作
普通に編集する程度であればストレスなく編集できます．重めの編集にも意外と耐えていて使い勝手は悪くないです．しかし，patch.aulが導入されていないことによって，一部のフィルターが使えなかったり，動作の不安定さはよく感じられます．その点が一番ダメージ大です．

# 🎥 この環境で制作した映像
coming soon ~

# 🎥 最後に
いかがでしたでしょうか．かなりニッチなことをやっている気がします．ネットで同様のことをやっている記事を探しても，見つからなかったのでまとめてみました．ここ最近のAviUtlの黒魔術には驚きっぱなしです．patch.aulや魔改造プラグインの開発者さん，その他開発者の方々に深く感謝してAviUtl on Macを楽しんでいきたいと思います！現在はこの環境で新しく映像を制作しています．公開できれば添付しておこうかと思います！
最後まで読んでいただきありがとうございました！それではまた！
分散学習をインテル® Xeon® プロセッサーで

【開発と活用を推進するインテルの AI】
インテルはクラウドからデータセンター、エッジにおいて、あらゆる場所での AI 活用を目指す、ソフトウェアやハードウェアでの AI 開発、さらには AI ソリューションへの活用を動画で解説するWebサイトを公開しています。
https://www.intel.co.jp/content/www/jp/ja/artificial-intelligence/ai-development-and-utilization.html

＜AI 活用を動画で学ぶ＞
インテルのエキスパートたちが、ソフトウェアやハードウェア、AI ソリューションに関してのノウハウを動画で解説。今回ご紹介するのは、「開発環境」
ソフトウェア開発ツールである oneAPI をはじめ、推論エンジンやモデルの最適化を提供する OpenVINO™ ツールキットや、クラウドベースでインテル製ハードウェアや包括的な開発ツールとライブラリーを提供するインテル® Tiber™ デベロッパー・クラウドなど、インテルが AI 開発向けに提供しているツールやソリューションを紹介します。

タイトル
分散学習をインテル® Xeon® プロセッサーで
インテル® oneAPI コレクティブ・コミュニケーション・ライブラリー

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/35f8ea13-4ebe-6325-502e-9794e5522fe2.png)

巨大化している AI モデルを手持ちのサーバー群を利用して学習を行う手段として分散学習があります。このセッションでは分散学習の仕組みと性能の鍵となる通信ライブラリーとしてインテル® oneAPI コレクティブ・コミュニケーション・ライブラリーを紹介します。

https://www.intel.co.jp/content/www/jp/ja/artificial-intelligence/ai-development-and-utilization.html

是非この機会にAI Everywhere を実現するインテルのソリューションをご覧ください！
【 自分だけが知らなかった 】console.log について

自分だけが知らなかったかもしれないですが、記録しておきます。

```javascript
const loadArticle = async (id) => {
     try {
         let res = await fetchArticle(id)
         console.warn('await fetchArticle',await fetchArticle(id))
         console.warn('res',res)
         someValue = res
         if (someValue.status === articleStatus.DRAFT) {
             someValue.status = articleStatus.PUBLISHED;
         }
         ...
     } catch (error) {
         ...
     } finally {
         ...
     }
 }
```

上記のコードのデバッグをしていたときに、`console.warn` の中で出力されるオブジェクトの `status` 値がなぜ異なるのかに気付きました。原因の一つは「参照渡し（pass by reference）」ですが、もう一つの重要な理由は、`console.warn()`（や `console.log()`）でオブジェクトを出力する際、ブラウザは「ログが実行された瞬間の状態」ではなく「後でオブジェクトを展開して確認したときの状態」を表示するためです。これによって、期待する結果と異なる出力が見られる場合があります。
QR Generate API

## QRコードを生成するAPIの紹介を書いてみる

今回は、自分で作ったQRコードを生成するAPIを紹介します。
初めて、記事を書くので温かい目で見てください:pray:


APIはこちら ->> [API](https://qr-make-api.onrender.com/qr/)


- Pythonを使ってAPIを叩いてみる

```python:main.py

import requests

def generate_qr(url):
    # URLをエンコード
    api_url = f"https://qr-make-api.onrender.com/qr/{requests.utils.quote(url)}"
    response = requests.get(api_url)

    if response.status_code == 200:
        print("QRコードが正常に生成されました。")
        # レスポンスの内容をファイルとして保存
        with open("qr.png", "wb") as f:
            f.write(response.content)
        print("QRコード画像が 'qr.png' として保存されました。")
    else:
        print("QRコードの生成に失敗しました。")
        print("ステータスコード:", response.status_code)
        print("レスポンス:", response.text)

# 使用例
generate_qr("https://qr-make-api.onrender.com")
```

- 生成されたQRコードがこちら
![qr.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932372/a8b77b44-aae4-adf0-3330-dd60330b6c75.png)


### 更なる詳細はこちらまで:point_down_tone1:
- **https://github.com/QRSpot/QRSpot-api-sample**
アプリのデプロイパターンの選定ポイント

AWS CodeDeployには、LambdaやECSなどのデプロイに使用できるさまざまなデプロイ方法があります。

それぞれのデプロイ方式の使い分けを調べてみました～

# All-at-once (一斉デプロイ)
### 概要
新しいバージョンがすべてのユーザーに即時適用されます。

### メリット
デプロイが高速で、シンプルです。
環境が少数であればデプロイ管理が容易。

### デメリット
新しいバージョンにバグがある場合、全ユーザーに影響します。
ロールバックが発生すると、全ユーザーが影響を受けるため、慎重にリリースする必要があります。

### ユースケース
開発環境やテスト環境などでのデプロイ。
サービス影響が小さいバグ修正。
システムが単純で、障害に強いアーキテクチャの場合。

# Blue/Green デプロイ
### 概要
現行バージョン (Blue) を保持しつつ、別の環境に新バージョン (Green) をデプロイします。新バージョンの検証後に切り替え、問題があれば簡単に旧バージョンに戻せます。

### メリット
現行環境を維持したまま新しいバージョンをテストでき、問題が発生した場合にすぐロールバック可能です。
低リスクでの切り替えができ、サービスダウンタイムが少ないです。

### デメリット
リソースコストが増加しやすい（別環境の準備が必要）。
切り替えのオーバーヘッドが増加する場合がある。

### ユースケース
ミッションクリティカルなアプリケーション。
ダウンタイムを最小限に抑えたいプロダクション環境。
大きなアップデートやリリースの前に慎重な検証が必要な場合。

# Canary (カナリア) デプロイ
### 概要
新バージョンを一部の「**ユーザー**」にだけ公開し、段階的に全ユーザーに適用していく方式です。設定した割合でデプロイの進行を管理できます。

### メリット
問題が発生した場合、影響を最小限に抑えられるため、バグ検出が容易。
ロールバックが迅速で、影響範囲を小さく抑えられます。

### デメリット
デプロイに時間がかかる場合がある。
ユーザーが異なるバージョンのアプリケーションを使用するため、一貫性に注意が必要。

### ユースケース
新機能やバージョンを慎重にリリースしたい場合。
一部のユーザーでのフィードバックを得ながらリリースを進めたい場合。
バグや不具合の早期発見を重要視するプロダクション環境。

# Linear (線形) デプロイ
### 概要
新しいバージョンを一定の「**割合(リソース)**」で段階的に公開していく方式。
設定した時間間隔で徐々にデプロイが進みます。

### メリット
安定的かつ計画的に全ユーザーへのデプロイを行うことが可能です。
Canary デプロイと同様に、途中で異常が発生すれば中止・ロールバックが可能です。

### デメリット
デプロイ完了までに時間がかかります。
中途での切り戻しが必要になった場合に時間がかかります。

### ユースケース
サービス全体に影響を与える可能性のある機能変更。
大規模なユーザーを持つアプリケーションで、慎重にデプロイしたい場合。
アップデートの信頼性を重視するプロダクション環境。

# 参考サイト

https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/deployment-configurations.html

https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/welcome.html
PHPの配列の初期化方法

# $data の初期化
## 1. 空の配列として初期化し、後から要素を追加する
```php:sample001.php
$data = []; // 空の配列として初期化
$data['id'] = '123';
$data['tel'] = '075-000-1234';
$data['name'] = 'hoge taro';
```
空の配列を作成し、必要なキーと値を個別に追加する。
コードを見て直感的に処理が理解できるが、
初期化とデータの追加が別々に行われるため、
コードがやや冗長になる場合がある。

## 2. 短縮構文を使用して初期化時に要素を設定する
PHP 5.4 以降では、array() の代わりに [] を使用して配列を初期化することができる。この方法では、初期化と同時に要素を設定できるため、コードが簡潔になる。
```php:sample002.php
$data = [
    'id' => '123',
    'tel' => '075-000-1234',
    'name' => 'hoge taro'
];
```
イメージ的に
```php:image
$data 
    ['id'] => '123',
    ['tel'] => '075-000-1234',
    ['name'] => 'hoge taro'
];
// ⇓
$data['id'] => '123',
$data['tel'] => '075-000-1234',
$data['name'] => 'hoge taro'
```
Checkovでfとskip-pathを同時に使うとfが優先される話

## TLDR
Checkovで、以下の２つで指定するファイル名が重複した場合、Checkovは **「チェックに含める」** 動作を優先する、という話
- チェックするファイル名を指定するコマンド
- 指定のファイルをスキップするコマンド


## 準備

再現するために以下のセットアップを用意しました。

ファイルツリー
```
.
└── test/
    ├── .checkov.yaml
    └── main.tf
```

`.checkov.yaml` はCheckovのコンフィグファイルです。Checkovを実行するルートにこのファイル名で保存しておくと、オプションで明示的に指定をせずとも自動的に使ってくれます。

.checkov.yaml
```yaml
skip-path:
  - "main.tf"
```

## 実際にどういうことが起きるのか

まずは普通に `-d` で全ファイルを指定します。
この場合、 `skip-path` が考慮されるため、ここではひとつもチェックを行わずにチェックが終了します。
```
(venv) /test>checkov -d .


       _               _
   ___| |__   ___  ___| | _______   __
  / __| '_ \ / _ \/ __| |/ / _ \ \ / /
 | (__| | | |  __/ (__|   < (_) \ V /
  \___|_| |_|\___|\___|_|\_\___/ \_/

By bridgecrew.io | version: 2.4.61
Update available 2.4.61 -> 3.2.286
Run pip3 install -U checkov to update



(venv) /test>

```

次に、 `-f` コマンドでチェック対象ファイルとして `skip-path` に指定したファイル名を指定します。
ここで、この記事先頭に記載したような、`-f`が優先される現象が発生します。

```
(venv) \test>checkov -f main.tf
[ terraform framework ]: 100%|████████████████████|[1/1], Current File Scanned=main.tf
[ secrets framework ]: 100%|████████████████████|[1/1], Current File Scanned=main.tftf


       _               _
   ___| |__   ___  ___| | _______   __
  / __| '_ \ / _ \/ __| |/ / _ \ \ / /
 | (__| | | |  __/ (__|   < (_) \ V /
  \___|_| |_|\___|\___|_|\_\___/ \_/

By bridgecrew.io | version: 2.4.61
Update available 2.4.61 -> 3.2.286
Run pip3 install -U checkov to update


terraform scan results:

Passed checks: 3, Failed checks: 5, Skipped checks: 0

...
```

ちなみに、コンフィグファイルの読み込みにしくじっているわけではないので、`--config-file`で明示的に指定してもダメです。

```
(venv) \test>checkov -f main.tf --config-file .checkov.yaml
[ terraform framework ]: 100%|████████████████████|[1/1], Current File Scanned=main.tf
[ secrets framework ]: 100%|████████████████████|[1/1], Current File Scanned=main.tftf


       _               _
   ___| |__   ___  ___| | _______   __
  / __| '_ \ / _ \/ __| |/ / _ \ \ / /
 | (__| | | |  __/ (__|   < (_) \ V /
  \___|_| |_|\___|\___|_|\_\___/ \_/

By bridgecrew.io | version: 2.4.61
Update available 2.4.61 -> 3.2.286
Run pip3 install -U checkov to update


terraform scan results:

Passed checks: 3, Failed checks: 5, Skipped checks: 0

...
(venv) \test>
```

## 実際にどういう場面で問題になるのか

「チェック対象とチェック非対称を同時に指定することある？？」って聞かれる気もするので書いておきます。
例えば、pre-commitとCheckovを併用しているとこの現象が非常に厄介です。
pre-commitでは、コミットで編集された差分だけをチェックに渡す機能がありますが、そのときにcheckovの`-f`オプションが使用されます。
このとき、`skip-path`と`-f`が重なってしまうことが起きるわけです。

回避方法としては、pre-commit側でファイル無視リストに追加することができます。
とはいえ、この方法だとcheckov側とpre-commit側のコンフィグを2つ管理しなければならなくなるのでやや厄介ですが。
現状、これ以外の回避方法がないのが悩みどころです。
何か良い方法があればコメントいただけると嬉しいです。
企業ネットワークが原因で、RubyGemsが "Could not verify the SSL certificate" となる問題への対応

# はじめに

UTM(SonicWallなど)やSASE(CATO, NetSkopeなど)によりSSL/TLSインスペクションが適用されたネットワーク上で `gem install` などのコマンドを実行すると、次のエラーが発生する場合があります。

```
Retrying fetcher due to error (2/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://rubygems.org/.
There is a chance you are experiencing a man-in-the-middle attack, but most likely your system doesn't have the CA certificates needed for verification. For information about OpenSSL certificates, see http://bit.ly/ruby-ssl. To connect without using SSL, edit your Gemfile sources and change 'https' to 'http'.

Retrying fetcher due to error (3/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://rubygems.org/.
There is a chance you are experiencing a man-in-the-middle attack, but most likely your system doesn't have the CA certificates needed for verification. For information about OpenSSL certificates, see http://bit.ly/ruby-ssl. To connect without using SSL, edit your Gemfile sources and change 'https' to 'http'.

Retrying fetcher due to error (4/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://rubygems.org/.
There is a chance you are experiencing a man-in-the-middle attack, but most likely your system doesn't have the CA certificates needed for verification. For information about OpenSSL certificates, see http://bit.ly/ruby-ssl. To connect without using SSL, edit your Gemfile sources and change 'https' to 'http'.

There is a chance you are experiencing a man-in-the-middle attack, but most
likely your system doesn't have the CA certificates needed for verification. For
information about OpenSSL certificates, see http://bit.ly/ruby-ssl. To connect
without using SSL, edit your Gemfile sources and change 'https' to 'http'
```

RubyGems関連のトラフィックをTLSインスペクションから除外してこの問題を回避する方法もありますが、セキュリティ上の観点からはTLSインスペクションから除外する方法はあまり好ましくなく、最終手段として考えておきたいものです。

幸いなことに、UTMやSASEベンダー各社は、このようなケースを想定して、製品やサービスに対応した独自のCA証明書を発行しています。そのCA証明書を適切な位置に配置することで、この問題を解消することが可能です。手順は次の通りとなります。

# 手順

::: note info
以下は、Windowsにおける対応手順になります。また、RubyはRubyInstallerでインストールされていることを前提とします。
:::

まず、`<Rubyインストールディレクトリ>\lib\ruby\<Rubyバージョン>\rubygems` フォルダへ移動します。例えば、Ruby 2.7の場合は次の通りとなります。

```
c:\Ruby27-x64\lib\ruby\2.7.0\rubygems\ssl_certs
```

このディレクトリを開くと、配下に次のディレクトリを確認することが出来ます。
```
index.rubygems.org
rubygems.global.ssl.fastly.net
rubygems.org
```

上記3ディレクトリに対して、UTMやSASEが発行しているCA証明書を配置します。拡張子は `.pem` とします。

CA証明書を各ディレクトリへ配置後、再度 `gem install` を実行し、結果を確認します。
UTF-8 の全ての文字を取得する

今回は UTF-8 の
全ての文字を取得する試みをします。

成果物は下記の URL からダウンロードできますが
全文字なので開くとメモリ不足になると思います。

またメモ帳が対応していない文字は
□などになると思われます。

https://drive.google.com/file/d/1o9RXOZRWXhcCUalqU77o7DfJttQ8RN8t/view?usp=sharing

***

全ての文字を取得するコード

下記のコードで全ての文字を取得できます。

```csharp: 全ての文字を取得するコード
StringBuilder resultString = new();

for(byte a = 33; a < 127; a++)
{
    List<byte> list = new();
    list.Add(a);
    resultString.Append(Encoding.GetEncoding("UTF-8").GetString(list.ToArray()));
}

for(byte a = 128 + 64; a < 255; a++)
{
    for (byte b = 128; b < 128 + 64; b++)
    {
        List<byte> list = new();
        list.Add(a);
        list.Add(b);

        string result = Encoding.GetEncoding("UTF-8").GetString(list.ToArray());

        if (Encoding.GetEncoding("UTF-8").GetByteCount(result) != 2)
        {
            continue;
        }

        if (1 < result.Length)
        {
            continue;
        }

        resultString.Append(result);
    }
}

for (byte a = 128 + 64; a < 255; a++)
{
    for (byte b = 128; b < 128 + 64; b++)
    {
        for (byte c = 128; c < 128 + 64; c++)
        {
            List<byte> list = new();
            list.Add(a);
            list.Add(b);
            list.Add(c);

            string result = Encoding.GetEncoding("UTF-8").GetString(list.ToArray());

            if (Encoding.GetEncoding("UTF-8").GetByteCount(result) != 3)
            {
                continue;
            }

            if (1 < result.Length)
            {
                continue;
            }

            resultString.Append(result);
        }
    }
}

for (byte a = 128 + 64; a < 255; a++)
{
    for (byte b = 128; b < 128 + 64; b++)
    {
        for (byte c = 128; c < 128 + 64; c++)
        {
            for (byte d = 128; d < 128 + 64; d++)
            {
                List<byte> list = new();
                list.Add(a);
                list.Add(b);
                list.Add(c);
                list.Add(d);

                string result = Encoding.GetEncoding("UTF-8").GetString(list.ToArray());

                if (Encoding.GetEncoding("UTF-8").GetByteCount(result) != 4)
                {
                    continue;
                }

                resultString.Append(result);
            }
        }
    }
}

// この時点の resultString.ToString() が UTF-8 の全文字です。
```

やっている事はシンプルで
文字の存在するであろうアドレスを
総当たりでチェックしています。

有効でない文字のチェックは
Encoding.GetEncoding("UTF-8").GetByteCount(result)
が希望するバイト数になっているかで
チェックしています。

***

以上 UTF-8 の
全文字を取得するコードを
考えて公開してみました。

自分の作ったアプリが
どの程度の UTF8 の文字に
対応しているかチェックする場合に
ご利用頂けると幸いです。

集計してみると
4 byte 文字以下は 2176990 文字
3 byte 文字以下は 79838 文字
2 byte 文字以下は 2014 文字
となりました。

短いですが今回はここまで。
閲覧ありがとうございました。
LM Studio の初回起動時に発生したエラー「vk::PhysicalDevice::createDevice: ErrorExtensionNotPresent」の解決事例

# 発生状況
LM Studio をインストールして、メッセージで勧められるがままにモデルをインストールして、対話を始めようとしたところ、次のエラーメッセージが表示されて先に進まなかった。
エラーメッセージで検索しても解決事例がなかなか見当たらなかった。私のPCがお古だからかもしれない。。。

```
🥲 Failed to load the model
Failed to load model
llama.cpp error: 'vk::PhysicalDevice::createDevice: ErrorExtensionNotPresent'
```

![スクリーンショット 2024-11-11 121949.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932231/065283a0-ff02-5495-f8ef-fd4c77813eda.png)

## 発生環境
- Let's note CF-SZ6
- OS: Windows 11 Pro 22H2
- CPU: Core i5-7300U
- GPU: Intel HD Graphics 620
- RAM: 8GB
- LM Studio 0.3.5


## 解決方法
私の場合は、次の手順でモデルを読み込んで対話を開始することができた。

### 手順１ 対話タブを開いたままで Ctrl + Shift + R を押す。

### 手順２ Runtime 設定の変更
Mission Control > Runtimes > Runtime Preferences > Configure Runtimes で **Vulkan llama.cpp(Windows)** が選択されていたら **CPU llama.cpp(Windows)** を選択する。選択が終われば Mission Control 画面は閉じてかまわない。

はじめは Vulkan llama.cpp(Windows) が選択されていた
![はじめは Vulkan llama.cpp(Windows) が選択されていた](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932231/e5bc4c83-96c0-db0b-c5d4-5e2d9814ce4c.png)

CPU llama.cpp(Windows) を選択する
![CPU llama.cpp(Windows) を選択する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932231/40c44a08-ab5a-9d49-ab1d-22e6c1f4fff1.png)

### 手順３ 再度、モデルの読み込み
再びモデルを読み込ませると、今回はエラーなく完了した。

### 手順４ 無事に対話ができた
![スクリーンショット 2024-11-11 123140.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932231/d383f119-868e-fc05-96db-bcb97c67aa5f.png)

## その他
これで、LM Studioの利用を始めることができた。もし、今後、同じエラーで困っている人の役に立つと嬉しい。

## 追記
その後、試してみたら、 *モデルを読み込ませた後であれば、Runtimeを **Vulkan llama.cpp(Windows)** に戻しても対話できる* ことが分かったので追記しておく。

![手順縮小版.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932231/876f9bfe-090e-30fc-18d7-cc3eb431c69a.gif)
CSSの基本①　CSSの書き方基本

本記事ではCSSの使用方法について解説していきます。
まずCSSとは何かから説明します。

**CSS(Cascading Style Sheets)**
…HTMLやXML等、webページの装飾やレイアウト調整を行うための仕様です。
　文字色・背景色の変更をはじめ、ボタン位置などのオブジェクトの位置などの調整を行うこともできます。

 本記事においての環境は以下になります。
 ・VSCode
 ・HTML
 ・CSS
 
---------------------------------------
### CSSの基本的な記述方法
基本的な書き方は以下のようになります。

```css:example.css
h1{
   color: blue;
}
```
**セレクタ（h1の部分）**
…どのHTML要素にスタイルを適用するか指定します。
　上記の例ではHTMLのh1の要素を指定しています。

**プロパティ（color: の部分）**
…どのスタイルを適用するか指定します。
　上記の例では文字色の変更をします。

**値（blueの部分）**
…各プロパティによって設定できる値が異なります。
　上記の例では文字色を青色（blue）に指定しています。

 **【注意点】**
 記載内容を囲っている「｛｝」中括弧、
 プロパティ部分の「:」コロン、
 値部分の最後の「;」セミコロンが書けるとエラーになり、CSSが適用されないので要注意です。

---------------------------------------------------------
### CSSの記載箇所
 Webページを装飾するためのCSSを記載できる箇所は３つあります。

 基本的にどこに記載してもCSSは反映されますが、プロジェクトによっては１ファイルに記載したコードが冗長にならないようにするためにCSSを記載する箇所を統一することがあります。

 
 **・内部参照**
 　…HTMLを記載しているファイル内に記載。
  ```html:example.html
<html lang="ja">

  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>例</title>
    <style>
      h1 {
        color: red;
      }

      p {
        color: blue;
      }
    </style>
  </head>

  <body>
    <h1>あいうえお</h1>
    <p>かきくけこ</p>
  </body>

</html>
```
--------------------------------------------------------------------
 **・外部参照**
 　…HTMLを記載しているファイルではなく、別ファイルに独立したCSSファイルを作成して記載。
  　または、URLを指定してwebからCSSを取得することもできます。

<<外部参照例①>>
　同一フォルダ内のCSSファイルを指定する例
```html:example.html
<!DOCTYPE html>
<html lang="ja">

  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>例</title>
    <!--下記の箇所で使用するCSSファイルを指定します。-->
    <link rel="stylesheet" href="example.css">
  </head>

  <body>
    <h1>あいうえお</h1>
    <p>かきくけこ</p>
  </body>

</html>
```

```css:example.css
@charset "utf-8";
h1{
  color: yellow;
}
```


<<外部参照例②>>
同一フォルダ内のCSSファイルを指定する例
```html:example.html
<!DOCTYPE html>
<html lang="ja">

  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>例</title>
    <!--下記の箇所で使用するCSSが配置されているURLを指定します。-->
    <link rel="stylesheet" href="https://example.com/styles.css">
  </head>

  <body>
    <h1>あいうえお</h1>
    <p>かきくけこ</p>
  </body>

</html>
```

-----------------------------

 **・インライン**
 　…HTMLの要素内に記載。

```html:
<p style="color: blue;">This is a blue paragraph.</p>
```



---------------------------------------------------------
実は上記３つには参照時の優先順位があり、下記の順にCSSが優先的に適用されます。

**内部参照・外部参照**
（優先度低）

**インライン**
（優先度高）

同一要素に対して複数のスタイルが内部参照や外部参照で記載された場合、
後から記載されたスタイルが優先されます。これはCSSの「後勝ち」という原則です。

--------------------------------------------------------------


### CSSのコメント方法

CSSにてコメントアウトは下記のようになります。

文字色の指定部分を無効にする場合
```css:example.css
@charset "utf-8";
h2{
  /* color: blue; */
  font-weight: bold;
}
```


VScodeを使用している場合は
選択+「ctrl」+「/」で簡単にその選択範囲をコメントアウトすることができます。

------------------------------------------

今回はCSSの基本的な書き方についてまとめました。
次回以降の記事にて、主に使用されるプロパティについての解説していきます。
【超基礎】JavaScriptにおけるファイルの分割まとめ

## 前提
この記事はPython,C,C++がちょっとだけ書ける、読める筆者がProgateでのJS学習を通して、はえ～と思ったことをまとめたものになります。従って、**なんだそれ当たり前だろ**みたいなことしか書かれていませんので悪しからず。

ちなみに生成AI頼りの個人開発をした際，JavaScriptを使いましたのである程度はわかっているつもりですが、自分で書かないと気づけない厳密な部分は何もわかっていないです。

記憶定着用のアウトプットに近いものになりますので、誤っている部分があれば訂正していただけると幸いです。。

https://prog-8.com/courses/es6

 ### 筆者の技術力
 - C,Python (基礎文法~ポインタ、アルゴリズムの授業、研究での使用など)
 - HTML,CSS,JS (大半を生成AIに支援してもらったため読めるが書けない)
 - C++ : (AtcoderのD問題をたまにギリギリ完答できる程度)

## ファイルの分割
開発現場においては、コードの保守性、可読性を高めるためにファイルの分割が推奨される。複雑なコードを複数ファイルに分割することで、コードの拡張や変更が容易になり、コードレビューやリファクタリング等もしやすくなる。

### ファイルの接続
- 宣言されたクラスや変数を異なるファイルで扱う際は、`import`と`export`を使う。
```JavaScript:fruits.js
class Fruits {...} //Fruitsクラスの宣言

export default Fruits; //他ファイルでもFrutisクラスが扱えるようになる
```
```JavaScript:fruitsData.js
import Fruits from "./fruits"; //Fruitsクラスのインポート。
```

### export defaultについて
- 各ファイルのデフォルトのエクスポートを指定する。
➡  1ファイルにつき、1`default export`。
➡  インポート側で名前が違っても問題ない。
```JavaScript:fruitsData.js
import Fru from "./fruits"; //FruitsクラスをFruクラスとして受け取る
```
https://qiita.com/rena_m/items/b9e79dc88e5c5bc5b245

### 名前付きexport
- 一つのファイルから複数のデータをexportしたい時に使われる
- 同じファイル内でのdefault exportとの併用は技術的には可能だがコードの安全性や可読性の観点から推奨されない。
- default exportとは違い、複数データのやり取りをするためファイル間での変数名を一致させる必要がある。
- エイリアスを使えば別名でのインポートも可能
```JavaScript:fruits.js
//2種類のインスタンスを作成
const fruits1 = new Fruits("apple","red");
const fruits2 = new Frutis("banana","yellow");

export{fruits1,fruits2}; //{}で囲んだ中に複数データを格納しエクスポート
```
```JavaScript:fruitsData.js
import {fruits1,fruits2} from "./fruits"; // 同じ名前で{}で囲んでimport

import {fruits1 as f1} from "./fruits"; //エイリアスによる別名でのインポート

// 片方のみのインポートも可能
import {fruits1} from "./fruits"
```

### パッケージのインポート
- 世の中に公開されている様々なパッケージをインポートすることでより効率のいい開発が可能となる。
- 各パッケージの動作はQiita記事や公式ドキュメントを参照する。
```JavaScript:パッケージのインポート
import React from "react"; //fromの後はパッケージ名
```

## まとめ
ファイルのやり取りの部分は生成AIに任せたコーディングでは視界に入ることすらなかったため、改めて多くの学べるところがありました。

当方初学者なため、認知のずれや、モダンな開発現場ではもう使わない表現などがありましたらコメントで指摘していただけると幸いです。😸
LeetCodeを1日1題解いてみる (day12)

12日目に取り組んだ問題はこちら！

# 69. Sqrt(x)

https://leetcode.com/problems/sqrtx/description/

## 問題文
Given a non-negative integer x, return the square root of x rounded down to the nearest integer. The returned integer should be non-negative as well.

You must not use any built-in exponent function or operator.

For example, do not use pow(x, 0.5) in c++ or x ** 0.5 in python.


## 僕の回答

```py
class Solution:
    def mySqrt(self, x: int) -> int:
        i = 1
        while i*i <= x:
            i += 1
        i -= 1
        return i       
```

## より効率の良い回答例

```py
class Solution:
    def mySqrt(self, x: int) -> int:
        if x<2:
            return x

        left, right = 2, x
        while left <= right:
            mid = (left + right) // 2
            if mid * mid == x:
                return mid
            elif mid * mid < x:
                left = mid + 1
                result = mid
            else:
                right = mid - 1

        return result
```

### コメント
二分探索で行うと高速に行えることに気が付かなかった。

### 次の問題はこちら!
https://qiita.com/h_y_s_d/items/ec424aaaa4681740217f
SpeeDBee Synapseをダウンロードした！

概要
・Raspberry Pi Model 4（bookworm）にSpeeDBee Synapseをインストールする為、まずは無償の評価版ソフトウェアをダウンロードします。

１）ソルティスターのWEBサイトを開きます。
https://www.saltyster.com

![website.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/6144fa6f-1b8a-1192-1801-fb943a03972d.jpeg)

２）右上のダウンロードから、評価版ダウンロードを選択します。

![評価版ダウンロード.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/30908ba5-6519-5e72-f22f-835562ca4809.jpeg)

３）評価版ダウンロードページで、以下を入力し「送信」ボタンをクリックします。
・会社：会社名または個人、学生等）
・名前：氏名
・メールアドレス：メールアドレス
・ダウンロードするデータ：SpeeDBee Synapse
・使用予定のプラットフォーム：Raspberry Pi

![送信.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/677ff9b1-d9ca-954d-521a-f3d421dea700.jpeg)

４）ダウンロードページが表示されますので、SpeeDBee Synapseの下の、「評価版ダウンロードページ」をクリックします。

![ダウンロードページ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/7d51e6a0-71fe-861d-7023-b40f9a87e887.jpeg)

５）ダウンロードページが表示されますので、「ダウンロード」ボタンをクリックすると、ZIPファイルがダウンロードされました。

![ダウンロード本ページ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/15c8aefb-c02a-ac57-5cd6-ad055de0c9e4.jpeg)

６）ダウンロードしたZIPファイル（Trial_SpeeDBeeSynapse_vX.X.X）を展開すると、Trial_SpeeDBeeSynapse_vX.X.Xディレクトリが作成され、その配下に評価版のディレクトリ（SpeeDBeeSynapse_vX.X.X一式）が展開されました。

以下に、評判版ファイルの一覧を説明します。

![ディレクトリ1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/f6b1a101-6669-7b8d-c3a9-842955a803d2.jpeg)

・ソフトウェア：パッケージディレクトリ
・マニュアル：マニュアルディレクトリ
・README.txt：評価版のファイル構成、インストール方法
・ライセンスキー.txt：評価版ライセンスキー

▷ソフトウェアディレクトリ配下

![ディレクトリ2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/df5fc65d-5ff1-cba8-f70f-58e6f7511005.jpeg)

・Grafanaプラグイン：Grafana連携プラグインディレクトリ
・Synapse：Synapseパッケージディレクトリ
・Synapse-iTrigger：i-Trigger拡張パッケージディレクトリ

▷マニュアルディレクトリ配下

![ディレクトリ8.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/24679a16-c763-b99f-d763-0dad857fc700.jpeg)

index.htmlを開くと、Synapseのマニュアルを参照できます。

▷Synapseパッケージディレクトリ配下

![ディレクトリ3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/b0fccc80-0bad-5f07-d59d-289c3def5dbe.jpeg)

各種プラットフォーム毎のディレクトリが表示されます。

▷Synapse/RaspberryPiOSディレクトリ配下

![ディレクトリ4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/073b513c-a89e-7cea-b63e-0e55f6ccec0c.jpeg)

Raspberry Pi OS用のSynapseパッケージファイルがあります。

▷Synapse-iTriggerディレクトリ配下

![ディレクトリ5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/459256c6-861a-94d4-b4af-af75aad12c97.jpeg)

各種プラットフォーム毎のディレクトリが表示されます。

▷Synapse-iTrigger/RaspberryPiOSディレクトリ配下

![ディレクトリ6.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/13780899-d721-a1a1-f8b9-9b742252ac2f.jpeg)

Raspberry Pi OS用のSynapse i-Trigger拡張パッケージファイルがあります。（カメラで動画データを取得する場合に必要です。）

▷Grafanaプラグインディレクトリが配下

![ディレクトリ7.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/12532ab0-32bb-2427-63a2-3d6936415087.jpeg)

SynapseとGrafanaを連携するのに設定する、プラグインファイルがあります。

▶以上で、インストールする評価版ファイルをダウンロードする事ができました。

７）ダウンロードページに、サポートコンテンツへのリンクがありました。Synapseの導入ガイド、基本操作等を動画でみれるようです。

![サポートコンテンツ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/57bfa1df-c39e-b0a0-631e-b53f98450412.jpeg)
【メモ】AWSとStreamlitを使っていたらERR_CONNECTION_TIMED_OUTが出まくった話

## はじめに
初めましての人もそうでない人もこんにちは！

今回はタイトルの通りエラーが出まくって軽く詰んだことが直近であったので同じようなことがないよう個人的なメモ用として書いていこうと思います！
今回は、2024年11月ごろにエラーが発生し、解決後すぐに記事を書いたのでバージョンの違いなど気をつけてください！

ぜひ最後まで見ていったら嬉しいです！

## 背景
現在、AWSを使ったChatBotの開発を進めていて、技術は`Python`とそのフレームワークである`Streamlit`を使っています！

開発を進めるにあたってインスタンスを起動させてVSコードを使って接続したり、環境構築をしたりなど色々設定をしました！
そしてテスト実行として以下のコードを入力して実行をしました！
```python:app.py
import streamlit as st
st.write("streamlit")
```
すると`ERR_CONNECTION_TIMED_OUT`というエラーが表示されてしまいました！

調べた感じリージョンであったりセキュリティグループの影響であったりインターネット回線だったりなど様々な要因があるみたいですがどれも課題を解決するには至りませんでした！

## 当時の状態
- OS：Amazon Linux
- インスタンスタイプ：t2.micro
- 回線：良好(光回線)
- セキュリティグループ：https、http、ssh含めソースは`0.0.0.0/0`
- EIP：割当て済み
- リージョン：東京

多くの参考記事を読み込んだり、動画などを見ながらインスタンスを起動したりなどしましたが`ERR_CONNECTION_TIMED_OUT`の魔の手からは逃れられませんでした！

## 解決方法
解決方法は本当に単純でした！
Streamlitを使ったことがある方なら分かると思いますが、Streamlitを起動すると8501番ポートで通信を行うのですが、セキュリティグループのインバウンドのルールで8501ポートが設定されていないことが問題でした！

なので「セキュリティグループ」→「インバウンドルールの編集」の順番で移動して編集をしてください！
そして「ルールを追加」→タイプ：カスタムTCP、ポート範囲：8501、ソース：カスタム・0.0.0.0/0を追加して保存してください！

**Before**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631203/beb3f2e9-89cd-a43c-c1b6-2a02188f8fb4.png)


**After**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631203/42a5fee8-62e4-bdd2-b86a-f3c984586ec9.png)

## おわりに
このエラーを解決するまでにかなりの時間を費やしてしまいました(泣)
皆さんも同じようなエラーに悩まされていたら試されせてはいかがでしょうか？
おそらくすでに同じような解決法が載っているような気がしますがこの記事を参考にしたら「うまく動作した！」となれば幸いです！

今回は試していないのでわからないですがReactなら`3000`、Goなら`8080`とポート範囲を技術によって入れ替えるだけで使用技術が違うけどエラーの解決に繋がると思います！

今回の記事はいかがだったでしょうか?
またどこかの記事でお会いしましょう！
Python環境構築やり方 AppleシリコンMac編

## Pythonとは
高水準のプログラミング言語のことです。
C言語のような機械語に近いプログラミング言語を低水準と言い人間の自然言語に近いものを高水準言語と言います。
そのため、学習コストが低くなります。

## Pythonのインストール
Homebrewのインストールをしていない方は以下のリンクから入れてください
[Homebrew](https://brew.sh/ja/)
**インストールされているかどうかの確認は**
ターミナルを起動して`brew -v`と入力
バージョンが表示されればインストールされています。
`Homebrew 4.4.4`など

### pyenvのインストール
```
brew install pyenv
```
### pathを通す
使っているシェルの確認をする
```
echo $SHELL
```
`zsh`をを使っている場合は`~/.zshrc`と入力
`bash`を使っている場合は、`~/.bash_profile`と入力
`~/.zshrc`が使えなかった場合　`nano ~/.zshrc`と入力

シェルを開いたら
```
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
```
と入力して保存し、閉じる。
```
source ~/.zshrc
```
と入力して読み込ませる。

シェルにpathをコマンドで通すのが怖い時は
`User`のフォルダに行き
`⌘ + shift + .`を押すと隠しファイルが表示される
以下のような`.zshrc`ファイルを開く
![スクリーンショット 2024-11-11 13.08.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3590839/e6a8d5c4-6e0d-56c0-f894-365afdfd8009.png)
```
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
```
を追加する
![スクリーンショット 2024-11-11 13.10.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3590839/603932bf-ea8d-bdb3-4a5a-8a0107d3810a.png)

画像のように追加したら`⌘+s`で保存して閉じる
```
source ~/.zshrc
```
と入力して読み込ませる。
```
pyenv -v
```
と入力して、バージョンが表示されたら成功です。

## python 3.12.5バージョンのインストール
```
pyenv install 3.12.5
```
と入力する。
1. pythonフォルダを作製する
2. そのフォルダまで移動する
3. 
```
pyenv local 3.12.5
 ```
 と入力する
 4.
 ```
 python -V
 ```
 と入力して、バージョンが表示されたら成功です。
 

## 環境構築が成功したならHello Worldを表示してみよう！
#### pythonのサンプルコード(Hello World)
```python
print('Hello World')
```
WordPressの特定ページにだけCSSを適用する方法

# はじめに

WordPressでCSSを追加する方法として、外観→テーマ→カスタマイズ→追加CSSにCSSを追加する方法が最も取られています。(ここに記載したCSSはテーマのアップデートをしても消えないため)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2472147/a1e96ad8-695a-51c5-3cfb-a1aa1c3ad4cd.png)

そこで、WordPressで特定のページにだけCSSを適用する方法を調べていたところ簡単にできたので、ここではその手順について記載します。

# 特定ページにだけCSSを適用する方法

CSSを適用したい投稿・固定ページ・お知らせのいずれかを開き、編集画面の下の方にあるカスタムCSSというところに記載するだけです。
また、カスタムスクリプトというところにはJavaScriptを記載することが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2472147/5698d1bf-5108-507d-f723-987e5da01086.png)

特定のページだけ追加する場合は上記の方法で可能ですが、複数編集したいページがある場合は後の修正などが大変になるので、他の方法が良いかなと思います。
開発健全性ミートアップに参加してきた。「GitHub社のインナーソース文化」

先日、「開発健全性」に関するミートアップに参加しました。今回は特に、GitHub社の「健全なリポジトリを育てるためのインナーソース文化」が面白かったので、ポイントをまとめてみました。

# インナーソース文化とは？
インナーソース文化とは、オープンソースの開発スタイルを企業内で取り入れ、チーム間でのオープンなコラボレーションを促すアプローチです。GitHubでのインナーソースは、開発の透明性を高め、個々の貢献を組織全体の技術力向上につなげることが目的です。

# インナーソースの基本的な原則
ミートアップでは、インナーソースの導入における基本的な原則がいくつか紹介されていました。

### オープン性
- 情報や議論を組織内でオープンに共有し、チーム外のメンバーでも積極的に参画できる環境を作る。
- プライベートなSlackチャンネルや制限されたドキュメントの公開範囲を見直すなど、アクセス性を意識してオープンな文化を築く。

### 透明性
- 開発プロセスの見通しを良くすることで、誰もが同じ状況を把握しやすくする。意思決定の過程を見せることで信頼を醸成し、貢献しやすい環境を整える。

### メンターシップの重視
- 経験豊富なメンバーが積極的に他のメンバーを助け、知識やスキルの共有を促進。リポジトリのメンテナーを明確化することで、メンテナンス性の高い開発を実現する。

### 自由意思による貢献
- 開発者が興味を持って自発的に貢献できる環境を提供し、組織内での学習と改善を推進する。

# 実際の運用でのポイント
インナーソース文化は「社内公開するだけ」ではなく、OSS（オープンソースソフトウェア）のような「貢献と共有」の文化を社内に根付かせることが重要とのことでした。以下のような取り組みが効果的だと感じました。

### コード共有ルールの明確化
社内で「コードを公開してもいい」というルールを定め、誰でもアクセス可能で貢献しやすいリポジトリを育てる。

### チーム間の協力と認識
他のチームからの貢献を受け入れる仕組みを設け、貢献者を認識するためのフィードバックを用意する。これにより、全体の開発効率と健全性が向上する。

#### Pull Requestにめっちゃリアクションする！


# 振り返りと考察
今回のミートアップを通じて、インナーソースの導入が組織の開発文化にどう影響するかを再認識しました。OSSの文化を社内に取り入れることで、開発者同士が「オープンに」協力し合える環境が生まれ、リポジトリの健全性が高まります。また、ただの情報共有ではなく「文化を醸成すること」が重要であることを学びました。

自分のプロジェクトにもこれらの原則を応用し、今後さらにオープンで健全な開発環境を構築していきたいと感じています。


![Gaf4xHdbEAEvQ5_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796362/2b8f2b0b-802e-2127-1358-9cd0152de10e.jpeg)