OmniAICreator/Qiita-1.07M huggingface dataset:
Autosar Release Overviews

AUTOSAR (AUTomotive Open System ARchitecture) 
http://autosar.org

は、｀２０１９年以降は、毎年１１月に新しい標準を発行している。
今年も一般公開を始めた。

公開文書には、分類ごとのrelease overviewがある。３つの文書から読むと良い。

Foundation, Classic Platform, Adaptive Platformのそれぞれの
Release Overview。

最近では、更新などのあった文書の、文書番号を記載するようになった。

AUTOSARでは、同じ文書名で別の番号。同じ番号で複数の文書がある。管理方法が杜撰であるという見方もある。大事なのは、セキュリティと安全に関連する技術であって、文書管理が杜撰でも、ソースコード管理がしっかりしていればよい。

<この項は書きかけです。順次追記します。>
This article is not completed. I will add some words in order.
# 2023 Release Overview記事

Foundation Release Overview, AUTOSAR, 781, R23-11, FO
https://qiita.com/kaizen_nagoya/items/f249bdb8c313d8bff883

Classic Platform Release Overview, AUTOSAR 0 ,R23-11, CP
https://qiita.com/kaizen_nagoya/items/8468435185e109189ead

Adaptive Platform Release Overview, AUTOSAR 782, R23-11, AP
https://qiita.com/kaizen_nagoya/items/13a104606a34fe24fcf7

## 2022のRelease Overview記事

Foundation Release Overview, AUTOSAR 781, R22-11, FO, 20230421
https://qiita.com/kaizen_nagoya/items/596a7e2ec86913daa3c2

Classic Platform Release Overview, AUTOSAR 0 ,R22-11, CP, 20230421
https://qiita.com/kaizen_nagoya/items/9d22c8722cbc0f42b137

Adaptive Platform Release Overview, AUTOSAR 782, R22-11, AP, 20230421
https://qiita.com/kaizen_nagoya/items/fc8e02e8cb07411dbc2a

APの一部であるDemonstratorにRelease Overviewがある。会員以外に非公開になった。ここには書けない。

AOCの動画が今年、非公開になった。方針のぐらつきが激しいのだろうか。

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01初稿　　20231201

### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。

#### Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
「piyopiyo.ex #18＆19：プログラミングElixir輪読会」でElixirの基礎を学んだ①

こんにちは！
プログラミング未経験文系出身、Elixirの国に迷い込んだ？！見習いアルケミストのaliceと申します。
今回はpiyopiyo.ex #18で輪読会を開催して学んだElixirの基礎をまとめます。

# 目次
1.「piyopiyo.ex #18＆19：プログラミングElixir輪読会」でElixirの基礎を学んだ①(本記事)
2.[「piyopiyo.ex #18＆19：プログラミングElixir輪読会」でElixirの基礎を学んだ②](https://qiita.com/Alicesky2127/items/66b89ab3a1b222046efe)

# 「piyopiyo.ex #18＆19：プログラミングElixir輪読会」を開催しました
https://piyopiyoex.connpass.com/event/293224/

https://piyopiyoex.connpass.com/event/297051/


私はLivebookを使用してのライブコーディングを担当していましたが、途中から皆様参加のモブプラミングになりましたw
活発な交流がなされるわちゃわちゃ感が楽しかったです。

# こんな内容を学びました
## 4.2 値型
正規表現とその操作をする関数を学びました

```elixir
Regex.run(~r{[aiueo]}, "catapillar")
["a"]
```

```elixir
Regex.scan(~r{[aiueo]}, "catapillar")
[["a"], ["a"], ["i"], ["a"]]
```


## 4.4 コレクション型
タプルの要素を変数にバインド
```elixir
{status, count, action} = {:ok, 42, "next"}
{:ok, 42, "next"}
```

リストの要素は実はタプル
```elixir
[1, fred: 1, dave: 2] == [1, {:fred, 1}, {:dave, 2}]
true
```

タプルの要素は実はリストで囲われている
```elixir
{1, fred: 1, dave: 2} == {1, [fred: 1, dave: 2]}
true
```

## 4.5 マップ
マップを定義して変数にバインド
```elixir
words = %{"a" => "apple", "b" => "bubble", "c" => "cat"}
%{"a" => "apple", "b" => "bubble", "c" => "cat"}
```
```elixir
words["a"]
"apple"
```

上記と同じ流れで、実務ではこんな感じでエラーハンドリングすると学びました。
(キーがタプル、値がアトムに変わっただけ)
```elixir
responses = %{{:error, :enoent} => :fatal, {:error, :busy} => :retry}
%{{:error, :busy} => :retry, {:error, :enoent} => :fatal}
```
```elixir
responses[{:error, :busy}]
:retry
```

この日は4章の途中で時間切れになってしまったので、次回に持ち越しになりました。



# ～Elixirの国のご案内～
↓Elixirって何ぞや？と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます:laughing::sparkles::sparkles:

https://qiita.com/piacerex/items/09876caa1e17169ec5e1

↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ！私もエンジニア未経験から学習中です。

https://elixir-lang.info/topics/entry_column


↓[We Are The Alchemists, my friends!:bouquet:](https://qiita.com/torifukukaiou/items/6bcd5bbb80df9e594e9e "Awesome-san's Awesome article")[^10]
Elixirコミュニティは本当に優しくて温かい人たちばかり！
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。[^11]


https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian

[^1]:@koga1020さんのPhoenix1.7日本語訳。参考にさせていただきました。英語のドキュメントに心折れそうになる時があるので、日本語訳を出していただいてありがたい限りです。<br>https://zenn.dev/koga1020/books/phoenix-guide-ja-1-7/viewer/routing#%E6%A4%9C%E8%A8%BC%E6%B8%88%E3%81%BF%E3%83%AB%E3%83%BC%E3%83%88<br>

[^2]: @the_haigo さんの~pとは何かについてまとめていただいた記事。参考にさせていただきました。この記事を書いていただいた当時、Phoenix1.7の正式リリースを待たずに記事化されていたのでそのキャッチアップの速さに衝撃を受けました。<br>https://qiita.com/the_haigo/items/bc848d80ff8fdf6ffa79<br>

[^3]:当日に向けて関数コンポーネントで遊ぶのはとても楽しかったです。<br>https://qiita.com/Alicesky2127/items/0c111b8ee1fe547d20ff<br>

[^10]: @torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。<br>


[^11]: @nako_sleep_9hさんの素敵なスライドをお借りしました。Elixirコミュニティはいろんな形で活動中！
【組み込み開発】【CAN通信】データの送受信に関する規格はどの資料見れば分かるの？という方へ

## はじめに
今回は筆者が以前に疑問に思ったこととその答えを記事にしました。

## この記事を理解する上での前提知識
CAN通信においてデータの送受信方法は規格として決まっていることを知っている方

## 疑問点
以前に書いた記事で、「8バイトのデータの送受信方法は規格で決まっている」とお伝えしましたが、よくよく考えてみると、どの規格を見ればいいのか分からなかった。
（「0バイト目の0～3bit目にデータ長を入れる」など、作りたいシステムに依存しない部分）

### 疑問を抱いた理由
データの送受信方法について、自分で資料にまとめるといったことがなく、あらかじめまとまっていた資料を参考に開発をしていたため。

### 筆者が実務で経験したプロトコル
* UDS on CAN
* J1939

### 疑問点に対する答え
* UDS on CANの場合
    * ISO 15765-2
　
* J1939の場合
    * J1939-21

## おわりに
今後も何かしらのプロトコルを経験することがあると思うので、その時には、この記事に追記していきます。
最後までご覧いただきありがとうございました。
OSPO SWG(第2週)の紹介

:::note info
[OpenChain Japan Advent Calendar 2023](https://qiita.com/advent-calendar/2023/openchainjapanwg)の12月5日の記事です。
:::

TODO Group Japan[^todogroup]とOpenChain Japan[^openchainjapan]のOSPOサブワーキングが共同で OSPO Japan Local Meetup を月に2回開催しています。この記事はOSPO Japan Local Meetupの紹介と毎月1回目の活動について紹介します。

[^todogroup]:TODO Group (日本語): https://todogroup.org/ja/
[^openchainjapan]:OpenChain Japan: https://openchain-project.github.io/OpenChain-JWG/

# まえおき
OSPOやOSPO Japan Local Meetupについて簡単に紹介します。

## OSPO とは

Open Source Program Office という企業内の組織（部署）になります。

社内のOSSの適正使用を進めるにとどまらず、ビジネス視点から見たときにオープンソースソフトウェアがもたらす恩恵を理解し、どうすればオープンソースソフトウェアを組織で進化させていけるか、その価値を計測できるのかを牽引する組織です。なかなか日本では聞かない組織です。

The Linux Foundationより日本語の記事が公開されておりますので、詳しくはこちらを参照ください。
https://www.linuxfoundation.jp/resources/publications/the-evolution-of-the-open-source-program-office-ospo/


## OSPO Japan Local Meetup

冒頭にも記載しましたが、TODO Group JapanとOpenChain JapanのOSPOサブワーキングが共同で OSPO Japan Local Meetup を月に2回開催しています。OSPOの活動は手探りなところが大きく、また企業間で差別化したい活動ではありませんので、興味のある人で集まってどんな課題があるか、どんな解決案があるかを議論しています。
課題は同じでも、企業風土や規則によって選ぶ選択肢は違います。他の人の解決方法を聞いて気づくこともあります。本活動に参加する人らがより大きな視野で考えるような運営を意識しています。

今はOSPO Japan Local Meetupでは以下のテーマで議論をしています。
1. OSS Strategy & OSS Hosting (毎月第二金曜日）
1. OSPO FAQ（毎月第四金曜日）

# OSS Strategy

企業でのビジネスに必ずと言っていいほどOSSは使われています。OSSってコミュニティがあると聞きます。どうして開発者はOSSを開発しているんでしょう。どうやってコミュニティって運営されているんでしょう。仕事でOSSのメンテナンスをする開発者もいます。なぜ企業はOSSコミュニティに開発者を出資するのでしょう。なぜ企業はOSSコミュニティのスポンサーになるのでしょう。
OSPO Japan Local Meetup では、これらの疑問を解決するために議論しています。

例えば、Linuxを題材にビジネスをしている企業はどんな企業がいるでしょうか。下に書いてみました。これが全てではないと思いますが、
- 商用Linuxディストリビューションを販売する企業がいます。
- Linuxを搭載した製品を販売する企業がいます。
- Linuxを使ってオンラインサービスを提供する企業がいます。
- Linuxを使って社内インフラを構築する企業がいます。

こういった企業はLinuxに対してどういった活動をしているのでしょうか。ビジネスとして継続するためにはLinuxがなくなっては困ります。不具合が残っていても困ります。性能が良くなってほしいです。いろいろな要望や課題を抱えていて解決するための活動をしています。

本活動では、これら企業を想像し、抱える課題を想像して、整理してきました。

![Screenshot from 2023-12-02 10-40-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488402/4463a5a6-ce95-1918-b25b-795b9ca63bca.png)


今はLinuxに向けて活動することに対して、その企業のOSPOは何ができるかを想像して議論しています。活動の結果がまとまったら、公開する予定です。
本議論が一段落したら、コミュニティ側の課題も議論していきたいと考えています。

もしご興味ありましたら、ご参加ください。
【DynamoDB】One-to-Manyのアクセスパターンまとめ

# はじめに
本記事はDynamoDBでリレーションの実装について、各方法の概要とユースケースについて簡単にまとめたものです。カタカナ英語が多くて目がチカチカしますが、是非お付き合いください。

# 方法１: 子エンティティ in Attribute
![hasmany_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2147470/38d10d3e-0fce-a934-a820-65eadcd393a5.png)
親エンティティのattributeに子エンティティを配列またはハッシュの形式で格納します(↑赤枠)。「1つのフィールドには1つの値しか含まれない」という第一正規系の原則にあえて違反しています。

この方法は、子エンティティの特定の要素に対するアクセスパターンが必要無い場合に適しています。図の例で言えば、都道府県が東京都の住所のみを取り出すといったことは出来ません。

また、注意点としてアイテムのサイズ制限である400KBを超えないようにしなければなりません。ユーザーの購入履歴など無限に増える可能性があるものには、この方法は使わない方が良さそうです。


# 方法２: PK=親エンティティ / SK=子エンティティ
![hasmany_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2147470/ed182de1-d326-f603-85c0-d19a5731c931.png)
PKに親エンティティ、SKに子エンティティを設定します。各アイテムには親エンティティと子エンティティ両方の情報を持たせます(↑赤枠)。

この方法は、親エンティティの情報が不変である場合に適しています。というのも、この方法では親エンティティの情報が各アイテムに重複することになるため、後からの修正が難しくなるからです。あるいは、親エンティティの変更頻度が少なく、紐づいている子エンティティの情報が(手作業で修正できる程度には)少ないものであれば良いかもしれません。

# 方法３: PK=親エンティティ / SK=親&子エンティティ
![hasmany_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2147470/9105a960-4b14-e31d-36cb-8df3a2616e4e.png)
PKに親エンティティ、SKに親と子エンティティとをそれぞれ設定します。２の方法と違い、親子の情報は別々のアイテムに格納しています(↑黄枠&緑枠)。ちなみに、同じPKの値を共有するグループ(↑赤枠)をアイテムコレクションと言います。

この方法は柔軟なアクセスパターンが必要な場合に適しています。PKとSKの条件の組み合わせ次第で以下４つのアクセスパターンに対応出来ます。
- 親のみ
- 親 + 全部の子
- 全部の子
- 特定の子

[AWS公式](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/WorkingWithItemCollections.html)でも紹介されており、最もスタンダードな手段と言えるかもしれません。

# 方法４: Secondary Index 
![hasmany_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2147470/be2653bb-34a0-cbee-9846-6c62e85da4a6.png)
方法３と同じことをSecondary Indexを使って実装します。子エンティティはベーステーブル上に通常のアイテムとして格納し(↑黄枠)、親エンティティと子エンティティのそれぞれにGSIを追加します。GSIテーブルは方法３と同じ形式になっています。(↑緑枠)

この方法は、Primary keyが他の用途で使えない場合に使用します。

# 参考
https://www.dynamodbbook.com/
【Next.js】Sassをインポートする方法まとめ

# はじめに
NextjsにおいてSassファイルをインポートする場合、ユースケースによってやり方が異なるので、混同しないよう気をつけなければなりません。本記事では以下３つのパターンについて、それぞれ解説していきます。
1. 他のSassファイルにインポートする
1. JSXファイルにグローバルインポートする
1. JSXファイルにローカルインポートする

# 環境
バージョンが違うと動かない可能性があるので、その際はいちばんしｔに貼ってあるドキュメントを参照してください。
- Next@14.0.0
- Reat@18.2.0
- Sass@1.69.5

# 1. 他のSassファイルにインポートする方法
Sassファイルの読み込みを宣言する方法として、かつては`@import`が採用されていました。しかし、この方法でインポートされた変数や関数は、他のファイルと名前衝突を起こす可能性があったり、クラスがどのファイルで定義されたのか分かりにくいという問題点等を抱えていたため、2021年に非推奨となりました。

現在では代わりに`@use`を使用することになっています。`@use`でインポートした変数を使用する際は、値の前に名前空間（どのファイルから読み込むか）を記述する必要があります。

```scss:colors.scss
@use "@/styles/fonts";
@use "@/styles/variables" as var; // エイリアス

.blueButton {
  color: blue;
  font: fonts.$default
  width: var.$buttonWidth
}

$blue: #49BCBD;
```

# 2. JSXファイルへのグローバルインポート
JSXへのSassファイルのインポートは、JSファイルのimportと同じ方法で出来ます。この方法でインポートしたクラスは、インポート先のJSXが含む全ての子コンポーネント内で使用することが可能です。

```tsx
import "@/styles/colors.scss";

export default function Parent() {
    return (
        <button className="blueButton">Click me!</button>
        <Child /> // Childコンポーネント内でもcolors.scssの中身が使える
    )
}
```
ただし、変数や関数についてはこの限りではありません。以下のコードはエラーになります。
```tsx
import "@/styles/colors.scss";

export default function Parent() {
    return (
        <button style={{ color: $blue }}>Click me!</button>
                             // ↑はエラーになる
    )
}
```
JSX内で変数を使用したい場合、後述する３番目の方法を使用する必要があります。

# 3. JSXファイルへのローカルインポート
CSS Moduleという機能を使うことで、インポートしたSassの影響範囲をローカルに限定することが出来ます。実装方法としてはファイル名に`.module`を追加するだけです。(ex. colors.module.sass)
```jsx
import "@/styles/colors.module.scss";

export default function Parent() {
    return (
        <button className="blueButton">Click me!</button>
        <Child /> // Childコンポーネント内ではcolors.module.scssは使えない
    )
}
```
JSX内でSass変数を使用したい場合、以下のように明示的にexport宣言する必要があります。
```scss
$blue: #64ff00;
 
:export {
  blue: $blue;
}
```
また、importする際にモジュール名を設定する必要があります。
```tsx
import variables from './colors.module.scss'
 
export default function Page() {
    return (
        <h1 style={{ color: colors.blue }}>Hello, Next.js!</h1>
    )
}
```

# 参考
https://sass-lang.com/documentation/at-rules/use/

https://nextjs.org/docs/app/building-your-application/styling/css-modules

https://nextjs.org/docs/app/building-your-application/styling/sass
AWS環境インフラ刷新に関する取り組みについて

この記事はウェブクルー Advent Calendar 2023　2日目の記事になります。

昨日は、 @wc_nakaniwa さんの「ScalaのOption型について」でした。

# はじめに
今回は、現在取り組んでいるシステム基盤刷新の一部について
取り扱います。

普段は、インフラエンジニアとして、弊社取扱サービスサイトのインフラ全般
と社内イントラ周りの改善や、新規インフラ環境構築、システム基盤の刷新案件
の担当として各ベンダ様や取引先とやり取りをしております。


# OSリプレイスについて
弊社ウェブクルーでは、システム基盤刷新の案件名称をOSリプレイスと
呼んでおります。
この取り組みは、昨年から実施しており、昨年は、一部の社内サービスを
SaaS化したり、今年もシステム基盤の一部をSaaS化したり、基盤の一部を
コンテナ化実装を行ったりしております。

# TransitGateway 導入と AWSアカウント環境分割について

今年の夏に、AWSアカウントを開発、ステージング、本番 、そして元々あった共通の
アカウントに環境分割して、それに伴い、TransitGatewayを新たに導入して
環境を接続しています。
また、三軒茶屋オフィスのネットワーク回線を増強するため、新たに
バックアップ回線を増やし、耐障害性を改善するべく取り組みを行っています。

TrasitGateway 導入した際の簡易構成図は以下の通りです。

![drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295962/5876c4e7-0792-5968-41a1-9f19b4a62f9e.png)

ここに記載はございませんが、共通アカウントには、新たに VPCを立てて、
現在共通アカウントで利用しているサードパーティーFW (EC2)、ロードバランサー(EC2)を
来年4月以降に廃止を検討しています。


# おわりに
システム基盤刷新 OSリプレイスにおける AWS環境インフラ刷新に関する取り組み
の一部であるネットワーク構成変更について取り扱いました。

今後も、システム基盤刷新を継続して行っていく予定です。
Vue.js propsとemitが一生わからん人向け

# 自分もわかっていない
前置きとして
Vue.jsは散発的にしか触れず、propsとemitが結局意味わからんという状態だったのを、いい加減メモしておくという感じのエントリーです。
私自身も全然わかっていません。

## どんな状態を想定しているか
PJTによくわからん独自の子コンポーネントがあるとして、そのコンポーネントを利用している親コンポーネントに書いてあることもわからんという状態です。

そもそもとして、コンポーネントが子、コンポーネントを利用する（importしている）コンポーネントが親、です。たぶん。

## props
子コンポーネントに書いてある場合、親コンポーネントで設定してもらってきて子コンポーネント内でよしなにするものです。

## emit
子コンポーネントに書いてある場合、親コンポーネントに対して状態とかを渡す役割があるようです。

## $refs 万能選手
タグっぽく書くことで、this.$refs. の形でアクセスできます


あまりにも雑で恐縮ですが、1日中Vue.jsと格闘しているフロント戦士でなければ、すーぐに忘れてしまうので備忘録がてらのメモです。
mongoshが繋がらない （実は 127.0.0.1 が消えていた）

# サマリー

Mac で mongosh が動かなくなったので調べたら lo0 から 127.0.0.1 が消えていた。

# 本文

またMacでmongoshが繋がらなくなった。

前と同じだと思って、uninstall、data削除、install しても駄目。どうしようか？

確認したこと。
- デーモンプロセス（mongod）が動いているのか？
    - 動いていない
- ポート（27017）を誰かが使っているのか？
    - 使っていない
- ログの確認
    - socketのエラー

色々試したのですが、IPアドレスを 127.0.0.1 でなくて、自分のIPアドレスにして動かすと動くのを発見。

簡単なプログラムで、127.0.0.1で27017でlistenしようとすると同じエラー。27017でなくて、他の数字にしてもエラーになるので、127.0.0.1が怪しい。

netstatで確認すると、lo0のアドレスが、127.0.0.1ではなくて、192.168.1.88になっている。

心当たりがないわけではないけど、どうやって戻すのかが分からない。Mac なので、network の定義ファイルが分からない。

色々試して、

```
sudo ifconfig lo0 alias 127.0.0.1
sudo ifconfig lo0 -alias 192.168.1.88
```

として、何度か再起動したら無事 lo0 が 127.0.0.1 に戻って、以前と同じように動くようになった。
これが正しいやり方かどうか怪しいけど、同じような現象になったら試してみてください。
Dockerコンテナ・イメージを一括削除する

# prune
基本的にはpruneが安全でやりたいことが実現できそうです。

https://docs.docker.jp/config/pruning.html

# 以前やっていた方法
## Dockerコンテナを一括削除
```bash
docker container rm $(docker container ls -aq)
```
## Dockerイメージを一括削除
```bash
docker image rm $(docker images -q)
```
XcodeでARkitを使って３DオブジェクトをAR空間に配置する

# やりたい事
Xcodeで開発したARkitを実機ビルドし、実機でAR空間に3Dオブジェクトを配置する
とりあえず初歩的な内容でデフォルトコードを公開。少し中身をいじって遊んでみる
(初期で配置されるオブジェクトを球体に変更)


# 環境
| デバイス | 環境 | 備考 |
|:-:|:-:|:-:|
|  Mac | Ver 13.6.1  | macos  Ventura  |
|  Xcode |  15.0.1 |  公式からダウンロード |
|  ios| 16.6  |   |


# Xcode立ち上げてプロジェクト作成する

１：Create New Projectでプロジェクト作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/75ae4473-80c9-a826-9c98-170cbec08f46.png)

２：Augmented Reality Appを選択しNextで作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/3064d27e-1d29-5b0e-cb4e-61bfbffe709d.png)

３：それぞれ適正なものを選択し、名称設定してNext(Teamはあとで作成でも可)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/92e01e3b-3274-ad6b-cdfd-4c3027c2cc62.png)

４： 以下プロジェクトが自動生成されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/6ae5a29d-fbe5-39c4-98a5-59dd0aa19b46.png)




# 簡単にコード説明
## フレームワークのインポート

```swift
import SwiftUI
import RealityKit
```
必要なフレームワークをインポートしている

SwiftUI：見た目を製作する際に使用
RealityKit：ARの為に開発された3Dレンダリングフレームワーク


## 画面へ表示する

```swift
struct ContentView : View {
    var body: some View {
        ARViewContainer().edgesIgnoringSafeArea(.all)
    }
}
```




### AR空間に表示する：ビューを作成
```swift
    func makeUIView(context: Context) -> ARView {
        
        let arView = ARView(frame: .zero)

        // Create a cube model
        let mesh = MeshResource.generateBox(size: 0.1, cornerRadius: 0.005)
        let material = SimpleMaterial(color: .gray, roughness: 0.15, isMetallic: true)
        let model = ModelEntity(mesh: mesh, materials: [material])

        // Create horizontal plane anchor for the content
        let anchor = AnchorEntity(.plane(.horizontal, classification: .any, minimumBounds: SIMD2<Float>(0.2, 0.2)))
        anchor.children.append(model)

        // Add the horizontal plane anchor to the scene
        arView.scene.anchors.append(anchor)

        return arView
        
    }
```


```swift
//形状定義。generateBoxをgenerateSphereに変更すると球体オブジェクトに変更できる
let mesh = MeshResource.generateBox(size: 0.1, cornerRadius: 0.005)
```
```swift
//材料定義。引数で色や粗さを定義
let material = SimpleMaterial(color: .gray, roughness: 0.15, isMetallic: true)
```

```swift
//modelentityを作成。引数に形状と材料を渡す
let model = ModelEntity(mesh: mesh, materials: [material])
```

```swift
//AR空間場のどの位置にanchorを置くか。第一引数で方向。第二引数で検出するもの。第三引数でそのものの大きさ
let anchor = AnchorEntity(.plane(.horizontal, classification: .any, minimumBounds: SIMD2<Float>(0.2, 0.2)))
```

```swift
//modelentityを子要素に追加
anchor.children.append(model)
//AnchorEntityをシーンに追加して3dモデルをレンダリング
arView.scene.anchors.append(anchor)

```

### entityの考え方について
> Apple公式リファレンス
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/541539b7-216d-5d46-e4a3-318589da3e72.png)

> https://developer.apple.com/documentation/realitykit/entity

個人的な理解を纏める
- RealityKitの表示シーンを構成する要素
- 複数のentityがあり、木構造になっている。
- entityの動作や表示内容はentityに設定されるコンポーネントで決定される
 transformコンポーネントや同期コンポーネントがある
時間を計る、"Stopwatch"

[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の6日目の記事です。

## 時間を計る、"Stopwatch"

[StopWatch](https://symfony.com/doc/current/performance.html)は、名前の通り時間を計るコンポーネントです。

### インストール

```shell
composer require symfony/stopwatch
```

### 基本的な使い方

とても簡単で、`Stopwatch`オブジェクトを生成後、`satart('{イベント名}')`, `stop('{イベント名}')`で計測開始・終了。`getEvent('{イベント名}')`で計測結果である`StopwatchEvent`オブジェクトを取得できます。

```php
use Symfony\Component\Stopwatch\Stopwatch;

$stopwatch = new Stopwatch();

$stopwatch->start('sample-event'); // 計測開始

// なにか処理

$stopwatch->stop('sample-event'); // 計測終了

$result = $stopwatch->getEvent('sample-event'); // 計測した内容の取得
// default/sample-event: 10.00 MiB - 78 ms

```

### ラップ

ラップを計測したい場合も簡単で、`lap('{イベント名}')`を実行すれば、ラップ計測できます。

```php
use Symfony\Component\Stopwatch\Stopwatch;

$stopwatch = new Stopwatch();

$stopwatch->start('sample-event');

foreach ($rows as $row) {
    $stopwatch->lap('sample-event');
}

$stopwatch->stop('sample-event'); // 計測終了

$result = $stopwatch->getEvent('sample-event'); // 計測した内容の取得
// default/sample-event: 10.00 MiB - 78 ms

$result->getPeriods(); // ラップ情報の取得
/*
10.00 MiB - 0 ms
10.00 MiB - 22 ms
10.00 MiB - 21 ms
10.00 MiB - 23 ms
10.00 MiB - 12 ms
*/
```

## まとめ

今回は`Stopwatch`でした。実は使ったことがないコンポーネントでした。デバッグ処理やバッチの起動時間を調べたい時などによく、

```php
$start = new DateTime();
$end = new DateTime();
```

みたいにやってましたが、これを使えばもっと簡単に所要時間の計測ができるので、次からこっちを使っていこうと思いました！
デジタルメモ｢ポメラ｣ で PC-98 をする

すけるとん ぽめら買えちゃった！
![pome.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821068/102ac4dc-b3c1-9a4e-b699-7fbcd1f6b403.png)

ってことで さっそく PC-98 エミュレータを動かします。

:::note warn
pomera は メモ専用デバイスです。
ここで説明している Debian 導入は メーカーさんの想定外の利用方法です。
また、標準の pomera では マウス や オーディオは利用できません(USB経由になります)ので注意してください。
:::

## Debian インストール
- ichinomoto さんのサイトを参照してください
  - https://www.ekesete.net/log/?p=9504

- 具体的にやったことは
  1. オリジナルの eMMC NAND をバックアップ
  1. kernel/initramfs をインストールする
  1. Debian rootfs イメージを SD に入れる
で、いけます。

### 注意点
- ポメラは給電していると 左ALT + 右SHIFT + 電源 が効かないので注意
- Wi-Fi は 2.4GHz 帯らしい
- DM250 の場合、DM200 と認識してしまい Wi-Fi でエラーが出るのでパッチする
  - https://github.com/ichinomoto/dm200_tools/commit/939c3ee71ba0c1b930afc00d1741b94482c85017 
- 通常は 32bpp だが、高速化のために 16bpp したものがあるようなので注意(ToDo: あとで確認)

## gcc/SDL2 など
- gcc と SDL2 を入れておけばとりあえず遊べはすると思う
~~~
$ sudo apt update
$ sudo apt install build-essential
$ sudo apt install libsdl2-dev
~~~

## np2 ビルド
- 最新 SDL2 版をビルドする

### パッチ
- Mutex 
  - \_SDL_mutex_h ではなくて SDL_mutex_h\_ になっていたので追加(2ヵ所)
~~~diff:sndcsec.h
- #elif defined(_SDL_mutex_h)
+ #elif defined(_SDL_mutex_h) || defined(SDL_mutex_h_)
~~~
~~~diff:sndcsec.c
- #elif defined(_SDL_mutex_h)
+ #elif defined(_SDL_mutex_h) || defined(SDL_mutex_h_)
~~~

# 起動
- X を起動する
~~~ shell:Xを起動
$ startx
~~~
- X から普通に np2 を立ち上げればいいんだけど、マウスがないので TTY から起動する (DISPLAY を設定する)
~~~ shell:np2を起動
$ export DISPLAY=:0.0
$ ./np2
~~~

:::note warn
マウス と F11 キーがないので メニューが開かず 何もできませんw
:::

## 追記
作った本人が忘れてるので色々メモ (あとで修正すべし)
- bios.rom は小文字 / FONT.ROM は大文字
- SDL2 はコマンドラインで指定できない
- 同じディレクトリに np2.cfg を作って、CPU と HDD を指定しておくととりあえずは遊べそう(内容は Windows 版からコピる)
~~~ini:np2.cfg
[NekoProjectII]
pc_model=VX
clk_base=2457600
clk_mult=4
ExMemory=1
HDD1FILE=./NP2.THD
~~~

## ToDo
- USB OTG のマウス
- 16bpp 版カーネルだとどうなるのか?
- サウンド関係
paiza.ioでelixir その261

# 概要
paiza.ioでelixirやってみた。
書き方が気に入ったので、ご披露する。
zenスタイル？

# サンプルコード

```
[
    "0. kuri",
	"1. ringo",
	"2. momo",
	"3. kaki"
]
|> Enum.map(fn x ->
    IO.puts(x)
end)

0..3
|> Enum.map(fn x ->
    IO.puts(x)
end)

```

# 実行結果

```
0. kuri
1. ringo
2. momo
3. kaki
0
1
2
3
```

# 成果物

https://paiza.io/projects/qpF9aDPGn3XS4keYTFZTRw


以上。
【 ポートフォリオ 】開発環境・開発してみて

# はじめに

就活用のポートフォリオサイトでの開発環境についてまとめました。

https://qiita.com/MK32A/items/cb5ef7c5ac83488b009c


# 開発環境

[ PC ]
・Windows 11 Home

[ ローカル ]
・XAMPP 8.2.4

[ 言語・フレームワーク ]
・PHP 8.1.12 (cli)
・Node.js 18.14.2
・Laravel 10.24.0
・Vue.js 3.3.4
・tailwindcss 2.2.17

[ ツール ]
・Composer 2.5.2
・vite 4.4.6

[ ライブラリ ]
・Vue Cropprer 0.6.2
・Pinia 2.1.6

[ テスト ]
・Postman 10.20.7

# 本番環境
レンタルサーバーでサクラサーバーを使用。

まだデプロイが完了していません。
DBをコマンドラインから操作、WEBから制作したサイトが表示できるものの、500エラーが発生しています。

# LaravelとVueを別々のプロジェクトで作成

今回は、laravelとVueプロジェクトを別々に作成しました。
全て同じプロジェクトでまとめると、ファイル量が多く管理が大変だからです。
LaravelでAPIを作成して、VueからPiniaを通してAPIを叩くという手法が、個人的に分かりやすいディレクト・ファイル構成であり、管理しやすかったらです。

Laravel内にVueがあるパターンもUdemyで学習しましたが、分離している方が好みでした。こちらの方が「セッションで簡単に認証を実証できる」、「CORSを気にしなくていい」というメリットがあるようですが、経験が浅いためあまり分かっていません。

# Laravelを選んだ理由
求人でもよく目にするCakePHPとも悩みましたが、小規模開発であり、まだ入れたい機能が固まりきれていないいないため、柔軟性の高いLaravelを選びました。



# Vueを選んだ理由

Vueの前にjQueryを触っていましたが、jQueryは記述を簡略化するだけですので、VueかReactに行こうしたいなと思ったのがきっかけです。

ポートフォリオということもあり、小規模開発でソート機能や検索機能も付けたかったため、必要なライブラリを都度導入するVue.jsを選択しました。


# tailwindcssを選んだ理由

tailwindcssを使う前は、SCSSを好んで使っていましたが、tailwindcssは直感的にレスポンスデザインにも対応できて使いやすいため、採用しました。

class名を考えるのに時間がかかったり、被らないように長い名前を付けてしまいガチだったので、その点でもtailwindcssも方が自分に合っています。

また、Bootstrapも考えましたが、柔軟性に劣るため、tailwindcssにしました。

#  開発してみて

LaravelでMVCモデルの実装→Postmanでテスト→Vueでフロント実装、という順で開発を進めるとエラーが発生したときに、Laravel側に問題があるのか、Vue側に問題があるのか、すぐに発見できて実装を進めやすかったです。

テストの大切さが分かりました。

# 苦労したこと

## Laravel×Inertia
最初はLaravel×InertiaのUdemy講座を受講しました。
その後、ポートフォリオを実際に開発しようとして、エラーがでると検索しても記事が少ないことに気づきました。

なかなか開発が進まず、Inertiaは現場でもあまり使われないということを知り、Inertiaを使うことを断念しました。

Laravelに少し慣れたらまた使ってみようかな。という思いはあります。

## Laravel×Vue2/Vue3
次にLaravel×Vueで開発しようとしましたが、Vue2と3のバージョンの違いを分かっておらず、混合して書いていたため、何度もエラーを出しました。

マニュアルをきちんと読むことの大切さを学びました。

## UdemyでVue3の講座を受講

Vue3を学び直すため、Udemyで日本人の講座を受講するもポートフォリオを制作すうえで、内容が充分でないと物足りなさを感じました。

その後、外国人の方のLaravel×Vue3の講座を見つけ受講しました。こちらの講座でPostmanやPiniaも同時に学ぶことができました。

外国人の方の講座ですので、言語の違いに抵抗がありましたが、いざ受講してみるとあまり気にならず、とても良い講座に出会えてよかった。と思うことができました。

# 今後

本番環境にデプロイすることはもちろんですが、クックパッドのAPIを導入したり、Pythonで写真に写る料理の識別を作ったり、チャット機能を導入したり、とまだまだやってみたいことが多いです。

Laravel×Vueでどこまで開発できるか、などもまだあまり分かっていないのですが、作ってみたいと思ったものは挑戦していきます。
今年のMicroPythonリリースふりかえり

# はじめに

[MicroPython/CircuitPython Advent Calendar 2023](https://qiita.com/advent-calendar/2023/micro-circuit-python)の１日目は、2023年にリリースされたMicroPyuthonを振り返ります。意外でしたが、今年リリースされたのバージョンは２つだけです。

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

## v1.20.0

2023年4月26日リリース

* パッケージマネージャとして upip に代えて mip を導入
* mip 導入に伴い、ドライバの多くが micropython-lib に移動
* bytes/memoryview/bytearray への hex/fromhex メソッドの追加
* 辞書結合(PEP 584)のサポート
* networkモジュールにおいて、scan()、connect()、config() のキーワード引数の名前変更　（古いキーワード引数もまだサポート）
  * 　「essid」→「ssid」
  * 　「auth」「authmode」→「security」
  * 　「password」→「key」
* network.hostname() と network.country() 関数追加
* uasyncio.Stream で read(-1) をサポート
* uasyncio.ThreadSafeFlag に clear() メソッド追加 
* framebuf モジュールに楕円と多角形の描画メソッドを追加
* framebuf モジュールの rect() に fill 引数を追加
* C言語アプリに MicroPython を組み込むための新しいポート "embed" 追加
* Raspberry Pi Pico W サポート(CYW43xx WiFi ドライバ統合)

## v1.21.0

2023年10月6日リリース

* 組込みモジュールのほとんどから "u" 接頭辞を削除
* 圧縮をサポートする新しい deflate モジュール追加
* esp32 ポートのビルド環境が ESP-IDF5 に移行
* Raspberry Pi Pico W での BLE のサポート
* esp8266 と esp32 で ESP-NOW サポート

## 夜間ビルドのバージョン番号の変更

旧：<date>-unstable-<現リリース番号>-<現リリースからのコミット回数>-g<GITハッシュ>
新：<次期リリース番号>-review.<現リリースからのコミット回数>.g<GITハッシュ>

## v2.0開発スタート

公式ドキュメントに[MicroPython 2.0 Migration Guide](https://docs.micropython.org/en/latest/reference/micropython2_migration.html)が追加され、v2.0開発が始まったことが示唆されています。GitHubを確認する限りでは、まだv2.0用のコードはほとんど入っていません。

参考：私家版和訳 [MicroPython 2.0 移行ガイド](https://micropython-docs-ja.readthedocs.io/ja/latest/reference/micropython2_migration.html)

今のところ、変更としてあげられているのは以下３点です。

* **machine モジュールAPIの一貫性向上** <br>個々のボードの事情があるので難しいところはありますが、期待したいところです。特に stm32 系は pyb モジュールのコードの機能をそのまま使っていることが多くてAPI仕様どおりになっていないことがあるので、改善してもらいたいところです。

* **.mpy ファイル をファイルシステムから直接実行** <br>現状は一度RAMにコピーしないと実行できないところを、それをしなくても実行できるようにするとのことです。これにより、コードのデプロイ時間の短縮、メモリのオーバーヘッドと断片化の軽減が期待できます。

* **CPythonとの互換性向上** <br>なんかCircuitPythonが目指している方向性とかぶりますが、どうなりますでしょうか。
Pythonのclass変数をCの静的変数のように使うテストプログラム '101回目のプロポーズ'


class変数をCのstatic宣言された変数のように、静的変数として使ってみるテスト。
101回めのプロポーズ。ドラマの設定とはちょっと違いますが。

class herに101回呼び出したら'Yes'を返す関数ansを作ります。
メインからxを'Yes'が返ってくるまで呼び出します。
'Yes'が返ってきたら終了です。
ここでは、クラス変数を使ってますが、インスタンス変数は使ってません。

```propose.py
#!/usr/bin/python3

import random

class her:
    counter=0
    def __init__(self):
        random.seed()
        return
    def ans():
        her.counter+=1
        if her.counter==101:
            return "Yes"
        return "mmm" if random.randrange(10)<7 else "No"

if __name__=="__main__":
    trial=0
    her()
    while 1:
        trial+=1
        print(f"{trial}回目")
        print("Me: Marry me please.")
        ans=her.ans()
        print(f"She: {ans}.")
        if ans=="Yes":
            break
    print("We are just married.")

```

Cで書くとこのようになります。

```propose.c
#include	<stdio.h>
#include	<stdlib.h>
#include	<string.h>
#include	<time.h>

void	her_init() {
	srand((unsigned)time(NULL));
	return;
}

char	*her_ans() {
	static int counter=1;
	return counter++==101?"Yes":(rand()%10<7?"mmm":"No");
}
int main() {
	int trial=0;
	char *ans;
	her_init();
	while (1) {
		trial++;
		printf("%d回目\n",trial);
		printf("Me: Marry me please.\n");
		ans=her_ans();
		printf("She: %s.\n",ans);
		if (strcmp(ans,"Yes")==0)
			break;
		}
	printf("We are just married.\n");
}

````
フォームに郵便番号検索機能を実装する方法

今回はフォームに郵便番号検索機能を実装する方法をここに書き留めていきたいと思います！

フォームの入力機能など普段使用する際に、郵便番号を入力すると住所の番地の手前まで検索することができる機能があると思います。

今回はその郵便番号検索機能をjsを用いて実装する方法を記載したいと思います。

## HTMLファイル実装

まずは、検索画面の実装を行います。

簡単なデザインとしてBootstrap4.5を用いて次のように記述します。

````index.html
            <div class="box-radius col-6">
                <form>
                    <label for="formGroupExampleInput">郵便番号を入力してください</label>
                    <div class="row">
                        <input type="text" class="form-control col-5" id="inputpostcode" placeholder="postcode">
                        <button type="button" id="clear" class="btn btn-secondary col-3">クリア</button>
                        <button type="button" id="search" class="btn btn-primary col-3">検索</button>
                    </div>
                    <div class="form-group">
                        <label for="formGroupExampleInput2">住所</label>
                        <input type="text" class="form-control" id="receiveaddress" placeholder="address">
                    </div>
                </form>
            <div>
````

ここでは簡単なBootstrapのクラスを用いただけですので、空白やフォームのサイズの調整などは個人のお好みでお願いします。

## JavaScriptファイル実装

次にJsファイルを書いていきます。

なぜ、Bootstrapの最新版は5.3にも関わらず、4.5を用いたのかというと、v5.3ではjQueryの対応をしていないからです。つまりここではjQueryを用いて実装を行います。

実際今回の範囲の実装であればjQueryを用いていようがいまいがあまり変わらないのですが、個人制作をしていた時にバンバンjQueryを使っていたのでこのような仕様になってしまいました。

````main.js
$(function(){
    $('#search').on('click', function() {//検索ボタンがクリックされた時

        $.getJSON('http://zipcloud.ibsnet.co.jp/api/search?callback=?',
            {
            zipcode: $('#inputpostcode').val()
            }
        )
        .done(function(data) {
            if (!data.results) {
                var notaddress = [];
                alert("該当する郵便番号がありません。");
                $(".alart-text2").html(notaddress.join("<br />"));
            } else {
                let result = data.results[0];
                $('#receiveaddress').val("〒" + result.address1+result.address2+result.address3);
            }
        })
    });
});
````

このようにコードを作成します。

ここで、1点住所の情報の拾ってくる方法を記載いたいと思います。

住所のデータは、result.address1に県名、result.address2に市区名、rerult.address3に町名が格納されています。

そのため、フォームの仕様によって変更して利用する必要があります。

いかがだったでしょうか？フォーム制作などエンジニアには必要な実装の一つに関してお話させていただきました！

以上で今回の内容は終わりとさせていただきます。ありがとうございました！
Amazon SESを使用したPostfixメール送信の設定手順

Amazon SESを利用してEC2(RHEL7)上のPostfixからメールを送信するための設定手順です。このガイドでは、SESの設定は扱いません。

### **1. 必要なパッケージのインストール**

PostfixでSASL認証を使用するために、必要なパッケージをインストールします。

```bash
sudo yum install cyrus-sasl-plain
```

### **2. Postfixの設定**

以下のコマンドを実行して、Postfixの設定を更新します。SMTPエンドポイントはAmazon SESコンソールで確認できます。

```bash
sudo postconf -e "relayhost = [SMTPエンドポイント]:587" \
"smtp_sasl_auth_enable = yes" \
"smtp_sasl_security_options = noanonymous" \
"smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd" \
"smtp_use_tls = yes" \
"smtp_tls_security_level = encrypt" \
"smtp_tls_note_starttls_offer = yes"
```

### **3. master.cfの編集**

**`/etc/postfix/master.cf`** ファイルを開き、存在する場合は以下の行をコメントアウトします。

```bash
-o smtp_fallback_relay=
```

### **4. SASLパスワードファイルの設定**

**`/etc/postfix/sasl_passwd`** ファイルにSMTP認証情報を追記します（ファイルがない場合は作成）。

```bash
[SMTPエンドポイント]:587 SMTPUSERNAME:SMTPPASSWORD
```

### **5. hashmapデータベースファイルの作成**

以下のコマンドを実行して、hashmapデータベースファイルを作成します。

```bash
sudo postmap hash:/etc/postfix/sasl_passwd
```

### **6. ファイルの権限設定**

適切な権限を設定して、セキュリティを確保します。

```bash
sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
```

### **7. CA証明書の設定**

PostfixがCA証明書を認識できるようにします。

```bash
sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'
```

### **8. Postfixサーバの起動・再起動**

最後に、Postfixサーバを起動または再起動します。

```bash
sudo postfix start
sudo postfix reload
```

以上で、Postfixを使ったAmazon SES経由でのメール送信の設定は完了です。
LaravelとCakePHPの比較

# はじめに

PHPはJavaの次に案件が多く、Facebook、Slack、Wikipedia、メルカリ、楽天でも使用されています。
そのため、多様なフレームワークが存在しています。その中で今回は、求人でもよく見かけるLaravelとCakePHPを比較・整理し、備忘録として残します。

# Laravel
2011年に登場したSymfonyをベースにしたPHPのフレームワークです。
Laravelは、比較的に最新技術や流行への対応力が高いです。
時事通信ニュース、ぐるなびに導入されています。

GitHubでは、PHPフレームワークの中で最高評価を受けています。
「Love beautiful code?We do too」という理念を掲げており、PHP初心者でも綺麗なコードを記述できます。

日本語ドキュメントやライブラリも充実しています。

## メリット

・頻繁にバージョンが更新される
・活発なコミュニティがある

## デメリット

・複数人での開発には注意が必要
・CakePHPに比べ処理速度が遅め

# CakePHP
2005年に登場したMVCの先駆けとなったPHPフレームワークです。
ケーキを焼く様に簡単に速く開発できるフレームワークを目指して開発されています。
ココナラ、piza転職に導入されています。

CakePHPはオープンライセンスで、MITライセンスとして提供されています。
MITライセンスとは、提供されたソースコードを自由にカスタマイズして利用することが可能なライセンスです。

Ruby on Railsの影響を受けており、Webアプリケーションを高速に開発できます。
MVCを採用し、bakeコマンドによるプログラム自動生成機能があります。

セキュリティ対策に強く、商用のアプリケーション開発にも適しています。
日本語に翻訳されたドキュメントも多いです。

## メリット

・キャッシュ機能で表示の高速化が可能
・生成されたSQLのデバッグ機能やバリデーション機能搭載
・活発なコミュニティがある
・複数人での開発向き

## デメリット

・規則が厳しい
・柔軟性に欠ける

# 参考記事

https://www.sejuku.net/blog/126976
MySQLをアンインストールしてから再インストールする時のおまじないメモ

久しぶりにMySQLを入れようとして失敗し、再インストールで苦労したのでメモしとく。

#### 環境
クラウド： Azure VM
OS：　Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-1050-azure x86_64)
MySQL：　Ver 8.0.35-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))

#### おまじないの手順
```sh:おまじないず

#===============================================================
# MySQLをアンインストールしてから再インストールする時のおまじない
#

# 設定ファイルとデータベースをバックアップしとく
sudo cp -r /etc/mysql /etc/mysql_backup
sudo cp -r /var/lib/mysql /var/lib/mysql_backup

# MySQLのパッケージをアップデートする
sudo apt update

# （必要に応じて実行）システム全体のパッケージをアップグレードする
sudo apt upgrade

# MySQLを完全に削除する（データベースと設定ファイルも含む）
sudo apt purge mysql*
sudo rm -rf /etc/mysql /var/lib/mysql

# 不要なパッケージを自動的に削除する
sudo apt autoremove

# キャッシュされたパッケージファイルを削除する
sudo apt autoclean

# MySQLサーバーの再インストールする
sudo apt install mysql-server

# MySQLサービスを起動する
sudo service mysql start

# MySQLが正常に起動しているか確認する
sudo service mysql status

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-11-30 22:05:52 JST; 1 day 10h ago
   Main PID: 16700 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 9456)
     Memory: 409.8M
     CGroup: /system.slice/mysql.service
             mq16700 /usr/sbin/mysqld

Nov 30 22:05:51 azr-test-2 systemd[1]: Starting MySQL Community Server...
Nov 30 22:05:52 azr-test-2 systemd[1]: Started MySQL Community Server.

# MySQLのバージョンを確認する
mysql --version
mysql  Ver 8.0.35-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
```
インターフェースに最適化する人

## インターフェースとはなにか？
わたしは中学生向けの英和辞典をもっているので、それを元に話をしたい。
インターフェースとは、表面に施された工夫・装飾のことだ。（英和辞典を開かず適当にそれっぽいことを書いた虚言家です。）

## インターフェースに最適化するとは？
誰にでも使える優れたデザインをユニーバーサルデザインなどと総称するらしい。
賞もある。
わたしの頭の中のドーラが「（その賞）欲しい！！」と叫んでいるが、ユニバーサルデザインで賞をもらうなど蛮族のわたしには途方もない宝である。
諦めよう。

優れたデザインというのは、iOSアプリに限らずだが、細かな説明無しに見てわかることが、良いとされている。
画面上に、ボタンがボタンとわかるように、最適なサイズかつ最適な位置で配置されていることは、設計側も消費者側にとっても優れたデザインであると言える。

## 優れたインターフェースへの最適化とは？
私達の身の回りには、優れたインターフェースが溢れかえっている。
全て先人たちの叡智のなせる技だ。
しかし、ここにひとつ、ここまで読み終えた人が「それは問題ですか？」と思うような、自己矛盾的な問題が発生する。
譲れたインターフェースまみれの環境で育った子どもは、大人の想像を遥かに超えて、インターフェースに最適化してしまう。
それ自体、素晴らしいことだ。

## 誰が最適化するのか？
もちろん、ここまで読んだ人なら、前の項目に記載した通り、次世代だ。次世代は最適化し、そのインターフェースがデファクトスタンダードであることを意識すらせず使いこなすことになる。

## 最適化の弊害
育児中のママが、「うちの子、もうスマホのタッチパネルを操作できるの」と困り顔でいうときに、「時代だね」「わたしよりスマホ使えてそうw」「賢い子だね」という返事をしがちだが、本当にそうだろうか？
子どもがここまで操作できてしまうというのは、設計側の考慮不足だ。

iOSであれば、設定画面で一つの設定をオンにすることで、チャイルドロックに近しいロックを掛けられる。ホームボタントリプルタップもしくは、電源ボタンを素早くトリプルタップするだけだ。
iOS17からはさらに認知に困りごとのある人をターゲットに据えたアセスティブアクセスまで登場した。筆舌尽くしがたいほど、考え抜かれているインターフェースだ。

僭越ながら伝えると、appleの設計側の考慮不足は、2つある。
（ほとんど言いがかりに近しいので本気で受け取らないで欲しい）
ひとつは育児中にこの設定に気付くようにTips情報を適切に配置できていないことだ。
もうひとつは、日本人限定かもしれないが、アイフォーンケースに格納した際のボタンの操作性の精度が著しく下がることを配慮していなかったことだ。

子どもは生まれたときから、優れたインターフェースの中に暮らしているので、教えてあげなくてもインターフェースの操作を（さらに恐ろしい場合は、チャイルドロックの解除すらも）実現してしまう。
弊害は、超絶具体的に述べると、わたしが困っている。
わたしのMacのキーボード全て指紋認証で、わたし以外入力できないようにしてくれないと3歳児を膝に載せながらキーボードが打てない。
わたしのiPhoneは、充電中に右上の角を斜めスワイプして、タイマーやカメラ起動されてしまう。
何故、電源ボタンクリックし就寝した翌朝に、わたしの寝顔の写真と3歳児の自撮り写真が時に存在するのか。


## 人はインターフェースに最適化する
わたしの結論は、このとおりだ。
そのメリットとデメリットを考えるのは、まさにものを作っている我々大人一人ひとりに課せられた課題なのだ。

## 何故、次世代は要領良く見えるのか？
他所の子供は賢く見えるのであれば、それは育児に参加している大人もしく、次世代の可能性を信じている大人だからだ。

## 最後に
わたしはiOSアプリ開発に携わる人間の一人だ。
Swiftを使わざるを得ない。
Swiftが本当に日本に根づいていいのか、よくよく考えて次世代に「効率よく」教えこんでいく必要がある。
Pythonで「比較演算子の使い方」の動作を確認してみた

# 概要

Pythonで「比較演算子の使い方」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/python/if/index4.html

# 実装

以下のファイルを作成しました。
```sample.py
print(bool(10 == 10))
print(bool(10 == 8))
print(bool(10 == 10.0))
print(bool("Hello" == "Hello"))
print(bool("Hello" == "Hey"))
print(bool("Hello" == "hello"))
print(bool(["Red", "Blue"] == ["Red", "Blue"]))
print(bool(["Red", "Blue", "Yello"] == ["Red", "Blue"]))
print(bool(5 > 3))
print(bool(7 < 3))
print(bool(4 >= 4))
print(ord("a"))
print(ord("b"))
print(ord("c"))
print(ord("A"))
print(bool("apple" > "bread"))
print(bool("apple" > "Apple"))
print(bool("abc" < "abcde"))
print(bool(["red", "blue", "green"] > ["red", "blue", "white"]))
print(bool(["aa", "bb"] < ["aa", "bb", "cc"]))
print(bool("apple" in ["orange", "apple", "lemon"]))
print(bool("grape" in ["orange", "apple", "lemon"]))
print(bool (8 == 8.0))
print(bool (14 < 9.5))
print(bool (10 == "10"))
#print(bool (10 > "8"))
print(bool (14 > int("10")))
```

以下のコマンドを実行しました。
```
$ python3 sample.py 
True
False
True
True
False
False
True
False
True
False
True
97
98
99
65
False
True
True
False
True
True
False
True
False
False
True
```

# まとめ

何かの役に立てばと。
工場、作業場などでのデータ入力方法に対する考察

# 背景
マナビDX QUEST※2022の企業協働の企業組成側のお手伝いをさせていただいた際に
協働候補企業の方より整備場や工場など軍手をはめている、また油で汚れた手でPCを操作するには
軍手を外して、手を拭いてといった手間が多く、なかなかデジタルデータの入力をその場でというのが難しく、データ収集のボトルネックの一つになっているとのお話を伺う機会があった。

これらは今後の中小企業や地方のサポートに対して頻出する問題であると考え
想定可能な入力手法についてまとめたものである。

※マナビDX Quest：経済産業省が実施する、デジタル推進人材育成プログラムのこと。
（https://dxq.manabi-dx.ipa.go.jp/）
> 注意：本内容は2022年9月にまとめたものであり、その後新たな方法やアプリが導入されている可能性があるので留意のこと

# 想定手法
①音声入力
　　WiFi/Bluetoothの届く範囲にPCなどを設置しヘッドセットなどで音声入力

②ペン入力
　　タブレットを壁置き、据え置きにし、ペンで入力

③ボタン入力
　　・体の不自由な人向けなどで使われる大型押しボタンやフットスイッチにキー機能を割り当て、
  　　　最低限の入力を可能にする。
　　・また、余計なボタンを除いたキーボードなどを使って軍手などをつけた状態で使いやすくする　
# ①音声入力
いろいろな方式、既存の販売アプリなどもあるが無料のChrome拡張機能の追加でWebアプリなどChromeを介したアプリ入力に限られるが、Googleの音声入力エンジンを使えることから安定性、実績など、プログラミングに関して詳しくないユーザーであっても使いやすいものではないかと想定される。
https://carenote.jp/voicein-onseinyuryoku/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552279/8b9ce7db-df66-9534-dabe-886608e6b0fd.png)


クリックしないと、認識を始めない仕様でまた常時認識させると思わぬ音声を拾うなどありえる。
　
以下のサイトの動画でのサンプルがわかりやすいがどうしてもキーボードや、マウスの操作が必要になる部分があったり、ラジオボタンやボタンクリックなどがあり、キーボード入力に時間がかかるなどの部分の補助には最適かもしれないが負担軽減には別の市販の音声入力ツールか、他の方法との組み合わせが考えられる。
https://teachme.jp/1203/manuals/13070581
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552279/105e90e6-f149-df63-1d01-6b0028364385.png)


**すでに販売されている音声入力アプリについて**
スマートグラスでの作業指示ソフトなどに音声で入力したデータを取得する機能があったり
https://www.teamviewer.com/ja/frontline/xmake/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552279/6ee94094-7a66-c216-c474-0e1b648a039e.png)

現場帳簿の電子化ツールなどでも音声入力機能があったりする
https://i-reporter.jp/solution/%e6%a4%9c%e6%9f%bb%e6%b8%ac%e5%ae%9a%e5%80%a4%e3%81%ae%e9%9f%b3%e5%a3%b0%e5%85%a5%e5%8a%9b/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552279/0025a509-aba8-492d-6f57-c52760738910.png)

ただもちろんこれらのアプリは高価であったり、おそらくスマートグラスなど他のツールが必要であったりとここで想定される入力方式の改善にはマッチしないものと考えられる。
# ②ペン入力
以下の例ではコロナ禍で使う人の増えたフックにボタンを押す部分に保護のラバーのついたものだが、画面が汚れたり、手袋をつけた状態では反応しないタブレットなどのタッチパネルを、ある程度消耗品と割り切ったペンや右例のようなツールを用いて、壁掛けなどしたタブレットに結果を入力する方法が考えられる。
https://www.ikea.com/it/it/p/vetskap-gancio-multifunzione-grigio-30511373/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552279/d6d5604f-8287-c73d-2963-2cdd5271cd44.png)

https://item.rakuten.co.jp/fiara1/10000882/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552279/d23cc492-02fa-de59-4b7a-8d51b7fbf8c9.png)

ただしタッチで完結させないといけないため単純な操作に限られ、文章入力などは前述の音声入力などと組み合わせることが考えられる。
# ③ボタン入力
USBでPCなどと接続できる押しボタンやフットペタルなどが市販されたり、多少の手間が必要だがキットなど販売されている。
特定キー入力をボタンのオンに置き換えられるので、単純なチェックのオンオフなどは単独もしくは複数のボタン、ペダルなどで置き換えられると考えられる。
https://note.com/itojun/n/n3f6f5df1722a

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552279/24ee63b7-bd82-4791-8436-abe0f8fd70f1.png)
https://qiita.com/A_T_B/items/769ed3f9b178fcf29311

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552279/47329a9c-6114-fba4-c16e-c50c7907ea16.png)


ただし、文章入力など複雑な操作は本方式ではボタン数が増え、設置場所などの問題がでたり、そもそも現実的でない可能性が大きい。
# まとめ
いずれの方式もこれが決定打というものではなく
　　ー　方式自体を組み合わせたり、
　　ー　アプリ自体の設定や運用の割り切り
　　ー　タブレット導入や設置方法の工夫
など、種々の制限条件や各社各事業所の制限条件や状況などを見ながら、
現場を巻き込んで考えていく必要があると考えます。

本考察は現場を巻き込んでの建設的な検討の一助になれば幸いです。
Astroの小ネタ Component ScriptとクライアントサイドのScriptで同一データを扱う

AstroのComponent Script（---で囲われたScript）と、クライアントサイドのScript（`<script>`タグを使うやつ）で同じデータを使いたい場合の小ネタを紹介します。
Component ScriptとクライアントサイドのScriptはスコープが違うというか、Component Scriptはユーザーのブラウザ側で実行されないので、それぞれで変数が共有されません。。例えば、以下のコードではdefaultTodoTasks変数はクライアントサイドのScriptから参照できません。
```
---
import MySiteLayout from "../layouts/MySiteLayout.astro";

// Component Script (JavaScript)
const defaultTodoTasks  = [
  {
    slug: "gym",
    title: "ジム",
    completed: false,
  },
  {
    slug: "walking",
    title: "散歩",
    completed: false,
  }
];
---
<MySiteLayout title="Home Page">
  <ul>
    {defaultTodoTasks.map(task => (
      <li>
        {task.title}: {task.completed ? '完了' : '未完了'}
      </li>
    ))}
  </ul>
  <script>
  console.log(defaultTodoTasks.length) // Uncaught ReferenceError: defaultTodoTasks is not defined   
  </script>
</MySiteLayout>
```
そこで、データをファイルとして保存し、exportとimportを使うことで両方のスクリプトから同一のデータを扱うことができます。
まず、defaultTodoTasks.jsという名前のファイルを作成し、そこでdefaultTodoTasks変数を定義してexportします。
`src/data/defaultTodoTasks.js`
```
export const defaultTodoTasks  = [
  {
    slug: "gym",
    title: "ジム",
    completed: false,
  },
  {
    slug: "walking",
    title: "散歩",
    completed: false,
  }
];
```
次に、Component ScriptとクライアントサイドのScriptの両方でdefaultTodoTasksをimportします。
`src/pages/index.astro`
```
---
// Component Script (JavaScript)
import MySiteLayout from "../layouts/MySiteLayout.astro";

import { defaultTodoTasks } from '../data/defaultTodoTasks.js';
---
<MySiteLayout title="Home Page">
  <ul>
    {defaultTodoTasks.map(task => (
      <li>
        {task.title}: {task.completed ? '完了' : '未完了'}
      </li>
    ))}
  </ul>
  <script>
  import { defaultTodoTasks } from '../data/defaultTodoTasks.js';
  console.log(defaultTodoTasks.length) // output: 2
  </script>
</MySiteLayout>
```

defaultTodoTasks.jsファイル内でdefaultTodoTasksを定義することで、Component ScriptとクライアントサイドスクリプトからdefaultTodoTasksにアクセスができるようになりました！
【AWS】AWS

# AWSとは
ITサービスの構築に伴い、150を超えるサービスを提供している。
提供されるサービスのカテゴリは以下の通りである。

* コンピューティング
* ネットワーキング・コンテンツ配信
* ストレージ
* データベース
* アプリケーション統合
* コンテナ
* アナリティクス
* デベロッパー用ツール
* マネジメントとガバナンス
* セキュリティ、アイデンティティ、コンプライアンス
* 機械学習
* IoT
* 移送と転送
* フロントエンドWebとモバイル
* メディアサービス
* エンドユーザーコンピューティング
* ビジネスアプリケーション
* その他

# AWSのメリット
* 従量課金制(利用した分だけ支払い)
* 拡張性がある
* 使用するまでの時間がかからない
* 多くの知見がある

# AWSサービスの利用方法
| 種類 | 説明 |
| ---- | ---- |
| AWSマネジメントコンソール | AWSのサイトからログインして、各サービスを利用する。 |
| AWS CLI | パソコン端末にあるコマンドラインから各サービスを利用する |
| AWS SDK | AWSが提供するSDKというライブラリを使用して各サービスを利用する　|


# 参考
https://aws.amazon.com/jp/what-is-aws/
https://www.youtube.com/watch?v=156B6cZ_2aQ&list=PL2nCE2iR-lpm7XFAJR0ngD1rkheHgX_0b&index=1
AWSの基本・仕組み・重要用語が全部わかる教科書
アウトプットの基本の礎の縁が支える「読みやすさを突き詰める」　フォント編

こんにちは。

毎日データ可視化について悶々と考えている限界過疎地おじさんです。

# 相変わらず長いタイトル、なによ？

現在、私は[DATASaberBrudge2nd](https://datasaber.world/)に参加しています。
参加者(Apprenticeっていうんだよ、カッコイイよね！)は90日間で与えられた課題をこなしつつ、コミュニティ構築のノウハウ、仲間づくりを進めつつ、データビジュアライゼーションアライゼーションのスキルを磨き、Saberとして独り立ちするための自己啓発に勤しみます。

# ほうほう、それでお主は何に貢献しているのかね？
自分のTableauスキルはほぼ素人なので、技術的に他のApprenticeに伝えられることはほぼ皆無なので、月並みな言い分なんですが、自分のドメイン知識の中から汎用的なノウハウ的なものをお伝えするように心がけています。

DATASaberBridgeに限らず、Tableauコミュニティでは初心者向けに共有会やコミュニティ活動が活発で、私も先日[JTUG(Japan Tableau User Group)](https://jtug.jp/event/11-30%e6%9c%a8-20%e6%99%82%e3%80%80%e7%ac%ac4%e5%9b%9e%e3%80%90%e5%88%9d%e5%bf%83%e8%80%85%e6%ad%93%e8%bf%8e%ef%bc%81%e3%80%91%e3%82%ab%e3%82%b8%e3%83%a5%e3%82%a2%e3%83%abviz%e3%81%a4%e3%81%8f/)に挑戦してみました。

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

Youtube生配信を見つつ、出されるお題に制限時間内にVizを作っていく楽しいイベントです、運営さん本当にお疲れさまでした。

で、当然みんな作るの早いし再現度も高い、すごい。

自分はこれが限界~。
https://x.com/kynetch/status/1730195548362469429?s=20

基本問題+2題ほど応用問題に臨みます。これ結構ムズくて」とても勉強になりました。

今後、全国大会の予選から本選も予定されているとのことでぜひ参加したかったんですが、本選が東京リアル開催とのことで過疎地住のおっちゃんはちょっと遠慮することとなりました。

# 本題
で、DATASaberBridge2ndの中でも同様のコミュニティ活動が催されています。
私も、5分でVizを作る過程を見てもらったさいに、師匠(DATASaberではいわゆるコーチ・メンターのみなさんを師匠って呼ぶんですよ、イイね！)や同期からいただいたフィードバックの中からいただいたオホメポイント第一位がこちら。


:::note info
### そういえばこれまで書式設定でフォントを調整したことが無かった！見やすくてイイね！
:::

でした。

自分はちょっと目に疾患を抱えていることと(緑内障と白内障)、軽い赤緑色盲がある(らしい、小学校の時に検査で判明)かつて知人に[識字障害](https://www.ncchd.go.jp/hospital/sickness/children/007.html)の方がいたことから、資料作成にはフォント調整と色指定には少しこだわりがあります。

エクセルやパワポは基本的にメイリオを使う人が多いと思いますし、洗練されたデザインと読みやすさで人気です。当然、メイリオ一択でも構わないと思います。
私も少し前までは書籍・サイト[伝わるデザイン](https://tsutawarudesign.com/)を読んで、「えええっ?フォントにどんだけページ割いてんのよ？」って驚いた経験があります。

https://gihyo.jp/book/2021/978-4-297-11985-0

業務上、資料作成の目的は「理解してもらう」ことなんですが、スピード感を重視しだすと段々とデフォルトのフォントとサイズで「とりあえず作りました」になりがちですよね。

数字と文章を読み手の脳にスっと可能な限り入れやすくする「お客様の視点」を突き詰めると、「いかに読みやすく、見やすく、理解しやすいデザインの素粒子」としてフォントに拘るようにしています。

そんななか、こんなニュースが飛び込んできましたね。
[モリサワ 「Google Fonts」へユニバーサルデザインに配慮した「BIZ UDフォント」を提供](https://www.morisawa.co.jp/about/news/6706)

恥ずかしながら、メイリオ一択で突き進んでいた当時の自分はこのUD、ユニバーサルデザインフォントの意味が分かっていませんでした。
(※そういうものがある、ということを知っていたレベル)

なんとなく気になって、調べてみたところ、こんな書籍に出会いました。

:::note info
[奇跡のフォント](https://bookpub.jiji.com/book/b622426.html)
「俺バカじゃなかったんだ」。書字障害の子どもが読めた「UDフォント」を開発した書体デザイナーが、試行錯誤と工夫を明かす。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167883/4f93778d-9c24-172e-4170-1a71f4d3500f.png)

いやはや、年に1冊選べて言われれば間違いなく推す一大ドキュメンタリーでした。
フォントを世に出すために人生を掛けた方がいらっしゃったことを恥ずかしながら全く知りませんでした。

これを読んで以降、特別な理由が無い限り、利用するアプリケーションのフォントはUDフォントを利用しています。

詳しくは書籍に譲りますが、」ビジネス向け教科書用など、いろいろなUDフォントがありますが、それはアウトプットの種類により適宜選択しています。

もちろん、各個人のこだわりは尊重したうえですが、DATASaberBridgeのコミュニティでも、Vizの出来栄えに少なからずこだわるフォントの選択についてお話しさせていただいた件でした。
GPTs で MapLibre GL JS の開発アシスタントを作成した話

みなさん、こんにちは。
今回、GPTs を使ってMapLibre GL JS について答えてくれるチャットアシスタントを作成したので紹介したいと思います。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">GPTs でMapLibre GL JS の開発アシスタントを作成しました。<br><br>MapLibre Meetup Japan #1 で、英語のドキュメントしかないので初学者にわかりづらいという意見があったので作りました。<br><br>ChatGPT Plus （課金）ユーザーしか使えませんが、お試し下さい!<a href="https://t.co/W2ruSgLlST">https://t.co/W2ruSgLlST</a><a href="https://twitter.com/hashtag/mujp?src=hash&amp;ref_src=twsrc%5Etfw">#mujp</a> <a href="https://twitter.com/hashtag/MapLibre?src=hash&amp;ref_src=twsrc%5Etfw">#MapLibre</a></p>&mdash; Naoki Ohashi / Geolonia (@naogify) <a href="https://twitter.com/naogify/status/1724206532177359085?ref_src=twsrc%5Etfw">November 13, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


## なぜ作ったか？
以前、[MapLibre User Group Japan](https://dayjournal.notion.site/MapLibre-User-Group-Japan-Official-Web-Site-4ecb7ea313f945f39ccc2ca8dfbaad4f)の主催する、Meetup （MapLibre Meetup Japan#1）に参加した時に参加者から、**「MapLibre GL JS のドキュメントは英語で分かりづらい。。」** というフィードバックがありました。

https://mug-jp.connpass.com/event/293158/

MapLibre GL JS 公式ドキュメント
https://maplibre.org/maplibre-gl-js/docs/

これを何とかできないか？と思って日本語で MapLibre GL JS のコードについて質問すると答えてくれるチャットアシスタントを作ってみました。


## GPTs とは？

一言でいうと、独自の知識を ChatGPT に追加して、特定のトピックに特化したチャットアシスタントを作成できる機能です。

https://openai.com/blog/introducing-gpts


## 作り方

https://chat.openai.com/gpts/discovery にアクセスし、以下のように答えて欲しい内容を入力していきます。

![スクリーンショット 2023-12-02 7.24.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142797/abaa03b0-f7e7-fc64-d165-51aebf8ae1af.png)

今回は、公式ドキュメントのURLを渡して、「日本語で回答する」ように、「Mapbox GL JS のコードを出力しない」ように伝えました。

## 使い方

ChatGPT Plus （課金）ユーザーであれば、以下のURLからお試し頂けます。

https://chat.openai.com/g/g-uUQZ41CjI-maplibre-gl-js-fei-gong-shi-asisutanto

## フィードバック

そうすると、早速 [@tmizu23](https://twitter.com/tmizu23) さんが、触ってみてフィードバックをくれました。ありがとうございます!

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">最初使い方を聞いたりしてたけど、直接ファイルを作成してもらうのが正解だった。さらっとgpkgをgeojsonに変換してくれるのもありがたい。やり取りと成果ですつ<a href="https://t.co/vzvJAgnUvX">https://t.co/vzvJAgnUvX</a><a href="https://t.co/PW9B4DkjUy">https://t.co/PW9B4DkjUy</a> <a href="https://t.co/dO2tqNJcDR">https://t.co/dO2tqNJcDR</a></p>&mdash; tmizu23 (@tmizu23) <a href="https://twitter.com/tmizu23/status/1724597463921910134?ref_src=twsrc%5Etfw">November 15, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

いかがだったでしょうか？　皆様もぜひお試しください〜
Eclipseで、Mavenを利用しているSpring Bootプロジェクトのjarファイルを作成する

Eclipseで、Mavenを利用しているSpring Bootプロジェクトのjarファイルを作成する手順を示します。

# ビルド設定 : 最初に1度実施すればOK

① パッケージエクスプローラで対象のプロジェクトを右クリック。実行(R) > 8 Maven ビルド… を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/df498ea2-e7f4-7f9a-2a51-4b1e595ca30b.png)

② 必要な項目を入力。適用ボタンを押下したのち、閉じるボタンを押下する。

|項目|値|備考|
|:--|:--|:--|
|名前|(任意の名前)||
|ゴール|clean package|clean=前回のビルド資材の削除、package=jarの作成|
|パラメーター|skipTest=true|JUnitをスキップしたい場合のみ入力する|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/8ddceb14-e871-64a4-31f0-fcf2e108e203.png)

# ビルド

① パッケージエクスプローラで対象のプロジェクトを右クリック。実行(R)を選択すると、対象のMavenビルドが表示されるので、押下する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/21a43aa3-4dd6-ee92-7dc6-f7e095a797b4.png)

※ 実行(R)を選択しても、対象のMavenビルドが表示されない場合は、実行の構成(N)… を選択。Maven ビルドから対象のMavenビルドを選択し、実行ボタンを押下する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/b690dc70-825e-694c-27fa-a3c670fde3e9.png)


② コンソールログを確認し、BUILD SUCCESSになったことを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/3290113e-8290-6998-65a0-c80ef84bb993.png)


③ targetフォルダ内にjarファイルができたことを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/39c85410-9c35-b1a0-fef9-535bc183c45c.png)

# 環境情報

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/0a084abe-3a97-4624-42d2-11aff40e3b3d.png)
Ruby芸160チャレンジ(#3)0埋めファイルリネーム

## この記事は何
[shellgei160を通じて言語習得 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/learning-via-shellgei160)に参加しています。

書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。

例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160

## 実行環境など
- Docker image: ruby:3.0.2
- 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下に`answer-ruby`ディレクトリを作り、その中に解答となるファイルを作成していきます。

## 今回のテーマ
https://github.com/shellgei/shellgei160/blob/master/answer/3.md

```bash
$ time ls -U | xargs -P2 rename 's/^/0000000/;s/0*([0-9]{7})/$1/'
```

ファイルのリネーム処理の問題です。左から0詰した7桁数値固定のファイル名にリネームします。

あらかじめ`./tmp`ディレクトリ内に`0`、`1`、...`999999`みたいなファイルが作ってあるものとします。

## 解
リネームまですると面倒ですので、旧・新ファイル名を比較表示するにとどめます。

```ruby
files = Dir.glob('.tmp/*')
files.each do |before|
  # formatを使う方法。sprintfも同じ結果を与えそうだが、Linterはformatを推奨している
  after = before.gsub(/\d+/) { |s| format('%07d', s.to_i) }
  # File.rename(before, after)を実行しても良いが、面倒なのでbefore/afterを出力するだけにする
  puts "#{before} -> #{after}"
end
```

## 所感
- gsub(検索パターン) {ブロック} にすると、検索パターンをブロック内の計算結果で置き換え