OmniAICreator/Qiita-1.07M huggingface dataset:
Library Writeup

# Library Writeup
### boot2root machine for FIT and bsides guatemala CTF


Libraryはブルートフォース攻撃と特権昇格を行いマシンのrootアクセスを取得するシンプルなroomとなっています
![スクリーンショット 2024-11-15 17.49.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932604/6059e2fe-05cf-c783-d170-cbd4db4baac7.png)


ゴールまで必要なもの
・user.txt
・root.txt

### Task1 
・user.txt
はじめにnmapを使用しポートのスキャンを実行します。より詳細な情報が欲しいので-sVと-vvオプションを使用します。以下がコマンドになります。
```
nmap -sV -vv 10.10.218.50
```
・-sV -> バージョン検出スキャン
・-vv ->詳細表示

スキャンの結果からHttpとSSHのポートを発見することができました。

![スクリーンショット 2024-11-15 18.45.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932604/0f2a7940-4315-ffab-796c-2349aee78cb5.png)

.
Httpのポートがオープンしているのでgobusterとcommon.txtを使用して隠しフォルダを探してみます。
```
gobuster dir -u 10.10.218.50 -w /usr/share/wordlists/dirb/common.txt
```
・-u -> スキャン対象のURLを指定
・-w -> 使用するワードリストを指定

![スクリーンショット 2024-11-15 19.19.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932604/c1f75e5c-6707-8c2b-26d5-511978fc040c.png)
興味深いディレクトリはimagesとrobots.txtになります。この二つのファイルとホームページをwebから見てみることにします。
![スクリーンショット 2024-11-15 20.59.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932604/59bfe607-0e8d-a34d-9d3c-b4697f73a429.png)
![スクリーンショット 2024-11-15 21.04.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932604/f326c500-1cc7-c4bb-8461-f4389f68549e.png)

meliodasというユーザがいることが確認できます。
このユーザ名をrockyouというヒントを使いSSH接続を試みます。
Hydraというブルートフォース攻撃用のツールを使います。

![スクリーンショット 2024-11-15 21.17.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932604/511b50e9-4f23-70c4-cfbd-f86bb8f5ba10.png)
hydraを使用するとiloveyou1がパスワードであることがわかり接続することができました。
```
hydra -l meliodas -P /usr/share/wordlists/rockyou.txt ssh://10.10.218.50
```
・-l -> ユーザ名
・-P -> パスワードのリスト

![スクリーンショット 2024-11-15 21.19.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932604/6cf1cbb3-e68b-4e42-d888-a9e795716f96.png)

lsコマンドで確認するとuser.txtを発見することができました。

### Task2 root.txt
sshで接続することができたので、次は特権昇格を目指していきたいと思います。
```
sudo -l
```
・-l -> 自分がどのコマンドをsudo権限で実行できるか

bak.pyファイルのみsudo権限で実行できることがわかります。

![スクリーンショット 2024-11-15 22.14.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932604/df6ffdac-b710-a4bd-8c52-c4ef586221b4.png)

スクリプトに対する書き込みは禁止になっているので既存のスクリプトを消去し
新しいスクリプトを作成することにします。
![スクリーンショット 2024-11-15 22.16.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932604/4e49475a-422e-e4fd-131c-c813935040e5.png)

Pythonスクリプトを作成し、それを bak.py という名前で保存します。作成されるスクリプトは、Pythonの pty モジュールを利用して、新しい擬似端末を生成し、その中で /bin/sh シェルを起動するという動作を行います。

![スクリーンショット 2024-11-15 22.17.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932604/54404fe1-7c87-71bd-6a56-0b01498c3b24.png)

echo -> 文字列を出力するコマンド
pty -> 擬似端末を操作するモジュール

```
sudo python /home/meliodas/bak.py
```
![スクリーンショット 2024-11-16 1.06.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932604/435096f4-c12b-54f5-ed2c-c4b2edc23bcf.png)
スクリプトを実行するとroot権限で入ることができ、rootフォルダに入るとお目当てのroot.txtを見つけることができました。
生成AIを用いてK型熱電対と1-Wire通信を用いた温度計測システムの実装

# K型熱電対と1-Wire通信を用いた温度計測システムの実装

## 概要
本実装は、MAX31850K熱電対デジタル変換モジュールとK型熱電対を使用した温度計測システムです。Raspberry PiのGPIO5を使用し、1-Wire通信プロトコルで温度データを取得します。

## システム構成

### ハードウェア
- Raspberry Pi4 4GB
- MAX31850K熱電対アンプモジュール(Grove
- K型熱電対(Amazonより
- プルアップ抵抗 4.7kΩ (今回は未使用。今後温度安定性など事情で必要？)

### 配線などは飛ばします。。

## 主な機能

継続的な温度モニタリング
自動的なGPIOプルアップ設定
エラーハンドリングと再試行機能
詳細なログ記録
安全な終了処理

```
# 1-Wireドライバの有効化
sudo modprobe w1-gpio
sudo modprobe w1-therm

```

## コード仕様
主要なクラス構成
1. ThermocoupleMonitor クラス
温度センサーの制御と監視を行う中核クラス

GPIOの初期化と設定
センサーの検出と初期化
継続的な温度データの取得
CSVファイルへのデータ記録
エラー処理とログ記録

2. TemperatureGUI クラス
リアルタイムデータ可視化を担当するクラス

Matplotlibを使用したグラフ表示
10分間の温度推移表示
最新温度の大きな数字表示
グラフのスクリーンショット保存機能

3. カスタム例外クラス

NoSensorFoundError: センサー未検出時の例外
SensorNotReadyError: センサー準備失敗時の例外

主な機能

リアルタイム温度モニタリング（1秒間隔）
データのCSV保存（日時、温度）
ログローテーション機能付きのログ記録
グラフィカルなリアルタイム表示
エラー時の自動リトライ機能
システム要件の自動チェック

使用技術

Python 3.x
Raspberry Pi GPIO
1-Wire通信プロトコル
マルチスレッディング
Matplotlib（グラフ描画）
CSV/ログファイル処理

動作環境

Raspberry Pi
Python 3.x
必要なPythonパッケージ: matplotlib, logging

特徴的な点として、このシステムは産業用途でも使用できる堅牢性を備えており、以下の機能を実装しています：

エラー時の自動リカバリー
詳細なログ記録
データの永続化
リアルタイムモニタリング


## 結果画像

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448426/b248490f-cae2-7edb-6084-4f37adf0ac28.png)

## 所感
今回も生成AIを用いて、作成/完成させた。
最初は、I2C ?  1-wire?と不明なことが多々あったが
最終的にpythonのスクリプトで構成できた。

今後も生成AIを用いた開発に鋭意取り組んでいく。
負荷遮断

>ネットワークが配信できないパケットを破棄することである。

>ルーターが処理できる量を超えたパケットで氾濫している場合は、ルーターがその一部を破棄する

### どれを破棄するかはデータによる
>ファイル転送の場合には、古いパケットの方が新しいパケットより重要性が高い

>古いパケットを優先するポリシーをワイン

>リアルタイム・メディアにおいては新しいパケットの方が古いパケットよりも重要性が高い

>新しいパケットを優先するポリシーをミルクと呼ぶ。

### 実現したもの
>全員がすべてのパケットに「最重要-−破棄厳禁」という印をつけると、優先度として意味をなさなくなってしまうため、これを避けるための何らかの仕組みが必要である。課金形態を工夫することで、送信者がこうした浅はかな行為を行わないような仕組みを実現している例も多い。例えば、加入しているサービスの上限を超過したパケットに対して低い優先度をつければ、ユーザーが購入したサービスのky定よりも速い速度でトラフィックを送信できるようにする方法である。

* 携帯のパケットが超過したら遅くなるのは負荷遮断されているからなのか。


https://bookplus.nikkei.com/atcl/catalog/23/03/16/00728/

# 感想
パケットに優先度をつけて必要であれば低い順に破棄して輻輳を防ぐ
CISCOのAnyConnectでVPN接続をしているとWSL2からsshでログインできない

「CISCOのAnyConnectでVPN接続をしているとWSL2からsshでログインできない」の解決法です．

1. WSL Settingを実行
2. メニューから「ネットワーク」を選択
3. 「ネットワークモード」で「Nat」になっているのを「Mirrored」に変更
4. 再起動

ある日突然接続できなくなって，しかたなく，Tera Termで接続していましたが，これで接続できるようになりました．
タイマーコントロールで画面遷移を行う

## はじめに
BizOptimars のいのうえです。
今回は、タイマーコントロールを使って画面遷移を行っていきます。

## 用意したもの
Power Apps で 3 つの画面を作成しました。

ホーム画面 (scrHome)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/a5b0909f-2292-1516-dc44-c9fa16aa511a.png)

入力画面 (scrEdit)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/d5e81950-4b92-08b8-79bc-78f494509cce.png)

成功画面 (scrSuccess)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/abb2c02f-6dcd-d59b-5e87-b06781c2ac3c.png)

入力画面の登録ボタンには、フォームが登録された後に、成功画面に遷移するように式を書いておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/a07e1309-4a24-1ee4-59dd-31815506ac5d.png)

## タイマーコントールで画面遷移
成功画面に移動した後、自動的にホーム画面に遷移するようにタイマーコントロールを使って設定を行いたいと思います。

成功画面にタイマーを挿入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/8a2d2d1c-9d15-fbc8-85f8-e4cc5b79e725.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/e29bac44-aa08-17dc-e96d-8686eb401339.png)

成功画面に遷移したときにタイマーをスタートさせたいので、自動開始を オン にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/264ec88a-552f-1735-996a-89d24e4b4ddb.png)

タイマーコントロールの OnTimerEnd プロパティに、ホーム画面へ遷移する処理の式を入力します。
OnTimerEnd プロパティは、タイマーが実行を完了したときに実行するアクションです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/974e75be-918d-eeff-1148-cc796b03b148.png)

次にタイマーの時間を設定します。
今回は 5 秒で設定したいと思いますので、ミリ秒単位になっていますので、期間に 5000 と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/8ec2606b-7d65-c4f3-9f71-04fecf03ee57.png)

※既定値は 60 秒になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/a23ec0d2-b13c-593b-782f-cc9204552c4d.png)

この状態で試してみますと、自動的にホーム画面に遷移することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/2f8d8a2c-7d67-ce49-f863-c080b280d4d5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/7ee5a0d3-1ed2-8c17-9e23-663b99712599.png)

最後にタイマーの表示をオフにしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/27825925-ea7b-f15c-022d-ba45a480a986.png)

## おわりに
今までのお客様の中でも、自動的に画面遷移したいという要望はございました。
今回は、タイマーを使ってみましたが、例えば OnSuccess プロパティに画面遷移の処理を設定するなど、方法はひとつではありませんので、ぜひ試していただければと思います。
イラストやを使わないとパワポを作る労力は増えるのか

# いらすとやを使わずにパワーポイントを作成するコストを検証してみた

## 1. はじめに
「いらすとや」を使用しない場合、どれだけ時間や手間がかかるのかを明確化します。本記事はプレゼン資料作成者やデザインコストに悩むビジネスパーソン向け、コストの内訳を検証したものです。
私も資料作成ではデザイン性などの部分で苦慮しており、今回の記事を書くに至りました。
検証といいますか、あくまでも所感になっておりますので、ご容赦ください。


---

## 2. いらすとやとは何か？
- **いらすとやの概要と特徴**  
「いらすとや」は、豊富な無料イラスト素材を提供するWebサービスで、日本の多くのプレゼン資料やコンテンツ制作で使用されています。
- **いらすとやを使うメリット**  
例えば、素材探しの時間を短縮し、資料のデザインを手軽に向上させることができます。
- **本記事で検証する理由**  
あえて「いらすとや」を使用しない場合のコストを具体化するため。
著作権フリーなサイトがどれだけあるのか。

---

## 3. いらすとやを使用しないパワーポイント作成のプロセス

### 3.1 テーマとデザインの決定
- デザインアイデアを考える時間
- テンプレートの選定やカスタマイズの労力

### 3.2 コンテンツ作成
- スライドに載せる情報の収集や整理
- 適切な配置やフォーマット調整の手間

### 3.3 ビジュアル素材の準備
- 画像やアイコンの作成・検索
- フォントやカラーパレットの選定

### 3.4 全体の仕上げと微調整
- レイアウト確認や調整
- 他者へのレビュー依頼と修正対応

---

## 4. コストの内訳

### 4.1 時間的コスト
- 各工程にかかった時間
資料作成において、考えないといけないのは、その資料の背景や見せる人や場など様々なものがあります。
それによってデザイン性などが変わってきます。
今回は、軽いセミナー資料の作成ということを題材に比べてみました。

いらすとやを使用した場合。
→20分
いらすとやを使用しない場合
→35分

- 「いらすとや」を使用した場合との比較
自分の資料作成能力の有無もありますが、大体1.5倍の数値になりました。

### 4.2 精神的コスト
- デザインの煩雑さや迷いによるストレス
デザインを考えるうえで、いらすとやは「検索をし張り付ける」という作業だけで済むのですが、
その他の著作権フリーサイトでは、「検索をして、それがこの資料の色合い、テイストにあうのか」「また透過度などをどうする、配置をどうする」などの別の要因が迷いとなってストレスとなります。
---

## 5. いらすとや未使用による課題
- デザインの統一感が取れにくい
- 作業効率が悪化する可能性
- プレゼンのクオリティに影響を及ぼす場合も

---

## 6. いらすとやを使用する価値とは
- コスト比較から見る「いらすとや」のメリット
先ほどの検証からも、いらすとやは直感的でなおかつわかりやすいものであることがわかりました。

- 作成者の負担軽減やクオリティ向上効果
画像を探し張り付けるという負担軽減と、クオリティが向上すると一概には言えませんが、見やすく言いたいことがはっきりとしている点では向上しています。
---

## 7. まとめ
- パワーポイント作成におけるコストの重要性
- 「いらすとや」未使用の検証結果から得られた知見

---
ファイナンス理論入門 ~金融工学へのプロローグ~

# ファイナンス理論入門 ~金融工学へのプロローグ~
ファイナンス理論を以下の書籍をベースに学びます。

https://www.amazon.co.jp/ファイナンス理論入門-金融工学へのプロローグ-木島-正明/dp/4254290160

当記事は、本書のまとめ及び補足ノートの位置付けで書いていこうと思います。
#### 重要
当サイトの記事内容には細心の注意を払っておりますが、万が一、誤りや不正確な情報が含まれている場合がございます。ご指摘や修正のご提案がございましたら、どうぞお気軽にご連絡いただければ幸いです。皆様からのフィードバックを基に、情報の正確性をさらに向上させてまいります。

### 目次
[1.金融実務の概観](#1-金融実務の概観)
[2.貨幣の時間価値とキャッシュフローの評価](#2-貨幣の時間価値とキャッシュフローの評価)
[3.コーポレートフィナンス](#3-コーポレートフィナンス)
[4.リスクとリスクプレミアム](#4-リスクとリスクプレミアム)
[5.現代ポートフォリオ理論](#5-現代ポートフォリオ理論)
[6.金融派生証券](#6-金融派生証券)
[7.金融商品の価格付け](#7-金融商品の価格付け)
[8.ファイナンス理論の応用](#8-ファイナンス理論の応用)

# 1. 金融実務の概観

https://qiita.com/chomomu/items/dd223fbe0704f501755c

# 2. 貨幣の時間価値とキャッシュフローの評価
# 3. コーポレートフィナンス
# 4. リスクとリスクプレミアム
# 5. 現代ポートフォリオ理論
# 6. 金融派生証券
# 7. 金融商品の価格付け
# 8. ファイナンス理論の応用
アドミッション制御

>特に短い時間スケールでは、容量を増やすことができない場合がある。その場合、輻輳を打ち消すには、負荷を減らすしかない。仮想回線ネットワークでは、`ネットワークが輻輳するようなコンクションは否定`することができる。

>ネットワークが輻輳を起こさずにトラフィックを送り届けられない場合には、新たな仮想回線を確立しない。

* 仮想回線を確立させないことで遅延すら起きない

### アドミッション制御を活かすには
> この方法のコツは、新しい仮想回路が輻輳を引き起こすタイミングを見極めることである。

### 様々な帯域
>電話ネットワークの場合には音声電話の帯域は一律であるためアドミッション制御は単純である。しかしコンピュータ・ネットワークでは様々な形やお大きさの仮想回線が混在しているこのように、アドミッション制御を適用する場合には、回線はそのトラフィックについて何らかの特徴づけを行う必要がある。

### トラフィック・アウェア・ルーティングと組み合わせる
>仮想回線の確立処理においてホットスポットを回避するルートを考慮することによって、アドミッション制御をとラフィック・アウェア・ルーティングと組み合わせることができる。

>輻輳が発生しているルーターと、それに接続しているすべてのリンクを取り除けば、ネットワークを図5−22(b)のように書き換えることができる。

https://bookplus.nikkei.com/atcl/catalog/23/03/16/00728/

# 感想
輻輳が起きそうならつながない。

* トラフィックとは具体的に何のか？

https://biz.kddi.com/content/glossary/t/traffic/#:~:text=Traffic%E3%81%A8%E3%81%AF,%E3%81%9F%E3%82%81%E3%81%AB%E7%9B%A3%E8%A6%96%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82

* リーキーバケツ、トークンバケツとは？
* トラフィック・シェイピングとは？
* バースト性とは？
Qiitaの投稿禁止内容の覚書

## はじめに
自宅ネットワークの10Gbps環境を廉価で構築 の記事を書いたが、
「本文に投稿禁止の内容が含まれています。」
で公開不可。なんやねん。

## テスト
何が投稿禁止の文字なのかテストする。
以下らへんが禁止っぽいが禁止ワードが何かを具体的に教えてくれないQiitaが悪い。

挿入
挿し込む
キチガイパワー
廃棄品
DL
exe
やること
Aliexpress

## 結果
Aliexpress
のeをEにしたら禁止ワードでした。何の意味があるのか。
BizOptimars ができること

こちらの記事は、Cacooを使用しまとめています。
https://cacoo.com/diagrams/mCveg239qI4BNqFv/20BDE

本日ワークショップを行いました！
テーマは...「BizOptimars ができること」

観点は以下 3 つです。
・日本
・支援
・技術

私たちのグループの観点は「日本」！
ディスカッションしたことをまとめましたので、ぜひご覧ください。

## 導入
もしも私が、総理大臣だったら....

やはり「日本で働きたい」と思ってもらいたい！！

では、今の日本の現状はどうなっているのでしょうか？

## 日本の現状
現在の日本では、IT業界だけでなく第2次、第3次産業においても、東京や主要都市に企業や仕事が集中しています。人口密度に比例して仕事を求める人々が集まり、都市部の過密化が進む一方で、地域格差がさらに悪化しています。産業が発達していない地域では、業種が限られており、地域によって得意な産業が異なるため、職業による賃金格差も生じています。IT技術の発展により、国内だけでなく世界が競争相手となり、格差は一層広がってしまっている現状です。

## 市民の現状
次は、様々な状況にいる市民にフォーカスしてみるとどうでしょうか。
昨今の若い働き手はやりがいよりも「給与」や「働きやすさ」を重視しする人が増えていたり、育児や介護による世話などで制限を受け、働きたくても働けない人もいます。
市民それぞれに様々な事情があり、このように働く環境に対して、求めるものは多様化してきています。

これらの現状を踏まえ、私たちは BizOptimars が日本に対してできることは何か考え、日本全体の働き方を改善し、誰もが働きやすい環境を提供することができるのではないと思いました。そのためにできることは何か、対策を考えてみます。

# 一人一人にフォーカスした対策
 状況別に市民一人一人にフォーカスし、具体的な対策を考えてみましょう。

### 若者
現状: やりがいよりも「給与」や「働きやすさ」を重視している。

対策: 若者が魅力を感じる給与と働きやすさを提供するため、柔軟な働き方やリモートワークの推進を進めます。

### 子育て世代
現状: 育児の質を向上させるために一軒家や地方への移住を検討することが多く、育児による制限もあります。

対策: 育児と仕事を両立できるよう、フレキシブルな勤務時間や在宅勤務を支援します。

### 介護者
現状: 介護をする人は社会との隔絶が大きく、日常生活のサポートによる時間的・体力的制限があります。

対策: 介護者が働きやすい環境を提供するため、リモートワークや短時間勤務を支援します。

### 障がい者
現状: 体力や体の自由が比較的少ない人でも、PCに向かうことはできるため、開発者になることが可能です。

対策: 障がい者が開発者として働けるよう、オンラインワークショップやトレーニングプログラムを作成し、スキルアップを支援します。

## 教育のガイドラインとレベル分け
育児や介護で時間が限られている人でも取り組めるよう、ワークショップで簡単なアプリを作成できる場所を提供します。
具体的な教育ガイドラインとして以下のようなレベル分けを行い、それぞれのレベルでハンズオンを提供します。

例えば、
Level1: Power Apps単体で関数を2個使う
Level2: Level1に対して、関数を2個追加
Level3: Level2に対して、関数を3個追加
Level4: Level3に対して、関数を3個追加
Level5: Level4に対して、Power Automateを使う

これにより、合間の時間で少しずつスキルを習得し、働くことができます。

## オンラインでのサポートとモチベーションの向上
YouTubeや有料動画サイトで手順やハンズオンを公開することで、学習した者同士がコメントで成果を共有し合うことができます。
例えば、Level1ができたとコメントをもらったら、いいねやすごいねといったリアクションやコメントをすることで、達成感を得ることができます。これにより、学習した者は次のレベルに挑戦する気持ちを持つことができます。


# まとめ（個人の対策からコミュニティへーーーー）
前述した個々の状況に対し、柔軟に対応することで
さらに次のステップに進むことができます。

それはコミュニティの活性化です。

それぞれの年代や状況によりやりたいことや、やれることが違う中で、それぞれに対策を提示してきましたが、Power Platform を主とした市民開発者やプロ開発者となるために提示したワークショップやトレーニングプログラムを実行して、自身の中での成功体験や達成感を感じて欲しいと考えています。

また、当社が提供しているコミュニティ支援ではコミュニティ活性化させるためにコミュニケーションやマインドに関してサポートも行っています。

その中で重要視するべきことは良いものを作っていく「仲間」としてコミュニティ内でそれぞれの活動に対し認め、より良いコミュニケーションを取ることに努め、コミュニティを大きくしていくことで個人から１つの部署へ。１つの部署から会社全体へ。会社から街や自治体を巻き込んだ取り組みへと繋がり、一人一人の小さな挑戦が中小企業や地方でも活躍ができ、規模が大きくなっていくことで、やがて地方や都市部が関係なく日本全体で全ての産業がITによって活発化して格差ではなく特色として、世界と戦っていけるようになったら「より良い日本」で働きたいと思えるよう導く手伝いをする。
私たちが総理大臣になってみて考えたBizOptimarsができることだと思います。
ビジュアルプログラミング言語「ウミヘビ」入門

この世界にはビジュアルプログラミング言語が数多く存在しますが、なかなか知られてないのが多いです。本稿では、私の知り合いが開発しているビジュアルプログラミング言語「ウミヘビ」を紹介します。

## ウミヘビとは？

https://ubazame.pages.dev/Iwashi/e/Umihebi/about
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952107/c2928081-02fb-d03f-c4b5-d9ee0e23b774.png)

らしいです。
ビジュアルプログラミング言語は個人的に動的型システムが多いというイメージ（偏見）でしたが、ウミヘビは静的型付け言語なんですね。ここはちょっと意外でした。

## 使ってみた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952107/242b8177-bdaf-5ef7-e9a0-8948e61ea58a.png)

エディタはこんな感じになっています。

試しに実際に簡単なプログラムを書いてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952107/573bbc26-fced-f4c5-492e-2b13cd6a8104.png)

条件分岐にElse節が無いのは今後に期待。

## 公開

「イワシ」という作ったプログラムを公開できるサービスがあります。
登録は手動の様ですね。

https://ubazame.pages.dev/Iwashi/

おみくじはこのリンクからどうぞ

https://ubazame.pages.dev/Umihebi/api/runtime/?p=%E3%81%8A%E3%81%BF%E3%81%8F%E3%81%98

# まとめ

ウミヘビ言語、かなり完成度高いと感じました。
みなさんも興味あれば使ってみてください。
11/15

## 日記 11/15

### 昨日までの進捗

・opneposeのバイナリファイルの実行とか。
・動画をフレームごとの画像ファイルに書き出すプログラムの作成。
```
python motoimg.py  読み込む動画 保存先のディレクトリ 保存するファイルの名前
```
```
この動画のフレーム数は586です。
この動画のフレームレートは30.0fpsです。
書き出すフレーム数を入力してクレメンス
60
書き出すフレーム数を60と設定。
```
こんな感じで書き出す内容を設定できるようにした。

### 今週中にやること
・openposeの出力形式を調べる。
・3dposebaselineの入力形式を調べる。
・3dposebaselineの実装。
・骨格情報を保存したファイルの変換を行うプログラムの作成。

## openposeをソースファイルから実行できるようにする

https://qiita.com/miu200521358/items/539aaa63f16869191508#1-openposedemo%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%96%E3%83%AB%E7%89%88-%E3%81%AE%E5%AE%9F%E8%A1%8C

参考した記事。

### NVIDIA CUDAのインストール
インストールは行えた。

### cuDNNのインストール
とりあえずzipファイルをダウンロードして、cドアライブに展開した。フォルダ名は"cuda"だった。

### CMake GUIのインストール
インストールは行った。
openposeのソースコードの入手を行った。

https://github.com/CMU-Perceptual-Computing-Lab/openpose/tree/v1.3.0

ここから、zipファイルをダウンロードして展開した。

```
c:\openpose_master\
```
の中にopenpose-1.3.0というデイレクトリを置いておいた。

```
c:\openpose_build\
```
このディレクトリをビルド先として用意した。

記事の内容に従って、進めたがうまくいかない。

結論、無理。今日の進捗は、何もなかった。

### バイナリの機能でとりあえず進めることにする。
jsonファイルの書き出しができれば、3dposebaselineの入力形式に変換できるだろう。
トラフィック・アウェア・ルーティング

>ローカルな無線局の中には、街中にヘリコプターを飛ばして道路の渋滞状況を把握し、混雑している領域にいるモバイル局（車）がパケットのルートを確保できるようにしているものもある。

* パケット状況を俯瞰してパケットのルートを管理している
### 目的
>ネットワークの中で最も混み合っているホットスポットからトラフィックを迂回させることにある。

### 弱点
> リンクCFには高い負荷がかかり、長い遅延が発生する。この場合、最短経路を求めるための重みを算出する際に、キューにおける遅延を考慮すると、CFよりもEIの方が小さい重みなるという結果が出る。
この結果に基づきルーティング・テーブルを更新すると、今度は東西関の通信トラフィックのほとんどはリンクEIに流れ込むことになり、EIの負荷が高まる

* 計算結果で負荷が小さい方にパケットを流すが、逆に負荷が高くなり遅延が起こる

### 弱点の解決策
>送信元から宛先への複数のルートを利用する多重経路ルーティングである

>ルート間のトラフィックのシフトをゆっくりと行う

* 経路を多くしたり、計算結果によるトラフィックのシフトをゆっくりすれば良さそう

### トラフィックエンジニアリング
>インターネットでは一般的にルーティング・プロトコルは負荷に応じてルートを調整することはない。その代わり、ネットワーク管理者は、ルーティング・プロトコルをゆっくりと変更することで、より遅い時間スケールでルーティング・プロトコルを調整する。これはトラフィックエンジニアリングと呼ばれることもあるプロセスである。

>最近では、ソフトウェア定義ネットワークの登場により、これらのタスクを一部自動化することが可能になった。


https://bookplus.nikkei.com/atcl/catalog/23/03/16/00728/

# 感想
負荷の小さいところにパケットを流して遅延をなくす。
しかしその過程では調整が必要であり、難しかった。最近ではソフトウェア定義ネットワークで一部自動化されている
Power Automate で複数人に Outlook メールを送る方法

# はじめに
ごきげんよう、百合宮桜です。
自動化のはじめの一歩として「メールの自動送信」ってよくやりますね！
私も Outlook メールの送信を自動化をお客様から質問いただくことが多いです。
Excel で宛先を一覧表にして、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/d4c1124e-4839-4885-1311-50eac3bc2d3b.png)

それを Outlook の宛先に設定する方法をいくつか紹介します。それぞれ良いところが違うので、ご自身でやりたいものを使っていただければと思います。

# 繰り返し処理を使って、複数人をつなげる

わかりやすい方法としては、Excel の「表内に存在する行を一覧表示」アクションで、テーブルのデータを取得し、メールアドレスだけを「;（セミコロン）」でつないで変数に格納するというものがあります。

【全体イメージ】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/3b1b7d79-d8ed-223b-4205-06e5eb1f9f55.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/b2f01fa5-576d-d045-f536-b558324c824b.png)

【複数人の宛先を作成する部分】
変数の初期化アクションを文字列設定で作って
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/268971ce-1fc4-0471-f209-ce276eb60696.png)

繰り返し処理で1個ずつ追加していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/75f2e9f8-c7e0-d50e-1250-6c68846fafb9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/d64d85ef-44ce-9f03-4e3b-d11939a2c1a1.png)

この方法だとマウスポチポチで全部できてわかりやすいですが、For each が入るので実行回数がかさんでしまいます。実行回数については以下のドキュメントをお読みいただくとわかると思いますが、ライセンスによって１日に実行できる回数が制限されます。

https://learn.microsoft.com/ja-jp/power-platform/admin/api-request-limits-allocations

この制限を超えてしまうと、実行速度が遅くなります。Apply each をはじめとする繰り返し処理のアクションは、1回ごとに実行回数がかさみます。今回の場合は3人にメールを送っているので、3回実行しているということになります。
実行回数の制限に引っかからないために Power Automate をたくさん使っている人はできるだけ実行回数を抑えた運用をしたほうがいいかもしれません。

# 選択と結合で複数人を結合する

続いて、配列を結合する方法を紹介します。
こちらは Apply each が不要なので、実行回数が1回で済みます。
Power Automate でたくさんの自動化を行っていて、実行回数の削減を狙いたい人に向いている方法です。

【全体イメージ】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/22680781-b69f-bee5-74bb-f2bc88d7498d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/b2f01fa5-576d-d045-f536-b558324c824b.png)

ただ、配列の理解は、Power Automate で初めてプログラミングを行うという初心者の方には難しい場合があります。チームで開発するときは技術的な知見な人ばかりではないので、難しい仕組みを作るかどうかは慎重に判断する必要があります。

【複数人の宛先を作成する部分】
選択アクションで、Excel のテーブルからメールアドレスの部分だけを抽出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/2b704670-acdc-99d7-abbd-d35ed34e7788.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/a33adbb0-01a2-a3ac-5879-542e6b55fea6.png)

そうすると、このように配列が出力されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/b4cc46b2-03de-7b9a-e183-0b4507501222.png)

このままだと Outlook メールで宛先として認識されないので、; を利用して宛先として認識される形に変えていきます。これが結合アクションの役割です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/3e082f64-7385-ad81-4797-21f42d912747.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/c6015c2b-6df1-7d73-5305-21580ce79090.png)

これで実行回数を節約できるフローができあがります。

# 終わりに

いかがでしたか？
複数人にメールを同時送信するというミッションに様々なアプローチがあることがわかると思います。
ぜひご自身でいろいろ試して、最適な方法を選択してみてください♪
Microsoft Fabric AI Skill　AIのカスタマイズについて

## AI Skillとは
Fabricのレイクハウス、ウェアハウス上のデータに対し質問をすると、
その答えを得られるSQLを生成、実行してくれる生成AIです。
ビジネスユーザーが簡単にデータから洞察を得るための支援をしてくれます。

https://learn.microsoft.com/ja-jp/fabric/data-science/concept-ai-skill

![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850932/1ebec083-7f93-59be-8b24-fcd7504d3bf7.png)

## AI Skillのカスタマイズ
AI Skillは2つの方法でカスタマイズし、ユーザに提供することができます。
エンジニアがカスタマイズし、ビジネスユーザに提供することで、
ビジネスユーザは簡単な質問で、データから洞察を得ることができます。

### 指示の提供
指示を使用してAIを誘導することができます。
以下のような指示を15000字まで、英語で入力することができます。

![スクリーンショット 2024-11-19 170806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850932/524beb2b-a128-e7bd-0bbc-02b0880e96fc.png)

**主要なテーブルの指定**
特定の質問に対して、どのテーブルを主に使用すべきかを明示する。

例） 主にFactInternetSalesテーブルを使用し、再販に関する質問の場合のみFactResellerSalesを使用する。


**メトリックの定義**
「最も売れている」や「影響を与えた」などの表現が指す具体的なメトリックを指定する。

例） "最も売れている" 製品とは、総売上収益が最も高い製品を指す。


**関連テーブルとの結合**
特定の分析を行う際に、どのテーブルと結合すべきかを指示する。

例） 製品情報の詳細を取得する際は、FactInternetSalesとDimProduct を結合する。


**集計方法の指定**
データの集計方法や並べ替えの基準を明確にする。

例） 売上データを集計する際は、SUM関数を使用し、結果を売上収益で降順に並べ替える。

### サンプルSQLの提供
頻出の質問について、正解のSQLを提供しておくことで、
完全に正しい形でSQLを提供できます。
言い回しの異なる質問に対しても同じ結果を提供できます。

![６.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850932/68a70e53-8b61-3df0-fc56-9ad0f10a1f6a.png)

## カスタマイズの結果
カスタマイズ前には応答が無かった質問に応答を返すようになります。
これで、ビジネスユーザは複雑な質問をすることなく、
簡単にデータから洞察を得ることができます。

カスタマイズ前
![１１１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850932/8bd3c27e-92ee-be13-ef1b-69fe65c44e66.png)


カスタマイズ後
![１２２２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850932/18733944-6d9d-5f37-320f-e87ba6dbd469.png)

## さいごに
より詳細な検証はこちらもご参照ください。

https://www.docswell.com/s/6140290960/ZL1Q1L-2024-11-07-210547/1
DatabricksのAI/BI Genieとダッシュボードの連携が強化されました！

ホームページの最新情報で気づきました。

![Screenshot 2024-11-15 at 15.31.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/12dc1dec-e0ca-3269-592c-3937f44f46e4.png)

**インテグレーションされたAI/BIダッシュボード・Genieの体験**

> お使いのAI/BIダッシュボードをベースとして自動で作成されるAI/BI Genieスペースは、公開されているダッシュボードから参照者が直接Genieとチャットできるように再デザインされました。

マニュアルはこちら。

https://docs.databricks.com/ja/dashboards/index.html#enable-a-genie-space-from-your-dashboard

ダッシュボード公開時に**Genieの有効化**をオンにします。

![Screenshot 2024-11-15 at 15.34.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/cc27b178-4d25-fd9a-4017-5a29c1ded563.png)

ダッシュボード右上にある**Genieに聞く**をクリックします。以前は別ページに遷移していたのですが、今回のエンハンスでダッシュボード上に直接Genieとのチャット画面が表示されるようになりました！

![Screenshot 2024-11-15 at 15.28.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a32c392e-bf3d-9065-b60a-61836a0ec935.png)

チャット画面上の3点リーダーから別画面でGenieスペースを開くこともできます。

![Screenshot 2024-11-15 at 15.29.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ba7f0020-97d1-eb29-5ed0-538a7d7809b6.png)

ダッシュボードでデータを俯瞰し、深掘りのための質問をGenieにするというサイクルがよりスムーズに回せるようになりました。是非ご活用ください！

### はじめてのDatabricks

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

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
Rust Tips Vectorとスライス

# スライス型
Rustではスライス型を`[T]`もしくは`&[T]`と表現するらしいです。
`[i32]`とは`i32`型のスライス型となります。
# Vectorをスライス型にする
Vectorをスライス型にする方法は複数あります。

こちらのVectorをスライス型にしていきます。
```rust
 let v = vec![1, 2, 3];
```
### as_slice()メソッド
Vectorのas_slicceメソッドを使います。
型は`&[T]`となります。
```rust
let v_slice: &[i32] = v.as_slice();    
```
 
### 参照外し(dereferencing)
参照じゃないのに参照外し？と思いましたが、VectorにはDerefトレイトが実装されているので、Derefトレイトの機能によってスライスに変換します。
「中身を取得する」という意味での参照外しです。
型は`&[T]`となります。
```rust
let v_slice: &[i32] = &*v;    
```
:warning:  `&*v`と`&`をつけて参照型にしないと、「the size for values of type `[{integer}]` cannot be known at compilation time」とサイズ不明エラーになります。サイズが決まっているポインターにする必要があります。   
    
### [..]スライシング
 ```rust
 let v_slice: &[i32] = &v[..];     
 ```

# Vectorのスライスを分配したかった
これが本題でした。
スライスした値を分配したかったのです。

しかし、こちらはエラーになりました。
```rust
let [v1, v2, v3] = v.as_slice();
```  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477554/b8f3439d-7dd4-cb61-2322-c04cf2cbdcb4.png)
代入もパターンマッチングを使います。代入の場合は[「論駁不可能」なパターン](https://doc.rust-jp.rs/book-ja/ch18-02-refutability.html)でないとダメなのです。
今回のようなVecotrは**動的配列**なので「論駁可能」なパターンとなります。
`v1`、`v2`、`v3`に分配していますが、「本当にスライスの結果が３つしかないんでよね？」がコンパイル時点では不明です。もしかすると４つかもしれないよね？
```rust
 let v = vec![1, 2, 3];
```
と定義しているから３つに決まっているじゃないか！とプログラマーは知っていますが、残念ながらコンパイラーはそこまで認識しません。。。

では、「論駁可能」でも分配する方法は、`if let`もしくは`match`を使います。
```rust
   // スライスの要素を個別に変数に割り当てる
    if let [a, b, c] = v.as_slice() {
        println!("a = {}, b = {}, c = {}", a, b, c);
    } else {
        println!("スライスの長さが一致しません");
    }
```
万が一、数が分配とスライスの結果で違った場合は、`else`の処理を実行させます。`else`の処理の実装は必須ではありませんが。

以上です。
vscodeのsftpでmultiple hopするtip

# 環境
- 192.168.0.1 ローカル windows
- 192.168.1.1 Hop-1 windows
- 192.168.2.1 Hop-2 linux
- 192.168.3.1 target linux

# 手順
1. ローカルで鍵を作り、.ssh/id_rsa.pubを192.168.1.1の./ssh/authrized_keysにコピー
2. 192.168.1.1で鍵を作り、.ssh/id_rsa.pubを192.168.2.1の./ssh/authrized_keysにコピー
2. 192.168.2.1で鍵を作り、.ssh/id_rsa.pubを192.168.3.1の./ssh/authrized_keysにコピー
4. vscode sftp configを以下のようにする。user name, 各種pathがどのマシンにおけるものなのかがややこしいので注意。

```
{
  "name": "target",
  "remotePath": "/target/src",

  "host": "192.168.1.1",  // 最初につなぐ先
  "username": "myaccount_on_1.1", // 192.168.1.1上のアカウント
  "privateKeyPath": "C:/Users/自分とか/.ssh/id_rsa_create_on_0.1",  // windowsの場合。ローカル(192.168.0.1)
  上のpath
  "protocol": "sftp",
  "port": 22,
  "uploadOnSave": true,
  "hop": {
    "host": "192.168.2.1", // 次につなぐ先
    "username": "myaccount_on_2.1",  // 192.168.2.1上のアカウント
    "privateKeyPath": "C:/Users/myaccount_on_1.1/.ssh//id_rsa_create_on_1.1",   // 192.168.1.1がwindowsの場合。192.168.1.1上のpath。
    "protocol": "sftp",
    "port": 22,
    "hop": {
      "host": "192.168.3.1", // 最後(target)につなぐ先
      "username": "myaccount_on_3.1",  // 192.168.3.1上のアカウント
      "privateKeyPath": "~/.ssh/id_rsa_create_on_2.1",   // 192.168.2.1がlinuxの場合。192.168.2.1上のpath。この例ではmyaccount_on_2.1のホーム/.sshを指している。
      "protocol": "sftp",
      "port": 22
    }
  }
}
```

# 3回作らないとダメ？
全部同じid_rsaを使うことも可能ですが秘密鍵を使いまわすのは避けたほうがよいと思われます。

# .ssh/config に書くのは？
ターミナルでのsshでは動作しますが、sftpプラグインでは"openSsh":trueにするとconfigが有効とありますがNGでした。
Service PrincipalをDatabricksクラスタのシングルユーザに指定する

※　備忘録的な内容です。

<br>

仕事で必要になったため、Databricksでシングルノードかつセキュリティモード＝シングルユーザのAll Purposeクラスタを作り、かつシングルユーザはService Principalを指定しないといけない機会がありました。

ただ、DatabricksのUI上ではService Principalをユーザに指定できないんですよね。
ググったらコミュニティでも質問出てました。

https://community.databricks.com/t5/data-engineering/databricks-single-user-cluster-is-not-able-to-assign-service/td-p/4592

CLIを使うのが一番簡単だとは思うのですが、REST APIを直接叩いても簡単に変更できます。今回はREST APIを叩いて変更する方法の記録です。

前提として、既にクラスタ自体は作成されており、セキュリティモードとシングルユーザ名だけを変えたいという状況とします。


Databricks上でノートブックを作成して、以下のコードをAPIのURLやcluster_id等を適切に設定して実行すると変更できます。

```python
import requests

# 変更するクラスタのID
cluster_id = "xxxx-xxxxxx-xxxxxxx"
# 指定するService PrincipalのユーザID
single_user_name = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"

# クラスタ設定を部分変更するAPIのURL
endpoint_change = f"https://xxxxxx.databricks.com/api/2.1/clusters/update"

# ノートブック実行ユーザからAPIトークンを取得
token = (
    dbutils.notebook.entry_point.getDbutils()
    .notebook()
    .getContext()
    .apiToken()
    .getOrElse(None)
)

# REST API実行のためのペイロードとヘッダ
headers = {"Authorization": "Bearer %s" % token, "Content-Type": "application/json"}
payload_change = {
    "cluster_id": cluster_id,
    "cluster": {
        "data_security_mode": "SINGLE_USER",
        "single_user_name": single_user_name,
    },
    "update_mask": "data_security_mode,single_user_name",
}

# 更新実行
response = requests.post(endpoint_change, headers=headers, json=payload_change)

# 結果の表示
response.json()
```

ちなみにCLIだと```databricks clusters update```コマンドで同様の部分変更が可能だと思います。
WebPとは？ネットで使われる理由

WebP（ウェッピー）は、Googleが開発した画像フォーマットで、Webページのパフォーマンスを向上させるために設計されています。従来のJPEGやPNGに比べて、画像サイズを大幅に削減できるのが特徴です。具体的なポイントは以下のとおりです：

### WebPの特徴
1. **ファイルサイズの小ささ**  
   WebPは、圧縮アルゴリズムの工夫により、JPEGやPNGよりも圧倒的に小さいファイルサイズで画像を保存できます。これは非可逆圧縮（JPEGに相当）と可逆圧縮（PNGに相当）に対応しており、画質を保ちながらファイルを軽くできるためです。

2. **アニメーション対応**  
   WebPは、GIFに代わるアニメーション形式としても使用できます。アニメーションWebPは、GIFよりも軽量かつ高画質で、特にループするアニメーションに適しています。

3. **透明度（アルファチャンネル）**  
   PNGと同様に、WebPも透明度（アルファチャンネル）をサポートしています。これにより、透明背景の画像でもファイルサイズを削減できます。

### WebPがネット上で使われる理由
1. **ページの読み込み速度向上**  
   WebPの軽量なファイルサイズは、Webページの読み込み速度を速くするため、ユーザー体験が向上します。特にモバイルや低速なインターネット接続でもWebページがスムーズに読み込まれるため、サイトの離脱率を下げる効果があります。

2. **SEO効果**  
   Googleは、Webページの読み込み速度をSEOのランキング要素として評価しています。WebP画像を使用することで、ページの表示速度が上がり、検索結果で上位に表示される可能性が高まります。

3. **サーバーのデータ転送量削減**  
   ファイルサイズの小さいWebPを使うと、サーバーの帯域幅を節約でき、データ転送量の削減にも繋がります。これにより、サーバー運営のコスト削減にも寄与します。

4. **ブラウザ対応**  
   WebPは、Chrome、Firefox、Edge、Safariなど主要なブラウザでサポートされています。対応ブラウザが増えたことで、WebPが事実上の標準として広まっています。

### WebPのデメリット
- **一部の古いブラウザとの互換性**  
  WebP非対応の古いブラウザや、特定のレガシーシステムでは、WebP画像が表示できない場合があります。

- **画質の違い**  
  JPEGやPNGと比べると、圧縮率の違いで細かい画質の違いが見られることもあり、特に写真や細かなディテールが要求される用途では、場合によってはJPEGやPNGの方が好まれることもあります。

---

総じて、WebPはウェブページの効率化や表示速度の向上に貢献するため、ネット上での使用が増えているのです。
VFを呼び出すカスタムボタンをLEXでも使えるようにする（リストボタン編）

長年Classic環境で運用されていた、VFページを呼び出すJavaScriptカスタムボタン。

↓
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/e1f73349-08ee-99b2-b80b-ad4550b2c152.png)



これをLightning Experience環境でも使えるようにしたい。
（LEXではJSが使用不可のため、作り直しが必要となる）

方針としては、既存のVFページやコントローラクラスに手を入れる必要はなく
JS内で設定しているURLにリンクを飛ばせればよい。今回は画面フローで実装します。
※URLパスおよびパラメータ（SFIDをカンマ区切りで連結）を設定

`Classicではカスタムボタンを押した瞬間にVFを開きますが、`
`LEXでは画面フロー内に表示したリンクをクリックすることでVFに遷移します。`
`操作がワンクッション増えてしまうが、ベストな実現方法が思いつかなかったので`
`他に良いやり方があれば教えてください。`

↓

#### ①フローを作成する

先頭で簡単なエラーチェックした後、適切なURLを作成して画面にリンクとして表示する
画面フローを用意します。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/86da0a37-cb2b-dd5f-502b-9d2d43dd14f3.png)

リソースに「ids」変数を用意することが必須です。
これがあることで、リストビュー画面で選択したレコードのSFIDがセットされた状態でフローが実行されます。
スペルが間違っていてもうまく機能しません。[詳細ページボタン編](https://qiita.com/kagehikozaemon/items/719f6fc054409ae03a0b)で
登場した「recordId」はIが大文字でしたが、「ids」はすべて小文字です。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/499397d1-d01b-858f-7f2a-2c33f4d438ec.png)


idsの各要素に対して実行するループ内で、URLパラメータを割り当てます。
今回移植したコントローラクラスでは、SFIDをカンマ区切りで受け取る仕様だったので、
そのように設定します。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/f08c1d54-2438-4336-2b2f-e83d7d2bc35a.png)

VFページへのリンクを表す数式を用意し、画面に表示させます。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/53ec9e2a-386a-56ce-5c84-715b9d2da51f.png)

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/2a1526e0-b88d-c3d8-e630-3a4f5976aed8.png)





#### ②フローを呼び出すリストボタンを作成
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/bff747de-2073-6a48-ebf9-09752e2c5d9b.png)

指定するURLは、フローのAPI参照名を指定します。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/e65a7f0f-6dff-5dd5-1d98-804cc5903394.png)




#### ③レイアウトに表示
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336848/34ef8d6e-dcf9-f1d1-7130-98972089473c.png)



多分これで移植完了できると思います。
atcoder練習(2024.11.15)

# キーワード

# 問題
https://atcoder.jp/contests/abs/tasks/abc085_b

X 段重ねの鏡餅 
(X≥1) とは、
X 枚の円形の餅を縦に積み重ねたものであって、どの餅もその真下の餅より直径が小さい（一番下の餅を除く）もののことです。例えば、直径 
10、
8、
6 センチメートルの餅をこの順に下から積み重ねると 
3 段重ねの鏡餅になり、餅を一枚だけ置くと 
1 段重ねの鏡餅になります。

ダックスフンドのルンルンは 
N 枚の円形の餅を持っていて、そのうち 
i 枚目の餅の直径は 
d 
i
​
  センチメートルです。これらの餅のうち一部または全部を使って鏡餅を作るとき、最大で何段重ねの鏡餅を作ることができるでしょうか。

制約
1≤N≤100
1≤d 
i
​
 ≤100
入力値はすべて整数である。
入力
入力は以下の形式で標準入力から与えられる。

N
d 
1
​
 
:
d 
N
​
 
出力
作ることのできる鏡餅の最大の段数を出力せよ。

入力例 1
Copy
4
10
8
8
6
出力例 1
Copy
3
直径 
10、
8、
6 センチメートルの餅をこの順に下から積み重ねると 
3 段重ねの鏡餅になり、これが最大です。

入力例 2
Copy
3
15
15
15
出力例 2
Copy
1
すべての餅の直径が同じときは、
1 段重ねの鏡餅しか作れません。

入力例 3
Copy
7
50
30
50
100
50
80
30
出力例 3
Copy
4

# 回答
```Python
N = int(input())
d = []
for _ in range(N):
    d.append(int(input()))
 
d = set(d)
d = list(d)

print(len(d))
```

# 参考
https://qiita.com/jamjamjam/items/e066b8c7bc85487c0785

https://atmarkit.itmedia.co.jp/ait/articles/2401/30/news027.html

# 備考
- 比較的綺麗に頭の中にアルゴリズムがわいて、そのままコードにできた。
- 操作としては重複するものを削除しただけ。重複を削除したら、その数全てが昇順になれべれるはずだから、lenを計るだけで十分（多分そう、例外はないはずだよね？）。
【React】Reactでスクロール時に下からふわっとフェードインするアニメーションを実装する


# この記事について

Webアプリ開発に慣れ親しんだ方であれば，ポートフォリオなどの静的なWebページを作成する際にもReactを使うことがあるかと思います．そのような静的なWebページによくある，スクロール時に下からふわっとフェードインするやつをReactで実装します．

# 完成イメージ

小要素にフェードインアニメーションを付与するReactコンポーネントを作成します．

```tsx:完成イメージ
// <Example /> がフェードインするようになる
<FadeInUpWrapper>
  <Example />
</FadeInUpWrapper>
```

この記事に書いた通りの方法で，自分のポートフォリオにもフェードインアニメーションを実装しています．

https://k-takeishi.com/

# 実装手順

## ライブラリのインストール

```bash
# npm
$ npm install animate.css react-intersection-observer
# yarn
$ yarn add animate.css react-intersection-observer
# pnpm
$ pnpm add animate.css react-intersection-observer
```

- [animate.css](https://animate.style/)
  アニメーションを提供するCSSライブラリ
- [react-intersection-observer](https://github.com/thebuilder/react-intersection-observer)
  スクロールイベントを検知するライブラリ

## コンポーネントの作成

```tsx:FadeInUpWrapper.tsx
'use client';

import 'animate.css';
import {useInView} from 'react-intersection-observer';

type Props = {
  children: React.ReactNode;
  className?: string;
};

export const FadeInUpWrapper = ({children, className}: Props) => {
  const {ref, inView} = useInView({
    rootMargin: '-50px', // 要素が表示されて50pxすぎたら
    triggerOnce: true,
  });

  return (
    <div ref={ref} className={className}>
      {inView && (
        <div className="animate__animated animate__fadeInUp">{children}</div>
      )}
    </div>
  );
};
```

上記をimportしてもらえれば，任意の要素にフェードインアニメーションを付与することができます．

# おわりに

animate.cssでは他にも様々なアニメーションが提供されているので，classNameを変更するだけであらゆるアニメーションを実装することができます．間違い・改善点等があれば指摘していただけますと幸いです．
プリザンターでWikiをリンク項目マスタにしたときに項目をSQLで取得する方法

## はじめに
プリザンターの[リンク項目](https://pleasanter.org/ja/manual/table-management-choices-text-link)、皆さん使っていますか？実はWikiをリンク項目のマスタにすることできます。
ただ、Wikiにリンク項目を定義してしまうと、データをSQLで直接抽出したい時にちょっと不便・・・。ということで、SQLで直接扱えるようにバラすクエリを書いてみました。

## クエリ
当社はSQL Serverでプリザンターを使うことが多いので、SQL Serverでの使用を前提にクエリを書いてみました。
フィールド名については、[プリザンター本体側のコード](https://github.com/Implem/Implem.Pleasanter/blob/680f3f8967f6c87356f1c3236aa2fb3dea4109a9/Implem.Pleasanter/Libraries/Settings/Choice.cs#L28)を参考に決定しています。
```sql
WITH [Masters] AS ( 
    SELECT
        [Row].[RowOrdinal], 
        ordinal AS [ColOrdinal], 
        VALUE   AS [ColValue] 
    FROM
        ( 
            SELECT
                VALUE   AS [RowValue], 
                ordinal AS [RowOrdinal] 
            FROM
                [dbo].[Wikis] 
                CROSS APPLY STRING_SPLIT([Body], CHAR (10), 1) 
            WHERE
                [SiteId] = @SiteId
        ) AS [Row] 
        CROSS APPLY STRING_SPLIT([RowValue], ',', 1)
) 
SELECT
    MAX( 
        CASE [Masters].[ColOrdinal] 
            WHEN 1 THEN [Masters].[ColValue] 
            END
    )          AS [Value], 
    MAX( 
        CASE [Masters].[ColOrdinal] 
            WHEN 2 THEN [Masters].[ColValue] 
            END
    )          AS [Text], 
    MAX( 
        CASE [Masters].[ColOrdinal] 
            WHEN 3 THEN [Masters].[ColValue] 
            END
    )          AS [TextMini], 
    MAX( 
        CASE [Masters].[ColOrdinal] 
            WHEN 4 THEN [Masters].[ColValue] 
            END
    )          AS [CssClass],
	MAX( 
        CASE [Masters].[ColOrdinal] 
            WHEN 5 THEN [Masters].[ColValue] 
            END
    )          AS [Style] 
FROM
    [Masters] 
GROUP BY
    [Masters].[RowOrdinal]
```
実際に使うときは`@SiteId`を変数定義するか、直接サイトIDに書き換えて使ってください。
PostgreSQLの場合は`REGEXP_SPLIT_TO_TABLE`を、MySQLの場合は`SUBSTRING_INDEX`を使えば同じようなことができます。

## 動かしてみた
こんな内容のWikiがあるとします。
```csvs
100,保留,保留,status-new
130,伝票作成,伝票作成,status-preparation
140,伝票確認,伝票確認,status-preparation
150,発注依頼,発注依頼,status-preparation
900,部材発注済,部材発注済,status-rejected
```
これを上記のクエリで取得するとこんな内容で取得出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555395/5cb49ca0-26b0-d204-4bd7-309a613f1c7a.png)

## まとめ
Wikiをクエリを使ってバラすことで、SQLで直接扱えるようになりました。これで記録テーブルや期限付きテーブルを使わずに、Wikiを使ってシンプルなSQLで結合可能なリンク項目マスタを作ることが可能になりました。
Wikiをマスタ項目につかうと、キーに`ReferenceId`以外のものが使えたり、項目が少ない場合は表示などのパフォーマンスがいいなどのメリットがあります。データの二次活用を考えたとき、マスタにWikiを使うのは使い勝手が悪いというデメリットがありますが、こうしてクエリを1本作ることで、そのデメリットを解消することが出来ます。是非活用してみてください。
AWS Organizations にアカウントを追加したら Cost Explorer から過去の情報が見えなくなった件

こんにちは！インサイトテクノロジーの松尾です。

本投稿では、AWS Organizations にアカウントを追加したら Cost Explorer から過去の情報が見えなくなった件について、紹介させていただきます。

## はじめに

弊社では以前から AWS Oganizations を利用して複数の AWS アカウントの管理を行ってきました。とはいえ、当初は一括請求の機能のみを使っていました。また、AWS Organizations を利用していたものの、その配下にあるアカウントだけではなく、一部、AWS Organizations 外にあるアカウントも存在しているという状況でした。

この度、AWS へのログインを SSO 化することになり、これを機に、会社で利用している全 AWS アカウントを AWS Organizations 配下に入れ、IAM Identity Center を利用した SSO 化を進めているところでした。

## 既存アカウントを AWS Organizations 配下へ

既存アカウントを AWS Organizaions 配下へ入れるにあたり、請求が一括請求になること以外は、何かしらの副作用(例えば稼働中のものが動かなくなったりなど)もなさそうであることを確認し、AWS Organizations配下へ入れました。

* AWS Organizations から アカウントIDかルートユーザーのメールアドレスを指定してアカウントを追加
* 既存ユーザー側で追加を承認 (管理者 or ルートユーザー)

の手順により、既存 AWS アカウントを AWS Organizations 配下に入れることができました。

## Cost Explorer が使えなくなった (0円と表示されるようになった)

追加してから数日後、その追加したアカウントを利用しているメンバーから「Cost Explorer が使えなくなったのですが、AWS Organizations 配下に入れたことが原因でしょうか？」と連絡が来ました。もともと AWS Organizatinons 配下にいた別のアカウントでは以前から Cost Explorer を利用できていたため、追加するアカウントにて Cost Explorer が利用できなくなるとは全く想定外でした、、、

## AWS Organizations 配下に入ると、AWS Organizations 配下に入ってから利用した分しか確認できない

サポートに確認したところ、結局のところは "仕様" であることが確認できました！
以下のように、ちゃんとドキュメントにも記載がありましたね。

https://docs.aws.amazon.com/ja_jp/cost-management/latest/userguide/ce-access.html

> * スタンドアロンアカウントが組織に加わります。これ以降、そのアカウントは、スタンドアロンであった期間のコストと使用状況データにアクセスできなくなります。
>
> * メンバーアカウントは、この組織からスタンドアロンアカウントに移行されます。これ以降、アカウントでは、以前に組織のメンバーだった期間のコストと使用状況データにアクセスできなくなります。アカウントからアクセスが可能なのは、スタンドアロンアカウントとして生成したデータに対してのみです。
> 
> * メンバーアカウントは、組織 A から組織 B に移行されます。以降、そのアカウントでは、組織 A でのコストと使用状況のデータにアクセスできなくなり、アクセスできるのは、組織 B のメンバーとして生成したデータのみとなります。
>
> * アカウントは、以前所属していた組織に再び加わります。その後、このアカウントでは、過去のコストと使用状況データに再びアクセスできるようになります。

AWS Organizations 配下に入ると、AWS Organizations 配下に入ってから利用した分しか確認できません。一方で、AWS Organizatios 配下からいったん外すと、入る前のコストを確認できるとのことです。
ここで注意点としては、以前のコストを分析するために AWS Organizations から抜けると、そのタイミングから、また、以前の課金プロファイルに戻りそのタイミングでのAWS利用は一括請求の対象外となることです。なんか微妙ですよね、、、
そのため、AWS Organizations への参加などを行う月は、よっぽどキリのよいタイミングで切り替えを行わない限りは、既存の個別の請求と、親アカウントへの一括請求と、それぞれでそのアカウントに対する請求が発生することになりますのでご注意ください。

## おわりに

AWS Organizations に既存アカウントを移行させると、その追加された既存アカウントは AWS Organizations に入る前のコスト情報を Cost Explorer から参照することはできませんのでご注意ください。
AWS Organizations + IAM Identity Center はとっても使いやすい(と思う)のに、ちょっと残念な仕様ですね。
atcoder練習(2024.11.15)

# キーワード
while, 
# 問題
https://atcoder.jp/contests/abs/tasks/abc088_b

N 枚のカードがあります. 
i 枚目のカードには, 
a 
i
​
  という数が書かれています.
Alice と Bob は, これらのカードを使ってゲームを行います. ゲームでは, Alice と Bob が交互に 1 枚ずつカードを取っていきます. Alice が先にカードを取ります.
2 人がすべてのカードを取ったときゲームは終了し, 取ったカードの数の合計がその人の得点になります. 2 人とも自分の得点を最大化するように最適な戦略を取った時, Alice は Bob より何点多く取るか求めてください.

制約
N は 
1 以上 
100 以下の整数
a 
i
​
  (1≤i≤N) は 
1 以上 
100 以下の整数
入力
入力は以下の形式で標準入力から与えられる.

N
a 
1
​
  
a 
2
​
  
a 
3
​
  
... 
a 
N
​
 
出力
両者が最適な戦略を取った時, Alice は Bob より何点多く取るかを出力してください.

入力例 1
Copy
2
3 1
出力例 1
Copy
2
最初, Alice は 
3 が書かれたカードを取ります. 次に, Bob は 
1 が書かれたカードを取ります. 得点差は 
3 - 
1 = 
2 となります.

入力例 2
Copy
3
2 7 4
出力例 2
Copy
5
最初, Alice は 
7 が書かれたカードを取ります. 次に, Bob は 
4 が書かれたカードを取ります. 最後に, Alice は 
2 が書かれたカードを取ります. 得点差は, 
7 - 
4 + 
2 = 
5 点となります.

入力例 3
Copy
4
20 18 2 18
出力例 3
Copy
18


# 回答
```Python
N = int(input())
A = list(map(int, input().split()))

Alice = 0
Bob = 0

while len(A) != 0:
  Alice += max(A)
  A.remove(max(A))
  Bob += max(A)
  A.remove(max(A))
  if len(A) == 1:
    Alice += max(A)
    A.remove(max(A))
    
print(Alice - Bob)
```

# 参考

# 備考
- whileだと奇数の時にちょっとおかしなことになる。せっかくNがあるからfor文で書いた方がいいような気もするなって、書き換えようと思ったけど、よくよく考えれば、その時に対応したコードに編集すればいっかて思ってif文を追加した。
- でもfor文でも書けそうな気がする。
ChatGPTのショートカット一覧

`Ctrl + /`でショートカットを表示できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/76142a86-8359-6ec3-115b-db029bf2cc4d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/872b1cf0-40b2-fa68-375c-606d8b0f958b.png)

ショートカット一覧を表示する導線がなくて困ってたのですが、ChatGPTに聞くことが導線だったのは斬新😲

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/e913e9f8-606f-2144-c675-0b59b3a210d7.png)
プリザンターのOperations Toolsに簡単にアクセスする方法

## はじめに
みなさん、プリザンターの[Operations Tools](https://pleasanter.org/archives/operations-tools)は使っていますか？プリザンターのパフォーマンスが観測できたり、サイトの使用状況を可視化出来たりとかなり便利な機能がいっぱい入っています。
ただ、これ、プリザンター側からOperations Toolsに画面遷移をしようとすると、URLをベタ打ちするしかないんですよね・・・。これはちょっと不便です。

## ナビゲーションメニューを拡張
流石にURLをベタ打ちするのは不便なので、ナビゲーションメニューにOperations Tools用のリンクを追加してみましょう。下記のファイルを[拡張ナビゲーションメニュー](https://pleasanter.org/ja/manual/extended-navigationmenus)として所定のフォルダに配置してください。
```json:OperationsToolsMenu.json
{
	"TargetId": "SettingsMenu",
	"Action": "Append",
	"IdList": [1],
	"NavigationMenus": [
		{
			"ContainerId": "OperationsToolsContainer",
			"MenuId": "OperationsToolsMenu",
			"Name": "Operations Tools",
			"Icon": "ui-icon ui-icon-gear",
			"ChildMenus": [
   				{
					"MenuId": "OperationsToolsMenu_Admin",
					"Name": "管理画面",
					"Icon": "ui-icon ui-icon-info",
					"LinkParams": [
						"operations-tools",
						"admin"
					]
				},
				{
					"MenuId": "OperationsToolsMenu_Operation",
					"Name": "運⽤レポート",
					"Icon": "ui-icon ui-icon-info",
					"LinkParams": [
						"operations-tools",
						"operation"
					]
				},
				{
					"MenuId": "OperationsToolsMenu_Usage",
					"Name": "利⽤状況詳細",
					"Icon": "ui-icon ui-icon-lightbulb",
					"LinkParams": [
						"operations-tools",
						"usage"
					]
				},
				{
					"MenuId": "OperationsToolsMenu_Monitoring",
					"Name": "監視アラート",
					"Icon": "ui-icon ui-icon-alert",
					"LinkParams": [
						"operations-tools",
						"monitoring"
					]
				},
				{
					"MenuId": "OperationsToolsMenu_Site",
					"Name": "運用サイト情報一覧",
					"Icon": "ui-icon ui-icon-document-b",
					"LinkParams": [
						"operations-tools",
						"site"
					]
				},
				{
					"MenuId": "OperationsToolsMenu_Access",
					"Name": "アクセス権一覧",
					"Icon": "ui-icon ui-icon-document-b",
					"LinkParams": [
						"operations-tools",
						"access"
					]
				},
				{
					"MenuId": "OperationsToolsMenu_Parameter",
					"Name": "パラメータ一覧",
					"Icon": "ui-icon ui-icon-document-b",
					"LinkParams": [
						"operations-tools",
						"parameter"
					]
				}
			]
		}
	]
}
```
ポイントとしてはOperations Toolsにアクセス出来るユーザ限定で表示させるために、`IdList`に対象ユーザの`UserId`を指定することです。

## 実際に表示させてみた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555395/999d16e4-fa05-de9f-f9b0-e150da4becea.png)
こんな感じでナビゲーションメニューに表示されます。

## まとめ
ナビゲーションメニューにリンクを埋め込むことで、プリザンターからOperations Toolsに移動するのが簡単になりました。
以前のバージョンのOperations Toolsだと、Operations Toolsからプリザンターに戻るリンクが存在しないため、プリザンターに戻るためにはURLを編集する必要がありましたが、2024/10/11公開のVer.1.2.0からはプリザンターのトップページに戻るリンクが追加されました。
この拡張ナビゲーションメニュー、是非最新版のOperations Toolsと一緒に使ってみてください！
ServiceNow Hackathon 2024 参加レポート

この記事は ServiceNow アドベントカレンダー 2024(https://qiita.com/advent-calendar/2024/servicenow) の12月16日分の記事として執筆しています

三井情報（MKI）は先日、ServiceNow社が主催するHackathon 24にチーム若虎としてチャレンジしてきました！!
# はじめに
Hackathonは、ハック(hack)とマラソン(marathon)を掛け合わせた造語。特定のテーマに向けて限られた期間内でアイデアを考え、アプリケーションやサービスを開発し、その結果を競い合うイベントです。
ServiceNow Hackathonは2018年より開催されており、MKIは2021年から今年で4回目の参加となります。今回のテーマは「PUT AI to Work」でした。今回はMKIの参加体験をご紹介します！
# チーム構成
昨年に引き続き、若手エンジニアの技術力及び経験値向上を目的に参加を決定しました。今年はServiceNow開発チームの若手5名エンジニアだけでなく、別部署の若手メンバーを加えた新生チーム”若虎"として参加しました！！
※若虎とは…「若者よ虎となれ」という上司の言葉から命名されました。日々の業務でも若虎の名前の下、活動しております。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471813/19508fb7-7aec-e2c9-7462-02e8f9745036.png)
# INNOWVATION SUPPORTER
今回、チーム若虎が提案したアプリはINNOWVATION SUPPORTERです！
ServiceNowを使って革新性(Innovation)のあるアプリを作ろうといった思いから命名しました。本アプリは研究者のイノベーションを支援するために設計されており、特に研究業務の手間を軽減する機能（Help Hands）や、過去の研究データを基にアイデアや次のアクションを提案するAI機能(Brain Assist)を搭載しています。Help Handsでは研究ノートの管理、資材の在庫確認、報告書作成、社内申請の効率化、Brain Assistでは過去の研究データや外部情報を基にAIがアイデアやアクションを提案する等、多岐にわたるサポートを提供し、研究者が本来の研究活動に集中できる環境を整えることを目的としています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471813/ee045440-3223-7237-a50b-98a9820861d0.png)
# Hackathon当日
今年の会場は赤坂インターシティAIR。会場には予選を通過した20チーム114名とアイデアソンに参加した13チーム40名の約150名が参加されたそうです。
メンバーの緊張が高まる中、クジ引きによりチーム若虎の発表は13番目に選出されました。
事前に何度も練習を重ねたこともあり、発表は時間をオーバーすることなく無事に終了することができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471813/0da88bae-e8aa-1422-debd-0062e6576e07.png)

# 結果
結果は全体13位と目標としていた入賞には届きませんでした。
研究者の業務のDXに対して、ServiceNowの強みである様々な人やプロセス、組織、データを統合し、ワークフロー化し効率化しつつAIを組み合わせた点で高い評価を頂きました。一方で、ServiceNowで実装した機能としては一部機能を除き、一般的なWFの範疇に収まってしまった点が反省点となりました。
# 感想
昨年度と比較して全体のレベルが大きく向上していたように感じました。
私たちのチームはITSMをメインの機能として構築したので、改めて他モジュールを含めて学習と経験値獲得が重要であると実感しました。参加したメンバーからの感想を一部ご紹介します。
* 業務の合間を縫って他部署のメンバーと協力し、得意分野を活かしながら役割分担をしてアイデアを形にできたことは大変良い経験だった。受賞には至らなかったものの、メンバーから多くの学びを得て、新しい知識も身に着けることができた。
* 普段の業務ではこの様なイベントに参加する機会がなかったので、この機会を通じて大きな成長を感じた。賞を逃したのは残念だが、全力で取り組んだ結果に満足している。
* テキスト2部構成で開催され、1回戦はアイデア出しとコンセプト固めに集中できたのが面白かった。
# 終わりに
今年は予選・本選形式への変更や他部署のメンバーとの協働など、昨年とは異なる環境の中、メンバーそれぞれが自らの得意領域を活かし取り組むことができました。
目標である入賞には届きませんでしたが、メンバー全員でアイデアを出し合い予選を通過できたことは大きな成果だと感じています。
ご協力いただいた関係者の皆様に、この場をお借りして心より感謝申し上げます。
今後も日々の業務に精進し、次回のハッカソンに向けて更なる成長を目指して参ります。
Next.jsでTailWindCssを使ってみる

## はじめに

Typescript + React + Next.jsの勉強中です。

少しずつコードを書き始めました。

その過程で、TailWindCssをインストールしたため

Next.jsでのTailWindCssのインストール方法をまとめていきます。

## TailWind CSSとは
Tailwind CSSはutility classを活用したCSSフレームワークです。
CSSフレームワークには他にもBootstrapなどがあり、これらのフレームワークでは事前に準備されているコンポーネントを活用します。

TailwindCSSではコンポーネントなどはなく、utility classを使って独自にデザインを行ってコンポーネントを構築します。

## やりたいこと

Next.jsでTailWindCssを使いたい

## 前提条件
・Next.jsのインストールは完了している


## インストール方法

```
# npmの場合
npm install tailwindcss

# yarnの場合
yarn add tailwindcss

 ```

これで完了です。

 公式ドキュメントには glabal.cssやtailwind.config.tsに追記が必要とありましたが、インストールしたら自動で変更が入っていました。

 
もしtailwind.config.tsがない場合は下記を実行して作成してください。
 ```
npx tailwindcss init -ts
 ```

設定の詳細は[公式](https://tailwindcss.com/docs/configuration)をご確認ください。


 ## 使い方

```
bg-blue-500: 背景に青を指定
text-white: 文字色に白を指定
px-4: 左右に4のパディング
py-2: 上下に2のパディング
```

```
<button className="bg-blue-500 text-white py-2 px-4 ">
  Sample Button
</button>
```

![スクリーンショット 2024-11-15 13.36.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25785/1562b656-d80f-4e1a-d487-894dd92f0835.png)




## おわりに
TailWindCss のインストール方法と簡単な使い方をまとめました。

少しでも誰かのお役に立てれば幸いです。
Autonomous Database の APEX で標準のアップグレードを延期し、ユーザーがアップグレードを検知して、ユーザーのタイミングでアップグレードする

# はじめに
Oracle Cloud では、自律的データベース Autonomous Database(ADB) があり、ADB には ローコード開発プラットフォームの Oracle APEX が標準で付属しています。ADB上の APEX では、デフォルトで、Oracle APEXのアップグレードは、リージョンでリリースされるとすぐにAutonomous Databaseによって適用されます。これは、ユーザーにとって、絶えず最新の APEX を利用できることはメリットだと思いますが、なかには、ユーザーのタイミング（閑散期）等で APEX をアップグレードしたい場合もあるかと思います。今回は、ユーザーのタイミングで APEX をアップグレードする方法をご紹介します。

# 1.APEX のアップグレードの延期を設定
APEX の管理コンソールにログインし、画面右下の歯車のアップグレード・リファレンスの設定ボタンをクリックして、アップグレード・ウィンドウ（延期期間）を 45日 か 90日 を選択します。
![スクリーンショット 2024-11-13 155430.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3112379/0954c3bc-14aa-0376-63bf-1c665f7f9cd7.png)

アップグレード・ウィンドウが選択され、更新が使用可能な場合は、「使用可能な更新」ダイアログに示された日付に、Oracle APEX更新がAutonomous Databaseインスタンスに自動的に適用されます。 リストされた日付を超えて更新を延期することはできません。
リージョンで新しいOracle APEXリリースが使用可能になった時点でAutonomous Databaseが停止した場合、アップグレード・ウィンドウの設定に関係なく、次回データベースを起動したときに更新が自動的に適用されます。 
アップグレード・ウィンドウ設定を変更すると、変更は将来のアップグレードに適用され、Autonomous Databaseですでに使用可能なOracle APEXアップグレードには影響しません。

詳しい設定方法のマニュアルは[Oracle APEXアップグレードの延期](https://docs.oracle.com/cd/E83857_01/paas/autonomous-database/serverless/adbsb/apex-apply-defer-updates.html#GUID-1DE968CA-A438-444F-B00C-396012397F0A)を参照

# 2.APEX のアップグレードの通知を設定
Oracle Cloud Infrastructureコンソールで、「監視および管理」＞「イベント・サービス」＞「ルール」で、Autonomous Databaseイベントの通知を取得します。この設定により、Oracle APEXを使用しているときに、新しいリリースが使用可能になったとき、通知されます。
イベント・タイプ：Autonomous Database - Information
eventName：APEXUpgradeAvailable

![スクリーンショット 2024-11-13 154052.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3112379/57954720-6931-f3dc-1d18-d85e863e076d.png)

詳しい設定方法のマニュアルは[Autonomous Databaseイベントの通知の取得](https://docs.oracle.com/cd/E83857_01/paas/autonomous-database/serverless/adbsb/autonomous-database-events.html#GUID-66B76449-6025-4A0F-BE9C-9B9F981347CF)を参照

# 3.Oracle APEXアップグレードの適用
Oracle APEX のアップグレードが通知を受け取り、ユーザーの適当なタイミングでアップグレードするときには、APEXの管理サービスから、「使用可能な更新」の横にある歯車アイコンをクリックして、「使用可能な更新」ダイアログを開きます。「使用可能な更新」ダイアログで「即時アップグレード」をクリックします。これにより、Oracle APEXアップグレード・プロセスがバックグラウンドで起動されます。 ほとんどのアップグレード・プロセスで、Administration Servicesおよびアプリケーション・ビルダーを引き続き使用したり、アプリケーションを実行できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3112379/c311518d-3e57-e8d5-7c89-6afb9296af21.png)




詳しい設定方法のマニュアルは[Oracle APEXアップグレードの適用](https://docs.oracle.com/cd/E83857_01/paas/autonomous-database/serverless/adbsb/apex-apply-defer-updates.html#GUID-AC99380F-C8B9-4A32-B75B-928B30F23432)を参照

以上、 Autonomous Database の APEX で標準のアップグレードを延期し、ユーザーがアップグレードを検知して、ユーザーのタイミングでアップグレードする方法でした。ADB上のAPEXのアップグレードをコントロールしたい場合もあるかと思いますので、参考になれば幸いです。