OmniAICreator/Qiita-1.07M huggingface dataset:
SREをよく知るために輪読会をはじめました

こんにちは。もともとはフロントエンドをやってましたが、最近はSREに足を踏み入れた[とよしー](https://twitter.com/_toyo_sea_)です。

以前、[ポストモーテムはじめてみた](https://qiita.com/toyosea/items/e4a9910fc4fa93f60fd7)という記事を書きましたが、
恥ずかしながらまだまだSREがどういうマインドで、どういうことをやっていくのか不明瞭な状態です。

そんな状況なので少しでもSREとはなんなのかを明らかにするために、
SRE関連の文献をチームで輪読会をしようと企画しました。

## なぜ輪読会をやるのか？
端的に背景を伝えると、SREの知識がほとんどない状態で、チームでSREの役割を担うことになったからです。
「SRE」といっても、メンバーそれぞれが思い描いているイメージが違うとやるべきことがまとまらない可能性があります。
また、SREのプラクティスだけを真似ても良い動きができるわけではなさそうと思い、原則をチーム全体でインプットした方が今後やるべきことが見えやすくなるのでは...と仮説を立てたのもあります。

## 何を読むのか？
[SREエンタープライズロードマップ - Google - Site Reliability Engineering](https://sre.google/intl/ja_jp/resources/practices-and-processes/enterprise-roadmap-to-sre/)
を読んでいます。
全部で64ページと軽量な文献なので、なるべく短い時間でSREについての学習と共通認識をもたせられそうと考え、こちらを選びました。

## やり方
1時間で1章ごとのペースで読み進めています。
1ブロックごとにメンバーを交代して読んでいくようにしています。
また、1ブロックごとに
- このブロックの内容の要約
- 感想・気になる点があるか

をメンバーに問いかけつつ、Miroでボードに付箋を貼っていきました。

![名称未設定のデザイン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3057608/6b07159f-2ffe-a4d0-d1b7-62178852cf26.png)
※ 意図的にぼかしをいれています

## やってみてどうだったか？
(1)
読み進めつつ1ブロックごとにメンバー同士で対話を行ったので、
SREとは何なのかがパズルのピースのように理解が進みました。
また、自分達の現状の組織とあてはめて、SREらしい動きができている or アンチパターンに陥っていることも客観視できたことは良い点でした。
(2)
横文字が多いかつ日本語訳の文章なので「なるほどわからん」となる部分もあったが、
原文と読み比べると伝えたいことがわかるシーンがありました。
理解するのに時間がかかったときは、原文と読み比べることも選択肢にいれよう。
(3)
やってみてからひとつ懸念し始めたことは、SREについて知ることで「自分はSREでやりたいことはない」というメンバーが出てくるかもしれないことです。
有志で集まったチームではないので、そうなった場合チームのあり方を考える必要がありそうです。
ここらへんはTeam Topologiesなども参考にしつつ、組織にあったSREのあり方を探求していく柔軟な姿勢で臨みたいと思います。
パラメーターってなに？

パラメーターは変数のこと
追記）プログラミングでは、関数やメソッドなどが呼び出し元から渡された値を受け取るために宣言された引数のことをパラメーターという

・身近な例

数学の、y=2x とか　y=7xとかのxがパラメーター（変数）にあたる

・実際にプログラムの中でパラメーターが使われている例

スマホとかのアラーム機能
X時yz分にアラームを鳴らすというプログラムがされている
このxyzがパラメーターにあたる

↓具体例

例えば8時30分にアラームを設定した場合
z=8
y=3
z=0
になる

・C言語を用いた例

```c
float multi2digits(float x, float y){float multiplication = x * y;return multiplication;}
```

x,yがパラメーター
Docker環境でログデバッグするらなば、docker logsを使ったほうが楽

# 結論
ログデバッグするならば以下のコマンドでデバッグするほうが楽
```bash
docker logs -f [コンテナ名]
```

# よくやりがちなこと
コンテナにログインして以下のコマンドでログ監視します。
```bash
tail -f log/development.log
```

この場合、development.logに出力するために以下のようにログ出力を仕込みがちです。
```ruby
Rails.logger.debug("ああああ")
```

# dockerのほうがなぜいいのか
`Rails.logger.debug`と書くのがとにかくめんどくさい。
標準出力に出力するだけなら `pp` を使えば十分です。
docker logsは標準出力を表示してくれるので、ホスト側でdocker logsをすると、以下のようにログを仕込めばログデバッグできます。

```ruby
pp "ああああ"
```



考えれば当たり前なんですけど、はっと思いつきました。

# 補足
VSCodeだったら右クリックでサクッとdocker logsできます。
[![Image from Gyazo](https://i.gyazo.com/a32c6e4a4416475f5a9e3a27501798fd.png)](https://gyazo.com/a32c6e4a4416475f5a9e3a27501798fd)
pip inastallしたモジュールが読み込めない


keybordモジュールは既にインストールされる場合
下記のように表示される
ターミナル上で実行
````
PS C:\Users\1> pip install keyboard
Requirement already satisfied: keyboard in c:\users\1\appdata\local\programs\python\python310\lib\site-packages
````

モジュール読み込み先を確認
python上で実行
````python
 import sys, pprint
pprint.pprint(sys.path)
['',
 'C:\\Python311\\python311.zip',
 'C:\\Users\\1\\AppData\\Local\\Programs\\Python\\Python311\\Lib',
 'C:\\Users\\1\\AppData\\Local\\Programs\\Python\\Python311\\DLLs',
 'C:\\Python311\\DLLs',
 'C:\\Python311\\Lib',
 'C:\\Python311']
````

c:\users\1\appdata\local\programs\python\python310\lib\site-packagesを読み込み先に追加する
python上で実行
````python
import sys

# 追加するディレクトリを指定
new_path = r'C:\Users\1\AppData\Local\Programs\Python\Python310\lib\site-packages'
# sys.pathに新しいパスを追加
sys.path.append(new_path)
````

追加成功したか確認
python上で実行
````python
>>> import sys, pprint
>>> pprint.pprint(sys.path)
['',
 'C:\\Python311\\python311.zip',
 'C:\\Users\\1\\AppData\\Local\\Programs\\Python\\Python311\\Lib',
 'C:\\Users\\1\\AppData\\Local\\Programs\\Python\\Python311\\DLLs',
 'C:\\Python311\\DLLs',
 'C:\\Python311\\Lib',
 'C:\\Python311',
 'C:\\Users\\1\\AppData\\Local\\Programs\\Python\\Python310\\lib\site-packages']
````

追加されました
Windowsのbat（コマンドプロンプト）でファイル属性（読み取り専用や隠しファイル）を一括確認or変更

# 概要

ファイルプロパティを開いて、下記をいちいち変更するのが面倒。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/c119acb8-5223-ee3c-1cf2-894a1526a0af.png)

特に読み取り専用にしているファイルがやっかい。
読み取り専用にしているファイル **1つ1つに対して** 下記をやらないといけない。

1. プロパティひらいて、読み取り専用をいったん解除。
1. ファイル内容変更して保存。
1. プロパティひらいて、読み取り専用を再度設定。

ファイル属性に対する一括処理のbatがあると楽。

# やり方

## attrib

コマンドプロンプトには ```attrib``` というコマンドがある。
これを使ってファイル属性の確認または設定ができる。

## ファイル属性確認

```bat:サンプル
rem batと同じフォルダーに置いてある全xlsxファイル属性確認。
attrib *.xlsx
pause
```

実行結果は下記。

『R』が付いているなら読み取り専用。
『H』が付いているなら隠しファイル。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/2d8762c9-51fa-aeb3-7a77-fe443672e252.png)
『HR』なら　隠しファイル　**かつ**　読み取り専用　ということ。

## ファイル属性設定

```bat:サンプル
rem batと同じフォルダーに置いてある全xlsxを読み取り専用かつ隠しファイルに。
attrib +R +H *.xlsx
```

### 属性の順番

```H``` と ```R``` の順番は気にしなくてOK。
サンプルについては ```attrib +H +R *.xlsx``` にしても、例外にならないし同じ動作になる。

### 設定しない属性は省略可

```H``` と ```R``` は両方書く必要は無い。
例えば読取属性だけを設定したい場合は ```attrib +R *.xlsx``` でよい。

### 設定済の属性

すでに読み取り専用設定のxlsxが混在する状態で ```attrib +R *.xlsx``` をした場合…

* 読み取り専用に **なっていない** xlsxは読み取り専用になる。
* **すでに読み取り専用になっている** xlsxに対しては、例外などにはならず属性はそのまま。

### 設定を外す時は『-』

```bat:サンプル
rem batと同じフォルダーに置いてある全xlsxの読み取り専用を解除。
attrib -R *.xlsx
```

# 参考サイトさん

https://www.k-tanaka.net/cmd/attrib.php

# バージョン

Windows 10 Pro 22H2 19045.2788
Jekyllをつかってデータからページを作る

JSONのデータを加工して、HTMLに整形してブラウザで閲覧したいというユースケースでJekyllを使ってみた。

JekyllはGitHub Pagesで使われている静的サイト生成ツールであり、プラグインの機構もある。また `_data/` にjsonファイルを置くと、site.data としてテンプレートからアクセスできる。

これはプラグインでも同様で、例えば `_data/samples.json` がある場合はrubyのコード内でも `site.data['samples']` としてアクセスできる。

また[Generator](http://jekyllrb-ja.github.io/docs/plugins/generators/)の機能を利用するとSiteオブジェクトのpagesにPageのインスタンスを追加することでページを追加することができる。これを利用して `_data/samples.json` からページを生成したという内容です。

_data/samples.jsonは以下のように`item_id`を含む配列です。
```samples.json
[ {"item_id":1,"somedata":"somedata 1"},
  {"item_id":2,"somedata":"somedata 2"},
  {"item_id":3,"somedata":"somedata 3"},
  {"item_id":4,"somedata":"somedata 4"},
  {"item_id":5,"somedata":"somedata 5"} ]
```

Generatorでは、これを利用して以下のようにデータからページを作成することができる。

```_plugins/samples_data_generator.rb
module Jekyll
  class SamplesDataGenerator < Generator
    def generate(site)
      if site.data.key?('samples')
         site.data['samples'].each do |item|
           site.pages << to_item_page(site, item)
         end
      end
    end
    def to_item_page(site, item)
      id = item["item_id"]
      page = PageWithoutAFile.new(site, site.source, '/samples', "#{id}.html")
      page.data.update({ "layout" => "sample_item", "item_id" => id })
      page
    end
  end
end
```

PageWithoutAFile というのは、Pageのサブクラスでフロントマッター部だけでレンダリングが完了するページ用のクラスで、今回のコードだと以下のようなフロントマッターだけのページを作成するのと同様のことをしている。

```yaml
---
item_id: 1
layout: sample_item
---
```

レイアウト `sample_item` では`item_id`を元にページを生成している。[^1]

[^1]: item_id で探しているけど、generate時にデータはあるので、実は探すのは不要、最初はGeneratorを使わず、ファイルを作ってやっていたのでこの方法が便利だった。

```liquid
---
layout: default
---
{% assign item = site.data.samples | find: 'item_id', page.item_id %}
<div> 
<!-- HTML template HERE. -->
</div>
```

つまり SamplesDataGenerator#generate 後は、以下のフォルダ構成でビルドするのと同じことになる。

```
.
├── _data
│   └── samples.json
├── _layouts
│   └── sample_item.html
└── samples # このsamples/以下をGeneratorで作っている
    ├── 1.html
    ├── 2.html
    ├── 3.html
    ├── 4.html
    └── 5.html
```

結果として、_data/samples.jsonの配列のそれぞれのオブジェクトをページにすることができた。表示上の加工はJekyllのテンプレート機能で変更することができる。

加工は事前にjqなどで行っておくことでHTML生成とは切り離して行うことができる。

## 感想

割とよかった。今回JSONは利用しているSaaS製品のAPIから取得/加工している。
SaaS側のUIで手が届かない痒いところ[^2]をどうにかしたかったのだが、API経由でエンティティをJSONで取り出して加工する、それをJekyllで静的サイトとして生成することで快適にデータをみることができるようになった。

エクスポートした一括データを保管しておいても、実際に使用したくなった場合に使いにくい場合が多いが、静的サイトを構築できるようにしておけば後々どうにかなる安心感がある。

こういうのは需要がありそうだけど面倒くさいが、こういうユースケースにつかえる道具が増えた感じがある。
プロジェクト管理ツールからデータをエクスポートして静的サイト構築したいみたいな気持ちがある。

[^2]: 今回は困っていたのはリンクの逆参照で、エンティティにルールの割当ができるのだけど、ルールから割当ったエンティティを引けなかった。


ちなみに話はかわるが、フロントマッターはYAMLが想定されているけど、JSONも含むので以下のような記述もできた。

```yaml
---
{"item_id":1,"layout":"sample_item.html"}
---
```
Python3の辞書のキーから値を返すプログラム

要素番号で辞書のキーと値を取り出す場合、Python3.7以前では辞書の順序がランダムになるため、キー項目を入力し、キーから値を取り出すプログラムを実装しました。
***

***以前の記事***

https://qiita.com/nogizakapython/items/1533ab7947b0958b3989


実装したプログラム

```Python3
#　辞書のキーから値を取り出すプログラム
#  新規作成 2023/4/5
#  修正    2023/4/6 (要素の番号ではなく要素のキーを入力する方法に変更) 

menus={"pork":"豚肉","beaf":"牛肉","chicken":"鶏肉","fish":"魚肉"}

str = ""

while True:
    try:
        str1 = input(f"pork,beaf,chicken,fishの4つから1つの単語を選んでください ")
        if str1 != "pork" and str1 != "beaf" and str1 != "chicken" and str1 != "fish":
            raise ValueError
        else:
            str = str1
            break
    except:
        print("入力文字が間違っています")    


# print(list(menus.items())[number])
# 
print(f"{menus[str]}")
```
Googleデータアナリティクス：データ分析の 6 つのステップと構造化思考

# はじめに

本記事は、Googleデータアナリティクスのプロフェッショナル認定証のプログラムより、参照させて頂いています。興味を持った方は、是非受講してみてください。

https://www.coursera.org/professional-certificates/data-analytics-japanese

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/f218c6bc-27a9-6aa7-4dfa-8e63bd3928b7.png" width="800">

# データ分析の 6 つのステップ

データ分析には、シームレスな意思決定を行うための 6 つのステップがあります。問いかけ、準備、処理、分析、共有、そして行動です。 注意していただきたいのは、これらは[データのライフサイクル][datalifecycle]とは異なるものである、ということです。

[datalifecycle]: https://qiita.com/mapami/items/7e3c28cc6ed4945bded1

### <font color="MediumBlue">ステップ 1：問いかけ</font>

問題を特定しないことには、解決へ導くことはできません。課題解決に向けて、以下のことを意識して取り組みましょう。

- 解決すべき課題を特定する
- ステークホルダーの期待値を十分に理解する
- 課題以外のことでなく、まずは起きている課題のみに集中する
- ステークホルダーと協働し、オープンなコミュニケーションをとる
- 一歩下がって、全体の状況を把握する

#### このステップで自分に問いかけるべきこと

- ステークホルダーは何が問題であると捉えているのか
- 課題を特定した後、解決に向けてどのようにステークホルダーを手助けできる

### <font color="MediumBlue">ステップ 2：準備</font>

ここでは、問いかけに対する答えを得るために、どのようなデータを収集する必要があるか、またどのように整理すれば有用なデータになるかを決定する作業に入ります。以下のことを意識して取り組みましょう。

- どのような指標で測定するか
- データベース内のデータを検索する
- データを保護するためのセキュリティ対策を行う

#### このステップで自分に問いかけるべきこと

- 課題を解決するためには、何をどうすればいいのか
- どのような調査が必要か

### <font color="MediumBlue">ステップ 3：処理</font>

最良のデータを入手するためには、エラーや不正確さ、矛盾といった可能性を排除すべく、データをクリーンにする必要があります。これは、具体的に次のようなことを意味します。

- 表計算ソフトの関数を使って、データの誤入力を見つける
- SQL 関数を使用して、余分なスペースをチェックする
- 繰り返し入力されているものを除去する
- データに偏りがないか、可能な限りチェックする

#### このステップで自分に問いかけるべきこと

- 解決したい課題に対するベストな答えを得るためには、データの中のどのようなエラーや不正確さが課題解決を阻害するのか
- どうすれば、自分の情報により一貫性を持たせることができるのか

### <font color="MediumBlue">ステップ 4：分析</font>

データについて分析的な思考をするステップです。ここでは、以下のことを通して、データを分類し、フォーマット化してより扱いやすいものにしていきます。 

- 計算を実行する
- 複数のソースからデータを結合する
- 結果を表にまとめる

#### このステップで自分に問いかけるべきこと

- データから、どんなストーリーが見えるか
- このデータがどう課題解決につながるか
- その企業の製品やサービスを必要としているのは誰か、どのような人が使う可能性が高いのか

### <font color="MediumBlue">ステップ 5：共有</font>

グラフやダッシュボードなどのツールを使って、データの分析結果をわかりやすく、魅力的にビジュアル化し、結果をまとめましょう。このステップは、あなたがステークホルダーの課題を解決し、どのようにしてそこに到達したかを示すチャンスです。得られた結果を共有することは、以下の点においてチームの手助けとなるでしょう。

- チームの意思決定がよりよいものとなる
- より多くの情報に基づいた意思決定を行える
- より大きな成果をもたらすことができる
- 調査結果を正しく共有できる

#### このステップで自分に問いかけるべきこと

- どうすればステークホルダーに魅力的かつ、わかりやすいプレゼンができるか
- 自分が聞き手だったとして、何をもってしてこれを理解するか

### <font color="MediumBlue">ステップ 6：行動</font>

さて、いよいよデータをもとに行動する時です。データ分析から学んだことをすべて、活用しましょう。行動とは、データに基づいた意思決定ができるように、調査結果に基づく推奨事項をステークホルダーと共有することを意味します。

#### このステップで自分に問いかけるべきこと

- 実際にステークホルダーのニーズや期待に応えるためには、ステップ 5 の分析で得たフィードバックをどのように活用すればよいか

# 構造化思考

これら 6 つのステップを踏むことで、データ分析プロセスをより小さく、管理しやすいパーツに分割することができ、これを構造化思考と呼びます。

構造化思考には以下の取り組みが含まれます。

- ***<font color="MediumVioletRed">現在起きている問題や状況を認識する</font>***
- ***<font color="MediumVioletRed">活用できる情報を整理する</font>***
- ***<font color="MediumVioletRed">生じているギャップや機会を明らかにする</font>***
- ***<font color="MediumVioletRed">考えうる選択肢を特定する</font>***
vimのカスタマイズ

vimのカスタマイズをする.vimrcのサンプルです。

viとvimは違いますが、僕は

```
alias vi='vim'
```

として使っています。

vimは起動時に~/.vimrcを読み込んで動作します。neovimの設定ファイルにするには、ファイル名を~/.config/nvim/init.vimとします。

qをquitにして、qqをqの代わりにしてますが、コメントアウトしてあります。

```.vimrc
" エンコードはUTF-8
set fenc=utf-8
" バックアップファイルを作らない
set nobackup
" スワップファイルを作らない
set noswapfile
" オートインデント
set autoindent
" 対応する括弧を表示
set showmatch
" シンタックスハイライト
syntax on
" ステータスを表示
set laststatus=2
" タブをスペースにする
set expandtab
" タブをスペース4つ分にする
set tabstop=4
" シフトをスペース4つ分にする
set shiftwidth=4
" サーチ時に大文字小文字を区別しない
set ignorecase
" 小文字で検索すると大文字小文字を区別しない
set smartcase
" 検索がファイルの終わりまで行ったら先頭に戻る
set wrapscan
" 検索結果をハイライト表示
set hlsearch
" オートインデント
set smartindent
" beepもビジュアルベルも無効
set vb t_vb=
" Clipboardからペースト可能
vmap <C-c> "+y
" qでquit
"nnoremap q :q<CR>
" qqでqの代わりをする
"nnoremap qq q
" ESCの2回押しでハイライト消去
nnoremap <ESC><ESC> :nohl<CR>
" 画面行の移動をする。論理行の移動はgj,gkでする。
nnoremap k gk
nnoremap gk k
nnoremap j gj
nnoremap gj j
```
Salesforce認定アソシエイト試験の公式練習問題解説してみた-15

こんにちは
本橋孝昭です。

Salesforce認定アソシエイト試験の公式練習問題があるのはご存じでしょうか。
Trailheadにフラッシュカードとして何度も解ける練習問題がございます。

今回は
認定資格試験の準備: Salesforce 認定アソシエイト＞
レポートとダッシュボードについて確認する

の問題3問目を解説します

今回の内容は動画でも公開しています

https://www.youtube.com/watch?v=c-SmJmO5-ZI

<iframe width="560" height="315" src="https://www.youtube.com/embed/c-SmJmO5-ZI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


https://trailhead.salesforce.com/ja/content/learn/modules/cert-prep-salesforce-certified-associate/review-reports-dashboards


![レポート003-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/0dc35dad-7cce-59f0-1ae9-961f2f484d6b.png)

正解はCです

レポートのプレビューは下記ヘルプのように表示できる範囲に制限があります

レポートビルダープレビューでは、サマリーレポート (行でグループ化) およびマトリックスレポート (列でグループ化) で最大 20 行、表形式レポート (グルーピングなし) で最大 50 行が表示されます。

https://help.salesforce.com/s/articleView?id=sf.rd_reports_dashboards_limits.htm&type=5

ぜひみなさんもプレビュー時にデータ表示されない場合も慌てないで気をつけてください。


## 他の認定アソシエイトの勉強方法について

他の勉強方法についてはこちらをご確認ください

https://qiita.com/Takaa/items/d35c9955fe8eb889d76b
Powershellでの継承

```powershell
#　クラスの継承とオーバーロード
# 新規作成 2023/4/6

# 大元クラス
class BaseClass{
    [String] $str = ""

    [String] BaseMethod([String] $input){
        return $this.str + $input
    }
}

# 大元クラスを継承した中間継承クラス
class MiddleClass : BaseClass{

    [String] $b 

    [String] MiddleMethod() {
        $this.b = "シークレットメンバーです"
        return $this.b
    }

    [String] MiddleMethod([String] $input){
        if ($input.Length -eq 0) {
            $this.b = "匿名"
        }
        return $this.str + $this.b + $input
    }
    [String] MethodA([String] $input){
        [String] $d = ([BaseClass]$this).BaseMethod( $input) + $input
        return $d
    }

}

# 中間継承クラスを継承した末端クラス
class SubClass : MiddleClass{
    [String] $x
    [String] SubMethod([String] $input){
        # 大元クラスのメソッドだけど、中間継承クラスのメソッドとして呼び出せる
        [String]$c = ([MiddleClass]$this).BaseMethod( $input ) + $input
        return $c
    }
    [String] MethodB([String] $input){
        if ($input.Length -eq 0) {
            $this.x = "匿名ユーザーです"
        }
        return $this.str + $this.x + $input
    }

}

# 末端クラスを呼び出す
$TestObject = New-Object SubClass
$TestObject.SubMethod("西野七瀬")
$TestObject.MethodB("小坂菜緒")
$TestObject.MethodB("")
$TestObject.MiddleMethod()


# ミドルクラスを呼び出す
$TestObject1 = New-Object MiddleClass
$TestObject1.MiddleMethod("秋元真夏")
$TestObject1.MethodA("白石麻衣")
$TestObject1.MiddleMethod("")
$TestObject1.MiddleMethod()

```

出力結果は下記になります

![zu1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1055346/68164b67-8ef6-55aa-0ddd-6d6b7e7392d2.jpeg)
HTTP Request トリガーのLogicAppsで呼び出し元を確認する方法

# 背景
Azure LogicAppsは、各種の手作業を自動化するのに便利で、色々と作ってしまう。（すでに100個超）
そして、色々と作っていると共通部品とか出てくるので、HTTP Request Triggerを使ってサブルーチンのようなサブLogicAppを作ってしまう。
すると、後日、「あれ、このLogicAppはどこから呼ばれているんだ？？？」とわからなくなったりする。
実行履歴から確認する方法があったので、備忘メモ。

# 方法
1. 特定のLogicAppの`Run history`を確認。
1. 任意の実行履歴を展開。
1. HTTP Request Trigger の`OUTPUTS`を確認。
1. `Headers`の中に、`User-Agent`や`x-ms-workflow-name`などがある。これが呼び出し元のLogicAppだったりする。

下の例では、
`User-Agent`から、AzureLogicAppsから呼び出されていること
`x-ms-workflow-name`から、それがLA_ImportTrialというLogicAppだということがわかる。　

![スクリーンショット 2023-04-06 10.51.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43829/36278a32-b807-ccfc-b5ea-30545ad8912c.png)
Db2 on CP4Dへの接続 - ユーザーを追加する

Cloud Pak for Data (以下CP4D)内のDb2, Db2 Warehouseサービスへ接続するためのユーザーの追加方法を2つご紹介します。
- [Db2 on CP4Dへの接続 - ユーザーを追加する](https://qiita.com/mi-shimo/items/4543945d1a659514554c) ：本文書です。　初めてやってみるとか、ちょっとした確認のため1ユーザー作成してDb2サービスへ接続したいという場合にお使いください。
- [Db2 on CP4Dへの接続 - グループを追加しておくと便利! ユーザーを追加する](https://qiita.com/mi-shimo/items/b0e7034a6f51af599fcd) : Db2サービスのユーザー管理の入門としてお使いください。Db2データベースにCP4Dユーザー・グループを登録してユーザー管理が簡単になります。



本記事は Db2で記述していますが　Db2 Warehouseサービスも同じ手順で作業します。

## CP4Dのユーザーを確認する　
まず　CP4Dのユーザーで　Db2サービスへ接続したいユーザーが存在することを確認します。
管理者権限をもったユーザーでCP4DコンソールにLOGINし　メニューから 管理→ アクセス制御を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855502/2db06e7f-5b18-037f-4176-c3e26e48abce.png)

存在しなければ"ユーザーの追加"で追加できます。ここでは　"user02"を使用します。　

## Db2データベースへユーザーを追加する
1. Db2データベースの"アクセスの管理"を開く 
CP4Dコンソールのメニューから データ→ データベースを選択します。
接続したいDb2データベースの右上のトリコロンから　"アクセスの管理"を選択し"アクセスの管理"パネルに入ります。
すると登録されているユーザーが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855502/4294fb70-4fc6-6143-ce27-1599c53147ee.png)
↑の例は作成したばかりのデータベースなので adminだけが登録されています。

2. Db2データベースへユーザーを追加する
"アクセスの管理"パネルの右上方にある"ユーザーの追加"を選択すると CP4Dのユーザーがリストされます。　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855502/eb153db8-62bc-a56b-5de3-8bef304e9776.png)

Db2データベースへ追加するユーザー"user02"を追加するためにチェックボックスにチェックして"ロールの選択"を行います。　今回は"User"を選択して　"追加"します。

次のように追加できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855502/d7c70495-4a04-98c4-52bb-f8e0ac9539eb.png)




## 確認
例えば ["データベース詳細"を使用して"プラットフォーム接続"を作成する](https://qiita.com/mi-shimo/items/7abf2bb699c7c4267cce)　に書いている手順を使って　今回追加したユーザーで接続確認を行うことができます。　


### 実施環境　Db2
- IBM Cloud VPC Gen2
- OCP 4.10
- CP4D 4.6.3
  - Db2 Version 11.5.8.0-cn1

### 実施環境　Db2 Warehouse
- CP4D 4.6.4
  - Db2 Version 11.5.8.0-cn2
読み込み画像のアスペクト比次第でアスペクト比を加工する機能を作る

# 初めに
今回は`Coil`を使って読み込み画像のアスペクト比次第でアスペクト比を加工していこうと思います
### 本文
使うのは`Coil`の`Transformation`です
今回は横長画像の場合は何もせず縦長画像の場合に変換する機能を作ります
```kotlin
class CropTransformation(
    private val aspectRatio: Float = 1.5f,
    override val cacheKey: String,
) : Transformation {

    override suspend fun transform(input: Bitmap, size: Size): Bitmap {
        val inputImageAspectRatio = input.width / input.height
        if (inputImageAspectRatio >= aspectRatio) return input
        val newSize = Size(input.width, (input.width / aspectRatio).roundToInt())
        return Bitmap.createBitmap(
            input,
            0,
            0,
            newSize.width.pxOrElse { 0 },
            newSize.height.pxOrElse { 0 },
        )
    }
}
```
### 最後に
やってること自体は画像を再度Bitmapで作るという単純なことですが、備忘録程度に残しておこうと思います
IPA試験受験メモ

# はじめに

情報処理技術者試験を受験するにあたって、覚えておきたいメモをアウトプットとして記載する

## モジュール結合度

内容結合→共通結合→外部結合→制御結合→スタンプ結合→データ結合
※右に行くほど結合度が低いので他のモジュールと干渉しない
ことから良いとされている
間違いなく覚えられないためゴロ合わせで覚えることにする

:::note info
ナイス今日外人に制御できないボール投げられて素手でキャッチ
:::

ナイ **(内部結合)** ス今日 **(共通結合)** 外 **(外部結合)** 人に制御 **(制御結合)** できないボール投げられて素 **(スタンプ結合)** 手 **(データ結合)** でキャッチ

## プロダクトポートフォリオマネジメント(PPM)
自社の経営資源をどう配分するかを意思決定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530719/7e248daf-d169-40ac-3556-eefb8fb4dcde.png)

+ 縦軸市場成長率
+ 横軸市場占有率
+ 問題児：市場占有率(シェア)が低く、市場成長率が高い。まだ収益は少ないものの、伸びる可能性は高い。
+ 花形：市場占有率(シェア)も市場成長率も高い。収益が伸び盛りで、今後も伸びる可能性がある。
+ 金のなる木：市場占有率(シェア)が高く、市場成長率が低い。収益がピークに達している。
+ 負け犬：市場占有率(シェア)も市場成長率も低い。収益が乏しく、伸びる可能性はない。

:::note info
縦に成長、横に占有、花より金の、株投資で負け続きの問題児PPM
:::

縦に成長 **(市場成長率)**、横に占有 **(市場占有率)**、花(花形)より金(金のなる木)の、株投資で負け **(負け犬)** 続きの **問題児** **PPM**

## アンゾフの成長マトリックス
既存事業が成熟し踊り場にいたったとき、どんな新規事業を打ち手とするか

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530719/8398ff31-ca82-b498-c61b-43157eaa1553.png)

:::note info
縦に製品、横に市場、流行りが浸透、流され開発、新たな一面開拓、色々手を出してみたい多角化、既存も新規もみんなハッピー
:::

・・・いいネタが思い浮かばなかった
CPU主体・省メモリかつ性能が高いLLM関連リポジトリのメモ


CPU主体・省メモリかつ性能が高いLLM関連リポジトリの一覧です。

自分用のメモです。随時更新予定


| 名前 | リンク | 特徴その他 | アプローチ | 日本語性能 | 配布内容 | 別途入手 | 対応パラメータ数(B) |
|----|----|----|-----------|-------------|----|---|---|
| gpt4all           | [GitHub](https://github.com/nomic-ai/gpt4all)                 | 利用メモリ極小。GPUなし12GノートPCでも遅いが使えなくない | LoLaをgpt3.5-turboで蒸留    | 実用性なし      | gpt4all-lola-quantized.bin     | なし |  7   |
| Vicuna-13b        | [GitHub](https://github.com/lm-sys/FastChat/#vicuna-weights)  | 必要メモリ60G、性能高            | LLaMaをShareGPTで蒸留             | 一部実用レベル    | 追加重み+chat  | LLaMa | 13  |
| llama.cpp         | [GitHub](https://github.com/ggerganov/llama.cpp)              | LLaMaの利用メモリ削減、30Bを32Gなど | c++で4bit量子化。MLライブラリggmlは他実装でも利用されている  |   未対応   | 量子化実装+chat | LLaMa | 7 13 35 60 |
| flexgen           | [GitHub](https://github.com/FMInference/FlexGen)              | cpu/diskオフロードでVRAM16Gでも動く。最近はメリット薄れてきたかも | pytorch   |    未確認   |    | OPT | 6.7 30 175 |
| alpaca            | [GitHub](https://github.com/tatsu-lab/stanford_alpaca)        | パラメータ比の性能高いモデル+訓練用データセット52k | LLaMa-7Bをgpt-3.5で蒸留   |  未確認 | モデル+訓練データ (重みは配布なし)  | LLaMa | - |
| Japanese-Alpaca-Lora | [GitHub](https://github.com/kunishou/Japanese-Alpaca-LoRA)   | 日本語性能                    | alpaca訓練データをDeelで翻訳して訓練 | 一部実用レベル    | Alpaca Adapter層の重み  | LoRA | 7 13 30 65 |
| RWKV-LM | [GitHub](https://github.com/BlinkDL/RWKV-LM) | 商用利用可? パラメータ比の性能高い?  VRAM必要 | TransformerではなくRNN | [日本語14B](https://huggingface.co/BlinkDL/rwkv-4-pile-7b/blob/main/RWKV-4-Raven-7B-v6-EngChnJpn-20230331-ctx4096.pth)は一定自然 | 全重み+chat モデルバリエーション多い | なし | 3 7 14 | 
| rwkv.cpp | [GitHub](https://github.com/saharNooby/rwkv.cpp) | CPUで動くrwkv? | 4bit量子化したrwkv | 未確認 | 変換+chat | rwkv |
お母さんでもわかるDockerを使ったPHPの環境構築

①
「Dockerfile」の作成。

下記はDockerHubからコピー。
```
FROM php:8.1.12-apache
COPY src/ /var/www/html/
```
ターミナルで下記を実装
`docker build -t study-php .`
`docker run -p 8080:80 -d -v "$(pwd)"/src:/var/www/html --name study_php study-php`
DNSってなんですか？

## 概要
DNS（Domain Name System）は、インターネット上のドメイン名とIPアドレスを相互に変換するシステムです。
DNSは、電話帳のような役割を果たしており、人間が覚えやすいドメイン名を、コンピュータが理解できるIPアドレスに変換します。
これにより、インターネット上のリソースへのアクセスが容易になります。

## DNSの流れ

1\. ユーザーがウェブブラウザにURL（例：www.example.com）を入力します。
2\. ブラウザは、指定されたドメイン名に対応するIPアドレスを問い合わせるため、設定されたDNSサーバーにリクエストを送ります。
3\. DNSサーバーは、そのドメイン名に関する情報を持っている場合は、対応するIPアドレスを返します。もし持っていない場合、他のDNSサーバーに問い合わせを行います。
4\. 最終的に対応するIPアドレスが見つかり、ブラウザに返されます。
5\. ブラウザは、取得したIPアドレスを使用して、ウェブサイトにアクセスします。

## DNSのメリット
- 人間が覚えやすいドメイン名を使用できるため、インターネット上のリソースに簡単にアクセスできます。
- IPアドレスが変更されても、ドメイン名は変更されないため、ウェブサイトへのアクセスが継続して可能です。
- 負荷分散やフェイルオーバーの仕組みを容易に実現できます。

## おわりに
何となく聞いたことがあって、意味もこうだろうな？と思っていたが改めて理解ができました！
【ドラゴンボール風解説】CIDRブロックについて

# はじめに
この記事はAWSの説明は今ひとつよくわからないのでドラゴンボールに例えて説明してほしい。
というAWS初学者向けの記事です。
※投稿記事作成にはchatGPTを使用しております

# CIDRブロック 
オッス、オラ悟空！
CIDRブロックってのは、天下一武道会の予選会場みたいなもんだ！予選では、格闘家たちがそれぞれのブロックで戦って、勝ち残った者だけが本選に進むだろ？CIDRブロックも同じで**IPアドレスを範囲ごとに分けて各ブロックに割り当てるん**だ！

例えば、192.168.0.0/16の範囲をCIDRブロックに分割する場合、192.168.0.0/24、192.168.1.0/24、192.168.2.0/24などのCIDRブロックができるわけだ！そして、それぞれのCIDRブロックには、対応するIPアドレス範囲が割り当てられて、**ブロック内のデバイスたちが通信を行う**んだ！

天下一武道会と同じように、CIDRブロックでも各ブロック内で戦う格闘家たちが勝ち残り、本選に進むように、CIDRブロック内のデバイスたちも各ブロック内で通信を行って、必要な情報をやり取りするんだ！ってわけだ！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3304054/4783b5ed-31cd-4462-c74a-2f59bb4ca1dd.png)
ChatGPT と Google Books APIs で書籍検索レコメンドアプリを作ってみた

[前に作ったテンプレートアプリ](https://qiita.com/shyamagu/items/2e826ea0380efc1a4475)をベースに、ChatGPT と Google Books APIs を組み合わせて、読みたい内容を伝えたら本の一覧とそれに対するコメントが出てくるサイトを作ってみました。

「色々な遭難事故の本を読みたい」みたいに入力したら、該当する一覧と、最後にどうおススメなのかが返ってくる Web アプリです。（下の画像）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/977156/b33bfc36-947e-203d-7dd2-8da6ecaf4e3e.png)

やっていることは下図の形です。ユーザの読みたいという思いを、ChatGPT と Google Books APIs という AI たちが解決してくれる感じです。(検索を広義の AI ととらえれば…）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/977156/e891a77c-be3a-00e6-ff85-d0d32c159d6e.png)

# 検索クエリの生成

システム連携するために ChatGPT への入力は自然言語、出力はクエリ配列というプロンプトを実装します。ポイントとしては、出力フォーマットの指定と、出力例をいれていることです。

このプロンプトを用いた ChatGPT の回答を、`JSON.parse(answer)`することで、javascript の配列を取得します。

```:検索クエリ生成のためのプロンプト
あなたは本の検索クエリ作成マシーンです。
ユーザからのリクエストに対して、その内容が含まれていそうな本のタイトルに含まれていそうな単語を2個から5個、
以下のフォーマットに従って回答してください。なお、順序は関連度順です。

出力フォーマット）
["単語1","単語2","単語3","単語4","単語5"]

例えば、
ユーザ）エベレストで遭難する話
あなた）["エベレスト","遭難","登山"]
```
# 本の検索

ここは Google Books APIs をつかって書籍のデータをとってくる実装をしました。
[公式のパラメータ](https://developers.google.com/books/docs/v1/reference/volumes/list?hl=ja#parameters) を参考に、以下のようなURLを生成しました。
大量にとれても処理が大変なので、5件取得。日本語の書籍に限定。という感じです。

```:Google Books APIs への GET URL
    const googlebooksapi_URL = "https://www.googleapis.com/books/v1/volumes?q=" 
    + {上述の検索クエリ配列を"+"でつないだ文字列}
    + "&maxResults=5&printType=books&langRestrict=ja"
```

また本の注釈がないものや、短いものは除外しつつ、必要な情報だけを以下のように取得します。

```js
  let items = searchResult.data.items.map((item) => {

    //注釈が無い場合、また注釈が10文字未満の場合は除外する。
    if(item.volumeInfo.description && item.volumeInfo.description.length > 10){
      return {
        title: item.volumeInfo.title,
        authors: item.volumeInfo.authors,
        description: item.volumeInfo.description,
        image: item.volumeInfo.imageLinks?.thumbnail,
        link: item.volumeInfo.infoLink,
      };
    }
  });
```

# コメント生成
取得した本のリストを入れて、その中から当初の要望とマッチしているものをリコメンドするコメントを生成させます。

ポイントとしては、ユーザからの当初の入力を動的に入れ込んでいることと、入力フォーマットの例示をしていること、ならびにこの検索結果リスト以外の情報をつかってはならない、という指定をしていることです。

```js:コメント生成するプロンプト
const book_master = `あなたは本のコンシェルジュです。
ユーザからは「${user_request}」という内容の本を読みたいと要望をうけていました。
その上で、ユーザから以下のフォーマットで書籍の検索結果データを受け取ります。

### 検索結果フォーマット
[{title: "本1のタイトル", authors: ["著者1", "著者2"], description: "本1の説明"}, {title: "本2のタイトル", authors: ["著者1", "著者2"], description: "本2の説明"}, ..., {title: "本Nのタイトル", authors: ["著者1", "著者2"], description: "本Nの説明"}]

それぞれの本がユーザの要望とどうマッチしているのか、descriptionの内容をまとめて、ユーザが読みたくなるような推薦文書を書いてください。
**検索結果フォーマットのデータ以外の情報は使用してはなりません。**
`
```

# まとめ
再度「世界旅行しながら色々な人と交流していく物語」を聞いてみました。
なんか、とても面白そうな本を紹介してくれますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/977156/6d51e648-0258-3e2e-0de4-ef9a11d5aebc.png)

サービスとしても中々面白くできましたし、ChatGPT と外部のAPI（今回はGoogle Books APIs)を組み合わせたアプリの実現もできたので、ひとまず大満足です。

一方でさらなる実装としては、
1. リコメンドに対して、さらに深堀る質問を重ねたい
2. プロンプトインジェクション対策

あたりでしょうか。いずれも入力のカテゴライズをする何らかの処理を加えないといけないところですが、ここは ChatGPT よりも 旧LUIS などの自然言語処理サービスの方が安定性やコストの観点でも向いているかもなと思います。

プラグインも気になるところですが、ひとまずテンプレート Web アプリを拡張して実際に使えそうなものを作ってみたので、今回の記事は以上となります。
【CakePHP3】データベースの新規登録、編集【新人がyoutube動画でPHP学習part3】

# １．はじめに
今回はデータベースの基本操作であるCRUDのうち、Createにあたる新規登録、Updateにあたる更新を行います。
教材はチャンスラボ株式会社の公式YouTubeチャンネル。
https://www.youtube.com/@asterisk_cl_lab/videos

第６回～第７回の動画を参考にします。

【第６回　新規登録してみよう！】
https://www.youtube.com/watch?v=ieFp-Y9sZIg

【第７回　データ編集してみよう！】
https://www.youtube.com/watch?v=WJeajbVIYAo

# ２．目次
１．はじめに
２．目次
３．新規登録してみよう！
４．データ編集してみよう！
５．おわりに


# ３．【第６回　新規登録してみよう！】
CRUDのC＝Createについて、新規登録を行いながら解説しています。

**１：５２～２：１５**
URLに記載されるコントローラー名とアクション名についての説明です。
例えば[http://localhost/users/index]というURLであれば、コントローラー名は「users」、アクション名は「index」となります。

コントローラー名「users」はUsersController.phpの１３行目、クラス「UsersController」を指しています。
URL上ではクラスの「Controller」部分が省略され「users」のみ表記されます。

アクション名「index」はUsersController.phpの２０行目、メソッド「index()」を指しています。
ただしindexアクションは省略できるため、[http://localhost/users/index]　と　[http://localhost/users]　は同じものを意味します。
![スクリーンショット 2023-04-05 110643.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3297208/4fb14452-42e7-d91c-d3e9-ea652a907295.png)

【第４回　controllerとViewで画面表示しよう！】の**６：３３～７：０５**でも同様の説明がされています。
https://www.youtube.com/watch?v=ANFACTySK20


**５：４９～６：３０**
add.ctpファイルのソースコードを確認しています。
記述されたHTMLタグ\<fieldset>\<legend>に馴染みが無かったので調べました。
\<fieldset>・・・入力フォームをグループ化するためのタグ
\<legend>・・・グループ化されたフォームに命名するタグ


**７：２５～７：５５**
patchEntityは、newEntityで作成した空のレコードに対して、ブラウザに入力されたデータを自動的に入れる処理をします。フォームのname属性とデータベースのカラムが同じであれば自動的に処理をしてくれるということですが、この動画を例にすれば、\<input name="account">なのでデータベースのカラム名もaccountで一致しないといけません。
![スクリーンショット 2023-04-05 131752.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3297208/672dfe23-dd9f-1f11-ab3e-29614d178ff4.png)


**８：１１～９：１０**
データベース登録成否での条件分岐を説明しています。
この部分の説明がイマイチ分からなかったので自分なりの解釈ですが
〇データベース登録が上手くいった場合、、、
登録成功のメッセージが表示される。
加えて５６行目のコードによりアクションがindexとなるため画面遷移する。
![スクリーンショット 2023-04-06 090209.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3297208/d79fead8-a10d-d335-ebef-4ba46444c5fe.png)
〇データベース登録が失敗した場合、、、
登録失敗のメッセージが表示される。
アクションはaddのままなので、画面遷移はしない。


# ４．【第７回　データ編集してみよう！】
CRUDのU＝Updateについて、データ編集を行いながら解説しています。

**２：００～３：０４**
データ編集の場合は、どのデータを編集したいか指定する必要があります。
なのでIDの数値をパラメータとして指定し、URLのアクション名の後に表示しています。
**３：４３～４：１６**の説明の通り、このIDをeditメソッドの引数として使用しているようですね。


**４：２２～４：２８**
UsersController.phpの７２行目のコードについて説明しています。
this->Users　が　UsersTable.phpを示しているとのこと。これについてはコードを見ていて気になっていたんですよね。こういった$this->hogehogeというコードがどこを指しているのか、どうすれば分かるのでしょうか、、、
![スクリーンショット 2023-04-06 090302.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3297208/95af0993-402b-9ee9-d295-a1c936d9dfcc.png)



**５：２６～５：４１**
「リクエストのメソッドを判定して処理している」とのことですが、ここで説明しているメソッドとは何を指すのか分からず調べました。どうやらHTTPリクエストメソッドのことを指していると思われ、POST、PUT、PATCHは全てHTTPリクエストメソッドに含まれるようです。


**８：０５～８：２３**
FormHelperの記述について解説しています。
そもそもFormHelperとは何かよく分からなかったので調べてみました。僕なりの解釈ですがFormを作成するための便利なメソッドの総称といったところでしょうか。
ソースコードは$this->Form->controlとなっており、すべてcontrolメソッドが使用されていますが、ほかにもメソッドがあるようです。cookbookにいろいろなパターンが記載されていました。
https://book.cakephp.org/3/ja/views/helpers/form.html

# ５．おわりに

動画はわりと簡潔にサクサクと進むので分かった気になってしまうのですが、一つずつ見てみると実は分かってない箇所が多いことに気づきますね。僕のような初心者は分からない箇所をどんどん調べていきましょう。
以上、ご覧いただきありがとうございました。
URL の en-us を ja-jp に置換するブックマークレット

### プロンプト

> JavaScriptでブックマークレットを作りたいです。
${location.href} から URL の en-us という文字を ja-jp に置換したいです。大文字小文字どちらにたいしても置換できるようにしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/46ec65f3-55f5-a87a-a79f-958b1e27fc38.png)

```JavaScript
javascript:(function() { 
  var url = location.href; 
  var replacedUrl = url.replace(/en-us/gi, 'ja-jp'); 
  location.href = replacedUrl; 
})();
```

## 完成
![la2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/e85e0d5d-8099-d379-1c28-2fcdb85fa604.gif)

便利。
ChatGPTについて考える (1) 記号処理と単語ベクトル

<a href ="https://qiita.com/ryokan/items/0e65dfa1cffa2cbd3ddb" target="new">「ChatGPTについて考える」</a>シリーズのイントロダクションに続く第1回目では「記号処理と単語ベクトル」について取り上げたいと思います。

とはいえ、「単語ベクトル」はGPTに限らず、深層学習を自然言語に対して用いる場合の基本技術になります。

もともと人工知能は、数値処理と違って、知識を記号と記号の関係で表現する記号処理ととらえられていました。言語は文字と単語という記号であり、単語のリストとして文が表現されていますので、記号処理の対象として相性が良いと考えていました。記号の関係も、単語の活用や、文法理論として言語学、国語学で研究されてきた蓄積があります。どの理論を使うかの選択はありましたが、一から理論を構築する必要はありませんでした。もちろん理論に収まり切れない例外があることはわかっていましたが、「例外」として処理できない種類の多さに悩まされることになります。

これに対して、音声認識/画像認識は、連続量である音波/画素の並びから、音素/(認識結果の)ラベルという記号を取り出すことになります。特徴量をみつけ特徴量の組み合わせでパターンを認識するのに苦労をしているように見えました。

それに対して2010年代、深層学習を用いることにより画像認識が飛躍的に性能を上げることになりました[岡谷 2013]。音声認識も2010年代から深層学習が取り入れられているようです[河原 2018]。

深層学習の要件に「微分可能」というのがあります。記号のままでは微分可能ではありませんから、ここで単語をベクトル表現にすることになります。ベクトル表現は単語の類似度が計算できるLSIなど以前からありましたが、Word2Vecでking - man + woman = queen単語間の計算ができるようにもなりました。

Word2Vecで単語間の関係を表現できているように見えますが、WrodNet、分類語彙表、EDR電子化辞書のような階層的な語彙体系は明示的には表現できていません。意味の上位下位関係が定義されていれば、含意関係を用いた論理的な文の解釈が可能になります。もちろんNLIタスクでTransformerベースの研究が上位を占めているように、含意関係も扱えているようにみえますが、あくまで大量の学習データで学習する中で含意関係 (の一部) が含まれているということでしょう。少ない出現数の単語ではうまくいかないと予想されます。

単語ベクトルは深層学習の導入に必要でしたが、これまで構築した語彙体系が使えないことになりました。ChatGPT (GPT) で上位下位関係を教えていけばよいのかもしれません。

参照：

岡谷 2013 「画像認識のための深層学習」人工知能学会誌 28巻6号 https://www.jstage.jst.go.jp/article/jjsai/28/6/28_962/_pdf 
河原 2018 「音声認識技術の変遷と最先端——深層学習による End-to-End モデル——」日本音響学会誌 74巻7号
https://www.jstage.jst.go.jp/article/jasj/74/7/74_381/_pdf
メールアドレスを使ったテストの効率を上げる3つのtips

こんにちは。[virapture株式会社](https://virapture.com)でCEOしながら[ラグナロク株式会社](https://ragna-rock.com)でもCKOとして働いている[@mogmet](https://twitter.com/mogmet)です。

![mogmet.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/5a218194-2c5a-fb65-3a8d-a47fbe3462e2.jpeg)


本日はよく使われるであろうメールアドレスを使ったテストでの知見についてご紹介いたします。

## example.comを使う

example.comというドメインは誤って使っても第三者に影響が及ばないことが保証されてます。

https://ja.wikipedia.org/wiki/Example.com

テストを行うときは `a@example.com` などの適当なメールアドレスを入力してテストしていきましょう！

## 日付を使う

`a@example.com`、`b@example.com`と何度もアカウントを発行してるとどのアカウントを使ったかなどわからなくなってきます。
そういうときは本日の日付をprefixとしてアカウントを作成すると既に発行したかどうかというのを確認しなくても済むようになります。

例えば下記のような形です。
`20221201@example.com`

ここからsuffixとしてアルファベットを付けるパターンや
`20221201a@example.com`

時間を付与するパターンもありです。

`202212011523@example.com`

ちなみにGoogle IMEでは`きょう`と入力すると本日の日付を変換してくれる機能もあるので積極的につかうといいでしょう。

![CleanShot 2023-04-06 at 06.55.00@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/45ffc76f-3323-b416-61c3-3b19bd825a33.png)


## エイリアスを使う

メールが届くかどうかを確認するためにはexample.comを使うわけにはいかないので実際のメールアドレスを使っていく必要があります。
その場合gmailをおすすめします。

gmailにはエイリアスという機能があるためその機能がテストに役立てることができます。

例えば `example+2023-04-06@gmail.com` といった形で入力すればアドレスは違うけど自分のgmailに全てメールを届かせることができるのでエイリアスも積極的に使うことをおすすめします。

## まとめ

まとめです。

- exaple.comを使う
- 日付も含めて複数のアドレスを使いこなす
- gmailのエイリアスを使って複数のアドレスを使いこなす

です。

最後に、スノボの楽しく滑るコツを掴める [cotsume](https://cotsume.page.link/blog) というアプリを作ってます！よかったらDLしてみてね！

https://cotsume.page.link/blog

また、[ワンナイト人狼オンライン](https://online.1nite-jinro.com/link/blog)というゲームを作ってます！よかったら遊んでね！

https://online.1nite-jinro.com/link/blog

他にも[Camecon](https://camecon.me/)や[Offcha](https://offcha.com/)、問い合わせ対応が簡単にできる[CSmart](https://csmart.jp/lp)、フリーランスのコミュニティの[NextFreelance](https://next-freelance.net/)といったサービスも作ってるのでよかったら使ってね！

https://camecon.me/

https://offcha.com/

https://csmart.jp/lp

https://next-freelance.net/

また、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話も受け付けてますので御用の方は弊社までお問い合わせください。

https://virapture.com/

ラグナロクでもエンジニアやデザイナーのメンバーを募集しています！！楽しくぶち上げたい人はぜひお話ししましょう！！

https://ragna-rock.com
新たなDatabricksワークスペースブラウザのプレビュー

[Preview the New Workspace Browser \- The Databricks Blog](https://www.databricks.com/blog/2023/04/05/preview-new-workspace-browser.html)の翻訳です。

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

Databricksでのナビゲーションをシンプルにするために、新たならワークスペースブラウジング体験をリリースします。この新たなワークスペースブラウザによって、コンテンツの整理やブラウジングが容易になります。これは、Data Science & Engineering、Machine Learning、SQLエリアのコンテンツのブラウジングを統合します。また、ノートブックで操作している文脈でブラウジングを行うことができます。

# フルページのブラウジング

新たなDatabricksワークスペースブラウザでは2つの大きな変更点があります。最初のものは、左のナビゲーションパネルからワークスペースブラウザを開くことで、フルページのブラウジング体験を提供するということです。このフルページ体験によって、フォルダ間の移動やコンテンツの整理が容易になります。フルページ体験のもう一つのメリットは、所有者や作成日のようなメタデータをより容易に参照できるというものです。
![](https://cms.databricks.com/sites/default/files/inline-images/db-556-blogs-img-1.png)

左のマスターリストビューと上部のフォルダパスのブレッドクラムによって、フォルダ構造を容易にナビゲートできるようになります。

コピーや移動のようなアクションを行うために、ファイルやフォルダを右クリックすることができます。これらの右クリックのアクションはメインテーブルビューやマスターテーブルビューで実行することができます。メインテーブルビューやマスターリストビュー、ブレッドクラムでオブジェクトのドラッグ&ドロップを行うこともできます。
![](https://cms.databricks.com/sites/default/files/inline-images/db-556-blogs-img-2.png)

# ノートブックのサイドバーブラウザ

2つ目の変更点は、ノートブックのサイドバーにコンテキストに基づくワークスペースブラウザが追加されるということです。フルページの体験と同様に、このブラウザはオブジェクトやフォルダに対する右クリックアクションをサポートしているので、フルページのブラウザに移動することなしに、ファイルパスのコピーのようなタスクをクイックに実行することができます。このブラウザはナビゲーション可能で、自動でノートブックの格納場所を表示します。
![](https://cms.databricks.com/sites/default/files/inline-images/db-556-blogs-img-3.png)

また、同じワークスペースブラウザでData Science & Engineering、Machine Learning、SQLのコンテンツを整理できます。これは、ノートブック、クエリー、ダッシュボード、エクスペリ異面とを含むフォルダを作成、共有できることを意味します。

# 使い始めるためのオプトイン

新たな体験をトライするには、Data Science & EngineeringやMachine Learningエリアにアクセスし、ブラウザの下部にある「Try the new Workspace Browser」をクリックします。
![](https://cms.databricks.com/sites/default/files/inline-images/db-556-blogs-img-4.png)

:::note
**注意**
この新たなワースペースブラウザはすでにSQLエリアでは有効化されています。Data Science & EngineeringやMachine Learningエリアでこのフルページ体験やノートブックのサイドバーワークスペースブラウザを有効化するには、上述のステップに従ってください。
:::

ワークスペースブラウザの上部にある[Provide feedback](https://databricks.sjc1.qualtrics.com/jfe/form/SV_868Nvh5YkgYIH8W)リンクから是非フィードバックをお願いします！

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
モーダルを表示したときの表示崩れを防止

# モーダルを表示したときにスクロールを制限すると、スクロールバーが悪さをする
モーダル出現時にスクロールを制限すると、クラシックスクロールバーが消えたぶん全体的に左右に表示が崩れてしまい、いまいちな見た目になってしまいます。

## css と jQuery を用いた方法
色々試した結果、javascript(jQuery)とcssで対策するのがいちばん楽なのではないでしょうか。
よく紹介されている scrollbar-gutter: stable; を用いたやり方もスマートだとは思うんですが、
- body を基準とした position: fixed; や position: absolute; を当てた要素が崩れる（対策はあるが、css が煩雑になってしまう）
- Safari に対応していない

などの理由から、考慮するべきことが多いなと感じます。

ここではスクロールバーを消さずにスクロールのみを制御する方法を紹介します。

### どうやって実現するか
- CSS
    - モーダル出現時に body に position: fixed; を設定
    - このままではスクロールバーが消えるので、 overflow-y: scroll; を設置してスクロールバーを出現させたままにする
- javascript(jQuery)
    - モーダル出現時のスクロール位置を取得して、body に設定された  position: fixed;  の位置を調整する(見た目スクロールしているように見える）
    - モーダルを閉じたときに body の position を デフォルトに戻し、位置をもとに戻す
    - スクロール位置をモーダルを開いたときの位置に戻す


<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="jOeOEve" data-user="weboscar1164" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/weboscar1164/pen/jOeOEve">
  Untitled</a> by junichi sugihara (<a href="https://codepen.io/weboscar1164">@weboscar1164</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>
Twilioとの連携

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめN～Z](https://qiita.com/Keiji_otsubo/items/92f92bb9f668ca9688be)


+ [RESOLVED Attempt to de-reference a null object error causing messaging component to permanently lock up](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000O82jk)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/74c1d208-67ec-a740-3758-ad7f191655a6.png)

+ [LWC JS で twilio からの発信コールのコールバック ステータスを取得する方法。](
https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ertCC)


+ [Twilio CTI won't load (flex.twilio.com refuses to connect)](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000SW4Uv)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/2e985433-546a-482d-8d0c-e55f96e772c9.png)

:::note
Please check this article. 


https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T42nySAB
 
https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T4NG2SAN
:::
paiza.ioでpython その8

# 概要
paiza.ioでpythonやってみた。
オセロ見つけたので、やってみた。

# 参考にしたページ。

https://qiita.com/y-tetsu/items/a961a70cc431e7bb8664


# 実行結果

```

 - - - - - - - -
 - - - - - - - -
 - - - - - - - -
 - - - o x - - -
 - - - x o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 - - - - - - - -
 - - - - - - - -
 - - - - o - - -
 - - - o o - - -
 - - - x o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 - - - - - - - -
 - - - - - - - -
 - - - x o - - -
 - - - x o - - -
 - - - x o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 - - - - - - - -
 - - - - - - - -
 - - o o o - - -
 - - - o o - - -
 - - - x o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 - - - - - - - -
 - - - x - - - -
 - - o x o - - -
 - - - x o - - -
 - - - x o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 - - - - - - - -
 - - - x - - - -
 - - o x o - - -
 - - o o o - - -
 - - - x o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 - - - - - - - -
 - - - x - - - -
 - x x x o - - -
 - - x o o - - -
 - - - x o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 - - - - - - - -
 - - - x - - - -
 o o o o o - - -
 - - x o o - - -
 - - - x o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 - - - - - - - -
 x - - x - - - -
 o x o o o - - -
 - - x o o - - -
 - - - x o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 o - - - - - - -
 o - - x - - - -
 o x o o o - - -
 - - x o o - - -
 - - - x o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 o - - - - - - -
 o - x x - - - -
 o x x o o - - -
 - - x o o - - -
 - - - x o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 o - o - - - - -
 o - x o - - - -
 o x x o o - - -
 - - x o o - - -
 - - - x o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 o - o x - - - -
 o - x x - - - -
 o x x x o - - -
 - - x x o - - -
 - - - x o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 o - o x - - - -
 o - o x - - - -
 o x o x o - - -
 - - o o o - - -
 - - o o o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 o x x x - - - -
 o - x x - - - -
 o x o x o - - -
 - - o o o - - -
 - - o o o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 o o o o o - - -
 o - x o - - - -
 o x o x o - - -
 - - o o o - - -
 - - o o o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 o o o o o - - -
 o - x x x - - -
 o x o x o - - -
 - - o o o - - -
 - - o o o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 o o o o o - - -
 o - o x x - - -
 o o o x o - - -
 o - o o o - - -
 - - o o o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -

 o o o o o - - -
 o x x x x - - -
 o o o x o - - -
 o - o o o - - -
 - - o o o - - -
 - - - - - - - -
 - - - - - - - -
 - - - - - - - -
 
```

# 成果物

https://paiza.io/projects/pxt0JcIO1HkK6Y6N7_rIbg?language=python3

以上。
情報セキュリティのリスクとコストとは

未経験からエンジニアになりたい人は、プログラミングから始める人が多いと思いますが、
エンジニアの仕事は、プログラミングだけではありません。そして、プログラミングだけでは、エンジニアになれません。同時にプログラミングが苦手でも、システム構成や開発の流れを理解するとエンジニアに近づきます！
今回は具体的な情報セキュリティのリスクとコストについて更に詳しく調べてみましょう！
![インスタスライド_2023031705.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23130/95e2d353-8925-6f87-724c-21166444ceff.gif)


# リスクとコストとは
望むべきセキュリティレベルとコストを検討し最適なレベルを決定する事

# レベルとコストの関係

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23130/1db3b344-9b7a-f5e2-887f-77d8ca159fdb.png)
望むべきセキュリティレベルとコストを検討し、最適なレベルを決定する必要がある。

# まとめ
情報セキュリティのリスクとコストとは、
望むべきセキュリティレベルとコストを検討し最適なレベルを決定する事

# 最後に
未経験の皆さん、若手エンジニアの皆さん、勉強方法について悩みがあればなんでも気軽に質問して下さい！
これからも記事を書いていきますので、モチベーションアップのためフォロー、イイねお願いします。
競技プログラミング個人的名問集

# 記事の説明
・__<font color="Red">文の中に解法ネタバレがあるので初見の方は注意してください!!!</font>__
・競技プログラミングの問題で気に入ったものを独断と偏見で列挙していくだけの記事
・Atcoder茶上位~水色下位相当の難易度の問題が多い？
・随時更新中

# 問題
[1] [ABC251E - Takahashi and Animals](https://atcoder.jp/contests/abc251/tasks/abc251_e)
DPを用いる問題, ナップザックDPの次に取り組むのが良さそう？

[2] [パナソニックプログラミングコンテスト2020 C - Sqrt Inequality](https://atcoder.jp/contests/panasonic2020/tasks/panasonic2020_c)
浮動小数点の取り扱いには注意

[3] [ABC212D - Querying Multiset](https://atcoder.jp/contests/abc212/tasks/abc212_d)
あまりにも賢こすぎる. 高度なデータ構造？いいえ必要ありません.

[4] [ABC200D - Happy Birthday! 2](https://atcoder.jp/contests/abc200/tasks/abc200_d)
最初に解いたときはゴリ押しDPかと思った. 言われてみれば確かにとなる. 初見で気づける人凄い.

[5] [ZONeエナジー プログラミングコンテスト “HELLO SPACE”C - MAD TEAM](https://atcoder.jp/contests/zone2021/tasks/zone2021_c)
最大値の最小化→アレ, その時の判定部分はどうやれば良い？

[6] [ABC198E - Unique Color](https://atcoder.jp/contests/abc198/tasks/abc198_e)
情報を上手く持ってDFS

[7] [ABC046C - AtCoDeerくんと選挙速報](https://atcoder.jp/contests/abc046/tasks/arc062_a)
少し数学寄りの問題？めちゃくちゃ場合分けするのかと思ったがそんなことはなかった.

[8] [No.2232 Miser's Gift](https://yukicoder.me/problems/no/2232)
ナップザックDPになにかをすれば良い. 

[9] [ABC105 D - Candy Distribution](https://atcoder.jp/contests/abc105/tasks/abc105_d)
典型的な数え上げらしい.

[10] [ABC178C - Ubiquity](https://atcoder.jp/contests/abc178/tasks/abc178_c)
難しい...

[11] [ABC194C - Squared Error](https://atcoder.jp/contests/abc194/tasks/abc194_c)
制約を見て

[12][ABC131E - Friendships](https://atcoder.jp/contests/abc131/tasks/abc131_e)
条件を満たすグラフを構築しろという問題.今まであまり見たことがない種類の問題.

[13][ABC040D - 道路の老朽化対策について](https://atcoder.jp/contests/abc040/tasks/abc040_d)
グラフの連結判定→アレ, そしてアレを使うためにはどうすれば良いか？

[14][ABC224D - 8 Puzzle on Graph](https://atcoder.jp/contests/abc224/tasks/abc224_d)
制約が小さめなので何らかの方法で全探索を行えそうな気がしたけどどうすればいいか分からなかった. 比較的簡単な解法の割に水diff中盤くらいなのであまり典型ではないのかもしれない(?).

[15][ABC202E - Count Descendants](https://atcoder.jp/contests/abc202/tasks/abc202_e)
根付き木に対するクエリを区間に対するクエリにするあのアルゴリズム!!!

[16][ABC167D - Teleporter](https://atcoder.jp/contests/abc167/tasks/abc167_d)
周期性を用いる解法に加えてもう１つの解法があるよ
Microsoft Teams の「トランスクリプション」が使えない時の対処法

## 症状
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/a1971027-168b-1dd5-fc91-e749d5590157.png)
「トランスクリプションの開始」を押すことができない、という状況に直面した時の対処法を以下にまとめました。

　なお、この設定は Teams の管理センターを開く必要が出てきます。読者さまが管理者でない場合、この記事をご所属組織の Teams の管理者に送って対処してもらってください。一方、この記事を読んでいる人が管理者である場合、以下を参考にしていただければと思います。

## Teams の管理センターで設定
Teams の管理センターを開くために、まず、Microsoft 365 の「管理」を開きます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/19f82375-0402-1493-5d41-6373c8c3b801.png)
次に、ナビゲーションメニューを展開し、最下部の三点リーダー（すべて表示）をクリックして展開すると、隠れていた「管理センター」のグループが現れるので、その中の "Teams" をクリックします（クリックする前に「ピン留め」しておくと便利です）
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/11cd4278-3c69-b490-6f03-b58adb8a19f5.png)
### ① 会議ポリシーから
Teams の管理センターを開けたら「会議」グループの下向き矢印をクリックして展開します。展開したら「会議ポリシー」が現れるので、こちらをクリックします。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/e571fb9c-7ddb-88f0-44bc-c9eba3b3ef9c.png)
会議ポリシーをクリックすると、以下の画像のような画面に移動します。この画面の「グローバル（…）」をクリックしてください。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/e22c49d5-63c1-2a16-5b2c-c734190595af.png)
すると、色々なトグル（切り替えスイッチ）が並んでいる画面に移動します。下の方にスクロールしていくと「レコーディングとトランスクリプト」というグループにたどり着きます。この「トランスクリプション」のトグルをオンに切り替えてください（下記画像参照）
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/0381052c-20df-d5d4-f108-63db16b1d3d5.png)
### ② 通話ポリシーから
通話ポリシーにも「トランスクリプション」のオン・オフを切り替える箇所があります。先程と同様の手順で、音声グループを展開し、「音声ポリシー」を選択します。音声ポリシーを選択すると、再び「グローバル（…）」が現れるので、これをクリックし、下記画像のように「トランスクリプト」のトグルをオンに切り替えます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/47ea08d9-97a9-61fa-be8c-e118dd5e549f.png)
### ③ ボイスメールポリシーから
今度はボイスメールポリシーに移動し、同様の手順で「グローバル」を選択して「ボイスメールのトランスクリプト」をオンに切り替えます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/533a5817-0d14-ee1f-e52c-bb930c21b6a0.png)
### ④ライブイベントポリシーから
最後に、ライブイベントポリシーからも①～③の同様の手順で「出席者用のトランスクリプト」のトグルを切り替えます。この伝言ゲームみたいな設定はココまでです。おつかれさまでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/4e12f8a8-7133-76f8-25a9-0719808f4299.png)


## まとめ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/9292faa2-147b-85da-3481-a066937f67d5.png)
トランスクリプションが使えない場合、これら計４か所がオフになっています。全てオンにした後、その反映には少し時間がかかるようなので、気長に待ってください（筆者はこの待ち時間がヒマだったのでこの記事を書いています。Teams 管理センターへは初見だとたどり着けないと思いました）

　また、予定されている会議を編集しておくと安心かもしれません。これに関しては試していないので推測ですが、元の会議の設定が引き継がれる可能性も考慮します。さらに念を入れて、Teams を再起動すると安心です。

　トランスクリプションもライブキャプションも、両方とも字幕機能ですが、前者には字幕を保存できる機能が備わっています。この機能は、議事録作成にも役立つはずなので、積極的に使ってみると良いでしょう。

## 参考
[Microsoft Teams ：なぜ今 トランスクリプト は会議ポリシーの既定値がオフになっているのか？](https://art-break.net/tech/?p=13931)
Firebase Authentication でログインしようとしたらThe requested action is invalid.と出てしまう件についての解決策

# 何が起きたか
ローカル環境では問題無し。
しかし本番環境でログインをしようとするとポップアップ先で`The requested action is invalid.`と表示され、ログインが出来ない。

# セキュリティ周りを確認
* [Firebase]>[Authentication]>[Settings]>[承認済みドメイン] 
しっかりと自身のドメイン`example.com`が入力されていることを確認。
* [Google Cloud]>[APIとサービス]>[認証情報]>[API キー]>[キーの制限]
今回のプロジェクトでは[ウェブサイトの制限]を選択。こちらもしっかりと`example.com`が入力されている。

# APIキーを無制限にするとなぜか動く
上記の[キーの制限]をなしにするとなぜか動く。ホワイトリストの書き方が悪いのかと思い色々と試すが結果は変わらず。

# 結論
[キーの制限]のホワイトリストに`https://PROJECT_ID.firebaseapp.com/*`を追加すると無事に動いた。
ログイン画面がポップアップ(あるいはリダイレクト)した際のURLはそちらになるのでホワイトリストへの追加が必要？なようだ。

# 反省点
ブラウザの開発者ツールでコンソールを確認するとしっかりとエラーの理由が表示されていた。
基本的な確認を怠らないようにしたい。
Microsoft 認定:Azure Administrator Associate (AZ-104) 取得までやったこと

## はじめに
今年2月に[Microsoft Certified: Azure Fundamentals (AZ-900)](https://qiita.com/ykeiko/items/44ff02f232fb4d4c24e3) を取得したものの、もう少しAzureサービス全体の知識を深めようと思いチャレンジしてみました。

## 資格概要
こちらをご覧ください。
https://learn.microsoft.com/ja-jp/certifications/exams/az-104/

## 私のレベル感
### Azure歴
2ヶ月間Azure特定サービス（FunctionsとかContainer Servicesとか）技術検証

### 取得資格
- AWS Certified Solutions Architect – Associate (2022年8月取得)
- [Microsoft Certified: Azure Fundamentals (AZ-900) (2023年2月取得)

## 勉強期間とかけた時間
- 2ヶ月弱
- 45時間くらい

## やった教材と学習のポイント
- [徹底攻略 Microsoft Azure Administrator教科書](https://book.impress.co.jp/books/1120101160)
    - まずざっと一周。理解しきれなかったり購入者特典の模擬問題等解いて苦手分野の箇所を読んだりしていた
    - 模擬問題は会員登録し質問に答えるとダウンロード可能
    - 2回解いて、試験2日前には7割程度の得点率だった
    - 実際の試験とかなり近い内容だったので是非活用を

- [【世界で14万人が受講】AZ-104: Microsoft Azure Administrator 試験対策講座](
https://www.udemy.com/course/az-104-microsoft-azure-administrator-jp/)
    - テキストで理解できなかったところや苦手分野の章のみ動画で確認

- [AZ-104 Microsoft Azure Administrator Exam Prep - MAR 2023](https://www.udemy.com/course/70533-azure/)
    - 演習テストのみ解いた
    - 英語
    - 2回解いて、試験前日には7割程度の得点率だった

- [MS公式「無料の練習用評価を受ける」](https://learn.microsoft.com/ja-jp/certifications/exams/az-104/)
    - 問題集
    - 英語
    - 問題を解き終えると、評価と共に苦手分野のセルフサービストレーニング(ラーニングパス)のリストを作成してくれる
        - 恐らくMicrosoft Learnアカウントが必要
- 学習のポイント
    - たくさんの問題を解くというより手に入る問題集をやりこむのがよさそう
        - 以前は練習問題を扱うUdemyの講座もいくつかあったようだが、最近その手の講座が続々と新規登録が停止となっているとのこと
    - 公式のラーニングパスも役立ったが、文章や図の日本語が不自然だったり読みづらい箇所が多々あるので、(数少ない)教材を複数参照して理解を深めるのがよさそう

## 所感
- 問題や出題傾向からAWSとの思想の違いが感じられて面白かったです
- 単純比較はできませんが、難易度はAWS Certified Solutions Architect – Associateよりは簡単と感じました
- 有効期限が受検日から1年なので、コスパという意味では悪く感じるかも。。
- それまでにExpertまでとるかは検討中