OmniAICreator/Qiita-1.07M huggingface dataset:
LaTeXの個人的便利だと思うコマンド集 

# 1.はじめに
大学生活の4年間でLaTeXを使いながら便利だなと思ったコマンド、小ネタを紹介する。なおcloud系での動作は確認していない。


# 2.usepackage{here}
```
\usepackage{here}
```
このパッケージを追加し、図や表の配置オプションにHと書くことで記述した場所に図や表を出力することができる。

そもそも図を挿入する時は次のように書く。

```
\begin{figure}[[位置]]
    \centering %図を真ん中に置く。
    \includegraphics[width=0.6\textwidth(オプション名)]{ファイル名}
    \caption{題名}
    \label{図番号}
\end{figure}
```

- 位置 について、ある文字を書いて図の指定を行う。ある文字とは、

|h|書いた所に図を置く|
-|-
|t|ページの一番上に図を置く|
|b|ページの一番下に図を置く|
|p|図のみを置く|

hを指定すれば書いた場所に図を置くとあるが実は書いた場所に図を置けない場合がある。その時にhereパッケージを追加してHを記述することで問題は解決する。

- オプション名について、近日公開
- ファイル名について、ファイル名を書けばいい。しかし英数字のみ。
- 題名について、これは図の題名を書けばいい。
- 図番号について、例えばレポートを書いていて文章中に図や表の番号を用いたい時があるだろう。後で図番号や表番号を変更した場合、文書中の番号も変更しないといけない。非常に面倒だ。そこで図に''ラベル''を付け、ラベルを参照するコマンドを書くことで図や表を面倒なく指定することができる。図番号と書かれている場所にラベル名を記述(日本語でも可)することでラベル付けできる。

# 3.usepackage{wrapfig}
```
\usepackage{wrapfig}
```
文章の真横に図を表示することが出来る。


# 4.usepackage{amssymb}とusepackage{amsmath}
```
\usepackage{amssymb}
\usepackage{amsmath}
```
これは呪いみたいなものでとりあえず書こう。


# 5.usepackage{physics}
```
\usepackage{physics}
```
これば本当に便利なパッケージである。
詳しい解説はこちら

https://qiita.com/kawabatayuuya/items/ccfb6f9766f5719b73ca




# 6.usepackage{multicol}
```
\usepackage{multicol}
```
これは文章を2段組やそれ以上の多段組にすることができるパッケージになっている。


# 7.usepackage{enumerate}
```
\usepackage{enumerate}
```
これは番号付きの箇条書きを記述することのできるパッケージになっている。もちろん・からはじまる普通の箇条書きも記述することができるので便利。


# 8.usepackage{empheq}
```
\usepackage{empheq}
```
これは連立方程式を書くこと以外は使っていないです。


# 9.usepackage{url}
```
\usepackage{url}
```
参考文献にURLを載せる時もあるだろう。URLをそのまま貼るとコンパイルエラーになる。URLの''_''が原因でエラーになるらしい。そこでこのパッケージを使うことでコンパイルエラーを回避できる。


# 10.usepackage{multirow}
```
\usepackage{multirow}
```
表を使うならとりあえずこれを書いておこう。
[このサイト](https://www.tablesgenerator.com/latex_tables)を使えば、表を簡単に生成することができる。


# 11.usepackage{ulem}
```
\usepackage{ulem}
```
文章に書く様々な線を記述することができる。

# 12.連立方程式の作り方
```
\usepackage{empheq}
```
を導入する。

```
\begin{empheq}[left=\empheqlbrace]{align}
    %数式を書く。
\end{empheq}
```

# 13.無理矢理1行飛ばす(おすすめしない)
```
\vspace{\baselineskip}
```

# 14.付録の書き方
```
\appendix
\def\thesection{Appendix\Alph{section}}
```

#15.参考文献の書き方
```
\begin{thebibliography}{9}
   \bibitem{} 
\end{thebibliography}
```


#16.参考文献
https://mirrors.ibiblio.org/CTAN/macros/latex/contrib/physics/physics.pdf
メールログが無い！ 〜 journald の抑制設定について

# maillog にあるはずのログが無い?!

ほかのメンバーから「メール送信の状況を調査してほしい」との依頼があったので、対象メールサーバー(Postfix)の /var/log/maillog を調べていたところ、その時刻にあるはずのメールログが無いという現象に出くわしました。


# 手がかりは messages に

あれこれ調べていたら、該当時刻付近の /var/log/messages に以下のようなログが記録されていることに気が付きました。

```:/var/log/messages
Aug 12 10:02:44 our-smtp-server journal: Suppressed 1140 messages from /system.slice/postfix.service
Aug 12 10:03:22 our-smtp-server journal: Suppressed 1202 messages from /system.slice/postfix.service
```

うむむ、 postfix.service からの 1140 件のメッセージが Suppress されている？ 「suppressed」を辞書で引くと、「抑制された」の意味。どうやら、何かの理由で Postfix のログ出力が抑制されているようです。

# journald による抑制

journald は systemd 環境下の標準的なログ管理サービスです。ログ出力が多すぎるときには、ディスクの空き容量が逼迫しないよう、ログの出力を制限できるようになっています。
メールログが消えた時間帯は、ちょうど別プログラムで大量のメールを送信していた時間帯でした。

journald ではデフォルトで以下の設定がなされています。

```:/etc/systemd/journald.conf
RateLimitInterval=30s
RateLimitBurst=1000
```

ここで、 RateLimitInterval はログを制限するための基準の時間、 RateLimitBurst はその基準時間に出力できるログの件数です。
つまり、30秒間に 1,000件以上のログ出力は抑制されるということです。

# ログ出力無制限に変更

journald.conf の RateLimitInterval を 0 にすることで、制限なくログを出力するようになります。

```:/etc/systemd/journald.conf
RateLimitInterval=0
RateLimitBurst=1000
```

また、 rsyslog の出力についても制限をはずします。

journald からの入力を受け付けている以下の箇所に、

```:/etc/rsyslog.conf
$ModLoad imjournal
```

制限を外すよう、 $imjournalRatelimitInterval の設定行を追加します。

```:/etc/rsyslog.conf
$ModLoad imjournal
$imjournalRatelimitInterval 0
```

このあと journald と rsyslog を再起動して、設定を反映させます。

```
sudo systemctl restart systemd-journald
sudo systemctl status systemd-journald
```

```
sudo systemctl restart rsyslog.service
sudo systemctl status rsyslog.service
```

これにより Postfix のログが抑制されずに出力されるようになりました。

Postfix に限らず、システムのログの一部が見当たらない場合は、 該当時刻の messages ログを一度確認してみましょう。 journald によって制限されているかもしれませんよ。
Xcodeのダウンロードとインストールに大幅な時間をかけてしまった話

こんにちは！！:relaxed:

学部時代にずっとQiitaの記事にお世話になりました！:fist:
Qiitaに訪れるエンジニアの皆さんや学生の方になにか小さくて簡単なことだけでも貢献したくて、自分自身開発中に起こった問題や解決できたことについてこれから投稿していこうと思います！！:clap:
# 目次

1.はじめに：App Storeのダウンロード問題
2.XcodeのバージョンとOSの互換性問題
　・Xcode 15の対応OS
　・Xcode 14への切り替え
3.ダウンロード後の容量問題：Xipファイルの展開
　・必要な容量とのギャップ
　・GPTからのアドバイス：2倍以上の容量
4.USBを使っての解決試み
　・32GB USBの容量不足
　・ディスクユーティリティでの対応
　・256GB USBの活用
5.ローカルと外部デバイスの容量の謎
　・展開中のトラブルと勘違い
6.結論：実際に必要だった容量

# 1.はじめに：App Storeのダウンロード問題

Swiftを使ってアプリ開発しようと思いXcodeを使用することにしました。
以前にApple Storeでダウンロードしたことがあったので今回もAppStoreでダウンロードしようとApple Storeへ。
前回ダウンロードした時はXcodeは10gbくらいだったと記憶していたので、今回もその容量以上に余裕を持ってストレージを頑張って増やしました。
しかし、どれだけのストレージ容量(14GB近く)があってもXcodeのダウンロードがうまくいきませんでした。たくさん調べた結果40GB必要な時もあるそうで...。
ですが、そんな容量空けられるほど余裕がなかったので(焦っていてどのファイルを減らそうにも諦めかけていた)試行錯誤の結果、同じ人が自分以外にもいるはずと思いついに以下の方法を見つけ、莫大なストレージ容量がなくてもダウンロードに成功しました！

[非常に助けて頂いたXcodeダウンロードの記事](https://it.fuwafuwasky.com/entry/2021/swift/xcode-yoryo/)


# 2. XcodeのバージョンとOSの互換性問題

最新バージョンのXcodeを使用したいと思いXcode15をダウンロードしました。
ですが、私のMacBook AirのOSと互換性がなかったのです(普通に考えて私のmacbook airがすごく古い..)。
Xcode15を使用するには13.5以降のOSが必要らしいと忠告が出ました。
しかし、私のOSは最新の状態でMonterey 12.7。
どのXcodeのバージョンなら私のOSのバージョンに互換性があるかを考慮して、Xcode 14のダウンロードに切り替えました。

[Xcodeのバージョン最小要件](https://developer.apple.com/jp/support/xcode/)

# 3. ダウンロード後の容量問題：Xipファイルの展開

Xcodeのダウンロードは成功したものの、新たな問題が...泣。
Xipファイルの展開時に必要な容量が足りなかったようです。ダウンロードできたのにずっとローカルでの展開ができませんでした。
最初はXipの容量だけ確保すれば良いと思っていたのですが、そう甘くはないですね。笑

# 4. USBを使っての解決試み

ローカルストレージ上での容量確保が難しくなったため、外部のUSBで展開を試みることに。
最初は32GBのUSBを使用しましたが、思ったよりも容量が必要で、結果的に足りませんでした。
さらに、USBを使用する前にディスクユーティリティでの調整も必要でした。結局、256GBのUSBを利用してやっとのことで展開が成功！

（この時すでに、Xcodeを使い開発を進めていこうと思い立ってやく五時間経過:cry:環境構築が一番大変です）


# 5. ローカルと外部デバイスの容量の謎

外部デバイスを使用しての展開を試みたと4.でも申し上げましたが、その時実はものすごく時間がかかってました..
外部デバイスを使用するとローカルの容量は占めないかと思っていたのですが、外部デバイスにダウンロード中ローカルのストレージも使用されていた。この不思議な現象に気づいたのは、Xipが展開中に停止した時だ。一瞬、何が起こったのか分かりませんでしたが、ダウンロード終了時にローカルのストレージの空き容量は元に戻っていました。

(ダウンロード中すごく時間がかかって暇だったのでちょっと発見したことを書きました)

# 6. 結論：実際に必要だった容量

最終的に、7GBのXipファイルを展開するためには、実際には22GB以上のローカルの容量が必要でした。この経験を通して、ソフトウェアのダウンロードや展開には想像以上の容量が必要になることが分かりました！

# おわりに!!

初めての投稿記事を読んでいただいてありがとうございました！
論理的に書けているか不安ですし、すごく拙い文章だと思います。
ただ、これからの自分の身に起きた問題を記録していきたいと思っているので、何か直すべきところがあれば教えていただければ幸いです。

今回は、異常に疲れたXcodeダウンロードの記録でした！
せっかくXcodeをダウンロードしたのだからこれから開発の方も頑張ります！

見てくれてありがとうございました！！誰かの力になれれば幸いです。
【Shell】パスのワイルドカード

# はじめに
このような場合に、UUIDの場所は指定せず、なんでもOKみたいにしたかった
```
/User/{ここのフォルダ名がUUID}/SampleProject
```

なんでもOK!をワイルドカードというらしい

# やりかた
`*`を置くことでなんでもOK!が実現できる

```
/User/*/SampleProject
```

# おわり
この辺のことはちゃんと習ったことがないので知らないことが多いです

# 参考記事
https://monologu.com/shell-wildcard/
OSXでNaturalDocsを使ってSystemVerilogのソースコード(RTL)からDocumentationを生成する

SystemVerilogのRTLのDocumentationを作成する場合、Doxygenを使う方法とNaturalDocsがあるらしい。ここでは NaturalDocs を使う方法についてまとめる。Apple Silicon (arm64) ではそのままではうまく動かないので回避策も述べる。おそらくX86マシンの WindpwsやLinuxで使う場合は問題ないはず。

## インストール

いくつか方法があるようだが、ここではBrewを使う。必要になる mono (.NET)もインストールされる。

```
brew install naturaldocs
```

Brewによるインストール自体は問題ないが、実行時に libSQLite.Mac.x64.so を参照してエラーになる。Intel Macでは問題ないかもしれないが、Apple SiliconのOSXでは libsqlite3.0.dylib を呼ぶように細工しておく


```
ln -s  /opt/homebrew/Cellar/sqlite/3.43.1/lib/libsqlite3.0.dylib /opt/homebrew/Cellar/naturaldocs/2.3/libexec/libSQLite.Mac.x86.so
ln -s  /opt/homebrew/Cellar/sqlite/3.43.1/lib/libsqlite3.0.dylib /opt/homebrew/Cellar/naturaldocs/2.3/libexec/libSQLite.Mac.x64.so
```

## 使い方

設定ファイルを置くフォルダと、出力先のホルダをさくせして実行すると、Doxygen同様に設定のテンプレートが作成される。

```
mkdir ndconfig
mkdir html
naturaldocs ndconfig
```

ndconfig/Project.txt を編集して、SVELTEコードの場所と出力先を設定する。相対パスの場合はProject.txtのある場所が起点となる。ちなみに設定ファイルは実行の際に書き換えられる事があるので注意。

```
Source Folder: ../../../verilog
HTML Output Folder: ../html
```

SystemVerilogでのコメントの記述例があまりなくて困るが、一般的な例は

```
/* Module: mux2to1
 *
 * Ports:
 *
 *    a   - Description of a
 *    b   - Description of b
 *    sel - Description of sel
 *    y   - Description of y
 */
module mux2to1 (input wire a, b, sel, output logic y);
```

Comments.txt でキーワードを追加するとコメントが書きやすくなる。

```
Comment Type: Register:
Alter Comment Type: Variable
   Plural Display Name: Register and Wire
   Keywords:
      Registers, Register

Comment Type: Wire:
Alter Comment Type: Variable
   Plural Display Name: Register and Wire
   Keywords:
      Wires, Wire
```

## 参照

- https://www.naturaldocs.org/
- https://www.naturaldocs.org/getting_started/getting_set_up/
- https://www.naturaldocs.org/polling/2022-05-30/SystemVerilog_Questions_Part_1/
- https://github.com/chiggs/UVM/blob/master/natural_docs/Config/Languages.txt#L288-L299
- https://en.wikipedia.org/wiki/Natural_Docs
- https://github.com/NaturalDocs/NaturalDocs
- https://github.com/NaturalDocs/NaturalDocs/blob/master/Engine/Source/Languages/Parsers/SystemVerilog.cs
- https://tanuki0629.hatenablog.com/entry/2018/12/30/234747
- https://tanuki0629.hatenablog.com/entry/2019/01/09/221618

## Monoのデバッグ

下記の環境変数をセットして実行すると、使おうとしている共有ライブラリの詳細を確認できる

```
export MONO_LOG_LEVEL=debug
export MONO_LOG_MASK=dll
```

## Doxygen

DoxygenはなぜかVHDLはサポートしている。SystemVerilog をサポートする Filter が一応あるのだが、試した範囲ではうまく動かなかった。このFilterは長らく更新もされていないし、利用例もみあたらなかったので深追いはしないことにした。
ngrokでローカルサーバーを外部公開 (躓いた箇所)

# はじめに
[ngrok](https://ngrok.com/) とは、ローカル開発環境で実行されているWebサーバーを外部からでもアクセス可能にできる優れもの。
普段web開発している人は、ローカルでサーバーを立ち上げた際、localhost:3000にアクセスして実装の確認をしていると思います。これをどこからでもアクセス可能にできるので、APIのテスト、外部サービスの連携、テストなどが簡単に行えます。

# ngrokを使用するに至る経緯
社内向けサービスを以下の構成で実装

フロント : CloudFront + S3 でデプロイ (整備済み)
バック : RDS + ECS でデプロイ　（未実装）

バックエンドのデプロイ環境が思いの外時間がかかってしまい、テストができない状況に........

テスターがローカルでバック、フロントのサーバーを立ち上げてテストも可能ですが、ローカルではうまくいっていたことがデプロイ環境だとうまくいかない....というのはよくある話

納期もギリギリでテストもできていない状況はやばすぎる。。。

ということで、私のPCをサーバー(ngork)にしてバックエンドのエンドポイントを生成し、
それをAWS上にデプロイしてテスト環境を作る といった強行手段を選びました。


# ngork導入
導入方法については先人の方々がとてもわかりやすく説明してくださっているのでそちらを参考に
- [ngrokが便利すぎる](https://qiita.com/mininobu/items/b45dbc70faedf30f484e)
- [【プログラマー便利ツール】ngrokの使い方](https://www.geeklibrary.jp/counter-attack/ngrok/)

# テストまでの流れ
- バックエンドをローカルサーバーで立ち上げる 
        - http\://localhost:8080
- 上記のportで以下のコードを実行
        - ```ngrok http 8080```

すると以下のような画面が表示される

![スクリーンショット 2023-09-28 20.43.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566179/2031613e-f09c-86ad-abf6-c9a715b1698b.png)
このForwarding　の横に書いてある箇所がランダムで生成されたどこからでもアクセスできるリンク
ちなみに、Web Interface のリンクにアクセスすると、リクエストのログが見れたりする
↓ こんな感じ
![スクリーンショット 2023-09-28 21.10.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566179/279e44f5-bcf8-d85a-c8c2-d75da77ee65d.png)

このランダムで生成されたURLをエンドポイントに指定してaxiosをインスタンス化すればAWSにデプロイしたwebサイトからでもAPIの疎通確認がどこからでもできるようになります。

# 躓きポイント
### GET, PUTができない.....
リスト取得のAPIを発火させた際に、ステータスコード200が返ってくるのに中身が返ってこない....
開発者ツールでレスポンスを確認したところ、謎のドキュメントが返ってきてました。

```(ERR_NGROK_6024)```

調べてみるとどうやらngrokを使用する際はヘッダーに
````
ngrok-skip-browser-warning: true
````
を追加しないといけないとのこと。 なるほど、これを追加して再度リクエストを...
結果、今度はcorsエラーが発生。
バックエンドのcorsは一時的にどのhostからでもはいれるように設定しているはずなのにcorsエラーが発生してしまいました。

ktor.docsを確認し以下の記述を発見
````
install(CORS) {
    allowHeadersPrefixed("custom-")
}
````

カスタムヘッダーを使用する際はどうやらallowHeadersPrefixedも追記しないといけないようでした。
バックエンドをいじいじして下記のコードを記載
```
allowHeadersPrefixed("Ngrok-Skip-Browser-Warning")
```

上記の対応で無事、ngrok経由でAPIを叩けるようになりました🎉

# まとめ
- ヘッダーに```ngrok-skip-browser-warning: true```を追加する必要がある。
- corsエラーを回避するため```allowHeadersPrefixed("Ngrok-Skip-Browser-Warning")```を追加する必要がある。



上記の対応を行えば問題なく動作するかと思います！
同じエラーに遭遇した方はぜひ参考にしてみてください！


とりあえず、AWSの構築を早く終わらせてくれ.......

以上！
ABC084-C-SpecialTrains を初心者目線で解いていく

## 問題の概要
この問題は、Atcoder国に新しくできた鉄道の各駅から最後の駅までの最短到達時間を求めるものです。各駅から次の駅までの列車は、特定の時間S[i]からF[i]秒おきに出発し、C[i]秒で到達します。




## 問題の解説とコード
### 問題の詳細
・N個の駅があり、1からNまで番号がつけられています。
・各駅iから駅i+1への列車は、開通式開始S[i]秒後に最初に出発し、その後はF[i]秒おきに出発します。
・列車の移動時間はC[i]秒です。
・各駅から最後の駅Nまでに到達する最短時間を求めます。

### 1.入力
```C++:
int N;
cin >> N;
for(int i=0;i<N-1;i++) cin>>C[i]>>S[i]>>F[i];
```
Nは駅の数。
各駅から次の駅までの列車の情報C[i], S[i], F[i]を入力します。

### 2.各駅から最後の駅までの最短到達時間の計算

```C++:
for(int i=0;i<N;i++){
    int ans=0;
    for(int j=i; j<N-1;j++){
        ans=max(ans, S[j]);
        int d= ans - S[j];
        if(d%F[j]) d = F[j] - (d%F[j]);
        else d=0;
        ans += (d+C[j]);
    }
    cout<< ans <<endl;
}

```
・外側のループで、各駅iから出発する列車について考えます。
・内側のループで、駅iから最後の駅Nまでの最短到達時間ansを計算します。
・ansは、次の駅に到達するための出発時間を表し、S[j](開通式開始時間)と比較して大きい方を選びます。
・dは、次の列車が出発するまでの待ち時間を計算します。dがF[j]で割り切れない場合、次の列車までF[j] - (d % F[j])秒待つ必要があります。
・最終的に、ansに待ち時間dと移動時間C[j]を加えて、次の駅に到達する時間を更新します。
・各駅から最後の駅までの最短到達時間ansを出力します。



## コード
```C.cpp:
#include <bits/stdc++.h>
using namespace std;
int C[505], S[505], F[505];

int main(){
  int N;
  cin >> N;
  for(int i=0;i<N-1;i++) cin>>C[i]>>S[i]>>F[i];

  for(int i=0;i<N;i++){ 
    int ans=0;

    for(int j=i; j<N-1;j++){
      ans=max(ans, S[j]);

      int d= ans - S[j];
      if(d%F[j]) d = F[j] - (d%F[j]) ;
      else d=0;

      ans += (d+C[j]);
    }

    cout<< ans <<endl;
  }

}
```

## まとめ:
この解法であれば計算量が、O(N×N)で解くことができる。

## 参考記事
[はまやんさんの記事](https://blog.hamayanhamayan.com/entry/2018/01/01/134654)
社内用 AI 搭載チャットボットを Teams に設置しよう！【パート 5/5】

### この記事は続きです
# `大まかな流れ`
＿＿＿[パート 1](https://qiita.com/S_O_ka/private/f512a8f1845a44fb9659) ＿＿＿
Ⅰ 設置条件
Ⅱ Microsoft Teams に Power Virtual Agents アプリを追加
Ⅲ ボットを設置する

＿＿＿ [パート2](https://qiita.com/S_O_ka/private/850b176c8175cfe9c8cd)＿＿＿
IV 既存のトピックを編集する

＿＿＿ [パート3](https://qiita.com/S_O_ka/private/9ce4e82debceb6cb220d)＿＿＿
Ⅴ 公開されたデータから取り込む

＿＿＿ [前回のパート4](https://qiita.com/S_O_ka/private/e0a941532f4dcc5bc4be)＿＿＿
Ⅵ 組織内のリストを回答として返す

＿＿＿ [★ 今回のパート5 ★]＿＿＿
Ⅶ チャットボットを公開する


# Ⅶ いよいよ最後！チャットボットを公開
まずはチャットボットが関連付けられているチームのメンバーだけに公開します。
その後、Teams 管理者に承認されれば、すべてのユーザーがボットにアクセスできるようになります。

## まずは、チャットボットが関連付けられているチームのメンバーに公開

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/fb94b261-39de-de73-3098-892af2d77c9e.png" width=90%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/cd3a19c3-ef5b-6e37-b11b-b84e3e0fb1dd.png" width=80%">

「詳細の編集」をクリックすると、アイコンの色やデザインを変えたり、説明を追加したりできます。

## 組織全体で利用するには、その後で Teams 管理者から承認をもらう
「可用性オプション」をクリックすると、チームに追加したり、**組織内の全員に表示するために Teams 管理者から承認をもらうためのメッセージが送信できます。**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/c28069f6-5893-74ee-9c2a-3cfae55710e7.png" width=80%">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/67c1a251-2c7d-8d6e-4ff6-b2f891265ba2.png" width=80%">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/b4859142-48a1-bd6e-cb1a-ef8bb9f0cfc5.png" width=80%">



### 最後に...
いかがでしたでしょうか。

社内での同じような質問に悩まされている部署は、活用場面が多いと思います。

また、「分析」では、ボットのパフォーマンスや使用状況を確認できますので、修正や改善方法を検討するのに役立ちます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/0c1dec6d-0744-93a2-a2d5-eb39951979ca.png" width=80%">

Teams にアクセスできる環境であれば特別なライセンスは必要なく、シンプルなフローであればボットの作成も直感的にできますのでハードルは低いと感じました。
Power Automate などの他プラットフォームと組み合わせれば、複雑なフローも実現できて可能性は無限大です。

これからも、どんな場面で活用可能かをイメージしながら、調査を進めてみたいと思います！
html,cssコーディングでの細かい疑問を解決しよう


実際に業務で使用した解決方法を、自身の振り返り用としても、同じような対応を行いたい人にも利用していただけるよう記録しておく。


## cssでの修正
1. 背景色付きのテキストを改行しても左右のpaddingを保持したい場合
[解決に用いた参考サイト](https://web-dev.tech/front-end/css/apply-horizontal-padding-on-line-break/)

1. CSSで要素を中央寄せしたい場合
[解決に用いた参考サイト](https://www.sejuku.net/blog/55523)

1. メディアクエリをよりスマートに記述したい場合
[解決に用いた参考サイト](https://zenn.dev/moneyforward/articles/css-range-syntax)
・「未満」や「より大きい」の表現ができる
・記述を短くできる


## jsでの修正
1. スクロールでのフェードインをjsで実装したい場合
[解決に用いた参考サイト](https://newsite-make.com/javascript-fadein/)


1. ローディング画面を実装したい場合
表示するロゴや文字、秒数や色などで実装方法は異なりますが、下記参考サイトの組み合わせで実装しました。
    1. 画像の表示非表示をjsで切り替える
[解決に用いた参考サイト1](https://web-engineer-wiki.com/javascript/loading/)

    1. 待機処理をしたい場合のsetTimeout関数について
[解決に用いた参考サイト2](https://kasumiblog.org/javascript-loding/)
[解決に用いた参考サイト3](https://it-kyujin.jp/article/detail/1046/)
[解決に用いた参考サイト4](https://www.sejuku.net/blog/24540)

1. iOSでsafariのみ一部javascriptが実行されない場合
[原因解明に用いた参考サイト1](https://choppydays.com/ios%E3%81%A7safari%E3%81%AE%E3%81%BF%E4%B8%80%E9%83%A8javascript%E3%81%8C%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84%E7%8F%BE%E8%B1%A1%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/)

    ※ iOS9.0でアニメーション動かない場合の対処方法
    ・let→varにする
・`addEventListener(scroll`の前後で`console.log(slideInTarget[i].getBoundingClientRect().top)`を実施
→値が取れているかを判断する
・for文の外に発火要因（scroll）を持ってくる

1. スライダーにおいて、画像を連動してスライドさせたい場合
[解決に用いた参考サイト1](https://b-risk.jp/blog/2022/04/swiper/#07)
[解決に用いた参考サイト2](https://blog.gurunpa.com/swiper-filtering)
・上記のサイトには様々なスライダーの記述方がまとめてあります
***
[※簡易的なjsの実装において参考にしたサイト](https://wp-p.info/tpl_rep.php?cat=js-beginner&fl=r12)
***

以上のように、コーディングを進めていくなかで様々な種類の修正が発生する。人によって対処法は異なるが、できるだけ早く、スマートなコーディングができるようにしたい。
Javaで「日時のエポックからのUTCミリ秒値を取得する」の動作を確認してみた

# 概要

Javaで「日時のエポックからのUTCミリ秒値を取得する」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/start/calendar/index6.html

# 実装

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

class TestCalendar5{
  public static void main(String args[]){

    Calendar calendar1 = Calendar.getInstance();

    System.out.println("日時1を2006/05/08 09:45:10に設定します");
    calendar1.clear();
    calendar1.set(2006, 4, 8, 9, 45, 10);
    long millis1 = calendar1.getTimeInMillis();
    System.out.println("エポックからの経過ミリ秒の値は" + millis1 + "です");

    Calendar calendar2 = Calendar.getInstance();

    System.out.println("日時2を2006/05/11 12:58:15に設定します");
    calendar2.clear();
    calendar2.set(2006, 4, 11, 12, 58, 15);
    long millis2 = calendar2.getTimeInMillis();
    System.out.println("エポックからの経過ミリ秒の値は" + millis2 + "です");

    long diff = millis2 - millis1;
    System.out.println("日時の差は" + diff  + "ミリ秒です");

    diff = diff / 1000;    /* 秒以下切捨て */

    long se = diff % 60;
    diff = diff / 60;

    long mi = diff % 60;
    diff = diff / 60;

    long ho = diff % 24;
    long day = diff / 24;

    System.out.println(day + "日と" + ho + "時" + mi + "分" + se + "秒");
  }
}
```

以下のコマンドを実行しました。
```
$ javac TestCalendar5.java 
$ java TestCalendar5 
日時1を2006/05/08 09:45:10に設定します
エポックからの経過ミリ秒の値は1147049110000です
日時2を2006/05/11 12:58:15に設定します
エポックからの経過ミリ秒の値は1147319895000です
日時の差は270785000ミリ秒です
3日と3時13分5秒
```

# まとめ
何かの役に立てばと。
FoundryでMulti-Factor Authentication（多要素認証）を設定する方法

# 目次
1. はじめに
1. 設定方法
1. 最後に

# はじめに
VoltMX Foundryでは、環境に入る際にMulti-Factor Authentication（以下MFAに略）を有効にしてログインをすることが可能です。

MFAを有効にすると、Foundryへログインする際、通常通りログインをした後、以下のように認証コードを求められるようになります。
セキュリティを強化したい方などは是非参考にしてみてください。
![スクリーンショット 0005-09-28 19.20.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/95bd9bd4-d494-fbc7-0ad7-cd10ca3ecb7a.png)

早速設定方法を紹介していきます！

# 設定方法
前提として、MFAを設定できる権限はOwner権限のユーザーのみとなります。

## Owner権限でMFAを設定

Owner権限がFoundryの環境にログインしたら、
左メニューのSettingsを開き、Accounts->Multi-Factor Authenticationをクリックしましょう。

MFAを有効にするかどうか選択できる箇所が表示されるため、
有効にしたい場合は「Yes」、無効にしたい場合は、「No」に設定しましょう。

![スクリーンショット_0005-09-28_19_24_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/de4aef03-aadd-0e26-18c0-3c4e72207381.png)

MFAを有効にした場合、
メンバーが対象の環境にアクセスしようとすると、以下のようにMFAをアクティベートするよう求められるようになります。
![スクリーンショット 0005-09-28 19.30.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/a4d2d720-4bf9-5c6b-b6d8-2e50da8469e3.png)

## アクティベートする
MFAが有効になった環境にメンバーがアクセスするには、
次の手順でアクティベートを行う必要があります。

環境にアクセスすると、アクティベートを促すポップアップが表示されるため、
Activateボタンをクリックします。
![スクリーンショット 0005-09-28 19.30.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/a4d2d720-4bf9-5c6b-b6d8-2e50da8469e3.png)

自分のアカウントのセキュリティ設定画面が開くため、Activate MFAのボタンをクリックします。
![スクリーンショット_0005-09-28_19_32_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/4387905b-7810-a9ac-22a9-c4ed329d4201.png)

電話番号とサブメールアドレスを入力するポップアップが表示されるので、それぞれ入力してNextをクリックします。
※この後入力したメールアドレス宛にコードが届くためメールが確認できるアドレスを設定してください

![スクリーンショット_0005-09-28_19_34_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/3ac46424-88b0-1fdf-c106-a93e7a5a258c.png)

Nextをクリックすると、コードを入力する画面が表示されます。
先ほど入力したメールアドレス宛にコードが届いているため、そのコードをコピペしてください。
![スクリーンショット_0005-09-28_19_42_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/9f44a733-fe04-da0f-6953-2d93f21f9e36.png)

認証に成功すると、QRコードが表示されます。
Google Authenticatorなどの認証アプリでQRをスキャンし追加を行い、
認証コードを2つ入力する欄があるため、
表示された順番にAuthentication Code1と2にそれぞれ入力を行ってください。
※もし入力ができずに認証エラーになってしまう場合は、削除してもう一度QRスキャンして追加を行ってください。
![スクリーンショット_0005-09-07_10_16_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/899f2bce-cd4a-cf1d-9e2a-1c8f891fd06e.png)

Google Authenticatorのインストール方法などはこちらをご参考ください。

https://support.google.com/accounts/answer/1066447?hl=ja&co=GENIE.Platform%3DiOS&oco=0

認証コードが入力できたら、Activateを押して設定完了となります。

アクティベートが完了したら、環境アクセス時に以下のように認証コードが求められるようになりますので、
以降はGoogle Authenticator認証アプリでコードを確認し入力を行うようにしてください。

# 解除方法
MFAの解除方法についても紹介します。

Owner権限で環境にアクセスし、設定を「No」に変更すれば完了です。
![スクリーンショット_0005-09-28_19_24_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/de4aef03-aadd-0e26-18c0-3c4e72207381.png)


# 最後に
今回は、MFAを設定する方法を紹介しました。
個人的には認証コードを2つ入力する箇所で、2つ目に何を入力すれば良いかわからず混乱しましたが、
案内文を読めばしっかりと説明されているため、安心して進めてくださいね！:thumbsup:

# 参考
https://opensource.hcltechsw.com/volt-mx-docs/docs/documentation/Foundry/voltmx_foundry_user_guide/Content/MFA_for_CLI.html
MetaMaskインストール方法

## MetaMaskインストールサイトにアクセス
1. Chromeブラウザで[https://metamask.io/](https://metamask.io/)にアクセス。
1. 左下の`Download for Chrome`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/0628ae75-337c-1d5b-7e0d-0e0055c7106b.png)

## Chromeに追加
1. `Chromeに追加`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/0cb7f089-6b14-cc8b-530d-b1b5b1701351.png)

2. ポップアップの`拡張機能を追加`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/b5365bdb-5200-c1a5-9715-206e7e572807.png)

## 新規ウォレットを作成
1. 翻訳サイトなどを活用して[利用規約](https://consensys.net/terms-of-use/)を読む
1. `I agree to MetaMask's 利用規約`をチェック
1. `新規ウォレットを作成`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/bf5a16e3-dc01-8154-fa2d-13242cbc0d55.png)
1. 記載事項を読んで、`同意します`にチェック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/d99ddc0a-f7c7-1550-ac98-bd6fcbebe08b.png)

## パスワード作成
1. パスワードを入力する。このパスワードは、今後MetaMaskを立ち上げる都度利用するものとなる。
1. `私はMetaMaskがこのパスワードを復元できないことを理解しています。`にチェック
1. `新規ウォレットを作成`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/95b64867-b1b5-757f-87d0-556aaa4d8b7c.png)

## ウォレットの保護
1. 動画を見て、シークレットリカバリーフレーズとウォレットを安全に保つ方法を勉強する
1. 記載事項をよく読む
1. `ウォレットの安全を確保(推奨)`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/25e75a7b-3604-a339-8c8f-5571b872a77d.png)

## シークレットリカバリーフレーズを保管
1. `シークレットリカバリーフレーズを公開`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/e4305427-d9b9-e0a5-c95b-79cdfe8751f4.png)

1. 表示される文字列をどこかに大切に保管し、`次へ`をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/7f19d3d0-1bcd-3184-c1da-d934ba17b709.png)

## シークレットリカバリーフレーズの確認
1. シークレットリカバリーフレーズの一部が空欄の状態で表示される
1. 先ほど保管したシークレットリカバリーフレーズをもとに空欄を埋める
1. `確認`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/0a98bbb6-8e9c-7caa-b732-c7ab056a067c.png)

## ウォレット作成完了
記載内容を読んで、`了解`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/fe5775e6-0032-7767-e5f0-bf47804bd2c1.png)

## ブラウザにピン留め
1. 記載の説明を参考に、ブラウザにピン留めする。
1. `次へ`をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/4a6bcfd6-5620-d1c2-2f0d-c86b49b90ffa.png)

1. `完了`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/db588cc9-565c-1013-8bcd-e000cc5b3b7f.png)

## ウォレットが表示される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/7b1f1b2f-b0be-5e19-b6f5-26a8b3603fc9.png)

ピン止めのアイコンをクリックしても、同内容が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/c11d02d2-fe10-60f4-c1d1-ef38a4d08ea1.png)
エラー対処：com.sun.star.lib.uno.environments.remote.Job.remoteUnoRequestRaisedException

バージョン情報
jdk 17
LibreOffice v4.6.1
jodconverter-local v4.4.6

---

jodconverter-localを用いてwordファイルをpdfに変換するときに次のエラーが出ました。

```
ERROR [2023-09-08 16:23:47,615] org.jodconverter.local.task.LocalConversionTask: Local conversion failed.
! com.sun.star.uno.RuntimeException: 
! at com.sun.star.lib.uno.environments.remote.Job.remoteUnoRequestRaisedException(Job.java:173)
! at com.sun.star.lib.uno.environments.remote.Job.execute(Job.java:139)
! at com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:334)
! at com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:303)
! at com.sun.star.lib.uno.environments.remote.JavaThreadPool.enter(JavaThreadPool.java:87)
! at com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge.sendRequest(java_remote_bridge.java:636)
! at com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.request(ProxyFactory.java:146)
! at com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.invoke(ProxyFactory.java:128)
! at jdk.proxy2/jdk.proxy2.$Proxy144.gotoRange(Unknown Source)
! at org.jodconverter.local.filter.PagesSelectorFilter.selectTextPages(PagesSelectorFilter.java:226)
! at org.jodconverter.local.filter.PagesSelectorFilter.doFilter(PagesSelectorFilter.java:112)
! at org.jodconverter.local.filter.AbstractFilterChain.doFilter(AbstractFilterChain.java:110)
! ... 10 common frames omitted
! Causing: org.jodconverter.core.office.OfficeException: Could not apply filter org.jodconverter.local.filter.PagesSelectorFilter.
! at org.jodconverter.local.filter.AbstractFilterChain.doFilter(AbstractFilterChain.java:114)
! at org.jodconverter.local.filter.AbstractFilterChain.doFilter(AbstractFilterChain.java:91)
! at org.jodconverter.local.filter.DefaultFilterChain.doFilter(DefaultFilterChain.java:98)
! at org.jodconverter.local.task.LocalConversionTask.modifyDocument(LocalConversionTask.java:167)
! at org.jodconverter.local.task.LocalConversionTask.execute(LocalConversionTask.java:118)
! at org.jodconverter.local.office.LocalOfficeManagerPoolEntry.doExecute(LocalOfficeManagerPoolEntry.java:120)
! at org.jodconverter.core.office.AbstractOfficeManagerPoolEntry.lambda$execute$0(AbstractOfficeManagerPoolEntry.java:80)
! at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
! at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
! at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
! at java.base/java.lang.Thread.run(Thread.java:833)
```

実装コードでは変換後に出力するページをPageSelectorFilterを使って指定していました。
（次のページの最初のコードブロックにある書き方）

https://github.com/jodconverter/jodconverter/wiki/Using-Filters

変換元のwordファイルと失敗したときの状況を見比べると、PageSelectorFilterで指定したページの最後で表の途中で改ページされているときにこのエラーが発生しているようでした。

更に詳しい原因まではわからなかったのですが、出力するページを指定する書き方を、上記のページの最後のコードブロックにあるようにcustomPropertiesを使ったものに変更することで解消しました。
変換先ファイルの形式がPDFだけならこちらの方が推奨されているようです。
社内用 AI 搭載チャットボットを Teams に設置しよう！【パート 3/5】

### この記事は続きです
# `大まかな流れ`
＿＿＿[パート 1](https://qiita.com/S_O_ka/private/f512a8f1845a44fb9659) ＿＿＿
Ⅰ 設置条件
Ⅱ Microsoft Teams に Power Virtual Agents アプリを追加
Ⅲ ボットを設置する

＿＿＿ [前回のパート2](https://qiita.com/S_O_ka/private/850b176c8175cfe9c8cd)＿＿＿
IV 既存のトピックを編集する

＿＿＿ [★ 今回のパート3 ★]＿＿＿
Ⅴ 公開されたデータから取り込む



# Ⅴ 公開されたデータから取り込む

想定される質問と回答を一つ一つ入力する時間を削減するため、オンラインで公開されたリソースをボットに挿入できます。

**ただし、Microsoft Learn でも公開されている通り、下記を満たす必要がありますので注意しましょう。**
・Web ページまたはサポートされているファイルの種類を指している
・インターネット上の誰でもアクセス可能
・ユーザーがログインする必要はない
・HTTPS を使用している (https:// で始まる）

※OneDrive や SharePoint は、閲覧にサインインが必要ですので取り込めません。

では早速、オンラインで公開されているデータ（質問と回答）を取り込んでみましょう。

**トピックの「提案された」-> 「開始する」をクリック**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/e3af4862-b02b-b899-6acc-0709bed4274e.png" width=90%">

**オンラインコンテンツへのリンク（ファイル拡張子を含めた、ファイルの場所の完全な URL）を入力し、「追加」-> 「開始」をクリック**

対応しているファイルの種類：.csv, .xlsx, .tsv, .pptx, .docx, .txt, .pdf

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/12adcdb4-9ce7-5454-7dec-54ef1a08bc31.png" width=90%">

しばらく待つとインポートが完了し、17 個のトピックが作成されました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/851c8049-84b0-431d-60e8-42c625a02926.png" width=90%">

試しに一つクリックして内容を確認してみると、ノードが自動作成されているのがわかりますね。
**問題なければ「トピックに追加」をクリックします。**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/b714d030-6c8d-b90f-3832-503ed9cd214c.png" width=90%">

一括でトピックに追加することも可能
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/fb6a379d-e737-53ec-6387-1fd6dbd97dbf.png" width=90%">

**既存のトピックに追加されました！**
ここで名前をクリックすると、トリガー フレーズやノードの追加など、編集が可能です。
編集が終わったら状態を「オン」にすると、ボットとして活用されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/024f0b4b-e30b-59d2-f4b6-84fd325e25ec.png" width=90%">

**次の[パート４](https://qiita.com/S_O_ka/private/e0a941532f4dcc5bc4be)では、オンラインでは公開されていない組織内のリストを回答として返すように設定していきます。**

> Microsoft 公式マニュアル
https://learn.microsoft.com/ja-jp/power-virtual-agents/advanced-create-topics-from-web
社内用 AI 搭載チャットボットを Teams に設置しよう！【パート 2/5】

### この記事は続きです

# `大まかな流れ`
＿＿＿[前回のパート 1](https://qiita.com/S_O_ka/private/f512a8f1845a44fb9659) ＿＿＿
Ⅰ 設置条件
Ⅱ Microsoft Teams に Power Virtual Agents アプリを追加
Ⅲ ボットを設置する

＿＿＿ [★今回のパート2★]＿＿＿
[IV 既存のトピックを編集する](#ⅳ-既存のトピックを編集する)



# Ⅳ 既存のトピックを編集する

「トピック」で、会話の流れ（質問と回答）を定義します。

### ・既存で用意されたテンプレートを利用
### ・公開されたデータから取り込む
### ・ゼロから作成
の3種類があります。

#### まずは、既存で用意されたトピックを見てみましょう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/645f04ff-152c-5e79-f603-d10808c85f65.png" width=90%">

状態を「オン」「オフ」に切り替えられるものは、使用するかどうか選べます。
「常にオン」のものはオフにはできませんが、内容を変更することが可能です。

まず、「レッスン 1 - 簡単なトピック」をクリックして、中身を確認してみましょう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/ee8141e1-5293-456e-6c07-881ea619a8ce.png" width=50%">

```
1. トリガーフレーズ（閉店時間、開店時間、店舗営業時間、通常の営業時間）が入力されると、
2. メッセージが表示され、
3.「会話の終了」というトピックに移行する（このトピックは終了）
```
ことがわかりますね。

それぞれ、実際に使えるように編集してみましょう。
右側の「︙」をクリックして編集したり、ボックスに直接入力します。

●トリガー フレーズには、ユーザーが質問する可能性のあるフレーズを入れます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/7c32ddba-6b7d-4ad5-57fb-6438ddc691d2.png" width=50%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/3212256d-3af2-1814-9102-40b398e1e3b5.png" width=70%">


●メッセージには、トリガー フレーズが入力されたときに表示したいメッセージを直接入力します。
右側の「︙」をクリックすると削除できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/fa7db97b-10cd-98c1-6466-a8addca4b45d.png" width=40%">

●ノードの追加
アクションなどを追加したい場合、直線の真ん中より少し上にカーソルを合わせると
 ＋ マークが表示されてノード（行程）を追加することができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/2022ae7d-6fa3-8a1a-e7ef-de271401466c.png" width=40%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/bf77ffe3-a429-fae6-d0c4-bfd6a6940945.png" width=40%">

いったん、こんな感じで完成しました！↓

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/e074f901-4c20-d3eb-fdb5-7c07210039d9.png" width=40%">

上部メニューの「詳細」でトピックの名前を変更後に「保存」したら、「ボットのテスト」で試してみましょう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/fd0a03c5-dd19-f5e8-99b0-b933f6c1626b.png">

「海外で携帯は使える？」と入力してみたところ、答えが返ってきました！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/385186de-6505-45cf-27d3-dc4655eda4b0.png" width=40%">

**次の[パート3](https://qiita.com/S_O_ka/private/9ce4e82debceb6cb220d)では、時短方法をご紹介**
こんな感じで、想定される質問と回答をトピックとして入力していきます。
ただ、一つ一つ手入力していくのは、大変な時間と労力を要します。
次の記事では、公開されているデータや Excel などを取り込む方法をご紹介します。

> Microsoft 公式マニュアル
https://learn.microsoft.com/ja-jp/power-virtual-agents/authoring-template-topics
kinesis advantage360をm1macbookに繋げて「かな」「英数」変換ボタンを設定したい。

advantage360を購入しmacbookに接続して使用したいと考えたが、「英数」と「かな」のキーがないので、設定しようと思いました。

20240513
色々試行錯誤して、うまくいったのでここにメモします。

まず、macの英数とかなのボタンが
https://kinesiscorporation.github.io/Adv360-Pro-GUI/
の、公式サイトで指定するときに、なんのボタンかわからないので色々調べていたらLANG1とかLANG2のボタンがそれに当たるらしい。

それをヒントに検索してみると
https://github.com/zmkfirmware/zmk/issues/1236
みたいなところを見つけた。

ここを翻訳して、なんとなく理解すると、英数とかなボタンが指定できない設定になっているらしい。
それをまず指定できるように設定を変更しないといけないらしい。
NKR0

したの方に、それを訂正した人のリンクが貼ってあった
tetsuh pushed a commit to tetsuh/Adv360-Pro-ZMK that referenced this issue on Jul 14, 2023
Turn off NKRO to try to get LANG keys to work …
8e3512b
  zmkfirmware/zmk#1236
  ここ、

  
そこに飛んでみると
https://github.com/tetsuh/Adv360-Pro-ZMK/commit/8e3512ba85a4b14663f15792f15d360c2bde71ed
のページが開く。

どうやら
config/boards/arm/adv360/adv360_left_defconfigとrightの部分を変更する必要があるらしい。
53行目の
CONFIG_ZMK_HID_REPORT_TYPE_NKR0=yのyの部分をnにすればいいらしい
leftとrightの両方のファイルの同じ部分を訂正して、上書きする。

そうすると、
https://kinesiscorporation.github.io/Adv360-Pro-GUI/
のGUIの部分で、キーを指定するときLANG1やLANG2などが指定できるようになっている。

これを割り当てたいキーで指定してcommit change

ちなみに
英数のキーの方LANG2で、かなのキーの方がLANG1でした

これをいつも通り、ファームウェアにして書き込むと、英数や仮名のモード切り替えがうまいこといきました。

ワンボタンでなくてもこれの切り替えができるけれど、yabaiとshkdのショートカットとかとぶつかり出して、えらいことになっていたので、うまくいってよかったです。


あと、書き込みの時はキーボード付属のUSB-Aと-Cの変換コネクタを使うとうまくUSB認識しませんでした。
macの純正の変換ケーブルで接続すると書き込むことができました。

------------------
以下は迷っていたときのもの（一応残しておきます）

ただ、Control＋Shift＋LキーやControl＋Shift＋Jキー
の３つをおす必要があるため、その設定方法がわかりませんでした。


ZMKというソフトをしようして、キー設定するのですが、control+何か　のキーについては、&kpを選択してLCを選択するとcontrolキープラス何かのキーを同時に押すという設定はできるのですが、control以外と何かの同時押しや、3つの同時押しはどのようにして設定するかが、いまいちわからないので、調べてみました。


&kpではなくて&mtというのを選択すると、文字が二つ選べてcontrolとshift,もう一つをLとかにしたらいけるかなと考えたらできませんでした。


&mtというのはMod-Tapという機能で
&mt LSHIFT A
みたいに設定すると長押しでLSHIFTのはたらきで、短い押し込みでAを押したのと同じ働きになるみたいです。


![スクリーンショット 2023-09-28 18.55.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197731/dec4196a-6d1d-9480-6006-60cd13ca25d1.png)



こんな感じに書いてあるところがあった。

とにかく

<> の間に&kp &kpで並べたらいいのか？


試してみたが、あんまりうまくいかなかった。


![スクリーンショット 2023-09-28 18.57.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197731/49bed84b-eb5a-8d8e-b473-5d97280cd1cb.png)


ここら辺も怪しい？


そもそもmod-tapやhold-tapなどがよくわかっておらず、

このzmkだけでなく、さまざまなキーボードファームウェアで共通の知識？

QMKという方で検索した方が色々情報が出てきそうか？
社内用 AI 搭載チャットボットを Teams に設置しよう！【パート 1/5】

# 「海外出張で社用携帯を使うには？」「有給休暇は何日間？」... 同じような質問には、もうあなたは答えなくてよい！
 
社内からの同じような質問に、毎回同じ回答をするのに疲れてませんか？
Microsoft Teams に AI 搭載のチャットボット Power Virtual Agents for Teams を設置し、自動回答させましょう！

Power Virtual Agents は、コードの知識がない人でも簡単に作成でき、Teams を利用している組織内のユーザーであれば誰でも無料で利用できます。


# `大まかな流れ`
＿＿＿[★今回のパート 1★]＿＿＿
[Ⅰ 設置条件（ライセンス）](#i-設置条件(ライセンス)) 
[Ⅱ Microsoft Teams に Power Virtual Agents アプリを追加](#ⅱ-microsoft-teams-に-power-virtual-agents-アプリを追加)
[Ⅲ ボットを設置する](#ⅲ-ボットを設置する)


# Ⅰ 設置条件(ライセンス)

Teams 上で Power Virtual Agents チャットボットを作成および管理するために、特別なライセンスは必要ありません。

### Mirosoft365 のライセンスがあって Teams を利用できれば、誰でも Power Virtual Agents for Teams のチャットボットを作成できます。

**※ただし、Web ページや SNS でチャットボットを利用したい場合は、別途 Power Virtual Agents のライセンス購入が必要となります。**

またもちろん、ボットにアクセス（利用）するユーザーにも、特別なライセンスは必要ありません。
Teams のチーム内もしくは組織内に設置されたチャットボットを誰でも利用できます。


# Ⅱ Microsoft Teams に Power Virtual Agents アプリを追加
1 Microsoft Teams を開き、左側のメニューの下部にある アプリ をクリック

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/a8493866-0462-a769-90e5-ed1fcf64e27d.png" width=10%>

2「Power Virtual Agents」を検索し、右側に表示されたら「追加」をクリック 
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/cf01aeef-7d84-01ef-d0dd-bc7a4809be14.png" width=90%>

3 ポップアップが表示されたら、「追加」をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/8714eb8f-c843-59c6-3c8a-35902901acb0.png" width=90%>

4 Power Virtual Agents のアイコンの上で右クリックし、ピンをクリックするとメニューが固定表示されて便利です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/90f271be-ca1c-8a26-563a-f54f75c601cd.png" width=30%>

これで準備ができました！

# Ⅲ ボットを設置する

1 「今すぐ始める」をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/581959c8-5a84-2db9-f936-624d3f9db3b4.png" width=90%>

2 チャットを利用できるチームを選択し、「続行します」をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/1c8b2fda-f025-e563-3559-671c89ac234b.png" width=90%>

3 初回の構築時には、セットアップに数分掛かります。
準備ができたら、上部メニューの「チャットボット」に、先ほど設定したグループ名が表示されるので、グループ名を選択し、「新しいチャットボット」をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/ebe4e5f3-e2de-3eac-6a19-f7c7009bc9aa.png" width=90%>

4 「ボット名」「言語」「ボットアイコン」を入力・選択し、「作成」をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524615/fee6fbea-3876-59a9-c0b1-4acad3cc7bd6.png" width=90%>


設置が完了しました！

**次の[パート 2](https://qiita.com/S_O_ka/private/850b176c8175cfe9c8cd) では、トピックを設定（会話を定義）していきます。**



> Microsoft 公式マニュアル
https://learn.microsoft.com/ja-jp/power-virtual-agents/requirements-licensing?tabs=teams#prerequisites

https://learn.microsoft.com/ja-jp/power-virtual-agents/authoring-first-bot?tabs=teams
Salesforceでアプリケーション下部の内容を設定変更しよう

こんにちは
本橋です

今回はアプリケーション下部にあるnote　などの表示を設定変更する方法をご説明します

つまり画像でいえばこちらです

![アプリケーション.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/ab974985-3aec-1fdd-a803-a7f42dbbd288.png)

上記画像の場合、「セールス」アプリケーションの修正で下部のＮｏｔｅｓなど表示、非表示が可能です


設定場所はこちら
グローバル検索で「Lightningアプリケーションマネージャ」を検索して使われているアプリケーションマネージャの右「▼」ボタンをクリックし編集してください
![アプリケーションマネー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/986f316e-9178-1aba-5ffc-542122991740.png)

そうすれば以下画像のように
・ユーティリティ項目　
を修正することによりアプリケーションごとに特定の機能を表示or非表示に設定可能です
![ユーティリティ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/827657f0-e62d-a701-72cb-e4773f317ff8.png)
Themeカスタマイズで、ロジックを組む時に便利なLiquidのwhere

エンジニアの皆さん、Liquidのwhereを活用していますか？
今回は、Themeカスタマイズを行う際に、特定の条件を満たす要素を効率的に取得するためのwhereについて紹介します。

## if文と配列で取得する方法
これまで、配列の中のオブジェクトが特定の要素を持つ場合、その要素を取得するために以下のようなコードを書いていました。

```
{% assign test = "" %}
{% for product in collections.all.products %}
  {% if product.metafields.hoge.fuga == xxxx %}
    {% assign test = test | append: "," | append: product %}
  {% endif %}
{% endfor %}
{% assign test = test | remove_first: "," %}
{% assign test = test | split: "," %}

{% if test.size > 1 %}
  {% for i in test %}
    何かを表示
  {% endfor %}
{% endif %}
```
この方法だと、仕様が複雑になると、コードが膨れ上がってしまいます。
サンプルなので、これぐらいのコードで済みますが、実務の中の条件では本当に大変なことになります。
作る時はまだ、いいんです。
その時にコメント書いて、作ってるんで。
半年後に、変更・修正が入ったことを想像してみてください…ゾッとするでしょ？

## whereを使った取得方法
whereを使用すると、配列の中のオブジェクトが特定の値を持つ場合、その要素を配列として取得することができます。

```
{% assign test = collections.all.products | where: "metafields.hoge.fuga", "xxxx" %}
{% if test.size > 1 %}
  {% for i in test %}
    何かを表示
  {% endfor %}
{% endif %}
```
驚くべきことに、これだけで目的の要素を取得できます！
今までの方法と比べて、非常にシンプルで読みやすいコードになりました。
私自身もこの方法を知って驚きましたし、今までの取得方法を考えると少し恥ずかしくも感じます。

## まとめ
Liquidのwhereは、特定の条件を満たす要素を効率的に取得する際に非常に役立ちます。コードの見通しを良くするためにも、ぜひ活用してみてください。
あと、たまにはチートシートを眺めるのも大事ですね！

参考リンク
[Shopify Liquid Documentation - where](https://shopify.dev/docs/api/liquid/filters/where)
[Shopify Liquid GitHub - where](https://shopify.github.io/liquid/filters/where/)

### ARCHETYPからのお知らせ
ARCHETYPではShopifyテーマ、Shopifyアプリ、Webサイト/サービスなどの開発を行うエンジニアを募集中です！
正社員、副業などとわず募集です！（フルリモートも相談可です！）
https://www.archetyp.jp/recruit/
気になる方はお気軽にエントリーお待ちしております！
LikeMinds Consulting inc

LikeMinds Consulting is a leading provider of consulting, systems integration and managed services and focuses on Identity Management, Application Security, Governance, Risk and Compliance solutions. Our firm specializes in the DevOps, IaC, Cloud Engineering, Ping Identity suite, Azure AD, HashiCorp, Sail Point, Radiant Logic and Oracle Fusion Middleware solutions. We have focused on providing our customers with a full range of services which span through our core beliefs of Advising, Integrating, Maintaining and Accelerating the Complete Identity and Security Solution. We help customers to protect their digital assets by implementing Identity and Access Management (IAM) Solution and modernize their legacy Identity and Access Management products such as Oracle Identity and Access Management, CA Site minder , IBM ISAM to a more modern IAM solutions such as Ping Federate, Ping Access, Ping Directory with Multifactor authentication using PingID with automation using Ansible, HashiCorp, Terraform, both on premise and on cloud (AWS, Microsoft Azure).

Business Address: 30 Knightsbridge road, Suite 525, Piscataway, NJ,8854

Business Phone: 1-888-562-3528

Website: https://likemindsconsulting.com/

Social Profiles:

Facebook: https://www.facebook.com/LikeMinds.2005/

LinkedIn: https://www.linkedin.com/company/likemindsconsultinginc/

YouTube: https://www.youtube.com/channel/UCAOkqTiceRfSqfFe6yA7I2Q
学びのアウトプットから新たな学びを得た話

### 初めに
先日以下のコミュニティではじめて発表してきました。
・発表場所 : https://easy2.connpass.com/event/292408/
・発表資料 : https://www.docswell.com/s/kondosl/KNR7QE-2023-09-01-091415

発表内容としては最近学習しているデザインパターンの1つBridgeパターンについてです。
社外発表自体とても高いハードルを感じていましたが、日々の学習の延長で学んだことをスライドにしただけなので、簡単に実施することができました。
ここでは端的に、学びを整理して共有したいと思います。

### 学びのアウトプットからの学び
まず、実際にBridgeパターン発表を通して感じたことを箇条書きにしてみます。
・資料作成などの準備段階で学習内容が整理できた
・人に説明することで、自身の理解がより深まった
・自分が深く理解できていない箇所が鮮明になった

そして今回の発表内容について以下のFBを上司から受けました。
・実装例を考えるときは実際のアプリ開発でありそうな事例を考えたほうが学習効率が上がる
・chatGPTに質問する際も実際のアプリ開発にありそうな事象で答えてもらえるように質問する

ここで学びを抽象化してみます。
・**説明することで理解が深まるとともに、自分が理解していな箇所も浮き彫りになる**
・**発表から自分では気が付かなった点や、助言をもらえるのでさらに学べる**

ということで発表を通してより理解が深まり、FBから次回以降の学習時のポイントも得ることができました。
一石二鳥ですね。
率直に、もちろん準備に少しだけ時間は要する、場の設定も必要、しかしながら得るものは大きいと思います。
少し自信のない学習項目や、理解があやふやなものを思い切って発表してみるといいかなと感じました。

### おわりに一言
「学びをアウトプットしてそこから得た新たな学びを今アウトプットしているので再帰関数みたいになっているなぁ。」
LinuCレベル1受験記（2023年9月）

## はじめに
LinuCレベル1を取得しましたので、自分の勉強方法などを書き残します。

## 筆者について
・未経験でIT業界へ転職
・2023年4月からインフラ保守業務を担当中（主にLinux環境）
・2023年6月に基本情報技術者試験合格

## 試験概要
クラウド環境やオンプレミス環境における「Linuxシステムの構築・運用・管理の専門家」を認定する認定試験（LPI-Japan公式サイトより）

LinuCレベル1は101試験と102試験の2部構成になっており、両方に合格することでレベル1認定となります。以下に簡単な試験情報を記載しますが、詳細はLPI-Japan公式サイトをご確認ください。

**◆試験情報（101試験,102試験共通）**
試験形式：CBT
出題数：60問
試験時間：90分 ※うち5分は試験後のアンケート記入時間のため、実質85分
受験料：1試験あたり16,500円（税込）

選択式だけでなく記述式の問題も含まれます。記述式の出題数はランダムですが、10問前後と言われています（私の受験時も同様でした）。
合格ボーダーは非公開ですが、得点率6〜7割との情報が多いようです。
なお、合否は受験後その場で画面に表示されます。

## 勉強方法・期間
テキストとWEB問題集を活用し、7月末に101試験を、9月中旬に102試験を受験しました。

勉強に当てた期間はどちらも1か月でした。
前半2週間でテキストを1周しながらWEB問題集に手をつけ始め、後半2週間はひたすらWEB問題集を解いていました。
勉強時間は平日1～2時間、休日2～4時間程度でした。平日は通勤時間などのスキマ時間を活用していました。
利用したコンテンツの詳細を以下に記述します。

①Linux教科書 LinuCレベル1 Version 10.0対応
俗にいう「あずき本」です。LinuC受験対策において最もメジャーなテキストのようです。他を見ていないので比較が出来ませんが、特にこだわりがなければテキストはこれ1冊で充分かと思います。
テキスト内の演習問題は全問正解するまで解くことを強くお勧めします。記述問題もありますので、後述するWEB問題集よりも本番試験に近いと思います。
また、巻頭の「試験直前チェックシート」もとても有用でした。受験2日前に確認し、理解が怪しいところの洗い出しに使いました。

②Ping-t  最強WEB問題集
IT試験学習サイトPing-tのコンテンツです。名前の通り、最強のWEB問題集です。受験者の強い味方。
101試験分野はアカウントの登録をすれば完全無料で利用できます。
102試験分野は有料のプレミアムコンテンツです。1ヶ月2400円ほどで、Ping-tの全ての有料コンテンツが利用できます。（価格などは変動する可能性がありますので、正確な情報はPing-t公式サイトをご確認ください）

間違えた問題は「ミス」、正解した問題は「ヒット」、2回連続で正解した問題は「コンボ」として記録されるようになっています。
「ミス」を無くして「コンボ」を目指すのが、正攻法の使い方となります。
受験直前の自分のステータスは以下の通りでした。
~~~
101試験
ミス8  ヒット369  コンボ293  未出題1
~~~
~~~
102試験
ミス20  ヒット83  コンボ425 未出題0
~~~

101試験はこちらの問題集でかなり網羅できると思います。
102試験はPing-tには出てこなかった問題もそこそこ出題されたと感じましたので、テキストの内容理解をより重視した方が安心かもしれません。

またPing-tには「コマ問」という記述特化の問題も用意されています。私はほぼ使っていませんが（少し触ってこれは自信を無くしそうだ、と思いやめました）、WEB問題集では不十分だと感じる方はこちらを利用するのも良いと思います。

## おわりに
LinuCレベル1の受験を考えている方の、少しでもお役に立てれば幸いです。
Azure Static Web Appsで拡張子なしのURLにContent-Typeをつける方法

/collections のような拡張子のないパスでjsonを返したいとき、単純にcollectionsというファイルを作成してしまうとContent-Type が application/octet-stream で返ってきてしまいます。

これをapplication/jsonで返したいときは、collections.json というファイルを作成して、元のパスへのリクエストをファイルに rewriteします。

staticwebapp.config.json に以下のように記述します。

```staticwebapp.config.json
{
  "routes" : [
    { "route" : "/collections" , "rewrite" : "/collections.json" }
  ]
}
```


以下のように書いて、できない、できないみたいになっていました。

```staticwebapp.config.json
{
  "routes" : [
    { 
      "route" : "/collections" ,
      "headers" : {
        // おそらく、最初に試す。
        "content-type" : "application/json" 
      }
    } 
  ],
  "mimeTypes" : {
    // 次に試す
    "collections" : "application/json" 
  }
}
```
よわよわエンジニア流・質問のススメ

## はじめに

よわよわエンジニアとして名高い私ですが、チームではあることをよく褒められます。
**「設計で分からないことが多いにもかかわらず、頑張って設計の会議で発言をしている」** ということです。  

でも、最初からできたわけじゃないんだよなあ……。

## 分からないのに発言とか、できなくない！？

以前の記事でも書いていましたが、かつての私は設計の会議に参加しても何も発言できないことが多かったです。
チーム内の会議であれば、みんな私が設計分からないことも知っているし、話も降ってもらえるので少しは話せましたが、チーム外の上級者との設計の会議に関してはその前提がありませんから、全く無理でした。

「だって聞いても分からないし……」
「自分の質問がただの遅延行為になっちゃうかもしれないし……」
「私が設計したわけじゃないし……」

**「私は何も貢献できない、この会議に参加している意味がない」** と、割と本気で悩んでいました。

## 発言できるようになりたくて、やってみたこと

**「何かひとことは絶対に質問/発言しよう」と覚悟を決めて会議に臨む**ようにしました。
こう聞くと、普通は、会議で「分からないことがある/言いたいことがある」というときに発言をすると思うので、目的と手段が逆になっているように感じると思います。

しかし、私にとってはこの方法はかなり有効でした。

何故かというと、「発言をしよう」と思うと、
**「どこか、分からないところ、気になるところはないかな？　自分でも質問できるところはないかな？」** 
と、会議の内容をわからないなりに一生懸命聞いて、理解しようと努めるようになります。
そうすることで、設計の中で**分かる範囲が少しずつ増えていく**のです。

最初のうちは聞くだけで精一杯で、質問するに至らないことも多いです。

しかし、分かるところが増えてくると、
**「質問する勇気は出なかったけど、分からなかったところ・気になったところ」** が生まれてきます。
そうなれば、あとはちょっと勇気を出すだけです。

「よくわかんないなー」と、ぼーっと話を聞いてしまうよりは、「発言してやるぜ！」と息巻いて会議に参加していた方が、何倍も学習効果があると思います。

そしていざ質問をしてみると、案外みんな優しく教えてくれるものだったりするのです。

## 逆に、やっちゃダメだった！と思うこと

**「もうn年目だから、もっと設計分かるようになって、もっと"ちゃんとした"意見を言えるようにならなきゃ！」と思い込むこと**です。

私は入社3年目の頃に上記のようなことを考えて、結果として発言に対する心理的ハードルが上がってしまいました。
「3年目のくせにこんなこともわからないのか」と思われたらどうしよう、と思っていました。

しかし、ある時気づきました。
自分のチームの先輩は、会議の中で分からないことがあったときに、「分からないんですけど、」とその場で率直に伝えて質問をしていました。
そしてそのおかげで、私が全然分からないと思っていたことを説明をしてもらえて、不明点を解消できたことがありました。

**「分からないことを分からないと発信することで、他のメンバの理解の助けになることがある。チームに貢献できることがある。」**

このことに気づいたことで、「n年目だから……」の呪いは、ちょっとずつ解けていったと思います。

## 効果

以前の記事にエピソードを書いていますが、徐々に設計に関する質問ができるようになっていきました。
そして、チーム内の設計の会議だけではなく、もっと人の多い、部署全体の会議や、挙句の果てには全社会議でもためらいなく質問ができるようになっていきました。

昔の私であれば、「何も分からないから静かにしていよう……」と思って、気配を消していたと思います。

しかし、今ではどの会議であっても、**「何か聞けることないかなー」** と考えるようになりました。
たとえ自分があまり明るくない技術の話であっても一生懸命聞いて、自分の浅い知識を掘り返しながら理解しようと努めています。そして、気になることがあれば手を挙げています。

## さいごに
 
個人的には、「わからない」ことを「わからない」と言って質問できることって、やっぱり勇気のあることだと思います。
自分も、勇気が出なくて発言できない、と思うことはよくあります。

つい先日も、「全然わかんないんだけど質問していいかな……」と悩んでいたら、

「(私)ちゃん質問しなくていいの？」

と、フォローされてしまいました。(「全然わかんないな」と思ってたのが全部顔に出ていたようです。)

できる人からすると「いやそんなの当たり前やん」という内容の記事だと思います。
でも、「何も発言できない、自分はこの会議に参加している意味がない」と、かつての私のように悩んでいる方がもしいたら、**「自分にもできるかも！」** と思ってもらえたら、とてもうれしいなと思います。
adbをAndroid端末にインストールする方法

## 環境
```
OS:       macOS 11.5.1
```

## 前提条件
- USBを用意しておく

## 手順
1. PCとデバイスをUSBで接続
    - デバイス側から接続を許可する
2. ターミナルで`adb devices` 
    - 該当のデバイスが**device**になっていることを確認
        - **unauthorized**になっている場合は、USB接続が許可されていません
        ![スクリーンショット 2023-09-28 18.00.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534018/27de4b4c-6e27-e1d1-90e0-443aef340e1b.png)

3. `adb -s デバイス名 install xxx.apk` でインストール
    ![スクリーンショット 2023-09-28 18.10.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534018/9b2905f0-b2ac-d9a7-ffa1-f9e99973ec0b.png)

    

## 関連記事
[ipaファイルをiPhoneにインストールする方法](https://qiita.com/noma_tongull/items/a3ad76587ad768cad3ff)
X-Rayを使用してみる

## 目的
AWS Certified Developer - Associateの勉強をしている中で
理解が浅いサービスについて実際に使用してみます

今回はX-Rayを設定してみます

## 手順
- X-Rayを設定（API Gateway）
- X-Rayを設定（Lambda）
- 結果確認

API GatewayとLambdaは以下で作成したものを使用します
https://qiita.com/tsubaki_019475/items/f40c65b43103f4a9f8e4

## X-Rayを設定（API Gateway）
**1. API Gatewayのページに移動、左のメニューからAPIを選択**
**2. 作成したAPIを選択、ステージを選択**
**3. ログ/トレースタブを選択、X-Ray トレースの有効化を選択**
**4. 変更を保存**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1997750/6c335c20-3b1e-e647-b762-df4a95cdfaa6.png)


## X-Rayを設定（Lambda）
**1. Lambdaのページに移動、左のメニューから関数を選択**
**2. lambda関数を選択**
**3. 設定タブからモニタリングおよび運用ツールを選択**
**4. 編集を選択**
![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1997750/578ee8d8-1ad1-267a-7184-64a67e002b45.png)

**5. AWS X-Rayのアクティブトレースを有効化**
![image-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1997750/beee6557-2779-c8b7-d267-ddda3aee07e3.png)

**6. 保存**


## 結果確認
**1. CloudWatchのページに移動、左のメニューからサービスマップを選択**
クライアントなどの各ノードをクリックするとリクエスト数などが確認できます

![image-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1997750/32acffc6-9b8f-5b0e-36a3-cb806f98ce2f.png)

**2. ノードを選択、トレースを表示を選択**
トレースの一覧が表示されるので、てきとうなIDを選択すると各トレースの情報を表示できます
X-Rayの設定をLambdaでも行うと、Lambdaで関数の実行でどのくらいかかっているかもわかります

API Gatewayのみ設定を行った場合
![image-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1997750/cfc9682b-e88b-97ce-913f-c17edaeed64a.png)

API GatewayとLambdaで設定を行った場合
![image-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1997750/d087f4e6-1b54-f0e8-0fd9-d3dff75d79b8.png)


Lambdaの設定をしたことで見れるようになった、InvocationとOverheadは公式サイトによると以下とのことです。

>Invocation 
>サブセグメントは呼び出しフェーズを現し、Lambda は関数ハンドラーを呼び出します。これはランタイムと拡張機能の登録から始まり、ランタイムが応答を送信する準備ができたら完了します。
>
>Overhead 
>サブセグメントは、ランタイムが応答を送信してから、次の呼び出しのシグナルを送信するまでの間に発生するフェーズを表します。この間、ランタイムは呼び出しに関連するすべてのタスクを終了し、サンドボックスをフリーズする準備をします。
>
>https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/services-xray.html
ipaファイルをiPhone端末にインストールする方法

## 環境
```
OS:       macOS 11.5.1
Xcode:    13.1 
```

## 前提条件
- USBを用意しておく
- Xcodeをインストールしておく

## 手順
1. PCとデバイスをUSBで接続
    - デバイス側から接続を許可する
2. Xcodeを起動
3. メニューから **「Window」 > 「Devices and Simulators」** を選択
    ![スクリーンショット 2023-09-08 16.54.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534018/ab221037-0bde-92f8-46a4-53ef7462114b.png)
4. 「**INSTALLED APPS**」の部分にipaファイルをドラッグ＆ドロップ
    ![スクリーンショット 2023-09-08 16.55.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534018/3fc9b705-e541-a330-c4da-201b472f1272.png)

## 関連記事
[adbをAndroid端末にインストールする方法](https://qiita.com/noma_tongull/items/30fd47dd07847cfc3642)