OmniAICreator/Qiita-1.07M huggingface dataset:
CISSP受験者のために読みやすいNISTソースとISMS2022ソースを集めた


受験者が読むとよさそうなNIST、ISMS2022の邦訳/解説ソースのまとめました。
（CISSP合格者の方もNISTやISMSを読むことは割と勧めているようにみえます）
使いたい人、使う予定がある人は是非いいねとストックしていってください。

姉妹版として参考書一覧や、2024年での更新点まとめ、合格者が使用したソースまとめなども作りたいと思っています（が、これは私の気分次第です）

### 選定基準

・CISSP公式ガイドブック日本語版（第4版）に記載有のNIST
https://amzn.to/3wf6N1T
・CISSP公式ガイドブック英語版（第8版）に記載有のNIST
https://amzn.to/44suyk1
・個人的に読んでいてオススメのISMS本
https://amzn.to/3WaQa28
・IPAの邦訳（大体100p以上あるので辞書的に使用推奨）

** 公式ガイドブックと問題集は新版が出るので新版を買うのをオススメ **
https://www.amazon.co.jp/Certified-Information-Security-Professional-Official/dp/1394258410?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3503Q3HO76F0M&dib=eyJ2IjoiMSJ9.qFtjLgs9yS2Num41mCg-zAWScBEaPgqIDtITqJa5U8ZIeztoat15zA6wmekxROHeE4P1ILCORAuOfs6fyZBql95PHEZpUlVf9P6z3N3PzuHxAV1xOjf7ZYvFMV49FJFuDjv-b9K5LIQ61IoXIRAbX_nwoAa_D_VeFPg_jVvlRnC2PofYk8x8GQjrvR0CFdBUSKmIx5gPHDbeEsB05duMQtUqRTNMdnx5qxYAv1Cw9bKMxRELib6EB8zTZvg-ylNyTt6AddlyXQPVrqiFoWdW2JFSwsDxLbKvEB4Ovl1qnCI.RYMqQ_nP5ksK9st5RmvNCT7VlxU_JU9k8Q6qmF2nG10&dib_tag=se&keywords=CISSP&qid=1713861124&sprefix=cissp%2Caps%2C187&sr=8-23&linkCode=sl1&tag=pspde-22&linkId=9bc58cf8b7a11cdd5187955fa57dbdee&language=ja_JP&ref_=as_li_ss_tl

### NIST SP800-53
NIST（米国標準技術研究所）とセキュリティ（その２）～NIST SP800-53の概要～
https://www.intellilink.co.jp/column/security/2019/091100.aspx

### NIST SP800-30(37のリンクの方でも少し解説有)
セキュリティ関連NIST文書について
https://www.ipa.go.jp/security/reports/oversea/nist/about.html

### NIST SP800-37
「リスクアセスメントフローチャート」もココ
「リスクマネジメントフレームワーク（RMF）」もココ
https://www.intellilink.co.jp/column/security/2019/111900.aspx

### NIST SP800-60
セキュリティ関連NIST文書について
https://www.ipa.go.jp/security/reports/oversea/nist/about.html

### NIST SP800-63
暗号鍵管理のガイドラインNIST SP800-57 part1のご紹介
https://jpn.nec.com/cybersecurity/blog/210521/index.html

### NIST CSF
【解説】NIST サイバーセキュリティフレームワークの実践的な使い方
https://www.nri-secure.co.jp/blog/nist-cybersecurity-framework

### NIST SP800-171
防衛省が調達先に求めるセキュリティー基準SP 800-171、要件を満たすのが難しい理由
https://xtech.nikkei.com/atcl/nxt/column/18/00001/06507/
NIST SP 800-171とは？　解説と対策
https://www.manageengine.jp/solutions/nist_publications/nist_SP800-171/lp/

### NIST SP800-18
セキュリティ関連NIST文書について
https://www.ipa.go.jp/security/reports/oversea/nist/about.html

### NIST SP800-207
NIST SP800-207 「ゼロトラスト・アーキテクチャ」の解説と日本語訳
https://www.pwc.com/jp/ja/knowledge/column/awareness-cyber-security/zero-trust-architecture-jp.html

### NIST SP800-144
セキュリティ関連NIST文書について
https://www.ipa.go.jp/security/reports/oversea/nist/about.html

### NIST SP800-61
セキュリティ関連NIST文書について
https://www.ipa.go.jp/security/reports/oversea/nist/about.html

### NIST SP800-94
セキュリティ関連NIST文書について
https://www.ipa.go.jp/security/reports/oversea/nist/about.html

### NIST SP800-100
邦訳確認できず

### ISMS2022
個人的に読んでいてオススメのISMS本です。
https://amzn.to/3WaQa28

### 公式ガイドなどに記載がなかったが役立ちそうなNIST

媒体のデータ抹消処理に関するガイドラインNIST SP800-88 rev.1のご紹介、およびクラウドサービスにおけるデータ抹消処理について
https://jpn.nec.com/cybersecurity/blog/211224/index.html

認証方式の整理とNIST SP800-63での認証方法決定
https://jpn.nec.com/cybersecurity/blog/210521/index.html
StableDiffusionXLの画像生成APIをCompute Engineに作る

# 背景
- 以前 [Compute EngineにHuggingFaceのDiffusers 載せて StableDiffusionの画像生成API作ってみる](https://qiita.com/munaita_/items/860d3f4c0358491b4336) でstable-diffusion-v1.5でAPI作ったので、今回はstable-diffusion-XLで作ります
- 今回も77token以上を取り扱うためCompelを使います

https://huggingface.co/docs/diffusers/using-diffusers/sdxl


# 環境
- Compute Engine
- machine type: n1-highmem-8
- 1 x NVIDIA T4
- 起動イメージ: Google, Deep Learning VM with CUDA 11.8, M116, Debian 11, Python 3.10. With CUDA 11.8 preinstalled

# 実装

### インストール

```sh
# 80ポートで動かしたいのでsudoでやっていきます
sudo pip install -q diffusers transformers accelerate invisible-watermark>=0.2.0 compel
```

### 実装

```main.py
from flask import Flask, request
import base64
from compel import Compel, ReturnedEmbeddingsType
import torch
from diffusers import DiffusionPipeline


pipeline = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", variant="fp16", use_safetensors=True, torch_dtype=torch.float16).to("cuda")
compel = Compel(tokenizer=[pipeline.tokenizer, pipeline.tokenizer_2] , text_encoder=[pipeline.text_encoder, pipeline.text_encoder_2], returned_embeddings_type=ReturnedEmbeddingsType.PENULTIMATE_HIDDEN_STATES_NON_NORMALIZED, requires_pooled=[False, True])

app = Flask(__name__)

@app.route("/create", methods=['POST'])
def create():
    data_dict = request.get_json()
    prompt = data_dict['prompt']

    # ネガティブプロンプトの追加
    negative_prompt = "YOUR_NEGATIVE_PROMPT"
    positive_scale = 7.5  # ポジティブなプロンプトの制御強度
    negative_scale = 5.0  # ネガティブプロンプトの制御強度

    # コンディショニングテンソルの作成
    conditioning, pooled = compel(prompt)
    negative_conditioning, pooled_negative_conditioning = compel(negative_prompt)

    # ガイダンススケールを使用して、プロンプトのポジティブおよびネガティブ効果を調整
    image = pipeline(
        prompt_embeds=conditioning,
        pooled_prompt_embeds=pooled,
        negative_prompt_embeds=negative_conditioning,
        negative_pooled_prompt_embeds=pooled_negative_conditioning,
        width=1024, height=1024,
        num_inference_steps=20,
        guidance_scale=positive_scale,
        negative_guidance_scale=negative_scale
    ).images[0]
    image.save('tmp.png')
    with open("tmp.png", "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    return {"b64_json": encoded_string}

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=80)
```

### 起動

```sh
sudo gunicorn --bind :80 --workers 8 --timeout 0 main:app
```

### テスト

promptの画像が hoge.png に保存されます.

```py
import requests
import base64
import json

prompt = """"
Image of a cat in the park.
"""

r = requests.post(
    'http://IP_ADDRESS/create',
    headers = {'Content-Type': 'application/json'},
    data=json.dumps({'prompt': prompt})
)

image_bytes = base64.b64decode(r.json()['b64_json'])
with open('hoge.png', 'wb') as file:
    file.write(image_bytes)

```

# まとめ
- stable-diffusion-XLの実装もv1.5の実装とそう変わらないので結構サクッとできました
- v1.5とXLではcompelの使い方が変わるためそこに少しハマりました
- refinerや最適化の実装はまだできていないので、その辺りも少しずつやっていく必要があります
- v1.5に比べXLでは格段に画像の品質が良くなりました
color-gamutとcolor()関数で色の精度を上げるSCSS

## 導入
CSSのカラースペースは近年進化を遂げており、sRGBからP3やRec.2020など、より広い色域をサポートするようになっています。本記事ではSassを使用して色指定を簡単にする方法を紹介します。

## Mixinの概要
以下に示すmixinは、CSSのcolor()関数に対してRGB値を簡単に設定できるように設計されています。このmixinはRGB値をパーセンテージ形式に変換し、メディアクエリを利用して表示デバイスに合わせた適切な色が表示されるようにしています。

~~~scss:mixin.scss
@mixin set-color($property, $r, $g, $b) {
    $r-percentage: math.div($r, 255);
    $g-percentage: math.div($g, 255);
    $b-percentage: math.div($b, 255);

    #{$property}: rgb($r,$g,$b,);
    #{$property}: color(srgb $r-percentage $g-percentage $b-percentage);

    @media (color-gamut: srgb) {
        #{$property}: color(srgb $r-percentage $g-percentage $b-percentage);
    }
    @media (color-gamut: p3) {
        #{$property}: color(display-p3 $r-percentage $g-percentage $b-percentage);
    }
    @media (color-gamut: rec2020) {
        #{$property}: color(rec2020 $r-percentage $g-percentage $b-percentage);
    }
}
~~~

## 使用例
~~~scss:element.scss
.element {
    @include set-color(background-color, 244, 214, 0);
}
~~~

出力は以下のようになります。

~~~css:element.css

.element {
    color: #f4d600;
    color: color(srgb 0.9568627451 0.8392156863 0);
}

@media(color-gamut: srgb) {
    .element {
        color: color(srgb 0.9568627451 0.8392156863 0)
    }
}

@media(color-gamut: p3) {
    .element {
        color: color(display-p3 0.9568627451 0.8392156863 0)
    }
}

@media(color-gamut: rec2020) {
    .element {
        color: color(rec2020 0.9568627451 0.8392156863 0)
    }
}
~~~

## 最後に
デバイス毎の差異が生まれる点についてはやはり注意が必要ですが、sRGBで留まり続けるべきとは到底思えません。
興味のある方は下記のリンクにあるシミュレータと、MacであればColor Digital Meter、WindowsであればPower Toysのカラーピッカーを使用して、実際に入力した色がどのように出力されているのかシミュレートしてみてください。

## 参考

https://developer.mozilla.org/ja/docs/Web/CSS/@media/color-gamut#rec2020

https://developer.mozilla.org/ja/docs/Web/CSS/color_value/color

https://www.cc.kyoto-su.ac.jp/~shimizu/MAKE_HTML/rgb2.html
Qiita1日目が書く超初心者向けMarkdown

# はじめに
Qiita１日目の超初心者が書く、Qiita記事作成時のMarkdownの基本です。
調べながら追記していく形ですので見にくい個所もありますが、ご容赦ください。
今回ご紹介するのは、
`1.見出し`
`2.文字の装飾`
`3.リスト表示とテーブル表示`
の３つです。

## 1.見出し
HTMLでいうhタグです。
見出しタイトルの前に#をつけることで見出しになります。
>## Title1
>↑`## Title1`と入力
>### Title2
>↑`### Title2`と入力
>#### Title3
>↑`#### Title3`と入力

このように#の数が増えるほど小さな見出しになります。

:::note warn
**_POINT_**
**①#は1～6個まで**
→7個だと見出し判定にならず通常のテキストとして#も表示されます
→5個と6個は見た目の大きさの違いはほぼ感じられませんでした
**②#の後には半角スペースが必要**
「##Title」のように半角スペースなしだと見出し判定になりません
必ず「## Title」このように半角スペースを入れましょう
:::
## 2.文字の装飾
Markdownでは、太字・斜体・下線・取り消し線が使えます。
一つずつ解説していきます。
### ⋙太字
>**太字にしたいテキスト**
>```
>**太字にしたいテキスト**
>```
>このように`**`(アスタリスク2つ)で囲むことで太字になります。
### ⋙斜体
> _italic text_
>```
>_italic text_
>```
>このように`_`(半角アンダースコア)で囲むことで斜体になります。
:::note warn
**_POINT_**
斜体は英数字にしか適用されません。日本語は斜体になりません。
:::
### ⋙下線
>__下線をつけたいテキスト__
>```
>__下線をつけたいテキスト__
>```
>このように`__`(半角アンダースコア2つ)で囲むことで下線がつきます。
>との記事を読みましたが、実際にやってみると太字になっています。
>原因が分かり次第追記いたします。
### ⋙取消線
>~~取消線をつけたいテキスト~~
>```
>~~取消線をつけたいテキスト~~
>```
>このように`~~`(半角チルダ2つ)で囲むことで取消線がつきます。

## 3.リスト表示とテーブル表示
項目をまとめて表示したいときには、リスト表示とテーブル表示が使用可能です。
### ⋙リスト
>- 項目1
>- 項目2
>* 項目3
>* 項目4
>+ 項目5
>+ 項目6
>```
>- 項目1
>- 項目2
>* 項目3
>* 項目4
>+ 項目5
>+ 項目6
>```
>このように`-`(半角ﾊｲﾌﾝ）を頭につけることで自動的にリスト表示になります。

:::note warn
**_POINT_**
**①-の後には半角スペースが必要**
#と同じように、-(半角ﾊｲﾌﾝ)の後に半角スペースが必要なので注意しましょう。
**①`-`(半角ﾊｲﾌﾝ）以外の記号でも**
`+`, `*` でも同様にリスト表示になりますが、混合させると上記のように少し隙間が空いてしまうようです。
:::
### ⋙テーブル
>|左揃えTitle|中央揃えTitle|右揃えTitle|
>|:---|:---:|--:|
>|Text1|Text1|Text1|
>|Text2|Text2|Text2|
>```
>|左揃えTitle|中央揃えTitle|右揃えTitle|   →タイトル行
>|:---|:---:|--:|　　　　　　　　　　　    →aligm設定
>|Text1|Text1|Text1|　　　　　　　　　     →1行目
>|Text2|Text2|Text2|　　　　　　　　　     →2行目
>```
# さいごに
見出し、文字の装飾、リスト表示とテーブル表示についてまとめてみました。
初めての記事作成で慣れておらず時間がかかってしまいましたが、今後は徐々に慣らしていき、技術的な知見はQiitaの記事に残していきたいと思います。
[Colab][Python3]ニューヨークダウ指数の推移を可視化する方法

## 要　旨
Colabを利用してPython3においてニューヨークダウ指数の推移を可視化する方法について記述します。
## 実施要領
必要なライブラリのインストール等
```python3
!pip install japanize_matplotlib
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
```
ニューヨークダウ指数の取得
```python3
from pandas_datareader import data as web
from pandas import Series, DataFrame
import datetime

ny_dow_df = web.DataReader("DJIA", "fred", start=datetime.date(1900, 1, 1))
ny_dow_df = ny_dow_df.dropna()
```
ニューヨークダウ指数の可視化
```python3
plt.figure(figsize=(10, 6))
plt.plot(ny_dow_df.index, ny_dow_df['DJIA'], label='nyダウ株価', color='b')
plt.title('nyダウ株価の推移', fontsize=16)
plt.xlabel('日付', fontsize=12)
plt.ylabel('株価', fontsize=12)
plt.grid(True)
plt.legend()
plt.show()
```
実行例
![](https://ws6.tokyo/others/img/nydow.png)
ニューヨークダウ指数は、最大で過去10年分のデータしか取得できません。
## 結　言
今回は、Colabを利用してPython3においてニューヨークダウ指数の推移を可視化する方法について記述しました。
【React】Webページの背景に動画を流したい！


## はじめに
Reactで404ページを作ってるとき、サイトの背景が寂しかったので動画を流してみようとふと思いました。

## movieフォルダを作成
`src`フォルダ内に`movie`フォルダを作成。その中に表示したい動画を入れる。

## videoタグで読み込む
1番シンプルなのは、`video`タグの中に`source`タグを入れて`src`で表示したい動画を指定するとできるみたい。

```tsx:Page404.tsx
import movie from 'movie/<動画のパス>'

export cosnt Page404 = function page404() {
  <video>
    <source src={movie} type="video/mp4" />
  </video>
}
```

### module not findのエラー
mp4ファイルをインポートすると、module not findのエラーが発生します。
なので、`react-app-env.d.ts`に設定を追加します。
```ts: ./src/react-app-env.d.ts
/// <reference types="react-scripts" />  
declare module '*.mp4' {  
  const src: string  
  export default src  
}
```

###  Failed to resolve import ~~ Does the file existが起こったら
[vite-tsconfig-paths](https://www.npmjs.com/package/vite-tsconfig-paths)を使って`tsconfig.json`にパスエイリアスを設定する。
```
yarn add --dev vite-tsconfig-paths
```
```ts:/vite.config.ts
import tsconfigPaths from 'vite-tsconfig-paths'

export defaultConfig({
  plugins: [react(), tsconfigPaths()] // 追加
})
```
```json:tsconfig.json
{
  "baseUrl": "./src" // 追加
}
```


## 動画再生の設定 
`video`タグで再生の設定を書き込んでいきます。
```tsx: Page404.tsx
<video
  autoPlay // 自動再生 
  loop // 繰り返し再生 
  muted //音声をミュートする
>
</video>

```

## 完成コード
```tsx:Page404.tsx
import { memo } from 'react'  
import background from 'image/YN160326430I9A7076_TP_V.jpg'  
import movie from 'movie/Beach-47073.mp4'  
  
export const Page404 = memo(function page404() {  
  return (  
      <div  
        style={{  
          position: 'fixed',  
          top: 0,  
          right: 0,  
          left: 0,  
          bottom: 0,  
          overflow: 'hidden',  
          height: '100vh',  
          width: '100vw',  
        }}  
      >  
        <video
        . id="video"  
          poster={background}    
          autoPlay  
          loop  
          playsInline  
          muted  
          style={{  
            position: 'absolute',  
            zIndex: -1,  
            objectFit: 'fill',  
            // top:'50%',  
            // left: '50%',
            width: '177.777778vh',  
            height: '56.25vw',  
            minHeight: '100%',  
            minWidth: '100%',  
          }}  
        >  
          <source src={movie} type="video/mp4" />  
        </video>      
        </div> 
    )  
})
```
![movie.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669888/7cfab971-28fd-cd30-689c-eeec7d68fe85.gif)



#### 参考
ありがとうございました。

https://qiita.com/ShortArrow/items/9c43a179a51c6ec32106

https://chaika.hatenablog.com/entry/2022/05/14/083000
[Cloud Translation Basic API(V2)] Javaでテキストを翻訳する

Cloud Translation Basic API V2(Java)を使用して、
テキストを翻訳する方法
についてご紹介します。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Cloud Translation Basic API(V2)] JavaでTranslation Basic APIを使う](https://qiita.com/doran/items/54d2cd5d1767697d95cb)
を参照ください。
:::

|No||目次|
|---|---|---|
|1||[テキストを翻訳](#1-テキストを翻訳)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|


## 1. テキストを翻訳
指定したテキストを翻訳します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
TranslateScopes.CLOUD_TRANSLATION
TranslateScopes.CLOUD_PLATFORM
```
[⧉[Cloud Translation Basic API(V2)] JavaでTranslation Basic APIを使う(2.2 Translateインスタンスを取得)](https://qiita.com/doran/items/54d2cd5d1767697d95cb#22-translateインスタンスを取得)
でスコープを指定してください。

### 1.2. 実行

```java
public static void main(String[] args) throws Exception{
    Translate translate = getTranslate();
    Translate.Translations translations = translate.translations();
    
    List<String> q = new ArrayList<>();
    q.add("翻訳したいテキスト");
    Translate.Translations.List op = translations.list(q, "en");
    
    TranslationsListResponse res = op.execute();
    System.out.print(res);
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//translation.googleapis.com/language/translate/v2
が実行されます。

#### 1.2.2. クエリパラメータ
クエリパラメータはありません。

#### 1.2.3. リクエストボディ
Translate.Translations.Listのsetメソッドにより、リクエストボディを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setFormat|String|テキストの形式<br><br>"html"(HTML)<br>"text"(プレーンテキスト)|
|setSource|String|翻訳するテキストの元の言語|

### 1.3. レスポンスの内容
#### TranslationsListResponse
|メソッド|戻り値|説明|
|---|---|---|
|getTranslations|List\<[TranslationsResource](#translationsresource)\>|言語翻訳の応答のリスト|

#### TranslationsResource
|メソッド|戻り値|説明|
|---|---|---|
|getDetectedSourceLanguage|String|翻訳したテキストの元の言語|
|getTranslatedText|String|翻訳されたテキスト|

<br>
<br>
おしまい。。
Fcitx5をdiscordで使うのに困った話

# 注意
archlinux で wayland を利用
Xorgとは対応が異なるので以下のコマンドでどの環境かを判断してください。
```
echo $XDG_SESSION_TYPE
```

# 問題点
Fcitx5 を使おうとすると文字が出力されない問題が発生しました。
Fcitx5 は言語出力を変更することができるソフトです。

# 原因
環境変数の設定を正しく行えていないのが原因。

# 解決
/etc/environment に以下の内容を加えてください。
```dir:/etc/environment
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
```
再起動をすることで使えるようになります。

# 余談
今回は```./xprofile```などでの環境設定が無効になっていることを発見するのに躓いた。
```./xprofile```に設定をするのは Xorg の環境においての設定方法で戸惑ってしまわないように気をつけてほしい。
店舗の発注手助けくんをLINE botで作成してみた


# 始めに　

私は小売業で製造部門の指導をしています。
世間ではデジタル化が進む中、私の職場にも活かしてみたいと思い、
**プログラミング初心者**の私が取り組んでみました。

# 現状の課題

店舗では以下の課題があります。

・80種類あるうちの10種類の原料は注文に時間がかかるシステムで
在庫を確認し、2週間先に使用する分を事前に計算して注文しなければならない。


・販売した商品の実績をすぐに確認することが出来ない。
⇒事務所まで行き、パソコンで実績を確認...めんどう


⇒実績と予測をLINEで確認出来れば作業の負担を軽減出来る？と思い作成しました。


# 使用したもの


①**LINE　Developers**

②**Make**

③**Google　スプレッドシート**　実績情報を入力したもの

①②はアカウント登録が必要

①はプロバイダー作成し、Messaging API設定をしておきます
Messaging API設定のWebhook URLは後ほど使用します。

![課題用7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763115/d4df243e-0a06-7057-1997-10b16273ff6c.jpeg)




# 作成！！
4/30 修正と追記

**作成イメージ**

LINEで店舗番号と商品を入力⇒実績と次回の発注日を返信

**Makeで作成**

①Makeにログインし、Integration LINEからEdit
+マークまたは右クリックからLINEを選択　Watch Events 

Webhookは事前に作成したものを選択します。

![課題用6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763115/158496ac-f0b6-58fd-63f5-c2507c5b387a.jpeg)

②Google SheetsからSerch Rowsを選択
Connectionで自分のGoogleアカウントに紐づけます。

![課題用8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763115/cf41e75a-ef58-a50b-4db3-787c82d57788.jpeg)

③返信したいシートと行を設定。
![課題用10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763115/fa48c92d-3875-8c7e-3acc-af3a40fa0f67.jpeg)

④+からSend a Reply Messageを作成
スプレッドシートのどこの何を返信するか設定
![課題用11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763115/c618fb5f-afad-8627-9ef9-c3220b09d4ec.jpeg)

⑤LINEに間違った文字を送信した場合に店番が間違っていますと返信させる
+からSend a Reply Messageを作成し、Textに返信項目を入力

![課題用12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763115/d73e0c17-380c-e19c-a84f-6a62cd4f257c.jpeg)

⑥２つのリプライメッセージを分岐させるためにRouterの作成、設定
⇒ここを間違えると返信がバラバラに...
下記写真は番号が合っている場合のルート
![課題用13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763115/b77f6179-dcf1-a172-cc8c-a2fa0e6a6369.jpeg)

番号が間違っている時のルート

![課題用14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763115/5f52756d-59c0-8090-e90e-e6d094bda52b.jpeg)

⑦完成

![課題用1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763115/b80d8a96-ae3d-5485-35ce-92f82df767d5.jpeg)

動画

https://twitter.com/216JLYNEUf3696/status/1782661194173853943



# 苦労したポイント

該当しない番号を入力した際に店番が間違っていますとなぜか出ない....。
⇒どこの数値が間違っていた場合、どう返事するかの条件の設定が間違っていました。

![課題用15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763115/556c7c3e-c456-6627-c1f1-2ff1d97a63e3.jpeg)



# 今後の課題

①本来作成したかった在庫入力⇒予測は
LINEからスプレッドシートのセルに入力する必要があり、ひとまず断念。
１日平均の販売個数を計算して返信できるようにしました。

②リッチメニューの導入
店番や商品を入力するより、画面タッチで入力出来る方が簡単に使える
CloudWatchについて

こんにちは、開発部のCLです。

今回はCloudWatchの概要ついてまとめてみました。
# CloudWatchとは

CloudWatchは、AWS内で動作する各サービス(EC2,RDS,DynamoDBなど)
を監視できるサービスです。

標準メトリクスという情報に分けて収集・確認ができます。
標準メトリクスの例として以下のようなものが挙げられます。

| メトリクス名 | 説明 |
|:-:|:-:|
| CPUUtilization  |  CPU使用率 |
|  DiskReadOps |  ディスク読み取り数 |
|  FreeableMemory |  空きメモリ量 |
|  FreeStorageSpace |  空きディスクスペース量 |
|  NetworkIn |  ネットワーク受信量 |

などなど、多種多様な状況をモニタリングできます

# CloudWatchの特徴


## ①標準メトリクスの収集・可視化
CPU使用率やハードウェア、ネットワークのステータス状況などが
こちら側の設定は不要で標準メトリクスとして収集されます。
収集された値は各サービスのダッシュボードから確認できます。


画面イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3517332/5022a588-e6ea-0bd6-c647-d3acd94596ea.png)


## ②カスタムメトリクスの収集・可視化
標準メトリクスにはない、アプリ独自の値を監視したい場合に設定できます。

PutMetricDataというAPIを使用することで、
・ウェブページのロードに要する時間
・リクエストエラー率
・株価
など任意の値を送信することができます。

## ③ログの収集
CloudWatch Agentをインストールすることで、
EC2やLambdaなどのログを書き出すことができます。

CloudWatch Logsへログを書き出すことで、
障害が発生しても
障害が発生したEC2インスタンスを即時に終了することができ、
CloudWatch Logsに書き出されたログを見て調査することが可能になります。


## ④アラーム
収集した標準メトリクス・カスタムメトリクスの値に対して
アラームを設定することができます。

* EC2のCPU使用率が5分間、70%を上回っている時
* RDSのディスクの空き容量が50GBを下回ったとき
* 500エラーがログに書き込まれたとき
など。

設定したアラームを受け取って、
Auto Scalingを実行したり、メールを送信したりといったアクションが実行できるようになります。






# さいごに
CloudWatchの基礎をまとめてみました。 

はつかぜ株式会社では、IT学習や業務に役立つ情報を定期的にお届けしていきたいと思っています。
システム開発のお問い合わせ・ご相談はこちら 
https://www.hatsukaze.co.jp/inquire/
watsonx.aiの生成AIを使ってIBM i アプリの保守が可能か（ほんの少し）検証してみる ③追加準備とようやくRPG生成

事情でちょっと空いてしまい、昨日TechZoneのwatsonx.ai環境にアクセスしたところ、むー。どうやら4/19前後にアップデートされた模様です。それにしてもいきなりモデル種類が増えています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/69bcdb2f-18ed-45af-88f6-11a67b7d6971.png)

①で使用した、 codellama-34b-instruct-ht もありましたが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/3de22563-b99f-9e26-a28b-fb01abe1b3d7.png)
他にもプログラムコード生成に使えるものがあるかも。


ということで素人のわたくしはこのモデル何？からやり直しです^^;　こちらのページなどに解説がありました。
参考）
https://www.ibm.com/docs/ja/watsonx-as-a-service?topic=solutions-supported-foundation-models
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/6ab9f61d-efc2-3e7a-7466-1c505ca0dda5.png)

## 2024/4/23現在利用可能なモデルを調べる
以下のモデル（など）が利用できそうです。
・Use watsonxand codellama-34b-instruct-hf to generate code based on instruction
・mixtral_8x7b_instruct_v01_q 
・starcoder-15.5b
・codellama-34b-instruct-hf
・Code generation (Pythonのみ)
Code translation　(Python-c++間の変換のみ)

starcoder-15.5b, codellama-34b-instruct-hf　当りをまずは試してみたいと思います。

## watsonx.aiでcodellama-34b-instruct-hf モデルを使ってILE RPGを生成してみる

2つ上の画面でcodellama-34b-instruct-hfを選択してプロンプトでつくるを実行すると下記のような画面が出ます。
***命令オプション***にwatsonx.aiへの命令を入力します。
今回は　
***"IBM i"で動作するILE RPG プログラムのサンプルを生成してください。***
と入力しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/ba88321d-0c92-904c-9ff4-d1799278a794.png)

※余談：ここまでに実は結構試行錯誤しまして。（自分これ系は素人です…）
NG命令文（FF RPGをうまく生成してくれない）の一例を書くと、
***"IBM i"で動作するILE RPG プログラムのサンプルコードを生成してください。***
***"IBM i"で実行するILE RPG プログラムを生成してください。***
等はぜんぜんダメでした・・むー。

一番上の例は成功例なのでそのまま、下記のように生成するプログラムの仕様を記述します、
***"Hello World" をプリントするプログラム***
と入力しますと、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/c6deb3af-b32e-77ff-3ab7-766d85b9a2e6.png)

テケテケテケ・・・
じゃーん、なんかそれっぽいのが出てきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/a24e4b05-6ae6-b319-a884-c8025ec0f160.png)

これをRDi LPEXエディターにコピペしてコンパイルすると・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/d8fc9617-c3c9-f457-cfda-c001a24d244f.png)

***・・・エラーになりました・・・***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/6eab7e47-e164-4041-aed2-71066b208592.png)

答えを言うと生成したコードにはメインプロシージャーの宣言が無くてエラーになってしまったようです。そこで１行下記のように追加しました（3行目）。再コンパイルします。
コンパイルが通りました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/09eb2941-011d-a513-3349-262a807740c6.png)

では実行してみます。5250画面から上記のプログラム HELLO_WAX3 をコール（CALL）します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/96e6af6e-ff01-da24-4bc6-e7194e13ed08.png)

実行できました！

***おしまい***

・・・所感・・・
日本語の世界でただしく解釈してくれる指示文を作るのが大変な印象ですが、ひとまず使い物になるのかもしれません。

次回以降でさらにいろいろ試してみたいと思います。こんなのやったらどないなる？見たいのもいただけましたらトライしてみたいと思います。よろしくお願いいたします。

[つづきはこちら・・④既存RPGコードの修正](https://qiita.com/gomAnomalocaris/items/c2ee63fdfe354b5cc8be)
InfraAcademyでLinuxを学んでみた その2

私はインフラエンジニアを目指している駆け出しエンジニアです。
インフラの勉強をしようと思ったら、このような記事を見つけました。

https://qiita.com/ryu235464345/items/0710a7f77382f67add28

その中で、InfraAcademyという学習サービスがあることを知りました。

https://engineer-ninaritai.com/infraacademy/

備忘録として学習の記録を残します。
1回目はこちらです。

https://qiita.com/mizu9834/items/ed7702313f88a409823b

## ファイルの作成
空のファイルを作成する場合は、touchコマンドを使う
```
touch [ファイル名]
```
file.txtを作成する場合
```
touch file.txt
```

## ファイルの確認
ファイルの確認は、lsコマンドを使う
```
ls
```
lsコマンドは、ディレクトリを指定することもできる
/etcディレクトリ配下を確認する場合のコマンド
```
ls /etc
```

## ファイルの削除
ファイルの削除はrmコマンド
```
rm [ファイル名]
```
file.txtを消す場合
```
rm file.txt
```
## リダイレクト演算子でファイルを作成
“>”大なり記号はリダイレクト演算子と呼ばれ、出力をファイルに書き込むために使われる記号。
```
echo Hello > file.txt
```
すでにファイルがある場合、>(大なり記号)を使用するとファイルの中身が全て上書きされます。
```
echo Hello2 >> file.txt
```

## 感想
引き続き、InfraAcademyでLinuxの勉強をしています。
コツコツ継続しながら、インフラエンジニアを目指していきます！
AWSのマルチアカウント対応で Control Towerを導入


# はじめに

株式会社 fruor でリードエンジニアをしている yanagidate9 です。
AWS のマルチアカウント対応で Control Tower を導入しましたので備忘録も兼ねて書いていきます。

# きっかけ

実は私がこの会社にジョインした時点で単一の AWS アカウント内に本番環境と開発環境が同居している状態でした。この状態では、以下の問題があるため早急にアカウントを環境ごとに分ける必要がありました。

- 開発環境のリソースが本番環境に影響を及ぼす可能性がある。
- セキュリティの観点上、不必要なリソースにアクセスできるのはリスクが高い。
- 支払い情報をアカウントごとに管理することで、コスト管理をしやすくする。
  - ただし、支払い請求書は統合し、クレジットも同一のものを使用したい。

# 対応方針の検討

アカウントを分離する方法としてはスイッチロールを使う方法がまず思い浮かびました（前の会社ではそれだった）。ただし、個人ユーザーを管理するのが面倒なのと、普段あまり利用しないアカウントの情報を忘れてしまうなど問題があり、別の方法がないか調べたり、AWS のサポートに相談したりしました。
そのときサポートの方から提案されたのが AWS Control Tower で、これなら要件を満たすことができ、かつスイッチロールに比べても管理が楽にできそうということで導入することにしました。

AWS Control Tower はマルチアカウント環境の雛形みたいなイメージでこれに則って各アカウントを作成することで、AWS でマルチアカウントを管理することができます。また、IAM Identity Center と連携することで SSO による ID 管理を利用することもできます。

AWS Control Tower には他にもいろいろな機能があるのですが、今回はアカウントの分離と ID 管理を目的としているのでその部分にフォーカスしています。

# AWS Control Tower の構成

構成は以下のようになっています。ルート配下に ① 管理アカウント、②Security OU、③Workloads OU を作成します。また、セキュリティ OU 配下には監査（Audit）、ログアーカイブ（Log Archive）を作成しています。
Workloads OU にはアプリケーションの開発・運用環境ごとのアカウントを作成しています。

今回は既存のアカウントにある支払い設定やクレジットをそのまま利用したいため、管理アカウントは既存のアカウントを使用しています。EC2 や RDS などのリソースは Workloads OU 配下のアカウントに後で移行する方針としました。（これは別の機会に書こうと思います。）

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760785/d6becd90-60af-8e44-78b9-3d29b55d21cc.png">

# AWS Control Tower の有効化

まず事前に各アカウントごとのメールアドレスを用意します。

次に AWS Control Tower を有効化します。気をつけなければいけないのが、AWS Control Tower を有効化したアカウントが管理アカウントになるため、管理用のアカウントを事前に用意しておく必要があります。今回は既存のアカウントを管理用にするため、そのアカウントで AWS Control Tower を有効化します。

有効化では特に複雑な設定とかはないので気長に待ちます。（だいたい 60 分ほどかかります。）有効化できたらワークロードにアカウントを作成していきます。

# AWS IAM Identity Center の設定

マルチアカウントへの SSO を連携するため、AWS IAM Identity Center の設定をします。AWS Control Tower のランディングゾーンを有効化すると、Identity Center もデフォルトで自動で設定されるので今回はそれをそのまま使います。

管理用ユーザーが最初に作成されていますが、作業用に個人ユーザーを作成します。グループや許可セットは必要に応じて付与します。

# AWS アクセスポータルへのサインイン

AWS IAM Identity Center にて設定したユーザーで AWS アクセスポータルにユーザー名とパスワードを入力してサインインします。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760785/001cc0a5-2699-896d-def4-28f7109477cc.png">

サインインするとセッションが切れるまで AWS アクセスポータルから複数の AWS アカウントに画面上からアクセスできるようになります。

スイッチロールのようにアカウント ID やロール名をいれる必要もないのでアカウント切り替えも楽になります。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760785/c221f751-0871-4b3e-2b2b-a474e95b5d6d.png">

# おわりに

AWS Control Tower に移行することで、環境ごとのアカウントの分離と SSO による ID 管理を行うことができるようになりました！今後開発メンバーが増えてもユーザーの管理がしやすくなるので運用が楽になるはずです。

インフラの管理周りはついつい後に回しがちですが、スタートアップでは一気に人が増えることもあるので、早めに対応しておくことが未来への貯金になると思っています。
EC2 や RDS などのリソースの移行についても別途記事に書こうと思います。
Javaをvscodeで使う(macOS)

## 初めに
javaの環境構築をvscodeで行った際に詰まったので、自分用の忘備録として残します。
初学者のため、至らない点も多いかと思います。明らかな誤りがある際にはコメントいただけますと幸いです。

## 環境構築

### 私の環境
- macOS M2
- 2024/04現在最新verのJDK

### 手順

1. JDKのインストーラをダウンロード
1. ダウンロードしたファイルを開いて、インストール
1. システム設定にJavaが表示されているか確認
1. `java -version`でインストールを再度確認
1. vscode拡張機能のExtension Pack for Javaをインストール
1. vscodeを再起動し、先ほどのプラグインを有効化する
1. vscodeを開き、`Hello.java`ファイルを作成
1. クラス名の下に表示されるRunをクリックすると、実行結果がコンソールに表示されます

以下にそれぞれの工程の詳細を記します。

### JDKのインストーラをダウンロード
以下のサイトからダウンロードしてください。

https://www.java.com/ja/download/

### システム設定にJavaが表示されているか確認
インストールまで終わると、システム設定にjavaが追加されます。

![スクリーンショット 2024-04-23 16.01.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918094/3aeef823-d7cb-b5ca-18e3-3b4f0dbce065.png)

### `java -version`でインストールを再度確認
正常にインストールが完了していれば、現在のバージョンなどの情報が表示されます。

![スクリーンショット 2024-04-23 16.02.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918094/98af6e0c-ee3d-26aa-9143-d5119389ba96.png)

### Extension Pack for Javaをインストール
vscodeプラグインのExtension Pack for Javaをインストールしてください。
インストールと有効化が完了したら、エディタの状態を最新化するために再起動してください。

![スクリーンショット 2024-04-23 16.07.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918094/d1be8b76-1c46-e656-940f-955230c144be.png)


### 再度vscodeを開き、`Hello.java`ファイルを作成
適当なファイルを作成し、以下のコードを記載してください。

```
class Hello {
    public static void main(String[] args) {
        String msg = "";
        msg += "Hello ";
        msg += "World!";
        System.out.println(msg);
    }
}

```

### クラス名の下に表示されるRunをクリック
Runをクリックすると、コードが実行されます。

![スクリーンショット 2024-04-23 16.04.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918094/2d75dea7-8156-241e-2970-619227222e61.png)

### 実行結果がコンソールに表示
`Hello World!`がvscodeのコンソールに表示されれば動作確認完了です！お疲れ様でした！

## うまくいかないとき
vscodeの`setting.json`を確認しましょう。

### 設定アイコンをクリック
アイコンをクリックして、さらに設定をクリック

![スクリーンショット 2024-04-23 21.54.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918094/e08cbfaf-cd87-ff34-359c-feab4d95bca6.png)

### java homeで検索

こんな画面が出てくるので、`setting.json`を開く

![スクリーンショット 2024-04-23 21.53.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918094/74d071a8-fb1c-a749-4c63-c6e31048b48c.png)

### `setting.json`の確認

javaが追加されていることを確認してください。
自分は設定が空でも動作しましたが、これでうまくいかない場合は以下サイトを参考にするといいかもしれません。JAVA_HOMEの設定まで記載されています。

![スクリーンショット 2024-04-23 21.53.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918094/5648ecf9-ebb2-9400-59a5-fb53c9f1dc3c.png)

https://www.ukilab.net/macos-java-and-ide-setup/

## 最後に
環境構築の方法が思い出せなくて後悔することが多いので、最近は記録するようにしてます。

### おまけ

エディタでねこちゃん飼い始めました。かわいい。
プラグインでさくっと導入できるので、気になる方はvscode-petsで調べてみてください！

![スクリーンショット 2024-04-23 22.03.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918094/678a43fa-7268-a9da-4c7a-2051f81c5448.png)
AI SDKのstreamTextを用いたOpenAI, Anthropic, Google, Fireworks.ai, Groq, Perplexity, Mistralの統合処理

VercelのAI SDKを使った処理の記事を書いたばかりですが、なんかまた新しいインターフェースが増えているようです。積極的に開発されているライブラリーを使い、かつexperimentalな機能を使うと更新が多くて大変ですが、他の人も苦労していると信じて、別記事として記載します。

https://qiita.com/twk/items/ae7e031db9eabf473592

https://qiita.com/twk/items/ef3d90362048c5cf292f

結論として、タイトルに書いた各ベンダーのモデルについて、こんな感じで呼び出せるようになります。めちゃめちゃシンプルですね。

```typescript
const aiChatModel:LanguageModelV1 = aiChatModelFactory(modelData)
const result = await experimental_streamText({
    model: aiChatModel, 
    messages: messages as ExperimentalMessage[], 
})
return new StreamingTextResponse(result.toAIStream())
```

`MaxTokens`などを指定する場合は`experimental_streamText`の引数に設定します。

https://sdk.vercel.ai/docs/ai-core/settings

ここで、`aiChatModelFactory`は下記のように記述しています。

```typescript
function aiChatModelFactory(model: ChatModel):LanguageModelV1 {
    // key is actually ModelProvider
    const providerMap:{[key:string]:LanguageModelV1} = {
        'openai': openai.chat(model.sdkModelValue),
        'google': google.chat(model.sdkModelValue),
        'fireworksai': fireworks.chat(model.sdkModelValue),
        'groq': groq.chat(model.sdkModelValue),
        'perplexity': perplexity.chat(model.sdkModelValue),
        'anthropic': anthropic.chat(model.sdkModelValue),
        'mistral': mistral.chat(model.sdkModelValue),
    }
    const aiChatModel = providerMap[model.provider as string]
    if (!aiChatModel) {
        console.error('unexpected model', model)
        throw new Error('unexpected request')
    }
    return aiChatModel
}
```

それぞれのモデルは、下記のように定義されています。見ての通り、Fireworks.ai、Groq、PerplexityについてはOpenAIの互換インターフェースを使っています。それぞれ定められた環境変数を設定しておくことで、`openai`、`google`などはショートハンドなオブジェクトを利用することもできますが、ここではすべて明示的に初期化しています。

```typescript
import { createOpenAI } from '@ai-sdk/openai';
import { createMistral } from '@ai-sdk/mistral';
import { createGoogleGenerativeAI } from '@ai-sdk/google';
import { createAnthropic } from '@ai-sdk/anthropic';

const openai = createOpenAI({ 
    apiKey: process.env.OPENAI_API_KEY, 
});
const fireworks = createOpenAI({
    apiKey: process.env.FIREWORKS_API_KEY,
    baseURL: 'https://api.fireworks.ai/inference/v1',
});
const groq = createOpenAI({
    apiKey: process.env.GROQ_API_KEY,
    baseURL: 'https://api.groq.com/openai/v1',
});
const perplexity = createOpenAI({
    apiKey: process.env.PERPLEXITY_API_KEY,
    baseURL: 'https://api.perplexity.ai/',
});
const anthropic = createAnthropic({
    apiKey: process.env.ANTHROPIC_API_KEY,
});
const google = createGoogleGenerativeAI({ 
    apiKey: process.env.GOOGLE_API_KEY,
});
const mistral = createMistral({ 
    apiKey: process.env.MISTRAL_API_KEY,
});
```

ちなみに追加のプロバイダーを定義する方法も用意されています。今書こうとしていますが、ちょっと記述量が多くなりそうな雰囲気です。

https://sdk.vercel.ai/docs/ai-core/custom-provider
C#でPDFをPowerPointに変換するシンプルなコード

一般的に、会議、教育、研修活動では、プレゼンテーションにPowerPointを使用することを好みます。 PDFファイルと比較して、PowerPointファイルは、編集が容易であり、私たちはいつでも要素を追加または削除することができ、聴衆の注意を引き付けるために様々なアニメーション効果を設定することができます。
この記事では、C＃プログラミングを介してPDF to PowerPointに変換する方法を共有します。

## C# PDFからPowerPointへのコンバータ
PDFをPowerPointに変換するために使用した.NETライブラリは、[**Spire.PDF for .NET**](https://www.e-iceblue.com/Introduce/pdf-for-net-introduce.html)（バージョン8.11.10以上）です。始める前に、我々は[Nuget]()経由でそれをインストールしたり、以下のリンクを介してそれをダウンロードすることができます：
https://www.e-iceblue.com/Download/download-pdf-for-net-now.html


## PDFをPPT/PPTXに変換（C#コード）
Spire.Pdfをインストールし、必要な名前空間をインポートした後、PDFファイルをロードし、**PdfDocument.SaveToFile()** メソッドを使用してPPTまたはPPTXフォーマットに変換することができます。PDFをPowerPointに変換するために必要なコードはわずか3行です！
```python
using Spire.Pdf;

namespace PDFtoPowerPoint
{
    class Program
    {
        static void Main(string[] args)
        {
            //PdfDocumentオブジェクトを作成する
            PdfDocument pdf = new PdfDocument();

            //PDF文書を読み込む
            pdf.LoadFromFile("Pre.pdf");

            //PDFをPPTX形式に変換する
            pdf.SaveToFile("PDFtoPowerPoint.pptx", FileFormat.PPTX);
        }
    }
}
```

上記のC#コードを実行した後、PDF内の各ページは、PowerPointプレゼンテーション内の独立したスライドに変換されます。変換が終了した後、あなたはさらにあなたの希望の効果を達成するために生成されたPowerPointファイルを編集し、処理することができます。

**PDFからPowerPointへの出力結果:**
![PDF2PowerPoint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/4bd5ea8c-48ec-aaa3-8ab0-d490c9d091b2.png)

* * *
[PDFからWordへ](https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire.PDF-Program-Guide/Conversion/How-to-convert-PDF-to-Doc-in-C-VB.NET.html)、[PDFからHTMLへ](https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire.PDF-Program-Guide/Conversion/C-Convert-PDF-to-HTML.html)、[PDFから画像へ](https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire.PDF-Program-Guide/Convert-PDF-Page-to-Image-with-C-code.html)、[PDFからExcelへ](https://www.e-iceblue.com/Tutorials/Spire.PDF/Program-Guide/Conversion/Convert-PDF-to-Excel-in-C-VB.NET.html)、その他のフォーマットへの変換のC#コード例をもっと見るにはクリックしてください。
[CSS] stylesheetの指定方法

# まとめ
1. インラインスタイルシート方式
HTMLタグに直接CSSを記述する
1. 内部スタイルシート方式
HTMLのheadタグ内にstyleタグを作成し、CSSを記述する
1. 外部スタイルシート方式（推奨）
CSSファイル（拡張子:.css）を作成し、CSSを記述する
HTMLのheadタグ内にlinkタグを作成し、CSSファイルを参照できるように設定する

# インラインスタイルシート方式
**HTMLタグに直接CSSを記述する**
 ~~~html:テンプレ
<p style="color: red;">今日は<span style="font-size: 25px;">晴</span>です。</p>
 ~~~
color=赤
font-size=25ピクセル

 ~~~html:複数のCSSを記載
<p style="color: red; font-size: 16px; margin-top:5px;">今日は<span style="font-size: 20px;">晴</span>です。</p>
 ~~~
color=赤
font-size=16ピクセル
margin-top=5ピクセル

# 内部スタイルシート方式
**HTMLのheadタグ内にstyleタグを作成し、CSSを記述する**
 ~~~html:テンプレ
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <!-- head内の<style></style>に記述 -->
  <style>
    .container {
      width: 100%;
      height: 100%;
    }
  </style>
</head>
<body>
 
</body>
</html>
 ~~~

 
# 外部スタイルシート方式
**CSSファイル（拡張子:.css）を作成し、CSSを記述する**

 ~~~css:CSSファイル側（例）
@charset "UTF-8";
セレクタ1{
プロパティ1:値;
プロパティ2:値;
...
}
セレクタ2{
　 ...
}
 ~~~

 ~~~css:CSSファイル側
@charset "UTF-8";
h1{
  color:red;
}
h2{
  color:blue;
}
 ~~~


**HTMLのheadタグ内にlinkタグを作成し、CSSファイルを参照できるように設定する**

 ~~~html:htmlファイル側（例）
<link rel="stylesheet" href="CSSファイルの格納場所">
 ~~~
 ~~~html:htmlファイル側
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <!-- head内に読み込む -->
  <link rel="stylesheet" href="style.css">
</head>
<body>
 
</body>
</html>
 ~~~


# 参考リンク
- [CSSの書き方・基本ルールを解説【インライン/内部/外部】](https://webst8.com/blog/css-howto-write/)
- [【HTML】stylesheetの読み込みパターンを徹底解説！(入門者向け)](https://webukatu.com/wordpress/blog/15609/)
テラデータ・ウィジェット

[Teradataml Widgets - テラデータ・ウィジェット](https://docs.teradata.com/r/Teradataml-Widgets/March-2024/Teradataml-Widgets) [2024/04/23時点]の翻訳です。

<iframe width="560" height="315" src="https://www.youtube.com/embed/E1ZQS6pYs2I?si=nqSQmiCLHs0R_qMH" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

:::note information
各機能の詳細な説明に関しては、段階的にリンクを追加していきますので、リンクから詳細ページを参照してご利用下さい。
:::

## テラデータ・ウィジェットとは？(teradatamlwidgetsとは？)
テラデータ・ウィジェットとは、Teradata Vantageの機能を用いたウィジェットを多くのノートブックで実現するものです。これによりTeradata Vantageの高度な分析機能を用いたアプリケーションをノートブックから簡単に利用できるようになります。

#### Jupyter上でテラデータ・ウィジットを利用した例
<img width="900" alt="テラデータ・ウィジェット.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740723/802ea03d-be5d-3725-e283-e65b7b15e10c.png">

#### ターゲットとする利用者
データサイエンティスト
ビジネスアナリスト
市民データサイエンティスト

## テラデータ・ウィジェットの特徴
テラデータ・ウィジェットは、以下の特徴があります。

<img width="900" alt="テラデータ・ウィジェットの特徴.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740723/687f1f5c-b167-11ef-d682-9633077b5205.png">

## テラデータ・ウィジェットの使い方イメージ
テラデータ・ウィジェットは、多くの利用ができいますが、例えばノートブックで以下のような手順にてグラフ表示するなどの方法で利用することできます。
<img width="900" alt="テラデータ・ウィジェットの使い方イメージ.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740723/9a0e0fdb-e7a0-fe2b-a7ab-98b8614d50f2.png">

## おわりに
:::note warn
警告
この本書は[Teradata Vantageドキュメンテーション](https://docs.teradata.com/)よりトピックに必要な情報を抜粋したものです。掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。正確な内容については、原本をご参照下さい。
また、修正が必要な箇所や、ご要望についてはコメントをよろしくお願いします。
:::

#### Teradata Vantageへのお問合せ
[Teradata Vantage へのお問合せ](https://www.teradata.jp/About-Us/Contact)
Salesforce　フロー　特定のバージョンをメタデータで取得

### Salesforceフロー：特定のフローバージョンをメタデータで取得したいときのpackage.xmlの書き方


「フローのAPI名」＋「-」＋「バージョン数」で指定することが可能

例）「Flow_Name」というAPI名のフローのバージョン３を取得したい場合
```xml
<types>
    <members>Flow_Name-3</members>
    <name>Flow</name>
</types>
```

簡単なのに忘れちゃうからメモメモ( ..)φ
NASA ADSのCustom出力を使って科研費報告書のCSVを作成する

# 導入
科研費の報告の季節になりました。最近は科研費の報告で[CSVファイルが使用可能](https://www-shinsei.jsps.go.jp/kaken/docs/2_csv_torikomi.pdf)になり、出版論文の情報を手で入力する手間は軽減されたのですが、より楽にするためにNASA ADSからそのCSVファイルを作る方法を紹介します。

# NASA ADS
宇宙、天文系の研究は[NASA ADS](https://ui.adsabs.harvard.edu/)にまとまっています。
QUICK FIELDで謝辞の欄に科研費の番号がある論文を検索します。書式は以下のような感じです。Hは補助金、Kは基金。
~~~:
ack:"JP??H?????"
~~~
見つかったものの年度をみて報告したいものにチェックをいれ、exportをクリック、 Other formatを選びます。

# Custom format
 Custom formatではチェックがついている論文の情報を好きなフォーマットで出力することができます。
 詳しくは[リンク先](https://ui.adsabs.harvard.edu/help/actions/export)を参照してください。

科研費のCSVの書式はdoi, 著者, 論文名, 論文誌, vol, 年, ページ数, 査読ありか?、国際共著か?, open accessか？となっています。最後の3つは手で入力しないといけませんが、それ以外の項目は以下で出力できます。中にカンマが含まれそうな場合にはダブルクォーテーションで囲み、カンマの前にスペースを入れないことがコツです。
~~~:
%d,"%k","%T","%J","%V",%Y,"%p"
~~~
この出力のテキストをcsvファイルとして保存し、エクセル等で開き、３つの項目, 査読ありか?、国際共著か?, open accessか?をyesなら1、noなら0で記入すれば終了です。
LINE公式アカウントの友だち登録者数をtroccoで取得しBigQueryに保存する

# これはなに

LINE公式アカウントの友だち登録者数は、アカウントの成長度合いを示す重要な指標です。しかし、そのデータを手動で取得し、分析用のデータベースに保存するのは手間がかかります。

そこで本記事では、SaaSのtroccoを使って友だち登録者数を自動的に取得し、BigQueryに保存する方法をご紹介します。

# 事前準備

## trocco®アカウントの作成

trocco®には無料で始められるフリープランがあります。

https://trocco.io/lp/index.html

## LINE Developer Accountの登録

すでにLINEの公式アカウントを運用されていることを前提とします。
LINE Developer Account に登録されていなければ、登録します。

https://developers.line.biz/ja/

Developer登録後、運用されている公式アカウントに対し Messaging API を有効化します。
その後、「チャネルアクセストークン」を取得してください。

https://developers.line.biz/ja/docs/basics/channel-access-token/

# 実装

troccoにログインし、転送設定の新規作成に進みます。

* 転送元：HTTP・HTTPS
* 転送先：BigQuery

を選択します。

## 転送元の設定

今回はこちらのAPIを利用します。

https://developers.line.biz/ja/reference/messaging-api/#get-number-of-followers

troccoの転送元設定画面にて、以下のようにフォームを埋めていきます。

|設定項目名|設定内容|
|---|---|
|URL|https://api.line.me/v2/bot/insight/followers|
|HTTPメソッド|GET|
|入力ファイル形式|JSONPath|
|ルート|$|
|パラメータ|date<br>\\$date\\$|
|HTTPリクエストヘッダ|Authorization<br>Bearer {channel access token}|

`$date` の部分は「カスタム変数」です。
yyyymmdd の日付文字列となるように、以下のように設定します。

![スクリーンショット 2024-04-19 23.19.15_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511608/66d9449f-075b-f1ac-1c03-8c1d50de63c8.png)

ルート/パラメータ/ヘッダ は以下のように設定します。

![スクリーンショット 2024-04-23 14.58.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511608/4af399d6-7cba-baf7-02b2-26a2ee2c4e0b.png)

## 転送先の設定

転送先設定にて、BigQuery側のデータセット、テーブル等を設定していきます。

## プレビュー確認・保存・実行

step2の画面に進むと、取得データのプレビューを確認することができます。

![スクリーンショット 2024-04-23 14.35.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511608/b0ec08f2-12a7-245f-a26d-26513e40b3e3.png)

各項目の説明についてはLINE Developerサイトのリファレンスを参照いただければと思いますが、`targetedReaches` が現在配信対象となっている友だち数、と解釈してよさそうです。

テーブル定義等は自動設定のままで問題ないので、確認・保存と進みます。

保存後の画面で「実行」を選択することで、すぐにデータ転送を実際に動かすことが可能です。
以下のように、実際にBigQueryにデータが入っていることを確認できました。

![スクリーンショット 2024-04-23 15.25.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511608/c4f26f85-73ad-f920-9b84-95f03a9cb354.png)

上記に加え、取得日のデータを転送項目に追加しておくと、時系列分析をする際に便利そうですね。

実際の運用にあたっては、別途troccoの「ワークフロー」機能などから作成したジョブを呼び出していただき、スケジュール実行していただくことで、友だち数の推移を時系列でモニタリングすることが可能となります。

https://documents.trocco.io/docs/ja/about-workflow

# まとめ

以上で、LINE公式アカウントの友だち登録者数をAPIから取得し、データ基盤に蓄積することが可能となります。
プログラミング操作を一切することなく、APIを活用したデータ環境を整備できるため、エンジニアに限らず幅広くデータ活用の可能性が広がるユースケースです。
Unity EditorフォルダとResourcesフォルダについて簡単な説明

EditorフォルダとResourcesフォルダについて知っていると便利なこと一覧


## 場所は関係ない、名前だけ
たとえばAssetsフォルダにEditorフォルダとResourcesフォルダがあるとして

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/8047c9ef-eb57-e376-cf05-8e3f9a432212.png)

別のフォルダの中にもEditorフォルダとResourcesフォルダがある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/b22bfcf1-5f89-97fd-031b-552ac7d603f8.png)


この場合、UnityEditorはすべて同じEditorフォルダとResourcesフォルダとして扱う

イメージとしてはこんな感じ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/992d8115-86af-a109-f988-a7212fadafbf.png)

すべてEditorフォルダとして扱われる。

## Editorフォルダ
Unity自体を使いやすくしたり、機能を追加したりするスクリプトを置いて置く場所。
作っているゲームとは関係がないのでBuild時にはすべて除外される。
除外されるので、間違えてゲームで使ってしまうとBuild時、エラーになる。

例えばこんな感じでEditorを継承しているクラスとか
```
    public class HogeClass : Editor
    {

    }
```
この場合はオプションをちゃんとつけておく
```
    #if UNITY_EDITOR
    public class HogeClass : Editor
    {

    }
    #endif
```

## Resoucesフォルダ
この中のものはUnity上で、自動で読み込まれる。なのでデータとか置いておくとスクリプトから読み込むことができる。

```
        public void Init()
        {

            game_PM = Resources.Load<Game_PM>("Game_PM");


        }
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/43e7c723-f0a7-ecec-3834-311a4d028ff6.png)
【VirtualBox】仮想マシンが起動できないんだが！😠【Linux】

## 本記事のあらすじ
①VirtualBoxでLinux環境を構築したい！
②仮想マシン起動時にエラー発生
③あっさり解決
④原因について調べてみよう
⑤おわりに

## ①VirtualBoxでLinux環境を構築したい！
　Linuxについての知識が消えかけている今日この頃、復習のために環境を構築しようと思い立ちました。早速、インターネットの力を借りて試みます。
(Udemy講座の「はじめてのLinuxサーバー構築運用入門 - Linuxコマンドを基礎から学ぶ」も視聴したのですが、そちらはAWS EC2を用いる方法で、私はVirtualBoxを使いたかったため無視しました。)

　今回ダウンロードしたもの
　・VirtualBox
　・CentOS( CentOS-7-x86_64-DVD-2009.iso )

参照した記事はコチラ(手順はそのままなので割愛します。)

https://workteria.forward-soft.co.jp/blog/detail/10260

## ②仮想マシン起動時にエラー発生
　ファイルをダウンロード、順調に仮想マシンの設定までいきますが、何度起動しても重大なエラーが発生しました。
 
　メモリを確認したり、ファイルの配置を変えたり、設定値をいじったりしてみますが、毎回この表示に阻まれてしまうのです。
![Image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518925/521c9021-4a0b-655e-24cc-f6aa1424eb16.jpeg)
(わけがわからなくなって、なぜか直撮り。)

　結局その日は解決できず。同じエラーが出ている人から解決法を探していると、1つの記事を発見しました。

## ③あっさり解決
　結論、その記事のおかげで問題はすぐに解決しました。

今回参照したのは以下のサイトです。

 https://pcvogel.sarakura.net/2021/02/07/32115

　どうやらWindowsにて「Hyper-V」がオンになっていたことが原因で、そちらをコマンドプロンプトでオフにすると仮想マシンは問題なく起動するようになりました。


　そんな簡単に解決するとは……。ところで、「Hyper-V」とは何だったのでしょう？

## ④原因について調べてみよう
　無知な私は「Hyper-V」について調べてみます。再びUdemy講座の視聴を試みますが、海外講師しかいなかったので途中でネット検索に切り替えました。(リスニングの勉強にはなりそうです。)

　なるほど。「Hyper-V」とは、Microsoftが開発・提供している仮想化ソフトウェアで、Windowsのサーバー上で複数の仮想マシンを動かせるようにしてくれるものだったのですね。

　こちらがオンになっていると、他の仮想化ソフトウェアは邪魔されて作動しない、といったところでしょうか……？


>※1：CPUには「仮想化を支援しまっせー」な機能が付いているらしいんだけど（IntelCPUにはVT-X、AMDのCPUにはAMD-Vという名前の機能がそれぞれついてる）、Hyper-Vを動かすにはこの機能が必須で、Hyper-Vを動かすとVT-Xなどを専有してしまう。そして、VirtualBoxなどの仮想化ソフトもまたVT-Xなどを必要とするので、結果的に仮想化ソフトが動かなくなるっぽい。

(下記の記事より引用。)

https://penpen-dev.com/blog/virtual-machine-windows/

## ⑤おわりに
　まだまだインフラ全体への理解が浅いなと感じています。仮想マシンが起動しない問題は解消されましたが、そもそもの知見をもっと広げていきたいです。
 
 　有識者の方、補足等あればぜひよろしくお願いいたします。
Ubuntu22.04にtexliveをapt installする際にPregenerating ConTeXt MarkIV format. This may take some time...で停止する不具合を回避する方法

## 解決策

停止したところでキーボードのEnter(Return)キーを連打（長押し）すると通る。
```bash
Running mtxrun --generate. This may take some time... done. 
Pregenerating ConTeXt MarkIV format. This may take some time...
# ここでEnterキーを連打



done.
```
想定している1.5倍ぐらい連打した。

参考：https://askubuntu.com/questions/956006/pregenerating-context-markiv-format-this-may-take-some-time-takes-forever

※aptではなく、公式サイトからインストーラを拾うと不具合が出ないらしい（未確認）


## 環境
Ubuntu22.04

## 発生した状況
```bash
sudo apt-get texlive-full
```
を実行時、
```bash
...
Running mtxrun --generate. This may take some time... done. 
Pregenerating ConTeXt MarkIV format. This may take some time... # ココで停止
```
ここで停止してしまい、インストールが終わらなかった。

## 原因
`context`のインストール時にエラーが出ているっぽい。

## Tips
### 再度`apt install`しようとするとエラーになる場合
`sudo dpkg --configure -a`を実行せよと言われていると思うので、言われた通りに実行する。
これは、パッケージのインストールを再開し、パッケージマネージャーの整合性を取り戻すためのコマンド（らしい）
実行すると、再び
```bash
...
Running mtxrun --generate. This may take some time... done. 
Pregenerating ConTeXt MarkIV format. This may take some time... # ココで停止
```
となると思うので、解決策（Enter連打）を実行する。

### 上記実行時にロックされていると表示される場合
```
Wainting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by ...
```
のような表示が出ているのであれば、おそらく以前の`apt install`プロセスが動き続けているので、
別のターミナルを起動し、
```bash
ps aux | grep texlive
```
を使ってプロセスID（上記の場合は一番左側の数字）を特定し、
```bash
kill <p-id> # <p-id>を特定したものに置き換える
```
として、対象のプロセスをkillするとよい。
javascript の問題を出してみる part1 @uni928

今回は javascript の問題を出してみようと思います。

恐らく知っておいた方が良い挙動に関して
問題形式で出題します。

対戦よろしくお願いします。

***

問題1: 次のコードは何が出力されるでしょう？

```js:javascript
let array1 = [1, 2, 3];
let array2 = [4, 5, 6];

let str = "";

for(let i in array1) {
    for(let i in array2) {
        str += "" + i;
    }
}

console.log(str);
```

回答1: エラーになる
回答2: 012012012
回答3: 123123123
回答4: 456456456

正解はこちら: [https://wandbox.org/permlink/gr1Gy9FQID4nJFyA](https://wandbox.org/permlink/gr1Gy9FQID4nJFyA)

***

問題2: 次のコードは overflow... が出力されるでしょうか？

```js:javascript
let targetNumber = 2;
for(let i = 0; i < 1000; i++) {
    targetNumber *= targetNumber;
    if(targetNumber < 0) {
        console.log("overflow...");
        break;
    }
}

console.log("end");
```

回答1: overflow... が出力される
回答2: overflow... が出力されない

正解はこちら: [https://wandbox.org/permlink/vhBSSeHn60TBQL2e](https://wandbox.org/permlink/vhBSSeHn60TBQL2e)

***

以上 javascript の問題を出してみました。

問題1 は同じブロック内で
let i を 2 回宣言できるパターンを知っておくと
**変数ミスはしていないだろう**という
誤った判断を下さないで済むかもしれないため
出題しました。

また[私の過去の記事](https://qiita.com/uni928/items/2cc50c270b0735ad5ac4)で誤った知識を
植え付けてしまった事が私にあるため
この記事で微量でも挽回できれば
嬉しいという願望もあります。

問題 2 は巨大数の存在を知っておくと
プログラミングの途中で存在に気付いて
無駄な書き換え作業を抑えるきっかけになると思い
出題しました。

これらの知識が無い事で
無駄な作業を増やす事が減ると
私も嬉しいです。

閲覧ありがとうございました。