OmniAICreator/Qiita-1.07M huggingface dataset:
Fly.ioのアカウント作成

## Fly.ioとは
Fly.ioは、アプリケーションをデプロイするためのクラウドプラットフォームです。いわゆる、Herokuのような PaaSですが、Herokuの無料枠が廃止されたため、このFly.ioを利用する人が増えた印象です。Fly.ioには、無料枠が設けられており、アカウントを作成するだけで利用可能です。但し、サービスの利用には、クレジットカード情報の登録が必要になります。

## Fly.ioへのアクセス
以下、公式ページになります。

https://fly.io/

## アカウント作成方法
以下のページからアカウント作成できます。

https://fly.io/app/sign-up

フォームの各項目に必要事項を入力します。入力出来たら、Create My Accountボタンを押下します。
![スクリーンショット 2024-01-13 7.02.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674781/5121950b-4ebd-166d-0551-6d73d99d110a.png)

アカウント作成すると、以下のWelcomeページに遷移します。
![スクリーンショット 2024-01-13 7.04.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674781/6e30dccb-9ba2-d7d1-0238-e28213792dd3.png)
右上のヘッダーメニューからDashboardに移動して下さい。
![スクリーンショット 2024-01-16 19.11.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674781/cca46018-2a86-61ce-1820-36f7bd2b865f.png)

画面右上に、認証メールを確認するよう警告が出ます。
登録したメールアドレス宛に認証メールが届くので、そちらから認証を行います。
認証メール内の「Verify Email」のボタンを押したら完了です。
![スクリーンショット 2024-01-13 7.06.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674781/f6d69c79-8187-eed3-5fe0-caacc77e626e.png)


## クレジットカード情報の登録
冒頭でも述べたように、Fly.ioへデプロイを行うには、クレジットカード情報の登録が必要です。Dashboardを開くと現在のプランが表示されます。初期状態は「Trial Plan」となっています。

![スクリーンショット 2024-01-13 7.07.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674781/b96ae937-b019-26a5-f223-7de63b374b4f.png)

「Trial Plan」の表示の下に、「Add a payment method」というリンクがあるので、こちらからクレジットカードの情報を登録します。

クレジットカード情報を登録すると、以下のように自動的に「Hobby」プランに変更されます。これで登録完了です。
![スクリーンショット 2024-01-16 19.16.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674781/ace83490-c44a-c4cd-198b-6cda4b1a7ab0.png)

## 無料枠について
全てのプランに、無料で以下のリソースが設けられています。

・最大 3 つの共有 CPU-1x 256mb VM
・3 GB 永続ボリューム ストレージ (合計)
・160GBの送信データ転送

⇨ 無料枠を超えた分のリソースは、使用量ベースの価格で請求されます。
詳しくは、以下の公式ページを参照下さい。

https://fly.io/docs/about/pricing/#free-allowances
テーブルからレコードプロデューサーにフィールド追加する方法

# 【目的】
レコードプロデューサーを1から作成する必要をなくす

### 手順
１．テーブルに必要なフィールドを作成する

２．「サービスカタログに追加」を選択
![画像_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2841200/856e2473-260b-b9f4-ab3f-793714779fa9.png)

３．名前と簡単な説明を入力し、レコードプロデューサーに追加したいフィールドを選択し追加(▶)「保存して開く」を選択する。
![画像_4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2841200/82559a98-2bc1-fcda-3675-fc0626caf040.png)

４．レコードプロデューサーが作成されていることを確認する。
![キャプチャ_4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2841200/ca4d093a-8f49-8420-e630-7a57826cf8f3.png)

以上
Servicenow サービスカタログ 入力欄 表示項目 制限方法

## Servicenow 表示項目 制限方法

例えば、サービスカタログの入力欄に【個人情報】を読み込んだ場合、個人情報の登録内容が【氏名・メールアドレス・電話番号】の3点だった場合、入力欄に3点全て現れる形となります。

それらを制御する方法
Studio→対象の変数を選択→variable set→applicant→type_specitications→variable attributes

variable attributes（変数の属性）にて表示する情報を指定することが可能となります。


![画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2841200/4687edd1-101d-1ec0-1c80-bd0a065a2558.png)
シェル変数、環境変数

シェル変数、環境変数の違いを確認する為のシェルプログラムを作成
メインシェル
```envSample.sh
#!/bin/bash -x
VAR=val
set | grep VAR
env | grep VAR
./subSample.sh
export VAR="val2"
set | grep VAR
env | grep VAR
./subSample.sh
export -n VAR
set | grep VAR
env | grep VAR
./subSample.sh
unset VAR
set | grep VAR
env | grep VAR
./subSample.sh
```
サブシェル
```subSample.sh
#!/bin/bash -x
echo ${VAR}
```
実行結果1
```
+ VAR=val           //(1) シェル変数VARを設定
+ set
+ grep VAR
VAR=val             //シェル変数VARを表示OK
+ env
+ grep VAR           //環境変数VARを表示NG
+ ./subSample.sh
+ echo
                    //サブプロセスの変数VARを表示NG
+ export VAR=val2    //(2) 環境変数VARを設定
+ VAR=val2
+ set
+ grep VAR
VAR=val2             //シェル変数VARを表示OK。値がval2に変更されている
_=VAR
+ grep VAR
+ env
VAR=val2             //環境変数VARを表示OK
+ ./subSample.sh
+ echo val2
val2                 //サブプロセスの変数VARを表示OK
+ export -n VAR      //(3) 環境変数VARを削除 
+ set
+ grep VAR
VAR=val2              //シェル変数VARを表示OK
_=VAR
+ env
+ grep VAR            //環境変数VARを表示NG
+ ./subSample.sh
+ echo
                     //サブプロセスの変数VARを表示NG
+ unset VAR          //(4) シェル変数を削除
+ set
+ grep VAR           //シェル変数VARを表示NG
_=VAR
+ env
+ grep VAR
+ ./subSample.sh
+ echo
```
実行結果2
```
+ VAR=val
+ grep VAR
+ set
VAR=val
+ grep VAR
+ env
+ ./subSample.sh
+ echo

+ export VAR=val2
+ VAR=val2
+ set
+ grep VAR
VAR=val2
_=VAR
+ grep VAR
+ env
VAR=val2
+ ./subSample.sh
+ echo val2
val2
+ unset VAR    //シェル変数VAR削除
+ grep VAR
+ set
_=VAR
+ env
+ grep VAR     //環境変数VARが削除されている
+ ./subSample.sh
+ echo
```
考察
* 環境変数VARを設定すると、サブプロセスで参照できる（実験結果1 (2))
* シェル変数VARを定義した後、環境変数VARを別値val2で定義すると
シェル変数VARの値がval2に変更された。（実験結果1 (2))
変数VARをシェル変数、環境変数が共有していることを意味していると思う。
* 環境変数VARを削除してもシェル変数VARは残る。（実験結果1 (3))
* シェル変数VARを削除すると環境変数VARも削除される。（実験結果2）
mise で入れた ruby を RubyMineで使う


# RubyMineでmiseで入れたRubyを使う

まずは [mise](https://mise.jdx.dev/) で ruby のインストール

```
mise install ruby@3.3 
```

 RubyMineを起動する
 
 1. Settings > Language & Frameworks  > Ruby SDK and Gems を開く
 2. `+`を押してInterpreterを選ぶ
 3. '/Users/username/.local/share/mise/installs/ruby/3.3/bin/ruby'
    Finderで`.local`などが見えない時は`Cmd+Shift+.`で表示

以上で完了。わーい。

以下が実装されれば要らなくなるかも
- [Support the rtx ruby/tool version manager : RUBY\-32015](https://youtrack.jetbrains.com/issue/RUBY-32015)
Surya(オープンソースのOCR)を試してみた

# Suryaとは
オープンソースで提供される多言語ドキュメントOCR
※2024/1/16時点では文字検出のみリリース
　文字認識は今後リリース予定とのこと
  特にテーブルとチャートの検出が個人的には楽しみ
 
https://github.com/VikParuchuri/surya

サポート: 開発者: Vik Paruchuri
ライセンス:
GNU General Public License v3.0

# 動作環境
開発環境: Anaconda Prompt
pythonバージョン：3.9
cuda : 11.8
pytorch 

ルートディレクトリ：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3507211/f0731be4-c4dc-f6ec-90bc-aa8dbd83ea0f.png)

下記は、githubリポジトリとは別で独自で用意してます。
pip.txt:入れたライブラリのメモ
main.py :Suryaの実行スクリプト

# ライブラリ
```
pip install surya_ocr

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

pip install matplotlib
```
# コード全文
```
from PIL import Image,ImageDraw
import matplotlib.pyplot as plt
from surya.detection import batch_inference
from surya.model.segformer import load_model, load_processor

# 画像に対してバウンディングボックスを描画する関数
def draw_boxes(image, boxes):
    draw = ImageDraw.Draw(image)
    for box in boxes:
        draw.rectangle(box, outline="red", width=2)
    return image

IMAGE_PATH = "画像のpath"

image = Image.open(IMAGE_PATH)
model, processor = load_model(), load_processor()

# predictions is a list of dicts, one per image
predictions = batch_inference([image], model, processor)

print(predictions)

# バウンディングボックスの座標を取得
boxes = predictions[0]['bboxes']

# 画像にバウンディングボックスを描画
image_with_boxes = draw_boxes(image.copy(), boxes)

# 描画した画像を表示
plt.imshow(image_with_boxes)
plt.show()
```
# 検出結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3507211/bec251e1-456c-b198-e087-3235ea20ae55.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3507211/3802a585-3c49-f3ee-9111-e77d1abd2319.png)


グラボの使用率は2GBくらい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3507211/4e91a3b5-f04c-77e6-2dcf-757ad37a146d.png)

# まとめ
・言語ごとのモデルではなく、多言語対応なところはGood
・横文字のドキュメント記事（サイトニュースや論文）に特化しているため、写真や画像から文字を取得したい場合はCraftモデルのほうがいいかもしれない

・文字認識、表・チャート検出の対応に期待したい。
VRCでのデスクトップ操作

基本はこ↑こ↓をみれば大丈夫です

https://vrchatjp.playing.wiki/d/%C1%E0%BA%EE%CA%FD%CB%A1

移動　W、A、S、D
視点移動　マウス移動（左旋回は，（カンマ）、右旋回は．（ピリオド）キーでも可能）
ジャンプ　Space
ダッシュ　Shift
しゃがむ　C
うつ伏せ　Z
ソーシャルとかを見れるメニュー　Escape
アクションメニュー　R
ミュートする・しない　Vで切り替え
ペンをつかむ・オブジェクトをつかむ

選択（どれをつかむか）　真ん中の丸で選択
オブジェクトやペンをつかむ　左クリック
オブジェクトを離す				右クリック


スクリーンショット				F12
チャットボックス開く				Y


デスクトップでの、ドローンカメラの使い方についてはこちらに動画あるのでどうぞ（動画後半で紹介しています）
https://www.youtube.com/watch?v=jeohNnAPQWY


ちなみにぽこぴーランドで、デスクトップだと「T」を押すとタブレットがでてきます。
Gmailの返信がフォームなどから帰ってこないことへの便乗記事

Xで神奈川県のGmailが話題になっているので便乗ポエム記事です

https://www.pref.kanagawa.jp/docs/dc4/system.html

Gmailへの返信が届かない問題については古いCGIを利用したお問い合わせフォームなんかでは身の回りでもう頻繁にありました。
さくらサーバーなんかでは2023年6月くらいからGoogleのセキュリティ変更による影響で同様の現象が起こったことへの告知がされていました。

https://help.sakura.ad.jp/notification/n-2595/

~~Googleフォームを利用させようとする陰謀~~
脆弱な古いフォームをつぶしにかかっていますね。。
進化についていけない奴はチャオズばりに置いて行かれてしまいそうです。

問題としては受験という一時期の決まった間にだけ多い問い合わせフォームの確認と対策を怠ったものといえなくもないです。
とはいえ県が対応しているシステム管理者が上記のGoogleアップデートの件を把握していない場合、自分のフォームに用もなくGmailで投稿してみるという人物でない限りは届かないことの把握がしにくいです。
さらにメールが届かないこと自体が仕様と思われていた場合は、送信者側でも気づきようがないです。

あるいはそこまでセキュリティ対策をするだけの給料をもらってない警備員と同じ考えのパターンもあります。
~~実際自分がそうでした~~

もしSPFレコードの設定とかどうするの(´;ω;｀)って人がいた時のために対策も置いておきます。

つ[ChatGPT](https://openai.com/blog/chatgpt)

俺たちの戦いはこれからだ！


追記
さくらサーバーではいろいろと対策をしているようでしたので追記用メモガキです。
2月が楽しみだあ🫠

https://help.sakura.ad.jp/notification/n-2634/

https://www.sakura.ad.jp/corporate/information/announcements/2023/12/19/1968214527/?_gl=1*1120txm*_gcl_au*MTQ1MDA2NTU2NS4xNzAwNjQzNzU0
pydicomの使い方について

【DICOM】【入門】Pydicomの使い方その他で、何とか使用したいと考えております。
example.py
import pydicom

file = pydicom.dcmread('sample/sample.dcm')

print(file)
がうまく動きません。dicom dataをどこに置くと読めるようになるのかを知りたいと考えております。
お教え願える方がいましたら、よろしくお願いします。
PodmanでDockerを実行すると毎回出るメッセージ

## はじめに
メッセージを見ればすぐ解決できますが、自分の備忘録ついでに残します。

## 事象
Podmanを使用してdockerを使うと毎回以下のメッセージが表示される。
```
[root@rhel8 ~]# docker -v
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
podman version 4.6.1
```
これはPodmanを使って、dockerを実行するよ見たいなことを言っているだけなので、

警告文の通り、/etc/containers/nodocker を作成するだけで抑制されます。
```
[root@rhel8 ~]# mkdir /etc/containers/nodocker
[root@rhel8 ~]#
[root@rhel8 ~]#
[root@rhel8 ~]# docker -v
podman version 4.6.1
```
メッセージが出なくなりました。
サーバ再起動後のpodmanエラー

# 事象
サーバの再起動後、dockerコマンドを使用すると以下のエラーが発生
```
# docker container ls
EERO[0000] invalid internal status, try resetting the pause process with "/usr/bin/podman system migrate": could not find any running process: no such process
```
systemctlコマンドで確認してみても、podmanは正常に動いているように見える。
```
[root@rhel8 ~]# systemctl status podman
● podman.service - Podman API Service
   Loaded: loaded (/usr/lib/systemd/system/podman.service; disabled; vendor pre>
   Active: inactive (dead)
     Docs: man:podman-system-service(1)
lines 1-4/4 (END)
```

# 解消方法
以下のコマンドを実行する
```
podman system migrate
```


* 参考サイト

https://access.redhat.com/solutions/6988045
Dovecotメールサーバーでパスワードを変更する方法


# はじめに、


Dovecotは、UNIX系オペレーティングシステム用の人気のあるオープンソースのIMAPとPOP3サーバーです。この記事では、Dovecotメールサーバーでユーザーパスワードを安全に変更する手順について説明します。

前提条件

Dovecotメールサーバーがインストールされ、動作していること。
sudo権限またはrootアクセスがあること。
## ステップ1: パスワードファイルを開く

パスワードは /etc/dovecot/passwd ファイルに保存されます。このファイルを編集するには、以下のコマンドを使用します。

`sudo vi /etc/dovecot/passwd`

# ステップ2: ユーザーのエントリを探す

変更したいユーザーの行を見つけます。各行は個別のユーザーを表しています。

# ステップ3: 新しいパスワードハッシュを生成

Dovecotでは、パスワードはハッシュ形式で保存されます。新しいパスワードハッシュは、doveadm pw コマンドで生成できます。

`doveadm pw`

入力プロンプトに新しいパスワードを入力すると、ハッシュ化されたパスワードが表示されます。

# ステップ4: ハッシュの置き換え

パスワードファイル内で、対象ユーザーの現在のパスワードハッシュを新しいものに置き換えます。

# ステップ5: ファイルの保存と閉じる

編集が完了したら、ファイルを保存し閉じます。

# ステップ6: Dovecotの再起動

変更を有効にするためにDovecotを再起動します。


`sudo service dovecot restart`

ステップ7: 新しいパスワードのテスト

変更が成功したかを確認するために、電子メールクライアントや 
`doveadm auth test <username>` 
を使用して新しいパスワードをテストします。

## まとめ

この簡単なガイドに従うことで、Dovecotメールサーバーのユーザーパスワードを安全かつ効率的に変更することができます。セキュリティは重要な要素であり、定期的なパス
ワードの変更は、システムの安全性を維持する上で不可欠です。

### 参考リンク

[Dovecot公式ドキュメント](https://www.dovecot.org/)
【R可視化】patchworkで任意の数のggplotをまとめて表示する

Rの可視化パッケージggplot2で作成された複数のプロットを表示するのに便利なパッケージの一つにpatchworkがあります。各プロットを`p1 + p2`のように演算子でつなぐだけでまとめて表示ができる便利なパッケージです。
繰り返し処理や関数化では`+`を1回ずつ書くのが面倒なのでプロットの数に依らずpatchworkでまとめる方法を調べたら`reduce()`が便利でした。

### reduce()を使う
```r
library(patchwork)
library(ggplot2)

# サンプルデータ
d1 <- data.frame(a=rnorm(10),b=rnorm(10))
d2 <- data.frame(a=rnorm(10,1,1),b=rnorm(10,1,1))
d3 <- data.frame(a=rnorm(10,2,2),b=rnorm(10,2,2))
d4 <- data.frame(a=rnorm(10,3,3),b=rnorm(10,3,3))
d5 <- data.frame(a=rnorm(10,4,4),b=rnorm(10,4,4))
# サンプルプロット
p1 <- ggplot(data=d1) + geom_point(aes(x=a,y=b))
p2 <- ggplot(data=d2) + geom_point(aes(x=a,y=b))
p3 <- ggplot(data=d3) + geom_point(aes(x=a,y=b))
p4 <- ggplot(data=d4) + geom_point(aes(x=a,y=b))
p5 <- ggplot(data=d5) + geom_point(aes(x=a,y=b))

# まとめたいプロットをリストにする
p_list.1 <- list(p1, p2)
p_list.2 <- list(p1, p2, p3)
p_list.5 <- list(p1, p2, p3, p4, p5)

# reduceでリストの要素数に関わらずまとめて表示
reduce(p_list.1, `+`)
reduce(p_list.2, `+`)
reduce(p_list.5, `+`)
```

表示形式は3列のようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1031677/b3fda330-6bb6-dcd8-1dc3-df31bb3b86fa.png)
VSCodeを使ってVanillaのテンプレートを作成する

# はじめに
JavaScriptの基礎を理解するにあたって、まずは __Vanilla__ を使ってかんたんなWEBページを作成してみよう！
※__Vanilla__ :ライブラリを全く使わない超シンプルなJavaScriptのこと！
# 問題
クラウドIDE（CodeSandboxやStack Blitz）のVanillaテンプレートを使いたかったが、
アップデートの影響で無くなってしまった。
# 解決方法
__VSCode__ を使ってVanillaのテンプレートを作成する


必要なファイルはこちら!

__１．index.html:__
プロジェクトのメインのHTMLファイル。
ページの構造や基本的なマークアップを定義する。
CSSとJavaScriptファイルを読み込むためのリンクが存在する。

```html:index.html
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My Vanilla Project</title>
    <link rel="stylesheet" href="styles.css">
</head>

<body>
    <script src="index.js"></script>
</body>

</html>
```


__２．styles.css:__
プロジェクトのスタイルを定義するCSSファイル。
ページの外観やスタイルを設定する。

```css:styles.css
/* styles.css */
body {
    font-family: cursive, sans-serif;
    margin: 10;
    padding: 0;
}
```

__３．index.js (または app.js や main.js など):__
プロジェクトのメインのJavaScriptファイル。
DOMのイベントリスナーやページの初期化コードがここに書かれる。
ページが読み込まれたときに実行されるコードや、ユーザーのアクションに対する応答などが含まれる。
```js:index.js
// index.js
document.addEventListener('DOMContentLoaded', function () {

    // "Hello, world"を表示する
    document.body.textContent = 'Hello, Vanilla!';
});
```

# おわりに

「ファイルの中身どうやって書くんだっけ?」ってときは、VSCodeの拡張機能（Emmet）を使うとコマンド一発で作成してくれるみたいです。便利ですね！

# 参考
https://logsuke.com/web/design/html/html-template-vscode
.gitignoreで.DS_Storeを削除する

# 目的
Gitにアップロードした際に .DS_store も Git にアップロードされている。
.DS_store は Git アップロードされないようにしたい。

# 実施内容
1.gitignore に追記
```s
# OS-generated files
.DS_Store
```

2.確認結果
```s
$ git status -s
 M .gitignore

Status Codes:
A       added           新規ファイル。gitが新規に追跡したファイル
M       modified        変更があったファイル
D       deleted         削除されたファイル
R       renamed         名前変更
C       copied          コピー
U       unmerged        マージしていない
?       untracked       未追跡。gitが認識していない。
!       ignored         無視

$ git diff --stat
 .gitignore | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
```

3.全てのファイルを Git の追跡対象から削除
```s
$ git rm -r --cached .
rm '.DS_Store'
rm 系のログが大量に出てくる
```

4.確認結果
```s
$ git status -s
D  .DS_Store
Dステータスのログが大量に出てくる

Status Codes:
A       added           新規ファイル。gitが新規に追跡したファイル
M       modified        変更があったファイル
D       deleted         削除されたファイル
R       renamed         名前変更
C       copied          コピー
U       unmerged        マージしていない
?       untracked       未追跡。gitが認識していない。
!       ignored         無視

$ git diff --stat
```

5.ステージングに反映
```s
$ git add .
```

6.確認結果
```s
$ git status -s
D  .DS_Store
M  .gitignore
D  src/.DS_Store
D  src/pages/.DS_Store
D  src/pages/service/.DS_Store

Status Codes:
A       added           新規ファイル。gitが新規に追跡したファイル
M       modified        変更があったファイル
D       deleted         削除されたファイル
R       renamed         名前変更
C       copied          コピー
U       unmerged        マージしていない
?       untracked       未追跡。gitが認識していない。
!       ignored         無視

$ git diff --stat
```

7.コミットして、pushする
```s
$ git commit -m "[change].gitignoreに.DS_Storeを追加"
$ git push
```

# そもそも .gitignore とは？
.gitignore は特定のファイルやディレクトリを Git の追跡対象としない為のルールを記述するもの。
こちらに追記すると、追跡対象に含まれず特定ファイルが Git　にアップされなくなる。

# .gitignore の注意点
今回のように既に .DS_store が追跡対象となっているなかで、.gitignore に追記しても効果がない。
追跡対象だったものは、.gitignore に追記しても追跡対象のままです。
追跡対象だったものを 「追跡対象外にする」 効果はない。
`$ git rm -r --cached .` または `git rm -r --cached [ファイル名]` を実施して追跡対象から除外する必要がある。

# コマンド補足
`git rm`：Git リポジトリからファイルまたはディレクトリを削除するコマンド。
`-r`：再帰的に削除を行うオプション。ディレクトリとその中のファイルをすべて対象とします。
`--cached`：ファイルをワーキングディレクトリからではなく、インデックス（ステージングエリア）からのみ削除します。つまり、ファイル自体はファイルシステム上に残りますが、Gitの追跡からは外されます。
`.`：現在のディレクトリ（およびサブディレクトリ）を指す。このコマンドでは、現在のディレクトリとその下の全てのファイルやディレクトリを対象にします。

# 所感
追跡対象から除外するコマンドは `git rm -r --cached [ファイル名]` を叩く方が丁寧な印象を持つが、`$ git rm -r --cached .` を実行して比較を見てみると他にも自分が想定しない `.DS_Store` があったりしたので `.` で全指定が良いかもしれない。
当初、自分は .DS_Store のみを Git　の追跡対象から除外する想定でした。
```s
$ git status -s
D  .DS_Store
M  .gitignore
D  src/.DS_Store
D  src/pages/.DS_Store
D  src/pages/service/.DS_Store
```
WPF + MaterialDesign in XAML + MahApps.Metroでダークテーマ動的切り替え

有用な情報がぜんぜん見つからなかったので共有。

WPFアプリケーションにおいて、デザインフレームワークに`MaterialDesignInXAMLToolkit`（以下 MD）と`MahApps.Metro`（以下 Metro）を組み合わせて使っている場合のライト・ダークテーマ切り替えの実装。

## コード

``` cs
using System.Windows;
using ControlzEx.Theming;
using MaterialDesignThemes.Wpf;

private void ToggleTheme(bool isDark)
{
    ToggleMetroTheme(isDark);
    ToggleMdTheme(isDark);
}

// MaterialDesignのテーマを切り替える
private void ToggleMdTheme(bool isDark)
{
    var pallet = new PaletteHelper();
    ITheme theme = pallet.GetTheme();
    IBaseTheme baseTheme = isDark
        ? new MaterialDesignDarkTheme()
        : (IBaseTheme)new MaterialDesignLightTheme();

    theme.SetBaseTheme(baseTheme);
    pallet.SetTheme(theme);
}

// Metroのテーマを切り替える
private void ToggleMetroTheme(bool isDark)
    => ThemeManager.Current.ChangeTheme(
        Application.Current,
        isDark ? "Dark.Steel" : "Light.Steel");
```

## 既知の問題
MDとMetroを組み合わせて使う場合以下のように、`App.xaml`で「Metroが使用するSolidColorBrushをMDのもので置き換える」ということをしているハズ。

``` xml
<ResourceDictionary.MergedDictionaries>
    <!-- MahApps -->
    <!-- 略 -->
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Themes/Light.Violet.xaml" />

    <!-- Material Design -->
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.BlueGrey.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" />

    <!-- Material Design: MahApps Compatibility -->
    <!-- 略 -->
</ResourceDictionary.MergedDictionaries>

<!-- MahApps Brushes -->
<SolidColorBrush x:Key="MahApps.Brushes.Highlight"
                 Color="{DynamicResource Primary700}" />
<SolidColorBrush x:Key="MahApps.Brushes.AccentBase"
                 Color="{DynamicResource Primary600}" />
<SolidColorBrush x:Key="MahApps.Brushes.Accent"
                 Color="{DynamicResource Primary500}" />
<!-- 以下略 -->
```

のであるが、コードからMetroのテーマを上書きするので、タイトルバーの色がMetroのものに戻ってしまう。
コードから再度MDの色を取得してきて上書きすればよいのだが……正直もうめんどくさい。
ハナからMDとMetroとで統合の取れる色を決めておきましょう。
妙案あれば教えて下さい。
ClientScriptで参照先のテーブル情報を取得する方法

### 1.参照先の情報を取得する方法
[g_form]APIの getReference() 関数を使用することで、参照項目の参照先レコード情報が取得可能となる。
この関数の定義は以下となっている。
getReference(String fieldName, Function callBack)
この関数を使用することで、Submit処理を記載したり、Ajaxを使用する必要がなくなる点に優れている。ただし、サーバとの通信は発生するため、その点は注意して使用する必要がある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/ca65de9f-4fd8-510d-39af-c56b97094fc4.png)


### 2.使用例
Incidentフォームにて、[Service]フィールドに値が入力された際に、[Assignment group]に[Service].[Support group]の値をセットするClientScriptを作成してみることとする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/0d7fbd6f-a171-ae73-f6d2-c493cff6f845.png)

実際に動作を確認してみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/0b074e17-677d-cc11-98f9-c25351a1e330.png)

[Service]フィールドに値を入力する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/c14ef3a6-733b-ef40-7e20-10a09a777af2.png)

正常に値がセットされることが確認できた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/36a50d16-291b-3c8e-40e8-4112b06d4881.png)
ポータル画面に配置したレポートのクリックアクションを停止する方法

### 1.ポータルに配置したレポートの問題点
画像のカレンダーレポートの帯のように、クリックを行うとUI16画面側のフォーム画面へ遷移するレポートは存在するが、CSMでは外部ユーザはUI16画面表示ができないため、エラー画面が表示されることになる。
今回カレンダーレポートでは遷移先の変更もできないレポートのため、クリックアクションを停止させる必要がある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/048117ca-8e8c-6146-31d0-9805eec1d102.png)




### 2.クリックアクションの停止方法
今回解説する方法は、PageのCSSでクリック自体行えないようにする。
そのため、ブラウザデバッグ等でカレンダーレポートの帯のクラス名を調査すると、
```css
a.fc-day-grid-event.fc-event.fc-start.fc-end
```
であることがわかった。
クラス名がわかれば、実際にPageフォームのCSSに記載する。CSSは、
```css
pointer-events: none;
```
を記載することでクリックを行えないようにすることが可能であるため、Pageは以下のように入力する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/07576306-8f05-2ecf-c49b-579ce9b2c450.png)
ここまで行えば、このPage上に限り、カレンダーレポートの帯をクリックしてもUI16画面へ遷移することはない。
ポータルのチケット登録画面で関連リスト機能を実装する方法

### 1.変数セットを作成する
レコードプロデューサー画面の変数セットタブから[New]ボタン押下する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/35c4c39d-9dc9-1f51-5e1a-b1b3fbd99b11.png)

[Multi-Row Variable Set]を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/31c23f92-19fd-cd21-3840-1337ce3086ed.png)

タイトルを入力し、[Submit]ボタン押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/36f68908-01cb-98eb-5235-858c6447a744.png)

作成した変数セットの画面から、変数タブの[New]ボタン押下で関連リストの列に対応する変数を作成していく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/696b9767-f256-367b-b24a-c5a7274e0ede.png)

レコードプロデューサー画面にて、作成した変数セットのオーダーを変更し、表示位置を調整する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/738b5d55-4fb9-d55f-72df-6f25084cfd6b.png)

ポータル画面にて、確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/e1128dc7-4b71-d226-98a2-4bc2ec815b70.png)

[Add]ボタンでデータを追加してみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/9ab4dea0-a2b2-7375-0cae-67024096093f.png)


### 2.変数セット入力データの登録処理実装
変数セットではテーブルとマッピングできないため、現状のままではデータを入力しても実際にデータ登録は行われない。
そのため、[Submit]ボタン押下時に変数セットの情報も登録する処理を追加する必要がある。
登録処理は、レコードプロデューサー画面の[Script]フィールドに登録処理のScriptを書くことで実現できる。
以下のScriptを[Script]フィールドに記載し、更新する。
```javascript:Client controller
// 関連リストの登録の際にSysIDが必要となるため、このScriptでInsertを行う
var testCaseRecord = new GlideRecord(current.getTableName());
testCaseRecord.initialize();
testCaseRecord.contact_type = current.contact_type;
testCaseRecord.account = current.account;
testCaseRecord.contact = current.contact;
testCaseRecord.product = current.product;
testCaseRecord.opened_at = current.opened_at;
testCaseRecord.priority = current.priority;
testCaseRecord.assignment_group = current.assignment_group;
testCaseRecord.assigned_to = current.assigned_to;
testCaseRecord.insert();
current.setAbortAction(true);

// 関連リストの登録
var testCaseID = testCaseRecord.getUniqueValue();
var subList = producer.test_sub_case_list;
var rowCount = subList.getRowCount();

for (var i = 0; i < rowCount; i++) {
    var rowData = subList.getRow(i);
    var colList = rowData.getCells();
    var testSubCaseRecord = new GlideRecord("u_test_sub_case");
    testSubCaseRecord.initialize();
    testSubCaseRecord.setValue("u_number", colList[0]);
    testSubCaseRecord.setValue("u_short_description", colList[1]);
    testSubCaseRecord.setValue("u_test_case", testCaseID);
    testSubCaseRecord.insert();
}

// チケット参照画面へリダイレクト
producer.portal_redirect = "?id=csm_ticket&table=u_test_case&sys_id=" + testCaseID;
```


### 3.確認
ポータル画面にて、登録内容を入力し、[Submit]ボタン押下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/5a6c77f1-f406-e3c4-7d1d-ee66e44d976a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/25281feb-10a1-f507-fe07-d29a2a1e4eac.png)
【Linux】ssh接続先で実行したプログラムが途中終了してしまう。

## 背景
javaプログラムが途中で中断される現象が起きた。
どうやって解決したかを備忘録として残しておきます。

## 起きたこと
javaプログラムを実行してもなぜか途中でプログラムが終了してしまう。

```terminal
#!/bin/bash
cd /home/ec2-user/javaServer/test-server
sudo /usr/bin/java8 -Dfile.encoding=UTF-8 -Dmyapp.name=test-server -jar 
test-server.jar 2>&1 | logger -p local1.info
```

## 原因
ssh接続しているターミナルをログアウトしたタイミングでプログラムが終了していた。

## 対処方法
Javaプログラムを起動するシェルスクリプトに`nohup`コマンドを付与する。

```terminal
#!/bin/bash
cd /home/ec2-user/javaServer/test-server
nohup sudo /usr/bin/java8 -Dfile.encoding=UTF-8 -Dmyapp.name=test-server -jar 
test-server.jar 2>&1 | logger -p local1.info
```

## 最後に
割りとサクッと治せたので良かったです。
ではまたっ！！

## 参考
https://atmarkit.itmedia.co.jp/ait/articles/1708/24/news022.html
チケットのリアルタイムなデータをポータル画面で表示する方法

### 1.手順概要
【前提】
　レコードプロデューサーは作成済みであること。
　ポータル画面以外での登録および更新ができること。
　ポータル画面以外で更新したデータをポータル画面で再度表示させる必要があること。

1. ポータル画面のURLに以下のパラメータを追加する
・case_sysid：チケットのSysID
・table_name：チケットのデータテーブル名
1. ポータル画面上で以下の処理を行うウィジェットを作成する
・URLから各パラメータを取得する
・取得したパラメータからチケットデータを取得する
・取得したチケットデータを各変数にセットする
1. レコードプロデューサーに、変数として作成したウィジェットを配置する


### 2.URLにパラメータを追加する
以下のチケット登録画面のURLは、
```
https://<インスタンスID>.service-now.com/csm?id=sc_cat_item&sys_id=<レコードプロデューサーSysID>
```
であり、このURLにパラメータを追加する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/61344679-ab57-3ad0-c520-a89e6149527a.png)
[case_sysid]、[table_name]のパラメータを追加すると、以下のURLとなる。
```
https://<インスタンスID>.service-now.com/csm?id=sc_cat_item&sys_id=<レコードプロデューサーSysID>&case_sysid=<チケットのSysID>&table_name=<チケットのデータテーブル名>
```
このURLで画面にアクセスします。


### 3.ウィジェットを作成
URLパラメータの取得は、サーバースクリプトにて以下で行う。
```javascript
$sp.getParameter("<パラメータ名>")
```
パラメータを取得すれば、テーブルデータは取得できるため、取得したデータを[data]オブジェクトに格納し、クライアントサイドで値セットが可能となる。

上記から、以下のようなスクリプトを作成できる。
```javascript:Server script
(function(data) {
    // URLパラメータを取得する
    var case_sysid = $sp.getParameter("case_sysid");
    var table_name = $sp.getParameter("table_name");
    var cat_item = $sp.getParameter("sys_id");

    // テーブルの値を取得する
    var caserecord = new GlideRecord(table_name);
    if (caserecord.isValid() && caserecord.get(case_sysid)) {

        // レコードプロデューサーで定義している変数を取得する(テーブルとマッピングしているもののみ)
        var grFields = new GlideRecord('item_option_new');
        grFields.addQuery('cat_item', cat_item);
        grFields.addQuery('map_to_field', true);
        grFields.query();

        // クライアントスクリプトで使用したいデータをセットする
        data.case_sysid = case_sysid;
        data.table_name = table_name;
        data.fields = {};
        data.variables = [];
        while (grFields.next()) {
            var varName = grFields.getValue("name");
            var colName = grFields.getValue("field");
            data.fields[varName] = caserecord.getValue(colName);
        }
    }
})(data);
```
```javascript:Client controller
function($scope, spUtil, $uibModal, $location, $window) {
    var c = this;

    // 値セット
    for (var key in c.data.fields) {
        $scope.page.g_form.setValue(key, c.data.fields[key]);
    }
}
```


### 4.レコードプロデューサーにウィジェットを配置
以下の画像のように変数を作成し、ウィジェットを定義する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/95917ad3-bd34-d2f6-3949-cbc292513026.png)


### 5.確認
UI16側でデータを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/db358863-b773-b381-e455-d5330a40981f.png)

作成したURLにアクセスする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843998/7a9f5fe9-28fe-7ed7-0d3a-a83e8f3216ae.png)
Gitでのバージョン管理の流れ

プログラミングを学習する上で欠かせないGitについて、基本的なバージョン管理の流れとそのコマンドをまとめます。
ブランチを切ったりコミットを取り消したりするところは別途まとめます。
## バージョン管理の必要性
ファイルを作成し完成したら保存、そのファイルを修正して完成したら保存。それぞれ履歴として残しておく手段として、別のファイル名にして保存しておくことが考えられます。

（例）
- ファイル.txt
- ファイル2.txt
- ファイルnew.txt
- ファイル230101.txt

ファイル名の末尾に番号や名前、日付をつけることでファイルのバージョンらしき情報をつけられます。しかし、上記の例では、
- ファイル2とファイルnewはどっちが新しい？
- ファイルnewとファイル230101はどっちが新しい？
- 最終更新日はファイル.txtが一番新しいけど......

のような問題が起こります。
さらに複数人で同じファイルで作業した場合には......。
このような問題を解決するためにGitでは、
- ファイルの変更内容
- 変更履歴
- 変更した内容の概要
- 変更した人

などの情報を保存することができます。
さらに、ファイルを過去の状態に戻したり、複数人でファイルを変更したりすることも可能です。

## 用語
Gitでのバージョン管理に最低限必要な用語です。
### リポジトリ
データとその変更履歴を保存するフォルダ。
#### ローカルリポジトリ
各自のローカル環境に存在するリポジトリ。各自のファイルの変更内容はまず、ローカルリポジトリに保存される。アクセスできるのは各個人のみ。
#### リモートリポジトリ
ネットワーク上に接続されたリポジトリ。有名なサービスとしてGitHubがある。ローカルリポジトリの内容を取り込んだり、逆にリモートリポジトリの内容をローカルリポジトリに反映させたりする。リモートリポジトリには複数人アクセス可能。
### ワークツリー
各自のローカル作業環境。ここで変更したファイルをステージに登録する。
### ステージ
ローカルリポジトリにプッシュする前の場所。データの変更箇所と変更履歴をコントロールするために、ステージに登録するファイルを選んでコミットする。
## 基本的なバージョン管理の流れ
Gitでバージョン管理は下記を繰り返すのが基本。
1. 変更履歴を記録したいファイルをステージに登録する
2. ステージに登録したファイルをコメントをつけてローカルリポジトリに保存（コミット）
3. ローカルリポジトリの内容をリモートリポジトリに保存（プッシュ）

## コマンド一覧
### git init
Gitでバージョン管理する際に最初に行うコマンド。(initializeの略)
### git add
変更ファイルをステージに登録。
### git commit
ステージに登録したファイルをローカルリポジトリに保存。
### git push
ローカルリポジトリの内容をリモートリポジトリに反映させる。
### git status
gitでのバージョン管理状態を確認するコマンド。
Microsoft セキュア スコアについて

## はじめに

こんにちは
今回はMicrosoft 365のセキュリティに関するお話です。
組織のテナントのセキュリティは問題ないか？何か対策できることはないか？とお悩みのセキュリティ担当者には役に立つ情報になるかと思います。

Microsoft365の管理センター内に Microsoft セキュア スコアというのがあるのはご存じでしょうか？
[Learn：Microsoft セキュア スコア](https://learn.microsoft.com/ja-jp/microsoft-365/security/defender/microsoft-secure-score?view=o365-worldwide)

Microsoft側でセキュリティに関する推奨事項が数値化されており、それを実施することでセキュリティを高めることができます。

実際の画面を見ながら対応方法を見ていきましょう！

## Microsoft セキュア スコアの確認

セキュアスコアの画面を開くには下記のURLにアクセスします。
https://security.microsoft.com/securescore
Microsoft 365 管理センターから進める場合は [セキュリティ] - [セキュア スコア]とたどればアクセスできます。


![セキュアスコア①.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584466/c4341bb8-a038-7431-bbfc-99b45a916984.jpeg)
こちらは私のテナントのスコアですが、36.03% と表示されています。
数値が低いということは対処すべき内容がたくさんあるということ。。。

画像の中央に [最優先の推奨処理]という項目があります。
それが、Microsoftの推奨事項となっている設定に関する内容です。
より見やすい画面があるので、上部にある[おすすめの操作]のタブをクリックします。

## 推奨処理内容の確認
![セキュアスコア②.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584466/eedbd2ca-a953-cd1d-7328-c812083158cf.jpeg)
↑の画面では更にフィルターで製品をExchangeOnlineだけに変更しています。

先ほどの画面中央にあった内容が一覧化されています。
 ランク、おすすめの処理、スコアへの影響・・・・と表形式でまとめられています。
 セキュリティとして実施できる内容があれば、その操作をクリックすると詳細が表示されます。
 ここではランク１となっている操作をクリックします。
 
![セキュアスコア③.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584466/c8996a5d-3dd2-0418-60bc-8d07beb2a22f.jpeg)
↑操作をクリック後、[実装]のタブをさらにクリックしています。

[前提条件]は実装に必要なライセンスを所持しているかが表示されます。
ここでは必要なライセンスがなく、「なし」の左側に☑が入ってるので、前提を満たしていることになります。

[次のステップ]は必要な作業内容が記載されています。簡易的な手順書やMicrosoft Learnのリンクが記載されており、内容を確認して実際に変更を行います。
※ここでの変更操作は割愛します。

## 変更後のスコアの変化
設定後、スコアが反映されているかどうかは[履歴]のタブで確認が可能です。
![セキュアスコア④.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584466/650c3fe2-cc28-1a7a-8b92-24357508b445.jpeg)
※反映には24時間経過が必要となります。

作業が完了し、５ポイント取得と記載されています。
グラフも作業を行った01/06付近が少し上昇しているのがわかります。
このように各操作を処理していくとポイントが上がり、スコアが良くなっていきます。

## 対処不要な項目の処理
実際には組織として対処不要というような項目もあるかと思います。
その場合は、[おすすめの操作]タブに戻り、該当の操作をクリックして、[状態とアクションプランの編集]をクリックします。
![セキュアスコア⑤.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584466/f320aa0a-ef37-c12c-62ab-41f99be65660.jpeg)

![タイトルなし.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584466/e4771377-f1bb-7cff-9107-d3d908b3ea16.jpeg)
[状態]の項目で組織の方針に合った状態に変更することができます。リスクの許容や代替の軽減策をとっているなど方針が決まっている場合は、状態を変更しましょう。

![セキュアスコア⑥.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584466/b836cd22-5891-6ae0-2852-7aecdd564a25.jpeg)
↑リスクの許容を選択した場合、上記のように状態が変更されます。

## まとめ
セキュア スコアについていかがでしたでしょうか。
必要な操作がまとめられており、対応可能と思われるものから着手してセキュリティを高めてみてはいかがでしょうか。
iOSアプリで振り返るUIデザイン

# はじめに
業務や個人開発している中でデザインの知識やセンスのなさを実感していました。
そこでiOSアプリのアイコンやアプリ内のデザインを振り返りながらデザインについてちょっとだけ勉強してみようと思います。

# iOSデザイン史
それでは過去のiOSバージョンで採用されたデザインを見ていきましょう！

## 〜iOS6　 スキューモーフィズム または リッチデザイン
iOS6までスキューモーフィズムが採用されていました。
テクスチャや影、リアルな質感などがスキューモーフィズムが採用されていました。
立体感、素材感が感じられます。

![スクリーンショット 2024-01-11 13.19.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/bfb4269a-d0eb-bfab-5f5e-779123a71f37.png)

出たてのiPod touchを触っていた頃が懐かしいです。

## iOS7〜現在 フラットデザイン
iOS7からフラットデザインが導入されました。
影や質感が削減され、シンプルで平面的なデザインが特徴となりました。

![スクリーンショット 2024-01-11 13.25.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/854dfb83-1ceb-ee2d-dd10-8d0d63be6d5c.png)

一皮向けた感がありますね。自分でデザインやアイコンを作るならフラットデザインが一番簡単にそれっぽくなりそうです。

## フラットデザイン2.0

フラットデザインはメリハリが無く、UIが使いにくくなるなどユーザービリティーへの配慮がおろそかになる傾向があったそうです。
そこでフラットデザインの長所を活かしながら、ボタンなどの重要な箇所に立体感を加えたデザインがフラットデザイン2.0です。

![スクリーンショット 2024-01-12 13.20.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/8ba91f81-e7ef-7692-12f6-afeff036cddc.png)


名詞のあとに数字が続くとかっこいいです。


## iOS11〜現在　マテリアルデザイン
iOS11からマテリアルデザインが採用され始めました。
ちなみにマテリアルデザインはGoogleが2014年に発表したデザインです。

マテリアルデザインには5つの原則があります。
1. 現実世界の物理的法則を取り入れる
2. 紙とインクの要素で組み立てる
3. 色の数を少なく配色する
4. 影を活用して立体感を作る
5. 連続性のあるアニメーション

![スクリーンショット 2024-01-15 13.18.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/fff998e9-8672-2671-6752-b0830fb1bab5.png)
iOSやWebでもマテリアルデザインを使える[Material Components](URL "https://github.com/material-components/material-components-ios")というUIライブラリもあったりします。


## 計算機のUIの変遷
スキューモーフィズム、フラットデザインを経て現在の計算機になっています。同じ機能でもUIによって使い心地や使いやすさに影響するなぁと改めて思いました。
![スクリーンショット 2024-01-15 13.27.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/b5f2c7ed-bbd1-54c6-c8ff-9a2e50b4562b.png)

## その他のデザイン
トレンドでもある3つのデザインを見てみます。

### ニューモーフィズム
影の付け方に特徴のあるデザインです。
おしゃれで真似してみたいデザインではありますが、スッキリしすぎていてスマホでは見づらい印象です。
![Simple-Music-Player-1024x768.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/7e76ef08-1ad4-a582-fbf3-28323c248f61.png)

### グラスモーフィズム
透明度・ぼかしを組み合わせてすりガラスのように見せるデザインです。
iOSでもよく見られるデザインですね。
![スクリーンショット 2024-01-16 17.42.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/b56bd915-6e27-1b2f-c974-f7a6494a77ab.png)



### クレイモーフィズム
3DアートがWebデザインに取り入れられるようになり、その流れで登場したのがクレイモーフィズムで、クレイ(粘土)のような可愛らしいデザインです。VRとの相性も良いそうなのでVisionOSには合うかもしれません。iOSではまだ見かけませんね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/5d0ac089-3664-79ab-89eb-5cdf895604a3.png)



## 余談
iOSアプリでちょっと感動したのが時計アプリです。特にアラーム機能は暗い中で操作することが多いと思いますが、いつからかダークモードでなくてもアプリの背景色が黒くなりました。時計アプリ全体が暗く、目に優しい配慮が嬉しいです。そんなUIを作れるようになりたいです。

![スクリーンショット 2024-01-16 17.20.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/0996001e-05a6-54c0-2a02-d146e10a88b0.png)


参照：
https://gladworks.jp/blog/web-design-2023/
https://zenn.dev/bayathy/articles/b1734e3338f2ed
https://www.evoworx.co.jp/blog/glassmorphism/
【Reactアプリ100本ノック】08 Calendar

![YAKINIKU RETRO (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/7ffcc213-c641-c8e8-9bd8-f0c2b3bd9671.png)

# はじめに

<h3>こんにちは！！@Sicut_studyです！</h3>

https://qiita.com/Sicut_study/items/78910cd8d103b8d45a73

こちらの記事が嬉しいことに多くの方に見ていただきました。
そこで**React**が多くの初心者の方に注目されているんだなということを実感させられました。

私の記事では何度も言っている通り

<font color="red"><h4>最速で学ぶならとにかく何か作る</h4></font>

というのが大事になってきます。そこで **「Reactアプリ100本ノック」** というのに挑戦していこうかと思います。徐々に難易度を挙げていってどこまでお題を作りきれるかの腕試しでやっていただければと思います。

今回はTODOアプリの派生になりそうな実用的なアプリに挑戦していきます

# 前回のお題

https://qiita.com/Sicut_study/items/0fb7e80bc0a973000ae9

# Reactアプリ100本ノックルール

- 主要なライブラリやフレームワークはReactである必要がありますが、その他のツールやライブラリ（例: Redux, Next.js, Styled Componentsなど）を組み合わせて使用することは自由
- TypeScriptを利用する
- 要件をみたせばデザインなどは自由

# 08. Calendar

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/829cbc94-5096-5cd0-7493-99e8e8736236.png)


## 問題

カレンダーアプリを作成します
予定をカレンダーに登録できるようにします

## 目的

以前作成したTODOアプリの派生としてカレンダーに予定を登録できるようにします
またグリッドを使ってカレンダーを表現します

## 達成条件

- カレンダーが表示されている
- 土日は赤色で表示する
- 前の月、次の月をページネーションできる
- 日付に対して予定を複数追加できる
- 予定の編集削除ができる

## 実際に解いてみた

![Peek 2023-11-26 12-24.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/28b8a857-b9b2-dc3e-60cc-f886f33cf225.gif)

### 利用技術

- React
- TypeScript
- Vite
- Emotion
- data-fns

解答時間 : 2時間

カレンダーの日付をどのようにとってくるのかというところで**data-fns**を利用しました
グリッドをうまくりようすることで7日で改行するようにしています

予定の登録は日付ごとに管理しないといけないので、どのようなデータ構造にするかをしっかり決めるのが大事だなと思いました

# 次のお題

https://qiita.com/Sicut_study/items/a27e5789a1b23438d77c

# おわりに

React100本ノックの記事を地道に上げていこうと思いますので、一緒に挑戦したい方は @Sicut_study をフォローいただけるととてもうれしく思います。
ここまで読んでいただけた方はぜひ**いいね**と**ストック**よろしくお願いします。

今週もプログラミング頑張りましょう！

![jisou-banner.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/217ea52d-8130-3266-0619-990fa968408a.png)


# おすすめ記事

https://qiita.com/Sicut_study/items/cff86da10b8ee0809ccb

# About Me

Webエンジニア転身して1年間本気で勉強
転職ドラフトで高額オファーを複数獲得
そこでの経験からアウトプットやマインドセットの発信に強みがある
エンジニアをやりながら、起業に挑戦中
アイデア作りやパブリックスピーキングを得意としてる

■ Twitter
https://twitter.com/Sicut_study
■ Instagram
https://www.instagram.com/himariajin
■ Youtube
https://www.youtube.com/channel/UCBFrGAJhPuuaoLwUIHBILsA
■ TikTok
https://www.tiktok.com/@sicut_study
■ プログラミングコーチングJISOU
https://projisou.jp
■ 登壇依頼などご依頼はこちらから
himaria.jin.watanabe@gmail.com
swiftにOpenCVをインストールする

# はじめに
iosアプリ開発で画像処理をしたい。その為にopen cvをcocoapodを使ってインストールしていく
※個人のmac使ってるので業務関連なし


### １．Homebrewのインストール
以下サイトから一番上のインストールにあるコマンドをターミナルで実行
```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
https://brew.sh/ja/
### ２．cocoapodsのインストール
以下コマンド実行
```
brew install cocoapods
```

インストール成功後セットアップを実施する。
```
pod setup
```
以下画像の出力で完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/a990c1db-19e4-c33d-7ac1-7ea03213ee10.png)



### ３．podfileを作成しopencvを入れる
Xcodeを終了し、iosプロジェクトファイルのルート階層までcdコマンドを使用して移動する。
移動後、以下コマンドでファイル作成
> [cdコマンドとは](https://blog-and-destroy.com/34941)
```
pod init
```
プロジェクトファイルを確認しPodfileがあるか、ターミナルでlsコマンドを使ってPodfileが生成されていればどちらでもOK

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/36919a27-967e-c3d4-997c-6ad848de0d89.png)


### ファイルを開く（別ウィンドウが起動します）
```
open podfile
```
ライブラリの中にインストールする内容を入力して保存
今回はopen cvなので以下。バージョンを指定してダウンロードする事も出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/2e51204a-7760-7431-588f-916f35938e80.png)


### インストール
podfileを保存して閉じる。その後インストールコマンドを実行
```
pod install
```
インストール完了！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/a218bf78-d8c4-2b15-e474-c41033babba9.png)
Draw.IOで作図したpng画像をWord文書の埋込画像として連動(同期)させる

Draw.IOで作図したpng画像を、Word文書の埋め込み画像としてと同期させる方法について紹介します。

# Draw.ioで作図するメリット
- フリーである
- VsCodeの拡張機能でもある
- レイヤー分けが可能である
- Wordよりもグリッドに沿って作図しやすい
- 図形のテンプレートが豊富
- 透過pngを作成できる（背景を透明にできる）
- 拡張子を.dio.pngにすれば、画像ビューワでそのまま閲覧できる

# 同期させるメリット
- 作図を更新すると、Word文書の画も合わせて更新します。（張り直し不要）
- 図はpngファイル扱いなので、画像としてメールなどに添付可能です。
- 非表示にしているレイヤーはWordに表示されません
    - 例えば、図に「コメントレイヤー」を作ったとして、普段は非表示にしておきます。
    - メールやチャットで図に何かコメントを書込みして送る時だけ「コメントレイヤー」に何か書き込んで送ります。送ったあとにコメントレイヤーを非表示に戻せば、Wordの図にコメントは見えません。

# 手順
インストールするアプリとしてのDraw.ioもありますが、VScodeの拡張機能のほうで説明します。

## 作図する
### 拡張子
新しいファイルを作成する際に拡張子を`.dio.png`として作成してください。
これで、Draw.ioで編集は可能だけど、png画像として閲覧できるファイル形式になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204268/779804da-f09d-e607-4a5d-91be24f37e1a.png)

適当に作図します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204268/3567f0ef-7a8f-4fb7-1e91-e2c3fcb96306.png)


### 背景色
背景色を塗りつぶしで設定しない場合は、背景が透明になります。
グリッドの表示してあったり、白地でないWord文書では、用途に合わせて変更してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204268/0de124ea-105c-4a3b-10a0-64a0d901b76c.png)

## Wordでリンクを作成する
### フィールドとして挿入
フィールドの挿入から`IncludePicture`を選んで、URLに作図したdio.pngを指定します。（相対パスでOKです）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204268/d01e6a1f-8931-d6fb-5e90-adfc441a59b8.png)

サイズ調整するか否かのチェックはお好みで。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204268/6941d937-e07b-3b94-e6c0-b6841b8acb37.png)
これてワードに挿入されます。


# Wordが絵柄の同期するタイミング
- Wordを開いたとき
- 図を選んでF9を押したとき

# リンク先の変更
Wordで　`Alt+F9`を押すと、フィールド情報が文字として表示できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204268/5adc9605-65de-1c9b-a52a-79186db8f24e.png)

他にも図を入れ込む際にはフィールドをコピペしたり編集したりするのが楽かもしれません。

# 注意事項
作図ファイルを消したりリネームてしまうと、次にWordを開いた際にリンク切れになるのでご注意を！！
『アカント ウン コタン』における山本多助のアイヌ文字

思うところあって、国立アイヌ民族博物館 第4回テーマ展示『[アカント ウン コタン](https://nam.go.jp/exhibition/floor2/special/akan2023/)』(2023年3月14日～5月14日)の「ホㇱキ イタㇰ」を、文字起こししてみた。

![Upopoy2023-03-14.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428317/dd99569a-ff32-c039-7efd-838ba5316365.gif)

> # ホㇱキ イタㇰ
> イッソロレ。
> ウポポイ オッタ エチシネヱ ク〓 パセ オンカムイ 〓ラ オリパㇰ イタㇰ アンキ。
> 第4回テーマ展示 アナㇰネ 「地域からみたアイヌ文化展 アカント ウン コタン ―阿寒湖畔のアイヌ文化―」 アニ アン レヘ チコレ ワ イコㇿ ウサㇺ ペカ チアマ ワ エチヌカレアㇱ。
> タン 〓ンプ オッタ アカント ウン コタン コタン ウン クㇽ ピㇼカノ ハリキキ カ〓 エチヌカレアㇱ ワ アカント ウン コタン タ アン アイヌプリ カイ ウ〓ㇱコマ カイ イカㇻ カイ ウポポ カイ リㇺセ カイ ウサオカイペ エチヌカレアㇱ ナ。
> アカン アナㇰ 「シポロシリ シポロコタン」 ネ ワ 山本多助エカシ エネ ハウキ。 「カムイカラモシリ カムイカラ ピリカト アンワ シノッ ラムコロ ウワッテウタラ ウシノッ ウシネワ ヌポッイ クシリポッケイ ユ セセㇰイ ポロンノ アン」。 アカント ウン コタン オッタ イヌ𛄡 カイ チケメカㇻ カイ ウポポ カイ リㇺセ カイ アンヌヌカ ㇷ゚ ネ。 オロ タ コタン ウン クㇽ アイヌプリ テイタプリ エオリパㇰ カネ アシㇼプリ タネアンプリ アニ カㇻ ペ カイ オカイ。 タン 〓ンプ オッタ コタン ウン クㇽ ハリキキ カ〓 エチヌカㇻ エヤㇱカイ。
> シリーズ展示「地域からみたアイヌ文化展」オッタ カンナ カンナ アイヌモシㇼ タ ウサ アイヌ アン ワ ウサ コタン アン ワ ウサ アイヌイタㇰ アン ワ ウサ アイヌプリ アン シリ エチヌカㇻ ナンコㇿ ナ。
> テエタ ワノ タネ タ パㇰノ アイヌプリ アン カ〓 アンエヤイコシラㇺ〓イパ ル〓イ。
>
> (アイヌ語:釧路方言)
> 2023パ 3チュㇷ゚ 14ト
> アヌココㇿ アイヌ イコロマケンル サパネクㇽ エ〓ナンカㇻ

山本多助のアイヌ文字が紛れ込んでいるために、あちこちにゲタ文字を書かざるを得ない。ただ、この文書に限って言えば、「シュの合字」「トゥの合字」「チャの合字」の3字さえ何とかすればいい(「イェの合字」はU+1B121に収録済み)ので、さて、どうすべきかな。
【Linux/USB】LinuxでUSBが認識されなくなった

# エラー概要
LinuxでUSB Driveをアンマウントせずに引っこ抜いたら、それ以降マウントが出来なくなった
> error mounting .....unknown error when mounting

# 解決策
usbを見つけて、ntfsfixをrunする
> ls /dev/sd*
> sudo ntfsfix /dev/sda1
ONLYOFFICEスプレッドシートでマクロを使って選択範囲にインデックスを追加する方法

スプレッドシートは数字がすべてですよね？デフォルトのインデックスではうまくいかないこともあります。そこで、この時間節約マクロの出番です。選択範囲のすべての行にきちんとインデックスを付け、スプレッドシートのワークフローをよりシンプルにします。

<img class="aligncenter wp-image-77060" src="https://static-blog.onlyoffice.com/wp-content/uploads/2023/11/29105110/indexing-macro.png" alt="ONLYOFFICE Macro to add indexes to a selection in spreadsheet editor" width="736" height="372" />

<!--more-->
<h2>マクロの構築</h2>
それでは、インデックス・マクロを作り始めましょう：
<pre class="theme:github font:monospace lang:js decode:true">const oWorksheet = Api.GetActiveSheet();
const oRange = oWorksheet.GetSelection();
</pre>
まず、oWorksheet変数でアクティブシートを取得し、oRange変数で選択範囲を取得します。
<pre class="theme:github font:monospace lang:js decode:true ">let index = 0;
</pre>
次に、選択範囲のすべてのセルを反復処理するための変数インデックスを宣言します。
<pre class="theme:github font:monospace lang:js decode:true ">oRange.ForEach(function (range) {
    index++;
    oWorksheet.GetRange(range).Insert("right");
    oFormat = `${index})`;
    oWorksheet.GetRange(range).SetValue(oFormat);
  });
</pre>
そして、forループを使って、選択範囲のすべての値を1列右にプッシュし、今は空の列にインデックスを追加します。forループの各繰り返しでインデックス変数をインクリメントします。
<h2>マクロの全コード</h2>
マクロの全コードは次のとおりです：
<pre class="theme:github font:monospace lang:js decode:true ">(function () {
  const oWorksheet = Api.GetActiveSheet();
  const oRange = oWorksheet.GetSelection();
  let index = 0;
  oRange.ForEach(function (range) {
    index++;
    oWorksheet.GetRange(range).Insert("right");
    oFormat = `${index})`;
    oWorksheet.GetRange(range).SetValue(oFormat);
  });
})();
</pre>
では、マクロを実行し、その動きを見てみましょう！
<div style="text-align: center;"><iframe width="560" height="315" src="https://www.youtube.com/embed/DJSiaoTHiUw?si=kndqwzk7mXkxCGnk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" data-mce-fragment="1"></iframe></div>
私たちは、このマクロが、必要な場所でデータのインデックスを作成するのに役立ち、手動でインデックスを作成する手間を省くことができることを願っています。

ONLYOFFICE APIのパワーを活用するチャンスをお見逃しなく。私たちのAPIメソッドの豊富なライブラリは、あなたのアイデアを現実に変える鍵です。ご質問や革新的なコンセプトがありましたら、ぜひ<a href="https://www.onlyoffice.com/ja/contacts.aspx?utm_source=qiita&amp;utm_medium=article+&amp;utm_id=spreadsheet_index_macro" target="_blank" rel="noopener">私たちと共有してください</a>。
<div class="useful-links">
<h3>お役立ちリンク</h3>
<a href="https://api.onlyoffice.com/plugin/macrosamples/?utm_source=qiita&amp;utm_medium=article+&amp;utm_id=spreadsheet_index_macro" target="_blank" rel="noopener"><u>マクロのサンプル</u></a>

<a href="https://github.com/ONLYOFFICE" target="_blank" rel="noopener"><u>ONLYOFFICEのGitHubページ</u></a>

<a href="https://api.onlyoffice.com/docbuilder/spreadsheetapi?utm_source=qiita&amp;utm_medium=article+&amp;utm_id=spreadsheet_index_macro" target="_blank" rel="noopener"><u>ONLYOFFICE Spreadsheet API</u></a>

<a href="https://www.onlyoffice.com/blog/ja/search?s=macro&amp;utm_source=qiita&amp;utm_medium=article+&amp;utm_id=spreadsheet_index_macro" target="_blank" rel="noopener"><u>他のマクロ</u></a>

<a href="https://www.youtube.com/playlist?list=PLCF48HEKMOYNBygGjr9lSw3PLpVXQ6s_t" target="_blank" rel="noopener">ONLYOFFICE Docsのマクロ【無料コース】</a>

</div>
KotlinとThymeleaf 基本編（Dtoの値を出力）


<h5>以下の例では、架空のAnimalViewDtoクラスに保持した値をHTMLに出力させている。</h5>

```:AnimalViewDtoクラス
package jp.type.user.controller.index.view.dto

/**
 * 動物紹介ページ用ViewDto
 */
data class AnimalViewDto(
    /** ID */
    val id: Int,
    /** 動物名 */
    val name: String,
    /** 性別*/
    val sex: String,
)
```

```:文字列の出力方法
<p th:text="この動物の名前は、|${animalViewDto.name}|です。"></p>

<p th:text="この動物の名前は、" + ${animalViewDto.name} + "です。"></p>

<p>この動物の名前は、[[${animalViewDto.name}]]です。]]</p>
```

文字列の出力方法は上記の３つ。
状況に応じて使い分ける。
[OCI]Autonomous Data WarehouseをクローンしてAutonomous Transaction Processingを作成してみた

# はじめに
従来は、Autonomous Databaseのクローンを作成する場合はソースとなるAutonomous Databaseと同じワークロード・タイプのクローンしか作成できませんでしたが、先日のAutonomous Databaseのアップデートで、クローンの作成時にクローンのワークロード・タイプが選択できるようになりました。
これにより、Autonomous Databaseをデプロイした後にワークロード・タイプを変更したいといったニーズに対応できるようになりました。
（既存のAutonomous Databaseのワークロード・タイプを直接変更することはできません。）

今回は、Autonomous Data Warehouse（ADW）のクローンとして、Autonomous Transaction Processing（ATP）を作成してみました。

# 1. クローンの作成

OCIコンソールでAutonomous Data Warehouseの詳細画面にアクセスします。
![スクリーンショット 2024-01-16 11.02.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/80d9f418-bb00-1151-5b37-788abfddee63.png)

「他のアクション」から「クローンの作成」をクリックします。
![スクリーンショット 2024-01-16 11.02.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/2667d01a-6d29-e09b-f1ec-3ba39643a04d.png)

「ワークロード・タイプ」の選択肢として、「データ・ウェアハウス」と「トランザクション処理」が選択可能になっていますので、ここでは「トランザクション処理」選択して、「Autonomous Databaseのクローンの作成」をクリックします。
![スクリーンショット 2024-01-16 11.12.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a71feca6-12e7-5b99-5815-f0c6f0722096.png)

ワークロード・タイプが「トランザクション処理」のAutonomous Data Warehouseのクローンのプロビジョニングが開始されました。
![スクリーンショット 2024-01-16 11.13.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/c2715532-4e9e-6f18-70fe-d9a7aea6953a.png)

ワークロード・タイプが「トランザクション処理」のAutonomous Data Warehouseのクローンが使用可能になりました。
![スクリーンショット 2024-01-16 11.28.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/1f68019b-dabf-5201-0c78-e12da97f0cf0.png)

# 2. ソースのワークロード・タイプ別の作成可能なクローン

ソースのワークロード・タイプ別の、作成可能なクローンのワークロード・タイプは以下のようになっています。

・ADW
![スクリーンショット 2024-01-16 16.15.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/dd592e6b-4f55-1587-cff0-12e7c0d60649.png)

・ATP
![スクリーンショット 2024-01-16 16.15.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/003aaf90-94f2-0a76-e6be-b33128b3195e.png)

・JSON
![スクリーンショット 2024-01-16 16.16.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/271c06a7-604d-e599-09bc-d5e9b993df11.png)

・APEX
![スクリーンショット 2024-01-16 16.16.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/cc5aa8c4-ee97-41bf-a9e8-ca1b7f797574.png)

まとめると、以下のようになります。

|ソースのワークロード|ADW|ATP|JSON|APEX|
|:-:|:-:|:-:|:-:|:-:|
|ADW|○|○|-|-|
|ATP|○|○|-|-|
|JSON|○|○|○|○|
|APEX|○|○|-|○|

# 参考情報
・[Clone Autonomous Database to Change Workload Type](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/autonomous-clone-cross-workload-type.html#GUID-527A712D-FF82-498B-AB35-8A1623E36EDD)
CloudFormation

## 0.はじめに

この記事はAWS 認定試験勉強のための、CloudFormationに関する知識のまとめです。

## 1.CloudFormationとは

AWSの各リソースを含めた環境を自動作成/更新/管理するInfrastructure as Code (**IaC**) サービスです。IAMもその対象です。


WEBアプリケーションではなく、インフラ構成の自動化に利用します。組み込み関数などを使ってリージョンによらず利用できるテンプレートを作成します。




## 2.AWS Launch Wizard
AWS Launch WizardはCloudFormationテンプレートに基づいてAWSベストプラクティスに従ったアプリケーションを簡単にデプロイするために利用されるサービス。



## 3.ネットワーク設定

SSHによるアウトバウンドトラフィック通信をネットワークACLによって許可する設定が必要であります。その際は、PC側の広範囲なポート番号に送れるようにFrom:1024-To:65535という設定が必要となります。

※49152～65535番は動的ポート(エフェメラルポート)

また、一般論としてSSHは**ポート番号22**を指定する必要があります。




## 4.CloudFormationテンプレート

CloudFormation スタックセットを利用するとCloudFormation テンプレート内に AWS リソースの設定を定義して、１つのテンプレートにより複数の AWS アカウントやリージョンにリソースを展開できます。

### 4.1.CloudFormationテンプレートの例
AWS CloudFormationを使用してEC2インスタンスを作成する例。

```yaml
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  MyEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-0c55b159cbfafe1f0  # Amazon Linux 2 AMI
      KeyName: my-key-pair
      SecurityGroups:
        - Ref: MySecurityGroup

  MySecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow SSH and HTTP access
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
```
### 4.2.CloudFormation スタックセット
CloudFormation スタックセットを利用するとCloudFormation テンプレート内に AWS リソースの設定を定義して、１つのテンプレートにより複数の AWS アカウントやリージョンにリソースを展開できます。

### 4.3.SSH接続に関するCloudFormationテンプレ―ト

Egress: falseと設定することで、インバウンドトラフィックを設定することができます。

## 5.AWS Serverless Application Model （AWS SAM) 


AWS Serverless Application Model （AWS SAM) は、Infrastructure as Code (IaC) を使用してサーバーレスアプリケーションを構築するためのオープンソースフレームワークです。