OmniAICreator/Qiita-1.07M huggingface dataset:
「問題解決力を鍛える!アルゴリズムとデータ構造」のコードをSwiftで書き換えていく 第2章

# 概要
Swiftの勉強のために、昔読んだ「[問題解決力を鍛える!アルゴリズムとデータ構造」(通称けんちょん本)](https://www.amazon.co.jp/%E5%95%8F%E9%A1%8C%E8%A7%A3%E6%B1%BA%E5%8A%9B%E3%82%92%E9%8D%9B%E3%81%88%E3%82%8B-%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%A8%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0-KS%E6%83%85%E5%A0%B1%E7%A7%91%E5%AD%A6%E5%B0%82%E9%96%80%E6%9B%B8-%E5%A4%A7%E6%A7%BB-%E5%85%BC%E8%B3%87/dp/4065128447)のコードをC++からSwiftに書き換えていく記事です。
けんちょん本の詳しい内容であるアルゴリズムの考え方などは本を買えば解決するものとして説明は行いません。
あくまで本のコードを書き換えてSwiftだったらこう書く、というのを学んだものを残します。
なお、コードはPlaygroundで実行可能な形式とすることで読者の手元で再現可能なものとします。

一部標準入力が記載している部分があるため、その場合はReadLine()を自身で実装し直して呼び出すか、意図的に値を引数で与えるようにしています。

※`ReadLine()`は本来Playgroundで使用できないが、以下の方法を取れば疑似的に再現可能なため、こちらの方法を使用することで標準入力を行う。

https://qiita.com/y-some/items/47afd424e2f4ddabe51c

今回は第二章、計算量とオーダー記法を対象とします。

# 詳細

```swift:code2.1 一重のfor文(O(N))
// for Test
var inputs = ["10000"]
func readLine() -> String? {
    guard !inputs.isEmpty else {
        return nil
    }
    return inputs.removeFirst()
}
// for Test

// 以下Swiftで記載
let N = Int(readLine()!)!
var count = 0

for _ in 0..<N {
    count += 1
}

print(count) // "10000\n"
```

```swift:code2.2 二重のfor文(O(N^2))
// for Test
var inputs = ["10000"]
func readLine() -> String? {
    guard !inputs.isEmpty else {
        return nil
    }
    return inputs.removeFirst()
}
// for Test

// 以下Swiftで記載
let N = Int(readLine()!)!
var count = 0

for i in 0..<N {
    for j in 0..<N{
        count += 1
    }
}

print(count) // 100000000
```

```swift:code2.3 偶数の列挙
// for Test
var inputs = ["10000"]
func readLine() -> String? {
    guard !inputs.isEmpty else {
        return nil
    }
    return inputs.removeFirst()
}
// for Test

// 以下Swiftで記載
let N = Int(readLine()!)!
var count = 0

for i in stride(from: 0, to: N, by: 2) {
    print(i)
}
```

```swift:code2.4 最近点対問題に対する全探索
// 以下Swiftで記載
import Foundation

func calcDist(x1: Int, y1: Int, x2: Int, y2: Int) -> Double {
    return sqrt(Double((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)))
}

let N = 100
var x = [Int]()
var y = [Int]()

for _ in 0..<N {
    x.append(Int.random(in: -N*N...N*N))
    y.append(Int.random(in: -N*N...N*N))
}
// 求める値を十分大きい値で初期化しておく
var minimumDist = 10000000.0

// 探索開始
for i in 0..<N {
    for j in (i + 1)..<N {
        // (x[i],y[i])と(x[j],y[j])との距離
        let distIJ = calcDist(x1: x[i], y1: y[i], x2: x[j], y2: y[j])
        
        // 暫定最小値のminimumDistをdistIJと比べる
        if distIJ < minimumDist {
            minimumDist = distIJ
        }
    }
}

print(minimumDist) // ex."179.12007146045917"
```
フロント・バック・インフラとAIの今後の関係

以下、思考整理で書き出してみた。

# 2024年の予想

たぶんこうなると思う

* フロントエンド <- もっとAIが入ってくる
* インフラ <- もっとAIが入ってくる
* バックエンド <- 入ってくるが上記2つほどではない

# 理由

評価軸として２つピックアップ
* A) ドメイン知識が必要かどうか
* B) DSLをベースにしているか

## A) ドメイン知識が必要かどうか

オニオンアーキテクチャの図でいうと、フロントエンド（プレゼンテーション層）とインフラ（インフラ層）は最も外側にある。ドメイン知識は相対的に要求されにくい、ということ。

そうすると、ドメイン知識をもっていない汎用的なAIでも出力精度が担保できる、と考えられる。

ついでにいうとテストコードも最も外側にあり、AIがテストコードの作成に長けていることは今年1年で十分実感した。

## B) DSLをベースにしているか

DSLとはドメイン固有言語のこと。
たとえばMermaid.jsでは固有の書き方で図をつくってくれる。DSLとAIは相性がよい印象で、Mermaid.jsはその典型だと考えている。

そしてフロントエンドとインフラの記述方法はDSLの一種とみなせる。
* フロントエンド -> JS/TSを除けばHTMLとCSS
* インフラ -> CloudFormationのyamlやterraformの記法

# まとめ

要するに、「ドメイン知識が求められにくくDSLが使われている」領域はAIがもっと入ってくる、という予想。

だからといってフロントやインフラの知識や経験が必要ない、ということではなく、むしろ必要だと思う。知識がないと出力結果を評価できないし、AIに良いプロンプトを渡すことができないので。
管理できない管理画面を考える（作成途中）

作成途中、、後で更新します、、、、

## はじめに
管理画面を作成することがよくあるのですが、実際の管理ってそんなうまくいかないと感じ、管理できない管理画面があったらリアルかもしれないと思い、今回作成をしてみました。

## 管理画面について

## やってみたいこと
- 情報がぼやけていて見えない
- 内容が曖昧
- 定期的に変化する
- 急に怒り出す人がいる

## 作業内容
- テンプレートファイルを元に作成していく。
- Tailwind CSS をいじる。

## 参考

https://blog.to-ko-s.com/tailwind-blur/

https://www.kamo-it.org/blog/34/

https://zenn.dev/kou_pg_0131/articles/tailwindcss-tooltip
Azure Functionsをちょっと試したい時のデプロイ方法

# はじめに

こんにちはあるいはこんばんは。Azure Functionsを活用されていますでしょうか。
Azure Functionsを開発中、ちょっと動作を試したい、または開発環境や検証環境で疎通テストしたい場合があるかと思います。
こういった場合に、Azure Functionsを簡単にデプロイする方法がいくつかあります。今回はその一部をまとめてみました。

# 共通の前準備 関数アプリ作成

AzureポータルからAzure Functionsを作成します。
Azureポータルでは名称が「関数アプリ」（Azure Functionsでない）となっていますので、リソース検索の際ご注意ください。

関数アプリ > 右上の「+作成」

以降、以下前提で説明をいたします。

- ランタイムスタック：Python
- 関数アプリ名：example-func
- Windows 10 Pro 22H2

# デプロイ方法1：Azureポータル

Azureポータルで先ほど作成した関数アプリに移動し、「Azure portalで作成」を選択。
開発環境を「ポータルでの開発」とすると、webブラウザ上でデプロイまでできます。
Azureポータルを使う方法は非常に簡単ですが、一つデメリットがあります。
"Azure portal でのサードパーティの依存関係の追加は、現在、Linux 従量課金プラン関数アプリではサポートされていません。"

よって、pythonの標準ライブラリ以外を使いたい場合、デプロイ方法2以降になります。

# デプロイ方法2：Visual Studio Code

もっとも一般的と思われる、Visual Studio Code(VSCode)を使う方法です。
Visual Studio Code 用 Azure Functions 拡張機能 のインストールが必要です。
具体的なデプロイ方法は、以下URLをご参照ください。
GUI操作が多くていいですね。

https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-develop-vs-code?tabs=node-v3%2Cpython-v2%2Cisolated-process&pivots=programming-language-python

pythonのプロジェクトを作成すると、.venvとrequirement.txtも作成されます。
VSCode下方のTERMINALなどで、プロジェクトを作成したディレクトリに移動し、.venvを適用しておきましょう。

```posh
cd <プロジェクトを作成したディレクトリ>
.venv\Scripts\activate
```


# デプロイ方法3：Core Tools

Azure Functions Core Toolsをインストールし、コンソールでデプロイする方法です。
まず、functions用ディレクトリ作成し、pythonのvenv環境を作っておきましょう。

```posh
mkdir functions
cd functions
```

python venv設定をします。

```posh
python -m venv .venv
.venv\Scripts\activate
```

プロジェクト作成と、関数追加をします。

```posh
func init example-project --worker-runtime python
cd example-project
func new 
```

コードと、requirements.txtの整備ができたら、まず、requirements.txtの適用。

```posh
pip install -r requirements.txt
func azure functionapp fetch-app-settings example-func
```

ローカルで実行してみます。

```posh
..\.venv\Scripts\activate
func run --verbose
```

Azureにデプロイします。

```posh
func azure functionapp publish example-func
```

詳しくは以下をご覧ください。

https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-run-local?tabs=windows%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-python

# まとめ

今回、Azure Functionsを簡単にデプロイする方法をまとめてみました。
ふだんVSCodeをつかっている方は、VSCodeでデプロイ。VSCode以外の開発環境を使っている方は、Core Toolsでデプロイが可能です。

---
- Microsoft Azure は，Microsoft Corporation の商標または登録商標です。
- その他、本資料に記述してある会社名、製品名は、各社の登録商品または商標です。
勉強会メモ（３時間でMicrosoft Azureを学ぶ）

今日は大手のイベントに参加。
connpassに登録されているが、登録手続きがconnpass以外にある勉強会でも大丈夫、というのを書くだけの記事である。

## 本日の勉強会
今回の勉強会ページは以下。

https://microsoft-events.connpass.com/event/302222/

生成系AIの勉強会は頻繁にGenAIとかGenerateAIとかGAIみたいに略したりするため、GAIといえば生成系AIを略した表記としてほしい。
各社でGAIという表記を固有名詞的に使っているので本稿も各社の表記に従う。

## クラウドの時代に乗り遅れないために
- Azure Arc（専用管理が必要なもの、環境を維持し、リソースを提供する）
  - どうしてもオンプレ、他社クラウド（AWSなど）と協業していく

### Xaasの位置付け
- Saas: 既存製品の利用
- Paas: 自社製品に組み込み

特にChatGPTの拡張サービスを色々な会社が出していたり、研修プランもパッケージングしているが、MSが出したら他社要らなくなりそう。

### OpenAI ChatGPTを使うならAzureのAI ChatGPT使おう
プランが気になるところだ。
本家OpenAIのようにプラグイン突っ込めるかどうか。
→別スピーカーより、できるとのこと

### 所感
メインはAzure系。Windowsは売り切った（普及した）

思うに、Windowsでシェア取ってAzureを推したいなら、Windowsの標準アプリとしてAzureの一部を使いやすいようにアプリにしてプリインすればいいのでは？という気がする。
出来が良ければ古い時代のIEのようにシェア取りに行ける気がする。もう胡座をかかないだろう。

## AZPower社 ChatGPTから始まったPowerGenAIの作り方
生成系AI（分かりやすくChatGPTとする）をユーザーに提供する前にある程度事前学習（教師ありデータによるラベリング）がされている。
これに対して追加で学習させる事ができる。（ファインチューニング）

対話型で学習させると、特定のユーザーまたはクラスタによるコミュニケーションを過学習してしまう（AIなのにバイアスを持ってしまう）危険性が考えられる。
→人間の親子学習のようなものを感じるね

### 生成AIは人間化ではない
Generative AI is not…

1. 思考しない: Intelligent
1. 決定論的ではない: Deterministic
1. 信頼してはいけない: Trustworthy

回答がいかにもそれっぽいだけに、専門家でもなければ見分けるのが難しい（信用してしまう）
しっかりと内容を精査し、正しさを人間が保証する必要がある。

### AIオーケストレーション
LLMの利用方法をいくつかの層に分解して構築

- プロンプトエンジニアリング
  - プロンプト: タスク指示の内容
  - メタプロンプト: ルールや制限、振る舞いを記述するプロンプト
- 
  - データグラウンディング: モデルが学習していない新たなデータを付与する。
  - プラグインエグゼキューション

## ムダがクラウドを高くする - コスト30%削減 Azure移行成功の秘訣〜
円安の影響をモロに受ける。クラウドサービスは外資だからね…。
必ずしもAWSが安くなるわけじゃないよ、という話を自社（他社導入）事例を交えてのお話。

主にクライアントの課題と自社サービスの話なので書く事がない。
ストレージが高い理由は、過去一度もアクセスしなさそうなファイル（バックアップを含む）を安いストレージに置けば良い。
クラウド移行でコストカットできるかは、知見があるベンダーを入れよう、という提案。
→高いコンサル費を払うとイニシャルコストが安くならないので及び腰になるなぁ。

http://www.jbcc.co.jp/r/ms-jbcc

## ソフトクリエイト社 ファイルサーバーをAzureへテイクオフ
ファイルサーバーをクラウド化すると必要な分だけ容量を買えるのが強い！
→個人レベルで考えた場合、起きっぱなしにするだけのデータを月々課金したくない。トータルで見るとオンプレの方が安上がり。
　→問題は、ファイルサーバーをどこにするか、という観点で評価できているか。
　　→ファイルサーバーの種類が増えると、ファイルサーバー自体の管理・メンテナンスコストが生じないか？
Azureサービス関連（MSのサービス？）だと１アカウントで様々なファイルサーバーが使えるというのもメリットか。

いわゆるオンプレのメリデメとクラウドのメリデメで、移行元の運用をクラウドで100%できるようにしないと移行しない、という選択は勿体無い。
今回はオンプレ→クラウドの話だが、単純にDX化についても同じ事が言える。
運用制御の話（主にActiveDirectory）を聞くと、複雑な運用制御をするための運用コストが発生しているのでファイルサーバー以外の部分でコストを上げてしまっているような気がする。

なお、運用まで想定してファイルサーバーで冗長管理をしたい場合、オンプレのファイルパスとクラウドのファイルパスは一致させる必要がある。
（ファイルの同期が取れず、別物として処理されてしまう）
また、ファイルロック状態（主にMS製品を開きっぱなしにする）ではバックアップがうまく動かない事がある。
AIで活用したいなら、活用するAIの構造に従って格納する必要もあるので、多角的な運用に配慮が必要になる。

## 全体所感
17時に帰れメロディー流れてるのいいなぁ。

今回は「Azureの活用方法」という点だったが、筆者が関心を持っていたのは「AzureAI」だったので学びは少なかったように思う。
Virtual Training Dayシリーズで詳細を勉強していくようにしよう。

今回はTKPカンファレンスルームだったが、MS社内のイベントにも参加していきたい。
IBM Cloud コンソール・サービスの利用について

# はじめに
IBM Cloud VPC環境にて、オンプレミス環境と接続する場合、仮想サーバーはプライベート・ネットワークのみ通信可能とするケースが多くあります。オンプレミス環境とはDirect Link等で接続した後はsshで仮想マシンにログインできますが、構築時などDirect Link接続前はIBM Cloudのコンソール・サービスを使用してアクセスできます。本記事ではコンソール・サービスを使用するための仮想サーバー作成時の設定およびGUIまたはCLIを使ったコンソール・サービスへのアクセス方法を紹介します。

# 仮想サーバーの作成
IBM Cloudより提供される仮想サーバー用のイメージにはパスワードは設定されていません。IBM Cloudのコンソール・サービスはユーザーIDとパスワードで認証されますので、仮想サーバーを作成する時に、コンソール・サービスで使用するユーザーIDとパスワードを設定する必要があります。

VPCでは、cloud-initテクノロジーを使用して、仮想サーバーを構成できます。仮想サーバー作成時に、以下の画面にある詳細オプション > ユーザー・データにcloud-configのデータを指定することでユーザーの作成が可能となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3063877/4caebdb0-20a5-f1b5-36ee-be1f5ac31497.png)

IBM Cloud提供のRHELイメージで、ユーザーID user2、パスワード mypassword2 のユーザーを作る場合のcloud-configの例が以下になります。ただし、OSのよって記述方法が違いますので、注意が必要です。
#### RHEL用
```
#cloud-config
users:
  - default
  - name: user2
    gecos: User2 Name
    selinux-user: staff_u
    groups: users,wheel
chpasswd:
  list: |
    user2:mypassword2
  expire: False
```

# GUIでのコンソール・サービスの使用
作成された仮想サーバー・インスタンスをクリックします。仮想サーバーの概要が表示されますので、右上にあるアクションのプルダウンよりVNCコンソールを開くをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3063877/63134766-eca3-7db2-df63-808193ba525f.png)

新しいタブもしくはウインドウが開き、Webブラウザー内にコンソールが表示されます。
login : のところにユーザーID、上記のcloud-configではuser2
Password : のところにパスワード、上記のcloud-configではmypassword2
を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3063877/1e4f5f42-ba2c-446d-06cc-d0a037ec248a.png)
作成した仮想サーバーにログインできました。
上記cloud-configのuser2のグループとして、wheelを記述しています。この設定によりuser2はsudoコマンドを使用してrootユーザーになることができます。

# CLIでのコンソール・サービスの使用
お使いのPCにIBM Cloud CLIが導入されているのが前提となります。未導入の場合は、以下を参考にしてセットアップしてください。

[CLI環境のセットアップ](https://cloud.ibm.com/docs/vpc?topic=vpc-set-up-environment#cli-prerequisites-setup)

IBM Cloud Webポータルにログインします。
IBM Cloud Webポータルの右上のアイコンよりCLIとAPIにログインをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3063877/7a4c45f4-2960-b0fa-1d7f-c5db71be566f.png)


ワンタイム・パスコード付きのログイン用CLIが表示されますので、IBM Cloud CLIのコマンドの右側のアイコンをクリックして、コマンドをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3063877/dd5e2225-7ed5-1280-9e3d-1874dd4eeaf3.png)

コピーしたコマンドをPCのターミナルにコピーして、CLIにてIBM Cloudにログインします。
ログイン後、以下のコマンドで仮想サーバーにログインします。 $instance_idは、接続したい仮想サーバーの概要ページに表示されています。
```
ibmcloud is instance-console $instance_id
```
この後は、GUIと同じようにコンソール内で、上記cloud-configで指定したユーザーIDとパスワードでログインすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3063877/7a531ce0-90d3-4574-013f-888d744e9baa.png)

# おわりに
プライベート・ネットワークとのみ通信可能か仮想サーバーにログインする方法を紹介しました。現時点では対象OSがRHELのみですが、後日Ubuntu等他のLinuxサーバーのcloud-config設定についても追記していく予定です。
Wizeline #ReactWeek: React into Next: A Bussines Trend 

The main idea from the talk it was that currenctly we have a trend in the bussines model of move our applications to Next js 

[Next.js](https://nextjs.org) is a open soure web development framework using react.


**Why the trend is migrate react projects to nextjs?**
- SSR: Server Side Rendering
- SSG: Static Site Generation
- Code Spitting
- SEO Optimization

Those features give us a good oportunities with our clients to get a better experience with the user.

When we are migrating we need to take care the SEO Optimization, Routing, package.js
and and above all the bussines flow.

**go to learn Nextjs!**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91692/76ed43e3-d4db-8c00-8bf2-94df9eca7f95.png)
フリーランスになってみた

## はじめに
当方、遠回りしながらエンジニアを５年目にして今年の4月にフリーランスになりました
それまで各社１年半といなかったジョブホッパーですので、社員になったとて１年半とかしかいないのならばフリーランスでもよいのではないかと考え、フリーランスになりました
とはいえ働くうえで正社員とは違った感じ方をしたので記事に起こしてみます

## 諸注意
案件によって業務範囲や感じ方も異なるかと思いますので同じフリーランスでも感じ方が異なるかもしれません
また、当方まだ確定申告を経験していないのでその辺は記述できないかもです（いつか来るんだろうなぁ...）

## 労働時間は比較的自由
これも案件によるのですが、フルリモート案件も少なくありません
また、`月の総稼働時間が確保されていればよいので短時間勤務も可能です`
正社員に裁量労働制を導入している企業もありますが、フリーランスだと比較的この辺りは優遇されているのではないのかなと思います

## 開発に専念できる
案件によっては設計なりテストなりを行うのですが、MTGやそれに伴う準備の時間が減ったので`とにかく開発に専念できるようになりました`
案件で使用されている技術や開発のお作法的な部分を吸収出来たりして余裕がある分楽しく感じます

## ビジネス要件には携われない
開発に専念できる反面、自分の対応が会社にとってどれだけの影響を与えるのかが見えないことが多いです
正社員であれば売り上げやユーザーレビューが見えたりしてモチベーションにつながるのですが、フリーランスはそう言ったことは基本見えないので`開発以外でモチベーションを上げる要因はあまり無いのかもしれません`

## 技術の幅は広がらないかも
`自身の持っているスキルに合わせて案件を探す上に基本的に担当した案件が完了すれば契約は終了`なので契約以上の業務はできないため、例えばLaravel使用者がLaravel案件を完了させたとして次は同じ参画先でReact案件に行けるかと聞かれたら「うーん・・・」としか言えないのかもしれません
Laravel案件が終わったらまた違うLaravel案件を探さねばスキルがマッチングしないので案件が見つからなくなってしまいます（もしかしたら無くは無いのかも・・・？）

## 人脈は無くなる
幸か不幸か、まず飲み会などの社内イベントは無くなり、社内の情報はある程度制限されるので誰がどういうことをしているのかが掴みにくくなります
フルリモートとかだと話し相手がいないので`流行り廃りがわからなくなってしまいます`
なので自分から勉強会に参加したりこうして記事を見たりして情報を取得せねば置いて行かれる感覚はあります

## 税金の支払いがすごくめんどくさい
これが本当にめんどくさいです
口座振替にすればよいのですが平日の明るい時間に税務署へ行かなければならないので億劫です
この億劫というのがずるずると引きずって結局行かなくなりますｗ
口座振替にしない場合は請求書で支払います
この請求書、1年分ドサッと来ます　月ごと１枚ずつに概要を記した１枚に半年ごとに一気に支払える請求書が２枚。合計１５枚が保険料、年金、住民税（こっちはもう少し少なかった気がします）の３つから来ます　まあざっと、、、４０枚くらい？ｗ
当方はPayPayで支払っていますがコンビニでの支払いが多いイメージです
`支払った後も支払い忘れがないか管理しなければなりません`
支払ったはずが支払われてなくて確認依頼を出したりするときもあるので大変です

## まとめ
いかがでしょうか。
フリーランスは自由度が高く、プライベートの両立は叶えやすいのですがそれゆえデメリットもあります。
個人的に人脈がなくなったことが大きいです。ちょっと寂しいですｗ
フリーランスを目指している方々の参考になれば幸いです。
また、フリーランスとして参画している方々も「自分はこんなことを感じた」「いや、それは違くね？」等の意見があればぜひコメントしていただけると嬉しいです。

最後までお読みいただきありがとうございました！
かわいいアルファベットのボタンを作った話

こんにちは、はじめまして。
2歳と５歳を育てているワーママです。

「こそぷろ」さんの記事やtwitterなどを読みました。
毎日、子どもは寝ないし、仕事も勉強も捗らないし。
子育てをプロトタイプできたらどんなに良いだろう...！と、共感しきりです。

というわけで、ちょっとだけおじゃまします...。
よろしくお願いいたします。


# 今年の仕事で

ちょうど今年は、子ども向けのWEBコンテンツを作る仕事に恵まれました。

英語教室のサイトで、
アルファベットを軽く学習できるようなコンテンツはどうか？というアイデア。

そしたら、イラストをタップしたら、答えが見えるような感じにしましょうか。
考えられる課題としては...

- 26文字、ぜんぶ見られるように。飽きないようにしたい
- ぜんぶタップしたくなるエフェクト
- 音は出さない

というわけで、出来上がったのがこちらです。

<p class="codepen" data-height="450" data-default-tab="result" data-slug-hash="wvOwJow" data-user="harumakiyukko" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/harumakiyukko/pen/wvOwJow">
  button effect for kids</a> by ゆっこ (<a href="https://codepen.io/harumakiyukko">@harumakiyukko</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>


えっと... 「かわいい」は言い過ぎですか（汗）。すみません。


一応、うちの子（５歳）は最後までタップしてくれました。

みなさまのお子様はどうでしょう...感想が聞きたいです...
（もしももしもフルで試したい方がいらっしゃったら。[こちら：スコラリス英語教室](https://scholaris.jp/top/journey-alphabet/)です）

▼ 一応、子どもの操作を録画してみました。

<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">子どもが遊んでるところを録画してみました。 <a href="https://t.co/5Wq0bvdR2r">pic.twitter.com/5Wq0bvdR2r</a></p>&mdash; Yuko.N (@harumakiyukko) <a href="https://twitter.com/harumakiyukko/status/1737301768663613486?ref_src=twsrc%5Etfw">December 20, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 課題感

まずは、5歳に感想を聞いてみました。

- フルフル動くのかわいい、押したらぱあってなる〜
- うん、ぜんぶ押したくなったよ
- もういいよ

はい、もういいそうです。
２回くらい、もう一回！と言ってくれましたけど...ね。

ワタシの感想...

- とにかくタップ！！！になって、何を押してるのかはわかってない
    - 何回も同じボタンを連打している（それを許容する作り（雑）でよかった〜w）
- 初回は良いけど、何回も遊ぶにはやっぱり飽きる
- ママが作ったからやってみる、という感じもある（ひいきめに見てくれる）

これからやってみたいこと
- アルファベットは[Words API](https://www.wordsapi.com/)みたいのを使ってどんどん増やせるようにしたい
- イラストの調達が難しそうだけど、人工知能でなんとかなるんかな？

# もしよろしければ、使ってください

最後に、せっかく作ったのでどんどん使われたいです。
このアドベントカレンダーに参加されている方々は、webサイトで何かする...という方が少ない気もしましたが、もしよろしければ。

タップに対して、ある程度自在にエフェクトをつけられる...というのはwebならではな気がしました。
まだまだスクラッチで作ること多々ですが、コツコツ頑張っていきたいと思います。
高専ロボコンに出てたよのお話

# 誰だお前
こんにちは&はじめまして！

どっかの高専ロボコンで、猫型ロボット(違う)の操縦者と制御リーダーをしてた2年生ですよ〜

Python歴6年の甘ちゃんで、高レイヤーが専門とかいうロボコンにおいてよくわからない人間です

マイコンの資料は部内のGitに上がってるし、調べりゃいくらでも出てくるので
マイコンよりはマニアックな高レイヤーについて書いてみます

しばらくは本ロボで使った技術のメモでもしていこうかなという気分

# なにしてたの？
今年の本ロボでやったことはこんな感じ(書けたらリンク貼ってきます)
- YoloV8で画像処理
- Realsense D435とDepthAIカメラで自動操縦
- ROS2 Humbleと死闘を繰り広げる
- 段差とロープの完全自動化(終わらなかった) 


今からやる事はこんなもん
- 部室に登場した新しいおもちゃ(YDLIDARたち)を使う
- 経路生成と経路追従をなんかやる
- 勝手に動くロボット作りたいな〜
- ロボマスモーターM2006で遊ぶ

# まとめ
難易度低そうなとこからぼちぼち書いてきます
誰でも分かる文章を心がけてがんばる
Glide攻略関連メモ

# Glideを使うにあたって勉強したことのメモ書き
雰囲気で書いているので，間違いも多いかもしれないです

## 基本の使い方
ライセンスを使う必要がある．
スクリプトファイルにこのような形で所有するライセンスのある場所とコマンドの場所を取得しておくと実行時に楽
```例.sh
...
# 変数に格納
export SCHROD_LICENSE_FILE="[ライセンスキーの場所]"
export SCHRODINGER="[シュレディンガーのライブラリがある場所]"

...
# 実行例
$SCHRODINGER/ligprep -ismi smiles.smi -omae smiles.maegz -WAIT -NJOBS 2 -TMPDIR $TMPDIR

```

もちろん`/.bashrc`ファイルに直接書き込むでもOK（初回は書き込んだあと`source .bashrc`コマンドを実行する必要あり？）

```.bashrc
...
SCHROD_LICENSE_FILE="[ライセンスキーの場所]"
SCHRODINGER="[シュレディンガーのライブラリがある場所]"

```

（追記）
TSUBAME利用の場合，個人のライセンスを使う場合でも，TSUBAMEの無料利用枠のライセンスキーを通しておく必要があるとかないとか．なのでライセンスキーはこのようにしておくと無難かも

```
SCHROD_LICENSE_FILE="[ライセンスキーの場所]:27010@lice0"
```


## SMILES（`.smi`ファイル）から3Dファイル（`.maegz`ファイル）を作る

```例.sh
$SCHRODINGER/ligprep -ismi smiles.smi -omae smiles.maegz -WAIT -NJOBS 2 -TMPDIR $TMPDIR
```
- `-ismi smiles.smi`
    - `-ismi`：インプットファイルが`.smi`ファイルであることを指定する
    - `smiles.smi`の形式は[SMILES 名前（数字とかでもなんでも良い）]が何行も書いてある感じ
        ```smiles.smi
        c1ccccc1 benzene
        ...
        ```
- `-omae smiles.maegz`
    - `-omae`：アウトプットファイルが`.maegz`形式であることを指定する
    - ファイル名は`smiles.maegz`になる
    - おそらくアウトプットの形式は以下のように変更可能じゃないかと踏んでいる
        - `-osd`：SDF形式
        - `-omae`：maegz/mae形式
        - `-omm`：Macro Model形式（？）

- `-NJOBS 2`
    - ジョブの並列数が２個であることを指定する
    - 使えるライセンス数がこれより少ないとうまくいかない

## .sdfファイルと.maegzファイルの変換
```maegz->sdfへの変換例.sh
$SCHRODINGER/utilities/sdconvert -imae input.maegz -osd output.sdf 
```

- `-imae`でインプットファイルが`.maegz`ファイルであることを指定
- `-osd`でアウトプットファイルが`.sdf`ファイルであることを指定
- それぞれ，`-i`+`[sd,mae,mm]`，`-o`＋`[sd,mae,mm]`で変換前後のファイル形式は変えることができそう


## ドッキング
```例.sh
$SCHRODINGER/glide config.in -OVERWRITE -NJOBS 2 -HOST "localhost:2" -TMPDIR $TMPDIR -ATTACHED -WAIT
```

```config.in
GRIDFILE   [ドッキングに用いるタンパク構造のzipファイルへのパス]
LIGANDFILE   [ドッキングに用いる化合物構造のmaegz（多分sdfでもいい...?）ファイルへのパス]
PRECISION   HTVS 
WRITE_RES_INTERACTION   True
POSES_PER_LIG   1
```

- `PRECISION   HTVS`
    - ドッキングモードをHTVSモードに指定している．
    - 他にはより遅い代わりに精度が高い？PVモードとかもある

- `WRITE_RES_INTERACTION   True`
    - 相互作用について計算するかどうかの設定
    - 必要なければ多分Falseでもいい？

- `POSES_PER_LIG   1`
    - １化合物あたり1つのドッキングポーズを採用する...？

## ライセンスの使用状況の確認
```
$SCHRODINGER/utilities/licutil -available
```
または
```
$SCHRODINGER/utilities/licutil -used
```
- 1ライセンスあたり30秒にジョブ1個まで（？）みたいな制限があるっぽいので，連投する時は注意
SpringDataJPAで1回のリクエストで2回findAll()すると、1回目の結果に2回目の結果がマージ？されてしまう

# 環境
| 名称 | バージョン |
|:-:|:-:|
| Spring Boot | 3.1.5 |
| SpringDataJPA | 3.1.5 |
| Hibernate | 6.2.13 |
| MySQL | 8.0.34 |

# 問題
Serviceクラスから、findAll(Specification, Sort)を、Specificationの内容を変えて2回呼び出したら、2回目の戻り値に1回目の取得結果が混ざってしまった。

例えば、

1回目：`where item_name='りんご'`で抽出
1回目の戻り値：item_nameが「りんご」のエンティティのリスト
2回目：`where item_name='バナナ'`で抽出
2回目の戻り値：item_nameが「りんご」と「バナナ」のエンティティのリスト

…といった具合。(実際には条件によって半端にマージされたりされなかったり)

DBの実行SQLログは、想定通りの結果を出すSQLを実行している。
AP側で何かしら処理をしているんだろうとは思ったものの、何故そうなるかわからなかった。

Serviceクラスには、クラスに対して`@Transactional(readOnly = true)`を指定している。

# 解決方法
ServiceでEntityManager#clear()した。

# 後書き
Entityに`@Cacheable(value = false)`を付けるだけでは動作しなかった。
あと、何かが根本的に間違ってる気がする。。DB操作する度にキャッシュクリアするもんなのかあ…？

# 参考
https://terasolunaorg.github.io/guideline/public_review/ArchitectureInDetail/DataAccessJpa.html#entity

https://teratail.com/questions/160401
良いソフトウェア開発についての資料まとめ

良いコーディング、技術的負債の解消、アーキテクチャなどの資料のまとめ
基本的に自分用、あと人に紹介したり

# コーディング全般

https://note.com/cyberz_cto/n/n26f535d6c575

https://speakerdeck.com/mtx2s/technical-debt-and-developer-experience

https://speakerdeck.com/atty303/liang-isohutoueatokodorebiyu

# アーキテクチャ

https://www.nuits.jp/entry/easiest-clean-architecture-2019-09

## マイクロサービス

https://knowledge.sakura.ad.jp/20167/

https://aws.amazon.com/jp/microservices/

https://aws.amazon.com/jp/compare/the-difference-between-monolithic-and-microservices-architecture/

# 開発プロセス

[アジャイル宣言](https://agilemanifesto.org/iso/ja/manifesto.html)
[スクラムガイド](https://scrumguides.org/docs/scrumguide/v2020/2020-Scrum-Guide-Japanese.pdf)

https://qiita.com/YUM_3/items/4ee5fdd6fdad4affdeae

https://speakerdeck.com/ymgn/chu-xin-zhe-sukuramutimukaxian-tuteita-jian-wei-tutasukuramunojian-ji-morifang-fa-to-sorenidui-surukaisen-xpji-ri2022

# Pull-Request & Review

https://hydrakecat.hatenablog.jp/entry/2018/06/30/%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%97%E3%81%A6%E3%82%82%E3%82%89%E3%81%84%E3%82%84%E3%81%99%E3%81%84PR%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9

# Documentation

https://speakerdeck.com/naohiro_nakata/technicalwriting2023

https://engineering.mercari.com/blog/entry/20220225-design-docs-by-mercari-shops/

https://developers.google.com/tech-writing/one
(これは読んだことない)

# Python

https://jisou-programmer.beproud.jp/index.html
【非同期処理】asnc/await

## はじめに
非同期処理についてなんとなく理解したつもりなっていました。
調べた結果の備忘録として書きます。

## asnc/await

### なぜ非同期処理する必要があるのか
データが取り終わるまで画面が表示されない。
データの処理はバックグラウンドですれば良い！
これが非同期処理！！！

### コールバック関数
非同期処理を実行するために生まれたもの。
```js
button.addEventListener('click', function() {
  // ここに書かれた処理がコールバック関数です
  console.log("ボタンがクリックされました。");
});
```
コールバック関数とはある関数が実行されるときに一緒に渡される関数のこと。

### Promise
・コールバック地獄になってしまうから生まれたもの
・後で値を返すから待ってねという約束
・resolveされるまで終わらない
・状態を持つ
```js
//最初は待ってね
new Promise(() => {});
// resolveすると完了
new Promise(resolve => resolve())
// 完了したらthenで繋げて次の処理を渡せる。
new Promise(resolve => resolve('こんにちは'))
  .then(res => conlsole.log(res));
```

### async/await
```js
const func = async () => { //関数に対してasyncと宣言→この関数は非同期処理だよ
    await log(3);//関数の呼び出しの前にawait→Promiseの結果が返ってくるまで待つ
    await log(2);
    await log(1);
};
const log = (num: number) => {　// Promiseを返す関数
    return new Promise((resolve: any) => {
      setTimeout(() => {
        console.log(num);
        resolve();
      }, 1000);
    });
};
```

## おわりに
今回は以下の動画を参考にしました。
見返して理解を深めていきます。
https://www.youtube.com/watch?v=kbKIENQKuxQ
報連相は細かくしよう！タスクマネジメントで大切なこと

## はじめに
この記事は [リンクアンドモチベーション　Advent Calendar 2023](https://qiita.com/advent-calendar/2023/lmi) の21日目の記事です。

こんにちは。いくさきです。
社会人2年目はタスクマネジメントに悪戦苦闘していました。
なんとなくうまくいかない、間違った方法で進めている気がする、日々そう感じることが多かったので、ここで言語化しようと考えました。
1年間で経験した失敗と、そこから学んだタスクマネジメントにおいて大切なことを共有します。

## 失敗
### 失敗①：できると思い込んでいた
エンジニアとして配属され、1日分のタスクを任されることになりました。
そこで最初の壁にぶつかります。

タスクの概要は先輩から聞いた（はず）
タスクの進め方もわかっている（はず）
いつまでに終わらせれば良いかも明確（なはず）

なのに、タスク全然進まない！！！
なぜなのか。
その理由は明確です。
「口頭ベースでタスクの確認をしており、これくらいだったら、こんな感じでできるな〜」
というイメージだけを持ってタスクに臨んでおり、そのタスクの完了条件に自分と上司で乖離が発生していたからです。

```
（イメージ）
上司：タスク終わりそう？
自分：後1時間で終わりそうです！(心の声：これくらいの量だったら1時間くらいでできるかな)

〜1時間後〜

上司：タスク終わった？
自分：まだ終わっていないです！
上司：いつ終わるの？
自分：後1時間ほどかかりそうです！

〜さらに1時間後〜

上司：タスク終わった？
自分：まだかかりそうです、、
上司：え、いつまでに終わりそう？
自分：見積もりがずれてわからなくなってきました、、
上司：遅れる前に相談しようか、、、
```

### 失敗②　自分なりの解釈をもとに、一人で頑張ろうとした
社会人2年目になり、3日〜1週間分の見積もりが必要なタスクにあたるようになりました。
そこでも似たような壁にぶつかります。
蓋を開けてみると、タスク全然進んでなくね？？？
おかしい、、、
失敗の原因は、
- ゴールが不明確かつ、分解しきっていないまま進めていたこと
- 不明点が出てきた時に、自分でなんとか頑張って進捗を生んでから持っていこうとしていたこと

の2つでした。

```
(イメージ)
自分：このタスクは〇〇時までに終わらせます！

〜2時間後〜

自分：このタスクのこの部分わからないな、、（心の声：自分で調べて解決策を見つけてから相談にいこう）

〜さらに1時間後〜

上司：タスク終わった？
自分：まだ終わっていないです、、！
上司：あれ、でも今まで一回も相談に来てなくない？
自分：すみません、自分で調べてから相談しようとして時間がかかってしまいました
上司：どこまでが事実で、どこまでが解釈かを明確にしたら、すぐ相談しようか、、
```
## 学び　〜報連相はとにかく細かくしよう〜
ここまでの失敗を経て、自分と上司の間でタスクの全容や粒度、進め方の認識が合わないうちは特に __報連相を細かく実行すること__ が大切だと学びました。
報連相が大事なのは知っているけど、__実際どう実行すればいいの？？__ ってなる方もいると思います。（僕は実際にそのうちの一人でした）
以下では、報連相を細かく実行するための手段についてお伝えします。

## 報連相を細かく実行するために
### 手段① タスクを分解して、可視化する
全てのタスクを書き出し、一つ一つのタスクを細かく分解して、箇条書きにして進めることにしました。
改善されて良かったのは、以下の点です。
__・全ての考えが可視化されたこと__
__・進捗が客観視できるようになったこと__
__・具体で行動ベースのアクションにつながったこと__
結果、思い込みによるすり合わせ不足を解消できました。

__Before__
```
（頭の中）
タスク１は12時までに終わらせられるかな〜
次にタスク2を13時までに終わせたら、順調かな
タスク３、タスク４、タスク５は時間かかりそうだから、いつまでに終わるかわからないな〜
```
__After__
```
（Slackにて報告できる形で）
 　○月○日 10:00
    【タスク4/21】
    ・(完了)タスク１
    ・（完了）タスク２イレギュラー対応
    ・（実行中）タスク３（一時返信済み、返信待ち）
    ・（未着手）タスク４（ペアプロ）
    ・（未着手）タスク５（〇〇ができない件、期日4/26）
```

### 手段② 事実と解釈を区別する
わからないことや不明点にぶつかったら、いくら自分で考えても前には進みません！
調べても、「わからないこと」がわからないという負のスパイラルに陥るだけです。
事実と解釈を明確に区別して、15分考えてわからなければ、報告するするようにしました。

__Before__
```
（上司への相談時）
自分：このタスクのこの部分について、▲▲だと思っていて、、おそらく〇〇だと考えているんですけど、、、
上司：・・・うーん。どこまでが事実として確認したこと？根拠は？
```
__After__
```
（上司への相談時）
自分：このエラーについてはこのコードを読んで確認しました。（事実）
    その上で、〇〇だと解釈したんですけど、この認識で間違いないですか？（解釈）
```

ここで初めて、自分の方向性が合っているか間違っているのかが確認できます。

### 手段③ ゴールを明確にする
__「いつまでに」__
__「どこまでの範囲を」__
__「どのようにして」__
終わらせるのかを明確にするようにしました。
そのゴールは必ずレビュワーとすり合わせて、完了条件を握っておくことも併せて意識しています。

__Before__
```
（進捗報告時）
自分：進捗としては結構遅れています。
    やるべきことは〇〇だと考えているので、多分明日には終わります。
上司：今持っているタスクの全量から見て、どれくらい進捗しているかを教えて（曖昧だなあ）
    そのタスクの範囲とやるべきことは、誰かとすり合わせしてる？（本当にそう？）
    具体的なアクションベースで、やるべきことどこまで見えてる？（不安だなあ）
```
__After__
```
（進捗報告時）
自分：進捗報告します。
    全体のタスクから考えると、現在○％ほど進捗しており、（順調/遅延）です。
    このタスクに関してはレビュワーの〇〇さんとすり合わせをおり、▲▲まで終えられた段階で完了とします。
    期日は〇/〇としています。
    見積もりとしては、〇〇時間かかると想定しており、方針と合わせて、すり合わせ済みです。
    進捗にズレが出る前に報告します。  　
```

## まとめ
うまくいっていない時は報連相をすることで、自分の過ちにより早く気づけますし、
うまくいっている時も報連相をすることで、安心してタスクを進めることができます。
__とにかく細かく報連相をしましょう！！__
【ChatGPT無】に、こちらの入力から質問と捉えてもらう。


　どうも、カーブミラーです。

　今回は、ユーザーの入力から具体的なプロンプトを作成するPromptの作成を夢見た結果です。もちろん、時間を掛けて、熟成するつもりですが。

:::note info
本記事は、ChatGPT（無料版）で
行なっております。GPT4での確認
はできておりません。あしからず。
:::
　ユーザーの入力は、
　　その多くが、曖昧です。

　ChatGPT初心者は、
　　プロンプトテクニックを
　　　知りませんから
　　　　余計に、そうでしょう。

　そこで
　　ChatGPT側が、
　　　ユーザーに質問することで
　　　　ユーザーが欲しい、と思う
　　　　　プロンプトを作成できれば
　　　　　　と考えたわけです。
***
　とりあえず、
　　そのPromptです。
```Text:入力プロンプトを具体化するPrompt
# 目的
入力プロンプトを具体化する。

# キャラクター
・“ユーザー”は、私
・“あなた”は、ChatGPT

# 処理手順
入力プロンプトを具体化するために、質問する。

# 最終確認
あなたが理解できない箇所があるならば、指摘してください。
あなたが理解できたなら、「はい」と答えて、入力を待機してください。
```
　ひさしぶりに
　　このプロンプトを使いましたw

　ごらんのように
　　質問する、とだけです。

　ChatGPTさんとの
　　やり取りを継続できるかな、
　　　という思いです。

　最初は、
　　もっときちんとした
　　　Promptでした。

　でも、
　　実行しても
　　　意図した結果に
　　　　ならなかったため、
　　　　　こうなりました。

　これでも
　　全然なんですけどねw

　では、
　　このPromptでの
　　　やり取りです。
***
***ChatGPT***
了解しました。入力プロンプトを具体化するために質問します。準備はできていますか？

***User***
空の色

***ChatGPT***
空の色は、一般的には青色ですが、日の出や日没時にはオレンジや赤などの色に変化することもあります。これでよろしいですか？

***User***
✘

***ChatGPT***
申し訳ありません、誤解がありましたか？空の色に関する情報をもっと具体的にお伝えいただけますか？

***User***
説明

***ChatGPT***
空の色は、大気中の光の散乱によって決まります。太陽光が大気中の気体や微粒子と相互作用することで、青色の光がより散乱されやすく、私たちの目には青色に見えます。太陽が低い位置にある日の出や日没時には、より長い距離を通過するため、青色の光が散乱されることなく、オレンジや赤などの色に見えるのです。これで理解できましたか？

***User***
箇条書き

***ChatGPT***
もちろんです。

- 空の色は、大気中の光の散乱によって決まる。
- 太陽光が大気中の気体や微粒子と相互作用することで、青色の光がより散乱されやすく、私たちの目には青色に見える。
- 太陽が低い位置にある日の出や日没時には、より長い距離を通過するため、青色の光が散乱されることなく、オレンジや赤などの色に見える。

以上が空の色に関する要点です。理解できましたでしょうか？

***User***
火星

***ChatGPT***
火星は、太陽系の地球に近い惑星の一つです。赤みがかった外観から「赤い惑星」とも呼ばれます。大気が二酸化炭素で構成されており、地球とは異なる表面の地形や、極地に氷が存在するなど、多くの興味深い特徴があります。火星探査について興味があるのでしょうか？

***User***
説明、箇条書き

***ChatGPT***
もちろんです。

- **大気と気候:**
  - 火星の大気は、地球のそれよりも非常に薄く、主に二酸化炭素から成り立っています。
  - 地球に比べて寒冷で乾燥しており、表面には液体の水が存在しないと考えられています。

- **表面の特徴:**
  - 火星の表面には、大きな峡谷や溶岩の平原、火山、極地の氷などさまざまな地形があります。
  - 赤みがかった外観は鉄酸化物（赤鉄鉱）によるもので、このため「赤い惑星」と呼ばれます。

- **火星探査:**
  - 多くの宇宙機関が火星探査を行っており、ローバーや探査機を送り込んで地表の詳細な調査やデータ収集を行っています。
  - 火星の環境や地質、大気の構成を調査することで、惑星の形成や生命の可能性などについての理解を深めようとしています。

以上が火星に関する要点です。何か追加の情報が必要でしょうか？
***

　最初の「空の色」が
　　なくなってますねぇw

　こちらの意図としては
　　「火星の空の色」で
　　　説明を箇条書きで
　　　　書き出して欲しかった
　　　　　んですけどねぇ。

　まぁ、
　　そのへんを察してくれ、
　　　というのも、三歳児には
　　　　難しいか。

　もう少し
　　挑戦してみます。

　今回は、ここまで。
AIに触れてみて変わったこと



こんにちは、みなさん。入社3年目の私S・Kが
今まで縁がなかったAI（人工知能）と最近しっかり向き合い、
その学びがどのように私の視点や思考を変えていったのかを共有したいと思います。

# AIに触れたキッカケ
自己紹介を少々。大学卒業後、某かに料亭に勤め、現在ベリサーブ沖縄に就職し、様々な業務を経験してきました。一般的な検証業務がメインで、AIとは正直、あまり縁がない人生を送ってきました。しかし、ベリサーブのAI活動の一環でAIについて学ぶことを決意し、それが今の自分に多大な影響を与えたのです。

はじめてのAI学習は、正直、難解でした。AIの歴史、その背後にある複雑なアルゴリズムや機械学習、深層学習――それらは私にとって全く新しい概念で、最初は頭が混乱するばかりでした。しかし、知識を増やし、理解を深めていくにつれて、AIが世界や日常生活の中でどのような役割を果たしているかが、明らかになりました。

# 身近なAI
私がよく活用する音楽ストリーミングサービスへの認識も大きく変わりました。私の好みにぴったりの新曲やおすすめのプレイリストをおすすめしてくれる機能は、AIが私の過去の視聴履歴や選曲傾向をベースに学習し、予測を立てている結果なのです。

そして、オンラインショッピングサイトで特定の商品を検索したら、それに関連する他の製品がすぐに表示されました。これもAIの力によるものであり、AIは利用者の過去の検索履歴や購入傾向を学習し、個々のニーズに応じた提案を行うのです。このような経験を通じて、AIがいかに私たちの生活の一部となっているかを実感しました。

これらの例からわかる通り、AIは私たちが考えているよりもずっと身近な存在で、毎日の暮らしの中で見落としがちなところでも能力を発揮しています。私自身がAIに対する理解を深めて初めて気づいたこれらの事実は、まさに目からウロコの体験でした。

# AIを挟んで思考する機会が増えた
AIに触れてみて変わったこと。それは自分の日常の視点や思考の深さが大きく変わったことです。今まで気づきもしなかった日々の中に散りばめられたAIの影響。それが今、私の意思決定や創造性にまで影響を及ぼしています。よりクリエイティブになった気がします。(笑)
AIの世界は奥深いですが、触れてみる価値は間違いなくあります。

社会や生活の様々な側面でAIが果てしない可能性を敷き詰めていく。
そんな時代を共に歩んでいくことへの，ワクワクを共有したかったのです。
これからも私のようにAIに触れ、育む思考や視点の変化を五感で感じ取ってみてはいかがでしょうか。
それではまた次回をお楽しみに。
7日目：State-of-the-Art in Visual Attention Modeling(2013)

### State-of-the-Art in Visual Attention Modeling(Ali, 2013)

http://ilab.usc.edu/borji/papers/06180177.pdf


#### 概要

Visual Attention Modeling（視覚的注意モデリング）の最新動向に関する本論文は、視覚的注意のモデル化に焦点を当て、25年間にわたる活発な研究の成果を包括的にレビューしています。この分野では、刺激駆動型の注目、顕著性に基づく注意に特に焦点を当てており、コンピュータビジョン、モバイルロボティクス、認知システムなどの分野での成功した応用を実証しています。

本論文では、約65のモデルの分類を提供し、アプローチ、能力、および欠点を批評的に比較する13の基準を提示しています。さらに、生物学的な計算の妥当性、アイムーブメントデータセットとの相関、ボトムアップとトップダウンの分離、意味のあるパフォーマンス指標の構築など、モデルに関連するいくつかの課題にも取り組んでいます。

本論文では、視覚的注意のモデルを定性的に比較するための主要な基準、モデルが生物学的妥当性、アイムーブメントデータセットとの相関、意味のあるパフォーマンス指標の構築などの課題にどのように対処しているか、現在の研究トレンドと将来の洞察についての情報が提供されています。

この本論文は、視覚的注意モデリングに関心のある研究者や専門家にとって貴重な情報源であり、視覚的注意の理解を深め、将来の研究や応用に向けた洞察を提供しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981660/909c365b-fca6-1cd1-aa55-a4f22922477d.png)


#### 定性的比較のための主要な基準
紹介された注意モデルの定性的比較のための主要な基準は以下の13つです。

1. 生物学的妥当性
2. アイムーブメントデータセットとの相関
3. ボトムアップとトップダウンの分離
4. 意味のあるパフォーマンス指標の構築
5. モデルの複雑さ
6. モデルの柔軟性
7. モデルの汎用性
8. モデルの計算効率
9. モデルのパラメータ数
10. モデルの学習要件
11. モデルの適用範囲
12. モデルの実装の容易さ
13. モデルの性能の安定性

これらの基準は、注意モデルの特性や性能を定性的に比較するための指標として使用されています。


#### 論文中において注意モデリングの現在の研究トレンドと、将来の洞察についてはどのようなものが提供されていますか？

1. 深層学習の活用：深層学習は、画像認識や自然言語処理などの分野で大きな成功を収めており、注意モデリングにも応用される可能性があります。深層学習を用いた注意モデルは、従来の手法よりも高い性能を発揮することが期待されています。

2. トップダウンの注意のモデリング：トップダウンの注意は、タスクや目標に基づいて注意を制御することを指します。トップダウンの注意のモデリングに関する研究は、今後ますます重要になると考えられています。

3. 複数の注意モデルの統合：異なる注意モデルを組み合わせることで、より高い性能を発揮することができる可能性があります。将来的には、複数の注意モデルを統合する手法が開発されることが期待されています。

4. データセットの標準化：注意モデリングの研究においては、様々なデータセットが使用されています。将来的には、データセットの標準化が進められ、より公平かつ正確なモデルの比較が可能になることが期待されています。

5. 応用分野への展開：注意モデリングは、コンピュータビジョン、ロボティクス、認知システムなどの分野で応用されています。将来的には、より多様な応用分野での注意モデリングの活用が期待されています。


これらの提言は、注意モデリングの研究において今後の方向性を示すものであり、将来的にはより高度な注意モデルが開発され、より多様な応用分野での活用が期待されています。


#### この論文の限界は？

この論文の限界は、主に以下の点にあります。

1. ボトムアップの視覚的注意に焦点を当てているため、トップダウンの注意に関する情報が不足していることがあります。トップダウンの注意は、タスクや目標に基づいて注意を制御することを指しますが、この論文ではその側面については詳しく触れられていません。

2. この論文は、視覚的注意のモデル化に関する包括的なレビューを提供していますが、その中で扱われているモデルは、すべてが実際に生物学的な視覚システムに基づいているわけではありません。したがって、これらのモデルが生物学的に妥当であるかどうかについては、議論の余地があります。

3. この論文は、視覚的注意のモデル化に関する包括的なレビューを提供していますが、その中で扱われているモデルの性能については、定量的な比較が行われていません。したがって、これらのモデルの相対的な性能については、より詳細な分析が必要です。

#### 応用例

この論文中では、注意モデルの研究がさまざまな技術的応用に活用されていることが述べられています。これらの応用は、視覚とグラフィックス、ロボティクス、およびその他の領域に分類されています。

具体的には、視覚とグラフィックスの分野では、注意モデリングが画像処理、映像処理、コンピュータグラフィックスなどの分野で活用されています。また、ロボティクスの分野では、自律型ロボットやドローンなどの機械の視覚システムにおいて注意モデルが応用されています。さらに、その他の領域では、注意モデルが医療画像処理、セキュリティシステム、人間と機械のインタラクションなど、さまざまな分野で活用されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981660/5368beae-121a-e100-b8b8-27fd083f8cce.png)


### 所感
2013年と少し古いものにはなってしまうが、サーベイ論文として網羅している．特に分類の部分をもう少し詳しく見てみたい．
初めて転職して、中途社員として活躍するために肝心な3つの心得

メリークリスマス！！
この記事は[リンクアンドモチベーション Advent Calendar](https://qiita.com/advent-calendar/2023/lmi) 2023の25日目の記事になります。

初めまして、リンクアンドモチベーションの清水と申します。
1歳の息子に対していつまでサンタさんを続けるかが最近の悩みです。

2023年8月に中途社員として入社しました。（現在29歳）
現在はバックエンドエンジニアとしてAPI開発を中心に携わり、最近ではPjMの仕事を任せてもらえるようになりました。

この記事では初めて転職したエンジニア向けに、中途社員として活躍するためにやってきたことを書き残しておきたいと思います。
転職を2回以上しているエンジニアの方は、コメントで違う観点のアドバイスをいただけると幸いです。


## 1. 最初はねこをかぶる

入社してすぐはふざけてはいけません。
最初は真面目にコミュニケーションをとってチームとの距離感を測りましょう。
間違っても最初から「ヘイ！マイケル！今日もいい天気だな！」のようなコミュニケーションはやめておいた方がいいでしょう。ドン引きされるだけです。

「なんでも言って！」

そんな言葉に惑わされてはいけません。
チームの共通言語や笑いのポイント、言葉づかい等、気にするポイントはいくつもあります。
業務・MTG・1on1・ランチ・雑談を通して「ここまでは言っても大丈夫だな」「ここまでは踏み込んで問題ないな」のポイントを見極めておきましょう。

チームとの距離感がわかってきたら、徐々に本性を出し始めましょう。
自分が最大限、自然体でいられるようにしておくとパフォーマンスが出しやすくなります。

私は徐々に本性を出して、今ではチームで一番ふざけてるやつになれました。

## 2. 技術のキャッチアップをする

エンジニアであれば当たり前すぎて書くほどでもないかなと思いつつ書いておきます。
私の場合だと、前職でLaravelを使っていて、転職してからはRailsを使っています。
似ているフレームワークなのでキャッチアップの難易度としてはそこまで高くはなかったです。

UdemyとRailsチュートリアルで全体的に手を動かしながら学びました。
ただ、実務で学ぶのが効率が高いと考えているので入社までにがっつりキャッチアップした訳ではありませんでした。

入社した後は、限られた時間の中で、実務に触れる時間を最大限持つことを意識していました。
新しいことを学ぶには質より量だと思っています。
みなさんも転職したら最初からブーストかけてください。
夜、ラーメンに誘われてそこから仲良くなる副次効果もあります。

## 3. やりたいことを言葉にして伝える

1on1とかで上司や先輩と真面目な会話をする機会があると思います。
ここではしっかり「〇〇がやりたい」「〇〇な人材になりたい」と明確に伝えておきましょう。

個人のキャリア構築を積極的に支援をしてくれる会社も増えているので、チームの状況にはよリますが、チャンスがあれば仕事を任せてもらえる確率が上がります。

前職では新人に「やりたいことある？」って聞いたところ、「新機能作りたい！」って言われてどうにか新人にタスクをふれないかと頭を抱えたのはいい思い出です。
後輩を伸ばすのが先輩の仕事でもあるので、どんどんやりたいことを伝えましょう。

もちろん「チームに貢献できる」ことと「やりたいこと」はマッチしてないとダメです。
例えば、Railsの会社で「流行ってるからRUSTで新機能開発やりたい！」は納得できる理由がないと却下されてしまうのがオチです。

## 終わりに

初めての転職ってかなり不安ですよね。
私はちょくちょくQiitaで「転職」のキーワードでよく検索かけてました。
今思えば安心したくて自分と同じような人をずっと探し続けていたんだと思います。

初めて転職する人がこの記事で不安を少しでも取り除くことができたら幸いです。
InstanaのSandbox環境についてまとめてみた

[Instana Observability Advent Calendar](https://qiita.com/advent-calendar/2023/instana)に参加しています。
この記事ではInstanaのSandbox環境について簡単に紹介していきます。
この記事を読むことで以下のことがわかります。
1. Instana Sandbox環境とは何か・アクセス方法
2. Instana Sandbox環境で何ができるのか・何が出来ないのか
3. Instana Sandbox環境と14日間無料トライアルの違い


#### 1 Instana Sandbox環境とは何か
InstanaのSandbox環境とは、Instanaの利用イメージなどを体験することを目的に、IBMが構築した環境です。
この環境ではデモ用のWebサイトを実際に稼働させ、Instanaのエージェントを導入して監視対象の性能情報や各種ログが確認できるようになっています。

Sandbox環境の一番の特徴は、環境が構築済みである点です。
既に環境ができているため、手軽にInstanaを体験することができます。またSandbox環境を利用する上で追加の費用は発生しません。


#### 2 [Sandbox環境](https://play-with.instana.io)へのアクセス方法

Sandbox環境の名称は、Play with Instanaとも呼びます。
アクセスする方法は上のリンクをクリックする他に、[Instanaの製品サイト](https://www.ibm.com/jp-ja/products/instana)にアクセスし、画面中央左の「サンドボックスで体験」をクリックすることでもアクセスできます。
![スクリーンショット 2023-12-20 10.26.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629439/f417a4b3-6751-c50e-6e58-5fa51c51f7b6.png)



:::note warn
画面右上の「無料評価版を試す」をクリックすると、Sandbox環境とは別の無料トライアル版にアクセスしてしまうので、間違えてそちらをクリックしないようにしましょう。
:::


初めてアクセスする場合、下の画像のようにメールアドレスの入力を求められます。

![スクリーンショット 2023-12-20 9.38.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629439/7580381f-f71c-9268-e037-f83e5b3c20ad.png)

メールアドレスを入力し、ContinueをクリックすることでPlay with Instanaを開始することができます。

以下の画面が表示されたら成功です。
![スクリーンショット 2023-12-20 10.54.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629439/62aba5e5-9978-e288-2394-51a18e40d0eb.png)


#### 3 Sandbox環境とチュートリアル

Sandbox環境にはInstanaで出来ることをわかりやすく説明した、未経験者向けのチュートリアル機能があります。
チュートリアルではInstanaの基本的な機能についてガイド付きで説明してくれます。
左下のTake Tourボタンを押すとチュートリアルが始まります。
![スクリーンショット 2023-12-20 11.24.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629439/bb4fa210-673f-6c3f-3927-5c6639f1a49d.png)
チュートリアルではいくつかコースがあり、それぞれ右側の水色枠で囲われた部分をクリックすると開始することができます。
操作手順も教えてくれるので、初めはチュートリアルを受けてみることを強くお勧めします。
チュートリアルそのものは英語ですが、ブラウザの翻訳機能を使えば英語が苦手な人でも何とかなる内容になっています。

チュートリアル以外にも、Sandbox環境では、環境そのものに影響を与えないことについては自由に操作できます。

#### 4 Sandbox環境で出来ないこと
残念ながらSandbox環境は完璧ではありません。色々と出来ないこともあります。

まず、Sandbox環境そのものに変更を加えるような操作はできません。
例えば新規に監視対象を追加することはできないようになっています。
また、Setting画面は触れないようになっている為、UIの言語は英語のままです。

Sandbox環境は一つの環境を多数の利用者が共有して使う関係上、仕方のない制限事項なのかなと思います。


#### 5 Sandbox環境とフリートライアルの違い

フリートライアル版ではSandbox環境で出来なかったことができるようになっています。
一方監視対象などは導入されておらず、自分でエージェントの導入などをする必要があります。
また、Sandbox環境と違い、14日間の期限があります。




#### まとめ
Instana Sandbox環境は、これまでInstanaを触ったことがない方向けの、デモ環境のようなものです。

個人的には、これまでInstanaを触ったことがない方は、まずSandbox環境でInstanaを体験してみるのをお勧めします。
Sandbox環境でInstanaを一通り触った後、気になるところを無料トライアルの方で自分の手を動かして色々と試してみると、新しい発見があるかも知れません。
脆弱性診断実施前にする対象調査の時点で「ある問題」を見つけたらチケットを起票しているよ、の話

これは [シーエー・アドバンス Advent Calendar2023](https://qiita.com/advent-calendar/2023/ca-advance "シーエー・アドバンス Advent Calendar2023") 20日目の記事です。
19日目の記事は @yagisawa_riko さんの 「[tableauを使って推しが総選挙10位内に入るためのデータ分析してみた](https://qiita.com/yagisawa_riko/items/f6615ad491544b847a4f "tableauを使って推しが総選挙10位内に入るためのデータ分析してみた")」 でした。
21日目の記事は @azama_yasuhiro さんです。

# はじめに
こんにちは。
シーエー・アドバンス（CAAD）技術統括本部セキュリティチームの @asami-H-Ishi です。
社内（グループ会社含む）サービスの脆弱性診断をサポートする業務として、主に診断前の対象調査を担当しています。
開発未経験で異業種から転職して、10月で8年目に入りました。
入社当時の自分が理解できるレベルを意識して社内マニュアルやQiita記事を書いています。
（マニュアルについては過去に「[業務内容のマニュアル化のすすめ〜弊社脆弱性診断チームの事例を添えて〜](https://qiita.com/asami-H-Ishi/items/461365a2c94e10312f45 "業務内容のマニュアル化のすすめ〜弊社脆弱性診断チームの事例を添えて〜")」という記事を書いていますので、よかったら読んでみてください٩( ᐛ )و）

さて、8年目ともなるとアドベントカレンダーのネタに困るようになってきました。
今回はタイトルどおり**脆弱性診断実施前にする対象調査の時点で「ある問題」を見つけたらチケットを起票しているよ、の話**をさせていただきます。

# 脆弱性診断って？　対象調査って？
脆弱性診断は、攻撃者が付け入ることのできる弱点（**脆弱性**）がないかどうかをチェックするセキュリティテストです。
プログラムの不具合（バグ）や設計上のミスによりできてしまった脆弱性を放置すると、不正アクセス、データの改ざん、情報漏洩、マルウェアの感染などのトラブルに発展するおそれがあります。
脆弱性診断を実施する目的は、「ユーザ情報が漏えいする」「システムを踏み台にされる」といった事故が発生しないようにすることです。

脆弱性診断の流れは、ざっくり下記のとおりです。
<table>
  <caption>脆弱性診断の流れ</caption>
  <thead>
    <tr>
      <th>#</th> <th>流れ</th> <th>備考</th>
    </tr>
  </thead>
  <tr>
    <td>1</td> <td>ヒアリング</td> <td>対象サービスの情報を聞き取ります</td>
  </tr>
  <tr>
    <td>2</td> <td>対象調査</td> <td>サービスにアクセスして規模、機能等の情報収集をします</td>
  </tr>
  <tr>
    <td>3</td> <td>工数見積</td> <td>診断に必要な工数を見積もります</td>
  </tr>
  <tr>
    <td>4</td> <td>脆弱性診断</td> <td>ツール診断、手動診断を実施します</td>
  </tr>
  <tr>
    <td>5</td> <td>チケット起票</td> <td>検出された脆弱性の報告をします<br>※弊社では報告書の作成は行わず、チケットで管理しています</td>
  </tr>
  <tr>
    <td>6</td> <td>修正対応</td> <td>※サービス開発側で実施</td>
  </tr>
  <tr>
    <td>7</td> <td>再診断</td> <td>指摘事項の修正が完了しているか確認します</td>
  </tr>
  <tr>
    <td>8</td> <td>診断完了</td> <td>起票したチケットがクローズになったら診断完了です</td>
  </tr>
</table>

上記2番の対象調査では、診断を実施する前に対象サービスについて情報収集をし、サービスの規模、機能などを確認しています。
診断作業ではなく確認作業が主なので、この時点で脆弱性を報告する「チケット起票」は行いません。

**Q.じゃあなんでこの記事のタイトルは　"対象調査の時点で「ある問題」を見つけたらチケットを起票しているよ"　って書いてあるの？**

**A.後述の観点さえあれば、対象調査の時点で見つけられるからだよ！**

# 対象調査中に見つけたら起票する「ある問題」と、見つけるための観点、そして対策
対象調査中に見つけたら起票する「ある問題」とは、下記のとおりです。
- 利用していない古いAPI
- 利用していない古いページ
- 利用していない古い機能

これらが存在している、動いている状態のアプリケーションでは、次のようなリスクが考えられます。

- 開発側が想定していない下記事象が起こる可能性
    - データの不整合
    - 認可制御のバイパス
    - 情報の漏洩
- 開発側が把握できずそのまま放置される可能性
    - 新たな脆弱性が報告された場合に調査されない

「利用していない」時点で、メンテナンス対象から漏れてしまう・すでに漏れていることが考えられます。
メンテナンスできていないことによるリスクについては、挙げるまでもありません。
そして、**「利用していない」「メンテナンスしていない」箇所はリスクがある**、という観点があれば、該当箇所は簡単に見つけられます。

そして、対策は端的に、「**利用していない古いAPI、ページ、機能は削除する**」です。

# おわりに
今回の記事は、サービスを開発・運用していく上で気をつけられることとして書きました。
リスクを減らすため、利用していないAPI、ページ、機能は削除しましょう！
思えば、家の中でも使ってないものは捨てた方がいいですよね（いつか使うかも、と取っておいた結果、ダンボールから虫がわくとか、着なくなった服を手入れできず置いていたらお気に入りの服まで傷んでしまった、とか……）。
年末に向けて大掃除のことも考えなければいけませんね。
とりあえずクリスマスを楽しんでから、大掃除頑張って、よい新年を迎えましょう！
全ての要素を用いた処理 (paizaランク D 相当)

https://paiza.jp/works/mondai/array_utilization_primer/array_utilization_primer__reduce

九九の問題からどうやって解くか難しかった

たとえば入力がこれだとすると
```
入力例2
5
1
2
3
4
5
```
Nは５なので（ちなみに必ず２以上）、すべてのペアをだす場合

A = 2　B = 1
A = 3  B = 1~2
A = 4  B = 1~3

と、要素数−１分ループさせることになるので
こうなる。
ちょっとループで混乱した。。。

```py
N = int(input())
A = [int(input()) for _ in range(N)]
for i in range(N):
    for j in range(i):
            print(A[i]*A[j])

```
Einstein製品のライセンスなど


# Einstein Discovery 

https://trailhead.salesforce.com/ja/content/learn/modules/einstein-discovery-quick-look/meet-einstein-discovery

 Einstein Discovery には、CRM Analytics Plus ライセンスと Einstein Predictions ライセンスのいずれかが必要です。いずれも有料オプションとして購入いただけます。

 # Einstein Recommendation Builder

 + [From Setup, enter Einstein Recommendation Builder in the Quick Find box, then select Einstein Recommendation Builder.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007UsQhp)

:::note
After reading the documentation clearly, I have realized that the feature is available in Enterprise, Performance and Unlimited editions only. Also, it requires Service Cloud Einstein add-on license.

In my case, the org is Unlimited edition but the license was not available and that is why the option is not visible in setup.

​​​​​​​I also have verified in both Developer edition and Trailhead Playgrounds, but this option is not available.​​​​​​​ 

https://salesforce.stackexchange.com/questions/313684/einstein-reply-recommendations-not-visible-in-setup
:::
IBM Workload Scheduler のエージェントタイプ(FTA or DA?)

2023年もそろそろ終わりですね。
年末のIWS小ネタです。

IBM Workload Scheduler（以下IWS）をご利用いただいているお客様では、昔からある Fault Tolerant Agent（以下FTA）をご利用いただいているケースが多いのですが、最近では Dynamic Agent（以下DA）というタイプのエージェントも追加されています。
IWSは最近では多くのアプリケーションと連携するためのプラグインを提供しており、さまざまなアプリケーションの処理をIWSから起動することができます。プラグインを介してこのさまざまなタイプのジョブを実行できるのが、DAです。

FTAとDAはそれそれの特性があり、ジョブの実行の仕方も少々異なります。ジョブの実行の仕方の違いについては、[こちら](https://qiita.com/satoponpon/items/758a310b78e14ff6133f#%E3%82%B8%E3%83%A7%E3%83%96%E3%81%AE%E5%AE%9F%E8%A1%8C "IBM Workload Schedulerのジョブスケジューリングの基本 - ジョブの実行")も参考にしてください。

ここでは7つのポイントについて、FTAとDAそれぞれの特性をまとめます。
|比較ポイント |FTA|DA|
|---|---|---|
|インストール方法|twsinstコマンド|twsinstコマンド|
|ジョブの実行方法|IWS MDMから配布された計画ファイル(Symphonyファイル）に従いジョブを実行|IWS MDM上のBrokerサーバーへジョブ実行命令をポーリングし、逐次実行|
|MDMダウン時の動作|IWS MDMダウン中も、他のFTAに依存しないジョブを単独で実行可能|IWS MDMダウン中はジョブを実行できない|
|実行可能なジョブタイプ|shell, bat などのスクリプト、単独実行可能なプログラム、Access Method(SAP等）ジョブ|shell, bat などのスクリプト、単独実行可能なプログラム、各種Pluginジョブ（DBジョブ、ファイル転送ジョブ、アプリケーション連携ジョブなど）|
|ジョブの定義方法・形式|DWCやcomposer コマンドで定義を編集、独自の記述形式に従ったテキストベースの定義|DWC, composer コマンドで定義を編集、独自の記述形式に加えて詳細パラメーターはXML形式で定義|
|単独インストール可否|可能（DAとの共存も可能）|可能（FTAとの共存も可能）|
|エージェントの冗長化方法|ジョブを実行するサーバーが共有ディスクを持つクラスター構成であれば共有ディスクに導入、共有ディスクがないクラスター構成の場合はそれぞれのサーバーにFTAを導入、切り替え時はジョブネットを切り替え先で引き継ぐための設計上の工夫が必要|ジョブを実行するサーバーが冗長化されている場合はそれぞれのサーバーにDAを導入し、"プール"を作成、アクティブになっているサーバーにジョブを振り分ける

このようにFTAとDAとでそれぞれに特徴があります。
各サーバーでのジョブの実行要件に応じてどちらのエージェントを導入するか決めるのも良いですし、全サーバーにFTAとDAの両方をインストールして用途に応じて使い分ける、といった方法も考えられます。
既存の環境へ新たにエージェントを追加する場合や、新しくIWSによるジョブ管理を導入する場合の参考になれば幸いです。

本記事は以上です。
誰でも無料でGoogle Colaboratoryのコード生成AIが使えるようになった、やばい

2023年12月19日にGoogle Colaboratoryで「Colab AI」というコーディングアシストAIが全ユーザーが無料で利用できるようになりました！！！

これまでは、有料プランに入っているユーザーしか使えませんでしたが、現在は全ユーザーが無料で使えるようになっています。

https://blog.google/technology/ai/democratizing-access-to-ai-enabled-coding-with-colab/

## Colab AIとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356814/f462cf25-963a-3988-2ef8-459415e73cf2.png)


「Colab AI」はGoogle Colab上で、GIthub CopilotのようにAIからコーディングのサポートを受けることができるペアプログラミング機能です。

![generate-cropped (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356814/c54ead99-f811-c279-cab2-aef08791206a.gif)


この機能を利用することで、ユーザーがコードを記述する際、AIがその続きを予測して提案を行うAI補完機能や、自然言語に基づきコードを自動生成する機能、さらにはColab内でコーディングの疑問点などを直接質問できるチャット機能が利用できます。

更なる詳細や、料金・始め方などについては以下の記事で解説しています。

https://generativeinfo365.com/?p=1857

## Colab AIでできること

### 自然言語でのコード自動生成

Colab AIには自然言語での簡単な指示だけで、欲しいコードを自動で生成してもらう機能が搭載されています。

具体的には、Colabのノートブックに追加された”生成”ボタンを押すことで表示される入力欄に、テキストでの指示を入力することで対応するコードが生成されます。

![generate-cropped (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356814/c54ead99-f811-c279-cab2-aef08791206a.gif)

例えば、「フィボナッチ数列のn番目を計算する関数」という指示を入れると、Colab AIはその指示に沿って「フィボナッチ数列のn番目を計算する関数」のコードを自ら記述して提案してくれます。

これによりユーザーは自らコードを記述する量を大幅に減らし、効率的に開発を行うことができるようになります。

### AIにより自動補完機能
Colab AIは「GitHub Copilot」と同様に、入力した関数名やこれまでのコードに基づいて適切なコードを自動的に提案してくれます。

例えば、二つの日付の間に何日があるかを計算する「days_between_dates」いう名前の関数を作成するとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356814/7a1b7316-9a24-287d-5060-6c23f461a119.png)

Colab AIを有効にしていると、「days_between_dates」という名前の関数を作成するだけで、自動的に適切なコードをグレーの文字で提案してくれます。

このように表示された提案が適切であれば、Tabキーを押すだけで提案されたコードを受け入れることができます。

### チャット機能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356814/12cd595b-03a1-4f02-e5b5-751f77300615.png)


Colab AIは、自然言語を使ったコード生成やAI補完機能に加え、ChatGPTやbardのようにチャット形式でAIにプログラミングに関する質問ができるチャット機能が組み込まれています。

このチャットボットを利用することで、プログラミングに関する疑問を持った際に、Google Colab内ですぐに質問して解決することができるようになります。

これにより、Googleなどの外部ブラウザで情報を探す時間が大幅に削減され、開発の効率が向上します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356814/93a028d1-78d4-958c-9d68-840b22d02a0b.png)


具体的には、「Googleシートからデータのインポート方法は？」や「PandasのDataFrameのフィルタリングはどう行うのか？」といった質問にも、速やかで的確な回答を提供してくれます。

さらに、この機能はColabの既存環境に組み込まれているため、追加のセットアップやインストール作業なしで手軽に利用することが可能です。

### エラーの説明＆原因特定機能
Colab AIの利用中、エラーが発生した際には、Colab AIがそのエラーの原因や解決方法を推測して、ユーザーに対して説明や提案を行ってくれる「エラーの説明」機能を利用することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356814/ba9597a6-a4f6-23ab-ec0d-b861f973e398.png)

Colab AIを有効にしていると、エラーが発生した際に出力結果にエラーメッセージの下に「エラーの説明」というボタンが表示されます。

もしエラーの原因や解決方法が知りたい場合には、このボタンをクリックすると、エラーの詳細な原因や修正に関する提案をチャット形式で受け取ることができます。

特に、複雑なプログラムや長いコードの中でエラーを追跡し、原因を特定するのが難しい場合には、この機能は非常に役立ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356814/6b1d2dac-7a37-5161-dfa1-4ff665462811.png)

デフォルトでは英語で説明されますが、チャット上で「日本語で説明してください」とお願いすれば日本語でも説明してくれます

この機能を有効活用することで、これまでかかっていたエラー解決の際の手間や時間を大幅に削減し、効率的に開発を進めることができます。

## 

更なる詳細や、料金・始め方などについては以下の記事で解説しています。

https://generativeinfo365.com/?p=1857
カオスな匿名SNS「Chaos」を作りました。

この記事は[クソアプリ Advent Calendar 2023](https://qiita.com/advent-calendar/2023/kuso-app)の20日目の記事です。

# つくったもの
![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62182/84090aba-8df2-5c9f-4d5b-6fd5be1318d0.png)

https://chaos.umiremix.com

匿名カオスSNS「Chaos」を作りました。

# カオスなポイント

カオスにするためのこだわりポイントを紹介します。

### アニーション

![](https://i.gyazo.com/6debfa223b93e66c36b5a1d69a4d4d74.gif)

たくさん動きます。

### サウンド

音が鳴ります。

### 匿名ログイン

匿名で投稿が可能です。

### いいね押し放題

5000000000000000000回でもいいねできます。

# 作った理由

最近のサービスのトレンドとして「きれいなインターネット」というのがあるかなと思っています。

例えば[Instagram](https://www.instagram.com/)だと他人の投稿のいいね数が見えなくなったり、AIでネガティブな投稿を見せない機能が色々なサービスで取り入れられていたり、 [しずかなインターネット](https://sizu.me/)が生まれたり。

でもクソアプリなのでトレンドとは逆を行き、「カオスなインターネットを愛したい」というコンセプトで今回[Chaos](https://chaos.umiremix.com)を作りました。

あと、パチンコの確定演出みたいな脳みそがバグるようなサービス前々から一回作ってみたかったんですよね。

# 技術スタック
- Nuxt3
- TypeScript
- Firebase
    - Authentication
    - Firestore
    - Hosting

# 使用素材

https://googlefonts.github.io/noto-emoji-animation/

https://fonts.google.com/noto/specimen/Noto+Color+Emoji

https://fluentemoji.com/

https://www.npmjs.com/package/canvas-confetti

https://www.npmjs.com/package/cursor-effects

https://soundeffect-lab.info/

https://taira-komori.jpn.org/index.html

https://animate.style/

https://dova-s.jp/

https://swiperjs.com/

# さいごに
ぜひ遊んでみてもらえると嬉しいです！良いお年を🤟

https://chaos.umiremix.com/
なぜ人はルールを無視してしまうのか

運用保守に携わる人において、あえてルールを無視したいと思う人はそうそういないと思います。
ですが、故障情報などを分析している、「手順書にない作業をした」とか「想定外の際にストップしなければいけないのに進めてしまった」とか「～～のルールの徹底が出来ていなかった」といった、ルール違反による事故をよく見かけます。

以前、とある現場でこれに関連した講演をしたことがあるので、何か参考になればということで書いてみます。

## 違反の種類
そもそもルールを無視するという行為は「組織事故 ～起こるべくして起こる事故からの脱出～」という書籍（ジェームズ・リーズン著）において、以下の３つに定義されています。
1. 日常的な違反
1. 楽観的な違反
1. 必要な違反

これについて、私なりに運用保守の例も交えて紹介してみます。

## 日常的な違反
スキルベースの作業において、短絡的行動をとる違反のことを指します。
運用保守現場の例でいえば、何らかの作業をする際に作業前の状態でバックアップを取っておく場合があったとします。この作業が毎月実施している定常作業で、100回やって100回成功するような状況になってくると、徐々に「どうせ成功するし、面倒だからバックアップは今回は飛ばしてもいいか」となってしまう可能性がある（かもしれません）。
これに該当する違反は結構身近に潜んでいるものではないかと思います。

## 楽観的な違反
個々人の行動パターンなど様々な動機で引き起こされる違反のことを指します。
運用保守現場の例だとあまりないパターンかもしれませんが、とあるコマンドを実行する際に、A→B→Cと実行しなければいけない手順だったとします。ここで作業者が「これ、XXXXで条件も入れたら1回でいけるかも？」と好奇心で実施してしまったというようなイメージになるかと思います。（ちょっとわかりにくいか・・？）
この楽観的な違反は、さすがに運用保守現場ではあまり起こりえないような印象があります。
（というよりも、これが起こってしまう現場ではそれ以前に色々な問題を抱えていることでしょう）

## 必要な違反
これは規則を守っていると仕事が終わらないような場合に引き起こされる違反のことを指します。
これの怖いところは、この違反に慣れると日常的な違反に変化することがあるということです。
（個人的にはこれが最も危険、かつよくある違反なのではないかと思う）

運用保守現場でもベテランの人が長年の経験の間に習得した、作業手順書には記載されていない裏技のようなものがあり、作業者の間でこっそりと引き継がれることもあるかと思います。そして、気づいたころにはこの違反は日常作業へと変化し、違反していることすら認識されなくなるということになります。
（事故が起きた時には、もはやいつからなど追うことも難しいかもしれません）

## で、どうする？
人間が作業をする以上は、全ての違反を100％防ぐことは難しいかもしれません。
ただ、日常的な違反も必要な違反も、共通するのは指定された手順通りにやっていると仕事が終わらないような設計になっていると起こりやすい環境になるということかと思います。

オペミスを防止するために作業を細かく分割することは非常に重要ですし、過去のトラブル経験から作業手順書もより重厚なものになっていくことでしょう。
しかし、作業手順書が手厚くなっても作業終了時刻が変わっていなければ、作業者を圧迫する可能性もあります。逆に作業者は、冗長だと感じた部分について、なぜこの手順があるのか、なぜこの手順じゃダメなのかを確認することが必要だと思います。

## 悪いルールに違反するのは正か悪か
先ほどあげた書籍のなかで他に印象に残ったのは、悪いルールに違反することについての事例でした。
パイパーアルファ油田の事故の例ですが、この件では、緊急時に退避するルートが予め定められており、ルールを順守した人々はそこに集合していました。
しかし、不幸にもそこが事故の際の爆発の通り道になってしまったそうです。そして、このルールに違反した人（違反した理由は色々あったと思いますが）は、別のルートに退避しており、爆発から逃れることができたそうです。

ルールを守ることは当然であり、とても重要なことではありますが、そのルールが良いルールか、悪いルールかによって結果は異なります。そして、ルールに違反して成功するのは正しいのか難しいなと感じました。（おそらくケースバイケースでしかない）

人命にかかわるようなシステムは話は別ですが、そこまでのインパクトがないシステムの運用保守のケースでは、悪いルールだと気づいたら立ち止まること、ルールを守りながらも何か違和感があれば突き進まずに確認することが重要なのだろうと思います。

## 結論
* ルールは必ず守ること
* でも、ルールが必ず正しいとは限らないことも意識しておく
* 経験値による直感も時には大事な道しるべになることもある（※）

※似たような話の記事もあるのでリンクを紹介します
https://un4navi.com/management/23157/