OmniAICreator/Qiita-1.07M huggingface dataset:
Kotlin初心者がJetpack Composeでテトリス風アプリ作ったので、所感をまとめた。

# :writing_hand:自己紹介
どうも、ikasumi1503です。独学でweb開発を練習してきたのですが、ひょんなことから「アンドロイドを開発しろ」と言われたのでJetpackCompose始めてテトリス作りました。いきなり谷底の中に身を投じたのですが、なんとか這い上がってきました。以下はテトリス開発時に学んだことや困ったことの記録です。

# :eyes:学んだこと

### MVVMパターンとは
JetpackComposeはMVVMパターンで書きました。
MVVMとは、Model、View、ViewModelの三つの頭文字を取ったもので、これらを連結させたものです。それぞれ、おおまかに以下のようになります。

**Model** ... 主にアプリの機能やデータ構造・型定義、データ取得/保存処理を担う部分
**View** ... アプリの表示部分
**ViewModel** ... アプリの現在の状態を管理する。ViewとModelの橋渡しをする部分。

飲食店でたとえるなら、Viewは出されている料理、Modelは調理や発注をする厨房、ViewModelは接客のようなイメージです。
呼び出す関係性を矢印で表すと、次のようになります。

``
Model → ViewModel → Model
``

一方向で流れてますね。逆方向にも呼べるようにすると、役割が逆転したり、再利用性が低くなるというのを避けています。

### :tools:ファイル構成
そして実際には、次のようなファイル構成で組みました。

com.example.tetrisapp/
├── app/
│   ├── MainActivity.kt
│   └── core.ui.theme/
├── feature_game/
│   ├── data/
│   ├── domain/
│   │   ├── entity/
│   │   ├── model/
│   │   └── usecase/
│   ├── ui/
│   │   ├── game_component/
│   │   ├── viewmodel/
│   │   │   └── GameOverScreen.kt
│   │   ├── GameScreen.kt
│   │   ├── MainScreen.kt
│   │   └── MenuScreen.kt
│   └── util/
│       ├── GameConstants.kt
│       └── LevelConstants.kt

#### app/
アプリの入り口。MainActivity.kt はJetpack Composeアプリが起動されると最初に開かれる。

#### core.ui.theme
テーマカラーやTypographyなどUIのスタイル定義を含む。

#### feature_game/
このアプリの主要機能である「テトリスゲームのロジックとUI」を含む機能モジュール。

#### data/
データソースに関する実装を置く場所。APIでデータをストレージから引っ張ってきたりするらしい。

#### domain/
ビジネスロジック層（Model） に該当。

#### entity/
ゲームの状態、ミノなどの純粋なデータ構造やそのデータの処理を置く。

#### model/
entityでどんな関数を使うか、どんなデータを定義するかを置いておく場所。modelは中に何があるかを紹介して、entityは紹介されたものの機能を置いておく。

#### usecase/
アプリ専用の処理を置いておく場所。ViewModelから呼び出される。どこからでも呼び出すとuseCaseっていう紐が絡まってがんじがらめになるので、UIからは直接呼び出さないようにする。

#### ui/
アプリの表示部分（View）を構成。

#### game_component/
ゲーム画面で使われるコンポーネントを管理。

#### viewmodel/
各画面の状態やイベントを管理する ViewModel を配置。

GameScreen.kt, MainScreen.kt, MenuScreen.kt: 各画面を構成するJetpack ComposeのComposable関数。

#### util/
ゲームに必要な定数類をまとめて定義。

細かい処理などはGitHubを見てください。
念のため言いますが、初心者開発なのでAIが吐き出したのと同じレベルのアプリです。参考にするのは自己責任でお願いいたします。
https://github.com/ikasumi1503/TetrisApp

# :frowning2:困ったこと

#### 一つの処理を作るのにUI→ViewModel→Modelというステップを踏まないといけなかったので、めんどくさかったこと

→ Android Studioのスニペット機能を使う
→ ファイルのテンプレート作成機能があるみたいなので、それを使う
→ そもそも別のアーキテクチャ使う

平凡な解決策しかないですが、自動化はいい感じのツールがない限り大抵泥臭くなりますよね。応急措置です。

#### UseCaseの中でUseCaseを使ってしまったこと

→ Util関数を作って対応する
→ UseCaseになっている部分をviewModelのfunにして必要な時に呼び出す

一つのUseCaseを変えるために他のUseCaseを変えないといけない...というのを防ぐために、UseCaseの層数は1つにしといた方がよさそうです。本プロジェクトでは直すのが面倒だったので、そのままにしておきますが次回以降直しておきます。

#### テトリスの設計を図にしてまとめていなくて、処理がシンプルにまとまっていなかった点

→ 図にしてどの関数が必要かをまとめておくと後々まとめなおさなくて楽できそうです。

以上が反省点になります。

#### あまりにも谷底に勢いをつけて突っ込みすぎた点

今回は本や公式のレポジトリなどをあまり見ずにとりあえずはじめてみました。形になるのは早かったのですが、あとから修正する内容がかなりありました。当アプリは計13日で作ったのですが、この修正作業がなければ2~3日は作業を短縮できたのではないかと思います。

新しい技術を触って何かを作るときにはまとまった知識(例えば本)を3時間ほどかけて流し見するとだいぶ変わるかもしれません。地図を把握するだけで大幅なショートカットが期待できます。

# 最後に
知らないものを使って何か作りたいと思えば意外とそれっぽいものを作れますね。引き続きアプリを作ったり新しいツール触っていこうと思います。
ご覧いただきありがとうございました。
Imagine if：Dify ブランド リニューアル

今日はDifyにとって重要な日 ー オープンソース記念2年のアニバーサリーです！この時こそ、私たちは初心を振り返り、まだこれからの道と方向を考える機会です。信念とビジョンを貫くため、私たちはアイデンティティのデザインを一新することにした。

## 初心
2023年、DifyはGitHubでオープンソースとして公開され、未来のAIアプリケーション開発に新たな可能性を提示しました：

* 誰もがAIを構築し、コントロールできるとしたら、何が起こるでしょうか？
* すべての人のアイデアが「能力」として検証される機会を持つとしたら、どのような変革がもたらされるでしょうか？
* テクノロジーの行く末を技術企業ではなく、コミュニティが決定するとしたら、それは人々にとってどのように変わるでしょうか？

私たちはオープンソースを通じてその答えを探し求めています。構築したのは、単なる製品やモデル競争、機能の積み上げ競争への参加ではありません。「What if ……」と問う権利を、すべての人に与えることを目指していました。

なぜなら、私たちを前進させるのは、これらのツールではなく、世界が確実性を求めているときに、可能性の側に立つことを選ぶ人々だからです。

## What if…… 新しいアイデンティティ

本日、Difyはオープンソース化から2周年を迎えました。そして、私たちはアイデンティティを刷新し、当初の意図や方向性により近づけるため、新しいロゴを発表しました。

![logo.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924419/54cebf0d-a805-4b9d-ad1a-1371cbfbd80d.png)

**「if」** を **「Dify」** から分離し、深い思索を想起させるレトロなタイプ書体に変えました。**「Dy」** は現代的なサンセリフ書体であり、未来感と前進するエネルギーを表現しています。

このデザインは過去と未来をつなぎ、無限の可能性を持つ仮説の中での技術へのアプローチを反映しています。

**「if」** は単なる要素ではなく、Difyにおける特別な思考方法を示しています：
* アルゴリズムの厳密なロジック（コンピュータがどう働くかの基本的な考え方）と人間の無限の想像力をつなげる。
* 理性的楽観主義と未来の本質的な不確実性を結びつける。
* 技術の制御可能性と世界の無限の変動性を結びつける。

このデザインは、私たちのコミュニティユーザーからのフィードバックである「抑制的、柔軟、高速イテレーション」を反映しています。

## Imagine if：もしもを想像して

Difyにおいて、**「if」** は創造者、構築者、問題意識を持つ人々のための言語だと私たちは信じています。それは、想像し、実践し、既存のルールの中で新たな道を切り開く勇気を持つ精神です。

![640.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924419/5b176140-9c3e-4193-9553-4474b1beba05.jpeg)

「もしもを想像する」精神は、単なる歴史的な足跡ではなく、今日私たちのコミュニティに生きています。ライト兄弟、フォード、チューリングのような開拓者たちは、「もしも」と問いかけることで世界を再形成しました。あなたたち、私たちのユーザー、開発者、貢献者たちも、今まさにDifyで同じことを実践しています。独自の「もしも」を構築し、技術の未来を少数の者の意見によってではなく、数多くの新たな可能性を加速的に実現しています。

それが、Difyが今日行っていることです — その力をより多くの人々の手に渡すことです。あなたの創造力が未来を形作るのです！

私たちが3周年を迎えるにあたり、「もしもを想像する」という精神を現実にしている素晴らしいコミュニティに敬意を表したいと思います。

<iframe width="1455" height="595" src="https://www.youtube.com/embed/m_Z_Nn239w0" title="New look, new brand, same mission." frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

作り、考え、想像してくれてありがとう。共にAIの未来を切り拓くために、これからも多くの年を重ねていきましょう。未来を共に築きましょう！
【Python】エラー「unsupported operand type(s) for ** or pow(): 'str' and 'dict'」の原因

# 概要
Pythonコードを動かしていたら以下のエラーになりました。

> unsupported operand type(s) for ** or pow(): 'str' and 'dict'

# 原因
シンプルなミスでした。

エラーメッセージでは
「`**`演算子に文字列と辞書は想定されていない」
と言われています。

`**`演算子が不適切な型に対して使用されたってことは、
複数のキーワード引数を指定した際に変数の型がおかしかったのかな？と
思って探してみるが特に問題はなく...

よくみると、原因は「`,`」の記入漏れでした。

```py
        params = {
            'hogehoge' : hogehoge
            **self.SAMPLE_PARAMETERS
        }
```

↓

```py
        params = {
            'hogehoge' : hogehoge,
            **self.SAMPLE_PARAMETERS
        }
```

VSコード上では、上の方でも特に問題があるような波線などは出てきません。
一見すると分からないですね...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/d3c4c990-abf6-4bd3-9ffa-f159ba67a242.png)

以上です！
TableauフィルタとSQLの比較（２）

前回の記事（ https://qiita.com/cyberfuture/items/3f1cbc00c3b292c5caf1 ）で、下記問題に対して対照するSQLを説明いたしました。
１、「売上合計の上位10の製品のカテゴリごとの２０２１年売上合計を表示します。」

本記事では、下記の問題に対して対照して見ます。
２、「２０２１年のデータをもとに、売上合計の上位10の製品のカテゴリごとの売上合計を表示します。」

前回記事では、フィルタ「年（オーダー日）：2021」と「製品名」はそれぞれ独立していますが、今回では、フィルタ「年（オーダー日）：2021」はメジャー「合計（売上）のフィルタ条件（Viz LOD）として有効する上、フィルタ「製品名」のフィルタ条件（Filter LOD）としても有効するはずです。

この問題に対して、SQLの方は理解しやすいなので、まずはSQLを作りましょう。
```sql
select カテゴリ, sum(売上) as 売上合計, sum(利益) as 利益合計 from dbo_Azure.注文
 where year(オーダー日) = '2021'
 and 製品名 in (select 製品名 from (select top 10 製品名, sum(売上) as 売上合計 from dbo_Azure.注文  where year(オーダー日) = '2021' group by 製品名 order by 売上合計 desc) A )
 group by カテゴリ order by 売上合計 desc
```

そのうち、
```sql
製品名 in (select 製品名 from (select top 10 製品名, sum(売上) as 売上合計 from dbo_Azure.注文  where year(オーダー日) = '2021' group by 製品名 order by 売上合計 desc) A )
```
はフィルタ「年（オーダー日）：2021」がフィルタ「製品名」のフィルタ条件（Filter LOD）としても有効するようになります。

検索結果は下記のようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2118029/edb4728f-6237-4867-864e-fc294b4149f9.png)


Tableauのフィルタの間ではそれぞれ独立なので、片方のフィルタを他のフィルタを影響するには、「コンテキストに追加」したらOKです。
フィルタ「年（オーダー日）：2021」を右クリックして、「コンテキストに追加」を選択します。そうすると、Tableau画面が下記のように変更する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2118029/ea022e78-2c39-4da2-b6b3-eb69292d4b84.png)

但し、フィルタが多数がり、一部のフィルタが「年（オーダー日）：2021」に影響されて、それ以外のフィルタが「年（オーダー日）：2021」に影響されない場合、コンテキストは適切でないようになります。
その場合、上位10製品の計算フィールドを作成するか、上位10製品のセットを作成するかのような手段があります。
大文字小文字の反転



今日やったのは `A` を `a` にして `pAIZA` を `Paiza` に戻すみたいな割とシンプルな問題。大文字小文字の反転問題について解説！

<br>

## 問題概要

大文字と小文字のアルファベットが混ざった文字列 `S` が与えらる。
`S` の小文字を全て大文字に、大文字を全て小文字にした文字列を出力せよ。
<Br>
入力例：
    
    Paiza

出力例：
    
    pAIZA
<br>

https://paiza.jp/works/mondai/string_primer/normal_step8

<br>

## ✅コード例
```js
const rl = require('readline').createInterface({input:process.stdin});

rl.once('line',(input)=>{
     // 入力された文字列を1文字ずつの配列に変換する
    const text = input.split('');

    // 大文字・小文字を反転した結果を格納する配列
    const flippedCase = [];

    // 文字ごとに処理を行う
    text.forEach(char => {

        // 文字が大文字の場合（toUpperCaseしても変わらない）
        if (char.toUpperCase() === char) {

            // 小文字に変換して追加
            flippedCase.push(char.toLowerCase());
        }

        // 文字が小文字の場合（toLowerCaseしても変わらない）
        else if (char.toLowerCase() === char) {

            // 大文字に変換して追加
            flippedCase.push(char.toUpperCase());
        }
    });

    // 配列を文字列に戻して出力
    console.log(flippedCase.join(''));
})
```
    
- 文字列を配列に変換 `input.split'')`：1文字ずつ処理できるようにする
- 大文字か小文字か判定 ：`char.toUpperCase() === char` などで判定
- 大文字↔小文字変換 ：`toLowerCase()` / `.toUpperCase()` を使って反転
- 出力 `console.log()` で反転後の文字列を表示

<br>

### 🔍 ポイントは「変換前と変換後が一致するかどうかの比較」

例として、`char = “A”` のとき：
```js
char === char.toUpperCase() → true（＝もともと大文字だった）
```
逆に `char = “a”` のとき：
```js
char === char.toUpperCase() → false（＝もともと小文字だった）
```
つまり、

- `char === char.toUpperCase()` が true → 大文字だった

- `char !== char.toUpperCase()` が true → 小文字だった

という「変換しても変わらなかったかどうか」を見て、判別する仕組み。
```js
if (char === c.toUpperCase()) {
    // 変換しても変わらない → 大文字
} else {
    // 変換された → 小文字
}
```

<br>

## 気づきメモ

- `.toUpperCase()` や `.toLowerCase()` は「変換」だけじゃなく、「判定」にも使える！
- `char === char.toUpperCase()` の発想が新鮮だった。

## <br>まとめ

とりあえず変換して、比べてみる！


<br><Br><br>[僕の失敗談(´;ω;｀)と解決法🐈](https://paizabeginner.wordpress.com/about/)
reactアプリの立ち上げ

　
　
これだけです。
↓
```
npx create-react-app my-app
cd my-app
npm start
```

まんま公式に載ってますw
https://ja.legacy.reactjs.org/docs/create-a-new-react-app.html


自分の投稿に必要な情報まとめておきたかったので。
Appleがだしたml-fastvlmを試しました

# はじめに
しゅんです。今回はApple が公開したマルチモーダルモデル「ml-fastvlm」を、Python の venv 環境下で動かしてみました。
画像と言語を組み合わせたタスクを手軽に試せるので、ロボットやデモ用途にぴったりです。
APPもあるそうです

https://github.com/apple/ml-fastvlm/tree/main/app

以下のように、導入から手順、実行結果、考察までを整理してみました。読みやすさと流れを重視しつつ、必要なポイントはしっかり盛り込んでいます。ご参考ください。


## 環境構築

公式ドキュメントでは `conda` を使っていますが、私は軽量な `venv` を好むため、以下の手順で準備しました。

```bash
# 作業ディレクトリの作成とクローン
mkdir apple && cd apple
git clone https://github.com/apple/ml-fastvlm.git

# venv の作成・有効化
python -m venv .venv
source .venv/bin/activate

# パッケージ更新とインストール
pip install -U pip
cd ml-fastvlm
pip install -e .
```

---

## モデルチェックポイントの取得

事前学習済みのすべてのチェックポイントを一括ダウンロードします。通信環境によっては時間がかかるので、☕️片手に待ちましょう。

```bash
bash get_models.sh
```

---

## サンプル実行

以下のコマンドで、任意の画像に対してキャプション生成が可能です。

```bash
python predict.py \
  --model-path ./checkpoints/llava-fastvithd_0.5b_stage2 \
  --image-file /Users/syun/Downloads/PXL_20250311_052458229.jpg \
  --prompt "Describe the image."
```

### 結果イメージ

![サンプル画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3506235/6de42af9-de6f-438f-baf8-1a4fc7047744.jpeg)

---

## 実行結果比較

### ● 0.5B Stage2 モデル

The image depicts a white shelving unit with three shelves. The shelves are empty except for a few items placed on the top and bottom shelves.

**Top Shelf:**
- There is a red can of what appears to be a canned food product...
- A small red ball is placed on the top shelf...
  
**Middle Shelf:**
- On the middle shelf, there are a banana, a bell pepper, a lemon, and a small orange fruit...
  
**Bottom Shelf:**
- On the bottom shelf, there is a single yellow tennis ball...

**Background:**
- The background consists of a light-colored floor and a grayish wall...


### ● 7B Stage3 モデル

The image depicts a white, four-shelf storage unit placed against a gray wall. The shelves are evenly spaced...  

1. **Top Shelf:**  
   - A can labeled “Puppy Chow” with a white lid and red label...  
   - A small red apple.  

2. **Second Shelf:**  
   - A yellow banana.  
   - A green apple.  
   - An orange.  

3. **Third Shelf:**  
   - A can of Campbell’s Tomato soup with the classic red-and-white design.  

4. **Bottom Shelf:**  
   - A single yellow tennis ball.

**0.5B** は大まかな物体・色の説明でも十分素晴らしいと思います


---

## 今後の展望

* **日本語キャプション対応**：LoRA を使った日本語データでの微調整（Fine-Tuneやってみたい）
* **リアルタイム入力**：Web カメラキャプチャを `predict.py` に組み込み（すでに実装してApple github にIssues投げました）--対応してくれるかどうかはわからないが、一応コードを修正して使えるようにしてたので、気になってる人はコメントかXでDMで連絡してください
TableauフィルタとSQLの比較（１）

Tableauのビュー、フィルタなどは主にGUI操作ですが、そのデータ処理仕様は基本的にSQLと同じです。
今回はフィルタを例として簡単に紹介いたします。

まずは下記問題をご確認お願いします。
「２０２１年、売上合計の上位10の製品のカテゴリごとの売上合計を表示しましょう。」

この問題は実に曖昧になっています。下記２つ違う問題として理解できます。
１、「売上合計の上位10の製品のカテゴリごとの２０２１年売上合計を表示します。」
２、「２０２１年のデータをもとに、売上合計の上位10の製品のカテゴリごとの売上合計を表示します。」
というのは、フィルタ条件「売上合計の上位10の製品」はすべての年度に対して計算するか、２０２１年に対して計算するかの違いです。

SQLを書くと、二つの違う問題がはっきり見えますが、Tableauの初心者では、うまく区別できない可能性があります。

本記事は１、「売上合計の上位10の製品のカテゴリごとの２０２１年売上合計を表示します。」に対して、TableauとSQLをそれぞれ作ってみます。

まずTableauビューを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2118029/e3178c71-ad7c-40f1-9c07-96ff002f5ed4.png)

※こちらのフィルタ「年（オーダー日）：2021」と「製品名」はそれぞれ独立して、同時にメジャー「合計（売上）のフィルタ条件として有効です。」

このTableauビューに対照するSQLは下記の通りです。
```sql
select カテゴリ, sum(売上) as 売上合計, sum(利益) as 利益合計 from dbo_Azure.注文
 where year(オーダー日) = '2021'
 and 製品名 in (select 製品名 from (select top 10 製品名, sum(売上) as 売上合計 from dbo_Azure.注文 group by 製品名 order by 売上合計 desc) A )
 group by カテゴリ order by 売上合計 desc
 ```

 そのうち、検索条件
 ```sql
year(オーダー日) = '2021'
 ```
 はTableauのフィルタ「年（オーダー日）：2021」と同じです。
 
 検索条件
 ```sql
製品名 in (select 製品名 from (select top 10 製品名, sum(売上) as 売上合計 from dbo_Azure.注文 group by 製品名 order by 売上合計 desc) A )
 ```
 はTableauのフィルタ「製品名」と同じです。

 検索結果は下記の通りです。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2118029/1e42b9cc-fed7-43ef-a397-adde9b5d438b.png)


 次の記事（ https://qiita.com/cyberfuture/items/428ad6b47cbf9a75a447 ）では２、「２０２１年のデータをもとに、売上合計の上位10の製品のカテゴリごとの売上合計を表示します。」の問題に対して説明いたします。
【CopilotStudio】Dataverseのナレッジは10件以上取れないのか？

## 予想
先日Copilot StudioでDataverseをナレッジとした制度を検証していました。
前回、1000件のDataverseデータから12件を抽出しようとした際、10件しか回答されなかった。

今回は30件のうち10件を超える対象がある際に
Q1.回答されるのか？
Q2.回答できるようなプロンプトはあるのか？

## まずは10件/10件中出力されるか
正しく回答された

全量は30件
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524942/4aea74b4-870b-4630-8de0-f14dfcb1f298.png)

対象は10件
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524942/8a4ad503-1447-431c-883d-fe37d50b6b2d.png)

テスト結果
10件、予想通り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524942/b775fe5d-c058-407c-a990-4494e20341eb.png)


## 本題の11件/11件中出力されるか

対象は11件
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524942/9ad61e35-e3d1-48c7-9c7b-23dc115272f2.png)

結果は10件だが「その一部です」と表示あり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524942/f11b4ec3-6b46-4306-ac32-6ba10848d7cb.png)

少し言い方を変えると11件とは表示されたものの、詳細の表示は無し
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524942/4d66eeca-4dfb-45a5-9605-3417eaec9029.png)

検証結果、答えてくれず
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524942/cb35b62f-bbfb-45b6-b30e-39ad72363b82.png)

## まとめ
10件以上表示されない仕様の可能性がある。
PulsarのNim plugin

私はvirtualbox上のLinuxにpulsarを入れて、web上の問題を解いたりして、
JuliaやNimの1ファイルで書けるプログラミングを楽しんでいます。
先日LinuxをアップグレードしてPulsarを入れなおしたところ、
Nim pluginを導入できませんでした。
他のディストリビューションでも試しましたがやはり導入できませんでした。
私は結構長くLinuxも使っていますが、
logを解析して問題を解決できるほどの技術がありません。
またこれに関してはweb上に情報が見つかりませんでした。
幸い元のバージョンのLinuxとPulsarが残っていましたので、
そこからNim pluginを持ってくることを考え成功しました。
Logを解析して問題を解決できる人にとっては邪道でしょうが、
私のような人もいるのではと思い投稿することにしました。

PulserのPluginは普通ホームディレクトリの下に、例えば
/home/smallbigcats/.pulsar/packages/Nim
のように.pulsar/packagesの下にpluginの名前のフォルダとして格納されています。
そこでこの共有フォルダの中にNimフォルダを複製しようとしましたが、node_modules/.binの下のmkdirpとrimrafとsemverの三つのファイルが
リンクをサポートしていないとのことで拒否されます。
幸い3つのファイルの中身ははテキストですので、
複製のほうのnode_modules/.binの下に空のファイルを3つ作り、
ファイラーを使って管理者権限で元のNimフォルダに入り、
３つのファイルをそれぞれテキストファイルとして編集用に開き、
内容をコピーし空のファイルにペーストし、同じ名前に変更します。
その後新しくインストールしたPulsarのpackageディレクトリに
新しいNimフォルダを移動または複製します。
もしNimへのpathが通っていなければNim pluginのsettingでpathを設定します。
（pathが見つからないと表示されても実行できることがあります。）
windows11でも、同じフォルダをPulsarのpackagesフォルダ、例えば
c:\user\smallbigcats\.pulsar\packages
に入れるとNim Pluginを導入できます。
なお.pulsarを表示するためにはファイラーのoptionで
隠しファイルを表示にしなければなりません
AppleScriptを使ってワンクリックでローカル環境のファイルを開く

Windowsと違ってMacではファイルパスをコピペするだけでは該当ファイルにたどり着くことができず、いつもひとつひとつ階層をたどっていたので、ローカル環境のURLから現在ブラウザで表示しているファイルをワンクリックで開けるAppleScriptを作成しました。

HTMLを開いている時はエディタで該当ファイルが、画像を開いている時はFinderで該当ファイルが開きます。

指定する箇所は、下記の4箇所です。
* 使用ブラウザ（Google Chrome）
* 使用エディタ（Sublime Text）
* ローカル環境のURL（`https://kirakira.com:8080/`）
* ファイルを格納しているフォルダ名（/Users/username/Sites/kirakira.com/docs/）

```
tell application "Google Chrome"
	set currentTab to active tab of front window
	set currentURL to URL of currentTab
end tell

-- URLをローカルパスに変換
set localFilePath to convertToLocalPath(currentURL)

-- ファイルが存在するかチェック
set fileExists to (do shell script "test -e " & quoted form of localFilePath & " && echo true || echo false") as boolean
if not fileExists then
	display dialog "File not found: " & localFilePath
	return
end if

-- ファイルの拡張子を取得
set AppleScript's text item delimiters to "."
set fileExtension to last text item of localFilePath
set AppleScript's text item delimiters to ""

-- 画像かどうかで処理を分岐
if fileExtension is in {"jpg", "jpeg", "png", "svg", "webp"} then
	-- Finderで開く
	tell application "Finder"
		set fileToReveal to POSIX file localFilePath as alias
		reveal fileToReveal
		activate
	end tell
else
	-- Sublime Textで開く
	tell application "Sublime Text"
		open localFilePath
		activate
	end tell
end if

-- URLをローカルパスに変換するハンドラ
on convertToLocalPath(theURL)
	set AppleScript's text item delimiters to "/"
	set urlParts to text items of theURL
	set fileName to last item of urlParts
	set urlDirectory to (text items 4 thru -2 of urlParts) as text
	set localFilePath to ""
	
	-- kirakira.com用のパス変換
	if theURL starts with "https://kirakira.com:8080/" then
		-- 拡張子をチェックして画像の場合はファイル名なしのパスを生成
		if (fileName ends with ".jpg" or fileName ends with ".jpeg" or fileName ends with ".svg" or fileName ends with ".png" or fileName ends with ".webp") then
			set localFilePath to "/Users/username/Sites/kirakira.com/docs/" & urlDirectory & "/" & fileName
		else if (fileName ≠ "") then
			set localFilePath to "/Users/username/Sites/kirakira.com/docs/" & urlDirectory & "/" & fileName
		else
			set localFilePath to "/Users/username/Sites/kirakira.com/docs/" & urlDirectory
		end if
	end if
	
	-- pikapika.com用のパス変換
	if theURL starts with "https://pikapika.com:8000/" then
		-- 拡張子をチェックして画像の場合はファイル名なしのパスを生成
		if (fileName ends with ".jpg" or fileName ends with ".jpeg" or fileName ends with ".svg" or fileName ends with ".png" or fileName ends with ".webp") then
			set localFilePath to "/Users/username/Sites/pikapika.com/docs/" & urlDirectory & "/" & fileName
		else if (fileName ≠ "") then
			set localFilePath to "/Users/username/Sites/pikapika.com/docs/" & urlDirectory & "/" & fileName
		else
			set localFilePath to "/Users/username/Sites/pikapika.com/docs/" & urlDirectory
		end if
	end if
	
	set AppleScript's text item delimiters to ""
	return localFilePath
end convertToLocalPath
```
fish&fisherセットアップおよびプロンプトレイアウト簡単設定

[fish](https://fishshell.com/)を数年前から利用しており，色々と補完が強力だったり便利なので使い続けています．
設定作業を毎回忘れるので記録しておきます．

## 環境
- Ubuntu 24.04.1 LTS

他にも12のディストリビューション用にリポジトリが用意されているみたいです．
WindowsではCygwinやWSLなどの仮想Linux上での利用になりますね．

## fishのインストール

### リポジトリの準備＆インストール
基本的にはこの[ページ](https://launchpad.net/~fish-shell/+archive/ubuntu/release-4)に記載されている通りに作業しています．

```shell
sudo add-apt-repository ppa:fish-shell/release-4

sudo apt update

sudo apt install fish

fish -v
fish, version 4.0.2
```

fish ver. 4.0.2 をインストールすることができました．

### デフォルトシェルに設定
このシェルを使おうと決めたらデフォルトのシェルを指定しますよね．
決めた割にはコロコロと変わっていますが...

```shell
chsh -s $(which fish)
```

再ログインすればfishに置き換わっているはずです．

### fish専用パッケージマネージャをインストール
fishには便利なパッケージが多様にあり，それらパッケージを管理するためのツール[fisher](https://github.com/jorgebucaran/fisher)があります．

fisherのGitHubに記述されている通りインストール作業をします．

```shell
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
```

(awesome-fish)[https://github.com/jorgebucaran/awsm.fish#readme]リポジトリに秀逸なパッケージが列挙されています．

### fishのプロンプトをカスタマイズ
こういう系は色々手を加える時間の余裕がないのでプラグインに頼ります！
私が利用させていただいているパッケージは[tide](https://github.com/IlanCosman/tide)です．
対話形式でプロンプトの設定を変更してくれるので簡単にベースのレイアウトは整います．
インストールはバージョンが更新されている可能性があるのでリポジトリを参照してください．
```shell
fisher install IlanCosman/tide@v6
    fisher install version 4.4.5
    Fetching https://api.github.com/repos/ilancosman/tide/tarball/v6
    Installing ilancosman/tide@v6
               ~/.config/fish/functions/_tide_1_line_prompt.fish
    ：
               ~/.config/fish/completions/tide.fish
    Configure tide prompt? [Y/n]
```
こういった形でインストール後すぐに設定するかどうか聞かれるので続行しましょう．
設定項目は下記の通りでした．
1. Prompt Style: Classic **(2)**
1. Prompt Colors: True color **(1)**
1. Prompt Color: Dark **(3)**
1. Show current time?: 24-hour format **(2)**
1. Prompt Separators: Angled **(1)**
1. Prompt Heads: Sharp **(1)**
1. Prompt Tails: Flat **(1)**
1. Powerline Prompt Style: Two lines, character **(2)**
1. Prompt Connection: Solid **(3)**
1. Right Prompt Frame: No **(1)**
1. Connection & Frame Color: Darkest **(4)**
1. Prompt Spacing: Sparse **(2)**
1. Icons: Many icons **(2)**
1. Enable transient prompt?: **(2)**
1. Finish: Overwrite your current tide config **(y)**

括弧内の文字を入力すれば私の選択を再現できますが，"Icons" の設定に関してはNerd Font対応のフォントに設定しているターミナルを使わないと化けまくります．

完了系はこのような感じです．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36125/ae894e3e-86e9-400f-9101-28033c7b9026.png)

## まとめ
ひとまずfishをインストールし，プロンプトをモダンなレイアウトにする流れを記載しました．

VSCodeやCursorなどのGUIエディタが普及している昨今ですが，ターミナル上での作業は依然として多く，エディタ上でシェルを扱う機会も少なくありません．こうした状況を踏まえると，強力なシェルに変更しておいて損はないでしょう！
DeepResearch と NotebookLM で手軽にラジオを作成

## 1. Geminiにプロンプトを入力し、情報を収集・整理

まず、音声概要を作成したいトピックに関する情報をGeminiに集めてもらいましょう。

1. [Gemini](https://gemini.google.com/) にアクセスします。
2. 入力欄に、音声概要を作成したい内容に関する**プロンプト**を具体的に入力します。例えば、「最新のAI技術の動向について、主要なポイントと将来の展望をまとめてください」や「再生可能エネルギーの種類ごとのメリット・デメリットと、普及に向けた課題をリストアップしてください」といった形で、できるだけ詳細な情報を得られるように工夫します。
3. プロンプト入力後、`deep research` オプションが選択されていることを確認してください。これにより、より深く広範囲な情報を収集できます。
4. 準備ができたら、**送信ボタン**をクリックします。

![スクリーンショット 2025-05-15 13.59.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4056818/7eba5703-bf53-4c0b-bbaf-132d488f54f6.png)


## 2. リサーチ計画の確認と実行

プロンプトを送信すると、Geminiが自動的にリサーチの計画を提案してくれます。

1. 提示された**リサーチ計画**に目を通し、意図した方向性と合致しているかを確認します。必要であれば、この段階で調整も可能です。
2. 計画内容に問題がなければ、`リサーチを開始` ボタンをクリックしてください。Geminiが関連情報を収集し、整理を始めます。リサーチが完了するまで、しばらく待ちましょう。

![スクリーンショット 2025-05-15 14.09.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4056818/6e6ee01b-7b27-4d83-a34a-7de14bfe15cf.png)


## 3. 調査結果をGoogleドキュメントにエクスポート

リサーチが完了すると、Geminiは収集した情報を基に一つのドキュメントを生成します。

1. 生成されたドキュメントの内容を確認します。これが音声概要の元となる情報になります。
2. ドキュメントの上部に表示されている `Googleドキュメントにエクスポート` ボタンを選択してください。これにより、調査結果があなたのGoogleドライブに保存されます。

![スクリーンショット 2025-05-15 14.48.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4056818/e9f4ccf5-0707-495c-be1f-e8a00192bdb6.png)


## 4. NotebookLMで新しいノートブックを作成

次に、作成したGoogleドキュメントをNotebookLMで読み込み、音声概要を生成するための準備をします。

1. [NotebookLM](https://notebooklm.google.com/) を開きます。
2. 画面左上にある `+ 新規作成` ボタンをクリックし、新しいノートブックを作成します。

![スクリーンショット 2025-05-15 14.51.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4056818/2def8ed8-ff7d-402d-9c76-b90f68c567c8.png)


## 5. ソースとしてGoogleドキュメントを追加

作成した新しいノートブックに、先ほど準備したGoogleドキュメントをソースとして追加します。

1. 新しいノートブックが開くと、`ソースを追加` というタブが表示されます。
2. 左下の `Google ドキュメント` を選択します。
3. あなたのGoogleドライブが開きますので、ステップ3で保存した**情報収集結果のドキュメントファイルを選択**し、ノートブックに追加します。

![スクリーンショット 2025-05-15 14.52.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4056818/81d062db-2890-45ea-b06b-5a272b34d846.png)


## 6. 音声概要を生成する

いよいよ音声概要を生成します。

1. ドキュメントがソースとしてノートブックに追加されると、NotebookLMがその内容を分析します。
2. `studio` タブ内の `生成` ボタンをクリックします。（UIは更新される可能性があるため、類似の機能名を探してください）
3. 音声概要の生成が開始されます。処理にはドキュメントの長さや内容によって数分程度かかる場合があります。
4. 処理が完了すると、生成された音声概要が表示され、再生したり、ダウンロードしたりすることが可能になります。

![スクリーンショット 2025-05-15 14.55.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4056818/9630ca61-bcde-4cbc-a274-d28786afa898.png)


## 【代案】すでにある外部データから音声概要を作成する場合

もし、ステップ1〜3のようなGeminiによる情報収集プロセスを経ずに、すでにお手元に音声概要にしたいドキュメント（例: テキストファイル、PDF、コピーしたテキストなど）が存在する場合は、以下の手順で進めることができます。

1. **ステップ4** と同様に、NotebookLMで新しいノートブックを作成します。
2. **ステップ5** のソース追加の際に、`Google ドキュメント` ではなく、`ファイルをアップロード`（PDFやテキストファイルの場合）や `テキストを貼り付け` などの適切なオプションを選択し、お手持ちのデータをソースとして追加します。
3. その後、**ステップ6** と同様の手順で音声概要を生成してください。

---

これで、Geminiで効率的に情報を収集し、その結果をNotebookLMで手軽に音声概要に変換する一連の流れが完成です。ぜひこの強力な連携を活用して、情報収集からコンテンツ活用までのプロセスを大幅に効率化してください。
ABC055C(ARC069A)を解きました

[問題文](https://atcoder.jp/contests/abc055/tasks/arc069_a)
[Scc(Strongly connected component)とは](https://manabitimes.jp/math/1250)
## 解説 ##
まず、<code>S</code>が $N$ 個、<code>c</code>が $M$ 個あるとしたとき、変化させずに作れる<code>Scc</code>の数は $\min(N,\lfloor \frac{M}{2} \rfloor)$ 個となります(以降、$M$ を $2$ で割っておくことにします)。
そして、変化させてできる<code>S</code>が $x$ 個あったとする時、$\min(N + x,M - x) (0 \le x \le M)$ となります。
これの最大値を求めてみます。$\min(N + x,M - x) = \frac{N + M - |N - M + 2x|}{2}$ となりますので、$\frac{N + M}{2} - \min(\frac{|N - M + 2x|}{2}|0 \le x \le M)$ を求めれば良いです。
まず、$M \le N$ の時を考えます。この時、$x = 0$ とすれば最大値 $M$ が得られます。
次に、$M > N$ の時を考えます。この時、$x = \lfloor \frac{M - N}{2} \rfloor$ とすれば最大値 $\frac{N + M - (N - M)\mod 2}{2} = \frac{2 \lfloor \frac{N + M}{2} \rfloor}{2} = \lfloor \frac{N + M}{2} \rfloor$ が得られます。
以上の議論より、答えは、$M$ を $\lfloor \frac{M}{2} \rfloor$ に変換したとして、$M \le N
$ なら $M$ 、$M > N$ なら $\lfloor \frac{N + M}{2} \rfloor$ が答えとなります。
ACコード(1ms)
```c++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main() {
  ll N, M;
  cin >> N >> M, M /= 2;
  cout << (M > N ? (N + M) / 2 : M) << endl;
}
```
大小で場合分けして考える、という手法は基本だと思うのでこれからも学んでいきたいです
【STM32CubeMX + mbedTLS】自動生成される `mbedtls_hardware_poll()` は脆弱

# 【STM32CubeMX + mbedTLS】自動生成される `mbedtls_hardware_poll()` は脆弱

## ✅ 環境

- **マイコン**：STM32F750N8H  
- **ツール**：STM32CubeMX v6.12.0  

---

## ⚠ 問題の背景

STM32CubeMXで `mbedTLS` を有効にすると、`mbedtls_hardware_poll()` という関数が**自動生成されます**。この関数は STM32 のハードウェア RNG（`HAL_RNG_GenerateRandomNumber()`）を使ってエントロピーを提供します。

ところが、**そのままのコードにはセキュリティ上の問題があります**。

---

## ❌ 自動生成される問題のあるコード

```c
int mbedtls_hardware_poll(void *Data, unsigned char *Output, size_t Len, size_t *oLen)
{
  uint32_t index;
  uint32_t randomValue;

  for (index = 0; index < Len/4; index++)
  {
    if (HAL_RNG_GenerateRandomNumber(&hrng, &randomValue) == HAL_OK)
    {
      *oLen += 4;
      memset(&(Output[index * 4]), (int)randomValue, 4);  // ← NG！
    }
    else
    {
      Error_Handler();
    }
  }

  return 0;
}
```

---

## 🚨 何が問題なのか？

`memset()` は、指定された1バイトの値でメモリを埋める関数です。

```c
memset(ptr, value, size);
```

たとえば `randomValue = 0xDEADBEEF` のとき、最下位バイト `0xEF` が4バイト分 `Output` に書き込まれます。

つまり：

- **4バイト中、実際にランダムなのは1バイトだけ**
- **エントロピー（情報量）が極端に少ない**

---

## ✅ 正しい修正：`memcpy()` に置き換える

```c
int mbedtls_hardware_poll(void *Data, unsigned char *Output, size_t Len, size_t *oLen)
{
  uint32_t randomValue;

  for (uint32_t index = 0; index < Len / 4; index++)
  {
    if (HAL_RNG_GenerateRandomNumber(&hrng, &randomValue) == HAL_OK)
    {
      memcpy(&Output[index * 4], &randomValue, 4);
      *oLen += 4;
    }
    else
    {
      return MBEDTLS_ERR_ENTROPY_SOURCE_FAILED;
    }
  }

  return 0;
}
```

このようにすれば、**32ビットの乱数値を正しくエントロピーとして扱うことができ、TLS通信や鍵生成などにおけるセキュリティ要件も満たせます。  

---

## おわりに

STM32CubeMX は便利なコード生成ツールですが、**生成されたコードが常に安全とは限りません**。`mbedtls_hardware_poll()` のようなセキュリティクリティカルな関数については、必ず内容を確認し、必要な修正を行いましょう。
ZScaler 配下でnpm install ができなかったときの対応方法

# はじめに

先日 [メイン環境がWindowsに変わったためにやったこと・覚えたこと](https://qiita.com/keiichi-hikita/items/25af9f862a8e33fd7c56) という記事を書いたのですが、数ヶ月が経過し MacBook Pro 環境が戻ってきました。

これでほぼ前職のNTTコミュニケーションズ時代とおなじになり、かなり各種作業が楽になりました。

一方で、実は前職では業務上の都合で使用していなかった ZScaler の導入を余儀なくされたという差分だけが出てます。
この状況で開発のために `npm install` したらいきなり以下のエラーとなりまして、それをどうやって回避したか？というのが本記事の内容です。
(pyalwright-mcp を試そうとしたところハマった)

```bash
% npm install                                                                           
npm error code UNABLE_TO_GET_ISSUER_CERT_LOCALLY
npm error errno UNABLE_TO_GET_ISSUER_CERT_LOCALLY
npm error request to https://registry.npmjs.org/playwright-core/-/playwright-core-1.53.0-alpha-1746832516000.tgz failed, reason: unable to get local issuer certificate
npm error A complete log of this run can be found in: /Users/[username]/.npm/_logs/2025-05-15T05_28_23_642Z-debug-0.log
```

# やったこと

[こちら](https://help.zscaler.com/ja/zia/adding-custom-certificate-application-specific-trust-store) に書かれているんですね。
(社内で質問したら、同じく社内の方がすぐに教えてくださったので感謝)

具体的には、証明書を何かしらのパスに保存します。
キーチェーン上の名前は「Zscaler Root CA」らしいので以下を実行します。

保存ファイル名は `ca-bundle.pem` としていますが、実際には何でも良いです。

```bash
cd [保存したい場所]

security find-certificate -p -c "Zscaler Root CA" > ca-bundle.pem

npm config set cafile /path/to/ca-bundle.pem

echo "export NODE_EXTRA_CA_CERTS=/path/to/bundle.pem" >> $HOME/.zshrc

source ~/.zshrc
```

これで npm install が通るようになりました。

```bash
% npm install                                                                         

added 312 packages, and audited 313 packages in 32s

119 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
```

これで快適な環境が戻ってきました。

以上です。
PowerShellで文字化け？ .gitignoreファイルの保存形式に要注意だった話

## はじめに

VSCode + Git + PowerShell の環境で `.gitignore` を編集していた際に、PowerShellで中身を確認したところ文字化けが発生しました。原因とその対処法を簡潔にまとめます。

---

## 発生した問題

* PowerShellで `.gitignore` を `type` コマンドで表示した際、日本語コメントが文字化けする

---

## 原因の理解

### 🔸 UTF-8とBOMの違い

* UTF-8には **BOM付き（with BOM）** と **BOM無し（without BOM）** がある
* BOMとは "Byte Order Mark" の略で、ファイルの先頭に文字コード情報を記述するメタデータのようなもの

### 🔸 PowerShellの仕様

* PowerShellはBOM無しのUTF-8を正しく認識できないことがあり、**Shift\_JISなどで誤解釈して文字化けが発生**

### 🔸 `.gitignore` などの設定ファイルとBOMの相性の悪さ

* `.gitignore` は Git が「各行を1つのパターン」として読み込む、非常に単純なテキスト処理の対象です
* そのため、BOM付きで保存すると**ファイルの先頭（1行目）に見えないBOMバイトが追加され、Gitがその行を正しく解釈できなくなる**ことがあります
* 例：本来は `.venv/` と記述していたつもりが、Gitから見ると `\ufeff.venv/` のように見えてしまい、無視ルールが機能しなくなる
* 特に `.env`、`.dockerignore`、`.gitattributes` なども同様で、**単純なテキスト行マッチに依存する構成ファイルではBOMは百害あって一利なし**です

---

## 解決方法

### ✅ `.gitignore` などの構成ファイル

* `UTF-8 (BOM無し)` で保存する（デフォルトでOK）
* PowerShellで文字化けしても、`.gitignore` の機能には影響なしと割り切ってよい

---

## 気づきと学び

* 文字コードの細かい違いが、**開発の進行を不意に妨げることがある**
* ただし、重要なのは「実害があるかどうか」「進行に支障が出るか」を冷静に判断すること
* 今回は、`.gitignore` はBOM無しで問題ないこと、PowerShellは表示上の問題だけだと理解した上で、**気になる部分を再保存だけして先に進む判断をした**

---

## おわりに

細かいところが気になる性格は、時に開発のブレーキになります。ただし、原因を理解し、自分の中で区切りをつけて進むこともまた必要。自分自身の学びとして記事にしておきます。この記事が、同じような違和感やつまずきに出会った方の参考になれば幸いです。

---
# はじめてQiitaに投稿してみようと思った理由

## はじめに

私は普段、PythonやVSCode、GitHubを使って個人プロジェクトを進めています。
開発の過程では、ちょっとした違和感や小さなつまずき、調べて初めて分かるようなことに日々出会います。

これまでは、それらを自分の中でメモや記憶として処理してきましたが、ふと「それを外に出してみるのも悪くないかもしれない」と思うようになりました。

## なぜ今Qiitaに書こうと思ったのか？

Qiitaにはたくさんの知見や経験が共有されています。
そうした記事に何度も助けられてきた経験もあり、自分も何かしら「残す側」に回ってみたいと感じました。

特に、日々の開発でつまずいたり、気になったことを**自分の言葉で記事にすることで、知識が定着する**という効果も大きいと聞きます。

また、**自分がつまずいたことは、きっと誰かも同じようにつまずいている**。
そういった人の一助になれればという思いも重なり、今回Qiitaで記事を書いてみようと決意しました。

## おわりに

エンジニアとして特別な実績があるわけではありませんが、
だからこそ「誰でも経験するようなつまずき」や「小さな気づき」を共有していくことに価値があるのではと思っています。

まずは小さな一歩として、Qiitaでの最初の記事を書いてみることにしました。
これから少しずつ、自分の学びや気づきをアウトプットしていきたいと思います。
どうぞよろしくお願いします。
hostnamectl - Control the system hostname

```sh
sudo hostnamectl set-hostname new-hostname
```

```
hostnamectl

 Static hostname: ...
       Icon name: computer-server
         Chassis: server
      Machine ID: 002f78fbb8ff4ec48632c32b9675f4ea
         Boot ID: 469c16a33ae24f92bb7e1bc3c9b95eca
Operating System: Ubuntu 24.04.2 LTS
          Kernel: Linux 6.8.0-59-generic
    Architecture: x86-64
 Hardware Vendor: Supermicro
  Hardware Model: Super Server
Firmware Version: 3.4
   Firmware Date: Thu 2025-02-13
    Firmware Age: 2month 4w 2d

Static hostname: ...
       Icon name: computer-vm
         Chassis: vm
      Machine ID: 9f25fa7ef5d05a68de9ce9f576ff50e1
         Boot ID: dbe2aed52a3b4b1ba00a61c8815311ca
  Virtualization: kvm
Operating System: Ubuntu 22.04.4 LTS
          Kernel: Linux 5.15.0-113-generic
    Architecture: x86-64
 Hardware Vendor: Red H

Static hostname: ...
       Icon name: computer-vm
         Chassis: vm
      Machine ID: be6673b1511e408b949d2ee087024edd
         Boot ID: 95c93778a221446fb8e2850d0256aff0
  Virtualization: kvm
Operating System: Ubuntu 22.04 LTS
          Kernel: Linux 5.15.0-130-generic
    Architecture: x86-64
 Hardware Vendor: Tencent Cloud
  Hardware Model: CVM

Static hostname: ...
       Icon name: computer-vm
         Chassis: vm
      Machine ID: c9442a5c7f1d4a4aaf3b7443e5b1b955
         Boot ID: 91dc7b0696974cf599acfd8f4b1eeba0
  Virtualization: kvm
Operating System: Ubuntu 24.04.2 LTS
          Kernel: Linux 6.8.0-57-generic
    Architecture: x86-64
 Hardware Vendor: Alibaba Cloud
  Hardware Model: Alibaba Cloud ECS
Firmware Version: 0.0.0
   Firmware Date: Fri 2015-02-06
    Firmware Age: 10y 3month 1w 4d

Static hostname: ...
       Icon name: computer-server
         Chassis: server
      Machine ID: 9cf73573d23b42efb035b28006b9e4da
         Boot ID: 31bb18e2d0554d52b610f517744a5307
Operating System: Ubuntu 24.04.1 LTS
          Kernel: Linux 6.8.0-50-generic
    Architecture: x86-64
 Hardware Vendor: Supermicro
  Hardware Model: AS -2124BT-HTR
Firmware Version: 2.5
   Firmware Date: Fri 2022-09-23
    Firmware Age: 2y 8month 4d
```
Oracle Cloud Infrastructure（OCI）のArchitect Associateを取ってみる話

ご無沙汰にも程があるだろと自分でも思いますが皆様いかがお過ごしでしたでしょうか。

私はこの春から転職をしました。
前職の業務内容は日々の問い合わせや全国から新たに来る依頼に対しての調整、社内利用IT機器の選定～購入まで、インフラ工事の立ち合いにサーバーの停電対応などなど・・・
ジャンル分けするとしたら社内インフラSEというようなものだったと思います。

未経験から入社して
__pingってなに？
IPアドレスって？
192.168.3.0/24ってどういう意味？
HDDとSSDの違いは？
SMBってなんの略？__
などなど、NWの基礎だったり疎通という言葉の意味だったり、ハードの種類やここに書き出せないほど多くの様々な事を教えてもらいました。
Webエンジニアを目指して転職活動をし始めたのがいまから約5年前。
とっても遠い昔のように感じますが振り返ってみるとあっという間だったと感じます。
未経験でアラフォーというダブル特性があったので雇用する会社側も大きなリスクがあったと思いますが
あの当時の私に内定を出して下さりここまで育てて下さったことは深く感謝しています。


そして色々なご縁があり今の会社に転職することができ、自分のやりたいことへのチャレンジをさせていただける環境になりました。
まず手始めにOCI Architect Associateの資格取得をします。
ここでいい結果が報告できるように頑張っていきます！

それではまた:wave:
CNN（畳み込みニューラルネットワーク）と全結合モデルの違い



ニューラルネットワークには様々な種類があり、
その代表的なものに「**CNN（畳み込みニューラルネットワーク）**」と「**全結合モデル**」があります。それぞれに特徴があり、適切なタスクに応じて使い分けられています。
本記事では、CNNと全結合モデルの違いについて簡単に解説します。

## 1. アーキテクチャの違い

### **全結合モデル（FCN）**

* **構造**: すべての層が前の層と完全に接続されています。
            入力から出力まで、各ニューロンが全て接続されています。
* **特徴**: 大量のパラメータを持つため、計算リソースを多く消費します。

### **CNN（畳み込みニューラルネットワーク）**

* **構造**: 畳み込み層（Conv層）やプーリング層（Pooling層）などを組み合わせた構造で、画像データなどの空間的特徴を効果的に捉えます。
* **特徴**: 局所的な特徴を抽出するための畳み込み層、情報を圧縮するためのプーリング層を使うことで、効率的に計算できます。

## 2. データ処理の方法

### **全結合モデル（FCN）**

* 入力データはすべて1次元ベクトルに変換され、層間のすべてのニューロンが接続されます。
* 画像データの場合、空間的な情報が失われるため、画像認識タスクに向いていません。

### **CNN（畳み込みニューラルネットワーク）**

* 畳み込み層を使って、局所的な特徴（エッジやテクスチャなど）を抽出します。
* プーリング層で特徴を圧縮し、計算資源を節約しつつ、重要な情報を保持します。

## 3. 画像データへの適応

### **全結合モデル（FCN）**

* 画像を1次元ベクトルに変換して処理しますが、空間的な特徴が失われやすいため、画像認識には適していません。

### **CNN（畳み込みニューラルネットワーク）**

* 畳み込み層で画像の局所的な特徴を捉え、空間的な構造を維持しながら処理するため、画像分類や物体検出タスクに非常に効果的です。

## 4. 計算効率

### **全結合モデル（FCN）**

* すべてのニューロンが前の層と接続されるため、パラメータ数が膨大になり、計算リソースを大量に消費します。

### **CNN（畳み込みニューラルネットワーク）**

* 畳み込み層のフィルタが特徴を抽出し、パラメータ数を効率的に減らすことができ、計算資源を節約します。

## 5. 主な使用シーン

### **全結合モデル（FCN）**

* 画像データや空間的依存関係を持たないデータ（タブularデータや時系列データ）に適しています。

### **CNN（畳み込みニューラルネットワーク）**

* 画像認識、物体検出、音声認識など、空間的・時間的な依存関係を持つデータに特化しており、非常に高いパフォーマンスを発揮します。

## まとめ

* 全結合モデル（FCN）は、主に空間的特徴が少ないデータ（タブularデータや一部の時系列データ）に適しており、計算資源を多く消費します。
 CNN（畳み込みニューラルネットワーク）は、画像や時系列データなどの空間的・時間的な関係を持つデータに非常に効果的で、計算効率が良く、高いパフォーマンスを発揮します。

画像認識などのタスクでは、CNNの方が遥かに優れた結果を出すことが多いです。

---
connect app oauth 2.0



https://medium.com/@sfdcsushil/salesforce-client-credentials-oauth-flow-12c55e11e06a 

client credentials oauth flow

    １、パスワードはいらない
    ２、RUNAS USERの指定が必要
    ３、client key ,secretが必要
    ４、granted type= credentials

一般的の認証方法：granted type= password

    １、パスワードとusernameが必要
    ２、RUNAS USERの指定が不要
    ３、client key ,secretが必要
    ４、granted type= password
UnityJapanのTinyCharacterControllerをSpineのモデルで使用してみた

# 概要
2Dゲームを作るにあたって時間削減のために[TinyCharacterController](https://github.com/unity3d-jp/Project_TCC/tree/main)を使用できないかなと思い、試してみました。

# 環境
- Unity 6000.0.23f1
- TinyCharacterController 0.7.0

# 実装
### とりあえずそのまま使用してみた
TCCは3Dモデルを前提に作られているので`MoveControl`[^1]などでキャラクターを移動させると移動方向にキャラクターのZ軸が向くようになっているので、Spineだとペーパーマリオみたいになってしまいます。なのでこの回転を司ってる部分を止めて、Spineの向きを変える処理を独自に実装する必要があります。

### 回転を司ってる部分
回転をさせる必要があるコンポーネントには[`ITurn`](https://github.com/unity3d-jp/Project_TCC/blob/main/Packages/com.utj.charactercontroller/Runtime/Components/Interfaces/Core/ITurn.cs)というインターフェイス実装させており、`CharacterBrain`と同じ`GameObject`に追加されてるTCCのコンポーネントに実装されてる`ITurn`をすべて取得、毎フレーム回転量を[`TurnManager`](https://github.com/unity3d-jp/Project_TCC/blob/main/Packages/com.utj.charactercontroller/Runtime/Components/Core/TurnManager.cs)で計算してキャラクターに反映してます。

### 改修
TCCは自前で新たに実装できるようなってるので、TCCのコンポーネントから`ITurn`、`IPriorityLifecycle<ITurn>`を抜いた新たなコンポーネントを実装します。

これで回転しなくなるので、自前でSpineの向きを変えます。
Spine公式だとSpineのクラスの`Skeleton`のScaleXを1か-1にして向きを変えてたのでそうしました。
```C#
_skeletonMecanim.skeleton.ScaleX = isLeftDirection ? 1: -1;
```

# その他TCCについて
`CharacterBrain`がUnityのCharacterControllerを継承しているので物理関係や当たり判定などは3Dを使用していて2D向けのColider2Dでは使用できません。

基礎的なことは一通りできますが、細かいことやろうとしたら自分で実装しないといけないので本格的なもの作りたいなら参考程度にして自前でキャラクターコントローラー実装したほうがいいかもしれません。


[^1]: 入力に応じてキャラクターを移動させるコンポーネント
アレイ（配列）・オブジェクト型の変数への値の入れ方

ごきげんよう、百合宮桜（Miyu）です。
Power Automate でアレイやオブジェクト型への値の入れ方を忘れがちなのでメモしておきます!(^^)!

# アレイとオブジェクトの違い
表をイメージしてください。
アレイは表のデータ全部！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/57608c92-f0b8-4e78-be76-072acc1c54fe.png)

オブジェクトは表のレコード1つ1つのこと！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/9af8d55a-01af-4387-9d33-570d4c3cb7d9.png)

なので **アレイ=複数のオブジェクトのまとまり** ということです( *´艸｀)
だから配列変数に追加アクションではオブジェクトを作って入れると配列(アレイ)ができる！というわけ✨

# オブジェクトの作り方
ルールは以下の5つ
1. {}で囲う
2. 項目名は""（ダブルクォーテーション）で囲う
3. 項目名と値の間は : （コロン）で区切る
4. 値は ""（ダブルクォーテーション）で囲う 
5. 項目を複数個含めるときは , （カンマ）で区切る

```
{
    "項目名":"値",
    "項目名":"値"
}
```

なので以下のようなオブジェクトを作りたい時は

| 利用日 | 利用者 |
|:-:|:-:|
| 2025/05/02  | テスト ユーザー  |

```
{
  "利用日": "2025/05/02",
  "利用者": "テスト ユーザー"
}
```

という形式で配列変数に追加アクションや変数の設定アクションに定義します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/ca2728e8-2085-44f0-bd11-e907bfcad02a.png)


値には動的なコンテンツを含めることもできますので、ぜひチャレンジしてくださいね。それではごきげんよう( *´艸｀)
話題のAIカートゥーンジェネレーターで遊んでみたら想像以上に楽しかった話

## 話題のAIカートゥーンジェネレーターで遊んでみたら想像以上に楽しかった話
![acg.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088378/b56bae36-54bf-4ad1-bb8e-05f284f2806e.jpeg)

最近、SNSとかGitHubのプロフィール画像で、いい感じのイラストアイコンを使っている人をよく見かけませんか？「絵心ないしなぁ…」と思っていたんですが、どうやらAIで写真からアニメ風のキャラクターを生成してくれる「[AIカートゥーンジェネレーター](https://aicartoon.org)」なるものが流行っているらしいと耳にしました。

気になったので、実際にいくつか試してみたところ…これが想像以上に面白かったんです！今回はその体験談をシェアしたいと思います。

### AIカートゥーンジェネレーターって何？

簡単に言うと、自分の顔写真などをアップロードするだけで、AI（人工知能）がそれを元にアニメキャラクター風、漫画風、あるいは特定のアーティスト風のイラストに変換してくれるツールです。裏側では深層学習（ディープラーニング）といった技術が使われていることが多いみたいですね。

専門知識がなくても、数クリックで「それっぽい」イラストが手に入るのが魅力です。

### 実際に使ってみて感じたこと

#### とにかく手軽！

多くのジェネレーターは、ウェブサイトにアクセスして画像をアップロードするだけ。アプリをインストールする必要がないものも多いので、思い立ったらすぐに試せるのが良いですね。操作も直感的で、迷うことはほとんどありませんでした。

#### 予想外の発見がある（笑）

自分の写真がどんな風に変換されるのか、毎回ワクワクします。時には「おぉ、これはイイ！」と感動することもあれば、時には「え、誰これ…？」と笑ってしまうような結果になることも。でも、それも含めて楽しい体験でした。

「この写真だと、こんな感じになるのか～」と、AIのクセみたいなものを見つけるのも一興です。

#### いろんなスタイルが試せる

一口に「カートゥーン」と言っても、日本のアニメ風、アメコミ風、ディズニーピクサー風、水彩画風など、ジェネレーターによってさまざまなテイストが用意されています。同じ写真でも、スタイルを変えるだけで全く違う印象のキャラクターが生まれるのが面白い！

自分の好きなテイストを探すのも、宝探しみたいで楽しいですよ。

### 上手に使うためのちょっとしたコツ

*   **元にする写真は大事：** やっぱり、顔がはっきり写っていて、明るい写真の方が良い結果が出やすい気がします。ピンボケしていたり、暗すぎたりすると、AIも認識しづらいのかもしれません。
*   **完璧を求めすぎない：** AIも万能ではありません。細部の表現がちょっと変だったり、イメージと違う仕上がりになったりすることもあります。そこは「ご愛嬌」ということで（笑）。
*   **色々試してみる：** 1枚の写真でイマイチでも、角度を変えたり、別の写真を使ったり、あるいは別のジェネレーターを試したりすると、急に良い感じのイラストが生成されることもあります。諦めずに色々試すのがおすすめです。
*   **利用規約は確認しよう：** 生成された画像の著作権や、アップロードした写真の扱いについては、各サービスの利用規約を確認しておくと安心です。特に商用利用を考えている場合は要注意ですね。

### どうやって探すの？

「AI イラスト化」「写真 アニメ化 AI」「[AI cartoon generator](https://aicartoon.org)」といったキーワードで検索すると、たくさんのツールが見つかります。無料のものから有料のもの、ブラウザで完結するものからアプリが必要なものまで様々です。

機能や生成されるイラストのテイストもそれぞれなので、いくつか試してみて、自分のお気に入りを見つけるのが良いと思います！

### まとめ

というわけで、AIカートゥーンジェネレーターで遊んでみた話でした。
「ちょっと変わったアイコンが欲しいな」「絵は描けないけど、自分のオリジナルキャラクターが欲しい！」なんて思っている方には、一度試してみる価値アリだと思います。

想像以上にクリエイティブな体験ができますし、何より楽しい！
皆さんも、お気に入りの一枚をAIで変身させてみてはいかがでしょうか？新しい自分に出会えるかもしれませんよ😉

もし「このジェネレーター良かったよ！」というのがあれば、ぜひコメントで教えてくださいね！

---
ubuntuでのネットワーク死活確認とネットワーク再起動

ubuntuをヘッドレスで使っている．ネットワークのトラブルが発生・解消しても再接続できないことがあった．

crontabで死活確認を行い，ネットワーク再起動をかける．

ほかにいくつか良い方法があるとは思いますが，今回はこの方法を利用した．


### １．NetworkManager を使っているか確認する．

```
systemctl is-active NetworkManager.service
# → active と返ってくれば稼働中、inactive や failed なら動いていません。
```

### ２．/usr/local/bin/check_network.sh という名前で以下を保存する．
sudo geditなどでエディターを開く．

```/usr/local/bin/check_network.sh
#!/bin/bash

# ———— 設定 ————
# チェック先（Google DNS 等）
TARGET=8.8.8.8

# 再起動コマンド（NetworkManager を使っている場合）
RESTART_CMD="systemctl restart NetworkManager.service"
# ※もし network-manager ではなく /etc/init.d/networking を使うなら:
# RESTART_CMD="/etc/init.d/networking restart"

# ———— 処理 ————
if ! ping -c1 -W2 $TARGET &>/dev/null; then
  echo "$(date '+%F %T') ネットワーク未検出 → 再起動実行" >> /var/log/check_network.log
  $RESTART_CMD
fi
```
pingが8.8.8.8に通らず，再起動されたときにログを取ります．

保存後、実行権限を付与：

```bash
sudo chmod +x /usr/local/bin/check_network.sh

#確認
ls -la /usr/local/bin/check_network.sh
```

### ３．10分ごとに実行する cron ジョブを登録
スクリプト中のsystemctlがsudo権限が必要なので，こちらもsudo.
```
sudo crontab -e
```
コマンドラインのnanoエディターなど我慢して使う．OSのクリップボードからペーストできないらしい．
以下の行を追加する．チェックする時間はお好みで．
```
*/10 * * * * /usr/local/bin/check_network.sh
```
### 参考
スクリプトをホームホルダにおいても良いですが，crontab はsudoを使います．
看護師から医療系SEになる

# 看護師を目指した日
私が高校生の頃、祖母が癌で亡くなった。
当時彼女は「看護師さんが怖いから病院に行きたくない」と言って多くの治療を拒否した。
病院において看護師は患者の最も身近になる存在であるからこそ、治療以前に大きな影響を与える存在であることを知った。
大好きな祖母だった。
反面教師的に進む道を決めた。

# 看護師時代
大学は看護学部に進学し、卒業後大学病院の混合内科病棟に入職した。
きっかけとは裏腹に、看護師という仕事が楽しく、退院後も時折お手紙の交換をしてくれる患者さんもできた。
ご飯屋さんをやっている患者さんのお店に復帰後お邪魔したこともあった。
何より患者さんに「あなたがいると明るい気持ちになれる」と宝物になる言葉をもらった。
どこまで彼らに貢献できたかは実際わからないが、高校生の頃の私の気持ちが少し晴れた気がした。
ただあまりに激務で5年も働くと多くの看護師が限界を感じて退職していく。
自身も同じだった。

# 転職しようと
当初はクリニックや教育機関などに目を向けていた。
しかし転職を考える中で、ふとある思いが芽生えた。
「このまま一生この仕事でいいのか？」

看護師になったことで、病院で働く人の気持ちも理解できるようになった。
祖母の担当をしていただいた看護師さんにも時折思いを馳せるようになった。
看護師は一般に気が強いといわれる。
命を守るという緊張感と激務の一方で、全方面から何でも屋にされてしまうことが原因の一端であると感じる。
彼女は緊張感のある職場で自分を守りながら業務をこなすことに必死だっただけなのではないか。。

重責を抱える仕事にもかかわらず、現代において結構古典的な仕事でもある。
昨今の医療の進歩はすさまじいはずなのに、看護師の仕事における体感9割は100年ほど変わらない仕事のような気がしている。
もっと働きやすさを変えていかなければ、いわゆる「怖い看護師」は生まれ続けてしまうのではないか。
医療の発展には必要な存在であるはずの看護師が見えない場所でそんなことに暗躍してはならない。

# 医療系ITの道へ
ではごく僅かであっても変化した部分はなんだろう。
それは、電子カルテの導入である。私は早速電子カルテを扱う会社に転職した。
LANケーブルも触ったことのない私を看護師経験のみで雇ってくれた。

# 勉強の日々
これからの投稿は何の知識も持たない中途採用のSEが監視の目に晒されることで自身の怠惰さを打破しようともがくためのものです。
キャリアチェンジからでもシステムエンジニアとして一人前になりたい！
将来は電子カルテに限らず看護師がもっと働きやすくなるための製品をつくるエンジニアになりたい！
JetBrains IDEでJetBrains AIのすべての機能が無料で利用できるようになった（まとめ）

## はじめに
JetBrainsの公式代理店、NATTOSYSTEMのクリハラです。

JetBrains IDEでJetBrains AIのすべての機能が無料で利用できるようになったとのことで、以下のJetBrains公式ブログをまとめました。
引用元：https://blog.jetbrains.com/ja/blog/2025/04/16/jetbrains-ides-go-ai/
## まとめ　　
- すべての IDE ライセンスに JetBrains AI（AI AssistantとJunie）の無料枠が含まれた
- AI Free ティアでは、無制限のコード補完やローカル AI モデルへのアクセスに加えて、クラウドベースの AI 支援機能やコーディングエージェント Junie をクレジット制で利用できる
- AI Pro および AI Ultimate ティアでは、負荷の高いワークフローにも対応できるよう、利用可能なクレジット量が拡張される
- 使用量を管理できるように、AI Assistant と Junie の両方の使用量をカバーする、残りのクラウドクォータがJetBrains AI ウィジェットに進行状況バーとして表示される
- All Products Pack および dotUltimate のサブスクリプションには、AI Pro が標準で含まれるようになった
- Junie はIntelliJ IDEA、PyCharm、WebStorm、GoLand、PhpStorm、RustRover、RubyMineに対応
- JetBrains AI Assistant の新バージョンもリリースされた。詳細は[こちら](https://blog.jetbrains.com/ja/blog/2025/04/16/jetbrains-ides-go-ai/#jetbrains-ide-に搭載された、よりスマートで強力な-ai-assistant)
- AI Assistant はモデルの選択肢が拡充された、Claude 3.7 Sonnet、Google Gemini 2.5 Pro、最新の OpenAI モデル、ローカルモデルに対応
- AI Assistantの新バージョンでは、コード補完の精度が向上し、より広いコンテキストを把握できるようになったことで、プロジェクトに合わせた的確な提案が可能になった
## おわりに
今後ゲームチェンジャーとなるAIコーディングを試せるいい機会だと思います。クレジット制ではるが、Junie を試せるのはいいと思いました。
Linucレベル１勉強メモ　＃４２

# 第四章　リポジトリとパッケージ管理

練習問題４.6
nanoパッケージをアンインストールしようとしています。このパッケージはrpmコマンドを使い、nano-2.3.1-10.el7.x86_64.rpmをインストールしたものです。アンインストールするには、どのコマンドを実行すれば良いかを選択してください。

A. rpm -v nano

B. rpm -d nano-2.3.1-10.el7.x86_64.rpm

C. rpm -U nano-2.3.1-10.el7.x86_64.rpm

D. rpm -x nano-2.3.1-10.el7.x86_64.rpm

E. rpm -e nano

（解答）E

（解説）
-vオプションは詳細な表示を行うためのオプションです。従って、選択肢Aは不正解です。-dオプションは-qオプションと併用してパッケージ中のドキュメントファイルを一覧表示します。従って、選択肢Bは不正解です。-Uオプションはパッケージをアップグレードします。従って、選択肢Cは不正解です。-xオプショオンはrpmコマンドにはありません。RPMパッケージをアンインストールするには-eオプションを使い、パッケージ名を指定します。
【Explosion】HTB Writeup的な

## わかったこと
・当たり前だが、UDPやTCPを切り替えたところで、RDPを使っているユーザーは認識されない。つまり透過的という事。（動画再生や音声通話など、リアルタイム性が求められている操作では、UDPのほうが適している。）

・トンネル接続って？
→つまりVPNだと思えばいい、インターネットであたかもプライベートな専用回線のようにデータを安全に送受信する技術。データを別のプロトコルのパケット内に包み込むカプセル化という手法を用いて実現される。トンネルはそんな仮想的な通路そのものを指しているよ。

## nmapのログに関する考察など（箇条書き）

```
Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-14 23:01 JST
Nmap scan report for 10.129.119.84
Host is up (0.18s latency).
Not shown: 995 closed ports (reset)
PORT     STATE SERVICE         VERSION
135/tcp  open  msrpc           Microsoft Windows RPC
139/tcp  open  netbios-ssn     Microsoft Windows netbios-ssn
445/tcp  open  microsoft-ds?   
3389/tcp open  ms-wbt-server   Microsoft Terminal Services
5985/tcp open  http            Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)

Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 25.67 seconds
```
・ポート135番は、windowsのリモートプロシージャであり、ポートを明けて置くのは危険だと考える。（OSの内部機能を操作出来るため。）
。そもそもnetbiosってなんだよ。
https://e-words.jp/w/NetBIOS.html#:~:text=%E6%A6%82%E8%A6%81,%E3%81%AA%E3%81%A9%E3%82%92%E5%AE%9A%E3%82%81%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82

・`Not shown: 995 closed ports (reset)`これは995がリセット応答だよー。という意味。
→そもそも、nmapの標準機能では良く使われる1000個のポートが開放されている。

`-p-`や`-p 1-65535`でもいける。

・closedポートはそのポート番号宛のパケットを受け取ったが、「そのポートで待ち受け中のサービスがない」とホストが判断し、tcpのリセットパケットを返送した状態。

`mod` modify(変更する)　usermod
`mod` module(モジュール)　lsmod,modprobe

`lsmod | grep vboxguest`コマンドの意味。
このコマンドは現在linuxカーネルに読み込まれているモジュールの一覧を表示するコマンド。
その中でvboxguestを含む行だけ抽出する。













































## 参考文献（参照日2025年5月12日）

blob:https://app.hackthebox.com/2bcf1e39-c2fe-49f5-8603-5732729e5cf5

https://www.cnblogs.com/suv789/p/18684834

https://e-words.jp/w/RST%E3%83%91%E3%82%B1%E3%83%83%E3%83%88.html

https://www.techtarget.com/searchsecurity/feature/How-to-use-Nmap-to-scan-for-open-ports?utm_source=chatgpt.com
Linucレベル１勉強メモ　＃４１

# 第四章　リポジトリとパッケージ管理

練習問題４.5
httpdパッケージからインストールされた設定ファイルのみを一覧表示したいと思います。下線部に当てはまるオプションを２文字、記述してください。

＄ rpm -_____ httpd

（解答）qc

（解説）
「rpm -qc パッケージ名」は、指定したパッケージからインストールされた設定ファイルだけを表示します。インストールされたすべてのファイルは「-ql」で、インストールされたドキュメントファイルだけなら「-qd」で表示できます。

＄ rpm -オプション（併用するオプション）

-q　照会モード
併用オプションとして-cで設定ファイルのみを表示する。

（わからない単語解説）
* RPM<br>Red Hat社が開発したパッケージ管理システムです。
【ChatGPT】に新しいモデルGPT-4.1が登場したので、使ってみた。


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

　今回は、ChatGPTに新しいモデルGPT-4.1が登場したので、使ってみました。

:::note info
本記事は、ChatGPT（Plus版）
で行なっております。
画像はあります。　あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)
***
　こちらも載せますね。
　　[ChatGPTが使えない？ログインできない・反応しない原因やエラー時の対処法を解説](https://aismiley.co.jp/ai_news/chatgpt-error-resolution-explanation/)
***
　著作権法については
　　こちらを参照するのが
　　　良いのではないかと。

　文化庁レポートをもとにした
　　著作権法についての動画（約20分）
　　　[かいちのAI大学　【警告】ChatGPTの画像生成は危険です...【4o Image Generation】](https://youtu.be/8VLUnG-iyo0?si=rAfjMboqmNqppDGq)
***
　では、【ニュース&本題】です。

　今回は、
　　ChatGPTに
　　　新しいモデルGPT-4.1が
　　　　登場しましたので、
　　　　　使ってみました。

　まずは、
　　OpenAI公式からの発表をどうぞ。

　[OpenAI公式ポスト](https://x.com/OpenAI/status/1922707554745909391?t=quU_tVJjJbKkKEropxXPRw&s=19)

***（ChatGPT翻訳）***
多くのリクエストに応え、本日よりGPT-4.1がChatGPTで直接利用可能になりました。

GPT-4.1は、コーディングタスクと指示の理解に優れた特化型モデルです。高速であるため、OpenAI o3やo4-miniの代替として日常的なコーディング用途に最適です。

Plus、Pro、Teamユーザーは、モデル選択画面の「その他のモデル」ドロップダウンからGPT-4.1にアクセスできます。EnterpriseおよびEduユーザーには、今後数週間以内に提供予定です。

さらに、ChatGPT内のすべてのユーザー向けに、GPT-4o miniの代わりにGPT-4.1 miniを導入します。

GPT-4.1およびGPT-4.1 miniは、OpenAIの標準的な安全性評価を経ており、その詳細は新たに公開された「Safety Evaluations Hub」でご覧いただけます。
***

　ということで、
　　ここからは使ってみての
　　　内容です。

　普段使いで
　　GPT-4oを使っていますが、
　　　GPT-4.1も同様に使えるようです。

　使い方は
　　モデル選択メニューの下方に
　　　GPT-4.1とGPT-4.1-miniが
　　　　あるので、選択するだけです。

　　これは
　　　新しくセッションを開いても
　　　　選択状態のままです。

　　戻す場合は、
　　　モデル選択メニューで選ぶか
　　　　入力枠のボタンの✕をタップで
　　　　　切れます。
***
　使ってみます。

　Web検索は
　　ふつうに使えます。

　DeepResearchも
　　ふつうに使えます。

　画像生成をしてみます。
　　生成開始までが一瞬です。
　　　生成もGPT-4oに比べると
　　　　早く感じます。
　　　　　たまたまかもしれませんが。

　　ただし、
　　　やっている際に
　　　　挙動がおかしくなりました。

　　↓このように画像生成せず
　　　まるで無限ループかと思う状態に
　　　　なってしまいました。
![Screenshot_20250515-120114.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/2d055199-ba84-4afb-bcbe-c1a8ec70495b.png)


　　こうなったら
　　　そのセッションは諦めて、
　　　　新しくセッションを
　　　　　開くべきです。

　　　何をしても
　　　　描画してくれません。

　　　リンクを示しても
　　　　反応してくれません。

　　　ただ、無為な時間を
　　　　過ごすだけです。

　　　切り替えましょう。
***
　だいたい、
　　こんなところです。

　少し注意が必要ですが、
　　返答がポンポンと返ってくるので
　　　小気味良く作業を進められます。

　GPT-4oよりも
　　普段使いには
　　　適しているかもしれません。

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

　今回は、ここまで。