OmniAICreator/Qiita-1.07M huggingface dataset:
【Laravel】－初学者向け　モデルについて

今回の記事は、データベースでやりとりする重要な部分、「モデル」について説明していきたいと思います。


# Model（モデル）とは？
Model（モデル）とは？
⇒データベースとやりとりする機能を担当しています。
特徴としては、データベースとのやりとりをPHPで書けるようにというのが特徴となります。
また、データベースとのやりとりを他の言語でやりとりすることも可能です。
そのようなことを **ORM（オーアールエム）** や **ORマッパー（オーアールマッパー）** と言います。

**Object-Relational-Mapping（オブジェクトリレーショナルマッピング）** と言われており、PHP以外にもJavaやPythonで他言語も使用できたりします。


# Eloquent（エロクアント）とは？
Eloquent（エロクアント）とは？
⇒Laravelでいうと、 **ORマッパー（オーアールマッパー）** のことをEloquent（エロクアント）という名前で作られています。

# モデルファイルの作り方について

モデルファイルの作成を下記の通りに作成できます。
コマンドプロンプトを開き、下記のコマンドをたたきます。

```
php artisan make:model Test
```

「App/Models」にファイルができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929458/0e4cb2a1-0a72-46b2-f8e8-52725090e1f8.png)


またコントローラやマイグレーションも同時生成することも可能です。

```
php artisan make:model Test -mc
```
**-mc** …オプションでつけると、マイグレーションとコントローラをのファイルを作成することも可能です。

# まとめ
Model（モデル）とは、データベースとやりとりする機能を担当しており、重要な役割を持っています。
AWS Certified AI Practitioner（AIF）対策：トークン・ベクトル

# トークン

トークンとは、言語モデルにおいて

***<font color="MediumVioletRed">『単語や単語の一部などの基本単位』</font>***

のことです。


```text
例えば、「犬が好きです」は

>「犬」
>「が」
>「好き」
>「です」

といったように分割されます。
```

:::note info
トークン化とは、テキストを小さな単位に分割するプロセスのことです。
:::

### トークンが長すぎると

モデルが文脈や意味をうまく捉えられなくなります。

また、モデルのメモリ消費や計算負荷が増大し、処理効率が低下します。

### トークンが短すぎると

文脈を十分に理解できないことが多く、予測精度が低下する。

### 生成されるトークンの長さを制御

生成されるレスポンスの長さは、トークン数の制限によって制御されます。トークン数が多いほど、長いテキストを生成することができます。トークン数を制限して、簡潔な解答を強制する場合にも利用できる

# ベクトル

***<font color="MediumVioletRed">『テキストデータを数値として表現し、言語の意味や文脈をモデルが計算できるようにする。』</font>***

単語や文がベクトルで表現されることで、モデルが単語や文の意味を数値的に捉えることで、類似したものを効果的に比較することができます。

```text
「犬」と「猫」は、類似したベクトルを持ちます。
```

###  <font color="MediumBlue">ベクトルの次元</font>

ベクトルは、数字が並んだリストであり、各数字が「特徴」を表現します。

具体例として、以下のようなベクトルを見てみましょう。

`[0.5, -0.2, 0.8]`

このベクトルには3つの数字が含まれているため、「3次元ベクトル」と呼びます。つまり、数字の個数がベクトルの次元を決定します。

例えば、10次元のベクトルは、以下のように10個の数字で構成されます。

`[0.1, -0.5, 0.3, 0.7, ... , 0.2]  # 10個の数字`

次元が高くなるほど、ベクトルが表現できる特徴の数も増えていきます。
cookie取得

```js
const express = require('express');
const cookieParser = require('cookie-parser');

const app = express();

// cookie-parserミドルウェアを使用
app.use(cookieParser());

// ルートでCookieの値を取得
app.get('/', (req, res) => {
    // クライアントから送られたCookieを取得
    const cookies = req.cookies;

    // Cookieの特定の値を取得（例: "user"というキーの値）
    const user = cookies.user;

    // レスポンスを送信
    res.send(`Cookieの値: ${JSON.stringify(cookies)}, user: ${user}`);
});

// サーバーの起動
const PORT = 3000;
app.listen(PORT, () => {
    console.log(`サーバーがポート${PORT}で起動しました`);
});
```
クラウドブラウザ分離(CBI)による未分類のリスクある宛先への安全なアクセス

# はじめに
本記事はゼットスケーラー株式会社として[Advent Calender 2024](https://qiita.com/advent-calendar/2024/zscaler)の一つとして投稿しています。以下の免責事項をご理解の上、記事をお読み頂けますと幸いです。

# 免責事項
本記事のコンテンツや情報において、可能な限り正確な情報を掲載するよう努めておりますが、 誤情報が入り込んだり、情報が古くなったりすることもあり、必ずしもその内容の正確性および完全性を保証するものではございません。そのため、本記事をエビデンスとしたゼットスケーラーへの問い合わせなどはご対応致しかねることをご理解頂けると幸いです。掲載内容はあくまで個人の意見であり、ゼットスケーラーの立場、戦略、意見を代表するものではありません。当該情報に基づいて被ったいかなる損害について、一切責任を負うものではございませんのであらかじめご了承ください。

# 1. 未分類サイトと課題とリスク
Zscalerが分類できない、またはまだ分類していないサイトへのアクセスをブロックすることは、間違いなく強固なセキュリティ対策ですがユーザーエクスペリエンスの低下や、ブロックされたサイトにユーザーがアクセスしようとしてサポートチケットが殺到するという代償が伴います。
この非効率な運用はサービスデスクの人員、セキュリティアナリスト、Zscalerの管理者の時間とリソースを浪費します。
一方、これらのサイトへのアクセスを許可すると、潜在的なセキュリティの脆弱性が発生するというジレンマを抱えてしまいます。

# 2. スマートブラウザ分離 でいーんじゃない？
Zscaler Internet Access(以下ZIA)のクラウドブラウザ分離(CBI)は、ユーザーの柔軟性と堅牢なセキュリティ対策をシームレスに実現するゲームチェンジャーです。

:::note info
2024年10月からGPUを利用した新しい画面転送方式に対応し、ローカルで動かすのとほぼ変わらないようなブラウザ分離が可能となりました。
:::

クラウドブラウザ分離では「スマートブラウザ分離」という機能があり
AI/MLモデルを使用して、悪意がある可能性のあるWebコンテンツを自動的に分離することが可能です。
つまりカテゴリによる未分類サイトであってもAI/MLがリスクが高いと判断したWebサイトを分離することで
エンドユーザーがこれらの宛先に安全にアクセスできるようになり、悪意のあるコンテンツやアクティビティに遭遇するリスクが軽減されます。これにより、ユーザーの満足度が向上するだけでなく、会社の貴重な資産も保護されます。
![AI/ML CBI](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3948001/252b3618-2926-7ee0-1eac-2de7c137c3e4.png)

# 3. ZIAの設定方法
ZIA 管理者ポータルで、[ポリシー]、[セキュアブラウズ] の順に移動します。
[AI/ML ベースのスマートブラウザ分離を有効にする] を [オン] に切り替えます。
![SmartIsolation Enable](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3948001/2fd5f489-e775-bac4-03cb-e401a7d9b694.png)
そして画面下部の[保存]ボタンをクリック。

最後にテナントへ設定反映するために[有効化]することをお忘れなく。

なお通常クラウドブラウザ分離を利用するためにはSSLインスペクションを適用している必要がありますが「スマートブラウザ分離」を有効にするとURL カテゴリの [Suspicious Domains] に対して [Smart Isolation One Click Rule] というタイトルの新しい SSL インスペクションルールが作成されます。

# 4. 動作テスト
ZscalerのAI/MLによりリスクが高いと判断されるWebサイトへアクセスしてみました。
<iframe width="560" height="315" src="https://www.youtube.com/embed/LCIMdWT0V8U" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

アクセスしたら即座にクラウドブラウザ環境へリダイレクトされ、安全に分離されました。


このようにスマートブラウザ分離を利用することにより未分類のWebサイトであっても過去の攻撃データを学習したAI/MLにより自動的に高リスクサイトのみブラウザ分離を行い
安全性と利便性の両立が可能となります。
ChimeraXで作図するときによく使いそうなコマンドの備忘録

Chimera XはUCSFの開発した、タンパク質などの構造を解析するために用いるプログラムです。
https://www.cgl.ucsf.edu/chimerax/

論文用の図などの作成に使用頻度の高そうなコマンドを備忘録の意味もこめて、ここに並べます。


# ドメインごとに色分けする。

例１、3つのドメインがあるタンパク質を色分けする。
普通に色付けすると全ての原子がその色になってしまうため、最後にbyhetroによって炭素原子以外を原子種ごとの色に戻すと良い。
colorコマンドを基本的に利用(https://www.cgl.ucsf.edu/chimerax/docs/user/commands/color.html#target)。

```
color #1/A:1-420 cyan
color #1/A:421-500 green
color #1/A:501-860 orange
color #1 byhetero

```


# リガンド周辺のマップのみ表示させる

#1にPDBファイルを、#2にmapファイルを開いた場合。mapファイルはなんでも良い。
以下の操作で表示させたのちにズームし、微調整すると良い。
volume () とselect (https://www.cgl.ucsf.edu/chimerax/docs/user/commands/select.html), view (https://www.cgl.ucsf.edu/chimerax/docs/user/commands/view.html) を利用。


```
#1001は目的のリガンドの残基番号
select #1/A:1001

#選択した残基、周囲3Åのmapを新しいオブジェクトとして生成する。
volume zone #2 near sel range 3 newMap true

#目的の残基にズームする。
view #1/A:1001

#選択を解除してなければ以下のコマンドでもOK
view sel

#以下のように、viewのみを打てば全体表示に戻れます。
view
```

# 目的残基のモデルを表示させる

選択された範囲の原子モデルが表示される。
show (https://www.cgl.ucsf.edu/chimerax/docs/user/commands/show.html) を利用

指定した範囲の原子モデルを表示する場合。
```
#274から290の間の原子モデルを表示する。
show #1/A:274-290 atoms
```

cartoonを表示する場合
```
#274から290の間のcartoonを表示する。
show #1/A:274-290 cartoons

# #1のchain A、全体のcartoonを表示する。
show #1 cartoons

#以下の様にコンマで区切ると目的の残基だけ表示できます。
show #1/A:167,308,207,401,302 atoms
```


# モデルを重ね合わせる。


```
align #1 toAtoms  #2 matchChainIds true
```

# マップをタイル表示する。

```
#tileを実行する。
tile

#元に戻す。
tile off

#間隔を調整する。1~2の間で見やすい範囲に配置を調整するといい。
tile spacingFactor 1.5

#tile 列の数を調整する。数字をサンプル数にすると横1列になる。
tile columns 4

#間隔を調整すつつ列の数を調整する。
tile spacingFactor 1.2 columns 4
```
ウォーターフォール開発におけるPMの実践

## はじめに
ウォーターフォール開発は、開発プロセスを初期段階で完全に計画し、階段的に進める手法です。この手法の特徴は、各ステップが明確に分割され、次のステップに進む前に必ず前のステップを完了させることです。典型的なプロセスは以下の5段階に分けられます。

1. **要件定義**: プロジェクトの目的を明確化し、具体的な要件を定量化します。
2. **設計**: 要件を満たすためのソリューションを設計し、詳細設計書やプロトタイプを作成します。
3. **実装**: 設計に基づいてコードを実装し、システムを構築します。
4. **テスト**: 実装したシステムが要求を満たしているか検証します。単体テストから総合テストまで段階的に実施します。
5. **運用・保守**: 完成したシステムを本番環境に導入し、運用を開始します。

これらの段階的アプローチにより、進捗状況を視覚化しやすく、各段階で成果物が明確に定義されます。

---

## ウォーターフォールの難しいところ
ウォーターフォール開発の最大の課題は、**初期段階での計画が固定される**ため、後からの要求変更が困難になる点です。
特に、要件に漏れがあった場合、大きなリスクとしてプロジェクト全体に影響を及ぼします。
また、各段階を完了しない限り次の段階に進めないため、遅延が生じるとプロジェクト全体の進行が停滞します。

---

## メリットとデメリット

### メリット
- 明確な計画に基づいて進行するため、予測可能性が高い
- 初期に要件を確定するため、スケジュール変更のリスクが低い
- 文書化が進むことでプロジェクト終了後の記録が残る

### デメリット
- 開発中の要求変更に対応しづらい
- 各段階が完了しない限り次に進めないため柔軟性に欠ける
- 情報調整が不十分な場合、品質や精度に悪影響を及ぼす

---

## 成果物
ウォーターフォール開発では、各段階で明確な成果物が生成されます。

- **要件定義**: 要件書、エラーチェックリスト
- **設計**: 詳細設計書、プロトタイプ
- **実装**: コード、ユニットテスト結果
- **テスト**: 総合テスト報告書
- **運用**: 運用マニュアル、保守計画書

これにより、進捗の可視化と関係者間での認識の共有が可能になります。

---

## アジャイルとの違い
ウォーターフォール開発は、初期段階で計画を固定し、その計画に従って進めます。一方、アジャイル開発は小さな反復的なサイクルで開発を進め、計画変更に柔軟に対応できます。そのため、変化が多いプロジェクトや、早期にリリースが求められるプロジェクトにはアジャイルが適しています。

---

## PjMとして重要視しているポイント

### WBSを作成する
大規模プロジェクトでは、作業を細分化し、それぞれの担当者と期限を明確にする必要があります。WBSを作成し、進捗を管理することで、遅延の原因を早期に特定できます。

### 進捗状況を日々確認する
進捗状況は朝会や夕会で定期的に確認し、問題があれば迅速に対応します。これにより、タスク遅延の影響を最小限に抑えられます。

### 情報の整理と最新化
仕様変更や外部調整の情報を常に最新の状態に保つことが重要です。情報は構造化して整理し、関係者が簡単にアクセスできるようにします。

### PDCAを回す
プロジェクトを振り返り、改善を継続的に行うことで、失敗のリスクを最小限にします。KPTやSSSを活用し、次のアクションを具体化します。

---

## 結論
ウォーターフォール開発は、計画性と予測性が重要なプロジェクトで有効な手法です。しかし、柔軟性が求められる環境では、アジャイル開発との比較検討が必要です。PjMとしては、適切な手法を選び、進捗と情報を管理しながら、プロジェクト成功に向けてチームをリードすることが求められます。
LLMコーディングができるbolt.diyがやばい

# はじめに

しばらくQiitaに記事を書いてなくて浦島太郎状態なので、直近で感動したbotl.diyについて書いて勘を取り戻す。

# 事の発端

bolt.newってアプリ開発AIが一瞬でフルスタックreact SPAを生成してくれるので感動してリポジトリ作って、gitlab pagesにデプロイして遊んでたところ、「bolt.diy を温かく歓迎してください⚡」という件名のメールで稲妻が届いたんですよ。

メールの送信元はStackBlitzeというWebブラウザで動くオンラインのコードエディタサービスのCEO、エリック・シモンズからだったので、これは試さないとと思いました。

# bolt.diyってなに？

https://github.com/stackblitz-labs/bolt.diy

もうリポジトリ眺めてるだけでワクワクしてくるでしょう？

# Git CloneしてAPIキーをconfigに書くだけ

stackbiltzにgithubログインするだけでも捗っていたのに、アプリ生成AIのコーディングを試せるのだからすごい。

`pnpm run dev`

でPC上で生成AIが動くし

dockerやdocker-composeでも立ち上がるので、開発環境構築はすっ飛ばせる。

# 何がやばいの？
LLMコーディングを体験してしまうともう離れられない気がする。
ユーザーの立場でしかできない技術アウトプットとは？

# 「それって中の人に喋ってもらえばよくない？」

私はAWSを使ったシステム開発に業務で携わることが多く、仕事に生かすためにJAWS-UGなど社外の技術コミュニティに参加したり、自分もブログや登壇などのアウトプットをして情報共有を行っています。

https://jaws-ug.jp/

利用者＝ユーザーの立場で、技術や製品について他者にレクチャーをするようなアウトプットを行っていると「これって製品ベンダーさんに喋ってもらった方が良くない？」と思われる方もいるのではないでしょうか。

しかしながら、本家の「中の人」ではなくユーザー同士でレクチャーしあうことは、アウトプットする人の自己研鑽になるだけではなく、**聞き手にとっても「本家の話より有益」** なケースが実はかなりあると思います。


# あえて「ユーザー側」の話を聞くメリット

### 使う人の立場で、等身大の言葉で分かりやすく話せる

クラウドサービスでもソフトウェアでもSaaSでも、ベンダーさんの「中の人」のプレゼンやドキュメントって、なんか聞いていてつまらなくないですか？

抽象化されすぎていて「実際どうなの？」がイメージしづらかったり、耳障りの良い言葉ばかり並んでいたり、逆にドキュメントは厳密さを重視するがゆえに何言ってるのか過剰に分かりづらくなっていることも多いですよね。

https://www.itmedia.co.jp/news/articles/2205/10/news123.html

技術の調べ物をする際、公式ドキュメントではなく最初にQiitaの記事などを見てしまう方はかなり多いでしょう。
なぜかと言うと、やっぱり平易で分かりやすいし、網羅性は気にせず「一番使われるこのケースだけでいいから手っ取り早く知りたい！」のニーズを的確に満たしているからだと思います。


### どこにも忖度せず、デメリットや競合比較など赤裸々に共有できる

製品ベンダーさんはもちろん、自社の利益を上げることが必須のゴールですから、ビジネス上の不利益や自社ブランドのイメージに影響するような、ぶっちゃけすぎた正直ベースの話や、競合他社への言及は基本的にしてくれません。社内のマーケティングガイドライン等で厳密に禁止されている会社も多いでしょう。

ユーザーの立場であれば、「実際に使ってみてどうだったか」「自社の要件の場合、こういった理由からA製品と比較したうえでB製品を選定することとなった」等の知見を共有することは自由ですし、それこそ多くのユーザーが実際に聞きたいの話のはずです。

:::note warn
自由とはいっても、一般的な社会常識やビジネス上の関係性などを踏まえれば、無闇やたらに特定製品をけなしたり競合製品を煽るようなアウトプットが好ましくないのは当然です。良識は弁えましょう。

例えば製品比較のアウトプットでは「ダメなところ」よりも「各製品の良いところ」にフォーカスして表現すると、ネガティブな反響を避けやすいでしょう。
:::

### 何よりポジショントーク不要のため、心から楽しく好きに話せる

ベンダーの「中の人」は、自社製品がいかに好きであったり、他者製品にいかに不満なところがあったり、もっと分かりやすい機能の例え話があっても、なかなか自社の看板を背負ったプレゼンやドキュメントでは表現に限界があるでしょう。

ところがユーザーの立場で、いち技術者としてのコミュニティにおけるアウトプットであれば、法規制やベンダーの各種ガイドライン、一般的な社会常識にさえ抵触していなければ表現方法は自由です。自分の経験や好きな技術について、好きな方法で分かりやすく・面白く語ることができます。

聞いていて楽しい話は、理解しやすく身にも付きやすいのは言うまでもありません。


# まとめ

特定の技術や製品について学習するうえで、「教科書」として公式ドキュメントや中の人のプレゼンテーションが必要であることは言うまでもありません。

その前提で、ユーザーによる発信・アウトプットも同じぐらい重要な意味を持っており、それは長期的にみてベンダー・ユーザーの双方にとってWin-Winであると私は考えています。

技術的な発信をする人も、それを見て情報収集する人も、ベンダーの「中の人」だけでなくユーザーによるアウトプットをうまく活用して、ITの仕事をもっと楽しく・レベル高くできるといいですよね！
3年後を目指したAWS全冠戦略をフェルミ推定する

## はじめに

NTTテクノクロスの渡邉 洋平です。

これはただの自慢ですが、私はAWS認定資格を全て保有するJapan AWS All Certifications Engineers に2022-2024の3年連続で認定されています。

https://www.ntt-tx.co.jp/whatsnew/2024/240628.html

https://www.ntt-tx.co.jp/whatsnew/2023/230428.html

https://www.ntt-tx.co.jp/whatsnew/2022/220623.html

よくある認定資格取得のアウトプットは、取得する時点をゴールにしたものです。しかし全冠保有者にはその後の更新という現実があり、私もそれと戦っています。

ふと気づいたのですが、個々の認定資格のポイントや取得順はよく話題になりますが、”早く取れたぜ！”という自慢こそあれ、具体的な期間やペースに触れた内容は多くない認識です。

そこで今回は切り口を変えて、**AWS認定資格全冠後の更新**を踏まえた、認定資格全冠チャレンジに必要な数字を考察していきます。

### Q1. AWS全冠を目指す適切なペース配分は「何日」？

例えば巷の記事を見ると、2か月や3か月で全冠している人を見受けられます。

https://qiita.com/minorun365/items/8a386325b83b5c86818f

https://zenn.dev/acntechjp/articles/d45ef2081cb390


いやその速度感は無理だな～と感じつつ、「適切なペース」ってなんだろう？と思いませんか。この機会にちょっと考えてみましょう。

2024/12現在、AWS認定の有効期限は**原則3年**です。つまり全冠に3年以上をかけると失効する資格が出てきます。
ちなみに昨今は認定資格を受験できる時刻帯の制約が強まったので、取得は2認定/日ペースが限度でしょう。
つまり全認定数を12とした時、全冠するまでには`6day < x < 1095day` くらいで取得する。という考え方が一般的でしょう。**最短一週間から三年**まで、ですね。肌感覚的には半年～2年くらいが妥当なのかなとざっくり思っていたので、収まっています。


### Q2. 1認定試験あたり、「何ヵ月で合格」するのが適切？

AWS認定資格の数量について、ここ数年は10-13個の推移です。取得までの日数と資格数を見積もることで、認定資格取得の具体的な目標を立てられます。

例えば、年2件以上取得！という目標では全冠には届かなさそう。というのは何となくわかると思います。3年で6認定ですし、4年目以降は2件ずつ失効し始めるからです。(Associate -> Proは除く)

そうすると3年で13認定を取得には、年5件ペースで十分なのでしょうか。例えば今年、以下の3資格が新設されたのを考えると余力が必要です。

https://aws.amazon.com/jp/certification/certified-ai-practitioner/

https://aws.amazon.com/jp/certification/certified-data-engineer-associate/

https://aws.amazon.com/jp/certification/certified-machine-learning-engineer-associate/

これに耐えられるペースを考慮すると、年6～7件の取得が必要なのではないでしょうか。2か月毎に認定されるという目標を確実にクリアするにあたって、合格・不合格時には2週間の受験不可期間があることを考慮すると、**1ヵ月～1.5か月に1件**という数字が一つの目標になりそうです。

### Q3．”毎月資格”が一生続くの？

とはいえ、先ほどの1.5か月に1件というのは、認定資格0、１つも持っていないところから始めた場合の話で、いわば最悪値のようなものだと考えてください。AWS認定は、上位の資格を取得することで、下位資格の有効期限を同時に延伸できます。

例えば2024年現在、下位となっているのは以下の5認定なため、全冠者が更新するのは”最大7つ”です。

https://aws.amazon.com/jp/certification/certified-cloud-practitioner/

https://aws.amazon.com/jp/certification/certified-ai-practitioner/

https://aws.amazon.com/jp/certification/certified-sysops-admin-associate/

https://aws.amazon.com/jp/certification/certified-developer-associate/

https://aws.amazon.com/jp/certification/certified-solutions-architect-associate/

つまり、全冠後に3年で7認定を取得する計画にすればいいので、按分して**年2件ペース**にできます。本当に？


#### AWS認定は”毎年増える”

AWS認定はここ数年の間、2023年を除いて定期的に追加されています。

- 2024年
    - AWS Certified Data Engineer - Associate
    - AWS Certified AI Practitioner
    - AWS Certified Machine Learning Engineer - Associate
- 2022年
    - AWS Certified SAP on AWS – Specialty
- 2020年
    - AWS Certified Data Analytics - Speciality
    - AWS Certified Database – Specialty 
    
つまり2，3件は追加されることに備えると、**年4～5件ペース**と捉えるのが現実的にも思えます。


## まとめ

ここまでの見積もりをまとめると、このようになります。

1. AWS認定全冠は「MAX3年以内」のペースを目指すと良さそう
2. 0から目指す場合、年6～7認定と捉えると無理がない
3. 全冠したら年2～3認定ペース、MAXでも年4～5認定のペースと想定するとよい

いかがですか？ このような計画を参考に勉強してみると、より具体的に資格取得に向けたアクションを取れそうですね！


### 余談

せっかく私の取得履歴・計画を記しておきます。

- 2021年：7認定の取得
- 2022年：2認定の取得・更新
- 2023年：3認定の更新
- 2024年：6認定の取得・更新(2つ取得済)

おいおい、あと4ヶ月で4つあるぞ。誰か助けてくれ。
AWS re:Invent 現地で100%楽しむためのコツ

# はじめに

AWS re:Invent 2024が終わって1週間ほどが経過しました。
私は現地で参加しましたが、参加者がかなり多く(2024年は約6万人)、会場もかなり広いので現地での立ち回りが重要になります。

私は今回が初めての参加で、もっとこうしておけばよかったなということがいくつかありました。
来年参加する人や将来もう一度参加するかもしれない自分のために備忘録として残しておきます。

# AWS re:Inventとは
毎年12月頃に開催されるAWS主催のイベントです。
2000以上のセッションとAWSと企業の展示などがあります。

アメリカのラスベガスで6つのホテルを会場として開催されます。

![slack-imgs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/d0d9b478-a415-f6dd-8967-049fc741938f.png)


# コツ

## 1.目当てのセッションは予約開始と同時に予約する

およそ2ヶ月前にセッションの予約が開始されます。
セッションが膨大なので自分が興味のある分野に絞って事前にどんどんお気に入り登録しておきましょう。
開催までに予約に空きができるかなと甘い考えを持っていましたが、予約できなかったものが空く可能性は低いです。

**2024年は予約開始の10分前くらいに何故か予約できるようになっていたので油断せずに時間前から張り込みましょう**



## 2.セッションの会場をちゃんと見る

re:Inventの会場はめちゃくちゃ広いです。
移動手段としては徒歩、モノレール、バスがあります。
KeynoteやExpoが開かれるメイン会場のVenetian(3)からMGM(5)、Mandalay Bay(6)に行こうとすると余裕で1時間くらいかかります。シャトルバスは渋滞に巻き込まれると想定以上に時間がかかります。

セッション開始の10分前についていないと予約をキャンセルされるので、1時間30分〜2時間くらい余裕がないときついです。

そして、何より会場の移動は疲れるので同じ会場のセッションに固めることをお勧めします。


![スクリーンショット 2024-12-12 14.52.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/08b97eb2-6f17-ab48-5715-76b27049a406.png)



## 3.予約していないセッションを見るときは1時間前から並ぶ

人気のセッションはめちゃくちゃ並びます。
待機列が長すぎて30分くらい前に並ぶことすら拒否されるセッションもありました。
**並んでも見ることができるかわからないので、予約で本気を出すことをおすすめします。**

## 4.なるべくVenetianの近くに泊まる
KeynoteやExpoがVenetianで実施されるので、近ければ近いほど良いと思います。
Keynoteは8時からが多いので、近くに泊まるだけでだいぶ楽になると思います。

私はMGMに泊まりましたが、朝起きて移動するのがなかなか辛かったです。
近くの宿を選べない人は早起き頑張りましょう！


## 5.NEW LAUNCHのセッションはKeynote後にを確保する

re:Invent開催の1~2週間前に追加される新規のセッションです。Keynoteで発表されるアップデートに関するセッションが含まれています。中にはアップデートと全く関係ないものもあります。

Keynote発表前にはタイトルが「Coming Soon」となっており、DAT＝Database、SVS=Serverlessなどカテゴリだけでしか判断できません。

私はNEW LAUNCHが追加されたタイミングで他のセッションを捨てて予約しましたが、タイトルがわかると興味のないセッションがいくつかありました。Keynote後に内容が確定したタイミングでもまだ空きはあったので、気になるセッションを捨ててまで予約はしなくてもいいかなと思いました。



<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/51bb8eab-324a-7ff0-f42d-02633b69a9b5.jpeg" width="300px">



## 6.XでSWAGの情報を集める

SWAGを集めたい人はXで情報を集めましょう。
MA-1のジャケットや認定者のTシャツ情報はXから取得してもらうことができました。
投稿してくれた人に感謝申し上げます。

<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/caa4557d-1724-b00e-d66b-9f4bc5b8713a.jpeg">


## 7.乾燥対策をどこまでやるかは人による

渡航前はハンドクリーム、リップクリーム、のどぬ～るぬれマスクが必須と思ってましたが、1週間くらいだったらなくても過ごせると思います。

私の場合は日中に鼻の中が乾燥してずっと鼻血が出ていたので、鼻の中に塗るワセリン等を持っていけばよかったなと思いました。

# おわりに

re:Inventに参加してみて、現地ならではの雰囲気を味わうことができてとても貴重な経験でした。

また機会があれば今回の経験を活かしてもっと上手く立ち回れるようになりたいなと思います。
こうやってエラーは解決しよう

# どんな記事？
- 筆者が何年かかけて編み出したエラー解決法を紹介します
- 初心者の方でもわかるように書きます
- 注意事項まで細かく解説します

# エラー発生！
```python
import json

data = {
    "hoge":123,
    "huga":"foo"
}

with open("data.json") as f:
    json.dump(data,f,indent=4)

# -> FileNotFoundError: [Errno 2] No such file or directory: 'data.json'
```
このエラーが解決できなかったということにしておきましょう。
### 方法1.検索する
![Search-on-google](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930283/fab807e0-a7d3-6758-567b-5a9b8da51095.png)
GoogleやQiitaなどで調べれば、大体のエラーは解決法が出てきます。

:::note warn
#### 注意
今回の場合、FileNotFoundError: [Errno 2] No such file or directoryの部分だけ検索しましたが、data.jsonの部分は含まないでください。
他のファイル名の場合が多いからです！
:::

### 方法2.エラーを翻訳する
![Translate-on-deepl](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930283/b5460459-07d7-931d-f314-a58fb5603924.png)
エラーを翻訳すれば、その内容がよくわかるかもしれません。
個人的に[Deepl翻訳](https://www.deepl.com/ja/translator)はおすすめです:cheese::cake:

:::note warn
#### 注意
記号などが多く含まれていると、正しく翻訳されないことがあります。
:::

### 方法3.エラーをもうちょっとよく読んでみる
```text
Traceback (most recent call last):
  File "c:\Hoge\foo.py", line 8, in <module>
    with open("data.json") as f:
         ~~~~^^^^^^^^^^^^^
```
問題になっている行をよく見たら、何か得られるかもしれません。

:::note warn
#### 注意
ライブラリ等が絡んでいるとエラーが複数表示されることもあります。
:::

### 方法4.ChatGPTに聞いてみる
![UseChatGPT](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930283/83e3a646-ba92-ec71-a635-d6e941d6a941.png)
エラー内容など、情報をできるだけ多く与えることがエラー解決につながります。

:::note warn
#### 注意
個人情報、パスワードは入力しないこと。
:::

### どうしても分からない時は
方法1~4を試しても分からない時は、
Qiitaを含む質問サイトに書き込むことをお勧めします！

# 最後に
エラーが出たとき、過去の経験から「同じエラーが出たことは無いか」「どこかに間違いは無いか」などを考えることができるといいですね！

ちなみに...
```python
import json

data = {
    "hoge":123,
    "huga":"foo"
}

with open("data.json","w") as f: # Writeモードでdata.jsonを開く
    json.dump(data,f,indent=4)
```
例のコードはオプションを追加すると正しく動作します！
最後まで読んでいただきありがとうございます。
コメント、いいねをしてくれるとすごくうれしいです！
UnrialEngine5：プロトタイプへの道２

# 前回の続きをやっていきます
- [前回](https://qiita.com/akulsto/items/c7ec898c1e433d2778d4)を振り返りたい方はここから飛べます。

## 前回の振り返り
- 新規プロジェクトから「ブループリント」「BPの中でキューブ」「タイムラインノード」などを作成してきました
- ではやっていきます
## タイムラインノード作成
- 「MovementRange」のタイムラインノードで右クリックから「CurveFloat_0にキーを追加」を３回行い、時刻入力をそれぞれ「0,0」「2.5,800」「5.0,0」とします
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/b253e568-2f9b-04e5-ac0e-13161a497b24.png)
- そしたらつぎに画像のようにループボタンを押します。青くなったら有効化ということです
- 次にその作業した画面の真ん中上あたり「イベントフラグ」をクリックします（画面のタブ切り替え）
- ここで先ほど操作したタイムラインノードのupdateをクリックし右側へ引っ張って何もない所で離すと、「実行可能なアクション」が選択できます。ここで「set Relative Location(MovingBorad)」を選択します

## 新しいノードを作成
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/4c6b459f-e766-66a2-6d0d-08b76c46307f.png)
- こんな画面が出てきたと思います
- ここで「New Location」を右クリックで「構造体ピンを分割」を選択します
- ｘ、ｙ、ｚ軸が1つだったのが３つへ分割されます
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/0a51077f-ed1d-c210-53f6-14c3108cb7c2.png)
- 画像のようにノードの接続を行います（ｙ座標のところ）
- そしたら画面左上の「保存」と「コンパイル」を行います。完了したらブループリント編集画面は閉じます

## 補足
- タイムラインノードの開始の接続は下の画像の「Event BeginePlay」からはやしてください
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/9dd84097-2428-a7ee-ec1b-15df42ffd99f.png)


## BPの設置
- さっき作ったBPをステージへドラック＆ドロップすると、床が動いてます！！
- 正しくは、ドロップドラックして、実行して、動く、です。しかしそのオブジェクトは物理演算などはないため、固定モーションを行うただのオブジェクトです

## 次のBP作成
- 同じ要領で「ブループリント作成⇒アクター選択⇒コーン選択⇒名称の変更(Needle)」を行いトゲを作っていきます
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/8f9fb56e-5737-7a38-d29e-d8239a1c39a9.png)
- トゲであるため、当たり判定を追加します「追加」から「BoxCollision」を追加します
- 当たり判定のコライダー命名はお好きにどうぞ
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/40df525b-b84d-cbbd-9db5-34712ef6209a.png)
- Needleコライダーの形状を変えていきます
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/5f0b25e8-6afa-5399-f1fb-a164afed7053.png)
- ｘ：30.0、ｙ：30.0、ｚ：30.0にします
- トゲの当たり判定はトゲにある想定なので、現状だとトゲの真ん中つまり、当たり判定を上にずらします
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310502/267abf6a-6ddb-4297-201b-5e1f62c90039.png)

- 黄色いフレームが判定となります

- 次回へ続く
2024年、モバイルアプリ開発の進化とトレンドを振り返る

# はじめに

この記事は、株式会社スピードリンクジャパン Advent Calendar 2024 の17日目の記事です。

https://qiita.com/advent-calendar/2024/slj

## 2024年、モバイルアプリ開発の進化とトレンドを振り返る

2024年もモバイル開発界隈は大盛り上がり！  
新しい技術やイベントが次々と登場し、今年もめちゃくちゃ充実していましたよね。  
この記事では、2024年のトレンドをざっくり振り返ります

これを読んで2024年を締めくくり、2025年も楽しく開発していきましょう！🎉  

---

## 2024年、どんなリリースがあったの？

今年もクロスプラットフォーム開発界隈で話題のリリースがたくさんありました！簡単にまとめるとこんな感じ👇  

### 2月: 「待ってた！」の新バージョンが登場
Flutter 3.19とDart 3.3がやってきたー！以下の機能が追加されました👇  
- **google_gemini_ai パッケージ**のβ版がリリース  
- スクロール操作がめちゃスムーズに✨  
- **Dart 3.3**の「Extension Types」登場！型周りがさらに便利に！  

### 5月: Google I/Oで大発表！
Google I/OでFlutter 3.22とDart 3.4が発表されました。この時は「おぉー！」ってなった人も多いのでは？  
- **Flutter Web**がなんと！**Web Assembly (WASM)** のStable版に対応  
- **Dart Macros**の最新情報も公開  

### 8月: グラフィックス関連が進化しすぎ！
Flutter 3.24とDart 3.5では、グラフィックス関連が超パワーアップ！  
- **Impeller**や**Shader**が改善され、描画性能が爆上がり🚀  
- **Flutter GPU**のアーリープレビュー開始  
- UI構築が楽しくなる新しい**Sliver**機能追加  

---

## トレンドの状態管理パッケージ

開発者の永遠のテーマ（？）「状態管理、何使う？」問題！  
今年もいろいろ話題になったので、特に人気の3つをピックアップしてみました👇  

### 1. Riverpod
「日本といえばこれ！」な状態管理パッケージ。とにかく流行ってます。  
- **おすすめポイント**: 型安全で依存関係が明確！プロジェクトが大きくても迷子になりにくい。  
- **こんな人にオススメ**: 日本で転職したい人、大規模プロジェクトやりたい人。  
- **ひとこと**: v3が来るってウワサも！今後さらに注目されそう👀  
- 👉 [公式サイトはこちら](https://riverpod.dev/ja/)

### 2. Bloc
北米やヨーロッパで「みんな使ってる！」なBloc。海外の開発チームでは鉄板です。  
- **おすすめポイント**: Reduxライクな設計で超堅牢！イベント駆動型で管理も楽ちん。  
- **こんな人にオススメ**: 海外案件やりたい人、超複雑なアプリ作りたい人。  
- **ひとこと**: 「安心と信頼のBloc」、これは間違いない👍  
- 👉 [公式サイトはこちら](https://bloclibrary.dev/)

### 3. Provider
Flutter公式が「これ使ってみたら？」って推してるのがProvider。  
- **おすすめポイント**: シンプルでわかりやすい！学習コストが低いから初心者でも安心。  
- **こんな人にオススメ**: 小規模プロジェクトや、初めてのFlutter開発。  
- **ひとこと**: 「公式推し」ってだけで安心感あるよね😂  
- 👉 [公式ドキュメントはこちら](https://docs.flutter.dev/development/data-and-backend/state-mgmt/simple)

---

## 日本国内のイベントもアツかった🔥

今年も日本国内でたくさんのイベントが開催されました。その中から特に注目のイベントを3つご紹介！  

### Flutter Ninjas (6月開催)
FlutterNinjas ははじめての日本発海外向けの Flutter イベントで、Flutter大学の kboy さんを中心としたメンバーで運営されました🎉  

### 東京Flutterハッカソン2024 (11月開催)
Flutterを活用してプロダクト開発するハッカソン！ 

### Flutter Kaigi 2024 (11月開催)
FlutterKaigiは、Flutter/Dartをメインに扱う日本の技術カンファレンスです！  

---

## まとめ: 2024年も最高の年だった！

2024年も技術の進化とイベントの盛り上がりで大満足の一年でしたね！

2025年も、さらなる技術の進化やイベントに期待しましょう！みなさんの推しの状態管理パッケージや今年のハイライトも、ぜひコメントで教えてください🙌
学生向けFixstars高速化コンテスト参加記

:::note info
この記事は[木更津高専 Advent Calendar 2024](https://qiita.com/advent-calendar/2024/nit_kisarazu)の13日目です

prev -> [[初心者向け]クリーンなPython環境の構築方法](https://zenn.dev/kokastar/articles/994f8359e1fe4b) by @kokastar
next -> [920MHzに比べると国技館のBluetoothはカスや](https://zenn.dev/kokastar/articles/0857fac6ddf5b4) by @kokastar
:::

:::note warn
投稿日を忘れていたため非常に内容が薄いです，ｽﾐﾏｾﾝ:confounded:
:::

[学生向け Fixstars 高速化コンテスト 2024](https://fixstars-contest.com/contests/cpu2024)に参加しました
最終18.268点で17位でした
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983542/1ff236f6-c250-7a3b-30cc-5dab69bea1b1.png)

# 解法
Kが16か256かで場合分けをしました
並列化については，全体を通してなんとなくomp parallel forを書いたくらいです...
## K = 16
### 概要
- 宝石の種類ごとに，巡回畳み込みを用いて「ちょうどi回円盤を回したときに宝石が何個一致するか?」を求める
- 求まった数列を足し合わせて出来た数列の最大値が答え
### 高速化
- 畳み込みを書くのが初めてだったのでac-libraryを参考にしました
- IDFTは最後に一度だけ（線形性を用いた高速化）
    - 参考: https://noshi91.hatenablog.com/entry/2024/05/26/060854
## K = 256
- 種類ごとに愚直に一致するところを列挙する
### 高速化
- 必要なところだけを見る
    - k = 0, 1, 2, ..., K - 1について，A[i] == kとなるiをそれぞれ求めておく

# 反省
雰囲気でOpenMPを触っていました，SIMDとかキャッシュのこととかは何も考えていません...
【Amazon Connect】Amazon Connect インスタンスで Amazon Lex ボットが修正できる⁈

## 内容
Amazon Connectのリリースで、Amazon LexをAmazon Connectのコンソール上で編集できるというリリースがありました。
当記事では、上記の設定方法について記載しています。

https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/connect-conversational-ai-bots.html

## 設定

### 前提
AWSアカウントやAmazon Connectのインスタンスが作成されていることが前提となります。


### インスタンスでの設定

1. Amazon Connectコンソール画面で、対象インスタンスのエイリアスをクリックする

2. 左サイドバーの「問い合わせフロー」をクリックする

![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717693/5a1beea0-3b55-5da9-0e9d-188ff2dee431.png)

3.「Amazon Lex ボット」のセクションに移動する

4.2つのチェックボックスにチェックを入れる

![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717693/974b7739-27b8-3193-9cd1-7fce3941233a.png)

5.「保存」をクリックする



### Amazon Connect セキュリティプロファイル

- 「数字とフロー」セクションの「Bots」列の権限にチェックを入れる
    - こちらの権限を入れることで、Amazon Connectインスタンス上でAmazon Lexが表示・作成・修正などができるようになります

![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717693/1836d4f8-4aae-60ca-6db5-dc80b9616cc4.png)

- 「分析と最適化」セクションの「履歴メトリクス」のアクセス権限にチェックを入れる
    - こちらの権限を入れることで、Amazon Lexのダッシュボードを表示することが可能になります

![画像5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717693/2bf5efd0-0e8c-658e-e719-0ad70c8099aa.png)


### Amazon ConnectコンソールでのAmazon Lex表示確認

1.左サイドバーで「フロー」をクリックする

![画像6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717693/b07e0051-734c-994b-53f5-7d5a1d2fe0f7.png)

2.遷移後の画面上部にある「ボット」タブをクリックする
![画像7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717693/de7c2ca8-18c8-a0cd-bf16-3b3eccc01cb2.png)

3.以下のような画面が表示されます
すでにAmazon Lex側でボットを作成されている場合は、一覧として表示されます。

![画像8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717693/e5dcb142-b2ad-57d5-125b-8f9f8988ed0a.png)

4.ボット名をクリックすると、以下のような画面が表示されます
こちらの画面から、いままでAmazon Lexでやっていた編集や作成を行うことが可能です。
なお、「分析」のタブをクリックすると、「履歴メトリクス」の権限が必要ですが、ボットのダッシュボードを表示することもできました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717693/6454e693-dff8-f9ab-f067-ca79e7de4dd1.png)


### まとめ
これまで、Amazon Lexでボットを作成するためには、Amazon Connectではなく、AWSコンソールからAmazon Lexのコンソールに移動する必要がありましたが、この機能追加によって、簡単な修正はAmazon Connect内でもできそうだと感じました。
ただし、Amazon Lexの画面UIとは異なるので、慣れるまでに少し時間がかかるかもしれません。
OpenAIとServiceNowの連携（インシデントレコードからのナレッジ記事作成）

## はじめに
みなさんこんにちは、三井情報株式会社です。

近年、Now Assistの機能が充実し、インシデントの内容をまとめてナレッジ記事を作成することが容易にできるようになりました。
しかし、Now Assistの費用面で導入に少しハードルを感じてる方もいらっしゃるのではないでしょうか。
そこで今回は、使用料が比較的安価なOpenAIとServiceNowをAPI連携させ、ChatGPTの要約機能を使ってincidentレコードの内容からナレッジ記事のドラフトを作成させる検証を行いましたのでご紹介します。

## 実装概要
下図がイメージになります。
![実装イメージ図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3773072/6487cf30-e525-df32-a382-118877f5a96a.jpeg)

処理の流れとしては、
①incidentレコードを作成します。
②incidentレコードに作成した「Create Knowledge」ボタンをクリックし、ChatGPTに要約処理を実行させます。
　この時、要約対象となるのはincidentレコードのDescriptionとAdditional comments、Work notesです。
③ナレッジ記事作成画面のArticle bodyに要約内容を格納させます。
　ナレッジ記事のShort descriptionには、incidentレコードのShort descriptionを設定するようにしています。

## 事前準備
実装前に、以下の事前準備が必要です。
・OpenAIのアカウント作成
・API Keyの取得
・API Keyのシステムプロパティへの格納
手順については、[こちらの記事](https://qiita.com/Mariko_Tada/items/8d80ff7e0b817bba3abb#3-%E4%BA%8B%E5%89%8D%E6%BA%96%E5%82%99)をご参照ください。

## 実装手順
### 1．Flow Actionの作成
今回はWorkflow studioを使用してAPI連携とincidentレコードの要約を行いました。
### (1)カスタムアクションのInputを定義する
カスタムアクションのInputにincidentレコードのsys IDとDescriptionを設定します。

### (2)ステップ1：API Keyの取得、要約対象を抽出するScriptを記述する
Script Stepを追加し、システムプロパティからのAPI keyの取得および要約であるincidentレコードのDescriptionとComments and Worknotesの内容を結合するScriptを記述します。
また、取得したAPI Keyと要約対象を次のステップで使用できるようにステップのOutputにセットします。

### (3)ステップ2：REST Stepの追加
REST Stepを追加し、ステップ1のOutputをContentにセットします。
・Connection Details
　Credential：Bearer認証方式のため登録不要
　Base URL：エンドポイントのベースURL
・Request Details
　Resource Path：OpenAI APIの「Create chat completion」のパス
　HTTP Method：POST
　Headers：ステップ1で取得したAPI Keyをセット
・Request Content
　Request Body：ステップ1のOutputをContentにセット

### (4)ステップ3：要約結果を取得する
ステップ2のResponse BodyをInputにセットします。また、Response Bodyから要約結果を取得するスクリプトを記述します。
要約結果をステップのOutputとして設定します。

### (5)カスタムアクションのOutputを定義する
ステップ3のOutputをアクションのOutputとして設定します。

### 2．UI Actionの作成・Script includeの設定
incidentレコードに「Create Knowledge」ボタンを配置し、ボタンをクリックするとナレッジ記事のドラフト作成画面に遷移するように設定します。
### (1)UI Actionの作成
incidentレコードのフォームボタンに「Create Knowledge」ボタンを追加します。

### (2)Script includeの設定
Workflow Studioで作成したカスタムアクションを呼び出し、ナレッジ作成画面のフィールドに値をセットするスクリプトを記述します。

## 実行例
incidentレコードを開き、「Create Knowledge」ボタンを押下します。
![実行例1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3773072/70626f40-cb35-aa5b-98d2-81c56a3d25a9.jpeg)
![実行例2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3773072/6a1fe05c-55b9-6371-0b78-ea8184889b59.jpeg)

ナレッジ記事の作成画面に遷移し、ナレッジ記事のドラフトが作成されました。
![実行例3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3773072/1ce086c6-a387-a268-b4ba-6fd0caa7e98f.jpeg)

## おわりに
本記事ではServiceNowとOpenAI連携によるincidentレコードからのナレッジ記事ドラフト作成についてご紹介させていただきました。
最後までお読みいただきありがとうございました。
Elixirで作る「DDJ-FLX4のジョグ対応ブロックくずし」　その４　portmidiとRayexの相性

Elixirで作る「DDJ-FLX4のジョグ対応ブロックくずし」　その３　ジョグの入力イベントを作るのつづきです

https://qiita.com/t-yamanashi/items/87d734d7cf9f4b48b0ea

# 残念なお知らせです
portmidiとRayexの相性が悪くてコアダンプ吐いてしまいます

失敗したソース

```elixir
defmodule DdjBlock do
  @moduledoc """
  Documentation for `DdjBlock`.
  """
  alias Rayex.Structs.Rectangle
  use Rayex

  def main() do
    Task.async(fn -> ddj() end)
    t = Task.async(fn -> maing() end)
    Task.await(t , 500000)
  end

  defp ddj() do
    {_, input} = PortMidi.open(:input, "DDJ-FLX4 MIDI 1")
    PortMidi.listen(input, self())
    midi_in(input)
    PortMidi.close(:input, input)
  end

  defp maing() do
    init_window(800, 800, "DdjBlock")
    main_loop(true)
  end

  defp main_loop(true) do
    begin_drawing()
    draw()
    end_drawing()

    Process.sleep(100)
    main_loop(!window_should_close())
  end

  defp main_loop(_), do: nil

  defp draw() do
    rectangle = %Rectangle{x: 100.0, y: 100.0, width: 100.0, height: 50.0}
    draw_rectangle_lines_ex(rectangle, 1, %{r: 0, g: 255, b: 0, a: 255})
  end

  def midi_in(input) do
    receive do
      {^input, [{{176, 33, 65}, _}]} ->
        IO.inspect("右")

      {^input, [{{176, 33, 63}, _}]} ->
        IO.inspect("左")
    end

    midi_in(input)
  end
end
```
# やりたかった事

DDJ-FLX4とRayexを非同期で動かしたかった
コアダンプがどこに吐いているかわからなかったが
ソースをイジってmidi_in(input)のreceive doで落ちているとこまで理解した

困ったことに動く時もある

# 一旦諦めて実装方法を変更する
このままと企画倒れするのでなんとか実装を考えた結果

- DDJ-FLX4の入力と画面のプログラムを物理的に分離します
- DDJ-FLX4の入力と画面のプログラムはWebSockeで通信します
- WebSockeのサーバーも立てます

結果　`DDJ-FLX4の入力` → `WebSockeのサーバー` →　`画面`
の予定です

この視点ではまだコラム書いてないがこの方法で成功している



今回はここまで

つづく

https://qiita.com/t-yamanashi/items/d648b9c183181aafd3a2
子テーブルを親テーブルの１カラムにして管理する

# 概要
利用可能端末を保持する際に、子テーブルを用意して、利用可能端末分だけ親テーブルに紐づくレコードを子テーブルに登録すると、検索時の結合コストが上がって嫌だったので、１カラムで管理できるようにしました

# 利点
- 結合する必要がないので、SQL のコストが下がる
- １テーブルで管理できるので、登録/更新時のトランザクション制御が不要になる

# 方法
### 1. 管理したい端末種別分のビットカラムを用意する
　ex.) 8種類なら `BIT(8)` 型のカラム
 
:::note warn
OR マッパーによっては `BIT` 型をサポートしていないことがあるので、カラムのバイト数は増えますが `SMALLINT` 型などを採用するのが良いと思います
:::

### 2. 各ビットに端末種別を割り振る
各ビットに端末種別を割り振り、そのビットが `1` なら利用可能、`0` なら利用不可能として運用する
　ex.) 最下位のビットに PC を割り振る場合、`00000001` なら PC 利用可能


 # 実装
 具体的にどう使用するかを書いていきます
 ### 1. テーブル定義
 ```sql
 CREATE TABLE A (
     -- 省略
     device_type SMALLINT NOT NULL
 );
 ```
 端末は次のように割り振るとします
　- `00000000 00000001` → `PC`
　- `00000000 00000010` → `MOBILE` 
　- `00000000 00000100` → `SENYOU`

### 2. 検索
検索条件に使用可能端末を0から複数件指定する場合、次の SQL で検索します
```sql
SELECT * FROM A WHERE device_type & $1 > 0
```
この $1 には検索したい端末種別のビットORを渡します
　ex.) `PC` と `MOBILE` のどちらかが使用できるものを検索する場合
 　　　`00000000 00000001` と `00000000 00000010` をビットORした値
　　　`00000000 00000011` つまり10進数の 3 を `$1` に渡します
　　　もしレコードの `device_type` の値が `00000000 00000001` なら
　　　`device_type & 3` は `00000000 000001` になり
　　　`device_type & $1 > 0` が真になります

### 3. 登録
検索の逆で、使用可能端末のビットORを登録します
　ex.) `PC` と `SENYOU` を利用可能として登録したい場合
　　　`00000000 00000001` | `00000000 00000100` ＝＞ `00000000 00000101`
　　　つまり 5 を登録すれば良い

# おわりに
一見分かりにくいですが、管理するテーブルが増えず、バイト数も最小限に抑えられ、SQL のコストも下がるので個人的には好きです。
ただ、この方法で管理しているのを見たことがなく、バッドプラクティスなのかもしれないので、詳しい方がいたらご教授ください
2024年キャリアのためにやってよかったことと2025年の目標


2024年にエンジニアとしてのキャリアをより良くするためにやってよかったこと、そして来年やりたいと思っている事を発表します。

# 今年やってよかったこと
まず、今年やってよかったことから！
## 転職した
転職活動自体は年始からやっていて、5月に現在の会社に移りました。
転職前の職場もとても自分に合っていて働きやすく、悩みましたが今は転職してよかったと思っています。会社によって業務の中で経験できる技術やチームビルディングの幅は大きく変わってくるので、長期的なキャリア形成を考えたときに、なるべく自分が興味のあることや将来的に関与したいドメイン・技術に携われる仕事を選ぶ事は非常に重要だと思います。

## Courseraでコンピュータサイエンスの勉強をした
以下のCourseraの講義を受講しました。
https://www.coursera.org/learn/build-a-computer

https://www.coursera.org/learn/programming-languages
(これはA〜Cまであります）


NANDtoTerisに関しては記事も書きました。
https://qiita.com/sobacha/items/0b60002d746b1dbfb5c9

転職の狭間で時間があったため、前から興味がありつつも業務に直接関連してこない言語そのものの成り立ちや低レイヤの分野について少しでも知識の幅を広げられたことは非常によかったです。

## Rustの勉強を始めた
あちこちで話題になっていて気になっていた新しい言語を学ぼうと思ってRustを学び始めました。まだ始めたばかりなので戸惑うことが多いですが、今まであまり考慮してこなかったメモリ管理について学ぶことが多く、普段の業務にも考え方が活かせそうだなと思いました。　
これからもっと学んで使いこなせるようになるのが楽しみです。


## 社内イベントで登壇した
今まで登壇経験は一度もなかったのですが、社内向けのイベントで初めての登壇をしました！しかも英語だったので、後から録画を見ると緊張しすぎだなあと感じましたが、そのあと社内の人に登壇内容について話しかけてもらえたりなど、嬉しいことがたくさんありました。


## 社内勉強会を始めた
Rustの勉強会ついでにブラウザを実装する社内勉強会を主催しています。
勉強会の主催は初めてでもたついたり、参加者の方に時間を割いてもらえるだけのイベントになっているかいつも自問自答していますが、交流も目的の一つなので、もっとインタラクティブな勉強会にできるように来年も引き続き頑張っていきたいです。

# 来年やりたいこと

## Rustで何か自作のプロジェクトをやる
折角新しい言語を学び始めたので、慣れるためにも何か自分のプロジェクトをやってみたいなと思っています。具体的にどのようなプロジェクトにするのかはまだ決めていませんが、自作でAIを使った家計簿サービスか英単語を覚えるサービスを作れたらいいな〜

## Rasuberry Pi で何か作ってみる
上にも関与しつつ、組み込み開発に興味があるのでまずは家で余ってるモニターをカレンダーを常に表示するようにラズベリーパイを使ってやってみたいです。これは1日でできそうな気がする。多分。


## OSSに貢献する
これは個人的にチャレンジングな目標。みんなどうやって始めているんでしょう？
Rustのプロジェクトに貢献できたら一番いいのですが、OSSをどうやって決めるのか、どのようなコントリビューションを行うのかなど、ちょっと未定すぎる気がします。

# まとめ
エンジニアになって2年目、業務で一杯一杯、クッキーって何？とか去年まで言っていたことを考えると大分エンジニアとして形になってきたかなあと自分でも頑張りを感じます。引き続きAIに負けないように知識の幅や手札を増やしていけるよう、来年も挑戦していきたいです。
Schooのインターン経験で感じた4つのこと

この記事は[Schoo Advent Calender2024](https://qiita.com/advent-calendar/2024/schoo)の13日目の記事になります。

こんにちは！25卒の内定者として開発のインターンをさせていただいている橋本拓海と申します。

この記事では実際に私がSchooのインターン業務で感じたことを4つの観点から説明させていただきます。

## 多様なバックグラウンドを持つエンジニアがたくさんいる
Schooには、豊富な開発経験を持っていたいり最新技術に精通しているなど若手からベテランまで幅広いエンジニアが在籍しており、中には教師キャリアからエンジニアになったメンバーが在籍しています。また一人一人がプロダクトに対する**強い責任感**、**品質向上意識**を持っているため、目的達成に**圧倒的熱意**を持って取り組んでいる環境といえます。
少人数でも、優秀なエンジニアから直接指導を受ける機会も多く、技術的な成長を実感できる環境が整っていると思いました。

## いろんなことにチャレンジさせてもらえる
私が現在取り組んでいるタスクは、戦略策定から設計、フロントエンド/バックエンドを一貫して実装する形となっています。
技術的にも業務範囲的にも**やりたいと手を挙げれば、チャレンジしやすい**のはSchooという環境の魅力の一端だと感じます。
これは単なる経験の幅を広げるだけでなく、システム全体を俯瞰的に理解する良い機会となったように思います。

## コミュニケーションが取りやすい
Schooは風通しの良い組織です。**組織間の距離が近いため、エンジニアだけでなく、他部署のメンバーとも日常的にコミュニケーションを取ることができます。**
また、チーム内でも気軽に質問や相談ができる雰囲気があり、技術的な課題に直面した際も、速やかにサポートを受けることができました。
この密なコミュニケーション環境は、技術力の向上だけでなく、ビジネス感覚の醸成にもなるのではと思います。

特に、2024年10月の上場イベントでは、多くの先輩方から積極的に話しかけていただき、初めての全社イベントでありながら、たくさんのコミュニケーションを取ることができ、とても楽しい経験となりました。
このような機会を通じて、Schooの風通しの良さを実感できたように思います。

## とにかく成長できる
Schooの特徴として、技術面とビジネス面の両方で成長できる環境が整っています。Schooにはダブルメンター制度というものがあります。
新卒1年目は同じ部署の先輩の**直メンター**と違う部署の先輩の**ななメンター**の2名の方がサポートしてくれます。
私の場合、直メンターからは最新の技術トレンドやコーディングのベストプラクティスについてや業務の相談をしてもらったりしています。ななメンターからはビジネスの観点や社会人の基本的な行動、ユーザーニーズについても直接学んでいます。

また、多くのプロジェクトがスクラム開発で行われているなどからも、**組織/職種間の距離**が近いです。
たとえば、新機能の企画段階から開発チームとビジネスサイドが協力して推進する文化があり、技術的な実現可能性とビジネス価値の両面から議論を深められると思います。
さらに、**社内勉強会やナレッジシェアの機会**も豊富で、**エンジニアだけでなく、営業やマーケティングチームのメンバーとも活発に意見交換ができる環境**が整っていると思いました。
このような多面的な学習機会により、エンジニアとしての技術力向上はもちろん、ビジネス感覚も養える環境だと実感しています。

## まとめ
以上、Schooでのインターン経験を通じて得られた学びを共有させていただきました。
Schooは大規模な開発であり、学べることがたくさんあります。
またそういった環境だからこそ得られる貴重な経験がたくさんあると思います。
就活中の学生の皆さんも、選択肢の一つとしてSchooを検討してみてはいかがでしょうか。

---
Schooでは一緒に働く仲間を募集しています！

https://corp.schoo.jp/careers/graduates

https://corp.schoo.jp/careers
【まとめ】開発に使える便利ツール、サービス

## 作図
### Draw.io(diagrams.net)
https://app.diagrams.net/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394903/c86687f4-efdf-415b-eadb-b7d9be0f1014.png)
- 完全無料で全機能が利用可能
## データ可視化
### Ambient
https://ambidata.io/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394903/f2bcbcd5-d93c-12ee-3c20-013b86f503af.png)
- 8chまで無料で利用可能
## プッシュ通知
### pushbullet
https://www.pushbullet.com/
- iOSは非対応
## CAD
### Tinkercad
https://www.tinkercad.com/
## VisualStudioCode拡張機能
### indent-rainbow
https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow
### GitHub Copilot
https://marketplace.visualstudio.com/items?itemName=GitHub.copilot
### GitLens
https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens
webサイト開発における「要件定義」とは？ 

## はじめに
webサイト開発のエンジニアや、テクニカルディレクターとして働いていると、「要件定義」をしてほしい、「要件定義」のフェーズから関わってほしいと依頼されることは多いと思います。
一般的に「要件定義」は具体的に一体何をすることなのだろうと改めて思い、まとめてみました。
参考書籍：[Webディレクションの新・標準ルール システム開発編](https://amzn.asia/d/fktwLfL)

まとめるにあたり、以下のようなプロジェクトを想定します。
- **CMSを導入したWebサイト開発**
- **発注者 ＝ ディレクター**
- **受注者 ＝ フロントエンドエンジニア及び、バックエンドエンジニア（テクニカルディレクター）**

## 要件定義とは
「要件定義」の他に「要求定義」という言葉もあり、まずはその違い含めて考えてみます。
### 要求定義と要件定義
#### 要求定義
利用ユーザーの立場で考えて、ビジネス要件を整理すること。
クライアントがどのようなwebサイトを望んでいるか、どのような機能を「要求」
しているかなどをまとめていく。
##### 要求定義で考える4つの項目
1. 開発のゴールと手段
2. リリース時期
3. 開発体制
4. 運用方法   

#### 要件定義
「要求定義」をもとにwebサイトが担うべき役割を機能に落とし込み文書にまとめていく工程のこと。
要件定義書の作成において、メンバーの主観によって解釈が変わるような曖昧な記述は避けるようにする必要あります。
##### 要件定義で考える7つの項目
1. 全体方針
2. ビジネス要件
3. 機能要件
4. 非機能要件
5. 性能目標
6. セキュリティ要件
7. 運用管理     
#### 開発の遅延理由の主な原因
要求定義と、要件定義に関連する以下の5項目が、日本情報システム・ユーザー協会によると、開発の遅延理由の半数を超えているとしており、要件定義の重要性がわかります。
1. 目的不適当
2. 提案依頼書の内容不適当
3. 要件仕様の決定遅れ
4. 要件分析作業の不十分
5. 開発規模の増大   


以上が「要件定義」の概要になりますが、「要件定義で考える7つの項目」のうち、重要な**3. 機能要件**と**4. 非機能要件**について、本記事では深ぼって考えてみます。

## 機能要件
どのような機能を実装するのかをまとめたものになります。
CMSを導入するサイトにおいては、CMS化する要素や、絞り込み機能などの機能実装が該当してきます。
### CMS化する範囲や、機能実装する箇所を決める
次の観点で考えていきます。
- CMS化することや、機能を追加することで、明らかに効果（価値）が認められるか
- 開発の工数に対して効果が釣り合っているか

### 発注者と受注者との連携
機能要件は、発注・受注双方でヒアリングを重ねることで、より精度の高い要件の定義が可能になります。
#### 発注者の姿勢
自分たちが出す要求に対して、どのような機能があれば実現できるかなどのイメージは発注者は持つべきです。
そのために、類似するサイトやサービスを研究して、開発するサイトにも有効なのかなど、検討が必要です。
機能要件を決めるにあたり積極的に参加して、要求を伝えるだけで終わらないようにする必要があります。
#### 受注者の姿勢
発注者の目線に立って懸念となる事項は細かく確認を行い、技術的な知見を活かして、良い別案があれば、提案をしていくとよいです。
発注者からの要求の意図を汲み取り、機能要件を考えていく必要があります。

### 何を定義するか
1. **処理内容**
CMS化する要素、機能をリスト化します。
例えばコーポレートサイトだと、お知らせ機能や、役員一覧ページなど、機能のカテゴリ毎にまとめていくとよいです。
1. **画面構成や操作方法**
ユーザーインターフェースとなる「画面」について定義します。
画面一覧、画面遷移、画面の入出力要素、画面の操作を図表に用いて表現していきます。

## 非機能要件
### 非機能要件とは？
サイトのパフォーマンスや、機能の使いやすさ、CMS管理画面のわかりやすさなど、「機能ではない」要件を「非機能要件」と呼びます。
クライアントからヒアリングするものでもなく、テクニカルディレクターやエンジニアなどITの専門家が要件を定めていき、発注者やクライアントに説明していくものです。
### 非機能要件の例
非機能要件は例えば、以下のようなものがあります。
1. 性能・拡張性：動作速度などの性能
1. 運用・保守性：マニュアルなどの整備
1. セキュリティ：ウイルス対策や不正アクセス
1. UX：使いやすさなどのユーザー体験
### どう考えるか？
サイトの規模によっては、非機能要件のクオリティに差が出ていないのが理想ですが、開発側からすると、全ての案件で、すべての非機能要件を最上にするのは難しいため、どこかでバランスを取る必要があります。
発注者やクライアントなどと相談して、決めていけるとよさそうです。

## まとめ
機能要件や、非機能要件以外にも、セキュリティ要件や、ビジネス要件などもあり、「要件」を定義する工程は思ったより、幅広いと感じました。
自身の職能を超えて、いろんな観点や知見で、「要件定義」に関わっていければと思いました。
ChatGPT APIを使ったタスク自動化：Pythonで始める仕事効率化

# ChatGPT APIを使ったタスク自動化：Pythonで始める仕事効率化

こんにちは！今回は、**ChatGPT API**を使って、日常業務の効率化を図るPythonスクリプトの実装方法を解説します。  
最近ではAIを活用したツールが増えていますが、自分だけのカスタマイズAIアシスタントを作ることで、より具体的なタスクに対応できます。

---

## 目次
1. ChatGPT APIのセットアップ
2. Python環境の構築
3. 実際のコード例
4. 応用例：メール作成、自動レポート生成
5. まとめ

---

## 1. ChatGPT APIのセットアップ

まずはChatGPTのAPIを利用するために、[OpenAIの公式サイト](https://openai.com/api)からAPIキーを取得してください。  
以下のステップでセットアップします。

### 手順
1. OpenAIにアカウントを作成
2. APIキーを発行
3. 使用するライブラリ（例: `openai`）をインストール  
   ```bash
   pip install openai
   ```

---

## 2. Python環境の構築

次にPython環境を整備します。以下のバージョンを推奨します：
- **Python 3.8以上**
- 必要なライブラリ：
  - `openai`
  - `dotenv`（APIキーを安全に管理するため）

仮想環境を構築し、ライブラリをインストールしましょう：
```bash
python -m venv myenv
source myenv/bin/activate  # Windowsの場合: myenv\Scripts\activate
pip install openai python-dotenv
```

---

## 3. 実際のコード例

以下は、ChatGPT APIを使ってタスクを自動化するシンプルなPythonスクリプトです。

```python
import openai
import os
from dotenv import load_dotenv

# 環境変数からAPIキーを読み込む
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")

# プロンプトを送信して応答を受け取る関数
def ask_chatgpt(prompt):
    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[
            {"role": "system", "content": "あなたは優秀なアシスタントです。"},
            {"role": "user", "content": prompt}
        ]
    )
    return response['choices'][0]['message']['content']

# タスクの自動化例
if __name__ == "__main__":
    task = "次のミーティングのアジェンダを作成してください"
    result = ask_chatgpt(task)
    print("AIの提案:", result)
```

---

## 4. 応用例

ChatGPT APIを活用して、以下のようなタスクを自動化できます。

### (1) メール作成
指定された情報をもとにメールの本文を生成します。

```python
email_prompt = """
件名: プロジェクトの進捗について
本文: 今週の進捗状況を共有するメールを作成してください。ポイントは以下です:
- 納期は予定通り
- チームの取り組み状況
- 次のステップの提案
"""
result = ask_chatgpt(email_prompt)
print(result)
```

### (2) 自動レポート生成
プロジェクトのデータをもとに簡単なレポートを生成します。

### (3) 会話ログの要約
長いチャットログを要約してポイントを抽出します。

---

## 5. まとめ

ChatGPT APIを使うことで、日常業務の効率化や創造的な作業の支援が可能になります。本記事ではPythonを用いた基本的なスクリプトを紹介しましたが、応用次第でさまざまなシナリオに対応できます。

ぜひ、皆さんのプロジェクトにも取り入れてみてください！
1週間で3つリリースした個人開発からの気づき

## 概要

ここ1週間(11月末あたり)で下記の3つを個人開発してみたのでその時の気づきをまとめました。
zennでも同様の内容で投稿していますが、それにいくつか項目を追加しました。

https://zenn.dev/wakuwaku/articles/7c71b9ce02ba0a

https://zenn.dev/wakuwaku/articles/63ed72cdfa6761

https://zenn.dev/wakuwaku/articles/41298b66b79506

## とにかくMVPリリースを心がける

個人開発においては 「早くリリースする」 ことが何よりも大事だと再認識しました。
作り込みすぎるとモチベーションが続かなくなるため、最小限の機能で公開し、改善を繰り返す方が効率的です。

MVPリリースするためにやったフローは下記です

https://zenn.dev/wakuwaku/articles/6dceb97f3c9573

## 同じ技術だと楽だけど飽きる

慣れている技術を使うと開発スピードは上がりますが、新しいことを学ぶ機会が減るため、モチベーション維持が難しくなることもあります。
「興味を引く新しい技術やアプローチを少し取り入れる」 のが個人開発を続けるコツだと感じました。

## 維持費を安くするのが大事

開発後に必要となるランニングコストが意外と大きな負担になります。
今回は 無料枠の多いサービスや低コストのインフラ を選ぶようにして、無理なく運用できる設計を心がけました。


## 作った後の宣伝が大変
サービスを作るのは楽しいですが、改めて認識したのがリリース後の宣伝や集客活動はかなり大変です。
個人開発でも最低限のマーケティング戦略を考え、リリース直後の行動計画をあらかじめ用意しておくべきだと感じました。

## AIがめちゃめちゃ便利

v0がデザインを良い感じに出してくれるので今まで個人開発で個人的に一番時間のかかっていたデザインの部分を大幅に短縮できました！

https://v0.dev/


## 名前つけるの面倒

凝った名前にすると大変なので適当にMVPのMV(Minimum Viable)の価値を名前にして最後に`くん`をつけるだけにしました。。。。。。

これは大きな間違いなのだろうか。。。。？


## グーグルアドセンスの審査厳しい

広告から収益を得たいと思いグーグルアドセンスに申請しても通ることができませんでした。
似たようなサービスで忍者AdMaxさんというサービスがあることを知りこちらを使用しました。


https://admax.shinobi.jp/

## 個人開発でお金を儲けるなんて夢のまた夢だなぁ

個人開発でサクッと作ってサクッとユーザー集めてお金儲けるなんて夢のまた夢だと気がつきました。
お仕事だと基本的にエンジニアはサービスをいかに良くするかだけに執着すれば良いですが、個人開発だとマーケテングやらやら考えることたくさんで開発はほんの一部であることを改めて理解しました。
【SQL】基本の用語メモ

### バイナリデータ
- 0と1の2進数で表示されるデータのこと。画像、音声、動画、プログラムなどがバイナリデータの形式で保存される
- 処理が高速
- 圧縮や暗号化も簡単

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/943997/dbd4624f-ba10-aec4-5f18-7d6a3eccc633.png)


### オクテットとバイトの違い
- 1オクテットは必ず8ビット
- 1バイトは必ずしも8ビットではない。8ビットがデファクトスタンダードってだけ


### 浮動小数点
123.45という形式の小数点をコンピュータが記憶できるような形式に表現した小数点（12345×10^-2）


### 単精度浮動小数点数と
有効桁数が小さい小数用の型


### 倍精度浮動小数点型
有効桁数が大きい小数用の型
DatabricksにおけるINVALID_PARAMETER_VALUE.LOCATION_OVERLAPエラー

[INVALID\_PARAMETER\_VALUE\.LOCATION\_OVERLAP: overlaps with managed storage error \- Databricks](https://kb.databricks.com/en_US/unity-catalog/invalid_parameter_valuelocation_overlap-overlaps-with-managed-storage-error)の翻訳です。

:::note warn
本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

外部テーブルは、カタログやスキーマのストレージロケーションと重複させることはできません。そうではなく、サブディレクトリに作成すべきです。

# 問題

共有クラスターで、マネージドテーブルにマウントされた**外部ロケーション**([AWS](https://docs.databricks.com/ja/data-governance/unity-catalog/manage-external-locations-and-credentials.html) | [Azure](https://learn.microsoft.com/ja-jp/azure/databricks/data-governance/unity-catalog/manage-external-locations-and-credentials) | [GCP](https://docs.gcp.databricks.com/jp/data-governance/unity-catalog/manage-external-locations-and-credentials.html))にアクセスするために`dbutils`を使用しています。そのロケーションのパスを一覧しようとした場合、`INVALID_PARAMETER_VALUE.LOCATION_OVERLAP`エラーメッセージで失敗します。

エラーは、指定されたパスがマネージドストレージと重複していると言っています。

```py
dbutils.fs.ls("<storage-blob>://path/")
```
> AnalysisException: [RequestId=96dd6185-e0dc-4fe0-94ad-bd8ab05fbd8e ErrorClass=INVALID_PARAMETER_VALUE.LOCATION_OVERLAP] Input path url '<storage-blob>://path' overlaps with managed storage

# 原因

マネージドディレクトリに対するリストコマンドの実行はUnity Catalogではサポートされていません。カタログやスキーマのロケーションはマネージドストレージとして予約されています。

# ソリューション

外部テーブルはカタログやスキーマのストレージロケーションと重複させることはできませんが、ルートロケーションのサブディレクトリ配下に作成することはできます。カタログやスキーマで使用されるルートロケーションやその上位ディレクトリに外部テーブルを作ってはいけません。

例えば、ルートロケーションが`<storage-blob>://<some-root>`だとします。対応するカタログやスキーマのロケーションは、`<storage-blob>://<some-root>/__unitystorage/catalogs/<catalog-id>`となるマネージドストレージロケーションと同じものになります。

マネージドテーブルと重複しない限り、`some-root/`配下に外部ロケーションを作成することができます。この例では、`<storage-blob>://<some-root>/<some-path>/<external-table-path>`は外部ロケーションとして適切なパスとなります。

この例のロケーションのコンテンツを一覧しようとした場合には、実行は成功します。

### はじめてのDatabricks

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

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
Rider 2024.1 EAP 4のモニタリングツール

本記事はJetBrains公式ブログより引用した内容となります。

## Rider 2024.1 EAP 4のモニタリングツール
Rider には、.NET アプリケーションの実行時の動作をリアルタイムで追跡できる統合モニタリングツールが搭載されています。
このツールは、アプリケーションのパフォーマンスやメモリ使用量の分析、CPUやスレッドの動作を可視化することで、デバッグや最適化を迅速に行うのに役立ちます。

## モニタリングツールウィンドウ
新しいモニタリングツールウィンドは、Riderで.NETプロジェクトを実行またはデバッグするたびに表示されます。
![dotnet_howtos_20240212.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936166/a36604fe-7729-040c-2a18-5e10acd9e689.png)

主要なオペレーティングシステム（Windows、macOS、Linux）がサポートされています。サポートされているフレームワークやランタイムの一覧については、公式サイトのヘルプを確認してください。

## プロファイリングが簡単に
![dotnet_howtos_20240212-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936166/afc40f23-3949-487b-d651-5543d5eaab87.png)

あなたの.NETプロジェクトのプロファイリングがさらに簡単になりました。モニタリングツールウィンドウでたった1回のクリックで、以下のことができます：

- **スタックトレースデータの取得**  
  スタックトレースは自動的にスタックトレースエクスプローラーで開かれます。これにより、たとえば予期しないUIのフリーズに遭遇した際に、スレッドのロックを調査するのに役立ちます。

- **メモリスナップショットの取得**  
  メモリ使用量の急増や頻繁なガベージコレクションイベントに気付いた場合、メモリプロファイリングセッションを開始する必要はありません。ボタンをクリックするだけでスナップショットを取得できます。スナップショットが収集されると、dotMemory プロファイラーで開かれます。

- **パフォーマンスプロファイリングの開始**  
  パフォーマンスプロファイリングも同様です。サンプリングまたはタイムラインプロファイリングデータの収集を開始し、それを dotTraceプロファイラーで開くことができます。

## CPUとメモリのチャート
「チャート」タブでは、リアルタイムのデータが表示されます：

- CPU チャートは、CPU 使用率だけでなく、アプリケーションの例外も同じタイムラインに表示します。
- メモリ チャートは、ヒープサイズやガベージコレクションイベントも表示します。

## カウンターとメトリクス
![dotnet_howtos_20240212-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936166/29021ec5-270c-bdaf-49ee-f528745fe81d.png)

「カウンター」タブでは、さまざまなカウンターおよびメトリックプロバイダーからのリアルタイムデータが表示されます。設定 | ビルド、実行、デプロイ | モニタリング で、プロバイダーのリストをカスタマイズできます。もし自分のライブラリが独自のメトリクスを提供している場合、それらも追加することができます。

![dotnet_howtos_20240212-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936166/d9202cdf-f540-b7c4-a66f-e43c5c4bdd22.png)

## 環境データ
![dotnet_howtos_20240212-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936166/f160f8a0-eb5b-04ae-5549-acdbb00ab808.png)

「環境」タブでは、オペレーティングシステムの詳細から環境変数の値まで、すべてが表示されます。

## モニタリングのオンとオフ
![dotnet_howtos_20240212-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936166/1e6c55fb-42ae-b671-fad4-14cccff0ef2f.png)

すべての実行をモニタリングするか、デバッグセッションのみをモニタリングするか、またはモニタリングを完全に無効にするかを選択できます。すべてはモニタリングツールウィンドウから操作可能です。モニタリングを再度有効にするのも、設定からワンクリックで簡単に行えます。
【ts】thisの個人メモ

## thisは呼び出されたときに、直近で囲まれているオブジェクトになる

```ts
class Person {
  name: string;

  constructor(initName: string) {
    this.name = initName;
  }

  greeting() {
    // インスタンスに囲まれている
    console.log(this.name);
  }
}

const ken = new Person("Ken");

// "Ken"
ken.greeting();


const overKen = {
  anothoerSay: ken.greeting,
};
// undefined
// overKenが直近で囲んでいるのでthisはoverKenなので、nameプロパティが存在しない
overKen.anothoerSay();

```


## メソッドで使用しているプロパティとその型を呼び出し元に知らせる

### それの何が良い？
`overKen.anothoerSay();`でコンパイルエラーにならず、実行して初めてundefinedだと気づく。これはバグになる可能性がある。
そのためメソッドを呼び出す際にnameプロパティがオブジェクト内に無いとコンパイルエラーが発生するようにする。

:::note info
@junerさんのアドバイスを反映させていただきました。
:::

```diff_tsx
class Person {
  name: string;

  constructor(initName: string) {
    this.name = initName;
  }

// thisは固定
// このthisの中でstring型のnameプロパティを使用している
+  greeting(this: Pick<Person, "name">) {
    console.log(this.name);
  }
}


const ken = new Person("Ken");
ken.greeting();

const overKen = {
  anothoerSay: ken.greeting,
};

// コンパイルエラー発生
// プロパティ'name'が型 '{ anothoerSay: (this: { name: string; }) => void; }' にありません
overKen.anothoerSay();

```
Nullとnilの違い

# 違い
結論、下記記事にもあるように意味合い的な違いはないようです。

:::note info
「null」と「nil」はどちらも「存在しない」ことを意味しており、語源の違いや品詞としての違いこそありますが、意味合い自体は変わりません。 
https://style.potepan.com/articles/29434.html
:::

では、「語源や品詞としての違い」についてもう少し詳しく見てみましょう。

* __nullの意味__
・ラテン語のnullusの語尾が抜け落ちたもの
・関係代名詞的形容詞として使用する
ex. null argument(nullな引数)

* __nilの意味__
・ラテン語のnihilが転じたもの
・名詞や副詞として使用する
ex result was nil(結果はゼロだった)

ざっと上記の違いがあります。
nullとnilが同居している言語は少ないですが、SwiftやObjective-Cなどでは使い分ける必要があるそうなので、品詞としての違いを覚えておくと覚える際にイメージしやすいかもしれません。