OmniAICreator/Qiita-1.07M huggingface dataset:
ナレッジ共有会を1年半続けてみてよかったこと

# 自己紹介
私は2017年からQAチームにてモバイルゲームのテスト管理や障害削減の推進などをしております。

# この記事の概要
案件Aを担当するQAメンバーで毎週ナレッジ共有会という会を開催しています。この取り組みを1年半続けてみて、メンバー全体のナレッジ把握度合いの底上げや、テスト設計精度向上などの効果を感じられるようになってきたので、取り組みの概要やこれまでに扱ってきたテーマと合わせて書きたいと思います。今後ナレッジ共有を行っていきたいという方の参考になれば幸いです。

# ナレッジ共有会とは
**概要**
案件AのQAメンバーで行っているナレッジ共有会の概要です
|項目|説明|
|:-|:-|
|参加者|案件Aを担当するQAメンバー5名|
|役割分担|司会、書記、扱うナレッジの有識者（挙手性）|
|頻度|週1回、1回あたり30分間|
|形式|Zoom|
|会の流れ|司会がナレッジにあたる資料を読み、それに対して有識者がそのナレッジが生まれた経緯や意味合いを補足。不明点があれば各自質問。書記が対話内容を記録。|

# 過去に扱ってきたテーマ
QAにかかわるテーマであればとくに制限は設けていません
**例**
- 案件Aのデッキや強化、バトルまわりの仕様の共有
- コーチングにおけるポイントの共有
- QCDとは何か、意識すべきことの共有
- 案件Aの各種イベントに共通するテスト項目の読み合わせ
- テスト設計時に参照するテスト観点の読み合わせ

**テーマ決めの流れ**
1. Slackで扱いたいテーマを募集（共有したい、聞きたい、どちらもOK）
2. ある程度集まったらZoomをつなぎ全員で投票
3. 一番票数の多いテーマを次回テーマとする

|案|Aさん|Bさん|Cさん|Dさん|Eさん|投票数|
|:-|:-|:-|:-|:-|:-|:-|
|ガチャテストケースの読み合せ|〇|〇|〇|〇|〇|5|
|回帰チェック項目の手順の読み合わせ。どこを見るために何が必要なのか、どうやったら確認できるかをテスター視点で見てみる||||〇|〇|2|
|各マスタの説明。検証時に使えそうなものや○○の機能はどのマスタを参照しているか気になる|〇|〇|〇||〇|4|
|Excelやスプレッドシートで使える便利な小技を知りたい||||||0|

# やってみてよかったこと
**1. メンバー間でナレッジの把握度合いを底上げできた**

- 担当案件における全ての仕様やテスト観点、意識すべきことまでを完璧に把握することは経験が短ければ短いほど難しいかと思いますが、それをそのままにせず少しずつでも着実に底上げすることができます
- メンバーの入れ替わり直後はもちろん、メンバー間で経験値の差がある際にも有効です

**2. ナレッジの見直しも行えるためより有効なものにアップデートできた**

- とくにテスト項目やテスト観点の読み合わせをしていると、見直した方がよい観点や、より効率的にできる項目などが見えてきました
  - 既存のテスト観点だけどよく見るとかなり局所的な観点になっていたので、類似不具合まで拾える観点に微修正を加える
  - テスト観点の読み合せをしているといつそのテスト観点を使用するかが不明瞭なものがあることに気づき、全体的にトリガーを補完する
  - 既存のテスト項目だが、検証時の効率性を考えると進めづらい順番になっていたので、全体的に項目の順番を入れ替える　など
- 定期的にチームメンバー全員で見直しを行うことで直近起きた問題の対策も踏まえることができたり、当時気づかなかったような不備や過不足に気づくことができます
- チームメンバー全員で見るので個人間のやり方の差異が生じていた時などに気づくきっかけにもなります

# 開催にあたって工夫したこと

**1. 役割を分担し、なるべく聞いているだけにならないようにする**
話し手と聞き手という構図になると、聞き手は聞くに徹してしまい、議論や質問につながりづらいので、司会役や書記役を設け、できるだけみんなが参加できるようにしています

**2. できるだけリスケになりづらい日に設定する**
ただでさえ優先度的には低く、他優先すべきタスクがある時はリスケやスキップになりがちな会なので、比較的定例会が少ない曜日にカレンダーを設定しています

# さいごに
- 今までもナレッジの共有は意識的にやってはきましたが、どちらかというと1のメリットのためにやっていたところが強かったように思います
- ただより普段の実務で触れやすいナレッジを扱ってきて、新たに2のメリットがあるということに気づき今後も続けたいとより思うようになりました、今や実施しない期間があると少し不安に感じます
- あまり労力をかけず取り組めると思いますので、ナレッジ共有の方法を新しく始めたい、また模索しているという方の参考になれば幸いです
Torなしでダークウェブを探索してみた

## １．はじめに
ダークウェブにアクセスする方法 の中で一番よく知られているのはTorブラウザーを使うことです。Torのダークウェブサイトはドメインの後ろに「.onion」が付く形で、Torブラウザーを通じてのみアクセスできます。しかし、Torブラウザーを利用しなくてもダークウェブサイトにアクセスする方法があります。今回の投稿ではChromeなどの一般ブラウザーからダークウェブへアクセスする方法と実際のハッカーグループのダークウェブサイトを調査する方法について語ります。

## ２．一般ブラウザーでダークウェブにアクセス
TorブラウザーのみでアクセスできるOnionドメインに、一般ブラウザーであるChromeを通してアクセスできるでしょうか。

ダークウェブサイトのドメインの後ろに「.ly」が付いていればアクセスできます。（あくまでもアクセスが「可能」であるだけで、「安全」ではないので、実際にアクセスすることはお勧めしません。）

onion.lyドメイン はTor2Webが提供するプロキシサーバーのドメインアドレスです。Tor2WebはTorネットワークに繋げなくても標準のブラウザーでOnionサービスにアクセスできるようにするソフトウェアプロジェクトです。
![Tor1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/e0711e5a-091f-e869-3302-f0a03746e6f5.png)
onion.lyで終わるダークウェブサイトのドメインは hxxp://abcdxxx1234[.]onion.ly のような形で、実際にアクセスするとTorブラウザーを使用したようにダークウェブサイトにアクセスすることができます。

## ３．ハッカーグループが使用するonion.lyドメイン
時々、悪名高いランサムウェア攻撃グループがこのようなonion.lyリンクを使うことを見られます。ランサムウェアに感染すると、攻撃者は身代金を要求し、自分たちの ダークウェブにアクセスする方法 の案内やリンクを伝えますが、一般ブラウザーを使う被害者がダークウェブサイトにアクセスできるようにonion.lyドメインに終わるアドレスを伝えます。

実際のランサムウェアハッカーグループが使うダークウェブサイトのアドレスをみるとドメインの接尾辞としてonion.lyが使われたことがわかります。下のリンクは実際に攻撃グループが配布したランサムウェアの配布ファイルを仮想環境で設置し、要求された身代金の支払い方から見つけたリンクです。
![onion_hacking link.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/c421721f-fba9-3745-6db5-4a7c30a5ddf3.png)

## ４．直接アクセスなしでOnion.lyドメインを探索
前述のように、 onion.lyドメイン は一般ブラウザーを活用してダークウェブのアクセス方法の１つで、リンクさえクリックすればすぐダークウェブサイトにアクセスできます。いくつかの国ではダークウェブにアクセスすることだけで問題になりかねないです。そうでなくてもランサムウェアグループなどのハッカーが運営するダークウェブサイトにonion.lyリンクでアクセスする場合、ドメインプロバイダーから接続者のIPアドレスが把握されることができるので、また他の攻撃対象になれます。

onion.lyドメインを確認しなければならないときに、直接アクセスしなくても情報を得られる方法があります。Security OSINT検索エンジンに検索すると、次のようにonion.lyサイトの情報及びスクリーンショットを確認できます。


* https://www.criminalip.io/ja/domain/report?query=http%3A%2F%2Fomegalock5zxwbhswbisc42o2q2i54vdulyvtqqbudqousisjgc7j7yd.onion.ly%2F&scan_id=2310456
![onion domain search.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/4f105f17-b623-e78b-ca7c-834c1c1f9715.png)

結果をみると、悪用履歴が確認でき、フィッシングURLとして検知されたことが分かります。
![onion CIP analysis1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/9eb6793f-fdba-2c2f-e3e0-306957739b18.png)
また、次のように直接アクセスしなくてもリアルタイムのウェブサイトスクリーンショットを確認できます。
![25_4_17_omegalock5zxwbhswbisc42o2q2i54vdulyvtqqbudqousisjgc7j7yd.onion.ly (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/46910459-fee5-e956-b4e8-d68b4af3c5bb.png)

## ５．おわりに
このように、必要によってダークウェブサイトを調査するとき、Torを設置しなくてもダークウェブにアクセスすることができます。ダークウェブサイトについての分析または、特定情報を集めようとする場合、本投稿が説明したSecurity OSINT検索エンジンなどを使っていただいて情報を得ることをお勧めします。
ansibleでディスク使用率監視とMattermostへの通知

# 背景

個人で使用しているサーバでGrowiやMattermostを使用しており、最近使用頻度が上がったためかディスク使用率が99%となり使用できなくなったことがありました。
その時は結局ディスク拡張することで無事使用できるようになったのでよかったのですが、いつかやるか思っていたディスク監視をいい加減実施するかと重い腰を上げることになりました。
残念ながらまだZabbixなどの監視サーバは用意していないため、我が家のCronマシンAWXくんに定期的に監視してもらうようにansible-playbookを作成して、日次の監視/通知をすることに。

# 要件
- 監視対象はよく使用するLinux系のサーバのみ
- 通知先は個人で使用しているMattermost
- 日次でサーバディスク使用率を確認し、使用率80%以上だったらMattermostに通知する


# ansible-playbook

```yml
- hosts: all
  gather_facts: true

  tasks:
    - name: check disk usage
      shell: df "{{ item }}" | tail -n +2 | awk '{print $5}' | sed 's/%//'
      with_items: "{{ mounts }}"
      register: result

    - name: debug
      debug:
        msg="{{ inventory_hostname }} '{{ item.item }}' disk usage is {{ item.stdout }}%"
      with_items: "{{ result.results }}"
      loop_control:
        label: "{{ item.cmd | default(item) }}"

    - name: Mattermost Notification
      mattermost:
        url: "<MattermostURL>"
        api_key: "<APIキー>"
        text: "{{ inventory_hostname }} '{{ item.item }}' disk usage is over 80%.( {{item.stdout}}% )"
        channel: "<通知先のチャンネル名>"
        username: "<Mattermostに投稿するのユーザ名>"
        icon_url: <表示したいユーザアイコンのURL>
      with_items: "{{ result.results }}"
      when: 80 <= item.stdout|int
```

# ざっくり説明

- ディスク使用率取得について
    - ディスク使用率の取得はdfコマンドの使用率（Use%の項目）を使用するためshellモジュール使用
    - dfの結果をawkとsedで使用率の数値のみを取得
    - `tail -n +2`はヘッダー情報を削除するため
    - `with_items`で複数のマウントポイントを監視対象とする
        - サーバー毎に変数`mounts`でマウントポイントを指定する（以下の感じ）
```yml
mounts:
  - "/"
  - "/run"
```
- debugについて
    - 自分がAWX上でぱっと見で分かるようにしたいため設定しているだけでなくてもいい
- Mattermost通知について
    - dfコマンドの結果で80%以上だったらMattermostモジュールを実行する
    - どのホストか分かるように`inventory_hostname`を忘れずに。そのため`gather_facts: true`必須（だと思ってる）
    - APIキーはMattermostの内向きウェブフックの`<MattermostURL>/hooks/`の後ろの文字列


# 終わりに

まだディスク拡張したばかり（しかもタイポで想定以上に拡張してしまった）のため、普段の運用で通知されてないです。AWSのディスク使用料がコーヒー数杯分上がってしまった程度の痛み。
まぁこういうのは忘れたころにやってくるのが常なので気長に待ちます。
ちなみに通知テストとして一時的に使用率が20%以上で通知するようにした時の例ですが、以下のような通知が来るようにしてます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294103/9c077e05-57f0-a044-1edd-4e84aa6b4519.png)
Teamsへのゲスト追加には数日必要

## Microsoft 365 Teamsでゲスト追加が必要になった理由

名市大では、Microsoft365のオンライン版が教育用に提供されていて、学生や教員等が使うことが出来ます。多くの日本の大学が同様と思われますが、名市大のMicrosoft365の契約プランは無料の「[Office 365 A1](https://www.microsoft.com/ja-jp/microsoft-365/academic/compare-office-365-education-plans?activetab=tab:primaryr1)」です。無料ではありますが、Word, Excel, PowerPointなどの定番ソフトに加えてTeams, Power Automate, Power Apps等のDXツールが幾つか提供されています。特に、大学の活動でも利用頻度が高いアプリとしてビジネスチャットツール「Microsoft Teams」があります。Teamsはチャットツールとしての機能、またオンラインビデオ会議機能があり、Microsoft365の中では頻繁に使うツールの１つです。今期のTeamsを使う大学講義にリスキリングの社会人学生が数名参加する事になり、種々の困難に直面しました。今回は情報共有として「Microsoft Teamsにゲストを追加する方法」を紹介します。

## ホスト側Teamsへのゲスト追加後、反映に約4日

Teamsのヘルプサイトには「[Teams でチームにゲストを追加する](https://support.microsoft.com/ja-jp/office/teams-%E3%81%A7%E3%83%81%E3%83%BC%E3%83%A0%E3%81%AB%E3%82%B2%E3%82%B9%E3%83%88%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B-fccb4fa6-f864-4508-bdde-256e7384a14f)」という解説記事があります。ここに「**ゲストには、Office 365 の職場または学校アカウント が必要です。** 」とその後にハイライト欄に「**注: チームにゲストを追加した後、アクセスできるようになるまでに数時間かかる場合があります。**」と注意書きがあります。この2点について、実際のところを記載します。

### 1. ゲスト側Microsoft365環境の準備が必要

ゲストはリスキリングの参加する企業人材なので、会社のmicrosoft365のユーザアカウントを持っています。または、会社がこれを機にMicrosoft365環境を使用開始したケースもありました。この場合、ゲスト会社側のMicrosoft365の利用開始手続きは、大学側のゲスト登録処理日の最低でも1週間前に完了する事をお勧めします。

### 2. ホスト側Teamsのチームでゲストのメールアドレスを追加

Teamsのゲストを登録したいチームの名前の右にある「・・・」をクリックします。すると図のようにポップアップメニュが出てくるので「メンバを追加」を選択します。両方とも、赤い丸で囲っている箇所です。
![qiita_22_1m.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77235/8bc97075-b99b-fe05-a5be-ef9614594149.png)

選択すると、下図の様に画面全体にポップアップでメールアドレスの登録画面が出てきます。ここにゲストが保有する会社側Microsoft365のメールアドレスを記入して下さい。右の追加ボタンを押せばゲストの追加操作は完了です。

![qiita_22_2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77235/e715846e-ae9c-e9b6-d151-e02f682d0544.png)


### 3. ホスト側Teamsのチームメンバにゲストが反映されるのを待つ[～4日]

ゲスト側会社Microsoft365は有料版でしょうが、ホスト側大学Microsoft365 A1は無料版です。無料のためにゲスト登録の反映は遅くなる可能性があります。とはいえ、サポートサイトのヘルプにはゲストの登録反映は数時間で完了と記載されています。実際はゲスト反映までどれ位の時間がかかるのでしょうか。数名分のゲストのメールアドレスを登録したのは、木曜日朝でした。しかし、木曜日午後には何も反映されずでした。また翌日の金曜日夜にTeamsを確認しても、何も変化を確認できませんでした(1.5日経過)。

月曜日朝にTeamsを確認したところ、数名のゲスト登録はTeamsの該当チームのメンバ欄に全て反映されていました。土日に確認をしていなかったので、確実な反映日数は不明です。しかしTeamsへのゲスト追加の反映には、ヘルプ記載の数時間ではなく、1.5日経過しても反映されないこと、今回の場合の様に数日待たないといけない事が判りました。

### 4. ゲスト側Microsoft365にログイン[職場Office, 大学Office]

ホスト側Teamsのチームメンバにゲストが反映されれば、正規のMicrosoft365[職場Office]と, ゲストのMicrosoft365[大学Office]の2種類をゲストが利用可能になります。ゲスト側のMicrosoft365 Web Browserで職場Officeにログインすると、右上で職場Officeとゲスト登録をした大学Officeの切り替えができるようになっています。大学Officeの方に切り替えをして、Teamsアプリを起動すればゲストとしての作業が可能になります。

## ゲスト追加の作業時間見積

まとめると、Teamsへのゲスト追加の作業処理は数時間では終わりません。ゲストからメールアドレスを教えてもらい、Teamsにメールアドレスを登録するだけと考えていましたが、両方のSTEPに時間がかかる事は、説明した通りです。余裕を持った作業時間は下記になるでしょう。

- ゲスト側Microsoft365環境の準備＋ゲストのメールアドレスを取得　： 1週間
- ホスト側Teamsへのゲスト追加 ：　1週間(4日反映待ち含む)

このように合計2週間がゲスト追加作業に必要と考えています。今回の記事が、同様の作業が必要となる方の参考になれば幸いです。
新卒として入社してからの3年間の気持ちの変化

# はじめに

初めまして！
AIQVE ONE Advent Calender 12日目を担当します@aku_2と申します。
自分は新卒として入社し、現在で入社2年9か月(2022年12月時点)です。
はじめはテスト実行をメインにやってきましたが、現在ではリーダー業務に携わらせていただいています。
技術的な知識はまだまだ学ばなければならないことが多いですが、今回は約3年間のうちにどういった業務をしきたか、その時どういう気持ちで臨んでいたかお話ししていこうと思います！


**目次**
1.テスター業務と新卒ならではの業務との両立
2.本社を離れお客様先で業務
3.初リーダー業務
4.最後に


# １．テスター業務と新卒ならではの業務との両立
入社してから本社を離れるまでは大きく2つの業務を行っていました。
本社を離れた件については後述します。

1つ目は**テスターとしてテスト実行**をおこなうこと。
2つ目は**社内のできごとなどを毎月まとめて記事にする社内報作成業務**です。

この2つのことをこなしていくのは正直大変でした…。

テスト実行はできあがっているテストケースを見れば手順や期待値が分かるのでどうやればいいのか迷うことは少なかったです。
しかし、社内報作成業務はある程度の方針は決まっておりますが、見た目や文章は自分たちで考えて作ってみてねという感じでした。
すごい量の記事を書くこともできるし、反対に今月はテスター業務が忙しいから記事作成の量減らしていこうかというさじ加減も自分たちで自由にやれたので、そんなに頑張らなくても毎月こなしていけるのではないかと思っていた時期もありました。

しかし、自分の中でとても印象的な出来事があり、それから気持ちに大きな変化がありました。

それは、「**前月より記事の内容が薄くなった**」と言われたことです。

当時はテスター業務との両立に慣れておらず、忙しいという理由でちょっと簡単に記事を作成しようとしてしまっていました。ただ、いざ言われると悔しさが込み上げてきましたし、記事は新卒だけでなく色々な方にも手伝っていただいていたのでその方たちにも申し訳なかったです…。
それと同時にちゃんと見てくれてる人がいるんだと実感することもできました。

この出来事があった次月からは、テスター業務がどんなに忙しくてもクオリティは落とさないと決め、**見てるくれる人達が楽しい、おもしろい、次月も読みたいと思ってもらえる記事を作りたい**という気持ちが強くなりました。

この業務の両立を通して、
**・毎月どう進めていけば両立できるか**
**・様々な社員の方との関わり**
**・相手がどう感じるかを考える**
を得ることが出来ました。

# 2.本社を離れお客様先で業務
入社してから1年経たないくらいの時、お客様先でテスター業務を行うことになりました。
本社との雰囲気やテスト実行の進め方も全く異なっており、お客様先でミスをすることがあればAIQVE ONEという会社の評価を下げてしまうんじゃないかというプレッシャーもありました。

ただ、色んなことに怖がりながら業務をしている姿は周りから見てどう思われるのかと客観的に考えてみた時、あまりいいイメージは湧かなかったです。
それは良くないよなと思い、自分が何に怖がっているのかをピックアップしていき1つ1つ改善していこうと考えました。
当時は大きく以下2点のことを怖がっていたと思います。
**・お客様先の人とコミュニケーションをとることができるか不安だ**
**・何かミスをしたら不安だ**
そしてこの2つの問題の改善策は、どちらも同じじゃないかという結論に至りました。

コミュニケーションをとることに不安を感じているなら、試しに自分から話しかけてみる。
何かミスしたらやばいんじゃないかと不安になるなら、他の人と会話できるようになって質問や相談をすることでミスが起こる前に対応したりアドバイスをもらう。
どちらも「**自分から積極的に話しかけていく**」ことで解決することができました。
そうしてコミュニケーションを密にとっていった方が業務も円滑に進みますしね！

これは本社にいた時に得た**様々な社員の方との関わり**、**相手がどう感じるかを考える**の経験が活きたのかなと思っています。

そしてお客様先で業務を続けていく中で、その後も数名のAIQVE ONE社員の方々が同じくお客様先にやってきました。自分はそのメンバーたちへ簡単に業務内容を教えたり、質問対応をしたり、上司からの連絡を共有しメンバーに対応していただくなど、AIQVE ONEメンバーの取りまとめを任されるようになりました。
喜ぶことではないかもしれないですが、自分としてはその役を任されたことがすごくうれしかったのを覚えています。

テスト実行とメンバーへの対応の2つ、**どう進めていけば両立できるか**の考え方を活かすことができたと感じました。


# 3.初リーダー業務
現在ではお客様先から戻り、案件のリーダー業務をしています。
初めてのリーダー業務で分からないことや大変だと感じることはすでに多々あります 笑

テスト計画書、スケジュール管理、テスト設計とテスト実行の進捗確認、その他諸々今まで経験しなかったことを一気に覚えていかなければならないですが、それでもいつかは覚えなければいけないことなので、それを今の段階で経験できるっていうのはチャンスだと感じてします。

そして、これまでに感じてきた下記のことは今の業務でも必要な考えだと思っています。
**・毎月どう進めていけば両立できるか**
**・様々な社員の方との関わり**
**・相手がどう感じるかを考える**
**・自分から積極的に話しかけていく**


# 4.最後に
ここまでご覧いただきありがとうございました。

今回は技術面ではなく気持ち、考え方の変化についてお話させていただきました。
積極的に動くことは大事ですが、それによって怒られてしまうこともあります… 笑

それでも、何もしないよりはとりあえずやってみようの精神でこれからも業務に励んでいきたいと思っております！
【Laravel】複数のSQL文が書かれたsqlファイルをシーダーで取り込む

## 概要

DBから吐き出したSQLをseederで取り込みたい時に使用した

sqlディレクトリを作ってそこにsqlファイルをぶちこみ、
```php
public function run()
{
    $path = 'database/sql/hogehoge.sql';
    DB::unprepared(file_get_contents($path));
}
```

### DB::unprepared

大量のSQLや複数のSQL文を実行できますが危ない点もあり
![スクリーンショット 2022-12-09 12.07.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282328/a55c1c8f-3acf-d123-9586-7dd386747297.png)
お客様へ適切に「HRBrain」を届けたい

こんにちは！
株式会社HRBrainでPdM（プロダクトマネージャー）の小西です。
この記事はHRBrainのAdvent Calender1の14日目の記事です。
この記事ではお客様へ適切に「HRBrain」を届けるための取り組みについて書いていきます！


https://qiita.com/advent-calendar/2022/hrbrain

## 自己紹介
- 2016年新卒で通信キャリアへ入社し、法人営業、営業企画などに従事
- 2021年4月にHRBrainのCSへ入社、半年ほど導入後のオンボードチームで顧客の導入後の支援を行い、テックタッチチームでPJを推進
- 2022年8月からPdMへ異動となり、タレントマネジメントや外部連携のプロダクトを担当

## 何について書くか
お客様がHRBrainを活用して業務やビジネスに役立てるには、機能を知り、活用方法を理解頂く必要があります。

そのためにSalesやCSメンバーが日々の打ち合わせ等で直接伝えることに加え、様々なツールを活用しています。
この記事では特に<b>「ツールを活用してプロダクトを届ける方法」</b>について書いていきます。

## 何を、どのように届けているか
私達が何のコンテンツをどのようなツールを使って届けているかをご紹介します。
### 【何を】
- ヘルプ記事
- 機能リリース記事
- 操作/活用サポート動画

### 【どのように】
- サポートサイトへの掲載
- メール配信
- **プロダクト画面上での訴求**

サポートサイトへやメール配信はよくある施策だと思うので、プロダクト画面上での訴求について、具体例をご紹介します。

## プロダクト画面上での訴求
先述したコンテンツを、KARTEというツールを使ってプロダクト上に配信しています。<br>

### 【認知拡大のための施策】
タイトル、画像とともにサポートサイトのヘルプ記事や、プロダクト内の該当機能へ遷移できるポップ施策を配信しています。

#### ■ポップアップ
![ポップアップ小.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295780/e3a5313e-86c3-9798-e6cd-25cc5f9b8f5a.gif)

### 【操作/活用のサポート施策】
チュートリアルや、動画による操作/活用方法をガイドする施策を配信しています。

#### ■チュートリアル
![チュートリアル小.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295780/b04effa1-38c0-d4b0-96af-f5072c310b5e.gif)
#### ■動画によるガイド
![ガイド小.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295780/85132fa7-337d-54ed-acf1-77f40c805ee7.gif)

## 気をつけていること
ご紹介した内容を実施するにあたり、以下の点に気をつけています。

#### ■UXを損ねないようにする
お客様がプロダクトを利用する中で、コンテンツの表示方法やタイミングによっては、操作を妨げてしまう可能性もゼロではありません。
コンテンツの内容や出し方、頻度、対象者、配信を停止する条件などは、PMMやCSと毎回念入りに確認しています。

#### ■コンテンツ閲覧から機能を利用するまでを想像する
当たり前かもしれませんが、「コンテンツを配信したら終わり」ではなく、実際にお客様が機能を利用する流れを想像して設計しています。
使い方の詳細のわかるヘルプページ、活用方法がわかる動画、ヘルプデスクやCSへの接続など、
機能やお客様の持つ権限によって出し分けを行う工夫をしています。

## まとめ
お客様へ適切に「HRBrain」を届けるため実施している、取り組みの一例をご紹介しました。
ご紹介した施策はPMM、CS、Sales、デザイナー達と試行錯誤しながら日々アップデートを繰り返しています。

まだまだ道半ばではありますが、今後は『ある機能を利用した企業は利用継続率が高い』等の定量的なデータ、
定性的なユーザーインタビューから得られたデータを掛け合わせ、コンテンツの内容やタイミングを最適化したいと考えています！

## 最後に
最後まで読んで頂きありがとうございました。
HRBrainでは一緒に働く仲間を募集しています。
ONE TEAMでのプロダクト作り、お客様に寄り添ったSalesやCS業務に興味のある方、エントリーをお待ちしております！

https://www.hrbrain.co.jp/recruit
Docker内のLaravelビルトインサーバにlocalhostでアクセスする

n番煎じですが忘れるのでメモ
```
php artisan serve --host 0.0.0.0 --port=80
```
``--host 0.0.0.0``でコンテナ外から接続できるようにする。
デフォルトのserveだと8000番ポートになるため、環境に応じて``--port=`XXXX`を設定する。

設定するポートはrun時に開放したもの、あるいはdocker-composeで設定しているもの
```
docker run -p 80:80
```
RDSのMySQLにターミナルからアクセスするコマンド

:::note info
この記事は[miriwoお一人様 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/miriwo)の9日目の記事です
:::

# 概要

- RDSのMySQLにターミナルからアクセスする際のコマンドいつも忘れるのでメモ的にまとめておく。

# 内容

- 下記コマンドを実行する。

    ```terminal
    mysql -h RDSのエンドポイント -u MySQLユーザー名 -p
    >パスワード入力
    ```
成長メモで競い合え -モブプロ開発を行っているチームでやっている取り組み-

# はじめに

本記事は[モブプロ開発を行っているチームでやっている取り組み Advent Calendar 2022](https://qiita.com/advent-calendar/2022/mob_torikumi_example)の23日目の記事です

今回は「成長メモ」について紹介していきます
前回は「技術メモ」のお話をしましたが、社内の技術力を全体的に上げる、モチベーションを高めるには同じようにメモを書くだけで効果がある成長メモの取り組みが良い効果をもたらします

成長メモが有効になるのは、社内のモチベーションが低い状態でエンジニアのアウトプットがほぼ行われていないときなどに導入すると改善につながるかと思います

# 前回

https://qiita.com/Sicut_study/items/668e9f5fa0763cd28230


# Chapter#22 今日は成長できた？

アール「今日の技術メモまとめておきました」
じん「いいですね。技術メモを書いたという事は難しいことに取り組んだんですかね」
アール「すこし時間使ってしまったのでまとめてます！！」
ミュート「俺なんか技術メモにまとめるようなことあんまないから書いてないなぁ」
ベープ「自分もなかなかかけていないです。そこまで新しいこともやることなくて」

じん「それは結構まずいですね。できたら毎日○○ができるようになったという思いができることがモチベーションにもつながると思いますし、周りが成長していることがわかるとさらに頑張ろうと思うはずですが、長い間そのような実感がわかないとモチベーションも停滞してしまうと思ってます」
ミュート「たしかにそれはそうね。社内をみてもそんな雰囲気が漂ってるよね」
ベープ「じんさんのことだから何か改善策があるんでしょ？」

じん「今日から成長メモを定時の5分前くらいに書く時間を用意して書いていこうと思います」
アール「成長メモ？技術メモ的な感じですか？」
じん「やることは技術メモと同じで簡単なメモを毎日かいていくだけです。ポイントは毎日何か成長したことを書かないといけないこと。つまり毎日何かしらに挑戦して成長する必要があります。大きなこと/小さなことなんでもいいです」
ベープ「その成長メモを社内で誰が書いたかタイムラインで流すように見れれば、だれがどんなことやってるか、どんな成長しているかわかりますね」
じん「さすがベープさん！それをまさにやろうと思っています」
ミュート「技術メモはベープさんが専用アプリを作ってくれましたが、こちらも作りますか？」
じん「アールさんにこのアプリを作ってもらおうと思います！！」
アール「私ですか？Reactの勉強にもなると思いますし頑張ってみます！」

# 成長メモとは

成長メモとは、その日成長したことをメモとして記録しておく取り組みになります
このメモを毎日記録できるという事は毎日何かしらできることが増えている(成長している)ということになり、モチベーションを高めるのに効果があります

逆に成長メモが書けないという事は何かしらの改善が必要になってくると思っています

この成長メモはメンバー間で時系列で一覧として表示できるようにしておきます
そうすることで、誰が何の技術をやっているか、どのような成長をしたかが見えるので、新しいことをやるモチベーションにもつながり、社内全体のモチベ―ションにつながるはずです

アールさんにアプリケーションを簡単に作成してもらって以下のようなアプリができました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/676039ed-59e5-137a-7dc9-f6b8b0ff4732.png)

タイトルと内容を書いて、書いた本人だけがマイページから消せるというとても単純なアプリですが、誰がどのような成長をしているのか毎日確認して負けないように仕事を頑張るようになりました

また、多くの内容を成長メモにかけた日はとてもうれしい気分になりました

# 次回

https://qiita.com/Sicut_study/items/618060a0fc90b6b138d1

# おわりに

今回はとても短くはなりますが単純な取り組みである「成長メモ」について紹介しました
色々ネットで見ていますが、あまりみたことのない独特な取り組みにはなりますが、導入が簡単なのにとても大きな効果を発揮できます。新人にやらせたり、組織が成長しようとする段階に導入したりタイミングは考える必要はありますが、簡単にできるのでぜひやってみてください
小粒だけどブラボーなプリザンターの新機能

本記事は [Pleasanter(プリザンター) Advent Calendar 2022](https://qiita.com/advent-calendar/2022/pleasanter)の9日目の記事です。
書いているのは、中の人です。

## はじめに
[【前回の記事】](https://qiita.com/pleasanter_oss/items/c03c12d461c96a18bb9d) では、今年実装された新機能のうちで特に目玉となる「プロセス」「状況による制御」についてご紹介しました。しかし、追加されたのはそれだけではなく、今年1年で実に多くの新機能が実装されています。「プロセス」「状況による制御」という大型の機能に比べれば機能としては若干小粒ながら、業務アプリにおいては非常に重要な、あるいはとても便利な機能が増えた1年でもあったなあと思います。
本記事では、そんな便利な新機能をいくつか紹介したいと思います。

## 自動採番
今まで無かったのが不思議なくらいご要望の多かった自動採番がついに実装されました。ご要望は多かったものの、スクリプトや拡張SQLを使って実装できるためなかなか標準機能としての実装には至らなかった自動採番が、ついにノーコードで実現できるようになりました。「コードを書けば実現できる」から「コードを書かなくても実現できる」ようになった代表的な機能のひとつと言えるかもしれません。
書式もかなり自由度が高く、様々な要件に柔軟に対応できる機能となっておりますので、是非ご活用ください。

テーブルの管理：エディタ：項目の詳細設定：自動採番 | Pleasanter
https://pleasanter.org/manual/auto-numbering


## インポート時のキー項目指定
こちらもご要望の多かった機能です。今までCSVを取り込む際には、レコードID、タイトルといった項目をキーとして取り込んでいたわけですが、この機能が実装されたお陰で任意の項目をキーとしてデータを取り込めるため、外部システムからの移行や同期における対応の幅が大きく広がりました。
注意事項としては、インデックスが張られていない項目をキーとして大量のデータを取り込む際には処理に時間を要するケースがありますのでその点はご注意ください。

テーブル機能：インポート時のキー項目指定 | Pleasanter
https://pleasanter.org/manual/table-record-import-key

## アンカー
こちらは、分類項目にHTMLのAタグ、つまりはリンクを設定する機能です。
内容項目や説明項目などではURLを記載すると自動的にリンクが設定されますが、あれが分類項目でもできるというようなイメージです。それだけ？と思うことなかれ。なんとアンカー機能は、書式を自由に設定することができるで、tel:やmailto:などが使えるようになるのです。つまり、CTI(Computer telephony integration)と連携させることによってプリザンターから電話を掛けたり、プリザンターで指定したアドレス宛にメーラを使ってメールを作成できたりできるわけです。
スマホのブラウザでお店などの情報を見る際に、電話番号をクリックするとそこから電話を掛けられるケースが多いですが、ああいうことがプリザンターからできるようになるわけですね。
プリザンターは、コールセンターなどでもご活用頂いていますのでこの機能は結構重宝されるのではと思っております。

テーブルの管理：エディタ：項目の詳細設定：アンカー | Pleasanter
https://pleasanter.org/manual/table-management-anchor

## レコードの否定条件の検索
こちらもご要望の多かった機能です。
よくご要望を頂いていたのは、特定の項目に何らか入力されているもののみ抽出したい、というもの。つまり「空欄以外」を抽出したい、ということです。説明Aに何も入力されていないレコード、というのは抽出できるのですが、それ以外という検索が出来ませんでしたが、この機能が実装されたことにより可能となりました。いわゆるNOT検索ですね。検索欄に「　」(全角・半角のスペースで未入力が検索可能)を入力し否定条件を指定することで検索できます。
例えば状況項目で「実施中」以外を抽出したい場合、フィルタで「実施中」以外(未実施、準備、レビュー、完了、保留)を選択してフィルタすれば可能ではありましたが、この機能を使うことで「実施中」の否定条件で検索できるようになるわけです。とっても簡単。とっても便利。

テーブル機能：レコードの否定条件の検索（フィルタ） | Pleasanter
https://pleasanter.org/manual/table-record-negative-search

## おわりに
如何でしたでしょうか。ちょっと小粒だけど便利な機能のご紹介でした。
自動採番のところでも少し触れましたが、ここで上げた4つの新機能のどれもが以前からコードを書くことで実現可能でしたし、これらの機能が実装されるまでは実際にコードを書いて実現していました。
標準機能では出来ないことを僅かなコードで実現できる拡張性、いわゆるローコードの世界。できないことをできるようにする、という手段を用意していることはとても良いことではありますが、コードを書いている以上はコードがわかる人でなければメンテナンスができない、ということにも繋がるわけです。それはつまり、現場で素早く簡単にカスタマイズできる、というポイントに少なからず相反する側面を持つことになります。
インプリムのかかげる「マネジメント快適化」というコンセプトに立ち返れば「コードを書けば実現できる」から「コードを書かなくても実現できる」いわゆるノーコードに歩み寄ることは必然なのかなとも思います。もちろん、それはこれまで注力してきたローコード開発ツールとしての機能強化があってこそのことではありますけれど。

そんなわけで便利なのに結構気づいていない人がいるかもしれない新機能のご紹介でした。是非ご活用ください。
それでは、今回の記事はここまで。最後までお読み頂きありがとうございます。それではまた次の記事でお会いしましょう。
WPF コードビハインドでDataGridのデータをクリップボードにコピー

もっとスマートな方法がありそうな気もしますが。
意外と苦労したので備忘録として残しておきます。
DataGrid.Rowsプロパティとか用意されていないんですかね。

BindingするItemはインデクサを設定する必要があります。

~~~C#
#region インデクサ
/// <summary>
/// インデクサでアクセスするプロパティ
/// </summary>
/// <param name="propertyName">プロパティ名</param>
/// <returns>Object</returns>
public object this[string propertyName]
{
    get
    {
       return typeof(hogeClass).GetProperty(propertyName).GetValue(this);
    }

    set
    {
       typeof(hogeClass).GetProperty(propertyName).SetValue(this, value);
    }
 }
#endregion
~~~ 

~~~C#
public static void DataGridCopyToClipboard(DataGrid dataGrid)
{
    if (dataGrid == null) return;
    StringBuilder sb = new();
    string s = "";
    List<String> bindingItems = new List<string>();
    // ヘッダタイトルを出力
    foreach (DataGridColumn column in dataGrid.Columns)
    {
        if (column is DataGridBoundColumn && column.Visibility == Visibility.Visible)
        {
            s += column.Header.ToString() + "\t";
            DataGridBoundColumn boundColumn = (DataGridBoundColumn)column;
            Binding binding = (Binding)boundColumn.Binding;
            var path = binding.Path.Path;
            bindingItems.Add(path);
        }
    }
    sb.AppendLine(s.Trim('\t'));
    s = "";
    foreach (var row in dataGrid.Items)
    {
        // hogeClassはクラスです
        if (row is hogeClass)
        {
            hogeClass hogehoge = (hogeClass)row;
            foreach (string itemName in bindingItems)
            {
                s += hogehoge[itemName]?.ToString() + "\t";
            }
            sb.AppendLine(s.Trim('\t'));
            s = "";
        }
    }
    try
    {
        Clipboard.Clear();
        Clipboard.SetDataObject(sb.ToString());
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "エラー", MessageBoxButton.OK, MessageBoxImage.Error);
    }
}
~~~
【ITカンファレンスを企画したくなったら】東京都内の施設貸出可能な大学まとめ

## はじめに

ふとITカンファレンスを開催したくなったときに使える、会場候補として使えるリストを作ってみました。
社会情勢によって貸し出し状況が変わるので、詳しくは各会場の詳細情報をご覧ください。

このページでは利用料金などが公開されている大学にしぼって掲載しています。
ここに掲出している以外にも貸出を行っている大学があります。

## 都内で施設貸出可能な大学


学校名 | 最寄駅 | メモ
------|-------|-------
[専修大学 神田キャンパス](https://www.senshu-u.ac.jp/about/campus/rental.html) | 九段下, 水道橋 | 
[日本大学法学部 神田三崎町キャンパス](https://www.law.nihon-u.ac.jp/neighborhood/rent.html) | 神保町, 水道橋 | 4月〜12月の日・祝
[明治大学 駿河台キャンパス](https://www.meiji.ac.jp/kanzai/k_ippan.html) | 御茶ノ水, 神保町 |4月～12月の日・祝
[明治大学 和泉キャンパス](https://www.meiji.ac.jp/kanzai/izumi.html) | 明大前 | ※建物単位で貸出
[明治大学 中野キャンパス](https://www.meiji.ac.jp/kanzai/nakano.html) | 中野 | 日、祝日、一部の平日＆土曜
[大正大学](https://www.t-map.net/service/facility/) | 西巣鴨 |
[立教大学 池袋キャンパス](https://www.st-paulsplaza.com/institution/outside/#a01) | 池袋 | 日・祝日、一部の平日＆土曜
[昭和女子大学](http://www.carillon-net.jp/shisetsu/) | 三軒茶屋 |
[武蔵大学 江古田キャンパス](https://web.634.co.jp/rental/) | 江古田, 新江古田, 新桜台 | 土・日・祝日
[二松学舎大学　九段キャンパス](https://www.otsuma.ac.jp/society/cooperation/application_facility/) | 九段下 |
[大妻女子大学 千代田キャンパス](https://www.otsuma.ac.jp/society/cooperation/application_facility/) | 市ヶ谷, 半蔵門 | ※女性比率が高いイベントのみ
[お茶の水女子大学](https://www.ocha.ac.jp/general/info/rental.html) | 茗荷谷, 護国寺 | 土、日、祝日
[東京富士大学](https://www.fuji.ac.jp/company/) | 高田馬場 |
[政策研究大学院大学](https://www.grips.ac.jp/jp/about/facilities/) | 六本木, 乃木坂 | <font color="#ff0000">**貸出停止中**</font>
[東京工芸大学 中野キャンパス](https://www.t-kougei.ac.jp/companies/extension/) | 中野坂上 | <font color="#ff0000">**貸出停止中**</font>

#### 各大学共通の注意点

* 大学行事が集中する期間（10〜12月）は予約が取りづらい
* 受験期間にあたる1〜3月は原則貸し出ししていない
* 夏期休暇中に全学休学期間があり、その期間は貸し出ししていない
* 学内男女比によって男女トイレ数が異なるため、大規模イベントの場合は注意が必要

## 番外編

施設名 | 最寄駅 | メモ
------|-------|-------
[日本科学未来館](https://www.miraikan.jst.go.jp/visit/facility-rental/) | テレコムセンター |
外観検査について（実装コード以外）

少し前に外観検査について触れる機会があったので調査したこと等をメモ。
コードの実装例のリンクは下にあります。
細かく調査している訳ではないので、誤っている内容もあると思いますがご容赦ください。

# 手法
* ディープラーニング
    * 教師なしの異常検知や、教師あり、反教師あり等色々ある
    * 製造業の大手等に納品している会社はアルゴリズム独自実装するの当たり前くらいのレベルが結構いる印象
* ルールベース
    * 最近はAIの話をよく聞くが、ルールベースもまだまだ費用対効果考えると重要
    * 下で紹介しているアダコデックさんのhlacによる特徴抽出や、ゼータブリッジさんのルールベースは非常に興味深かったです
# 撮影環境
* 検知したい疵等の不良部位が全パターン、全箇所、安定的に撮影できる環境が必要で、それには治具の製造が必要だったり、照明やカメラの知見も必要。製品が大きかったり、多品種だったりするとこの部分でつまずくことも多い。
* AI等のソフト面と照明や治具等のハード面で別会社協業していることがよく見られる（完全単独でやるのはハードルが高そう）
* 特に製造業等、不良品を絶対に出してはならない現場では、より精緻な環境が求められる分、費用も高くなりそう
* [アダコデックの井上さんのnoteの記事](https://note.com/shin_ue626/n/n1b13b4e05cf2)が何も知らない自分にとってかなり役に立ちました。本当に有難うございます。

# 導入までに検討すること
* 評価基準
    * 費用対効果が得られる精度はどれくらいか
    * 分類問題なので、例えば混同行列のそれぞれの値で必要な精度を考える
    * 製造業では特に偽陽性（実際は不良品だが予測は良品）に気を付ける必要あり
* 実際の運用イメージ
    * どのような運用にすれば費用対効果が得られるか
        * 例えば、これまで人がやっていた検査を、いきなり全てAIに置き換えるのは難しい
            * 推論時の閾値が一定以上の製品は人がチェックする等、なるべく詳細に実運用を描かないと、導入時の費用対効果がわからない
            * 詳細に検討した際に、製品が多品種であったりすると、モデルを多数作る必要が出たりして、ルールベースの方が良いとか、人が検査する方が良いということになったりする

# 外観検査を提供している会社例
以下内容は間違っていたら申し訳ありません。ご指摘頂ければすぐ修正します。

* [Preferred Networks](https://www.preferred.jp/ja/)
    * 皆様ご存じ日本トップレベルの頭脳が集まっている会社
    * 異常検知での外観検査を提供されており、詳しくはわかりませんが、汎用モデルを素材等により分けて独自のモデルを学習し、そのモデルを顧客に合わせてファインチューニングしているらしいです。
    * 汎用モデル作成には自社所有のスーパーコンピューターで何十万枚の画像で、何万時間も学習させているとのこと（さすがレベル違う・・・）
    * 150社に導入実績あり
    * 価格はAIのソフト部分で月額100万円台くらい？（価格は曖昧です。確かサブスクだったはず）
* [アダコデック](https://adacotech.co.jp/)
    * OpenCVの神様、大津先生考案のHLACを使用している会社
    * HLACで画像の特徴量を抽出し、その後はディープラーニングで分類？
    * 計算量がディープラーニングに比べ非常に少なく、普通のPCでさくさく動く
* [ゼータブリッジ](https://www.zeta-bridge.com/)
    * ルールベースで検査精度を向上させており、個人的にはゼータさんのやり方が人の判別プロセスに似ている気はしています
    * キーエンスでの経験が長い方が、AIに諦め、この方法なら可能性がある！と見込んで入社されたとのこと（[ABHB 尖りアルゴリズム読本](https://www.zeta-bridge.com/?blog=part4_abhb_dokuhon202209)は楽しく拝読させて頂いてます。）
    * ルールベースなので、事前の学習等は必要なし
    * 検査対象の大きさ、色、形等を全てコードで書いてルールに逸脱していると検知するみたいです。重なったベーコンの枚数も数えられるとのこと。
* [ブレインズテクノロジー](https://www.brains-tech.co.jp/impulse/)
    * Impulseというツールを提供されており、様々なアルゴリズムから自動で最適な組み合わせを選択できるらしい

# 実装例
* [EfficientNetによる異常検知](https://qiita.com/08tarutaru/items/431e519e57aa8d715a75)
* [hlacによる異常検知](https://qiita.com/08tarutaru/items/19a256e07adf8afb5013)
チェリー本の著者、伊藤淳一氏の示す効果的な読み方【自分用メモ】

#### 以下の動画の内容を自分なりにかいつまんだメモ
当ページ下部に動画の埋め込みあり
[著者自身が語る「プロを目指す人のためのRuby入門」の効果的な読み方 #チェリー本 - YouTube](https://www.youtube.com/watch?v=qqqbHXarPO8)

irbを使って学習する。

1~6章までが簡単
~10章までが難しい
~13は基本付録のような内容

基本例題までしっかりやって、あとは読み飛ばすくらいでいい
例外処理については、現場に出てから読み直すとかの感覚でいい

#### 目次
1章：ざっと目を通す程度
2章：基礎的な内容
3章：簡単な内容だがやらないと以降の章がわからなくなる可能性がある
1~6章は必ず読む（ここまでで手続き型言語の学習が完了となる）
7章：7.8まで読む（他は読み飛ばす）
8章：8.4まで読む（読み飛ばす。以降サブセクションも読んでいいが、実務的な内容になるので必要になったらでいい）
9章：9.5まで読む（基本ざっと読む）
10章：10.4までざっと読む（railsはprocが出てくる。スコープがrailsでよく使われているということを理解）
11章：ver3.0からの新しい機能。分岐表現の一つ。一応例題まではやる
12章：読むべき
13章：読むべき（でもまぁざーっと読む）
付録：Railsに入るまでの知識（silver獲得にはいらない）。

例に挙げられているプログラムを写経する必要はない。例題や気になったところだけでいい。

ザーッと読む程度であれば、1日1,2時間で1週間で読めればいいかなって感じらしい。
遅くとも2週間で読み終わるペースで,なるべく早く読む。

#### 参考にさせていただいた伊藤淳一氏の動画

<iframe width="500" height="312" src="https://www.youtube.com/embed/qqqbHXarPO8" title="著者自身が語る「プロを目指す人のためのRuby入門」の効果的な読み方 #チェリー本" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<iframe sandbox="allow-popups allow-scripts allow-modals allow-forms allow-same-origin" style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tell1124-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B09MPX7SMY&linkId=3c75d4302f2ad77353763b9f6b1e0aa4"></iframe>

[チェリー本のリンク](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80%EF%BC%BB%E6%94%B9%E8%A8%822%E7%89%88%EF%BC%BD-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design-plus-%E4%BC%8A%E8%97%A4-ebook/dp/B09MPX7SMY/ref=sr_1_1?crid=2XJFYRMHN3CYO&keywords=%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEruby%E5%85%A5%E9%96%80&qid=1670551587&sprefix=%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%2Caps%2C434&sr=8-1)
[伊藤さんのQiita](https://qiita.com/jnchito)
【教えて欲しい】tailwind css / applyは使いすぎたら問題ある？

うちの開発チーム内、
tailwindの運用方法で一騒動ありまして。
@apply使ってるけどちょっと心配になってる。

ことの始まりは、WEBシステムの大規模リファクタリングに対して、
フロント側は何使っていこか？ってことから始まった。

vue3は採用するとして、それならtailwind使いたいプログラマと
htmlの可読性が落ちるのが生理的に無理なワイとがバトルした。
（そのほかも色々）

結果、既存のclass命名規則を残しつつ、
そのclassに@applyを使用してtailwindをぶっ放していくことで、
ひとまず落ち着いた。

例えばこんな感じ
```:vue tamplate
<div class="card">
    <div class="card_name">カードの名前</div>
    <div class="card_main">カードのなかみ</div>
</div>

```

```:vue / style
.card { @apply bg-white shadow rounded;
    .card_name { @apply text-lg font-bold mb-5;}
    .card_main { @apply flex flex-col gap-3;}
}
```

しばらく運用してるんやけど、なかなかよい。

いちいち@applyは書かないといけないデメリットはあるけど、
記述スピードはめっちゃ上がったと思う。

プログラマは直接タグにtailwindcss打ち込んでくる、
それはワイがstyle内にapplyで移す。
みたいなカタチの運用方法。

ただ、styleの中に@appryがクソほど大量にある状態で、、、
これは大丈夫なんかな〜と少し心配になってる次第でございます。

知見がある方、それやばいよ！の場合は、
コメントでデメリット教えてもらえると嬉しいです。
HLACによる異常検知

# 背景
[EfficientNetで異常検知](https://qiita.com/08tarutaru/items/431e519e57aa8d715a75)を試した際に、HLACというものを知ったのでほんの少しだけ試してみました。
結果としては、全然ダメでしたが、ほぼアダコテックさんのブログのコードをただ使っただけで、何の工夫もしていないので、改善の余地は多々あると思います。

# HLACとは
アダコテックさんの記事がとてもわかり易いと思います。
https://note.com/ryotakawamura9/n/nb91e8e226dfa

こちらは実際の使い方。今回のコードはほぼこれをそのまま使わせて頂いています。
https://zenn.dev/kotaro_inoue/articles/f0cbbca962313b

# HLAC特徴量抽出の流れ
1. 使用データ
    * [MVTEC](https://www.mvtec.com/company/research/datasets/mvtec-ad/)の中から木・ネジ・ボトルで検証
        * ダウンロード時はgood,scratch,hole等にフォルダ分かれているが、good,badフォルダのみに修正
2. 前処理
    * グレースケール
3. HLAC特徴量抽出
    * 画像から指定したパッチ毎（20x20等）に特徴量を抽出
4. PCA
    * HLAC特徴量を主成分分析で一次元に変換し、良品と不良品を比較
    * PCA以外でもマハラノビス距離を求めたり、色々方法はありそう

# コード
コードは[こちら](https://github.com/sarah-muller/anomaly_detection/blob/master/anomaly_detection_hlac.ipynb)

# 結果
## 木（パッチサイズ20x20）
* 良品と不良品のPCAの分布、全然分類できてない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/fa963680-6812-d10e-4570-6b75f78ef024.png)

* 特徴量の差分が大きいところを色付け、これを見ても上手く分類できていないのがわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/d188714b-9e46-17e3-98e7-98ccc037ac7d.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/a70650c1-1ac3-8967-adf4-18beacb86011.png)

## 木（パッチサイズ8x8）
パッチサイズが小さすぎるのかと思って8x8を試したが全然良くならず。
ちゃんと一個ずつ分析しながらやらないとダメですね・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/ece1b0b8-3e4e-cd93-53a0-970ed6cc3e2e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/8bd7f250-1de5-9100-325f-f1bf8f05060d.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/c5d7c91a-f6d0-8742-c055-9cb126c0b6ca.png)

## ネジ
* これもダメ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/6a017f0c-b385-ea27-9153-65cb98527bdf.png)
* これは角度変わっているのでダメ。HLACは位置不変性はあるが、回転の影響は受けるはず。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/dd3d81ee-cfa0-0b89-af0e-3bef86272229.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/f369c14d-17ac-90da-3e43-3a710420f18d.png)

## ボトル
* これは位置変わってないと思ったが、これもダメ。もっと深堀しないとダメですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/b80af65a-28d0-2dd3-b5d6-2446ad5fe74d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/4196ae1b-2c6c-ac5a-f23c-6a1757ccfef7.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460901/d02de42d-cf1b-762d-46db-6492e3eeee1d.png)

# 所感
* ぱっと使った感じだとEfficientNetの方が精度高いが、実際にビジネスでやる場合はどちらの手法もこの何千倍も探求して、様々な工夫をして使われていると思うので、単純にどちらが良いという話ではない。
* HLACはシンプルな特徴抽出なので、論理立てて深堀が出来ればかなり使えるのではないか。（自分では出来ないが、アダコテックさんは製造業での難しそうな検査をやられているので腕があれば出来るはず・・・）
* 本来はこんなシンプルな使い方でなく、対象物や傷の種類等で色々な使われ方をするのだろうか。
    * https://zenn.dev/kei1978/articles/3191203ece3a74
2022年12月版　最適な中華基板屋をチョイスする。

#こんにちは、2022秋ロボアドベントカレンダー9日目　
こんにちは
やましょうです。

以前の記事から２年の経過して現在の中華基板屋さんの状況が激変したためちょっと
最新情報をいれつつ書いてみたいと思います。

#中華基板の発注先について
今日はIotの第１歩、基板のデータ作成後、いったいどこの基板屋にすればよいのか？を
書いてみたいと思います。

条件として**日本のメーカーはあえて記載しません。**
基本やましょう個人的なチョイスになります。
中華の基板メーカーとして代表的な４社の利点、欠点を*やましょう*がまとめた感じになります。
やましょうは実装はかならず国内で行うので基板作成だけで記載してます。
今回約91.4mmx91.4mmを10枚緑 **LEAD FREE時**のユニバーサル基板を入稿したときの価格も記載します。（面取なし）


**メーカーは下記の４社**

**1.Fusion PCB**
Seeed社の基板作成ブランドです。
長所：入稿時にファイルビュアーで確認できて便利です。発注時にホームページも日本語で分かりやすいですね。
発送に激安のJAPAN ダイレクトラインが選べます。
価格：約US $12.9 + 送料14.72 (JAPAN DIRECT LINE)


**2.Elecrow**
長所：ともかく安い＆PCBの色による価格差ない（特殊カラーは別）何枚余分にはいっているか？
期待させてくれるところが大好きです。
10枚発注で16枚きたとかよくある話です。
10cmx10cmの基板内で、同一基板を面取何枚っても追加料金を私は取られていないので、分割する基板はとてもおすすめ。
発注番号は印刷されません。
問題の対応能力はピカイチで、スタッフさんはとても良い人で信頼できます。
価格:約US $6.90 送料 6.76  	Economy Express NEP(8-11 Business Days) OCSでもUS10.74

**3.Pcb gogo/Pcb way**
運営会社は同じJDB  Technology Co., Ltd.です。
長所：日本語によるサポートがされます。サイズが大きいPCBでも結構安価です。
**そしてとても作成が速い**まさに時は金なりですね。
発注番号はお金次第、発注後の料金が上がるの場合が良くあります（穴が小さいとか？面取があるとか）
10oz基板も頼めます。すごい。(電流の食う基板はここ一択かも？）
価格:約US $20 ただし１日で発送。（送料は不明）価格はPCBGOGO.JP

**4.JLC PCB**
4社の中で最も微細なPCBが作れる会社です。
先月まではOCSの送料が激安で$1とか$2とかで送付してくれましたが、今日みたところ普通の料金になりましたね。
長所：PCB自体は安い。ですがカラーによって価格日程が変動します。
発注番号消去や、いろいろオプションで選べます。早期発送サービスはないですし。工場で出てから発送業者に渡るまで数日かかる場合がありました。
価格:約US $5.00 送料 13.53 OCS


ということで、2022現在時点の発注先チョイスフローを書いてみました。。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31412/298dc39d-760f-0a71-968d-c4661615d0a2.png)


以上　やましょうでした。
Amplify DataStore同期できない問題について

## この記事に書いていること

AWS Amplify DataStoreに対して、複数の認証方法によるアクセス制限をかけた際にハマったポイントと解決方法を記載しました。

## DataStore同期できない問題
タイトル通りですが、ローカル〜クラウド間でDataStoreの同期が取れない問題です。

スマホとwebで共通のdatastoreをもつアプリを開発した時に事件は起きました。スマホは`API_KEY`、webは`AMAZON_COGNITO_USER_POOLS`で認証を行い、それぞれアクセスレベルを分ける必要があったため、下記URLを参考にschema.graphqlの設定を追記したところ、ローカルの変更がクラウド上のDataStoreへ同期されなくなりました。

https://docs.amplify.aws/lib/datastore/setup-auth-rules/q/platform/js/


```react: schema.graphql
type Store @model @auth(rules: [
      // Cognito Userpoolで認証されたモデルのownerはフルアクセス可能
      { allow: owner }
      // APIkeyで認証された利用者は閲覧のみ可能
      { allow: public, operations: [read] }
    ]) {
        
    }
```

ローカルではDatastoreの更新がフツーに終わり、アプリがエラーを吐かないので、問題になかなか気づかないのと、何よりデバックの手掛かりがないのが辛いところですね。

## 何が問題だったのか
Amplify GraphQLでは以下の認証方法をサポートしていますが、デフォルト認証に関する設定があります。

* API_KEY
* AWS_IAM
* OPENID_CONNECT
* AMAZON_COGNITO_USER_POOLS
* AWS_LAMBDA

https://docs.amplify.aws/lib/graphqlapi/authz/q/platform/js/


今回のケースでは、デフォルト認証が`API_KEY`となってました。

問題の原因としてはwebアプリからGraphQL APIにアクセスする際に認証方法を指定しておらず、デフォルトであるAPI_KEYが使用されていたため、DataStoreへの書き込みが不可となってました。

## 解決方法
Amplify DataStoreの更新については`DataStore API`か`GraphQL API`のどちらでもいけますが、ドキュメントを読む限りでは`DataStore API`には該当するOptionがなく、`GraphQL API`でないと認証方法の指定ができないようです。

このため、元々`DataStore API`の実装箇所を`GraphQL API`で書き換え、`authMode:'AMAZON_COGNITO_USER_POOLS'`を指定することで、クラウドのDataStoreへの書き込みが可能となりました。

```react
/// Create
const todoDetails = {
    text: 'This is a pen'
}

await API.graphql({
    query: createToDo,
    variables: {
      input: todoDetails
    },
    /// API認証にAMAZON_COGNITO_USER_POOLSを使用
    authMode: 'AMAZON_COGNITO_USER_POOLS'
});

/// Update
const todoDetails = {
    id: 'some_id'
    text: 'This is a apple'
    /// Updata・Delete時は対象バージョンを指定する必要がある
    _version: 'target_version'
}

await API.graphql({
    query: updateToDo,
    variables: {
      input: todoDetails
    },
    authMode: 'AMAZON_COGNITO_USER_POOLS'
});
```

なお、ドキュメントにはあまり記載がないですが、Update/Deleteの際には`_version`で対象バージョンを指定しないと更新失敗するので気をつけましょう。（`Conflict resolver rejects mutation`というmessageのエラーが出る）
![error_log.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576521/e1253a13-b535-b231-2b95-4ba17c15719f.png)

以上です。
ILMTの代わりにFlexera Oneでライセンス管理② ~ソフトウェア・バンドル& Cloud Pak編~

IBMから提供されているFlexera Oneについて、前回はPVUライセンスを管理する方法を紹介しました。

https://qiita.com/M_Beach/items/46b1ac9e0739d8a34251

今回もILMTの代わりにFlexera Oneを使用してIBM特有のライセンスを管理する方法を紹介します。
タイトルの通りソフトウェア・バンドルの管理、Cloud Pakライセンスの管理についてみていきます。

## ソフトウェア・バンドルの管理
ソフトウェア・バンドルとはある製品のライセンスで追加の製品の使用権がついてくる、といったものです。
各製品のライセンスを個別に購入する代わりに、1つの製品のライセンスを購入するだけで、バンドルに含まれるすべてのアプリケーションが同じサーバーにインストールされるため、バンドルをきちんと管理することでライセンスコストを削減することができます。

しかし、保有するライセンスにどの製品の使用権が紐づいているのかをスプレッドシートで管理するのは非常に困難です。Flexera Oneでは簡単にバンドルを管理できます。

### 製品使用権ライブラリによるバンドルの管理

実際のダッシュボードでどのように管理できるのかみていきます。今回は例としてIBM WebSphere Application Server(以下、WAS)とそれに含まれるDb2を確認してみます。

1. Flexera Oneのダッシュボードにアクセスする

2. 左のメニューから「すべてのライセンス」を選択し、「websphere」でフィルタリングします。


![スクリーンショット 2022-12-08 10.08.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627874/e4569692-4af7-48d2-4a14-325b4bebc557.png)


3. 表示されたWASのライセンスをクリックし、アプリケーションタブを選択します。

![スクリーンショット 2022-12-08 10.11.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627874/a8c1a214-b93b-5757-a6e2-219134e73777.png)


ここでは、WASライセンスによって権利を与えられているアプリケーションを表示しています。 
WASライセンスはDb2を含む他の多くの製品を含む製品バンドルであるため、他の多くのアプリケーションがここにリストされていることが分かります。

このリストは購入情報をFlexera Oneに取り込むことで自動的に生成されるため、手動で管理せずとも簡単にバンドルを把握できます。


4. 最後に消費量タブから仮想サーバー「VirtualMachine004917」を選択し、アプリケーションを確認してみます。

![スクリーンショット 2022-12-08 11.11.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627874/28082081-cab4-3efc-c049-4037f7b41753.png)
![スクリーンショット 2022-12-08 11.12.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627874/d6be9148-10c8-afd4-51ba-0fa9415f2faa.png)

この仮想サーバーにはWASとDb2がインストールされていますが、2つの製品はバンドルされているため、インストールされたDb2はWASのライセンスを消費していることが分かります。

このようにダッシュボードからインストールされた製品がどのライセンスを消費しているのかも確認できます。
こうした機能を活用して適切なライセンス管理によるコスト削減にも取り組めます、


## Cloud Pak製品の管理

IBMの提供するCloud PakシリーズはこれまでのPVUライセンスに代わる、プロセッサーコアの数に基づいてライセンスが決まる新しいライセンスの考え方を採用しています。

このライセンス体系では、製品は VPC(仮想プロセッサーコア) の比率に基づいてライセンスされます。

Flexera Oneでは製品固有ののVPC比率やコア数から計算したVPC数を表示できます。

Flexera Oneのダッシュボードではこのように表示されます。右端「Consumed」の列に表示されている値が自動的に算出されたVPC消費数です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627874/af78a49d-f7fc-96cb-e5e7-e0dc941235a8.png)


この画面は先ほどのWASのようにCloud Pakライセンスの詳細画面から確認できます。
このようにVPC消費数も自動で計算し表示でき、手動で計算する必要がなくなります。


## 最後に

Flexera OneではIBM特有のライセンス体系もサポートしていますので、異なるライセンス体系の製品もまとめて管理することができます。
paiza.ioでelixir その133

# 概要
paiza.ioでelixirやってみた。
練習問題やってみた。

# 練習問題
活性化関数reluをグラフ化せよ。

# サンプルコード

```


IO.puts """
<!doctype html>
<html>
<head>
<style type="text/css">
* {
  margin: 0;
  padding: 0;
  border: 0;
}
body {
  background: #fdd;
  font: 30px sans-serif;
}
</style>
</head>
<body>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<div id='chart'></div>
<textarea id="koko0"> 
"""
for i <- 0..100 do 
    v = i - 50
    if v < 0 do
         IO.puts(0)
    else     
         IO.puts(v)
    end
    IO.puts ","
end
IO.puts """
</textarea>
<script type="text/javascript">
google.load("visualization", "1", {
    packages: ["corechart"]
});
var x0 = document.getElementById('koko0').value;
var x = x0.split(",");
var res = [['x', 'relu'],];
for (var i = 0; i < 100; i++)
{
    res.push([i, x[i] / 1]);
}
google.setOnLoadCallback(function() {
    var data = google.visualization.arrayToDataTable(res);    
    var options = {
        title: '活性化関数',
        hAxis: {
            title: 'x'
        },
        vAxis: {
            title: 'y'
        }
    };    
    var chart = new google.visualization.LineChart(document.getElementById('chart'));
    chart.draw(data, options);
});
</script>
</body>
</html>
"""

```

# 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/64096560-def8-2c70-903e-4166edd01179.png)



# 成果物

https://paiza.io/projects/jJITgjVqSt-abpONnyB5_g?language=elixir


以上。
logcatを使ってバイナリデータを取り出すメモ

すごく特殊な用途なので、普通は使わないと思うので本当にただのメモです。
普通はデバッグでファイルシステム使ってadb pullしたりとかいくらでもやり方はあると思います。
リリースだけ再現したりする現象があったりして、デバッグでは再現しない現象があってバイナリを確認したい場面があります。(ほぼない。)

# logcatにデータを出力する

logcatに画像やら、protocol bufferのバイナリなどを流してそれを復元したいと思います。普通にtoString()などをして流すと文字化けしてしまい復元が難しい文字列になってしまうのでそれをなんとかするコードになります。

例えばRetrofit + OkHttpでpostしているデータをログに出すには以下のようにします。 (デバッグ用なので本番で使わないこと)

```kotlin
.addNetworkInterceptor(Interceptor { chain ->
  val request = chain.request()

  val sink = Buffer()
  request.body?.writeTo(sink)
  val byteArray = sink.readByteArray()
  Timber.w(Base64.encodeToString(byteArray, Base64.DEFAULT))
  chain.proceed(request)
})
```

ポイントは以下です

* Base64でエンコードしてしており、Base64は以下の通りのフォーマットなのでlogcatでも流す事ができます。

> Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である

https://ja.wikipedia.org/wiki/Base64

* Tibmerを使う。

Timberには長い文字列を分割してくれる機能があるので、それによってlogcatから大きいバイナリでも出力可能になります。

# データを復元する
そして、logcatにbase64の文字列がでるので、これをvimとかを使ってつなげてあげて(長いとTimberが分割して出力するため)、以下のように出力してあげればデータを取り出すことができます。

```
base64 -d logcatのbase64部分の内容を保存したbase64ファイル > output.binary
```
ガウス分布のエントロピー導出について

# <font color = 'forestgreen'>1.はじめに</font>
前稿でさらっと流したガウス分布のエントロピーの導出について、初見でトレースなどの理解があまりなく分からなかった多次元ガウス分布に焦点を当て、確認も兼ねて記述していきます。  
文章よりも数式が多めなのはご了承ください。
また本稿は、参考資料に則り期待値を$\mathbb{E}(・)$ではなく、<・>と表記します。
# <font color = 'forestgreen'>2.正方行列のトレース(trace)の性質</font>
* トレースとは、正方行列の対角成分を足し合わせる操作のことで以下のように定義されます。
$$
Tr(\boldsymbol{A}) = \sum_{n = 1}^{N}A_{n, n} \\\\
[\boldsymbol{A}:N\times Nの正方行列, A_{n,n}:正方行列\boldsymbol{A}のn行n列目の対角成分]
$$
この定義式から様々な性質を持つトレースですが、その中から以下の性質を今回は用います。
$$
Tr(x) = x \qquadー①\\\\
\\\\
Tr(\boldsymbol{AB}) = Tr(\boldsymbol{BA})\quadー②\\\\
[x:scalar, \lbrace A,B\rbrace:N\times Nの正方行列]
$$
# <font color = 'forestgreen'>3.多次元ガウス分布のエントロピー</font>
多次元ガウス分布のエントロピーは以下のようになります。  
$$
H[N(\boldsymbol{x}｜\mu,&#x03A3;)] = \frac{1}{2} \big\lbrace ln|&#x03A3;|+D(ln2\pi+1) \\\\ [\mu:平均パラメータ, &#x03A3;:共分散行列パラメータ, D:次元数]
$$
この計算過程について考えていきます。
$$
\begin{align}
H[N(\boldsymbol{x}｜\mu,&#x03A3;)] &= -&lt;lnN(\boldsymbol{x}|\mu, T&#x03A3;)> \\\\  
&=- &lt;ln\big[\frac{1}{\sqrt{(2\pi)^D|&#x03A3;|}}exp\big\lbrace-\frac{1}{2}(\boldsymbol{x}-\mu)^{T}&#x03A3;^{-1}(\boldsymbol{x}-\mu)\big\rbrace\big]> \\\\
&=- &lt;-\frac{1}{2}\big\lbrace(\boldsymbol{x}-\mu)^{T}&#x03A3;^{-1}(\boldsymbol{x}-\mu)+Dln2\pi+ln|&#x03A3;|\big\rbrace>\\\\
&\boldsymbol{x}についての期待値を考えているため \\\\
&=\frac{1}{2}\big\lbrace&lt;(\boldsymbol{x}-\mu)^{T}&#x03A3;^{-1}(\boldsymbol{x}-\mu)>+Dln2\pi+ln|&#x03A3;|\big\rbrace\\\\
&①の性質より\\\\
&= \frac{1}{2}\big\lbrace Tr(&lt;(\boldsymbol{x}-\mu)^{T}&#x03A3;^{-1}(\boldsymbol{x}-\mu)>)+Dln2\pi+ln|&#x03A3;|\big\rbrace\\\\
&②の性質より\\\\
&=\frac{1}{2}\big\lbrace Tr(&lt;(\boldsymbol{x}-\mu)(\boldsymbol{x}-\mu)^{T}&#x03A3;^{-1}>)+Dln2\pi+ln|&#x03A3;|\big\rbrace\\\\
&Tr内を展開して\\\\
&= \frac{1}{2}\big\lbrace Tr((&lt;\boldsymbol{x}\boldsymbol{x}^T>-\mu &lt;\boldsymbol{x}>-&lt; \boldsymbol{x}>\mu+ \mu\mu^{T})&#x03A3;^{-1}>)+Dln2\pi+ln|&#x03A3;|\big\rbrace\\\\
&&lt; \boldsymbol{x}>= \mu,&lt; \boldsymbol{xx^T}>= \mu\mu^{T}+&#x03A3;より\\\\
&= \frac{1}{2}\big\lbrace Tr(&#x03A3;&#x03A3;^{-1})+Dln2\pi+ln|&#x03A3;|\big\rbrace\\\\
&&#x03A3;は正方行列より逆行列との積は、D次元の単位行列I_Dで表すことができるため\\\\
&= \frac{1}{2}\big\lbrace Tr(I_D)+Dln2\pi+ln|&#x03A3;|\big\rbrace\\\\
&単位行列の対角和は次元数と等しいため\\\\
&= \frac{1}{2}\big\lbrace D+Dln2\pi+ln|&#x03A3;|\big\rbrace\\\\
&よってDについてまとめることで、今回求めたかった以下の式がでてくる。\\\\
&= \frac{1}{2} \big\lbrace ln|&#x03A3;|+D(ln2\pi+1)\big\rbrace
\end{align}
$$
# <font color = 'forestgreen'>4.まとめ</font>
今回は多次元ガウス分布の乱雑さを表すエントロピーの導出過程について述べました。
トレースの性質や、線形代数をある程度理解しているうえで式展開をしているサイトが多々見えたので詳細部分についてまとめました。
参考になれば幸いです。
## <font color = 'forestgreen'>5. 参考資料</font>
◆ [**機械学習スタートアップシリーズ ベイズ推論による機械学習入門**](https://bookclub.kodansha.co.jp/product?item=0000148222)
ethereumのreact hooks wagmiを使ってみた

# はじめに
これはno plan inc.の [Advent Calendar](https://qiita.com/advent-calendar/2022/noplan_inc) 2022の9日目の記事です。

先日参加した[東京web3ハッカソン](https://tokyo.akindo.io/)でwagmiというEVM互換のコントラクトとのやりとりやmetamask等のウォレットとの接続ができるreact hooksのコレクションを使用したので使い方や感想について書いていきたいと思います。
# 目次
<!-- タイトルとアンカー名を編集 -->
1. [ウォレット接続](#Chapter1)
1. [コントラクトRead](#Chapter2)
1. [コントラクトWrite](#Chapter3)
1. [感想](#Chapter4)
1. [参考文献](#reference)

<a id="#Chapter1"></a>
# ウォレット接続
wagimiを使って一番感動的だったのはウォレット接続です。
本当に一瞬で出来ます。

```typescript:sample.tsx
import { useAccount, useConnect, useDisconnect } from 'wagmi'
import { InjectedConnector } from 'wagmi/connectors/injected'
 
function Profile() {
  const { address, isConnected } = useAccount()
  const { connect } = useConnect({
    connector: new InjectedConnector(),
  })
  const { disconnect } = useDisconnect()
 
  if (isConnected)
    return (
      <div>
        Connected to {address}
        <button onClick={() => disconnect()}>Disconnect</button>
      </div>
    )
  return <button onClick={() => connect()}>Connect Wallet</button>
}
```

これだけです。
Connect Walletボタンを押すとウォレットに接続されDisconnectボタンを押すと接続が解除されます。


<a id="#Chapter2"></a>
# コントラクトRead
コントラクトからの情報の取得は以下のように行うことができます。

```typescript:sample.ts
import { useContractRead } from 'wagmi'
import { wagmigotchiABI } from "wagmigotchiABI";
 
function App() {
  const contractRead = useContractRead({
    address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
    abi: wagmigotchiABI,
    functionName: 'love',
    args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],
  })
}
```

typescriptでwagmiを使用する場合abiの読み込み方に少し癖があり正しい型を推測するためにはabiファイルの拡張子を.jsonではなく.tsにした上で以下のようにする必要があります。

```typescript:wagmigotchiABI.ts
export const abi = [
//ここにabiのjson
] as const
```

<a id="#Chapter3"></a>
# コントラクトWrite
トランザクションの実行は以下のように行います。

```typescript:sample.ts
import { useContractWrite, usePrepareContractWrite } from 'wagmi'
import { wagmigotchiABI } from "wagmigotchiABI";
 
function App() {
  const { config } = usePrepareContractWrite({
    address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
    abi: wagmigotchiABI,
    functionName: 'feed',
    args: [],
  })
  const { data, isLoading, isSuccess, write } = useContractWrite(config)
  write()
}
```

usePrepareContractWrite()でgas見積もりを行っており実際にトランザクションを実行するのはwrite()で行っています。
私はここで結構ハマったのですがusePrepareContractWrite()の時点で一旦gasを見積もっているのでこの時点で引数等が全て揃って実行可能な状態でないとエラーになってしまいます。

<a id="#Chapter4"></a>
# 感想
今回初めてwagmiを使いましたがweb3.jsやethersと比べてウォレット接続までは非常に簡単にできてよかったと感じました。
トランザクションの実行ではユーザーに引数となる値を入力させるなどページを開いた時点では引数の値が出揃っていない場合エラーになってしまいかなり面倒に感じました。
usePrepareContractWrite()の使用は強制されている訳ではないので使わずにトランザクションを実行することも可能ですが使用を強く推奨されており使用しない場合ux上の問題があるようです。[^1]

<a id="#reference"></a>
# 参考文献
- [https://wagmi.sh/](https://wagmi.sh/)



[^1]: [UX Pitfalls without Prepare Hooks](https://wagmi.sh/react/prepare-hooks#ux-pitfalls-without-prepare-hooks)
PyPi ServerからのPoetry InstallがRetrieved digest for linkエラーとなるようになったので原因調査


# 事象

以下のイメージを使って開発したPythonパッケージをホスティングしています。

https://hub.docker.com/r/pypiserver/pypiserver


ある日、Poetryのインストールが以下のようなエラーとなる事象が発生しました。


```sh
  Retrieved digest for link my_package_name-1.0.0-py3-none-any.whl(md5:xxxxxxx) not in poetry.lock metadata ['sha256:xxxxx', 'sha256:xxxxx']

  at /usr/local/lib/python3.8/site-packages/poetry/installation/chooser.py:144 in _get_links
      140│ 
      141│             selected_links.append(link)
      142│ 
      143│         if links and not selected_links:
    → 144│             raise RuntimeError(
      145│                 f"Retrieved digest for link {link.filename}({h}) not in poetry.lock"
      146│                 f" metadata {hashes}"
      147│             )
      148│ 
```


# 調査
メッセージを読むと分かるのですが、 `md5:xxxxxxx` のハッシュと、 `sha256:xxxxx` のハッシュを比べているので、それはエラーになるなというところです。

このハッシュですが、PyPiサーバの以下のようなURLから取得されています。これが間違っていそうです。

> https://pypiserver.local/packages/my-package-name-1.0.0.tar.gz#md5=xxxxx


# 対応

コンテナを起動するコマンドに `--hash-algo sha256` とオプションを付けることで、

```sh
docker run pypiserver/pypiserver:v1.5.1 --hash-algo sha256
```

sha256のURLが生成されるようになります。


> https://pypiserver.local/packages/my-package-name-1.0.0.tar.gz#sha256=yyy

後はPoetry側のpoetry.lockを削除してpoetry installするか、poetry lockコマンドで解消します。


# もう少し細かい原因
この事象ですが、poetryの1.1系では発生せずに、1.2系で発生する事象です。
ざっとコードとコミットを読んだ感じだと以下のコミットで動作が変わったと思っています。

https://github.com/python-poetry/poetry/commit/3b340b23256a875afd0bbd574c0b44d62480ac3b

同じ事象に当たった人の参考になれば幸いです。