OmniAICreator/Qiita-1.07M huggingface dataset:
Siv3D でよく使う便利機能たち

[Siv3D](https://siv3d.github.io/ja-jp/) にはゲーム開発に役立つ機能がたくさんありますが、中でも実際に私がゲームを作るときよく使っている便利な機能を、使用例とともにピックアップしてみました。

## Periodic

https://siv3d.github.io/ja-jp/tutorial2/motion/#186-%E5%91%A8%E6%9C%9F%E7%9A%84%E3%81%AA%E3%83%A2%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3

画像やテキストを点滅させたり、揺らしたりなどの動きを加えるときに便利です。

点滅させるときは `.draw(ColorF(色, Periodic::Square0_1(100ms)));` とか。

### 例：テキストの点滅（ゲームスタート）
<img width="320" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35599/a8f61fc9-2938-889a-ef90-5b1362066548.gif">

https://github.com/voidproc/hand/blob/8dbeff5dac646c2b8432ca4221824717d9de1fb6/hand/Scene/TitleScene.cpp#L93

### 例：カーソルの点滅

<img width="320" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35599/37d15015-c757-fab3-28fa-6f9f025bca1b.gif">

https://github.com/voidproc/chocokurei2023/blob/a34173163e1a9f37c5daa3790e5df5e160c4be88/chocokurei/MainScene.cpp#L134

## Stopwatch, Timer

https://siv3d.github.io/ja-jp/tutorial2/time/#305-stopwatch-%E3%82%AF%E3%83%A9%E3%82%B9

一定時間後になにかしたいとき。例えば、タイトル画面でマウスをクリックしてから T 秒後に次のシーンに移るとか、ダメージを受けたら一定時間点滅するなど、時間に関係するちょっとした処理に多用しました。

`progress0_1()` で 0.0～1.0 の範囲の値が得られるので、そのままイージング関数に渡したりできるのも便利です。

## イージング関数

https://siv3d.github.io/ja-jp/tutorial2/motion/#189-%E3%82%A4%E3%83%BC%E3%82%B8%E3%83%B3%E3%82%B0

動きが直線的で単調にならないように、ということで上記の Periodic や Stopwatch と一緒によく使いました。

### 例：スライドしてくるテキスト

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35599/c0baed5c-74f6-75f5-fbe4-e891084d5754.gif">

https://github.com/voidproc/hand/blob/406e303257439c14cf0bb7c5ed45822ca73d604a/hand/RankingScene.cpp#L108

イージングを使わないと：
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35599/d6190868-0628-88a6-3c24-1ff5227f8d24.gif">

## Effect

https://siv3d.github.io/ja-jp/tutorial3/effect/

爆発やキラキラなど、発生してはすぐに消えるような装飾に。

### 例：煙
<img width="320" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35599/fd539ab5-24f6-1ab5-b99b-5ec81bc8dd4c.gif">

https://github.com/voidproc/parking/blob/59505412be48c6ca71f1ff24fd980a678d019786/parking/Main.cpp#L17

### 例：敵を倒した時の黒くはじけるエフェクト
<img width="320" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35599/23d8aa14-036a-9264-690c-13d429ab0cb1.gif">

https://github.com/voidproc/hand/blob/8dbeff5dac646c2b8432ca4221824717d9de1fb6/hand/Character/Enemy.cpp#L89

## アセット (TextureAsset, FontAsset, ...)

https://siv3d.github.io/ja-jp/tutorial3/asset/

Texture や Font、Audio などを、一度登録しておけばどこからでもアクセスできて便利。

## あたり判定

https://siv3d.github.io/ja-jp/tutorial2/2d-intersection/

あらゆる図形に対して `図形A.intersects(図形B)` で判定できるのがとても楽。

敵とかが画面内にいるかの判定 `Scene::Rect().intersects(敵)` をよく使います。

https://github.com/voidproc/hand/blob/8dbeff5dac646c2b8432ca4221824717d9de1fb6/hand/Character/Enemy.cpp#L251
Stimulusを使ってドラッグアンドドロップ機能を実装する

# はじめに

以下の記事を参考に、Stimulusを使ってドラッグアンドドロップでの並び替え機能実装を学びました。
https://maful.web.id/posts/build-drag-and-drop-with-rails-hotwire/

その際詰まったり、理解が難しかったことをまとめておきます。

# 並び替え機能実装の要点
まず、並び替え機能を実現するには(Rails7以前からも存在していた)`ranked-model`というgemが必要です。

### ranked-modelとは

並び順を持つモデルインスタンスを作る際に必要な機能を提供してくれるgemです。

https://github.com/brendon/ranked-model

#### 使い方
必要なカラムをモデルに追加します。

```bash:ターミナル
rails g migration AddRowOrderToDucks row_order:integer
rails db:migrate
```

以下のようにモデルにincludeして使います。並び順に必要なカラムも指定します。

```ruby:モデルクラス
class Duck < ActiveRecord::Base

  include RankedModel
  ranks :row_order

end
```

並び順の変更は以下のように行います。

```ruby: 
@duck.update row_order_position: 0
```

非同期で並び替えたい時は、以下のようなajaxリクエストを期待しています。

```javascript:
$.ajax({
  type: 'PUT',
  url: '/ducks',
  dataType: 'json',
  data: { duck: { row_order_position: 0 } },  // or whatever your new position is
});
```

このようなリクエストを、Stimulusから送る形にすれば良いということです。

### @rails/request.jsとは

Ruby on Rails 7で導入されたJavaScriptライブラリの一つで、AJAXリクエストを簡単に行うための機能を提供します。このライブラリは、Railsアプリケーションで必要とされるヘッダー（例えば、X-CSRF-Token）をデフォルトで送信するロジックをカプセル化しています。これにより、JavaScriptでのAJAXリクエストの作成をシンプルにできます。

stimulusのコントローラでは以下のようにリクエストを書いています。

```javascript:sortable_controller.js
  onEnd(evt) {
    const body = { row_order_position: evt.newIndex }
    patch(evt.item.dataset.sortableUrl, {
      body: JSON.stringify(body),
      responseKind: "turbo-stream",
    })
  }
```

ここにある`patch`関数が、`request.js`で定義されているajaxリクエストのショートハンドです。
レスポンスのデータ形式を`turbo-stream`で指定できるのが嬉しいですね。

### sortablejsとは
ドラッグアンドドロップで要素の順序を変更できる機能を提供するJavaScriptライブラリです。このライブラリは、要素のドラッグアンドドロップ操作に関連する様々なイベントを発火させます。

その中のonEndイベントは、要素のドラッグ操作が終了した時に発火します。


onEnd(evt)関数はこのonEndイベントのハンドラーで、evtはイベントに関連する情報を含むオブジェクトです。このオブジェクトには、ドラッグされた要素、新しいインデックス（evt.newIndex）、元のインデックス、その他のドラッグアンドドロップ操作に関連する情報が含まれています。

このイベントハンドラーは、ドラッグアンドドロップ操作が完了した後にサーバー側にデータを送信するために@rails/request.jsのpatchメソッドを使用しています。これにより、サーバー側のデータがクライアント側の変更に合わせて更新されます。

# 終わりに
Ajaxを使ってできることについては全てHotWireに置き換えることで、コードを書く量やわかりやすさを向上させることができると感じる良い例でした。
【Mac】APIの検証時に便利なApiScout

# はじめに
アプリを実装していたりするとApiを叩くケースも多いと思いますが、実装前にAPIを検証したいケースがあったりしますよね。
Apiの検証には色々とやり方があるとは思いますが、今回はAppStoreにMac用のアプリとしてリリースされている、ApiScoutというアプリが便利だったのでご紹介したいと思います。

# ApiScout
ApiScoutはちょうど一年ほど前に正式版がリリースされたMac用のアプリケーションになります。

![ApiScout](https://theapiscout.com/assets/images/apiscout_hero.png)

デザインもMacに合わせて調整されており、ダークモードなどの切り替えも可能です。

実際に使用してみましたが、便利な点としては以下です。

- 叩いた履歴を細かく残せる
- 環境変数などを作成しておくと、ユーザーを切り替えたい場合などに簡単に切り替えが可能
- APIのグループ化が可能で、連続したAPIの疎通などを試すことができる

以上になります。
基本的にはよくある他のツールと変わりませんが、Apiのグループ化や環境変数など検証に特化した機能が便利な印象ですね。

逆に不便だなと感じた点は以下です。

- 実行ボタンがなく、URLからEnterで実行しないといけない
- BodyのJsonがダークモードにすると黒くなり見づらい
- 日本語化されていない

以上になります。
実行方法がEnterでの実行でしかなく、この点が不便に感じました。
それと一部の文字がダークモードにすると黒くなってしまってみづらい印象ですね。

不便だなと感じるポイントはいくつかありますが、それでも簡単にパラメータを切り替えられたりなど、便利な要素も多い印象です。
なれてしまえば問題ない部分だと思いますので、お勧めできるツールかと思います。

こちらのアプリは以下より詳細を参照可能ですので、関連のツールでお困りの方は是非試してもらえればと思います。

https://theapiscout.com/

ちなみに上記を作成された方は他にもSSLのモニタリングツールやJsonEditorなども作成されているようなので、気になる方は試してみると良いと思います。

# さいごに
色々と普段使っているツールがありますが、時間ができたときにでも色々他のものも触ってみると気がつくことも多かったりしますね。
固定的な視野で環境を決めるのではなく、柔軟に色々取り込んで行けたらいいなと思います。
Mozilla台湾コミュニティからいただいたノベルティグッズの紹介

# 概要
今年度の MDC 活動での振り返りとして、2023 年度 OSC 東京（春・秋）で配布していた台湾コミュニティからいただいたノベルティグッズの紹介をします。
Quiita 内に書く記事なので、エンジニア的な観点から「デモ重要」というところを焦点に当てた記事としています。
# OSC展示ブースの写真
（注記）私が撮って Twitter に上げた写真と同じです。
春：
![2023_tokyo_spring.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3660158/ce4024e7-7a32-ad12-3976-32cccc62e4a6.jpeg)
秋：
![2023_tokyo_fall.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3660158/e194421e-1a8f-6ccd-f402-bdd07b2ca3a6.jpeg)
Firefox シールは日本コミュニティの松澤太郎さんからの提供です。春にすべて配り切ったので、秋には存在しません。
他はコミュニティ紹介チラシ、展示説明用ノートPCを除き、台湾から送られてきたグッズです。こちらから何が欲しいというリクエストを送ったわけでもなく、初見のグッズばかりでした。
# 一番印象に残ったグッズ
一番印象に残ったグッズをアップで紹介します。これは一体何？というのが最初の印象でした。
充電ケーブル USB-Aから、Type-C, iPhone端子へ（※名称は管理上のもの）:
![usb_goods.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3660158/6b9f06c9-afe3-24dc-bf27-eb54a0c1055c.jpeg)
写真の状態では、かろうじて USB の何かだろうということはわかるのですが、上の説明のものであることはわからないと思います。
そこで、開封して中身を動かしてみたのが下の写真です（リングははずしています）。
![usb_goods_open_demo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3660158/94eafff1-2d13-0b3e-61f3-436cfa6f5f56.jpeg)
Lightning 端子があるのがわかるかと思います。OSC のブースでは、来場者に対して、開封した中身を実際に動かして説明していました。普段の仕事ではバックヤード的な位置にいるので、直接人に何かを一から説明することは少ないのですが、デモ重要だなあというのを実感した次第です。
他にも来場された方との会話や他のブースの展示など、得られることも多いので、来年も OSC に参加する予定です。
Webエンジニアリングと有馬記念：年末の振り返りと祝祭の融合

この記事は [SUPER STUDIO Advent Calendar 2023](https://qiita.com/advent-calendar/2023/superstudio) の23日目の記事になります。

こんにちは、皆さん。年末が近づくにつれ、私たちの心はワクワクとした期待で満たされます。そして、今年のアドベントカレンダーでは、Webエンジニアリングの世界と、明日開催される日本の伝統的な競馬イベント、有馬記念とのユニークな結びつきを探求したいと思います。

2023年はWebエンジニアリングにおいて、多くの興味深い動きがありました。AIの進化、クラウドサービスの普及、そして何よりもコードのアートのような創造性の高まりが見られました。これらはまるで競馬の世界における熱い戦いと似ています。有馬記念は、年末の祝祭として、最高の馬たちが集い、その年のチャンピオンを決定します。このレースは、スキル、速さ、そして戦略の見事な融合を示しており、私たちの業界でもこれらの要素が重要です。

Webエンジニアリングでは、新しい技術の迅速な採用、効率的なコードの書き方、そしてプロジェクトの効果的な管理が求められます。これらは、競馬での騎手のスキル、馬の速さ、そしてレース戦略に似ています。有馬記念のように、私たちも年末に向けて、自分たちの業績を振り返り、来年への目標を立てます。

この年末、私たちは技術の進歩を祝いながら、明日の有馬記念にも注目します。レースの勝者は、勇気と持続性、そして優れた戦略の象徴です。これらは、私たちが日々の業務で目指すべき資質でもあります。2023年を振り返りながら、新しい年への希望と目標を抱いて、私たちは前進していきます。

最後に、皆さんにとって、この年末が幸せであることを願っています。そして、明日の有馬記念が素晴らしいものになるよう、私たちは楽しみに待ちます。技術の世界でも、競馬の世界でも、最高の瞬間を共有し、新しい年への素晴らしいスタートを切りましょう。

メリークリスマス！
<br>
<br>



![スクリーンショット 2023-12-23 16.23.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14156/2ecdb5ea-2a9c-d1fb-0d87-f0c832ba27ce.png)
<br>
<br>
<br>


...はい、というわけで、ChatGPTに全部書いてもらったんですが、いかがでしたでしょうか？
こんにちは、今度こそ本当の、細川です。途中で何かいつもとテンションが違うな、と気づきましたか？

# AIが得意なこと
実は、この記事の前半部分は全てAI、具体的にはChatGPTが執筆したものです。
技術の進化はただ目覚ましいもので、文章を書くという面でも、AIは私たち人間に近づいてきています。
この実験を通じて、AIの可能性を皆さんに感じていただけたら幸いです。

AIは、単にコードを書くツールとしてだけでなく、アイデアの発想、文章の作成、さらには複雑な問題解決にも役立つようになってきています。
2023年、特にWebエンジニアの世界では、このようなAIツールの存在がますます重要になってきました。

しかし、AIが完璧というわけではありません。まだまだ人間の創造性や直感にはかなわない部分も多く、その点では人間がかろうじて勝っている印象です。
私たちの仕事は、AIを上手に活用しながら、それでできない部分を補い、より良いものを作り上げることになっていくはずです。

いかがでしたでしょうか？AIの進化がもたらす可能性を少しでも感じていただけたら幸いです。そして、この記事が、皆さんの今後のWeb開発に少しでも刺激となることを願っています。

今年も一年、本当にありがとうございました。来年も、Webエンジニアとして、また一歩進化した自分を目指して頑張りましょう。そして、新しい年が皆さんにとって、素晴らしいものになりますように。

最後になりますが、心からの言葉を込めて…

メリークリスマス！

細川より

![スクリーンショット 2023-12-23 16.42.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14156/fd735c98-b974-55c4-5840-14391ca3de67.png)

![スクリーンショット 2023-12-23 16.54.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14156/13fb9010-912c-34ed-8cd5-d10e7acdf2a7.png)

うん、まじで考えさせられるわ。

## 補足（ここからまじで本人）

一応投稿前にちょっと不安になったのでQiitaの[コミュニティガイドライン](https://help.qiita.com/ja/articles/qiita-community-guideline)を確認。

![スクリーンショット 2023-12-23 17.03.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14156/64347ac3-25fe-3470-50cf-0ed8bc68a39e.png)

正確性という意味では問題ないと思うので大丈夫そう。
明確に伝えたいことがある場合は自分で書くに越したことはないけど、今回みたいな
* アドベントカレンダー書かないと！
* なんか有馬記念と絡めたら面白くなりそう

みたいな __「無関係そうな複数のテーマを無理やり絡めて長文を書きたい（内容はともかく長文を書いているという事実自体が面白い）」__ というシチュエーションにおいては、AIを活用しない手はないと思った。

だからこそ、我々人間は、簡潔で、無駄のない笑いを追求しよう。あらためてそう思った。
※月例の野球ネタでAIに負ける日が来たら引退します
【Python】DataFrame 横方向の結合方法3種類 比較まとめ

# DataFrame 横方向の結合方法3種類 比較まとめ
```python
import pandas as pd

df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                    'B': ['B1', 'B2', 'B3'],
                    'C': ['C1', 'C2', 'C3']},
                   index=['ONE', 'TWO', 'THREE'])

df2 = pd.DataFrame({'C': ['C2', 'C3', 'C4'],
                    'D': ['D2', 'D3', 'D4']},
                   index=['TWO', 'THREE', 'FOUR'])

display(df1)
display(df2)
```
|      | A  | B  | C  |
|------|----|----|----|
| ONE  | A1 | B1 | C1 |
| TWO  | A2 | B2 | C2 |
| THREE| A3 | B3 | C3 |

<br>

|      | C  | D  |
|------|----|----|
| TWO  | C2 | D2 |
| THREE| C3 | D3 |
| FOUR | C4 | D4 |

## 1. pd.concat()
https://pandas.pydata.org/docs/reference/api/pandas.concat.html

```python
result = pd.concat([df1, df2], axis=1)
print(result)
```
|       |  A  |  B  |  C  |   C  |   D  |
|-------|-----|-----|-----|------|------|
| ONE   | A1  | B1  | C1  | NaN  | NaN  |
| TWO   | A2  | B2  | C2  |  C2  |  D2  |
| THREE | A3  | B3  | C3  |  C3  |  D3  |
| FOUR  | NaN | NaN | NaN |  C4  |  D4  |

複数のDataFrameを単純に縦または横方向に結合するために使用されます。
横方向に結合する際はインデックスを参照します。
また、3つ以上のDataFrameを同時に結合することも可能です。

## 2. pd.DataFrame.merge()
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.merge.html
```python
result = df1.merge(df2, on='C')
print(result)
```

|    |  A  |  B  |  C  |  D  |
|----|-----|-----|-----|-----|
| 0  | A2  | B2  | C2  | D2  |
| 1  | A3  | B3  | C3  | D3  |

特定のカラムをもとに2つのDataFrameを結合します。
条件を細かく指定することで、SQLのようなJOIN操作を行うことが可能です。

## 3. pd.DataFrame.join()
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.join.html
```python
result = df1.join(df2, lsuffix='_l', rsuffix='_r')
print(result)
```
|       |  A  |  B  | C_l |  C_r |   D  |
|-------|-----|-----|-----|------|------|
| ONE   | A1  | B1  | C1  | NaN  | NaN  |
| TWO   | A2  | B2  | C2  |  C2  |  D2  |
| THREE | A3  | B3  | C3  |  C3  |  D3  |

`merge()`と似ていますが、こちらはインデックスをもとにDataFrameを結合します。
結合によりカラム名が重複する場合はサフィックスを指定する必要があります。
応用情報技術者試験　勉強法　午後試験

# はじめに
応用情報技術者試験に合格するコツを、実体験からまとめます。
私は一度目の受験で午後試験不合格、二度目の試験で合格しました。
合格点数は午前試験、午後試験ともに8割前後です。

合格年度は2022年春期です。
前提として、私は新卒未経験からSES会社に就職、
エンジニア歴1年弱で基本情報技術者試験(2021年内)に合格しました。
そのため、この記事は基本情報技術者試験レベルの知識を持っている方向けです。

午前試験はこちらの記事
https://qiita.com/bear05/items/92297544477debaec043


# 午後試験

午後試験は情報セキュリティ(必須)　＋　選択問題4つ、計5つを解答します。
私が勉強した分野は、以下の6つです。
* 情報セキュリティ(必須)
* システムアーキテクチャ
* ネットワーク		
* データベース		
* 組み込みシステム開発
* プログラミング(アルゴリズム)

当日は
* 情報セキュリティ(必須)
* システムアーキテクチャ
* ネットワーク		
* データベース		
* 組み込みシステム開発
を選びました。

経験談として、勉強する選択問題はなるべく少なくしたほうがいいと思います。
理由は、一度目の試験で解答する問題を迷ってしまい、集中して取り組めなかったからです。
当日の迷いは少なくした方がいいと思います。

また、一度目の受験では、上記6つ＋経営戦略・戦略立案・コンサルティングの問題を勉強しましたが、
学習範囲が広くなることで、十分に対策することができませんでした。
選ぶ予定の過去問を徹底して勉強すれば、学習時間を短縮できるので効率が上がります。
必須の情報セキュリティ,選択問題5つ、計6題の対策で十分だと思います。

### 勉強法
ひたすら過去問を解きました。間違えたら調べて、覚えて、もう一度練習する、この繰り返しです。
過去問は5年分ときました。(つまり過去10回分)

### 情報セキュリティ(必須)、ネットワーク
 情報セキュリティ(必須)、ネットワークは関連が強いので、一緒に勉強すると効率がいいです。
 情報セキュリティで勉強したことがネットワークの問いに出てきたり、その逆もあります。

### データベース
 データベースは出題パターンが限られるので過去問を網羅するだけで対策ができます。

###  システムアーキテクチャ、組み込みシステム開発
 システムアーキテクチャ、組み込みシステム開発は似たような問題だと思うので、一緒に勉強すると楽だと思います。

###  プログラミング
 プログラミングは当日の難易度に左右されはしますが、簡単な問題であればラッキーです！
vector bucket(n, vector<int>(0))が2次元配列として扱える件について

## 初めに
C++において、vectorを要素の宣言の仕方によっては、2次元配列のように扱えることについて学習した記事です。
結論から言うと、vector bucket(n, vector<int>(0))はジャグ配列であり、2次元配列として扱えます。
bucket[i]に収められているint型の配列を、bucket[i][j]で1要素ずつ取り出せます。
(ただvector<int>(0)と要素数が0として宣言しているので、この場合正しく要素を追加してあげる必要があります)
**ご指摘あればコメントでお願いいたします。**

## きっかけ
C++で競技プログラミングサイトAtCoderの過去問
「ABC323　B - Round-Robin Tournament」
のユーザ解説を見ていて引っかかる点があった(2点目)。

https://atcoder.jp/contests/abc323/editorial/7366

26行目のこの部分。

>**vector bucket(n, vector<int>(0));**

この変数bucketは、パッと見る限り1次元のvector。
こちらもさらっと流しそうになったのだが、2次元配列として扱っている。
27～29行目の
```
for (int i=0; i<n; i++){
    bucket[wins[i]].push_back(i);
}
```
で要素を追加しているのだが、1行に複数の要素を追加することが可能。
つまり、実質2次元配列として扱っている。
ただこの宣言の仕方だと、1次元配列じゃないのか？と疑問を持ったため、理解が滞る。

### なぜ躓いたか

vectorの宣言の仕方を調べてみると、やはり1次元配列である(ように見える)ため。
(このような有用な知識を残してくださった方に多謝)

>1次元配列
>1次元配列のvectorの宣言は以下．Type部にはint，doubleなどの基本的な型のみならず，自分で作成したclassなども使用できる．
>ここで，nは要素数を表し，dは初期化する値を表すものとする．
```
declaration_1d
vector<Type> v;
vector<Type> v();
vector<Type> v(n);
vector<Type> v(n, d);
```
>2次元配列
>2次元配列のvectorの宣言は以下．
>ここで，mはnと同様，要素数を表すものとする．
>g++のバージョンによっては>>は> >と間に半角スペースがないといけないこともあるので，注意が必要である．
```
declaration_2d
vector<vector<Type>> vv;
vector<vector<Type>> vv();
vector<vector<Type>> vv(n);
vector<vector<Type>> vv(n, vector<Type>(m));
vector<vector<Type>> vv(n, vector<Type>(m, d));
```

https://qiita.com/ysuzuki19/items/df872d91c9c89cc31aee

2次元配列として扱うのなら、この場合
```
vector<vector<int>> bucket(n, vector<int>(0));
```
として宣言しなければならないはず。
外側のvectorの要素数n、内側のvectorの要素数0、それぞれint型として宣言しなければならないはずでは？
ネットで再度調べてみたが、やはり明解なドキュメントは見つからず。
結局、再度ChatGPT(3.5)に質問してみることに。

## ChatGPTに頼る
前回同様、誤答もありえるため、裏付けをとるように心がける。
質問してみたところ、以下回答が得られた。
>いいえ、上記のコードは2次元のベクターではありません。実際には1次元のベクター（bucket）で、各要素が1次元のベクター（vector<int>(0)）です。
>このコードでは、サイズnで初期化されたbucketという名前の1次元ベクターを作成しています。各要素は空の1次元ベクターです。
>つまり、要素へアクセスするためには bucket[i] のように書きますが、それぞれの要素自体も vector<int> 型なので2次元配列として利用することも可能です。
>例えば以下のようにして2次元配列と同様に扱うことができます：
```
int value = bucket[i][j];
```
>ただし、実際には各要素がサイズ0（空）で初期化されているため、必要な場合は適切なサイズを指定して初期化する必要があります。例えば：
```
vector<vector<int>> bucket(n, vector<int>(m));
```
>このようにすれば、n行m列の2次元配列を作成することができます。

と回答が得られた。
つまり、
* 1次元のvectorで正しい
* ただし、各要素がさらに1次元のvectorなので、個別の要素にアクセスする際には変数名[i][j]のように2次元配列として扱うことが可能

ということだった。
残念ながらこちらは裏付けとなるwebページが見つからなかった(自身の探し方に問題があるとは思うが)。

## ……と思ったが
ただ、前回の拙記事のコメントにて、**ジャグ配列**という概念をご教示いただいたので、今回の件もvector型のジャグ配列だと理解できた。
簡単に言うと、「配列の各要素が配列」となっており、各要素数が行ごとに異なっているのを許容する配列。
1次元配列のような見かけながら、2次元配列として振舞える。

https://qiita.com/hizoku09/items/852a0bfaf64bb55559b7

大元のABC323のユーザ解説にもある通り、
```
push_back(i);
```
関数で各行に要素を追加し、結果的に2次元配列としてのふるまいを見せている。
## 結論
vector bucket(n, vector<int>(0))は、1次元配列であるが、2次元配列の振る舞いもできる。
bucket[i]に収められているint型の配列を、bucket[i][j]で各行の要素にアクセスできる。

## 振り返り
脱線するが、ユーザ解説31～32行目の
```
// さきほど, 番号の小さい順に bucket に入れたので,
// bucket[i] の中身は, すでに番号の小さい順になっている.
```
というコメントにもある通り、bucketの中身を追加する処理内で
同順位の場合、順番が若いプレイヤーを上位にするという問いの条件を達成していてエレガントだと思った。
C言語の拡張版という認識のC++、ということからかなり窮屈な印象を持っていた。
しかし、慣れていないというのもあるが、結構柔軟な言語なのかもしれないと思った解説だった。
バーチャルオフィス「Metalife」をプライベートで利用してみた感想とやってみたいこと

# はじめに

　リモートワークでは孤独になりがち、雑談が少なくなる、というデメリットがよく挙げられますが、最近ではバーチャルオフィスの選択肢がかなり広がっていて、コミュニケーション不足の問題が解決されつつあります。

 今回は、マナビDX Questのチームの方から教えていただいたバーチャルオフィス「Metalife」をプライベート（業務外）で使ってみた感想と考察について書きました。

　ちなみに、サッカーの本田圭佑選手がMetalifeの広告塔を務めています。

https://metalife.co.jp/

↓ 製作者さんの開発秘話の記事

https://qiita.com/yanolii/items/18739784df2249181638

# バーチャルオフィス「Metalife」をプライベートで利用してみた感想

## 気軽に集まれる場所の重要性

　わざわざ約束をするほどではないけど、チャット以外で話したいときにフラッと「ここで集まろうか」と言える場所はとてもありがたいなと思いました。Zoomやハドルミーティングよりも気楽で、電話よりも会話だけに拘束されない感も良いですね。

## ゲームみたいな世界観・自分好みのデコが面白い

　家具が2DのRPGのような可愛い見た目なので、ついついデコってしまいます。
 　
　個人的にご飯系やイベント（クリスマスやお正月、お祭り）のデコが多いのが楽しいです。今は大きめの雪だるまを置いて冬感を楽しんでいます！

## キャラクリエイト・エモートが可愛い

　キャラクリエイトやエモートはあまり使ったことがなかったのですが、こんなに可愛いものとは思いませんでした。

　今は固定のキャラを使っていますが、色々遊んでみたいです。

## 会議機能やホワイトボード・リンク共有なども利用できる

　バーチャルオフィスの名に恥じず、会議機能も充実しています。地味に便利なのがホワイトボードで、特に画面共有しなくても使えるので、その場で決まったことなどをホワイトボードに記入しながら話を進めることができます。

　また、看板やデコにURLを埋め込むことができて、近づくと色々なサイトを紹介できて面白いです。まだ上手く使い方を考えられていませんが、企業さんならオンラインの販売サイトに飛ばしたりしても面白いかも。

## 共同作業の場として

　業務ではあまり喋りながら一緒に作業をするという経験がなかったのですが、その場で意思決定をしながら資料を作るとこんなに楽なんだな、と思えました。
 
　画面共有しながら意識のすり合わせができるので、ちょっとした相談にも使いやすいです。

# やってみたいこと

## 書斎にしたい
　資格試験を並行して勉強したり、どんどん情報が入ってきて勉強してみたい試験が増えていっています。
 
 Notionでやりたいことリストのように管理したりもするのですが、どうしてもダレてしまうので、「この部屋に入りさえすれば目標や情報がすぐに目に入る」場所を作ることで、勉強のやる気を維持できたりするのではないかなと思いました。

　また、特定の資格試験の情報を集めた部屋を作って、同じ志を持った人を招待しても楽しそうです。

## イベントやサークルを作りたい

　25人までなら無料でスペースを作れるので、何かイベントをやってみたいです。喋りながら同じ空間で作業やもくもくをするのも楽しいですね。

# 【参考】その他のバーチャルオフィスサービス

## ギャザー

　Metalifeと発想は似ていそう。少しデザインのテイストがアメリカンチックです。

https://ja.gather.town/

## HEERE

 マナビDX Questで採用されているオンラインコミュニケーションツールです。8月の参加からかなりお世話になっています。UIがシンプルなので、慣れてしまえば簡単に使いこなせます。
 ただ、基本的にはクローズドなプラットフォームなので、一般ユーザーが部屋を作成できず、気軽にお試しできないのがもったいないですね。

 https://heere.chat/

## NeWork

　ちょっとHEEREとコンセプトは似ているかも。会議名など、何をやっているか可視化できるのは良いですね。

https://lp.nework.app/

# まとめ

　バーチャルオフィスの存在は知っていましたが、自分で使ってみないと意外とイメージは湧かないものですね。
 今後も、紹介していただいたり初めて見るサービスは、積極的に使っていきたいなと思いました。
卒業研究でGo言語に触れてみた話

## はじめに
こんにちは。

この記事は、私が卒業研究で初めてGo言語に触れてみた感想をつづっていきます。

## 卒業研究について
私の学校で卒業年度になると丸1年かけて、行われる授業です。
数人のグループに分かれ、それぞれの課題意識や目的をもってシステム制作や研究を行います。

私の班では就職などで提出する「公欠届」という書類をデジタルで簡単に提出できるようなWebサービスを開発しました。
自分は主にバックエンドのGoのAPI実装をしました。

## 自分のレベル
まず、Go言語は全く触れたことがありませんでした。
バックエンド言語でも、授業で半年触れたPHPくらいしかまともに使えるものがない状況でした。
知識についてもAPIから何？という状態でした。

## 使用環境
### フロントエンド
- Vue.js
### バックエンド
- Go言語
    - Gin
    - gorm


## 苦労した点
### エラーハンドリング
一番苦労していまだに理解しきれていないと感じるのが、エラーハンドリングです。
自分が思っている例外を列挙してみても、実はまだ例外があるよと指摘されることが多くありました。

Goではtry-catchが使えないのもあって記法に慣れるまでは苦労しました。

### 日付データの扱い方
実装したAPIでは、データベースに接続して、その中にある日付のデータを登録するといったことがありました。
引数をそのまま登録しようとするとなぜかうまく登録できませんでした。

これは扱う型の問題でしたが、その過程で様々な記事を読み、学習を深めるという点でよかったです。

### 値の更新
データベースの値を更新するAPIを作っているときに、一部の値が更新されないといったことがありました。
正直、ここが一番苦労しました。

結論からいくと、データベースとのやり取りに使ったgormがどうやら、0の値で更新するときにそれが無視されるということが原因でした。
0で更新するときは、更新する部分の構造体をポインタ参照にして、変数をポインタで参照してあげる必要がありました。

## 学んでよかった点
卒業研究では様々な苦難がありましたが、反面今振り返るとよかったと思うことも多々ありました。

それらをいくつか簡単に説明します。

### 使える言語が増えた
まず、単純に使用できる言語が増えました。
それでコーディングができるかといわれれば、まだ完全にYESといえる状態ではないですが、少なくとも少しは進歩できたと思います。

### 他言語でも使ってみたい表現ができた
今回はGo言語を中心にやっていましたが、その中でほかの言語ではやったことのない処理を数多くやりました。
ルーティングであったり、JSONで値をやり取りするAPIだったり...
ほかの言語でもできるのか/どうやって書くのかという興味がわいてきました。

### まだまだ学びがある
自分の中では結構頑張ったと思っているのですが、実際は氷山の一角だと思っています。
特に、友人から最近聞いたミドルウェアの有用性についてはとても勉強になりました。
実際にミドルウェアの記事を見ているときは、楽しく、とても充実していました。


## 終わりに
卒業研究が終わると、いよいよ卒業→就職になるので、今まで以上に勉強する時間というのが確保できないかもしれません。
ですが、どうにか時間を取って社会人でも勉強することを忘れないようにしていきたいと思っています。

筆足らずですが、最後までご覧いただきありがとうございます。
子プログラム停止

本投稿はDelphi Advent Calendar 2023 24日目 の記事です。

# はじめに

以前1本のExeにすることが多かったが最近は複数のプログラムに分割して作成することが多くなった。
メニューExeから各機能のプログラムを起動する仕組みとなるのだが、メニューを閉じたときに起動したプログラムが閉じる仕組みを、レジストリを使って同期をとっていたのだが、Mutexでもできると思いつき、そのテストプログラムを作成してみた。

# 仕組み

メニューは、起動時に、Mutexを生成します。
サブプログラム側では、このMutexが生きているかをタイマーで定期的にチェックし、生きていればそのまま。生きていなければ、終了します。

# メインソース
dprファイルをこんな感じに。
```
const
  Mutexname = '____MainMenu';
var
  hMutex: THandle;  // Mutex用ハンドル
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  hMutex := OpenMutex(MUTEX_ALL_ACCESS, False, Mutexname);
  if hMutex = 0 then
  begin
    hMutex := CreateMutex(nil, False, Mutexname);
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
  ReleaseMutex(hMutex);
  CloseHandle(hMutex);
end.
```

# サブソース
タイマーイベント中に下記のように、Mutexをチェックする処理を

```
var
  hMutex: THandle;  // Mutex用ハンドル
const
  Mutexname = '____MainMenu';
begin
  hMutex := OpenMutex(MUTEX_ALL_ACCESS, False, Mutexname);
  if hMutex = 0 then
  begin
    Close;
  end;
  ReleaseMutex(hMutex);
  CloseHandle(hMutex);
end;
```

# おわりに

https://delphi-dev.sakura.ne.jp/FileBox/Delphi_Advent_Calendar_2023_24.zip
で、ソースをダウンロードできるようにしました。
箱根駅伝データ分析物語　#２-２：箱根高速化（散布図-復路）

本記事は、
[箱根駅伝データ分析物語　#２-１：箱根高速化（散布図-往路）](https://qiita.com/sakigakeman/items/7e0a16cf3e62669001a2)
の続きになります。

# 2.3. 分析結果

:::note warn
前記事にも記載しているが、今回はまずは全データにおいて近似直線を引き、近似直線からの距離が遠い上振れ、下振れそれぞれ上位2.5%のデータを外れ値とみなし、
当該データを除外したうえで再度近似直線を付与していることに留意
:::


### 6区：山下り区間

**第95回以降　オレンジ色**　N=98
**第94回以前　青色**　N=73

縦軸：6区区間タイム
横軸：出走時10,000mベストタイム

![IMG_4713.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145067/0fb53f2f-b3ca-4447-0d92-6b7fc80256b0.png)



:::note info
* 直近5年（オレンジ）の方が全体的に近似曲線は下にあるため、高速化していることが読み取れる
* ただし差分は緩やか、下りは厚底による高速化の程度は小さいか
:::


### 7区：ザ・繋ぎ区間

**第95回以降　オレンジ色**　N=88
**第94回以前　青色**　N=201

縦軸：7区区間タイム
横軸：出走時10,000mベストタイム

![IMG_4714.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145067/ec51d4e3-b4f0-8ae3-0525-413eebe735cc.png)



:::note info
* 直近5年（オレンジ）の方が全体的に近似曲線は下にあるため、高速化していることが読み取れる
:::

### 8区：遊行寺の坂区間

**第95回以降　オレンジ色**　N=85
**第94回以前　青色**　N=189

縦軸：8区区間タイム
横軸：出走時10,000mベストタイム

![IMG_4715.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145067/1a0a24a0-e26b-a992-3c82-4e1fe1ab60e7.png)



:::note info
* 10,000m30分以下は直近5年（オレンジ）の方が全体的に近似曲線は下にあるため、高速化していると言っていいか
* 厚底導入により、以前よりも差がつきやすい区間になっていることが読み取れる（なぜだろう、遊行寺まででどこまでスタミナを残せているかで、遊行寺での差がつきやすくなった？）
:::

### 9区：裏エース区間

**第95回以降　オレンジ色**　N=83
**第94回以前　青色**　N=201

縦軸：9区区間タイム
横軸：出走時10,000mベストタイム

![IMG_4716.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145067/14c1b9c4-600c-4221-bd38-83cf6508fd0b.png)



:::note info
* 直近5年（オレンジ）の方が全体的に近似曲線は下にあるため、高速化していることが読み取れる
* ほぼ平行に近いため、区間戦略などはそこまで変わらず、シンプルに高速化したか
:::

### 10区：アンカー区間

**第95回以降　オレンジ色**　N=76
**第94回以前　青色**　N=165

縦軸：10区区間タイム
横軸：出走時10,000mベストタイム

![IMG_4717.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145067/045ff758-370f-f13d-998e-47e530a52078.png)


:::note info
* 直近5年（オレンジ）の方が全体的に近似曲線は下にあるため、高速化していることが読み取れる
* ほぼ平行に近いため、区間戦略などはそこまで変わらず、シンプルに高速化したか
:::

# 2.4. まとめ

### 往路

1区：やや高速化、以前より10,000タイムに対する差はつきづらくなっている
2区：シンプルに高速化
3区：高速化、以前より10,000タイムとの相関は大きくなっている
4区：シンプルに高速化
5区：高速化、以前より10,000タイムとの相関は大きくなっている

### 復路

6区：やや高速化、以前より10,000タイムとの相関は小さくなっている
7区：シンプルに高速化
8区：高速化、以前より10,000タイムとの相関は大きくなっている
9区：シンプルに高速化
10区：シンプルに高速化

# 3. 全体所感

* 予想通り、ほぼ全区間で高速化している
* 厚底によってトラックタイムも早くなっているが、それ以上にロードのタイムが伸びていることがわかる（トラックもロードもどちらも早くなるだけであれば、近似直線は以前と変わらないはず）

# 4. 次分析

今回は散布図に対する近似曲線の傾きから視覚的に高速化の有無を判断したが、
せっかくなので統計学的検証も実施する（F検定＆t検定）

# お願い
皆さまからのローデータ提供など、いつでもお待ちしています。。。


# 参考
[箱根駅伝データ分析物語　#２-１：箱根高速化（散布図-往路）](https://qiita.com/sakigakeman/items/7e0a16cf3e62669001a2)
理解するためのオブジェクト指向の歴史

## はじめに
独学でJavaScriptやphpを学び始め、ようやくオブジェクト指向の雰囲気がわかるようになってきた初学者です。
オブジェクト指向にそって記述しているつもりが、形式的にクラスを利用しているだけだったり、結局依存関係だらけになっている状態です。今後もオブジェクト指向にそって記述していくことで理解が深まったり、優位性が活かせるようになるのかもしれません。
オブジェクト指向についてしっかりと目を向けた上で、プログラミングの経験を積むことが自分なりの理解を深掘りさせ、定着しやすいと考えております。

なので今回はオブジェクト指向の歴史に目を向けていきます。
歴史に目を向けるというよりも、どのような課題を解決するためにオブジェクト指向が成り立ち、現在のオブジェクト指向の定義が必要になったのかを掘り下げていきます。
プログラミング初学者の知識で理解しようとしているため、誤認なども多分にあるかと思いますのでご了承もしくはご指導ご鞭撻をいただければ幸いです！！

### オブジェクト指向の誕生
Wikipediaの記述によると...
>オブジェクト指向（object-oriented）という言葉自体は、1972年から80年にかけてプログラミング言語「Smalltalk」を開発したゼロックス社パロアルト研究所の計算機科学者アラン・ケイが、その言語設計を説明する過程で誕生している。

では、なぜ「Smalltalk」の開発が必要になったのか？
これまたWikipediaの記述によると
>Smalltalk（スモールトーク）は、Simula のオブジェクト（およびクラス）、LISPの徹底した動的性、LOGO のタートル操作や描画機能に、アラン・ケイの「メッセージング」というアイデア[2]を組み合わせて作られたクラスベースで手続き型の純粋オブジェクト指向プログラミング言語、および、それによって記述構築された統合化プログラミング環境の呼称。

なんかよくわかりませんでした。
他にもいろいろと調べているとCUIがメインだったコンピュータ操作が、GUIというグラフィックを利用して操作するようになった。グラフィックやデータの見えるものを一つのオブジェクトとしてプログラミングできるようにしたらいいんじゃない？ということから作られたようでした。
なるほど、見えるもの単体で完結するようになったらいいのでは？という発想だったのかな。
んで、このプログラミング言語「Smalltalk」を説明するときにオブジェクト指向という言葉を使われたことが起源。

### プログラミングの複雑化・開発コストの増加　　ソフトウエア危機
80年代半ばになると、ハードウエアは高性能になった上コストも下がってくる。
これに伴ってコンピュータの利用領域が大きくなり、ソフトウエアの需要も大きくなる。さらに求められるソフトウエアは複雑化。複雑化されたソフトウエアの開発時間は増加。時間増加　 = 費用の増加。供給を満たすために生産量だけを上げるため品質は低下。
この課題を解決するために、「構造化プログラミング」が台頭。
それまでは高速処理重視のプログラミングから、保守性重視のプログラミングへ向かったのが構造化プログラミング。書きやすく、理解しやすいプログラミングしようよということのようです。そうすることで開発がしやすくなるから、生産性があがるというものでした。

##### 構造化プログラミングの課題
しかし構造化プログラミングは、制御構造は書きやすく理解しやすく。しかしデータ制御に関しては無法地帯。
書きやすく理解しやすいプログラミングのためには、データの構造化が必要。
あっちもこっちもグローバル変数だらけになったときに、どこで使われるかもわからないし、どんな状況かもわからないから結局理解しにくいという課題がありました。

### オブジェクト指向の普及
書きやすく理解しやすいプログラミングを実現するために、理解しやすいデータ構造を定義することで、再利用性を向上させたのがオブジェクト指向です。

こういったことから、現在のオブジェクト指向のクラス・継承・ポリモーフィズム・カプセル化・抽象化・単一責任などの考え方が生まれてきた。

## まとめ
概要にも満たないような内容でしたが、オブジェクト指向の普及について見てきました。
今までの課題を解決するために普及していったオブジェクト指向が、保守性・データの安全性・コードの再利用性・拡張性などを実現する記述であるということはよく理解できました。
オブジェクト指向の目的は明確になりましたが、上記の目的を達成するためには自らが記述している開発の未来像までしっかりと想像できていなければ実現はむずかしいとも感じました。
さらに技術の進化や、さまざまなニーズが増えている。
そのため本質的なオブジェクト指向が身についたと言えるときは、技術の進化と共に自身が成長することができたときになるのではないかと思います。
CO2濃度が5000ppmになる件

## 経緯
三密のうち、「密閉」はCO2濃度で測れば良いらしい。
CO2センサーを複数（MH-Z19CとSCD41）買ってみた。自分で試している暇がないのと、丁度学生に何かIoT関連の課題をさせないといけないのがあって、CO2センサーをESP32で使わせてみた。
学生がネットで調べて、接続して、コンソールに数字が出るようになったけど、何故か5000ppmとしか表示されない。温度も表示しているが、そっちはそれなりの値になっているので、センサーは接続されていると思われる。
別の学生にもやらせてみたが、結果は同じ。センサーは、同じ種類を２個ずつ買ったので、交換させて試したけど結果が同じ。しょうがないので、自分で確認してみた。

## 調査
とりあえず今回は MH-Z19C で確認する。

## 下調べ
5000ppmになってしまうというエラーを探すと、あまり多くはないが、少し見つかる。
そこに載っている対策としては

1. キャリブレーションしろ
2. 電源電圧をちゃんと５Vにしろ

と書いてある。
キャリブレーションは、スペック表には書いてあるけど、ネットでMH-Z19Cの使い方を見ると、キャリブレーションの方法は、書いてあったりなかったり。これだと、キャリブレーションしないで使ってみるのは仕方ない。学生の発表資料を見る限り、誰もキャリブレーションはしていないように見える。
電源は、学生の資料を見ると、3.3Vに接続している。どうして5Vに接続しないのかと思ったら、使っているESP32には5Vのピンがなかった。別に入手したESP32には5Vピンがあったけど、幅の広いESP32で、手元にあるブレッドボードだとうまく挿さらない。（物理的には挿さるけど、端の穴なので、ピンが挿せない。）
しょうがないので、とりあえず3.3Vで試す。

## 確認
学生が使ったのと同じライブラリを使う。
https://github.com/nara256/mhz19_uart

動かしてみると、確かに 5000ppm になる。

上のライブラリの example の下に、キャリブレーションのサンプルがあったので、それを動かしてみた。３０分かかるけど、結果 400ppm とか 500ppm の値になった。
（本当は、外気に入れ替えた状態にする必要があるけど、とりあえず動作確認なので気にせずそのままでやった。）

一度電源を切ってから、再実行してもほぼほぼ 400ppm から 500ppm の値になる。電源を切ってもデバイスが覚えているみたいだ。

試しに、もう一つ残っていたデバイスで確認すると、5000ppmになる。多分キャリブレーションすれば良いのだと思う。念のためにこっちはキャリブレーションしないままで残しておく。

SCD41の方は未確認だが、キャリブレーションコマンドはあると書いてある。

## 結論
CO2センサーを使う時は、（あるいは、値がおかしかったら、）必ずキャリブレーションしてから使う。
電源電圧は、3.3Vでも動くけど、仕様書通りの5Vが良いと思う（未確認）。
ポート番号を理解するの巻

# はじめに
皆さんも開発の時によく見るであろう、このURL。
画像では8080番ですが、3000やら4000やら他の番号も見たことがあると思います。
![httplocalhost8080 2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288804/471e656d-c4a3-dbb8-e21c-1651bba63d66.jpeg)
① 通信プロトコル
② 自分のコンピュータ
③ **ポート番号**
今回は、この**ポート番号**について、その意味と重要性を深く掘り下げていきます。
# ポート番号とは
ポート番号は、ネットワークとコンピュータ間でのデータ転送時に使用される「ドア」に割り当てられる識別番号です。この番号によって、どのドアを通してデータが送受信されるかが決定されます。
![httplocalhost8080 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288804/f47881d4-cc40-e0c8-38b3-15522057ff18.jpeg)
ポート番号は以下の3つのカテゴリに分類されます。
- ウェルノウンポート（0〜1023）
- ユーザーポート（1024〜49151）
- ダイナミックポート（プライベートポート）（49152〜65535）

### ウェルノウンポート
IANA（Internet Assigned Numbers Authority）という団体によって、あらかじめ用途が決められているポート番号です。
| サービス名 | ポート番号 | 用途 |
|:-|:-:|:-:|
| ssh | 22 | リモートログインと<br/>ファイル転送(セキュア) |
| telnet | 23 | リモートログイン（非セキュア） |
| smtp | 25 | メール送信 |
| domain | 53 | DNSクエリと応答 |
| http | 80 | ウェブサイトとウェブサービスのアクセス<br/>（非セキュア） |
| https | 443 | ウェブサイトと<br/>ウェブサービスのアクセス(セキュア) |

### レジスタードポート(ユーザーポート)
特定のアプリケーションなどが使用することになっているポート郡です。IANAが登録を受け付け、公開しています。
| サービス名 | ポート番号 | 用途 |
|:------|:-:|:-:|
| MySQL | 3306 | データベース管理とアクセス |
| PostgreSQL | 5432 | データベース管理とアクセス |
| Redis | 6379 | キャッシュとインメモリデータストア |
| HTTPの<br/>代替ポート | 8080 | 開発環境でのウェブサーバーアクセス |
| HTTPSの<br/>代替ポート | 8443 | 開発環境でのセキュアなウェブサービスの<br/>代替アクセス |

### ダイナミックポート/プライベートポート
IANAによる制約がないポート番号です。世界中の誰でも自由に設定することができます。
自作のWebアプリなどで、よくポート50000番などが利用されたりしますが、それは50000番がIANAの制約がないためです。

# 終わりに
ネットワークスペシャリストの試験やらいろんな試験でポート番号は問われます。
ポート番号を理解しておくことは、ネットワークのトラブルシューティング、セキュリティ強化、システム管理、ファイアウォール設定、アプリケーション開発における効率と安全性を向上させるために不可欠です。なので、しっかり覚えておきたいです！
[TableauミニTips]二重軸チャートの片方にだけツールヒントを表示する

# はじめに
「Tableauで二重軸チャートを作成したとき、そのうち片方だけにツールヒントを表示したいのだができますか？」という質問を何回か受けたことがあるので、ミニTipsとして残しておこうと思います。

# やりたいこと
二重軸の典型例としてドーナツチャートを使います。
外側のカテゴリごとの売上はツールヒントを表示したいけど、内側の総売上の円にマウスカーソルを合わせても何も表示されないようにしたいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1945012/0fdbf0ce-2edd-5791-3a38-0002ef19dca1.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1945012/9bd2e47a-a8c0-6292-f7d5-c3a05fac47ea.png)


# ツールヒントのON/OFFと二重軸
通常、ツールヒントのON/OFFは、「ツールヒント」マークカードをクリックして出てくる設定画面の、以下のチェックボックスから設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1945012/5376a67a-97c2-1921-3c66-2fab2d57bb26.png)

ところが、二重軸チャートのそれぞれのレイヤの「ツールヒント」マークカードをクリックしても、「ツールヒントの表示」チェックボックスが押せなくなっており、ONの状態で固定されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1945012/06ca3efc-8ff1-2c1c-98c5-084b6fd1a75f.png)

「すべて」の「ツールヒント」マークカードではON/OFFが切り替えられるのですが、そこでOFFにしてしまうと、二重軸のどちらのマークもツールヒントが表示されなくなってしまいます。

# 実はシンプルだった解決法
やりたきことを実現するには、「ツールヒントを出したくないほうの「ツールヒント」内容を空っぽにする」だけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1945012/d69f8dc8-f19c-b236-7d77-8a43f530e3ad.png)

これだけで、ツールヒント自体が表示されなくなります。
なんだこれだけかーって話ですが、知らなければ意外とハマるポイントかもしれませんね。

おしまい。
続：メインPCをWindowsからMacに変えたいが不安がある過去の自分へ

実はまだあるWindowsからMacに乗り換える前の自分に伝えたいこと。それとは以下だ！

1. トラックパッドの不安
1. 夜になったらブルーライトカット機能をオンにするやつ


少っ。

# 1. トラックパッドの不安

自分が使っていたWindowsPCはSurfaceのLaptop3でした。これ、WindowsPCなのに、Macみたいに鉄のフォルムで、トラックパッドの広くて、画面も綺麗で。だからこそ自分はMacじゃなくても別ええわってなってたくらいかっこよくて、かっこいいPCでした。そんで、この結構高性能ちっくなSurface君のトラックパッドは極めて優秀。トラックパッドの上で三本指でソフトタッチ（ぐっと押し込まないで3本指で触れるだけ）すると、PCで流れている音源を一時停止、再度押すと再生してくれる機能がついていた。自分は動画で勉強しながらプログラミングを学ぶことが多かったので、これで動画を一時停止してコードを書く。書いたらまた動画を再生してということをよくしていたので、この機能はめちゃくちゃ多用していた。だから、Macに変えてこれができないときのむず痒さと言ったら、すごいむずむずです。すごむず。（ずとまよいいよね）
でも「はいお疲れー」（黒パパ）MacでBetterTouchToolをインストールして3000円くらい課金すれば解決。Windowsの時と同じように3本ゆびでトラックパッドをソフトタッチすると同じことできちゃう。そう、Macをカスタマイズしたときの対応力は目を見張るものがある。（なんかよくわかんないけど、3本指でそっと触れたときの感知能力はWindowsの方が高い気がしてMacだとたまに止まらん時あってイライラしたから、今は二本指で2回ソフトタッチすると止まるようにしている。そうするとほぼ確実に効くようになった。）　
しかし、Sarfaceが勝ってるところもある。それは、4本指で上にスワイプすると音量をフェーダーのノブを上げる感じで自由に上げれたが、Macだとそれの設定が現状できていない。できても音量をひとつ上げる。という程度で、滑らかにぐぐぐーっと音量を上げ下げできないのが弱い。だけど、こちらはなくても別に痛手ではない。option + Shift + ボリュームキーを押せば解決するし、あまり苦ではない。

## 2. 夜になったらブルーライトカット機能をオンにするやつ

僕のWindows PCのSurface Laptop3には、指定した時間になったら画面をオレンジっぽい色にして、ブルーライトをカットする機能がついていた。が、時間になってもオンになることは少なく、設定画面を開いて確認しに行くとオンになるというウザ仕様だった。（僕の PCだけ？）だけど、Macでは時間通りにブルーライトカット機能がオンにならなかったことはない。これは地味だけど嬉しい。

# まとめ
MacはトラックパッドもSurface  Laptop3みたいに近づけることは可能。
今後もMac使ってて、これもだったって思いついたらどんどん追記していく予定。
python図形出す

この記事は、[【完走したい】楽しくいろいろやる Advent Calendar 2023](https://qiita.com/advent-calendar/2023/notbeginner)の15日目です。
# pythonで図形を出す
前回pythonで顔を認識して四角形で囲んだと思います。
今回はただの図形表示です。四角形しか出してなかったけど、円や三角形などを描画できるはずです。
使用環境
Google Colaboratory
# 図形描画
タートルグラフィックスとかいう、図形を表示するためのものがあるそうです。
一つ一つ指示を与えて、進んだ跡が描画されます。
使うときはまず、
```
!pip3 install ColabTurtle
from ColabTurtle.Turtle import *
```
これで、installするようです。
何か図形を書いてみます。
まず、
```
initializeTurtle() 
```
と書いて、位置を固定します。
とりあえず、四角を書いてみます。
```
for i in range(4):
    forward(100)      
    left(90)  
```
100すすんで90度曲がるを４回繰り返せば、一辺が１００の正方形ができます。
実行すると、
![スクリーンショット 2023-12-23 151719.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/13bd8bb4-3ea3-8c66-5f47-127e9dd549da.png)
カメが出てきて、
![スクリーンショット 2023-12-23 151807.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/268dc0cc-80bf-7149-272b-414e601e8b27.png)
処理を一つ一つこなしてくれます。かわいい。
# 本題
冬なので、雪だるまを作ります。
円の書き方が思い浮かばなかったので、多角形で代用します。
書いたコード
```
initializeTurtle()
for x in range(20):
  forward(10)
  left(18)
for y in range(20):
  forward(15)
  left(-18)
for a in range(7):
  forward(10)
  left(18)
left(54)
forward(15)
for b in range(20):
  forward(2)
  left(18)
forward(15)
for b in range(20):
  forward(2)
  left(18)
forward(30)
```
横向きの眼鏡をかけた雪だるまです。

# たまに問題が起きる
動かなくなります。エラーが出ます。そんな時は再読み込みさせるとかいろいろやってみるといつか動きます。
自分の場合、
```
no display name and no $DISPLAY environment variable
```
とかいうエラーが出ましたが、ページを読み込みなおしたら治りました。
# まとめ
タートルグラフィックスを使うと、一筆書きの図形を描画できる。
好きな図形が描けるから、結構楽しい。
参考

https://note.nkmk.me/python-pillow-imagedraw/

https://imagingsolution.net/program/python/pillow/drawing_lines_circles_shapes/

https://mukai-lab.info/pages/classes/seminar_core_areas_learning/chapter_3_1/
PythonでVBScriptのCreateObjectしてみる

# PythonからCreateObjectできる環境を作る
VBScirptが非推奨になったのでPythonからCreateObjectできるのかを試してみた。

## 方法
pywin32ライブラリをインストールすれば使える。

## 試してみたこと
windowsの読み上げオブジェクトを使ってみた

## 環境作成
pip install pywin32

## プログラム
```
# Windowsのcomオブジェクトを使うライブラリをインポート
import win32com.client as wc

# CreateObjectに該当する部分
spk=wc.Dispatch("SAPI.SpVoice")

# Speakメソッドを呼び出す（喋らせる）
spk.Speak("こんにちわ、パイソンで喋ってます。")

```

## 応用
VBScriptでCreateObjectしていたものはたいていこの方法でPythonから呼び出せるはず・・・
しらんけど・・・

以上
ゲーミフィケーションで組織を急成長させるリクルーティングの魔法

ゲーミフィケーションは、プレイの要素をビジネスプロセスに組み込むことで、エンゲージメントと生産性を革新的に向上させる現代的手法です。

このアプローチは、特にリクルーティングの分野で注目を集めており、企業が才能ある候補者を惹きつけ、ブランドイメージを強化するための効果的な戦略として活用されています。

![gamification-20231224-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129712/cad05bb9-257c-fe52-1a8b-318f766d94d1.png)


ゲームのダイナミクスを仕事の世界に導入することで、企業は候補者の興味を引き付けるだけでなく、彼らのスキルと適性をより深く理解する機会を得ています。このイントロダクションでは、ゲーミフィケーションをリクルーティングに応用することのメリットと、それを実践している企業の具体例を探求します。

# 具体的な事例

ゲーミフィケーションを採用する企業は、この手法を通じて、候補者の興味を引き付け、彼らのスキルと適性を評価する革新的な方法を見つけています。以下に、このアプローチを実践している企業の具体例をいくつか紹介します。

## Google:

Googleは、Code Jam、Hashcode、Kick Startなどのコーディングコンペティションを通じて、プログラミングスキルを持つ候補者を評価しています。これらのコンテストでは、参加者が複雑なアルゴリズムのパズルを解決し、最終的には賞金と共に職を獲得するチャンスを得ます。

## PwC ハンガリー:

PwC ハンガリーは「Multipoly」というオンラインシミュレーションゲームを開発しました。このゲームでは、学生たちがPwCでの仕事を仮想体験し、会社のコンピテンシーに基づいたタスクを完了します。この取り組みは、学生の興味を喚起し、会社へのポジティブな印象を高めました。

## マリオットインターナショナル:

マリオットインターナショナルは「My Marriott Hotel」というゲームを使用して、候補者がホテル運営の仕事に興味を持つように促しました。プレイヤーは自分のレストランを運営し、効率的なサービスを提供してポイントを獲得します。

## Unilever:

Unileverは、Pymetricsというゲームベースの評価を採用プロセスに組み込み、ミレニアル世代の候補者を引き付け、企業のイノベーティブなイメージを強化しました。

## AXA Group:

AXA Groupは、Knackというツールを使用して、候補者の強み、能力、性格特性を評価するための様々な評価ゲームを導入しました。

これらの事例からは、ゲーミフィケーションがリクルーティングプロセスにおいて、エンゲージメントを高め、候補者の潜在能力を引き出し、ブランドイメージを革新的に見せる強力なツールであることが明らかです。

# ゲーミフィケーションの効果

ゲーミフィケーションはリクルーティングプロセスにおいて、多くの効果をもたらしています。これは、単に候補者の関心を引くだけではなく、彼らの能力と適性をより深く理解する手段として機能します。

ゲーミフィケーションにより、候補者は実際の職場環境や仕事内容を仮想的に体験でき、企業はそのプロセスを通じて候補者のスキル、問題解決能力、チームワーク、そして創造性を評価できます。

このアプローチは、特にミレニアル世代やゲームに親しんだ世代にとって魅力的です。ゲーム要素は、プロセスを楽しくし、候補者が自分自身をより自然に表現する機会を提供します。これにより、企業は候補者の真のポテンシャルを把握し、より適切な人材を見つけることが可能になります。

また、ゲーミフィケーションは企業ブランドのイメージを高め、革新的で前向きな職場文化をアピールする手段としても機能します。企業がこのような革新的な手法を取り入れることで、候補者は企業が最新の技術やトレンドに敏感であると感じ、その企業での仕事により興味を持つようになります。

結果として、ゲーミフィケーションは、リクルーティングプロセスをより効果的で、相互に有益なものに変え、企業と候補者双方にとって価値ある経験を提供します。企業はより適切な人材を確保し、候補者は自身の能力を適切に示す機会を得ることができます。

# 未来のリクルーティング戦略

未来のリクルーティング戦略において、ゲーミフィケーションは重要な役割を果たすと予想されます。企業はゲームの要素を活用して候補者の関心を引き、彼らのスキルと適性をより効果的に評価することが可能になります。このアプローチは、特にミレニアル世代やデジタルネイティブに魅力的で、彼らのエンゲージメントを高めることができます。

また、ゲーミフィケーションは企業ブランドのイメージを革新的でダイナミックなものに変え、職場環境をより魅力的に見せることができます。これにより、優秀な人材の獲得と保持が容易になります。

将来的には、ゲーミフィケーションはより洗練され、多様な業界や職種に適用されるようになると予測されます。企業はこの手法を使って、人材獲得のプロセスをさらに効率的で楽しいものに変え、組織の成長と成功に貢献することができるでしょう。
「現代数理統計学の基礎」演習問題解法メモ　第3章問12～15

問13と問14は問題数が多いです。約40年ぶりの積分なので、途中式も記載しています。
![第3章問12　P1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/f9631d4e-2706-527e-7aa8-215a07fc2f98.jpeg)
![第3章問12　P2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/0efd5634-9a1e-061c-063e-66a189cefcb0.jpeg)
![第3章問13　P1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/e13d87a7-2016-31bd-aebf-55be97a3ff61.jpeg)
![第3章問13　P2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/e7a9b8a4-8432-d533-42b0-d6663bd0ebc4.jpeg)
![第3章問13　P3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/ff4a17d4-b875-9880-d68e-9f4c7492ecff.jpeg)
![第3章問13　P4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/0cd68d4d-43b9-aa00-ecaa-19ebff91ae66.jpeg)
![第3章問14(1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/9684193e-ee22-622c-5f5a-6902fc98a6bd.jpeg)
![第3章問14(2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/8439167e-7e6c-c1a6-7d4b-f52fa3b8c076.jpeg)
![第3章問14(3).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/9af0120f-52b8-e324-e5c5-01c803b7c2cc.jpeg)
![第3章問15 P1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/8847e1c4-7fdb-8581-e5f4-c6b968e3e01a.jpeg)
![第3章問15　P2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/9f512b47-b07e-de5e-c9ef-0dd1e6030079.jpeg)
応用情報技術者試験に合格しました。

# はじめに
　2023年12月21日、応用情報技術者試験に合格しました。
　午前が60%、午後が63%でした。
　よくこんな点数で記事を投稿したなと思われるかもしれませんが、ほぼ受かると考えていました。

# 自己紹介

・基本情報技術者試験　合格

# 参考書
① __ニュースペックテキスト応用情報技術者 2020年度版 TAC出版__
② __2020 応用情報技術者　午後問題の重点対策__  
(以下、①, ②)

　基本情報技術者試験を受けると決めた時、①を購入。理由は、本屋で基本情報と応用情報の本を見比べた時に、どちらも似たような内容で応用情報レベルが理解出来たら基本情報は受かるだろうと考えたから。応用情報技術者試験も受験する予定だったので節約の意味もありました。
　基本情報技術者試験に合格した後、②を購入。

# 合格記

　基本情報技術者試験に合格してから約3年。忘れてしまう前に受けようと決めました。
　試験要綱を確認すると、一部変更があったので、本屋で参考書の最新版を確認しました。内容はほとんど同じですが、PMBOKは第7版になっていたので少し不安に。とりあえず、過去問を確認するも、参考書こそ古いが改めて買う必要はないと判断しました。[^1]
　応用情報技術者試験は大学入試のように上位何人が受かるわけではなく、午前午後と60%を取れば良い。PMBOKから出題されたとしても数問。他の変更箇所からの出題も最低60%に及ぼす影響は少ないように考えました。

 
　さあ、どうやって点を確保するか。


■午前問題(各分野の問題数は目安)
　テクノロジ系50問+マネジメント系10問+ストラテジ系20問の合計80問。
 
■午後問題(実際に選択したもの)
 |問題|分野| 
|-----------:|:------------|
| 1       | 情報セキュリティ        |
| 3     | プログラミング      |
| 4       | システムアーキテクチャ        |
| 7         |組込みシステム開発          |
| 8       |情報システム開発|


　まずは午前の過去問を解きました。たしか60%は取れていた気がします。思ったよりも基本情報の貯金があるなという印象でした。その後、②を見ながら以下の方針を決めました。

　・テクノロジ系に重点を置いて勉強する。
　・特にセキュリティはちゃんとやる。
　・マネジメントやストラテジは午後で選択しない。

　午前問題はテクノロジ系の出題数が多いので、ここでしっかりと点を確保すれば合格は近づきます。特に、午後で選択しなければならないセキュリティはちゃんと勉強すれば午前でも点を確保できてお得。
　また、テクノロジ系は仕組みが分かれば良いのに対して、マネジメントやストラテジは暗記量が多い。日本史や世界史の暗記は得意ですが、背景なしに淡々と覚えるのは前向きでない。しかも、出題数が少ない。午後問題をみても、午前の知識を活かして問題を解くというイメージが湧きませんでした。
　わざわざ手を出してつまらなくなってモチベに悪影響を及ぼすくらいなら本腰いれなくても良いと判断しました。最終的に午前と午後それぞれ7割くらい取るイメージでした。
　以上の方針とイメージの下、とりあえず①を一気に読みました。結構分量がありコツコツやるとだるくなるので。

 
　また、応用情報技術者試験に活かせそうな以下の本を読みました。[^2]

 ・CPUの創りかた
 ・はじめて読む486―32ビットコンピュータをやさしく語る
 ・岩波講座 ソフトウェア科学 オペレーティングシステム
 ・マスタリングTCP/IP―入門編

　試験数日前にセキュリティの午後問題が解ける事を確認し、それからマネジメントやストラテジの暗記を始めました。

 # 当日
　__午前__
　どこで得点を取るか明確にイメージしていたので、マネジメントやストラテジで躓いても全然気になりせんでした。
 ___
　 __午後__
　当初はネットワークを選択する予定でしたが、嫌な予感がしたので情報システム開発に変更しました。

 # 最後に
　合格するためにいろいろと端折ったので、午前ではテクノロジがコケる、午後は2つコケると落ちます。そのために一応保険は用意していました。上記に書きましたが、一応午前のマネジメントやストラテジの暗記はしましたし、午後はテクノロジ系ならどれでも選択できるようにはしていました。
　マネジメントやストラテジを捨てて良いというわけではなく、自分ができる点の取り方があると思うので、それに沿えばどんな方法でも良いと思います。これから挑戦される方の参考になれば幸いです。
 
　合格ツイートにたくさん反応してくださってありがとうございます。嬉しかったです。
 
 ![D0E0A2F8-D96A-4A36-BDA5-ED492890C70F.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619656/c0060f7b-f2c5-e3a1-3214-89fb2d5fa3a0.jpeg)

 
[^1]: お金に余裕があれば新しく購入していました。
[^2]: 応用情報技術者試験に出そうなところや興味があるところを集中的に読みました。
月一の社内LT会に半年間毎回参加して得たもの

# はじめに
月一で社内の有志で集まって、トーク内容縛り一切なしでLT会を行っています。そのLT会の空気感がちょうど自分の肌に合っていました。そのため今年中は毎回この会にスピーカーとして参加するぞということを決めてみました。

その取り組みの中で学んだことがいくつかあるので将来の自分が忘れてしまわないように殴り書きしておこうと思います。

# 自分が発表したLT一覧
### 7月 - 夏 × Jetpack Compose
Jetpack ComposenのCanvasを使用して花火を作成しました。元々はこのLT会のネタとして仕込んでいたものでしたが、ZOZOの2023 DridKaigiのブースでのプログラミングクイズの題材としても使われることになりました。

### 8月 - 伊豆大島はいいぞ
夏に友達と旅行した伊豆大島の紹介LTを行いました。

### 9月 - HUNTER×HUNTERクイズ（入門編）
個人的に一番好きな漫画であるHUNTER×HUNTERのクイズを作ってLT形式にまとめました。

### 10月 - ノンデザイナーズ・デザインブックを読んだので名刺作ってみた
[ノンデザイナーズ・デザインブック](https://book.mynavi.jp/nddb/)を読んで学んだことを活かして、[プレーリーカード](https://prairie.cards/)で名刺を作ってみました。

### 11月 - ノンプログラマのための ~アルゴリズムパズル プログラマのための数学パズル入門~
[アルゴリズムパズル](https://www.oreilly.co.jp/books/9784873116693/)を読んで学んだことを活かして、アルゴリズムクイズLTを行いました。

### 12月 - ゴンとキルアの強さの差から見るHUNTER×HUNTER
HUNTER×HUNTERの内容を主人公二人の強さの差に着目するとどういうことが見えてくるのかという話をしました。


# 得たもの
### 6,7割の状態でバッターボックスに立つ度胸
何かアウトプットするときに今までは完璧な内容でないとマサカリが飛んできて死んでしまうと思っていました。

ただ思い切って一歩踏み出すことを定期的に続けていくと

- 適切なマサカリを頂けて勉強になる
- みんな優しいので細かい粗の部分までそこまで気にしていない

というようなことに気づいてきました。そうすると無駄な完璧主義から脱却してアウトプット回数を増やすことができる様になりました。その流れが、アウトプットの量が増えるから内容の質も勝手に上がっていくという好循環を生み出しました。


### 発表駆動勉強の習慣
- Jetpack ComposeのCanvas
- 関数型言語とは
- デザイン
- アルゴリズム
- HUNTER×HUNTER
- 伊豆大島の知見

etc..
### 普段の業務で関わらない人と交流する機会
自分と異なる人に出会えるというのがとても良い経験だなと思います。同じメンバーでしかコミュニケーションをとっていないと、いつの間にかそこがコンフォートゾーンになって抜け出せなくなってしまうものだと思います。そんな中普段の自分のコミュニティの外側の人と積極的に触れ合うことで、新たな知識や経験を得やすいので自分の成長曲線の傾きが大きくなったと思っています。

# 終わりに
というように7月に立てた社内LT皆勤の目標は達成できました🎉

日々進歩したいので早速来年に向けて新たな取り組みを模索していこうと思います。

# 参考リンク
https://www.shonenjump.com/j/rensai/list/hunter.html

https://book.mynavi.jp/nddb/

https://prairie.cards/

https://www.oreilly.co.jp/books/9784873116693/
supabaseで定期実行する

# はじめに
やりたかったことは例えば1週間に1回とか、1日に1回など、定期的にDBに処理を加えるファンクションです。

# やり方
デフォルトの機能だけでは実現できなかったので、extensionを使います。

## extensionを入れる
[Database](https://supabase.com/dashboard/project/_/database/tables)から追加したいTabelを選択し、Extensionsタブを開きます。

検索窓があるので、そこにcronと打ち込みます。
pg_cronが出てくるので、右側のトグルボタンをクリックして有効化します。
![](https://storage.googleapis.com/zenn-user-upload/c5c0603cba67-20231223.png)

## SQLエディターで定期実行するファンクションを作成する
[公式ドキュメント](https://supabase.com/docs/guides/database/extensions/pg_cron)をみて作るんですが
大体以下のような書き方です。
```
select cron.schedule (
    'hogehoge', -- ジョブの名前です。適当な名前をつけましょう。
    '* * * * *', -- どのタイミングで実現するかをCronの書き方で書きましょう。
    $$ delete from events where hogehoge $$ -- ここに実行したい処理を書きましょう。
);
```
もし、すでに実行するべきファンクションをすでに作っているのなら以下のような書き方です。

```
select cron.schedule (
    'hogehoge', -- ジョブの名前です。適当な名前をつけましょう。
    '* * * * *', -- どのタイミングで実現するかをCronの書き方で書きましょう。
    'hugahuga' -- ここに実行したい処理の名前を書きましょう。
);
```

これだけで定期実行できるはず
【IT資格】１か月でデータベーススペシャリストになれる保険ってありますか？

## はじめに
きっかけはともあれ、こんなしょうもないタイトルの記事を開いていただきありがとうございますm(__)m

情報処理推進機構 (IPA) の情報処理技術者試験で令和5年度周期実施のデータベーススペシャリスト (DB) 試験に合格したのでポエムを書こうと思います。

世の中には14歳でデータベーススペシャリスト試験に合格する方もいらっしゃるようなので、私なんかの記事を見ても…という話ですが、読んでいただけると嬉しいです。

## 結果
![ddd.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/08e730d0-b4a3-18cd-719a-94b35de8de2a.png)
見ての通りのギリギリ合格です。

データベーススペシャリスト試験合格のために必要な知識は他の高度試験に比べて少ないという印象を持ちました。

個人的な試験問題に対する感想は、知識で殴る系ではなく、パズルや謎解き系という印象です。(勉強期間1か月のザコによる戯言)

## データベーススペシャリスト試験とは？
情報処理推進機構 (IPA) の実施する情報処理技術者試験の1つの区分。

情報処理技術者試験は以下の区分に分かれており、高度試験 (高度な知識・技術のところ) に分類されています。

![gmcbt8000000fnbg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/4807ce93-23df-2ff9-ef8d-fb781621e48d.png)

対象者像は以下のようです。
> 高度IT人材として確立した専門分野をもち、データベースに関係する固有技術を活用し、最適な情報システム基盤の企画・要件定義・開発・運用・保守において中心的な役割を果たすとともに、固有技術の専門家として、情報システムの企画・要件定義・開発・運用・保守への技術支援を行う者

まあ、データベースに関してはツヨツヨな人材ですよ～と箔がつくという話です。

合格率は約15%程度、合格者平均年齢は約30歳という感じです。

## 受験前のスペック
* 普段は一般的なITエンジニア (業務内容はデータサイエンティスト寄りの内容、5年目)
* 応用情報技術者試験に令和3年秋季に合格
* 今年30歳 (後から知りましたが、大体合格者平均くらいらしい)
* <b>普段データベースには全く触れていない</b>

こんなところです。いわゆる平凡な人間だと思います。

## 受験しようと思ったきっかけ
* 応用情報技術者特典の高度試験午前Ⅰの免除期間が終わる
* なんでもいいけど高度試験に受かっときたい
* データベーススペシャリスト試験はなぜかデータサイエンティストが持っていた方が良い資格に上がってくることがある (いまだに意味不明と思っている)

こんな感じです。午前Ⅰ免除期間が終わってしまうというのが地味ですが一番大きかったです。

## 受験までにやったこと
なめていたわけではないですが、受験勉強を始めたのは9月に入ってからでした。

### まずは教科書的なやつを読む
![情報処理教科書 データベーススペシャリスト 2023年版](https://m.media-amazon.com/images/I/81ey5xuPHiL._SY522_.jpg)
2週間くらい？で一周した気がします。

まずは覚えることは考えずに内容が腹落ちするまで読みました。

読み終えた後は、本の付録的な午前Ⅱ問題演習帳？(名前は適当) で問題を解き、わからない問題は本文を再度読み直しながら進めました。

この演習段階で初めて覚えることを意識しました。

※演習は下の午後対策と並行して行った

### 午後試験に向けてもう一冊読む
![2023-2024　データベーススペシャリスト「専門知識＋午後問題」の重点対策](https://m.media-amazon.com/images/I/51uDvtotvYL._SY445_SX342_.jpg)
午後試験対策としては、応用情報技術者試験の際にもお世話になったiTECのシリーズに再びお世話になりました。

こちらも2週間くらいで終えられた記憶です。

午後試験の解き方を問題を解きながら理解していけるため個人的には好きです。

### 過去問道場で午前Ⅱ問題演習
鉄板かと思いますが、残り１週間にして過去問道場も使わせていただきました。

午前Ⅱ問題は過去問から多く出題されることもあり、過去問を多くこなした方が単純に強いです。

### 過去問演習
過去問演習は試験前3日前くらいから始めました。

3日しかないのでいろいろと諦めて
* 午後Ⅰは何とかする
* 午後Ⅱは上振れを狙って祈る

という作戦にしました。

午後Ⅰは過去問2年分しか解けていないですし時間内に解ききれたことは本番も含めありませんが、その中で自分が得点できそうな問と全く合格点に達しそうにない問の雰囲気が掴めたので演習量は絶望的ですがやってよかったです。

午後Ⅱについては、データベーススペシャリスト試験は午後Ⅰの時間と分量を増やしたものが午後Ⅱだと (今でも) 思っているので午後Ⅰが何とかなれば何とかなるやろ精神です。

(過去問演習はしっかり余裕をもってやりましょう…午後Ⅱの過去問解いたことないとかありえないですよ…)


## 受験当日
### 朝の気持ち
<b>落ちてもしゃーない！だって勉強できてないんだもん！！！</b>

### 会場
某大学の講義室での受験でしたが、冷房ガンガンでずっと震えていた記憶があります。

受験者は「寒いので温度上げてくれませんか？」という勇気を持ちましょう。

### 受けた感想
* 午前Ⅱは多分大丈夫！
* 午後Ⅰは解き終わらなかったし書いたところも不安だし40点くらい？
* 午後Ⅱは解き終わったけど過去問も解いてないし、配点もしらないしお祈り！(そもそも午後Ⅰ受かってないと思ってたからどーでもよい)

## まとめ
こんな感じでも上振れの上振れを引いて、およそ１か月の勉強でデータベーススペシャリストを名乗れるようになりました。

これからもとりあえずデータベースに触れる予定はありませんし、もう一回受けると恐らく落ちますが受かれば何でも良し！ということにしておこうと思います。

(とはいえ、恥ずかしいので勉強は続けます)

真面目に合格を狙いたい方はしっかりと勉強して臨むことをお勧めします。

しょうもないポエムを読んでくださった方ありがとうございますm(__)m
mindの研究 その50

# 概要
mindが、謎なので調べてみた。
csvのライブラリ、見つけたのでやってみた。

# 参考にしたページ

https://kuninet.org/2012/02/02/%e3%80%90mind%e3%80%91csv%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e3%82%92%e6%9b%b8%e3%81%84%e3%81%a6%e3%81%bf%e3%82%8b3%e3%80%80%e3%83%90%e3%82%b0%e3%81%a0%e3%82%89%e3%81%91%e3%81%a0%e3%81%a3/

# サンプルコード

```




※
※　CSVライブラリ
※　2012/1/28　kuni
※

CSVファイルは　ファイル。
CSVデータは　256個の　文字列実体。

CSVファイルの読み出し準備とは
　ファイル名は　文字列
　ファイル名に　入れ
　ファイル名で　CSVファイルを　オープンして
　エラー?
　ならば
　　「!!　ファイルのオープンに失敗しました　!!:」と　ファイル名を　合成して　重大エラーする
　つぎに
。

一文字指定分断とは
　分断文字は　変数
　分解元文字列は　文字列
　発見位置は　変数
　分断文字と　分解元文字列に　入れ
　分断文字で　分解元文字列から　一文字検索し　発見位置に　入れ
　発見位置が　ゼロ以外
　ならば
　　発見位置で　分解元文字列を　分断したものと　分解元文字列を　
　さもなければ
　　分解元文字列と　「」を
　つぎに
　返す
。

CSV文字列を分解とは
　分解元文字列は　文字列
　カウンタは　変数
　分解元文字列に　入れ
　CSVデータを　クリアして
　カウンタに　1を　入れ
　ここから
　　','で　分解元文字列を　一文字指定分断して
　　CSVデータ(カウンタ)と　分解元文字列に　入れ
　　分解元文字列が　「」と　等しい文字列
　　ならば
　　　打ち切り
　　つぎに
　　カウンタを　一つ増加し
　繰り返す
。

CSVファイルから一行読みだしとは
　ワーク文字列は　文字列
　CSVファイルから　一行読み出し　ワーク文字列に　入れ
　データ終わり?
　ならば
　　終わり
　つぎに
　ワーク文字列で　CSV文字列を分解すること
。

CSVファイルをクローズとは
　CSVファイルを　クローズする
。

CSVデータを一行分表示とは
　CSVデータ(1個目)を　表示して　"/"を　表示し
　CSVデータ(2個目)を　表示して　"/"を　表示し
　CSVデータ(3個目)を　表示して　"/"を　表示し
　CSVデータ(4個目)を　表示して　"/"を　表示して　改行すること
。

メインとは
　"test.csv"で　CSVファイルの読み出し準備して
　ここから
　　CSVファイルから一行読みだし
　　データ終わり?
　　ならば
　　　打ち切り
　　つぎに
　　CSVデータを一行分表示して
　繰り返して
　CSVファイルをクローズする
。





```

# 実行結果
test.csv
```
id,name,age,gaku
1,ryu,65,k
2,ryo,15,t
3,kent,35,d
4,alice,77,s
```
```
>csv0
id/name/age/gaku/
1/ryu/65/k/
2/ryo/15/t/
3/kent/35/d/
4/alice/77/s/

```


以上。
supabaseのデータベースでトリガーファンクションを作る

# はじめに
supabaseのDBに変更が入った時に、それをトリガーに特定の処理を呼びたかったので調べた

# 行いたい処理の関数を事前に作る
ここでどういう処理をやりたいかということは人によって様々なので書きませんが
注意事項は以下
1. DatabaseタブのなかのFunctionsタブからCreate a new functionを押して作る
2. return typeは*trigger*を選ぶ
3. 一番下のshow advanced settingsを押して、type of securityを*SECURITY INVOKER*を選んでおく

# トリガーファンクションを作る
想像の100倍簡単です。
DatabaseタブのTriggerタブを選んでください。
![](https://storage.googleapis.com/zenn-user-upload/4fa18f3effef-20231223.png)

1. Name of triggerは適当な値を入力
2. 「Table」はどこのテーブルの変更を検知するのかを選択
3. Eventsはどういう変更を検知するのか、Insert, Update, Deleteの中から選択
4. Trigger typeはeventが完了する前に行うのか、後に行うのかを選択（詳細は後述）
5. Orientationは、行ごとに実行するのか、処理ごとに実行するのかを選択（詳細は後述）
6. 最後にどのfunctionを呼ぶのか、要はさっき作ったファンクションを選択して終了

### Trigger typeについて
ここちょっと理解しきれていないのですが、自分のイメージとしては以下です。

before eventsにすると、エラーが起きた時に元の処理を止めてくれます。
after eventsにすると、エラーが起きた時に元の処理自体は終了しています。

### Orientationについて
Rowにすると一つの行ごとに一回実行、Statementにすると一つの変更ごとに一回実行です。
一行だけの変更を検知するんだったら、どっちでも変わりないですね。
ただ、複数行を一つのSQL分で変更するんだったら、Statementにしたらよりパフォーマンスよく実行できるようです。

# 終了
上記で作れるはずです。
ただ、実際にやってみると動かなかったりするのでそしたら
LogsタブのTemplateとかから適当なログ出しのテンプレを選択して、ログをみてみましょう。
なんかしらのエラーが出ているはずです。
[23日目] Cloudflareで作る無限メールアドレス

こんにちは、なりかくんと申します。
この記事はなりかくん Advent Calender 2023の23日目の記事です。

今回は、Cloudflareで無限に作れるメールアドレスを紹介します。

# Cloudflare Email Routing
Cloudflareでは、Cloudflare Email Routingというものがあります。
ドメインのネームサーバーとMXレコードをCloudflareにすると使えます。

https://developers.cloudflare.com/email-routing/

# Catch-all address
Email RoutingのCatch-all addressを`Send to an email`にして転送先を指定するだけで、ドメインのメールアドレスのユーザー名部分が何であれその指定した転送先に転送されるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/41b2d617-9f50-7efb-bcf9-a9f1fe40f8ed.png)

これで実質無限メールアドレスです。

# 個別設定も可能
アドレスの転送先を個別に設定することも可能です。ここで個別に設定したものは、Catch-all addressより優先度高めで転送されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/883a103e-7c79-5afb-a4a2-bd014d7f7ba7.png)

# 最後に
無料の無限メールアドレス運用をお楽しみください！
最後までお読みいただきありがとうございました。