OmniAICreator/Qiita-1.07M huggingface dataset:
【覚書き】composer install時にGitHubAPIのレート制限に引っかかった時の対処法

# 初めに
composer installを実行した際、裏で呼んでいたGitHubのAPIのレート制限に引っかかりました。
レート制限の上限値や回避法について書きます。

# GitHubAPIにはレート制限がある
Githubが提供しているAPIにはレート制限があります。
レートの上限値は認証済みのユーザでアクセスするかどうかで決まり、それおぞれ以下の通りです。
* 認証されてない場合：60回/時間
* 認証されている場合：5000回/時間

https://docs.github.com/ja/rest/using-the-rest-api/rate-limits-for-the-rest-api?apiVersion=2022-11-28

# レート制限にひっかかったか確認する方法
認証されてない状態でレート制限に引っかかった場合、以下のようなレスポンスが返ってきます。
その後、認証トークンの入力を求められますが、作成しない場合はレート制限状態になってしまいます。

```sh
$ composer update
Loading composer repositories with package information
GitHub API limit (60 calls/hr) is exhausted, could not fetch https://api.github.com/repos/hogehoge Create a GitHub OAuth token to go over the API rate limit. You can also wait until 2024-12-01 04:12:35 for the rate limit to reset.
```

また、レート制限にあるかどうかはAPIでも確認が可能です。
このAPIへの呼び出しはレート制限にはカウントされません。

```sh
$ curl -i https://api.github.com/rate_limit -k
HTTP/1.1 200 OK
～ヘッダー中略～

{
  "rate": {
    "limit": 60,
    "remaining": 0,
    "reset": 1733026355,
    "used": 60,
    "resource": "core"
  }
}
```

:::note warn
GitHubのレート制限は二種類あり、この記事で扱っているのは前者です。
* [primary-rate-limits](https://docs.github.com/ja/rest/using-the-rest-api/rate-limits-for-the-rest-api?apiVersion=2022-11-28#about-primary-ratelimits)
  * ユーザが一定時間に投げてよいリクエストの上限値
* [secondary-rate-limits](https://docs.github.com/ja/rest/using-the-rest-api/rate-limits-for-the-rest-api?apiVersion=2022-11-28#about-secondary-rate-limits)
  * 不正防止用のアクセスレート制限
  * 同時リクエストや、1分あたりのリクエスト数の制限など
:::


# 対処法
PATを用いて認証を行うのが簡単でした。
トークンは`Fine-generated tokens`を使用し、`Repository access`は`Public Repositories (read-only)`を指定しています。Permissionsは特に指定しなくても大丈夫でした。

トークン作成後、以下のコマンドでcomposerに登録することでレート制限を回避することができます。
```sh
$ composer config -g github-oauth.github.com 作成したトークン
```

この設定で無事にcomposer installを実行することができました！

# 終わりに
今回はcomposerを用いたGitHubAPIのレート制限の緩和方法をまとめました。
今後も何か分かったらまとめようと思います。

ここまでご覧いただきありがとうございました！
統計検定1級過去問解説

# はじめに
・統計検定1級（数理統計、統計応用（理工学））の過去問解説を整理
・他の年度も順次更新中

# 解説（2022年統計数理）
## 2022年統計数理問1

## 2022年統計数理問2
![2022統計数理問2-1[1].jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346827/a4d7a095-cf0a-957b-3e05-7e3b69ac7bbb.jpeg)
![2022統計数理問2-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346827/186d2792-57d2-6415-80a5-c704b7f32693.jpeg)
![2022統計数理問2-3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346827/3193a688-5090-cd86-7e13-8a7ded4bdab7.jpeg)
![2022統計数理問2-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346827/fbbd1321-ba13-6e47-fdc3-32877f734c05.jpeg)
![2022統計数理問2-5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346827/581a20a5-b773-2444-896c-4f094b3a8122.jpeg)
![2022統計数理問2-6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346827/c92250bd-40db-9d55-77be-39ecd2770a2b.jpeg)



## 2022年統計数理問3

## 2022年統計数理問4

## 2022年統計数理問5
python+sqlalchemy+lambdaで管理者画面を作る

# 背景
バックエンドエンジニアをやっています。litestar+sqlalchemy+lambdaの構成でAPIをつくったのですが、フロントの方から管理者画面を作った方がいいよの声が...
普通みんな持ってるでしょって言われました
あるあるなんでしょうか？
みなさん教えてください

というわけで、管理者画面を拵えることになったのですが、工数はないので、適当なライブラリを使うことに。Djangoみたいに簡単にできればいいなというところで、[sqladmin](https://github.com/aminalaee/sqladmin)を見つけました。
簡単な管理者画面にはとてもいいのですが、jinja2で毎レスポンスごとに、全てのhtmlを送ってくる仕様でした。
ちょっと困るのでlambda+cognitoで使えるようにhtmxを使って書き換えることにしました。

# TL;DR
- sqladminでcrudできるの楽しい
- htmxおもしろい
- [sqladminlambda](https://github.com/sion908/sqladminlambda)作ってみたので、みてみてください

# そもそも

## sqladminについて
sqlalchemyのモデル定義をもとに、starlette系のASGIライブラリで管理者画面を作ることができる。
starletteでasgiを作り、sqlalchemyのモデルをwtformsでフォーム化、jinja2でhtmlをレンダリングする。
<img width=25%><img width=50% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698479/4a83f763-444b-3acb-ff40-868dc1a9e270.png">

<img width=10%><img width=80% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698479/5bcb2a62-bd90-5d5e-c4ef-ab3e69a06b0d.png">

## 利点
- 少しの変更で、crudができるようになる
- モデルのcrudの前に処理を挟むことができるので、必要な独自処理を追加できる
- 拡張性が高い

## 個人的に足りなかったこと
- 毎回全てのhtmlをレンダリングして返してくるので、効率が悪い
  - せめて、最小限のDOMを返すようにしたい
- cognitoに対応したい

# 開発
色々やってみたかったのですが、第一弾として、htmxに対応してもらって、id_tokenを渡すことで、apigatewayの認証にも対応できるようにしました。

# やったこと
- htmxによる擬似的なページ遷移の実現
- htmxによるDOM操作
- htmxでid_tokenを渡せるように修正

## htmxについて

```html
<button hx-get="/api/user-info"
  hx-trigger="load"
  hx-headers='{"Authorization": "Bearer ${localStorage.getItem("id_token")}"}'
  hx-target="this"
  hx-push-url="true">
</button>
```
このbutton操作によってできること
1. DOM操作
   - `hx-target`属性を使用して、更新する要素を指定
   - `hx-trigger`で、いつHTMXのリクエストを実行するかを制御

1. 認証トークンの設定
   - 個別のリクエストで`hx-headers`属性を使用してヘッダーを設定

1. ルーティングの仮想遷移
   - `hx-push-url="true"`属性により、ブラウザの履歴にURLを追加

# 終わりに
あくまでも個人的見解です。
夢はあるなと
cognitoの対応もしたのですが、sqladminの外側で定義したので、ライブラリに含めることはできなかったです。
lambdaとsession周りをどう適応させるかわからず今回はこのような方式にしましたが、ちょくちょく認証が切れて、ログアウトさせられるのをどうにかしたいところです。
最近litestarにハマっているので、starlette系だけではなく、litestarにも対応させたいです。litestarの方にも`piccolo admin`がありましたが、こちらの方が使いやすそうな印象でした。
文章力がほしい...

# 参考
https://aminalaee.dev/sqladmin/
🔥メンテナンス後の障害率ほぼ0％のエンジニアが実践する激アツメンテナンスメソッド‼️🔥

この記事は [ex-crowdworks Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ex-cw)の5日目の記事です。

# はじめに
今年、株式会社クラウドワークスを退職した@nisyuuです。好きなすかいらーくHDのブランドは[バーミヤン](https://www.skylark.co.jp/bamiyan/index.html)です。
エンジニアとしてクラウドワークステック（旧クラウドテック）というフリーランスと企業をマッチングするエージェントサービスを開発していました。

テック開発チームにいたときは、2年ぐらいの間メンテナンス作業を担当していました。
メンテナンスは、RailsのメジャーバージョンアップやOSのアップデートなどサービス全体に関わるものも多かったですが、作業後に障害が起きて利用者が影響を受けてしまうことはほぼ0でした。
数多くあるITサービスの中では稀に見る障害の少なさではないでしょうか。

今回は、障害を圧倒的に起こさないようにするためのノウハウを紹介します。
有料級なので他言無用でお願いします🤫

# なぜ障害を起こさなかったのか
障害を起こさなかったのは、ベテランエンジニアでマネージャーのアドバイスによるものが大きかったと考えています。
そのアドバイスとは、

***当日は何も考えず手順に従うだけで作業が終わるようにしておく***

というものです。

メンテナンスの担当は初めてでしたが、メンテナンスを安全に実施するためのドキュメント作成方法から作業方法など数多くのアドバイスをいただきました。
障害率ほぼ0の原点はここにあると考えています。

# メンテナンス前にやること
メンテナンスまでにやることは当日の手順書作成だけでなく、メンテナンス当日までの手順書も作成します。
さらに、ドキュメントを作成するだけでなくステージング環境を使った予行演習をしてください。
予行演習は成功するまで実施します。なぜなら、成功しなければ本番でも成功しないからです。

## 当日までの手順書
メンテナンス実施日時の確定、参加者の確定、影響範囲の調査、社内のステークホルダーへのお知らせ、サイトへのお知らせ掲載、環境変数の設定、デプロイ後に本番環境でテストするためのテストデータ用意など事前にできることは全てリストアップし作業を済ませます。
当日の作業を無くすぐらいの気持ちで取り組んでください。

メンテナンスの実施日時は、サービス利用者の少ない日時、時間帯にしましょう。時間帯別の利用者はGoogle Analyticsで確認できます。

## 当日の手順書
当日の手順書には、メンテナンスモードへの切り替えやデプロイの仕方、メンテナンス成功の判断基準、失敗時のロールバック手順などを記載します。
ページを開いて作業する工程があればリンクも手順書に記載してください。
何も考えずに上から順番に実施すると、メンテナンスが完了するぐらいに仕上げましょう。

メンテナンス成功の判断基準は、デプロイ後に問題なく稼働することを確認するためのチェックリストを入れておきます。

## 予行演習
メンテナンス前は作り込んだ当日の手順書を使い、ステージングを使った予行演習でさらに手順書を確実なものにするなどをしていました。
経験上、予行演習はメンテナンスを成功させるための圧倒的手段です。予行演習を通して手順書の不備を発見できたこともあるため、やらない理由はないと実感しています。

# メンテナンス当日
当日は事前に作成していた手順書の通り進めます。
想定外の事態が発生し、決められたメンテナンスの時間帯に終わらない可能性が出てきた場合はすぐにメンテナンスを止めてください。
必要があればロールバックの手順を実施します。

問題なくデプロイができた後は、メンテナンス成功の判断基準を達成しているか確認します。
達成できて入れば、ステークホルダーにメンテナンス完了の通知をすると無事にメンテナンスは完了です。

# おわりに
メンテナンス後に障害が起きてしまうのは間違いなく準備不足です。
準備不足は**意思を持って取り組む**ことで、必ず補えるものです。

世間では今年も様々なメンテナンスが失敗していました。

こんなことや

https://www.nikkei.com/article/DGXZQOUC122EK0S3A510C2000000/

こんなことなど

https://www.itmedia.co.jp/news/articles/2403/14/news201.html

来年は、メンテナンス成功絶対達成でよろしくお願いします🫵🏻
頼むよ、みんな。来年もよろしく。
時間比較

Kotlinで時間(Date)を比較する方法です。compareToを使用して比較します。
```kotlin
if (date.compareTo(date2) == 1) {
    // 比較後の処理
} 
```
値が同じ場合は0
比較値する値が前の時間だと1
比較値する値が先の時間だと-1を返します。

また比較する時の型は同じにする必要があります。下記はLocalDate型での比較処理です。
```kotlin
val localDate: LocalDate = LocalDate.now()
val localDate2: LocalDate = LocalDate.now().plusDays(1)

if (localDate.compareTo(localDate2) == 1) {
    // 比較後の処理
}
```

サーバーからのレスポンス値の場合、は基本文字列になります。その場合は下記のように一旦Date型に変換してから比較を行います。

```kotlin
val stringDate = "2024-01-01"
val date = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.JAPANESE).parse("$stringDate 00:00:00")

```
技術コミュニティ「CA Tech Lounge」を設立して１年半経ちました

## 筆者について
2019年サイバーエージェント新卒入社
AI事業本部での新規事業立ち上げ、人事を経て2022年より技術人事本部
現在はCA Tech Lounge室長と新卒/Re:Careerエンジニア採用マネージャーを担当

https://www.cyberagent.co.jp/careers/special/students/tech_lounge/interviews/interview_4.html

## CA Tech Loungeについて
2023年5月より、自社オフィス「Abema towers」内に40席ほどのスペースを設け、社外の会員が相互コミュケーションを通して学習を進められるスペースおよびコミュニティを設立しました。

https://www.cyberagent.co.jp/news/detail/id=28599

「IT企業が社外の会員を招いて技術コミュニティを作る」かつ「オフラインで場所を設ける」というのはコロナ禍以降発足のプロジェクトとして物珍しいものであると自負しています。

これまで、会員のインタビューなど公式サイトで様々な情報発信を行ってまいりましたが、社外の方から「どのようなプロジェクトなのか」とご質問をいただくことも多く、この記事を通していくつかの実態についてお伝えできればと思っています。

なお、制度や選考については興味をお持ちいただけましたら、下記HPを御覧ください。

https://www.cyberagent.co.jp/careers/special/students/tech_lounge/

## 会員の属性/利用実態
### 就活年度の学生を中心に、高校生や社会人まで幅広い
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3468362/cfcf49b4-08e3-3f9c-e50f-b96a1014ac44.png)
上記は2023年度の記事にて作成いただいたものですが、24年度の学生は就職し学年が一つずつ上がったこと以外は概ね似た分布になっているかと思います。
いわゆる「エンジニア就活」をきっかけとして弊社にご興味をお持ちいただくことも多いため、比較的就活年代に寄っていますがそれ以外の世代にも幅広くご入会いただいている形になります。

### 日頃の来館頻度：一日10~15人程度が来館
会員の自己申告によりDailyでまとめた人数が下記となります。

| 日付   | 来館人数 |
|--------|----------|
| 11/15  | 10       |
| 11/18  | 7        |
| 11/19  | 8        |
| 11/20  | 11       |
| 11/21  | 12       |
| 11/22  | 11       |
| 11/25  | 14       |
| 11/26  | 17       |
| 11/27  | 8        |
| 11/28  | 13       |
| 11/29  | 18       |

時間帯にもよりますが、少しずつ日々の来館人数は上昇しております。
とはいえまだ座席数に対して満席になるような日はなく、キャパシティは十分です。

## 入会した会員のその後について
実際に入会いただいた会員様の事例を抜粋します。
- CA Tech Loungeで技術を学ぶ仲間が増え、エンジニアとして就職することが決まった（25卒学生）
- 技術的な成長を目指して入会し、メガベンチャーへの就職が決まった。（既卒社会人）
- エンジニア未経験からCA Tech Loungeに参加し、インターンに合格した（26卒学生）

もちろんサイバーエージェント社にご興味お持ちいただける方もいらっしゃいますが、
そうでない方もその後の飛躍に一役買うことができているのではないかと思っています。
（弊社に入社が決定した方も数名いらっしゃいます）

## イベント的な活動について
基本的に会員主導のもと、多様なイベントを企画・実施しています。
- 朝活会

https://x.com/y_takarada/status/1807696112243155277

- 技術書典

https://x.com/doudemo_nandemo/status/1723577092779155601

- Party

https://x.com/y_takarada/status/1857356174984937947

また、今月にはISUCONへの出場を行う予定、月次でLT会を実施するなどのイベントを実施しています。
こうしたイベントで仲良くなり、日頃スペースに来た際にも会話や質問をしやすくなっているようです。

## 具体的には、どんなことを勉強しているの？
さて、ここまでCA Tech Loungeについて話していきましたが、結局会員はどんなことを日夜勉強しているんでしょうか？
こればかりは室長である自分がべらべら喋るわけにもいかないですし、どうしましょうか...

えっ！CA Tech Loungeの会員が書いた記事、毎日一つ公開されるんですか！？

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

ということで、本記事はCA Tech Lounge Advent Calendar 2024 1記事目でした。
明日以降も会員の執筆してくれた記事が順次公開されますので、よければぜひご覧ください。

## 告知：Join us
2パターンの募集を行っています。
### 会員募集について
随時エントリーを受け付けています。既出の公式HPよりご確認ください。

https://www.cyberagent.co.jp/careers/special/students/tech_lounge/

### 技術人事募集について
このプロジェクトに運営として携わることに興味をお持ちの方がいらっしゃいましたら、
自分が所属している技術人事本部でも募集をかけています。

https://www.wantedly.com/projects/1781144

新卒採用人事としても同時に働いていただく形になるため、経験年数なども制限がありますが
もし少しでもご興味お持ちいただけましたらぜひご応募ください。

## 追記
Advent Calendarにて会員からの声をもらったため、随時こちらに掲載しておきます

https://qiita.com/TechYoichiro/items/1a395eeeaa2cc01162d0
出力: Lチカ

### 背景
メイン基板にはFrontとBackに2つのRGB-LEDが搭載されています。

![241203.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/7d64bef3-5d53-9d0c-b892-0b9abcb4161a.jpeg)

まずはLチカをしてみました。
### Scratch

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/80fa1044-2845-a0db-2241-72f130400f1e.png)

### spheroV2
testにあったBoltTest.pyのコメントアウトを参考に同様な動作をするスクリプトを作成しました。

```
import time

from spherov2 import scanner
from spherov2.sphero_edu import EventType, SpheroEduAPI
from spherov2.types import Color

print("Testing Starting...")
print("Connecting to Bolt...")
toy = scanner.find_BOLT()

if toy is not None:
    print("Connected.")
    with SpheroEduAPI(toy) as droid:
        print("Testing Start...")

        droid.reset_aim()

        print("Testing Front LED")
        droid.set_front_led(Color(r=0, g=255, b=0)) #Sets front LED
        time.sleep(1)
        droid.set_front_led(Color(r=0, g=0, b=0)) #Sets front LED

        print("Testing Back LED")
        droid.set_back_led(Color(r=255, g=0, b=0)) #Sets back LED
        time.sleep(1)
        droid.set_back_led(Color(r=0, g=0, b=0)) #Sets back LED
        
        # droid.set_main_led(Color(r=255, g=0, b=0)) #Sets whole Matrix
        print("Testing End...")
  
```

実行結果はこちらのようになりました。
```
git\spherov2.py\spherov2\test>python BoltTest241202.py
Testing Starting...
Connecting to Bolt...
Connected.
Testing Start...
Testing Front LED
Testing Back LED
Testing End...
```

### まとめ
spheroV2を用いて、sphero boltをpythonでLチカすることができました。
Flutter環境構築

## 執筆の背景
Macの容量が逼迫しており、使わなさそうなフォルダを削除していたら消しちゃダメなフォルダも消してしまっていたみたいで、次回以降の失敗にも即対応できるように...
## 参考手順
参考というか、このFlutter公式リファレンスを見れば大抵対応可能
[Flutter公式リファレンス](https://docs.flutter.dev/get-started/install)
## 以下、記事抜粋
### VSCode
Flutterの開発はVSCodeでやってしまうので、この方法で作業を進める
1. `F1`ボタンでCommand Paletteを開く
1. `flutter`と入力し、`Flutter: New Project`を選択
1. VSCodeの右下にそれっぽいのが出てくるので、`Download SDK`を選択
1. SDKのダウンロード先を選択しろと言われるので、任意の場所に置く
    - developmentフォルダを作成して、そこに置くのがわかりやすくて良いのかもしれない
    - (以前からこうしておけば消さなかったのかもしれないが...)
1. VSCodeのターミナルの出力に自動的に処理状況が表示されるため、終わってそうか確認する
1. ダウンロードが終わってそうであれば、ターミナルを閉じてVSCodeを再起動する
1. ターミナルを開いて次のコマンドが通ればおそらくOK
    ```terminal
    $ flutter doctor
    ```
### flutterコマンドが通らなかったら
おそらく再起動したときに.zshrcファイルのflutterのPATHがリセットされてる
1. ターミナルを開いて次のコマンドを入力する
    ```terminal
    // 自分の環境に合わせてね!
    $ echo 'export PATH="/Users/ホームディレクトリのユーザー名/development/flutter/bin:$PATH"' >> ~/.zshrc
    ```
1. VSCode上のターミナルで`flutter doctor`が通れば成功
社内展開において注意していること

<h2>社内展開〈非IT部門（事務）〉において<br>個人的に意識していること</h2> <p>非IT部門でPADやExcelマクロなどのツールを作成・利用することは、個人レベルで業務効率化を実現しやすく、効果が見えやすい場合があります。<br> しかし、ちょっと待ってください。もしその仕組みを組織全体に展開するのであれば、十分に検討した上で行う必要があります。本当に継続的に効果が期待できる業務効率化でしょうか？</p> <p>RPAは業務効率化の「銀の玉」ではありません。業務効率化には手順が必要です。</p> <br> <ol> <li>その業務は本当に必要ですか？<br> （必要な場合は次へ進み、不要であれば業務を削減することが最も効率的です。）</li> <li>その業務の費用対効果はどうですか？<br> （効果が大きい場合、基幹システムの改修を検討したほうが良いかもしれません。）</li> <li>RPA以外の手段も検討しましたか？<br> （RPAでExcelからExcelへの転記を行う事例も見られますが、アプリケーション側にその機能があれば、そちらを使うことを検討したほうが良いです。<br>※アプリ側の更新により、RPAがうまく動作しなくなる可能性もあります。）</li> </ol> <h2>非IT部門におけるPADを利用するうえでの問題点<br>（問題点を解消し、組織全体での利用を促進できるようにしたい）</h2> <p>PADは他のRPAツールと比較して、変数の型を意識せずにフローを作成できるというメリットがあります。多くのRPAツールでは、変数の型を事前に定義し、それからフローを作成する必要がありますが、PADではその必要がなく、初心者でも簡単に始められる点が魅力です。</p> <p>個人の業務効率化レベルであれば、動けば良いというレベルのフローで問題ないかもしれませんが、部署や組織全体での展開となると話は別です。</p> <p>組織で展開する場合、重要なのは、安定して稼働し、保守・メンテナンスができる体制を整えることです。</p> <p>たとえあなたが作成したPADプログラムが順調に動いていても、問題が発生するのは基幹システムの変更など、PAD以外の要因が影響することが多いです。そのとき、既に利用者は「ボタンを押すだけで動く」という認識を持っているかもしれません。</p> <p>RPAではないですが、事例として、Accessで「ボタンを押すだけで結果が出る仕組み」を作成した担当者が、人事異動のため、その業務を別の担当者に引継した数年後に業務が滞るという問題が発生しました。外部キーの変更が原因でAccessで作成された仕組みが動かなくなり、上長から以前仕組みを作成した担当者に修正依頼が発生しました。現在は担当ではないため結果的に丁寧に断られたため、現在の担当者は何時間もかけて手作業で対応することになりました。</p> <p>この事例の問題は、後任者が仕組みを理解せずに「ボタンを押すだけ」という認識で業務をしていた点です。特に事務部門において、Accessを利用できる人は限られており、数年ごとに人事異動がある環境では、業務がスムーズに回らなくなるリスクがあります。</p> <p>RPAに置き換えると組織で利用する際のポイントは、どの技術範囲まで利用するかを決め複数人が対応できることです。自分だけが使えて、他の人が修正できない仕組みのままでは問題が生じます。自分が異動した後でも他の人がフローを修正できる体制を整える必要があります。</p> <p>私の場合、組織展開前にRPA担当者同士でコードレビューの時間を確保し、異動後でも他の担当者が躓きやすいポイントをナレッジとして残すようにしています。</p> <p>※組織展開時にどうしてもスクリプトを使用した方が良い場合もありますが、その場合でも処理時間がかかるプログラムについては、適切に記録を残して組織全体で対応できる体制を整えるようにしています。</p> <h2>非IT部門における引継体制について</h2> <p>事務部門では必ずしもパソコン操作が得意な人が後任者になるとは限りません。そのため、PADを利用する際には、作成したプログラムの保守・メンテナンスを複数人で対応できる体制を構築する必要があります。</p> <p>得意な人がフローを作成して終わりではなく、一定の基準を設け、誰でも利用できる状況を整えることが重要です。万が一、保守・メンテナンスができない場合には、専門業者と連携できるようにしておくことも考慮しましょう。私の場合、業者が主催する勉強会に参加した際に頂く名刺やサポート費用の資料を引継書に加えており、後任者が必要な時に連絡できるようにしています。</p> <p>なお、すべてを業者に丸投げするのは個人的にお勧めしません。フローを作成することは遠回りになりますが、結果的に業務効率化に必要なデータベースの理解を助け、組織として何をすれば業務効率化につながるか考える機会になるためです。</p>
【Ruby on Rails】ルーティングって何？

## はじめに
最初Wi-Fiルータが頭に浮かびました。
Railsのルーティング、アクション周りにかなり苦戦したので備忘も含め書きたいと思います。
## Railsで開発する流れ
まず、Railsでサイトを作る場合は下記の流れで作業するといいかもと思いました。
(これが一般的？)

1. **機能の整理:** 実装する機能を決める。
2. **データベース設計:** モデルとカラムを決める。
3. **ルーティング設定:** 必要なURLを設定。
4. **コントローラ作成:** 各アクションを実装。
5. **ビュー作成:** 必要な画面を作る。
6. **動作確認:** ブラウザで動作を確認し、修正する。
今回該当するのは、3,4番のルーティング設定とコントローラ作成が主になります。

## ルーティング設定
ルーティングとはサイト内のURLとアクションを結びつける役割を持ちます。
config/routes.rbに記述します。
```routes.rb
Rails.application.routes.draw do
 get "articles", to: "articles#index"
end
```
```articles_controller.rb
class ArticlesController < ApplicationController
  def index
    @articles = Article.all
  end
end
```
**URL名**を叩いたら**articlesコントローラ**の**indexアクション**を実行するよという意味になります。
ちなみにコントローラはアクションを記述する場所です。
ゲームのコントローラと同じようにコントローラで**→↓↘︎ + P**のコマンド命令を出し、昇竜拳というアクションが実行されるイメージで自分は考えてました。

## 便利な記述
### root
`localhost:3000`にアクセスした時Railsのロゴが最初に出ますが、開いた瞬間のホーム画面を自分で設定できます。
 ロゴとはこれでおさらばです。
 ```routes.rb
 Rails.application.routes.draw do
    root "articles#index"
end
 ```
 rootを設定するとアクセスした瞬間にindexアクションが実行されます。

 ### as
 asはルーティングにルーティングヘルパーを付与できます。
 下記のように記述し、好きな名前をつけられます。
 ヘルパーと付くので他の人から見ても助けになるようわかりやすい命名が大切
 ```routes.rb
 Rails.application.routes.draw do
 get "articles", to: "articles#index", as: "home"
end 
 ```
 ルーティングヘルパーを付与してから`localhost:3000/rails/info/routes`を確認すると
 Helper列に`home_path`が追加されていると思います。
 これでビューファイルに記述する際簡単に記述できます。

 ## resourcesについて
resourcesは下記のように記述するだけでルーティングを勝手に組んでくれます。
便利すぎてとりあえずこれ書けばできてしまいますが、ルーティングに関してちゃんと理解していないと絶対にエラーが発生します。(体験談) 
 ```routes.rb
Rails.application.routes.draw do
 root "articles#index"
 resources :articles
end
```
1つずつ手書きでルーティング設定しておくと理解が深まると考えたので最初のうちは使わないほうがいいなと思いました。

## 余談 HTTPメソッドについて
### HTTPメソッドとは
クライアントとサーバー間の通信でどのようなリクエストを行うか示すものです。

| メソッド | 役割 |
| -- | -- |
| GET | データを取得する |
| POST | データ作成をする |
| PATCH/PUT | データを更新する |
| DELETE | データを削除する |

自分はずっとDELETEがしたかったのにGETリクエストが飛び続けて3時間ほど悩みネットの海を彷徨いました。
下記がGETリクエストの飛び続けたコードです。
```show.html.erb
<%= link_to "Delete Article", article_path(@article), method: :delete%> 
```
1つ辿り着いたのが、`rails-ujs`というライブラリを使う方法です。
しかしこれを使うやり方は古いらしく現在`turbo`というものが推奨されているみたいです。
(教えていただきました持つべきものは仲間)
修正したコードがこちら
```show.html.erb
<%= link_to "Delete Article", article_path(@article), data: { turbo_method: "delete" } %>
```
無事DELETEを飛ばすことができました。

## まとめ
* ルーティング は、URLとアクションを結びつける役割を持つ重要な設定。
* root を使えばホームページを簡単に指定できる。
* as でヘルパーを付与し、ルーティングをわかりやすく便利に。
* resources は自動的にルーティングを生成してくれるが、最初のうちは手書きで理解を深めるのがおすすめ。
* HTTPメソッドは、GET/POST/PATCH/DELETE の役割を正しく理解することが大切。
* turbo_method を使うことで、削除（DELETE）がうまく動作するように。

Railsのルーティングは最初は難しいけど、仕組みを理解すれば効率よく作業を進められるようになります！
Chakra UI v3 theme.tsでカスタムして色を変える

# はじめに
ドキュメントを見ながら実装を試みましたが、なかなかうまくいかなかったです。
ドキュメント以外の情報を探しましたが、v3の情報はあまりなかったです。

# 問題
ドキュメントを見たのですが、Chakra UI v3で色をつけることができませんでした。

Customization
https://www.chakra-ui.com/docs/theming/customization/overview
Colors
https://www.chakra-ui.com/docs/theming/customization/colors

# 解決方法
ChakraProvider、customConfig、使い方が、ドキュメントだと記述が省かれていたりするので、漏れなく記述します。

また、カスタムテーマの設定では、#edf2f7のような具体的な色コードを指定する必要があり、gray.100のような色名で指定することはできないようです。
地味にはまりました。
https://www.chakra-ui.com/docs/theming/colors

修正後の画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881019/313f7e30-d7a2-d7c4-2487-372132f6676b.png)


```src/theme.ts
// カラーを定義
import { createSystem, defaultBaseConfig, defineConfig } from "@chakra-ui/react"

const customConfig = defineConfig({
    theme: {
        tokens: {
            colors: {
                700: { value: "#ffcccc" },
                brand: {
                    50: { value: "#e6f2ff" },
                },
            },
        },
    },
})

export const system = createSystem(defaultBaseConfig, customConfig)
```

```src/main.tsx
// プロバイダーを設定
import React from "react"
import ReactDOM from "react-dom/client"
import App from "./App"
import { Provider } from "@/components/ui/provider"
import { ChakraProvider } from "@chakra-ui/react"

// cssを定義したsystemをimport
import { system } from "@/theme"
ReactDOM.createRoot(document.getElementById("root")!).render(
  <React.StrictMode>
    <Provider>
    {/* cssを定義したsystemをvalueにして、ChakraProviderを設定 */}
        <ChakraProvider value={system}>
                <App />
        </ChakraProvider>
    </Provider>
  </React.StrictMode>,
)
```

```src/App.tsx
// スタイルを使用
import { Box } from "@chakra-ui/react"

export default function App() {
    return (
        <>
            <Box>Hello World</Box>
            {/* ChakraProviderを使う */}
            {/* <Box bg="brand.50" > */}
            <Box bg="700" >
                Hello World2
            </Box>
            <Box bg="brand.50" >
                Hello World3
            </Box>
        </>
    )
}
```

```src/components/ui/provider.tsx
import { ChakraProvider } from "@chakra-ui/react"
import { ThemeProvider } from "next-themes"
import { system } from "../../theme"

export function Provider(props: { children: React.ReactNode }) {
    return (
        <ChakraProvider value={system}>
            <ThemeProvider attribute="class" disableTransitionOnChange>
                {props.children}
            </ThemeProvider>
        </ChakraProvider>
    )
}
```

# おわりに
ドキュメントでも、必要な文が省略されていることもあるので、不足している部分は補う必要があることを学びました。


# 参考
Customization
https://www.chakra-ui.com/docs/theming/customization/overview
Colors
https://www.chakra-ui.com/docs/theming/customization/colors
Step Functionsの記法がJSONataになって小一時間悩んだ話

# 概要
前記事と同じく、AWS学習のために、以下ハンズオンを利用
[AWS Step Functions入門](https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-StepFunctions-2022-confirmation-556.html "AWS Step Functions入門")

DynamoDBからGetItemする際に、パラメータを使って動的にパーティションキーを指定しよう。という内容。
※「ArticlID」となっていますが、間違えて誤字で定義しました・・・
```json
{
  "TableName": "Article",
  "Key": {
    "ArticlID": {
      "S.$": "$.ArticlID"
    }
  }
}
```

保存をしたところ、以下エラーが発生！
![スクリーンショット 2024-12-01 11.50.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344952/42ef9a5a-2dcd-8eb6-eee5-0913c3da9eb4.png)

いやいや、ハンズオン通りにやりましたが？

# 結果
以下記事を見つけました。
現在は、2024/12/1なので、最近のアップデート。
https://kakakakakku.hatenablog.com/entry/2024/11/28/090025

改めてStep Functionsのコードを見てみると、以下記載がありました。
```json
"QueryLanguage": "JSONata"
```
ん？新規作成した時、選択した覚えが無いが、デフォルトでJSONNataになるの？
大人しく、上記の部分を削除し、JSONPathで記載し直したところ、無事成功しました。
![スクリーンショット 2024-12-01 12.08.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344952/8b5143ca-e596-c08d-6938-0b27d07ad7a0.png)

ちなみに、JSONNataで実装すると以下のようになる。
```json
{
  "TableName": "Article",
  "Key": {
    "ArticlID": {
      "S": "{% $states.input.ArticlID %}"
    }
  }
}
```
![スクリーンショット 2024-12-01 12.58.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344952/27a2a691-6f0b-439f-37ff-455458d27f45.png)
Javaで学ぶアルゴリズム -線形探索

# 線形探索

> 線形探索（せんけいたんさく、英: linear search, sequential search）は、検索のアルゴリズムの一つ。リストや配列に入ったデータに対する検索を行うにあたって、先頭から順に比較を行い、それが見つかれば終了する。

https://ja.wikipedia.org/wiki/%E7%B7%9A%E5%BD%A2%E6%8E%A2%E7%B4%A2

# 実行環境

- JUnit 5
- Java 8


# テストコード

```java:SequentialSearchTest.java
public class SequentialSearchTest {

	@DisplayName("正常系テスト")
	@ParameterizedTest(name = "No.{index}: {0}を探すとインデックス{1}を返す")
	@CsvSource(value = {
			"-1, -1",
			"1, 0",
			"5, 4",
			"10, 9",
			"11, -1"
	})
	void testNormalSequentialSearch(int target, int expected) {
		int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
		assertThat(SequentialSearch.sequentialSearch(array, target), is(expected));
	}

	@DisplayName("配列が空である場合、-1を返す")
	@Test
	void testEmptyArray() {
		int[] array = {};
		assertThat(SequentialSearch.sequentialSearch(array, 1), is(-1));
	}

	@DisplayName("重複する要素がある場合、最初に見つかったインデックスを返す")
	@Test
	void testDuplicateElements() {
		int[] array = { 1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10 };
		assertThat(SequentialSearch.sequentialSearch(array, 4), is(3));
	}
}
```

# 線形探索アルゴリズム

```java:SequentialSearch.java
public class SequentialSearch {

	/**
	 * 線形探索を実行するメソッド。
	 * 配列array内でtargetを探し、そのインデックスを返す。見つからない場合は-1を返す。
	 *
	 * @param array 探索対象の配列、nullが渡される可能性はないと仮定
	 * @param target 探索する値
	 * @return targetのインデックス、見つからない場合は -1 を返す
	 */
	public static int sequentialSearch(int[] array, int target) {
		for (int i = 0; i < array.length; i++) {
			if (array[i] == target) {
				return i;
			}
		}
		return -1;
	}
```

```java:SequentialSearch.java その２
public class SequentialSearch {

	/**
	 * 線形探索を実行するメソッド。
	 * 配列array内でtargetを探し、そのインデックスを返す。見つからない場合は-1を返す。
	 *
	 * @param array 探索対象の配列、nullが渡される可能性はないと仮定
	 * @param target 探索する値
	 * @return targetのインデックス、見つからない場合は -1 を返す
	 */
	public static int sequentialSearch(int[] array, int target) {
 
		int i = 0;
  
		while (true) {
			if (i == array.length) {
				return -1;
			}
			if (array[i] == target) {
				return i;
			}
			i++;
		}
	}
}
```
おうちサーバー構築報告：予告

## 能書き

[私的サーバー構築日誌：仕切り直し](https://qiita.com/katz_engineer/items/1f21de2bd9072c260ae6)に基づいて自宅サーバーの構築を続けていたのですが…

その中で建てていた[GitLabサーバー](https://qiita.com/katz_engineer/items/78d5e4c4c975988b134b)にアクセスできなくなってしまいました。原因不明。

いや正確には原因はわかっていて、LXDコンテナが絶不調です。どの程度の不調かというと`lxc list`コマンドがフリーズしてしまうくらい。これではどうしようもありません。LXDコンテナがどう不調なのか調査のしようもありません。泣く泣く諦めました。

ところで最近知ったのですが、Proxmox VE という仮想環境サーバーがあるそうですな。調べてみると非常に良い。というか私がやりたかった事を、私の構想以上に上手に実現してくれています。文句無し！

というわけなので現在の私のメインサーバーは潰して、Proxmox VE をインストールし、その上の仮想環境でゴニョゴニョする事にしました。何回仕切り直してるんだって話ではありますが。仕方がありませんな。

というわけで。

Proxmox VE によって仮想環境を大量生産できる環境を用意して、その上にサーバーを仮想環境で構築する事にしました。今回は、その構想をまとめたものになります。

## ハードウェア

[私的サーバー構築日誌：仕切り直し](https://qiita.com/katz_engineer/items/1f21de2bd9072c260ae6)で紹介したものになります。

- NUC13ANHI5000 →LXDコンテナが絶不調になって再構築を余儀なくされたマシン
    - SSD: 2TB、HDD無し
    - メモリ: 32GB
    - CPU: 13th Gen Intel(R) Core(TM) i5-1340P
- HP N54L →我が家のファイルサーバー、こちらは問題無し

NUC13ANHI5000の方は、NUCがまだIntelの事業だった頃に購入しました。今はASUSに売却されてしまったんでしたっけ。

## ソフトウェア

NUC13ANHI5000に下記をインストールして運用する予定です。

1. Proxmox VE
    - 仮想環境群のホストとする
1. 仮想環境を4つ用意
    - 各種サーバー群を動かすためのLXDコンテナ×3
    - Dockerを動かすためのQEMU仮想マシン×1
        - [Dockerを動かすにはQEMU仮想マシンの中で実行するのがお勧めらしい](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#chapter_pct)
1. いくつかのサーバーをLXDコンテナ(1)で動かす（マシン名: network.local）
    1. 家庭内DNSサーバー
        - 家庭内ドメインを設定
        - Unbound
    1. DHCPサーバー
        - DHCPサーバーの冗長化
        - dhcpd
    1. オレオレ認証局と証明書
        - オレオレ認証局の構築
        - 証明書の発行
        - サーバー⇔クライアントの公開鍵送付方法の確立
1. メールサーバーをLXDコンテナ(2)で動かす（マシン名: mail.local）
    1. メールサーバー
        - Dovecot （LMTPを有効にしてローカル配信もさせる）
        - Postfix （一般的なMTS、但しローカル配信はDovecotに任せる）
        - LAN内だけのメール送受信で非公開とする
1. リバースプロキシをLXDコンテナ(3)で動かす（マシン名: proxy.local）
    1. nginxでバーチャルホストを設定
1. Dockerサーバーとする為のQEMU仮想マシンを構築（マシン名: docker.local）
    1. Dockerを動かす
    1. Dockerコンテナとして下記を構築
        1. GitLabとそのバックアップ体制
        1. Mattermostとそのバックアップ体制
1. Proxmox VE における仮想環境のバックアップを学習

LDAPはやめる事にしました。私一人しか使わない環境ですし、その割に無駄に手間が掛かりますし。

## 仕舞い

私の戦いはこれからだ！
【ChatGPT】難しい内容を理解する時に使えるPrompt30選を出しました。


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

　今回は、難しい内容を理解する時に使えるPrompt30選を出しました。

:::note info
本記事は、ChatGPT（有料版）
で行なっております。画像は
ありません。　あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)

***
　11月が終わり、
　　12月になりましたね。

　ニュースはありません。

　本当は、
　　OpenAIから、
　　　ChatGPT公開二年を記念して
　　　　何かあるかと思っていた
　　　　　のですが、
　　　　　　二年前のポストを引用して
　　　　　　　“使っているか？”と
　　　　　　　　問うたのみでした😅

　さて今回は、
　　難しい内容を理解する時に
　　　使えるPrompt30選を出しました。

　論文や分厚い書類などを
　　ChatGPTに読み込ませて
　　　内容を理解しようとするときに
　　　　使えるのでは？

　木内さんが
　　ポストしてくださいました。
　　　[木内翔大さんポスト](https://x.com/shota7180/status/1863002613337252329?t=Ip1H-SxJqBsoOy_jIJcrSA&s=19)

　しかし、
　　そのまま出すのも
　　　芸がありませんので、
　　　　こちらで再度出して、
　　　　　簡単な言葉で実行できそうな
　　　　　　ものにしました。

　ChatGPTに指示して
　　簡単にしたものです。

```Text:シンプル指示Prompt
1. 「これって何？」
2. 「簡単に教えて。」
3. 「大事なところだけ教えて。」
4. 「初心者向けに話して。」
5. 「子供に教えるなら？」
6. 「例を出して。」
7. 「どこで使える？」
8. 「歴史に関係ある？」
9. 「日常でどう活かせる？」
10. 「失敗例ある？」
11. 「違いは何？」
12. 「他と比べてどう？」
13. 「良い点と悪い点は？」
14. 「他の業界だと？」
15. 「昔とどう変わった？」
16. 「反対の意見は？」
17. 「問題点は？」
18. 「別の見方ある？」
19. 「普通の人はどう思う？」
20. 「新しい方法は？」
21. 「基本は何？」
22. 「今の課題は？」
23. 「これの歴史は？」
24. 「これからどうなる？」
25. 「関連する話題は？」
26. 「これで何ができる？」
27. 「仕事にどう役立つ？」
28. 「知らないと困ることは？」
29. 「新しいアイデアは？」
30. 「おすすめの資料は？」
```

　なんか
　　ふつうに
　　　使っているようなものに
　　　　なりましたね😅

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
日本語プログラミング言語「プロデル」をビルドできる環境をVSCodeで構築

# はじめに
VSCodeで「プロデル」アプリケーションをビルドして実行開始できるようにtasks.jsonとlaunch.jsonを構成してみます。


# 前提条件
Windows11 Pro 22H2
VSCode(Visual Studo Code)　1.95.1
Produire Version 2.0.1197 for Windows


## VSCodeの拡張機能
日本語プログラミング言語「プロデル」拡張機能 0.1.0
C/C++ for Visual Studio Code 1.18.5 Microsoft 
C/C++ Extension Pack 1.3.0 Microsoft 

C/C++のデバッガは直接使わないのですが、「プロデル」アプリケーションをデバッグ実行でローンチするために流用しています。

## tasks.json

```json:tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Produire build",
            "type": "process",
            "command": "C:\\Program Files (x86)\\Produire\\Produire.exe",
            "args": [
                "${workspaceFolder}\\callfunc2.rdr"
            ],
            "problemMatcher": []
        }        
    ]
}
    
```
このタスクの実行結果は下記のようにいい感じのようでした。

```cmd:
 *  実行するタスク: C:\Program Files (x86)\Produire\rdrc.exe C:\produire\vscode\callfunc2.rdr 

■☆Ｐ　プロデル コンパイラ Ver.2.0.1197　Ｐ☆■
 Copyright(C) 2007-2023 utopiat.net. All rights reserved.

次のソースファイルをコンパイルします。
　callfunc2.rdr

次のフォルダにあるプラグインを参照します。
　C:\Program Files (x86)\Produire\plugins\

プログラムを解析中...
コンパイル済み実行可能ファイルを生成中...

次のファイルが生成されました！
　C:\produire\vscode\callfunc2.exe
```

## launch.json
launch.jsonではプロデルコンパイラが出力した実行ファイル名callfunc2.exeを設定します。
ダミーのデバッガは.NETコアランタイムで作成してみましたが、x86アプリケーションは起動不可にひっかかって実行できませんでしたので、Mindと同じくC/C++用で設定しました。いちおう起動にはこぎつけましたが、実行ファイル自体がまだ正常に動いていないようでした。

```json:launch.json
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Produire Launch (console cpp)",
            "type": "cppvsdbg",
            "request": "launch",
            "preLaunchTask": "Produire build",
            "program": "${workspaceFolder}/callfunc2.exe",
            "args": ["1000"],
            "cwd": "${workspaceFolder}",
            "console": "internalConsole",
        },
        {
            "name": "Produire Launch (console cs)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "Produire build",
            "program": "${workspaceFolder}/callfunc2.exe",
            "args": ["1000"],
            "cwd": "${workspaceFolder}",
            "console": "internalConsole",
        }
    ]
}
```
## 実行のご様子（cppvsdbgでの起動）

コンソールが展開してプロンプトのタイトルからすると実行されている感じですが、結果が出力されずハングアップしている雰囲気でした。
※正常な使い方ではないのは百も承知ですので不具合とは認識しておりませんので念のため。

![produire1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118036/eb9e99ab-1fc3-3abb-a661-ba3f8be3b018.png)


コンパイラが出力した実行ファイルをコマンドプロンプトから起動しても同様でした。内部でループしている感じでControlキー+Cの打鍵でブレークすると変数出力は実行されました。

```cmd:
C:\produire\vscode>callfunc2
^X
処理回数：0回
処理時間：0ミリ秒

C:\produire\vscode>callfunc2 1000
^X
処理回数：0回
処理時間：0ミリ秒

C:\produire\vscode>
```

# おわりに
いかがでしたでしょうか？あまり役に立った話ではなく申し訳ないです。プロデルデザイナから出力した実行ファイルとrdrcコンパイラが出力した実行ファイルになにか差異があるのかとか、よくわかっておりませんのでご容赦お願いいたします。
【Java】2進数・8進数・16進数・ビット演算子

# 初めに
Java silverではint型やbyte型の問題で2進数・8進数・16進数が出題されることがある。表記法も独特なので、今回はそれらを取り上げていく。なお、10進数から各値への変換は今回は解説しない。

## 2進数
0bまたは0Bを先頭につける。

例
0b100001011

## 8進数
0を先頭につける。

例
0222

なお，0827はコンパイルエラーになる。これは8進数の時に使える数字は0~7のためである。

## 16進数
0xまたは0Xを先頭につける。また16進数では桁ごとに 0 から 9 の数字と A（10）、B（11）、C（12）、D（13）、E（14）、F（15）を使う。

例
0x10B

## ビット演算子とは
整数型の数値に対してビット単位で演算を行うための演算子。ビットとは2進数で表現される数値の値(0または1)のこと。主な演算子つぃて&，|，^が存在する。

## &の使い方
2つの対応するビット値を比較し、両方のビットが1なら結果のビットは1。対象のビットが片方または両方とも0なら結果も0。

```ruby:Java(Main.java)
System.out.println(15 & 20);
```

結果
```
4
```

## |の使い方
両方または片方のビットが1なら1。ともに0なら0が返される。

```ruby:Java(Main.java)
System.out.println(25 | 17);
```
## ^の使い方
両方のビットが異なれば1。

```ruby:Java(Main.java)
System.out.println(11 | 19);
```

結果
```
27
```

## char型で使用する場合
char型はint型と互換性があるので、同様にビット演算子を使用できる。

```ruby:Java(Main.java)
System.out.println('c'| 'd');
```

このままだと難しいので一旦int型に直してみる。
```ruby:Java(Main.java)
System.out.println((int)'c');
System.out.println((int)'d');
```
結果
```
99
100
```

ここまで来れば同じように計算していけば良い。'c'|'d'の結果は以下のようになる。

結果
```
103
```

## まとめ
* 2進数は先頭に0bまたは0Bをつける
* 8進数は先頭に0をつける
* 16進数は先頭に0xまたは0Xをつける
* &は両方のビットが1なら1、片方または両方とも0なら0を指定
* |は両方または片方のビットが1なら1、両方とも0なら0を指定
* ^は両方のビットが異なれば1を指定
とりあえず今年リリースされたMicroPythonのふりかえり

# はじめに

[MicroPython/CircuitPython Advent Calendar 2024](https://qiita.com/advent-calendar/2024/micro-circuit-python)の１日目は、昨年のクリスマス以降にリリースされたMicroPyuthonを振り返ります。

以下、主な変更点をあげていきます。

## v1.22.0

2023年12月27日リリース

* クライアント側とサーバー側の両方で asyncio に SSL/TLS サポートを導入
* SSLContextに証明書をロードするための新しいメソッドを追加
* Qstrプールをソートするようにしたことによる、文字列オブジェクトアクセスの高速化
* machine モジュールの各ポート間の共通化改善
* teensy ポート削除(teensy 3.* 以前のこと。tennsy 4.* 以降は mimxrt ポートになっている)
* rp2 ポートでDMA 転送を制御するための新しいクラスrp2.DMAを導入

## v1.22.1

2024年1月5日リリース

パッチリリース

## v1.22.2

2024年2月20日リリース

パッチリリース

## v1.23.0

2024年5月31日リリース

* 動的 USB デバイスのサポート追加(rp2, samd ポート)
* OpenAMP (非対称マルチプロセッシング) プロトコルをサポートする openamp モジュール追加(mimxrt, stm32 ポート)
* os モジュールにあった VFS (仮想ファイルシステム)関連の機能を、新しい vfs モジュールに移行(CPython の os モジュールとの互換性を考慮した処置)
* ssl モジュールの全機能を新しい tls モジュールに移行(CPython の ssl モジュールとの互換性を考慮した処置)
* tls モジュールで証明書検証コールバックを登録をサポート
* 凍結モジュールのコードサイズを大幅に最適化
* webassembly ポートの構造を大幅に見直し

## v1.24.0

2024年10月26日リリース

* RP2350 MCU (Raspberry Pi PICO 2)のサポート
* ESP32-C6 サポート
* Zephyr ポートで _thread モジュールをサポート
* ポート間の TinyUSB バインディングの統合
* RISC-V (RV32IMC)でネイティブコードエミッターをサポート(ESP32-C*, RP2350)
* f-string の連結サポート
* UART IRQ の Python コールバックの登録をサポート
* network.ifconfig() から network.ipconfig() への移行
* network.PPP 実装(デフォルトでは無効)
* mpremote に再帰コピー機能を追加

## v1.24.1

2024年11月29日リリース

パッチリリース
Ruby on Railsのヘルパーメソッドについて

Ruby on railsはルーティングを補助するヘルパーメソッドがあります。
## 1.デフォルトで設定されているもの
デフォルトは4つあります。(index,show,new,edit)
create,updateは必要なため書いておきます。
hogeはコントローラー名です。
1.index
```
hoges_path(引き継ぐもの)
```
2.show
```
hoge_path(id: :example,引き継ぐもの)
```
3.new
```
new_hoge_path(引き継ぐもの)
```
4.create
```
hoges_path(＠array,引き継ぐもの)
```
5.edit
```
edit_hoge_path(引き継ぐもの)
```
6.update
```
hoges_path(＠array,引き継ぐもの)
```
## 2.追加でルーティングしたい場合
```
resources :hoge do
    collection do
      get 'example', to: 'hoge#example'
    end
  end
exampleはアクション名
```
基本的にこの２つを使ってルーティングを行う。
GraphAIに登場する概念たち

:::note warn
随時更新
:::

# GraphAI
GraphAI は非同期データフロー実行エンジンであり、開発者はエージェント ワークフローをYAML または JSON の宣言型データフロー グラフとして記述することで、エージェント アプリケーションを構築できます。

# データフローグラフ（DFG）
```:DFGの構造
{
  version: 
  loop:
  nodes:
  concurrency:
}
```
DFGは上記の構造であり、以下のような要素を含む。
- **version** : GraphAI のバージョン （必須）
- **nodes** : ノードのリスト（必須）
- **loop** : グラフを複数回実行する必要があるかどうかの指定（オプション）
- **concurrency**：同時に実行されるエージェント関数 の最大数（オプション）
    ※デフォルトは 8

# ノード(nodes)
ノードには、**計算ノード**と**静的ノード**の 2 種類があります。

- **計算ノード**：入力を受け取り、計算を非同期的に実行し、結果 (出力) を返す
- **静的ノード**：値のプレースホルダー (プログラミング言語の変数と同様）


```yaml:ノードの構造
{
  version: 
  loop:
  nodes:
      node1: # "node1"がノードのIDとなる
      node2: 
      　︙
  concurrency:
}
```

# ループ（loop）

```yaml:ループの構造
{
  version: 
  loop:
      while: 
      count: 
  nodes:
  concurrency:
}
```
simple calendarのcssが反映されない

railsのsimple calendarのcssが反映されず文字だけ表示される。
![スクリーンショット 2024-10-08 121629.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3902943/8520e69b-1c95-de04-89fa-dde9d02f0c32.png)

原因はわかりませんでしたが、解決できたので書き残しておきます。
# 解決策
gem 'sassc'を導入する。
手順
### 1.Gemfileに記入する
```ruby
gem 'sassc'
```
### 2.コマンド入力
gemをインストール。
```
bundle install
```
解決後のものは取り忘れたので画像はありません。
【Next.js】404ページのカスタマイズ

## はじめに
next.js ではデフォルトで404ページを作成してくれていますが、サイトのデザインに合わせて404ページをカスタマイズするの方法です。

## やり方

app直下にnot-found.tsxを作成します。


```
.
└── app
    ├── page.tsx
    ├── page.module.css
    ├── layout.tsx
    └── not-found.tsx

```

not-found.tsx に表示させたい404ページを作成します。

```not-found.tsx
import Link from 'next/link'
 
export default function NotFound() {
  return (
    <div>
      <h2>Not Found</h2>
      <p>Could not find requested resource</p>
      <Link href="/">Return Home</Link>
    </div>
  )
}

export default NotFound;
```

アプリケーションに存在しないURLにアクセスされた場合、全てこちらの404エラーページを表示してくれます。

> 予想されるエラーをキャッチすることに加えてnotFound()、ルートapp/not-found.jsファイルはアプリケーション全体の一致しない URL も処理します。つまり、アプリで処理されない URL にアクセスするユーザーには、ファイルによってエクスポートされた UI が表示されますapp/not-found.js
[not-found.js](https://nextjs.org/docs/app/api-reference/file-conventions/not-found)
時間効率UP：タッチパッド好きによる魅力解説と作業効率を向上させる方法

## はじめに

普段の学習や仕事において、パソコン操作のスピードを上げることは、作業を効率的に進めるうえで欠かせないポイントです。

仕事では主にWindows端末を使用し、マウスでの操作が中心ですが、自宅ではタッチパッドを愛用しています。

:::note warn
**タッチパッドは、キーボードとの距離が近く、ホームポジションを崩さずに操作できる点が大きな魅力です。**
:::

今回は、そんなタッチパッドの魅力について詳しくご紹介していきます。

## まず、エンジニアは「時間」が命
エンジニアにとって、時間は最も重要なリソースです。多忙なスケジュールの中で、いかに効率を高められるかが求められます。

パソコンの操作感や日常のタスクを素早く行えることは、**すべての作業のベーススキルだと考えています。**

:::note
以下の記事も、時間効率を上げるための内容を紹介しています。興味のある方はぜひ参考にしてみてください。
:::

https://qiita.com/free-honda/items/e58b6750dba27107889f

https://qiita.com/free-honda/items/7419e88404abafdcd624

## 私はMacBookのタッチパッドが大好き

私が特に感動しているのは、MacBookのタッチパッドです。Appleが提供するタッチパッドは、非常に精度が高く、滑らかな動きが特徴です。

![IMG20241201114412.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/dad52598-ec76-3292-6920-6bfb9a3fad48.jpeg)

MacBookのタッチパッドでは、例えば次のような操作が可能です。

:::note warn
- **3本指でスワイプ**：アプリケーションの切り替えが素早くできます。
- **2本指でスクロール**：ウェブページやドキュメントをスムーズにスクロールできます。
- **2本指タップで右クリック**：右クリック操作も簡単に行えます。
:::

これらのジェスチャーは、指の動きに対するレスポンスが非常に良く、作業効率を大幅に向上させます。

***特に、マルチタッチジェスチャーの反応速度は一度体験すると手放せません！！！***

### 操作が直感的
タッチパッドは、指の動きで直接操作するため、直感的な感覚で使えます。

:::note
**クリックやスクロール、ドラッグなどの操作がスムーズにでき、時間のロスが少なくなります。**
:::

特に、マルチタッチジェスチャーを駆使することで、画面のズームイン・ズームアウトやウィンドウの切り替えも簡単に行えます。

### とにかく多機能
最近のタッチパッドは、ただのポインティングデバイスにとどまらず、タッチでのジェスチャー操作が可能です。

:::note
**これにより、ウィンドウの切り替えやデスクトップ表示、画面のスクロールなどがすばやくできます。**
:::

マウスでは手間がかかる操作も、タッチパッドならスムーズにできることが多いです！

### エルゴノミクスを考慮した設計
タッチパッドを使うことで、手首や腕の負担を減らすことができます。

:::note
**マウスを使うと手を移動させる必要がありますが、タッチパッドなら手のひらを動かすだけで操作ができ、身体的な負担を軽減できます！**
:::

これにより、長時間の作業でも疲れにくくなります（私は本当にタッチパッドが大好きです！）。

## まとめ
ここまでお読みいただき、ありがとうございます。

:::note warn
**私がMacBookを愛用する理由のひとつが、このタッチパッドの滑らかな操作感と、指の本数を活用した多彩な操作が可能な点です。**
:::

もちろん、マウスとタッチパッドにはそれぞれ一長一短があると思います。

しかし、この記事を通じてタッチパッドの魅力が少しでも伝わり、活用のきっかけとなれば嬉しいです！

## おまけ：Windows端末でMacBookのタッチパッドを使う方法
とはいえ、インフラ関連の学習をする際には、やはりWindowsを使用することが多いです。

**その場合、私はMacBookからリモート接続でWindows端末にアクセスし、操作を行っています。**

![IMG20241201120807.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/23693a2a-194c-f5cd-8b9e-657db6ed846e.jpeg)

少し不思議な感覚ではありますが、手元のキーボードやタッチパッドはMacBook、しかし操作している中身はWindowsという状況です。

:::note 
**細かい操作感の違いは多少あるものの、十分許容範囲内です。そのため、普段はこのような少し特殊な方法で作業をしています。**
:::

過去の記事では、Windowsサーバーへのリモート接続について詳しく紹介していますが、Windows端末でも同様に実現可能です。興味のある方はぜひ試してみてください！

https://qiita.com/free-honda/items/22d6df98a8f5f83b8f90

## 参考記事

https://www.logicool.co.jp/ja-jp/ergo/mouse-vs-touchpad.html

https://nanapapa211.hatenablog.com/entry/2021/04/01/%E3%80%90%E3%83%8E%E3%83%BC%E3%83%88PC%E6%93%8D%E4%BD%9C%E3%80%91%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AF%E3%83%9E%E3%82%A6%E3%82%B9%E6%B4%BE%EF%BC%9F%E3%82%BF%E3%83%83%E3%83%81%E3%83%91%E3%83%83

https://exactly-pc.com/2879/?srsltid=AfmBOooegNILc-A1zL68HtrsGWZfpfTzZswxPJqulNs7Ct3h60Vcqnlx

https://qiita.com/free-honda/items/ba0382ea6840a03e9c60
年末年始に読みたい！エンジニア向けおすすめ書籍3選

# はじめに
今年も残り1ヶ月を切っていると思うと、本当にあっという間ですね。
もう年末年始のお休みも目と鼻の先ですが、連休中であればまとまった時間確保しやすいのではないでしょうか？
そこで今回は、まとまった時間で是非読んでおきたいエンジニア向けの書籍を三冊ほどご紹介したいと思います。

# その1：プリンシプル オブ プログラミング
（原題：The Pragmatic Programmer）

https://amzn.asia/d/8wyMKl4

### おすすめの理由
「良いプログラマ」になるための心得やプラクティスが詰まった一冊、新しい技術だけでなく、長く使える普遍的な知識が満載です。
総じて初心者からベテランまで、全てのプログラマにとって役立つ内容になっています。

### こんな人におすすめ
- コードをもっと美しく書きたい
- 効率的な問題解決手法を学びたい
- キャリアを通して使える考え方を得たい

### 特に注目の章
- DRY原則
- エラーを恐れない開発プロセス

# その2：Clean Architecture クリーンアーキテクチャ
（著者：Robert C. Martin）

https://amzn.asia/d/iGpvLtw

### おすすめの理由
システムを長期的に保守可能な状態にするにはどうすればよいか？その答えがこの本に書かれています。
アーキテクチャの理論から具体例まで、しっかりと学べるおすすめの一冊です。

### こんな人におすすめ
- システム設計に携わるエンジニア
- 保守性の高いコードベースを構築したい
- レガシーコードに困っている人

### 特に注目の章
- SOLID原則
- アーキテクチャの境界を定義する方法

# その3：scikit-learn、Keras、TensorFlowによる実践機械学習 第2版
（著者：Aurélien Géron）

https://amzn.asia/d/5FXC3Qn

### おすすめの理由
機械学習の実践的な知識を身につけたいならこれ！と言えるPythonの代表的なライブラリ（scikit-learn、Keras、TensorFlow）を使ったハンズオン形式で学べます。
理論だけでなく、実際のプロジェクトで使えるベストプラクティスを吸収できる一冊です。

### こんな人におすすめ
- これから機械学習を始めたい
- データ分析やAI開発に興味がある
- 機械学習の基礎をしっかり固めたい

### 特に注目の章
- エンドツーエンドの機械学習プロジェクト
- 分類
- ディープニューラルネットワークのトレーニング

# さいごに
書籍を購入するときは基本ひと目みた時のフィーリングで選ぶようにしています。
購入前に書籍を試し読みしたりしていません、ひと目見て気になるということはその時点で自分自身に気になる理由があると考え、その理由は購入して読みながら考えるようにしています。
茶色コーダーによるABC382振り返り


# はじめに

あーやばいJOI二次予選、来週だ勉強しなきゃ(そんなときに記事書くな)
本選行けるか行けないかぐらいの実力なので、ちゃんと一週間で勉強します

久しぶりに4完してスッキリしました
A,Bは瞬殺で、Cはimos法みたいな感じで解いて、Dは再帰関数を使って解きました。

そんじゃ一問ずつ感想書きますか

使っているライブラリ
いまAHC開催中なので新しいの作っても更新できません(コードを上げられないから)
githubのTraffic見たら、29unique cloneあって驚きました。誰かがクローンしてくれるなんて思ってなかったので驚きです。ありがたい限りです。
[github](https://github.com/hidehic0/my-kyopro-code/blob/main/Training/.template/code/main.py)

# [A問題](https://atcoder.jp/contests/abc382/tasks/abc382_a)

問題文を要約
$N$文字の文字列$S$が与えられます。
.が空き箱@はクッキーが入っています
で高橋くんはクッキーを、$D$個だべます
食べ終わったあとの空き箱の数を求めてください

なおクッキーが入っている箱は$D$個以上Sの中にあることが、保証されます

空き箱の数+$D$でOKです

acコード(ライブラリ抜粋)

```py
N, D = il()
S = s()

print(D + S.count("."))
```

# [B問題](https://atcoder.jp/contests/abc382/tasks/abc382_b)

問題文を要約
$N$文字の文字列$S$が与えられます。
.が空き箱@はクッキーが入っています
高橋くんは、左からクッキーを食べてその箱を空き箱にする操作を、$D$回行います
操作を終えたあとの、$S$を求めてください

普通に左から食べる動作をした

acコード(ライブラリ抜粋)

```py
N, D = il()
S = list(s())

d = 0

for i in reversed(range(N)):
    if S[i] == "@":
        S[i] = "."
        d += 1

    if d == D:
        break

print("".join(S))
```

# [C問題](https://atcoder.jp/contests/abc382/tasks/abc382_c)

問題文を要約...面倒くさい(ちゃんとやれ)

やらかしてDにスキップしちゃってまた戻ってきて解きました

配列に全員の美食度情報を置いて
それをimos法みたいな感じで、処理すれば、すべてのクエリが$O(1)$で解ける(言語化能力低すぎだろ)

acコード(ライブラリ抜粋)

```py
N, M = il()
A = il()
B = il()

L = [-1] * (2 * 10**5 + 1)

for i, a in reversed(list(enumerate(A))):
    L[a] = i + 1

t = -1

for i in range(len(L)):
    if L[i] == -1 and t == -1:
        continue

    if t == -1:
        t = L[i]
    else:
        if t > L[i] and L[i] != -1:
            t = L[i]

    L[i] = t

for b in B:
    print(L[b])
```

# [D問題](https://atcoder.jp/contests/abc382/tasks/abc382_d)

問題文を要約...するとこがない

~~これコロナのときに出す予定だった問題ですよね ソーシャルディスタンス~~

辞書順に列挙できるということは、再帰関数などでの実装が可能とメタ読みしたので、再帰関数で列挙した
でも普通にやるとTLEするので、問題文の条件に答えの数列は単調増加かつ前項との差が10以上と書かれているので、あと何回10以上の差が出るかを加味してrangeを使って実装した

で僕がアホなのが、一旦pypyの再帰関数が遅いだけの可能性があるからC++で書いて普通にTLEするまでは良かったのですが、その後pypyでACできる再帰関数のコードを、書いて提出したら提出言語ミスって、C++で提出して1ペナ食らって、その後普通にpypyで提出してACしました

acコード(ライブラリ抜粋)

```py
N, M = il()
t = []


def dfs(l):
    if len(l) == N:
        t.append(l)
        return

    for i in range(l[-1] + 10, M - (10 * (N - len(l) - 1)) + 1):
        nl = l.copy()
        nl.append(i)

        dfs(nl)


for i in range(1, M - (10 * (N - 1)) + 1):
    dfs([i])


print(len(t))
for l in t:
    print(*l)
```

# [E問題](https://atcoder.jp/contests/abc382/tasks/abc382_e)

問題文の要約はしません

あ期待値DPだと思ったけどよくわからなくて結局ACできなかった

# 最後に

提出言語を間違えると大変なことになるので、皆さん気を付けてくださいね
2連続 緑perfでレートも絶好調で40上がりました
現在レートは660緑まで残り140 精進して緑になれるように頑張ります
あとJOI二次予選に向けて練習します
【ML初心者アドベントカレンダー】そもそも機械学習(ML)とAIの関係は？


えっ… MLとAIってなんか違うの？

# この記事の目的

機械学習の基本中の基礎であるML、AIの違いについて説明できるようになる。

# MLとは

Machine Learning (機械学習)のこと。データを使ってモデルをトレーニング、学習させること。よく聞く教師あり学習とか教師あり学習とかもこれに含まれる。めちゃ広い意味。

## …モデルとは？

データを元に学習して、一定の表現ができるようになった状態。たとえば、数学ができない人間に問題集などを用いて数学を教え、その人間が計算技術を身につけて数学の問題を自分の力で解けるようになったら、その人間は「数学に特化したモデル」
……ということ？🤔


# AIとは

Artificial Intelligence (人工知能)のこと。人工知能。機械学習もその一部に入る。得意なことにより違う名前になる。人間の行動を模倣する仕組み。今とても流行っているChatGPTは「生成AI」というらしい。

# ざっくりとまとめ

コンピュータが人間の行動を模倣する技術をAIと呼び、その一部にMLが含まれている。

体を動かすこと全般をスポーツと呼び、その一部に水泳という種目も含まれている、みたいな話かな…。
unirom8の拡張機能MCLaunchを使った、メモリーカードに保存した自作プログラムの起動

## はじめに
FreePSXBootに搭載のunirom8の機能の一つにMCLaunchがあります。
MCLauchは、メモリーカードに保存した自作プログラムを起動するプログラムです。
MCLauchの情報はpsx.devサイトに少し掲載されていますが、利用方法等の詳細が不明です。
本稿では、MCLaunchを使った自作プログラムの起動方法を紹介します。

## メモリーカードには最大112 kBのプログラムが保存可能
　初代プレストのメモリーカードの容量は128 kBです。この容量は16個のブロックに分割されていますので、1つのブロックの容量は8 KBです。MCLaunchを使うと、その内15個のブロックに分割されて保存されたプログラムを起動することが可能になります。15個のブロックを使うと最大120 kBのプログラムを保存できそうですが、実際には最大112 kBしか使えません。この理由は、各ブロックが64個のフレームに分割されており、その内4個のフレームはブロックのファイル名、アイコン情報の保存に使われており、60個のフレームにのみデータをセーブするからです。

https://www.psdevwiki.com/ps3/PS1_Savedata

## 自作プログラムを含むメモリーカードイメージの作成
　JonathanDotCelさんのgithub「unirom8_bootdisc_and_firmware_for_ps1」から、「UNIROM_BOOTDISC_8.0.K.zip」をダウンロードします。
 
 https://github.com/JonathanDotCel/unirom8_bootdisc_and_firmware_for_ps1/releases

 ダウンロードしたzipファイルを展開した「」の中に「」フォルダがあります。さらに、そのフォルダの中に「exe2memcard」フォルダがあり、自作プログラムからMCLaunchで起動可能なメモリーカードを作成するソフトの「card2memcard.py」が保存されています。
　拡張子がpyですので、pythonのプログラムだとわかります。python3.＠以上がインストールされていない場合は、python3.＠のインストールを行ってください。
　「card2memcard.py」が存在するフォルダに自作プログラムを保存します。ここでは、自作プログラム名を「test.psx-exe」とします。
　コマンドプロンプトを開き、「card2memcard.py」が存在するフォルダに移動します。
　最初に、「card2memcard.py」の使用方法を確認します。「py card2memcard.py」と入力後エンターキーを押してみます。
Error: expected
と表示されて、オプションの使い方が表示されます。
<exe>には自作プログラム名
<memcard>にはメモリーカードのイメージ名
を記載します。
書式にあわせて「card2memcard.py」を実行すると、以下の様に表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693019/72b1f991-c047-6350-60c4-1f7209b1c1e2.png)

：自作プログラム名
：メモリーカードイメージ名
：MCLaunchで実行をを選択した時に移動するアドレス
：プログラムを書き込むアドレス
：ファイルサイズ
：ヘッダを含まないファイルサイズ
：スタックアドレス
：メモリカード上に必要なブロック数
Wrote block 1
Wrote block 2
Wrote block 3
Wrote block 4
Wrote block 5

と表示されて、プログラムが終了します。
イメージファイルが作成されているのを確認しましょう。確認できたら、メモリーカードにイメージファイルを保存します。
　私は、PicoMemcard+を使っているので、これで使用しているマイクロSDカードに、生成したイメージファイルを「0.MCR」に名前を変更して保存します。マイクロSDカードをPicoMemcard+に挿入し、このカードを初代プレステのカード1に挿入します。

## メモリーカード上の自作プログラムの実行
　初代プレステ本体で、unirom8を起動します。
　私の場合、FreePSXBootを保存したメモリカードがカード2に挿入された初代プレステを起動した後に表示されるメモリーカードとCDプレーヤーの選択画面で、コントローラの「□」ボタンを押すことで「unirom8」を起動しています。
　unirom8の起動画面で、コントローラの「□」ボタンを押すとメニューが表示されますので、上下キーで「MEMORY CARDS->」に移動して、「X」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693019/e4025da4-a2f4-4a80-8e2f-71753805c162.png)

　しばらくすると、画面にカードスロットに挿入してあるメモリカードの情報が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693019/d03943f2-3c64-5387-4a85-f5c514942c77.png)

　上図では、CARD1に保存したプログラムが表示されています。
左右キーで「CARD1」に移動した後に「X」ボタンを押すと、「OPTION」メニューが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693019/75985ce4-eda8-8322-f0e3-ba137100b1ba.png)

上下キーで「EXECUTE」に移動して、「X」ボタンを押すと、メモリカードに保存したプログラムが起動します。

## 終わりに
　メモリカードに自作プログラムを保存する環境構築が必要ですが、初代プレステ実機でプログラムが起動したときの感動は、エミュレータ上で起動した時とは比べ物になりません。
　本稿で、レトロマシンの初代プレステで自作プログラムを作成している方の一助になればと思います。
【まとめ】開発で役立つ無料Web API 20選

## はじめに

今回はWebアプリの開発で役立つ無料で公開されているAPIをまとめていく。

## 対象者

- 個人開発で外部APIを活用したい人
- 外部APIを活用してWebアプリを開発したい人
- APIを使いながら学びたい人

## 参考

APIに関する詳しい説明は下記の記事を参考にしてください。

https://qiita.com/KNR109/items/d3b6aa8803c62238d990

https://qiita.com/KNR109/items/7e094dba6bcf37ed73cf

## [JSON Placeholder](https://jsonplaceholder.typicode.com/)

https://jsonplaceholder.typicode.com/

テストやプロトタイピング用のフェイクオンラインREST APIを提供している。

TODOアプリ開発時、フロント側でモックAPIと連携したい際などに活用できる。

CRUD操作の概要を手を動かしながら学べるのでかなり役立つWeb APIの一つ。

## [GitHub REST API](https://docs.github.com/ja/rest?apiVersion=2022-11-28)

https://docs.github.com/ja/rest?apiVersion=2022-11-28

GitHubリポジトリと連携し、課題管理やプルリクエストの自動化、リポジトリイベントのウェブフック設定が可能。

オープンソースプロジェクトの管理やバージョン管理機能の統合に役立つWeb APIになっている。

## [Notion API](https://developers.notion.com/)

https://developers.notion.com/

多機能なワークスペースを拡張できる。

Notionの色々な機能を活用することができるWeb API。

## [NewsAPI](https://newsapi.org/)

https://newsapi.org/

世界中のニュース記事やヘッドラインを取得可能。

ニュースアグリゲーターやブログウィジェット、速報アプリを開発したい際に役立つWeb API。

## [REST Countries](https://restcountries.com/)

https://restcountries.com/

 国名、首都、人口、面積、通貨、言語などの情報を提供するRESTful API。

 地理情報を必要とするアプリを開発する際におすすめのWeb API。

 ## [Google Maps API](https://developers.google.com/maps?hl=ja)

 https://developers.google.com/maps?hl=ja

地図やジオロケーション機能をWebアプリに組み込むためのツール。
カスタムマップ、位置検索、経路計算、ストリートビューの統合に活用できる。

## [Google Calendar API](https://developers.google.com/calendar/api/guides/overview?hl=ja)

https://developers.google.com/calendar/api/guides/overview?hl=ja


カレンダー情報を取得できるAPI。

外部アプリからGoogleカレンダーにスケジュールを入れることもできる。


  ## [The Cat API](https://thecatapi.com/)

  https://thecatapi.com/

  ランダムな猫の画像と情報が提供されている。

  ブログ記事やダミー画像を可愛くさせたい場合に有効。
  
## [CoinGecko API](https://www.coingecko.com/ja/api)

https://www.coingecko.com/ja/api

暗号通貨の価格、取引量、市場キャップなどのデータを提供している。

暗号通貨関連のWebアプリやダッシュボード作成をしたい場合に活用できるWebAPI。

## [OpenWeather API](https://openweathermap.org/api)

https://openweathermap.org/api

リアルタイムの天気データを提供し、現在の天気、予報、過去の天気データを取得可能。

旅行アプリやイベントプランナー、環境モニタリングシステムなどを開発する際に活用できる。

## [Agify API](https://agify.io/)

https://agify.io/

名前から年齢を予測するAPI。

ネタアプリなどを開発する際に活用できるWebAPI。

## [Dropbox API](https://www.dropbox.com/developers/documentation/http/overview)

https://www.dropbox.com/developers/documentation/http/overview

PDF、音声、動画などの様々なコンテンツを一元管理することができる。

## [DeepL](https://www.deepl.com/ja/pro-api)

https://www.deepl.com/ja/pro-api

翻訳機能が必要な際に活用できるWebAPI。

## [楽天API](https://webservice.rakuten.co.jp/)

https://webservice.rakuten.co.jp/

楽天ECで販売されている商品などを取得することができる。

## [はてなAPI](https://developer.hatena.ne.jp/)

https://developer.hatena.ne.jp/

はてなブックマークの情報を取得することができる。

簡易ブログや個人ポートフォリオ作成時に活用できるWebAPI。

## [郵便番号検索API](http://zip.cgis.biz/)

http://zip.cgis.biz/

郵便番号から住所を検索できるWebAPI。

お問い合わせフォームなどで活用できる。

## [Qiita API](https://qiita.com/api/v2/docs)

https://qiita.com/api/v2/docs

Qiitaの検索や投稿などを取得することができる。

個人ブログの開発や技術ブログの連携の際に活用できる

## 最後に

いかがだったでしょうか。

今回は無料で使えるWebAPIをまとめました。

他にも色々な記事を出しているのでぜひ読んでみてください。

https://qiita.com/KNR109/items/853c8d8fe36ede1cc453

https://qiita.com/KNR109/items/528cbcaafb84aa57553d

https://qiita.com/KNR109/items/1fa6d697a936c54329c6