OmniAICreator/Qiita-1.07M huggingface dataset:
政治的な行動についてのまとめ

書籍『最難関のリーダーシップ』(ロナルド・A・ハイフェッツ (著), マーティ・リンスキー (著), アレクサンダー・グラショウ (著), 水上雅人 (翻訳) /英治出版)の読書メモです。

「第3部 システムを動かす」の「10章 政治的に行動する」についてです。

# １．政治的思考とは
 組織のメンバーの関係性、懸念を理解すること

# ２．なぜこの考え方が必要なの？
 適用を要する変革をリードするときに、人間の複雑さを無視すると成功の可能性が激減するから。
 政治的に行動し、人々をまとめあげ動かしていくことが重要。

:::note info
結局人が動かないと物事は成功しない。
:::

# ３．政治的に行動するとは？
自分自身の権威の限界と関係者の利害を認識し、組織内の権力や影響力のネットワークを利用する。

- 「政治的行動」の６つの指針
    - 非公式な権威を拡大する(リスクがあっても進められる)
        →人間関係、信頼関係強化が重要
    - 協力者を見つける(1人の能力には限界あり)
    - 敵対者とつながりを持つ
    - 権威を持つ人を、取り仕切る
    - 犠牲になる人たちの責任を負う(変革には犠牲が伴う)
    - 反対意見を否定せず、引き入れていく

# ４．実践練習例

- 下記５つのグループについて、周りの状況を整理し、戦略を立てる。
    ①協力者②敵対者③権威者④犠牲者⑤反対者
    - どれに当てはまるか？
    - なぜそう思ったか？
    - 「犠牲者」は何を失うことになるのか？
    - 「反対者」が恐れていることは何か？

:::note info
書籍にはワークシートが記載されているのでぜひ参考にしてみてください。
:::
リーダーに必要な環境温度の管理技術

書籍『最難関のリーダーシップ』(ロナルド・A・ハイフェッツ (著), マーティ・リンスキー (著), アレクサンダー・グラショウ (著), 水上雅人 (翻訳) /英治出版)の読書メモです。

# １．「対立の組織化」とは？
組織の前進のため対立を表面化させ、当事者に向き合わせる
→対立による混乱や熱気の中で動じずにいて対立を静観するのは勇気と修練が必要

# ２．多くの組織がやりがちなこと
何もしない、闘争・逃走、権威に頼る


# ３．適応課題において前進するには？
・違いを排除するのではなく、対立を探し出し、表面化させ、はぐくみ、注意深く手なずけること

# ４．前進するための7つのステップ(p.234-237)

(1) 準備
(2) 基本ルールの設定
(3) それぞれの見解の確認
(4) 対立の組織化
(5) 喪失の受け入れと対処の促進
(6) 実験のコミットメント
(7) 仲間同士によるリーダーシップ・コンサルティングの開始

# ５．対立の組織化をやり遂げるためには？
・対立に寛容になる　
・敵対する人と交流する
・拒絶したくなるような人に支援してもらう
・コミュニケーションスタイルを適応させる
・包み込む環境（安全な仕組み）を創出することが重要
・組織の熱をコントロールする
　組織の「熱」を常にチェックし温度調整を行う。

|温度を・・・|特徴|例|
|---- | ---- |---- |
|上げるには|アグレッシブな姿勢を尊重、後押しする|難しい課題に注意を向ける<br>責任を与える<br>対立を表面化させる<br>挑発的な意見を容認|
|下げるには|難題を避け、決まったことを粛々とやる|解決の道筋をつける<br>責任を一時的に戻して引き受ける<br>わかりやすい技術的問題に対応する<br>期待に向けたスピードを緩める|
技術的問題と適応課題の違い

書籍『最難関のリーダーシップ』(ロナルド・A・ハイフェッツ (著), マーティ・リンスキー (著), アレクサンダー・グラショウ (著), 水上雅人 (翻訳) /英治出版)の読書メモです。

# １．この記事で伝えたいこと
- 技術的問題と適応課題の違いを取り違えると、根本解決を目指しているはずが一時的な対処療法をずっと続けていく末路が待っていたりする。

:::note info
対処療法の否定ではありません。
:::


# ２．技術的問題と適応課題の違い

|対象|定義|イメージ例(会社統合時)|
|:-----------|:-----------|:-----------|
|技術的問題|既存の知識（専門知識、手続き、実行方法）で解決|会計システムの一本化|
|適応課題|人々の優先事項、信念、習慣、忠誠心を変えて解決|文化の融合|

ただし現実の問題は技術的問題と適応課題が混ざり合ってることが多い。

# ３．取り違えると発生する不具合
- 根本解決を目指しているはずが一時的な対処療法を繰り返しやっているに過ぎない、というケースが生まれる。
アダプティブ・リーダーシップ概略

書籍『最難関のリーダーシップ』(ロナルド・A・ハイフェッツ (著), マーティ・リンスキー (著), アレクサンダー・グラショウ (著), 水上雅人 (翻訳) /英治出版)の読書メモです。

# １．アダプティブ・リーダーシップとは
> 難題に取り組み、成功するように人々をまとまげ動かしていくことである。

(本書41ページより引用)

# ２．アダプティブ・リーダーシップに必要な要素
・「変化」が大切、変化によって人や組織は繁栄する。
・適応を要する変革には、過去の放棄ではなく土台として築いていくことが必要。
・実験的マインドセットが必要。
　リーダーは時間とリソースを調達し、リードしながら臨機応変に対応すべし。
 ・進化のカギは変異。個体差のない環境ではイノベーションは起きにくい。
 ・新たな適応とは、無力さや喪失と向き合うこと
 ・適応には時間がかかる

 # ３．アダプティブ・リーダーシップを実践をするときに気を付けること
 ・孤立しないようにする。一緒に表にたってくれるパートナーを見つけよう。
 ・人生はリーダーシップの実験室だと考える。どこにでも実践チャンスはある。
 ・拙速に行動しない。深く内省すること。

 > ビギナーとマスターの違い。それは、マスターのほうがはるかに多くの実践を重ねていることである。
 (ユーディ・メニューイン)
[Splunk]ルックアップテーブルに行追加する。

こんなケースのときに試行錯誤して動いたSPLメモです。
・イベント検索し、そこからルックアップテーブルを作りたい
・一時的に特定の値を入れたい(でもイベントには出てこない)

:::note
もっとスマートなやり方があれば教えてください。。。。
:::

```
index=～ sourcetype=～
|append [|makeresults |eval field="AAA] 
| table mail | outputlookup max=0 table.csv
```

値を2つ(複数)追加したいとき
```
index=～ sourcetype=～
|append [|makeresults |eval field="AAA, BBB" |makemv delim="," mail |mvexpand mail] 
| table mail | outputlookup max=0 table.csv
```
2行目：カンマ区切りで値を列挙し、カンマ区切りで分割している。
[Splunk]アラートメール定義でのインデント

今年はSplunkがCiscoに買収されるというニュースが駆け抜けましたね。
さて、Splunkでは、アラートメールの文面も定義できます。
字下げがうまくできない落とし穴に、はまってしまったので記録しておきます。

# 1.やりたいイメージ

こちらはセキュリティーセンターです。
アラートが発生しました。ご確認ください。

１．日時
　　　2023/1/1 13/00
２．対象機器
　　　hostA


# ２．インデントができない？


こちらはセキュリティーセンターです。
アラートが発生しました。ご確認ください。
１．日時
2023/1/1 13/00
２．対象機器
hostA


# ３．解決策
「半角スペース」を使ったのがいけなかった。
全角スペースでやるとうまくいった。
【SwiftUI】NavigationSplitView と TabView の切り替え判定 🔀


マルチプラットフォームで正しい書き方どう書くの?

![sc 2023-12-15 at 21.01.07.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/7f818917-1bfe-0776-a6ff-4de5f9edd1a7.gif)

```swift
if prefersTabNavigation { // *
//if UIDevice.current.userInterfaceIdiom == .phone { // NG on macOS
//if UserInterface.prefersTabNavigation {
  TabView(selection: $screen) {
    ForEach(Screen.allCases) { screen in
      screen.destination
        .tag(screen as Screen?)
        .tabItem { screen.label }
    }
  }
} else {
  NavigationSplitView { 
    SidebarList(screen: $screen)
  } detail: {
    DetailColumn(screen: screen)
  }
}
```

判定の条件 (Bool) をどう書くか。

[少し考えてみました。](https://android.benigumo.com/20231215/navigationsplitview-tabview/)

<a href="https://android.benigumo.com/20231215/navigationsplitview-tabview/" target="_blank" rel="noopener">👉 【SwiftUI】NavigationSplitView と TabView の切り替え判定 🔀&nbsp;<img src="https://b.hatena.ne.jp/entry/image/https://android.benigumo.com/20231215/navigationsplitview-tabview/" alt="hatena-bookmark" /></a>
[Splunk]ダッシュボードで「値の重複により競合」と表示されないようにする方法

# １．事象
ダッシュボードには「フィルタ」の機能を入れることができます。
選択することで表示結果を絞ることができます。
そしてこの選択肢の内容もSPLの結果にすることができます(=動的にできる)。
ただ予期せず、結果の値の中で重複が発生することがあります。
こんな感じ↓
![値の重複.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/4f63fdc7-7fb0-68a2-8aaa-48f2aac365a8.png)

# ２．解決策
「dedup」コマンドを入れる。
　(もしくは重複しないよう前処理入れる)

# ３．コード例
```
    <input type="dropdown" token="hogehoge" searchWhenChanged="true">
      <label>項目名</label>
      <choice value="*">ALL</choice>
      <default>*</default>
      <fieldForLabel>field1</fieldForLabel>
      <fieldForValue>field1</fieldForValue>
      <search>
        <query>|inputlookup aaa.csv |dedup field1 |table field1 |sort 0 field1</query>
        <earliest>0</earliest>
        <latest></latest>
      </search>
    </input>
```
情報セキュリティ10大脅威 2023のレポートまとめ

[去年](https://qiita.com/Maruhoppe8/items/da4eb8bf815eaa02193f)に引き続き、まとめていきます！

# １．セキュリティ10大脅威とは

>「情報セキュリティ10大脅威 2023」は、2022年に発生した社会的に影響が大きかったと考えられる情報セキュリティにおける事案から、IPAが脅威候補を選出し、情報セキュリティ分野の研究者、企業の実務担当者など約200名のメンバーからなる「10大脅威選考会」が脅威候補に対して審議・投票を行い、決定したものです。

ここから引用してます。

https://www.ipa.go.jp/security/10threats/10threats2023.html


# ２．2023年のセキュリティ10大脅威(組織の部)
IPAのレポートを読みながら、「組織の部」について整理してみます。

| |名称|特徴|感染/攻撃経路|予防策|
|:-----------|:-----------|:-----------|:-----------|:-----------|
|1|ランサムウェアによる被害|データを暗号化し、復旧することと引き換えに金銭を要求する。ビジネスパートナーで攻撃を受けていることを公表するという脅しもある。|・メール(でクリック、添付ファイル開封)<br>・webサイトクリック<br>・ソフトウェア脆弱性<br>・RDP不正アクセス(RDPは管理用)|・対策用予算確保、CSIRT体制<br>・教育<br>・診断(セキュリティ、ぺネストレーションテスト)|
|2|サプライチェーンの弱点を悪用した攻撃|セキュリティの甘い組織を攻撃の足掛かりにし、標的情報を盗んだり、システムを停止する。|協力会社、開発会社を狙う|・(自組織向け)セキュリティ規則徹底<br>・(他組織向け)契約時の選定、契約内容確認<br>・(他組織向け)定期チェック<br>・(共通)報連相ルートの規定、周知徹底|
|3|標的型攻撃による機密情報の窃取|・メール|・認証情報を窃取しその情報を使って感染させる|・CSIRT体制<br>・教育|
|4|内部不正による情報漏えい|・在職中のアカウントを利用し不正アクセス|・在職中のアカウントを利用<br>・何者かがアカウントを不正入手|・閲覧権限の最小化<br>・アカウント管理徹底|
|5|テレワーク等のニューノーマルな働き方を狙った攻撃|・物理的なのぞき見やリモート接続の脆弱性を狙う|・テレワークソフトの脆弱性<br>・テレワーク移行の管理体制不備(コロナでの暫定対応のまま)|・テレワークルール整備、周知徹底<br>・(共通)報連相ルートの規定、周知徹底|
|6|修正プログラムの公開前を狙う攻撃（ゼロデイ攻撃）|パッチ公開前の攻撃|ソフトの脆弱性|・資産把握<br>・サポートが充実した製品を選定する|
|7|ビジネスメール詐欺による金銭被害|・巧妙なビジネスメールで金銭を送金させる<br>・ターゲットを金銭管理者(経理)にしている|メール|・教育<br>・メールの真正性を確認する<br>・DMARCを導入する|
|8|脆弱性対策情報の公開に伴う悪用増加|・ネットに公開された脆弱性情報を使って攻撃を行う(以前に比べ同情報公開から攻撃までの期間も短くなっている)|・ネットの公開脆弱性情報。ダークウェブで流通している攻撃ツールを使って攻撃|・資産管理、把握<br>・NWの監視と遮断|
|9|不注意による情報漏えい等の被害|カバン紛失などのうっかりミスでの情報漏洩|・教育<br>・情報漏洩対策製品の導入|・内部告発体制の整備|
|10|犯罪のビジネス化（アンダーグラウンドサービス）|・認証情報や攻撃ツールの売買、人材のリクルートが行われている|闇取引で入手したリソースによる攻撃|・教育<br>・攻撃を想定した被害緩和策の検討(システム冗長化など)|


被害を受けた会社は、世間から「脆弱性のある会社だった。認識が甘かった！(コンプラどうなってるの！)」とマイナス評価を受けがちです。。とはいえ、現場は「IT!? んなもの知らねぇよ！だったらメールやめればいいじゃないか！」勢もまだまだいたり。。
(がんばろ。。)
セキュリティ運用(脆弱性検知)まわり

脆弱性検知に関わったときに学んだことをまとめます。

# 1. CVEとは
- 共通脆弱性識別子(CVE)
- 個別製品中の脆弱性を対象として、米国政府の支援を受けた非営利団体のMITRE社が採番している識別子。

管理サイトはここ。

https://cve.mitre.org/

(参考)

https://www.ipa.go.jp/security/vuln/scap/cve.html

# 2. CVSSとは
- 共通脆弱性評価システム(CVSS)のこと
- 情報システムの脆弱性に対するオープンで包括的、汎用的な評価手法の確立と普及を目指し、米国家インフラストラクチャ諮問委員会(NIAC)のプロジェクトで2004年10月に原案が作成された。

![CVSS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/1124e6a7-86c7-9b85-36f9-f1703c858072.png)

(参考・上図の出展共に)
共通脆弱性評価システムCVSS v3概説
https://www.ipa.go.jp/security/vuln/scap/cvssv3.html

# 3. KVEとは
- 米国の政府機関CISA（Cybersecurity＆Infrastructure Security Agency）が公開しているKnown Exploited Vulnerabilities catalogのこと。
- CISAが公開している実際に悪用が確認された脆弱性のリスト

- KEVに登録される条件(and条件)
条件①：Assigned CVE ID (CVE番号が割り振られていること)
条件②：Active Exploitation (実際に攻撃が観測されていること/悪用されていること)
条件③：Clear Remediation Guidance(明確な是正ガイダンスが公開されていること)

(参考)

https://jpn.nec.com/cybersecurity/blog/221104/index.html

- KVEの管理サイト

https://www.cisa.gov/known-exploited-vulnerabilities-catalog


- 管理サイトの歩き方(一例)

    (1) サイトにアクセスする。
    
https://www.cisa.gov/known-exploited-vulnerabilities-catalog


    ![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/6d0af948-a0aa-eb0d-cab6-cb224f26cbbf.png)


    (2) 検索条件を入力。ここでは例として「CVE-2023-36025」で検索。
    ![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/ae906955-ddd5-497c-b5ef-2b40f5054ec5.png)

    (3)結果が表示される。該当のものがあればクリック。
    ![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/9f639999-e1d4-7085-c2a5-4b0805df83b5.png)

    (4)NIST(アメリカ国立標準技術研究所)の脆弱性情報データベースに飛んでくれるので、スコアなどを確認する。
    ![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/51b7c912-0a27-4f3d-a909-1765671b1da7.png)


    - NISTとは？　
　[Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%A1%E3%83%AA%E3%82%AB%E5%9B%BD%E7%AB%8B%E6%A8%99%E6%BA%96%E6%8A%80%E8%A1%93%E7%A0%94%E7%A9%B6%E6%89%80)によると、
 アメリカの技術革新と産業競争力を促進するため、計量学や標準規格、産業技術を進歩させる組織で、暗号技術の選定および標準化を行ったり、開発ガイドラインを作成している。
 
# 4. **代表的なマルウェア検知サイト**

(1) **VirusTotal**

https://www.virustotal.com/gui/

- Googleが提供する無料のマルウェア検知サービス。
- 70以上のセキュリティツールを利用して、ファイルやURLのスキャンを行うことができる。
- ファイルのハッシュ値を入力するだけで、そのファイルがマルウェアかどうかを調べることができる。

(2) **Jotti's malware scan**

https://virusscan.jotti.org/

- オンラインでマルウェアスキャンを行うことができるサービス。
- 20以上のセキュリティツールを利用して、ファイルのスキャンを行うことができる。

(3) **Hybrid Analysis**

https://www.hybrid-analysis.com/

- マルウェアの解析を行うことができるサービス。
- ファイルのスキャンだけでなく、動的解析によってマルウェアの挙動を分析することができる。
AI、クリエイティブ、デザイン/アート思考あたりの整理。

 # １．AIとクリエイティブについて

・ちょっと前は「クリエイティブの職業はAIに取って変わられない」と言われていた。
・ところが今はハリウッドでデモが起きるほど。
　→AIが生成した写真もグランプリを受賞する事例もある。
　(しかも人物のロケーションフォトを撮影するとき、これまでは3500ドル掛かっていたものがわずか170ドルで済む(スタイリストさん、ロケ地手配、カメラマン・・・諸々がカットできる))
　　→ただ、AIが生成したものを「クリエイティブ」と呼ぶかはまだ議論が必要。

 # ２．人とAIの共存
・人とデジタルの役割や事業を0-10までに段階にわけてみる(ハーバード大学竹内弘高教授, 2017)

| 段階<br>(0開始)| 誰の領域？| 
|:------|:------|
|0-1|Humans|
|1-9|Machines/AI|
|9-10|Humans |

最初のとっかかりと最後の判断は人の領域。その間がAI。
&ensp;→人間がやるべきことがはっきりしてきた、と言える。
&emsp;→人の領域での大事なことは？
　　　・**最初のとっかかり＝無から有を生み出すこと**
　　　・**判断＝完成、美意識を高めること**

**ChatGPTでも、あいまいな質問だとあいまいな回答が返ってくる。
進める上での始まりは人の創造。**

・事例
AIがアウトプットした素材を使った長編CM　コカ・コーラのReal Magic。
プロンプトを受けてAIが作画。そこからの取捨選択、最終FIXは人が行った。
　→品質を上げるには美意識やセンスが「まだ」必要な領域。(0-1,9-10のところ)
 
 https://www.coca-cola.com/jp/ja/media-center/news-20210930-11
 


 # ３．そもそもクリエイティビティとは？
 
デジタルハリウッド大学のサイトによると下記のように説明されています。
 
> クリエイティブとは、一言で表すと「創造的」であることです。想像力に富んだ新しいアイデアを、現実のものにすることを意味します。誰かの真似や模倣ではなく、他にはない発想で何かのアウトプットが生み出された時、私たちは「クリエイティブだ」と感じます。

https://www.dhw.ac.jp/now/list/howtobe/business-creative/



# ４．デザイン思考はもう古い？VUCA時代に求められる思考方法とは？
・今頃経産省がデザイン経営と言っていて、これは疑問に思う。
・デザイン思考とアート思考は真逆の発想。
　→**デザイン思考は人間起点。人(世の中)を観察する。**
　　**アート思考は、自分起点で世の中に問う。**
　　→アップルのSteve Jobsはデザイン思考でもマーケティング思考でもなく、アート思考。ユーザーテストもしたことがなく(＝観察しない)、発表で世間を驚かせるのがスタイル。
  　**「あったらいいな」の妄想思考がないと時代に追いつけない。**
スペキュラティブデザイン概略

新しく「スペキュラティブデザイン」という言葉を知ったのでまとめたいと思います。

参考URL

https://boxil.jp/beyond/a4954/


# １．スペキュラティブデザインとは
・スペキュラティブ（Speculative）
　思索する・推測する
・目的は「未来について考えるきっかけを提供する」こと
・提唱者はアンソニー・ダン教授(英国王立芸術大学（Royal College of Art）)
・既存の価値観、態度などを疑い、未来のシナリオをデザインしていくアプローチ。


# ２．発想の起点
アンソニー・ダン教授の視点
・人口過剰や水不足、気候変動といった問題は解決不能
・人々の価値観や信念を変えることが最良の手段である
・そのために、「人々の目を未来に向けさせるためのデザイン」の考え方が必要。

# ３．ポイント
「問題を解決するのではなく、未来に意識を向ける」

# ４．事例
「I WANNA DELIVER A DOLPHIN…」(長谷川愛氏)

https://aihasegawa.info/i-wanna-deliver-a-dolphin

・現状
　人間は遺伝子を次世代に渡す方法として子供たちを育てるように遺伝的に仕向けられている
・課題
　人口過剰と緊張した地球環境のために最適な状況で子供を育てることはより難しくなっている
 ・解決方針
 　これ以上人間を増やすのではなく、絶滅の危機にある種（例えばサメ、マグロ、イルカ等）を代理出産することを提案
  
  >子供を産みたいという欲求と美味しいものが食べたいという欲求を満たす為に、食べ物として動物を出産してみてはどうか？という議論を提示し、そして如何に可能にするかという方法も示します。
[AWS]Sagemaker ノートブックインスタンスで毎回pythonモジュールのインストールを不要にするやり方

今年初めてAmazon Sagemakerに入門しました。Jupyternotebookを使いたかったのと、Sagemakerに触ってみたかったことが動機です(Sagemaker Studioにも入門しました)。
さて、Sagemakerのノートブックインスタンスを使ったときに、毎回「pip install」を実行していました。1つだけで軽いのならそれでいいのですが、依存関係とかいろいろあるやつだと待たされます。この手間をなんとかしたいと模索した備忘録です。
(模索を通して仕様を理解しようというのがこの活動のモチベーションだったりしました。)


:::note
初心者がたどり着いたメモです。他の良いやり方があれば教えてください。
:::

# １．ポイント
・Sagemakerのノートブックは一部の領域を除き、インスタンス起動ごとに新しく作られる。
　→インスタンスで初期化されないところもあることを発見
 　→モジュールをインストールしておき、そこのパスを通せばいいのでは？(環境変数設定)
　　→環境変数の設定を毎回起動時に行うことにしよう(自動設定)

# ２．たどりついたこと
起動スクリプトとして下記を登録し、pythonモジュールの検索パスとして認識させる。

```sh
#!/bin/bash

set -e
touch /home/ec2-user/anaconda3/envs/python3/lib/python3.10/site-packages/importpkg.pth
echo /home/ec2-user/SageMaker/{your_module} >> /home/ec2-user/anaconda3/envs/python3/lib/python3.10/site-packages/importpkg.pth
```


# ３．豆知識
「ノートブックの開始」と「ノートブックの作成」の違い
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/8c4bc628-d80b-5ca8-3f06-793c9a1f76b2.png)

・ノートブックの開始
　インスタンス作成時に1回だけ起動されるもの
 ・ノートブックの作成
 　インスタンスの起動時に毎回起動されるもの

以上です。
[AWS]GenerativeBI概略

生成AIならぬ、生成BIについて今年AWSから発表があったので、整理していきたいと思います。

https://aws.amazon.com/jp/blogs/news/announcing-generative-bi-capabilities-in-amazon-quicksight/

# １．GenerativeBIとは？

AWS QuickSightの新機能で、「自然言語を使って」ダッシュボードを作ったり、編集したり、分析結果を得たりすることができる。

::: note info
ライセンスは「Amazon QuickSight Q」が必要になります。2023/12/1時点で日本語は未対応です。
:::



# ２．何が嬉しい？

- **自然言語を使用してビジュアル(グラフ、表のこと)を作成することができる**
　これまでは自分でグラフや表を選択する必要があったが、目的を入力するとそれにあったグラフを提案してくれる。
<br>

- **自然言語を使用して分析のビジュアルが洗練できる**

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/440c1b5e-4da9-8515-6960-3bb1db0e3f42.png)
([アナウンスのページ](https://aws.amazon.com/jp/blogs/news/announcing-generative-bi-capabilities-in-amazon-quicksight/)の動画をもとに作成)

<br>

- **自然言語を使って計算フィールドを作成できる**

　これまでは公式ドキュメントを読んで計算フィールドを作る必要があったが、計算したい内容を入力するだけで作成することができる。
 
 ![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/11da87df-dea9-04d3-8332-5433b7136314.png)
([アナウンスのページ](https://aws.amazon.com/jp/blogs/news/announcing-generative-bi-capabilities-in-amazon-quicksight/)の動画をもとに作成)


QuickSightの関数についての公式ドキュメントのページ

https://docs.aws.amazon.com/quicksight/latest/user/functions.html


- **リッチなデータストーリーを作成して共有することができる**

目的と分析内容を指示するとレポートにしてくれる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/ac9123a3-1230-df9d-7c6d-f8e70dccf746.png)
([アナウンスのページ](https://aws.amazon.com/jp/blogs/news/announcing-generative-bi-capabilities-in-amazon-quicksight/)の動画をもとに作成)

レポートのスタイルもバリエーションがあり、新聞、広告などを選ぶことが可能。

# ３．おわりに

基本的な構築は知識がなくてもできるようになり、深い洞察が必要な分析にリソースが割けるようになるなぁと思いました。逆にいうとこれでカバーできる部分しか対応できない構築者はお役御免に(なるのかなぁ、、)
アクティブ・ブック・ダイアログ（ABD）をやってみた

ABDをやる機会があったのでまとめてみます。楽しいし勉強になるのでおすすめです！

![thumbnail_book_smile.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/a99e4719-ab66-7ba1-66dd-dc996764f773.jpeg)


# １．アクティブ・ブック・ダイアログ（ABD）とは
- 1冊の本を参加者で分担し、担当分をプレゼンする(インプット)
- その後、対話を行い、理解を深める。



# ２．メリット
- 事前準備不要。対象外の「前書き」「序章」だけ読んでくる、とかすると頭に入りやすい。
- 参加すれば強制的に読書できる
- 1人ではなかなかできない分厚い本に手が出せる
- 対話を通じて本への理解が深まる(自分とは違う視点での考え方に触れることができる)


# ３．やり方
(1) 本を選ぶ
　　なんでもOKです。「就業規則」を題材にする会社もあるとか。
(2) 参加者で分担する
　　1章ごととかそういう区切りで。
   ただ1章を読んでないと2章の意味が分からない、みたいなケースもあるので注意が必要かも。
  
::: note info
参加者の属性を考慮してもいいですが、機械的に割り振るのも楽で良きです。
:::
(3) 持ち時間を指定して読書開始！(プレゼン準備含む)
　　(例) 20ページ/人にして、40分(20分で読書、残り20分でプレゼン準備)
(4) プレゼンリレー
　　(例) 1人2分の持ち時間で順番にプレゼン。
(5) 休憩
　　(4)の前に休憩を入れるよりも、ここまでを一気にやるほうが勢いがあってよかった。  
(6) ギャラリービューイング
　　2人でチームになり、プレゼン資料を最初からながめて感想を述べ合う。
  　資料でよかった部分に「いいね」マークをつけていく(述べ合うだけだと流れていくので…)
   
::: note info
   美術館で感想を言いながらみてまわるイメージだそうです。
:::
   
(7) 対話
　　4人ぐらいのチームになり、本の所感やもっと知りたいこと、疑問に思ったことなどを共有する。

(8) 全体の場で共有
　　話し合ったことを共有。なんでもいいので全員が発言できるようにする。

# ４．やってみて、こうしたほうがいいなと思ったこと
- 資料の体裁ルール化＆アナウンス
　「サマリ」だけど重要要素が絞り切れず写経してしまったり、何ページも書いてしまう人もいる。ルールを設け、下記を口酸っぱく周知すると幸せになれる。
    - スライド数(パワポ)
    - フォントサイズ、黒
    - 1スライドあたりの行数

:::note info
パワーポイントを使う場合、装飾したりデザイン性を持たせようとしてしまいますが、時間が足りなくなり、肝心の中身が適当になってしまう可能性があります。
「ABDはプレゼンがゴールではないので、全部文字の色は黒でいいですよー」などシンプルさを強調しておくことが吉です。
(やる直前にアナウンスしても、1人は守らない人がいるものなので、中盤に再度アナウンスするのも忘れずに…)
:::

- 発表時間の厳格化
　制限時間の80%になったらベルを鳴らすなどの工夫があるといいです。「最後まで話し切れなくても資料は残ってるので後から見れます。時間が足りないなと思ったら「後は各自読んでおいてください」でOKです」とアナウンスしておけば、心理的安全性からも◎。
 (時間を守る経験はスキルアップにつながるので)


- ギャラリービューイングを盛り上げる
「いいね」のほかにも「勉強になった」「もっと知りたい」など独自マークを作って貼るのもおもしろいなと思いました。

# ５．おわりに
分厚い本はついつい積読になりがちです。
もし500ページの本があって、10人にでやる場合を試算すると・・・
・1人あたり50ページ。
・読書時間30分＋プレゼン準備20分。
・プレゼン(2分)/人*10人=20分　+ バトンタッチ30秒*9回=4.5分　⇒計25分
・ギャラリービューイング10分
・対話30分
とすると、115分！ということで、2時間で内容が理解できるという計算になります！
いかがでしょうか。1人での流し読みでもこれぐらいかかるところ、サマライズされた資料もできて感想も共有できてるというお得さがあるのではないでしょうか。
ということで、おすすめです！
サプライチェーン概略

# １．サプライチェーンとは
- **商品の製造から消費者の手元に届くまでの一連の流れ**を指し、製品の原料調達から、製造、在庫管理、配送、販売、消費までのプロセスを表すもの。
- サプライチェーンを戦略的に管理することを**サプライチェーンマネジメント（SCM）**と呼ぶ。

「必要なものを、必要なときに、必要な量だけ作る」という、いわゆる「ジャスト・イン・タイム」な生産プロセスの構築が容易になるのが、サプライチェーン・マネジメント

(参考)

https://smbiz.asahi.com/article/14850461

https://www.digima-japan.com/knowhow/world/16809.php

# ２．なぜこの考え方が必要か
- 「モノ・お金・情報」をしっかりと管理しないと国際的な競争の中で負けてしまうから。


:::note info
当たり前ですね。
:::

# ３．この考え方の良い点
在庫管理の最適化
　→余剰在庫を抱えない

リードタイム(生産・製造に要する時間（期間）)の削減

売り上げの最大化
  →在庫管理の最適化とリードタイムの削減によって、過剰生産や機会損失が減り、売り上げの最大化が実現が実現できる

![在庫.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/4283b693-fd92-c1e5-9413-b19ca1faf66c.png)


# ４．SCMを活用し成功した事例

トヨタ自動車株式会社
「お客様にご注文いただいたクルマを、より早くお届けするために、最も短い時間で効率的に造る」

- JIT（ジャスト・イン・タイム）方式
  「必要なものを、必要なときに必要な量だけ造る！」考えに則った生産方式。
　トヨタ自動車の創業者（2代目社長）である豊田喜一郎が考案。

> ムダとは、ある場合は在庫であり、ある場合は作業そのものであり、ある場合は不良であり、それぞれの要素が複雑にからみ合い、ムダがムダを生み、やがては企業経営そのものを圧迫します。

::: note info
2代目って重要ですね(1代目の成功を引き継いだ場合、まわりからのプレッシャーも重そうですけど…)
:::




(参考)

https://global.toyota/jp/company/vision-and-philosophy/production-system/
デマンドチェーン概略

# １．デマンドチェーンとは

- 需要側からの情報を基点に商品開発や流通を最適化するプロセスのこと。

- 消費者のニーズや購買行動を分析し、市場に合わせた商品やサービスを提供。
- デマンドチェーンを戦略的に管理することをデマンドチェーンマネジメント（DCM）と呼ぶ。

(参考)
https://www.toshibatec.co.jp/datasolution/column/20230301_03.html

※デマンドチェーンとサプライチェーンの違い
![チェーン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/07f0a90f-2b2e-13f3-77fc-559e6dc40313.png)
(出典)
デマンドチェーンマネジメント(大和物流株式会社)
https://www.daiwabutsuryu.co.jp/useful/words/demand-chain-management

# ２．なぜこの考え方が必要か

- 消費者ニーズの多様化や競争の激化に対応するため。
　サプライチェーンマネジメント（SCM）だけでは、供給側の都合に合わせた商品やサービスしか提供できない。
　→DCMでは、消費者の声に寄り添った商品開発や流通を行い、顧客満足度や利益率を向上させる。

# ３．この考え方の良い点

(1)生産、在庫のコントロール
- 需要と供給のバランスをとることができる。
- 需要予測に基づいて生産や在庫を調整することで、過剰在庫や欠品のリスクを低減できる。
- 流通の効率化やコスト削減にもつながる。

(2)消費者との関係性強化
- 消費者のニーズやフィードバックを反映した商品やサービスを提供することで、ロイヤルティやリピート率を高めることができる。
- 消費者の口コミや評判によって、ブランドイメージや知名度を向上させることが可能。

# ４．DCMを活用し成功した事例

　**アマゾン（Amazon.com, Inc.）**

・ネットワークの活用により、膨大なユーザーデータを用いたマーケティングを得意としている。
・アマゾンのミッションステートメント
「地球上でもっともお客様を大切にする企業であること」 「地球上で求められるあらゆるものを探し、発見でき、購入できる場を提供する」 「常にお客様からスタートし、お客様の立場でいろんなことを考える」

- データの活用例
　・翌日の注文数をユーザーの行動から予測し、注文が入る前から在庫拠点への商品出荷を可能にする「予測発送システム」です。
　 本国アメリカは国土が広大なため、ユーザーが分散してしまい、通常であれば当日発送は困難を極める。
- そこでアマゾンは予測発送システムを利用することで、予め中間拠点に商品を事前出荷し、在庫拠点を増やすことなく商品発送の迅速化に成功しました。



::: note info
日本はサプライチェーンを得意とするのですが、その一方でデマンドチェーンに弱く、課題となっています。
:::

----
システム思考概略

システム思考という言葉を初めて知りました。
このサイトにわかりやすく解説してあったので、まとめたいと思います。

はじめての「システム思考」(リベラルアーツ一般社団法人子供教育創造機構)

https://liberal-arts.online/systemsthinking/


# １．システム思考とは？
上記サイトには下記のように説明されています。
>システム思考とは解決すべき対象や問題を「システム」として捉え、多面的な見方で原因を探り、問題解決を目指す方法論です。


# ２．なぜこの考え方が必要なのか
・世の中が複雑化し、問題も複雑化。
・見えているものにアプローチする対処療法では根本解決にならない。
　その対応でさらに問題を(気づかずに)生んでいるかもしれない

 → 問題の全体を動的に観察し、相互作用なども考慮して解決の糸口を探す必要がある。
 　(⇒システム思考のアプローチ)

 # ３．システム思考で使用するツール
## 3-1. 氷山モデル
 システムの全体像を氷山にたとえ、海面下の目に見えにくいところに「パターン」「構造」「意識・無意識の前提」があるとするシステム思考のフレームワーク

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/af340881-bcd0-85a8-7563-4b748b8c085a.png)

 下記サイトより図をお借りしました。
https://www.change-agent.jp/systemsthinking/approach/the_iceberg_model.html


## 3-2.ループ図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/ea2840b1-e5e8-b92e-6f82-8296bf3f6bc7.png)
(はじめての「システム思考」(リベラルアーツ一般社団法人子供教育創造機構)より)


## 3-3. システム原型〜問題のすりかわり

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/ae39192d-a82e-4f71-7807-2fb4d662f468.png)
(はじめての「システム思考」(リベラルアーツ一般社団法人子供教育創造機構)より)



・問題設定に対し、根本解決ではなく対処療法だけに終始すると永遠に問題はなくならない。。

# ４．論理的思考とシステム思考の違い
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/cd4a1677-794e-521d-1e5a-1458594687bf.png)
(はじめての「システム思考」(リベラルアーツ一般社団法人子供教育創造機構)より)
AWS CodePipeline で Git タグでのトリガーがサポートされたので試したが、注釈付きタグを使うとうまく動かなかった

AWS CodePipeline で Git タグでのパイプライン実行ができるようになったそうです。

[AWS CodePipeline で git タグでのトリガーのサポートを開始](https://aws.amazon.com/jp/about-aws/whats-new/2023/10/aws-codepipeline-triggering-git-tags/)
[チュートリアル:Git タグを使用してパイプラインを開始する - AWS CodePipeline](https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/tutorials-github-tags.html)

試してみたところ、注釈付きタグをトリガーにした場合にうまく動作しませんでしたが、結論としては軽量版タグを使用すると動作するようでした。

[Git - タグ](https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%82%BF%E3%82%B0)

## 動作成功までの作業ログ

### パイプラインの作成

ほぼチュートリアルの通りに進めています。

パイプラインタイプV2を選択してステップを進めます。

![スクリーンショット1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266269/81343687-5032-d6be-5a0f-6d782d0e1586.png)

ソースプロバイダーに「GitHub（バージョン 2）を選択し、Github に接続してリポジトリを選択します。
パイプライントリガーに「Git タグ」を選択し、含めるタグに「release*」を入力、デフォルトブランチを適当に設定してステップを進めます。

![スクリーンショット2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266269/d543aedd-6643-b2e5-7e50-0086eb800aad.png)


今回はビルドステージをスキップ、デプロイステージではデプロイプロバイダーをS3に設定してパイプライン作成を完了しました。

![スクリーンショット3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266269/2ab74aa7-96bd-5fe0-438d-99d469de44a4.png)


### 注釈付きタグをプッシュ -> Source アクションが失敗

注釈付きタグを付与してプッシュします。

```
$ git tag -a release-1 -m '1st release'
$ git push origin release-1
```

Source アクションの実行に失敗しました。
`[GitHub] No Commit [{HASH}] found for FullRepositoryName [{REPOSITORY}}]`

エラーメッセージのハッシュの情報によると、コミットのハッシュではなくタグのハッシュでコミットを探そうとしたようです。

![スクリーンショット4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266269/dc133efe-f7df-07fe-ae93-9b43122e71a8.png)



```
$ git log
commit 5ad051b1e67cf57c1917a35ac8f45923febe2c4c (HEAD -> main, tag: release-1, origin/main, origin/HEAD)

$ git rev-parse main
5ad051b1e67cf57c1917a35ac8f45923febe2c4c

$ git rev-parse release-1
ad5621c3902b5ace95d4984110832a7817bbfa8d
```

### 軽量版タグをプッシュ -> Source アクションが成功

軽量版タグを付与してプッシュします。

```
$ git tag release-1
$ git push origin release-1
```

Source アクションが成功しました。

![スクリーンショット5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266269/344bab47-65a5-17f6-75c3-69980b091628.png)
Tween24.js のイージングと p5.js との組み合わせが楽しくてさらに試す： 振幅や周期などのカスタマイズ【p5.js-2】

この記事は、「[p5.js Advent Calendar 2023](https://qiita.com/advent-calendar/2023/p5js)」の 16日目の記事です。

## 今回の内容
今回の内容は、以下の 2つの記事の続きにあたるものです。

- [p5.js と Tween24.js を組み合わせたアニメーション・イージングのお試し 【完走賞ゲット-12】 - Qiita](https://qiita.com/youtoy/items/ad2ade71d73fa2298723)
- [p5.js と Tween24.js を組み合わせたお試し：イージングのブレンド【完走賞ゲット-13】 - Qiita](https://qiita.com/youtoy/items/24dae2f6c946b41d9c82)

前々回・前回の記事では、Tween24.js　を使ったシンプルなイージングと、複数のイージングを混ぜて使うブレンドという機能を試しました。まだ他にも試せてない機能があり、また Tween24.js を使っていて楽しくなってきたので、さらにお試しをやってみました。

## Tween24.js とは
[前々回・前回の記事で描画ライブラリの p5.js と組み合わせた「Tween24.js」は、メソッドチェーンでアニメーションが書けるライブラリ](https://qiita.com/youtoy/items/ad2ade71d73fa2298723#tween24js-%E3%81%A8%E3%81%AF
)です。
 
 ![Tween24.js とは](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/e639daa0-5c08-ff9f-e1c3-6a0383ef9821.png)

他にも、アニメーション用ライブラリで p5.js と組み合わせやすいものはあり、それについては前々回の記事で少し触れていました。

## Tween24.js のお試し
### Tween24.js で試す機能を選定する
前々回・前回とは別の、今回の記事で試す「Tween24.js」の機能を選定してみます。

今回は、「特殊なイージングの系統で、オーバー具合や振幅の大きさや周期をカスタマイズできる」という「Ease24._Back...With」「Ease24._Elastic...With」を使ってみることにしました。

![選定した内容](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/07885284-007c-a1c7-4c55-7ed8b7a278e8.png)

#### 「Ease24._Back...With」
まずは「Ease24._Back...With」を使った場合の動きの違いを試してみます。
書いたプログラムは、以下の通りです。

```javascript
let tweenData1, tweenData2, tween1, tween2;

function setup() {
  createCanvas(500, 400);
  noStroke();
  fill(100, 120, 190);

  tweenData1 = { progress: 0 };
  tweenData2 = { progress: 0 };

  tween1 = Tween24.tween(tweenData1, 1, Ease24._BackInOut(), { progress: 1 });
  tween2 = Tween24.tween(tweenData2, 1, Ease24._BackInOutWith(3), {
    progress: 1,
  });
}

function draw() {
  background(220);

  const x1 = tweenData1.progress * width;
  const x2 = tweenData2.progress * width;
  circle(x1, height * 0.3, 100);
  circle(x2, height * 0.7, 100);
}

function mouseClicked() {
  tween1.play();
  tween2.play();
}
```

#### 「Ease24._Elastic...With」
続いて「Ease24._Elastic...With」を使った場合の動きの違いを試してみます。
書いたプログラムは、以下の通りです。

```javascript
let tweenData1, tweenData2, tween1, tween2;

function setup() {
  createCanvas(500, 400);
  noStroke();
  fill(100, 120, 190);

  tweenData1 = { progress: 0 };
  tweenData2 = { progress: 0 };

  tween1 = Tween24.tween(tweenData1, 1, Ease24._ElasticInOut(), {
    progress: 1,
  });
  tween2 = Tween24.tween(tweenData2, 1, Ease24._ElasticInOutWith(3, 0.0015), {
    progress: 1,
  });
}

function draw() {
  background(220);

  const x1 = tweenData1.progress * width;
  const x2 = tweenData2.progress * width;
  circle(x1, height * 0.3, 100);
  circle(x2, height * 0.7, 100);
}

function mouseClicked() {
  tween1.play();
  tween2.play();
}
```

どちらも、パラメータを指定することで、動きに変化が生じることが確認できました。

## おわりに
今回、Tween24.js を使ったイージングで、「特殊なイージングの系統で、オーバー具合や振幅の大きさや周期をカスタマイズできる」という「Ease24._Back...With」「Ease24._Elastic...With」を使ってみました。

パラメータを指定するだけで、動きを簡単に変えられるのは、すごく便利でした！
Life is Tech ! メンターでハッカソン出てみた

## はじめに
Life is Tech Advent Calendar Day16を担当します、Webサービスプログラミングコースメンターのまえひろです。

普段はIT系の専門学校に通っていて、暇があればハッカソンに参加している人間です。

WebSメンター4人、WeDメンター1人で[技育キャラバン大阪](https://talent.supporterz.jp/events/6fc08c75-805e-4058-a811-77ac27d7f51e/)に参加してきてめっちゃ楽しかったのでレポートと布教を兼ねて記事にします。

## ハッカソンとは

**短期間でプロダクトを作り上げて、プレゼンで競うコンテスト**です。

ハッカソンによってテーマ自由、リモート開催、チーム参加など様々なルールが設けられています。


 ↓ 詳しくはこちらで解説しています
https://qiita.com/hiroto_dnpk/items/22fd35516c89427d5a9d


## 技育キャラバン
技育キャラバンとは株式会社サポーターズ様主催の[技育CAMP]( https://talent.supporterz.jp/geekcamp/)のオフラインハッカソンです。チームは2~5人、事前開発期間が10日間、最後にプレゼンをして競います。


## 作ったもの

### 概要
Time Tetrisというカレンダーアプリです。

![Slide 16_9 - 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2969880/f3736732-36a1-0b38-cffa-40738379b7af.png)


以下のアプローチで既存のカレンダーアプリと差別化しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2969880/cd701080-b54d-9348-a2ac-43a5cf1e6230.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2969880/adfa9935-cad5-a21f-3c87-7daabac0694a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2969880/91950d14-152e-1eac-0b11-78df894d2f13.png)

### 技術構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2969880/e7d442c5-0582-8f8f-cedb-b5dd947bb103.png)

## 企画
それぞれアイデアをブレストで出し、気になったアイデアを質問する形式で掘り下げて行きました。最終的に良いと思ったアイデアに投票することになったのですが、二つのアイデアで決めきれず、両方をとった形でスタートしました。

その後サービスのペルソナを決め、コア部分を考て行くうちに片方に軸が固まって行くような流れでした。

メンバーの子の思考を細分化して付箋をペタペタ貼って行くやり方が言語化・理解がしやすくこれから真似していきたいと思いました。

みんなが自分の意見や論理をしっかり持っていて、建設的な衝突ができたと思います。これはいいサービスが作れそうだという高揚感があって楽しかったです。

## 設計
 DB設計とAPI設計をしました。ハッカソンとは思えないほどしっかりやったんじゃないかなと思います。

 フロントエンドとバックエンドの擦り合わせはテキストベースで残しておいた方がコミュニケーションコストを抑えられていいなと実感しました。

 ## 実装
 Next.jsとRails初挑戦というなかなかにしんどい構成だったと思います。
 メンバーみんなが忙しい中、自分で調べて戦っていてパワーを感じました。時間に対して設計を作りすぎたと焦っていた部分もあったのですが、なんとか発表までできて助かりました。

 ## デザイン
デザイナーはやはり偉大だと感じました。Webデザイン、プレゼンスライド、ロゴを1人に任せきりになってしまって申し訳ないなと思っていたのですが、高ペース高品質でゴリゴリ進めてくれて最強でした。

実装サイドとのすり合わせは通話ですることが多かったと思います。ここはテキストより話すコミュニケーションが向いていると思いました。

## 反省
チームとしては最高 of 最高で勉強になりつつもめちゃくちゃ楽しくできました！
個人的な反省は、インターンと重なって思うようにアサインできなかったことです。誘っておいてめっちゃ申し訳ないです。チームメンバーごめんなさい！
終盤でめちゃくちゃフォローしてくれて助けられました。ありがとう！

## 最後に
結果、ウイングアーク1st株式会社様から企業賞をいただきました✨

https://x.com/geek_pjt/status/1711344160261968243?s=20

運営、審査員、交流してくださった学生、チームメイトの皆様、ありがとうございました！

技育キャラバンはチームで高め合うだけでなく、いろんな大学の学生、企業の方々と交流できる最高の場所です！ぜひみなさんも参加してみてください！
Pixel 6a を USB接続の Webカメラ（ドライバ不要の UVCカメラ）として利用できる標準機能のお試し【完走賞ゲット-16】

:::note info
※ [Qiita の完走賞をゲットするための条件は「単一／複数のカレンダーに投稿した記事が合計25」です](https://twitter.com/Qiita/status/1593441648796524545)
:::

この記事は、「[完走賞ゲットのため小ネタ 25記事を投稿しようとチャレンジ v2 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/youtoy)」の 16日目の記事です。

## 今回の内容
今回の内容は、ちょっと前に以下のポストをしていたりした「Pixel 6以降の端末が、USB接続の Webカメラとして利用できる機能」に関するものです。
この機能は標準機能で使えて、そしてドライバ不要の UVCカメラ（USB Video Class のカメラ）として動作するというステキな仕様です。

https://twitter.com/youtoy/status/1732755703641882626

### Pixel 6a で試す
それでは、自分が所有している Pixel 6a で試してみます。

#### 手順
まずは、Pixel 6a と PC を USBケーブルでつなぎます。
そうすると、通知に以下の「このデバイスを USB で充電中」と書かれた内容が出てきます。

![通知](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/74d605b9-d782-8034-e521-46bd013f65a5.png)

そして通知をタップすると、以下の表示が出てきました。
![通知のタップ後](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1fadec43-e5b3-7369-30df-293e2685b08e.png)

その後、リストの中に「ウェブカメラ」という項目があるので、それを選びます。
そうすると、PC側で Pixel 6a を Webカメラとして認識している状況になります。

例えば、Mac で QuickTime を開いてカメラの選択メニューを開くと、カメラのリストの中に「Android Webcam」という項目が出てきました。

![QuickTime](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1ee58b45-9996-ec68-4604-2c1613fb6e32.png)

#### 設定の変更
それと、以下の赤矢印で示した部分をタップすると、外向きのカメラを使っていたのを内向きのカメラを使う形に変更できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9d1c7ce5-91e0-17f5-0639-f02b23722931.png)

内向きカメラにした状態での、Pixel 6a と PC の表示は以下のようになりました。

![410575039_339591905484022_3828211989351230245_n.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/553fbe8a-ed86-a091-93f1-99db3ab1eee4.jpeg)

### なぜか通知が表示されなくてちょっとした対処が必要だった話
当初、自分がこの記事に書いた内容を試そうとした際、なぜか Pixel 6a を PC につないでも、通知が表示されていませんでした。

Web検索してみたところ、そういう場合には以下の手順をふむと良いという話を見かけて、その通りにしたら無事に解決できました。

1. 「設定」を開く
1. 「通知」を選択
1. 「アプリの通知」を選択
1. 右上の「3点リーダー」 ＞ 「システムアプリを表示」を選択
1. 「Android システム」をいったん OFF にして、その後に ON に戻す

## おわりに
今回、Pixel 6a を USB接続の Webカメラとして利用できる標準機能を試しました。

USB で PCに接続するだけで使えてとても手軽なので、活用していければと思います！
xrdpを使ってみよう！

## はじめに
　WindowsのパソコンからWindowsのパソコンへリモートデスクトップ接続しているけど、Linuxマシンへリモートデスクトップ接続したいと思うことはないでしょうか？私は、変態なのでたまに使うことがあります。その方法を記事にしたいと思います。

### 環境
Ubuntu 20.04 LTS

## インストール
　`apt`コマンドを用いてパッケージの更新をしてから、xrdpのパッケージをインストールします。
```shell
sudo apt -y update&&sudo apt -y upgrade&&sudo apt -y autoremove
sudo apt -y install xrdp
```

## 設定
　セキュリティー対策のために、ポートを`3389`から`13389`に変更したいと思います。
```shell
sudo nano /etc/xrdp/xrdp.ini
```
```diff_ini:/etc/xrdp/xrdp.ini
- port=3389
+ port=13389
```

　ファイアウォールに`ufw`を利用している場合は、以下のコマンドでポート開放をしておきます。
```shell
sudo ufw allow 13389
```

## 接続
　Windows側から接続してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2942430/0017d134-dd77-fd18-b7e1-b9d8d54c733a.png)

　警告画面が出てくることがありますが、「はい」を選んで先に進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2942430/22481844-7db8-1b1c-b30b-97c12351f454.png)

　ユーザー名とパスワードを入力してログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2942430/d83de445-9d9c-d635-cc77-101d7fa7d58c.png)

　「認証が必要です」と表示された場合は、パスワードを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2942430/ee5aa521-5751-13f1-ca60-ef0d8ba5aa5b.png)

　デスクトップが表示され、リモートデスクトップ接続に成功しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2942430/6c3c7bd4-aec5-2a0d-c641-065ed049f31b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2942430/a96a7c53-7915-9894-607b-91d088d31192.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2942430/eb55100f-0aad-9433-4fca-49581015b81b.png)

## おわりに
　WindowsのパソコンからリモートでLinuxのデスクトップ環境が触ることができれば、便利ですね。レスポンスに少し難がありますが、皆さんも試してみてはいかがですか。
ITサービスマネージャとして着任したら、まず何を把握するか

松浦修治（@shujinext）です。
普段の業務はITサービスマネージャの役割を担っています。

もし、あるプロダクトや会社にITサービスマネージャとして着任または入社したら、まず何から把握するか、についてまとめてみます。
ITサービスマネージャは会社や現場によって役割に偏りがあるので、必ずしもみなさんに当てはまるとは限りませんが、参考になれば幸いです。

大きく分けて、ビジネス、組織、システムの3点です。

1. ビジネス
    - 顧客
    - 儲け方
    - 業務プロセス
    - 重点テーマ  
1. 組織
    - 自組織と開発体制
    - プロダクト体制
    - ユーザー部門
    - 支援してくれる機能組織
    - キーパーソン
1. システム
    - システム全体図
    - 障害管理
    - 保守運用

## 1.ビジネス

### 顧客
まず何より、誰がお客様なのか、です。
ITサービスの使われ方を把握していきます。だからこのようなWebサイトの作りになっているのか、と紐づけて理解しやすくなります。1日や月間の使われ方の特性にも現れてくるはずです。

### 儲け方
次に、そのプロダクトはどうやって儲けているのか、というマネタイズポイントです。ビジネスモデルといってもいいです。これにより、障害対応を行うときに大事にしないといけないポイントが見えてきます。
例えば、何かを掲載して課金するのか、何らかの成約をもって課金するのか、によって、重要機能に差が出てきます。また、どこがこけると痛いのかが分かれば、関係組織とのコミュニケーションも円滑になります。

### 業務プロセス
そのビジネスモデルを実現するための、プロセス（業務）をざっくり把握します。いきなり細かい業務詳細まで立ち入っても、BPRをやるわけではないので、ざっくりです。
バリューチェーンの中を1段階ブレイクダウンしたような粒度です。どの機能で障害が起きると、どの業務に影響を与えるのか、業務の名前や特殊な言葉遣いを中心に理解しておく必要があります。特に、知らない用語が飛び交う会議は非常に苦痛なので、用語は早めにクリアしておくと良いです。

### 重点テーマ
戦略に基づいて、何かを推進していることがあります。中身を細かく知らなくてもいいので、課題になっていることなどのwhyを中心に把握します。もしかすると、パフォーマンスに影響を与える施策が動いているかもしれません。

## 2.組織

### 自組織と開発チーム体制
内製か外製なのかでだいぶ変わりますが、自組織の立ち位置と開発チーム体制を把握します。切り口は、障害対応や保守は誰がどんな役割で担っているか、開発チームは保守に関する専門チームがあるかどうか、を見ていきます。一体になっていると融通が利きやすい一方で、開発が忙しくなると保守が後回しになったり、障害が起きると開発が遅延したりします。

その中で、自分がどのような期待値で振る舞うべきか、然るべき方と合意します。もしかすると、実は何らかの組織課題があって、何かを変えていきたい意向があるかもしれないので、その大きな流れを理解しておきます。

### プロダクト体制
企画やプロダクトマネジメントをしている組織については、開発プロセスと絡めて把握します。何かの開発案件や保守案件が立ち上がったら、誰がどんなふうに起案して、誰が承認して、誰が推進していくのか、です。
特に、障害というわけではないが早期解決しなければならない改修案件がある時、どうすれば最速で進むのか、は押さえておきます。

### ユーザー部門
組織の切り方を把握しておきます。エリアごと、業界ごと、職種ごと、など様々な分け方があり、その時々の組織コンディションや戦略で変わります。ざっくり、どんなユーザーがいるのか、を把握しておきます。

### 支援してくれる機能組織
技術専門組織や、法務、リスクマネジメントなど、心強い味方になってくれる組織を把握します。ただ、これも会社や現場によって守備範囲が異なるので、どのようなスタンスで、どこまで支援しているのかを押さえておきます。

### キーパーソン
情報のハブになっていたり、精神的支柱になっていたりする方を把握します。必ずしも職位の高い方とは限らず、どちらかといえば、当然ながら経験年数が長い方に多く見られます。障害や保守はサービスに影響が出たり、何らかの不便を我慢してもらうシーンがあるので、その勘所をうまく押さえさせてもらうのが目的です。

## 3.システム

### システム全体図
サブシステムとシステム間連携の切り口でシステム全体図を眺めます。ただし、ないことが多いです。その場合は、IT部門のキーパーソンを特定し、ホワイトボードのある場所に集合して「お絵描き大会」をします。

ここでは、先ほど書いた「業務プロセス」の流れを追うように、順番にシステムとデータの流れを書き入れながら、絵を育てていくと描きやすいです。

### 障害管理
どこで検知し、誰が受け付け、障害の重大度をどのような評価軸で判定し、どんなエスカレーションが行われるか、を把握します。
非営業時間だったらアラート発報から障害対応開始までどのような考え方でやっているか、も重要です。障害の重大度判定と対応サービスレベルが定まっているかを確認します。

### 保守運用
定常的に行なっている保守運用を把握しておきます。サービスデスク体制とキャパシティ管理などのモニタリングを押さえます。

## おわりに
何から把握するか、という順番までは表現しきれませんでしたが、大事なのは、システムの前にビジネスと組織を把握することだと思います。なぜなら、システムはビジネスと組織のためにあるからです。

また、何かが課題になっているはずなので、それを特定した上で、把握の順番を工夫したり、濃淡をつけたりすることも重要です。せっかく着任したのなら、何かをテーマ設定してITサービスマネージャとして立ち上がる方が、自分も動きやすく、周りからも助けてもらいやすくなるはずです。何よりも、誰かの役に立てられる可能性が高まります。

頑張ってください！

そして、何か私にできることがあれば、ご連絡ください。（連絡手段は、冒頭に記載の通り @shujinext で各種SNSからよろしくお願い致します）
EctoのクエリをSQLに変換する

Ectoを使った実装をしている際、生成されるSQL文を確認したいときに使っています。

https://hexdocs.pm/ecto_sql/Ecto.Adapters.SQL.html#to_sql/3

`Ecto.Adapters.SQL.to_sql/3`を使う書き方もありますが、

```elixir
iex> import Ecto.Query
iex> alias NaiveTree.Repo
iex> alias Categories.Category
iex> query = from c in Category
iex> Ecto.Adapters.SQL.to_sql(:all, Repo, query)
{"SELECT c0.\"id\", c0.\"name\", c0.\"parent_id\", c0.\"inserted_at\", c0.\"updated_at\" FROM \"categories\" AS c0",
 []}
```

`to_sql`はRepo配下でも実行できます。こっちのほうが楽かも。

```elixir
iex> Repo.to_sql(:all, query)
{"SELECT c0.\"id\", c0.\"name\", c0.\"parent_id\", c0.\"inserted_at\", c0.\"updated_at\" FROM \"categories\" AS c0",
 []}
```
【kintone】JavaScriptカスタマイズ入門③

# はじめに
今回は、javascriptとkintone REST APIを使用した具体的なデータ取得処理、データ更新処理の実装について説明いたします。kintone REST APIには1回のAPI呼び出しで処理できるレコード件数に制限があり、そのことを考慮して実装を行う必要があります。
### レコード一括取得処理
kintone REST APIのレコード取得処理には1回当たりの取得レコード数の制限があります。kintoneアプリには、この取得レコード件数の制限より多くのレコードが格納される場合があり、1回のレコード取得処理では全件取得できない場合があります。この状況への対応方法として、取得するレコードの範囲をスライドさせながらレコード取得処理繰り返すことで、全レコードを取得することができます。レコード抽出条件に加えて「offset」として抽出条件にマッチしたレコードの何件目から取得開始するか、「limit」としてレコード取得件数を指定することで、取得レコードの範囲をスライドさせることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/85e05904-6b9a-8ceb-7a8e-44749e44da47.png)
下記サンプルのレコード一括取得処理では、limitで1回の取得件数を指定しつつ、レコード取得件数ずつoffsetするクエリを使用し、レコード取得結果がlimit件数以下になるまで再帰処理でレコード取得を行い、各取得レコードを結合して戻すことでレコード一括取得処理としています。
```js
    // レコード一括取得処理
    const getRecords = function(app, fields, strQuery, strOption, tmpRecords){
        var limit = 500; // 1回のクエリで抽出する上限件数を指定
        var tmpRecords = tmpRecords || [];
        return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
            app: app,
            fields: fields,
            query: strQuery + strOption + ' limit ' + limit + ' offset ' + tmpRecords.length
        }).then(function(response){
            tmpRecords = tmpRecords.concat(response.records);
            // 取得したレコード件数が1回のクエリで抽出する上限件数となっていた場合、再起呼出しする。
            // そうでない場合は取得レコードを返す。
            return response.records.length === limit ? getRecords(app, fields, strQuery, strOption,   
                   tmpRecords) : tmpRecords;
        });
    };
```
### レコード一括更新処理
REST APIでのレコード更新処理には、更新対象のレコード番号と項目値をセットにした更新用レコード配列を使用しますが、こちらも1回当たりの更新レコード数の上限があります。
下記サンプルのレコード一括取得処理では、レコード一括取得処理のようなクエリでのoffsetやlimitの指定ができないため、更新用レコード配列から、範囲をずらしつつ一定件数のレコードを切り出して処理するように実装しています。
```js
    //レコード一括更新処理
    const putAllRecords = function(offset, app, put_records){
        //offsetは、取得したデータの先頭からいくつスキップするかを表す
        offset = offset || 0;
        //kintone.apiでレコード取得するためのパラメータ
        var params = {
                "app" : app ,
                "records" : []
            };
        var t=0
        //100件ずつのパラメータを作る
        if (put_records.length - offset > 100) {
            for (var s = offset; s < offset+100; s++) {
                t++;
                params["records"][t-1] = put_records[s];
            }
        }else if (put_records.length - offset < 100) {
            for (var s = offset; s < put_records.length; s++) {
                t++;
                params["records"][t-1] = put_records[s];
            }
        }        
        return kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', params
        ).then(function(put_resp){
            console.log(put_resp);
            //取得したレコード数が上限に達していれば再帰呼び出し
            if(put_records.length - (offset + 100) > 0){
                return putAll
            }
        });
    }
```
# おわりに
今回は、kintone REST APIを利用した具体的なデータ取得処理、データ更新処理の実装について説明しました。実は、kintone REST APIのレコード処理は非同期処理となっており、レコード一括取得処理、レコード一括更新処理を連続的に呼び出すと、レコード一括取得処理の終了前にレコード一括更新処理が開始され、正常に動作しません。この対策としてkintone.Promiseが用意されています。次回は、レコード更新要否の判定とあわせて、kintone.Promiseを利用したレコード処理の同期について、ご説明いたします。
【kintone】JavaScriptカスタマイズ入門②

# はじめに
今回は、kintone REST APIによるデータ更新処理方法のご説明となります。よくあるデータ更新処理の例として、マスタデータとなる顧客情報アプリ画面で住所等を更新したら、トランザクション側の問い合わせ管理画面にも反映するといった動作について考えます。

kintoneアプリでは、フォーム（画面）に配置したルックアップ項目にて外部アプリのレコードを参照し、項目値を取得することができます。しかし、ルックアップ項目は取得した値を格納しており、都度参照していないので外部アプリ側でのレコード項目値の更新が反映されません。そこで、javascriptとkintone REST APIを使用したデータ更新処理の出番となります。
## kintoneでのマスタデータ反映の方法論
kintoneにはタスクスケジューラのような時間指定での処理実行機能が無いため、マスタアプリの更新が行われた後、トランザクションデータへの一括反映処理を実行できるようなタイミングがレコード保存イベントしかありません。

マスタアプリ側での保存ボタン押下（レコード保存イベント）の際に、そのレコードを参照しているトランザクションアプリのレコードを更新するという方法で、どのように更新処理を行うか考えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/3c206f34-007c-335a-e12a-9ec276919e12.png)
## マスタデータ反映処理のイメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/20fb6aaa-9d8c-e735-6629-d71b3c970f46.png)
上記動作イメージを元に必要な機能を考えます。

### トランザクションアプリから更新対象レコードIDの取得

REST APIでのレコード更新のキー項目は、レコードIDに固定となっています。この更新キーを取得するため、トランザクションアプリから「マスタアプリの更新されたレコードのキー項目値」をルックアップ項目に持つレコードをすべて抽出し、抽出したレコードデータから更新対象のレコードIDを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/9bf33a9d-e26e-e366-c479-71b6854a8c9a.png)
### 更新用レコードデータの作成

トランザクションアプリの更新用レコードとして以下のセットを作成します。
1. 更新対象のレコードID（下図の"id":1）
2. レコード項目リスト（下図の"record”）
   + トランザクションアプリのルックアップ項目のフィールドID（下図の”会社名”）
   + マスタアプリの更新レコードのキー項目値（下図の”テスト株式会社”）

・更新用レコードのイメージ
```JS
{
    "id":1,
    "record":{
        "会社名":"テスト株式会社"
        }    
}
```
kintoneアプリ画面でルックアップ項目の「取得」をクリックして項目値を更新した場合と同様にREST APIによるレコード更新でルックアップ項目が更新された場合でも、「ほかのフィールドのコピー」でコピーされる項目も更新されます。
### トランザクションアプリのレコードを更新する
トランザクションアプリのアプリIDと②で作成した更新用レコードデータを指定して、トランザクションアプリの更新対象レコードを更新します。

# おわりに
今回は、kintone REST APIを利用したデータ更新の概念についてご説明しました。次回は、javascriptを使用した具体的な実装について説明いたします。
【kintone】JavaScriptカスタマイズ入門①

# はじめに
kintoneのJavaScriptカスタマイズを利用することで、フォーム部品やアクション等の標準機能とは別に、レコード処理等の機能を実装することができます。本記事は、JavaScriptの経験はあっても、kintoneでは初めて使われる方に読んで頂きたい内容となります。
# 本記事の対象読者
+ kintone、JavaScriptについて基本的な知識をお持ちの方
+ 初めてkintoneのJavaScriptカスタマイズを 利用される方
+ kintone標準機能から一歩踏み出してみたい方
# kintoneカスタマイズで取り扱うAPI
JavaScriptで画面表示やレコード関連の操作を行うため、kintoneには以下のようなAPIが用意されています。
|APIの種類|機能|
|:--|:--|
|kintone <br> REST API |kintoneのデータ連携のためのAPIです。レコードの取得／登録／更新／削除等の機能があります。今回は触れませんが、ファイルのアップロード/ダウンロード、アプリやフォームの設定情報のAPIも含まれます。 |#ffff00|
|kintone <br> JavaScript API |kintoneのデータ連携のためのAPIです。レコードの取得／登録／更新／削除等の機能があります。今回は触れませんが、ファイルのアップロード/ダウンロード、アプリやフォームの設定情報のAPIも含まれます。 |#ffff00|

本記事では、kintone REST API（以下、REST API）をメインとしてご紹介していきます。

kintone REST APIを使用する基本的なサンプルとして、指定したクエリ条件にマッチするレコードを取得するコードは下記のようなイメージとなります。
```js
        // アプリ名を元に処理対象アプリのアプリIDを取得
        var app = kintone.app.getRelatedRecordsTargetAppId('アプリ名');
        // クエリ条件
        query = '営業所番号="' + ShopNo + '"';
        // 取得フィールド
        fields = ["レコード番号", "営業所番号","営業所名"];        
        // リクエストボディ
        var body = {
            'app': app ,
            'query': query ,
            'fields': fields
        };
        // クエリ条件にマッチするレコードを取得
        kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {
            // 取得レコードを表示
            console.log(resp);
        });

```
実際にはレコード保存（保存ボタン押下）等のイベントのタイミングでkintone REST API更新処理等を行う形となります。イベント処理の記述方法やkintone REST APIに含まれる機能等については、随時更新されるため、以下のリンク先にて最新の情報を確認すると良いでしょう。

+ イベント処理の記述方法

https://cybozu.dev/ja/kintone/docs/js-api/events/event-handling/

+ kintone REST API

https://cybozu.dev/ja/kintone/docs/rest-api/

# おわりに
今回は、kintoneカスタマイズに使用するAPIにどのようなものがあるか、kintone REST APIの利用イメージや情報入手先について簡単にご提示しました。次回は、kintone REST APIを利用したデータ更新の概念について説明いたします。
プロデルからPythonを呼び出してExcelファイルを処理する

openpyxlでExcelのデータを処理した後，GUIで良い感じに表示したいと思っても結構面倒です。Microsoft Windowsで簡単にGUIをやるならプロデルが最適ですので，組み合わせてみました。

# .xlsxファイルの読み込み

```py
import sys

import openpyxl

def excel_to_tsv(excel_file_path, tsv_file_path):
    workbook = openpyxl.load_workbook(excel_file_path)
    sheet = workbook.active
    with open(tsv_file_path, 'w', encoding='utf-8') as f:
        for row in sheet.iter_rows(values_only=True):
            tsv_line = '\t'.join([str(cell) if cell is not None else '' for cell in row])
            f.write(tsv_line + '\n')

excel_to_tsv(sys.argv[1], 'output.tsv')
```

これで各セルの内容が得られます。出力は`output.tsv`に固定しました。

# プロデルでウィンドウを作る

プロデルはVisual Basicみたいな感じでウィンドウなどのGUI部品を設計できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150160/0b19b511-e9fb-7fa9-b743-555b2635d062.png)


[マニュアル](https://produ.irelang.jp/docs/wincontrol/menuitem.htm)には明示的に書かれていませんが，半角&の後ろに文字を置くことで，ショートカットキーの設定ができます。

表部品を設置しましたが，ウィンドウの大きさが変わる度に表部品の大きさを変えるのは極めて面倒ですので，ドッキング方向を`全体`にしておきました。これでサイズに関係なく良い感じにできます。

# メニュークリック時の処理

`ファイル(&F)`の下に`開く(&O)`を用意しています。このメニュー項目の名前を「開く項目」としました。イベント手順は，プロデルデザイナ上で任意のGUI部品を右クリックすると「イベント手順の選択」というメニューが出てきますので，それを使えば簡単ですが，「メニュー項目」はそうなっていないので，自分で書く必要があります。

```rdr
開く項目がクリックされた時の手順
	開く画面のフィルタを「Microsoft Excel 2007|*.xlsx」に変える
	ファイル名は、開くファイルを選択したもの
	もしファイル名が無でなければ
		ファイル名を読み込む。
	もし終わり
終わり
```

選択ウィンドウ（古ｗ）がこれで出てきますので，ファイル名を取得し，pythonに引き渡します。

```rdr
［ファイル名］を読み込む手順
	「python.exe」を「load_xlsx.py ［ファイル名］」として起動して待つ
	表というデータ表を作る。
	表へ「output.tsv」から「UTF-8」で読み込む。
	表部品1のデータ表を表へ変える。
終わり
```

引数の与え方ですが，これでうまくいきました。ファイル名にスペースがある場合にどうなるかは未検証です。

# 実行

今回は，防衛省の[災害派遣及び不発弾等処理実績のExcelデータ](https://www.e-stat.go.jp/statistics/00700014)を使用しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150160/7595fcea-b4bb-8523-1705-a245f6ae9470.png)

おお！ちゃんと出てきました！！本当に簡単です。15分もあればこのようなWindows用のGUIアプリができてしまいます。
PDFSharpを用いたPDF操作の応用方法

# はじめに
PDFSharpは.NETライブラリの一つで、PDFの生成や編集を容易に行うことができます。
今回はより応用的な使用方法を紹介します。

## 目次
1. PDFのページを結合する方法
2. 既存のPDFにテキストを追加する方法
3. PDFのページを回転させる方法

### 1. PDFのページを結合する方法

PDFSharpを使用して、複数のPDFドキュメントを一つのファイルに結合することができます。
以下に具体的なコード例を示します。

```csharp
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;

public void CombinePdf(string outputFilePath, params string[] inputFilePaths)
{
    // 出力するPDFドキュメントを作成
    using (PdfDocument outputDocument = new PdfDocument())
    {
        // 各入力ファイルを順番に処理
        foreach (string file in inputFilePaths)
        {
            // 入力ファイルを読み込み
            using (PdfDocument inputDocument = PdfReader.Open(file, PdfDocumentOpenMode.Import))
            {
                // 全ページを出力ドキュメントに追加
                foreach (PdfPage page in inputDocument.Pages)
                {
                    outputDocument.AddPage(page);
                }
            }
        }

        // 結合したPDFを保存
        outputDocument.Save(outputFilePath);
    }
}
```

このコードでは、`inputFilePaths`に指定された複数のPDFファイルを読み込み、それらの全ページを`outputFilePath`に指定された新しいPDFファイルに結合しています。

### 2. 既存のPDFにテキストを追加する方法

次に、既存のPDFにテキストを追加する方法について説明します。
この方法は、例えば既存のPDF文書に注釈をつける際に便利です。

```csharp
using PdfSharp.Pdf;
using PdfSharp.Drawing;

public void AddTextToPdf(string filePath, string text, XRect position)
{
    // PDFファイルを編集モードで開く
    using (PdfDocument document = PdfReader.Open(filePath, PdfDocumentOpenMode.Modify))
    {
        // 最初のページに描画するためのグラフィックスオブジェクトを作成
        XGraphics gfx = XGraphics.FromPdfPage(document.Pages[0]);
        // 描画に使用するフォントを定義
        XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic);

        // テキストを指定された位置に描画
        gfx.DrawString(text, font, XBrushes.Black, position, XStringFormats.Center);

        // 変更を保存
        document.Save(filePath);
    }
}
```

このコードは、指定されたPDFの最初のページにテキストを追加します。
`position`はテキストを配置する位置を指定します。

### 3. PDFのページを回転させる方法

最後に、PDFの特定のページを回転させる方法を紹介します。

```csharp
using PdfSharp.Pdf;

public void RotatePdfPage(string filePath, int pageIndex, int angle)
{
    // PDFファイルを編集モードで開く
    using (PdfDocument document = PdfReader.Open(filePath, PdfDocumentOpenMode.Modify))
    {
        // 回転させたいページを取得
        PdfPage page = document.Pages[pageIndex];
        // ページを指定した角度だけ回転
        page.Rotate = (page.Rotate + angle) % 360;

        // 変更を保存
        document.Save(filePath);
    }
}
```

このコードは、指定されたPDFの特定のページを回転させます。
`pageIndex`は回転させたいページのインデックスを指定し、`angle`は回転角度を指定します。

以上
AWSトラブルシュート大喜利勉強会やってみた

# はじめに
NTTテクノクロスのかわちゃきです。こんにちは。普段は部署の人材育成やプロモーション活動、社内研修講師や社内の技術問い合わせの回答などをしています。先日主催した社内勉強会「AWSトラブルシュート大喜利」を紹介します。
この記事は[NTTテクノクロスアドベントカレンダー2023](https://qiita.com/advent-calendar/2023/ntt-tx) 19日目の記事です。

# AWSトラブルシュート大喜利とは
司会が出す"よくあるトラブル相談"のお題に対して、回答者は「あるある！」な"原因"を大喜利風に回答します。
よくあるざっくりとしたトラブル相談に、架空の後輩と背景を捏造しながら、想定した **原因** を大喜利風に回答してもらい **「追加でこういう情報があれば、スムーズにトラブル解析ができるよ」という先輩目線のコメントを回答者に解説** してもらいます。

お題
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309010/69cee7a8-64fb-6f5f-cfec-43a5d4866b4c.png)

回答
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309010/91152a54-0420-46db-9a1f-8048b25ffd37.png)

回答者には[2023 Japan AWS All Certifications Engineers](https://aws.amazon.com/jp/blogs/psa/2023-japan-aws-all-certifications-engineers/) に選出された @watany @ntttx-suzuki-kyohei @kzzzkr23 3名を迎えて開催しました、豪華。

# 実施の経緯
普段業務で技術問い合わせや、後輩から技術的なトラブルについて相談を受けることがあります。その中で相手の解決したい問題や現状を明確にするために、何往復もやりとりすることがあります。そんな問い合わせが少しでも減り、いち早く相手のトラブル解決にたどり着くためにはどうしたらいいか。どのような情報を問い合わせ窓口や先輩に伝えたら良いのか知ってもらいたい。相手にどう情報を伝えればいいか、自分で解決するためにどのようなポイントを確認すればよいかを、ゆるく・楽しく知ってもらう方法のひとつとして開催しました。(今回トラブルシュート大喜利のお題にしたAWSの[技術的なお問い合わせに関するガイドライン](https://aws.amazon.com/jp/premiumsupport/tech-support-guidelines/)も参考になります)

# やってみた
お題「先輩！インスタンスにつながりません！」この原因は？

回答一例
「どこから，どこにあるインスタンスに，どういった手段で接続しようとして，どのようなログが出力されていますか？」
「どうやってインスタンスに接続しようとしてます？セッションマネージャー？SSH？Instance Connect？シリアルコンソール？」
「AWS Q for Reachability Analyzer(Preview)/Amazon Q Network troubleshootingを使ってみよう．環境に合わせてAmazon Qがいい感じに回答してくれるよ！」
「いいから再起動や！」

"つながらない"と言ってもどのようなプロトコルなのか、インスタンス上のアプリケーションなのか様々なので、回答者が原因を特定するために深掘りしてくれました。

# まさかのトラブル
> よくあるざっくりとしたトラブル相談に、架空の後輩と背景を捏造しながら、想定した **原因** を大喜利風に回答してもらい **「追加でこういう情報があれば、スムーズにトラブル解析ができるよ」という先輩目線のコメントを回答者に解説** してもらいます。

原因と「追加でこういう情報があれば、スムーズにトラブル解析ができる」というコメントをいただく想定だったのですが、上記の通り **原因** ~~でボケてくれる人~~を回答してくれる人がいない！~~主催のわたしの伝達ミスです~~みんな、真面目だ・・・

大喜利っぽくはないけれど、目的は達成できそうなので問題ナシ！(勉強会運営については反省。勉強会の流れは、例を多めに伝達します！)
また大喜利とは違って、回答被りは大歓迎です。被った回答ほど、回答者たちが重要にしているポイントになります。

# おわりに
今回は技術問い合わせをする際に相手にどう情報を伝えればいいか、自分で解決するためにどのようなポイントを確認すればよいかを、ゆるく・楽しく知ってもらう方法のひとつとして開催しました。また回答者のつよつよエンジニアがどのようなポイントを確認して、トラブルシュートしているのかを伝授する場にもなったと思います。今後もゆるく・楽しく業務を進めていけるような場を作っていきたいと思います。

明日の[NTTテクノクロスアドベントカレンダー2023](https://qiita.com/advent-calendar/2023/ntt-tx) は @kuwagataaa  と @etctaro です。みなさま、お楽しみに:santa: