OmniAICreator/Qiita-1.07M huggingface dataset:
Claude 3.5 Sonnet 新機能「Artifacts」

# はじめに

Claude 3.5 Sonnetでは、新機能「Artifacts」が追加されました。(今のところ無料版でも使えます）
Artifactsは、ユーザーとClaudeのインタラクションを拡張し、よりインタラクティブな共同作業環境を提供します。
本記事は、この新機能「Artifacts」を使ってどのようなことが出来るか試し、結果をまとめております。

Claude 3.5 Sonnetの説明については以下の記事がわかりやすく、参考になります。

https://qiita.com/minorun365/items/cd46235d5e446b1f41c5

# Artifactsは何ができる？

:::note warn
perplexity(Claude 3 Opus)に聞いてみました。
:::

ユーザーがClaudeにコードスニペット、テキストドキュメント、ウェブサイトデザインなどのコンテンツ生成を依頼すると、生成されたコンテンツが会話と並んで専用のウィンドウに表示されます。

・ユーザーはリアルタイムでClaudeの生成物を確認・編集しながら、プロジェクトやワークフローに統合できる

・コードの開発、法的契約書の作成と分析、ビジネスレポートの作成など、様々なユースケースに活用できる
デザインチームはArtifactsを使って、Claudeのデザイン原則の理解と視覚的アセットの生成能力を活用しながら、UIやUXのプロトタイプを共同で作成・改良できる

・Artifactsにより、Claudeはチャットボットから共同作業環境へと進化しています。将来的には、チームや組織全体で知識やドキュメント、進行中の作業を一元管理できるワークスペースとして機能拡張される予定です。

・Artifactsは現在プレビュー機能として提供されていますが、ユーザーがAIと並行して作業できるダイナミックなワークスペースを実現し、生成されたコンテンツをプロジェクトやワークフローにシームレスに統合できる画期的な機能だと言えるでしょう。

# Artifactsの機能をONにする

初期設定ではOFFになっているので、以下の画面から「Artifacts」をONにします。

https://claude.ai/chats#

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/b84a9566-a33f-d4ca-046a-7af771ba8f11.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/480e62f6-2718-78b7-6f23-3aab63608316.png)




# フローチャートの生成

## [1] 問題解決のフローを生成してもらう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/68b96415-3ee5-f124-e786-707486dc2b57.png)


~~~
graph TD
    A[問題の発生] --> B[問題の特定と定義]
    B --> C[情報収集]
    C --> D[原因の分析]
    D --> E{解決策はあるか?}
    E -->|はい| F[解決策の実施]
    E -->|いいえ| G[専門家に相談]
    G --> C
    F --> H[結果の評価]
    H --> I{問題は解決したか?}
    I -->|はい| J[解決策の文書化]
    I -->|いいえ| C
    J --> K[終了]
~~~

## [2] 問題解決のフローを生成してもらい、修正する。

今度はしっかりと仕様を伝えてフローチャートを作成してもらいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/16874056-77fe-45ae-17bf-c77ab73821c7.png)

出てきたフローを修正してもらう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/f5ad8e12-3838-dc9b-4803-27085f06386d.png)

完成したフローチャート

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/9f2f5bdb-53c9-4149-df08-79963496d956.png)


# プレゼン資料の作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/7cc2472f-2fc2-376e-e3d3-5615b174e23d.png)

生成された内容（md形式でダウンロード・コピー可能）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/1e3af986-e07d-aeb0-b721-fea795a426a1.png)


# シフト管理アプリを作成する

完成したアプリ（コードも確認できます）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/4832cf3e-4b07-5eec-4ffb-88213a5cbbc7.png)


入力したプロンプト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/8d3c3323-6c4a-ec5a-f8da-672194a46306.png)

修正を依頼すると、コードを修正してくれました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/078a10a3-d076-0f19-7581-aa5d84077cc4.png)

# 終わりに

生成物を見ながら修正できる機能は非常に便利ですね。
変更の結果をすぐに確認できるので、効率がすごく良いです。
１日の使用制限が気になるところですが、色々試してみたいと思います。

# 追記

https://qiita.com/firesign2023/items/875fb8756fc276428734

https://qiita.com/hedgehog051/items/998ae14594df84b73873
Salesforceでフローを作成しよう～商談更新時に商談の元になった取引開始済みリードも更新する方法


商談更新時に商談の元になった取引開始済みリードも更新する方法をお伝えします

なお前提として取引開始済みリード閲覧には権限が必要です

https://qiita.com/Takaa/items/1d0f2e031158d0fdf349



今回は例として
・商談のフェーズが変わればその商談の元となったリードの名を商談フェーズと同じにする

フローを作成しました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/6fc981a2-a38a-0eb5-39ae-8e6e07dd22e9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/980c91f0-7fe4-8972-88a6-57284b279192.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/fcd6ac03-6259-0665-4ee4-37e8caad6314.png)
Salesforceで取引開始済みのリードを表示編集させる方法

Salesforceで取引開始済みのリードを表示や編集をするには
権限「取引開始済みのリードを表示および編集」が必要です


「取引開始済みのリードを表示および編集」
説明：取引開始済みのリードレコードを表示および編集します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/bf2e17b1-e69e-2b53-c23f-6bd6acba5fbe.png)


なお、プロファイル「システム管理者」にもこの権限「取引開始済みのリードを表示および編集」は付与されていなく、またご存じプロファイル「システム管理者」など標準プロファイルは権限変更はできないので、システム管理者でSalesforceで取引開始済みのリードを表示や編集をするには
権限セットで「取引開始済みのリードを表示および編集」の付与をしてください

そうすれば取引開始済みのリードの編集や参照が可能です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/c951f847-3add-90b5-1142-8f631041db6c.png)
Databricks生成AIクックブック - 2.2. 収集、拡張、生成(RAGチェーン)

[2\.2\. Retrieval, augmentation, and generation \(aka RAG Chain\) — Databricks Generative AI Cookbook](https://ai-cookbook.io/nbs/2-fundamentals-unstructured-chain.html) [2024/6/21時点]の翻訳です。

:::note warn
本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

> [Databricks生成AIクックブック](https://qiita.com/taka_yayoi/items/36c51bce8f33a70cf204)のコンテンツです。


# 2.2. 収集、拡張、生成(RAGチェーン)

データパイプラインによってデータが処理されたら、RAGアプリケーションで使用できるようになります。このセクションでは、オンライン環境のRAGアプリケーションにユーザーがリクエストを送信した際に生じるプロセスを説明します。推論時に起動されるこのステップのシリーズ、あるいは*チェーン*は通常RAGチェーンと呼ばれます。
![](https://ai-cookbook.io/_images/3_img.png)

1. **ユーザークエリーの前処理(オプション):** あるケースでは、ベクターデータベースのクエリーにより適するようにユーザーのクエリーが前処理されます。これには、テンプレート内でのフォーマッティング、リクエストを書き換えるための他のモデルの利用、収集を支援するためのキーワードの抽出などが含まれます。このステップのアウトプットは、以降の収集ステップで使用される*収集クエリー*となります。
1. **収集:** ベクターデータベースからサポート情報を収集するために、収集クエリーはデータ準備の過程でドキュメントのチャンクのエンべディングを作成する際に用いられたのと*同じエンべディングモデル*を用いてエンべディングに変換されます。これらのエンべディングによって、コサイン類似どのような手法を用いて収集クエリーと非構造化テキストのチャンクの間の意味論的な類似度を比較することができます。次に、ベクトルデータベースからチャンクが収集され、エンべディング化されたリクエストにどれだけ類似しているのかに基づきランキングされます。トップの結果(最も類似した結果)が返却されます。
1. **プロンプト拡張:** LLMに送信されるプロンプトは、それぞれのコンポーネントをどのように活用するのかの指示、多くの場合、レスポンスのフォーマットを制御する追加の指示を含むテンプレートの中で、収集されたコンテキストを用いてユーザーのクエリーを拡張することで形成されます。適切なプロンプトテンプレートに対する試行錯誤のプロセスは、[プロンプトエンジニアリング](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0)と呼ばれます。
1. **LLM生成:** LLMは入力としてユーザーのクエリーと収集されたサポートデータを含む拡張されたプロンプトを受け取り、追加のコンテキストをベースとしたレスポンスを生成します。
1. **後処理(オプション):** 追加のビジネスロジックの適用、引用の追加、あるいは事前定義のルールや制約に基づいて生成テキストを洗練するために、LLMのレスポンスをさらに処理する場合があります。

RAGアプリケーションのデータパイプラインのように、RAGチェーンの品質に影響を与える数多くの重要なエンジニアリングの意思決定が存在します。例えば、ステップ(2)でどれだけのチャンクを収集するのかの決定、ステップ(3)でどのようにサポートデータとユーザーのクエリーを組み合わせるのかは、モデルが高品質なレスポンスを生成する能力に大きなインパクトを与えます。

チェーンを通じて、企業ポリシーとコンプライアンスを確実にするために様々なガードレイルが適用されるかもしれません。これには、適切なリクエストのフィルタリング、データソースにアクセスする前のユーザー権限のチェック、生成されたレスポンスへのコンテンツモデレーションテクニックの適用などが含まれます。

- [目次](https://qiita.com/taka_yayoi/items/36c51bce8f33a70cf204#%E7%9B%AE%E6%AC%A1)
- 前のセクション: [2.1. データパイプライン](https://qiita.com/taka_yayoi/items/8b5845c4c3e22e2bdd20)
- 次のセクション: [2.3. 評価とモニタリング](https://qiita.com/taka_yayoi/items/e4344fddbf3f1cea1f79)

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
関数型の表現方法をまとめる

:::note
本記事はZennに投稿している記事の再投稿になります。
https://zenn.dev/axoloto210/articles/advent-calender-2023-day11
:::
# さまざまな関数型の表現
関数とその型を表現する方法はいくつかありますので、それらをまとめてみたいと思います。
## 関数宣言
`function 関数名(引数:引数の型):返り値の型{処理}`という書き方で関数を宣言する方法です。
関数宣言は**巻き上げ**が起こるため、関数を宣言した位置よりも前で関数を呼び出すことができます。
```ts
console.log(double(5)) //10

function double(num: number): number {
    return num * 2
}
```
## 関数式
`function (引数:引数の型):返り値の型{処理}`という書き方で関数を表します。名前の通り、この書き方をすると式として扱われますので、変数に格納して使用することができます。
関数式については、**巻き上げが起こらない**という点で関数宣言と動作が異なっています。
```ts
console.log(double(5)) //Block-scoped variable 'double' used before its declaration.(2448)

const double = function(num: number): number {
return num * 2
}

console.log(double(5)) //10
```
## アロー関数式
`(引数:引数の型):返り値の型=>{処理}`という構文で表される関数式です。`function`を用いた関数式よりも簡潔に書くことができます。処理の部分が一つの式だけで書ける場合にはさらに簡潔に書くことができて、`(引数:引数の型):返り値の型=>式`のように`{}`と`return`を省略することができます。こちらの記法も**巻き上げは起こりません**。
```ts
console.log(double(5)) //Block-scoped variable 'double' used before its declaration.(2448)

const double = (num: number): number => {
    return 2 * num
}

console.log(double(5)) //10
```
## メソッド記法
オブジェクトリテラルの中で関数を宣言するときに使用できる記法です。
`{関数名(引数:引数の型):返り値の型{処理}}`という構文で表されます。`function`という語を使用しておらず、オブジェクトのプロパティとして関数を呼び出して利用します。
```ts
type T = { name: string; double: (num: number) => number }
const obj: T = {
    name: 'test',
    double(num: number) { return num * 2 }
}

console.log(obj.double(5)) //10
```
## コールシグネチャ
関数にプロパティを持たせた型を表現することができます（オブジェクトのプロパティとして別々に持たせればいいのであまり使用されません）。使用できる箇所はオブジェクト型の中に限定されますが、`{プロパティ:プロパティの型; (引数:引数の型):返り値の型}`のように表すことができます。関数はオブジェクトの一種であるため、関数にプロパティを持たせることができるわけですね。
>JavaScript の関数は、実際にはすべて Function オブジェクトです。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function

```ts
type T = { title?: string; (num: number): number }
const func: T = (num: number) => { return 2 * num }

console.log(func(5)) //10
func.title = 'test'
console.log(func) //(num) => { return 2 * num; } 
console.log({...func})//{ "title": "test"} 
```
上の例から、`(num: number) => { return 2 * num }`は`func`のプロパティではなく、`func`自体の値であることがわかります。
## 返り値の型について
TypeScriptには型推論機能が備わっているため、返り値の型を設定しなかった場合には自動で返り値の型を推論してくれます。
返り値の型を省略する方が簡潔に書けて良いように思えますが、返り値を設定したときとは少し異なる点があり、コンパイルエラーの発生箇所が違ってきます。
関数の処理を誤って記述してしまったときに返り値の型が誤って推論されることとなるため、コンパイルエラーは関数ではなく、その使用箇所で発生してしまいます。
関数の内部でコンパイルエラーを検知できた方が関数内部を読み込む必要もなくなるため可読性が高くなっていいですね。
```ts
const double = (num: number) => {
    return 
    2*num;
}

console.log(double(5)) //undefined 
```
上のコード例はreturnの後に改行が入っていることで`return ;`と捉えられてしまい、`undefined`が返ってきてしまっています。
実際には`2*num;`の箇所に`Unreachable code detected.(7027)`というコンパイルエラーが発生するためこのエラーに気づくことができますが、返り値の型として`number`を明示した場合には追加で`return`の箇所に`Type 'undefined' is not assignable to type 'number'.(2322)`というコンパイルエラーが発生するため、より間違いに気付きやすくなりますね。
一覧画面に検索機能実装 Rails ransack

## はじめに
今回はRailsの検索機能実装でransackを使用したので、使い方について記載します。
Rails初心者のため、間違いなどあればご指摘お願いします。

## ransackとは
Railsで検索の実装を行うgemのことです。
ransackがなくても検索の実装はできるのですが、ransackを使用することで簡単に検索機能の実装が可能です。

## 使い方
### ①Ransackインストール

```ruby:Gemfile
gem `ransack` 
```


```ruby:コマンド
# アプリをインストールする
$ bundle install
```

### ②コントローラを修正する
検索ワードを受け取り、検索結果をインスタンス変数にセットします。

```ruby:tasks_controller.rb
  def index
    @q = current_user.tasks.ransack(params[:q])
    @tasks = @q.result(distinct: true).recent
  end
```

### ③ビューを修正する

```ruby:tasks/index.html.slim
h1 タスク一覧

= search_form_for @q, class: 'mb-5' do |f|
  .form-group.row
    = f.label :name_cont, '名称', class: 'col-sm-2 col-form-label'
    .col-sm-10
      = f.search_field :name_cont, class: 'form-control'
  .form-group
    = f.submit class: 'btn btn-outline-primary'
    
= link_to '新規登録', new_task_path, class: 'btn btn-primary'
```

`_cont`は検索したワードが含まれているレコードを取得するというransackのメソッドです。
「名称に〇〇を含む」という検索をしたいため`name_cont`にしています。

### ④検索画面を開くとエラー
いざ検索画面が出来た！と思い画面を開くと、下記の内容のエラーが出ます。
ransackを使用しているTaskモデルにホワイトリストの追加が必要なようです。
検索に使用するカラムである`name`を記述します。
→検索対象を名称`name`に絞ることが可能となり、それ以外のカラムの検索条件がransackに渡されても無視されるようになります。

Ransack needs Task attributes explicitly allowlisted as searchable.
Define a `ransackable_attributes` class method in your `Task`
model, watching out for items you DON'T want searchable (for
example, `encrypted_password`, `password_reset_token`, `owner` or
other sensitive information).

```ruby:task.rb
  def self.ransackable_attributes(auth_object = nil)
    ["name"]
  end
```

### ⑤実行
無事検索ワードを入れて、絞り込みができるようになりました。

![スクリーンショット 2024-06-21 8.31.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1003708/8fc29617-cfa2-ff3d-205b-605dcefba086.png)

### 参考文献
https://pikawaka.com/rails/ransack

https://qiita.com/Yamashita-Taiki/items/764be62a8c20485ece54

[現場で使える Ruby on Rails 5速習実践ガイド](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227)
→現在Railsのインプットで使用しており、とても分かりやすい本です。

![71FB8RzWdsL._SY522_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1003708/d5cb5d2d-a0a1-9dfc-ca20-82b2583b58f4.jpeg)
Excelマクロで仕事効率化（初心者向け）(1)


<img width=A%><img width=100% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/fe096a61-b3d9-9207-592d-f922d2c18b26.jpeg">


# はじめに
私は、某企業の情報システム部門に所属する社員です。
この会社では、ITやシステム延いてはマーケットのことを理解していない経営者が「DXへ進め！急げ！」などと社員に檄を飛ばしている状況で、本当に危機的状況だと感じています。
一方で、私も齢50を超える中年で、そろそろ定年退職後のことも本気で考えねばと思っています。
そんな中、今私はプログラミングに没頭しており、特に「生成AI」や「ChatGPT」のプログラミングに講じています。


# この記事を書くきっかけ

私の勤務先では、ほぼ100%の社員がプログラミングを書くことができません。
それ自体はそれほど大きな問題ではないのですが、社員が皆プログラムを書けないことで、「ラストONEマイル」(※)に苦労しており、多くの方々が毎日「Excel」や「Word」と格闘する羽目になっています。
社員の多くが、数十回もデータのコピー＆ペーストを繰り返したり、Excelに大量のセル計算式を貼付けてファイルが重くなったり、合計値を出すセルの計算式で１セルだけ範囲から漏れていて、後でやり直しになったり（リワーク）という状況を多く見てきました。「DX」や「AI」が叫ばれている昨今ですが、現状はそれからは程遠く、ほとんどが泥臭い単純作業です。
　一つ具体的な例を挙げると、社内の月次締め処理を行う時、社員が夜遅くまで事務所に残って、データの目検チェックやデータ貼付けで大変苦しそうでした。先日はその手作業の誤りが元で、お客様に対して過大請求や過小請求をしてしまい、迷惑をかけていました。その社員は夜遅くまで責任感を持って一所懸命頑張ったのに、全く報われていないなぁと思いました。そうこうする内に、その社員のモチベーションは劇的に下がり、退職してしまいました。そりゃそうですよね、私でも同じ状況ならばそうなっちゃいます。
　
　この様な状況に至ったのは、会社で働く私たち自身の責任もあると感じています。今までにいろいろな単純作業が自動化されてきました。例えば、現在ではプレゼンテーションをOHP（知ってますか？）を使ってやる方はいないでしょう。ほとんどがPowerPointを使うかと思います。また、FAXもほとんどなくなってきており、電子メールで簡単に対応できるようになってきています。そのような恩恵を受けた私たちは、より高度で難易度の高い作業に時間を割かなければならなくなります。どんどん私たちがやるべき作業は高度な作業しかなくなるためです。私の勤務先では、社員のほとんどが「自動化をしたい！」「効率よい作業をしたい！」と言ってそれを高額なアプリケーション開発などで実現するのですが、裏を返すと効率化で得た余剰時間は、今以上価値ある高度な作業にシフトする必要があるのです。日本で働いている社員はそのことをほとんど理解していません。日本人は他国と比較して、高校や大学の卒業後に勉強やスキルアップをするために時間を割く人の割合が著しく低いという調査結果もあるようです。高校や大学に入ってしまえばあとは大丈夫、と安心してしまっているのかもしれません。私たちは自分が楽しく心豊かに生き続けるために、本気で次のステップのために学び続けなければならないと思います。
 
　日々の作業の効率化を図れる持つべき技能の１つが「プログラミング」だと思っています。かくいう私も以前は単純作業に追われて、次のステップに向けた勉強など全くできなかった時期もありました。ただ、現在では「プログラミング」により単純作業のほとんどを自動化することができるようになり、自身の記事を投稿したり、副業をしたりして、仕事を楽しみながら生きられるようになりました。
　
　「プログラミングを学べばええやん！」と簡単に思うかもしれませんが、最初は非常に多くのエネルギーを要します。私は大学生の時までプログラミングをしたことがなかったのですが、最初はプログラミングに関する単語や意味を理解できず苦労しましたし、理解できたとしても「立体的に」言っていることを理解できなかったため、応用が利かない状況に苦しんでいました。
　そんな苦しい期間が長く続くのであれば、誰だってプログラミングの習得はやめますよね・・・
　
　このような状況を加味して、「プログラミングを知らない初心者」「仕事で単純作業が多くて困っている人」「少しでも人生が楽になりたい人」が少しでも人生が楽しく・明るくなってほしいということで、連載記事を書くことにしました。
 

※ ここで言う「ラストONEマイル」は、システムと利用者の最後の区間のことを意味します。


# おわりに

次回は、「一括で請求書PDFの作成」をやってみたいと思います。
「電帳法」の法改正などで、複数の請求先に一括でPDFファイルを送ることになった方もたくさんいるかと思います。そのような方に、プログラムのサンプルを使ってもらい、少しでも作業が楽になってもらえたらと思っております。
make .PHONY

一発ネタ。
`make .PHONY` すると `.PHONY` を指定したターゲットがすべて実行されます。

```makefile
.PHONY: foo
foo:
	@echo foo

.PHONY: bar
bar:
	@echo bar

NAMES = taro jiro saburo
.PHONY: names $(NAMES)
names: $(SUBDIRS)

$(NAMES):
	@echo $@
```

```bash
$ make .PHONY
foo
bar
taro
jiro
saburo
```

よく考えれば `.PHONY` を指定する文もルールなので当たり前なのですが盲点でした。一括実行に使えるかも？
「なぜ」と聞かずに理由を引き出す！「詰めてる」感を減らす言い換えテク

こんにちは。KDDIアジャイル開発センターのサービスデザイナー よねみちです。
生成AIを用いたto Bプロダクトのスクラム開発や、お客様のDX・新規事業創出のきっかけとなるデザインスプリント支援などを行っています。

## はじめに
レビューや会議で誰かが「詰められてる」様子、心にきますよね。自分がやられるのはもってのほかですが、周囲で発生するだけでも心がすり減ります。。

特に、何か問題が発生したときや、参加者間の誤解が解消できないときに「詰め」が生じがちです。
質問する側の、焦りや不安から「なぜ？」「どうして？」「つまり？」と質問マシーンになってしまう気持ちも理解できるのですが。


問い詰めてしまい心理的に不安全な状況に陥ると「ミスを隠そう、自分が責められないようにしよう」と回避する力が働きはじめ、結果として「正確な状況がわからない」「適切なアクションが取れない」といったチームとして重大なリスクに発展するかもしれません。


こうした「詰めてる」感が出る嫌〜〜な状況を回避しつつ、知りたいコンテキストはしっかり把握できるように **「なぜ」を使わずに理由を引き出すテクニック**を紹介してみます。

## 前提
これから紹介するテクニックはあくまで小手先の工夫であり、次善の策です。
- テクニックを使うよりも先に、心理的に安全な組織を作り維持することを心がけましょう
- 結局は、質問する側が相手と真摯に向き合い、対話する姿勢を持つことが必要です。これがないと「嫌味な言い方で詰めてる人」になります

しっかりと心理的安全性を確保して「なぜ？」とストレートに聞く方が効率的ですね。

## 場面設定
この記事で紹介するテクニックが役に立つのは、例えば以下の場面です。
- チームとしては心理的安全性が確保できており、普段の関係性には問題ない
- **レビュー等の場で、何らかのイシューに対して個人への質疑応答が長く続くなど、ちょっとピリッとした雰囲気になりかけているとき**
- **ポジショントークや論理的な回答よりも、相手の率直な意見や背景が知りたい時**

また、以下の時にも良いでしょう。
- チームに新メンバーが参画した直後で、関係性が構築しきっていないとき
- 新入社員とのコミュニケーション

## 結論
**「なぜ」を「WHY」以外の4W1Hに言い換えて質問します。**
### 例文1
「なぜ進捗が予定よりも遅れているの？」

WHATを使う：「何が遅れの要因になっているの？」
WHENを使う：「いつのきっかけから遅れ始めたの？」

### 例文2

「なぜその仕様になったの？」

WHATを使う：「そのソリューションにした決め手は何だったの？」
HOWを使う：「どういう経緯でその仕様に至ったの？」
WHEREを使う：「どこか参考にした情報があったの？」

### 例文3

「なぜルールを破ったの？」

WHATを使う：「何があなたをルール破りにさせてしまったの？」
WHEREを使う：「ルールのどういうところが守りづらかったの？」

## ポイント
WHATなどの疑問詞を使い、それを主語にすることであえて他責の質問文にします。
英語で考えるとわかりやすく、"What made you ~~?"という感じです。無生物主語。

**理由が回答者の内面にあると仮定せず、外的な仕組みにあると仮定した文章になる**ため、心理的なプレッシャーが軽減されます。

なお、これらの言い換え文は直接的に理由を聞かないため、背景や経緯が返ってくるのが自然です。質問する側は結論を急がずに丁寧にヒアリングする姿勢で臨みましょう。
返答が想像よりも短かった時は「もっと聞かせて」と続けると良い感じです。

## 解説、参考
「なぜ」を使わずに理由や背景を探るテクニックは、デザイナーが行うユーザーインタビューでよく使われます。ありのままのユーザーの気持ちを引き出すためには論理的に内面を問う「なぜ」よりも、過去や現在に目をむける「どこで」「何が」「いつ」の方が向いています。

インタビューのテクニックとして紹介されている記事の例です：
https://note.com/miz_kushida/n/nb5e73ebe686e

また、インタビューを越えて対話のテクニックとして紹介されているこちらの記事もよく参考にしています。詳細な解説付きです：
https://note.com/shoty/n/neef4d130d506

## まとめ
先日、スクラムチームの雑談でこのテクニックを紹介したところ好評だったため記事にしてみました。
ちょっとした言い方一つで意外とレビューの雰囲気が変わるものです。

皆さまのチームが平和・前向きに課題解決に取り組む一助となれば幸いです！
IBM i Services Directory : QSYS2.Hardware_Resource_Info テーブル関数

## 概要

■テーブル関数名：QSYS2.HARDWARE_RESOURCE_INFO
■カテゴリ：構成サービス
■サポート：IBM i 7.2 SF99702 Level 9以降
■参照URL（IBM i 7.5）：https://www.ibm.com/docs/ja/i/7.5?topic=services-hardware-resource-info-table-function

そのLPARから見えるハードウェア資源について返します。
物理デバイス、VIOS等で仮想化された仮想デバイス、IBM i OS上で作成できる仮想デバイス（仮想テープ装置など）がリストできます。


## 使用例
   
```
SELECT * FROM TABLE (QSYS2.HARDWARE_RESOURCE_INFO(RESOURCE_CATEGORY => 'STORAGE',
                                                  DETAILED_INFO => 'YES'));
```

この例の場合、ストレージ資源（ストレージ、テープ、DVD等のドライブ）が表示されます。
実行例は下記です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/32805916-894b-540c-05ad-38b2e41df68c.png)

***上記でRESOURCE_NAMEが TAPVRTxx となっているのはこちらの記事の [仮想テープ装置](https://qiita.com/gomAnomalocaris/items/2f88809f712c85712bdc) ですので物理ハードウェアはありません。


### リソースカテゴリー： WORKSTATION だと、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/cb123adc-f510-ae5f-9d10-579beec78bb6.png)

コンソール関連のデバイスが表示されました。


### リソースカテゴリー： PROCESSOR では、、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/cf66df60-ea58-abb9-162c-ecb2dd4af095.png)

CPU、メモリ関連のデバイスが表示されます。


## 余談：この関数のマニュアルリンクは英語ページです。

なぜか？

下記の日本語のページを見て下さると、、
https://www.ibm.com/docs/ja/i/7.5?topic=services-hardware-resource-info-table-function

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/06865a96-f5b4-1f5e-f490-1f020fb71767.png)

機械翻訳が～、、^^; だったのを忘れており、？と一瞬考えてしまいました。
Javaで「2つの配列を連結して新しい配列を作成する」の動作を確認してみた

# 概要

Javaで「2つの配列を連結して新しい配列を作成する」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/array/index17.html

# 実装

以下のファイルを作成しました。
```JSample17_1.java
import java.util.Arrays;

class JSample17_1{
  public static void main(String[] args){
    int[] src1 = {28, 14, 35, 19};
    int[] src2 = {17, 40, 23};
    int[] dst = new int[src1.length + src2.length];

    System.arraycopy(src1, 0, dst, 0, src1.length);  
    System.arraycopy(src2, 0, dst, src1.length, src2.length); 

    System.out.println(Arrays.toString(src1));
    System.out.println(Arrays.toString(src2));
    System.out.println(Arrays.toString(dst));
  }
}
```

以下のコマンドを実行しました。
```
$ javac JSample17_1.java 
$ java JSample17_1 
[28, 14, 35, 19]
[17, 40, 23]
[28, 14, 35, 19, 17, 40, 23]
```

# まとめ

何かの役に立てばと。
【JavaScript】拡張子一覧

私の知る範囲のまとめです。
他にもあればぜひコメントお願いいたします。


# `.js`

|  拡張子  |              説明               |
| :---: | :---------------------------: |
| `.js` | JavaScriptで書かれたプログラムを保存したファイル |

# モジュール関連

|   拡張子   |                            説明                             |
| :-----: | :-------------------------------------------------------: |
| `.mjs`  |             ESM（Ecma Script Module）であることを明示する             |
| `.cjs`  |                  CommonJSモジュールであることを明示する                  |
| (`.js`) | Node.jsの設定や、`script type="module"`で呼び出しを行う場合、モジュールとして扱われる |

https://qiita.com/kohki_takatama/items/6949980d61f8c02ffd8d

# JS・HTMLのミックス（テンプレート言語）

|  拡張子   |                説明                 |
| :----: | :-------------------------------: |
| `.ejs` | HTMLにJSを埋め込む（Embedded JavaScript） |
| `.jsx` |  JSにHTMLを埋め込むような形。Reactなどで使用される   |

`.ejs`の例
```ejs
<!DOCTYPE html>
<html>
<head>
    <title>EJS Example</title>
</head>
<body>
    <h1>Hello, <%= user.name %>!</h1>
    <ul>
        <% users.forEach(function(user) { %>
            <li><%= user.name %></li>
        <% }); %>
    </ul>
</body>
</html>
```

`.jsx`の例
```jsx
import React from 'react';

const UserList = ({ users }) => {
    return (
        <div>
            <h1>Hello, {users[0].name}!</h1>
            <ul>
                {users.map((user, index) => (
                    <li key={index}>{user.name}</li>
                ))}
            </ul>
        </div>
    );
};

export default UserList;
```

https://ja.react.dev/learn/writing-markup-with-jsx

# TypeScript

|  拡張子   |              説明               |
| :----: | :---------------------------: |
| `.ts`  | TypeScriptで書かれたプログラムを保存したファイル |
| `.tsx` |      `.jsx`のTypeScript版       |

# その他

JSON関連

|   拡張子    |                              説明                               |
| :------: | :-----------------------------------------------------------: |
| `.json`  | JavaScript オブジェクトの構文に従ったテキストベースのデータ形式<br>JavaScriptとは別物と考えて良い |
| `.jsonc` |             JSON形式を拡張したもの。特徴は「コメント機能」「末尾の`,`を許容」              |

https://developer.mozilla.org/ja/docs/Learn/JavaScript/Objects/JSON

言語・フレームワーク特有の拡張子

|    拡張子    |                 説明                 |
| :-------: | :--------------------------------: |
|  `.vue`   |          Vue.jsで使用される拡張子           |
| `.coffee` | 昔流行った"AltJS"の一種であるCoffieScriptの拡張子 |
|  `.purs`  |    "AltJS"の一種であるPureScriptの拡張子     |

https://ja.vuejs.org/api/sfc-spec

https://tech-camp.in/note/technology/41177/#PureScript

ソースマップ

|           拡張子            |       説明        |
| :----------------------: | :-------------: |
| `~.map`<br>(`.js.map`など) | ソースマップと呼ばれるファイル |

:::note
ソースマップ

クライアントに配信されるファイルは、開発時の整頓されたファイルではなくなっていることが多い。
クライアント側からデバックを行う場合、元の「開発時の整頓された」ファイルに戻したい。
その際に使用されるのがソースマップである
:::

https://stackoverflow.com/questions/21719562/how-can-i-use-javascript-source-maps-map-files
Flutter　〜プロパティゲッターについて〜

SQLiteを実験中なのでメモ
DBを初期化するときに以下のような実装部分が登場する。

```dart
Future<Database?> get database async {
  if (_database != null) return _database;
  _database = await _initDatabase();
  return _database;
}
```

この記載方法は自分には関数の定義に見えるが、
プロパティを定義している、と解釈するのが正しい模様。

getはプロパティゲッターを定義するキーワードになる。

外部からアクセスをする場合、「instance.database」というような
記載方法でアクセスできるのでコーディングが読みやすくなる。

以下にサンプル。
```dart
class ClassName {
  // プロパティのバックフィールド
  int _value;

  // コンストラクタ
  ClassName(this._value);

  // プロパティゲッター
  int get value {
    return _value;
  }
}
```

これを使用する場合、

```dart
void main() {
  var obj = ClassName(10);
  print(obj.value); // 10
}

```

外部から利用する場合、プロパティとしてアクセスをすることができて、
定義をする側では複雑なロジックを実装することが可能となる。
非エンジニアにレプリケーション遅延のことを聞かれたので星空で説明した

:::note warn
分かりにくかったらごめんなさい。
:::

こちらの記事を見て、私も似たようなことを書いてみたいと思い、書いています。

https://qiita.com/sauna1137/items/e93a3e96b994b80dbce6

## レプリケーション遅延とは

「レプリケーション」とは、障害や負荷に備えてデータベースのサーバを複製すること。  
データベースへ書き込みが発生すると、複製されたサーバに更新データを反映させるが、この反映処理に遅延が発生し、「書き込んだはずのデータが取得できない」などの影響を及ぼしている状態を「レプリケーション遅延」という。

なお、上記説明は自分の理解とこちらの記事をベースに書いています。

https://qiita.com/kato1116/items/6e9a1da7378d20309543

## 説明

### レプリケーション遅延が起こるとどうなるの？

![seiza_natsu_daisankaku.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/f763feb8-8722-6394-3397-f7833c90a5de.png)

夏の大三角は地球からどれくらい離れているか知っていますか？  
夏の大三角を構成するアルタイルは地球から 17 光年離れていて、アルタイルの発する光が私たちに届くまでにおよそ 17 年かかっています。

同じように、レプリケーション遅延が発生していると、誰かがブログを投稿したつもりでも、ブログを見ている私たちに見えるまでに時間がかかってしまいます。  
逆に、私たちが今見ている記事は、投稿者からしたらもう削除済みかもしれません。そんな状態が起こってしまうのです。

だからエンジニアの人たちは、レプリケーション遅延が起こると **今日も星がきれいだね** と言うのです。

:::note warn
ちなみに私は今まで、レプリケーション遅延のことを「星がきれいだね」と言っている人を見たことがありません。
:::

### レプリケーション遅延が解消するとどうなるの？

![planetarium.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/ad3e2bc4-d392-c727-57f7-fa9c394f3b55.png)

レプリケーション遅延が解消することで、誰かが投稿したブログがすぐに私たちにも確認できるようになります。変更や削除された場合でも同様に確認することができます。

星空に例えると、アルタイルのちょっとした明るさ・光り方・色の変化を私たちがほぼリアルタイムで確認できるということです。  
レプリケーション遅延が起こっていない状態とは、言わば **星に手の届く世界** が実現している状態なのです。

エンジニアの人たちは、この **星に手の届く世界** をいつも提供できるよう、今日も仕事を頑張っています。

## おまけ

北海道の富良野には、「星に手のとどく丘キャンプ場」というところがあるそうです。行ってみたいですね。

https://www.hoshioka.com/
(しくみ)(液晶)サウンドオシロスコープのしくみをかんがえる


![o_coq181.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/809d0848-7f20-2c8d-83e8-45678d422831.jpeg)


●書き込み方向
--------------------------------------

X方向にドットが書き込まれて行って
右端までくるとY段が1段上がってXが0になる

![o_coq178.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/3f6b5506-4142-b4e7-d7f1-61a29f3b8e72.jpeg)




●空白、L1、空白の書き込み
--------------------------------------

空白は、64 - L1
レベルは、L1の二倍を書き込んで行く

![o_coq179.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/56689ce4-157e-0cfb-a8fd-9808e3209bcc.jpeg)



●答え合わせ
--------------------------------------

空白、L1、空白の書き込みを
繰り返して行くと
サンドオシロスコープの波形が出力される

![o_coq180.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/5c1a0694-4c07-696a-5051-b227cfcf70ef.jpeg)




おまけ

プログラムの例　オンラインコンパイラ

```c++



#include <iostream>
using namespace std;
int main(void){
    // Your code here!
    //              0  1  2  3  4  5  6  7  8  9
    int data1[10]={31,30,28,24,20,24,28,30,31,30};
    
    for(int y=0;y<10;y++){
        int L1 = data1[y];
        for(int x=0;x<(32-L1);x++){
            printf("-");
        }
        for(int x=0;x<(L1*2);x++){
            printf("*");
        }
        for(int x=0;x<(32-L1);x++){
            printf("-");
        }
        printf("\n");
    }
}



```


```

-**************************************************************-
--************************************************************--
----********************************************************----
--------************************************************--------
------------****************************************------------
--------************************************************--------
----********************************************************----
--************************************************************--
-**************************************************************-
--************************************************************--

```
tabula-pyでpdfをcsvに変換する際、javaの環境設定が必要だった話

pdfデータをcsvに変換して構造化データとして使用したい！
tabula-pyというとても便利そうなツールがあるのでサクッと変換しようとしたら、
JVMNotFoundException でつまずいた... 全然サクッといけない...

**システム環境変数を設定すればいけます！！！**

以下簡単に手順

### １．java のインストール
https://www.java.com/ja/download/

### ２．tabula-py のインストール
```
pip install tabula-py
```
### ３．環境変数設定
0. 環境変数設定を開く
0. システム環境変数の新規で「JAVA_HOME」を「yourpath」に追加
yourpath は初期設定だとこんな感じです-->　C:\Program Files\Java\jre-1.8　
Javaのインストール先を参照してください
0. 「path」を編集、一番下に新規で「%JAVA_HOME%bin;」と追加
    
    詳細はこちら

https://stackoverflow.com/questions/1672281/how-to-set-the-environment-variables-for-java-in-windows

以上！
Python環境再起動してから実行したらいけました！！！

何気ないことでつまずいてしまうけど、千里の道も一歩から:walking_tone1:
【適宜更新】Post-quantum cryptographyの動向

# はじめに

Post-quantum（耐量子計算機暗号;PQC）の話が最近盛り上がってきているので、まとめてみようと思います。

https://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%B9%E3%83%88%E9%87%8F%E5%AD%90%E6%9A%97%E5%8F%B7

# Who am i ?

しがないエンジニアです。


# なぜPQCの話が盛り上がってきているのか？

近年、量子計算機の開発スピードが上がってきており、60q-bitを超えるくらいまでスケールしてきています。2030年を超えるあたりに現実的に既存の公開鍵暗号の脅威となるShorのアルゴリズムが解けるくらいの量子計算機（CRQC）ができるのでは？という推測があり、これの準備段階として2020年あたりから盛り上がってきているのが現状です。
念の為、誤解のないように記載するとここで述べている計算機はアニーリング型ではなくゲート型と呼ばれる計算機のことを指します。

# CRQCの影響がクリティカルなのはどこなのか？

量子アルゴリズムにはGroverのアルゴリズムやShorのアルゴリズム等が有名ですが、Shorのアルゴリズムは多項式時間で素因数分解や離散対数問題を解くアルゴリズムのため、既存のRSAや楕円曲線暗号の安全性の仮定が崩れてしまうという問題があります。すなわち「素因数分解や離散対数問題が効率的に解けない限り、それに基づくRSAや楕円曲線暗号も安全」ということです。ただし、ShorのアルゴリズムはCRQCで動作させた場合、多項式時間アルゴリズムで解けるということが知られていたため、現実的なCRQCが開発されない限り、実際に多項式時間で素因数分解や離散対数問題が解けることはないだろうと議論されてきました。近年ゲート型の量子計算機の開発が進んでいるため、それに合わせて次世代の暗号も考えていかないといけないね、ということで議論が進んでいるというわけです。Shorのアルゴリズムが論文で発表されたのは、1994年頃らしいので30年前から議論自体はされているということですね。

https://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0

https://plasmaima.com/%E9%87%8F%E5%AD%90%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF/%E3%82%B7%E3%83%A7%E3%82%A2%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0

# 量子計算機の開発動向

量子計算機にも色々種類があるようなのですが、日本で有名なものは超伝導状態を使って量子状態を人工的に作り出す方法です。

https://www.riken.jp/pr/news/2024/20240315_1/index.html

ただ、現実的に使えるCRQCには少なくとも1000q-bitくらいは必要だよねという声もあり、まだまだ暗号解読に使えるようなレベルには至っていないようです。こちらの動向もウォッチしていきたいところですね。

他にも色々量子状態を作り出す方法が研究されているようです。

https://xtech.nikkei.com/atcl/nxt/column/18/02705/030500015/

日本総合研究所の方がまとめてくださっています。わかりやすいです。

https://www.jri.co.jp/MediaLibrary/file/column/opinion/pdf/11942.pdf

# PQCの動向

PQCの動向ですがNISTの標準化が進んできており、FIPSもDRAFTの状態です。NISTの標準化を待つばかりですね。

https://csrc.nist.gov/Projects/post-quantum-cryptography

IETFでも議論が進んでいるようです。

https://wiki.ietf.org/group/sec/PQCAgility

日本銀行の宇根さんがまとめてくださっている資料が大変わかりやすいです。

https://qforum.org/wp-content/uploads/2023/11/%E3%80%90%E9%85%8D%E5%B8%83%E7%94%A8%E3%80%91%E9%87%8F%E5%AD%90%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AB%E8%80%90%E6%80%A7%E3%82%92%E3%82%82%E3%81%A4%E6%9A%97%E5%8F%B7%E3%81%B8%E3%81%AE%E7%A7%BB%E8%A1%8C_%E5%AE%87%E6%A0%B9%E6%AD%A3%E5%BF%97%E6%B0%8F.pdf

# 日本国内の状況

総務省で最近資料がアップロードされていました。

https://www.soumu.go.jp/main_content/000948621.pdf

CRYPTRECでも資料がアップロードされています。

https://www.cryptrec.go.jp/tech_guidelines.html

# 最後に

耐量子暗号が注目を浴びている中で、クリプトアジリティについても議論されるようになってきました。NISTの標準化を首を長くして待とうと思います。
Eel備忘録

Eelを触った際のメモ

# 環境

- OS：Ubuntu 2022.04 (Windows11 WSL2)
- Pythonバージョン: Python 3.12.1

# やったこと

下記ページを参考にWSLgが立ち上がるか確認

https://qiita.com/inoory/items/f431c581332c8d500a3b

# わかったこと

サンプルを実行した際、下記のエラーが発生した。
```bash
packages/eel/__init__.py", line 16, in <module>
    import bottle.ext.websocket as wbs
ModuleNotFoundError: No module named 'bottle.ext.websocket'
```

Eelの__init__.pyファイル内のインポート行を変更することで解決した。
どうもPython12のEelパッケージには問題があるらしい。

```bash
/.pyenv/versions/3.12.1/lib/python3.12/site-packages/eel/__init__.py
```

下記の行を
```python
import bottle.ext.websocket as wbs
```

以下に変更。
```python
import bottle_websocket as wbs
```

WSLgでWebブラウザが起動した。

またブラウザの日本語表示が文字化けしていたため、unifontをインストール。

```bash
sudo apt install unifont
```
USB電源で駆動！ATTiny13AとbitDuino13を使ったLEDテープ調光回路

# 夜の廊下は意外と怖い
夜、電気を点けずに廊下を歩いていると思わぬ方向に歩いて転倒しそうになるのでLEDテープで廊下を照らすことを考えました。

## 5V USB電源で12V LEDテープを光らせる
LEDテープは暗闇に慣れた目にまぶしくない程度の光に抑える必要があるので、LED調光ドライバを作ることにしました。小型省電力を目指して回路にはATTiny13Aを用い、プログラムにはArduino（bitDuino13）を使いました。電源は汎用品が簡単に手に入るUSB電源を使い、昇圧チョッパー回路で5Vを昇圧して駆動することにしました。クロック~~1~~9.6MHzを想定しています(1MHzでは正しく動きませんでした。)。

## 動作原理
動作としてはソフトウエアPWMを使ってパルス電流を作って昇圧チョッパー回路に流し、LEDを光らせます。夜の廊下をうっすら照らせれば十分という考えで作っているので電圧制御や電流制御はかけていませんが、押しボタンスイッチでPWMのデューティ比を変えることで明るさを5段階で調整できるようにしました。

## 回路中のC1, C2について
C1はスイッチングスピードを上げるための0.1μFセラミックコンデンサで、こういう役割のコンデンサはスピードアップコンデンサと呼ばれています。以前似たような昇圧回路を組んだ時にスピードアップコンデンサがあったほうがトランジスタのスイッチング速度が上がってトランジスタによる熱損失が減って効率が良くなったのでここでもつけています。
C2は電源の安定化のための100μFの電解コンデンサです。
C1, C2はなくても多分動作します。

![LED_driver_回路図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199416/9176865f-b860-1c6f-7d48-b44b239246e1.png)


```arduino: LED_driver.ino
// コンパイラbitDuino13
// クロック9.6MHzを想定
#define PWM_PIN 0
#define SW_PIN 1
#define COUNTMAX 10
int mode=4;
int swval=LOW;
int preval=LOW;
int pcount=0;
int ncount=0;

void setup() {
  // put your setup code here, to run once:
 pinMode(PWM_PIN, OUTPUT);
 pinMode(SW_PIN, INPUT_PULLUP);
}

void loop() {
  digitalWrite(PWM_PIN, 1);
  //delayMicroseconds(1);
  digitalWrite(PWM_PIN, 0);
  read_switch();
  wait_for_a_while();
}

void read_switch(){
  swval = digitalRead(SW_PIN);
  if(swval==LOW){
    if(pcount>COUNTMAX){ // チャタリング防止のため一定期間スイッチが押されたままになるのを待つ
      if(preval==HIGH){
        mode-=1;
        if(mode<0){
          mode=4;
        }
        preval=LOW;
      }
    }
    pcount++;
    ncount=0;
  }else{
    pcount=0;
    ncount++;
    if(ncount>COUNTMAX){ // チャタリング防止のため一定期間スイッチが離されたままになるのを待つ
      preval=HIGH;
    }
  }
}

void wait_for_a_while(){
  switch(mode){
    case 0:
      delayMicroseconds(10);
      break;
    case 1:
      delayMicroseconds(100);
      break;
    case 2:
      delayMicroseconds(1000);
      break;
    case 3:
      delayMicroseconds(5000);
      break;
    default:
      delayMicroseconds(10000);
  }
}
```
Claude 3.5 Sonnetとは何者なのか

# 初めに
こんばんは
Akira_0809です、
ぼんやりと過ごしていたらAnthropicが発表していたので寝ないで書きます、

# 時間が無い人向け
Claude 3 Opusと競合モデルを幅広い評価で凌駕し、Opusよりも2倍速く、ビジョン機能でも大幅に進化したモデル

また、`Artifacts`という機能が追加された
コードスニペット、テキストドキュメント、ウェブサイトデザインなどのコンテンツを表示するウィンドウ

今年の後半にOpusとHaikuの3.5が出る予定

# 評価
## テキスト
![claude.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3241738/c84d0e0c-1e09-86f0-cecb-6d5e90ae33e6.png)
上から
- GPQA （大学院レベルの推論能力）
- MMLU （学部レベルの知識）
- HumanEval （Pythonコーディングタスク）
- MGSM （多言語数学問題解決）
- DROP （テキストの推論）
- BIG-Bench-Hard （複雑な推論タスク）
- MATH （数学的問題解決）
- GSM8K （小学校レベルの数学）

GPQAにおいては`5-shot CoT GPQA maj@32`において`67.2%`のスコアを記録しています。
> `maj@32`は32の結果を集計して最終評価を行ってます

MMLUにおいては`5-shot`での評価でGPT-4oに並んでいます

MATHにおいてはGPT-4oに敗北しています

## ビジョン
![vision.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3241738/8ab114f7-f52c-0ffa-5d40-80e5c89c7fcc.png)
上から
- Math Vista （視覚的数学推論）
- AI2D （科学図の理解）
- MMMU （視覚的質問応答）
- Relaxed accuracy （チャートに関する質問応答）
- ANLS （文書の質問応答）

MMMUの評価は僅差でGPT-4oの勝利となっています

# コスト
![cost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3241738/0eadf584-45f2-0682-7cf3-db96a0373d4f.png)
[Claude.ai](https://claude.ai/)とiOSアプリで無料で利用できます（割と制限早いかも）
課金していると高いレート制限になります

## API
- Anthropic API
- Amazon Bedrock
- Google Cloud Vertex AI

Bedrockはなんかエラー出たけど、、

## 値段
Claude 3 Sonnetと同じ値段ですね
| 入力トークン | 出力トークン |
|:-:|:-:|
|  100万個 |  100万個 |
|  $3 |  $15 |

# 安全とプライバシー
レッドチームによる評価では`ASL-2`となっています
> `ASL-2`とは現在のClaudeモデルと同じ
> 詳しく知りたい方は下を読んでね
>> - ASL-1 refers to systems which pose no meaningful catastrophic risk, for example a 2018 LLM or an AI system that only plays chess.
>> - ASL-2 refers to systems that show early signs of dangerous capabilities – for example ability to give instructions on how to build bioweapons – but where the information is not yet useful due to insufficient reliability or not providing information that e.g. a search engine couldn’t. Current LLMs, including Claude, appear to be ASL-2.
>> - ASL-3 refers to systems that substantially increase the risk of catastrophic misuse compared to non-AI baselines (e.g. search engines or textbooks) OR that show low-level autonomous capabilities.
>> - ASL-4 and higher (ASL-5+) is not yet defined as it is too far from present systems, but will likely involve qualitative escalations in catastrophic misuse potential and autonomy.

また、外部の専門家であるイギリスの人工知能安全研究所(UKAISI)での評価もされています

# Artfacts
少し本題とはずれますが今回追加された新機能です
![Claude 3.5 Sonnet for sparking creativity 00-00-14.78.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3241738/4bca026a-fece-f13c-81ba-842b1afe2a60.png)
コードスニペット、テキストドキュメント、ウェブサイトデザインなどのコンテストを提供するウィンドウです
リアルタイムでの表示によりClaudeの生成物を確認、編集、構築することが出来ます

オンにするには
- 右上の自分のアイコンをクリック
- Feature Previewをクリック
- オンにする

# 他のモデルについて
Claude 3 OpusとClaude 3 Haikuについては今年の後半にリリース予定です
また、ChatGPTのメモリー機能のようなものも開発しているようです

# 最後に
同じ値段で使えるのヤバ過ぎOpusの存在価値が消えた、、
OpusとHaikuも楽しみです！
GPT-5も早く出ないかなー
unity3Dで物をクリックする

# 目標
物をクリックして取得したり、消したりする方法。今回はオブジェクトを消してみる。
# 手順
1.オブジェクトにcolliderとevent triggerを付ける
2.オブジェクトに以下のスクリプトを付け、event triggerm→pointer clickで実行されるように設定する。
```
public class PickUpController : MonoBehaviour
{       //クリックしたら消す
        public void OnClickObj()
        {
        gameObject.SetActive(false); 
        }
}
```
これでオブジェクトにクリックが反応したらOnclickが発動するようになる。
3.　pointerを設定する。Cameraオブジェクトに[Physics Raycaster]をアタッチする。これだけでクリックがオブジェクトに向って飛ぶようになる

これで画面上のオブジェクトにクリックしてなにかアクションを起こすことが可能になります。
Rust で AtCoder やるときのフォルダ構成決まった

# 前提
- 基本的に ABC しかやっていない
- ABC 以外の問題が出たときに同じような構成で楽がしたい

# Tree
- 358 以外にもあるがでかいので割愛
```shell
.
├── ABC
│   └── 358
│       ├── Cargo.toml
│       └── src
│           ├── a.rs
│           ├── b.rs
│           ├── c.rs
│           ├── d.rs
│           ├── e.rs
│           ├── ex.rs
│           ├── f.rs
│           └── g.rs
├── Cargo.lock
├── Cargo.toml
change_abc_target.sh
└── abc_prepare.sh
```

### abc_prepare.sh の中身
```shell
if [ -z "${1}" ]; then
    echo "You should set contest number"
    exit 1
fi
mkdir -p ABC/$1
mkdir -p ABC/$1/src
touch ABC/$1/Cargo.toml
echo "[package]
name = \"abc_$1\"
version = \"0.1.0\"
authors = [\"root\"]
edition = \"2018\"

[dependencies]
proconio = \"0.4.5\"
itertools = \"0.10.5\"
ac-library-rs = \"0.1.1\"" > ABC/$1/Cargo.toml

alphabet=(A B C D E F G Ex)
for abc in ${alphabet[@]}; do
    lower_case=$(echo $abc | tr 'A-Z' 'a-z')
    touch ABC/$1/src/$lower_case.rs

    echo "
[[bin]]
name = \"$lower_case\"
path = \"src/$lower_case.rs\"" >> ABC/$1/Cargo.toml

    echo "use proconio::input;

fn main(){
    input!{

    };
}" > ABC/$1/src/$lower_case.rs
done

echo "[workspace]
members = [
    \"ABC/$1\",
    \"ironclad_rule\"
]" > Cargo.toml;
```

### ルートの Cargo.toml の中身
```toml
[workspace]
members = [
    "ABC/358",
    "ironclad_rule"
]
```
- ironclad_rule については鉄則本を進めていく中でいちいちルートの Cargo.toml が変更されるのが嫌だったためここだけ指定
- ABC/358 で番号を指定している理由は不要に rust-analyzer が動かないでほしかったため

### change_abc_target.sh の中身
```
if [ -z "${1}" ]; then
    echo "You should set contest number"
    exit 1
fi

echo "[workspace]
members = [
    \"ABC/$1\",
    \"ironclad_rule\"
]

resolver = \"2\"" > Cargo.toml;
```
- target の ABC の番号だけ変えるためにつかってる

# コンテスト参加時に以下を実行
```shell-session
bash abc_prepare.sh 358(コンテストの番号)
```
- ここでその回のコンテストの a ~ g の .rs を作成して proconio::input を書き込む

# 実行時
- 該当のコンテストナンバーに移動
- それぞれの問題のファイルを指定して実行 
```
cd ABC/358
cargo run --bin a
```

### TODO
- テストいい感じに書けるようにしてぇ~
ピアソン相関係数

# ピアソン相関係数の復習

## 共分散
相関係数を求めるには、共分散が必要になる。
データの大きさ$n$の２変数データを便宜的に、 $(x_1,y_1),(x_2,y_2),...,(x_n,y_n)$ と表した場合、共分散は
```math
\begin{align}
S_{xy} &= \frac{1}{n} \Bigl( (x_1 - \bar{x})(y_1 - \bar{y}) + (x_2 - \bar{x})(y_2 - \bar{y}) + \cdots + (x_n - \bar{x})(y_n - \bar{y}) \Bigr) \\
&= \frac{1}{n}\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})
\end{align}
```

共分散が正の値なら正の相関が、負ならば負の相関がある。
共分散は、単位によって値の大きさが変わるので、$x,y$両方の標準偏差で割る。
これが、相関係数（ピアソンの積率相関係数）

## 相関係数
共分散を$x,y$の標準偏差で割るので、以下の式で表せる
```math
r_{xy} = \frac{s_{xy}}{s_xs_y} 
```
ここで$s_{xy}$は$x$と$y$の共分散、$s_x,s_y$はそれぞれ$x,y$の標準偏差を表す。

共分散を標準偏差で割ることで、相関係数は測定の単位に依存せず、-1から1の間の値をとる。
相関係数の値の正負は、そのまま正の相関、負の相関を示し、絶対値が大きな値をとるほど、強い相関がある。

相関係数を$R$と置くと、
```math
\begin{align}
R^2 &= \frac{s_{xy}^2}{s_x^2s_y^2} \\
&= \frac{s_{xy}}{s_x^2}\times\frac{s_{xy}}{s_y^2}
\end{align}
```
ここで、$s_x^2,s_y^2$は、それぞれ$x,y$の分散を表す。

## 回帰直線

$x$に対する$y$の回帰直線の傾きは、$\frac{xとyの共分散}{xの分散}$で表すことができ、
$y$に対する$x$の回帰直線の傾きは、$\frac{xとyの共分散}{yの分散}$で表すことができる。

これは、それぞれ、$\frac{s_{xy}}{s_x^2} , \frac{s_{xy}}{s_y^2}$を指すので、
それぞれの回帰直線の傾きを掛け合わせると、相関係数の２乗$R^2$が求まる。

## 参考
* 回帰直線の傾きについて
    * https://ictsr4.com/py/r0130.html
* HackerRank
    * https://www.hackerrank.com/challenges/correlation-and-regression-lines-1/problem?isFullScreen=true
C_TS422_2021 SAP Certified Application Associate SAP S/4HANA Production Planning and Manufacturing対策（13/100）

【13日目】
トピック 3：SAPS/4HANAのマスタデータ（2/22）

≪問題13≫
プラント共通の品目ステータスとプラント固有の品目ステータスの両方を品目マスタで使用するときに、どのステータスが最高の優先度を持ちますか。
□プラント共通ステータス
□プラント固有ステータス
□最も制限の厳しいステータス
□最も制限の緩いステータス

≪解答≫
□プラント共通ステータス
□プラント固有ステータス
■最も制限の厳しいステータス
□最も制限の緩いステータス

≪解説≫
◆品目マスタレコードの品目ステータスは、すべてのプラントで共通のステータスを定義する（基本データビューを使用）ことも、プラントごとに固有のステータスを定義する（作業計画ビューを使用）ことも可能です。
◆プラント共通のステータスでも、プラント固有のステータスでも、最も制限の厳しいステータスが優先されます。
真夏のIT怪談夜話2024 -夜間作業-

# はじめに
先日、[真夏のIT怪談夜話2024 -サーバールーム-](https://qiita.com/yam_dev/items/06748d13ab9522a8bc44)という記事を書きました。

長く働いていると、色々あるもんで、夜間作業ならではの出来事も起こります。

よく、夜間作業には魔物が潜む、なんてことを言ったりしますが、今回は、夜間作業で魔物らしきものに遭遇した、不思議なお話です。

# 夜間作業について
どのくらいの方が夜間作業を経験していらっしゃるか分かりませんが、開発エンジニアの場合、リリース作業を夜間に行うことがあります。

なぜかというと、ユーザーがいるサービスの場合、利用者やトラフィックが少ない時間帯の方が、サービス停止や障害発生時の影響が少ないからです。

しかし、体というのはよくできたもので、夜勤に備えて昼間に寝ていても、眠いものは眠い。

普段寝ている時間帯に起きてるわけですから、なかなか慣れないのも仕方がありません。

そんな中で作業をするもんですから、昼間だと絶対に失敗しないような作業も、なぜか失敗することがあります。

感覚的に、昼間の3倍くらい、失敗率が上がります。
（なので、魔物が潜む、と言われることがあります）

それを予防するために、手順書をかなり丁寧に作り込んだり、リリース用のスクリプトを作って、コマンドを手で入力しなくて済むようにします。

みなさんも夜間作業を行うときは、以下を入念に準備してくださいね。

- 作業手順書
- リリース用スクリプト（必要に応じて）
- 切り戻し手順書
- 障害報告書

ここまでやる必要あるのか？？と思うくらい準備すると、本番では、ちょうどいい感じになります。

# 作業内容
当時、ショッピングカートの開発を担当していたのですが、ありがたいことにユーザー数が多く、サーバーを複数台、運用しておりました。

まずは何台かリリースして動作確認。
それから少し様子を見て、残りのサーバーにリリース、というのが主な手順です。

# 休憩中の出来事
始めに数台のリリースが終わり、少し休憩していたときのこと。

オフィスの隣にカフェスペースがあり、よく休憩で利用してました。

その日も休憩で利用しておりまして、少し薄暗い中、アイスコーヒーを飲みながら、のんびりとひと息。

時計を見ながら、あと10分くらいで戻るけど、なんか眠いなー、、なんてことを考えてたときです。

カフェスペースと通路は大きく透明なガラスの壁で区切られているんですが、ガラスの向こうを走る、黒い人影。

今のは気のせいか？？？

目がしっかりと覚め、今見たものがなんなのか、頭を整理します。

薄暗い中で真っ黒な人影、今のは見間違いだろう、と、アイスコーヒーを飲み干します。

あんなものが存在してたら凄いよな、と思いながらガラスの壁を凝視していると、再び、さっきより大きな黒い人影が走って横切る。

服も顔もなく、ただただ真っ黒です。
人の形をした、真っ黒な物体。

これはさすがにやばい、と思いながら、作業に戻りました。

あれが何だったのか、今でも分かりません。

# 最後に
不思議な物体に遭遇しましたが、作業は無事に完了しました。

夜間作業では、通常では考えられないようなミスや障害が発生することがあります。

もしかしたら、こんな魔物の仕業なんてこともあるかもしれませんね。

そういえば、神田明神でIT情報安全守護の御守が販売されてますが、意外と効果があるのかも。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407770/843c5ceb-a1a7-f4f2-3072-3c88e38d643f.jpeg" width="300px"/>

みなさんも、夜間作業は十分な準備で臨みましょう！

※ミスや障害が発生しても、魔物のせいにしてはいけません。
NordVPNをLinuxターミナルで使用する際ブラウザログインが機能していない時の対処法

#### LinuxターミナルでNordVPNのログインの際、```nordvpn login```後Web Siteの認証に成功したにも関わらずターミナルではログイン認証が反映されていない場合について
公式サイトに載っている通り以下の手順で解決しました。
1. ```nordvpn login```
2. ターミナルで表示されたURLをブラウザにコピペで開き、ログインプロセスを完了させます。 
3. 以下の`続行`ボタンを右クリックしてURLをコピーする
![Screenshot 2024-06-20 at 11.08.36 AM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330073/986ff07a-7d38-1f97-a375-677f437556fa.png)
4. ```nordvpn login --callback "<URL>"```を実行する。（ダブルクオーテーション""も含みます）
例：```nordvpn login --callback "nordvpn://login?action=login&exchange_token=...=done"``` 

```nordvpn connect```をすると接続が完了していることがわかると思います。
INA226 with Raspberry Pi 3B+ と INA226 (2024/bookwarm)

# INA226 with Raspberry Pi 3B+ と INA226 (2024/bookwarm)

## Raspbery Pi OSのインストール

とりあえずRaspberry Pi OSをSDカードに焼いてセットしてあるものとします。

- Raspberry Pi 3B+
- Raspbery Pi OS Lite (64bit)
- 前回使用したJRC7805A

## 接続構成

![ina226.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151455/35156a5d-8c80-8496-e07e-80043e074943.png)

## raspi-config

```bash
sudo raspi-config
```

### 3.Interface Options

- I1 SSH
  - YES
    - ***この設定をした時点で誰でもアクセスできるようになるので、SSHの設定が終わるまでLANケーブルを抜いておいてもいい***

- I5 I2C
  - Would you like the ARM I2C interfaace be enabled ?
    - YES

### 5.Localisation Options

- L2 Timezone
  - Asia
    - Tokyo

### 6 Advanced Options

- A1 Expanded Filesystem

### Finish

- 再起動する？と聞いてくるのでYes

## I2Cのテスト

```bash
sudo apt-get install i2c-tools
```

### I2Cアドレスの確認

```bash
i2cdetect -y 1
```

```bash
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
```

### I2Cデバイスのレジスタ読み込み

```bash
i2cget -y 1 0x40 0x00 w
0x2741
```

```bash
i2cget -y 1 0x40 0x01 w
0x1100
```

```bash
i2cget -y 1 0x40 0x02 w
0xc60f
```

## Python3で読み込む

### PIPのインストール

```bash
sudo apt-get install python3-pip
```

### SMBusのインストール

```bash
sudo pip3 install smbus2 --break-system-packages
```

### サンプルコード

```bash
touch ina226.py
chmod 777 ina226.py
nano ina226.py
```

```python
#!/usr/bin/python3

from smbus2 import SMBus

def main():
    # Variables
    Volt = 0
    Ampere = 0
    tmp_V = 0
    tmp_A = 0
    shant_reg = 0.002
    # Read from i2C bus(1) address(0x40)
    with SMBus(1) as bus:
        # Read Data
        data01h = bus.read_i2c_block_data(0x40, 1, 2)
        data02h = bus.read_i2c_block_data(0x40, 2, 2)
        # Volt Calcrate
        tmp_V = data02h[0]*256 + data02h[1]
        ## V = ReadValue * LSB(1.25mv) /1000 (mV -> V)
        Volt = tmp_V * 1.25 / 1000
        # Ampere Calcurate
        tmp_A = data01h[0]*256 + data01h[1]
        ## V=IR -> I=V/R -> mI=mV/mR
        ## mV = ReadValue * LSB(2.5μV) / 1000 (μV -> mV)
        ## mR = shant_reg(0.002Ω = 2mΩ)
        ## mI = (ReadValue * LSB(2.5μV) / 1000 (μV -> mV))/ shant_reg
        Ampere = (tmp_A * 2.5 / 1000)/shant_reg
        # Print out
        print(str(Volt) + "V")
        print(str(Ampere) + "mA")

if __name__ == '__main__':
    main()
```


```bash
$ python3 ina226.py
5.045V
20.0mA
```
LeetCode挑戦日記：Day14

# はじめに

最近、業務で実装する時間よりも資料作成やレビューをする時間が多くなってきました。
このままでは自身のコーディング能力が落ちそうで怖いので、LeetCodeを始めてみました。

自身の学習の記録 & LeetCodeに興味のある人が挑戦しやすいように、記事に残していきます。
このような競技プログラミングをした経験がないので、ひよってEasyからやっていきます...

# [Easy] 643. Maximum Average Subarray I

整数の配列`nums`（`n`個の要素を含む）と整数`k`が与えられます。

長さが`k`である連続する部分配列のうち、最大の平均値を持つものを見つけ、その値を返してください。
計算誤差が`10^-5`未満である答えは許容されます。

## 素直に解いてみる

### 考え方

1. 先頭から`k`個の合計を求める
1. 1番左の要素を引き、1つ右の要素を足した合計を求めて、大きい方を残す
1. 上記の処理を`n`番目まで繰り返す
1. 最大の合計の平均値を返す

### コーディング

```typescript
function findMaxAverage(nums: number[], k: number): number {
    let rightIndex = k - 1;

    let max = 0;
    for (let i = 0; i <= rightIndex; i++) {
        max += nums[i];
    }

    let base = max - nums[0];
    rightIndex++;
    while (rightIndex < nums.length) {
        const sum = base + nums[rightIndex];
        if (max < sum) {
            max = sum;
        }
        base = sum - nums[rightIndex - k + 1];
        rightIndex++;
    }

    return max / k;
};
```

### 結果

Runtime：71ms
Beats 97.53%

Memory：64.00MB
Beats 57.72%
【ubuntu】ターミナルにコピペのペーストをするショートカットは ctrl + shift + v

お疲れ様です。秋並です。

コピーした文章を、テキストエディタなどに貼り付けるときのショートカットは
```
ctrl + v 
```

<br>

ですが、ターミナル上に貼り付ける際は
```
ctrl + shift + v
```
でないと貼り付けできません。

ショートカットを覚えた頃によくやりがちなので、気をつけましょう。
Use python code to control xiaomi IoT devices

> ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169726/21b47c8b-95b4-bf85-7b48-4819d2a248b1.jpeg)

```
miiocli discover
```

```
miiocli genericmiot
```

## extractor ximaomi iot device bluetooth key

>![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169726/cb6ebe78-9441-f711-a014-06943566236f.jpeg)
> https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor

---

Ref:

https://www.bluez.org/


https://github.com/home-assistant/

https://github.com/rytilahti/python-miio

https://github.com/al-one/hass-xiaomi-miot

https://moenew.us/python-miio-use.html

https://sspai.com/post/68306

https://post.smzdm.com/p/aqm49d5v/

https://post.smzdm.com/p/a7nwl6ld/
[Dify]Difyの引用と帰属を有効にするとめちゃくちゃ便利でびびった


Difyの引用と帰属を有効にすると、回答時にその引用した文献が表示されます。
めちゃくちゃ便利で、何を検索したかどうかがすぐに表示されるのです。
めちゃくちゃいいですね。
簡単ですが解説します！

## 設定方法

1. まずはチャットボット（or ChatFlowでも可）の画面から、「機能を追加」を選択してください
(チャットボット版)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/4b1414fc-30d0-c188-7566-57f4da3992bc.png)
(チャットフロー版)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/68b7d0cf-caa6-7b31-8c1c-ebcbd013f907.png)


2. つぎに「引用と帰属」を有効にしてください！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/511cfdd3-f1ed-624c-c60e-c4f4afef241f.png)

3. そうすると以下の画面のように有効になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/d3589aaf-8e4c-e175-49fe-177df78a4817.png)

4. そして質問してみてください！最後に引用がしっかりと表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/97b91b22-112f-1b89-1ab2-9688b77880bd.png)

5. 引用部分をクリックすると以下のようにどこを引用したかも見ることができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/28e921fa-6213-bf45-7887-15fe470ae34e.png)


## 最後に

これをするだけで事実確認がかなりしやすくなります。ぜひ使ってみてください。
Xやってるので気になる方はフォローお願いします。
https://x.com/hudebakonosoto