OmniAICreator/Qiita-1.07M huggingface dataset:
CSSの@propertyルールを使ったカスタムプロパティの制御

CSSのカスタムプロパティ（CSS変数）は非常に便利で、定義することでプロジェクト全体で値を共通化することができます。
しかし、デフォルトではanimationやtransitionを適用できません。
ここで登場するのが@propertyです。

## @propertyとは？
`@property`は、カスタムプロパティの型、初期値、継承を定義するために使用されます。
以下にその基本的な構文を示します：
```css
@property --propertyName {
  syntax: '<type>';
  initial-value: <value>;
  inherits: false | true;
}
```
- syntax：カスタムプロパティの型を定義します。
- initial-value：カスタムプロパティの初期値を定義します。
- inherits：カスタムプロパティが子要素に継承されるかどうかを定義します。

## @propertyの効果

### 1. 型安全性の強化
`@property`を使用すると、特定のカスタムプロパティが期待する値の型を明示的に定義することができます。
これにより、デバッグを容易にしコードの読みやすさを向上させます。

### 2. アニメーションとトランジションの制御
カスタムプロパティ（CSS変数）はデフォルトではanimationやtransitionの対象にならないため、
これらのエフェクトをカスタムプロパティに適用するには@propertyを使用してその型を明示的に指定する必要があります。

例えば、以下のように設定することができます：
```css
@property --gradient-angle {
  syntax: '<angle>';
  initial-value: 0deg;
  inherits: false;
}

div {
  --gradient-angle: 0deg;
  background: linear-gradient(var(--gradient-angle), red, blue);
  transition: --gradient-angle 2s;
}

div:hover {
  --gradient-angle: 90deg;
}
```

### 3. 初期値の定義
カスタムプロパティの初期値を明示的に定義することで、プロパティがどのような値を持つべきか、またそのプロパティが未定義の場合に何が起こるべきかを明示的に指定できます。

### 4. 継承の制御
inheritsプロパティを使用することで、カスタムプロパティが子要素に継承されるかどうかを明示的に制御できます。
これは、特定のプロパティを特定の要素のスコープ内に制限する場合や、プロパティが不必要にページ全体に広がるのを防ぐ場合に有用です。

## 結論
CSSの@propertyは、カスタムプロパティの挙動をより詳細に制御し、コードの予測可能性と可読性を向上させる強力なツールです。型安全性の強化、animationとtransitionの制御、初期値の定義、そして継承の制御といった多くの利点を提供します。

これらの概念を理解し、活用することでより効率的なCSSを書くことができるようになります。
【Unity】StandardシェーダーのCutoutレンダリングモードのバグ？

先日作成したゲームをビルドしてexeを出力して起動してみたところ、何やらオブジェクトの様子がおかしい。
Untiyエディタ上でデバッグした際には問題無かったので意味不明だったが、ググってみたところ何やらUnityのバグ臭い…
下記URLはUnity公式コミュニティの関連スレッド
https://forum.unity.com/threads/standard-cutout-shader-working-in-editor-not-in-build.1223088/

# どういった問題が起きた？
板ポリ（Panel）に木の画像を張り付けたオブジェクトを作成した。
マテリアルの設定としては、不要部分を透過処理したかったのでレンダリングモードをCutoutに設定した程度。
![unity_shader_cutout01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390733/521ef2cb-9bf9-8d7e-9459-1c392ef26f69.png)

エディタ上で実行する分には、上記画像のようにSceneウィンドウと同じく透過された状態で、問題無く表示される。

が、ビルドして出力したexeを起動すると、イメージとしては下記の画像のような、レンダリングモードをOpaqueにした状態と同じような感じで表示されてしまう。
![unity_shader_cutout02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390733/605dc89b-e7e3-6569-310b-e4611ad91eea.png)


# 解決策は？
コミュニティのスレッドを最後まで見た感じ、バージョンを2021.3.19f1にすることで解決できるらしい。
というより、下記の公式ページで本件が修正済みとなっているUnityのバージョンが確認できるので、そのバージョンに更新することが根本解決になるのかな？
https://issuetracker.unity3d.com/issues/standard-shader-with-cutout-mode-doesnt-work-in-the-player-when-shader-graph-is-installed-with-built-in-render-pipeline
（私が使用しているバージョンは2022.1.22f1なので、運が悪かったっぽい）

# 回避策は？
バージョン変更とかいろいろ問題や懸念があってできねぇよって場合の回避策として、レンダリングモードをCutoutではなくFadeを使うようにするという提案も出ていたし、私はそちらの方法で回避した。
小さいゲームならそれで問題無いけど、大規模なゲームだとFadeはCutoutよりは重い処理だそうなので、パフォーマンスへの影響を考えた方が良いかもしれない。（誤差の範囲かもしれないが）

シェーダーグラフが何か悪さをしているらしく、「シェーダーグラフを削除したら問題が解決した」という投稿もあるので、プロジェクトを破壊する覚悟がある人はシェーダーグラフを削除するのもありかもしれない。
まあそれはどうなろうとも自己責任で、ね…。
DENOISING DIFFUSION IMPLICIT MODELSの個人的理解用メモ

# 論文情報
[DENOISING DIFFUSION IMPLICIT MODELS, Jiaming Songら, 2020](https://arxiv.org/abs/2010.02502)

# 論文の立ち位置
- [DDPM](https://qiita.com/ma_si_/items/5fcb0fc7ed6604e025c1)に変更を加えて、より実用的にした。
- [Improved Denoising Diffusion Probabilistic Models](https://qiita.com/ma_si_/items/7e635d13efd1060391b3)中でも本論分と比較されている。

# 簡単な説明
- デノイズ時に、$x_0$を介在させるようにした→$x_0$基準で考えるので、連続的に全部のdiffusion stepステップでやる必要がなくなる。
- デノイズからのサンプリングの時に、ノイズを入れるのをやめてみた。→$x_T$のノイズで決定的に$x_0$月くれれる→$x_0$たちで補間などもできる。

# その他
内容に問題がある場合も責任は持てません。
コメントをいただければ修正します。
AWS Summit Tokyo 2023 参加レポ

## AWS Summit Tokyo 2023
AWSの年に一度の大規模イベントであるAWS Summit Tokyo 2023に参加してきましたので、忘れないうちに感想を記載します。

私がクラウドにメインで関わるようになったのは2019年冬からなので、AWSのオンサイトでのイベントは初めてとなります。
(コロナ禍でオンライン開催が続いており、AWS Summitをオンサイトで開催すること自体4年ぶりのとこと！)

そもそも大規模イベントに参加したのが2019年のRedHadセミナーぐらいなので、大規模なサミットは久しぶりでした。

## 事前準備したこと
1\. 参加登録
　　メールでお知らせが届いたので、そこから登録

2\. 業務の調整
　AWS Summitは2日間ですが、フル参加できるのか？といった調整が必須
　私は今回、AWS Summit期間中に参加必須の会議があったので、近くの**シェアオフィス**を借りました
　個室は早めに埋まってしまうので、**できるだけ早めに予約**を取りましょう！！

3\. 興味があるセッションの予約
　※直前に予約しようとする高確率で**満席**となっているので注意が必要です
　　当日席もあったりするので、もしどうしても聴きたいセッションがある場合にはそちらも検討かと

4\. 当日スケジュールをざっくり決める
　セッション参加する時間、ブースを周る時間、自社業務をする時間といったスケジュールをざっくり立てておきました。

## 当日の流れ
業務都合で2日目のみ参加。

クッションとお弁当目当てで早めに入場しました。
無事ゲット！

基調講演を聞いて、予約していたセッションを聞きつつ、ブースを回りました。
途中シェアオフィスに移動して会議参加&ご飯休憩。

目当てのブースやセッションも見て、帰宅しました。

## 感想
参加できた時間は短かったのですが、基調講演も聞けてブースもしっかり回れたので満足でした。
（クッション大活躍でした）

現地で感じたのは、**AI**と**IoT**の技術に関連するセッションやブースが多いということでした。
また、上記に加えて**セキュリティ関連**のブースもかなり人が多く集まっていた印象でした。
「**今流行っている技術が何なのか**」「**なにが多くの人に求められているのか**」が肌で感じ取れるのも、オンサイトなイベントの良いところだなと思いました。

オンライン開催ではセッションを後から聞くことができたり、移動しなくて良いというメリットもありますが、
ブースで直接会話することが出来たり、元々目星をつけていなかったブースで発見があったりとオンサイトならではの良さがたくさんありました。
特に、他の企業の方から話を聞くことでいろいろな技術や事例紹介を通じて熱量を感じたことで、**自分への活力**にもなりました。
最近、新しい技術に関する興味など薄れつつあったのですが、初心に帰って頑張ろうという気持ちになりました。

短時間でしたが参加してとても良かったです！来年度以降も欠かさず参加していきたいです。
MeCabとHandicを使ったWordCloudのハングル対応について

# はじめに
表題の通りです。今後使うことがあるかどうかもわかりませんが、備忘録を残しておきます。

# 必要なもの

## Python環境
基本的に普通のWindows10とPython環境があれば対応可能。
※私はJupyter notebookすら使ってないです

## MeCab
ググると出てくるので、サクっと取ってきてインストール。（詳細略）
https://taku910.github.io/mecab/

## WordCloud
WordCloud自体は
```
pip install wordcloud
```
で簡単にインストールできるが、 使おうとすると

```
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
```
とエラーを吐かれてしまうので注意が必要。

https://visualstudio.microsoft.com/visual-cpp-build-tools/
ここから「Visual Studio Build Tools 2022」をインストール

## Handic
以下からコンパイル済みのもの（binの方）をダウンロード
https://ja.osdn.net/projects/handic/releases/
解凍後はフォルダを任意の場所に置けばよいが、利用時の `MeCab.Tagger` の引数が変わるので注意

## ハングルのフォント
PCに入っているもので良い。このPCに入っていたのはMalgun
C:\Windows\Fonts\Malgun Gothic
出力時にソースコードでハングルフォントを指定しないと文字化けするので注意

## ハングルが書かれたテキストファイル
ハングルをコピペして「UTF-8」で保存
例：以下の①풍경(SCENERY)を題材にする
https://joah-girls.com/articles/tX8dU
ソースコードで読み出す側でも「UTF-8で読む」を明示しないと駄目なので注意

# 使い方
## HanDicの呼び出し方
ソースコード上では -dオプションで呼び出す
```
# ソースコードと同じフォルダにHanDicフォルダを置いた場合
Tag = MeCab.Tagger("-d handic-mecab-20230109_bin")
# 絶対パスでも指定可能
# C:\Users\xxx\Desktop\_my_python\handic-mecab-20230109_bin の場合
# ドライブまたぐとややこしいかも
Tag = MeCab.Tagger("-d /Users/xxx/Desktop/_my_python/handic-mecab-20230109_bin")
```

## その他のポイント
`parseToNode`した後、ハングルのword_typeは「Symbol」になっているようです。

# おわりに

画像の出力は実行されました。
とりあえず、wordcloudができるのであれば、ハングルでもなんとか扱えそうです。
ただ、一番の問題は、私はハングルが全くわからないので、出力された画像の内容が妥当なものなのかが全くわからないことなんですよね…

（おわり）
VSCodeでジャンプできなかった件

Laravelをメインにアプリを作っています。
ちょっと最近の困った話を書いていきます。

開発の時にスーパーお世話になっている **「VSCode」**
開発をやりやすいように、拡張機能で色々とカスタマイズできるのが良いところです。

が、しかし！
今回はこの拡張機能で思った通りの動きが出来なくなりました。
その機能は、開発者なら一度は絶対に使ったことがある機能「ジャンプ」です！

PHPに限らず、どの言語でもメソッドのジャンプは使います。
ジャンプ、便利ですよねー。
そのジャンプ機能が正常動作しなくなりました（汗）
ジャンプできないだけで、結構苦しみます。
都度、検索しなくちゃいけないので面倒ですよね、、（さらに他のControllerで同じ名前でメソッド作ってたとか結構ありますからね、、）

**PHPの場合だと、「PHP Intelephense」という拡張機能です。**
これがホントに便利なんですよ！
慣れてしまっているから、自然とジャンプしてしまうし、できないと違和感がすごかったですw

一時的かもしれないですが、一応解決策を見つけました。
**その方法はバージョンの変更です。**

VSCodeの拡張機能を設定するところで、バージョンを切り替えることができます。
そこで一つ前のバージョンに戻します。
おそらく、VSCodeのバージョンと、拡張機能のバージョンがミスマッチしていて、ジャンプ機能が上手く動作しなかったのかなーと疑っています。
（もしかすると、Windowsのバージョンも見ていたかもしれないですねー）

バージョンの互換性があったりなかったりするので、このあたりは臨機応変に対応したいですね。
幸い、バージョンを変えたという記憶がある時に気付いたので、発見が早かったです。もう少し後だったら、全然気付かなかったと思います...（笑）

「あれ？動作しないぞ？」と思ったら、同じようにバージョンをいじってみるといいかもしれないですね。
AWS CLF 合格体験記

## この記事で書くこと

- CLF 勉強開始時のAWS経験について
- 総勉強時間
- 勉強方法
- 最後に

## CLF 勉強開始時のAWS経験について

業務でAWSに触れることが少なく、マニュアル化されている、CloudFormationスタックを利用したSSLの更新といった簡単なタスクのみ対応したことがある程度で、ほとんど知識がない状態でCLF認定を目指しました。

## 勉強方法

参考書による基礎知識の保管→問題集の周回を行いました。

### 参考書：[AWS認定資格試験テキスト AWS認定 クラウドプラクティショナー](https://www.amazon.co.jp/dp/4797397403?tag=maftracking486814-22&linkCode=ure&creative=6339)

試験対策中に２周しました。サービスの名称と概要を抑えるのが目的です。
自分の場合は１週目はサービスの名称を覚えるのに精いっぱいで概要を抑えるために２周目に取り組みました。

### 問題集：[【2023年版】この問題だけで合格可能！AWS 認定クラウドプラクティショナー 模擬試験問題集（6回分390問）](https://www.udemy.com/course/aws-4260/?utm_source=aff-campaign&LSNPUBID=eEUw/SrdBYw&utm_medium=udemyads&ranMID=47984&ranSiteID=eEUw_SrdBYw-dil45FdRvqN0sJRU6SOnkw)
１回～４回までを３週ずつしています。周回毎に目的をもって解きました。
１周目：参考書で覚えた知識でどこまで通用するか確認＆問題の意味をつかむ
２周目：苦手な分野の把握。1周目と同じ部分を間違えた場合に解説を読んで理解に努めました。
３周目：なるべく正答率を意識して回答します。正答率が8割程度を超えていれば受験してOKだと思います。

## 総勉強時間
合計30時間程度でした。
参考書が8時間程度で残りは問題集です。

## 最後に
AWS認定の基礎という立ち位置の試験なのでサービスの概要をつかんでしまえば難なく合格できるかと思います。AWS初心者だったため問題集の２周目までは正答率が60％程度で気持ち的にもきつかったですが、概要をおさえてしまえば、、、という感じです。

少しでもこれから受験する方の助けになればと思います。頑張ってください！
【画像整理】グレースケールのような彩度の低い画像を一括で整理するPythonスクリプト

# 動機
画像生成してたら画像が死ぬほど大量に出来てしまったので、
せめて真っ黒画像や白黒画像のようなものは一括で削除したいと思い、自動で分別してくれるコードを作りました。

## 使い方
以下のコードをコピーして、その新規ファイルを「move_low_saturation_images.py」として保存。
例えばパスが 
\○○○○\stable-diffusion-webui\outputs\txt2img-images\なんとか\ほにゃらら.png 
の画像ファイルに対してフォルダ分けしたい場合、
\○○○○\stable-diffusion-webui\outputs\txt2img-images\ 
の直下に move_low_saturation_images.py を配置して、ダブルクリックして実行してください。
ライブラリが無いと言われた場合は、別途
```bash
pip install opencv-python numpy
```
等としてパッケージをインストールしてください。
WindowsだったらコマンドプロンプトかPowerShellで
```bat
python -m pip install opencv-python numpy
```
と入れればインストールできると思います。

こうすることで、彩度の低い画像が
\○○○○\stable-diffusion-webui\outputs\txt2img-images\なんとか\low_saturation_images\
のフォルダに自動で整理されます。

```Python:move_low_saturation_images.py
import cv2
import numpy as np
import os
import shutil

# 画像の彩度が低いかどうかを判定する関数
def is_low_saturation(image: np.ndarray, threshold: int = 20) -> bool:
    # 画像をBGRからHSVに変換
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    # 画像の彩度の平均値を計算
    mean_saturation = np.mean(hsv[:, :, 1])
    # 平均彩度が閾値未満の場合、Trueを返す
    return mean_saturation < threshold

# サブフォルダを作成する関数
def create_subfolder(folder_path: str, subfolder_name: str) -> str:
    # サブフォルダのパスを作成
    subfolder_path = os.path.join(folder_path, subfolder_name)
    # サブフォルダが存在しない場合、作成
    if not os.path.exists(subfolder_path):
        os.makedirs(subfolder_path)
    return subfolder_path

# カレントディレクトリおよび子ディレクトリ内の彩度が低い画像をサブフォルダに移動する関数
def move_low_saturation_images(current_dir: str, subfolder_name: str, threshold: int = 20) -> None:
    # カレントディレクトリとそのすべての子ディレクトリを再帰的に探索
    for root, dirs, files in os.walk(current_dir):
        # フォルダ名が"low_saturation_images"でない場合のみ処理を実行
        if subfolder_name not in root:
            print(root)
            for file_name in files:
                # PNGファイルのみ処理
                if file_name.endswith(".png"):
                    # 画像のファイルパスを取得
                    file_path = os.path.join(root, file_name)
                    # 画像を読み込み
                    image = cv2.imread(file_path)
                    # 画像の彩度が低いか判定
                    if is_low_saturation(image, threshold):
                        # サブフォルダを作成し、そのパスを取得
                        dest_folder = create_subfolder(root, subfolder_name)
                        # 彩度が低い画像をサブフォルダに移動
                        shutil.move(file_path, os.path.join(dest_folder, file_name))

# カレントディレクトリを取得
current_dir = os.getcwd()
# サブフォルダ名を設定
subfolder_name = "low_saturation_images"
# 閾値を設定
threshold = 20

# 彩度が低い画像をサブフォルダに移動する関数を実行
move_low_saturation_images(current_dir, subfolder_name, threshold)

```

## 調整方法・注意
下から4行目の "threshold = 20"の部分の数字を 10～30程度で変動させればフォルダ分け範囲を設定できます。

ただ、髪の毛・服・背景などが白黒などの単調な色だった場合や、日陰の場面の場合には、彩度低めと判定されてしまうことがあります。なので、一つ一つ目視で画像チェックしてから削除するのをオススメします。

## 余談
このコードは2023年4月時点のGhatGPTのGPT-4モデルに書いてもらいました。やっぱChatGPTすげえや。
AWS Certified Solutions Architect - Professional(SAP-C02)　合格記

## はじめに
表題の通り、2023年3月にSAP-C02に合格しました。
勉強方法に何をどこまですべきなのか、悩んだのでどなたかの参考になれば。
受験前に私も、合格記を検索しようとするとＳＡＰ製品の方の認定記事がヒットしやすく、とても困ったのですがあるあるですかね・・・もっといい略称があれば良いのですが。

## 試験結果
793/1000（750点以上で合格）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/622194/e320dff5-aa3c-ab5a-4c14-4ca8e040c618.png)
全ての分野で、コンピテンシーを満たしている（十分な知識を有している）、という結果になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/622194/4245bc39-4dfd-05bc-c3eb-0677566cedc6.png)

## 私の前提
社内SE歴4年目の20代後半。
2020年5月にSAAを取得済。（これは1回落ちて2回目でぎりぎり合格しました。。）
AWSは業務で使用しており、以下サービスについては平均的な理解はある。
・IAM、Organizations、EC2、RDS、Redshift、Glue、S3

## 受験理由
ソリューションアーキテクトアソシエイトの期限が切れる予告メールがAWSから来たため。
合わせて３年間前と比較した現在の実力を確認したかった。


学習時間
2023.2 11時間13分
2023.3 3時間31分

合計:14時間44分

前回のSAAは60時間近く勉強しましたが、受験料リトライ無料キャンペーンをやっていたため、実力を見る意図もありあまりがっつり勉強はしていません。が、週末にがっつり時間を取って確認するのではなく、毎日少しずつでも問題にふれるようにしました。

## 使用教材
**[クラウド学習サービスTechStock](https://techstock.jp/)**
問題を#1~30、#60~72を1周。
誤った問題は再度解いて100％に。
試験まで日がない場合、問題が新しいため後ろから解いていった方が良いかもしれません。

**AWS公式模擬試験**
前夜に解いて55％の正答率でしたが、やや問題に偏りがあったように思います。
たとえ合格ラインに届いてなくとも気落ちする必要はないかと。
（勿論、達しているに越したことはないですが・・・）
試験の雰囲気をつかむ意味でも、受けていてよかったと思っています。

**[AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル](https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-%E5%95%8F%E9%A1%8C%E9%9B%86-AWS%E8%AA%8D%E5%AE%9A%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88-%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB-%E5%B1%B1%E4%B8%8B%E5%85%89%E6%B4%8B/dp/4815609063)**
分からないサービスの概要をつかむために使用しました。
根本的な考え方にも触れられており、SAP-C01の頃出版されたものとはいえまだまだ現役で使用できるかと思います。ただ、問題は使用しませんでした。


**AWS公式ドキュメント　（ホワイトペーパー等）**
使用していないサービスへの理解が薄いと思ったため、以下サイトは一通り確認しました。
・DynamoDB
・ElastiCache
・Kinesisシリーズ
・CloudFormation


~~**勉強時点で諦めていたサービス類**~~
・IoT
・機械学習
・ブロックチェーン
いずれも業務で使用しておらず、今後も触ることがないであろうことから見送り。


## 感想
時間が足りなくなることを心配していたものの、全てが長文ではなくSAA受験の際の文章量の問題も存在したため、15分ほど余裕をもって時間内に終えることができました。
ただその余った時間にフラグを付けた問題を見直そうにも、分からない問題は、2択で迷うような問題というよりもそのサービスについて全く分からない問題でした。
合格自体は自信に繋がったものの、実際この仕掛けを実装するにはどういった選択肢、どういった実装方法があるんだっけ？となった場合に自分の中で答えを出せる指針をもっておけるようにより様々なAWSサービスに精通していきたいものです。次は、秋口あたりにDevOps Engineer - Professional に挑戦します！
OpenAI CEOが語った13の成功への考え方

https://blog.samaltman.com/how-to-be-successful

この記事はOpenAI CEOのサム・アルトマンが4年前にブログに書いた「<a href="https://blog.samaltman.com/how-to-be-successful"><span>How To Be Successful </span>（成功するための方法）</a>」をわかりやすく日本語にしたものです。<span>正確な日付は不明ですが、2019年であり、現在のGPT-4よりも2世代前のGPT-2がリリースされた年です。</span>

以下が簡単なサム・アルトマンの年表です。
<ul>
 	<li>2005年（19歳）
<ul>
 	<li>Loopt社起業　3000万ドル以上調達、4340万ドルで買収</li>
</ul>
</li>
 	<li>2014年
<ul>
 	<li>2月　Yコンビネータ 代表就任</li>
</ul>
</li>
 	<li> 2018年（33歳）
<ul>
 	<li>2月　　　イーロン・マスクがOpenAIから離れ、役員を辞任<sup id="cite_ref-wsj2023_7-0" class="reference"></sup></li>
 	<li><span>6月11日　GPT（Generative Pre-trained Transformer）を発表</span></li>
</ul>
</li>
 	<li>2019年（34歳）
<ul>
 	<li><span>2月14日　GPT-2を発表</span></li>
 	<li>3月11日　営利部門のOpenAI LPを設立</li>
 	<li>5月　　　YコンビネータはアルトマンがOpenAIにより注力できるように会長職に移行</li>
 	<li>7月23日　マイクロソフトがOpenAI LPに出資</li>
</ul>
</li>
</ul>
となっており、当時も既に十分成功していましたが、現在とは違う状況で書いたことが想像されます。

本記事は、ビジネスに携わる方々にとって参考になる内容が多く含まれています。以下から、成功するためのアドバイスを学んでみましょう。<span>この記事では全文を紹介できないため、本文のポイントのみ紹介します。興味のある方はぜひ原文を読んでみてください。長いですが、非常に価値のある情報がたくさん含まれています。</span>

<h2>How To Be Successful</h2>
<span>成功するために必要な考え方を13個紹介します。成功の基盤を築き、更なる成功を目指す人々に向けた内容ですが、誰にでも適用される部分もあります。以下、13個の成功の考え方をご紹介します。</span>
<ol>
 	<li><strong>複利を生かす</strong>
お金だけでなく、スキルや人脈などあらゆる面で複利を生かすことが重要。若いうちからコツコツ努力し、時間が経つにつれて成果が膨らむことを目指す。</li>
 	<li><strong>自信がありすぎてもいい</strong>
自信があることは良いことだが、ありすぎるのも問題。自分にとって重要なものにだけ自信を持ち、過信は避ける。</li>
 	<li><strong>独立した思考を身につける</strong>
周りの意見や常識に囚われず、自分自身で物事を考えることが重要。独自の視点を持ち、自分の意見をしっかりと主張することが大切。</li>
 	<li><strong>「セールス」をうまくやる</strong>
商品やアイデアを売り込む能力は重要。相手に合わせたアプローチや、自分のアイデアを熱く語るスキルを磨くことが必要。</li>
 	<li><strong>リスクを取ることを簡単にする</strong>
成功するにはリスクを冒すことが必要。しかし、冒すリスクを最小限にするために、計画的に行動を起こすことが大切。また、失敗を恐れずにチャレンジすることが大切。</li>
 	<li><strong>フォーカス</strong>
成功するには特定の分野で深い知識を持つことが重要であり、多くの分野に浅い知識を持つことよりも、ある特定の分野に専念することが必要です。</li>
 	<li><strong>働くこと</strong>
成功するには、知恵と努力の両方が必要です。他の優秀な人々と競争するには、努力と知恵の両方が必要です。</li>
 	<li><strong>大胆さ</strong>困難なスタートアップを行うよりも簡単なことを行う方が簡単ですが、大胆なアイデアに挑戦し、周りの人たちがやっていないことをやることが成功の秘訣です。</li>
 	<li><strong>意志が強いこと</strong>
世界を自分の思う通りに動かせることができるという大きな秘密があります。自己疑問、早期諦め、足りない努力で、ほとんどの人が自分の潜在能力を発揮することができません。</li>
 	<li><strong>競合相手になりにくい存在であること</strong>
自分にしかできないことを探すことが大切であり、個人的な人脈、強力なパーソナルブランド、複数の分野にまたがるスキルを持つことなど、競争相手になりにくい存在になるための方法があります。</li>
 	<li><strong>人脈を築く</strong>
優秀な仕事にはチームが必要であり、優秀な人々と協力して働くことが重要です。人を助けることが最も効果的なネットワーク構築の方法であり、人を大切にすることが求められます。</li>
 	<li><strong>何かを所有することで富を得る</strong>
高い給与で豊かになることは稀であり、真の富を得るためには何かを所有する必要があります。ビジネスの一部、不動産、自然資源、知的財産など、何らかの形で株式を所有することが必要です。</li>
 	<li><strong>主導権を握る</strong>:人々は外的な動機に影響されやすいため、自分自身に影響される内的な動機が強く求められます。自分自身を印象づけたいと思い、世界に何かを成し遂げたいという内的な動機が必要であり、それが成功への重要な要因となります。
<ol start="11"></ol>
</li>
</ol>
<h2>まとめ</h2>
<span>この記事は、成功への基盤となる程度の成功をすでに達成し、更なる成功を目指す人々に向けたものですが、誰にでも適用される部分もあります。OpenAI CEOのサム・アルトマンが書いた内容で、成功に必要な考え方を13個紹介しています。アルトマンは、成功のために必要なことについて幅広い視野を持ち、多くのビジネスマンに参考になる内容が多く含まれています。成功に向けて一歩踏み出したい方は、ぜひこの13のポイントを参考にしてみてください。</span>
WebSphere・Db2・MQアニバーサリーに寄せて

# はじめに

 縁あって仮想化インフラの技術から、その上のアプリケーションに関する技術をを担当することになりました。
まだまだ、これから学ぶことが多く、他の方々に教えることはできないのですが、元仮想化インフラ屋さんからみたアプリケーションの世界について気づいたことをつらつらと書いていければと思います。

# MQって何者？から始まったお勉強
さて、IBMでは今年WebSphereが25周年、MQとDb2は30周年を迎えました。
そういえば、2006年から2008年頃のサーバー仮想化の黎明期には、軽いWeb Serverから仮想化集約しましょうということを伝えて、徐々にデータベースの仮想化へと進めてきました。同じサーバーハードウェア上にWeb Serverとデータベースを載せることで、サーバー外のネットワークスイッチを通らずに、サーバー内の仮想スイッチレイヤで高速に通信できますというようなことを売りにしていたことを思い出しました。
はるか昔の入社2年目には、リレーショナルデータベースソフトウェアをSQLレスで操作するGUIベースのユーティリティを開発し、その後の1994年頃にはこれから主流になると言われてWeb,DB,APの３階層システムのプロトタイプを当時出たばかりのJavaで[先輩](https://developers.freee.co.jp/entry/howto-make-cyber-exercise-scenario)と一緒に作った経験もあって、Web Serverとデータベースに関してはある程度馴染みがありました。それにしても、先輩は相変わらずすごい人です。。。
IBMに入った昨年、とある案件でPDOA構成をIA ServerやAWSへ移行サイジングすることとなり、Db2に関してはいろいろなバリエーション含めて実践で学ぶことができました。

しかし、MQについては、これは何者？となかなかピンと来なかったのです。
メッセージングってL7通信でやるんだよなぁ。あんまりインフラの監視からは見えない世界だな、いろんなクラウドのサービスと通信しまくってセキュリティリスクは大丈夫かな？　くらいのインフラ屋さん視点での感想しか出てきません。
データベースのレプリケーションも[vSphere Replication](https://www.vmware.com/jp/products/vsphere/replication.html)が真っ先に思い浮かび、[Q Replication](https://www.ibm.com/docs/ja/idr/11.4.0?topic=tutorial-introduction-q-replication)というメッセージングを使うレプリケーションがあることすら知りませんでした。

そんなレベルの私に、[同僚の記事](https://qiita.com/mi_saki/items/63e056954b450a33611f)が光を射してくれました。メッセージキューは、プロセッサの処理ロジックみたいで、マルチコアのVMを多用するとコアの奪い合いでキューが溜まってスローダウンを起こす懸念があるんだよなぁとか、昔データベースユーティリティを作った時のTCP/IP通信処理部でWinsock関数を使ってWindows3.1とUNIX間で生成したSQLの送信と受信を同期処理で実装したらRecvが返ってくるまで画面が固まった状態になって怒られ、スレッドを回して非同期処理で通信させて苦労したなとか、パーシステントメッセージってIntelのパーシステントメモリみたいなものかなとか、横道にそれまくりながら、読んでいきました。
聞き覚えがある単語があると、なんとなくわかった気になるものですね。

# 締め
 私のようになんとなくわかるけれど、よくわかっていないんだよなという方から、昔からよく使っている方、もう一度使ってみようかなという方は、是非[5月30日のWebSphere・Db2・MQ アニバーサリー・フォーラム](https://ibm.biz/BdPg8K)にいらして、熱気を肌で感じてください。
Vueの親子コンポーネントデータ受け渡し一覧

# コンポーネント間のデータ伝達

## 親から子にデータを渡す
Propsを用いて親から子にデータを渡します。この時PropsはReadOnlyなプロパティとなります。
```vue:childComponent.vue
<template>
  <button :class="$style.btn_base">{{ value }}</button>
</template>

<script setup lang="ts">
defineProps({
  value: { type: String, default: '' },
});
</script>
```
```vue:parentComponent.vue
<template>
  <childComponent value="test"></childComponent> 
</template> 
```


## 子から親にデータを渡す

### 子側でタイミングを指定する
emitsを用いて特定のタイミングでイベントを発火させます。このイベントを定義する際にデータの受け渡しについても定義できます。
```vue:childComponent.vue
<template>
  <button @click="newItem">新規追加</button>
  <button @click="viewItem">アイテム表示</button>
</template>

<script setup lang="ts">
import {defineEmits} from 'vue';
interface Emits {
  (event: 'clickSearch', item: unknown): void;
  (event: 'clickAdd'): void;
}

const emits = defineEmits<Emits>();

const newItem = () => {
  emits('clickAdd');
};

const viewItem = (item: unknown) => {
  emits('clickSearch', item);
};
</script>
```
```vue:parentComponent.vue
<template>
  <childComponent @clickAdd="add" @clickSearch="search"></childComponent> 
</template> 
<script setup lang="ts">
const add = async () => {
  //ここに新規追加ボタンを押したときの処理
};
const search = async (item: unknown) => {
  //ここにアイテム表示ボタンを押したときの処理
};
</script>
```

### 親側でタイミングを指定する
emitsはあくまで子でイベントが発火した時がデータを受け取るタイミングなので、親側のタイミングで子のデータを取得したい場合は子コンポーネントのref属性にrefを渡してあげて、そこを介して取得するらしい

詳しくはこちらの記事を参照

https://qiita.com/ugu/items/f554f9371fba74ae5060
プリザンターでプロセス機能とスクリプトを駆使して、独自の削除機能を実現する

# はじめに
[前回の記事](https://qiita.com/teppei12345/items/33ecd88e0317b37dd06c)の続きになります。今回は編集画面で削除ボタンがクリックされたらそのレコードを確認画面を表示させずに削除するという処理を実装していきます。処理自体は単純です。また、今回この処理を実現しようと思った理由は前回の記事同様に毎回確認ダイアログが表示されるのがいやだからです。

# プロセス機能
## 標準の削除ボタンを削除
今回はレコードを削除するボタンを追加するわけですが、標準の削除ボタンがあると任意で追加した削除ボタンと見分けがつかなくなります。そのため、下記
### サーバスクリプト
```JavaScript
// 新規作成・編集画面のとき
if (context.Action === 'edit') {
    elements.DisplayType('DeleteCommand', 3);  // 削除
    elements.DisplayType('OpenCopyDialogCommand', 3);  // コピー
    elements.DisplayType('EditOutgoingMail', 3);  // メール
}
```
## 任意の削除ボタンを追加
まずは、プロセスの機能を使って、削除ボタンを追加しようと思います。標準の削除ボタンでは、確認ダイアログが表示されてしまいますので、プロセス機能を使って削除ボタンを追加します。ちなみに、このプロセス機能を使えば任意の処理を行うためのボタンを追加することができるため便利です。プロセスタブの新規作成から表示名を削除にし、OnClick欄に\\$p.ex.<任意のメソッド名>();を入力します。そのあとに「\\$p.execProcess($(this));」を入れると更新処理が走ります。今回は削除なので入力しません。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659914/8d79ba38-78e4-e314-2ae3-4265f2a5a44c.png)  
そのうえで下記のソースコードをクライアントスクリプトに入力します。
### クライアントスクリプト
```JavaScript
$p.ex.execDeleteRecord = function () {
    try {
        // レコードの削除処理
        $p.apiDelete({
            // 自身のレコードIDを指定
            id: $p.id(),
            done: function (data) {
                // レコードが削除されてしまうとエラーが起きるため、一覧画面に遷移させる
                window.location.href = '<該当レコードの一覧画面>'
            }
        });
    } catch (ex) {
        console.log(ex.stack)
    }
}
```
【初心者向け】初めてOBSを使って会議を録音する（Mac）

## はじめに
議事録を取るのに録音推奨とのことでOBSを使うことになった人のために
簡単な手順をご紹介します。


## 手順
1. OBSダウンロード
1. OBS各種設定
    A. シーン
    B. ソース
    C. 音声ミキサー
    D. 設定（出力）
1. その他


### OBSダウンロード
以下のURLよりご自身の環境にあわせたバージョンをダウンロードします。

https://obsproject.com/ja/download

ダウンロード後はアプリケーションファイルに
ドラッグ・ドロップし利用できるようにしておきます。
![スクリーンショット 2023-04-19 11.20.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253440/814647c2-abb5-6307-d56b-c92dde1568ea.png)


### OBS各種設定
OBSを開いて各種設定を行います。

#### シーンを追加
シーン部分の「＋」をクリック。
シーンの名前は後から見てわかりやすいものに変更しておきましょう。
（例：デスクトップ録画　など）

#### ソースを追加
ソース部分の「＋」をクリック。
「MacOS スクリーンキャプチャ」を選択
ソースシーンの名前は後から見てわかりやすいものに変更してOKをクリック。
（例：デスクトップ音声・映像　など）


#### 音声ミキサー設定
音声ミキサー部分に、「ソースで追加したもの」と「マイク」の２種類が表示されていることを確認します。
マイクは自分の音声を拾ってしまうので、不要な場合はここでボリュームを０にしておきましょう。
（ソースで追加した方はそのままMAXで変更なしでOK）

![スクリーンショット 2023-04-24 13.17.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253440/54669af4-eb5e-0b94-1052-d99bd5d2814b.png)


一度試しに、なにか音声が出ているページなどを開いてみて、
その音量にあわせてボリュームのステータスバーが動いているか確認してみましょう。

（下の画像のように、緑・黄・赤のバーが光って動いていればOK）
![スクリーンショット 2023-04-24 13.20.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253440/1c89cdd4-8f2b-6f50-f6ae-bd1a532e4980.png)


#### 出力設定
画面左下側のコントロールにある「設定」をクリックします。
![スクリーンショット 2023-04-24 13.21.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253440/9ea83f61-552c-7e2f-0cfb-2dd790d9a06d.png)

##### 保存場所の設定
録画が終わったら自動的に指定している保存場所に保存されてしまします。
後からどこに保存されたの？！とならないようにわかりやすい場所を設定しておきましょう。

＜設定方法＞
設定→出力→録画
・録画ファイルのパス：わかりやすいところに変更

##### 録画フォーマットの設定
Macではデフォルトで再生できる動画フォーマットに限りがあります。
mkvファイルは別ソフトやアプリなどをダウンロードしないと視聴できないので
一般的なフォーマットとしてmp4を選択しておくといいと思います。

＜設定方法＞
設定→出力→録画
・録画フォーマット：mp4

最後に設定入力が終わったら、設定画面下側にある「適用」ボタンをクリック後「OK」ボタンクリックで設定完了です。


### 動作確認
youtubeや実際に音声が出ているページで「録画開始」を実行して
動作のチェックを実施してみましょう。（終了時は「録画終了」）

・録音ができているか
・録画ができているか
・保存箇所が正しいか
・保存フォーマットが正しいか
問題なければOKです！

### その他
以下、参考です。

#### プレビュー非表示
OBS起動中は結構なメモリを消費しますのでカクツキ予防のため、問題なければ「プレビューを非表示」推奨です。

＜設定方法＞
OBS上部の画面が表示されている箇所を右クリック。
「プレビューを有効化」のチェックを外す。


#### キャプチャ画面を指定する
ソース部分の選択したアイテムをダブルクリック
もしくは選択した状態で下部の「設定ボタン（歯車アイコン）」をクリック

プロパティ画面が表示されるので
ディスプレイより以下のいずれかを選択する。
・画面キャプチャ
・ウィンドウキャプチャ
・アプリケーションキャプチャ

![スクリーンショット 2023-04-24 15.30.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253440/c09869fc-3330-a5c4-6bc9-2a93f7b34c23.png)

＜詳細＞
画面キャプチャ：モニター全体をOBSに出力する
Mac上部のMenuバーも含めた画面全体がOBSに出力される

ウィンドウキャプチャ：特定のウィンドウをOBSに出力する
ブラウザで複数ウィンドウを開いていてもどちらか一方しか表示されない。

アプリケーションキャプチャ：アプリをOBSに出力する
Mac上部のMenuバーは全て表示されない。アプリの画面だけ表示される。

筆者はデュアルモニター（マルチモニター）を利用しているが
このディスプレイ設定はよくわからないので、ひとまず「画面キャプチャ」を利用。
片方の画面を配信用に、もう片方の画面を確認や議事録用にしてわければ特段問題はないはず。


## 参考資料
https://wirurun.com/streaming/obs/7313
Mybatisまとめ

# Mybatisとは
> MyBatis（マイバティス）は、Javaのアプリケーションとリレーショナルデータベースとのやりとりを簡略化するデータマッパーフレームワークです。 MyBatisを用いることで、リレーショナル（Relational）データベースから取得したレコードの値をJavaのオブジェクト（Object）に設定したり、 その逆にJavaのオブジェクトをもとにSQLを組み立てる「ORマッピング」のための単純で面倒なコードを書く必要が無くなります。 MyBatisの標準的な実装では対応が難しいような場合は、JDBCドライバーのようにSQLやストアドプロシージャでリレーショナルデータベースを操作することもできます。 MyBatis の設定やデータベースレコードと Java オブジェクトのマッピングは、XML またはアノテーションを使って行うことができます。 
> 
右記サイトより引用:https://openstandia.jp/oss_info/mybatis/

# @Mapper
クラスに付与し、Mybatisを使用してデータベースに接続可能とする。
MyBatis では Mapper XML ではなく、アノテーションによって Mapper を定義することができる。
一般的にDB接続を担当するクラスには@Repositoryを付与するが、Mybatisの場合では、@MapperアノテーションがついていればOK。Bean登録されている。

# @Insert, @Update, @Select, @delete
メソッド対して指定可能で、それぞれ実行対象の SQL に対応している。
各アノテーションは、文字列か文字列の配列を引数にとり、実行したい SQL を渡すことが可能。配列が指定された場合は半角スペース区切りで文字列が結合される。

XML のときと同様に、 #{hoge} で値を埋め込むことができ、動的 SQL を利用したい場合は、全体を\<script\>で囲む必要がある。

参考サイト：https://qiita.com/d-yosh/items/a2bec9718bccfe15a6ae
【旧設定】Salesforceでフローを作成しよう～特定の値のレコードを削除させない方法

こんにちは。本橋孝昭です

今回は入力規則とフローを活用し

・特定の値のレコードを削除させない方法
について解説します

## ※今回の内容は2023年10月以前の内容です。2023年10月以降の新機能を使った設定は以下をご確認ください※

https://qiita.com/Takaa/items/b2f84710cac0e8b5fabb

https://youtu.be/UjWRZU5HRcc?si=D1KqFpm7T2TV_Ge5





2023年10月以前の内容について

今回の内容は動画でも公開しています

https://www.youtube.com/watch?v=0pCo3Z1vINo

<iframe width="560" height="315" src="https://www.youtube.com/embed/0pCo3Z1vINo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


今回は例として
・商談のフェーズが「Closed Won」の商談を削除することを防ぐ

という設定を行います

この設定をするために以下のステップが必要です

・ステップ１　商談にカスタム項目作成
・ステップ２　商談に入力規則作成
・ステップ３　商談削除時に起動するフロー作成


それぞれ見ていきましょう


## ステップ１　商談にカスタム項目作成

商談にカスタム項目を作成しましょう
今回はより分かりやすいようにカスタム項目（チェックボックス）を作成しました
API参照名は
Check__c
とします

![項目01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/f030ce0a-d78c-1cec-05a9-3b8378fa0a5e.png)

## ステップ２　商談に入力規則作成

次に商談に入力規則を作成します

入力規則の数式は先ほどステップ１で作成した項目のAPI参照名をいれてください

また、後ほど解説しますがここのエラーメッセージは分かりやすいメッセージにしてください

![入力規則.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/432d27a0-df89-dbd5-ef86-f5f55aa3ba92.png)


## ステップ３　削除時起動のフロー作成

削除時に起動するフローを作成します

概要はこちら

![概要.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/e7cf0a84-a5d8-de6e-fe73-fa91944f2d99.png)


開始条件はこちら

![開始.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/aabdcf6e-7983-4d04-7abb-91478bb7fc22.png)


更新条件はこちら

![2023-05-01 16_53_06-DeleteOpportunity - V1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/821a73e7-2f75-bdf3-a786-e2a99c618274.png)


これで設定は完了です


## 注意点

こちら注意点としては、
レコード削除時にこのようなエラーメッセージが出て削除させないように防ぎます

![削除.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/86b407ec-3bde-d177-ade8-a05cb1f7d9ca.png)

ぱっと見ると謎のメッセージですが、よく見るとフロー名や入力規則のエラーメッセージが書いてあるので、まあ、よく見るとエラーの原因が分かるかと思います


## まとめ

今回のフローではエラーメッセージが分かりにくいですが、レコードを削除させないことは可能です。
設定も容易なので、ぜひ皆さんも削除してほしくないデータがSalesforceにある場合、試してみてください。
【基本情報対策】プロトコルとパケットって結局なに？

まずはGoogle様提供のお堅い定義から

「プロトコルとは、コンピュータでデータをやりとりするために定められた手順や規約、信号の電気的規則、通信における送受信の手順などを定めた規格を意味します。 
異なるメーカーのソフトウエアやハードウエア同士でも、共通のプロトコルに従うことによって、正しい通信が可能になります。」

ふむふむ、わからん。
ということで僕なりにザックり分解してみるので、一緒に理解を深めていきましょう。


【プロトコルは約束事】
コンピュータ同時の通信において
・どんな形式で
・どんなケーブルを使って
・相手がどうやって受け取るか
など、上記が決まっていないと情報の送受信ができない。
実はこれは実生活で考えても同じこと。

手紙であれば相手の住所やこちらの住所を書き、切手を貼ってポストへ投函
電話であれば通信環境下で相手の電話番号を入力（指定）

「送る」一つとっても実は様々な決まり事やプロセスが存在します。
コンピューター同士の通信において、こういったプロセスや決まり事を７階層に分けてみたのが
:star2:OSI基本参照モデル
（1~7を合わせることでコンピューター同士のコミュニケーションが成立します）

7 アプリケーション層　
具体的にどんなサービスを提供するのか
↑
6 プレゼンテーション層
データはどんな形式にするか
↑
5 セッション層
通信の開始から終了までをどう管理するか
↑
4 トランスポート層
通信の信頼性はどう確保するか
↑
3 ネットワーク層
ネットワークとネットワークをどう中継するか
↑
2 データリンク層
同一ネットワーク内でどう通信するか
↑
1 物理層
物理的にどう繋ぐか


:sun_with_face:なぜ階層ごとに分けるの？
例えば、「光ファイバってごっつ早いらしいやん！！」という話を小耳に挟んで導入してみたくなったとします。階層ごとの区切りをハッキリさせておかないと、カスタムしたいってなった時にイジりづらいですよね。これを階層に分けていれば「ホイだら第一階層使おまい！」と即座に対応できるわけです。

※ちなみに現在の標準は「TCP/IPプロトコル」
このプロトコルでは通信データをパケットという単位に分割して通信します。

→通信路上を流せるデータ量は有限、分割せず一気に送ると、それを処理し切るまでその通信路上の他の通信が行えなくなっちゃいます。
（100BASE-TXのネットワークの場合、１秒間に流せるのは100Mbiまで）


とまぁプロトコルやらパケットの解説はここまでにして、基本情報を受ける予定の人は以下の計算式も覚えましょう。

【伝送に要する時間の計算式】
ネットワークの伝送に要する時間は以下の計算式によって求められる

:star:伝送時間＝データ量÷回線速度
※ケーブルによって、必ずしも理論値100％が出るとは限らない
※また、一つのパケットに対しても様々な制御情報が付加される
（TCPの宛先情報、IPの宛先情報、イーサネットのアドレス情報など）

:star:実際に出る速度：実行速度
（理論値×伝送効率）

:star:理論値に対して実際に出る速度の割合：伝送効率
実行速度×理論値

以上、基本情報合格したら焼肉奢ってください。
では。
パスワードスプレー とは

## 勉強前イメージ

パスワードのスプレー？

## 調査

### パスワードスプレー とは

よく使われるパスワードを標的に不正アクセスを使用する攻撃方法で
同じパスワードを複数のユーザーアカウントログインで同時に試すことを指します。
IDとパスワードを組み合わせて攻撃するブルートフォースの一種です。
パスワードスプレー攻撃は `low-and-slow攻撃` とも呼ばれます。

### パスワードスプレーの仕組み

ログインがあるシステムでは基本的に一定回数のログインが失敗するとアカウントロックが行われます。
アカウントロックはアカウントのログイン失敗回数に応じてロックが掛かることが多いです。

パスワードスプレー攻撃では複数のアカウントに対して `同じパスワード` でログインを試します。
同じアカウントでも複数のアカウントでログインを試すのでロックがかからない状態を維持しながら攻撃を行うことができます。

### ブルートフォース とは

ブルートフォースとは総当たり攻撃になります。
詳細は [こちら](https://qiita.com/miyuki_samitani/items/96087f8a754629c76b9c) を御覧ください。

ブルートフォースでは `同じアカウント` に対してパスワードを変えながらログインを試す方法です。
アカウントロックはこちらのブルートフォース攻撃を防ぐことができます。

### パスワードスプレーの対策

- 多要素認証を行う

[多要素認証](https://qiita.com/miyuki_samitani/items/d223cf31beb4ba548abe) とはIDやパスワード以外の他の要素も使ってログインを行う方法です。
生体認証やワンタイムパスワードを使用されることがあります。

- 推測されにくいパスワードにする

パスワードを主として複数のアカウントにログインを行うため
できるだけ長く、分かりづらいパスワードを設定することが効果的です。
[2022年のよく使われたパスワード](https://www.itmedia.co.jp/news/articles/2211/15/news122.html) では
短く、意味を持ったりわかりやすいパスワードがランクインしています。
こちらのパスワードを使うのは避けるのが良いかもしれません。

## 勉強後イメージ

確かにアカウントロックがされないから避けるのは難しいよね。

## 参考

- [パスワードスプレー攻撃とは？仕組みと被害の特徴、対策方法について徹底解説](https://cybersecurity-jp.com/column/30629)
- [2022年、日本で最も使われたパスワード　2位は「password」、1位は？](https://www.itmedia.co.jp/news/articles/2211/15/news122.html)
- [パスワードスプレー攻撃 【password spraying attack】](https://e-words.jp/w/%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%82%B9%E3%83%97%E3%83%AC%E3%83%BC%E6%94%BB%E6%92%83.html)
Purview 秘密度ラベルの活用 ～SPO ライブラリへの適用～

# この記事について
Purview 秘密度ラベルを利用することで、Office ドキュメントを分類して保護することができますが、これを SharePoint Online のドキュメント ライブラリに適用することで、分類されていないドキュメントを指定したラベルで自動分類することができます。

Microsoft の公開情報としては以下。
> SharePoint ドキュメント ライブラリの既定の秘密度ラベルを構成する
> https://learn.microsoft.com/ja-jp/microsoft-365/compliance/sensitivity-labels-sharepoint-default-label?view=o365-worldwide
>
> SharePoint ドキュメント ライブラリに秘密度ラベルを追加する
https://support.microsoft.com/ja-jp/office/sharepoint--54b1602b-db0a-4bcb-b9ac-5e20cbc28089

手順は難しくなく、ラベルを作成して発行し、その後任意サイトのドキュメント ライブラリで適用する秘密度ラベルを設定するだけ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1307699/5eee05f2-93be-b6ab-c2fb-e7e48524d761.png)


# どのような動きをするのか？
この機能は、注意書きにもある通り既存のファイル(以前からライブラリにあるファイル) には適用されない。
ラベルの設定後、新規にアプロードしたファイルや編集した場合に適用される。(既存ファイルでも編集して保存したら適用される)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1307699/faf908fa-a5b4-47f2-46e0-ed2dc7ec6200.png)


見え方としては以下。[秘密度] 列は既定では表示されないので追加する必要があります。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1307699/46d4b495-08b0-8f2f-143d-c56fa4fb8402.png)


# ラベルを変更した場合は？
Q. 他のラベルが適用されていた場合は？
暗号化されていないラベル(ここでは Default Label) が、既定のラベルとしてポリシーで適用されたファイルをアップロードした場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1307699/46d4fd96-795c-31b6-73d9-c0aa2f007a8a.png)


A. 以下のように、ライブラリで指定した秘密度ラベルに上書き適用される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1307699/dce266ca-d922-9c67-07cd-c40c19dcdc64.png)


Q より秘密度の高い(優先順位の高い) ラベルが手動で適用されている場合は？
Q ライブラリに保存後にラベルを変更した場合は？

A.優先度に関係なく、ユーザーが手動で設定したラベルは維持される。ライブラリで指定したラベルで上書きされることは無い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1307699/e09ed91e-148e-99e0-ef9d-73cc954e7af8.png)

上記の通り、以下公開情報の通りの動作となる。
https://learn.microsoft.com/en-us/microsoft-365/compliance/sensitivity-labels-sharepoint-default-label?view=o365-worldwide#will-an-existing-label-be-overridden

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1307699/6d5d7c55-b07e-c138-3d92-f0c396bd1cd4.png)


まとめると以下の通り。
・ラベルが適用されていないもしくは、ポリシーで自動適用(優先度が低い場合) された場合は、ライブラリで指定したラベルで上書きされる
・ユーザーが手動で適用したラベルは上書きされることなく維持される。(ライブラリへの保存前後関係なく)

# ラベルの適用と変更履歴
ラベルの適用状況(変更過程) は Purview のアクティビティ エクスプローラーから確認することができる。(最大過去30日)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1307699/68ef5c1d-9739-3414-6e40-d1d35be2b71d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1307699/63da9bb7-2dd9-8a65-c0a9-df0c72ae49a4.png)


必要なアクセス権は以下３つのいずれか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1307699/42b5d2b4-b53f-622b-182e-8ffc047a6033.png)
AL2023でssh用キーペア生成

通常のコマンドで鍵を作るとOpenSSHのバージョン違いで秘密鍵がヘンなカタチに。

```php
-----BEGIN OPENSSH PRIVATE KEY-----
〜文字列〜文字列〜文字列〜文字列〜
-----END OPENSSH PRIVATE KEY-----
```

-mオプションでフォーマットを指定することで解決。

```bash
ssh-keygen -t rsa -m PEM
```


**おわり。**

# 2025/01/21追記
最近はrsaより強固な方式がよいですね

```bash
ssh-keygen -t ed25519 -m pem
```

**おわり。**
Googleスライドのアドオンで目次生成

Googleスライドで要件定義書を作成している最中、簡単に目次生成できる機能はないか調べ、導入・実践しました。

### Slides Toolbox取得

目次生成はSlides Toolboxというアドオンを取得することで利用できるようになります。

拡張機能>アドオン>アドオン取得と辿ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/8b7672d0-2b64-5c09-53d4-64d361539726.png)

Slides Toolboxを検索して、インストール。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/e515d83f-3d81-bab7-6884-ac016d0b1eda.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/39aca27a-6e51-b6c1-6a36-3d2ea60e0063.png)


### 実践

目次を生成したいページにカーソルを合わせます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/dfe7d2df-e561-ac2e-2c63-26d32240f294.png)

拡張機能>Slides Toolboxを選択すると以下が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/32cdcb23-18e3-ad7c-a735-400bf918904e.png)

PageToolsを選択、Table of Contentsを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/98a22fe0-0382-48bc-43d0-9f393c7df031.png)

任意のページに目次が生成されました。
※内容が多いため、はみ出しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/619a7812-0232-5433-28a0-854b7ecb1473.png)

無事に目次を生成できました。
アルゴリズム勉強部屋-文字の重複したものを返す

## 問題：文字の中で重複したものを返す

### input
```python
arr = 'responsive'
```

### out
```
s
```


## 一般的な回答
```python
def firstRepeatingCharacter(str):
    for i in range(len(str)):
        for j in range(i):
            if str[i] == str[j]:
                return str[i]
```


## ハッシュテーブルを使用した回答

```python
def firstRepeatingCharacter(str):
    hashed={}
    for ch in str:
        if hashed[ch]:
            retrun ch
        else:
            hashed[ch] = True
```
【Git】ブランチって何？

## はじめに

Gitを活用して開発を進めていく上で、ブランチ機能は欠かせません。ブランチ機能を活用することで、１つのプロジェクトを独立した環境で並行して進めて行くことが出来ます。また、ブランチの理解が深まることでGitコマンドが理解しやすくなったりもします。と言っても自分はまだまだ使いこなせていないのですが、今回はブランチについて調べて分かったことを紹介していきたいと思います。

## Git

ブランチの説明に入る前に、まずはGitの説明からしていきたいと思います。

### バージョン管理

Gitとは、ファイルの変更履歴を記録し追跡するためのバージョン管理システムのことです。ファイル変更をGitに登録する際に、ファイル変更が記録され、コミットというものが作成されます。コミットは、その直前のコミット（親コミット）を記録しているので、過去のコミットを辿ることが出来ます。コミットとバージョンは対応していて、コミットが持つコミットID(※1)を指定することでバージョンをします。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120699/a74414ec-5254-f857-c43d-b2f95b516819.png)
※1 実際のコミットIDは40桁のランダムな英数字ですが、ここではコミットの流れが分かりやすくするためにa1のように書いています。

### バージョンの切り替え

`git checkout コミットID`で、バージョンを切り替えることができます（`git log`で過去のバージョンのコミットIDを確認できます）。先ほど、コミットIDを指定することでバージョンを切り替えると説明しましたが、より正確には、HEAD（※2）が参照するコミットを切り替えることで、バージョンを切り替えています。なので実際には、`git checkout コミットID`で、HEADが参照するコミットを切り替えていて、その結果、バージョンが切り替わっています。

※2 HEAD：現在自分が作業しているバージョンのコミットを指すポインタのこと。逆に、HEADが参照しているコミットのバージョンに移動しているとも言えます。

↓過去のバージョン(a2)に移動している時の状態図
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120699/5af44195-2bf3-574a-69ab-c674ffc5dcab.png)

## ブランチ機能

ブランチ機能とは、コミット履歴を分岐して記録していく機能のことです。コミット履歴を分岐させると、他の分岐先で新しくコミットがあったとしても影響を受けません。下図のような場合を考えてみましょう。赤枠内のコミットは、青枠や緑枠の分岐したコミット履歴には影響がありません。コミット履歴に影響がないということは、バージョンにも影響がないということです。よって、タスクごとにコミット履歴を分岐させて作業することで、独立した環境でそれぞれのタスクを進めることができるのです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120699/14aea81e-9742-4a17-d3eb-5b478d0d12af.png)

## ブランチ

### ブランチとは

ブランチ機能について説明しましたが、ブランチとは何を指している言葉なのでしょうか？英単語”branch”は「枝、枝分かれ(分岐)したもの」などの意味があります。分岐した各コミット履歴のことをブランチと言ったりもしますが、ブランチの実体としては、コミット履歴全体を指しているのではなく、コミット履歴の最新コミットを指すポインタに過ぎません。なので、コミットが更新されると、ブランチのポインタも最新のコミットに切り替わります(※3)。

※3 Gitリポジトリを新規作成すると同時に生成される一番最初のブランチは、デフォルトでmasterやmainというブランチ名が付いています（2020年10月以降に新規作成されたリポジトリの場合はmain、それ以前はmaster）

### ブランチとHEAD

実際には、`git checkout ブランチ名` のようにブランチ指定で移動することが多く、その場合、HEADのポインタはブランチを指しています。この時、HEADはそのブランチが参照しているコミットを間接的に参照している状態になっています。なので、そのブランチで新しいコミットがあると、ブランチの参照先が切り替わり、同時にHEADの参照先も同時に切り替わります。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120699/fa5a5b00-a5ce-5415-6c1c-e4c510b9d1a2.png)
↓コミット後（branchAとともにHEADの参照先も移動している）
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120699/c653c243-13f2-b22e-4f3b-325412631db4.png)

### ブランチの作成

`git branch ブランチ名` や `git checkout -b ブランチ名` で、ブランチを新たに生成することができます。`git checkout -b ブランチ名` は、`git branch ブランチ名` と `git checkout ブランチ名` を一度に実行できる便利なコマンドで、ブランチを新たに生成して、そのブランチで作業していきたいという場合に便利です。

`git branch ブランチ名` の場合、
![git_branch_flow.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120699/827e6347-4992-32a0-65a8-a462f1d93dbd.gif)

`git checkout -b ブランチ名` の場合、
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120699/e201da28-43b5-5c47-6427-0b21356070ac.gif)


## おわりに

今回は、Gitのブランチ機能について説明しました。
Gitを理解して、より快適に開発していきたいですね。

## 参考にしたサイト一覧

- [GitのHEADとは何者なのか](https://qiita.com/ymzkjpx/items/00ff664da60c37458aaa)
- [Git - ブランチとは](https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%A8%E3%81%AF)
2023年5月 AIOps 定点観測

# 概要
AIOps の動向や学習のため、Google で AIOps を検索した結果を記録している記事です。

# 2023年5月1日の検索結果 (リスティング広告)

![20230501_AIOps_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2345504/ba7224c2-5e09-472c-f058-347dd4459b8e.png)

* IBM
* ServiceNow

今月は IBM がトップで ServiceNow が続いています。ページの上部にはスポンサーの表示が2件しかありません。
ページの下部にスクロールするとさらにスポンサーの表示があります。

![20230501_AIOps_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2345504/703bfccb-4a78-9c81-7381-5cad10eec485.png)

* Pure Storage
* Dynatrace

そこでは Pure Storage と Dynatrace が続いています。

先月の結果はこちら --> [2023年4月 AIOps 定点観測](https://qiita.com/mkodera/items/2f9d967c0c8081074f21)

# 2023年5月1日の検索結果 (広告以外)

![20230501_AIOps_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2345504/3ae525fa-d5ce-0120-1318-ec29ddd14fe4.png)

![20230501_AIOps_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2345504/bceed2c3-f670-513b-07c7-9bd7dc37e976.png)

* Splunk
* HPE
* 日立製作所
* ITmedia
* intra-mart (NTTデータ イントラマート)
* ServiceNow
* JBSVC (JBサービス)

広告以外では Splunk が強調スニペットでトップに表示されています。 その後に HPE、日立製作所が続いています。

先月の結果はこちら --> [2023年4月 AIOps 定点観測](https://qiita.com/mkodera/items/2f9d967c0c8081074f21)
Googleアナリティクス4（GA4）基本の使い方

 # アカウント構造
```
アナリティクスアカウント : 〇〇株式会社 / △△チーム など
└ プロパティとアプリ : □□サイト / コーポレートサイトなど
　　　└ データストリーム : ウェブサイト、アプリをプロパティに対して複数設定できる
```

GA4では、ひとつのプロパティの中にウェブサイトやiOS/Androidアプリのデータストリームを複数紐づけて設定でき、**サイトとアプリを横断した計測や分析が可能**となっている

# 基本的の使い方
## PV（ページビュー数）
「表示回数」という項目名になっている
ウェブサイトの表示数とアプリのスクリーン数の合計値
アプリの場合、ページという概念がないため「表示回数」という呼称に変わっている

### プロパティ全体の概算表示回数
- レポート > ライフサイクル > エンゲージメント > 概要
※〇〇万などだいたいの数字が表示される

### ページごとの表示回数
- レポート > ライフサイクル > エンゲージメント > ページとスクリーン

## セッション
「セッション」という項目名になっている
アプリをフォアグラウンドで開くか、現在アクティブなセッションがないとき（以前のセッションがタイムアウトした場合など）にページまたはスクリーンを表示すると、セッションが開始し、30分間操作がなければセッションはタイムアウトのため終了する
- レポート > ライフサイクル > 集客 > トラフィック獲得

## ユーザー属性
- レポート > ユーザー > 概要
「国」、「市区町村」、「性別」などがみれる
ただし、データ量が少ない場合やレポート識別子の設定によって集計されないケースもある

## 流入経路
- レポート > ライフサイクル > 集客 > トラフィック獲得
チャネルグループの解説は[こちら](https://www.gpol.co.jp/blog/181)の記事がわかりやすい

# 参考記事
https://www.seohacks.net/blog/9985/

https://ferret-plus.com/curriculums/10019

https://ayudante.jp/column/2022-06-21/11-00/
JavaScriptでHelloWorldを表示してみた

# 概要
JavaScriptでHelloWorldを表示してみました。以下のページを参考にしました。
https://www.sejuku.net/blog/107067

# ソースコードを実装
上記のページを参考に実装しました。
```index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>Sample</title>
  </head>
  <body>
  
 
    <script>
 
      //ここにJavaScriptを記述する
    alert('Hello World');
    </script>
  </body>
</html>
```

# ブラウザで開く
Chromeでindex.htmlを開くと以下のように実行されました。
![Screenshot from 2023-05-01 16-00-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/1a47ead4-2b80-17de-011c-62a1be3ec378.png)

何かの役に立てばと。
aria-busyとは？

## aria-busyとは？
要素が更新中かどうかを示す。

divタグなどで「読み込み中」の文言を入れるだけでなく、技術支援としてaria-busy属性を付与することで明示的にHTMLに読み込み中の属性を補う。読み込み中ならtrue、読み込み終わったらfalseを入れる。

```index.html
<div aria-busy="true">読み込み中</div>
```

## なぜ補完する必要があるのか？
webページ中のHTMLだけではタグの役割を明示することはできない部分がある。そこを補完するためにWA-ARIAの機能を用いる。aria-busyもその一つである。

## そもそもWAI-ARIAとは？
>webページ上のコンテンツに対して、アクセシビリティを補完する為の属性を定義した仕様です。

詳しくは[こちら記事](https://developer.mozilla.org/ja/docs/Learn/Accessibility/WAI-ARIA_basics#When_should_you_use_WAI-ARIA)をご覧ください。

## まとめ
非同期処理で読み込んでいある最中に読み込みの文言を出す時はaria-busyで補完してあげましょう。

[WAI-ARIA の基礎知識](https://accessible-usable.net/2014/04/entry_140415.html)
[WAI-ARIAを使ってコーディングする](https://qiita.com/h-naito/items/df2a2e62233367b944b0)
初心者がお伝えするBizRobo!のその機能もっと早く知りたかった ～コンバータでの曜日取得編～

皆さんは「特定の曜日だけ別の処理を行いたい」「この曜日の場合は特定の処理をスキップさせたい」等思ったことはないでしょうか？

特定の箇所だけ変更したロボットを作ってLauncherやMCで曜日設定して実行、でも良いのですが、その分どんどんロボット台数が増えていってしまいます...

実はBizRobo!のDSで曜日取得できるんです！
以下が手順となります。

# 曜日取得
①「日付を格納する変数」と「曜日を格納する変数」を作成
② 変数の割当ステップを作成し、エクスプレッションを選択
![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3346701/dc3c925d-e4b7-318f-af80-f924e3e1ea17.png)
③ now()関数を用いて、現在の日付時刻を日付変数に割り当てる
![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3346701/1edeb878-f13a-7cb9-9285-eeb67cf33a9a.png)
④ もう一度、変数の割当ステップを作成し、コンバータを選択
![画像6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3346701/5dc4a872-42e4-80e9-6118-5be75b3c615f.png)
⑤「変数を取得」をクリックし、日付変数を選択
![画像7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3346701/1f02443b-d79b-6eed-b725-0289f0a130fe.png)
![画像8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3346701/48e3faae-79f7-dc72-bcf8-d70b0f069419.png)
⑥ ＋ボタンを押し「日付処理」から「日付の書式設定」を選択
![画像9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3346701/ace08e97-feba-cae8-a197-3f533ac4f2ed.png)
⑦ ロケールで「日本」を選択
⑧ フォーマットパターンに「EEE」と記入
![画像10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3346701/60e9a057-ae91-4ec3-a166-5086afdf5c5c.png)

~~~
※注意点
日付処理を行う際は、変数が「yyyy-MM-dd hh:mm:ss」である必要があります。
「2023-01-01」では「入力テキストがyyyy-MM-dd hh:mm:ssではありません」と
怒られてしまうのでご注意を！
~~~

誰かのお役に立てれば嬉しいです。
最後までお読みいただきありがとうございました。
【初心者向け】PLとPMの違いは？どっちが上なの？

余計なイントロを挟んでも仕方がないので、早速本題。

【PL（Project Leader）】
プロジェクトの中核を担う。
開発や設計、テストにおいて、目標達成に向けて技術的な指導やチームのマネジメントを行う。
具体的には、プロジェクトの技術的な戦略策定や技術的な課題解決、チームメンバーへの技術指導やコーチングを行う。

【PM（Project Maneger）】
プロジェクトの全体を統括する。
目標達成に向けて進捗管理やスケジュール管理、予算管理などのマネジメント業務を担当する。
具体的には、プロジェクトの計画立案やリスク管理、チームの調整やコミュニケーション、ステークホルダーとの調整業務など。

【どっちが上なの？】
一般的にはPMのポジションはPLよりもスキルや責任が高く、多岐に渡る業務を担当する。
PMはプロジェクト全体を把握し、戦略的な視点から計画を策定するため、技術のみならず、コミュニケーション能力や、より俯瞰して物事を見極める能力が必要とされる。

PM（プロジェクト全体）＞PL（技術面のみ）

以上、読んでくれてありがとねー。
devcontainerでPlantUMLの日本語表示が重なって表示されてしまう

## 事象
DevContainerでPlantUMLを表示させたい場合以下のように必要なパッケージ入れてあげるだけだと日本語表示がおかしくなります。



```Dockerfile
RUN apt update && apt install -y default-jre graphviz 
```


```
@startuml
actor user
actor ユーザー
user -> system : order
ユーザー -> システム : 注文する
@enduml
```

↑の定義の場合、↓のように日本語が重なって表示されてしまいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/87d182f0-6538-0495-9124-b62384b673c8.png)


## 対応
以下のように日本語フォント入れるだけでOKです。

中途半端に表示されているから少し詰まりました。


```
RUN apt update && apt install -y default-jre graphviz fonts-ipafont
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/cd2057d7-c0bb-b684-5b50-473832d03133.png)
レバレッジ・リーディングを読んだ

# レバレッジ・リーディング
https://www.amazon.co.jp/%E3%83%AC%E3%83%90%E3%83%AC%E3%83%83%E3%82%B8%E3%83%BB%E3%83%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0-%E6%9C%AC%E7%94%B0-%E7%9B%B4%E4%B9%8B/dp/4492042695

大昔に図書館で借りて読んだことがあったが、改めて読書って大事だなと思って中古で購入した。
Amaozonマーケットプレイスで200円くらいだった。
（Audibleとかだと無料みたい）

## おすすめ度（10点）
7.5点
内容としては結構面白くて参考になった。
とにかく読書習慣をつけることが大事だと思った。

:::note warn
同時にちゃんと理解しない内容をアウトプットしないと意味ないなと思った。 
:::

## 本を読む習慣を決める
1日15分で良いから習慣を決める
※昼休みでも寝る前でも電車の中でもなんでも良い

## 本を読む目的を決める
自分がその本からどんなものを得たいのか意識する

## 理解した内容をメモする
自分が理解したことをメモる

## 理解した内容を実践で試す
仕事、私生活などなどとにかく実践で試す

:::note warn
とにかく試してみる。駄目だったところは見直して再度チャレンジ
:::

## 身につける
最初は真似するだけで精一杯。
真似するのを続けていけばいつか自分のものにできる。

## メモの内容を繰り返し読む
2週間で3回使えば身になる。

## レバレッジメモをジャンルごとに分類する
タグ付けすると後で見直しし易い
ChatGPT おすすめ Chrome 拡張機能

# ChatGPT おすすめ Chrome 拡張機能

#### 1. Google検索と同時にChatGPT
google検索と同時にGPTの答えが返ってくる。文末に？をつけたときだけ返ってくるようにもできる。

[ChatGPT for Google](https://chrome.google.com/webstore/detail/chatgpt-for-google/jgjaeacdkonaoafenlfkkkmbaopkbilf?hl=ja)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3328398/4594b7d0-8ca5-a257-92ea-0848208a4d6c.png)

#### 2. 最新情報をゲット可能なChatGPT
ChatGPTの入力フォームの下にWeb accessボタンが表示される。このボタンがオンの時、GPTに入力されたプロンプトは（おそらく）dackdackgoで自動検索にかけられ、その検索エンジンの結果が自動でGPTに入力される。下のオプションで検索結果数や期間指定が行える。

[WebChatGPT: インターネットにアクセスできる ChatGPT](https://chrome.google.com/webstore/detail/webchatgpt-chatgpt-with-i/lpfemeioodjbpieminkklglpmhlngfcn?hl=ja)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3328398/f29ed6a4-16d1-bf5e-7505-336bd159b954.png)
Rails「A server is already running. Check /Users/me/environment/XXX/tmp/pids/server.pid.」の解決方法

パソコンを再起動して`rails server`を実行したところ、以下のエラーが起こりました。解決方法を残します。


```
$ rails server
=> Booting Puma
=> Rails 7.0.4.3 application starting in development 
=> Run `bin/rails server --help` for more startup options
A server is already running. Check /Users/me/environment/XXX/tmp/pids/server.pid.
```
再起動時に`ｃｔｒｌ ＋ C`でサーバーをシャットダウンしていなかったので、プロセスが残ったままになってしまったことが原因だと考えられます。

まずは[こちらの記事](https://labo.kon-ruri.co.jp/rails-error-a-server-is-already-running/)の通り、`XXX/tmp/pids`フォルダに有る`server.pid`ファイルを削除しました。
次に`lsof -i:3000`で実行中のプロセスを確認し、[こちらの記事](https://zenn.dev/masa20210102/articles/2fa07434282044)の通り`kill 1489`を実行しましたが、プロセスが消えませんでした。
```
$ lsof -i:3000
COMMAND    PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Google     516   me   34u  IPv6 0x6e4255ffacc03f29      0t0  TCP localhost:49915->localhost:hbci (ESTABLISHED)
ruby      1489   me   10u  IPv4 0x6e4255ffb1aa5b89      0t0  TCP localhost:hbci (LISTEN)
ruby      1489   me   11u  IPv6 0x6e4255ffbaeb1be9      0t0  TCP localhost:hbci (LISTEN)
ruby      1489   me   18u  IPv6 0x6e4255ffacc04be9      0t0  TCP localhost:hbci->localhost:49727 (CLOSE_WAIT)
ruby      1489   me   19u  IPv6 0x6e4255ffacc05249      0t0  TCP localhost:hbci->localhost:49728 (CLOSE_WAIT)
ruby      1489   me   20u  IPv6 0x6e4255ffbaeb2249      0t0  TCP localhost:hbci->localhost:49749 (CLOSE_WAIT)
ruby      1489   me   21u  IPv6 0x6e4255ffacc058a9      0t0  TCP localhost:hbci->localhost:49779 (CLOSE_WAIT)
ruby      1489   me   22u  IPv6 0x6e4255ffb4983f29      0t0  TCP localhost:hbci->localhost:49780 (CLOSE_WAIT)
$ kill 1489
$ lsof -i:3000
COMMAND    PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Google     516   me   34u  IPv6 0x6e4255ffacc03f29      0t0  TCP localhost:49915->localhost:hbci (ESTABLISHED)
ruby      1489   me   10u  IPv4 0x6e4255ffb1aa5b89      0t0  TCP localhost:hbci (LISTEN)
ruby      1489   me   11u  IPv6 0x6e4255ffbaeb1be9      0t0  TCP localhost:hbci (LISTEN)
ruby      1489   me   18u  IPv6 0x6e4255ffacc04be9      0t0  TCP localhost:hbci->localhost:49727 (CLOSE_WAIT)
ruby      1489   me   19u  IPv6 0x6e4255ffacc05249      0t0  TCP localhost:hbci->localhost:49728 (CLOSE_WAIT)
ruby      1489   me   20u  IPv6 0x6e4255ffbaeb2249      0t0  TCP localhost:hbci->localhost:49749 (CLOSE_WAIT)
ruby      1489   me   21u  IPv6 0x6e4255ffacc058a9      0t0  TCP localhost:hbci->localhost:49779 (CLOSE_WAIT)
ruby      1489   me   22u  IPv6 0x6e4255ffb4983f29      0t0  TCP localhost:hbci->localhost:49780 (CLOSE_WAIT)
```

そこで[こちらの記事](https://k-koh.hatenablog.com/entry/2020/07/25/152152)の通り、`kill -9 1489`を実行すると消すことができ、サーバーを起動できました。
```
$ kill -9 1489
$ lsof -i:3000
$ rails server
=> Booting Puma
=> Rails 7.0.4.3 application starting in development 
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 5.6.5 (ruby 3.1.3-p185) ("Birdie's Version")
*  Min threads: 5
*  Max threads: 5
*  Environment: development
*          PID: 7011
* Listening on http://127.0.0.1:3000
* Listening on http://[::1]:3000
Use Ctrl-C to stop
```