OmniAICreator/Qiita-1.07M huggingface dataset:
資格でサービスを学ぶ/触るのも一つの手段だよという話

こんにちは、もりかぷです。
今回はAWSを触りたいけど、何から触ったら良いかわからない状態からどう脱却したのか書きたくなったので、勉強方法みたいな話をします。
※資格取得の勉強方法、というよりは初めて触るサービスをどう理解を深めるか、という話をします。

# きっかけ
クラウドとか触ってみたいけど、そもそもクラウドって何？だったり、何から触れば（勉強すれば）いいんだ...と悩んでいたのが去年の12月ごろの話です。

というのも、クラウドなどとはあまり縁のない生活をしていたのですが、AWS re:Invent 2022に行きワークショップなどセッションとかを受けて、あ、もっと触ってみたい、という気持ちが出てきました。

ですが、正直どこから勉強すればいいんだ...というのがちょっとした悩みでした。

# どうする？
AWSのようなクラウドサービスは全部触ることはあまりないと思いますが、数百というサービスがあり、その中にもたくさんの機能があります。

色々と考えた結果、資格勉強をするというのが自分にとって合っているという結論になりました。
（人によってサービスの勉強方法は色々ありますが、今回はこの話をさせてください。）

# なぜ資格勉強？
範囲が広く効率的にサービスに触れられる、というのが個人的な理由です。
特にAWSでは公式でもサードパーティーからも様々なコンテンツが提供されています。

公式だと「[AWS Skill Builder](https://skillbuilder.aws/)」というのがあります。

https://skillbuilder.aws/

一応無料でも、動画による説明だったり[AWS Cloud Quest](https://aws.amazon.com/jp/training/digital/aws-cloud-quest/)のCloud Practionerは無料で受講できます。

https://aws.amazon.com/jp/training/digital/aws-cloud-quest/

「無料でも」、ということは有料もあるの？と気になる方もいらっしゃると思いますが、はい、あります。

https://aws.amazon.com/jp/builders-flash/202307/aws-skill-builder-subscription/

1か月29 USD+税なのですが、このサブスクリプションが結構凄くてLab環境（学習用の一時的な環境）だったり[AWS Jam](https://aws.amazon.com/jp/training/digital/aws-jam/)（問題で指定されたリソースなどを構築していく）が利用可能になります。

資格学習には試験対策本や問題集、公式ドキュメント、動画コースなどといった方法もあるのですが、サービスや機能が多いAWSの場合は実際に触ったり、リソースを作ったりするのがどういった特徴があるのか、どういったオプションがあるのかを丸ごと学ぶことができるため、個人的に一番のおすすめです。

ただ、無料枠があるとはいえ、設定を間違えると課金されたり思いもよらない請求が来たりします。（筆者はやらかしかけました。）

ですが、サブスクリプションで利用できるLab環境（学習用の一時的な環境）では、実際にAWSマネジメントコンソールを触ったりリソースを作ることができ、Lab環境上で作成したリソースに対する追加の課金は発生しません。
（もちろんですが、Lab環境は一時的なものなので作成したリソースは恒久的なものではありません）

そのため、安心してサービスを触りながら学習できるといったメリットがあります。
サービスについて実際に触りながら理解を深めることにより、資格も取得できる（かも？）といったメリットがあるので、資格でサービスを学ぶ/触るのも一つの手段ではないかと考えています。

# 終わりに
実はアドベントカレンダー、1日で2記事登録していましてもう一つの記事で軽く言及しているのですが、実際に触れておくと他の人と会話する時や試験、サービスの設計をするときに「あー、○○はxxのことだな～」と思い出しながらできるので、個人的にはアリだと思っています。

もちろん1からサービスを設計してクラウド上に構築したりするとより身につくのですが、何をしたら良いのかわからないときは、まずは資格勉強をしてみるといいかもしれません。

と、いうことで個人的におすすめのコースを貼って、今回は終わりにしたいと思います。
お読みいただきありがとうございました。

# （おまけ）初学者向けのおすすめコース
Cloud Essentials Learning Plan (Japanese)
AWSの概念だったりを一通り学べるコース。クラウドよくわからん！という場合はまず最初に受けるといいかも。

https://explore.skillbuilder.aws/learn/learning_plan/view/976/cloud-essentials-learning-plan-japanese

（要サブスクリプション）Introduction to AWS Identity and Access Management (IAM) (Japanese)
ユーザだったり、権限管理といったIAM (AWS Identity and Access Management)について学べるコース。

https://explore.skillbuilder.aws/learn/course/internal/view/elearning/7487/Introduction-to-AWS-Identity-and-Access-Management-IAM-Japanese-

（要サブスクリプション）Introduction to Amazon Virtual Private Cloud (VPC) (Japanese)
Amazon VPCと呼ばれる仮想ネットワークを構築するLab環境付コース。

https://explore.skillbuilder.aws/learn/course/internal/view/elearning/7495/Introduction-to-Amazon-Virtual-Private-Cloud-VPC-Japanese-

（要サブスクリプション）Introduction to Amazon EC2 (Japanese)
AWS上に仮想マシンを構築するLab環境付コース。

https://explore.skillbuilder.aws/learn/course/internal/view/elearning/7506/Introduction-to-Amazon-EC2-Japanese-
【Go言語】構造体へのメソッド定義

Goの**構造体**に**メソッドを定義**する際の主要なポイントをまとめる。

### 構造体のメソッド定義
Go言語では、任意の型に**メソッド追加**が可能である。
**構造体**に**メソッドを追加**することで、オブジェクト指向言語のクラスに似た振る舞いを実現できる。

#### サンプル
```go
type Struct struct {
    v int
}

func (s Struct) PrintStatus() {
    log.Println("Struct:", s.v)
}
```

### レシーバーの型
レシーバーの型は**値型**か**ポインター型**にすることができる。
これによって、メソッド内で構造体の状態を変更できるかどうかが決まる。

#### サンプル
```go
package main

import (
    "fmt"
)

// 'Person' 構造体を定義。いくつかのフィールドを含む。
type Person struct {
    Name string
    Age  int
}

// 値レシーバーメソッド：元の構造体を変更しない。
func (p Person) Greet() {
    fmt.Println("こんにちは、私の名前は", p.Name, "です。")
}

// ポインターレシーバーメソッド：元の構造体を変更する。
func (p *Person) Birthday() {
    p.Age++
    fmt.Println("お誕生日おめでとう！私は今", p.Age, "歳です。")
}

func main() {
    // Personのインスタンスを作成
    person := Person{Name: "Alice", Age: 30}

    // Greetメソッドを呼び出す - 値レシーバー
    person.Greet()

    // Birthdayメソッドを呼び出す - ポインターレシーバー
    person.Birthday()

    // 更新されたpersonの状態を表示
    fmt.Println("更新されたperson:", person)
}

```

### 注意点
* レシーバーが値型であっても、構造体のフィールドにポインターが含まれている場合、ポインターが指す実体は変更される。
* レシーバーが値型であっても、構造体のフィールドの値を変更してもエラーにはなりませんが、これは意図しないバグの原因になる可能性がある。

## 参考
https://www.oreilly.co.jp/books/9784873119694/
Reactのドキュメント【UIの記述】の章を読んで知ったこと、改めて認識できたこと7選

Reactの仕様を把握するためにReactのドキュメントを読み直しております。
下記の章を読んで独断と偏見で**覚えておきたい！と思ったポイント**を紹介します！

https://ja.react.dev/learn/describing-the-ui

:::note info
実装経験の浅い私が当たり前の仕様を一覧化した記事です！
Reactの仕様を熟知されている方はそっと記事を閉じてください！
:::

## デフォルトエクスポートと名前付きエクスポート
デフォルトエクスポートの特徴として`import`の後は好きな名前をつけられます。
名前付きエクスポートは、エクスポート側とインポート側の名前が一致しないとエラーになります。

:::note info
上記の理由からデフォルトエクスポートでの実装はなるべく避けた方が良いですし、チームでどちらかに統一することで混乱を避けられると思います！
:::

## JSXとReactは別もの
一緒に扱われることが多いのでReact独自のものと思われている方も多いかもしれませんが、実は単体で使えます。

:::note info
JSX（JavaScript XML）は、Meta社によって開発されたJavaScriptの構文拡張で、JavaScriptファイル内にHTMLのようなコードを記述できるようにするものです。
:::

## ほぼ全てをキャメルケースで記述すること
JavaScriptの変数名は一定の制限があり、ハイフンを含めたり、`class`のような予約語を使えません。

なので`line-height`は`lineHeight`、`class`は`className`を使います！

:::note warn
`aria-*`や`data-*`属性はHTMLと同じようにハイフンをつけて記述します。
:::

`aria-*`や`data-*`属性がハイフン形式で記載される歴史的背景について気になったので調べたので気になる方はご覧ください！

https://qiita.com/tanimoto-hikari/items/357ff68ed60fa6928b7b

## `&&`演算子を使う場合左辺に数字を使わない
左辺が`0`と評価された場合Reactは`0`を表示します。
例えば下記のようなコードの場合`0`が表示されてしまいます。

```react
count && <p>{count}</p>
```

なので数値の場合には、下記のように変更することで想定した表示を実現できます！

```react
count > 0 && <p>{count}</p>
```

## `=>`の次に`{`が続く場合は明示的にreturnを書く必要がある
アロー関数は`=>`の直後の式を自動で返します。
ただ、`{}`を利用してブロック形式にした場合は複数業コートを書けるようになりますが、`return`を書く必要があります！

## `<>...</>`フラグメントでは`key`を渡せない
`map()`などでアイテムを生成する場合一意のアイテムであることを証明するために`key`を定義する必要があります。
フラグメント記法だと`key`を渡すことはできないので`<div>`を利用するか明確な`<Fragment>`構文を利用します。

```react:Fragmentを利用する例
import { Fragment } from 'react'

const listItem = list.map(listItem =>
  <Fragment key={listItem.id}>
    <p>{listItem.text}</p>
  </Fragment>
)
```

### `key`に関する注意点
`key`を利用する際は3つの注意点を覚えておきましょう！

1. `key`はアイテムのindexを利用してはならない
1. `Math.random()`を利用したその場で値を生成するのは避ける
1. `key`はpropsとして受け取らないので、IDを必要とする場合は別のpropsとして渡す必要がある

:::note alert
上2つは、リストの順序が入れ替わったり、再レンダリングされた場合に`key`とアイテムが一致しなくなるバグの原因になるためです…
:::

## StrictModeで純関数ではない計算式を検出する
ReactのStrictModeは関数を2度呼び出します。

:::note info
正しい純関数であれば2度とも同じ結果を返しますが、そうでなかった場合純関数ではないと判断できるわけです！
:::

https://react.dev/learn/keeping-components-pure#where-you-_can_-cause-side-effects

## まとめ
内容はかなり初歩的なものだと思います。
ただ、これまでしっかりドキュメントを読んでこなかったので仕様について深く知る良い機会でした！

:::note info
100％理解できなかったとしても、メインバージョンがアップデートされた時などは一通り目を通すのも良いかもしれないと感じました。
:::

まだ、3つ章が残っているので引き続き読み進めます！
PMFが自家中毒を起こすことを夢想する主観的期待に基づく考察

# 投稿者自己紹介
こんばんわ。
わたしは、山田遍音といいます。
友達はいません。

# PMFとは？
Appleが来季に向けて発表した施策です。
面白すぎて、ドキュメントとWWDC23動画を読み漁りました。
読み進めるほどに疎外感を感じたので、その理由についても、推察しました。
Appleは、骨の髄まで米国企業だからです。
なので、米国主体で記事が書かれており、日本人のわたしは、「蚊帳の外」だとひしひしと実感しながら調査せざるを得ないのです。

# 考察の定義と考察の意義
考察は読んで字の通り。
考えて、察することです。
親孝行の「孝」と似てますが、「考」はちょっと違います。
さっき検索したら、いずれも老人に子どもがよく従う（年長者をいたわる）ような意味の漢字であるようです。
「考」はさらに亡くなった父親という意味もあるそうです。
考察の定義は、再度述べます。
考えて、察することです。
さて、考察の意義は、今回の場合においては、PMFの建前と本音を見分けることにあります。
つまり、考察することで、PMF施行が整った後のAppleの追加方針を予測する手助けができると、わたしは思います。
技術屋に思想家が少ない。
いても、発言力がないか、言葉選びのセンスがない。
わたしは、「自分は発言力はないが言葉選びのセンスはある」と自負しています。
技術屋に考察はあったほうがいい。
あって損する能力ではありません。
学習コスト０です。
習得コストは多少ありそうですね。

## PMFが自家中毒を起こすか？
さて、本題に入りましょう。
PMFが自己中毒を起こすかというのは、結局施策を途中で投げ出すもしくは都合が悪くなってドキュメントをremoveする可能性を説きます。
答えはノーです。
数年前からじわじわ囲い込みを行っていた施策がコケるとは思えません。
しかも世界的大企業ですから。

## PMF自家中毒を夢想する理由
理由は2つあります。
まず、PMF取り組みがわたしの能力を遥かに凌駕する課題だからです。
どうしてもiOSエンジニアとして取り組むと消化しきれない。
UNIXやC言語そのものが読み書きできる人に肩代わりしてもらわないといけないことへの恐れがあります。
もうひとつは、やや前例のない施策だからです。
まるで、ライブラリ一つ一つの仕様書のメインのところだけかっさらおうとしているようにも読みとけるからです。

## 結論
静観しつつ手を動かすのが正解だとして理解しています。
iOS/Androidアプリ開発を行う人は、保険をかけてください。
英語力を身につける、統合開発環境のGUIの学習コストを少し下げる程度の価値はあります。
iOS/Androidアプリ開発はいずれ淘汰されます。
どうぞ基礎学力を向上させてください。

## 追記
PMFの後の施策も推論しました。
おそらくUIやデザイン周りをApple規定のものに厳格に縛ってくるはずです。
それは2025~2027年頃には施行できるでしょう。
PythonとC/C++を使っていて...

## PythonとC/C++を使っていて思ったこと
　pythonとC++をこれまで使ってきて、違っている点や困ったことについてまとめてみました。それぞれの違いを理解することで、各言語の強みや特徴をつかむことができると思っています。

まずは私のそれぞれの言語の使用歴を紹介させてください。
### python歴
　数年前に本を読んで勉強しました。機械学習分野や便利なライブラリを使用するために身につけました。気象庁のホームページからダウンロードできる気象データで天気予報のプログラムなどを作成していました。
　今年に入りE資格を取るにあたり学びなおしをしました。最近は生成AIで簡単にコードを作成してくれるのでかなり効率よく勉強できました。マナビDXQuestでのAIモデル作成課題でもpythonを使用しました。
### C/C++歴
　C++は現在の業務で使用しています。学生時代に作成していたロボットのプログラムはほぼすべて、CやC++でコーディングしていました。
 　今回は、pythonとの比較のため、CとC++を同じくくりとして説明させていただきます。CとC++を同じ言語ととらえている訳ではありませんので、ご了承ください。
 
## それぞれの違いで困ったこと
それでは、本題の２つの言語の違いで困ったことを挙げていきたいと思います。
 ### コメントの違い
 pythonでは、1行限りのコメントには＃を使用します。

  ```python
  # pythonでのコメントです。
  ```

  C++では、//でコメントを表します。
  ```cpp
  // cppでのコメントです。
  ```
この違いは理解していれば、何も問題ありません。しかし、pyhtonにも//が出てくるのです。
```python
ans = 7 // 3 # pythonでは整数の割り算の商を求めるときに使用する。
```
各種エディタでは、シンタックスハイライトという機能で色分けされるため、わかりやすいですが、E資格の勉強で使用した書籍では、色分けされていなかったので//以降をコメントと思ってしまったのです。気づくのに時間を要してしまいました。


### 暗黙の型変換
　pythonでは、便利なことに暗黙の型変換がよく行われます。C++をよく使っていた私にとっては、現在使用している変数の型が何かを理解するのに少し苦戦しました。慣れてくるともう少し便利になるのでしょうか。精進したいと思います。


### 行列の扱い
　E資格の勉強のためpythonをよく使っていたため、ディープラーニングにおける行列計算などがよく出てきました。やはり、機械学習やデータ分析でよく使われるpythonでは行列や配列を簡単に扱えるようなライブラリが多くサポートされていました。C++をでは行列の計算をあまりやらなかったため、理解が不十分だったといえます。

### メモリの管理
　C++の特徴と言えばメモリの制御や管理の柔軟性です。それゆえにメモリの確保や解放も意識しながらコーディングを行っていきます。pythonでは、メモリの管理は自動で行われるため、まったくと言っていいほど意識しませんでした。これも使用言語による違いといっていいでしょう。

## もっと理解を深めていく
　今回挙げた違いを見てみるだけでも、各言語による特徴が表れていました。特にpythonでは、処理が簡略化や省略されていることが多くシンプルに記述できる言語と言えるでしょう。これからも各種言語を使用していくことになるので、もっと理解を深めていきたいと思います。
3年目エンジニアによるコードリーディングのすすめ

## はじめに
私は、3年目のWebアプリ開発者です。
これまで複数プロジェクトを経験する中で、言語・フレームワークの知識であったり、ドメイン知識を理解することの重要性はもちろん実感してきました。

また、それと同時に「コードリーディング」というスキルの重要性も強く感じてきました。
言語や業界問わず、ソフトウェア開発者にとっては必要不可欠なスキルであるとも思います。

最近、同プロジェクト内の新人メンバーが頑張ってコードリーディングをしている姿を見て、私自身の苦労した経験を思い返しました。
そこで、私がコードリーディングの際に意識していることや、得られるメリット、練習方法について、まとめてみました。

## コードリーディングの際に意識していること
### プロジェクト全体像の理解
- **ディレクトリ構成の理解**
いきなりコードを読み始めても良いと思いますが、まさに「木を見て森を見ず」状態だと思うので、まずはディレクトリ構成を確認します。
ディレクトリ構成を見れば採用されているアーキテクチャも何となく分かってくると思います。
私はLaravelで開発することが多いですが、シンプルなMVCなのか、ADRなのか、DDDなのか、とかですね。
- **ドキュメントの読み込み**
タスク管理ツールのWikiやGitHubのREADMEなど、を読み込んで、プロジェクトの目的や概要を理解します。
ドキュメントが整備されていない場合は、先輩に確認します。
- **依存関係の確認**
使用されているライブラリやフレームワークの確認をします。初学者のうちはあんまりやらなくても良いかもしれないです。

### コードの流れの追跡
ある程度プロジェクトの概要が掴めたら、実際にコードを読んでいきます。
- **エントリポイントの特定**
アプリケーションの開始点を見つけて、プログラムの実行フローを追跡します（Laravelの場合は、publicディレクトリ配下のindex.phpになりますね）。
ただし、ルーティング→ミドルウェア→コントローラ→ビューという流れが意識できていれば良いのかなと思います。
- **重要な関数とクラスの分析**
アプリケーションの基盤となるような関数やクラスに着目して、それらの役割や動作を理解します。
- **データフローの追跡**
データがどのように流れ、どこで加工されるのか、を追うことでもシステムの振る舞いの理解に繋がると思います。

### コメントアウトとAPIドキュメントの活用

- **ソースコード内のコメントアウトの理解**
開発者の意図や、特定の実装の理由を理解するために、コメントを読みます。
- **APIドキュメントの活用**
外部ライブラリやフレームワークのAPIドキュメントを参照します。
- **コメントやドキュメントとの照合**
システムの振る舞いに対して、コメントやドキュメントの内容が一致しているか確認し、不一致があればその理由を考えたり、先輩に質問します。

### コードの実行とデバッグ
- **コードの実行**
コードを実行し、期待される動作と実際の動作を比較します。
- **デバッガの活用**
ブレークポイントを設定し、変数の状態や関数の呼び出しをステップごとに追います。
- **ログの分析**
ログ出力を利用して、実行時のコードの挙動を追跡します。

## コードリーディングを通じて得られるメリット
ここまで、方法論をつらつら書き並べましたが、コードリーディングのスキルレベルが上がると、以下のようなメリットがあると思っています。

### 品質向上
システムに潜在している問題点やバグは、少しでも早く特定したいですよね。
変数の誤用だったり、ロジックのエラー、非効率なコードの発見ができるようになると思います。

### プログラミングスキル
他の開発者のコードを読むことで、自分の頭には無かったアプローチを学ぶことができます。
自分のスキルを上げるためには、強い人から学ぶのが手っ取り早いですよね。

### プロジェクトへの深い理解
コードベースでプロジェクトへの理解が深まるので、新規機能開発や既存機能の改修がより効率的に行えるようになります。

### チーム内のコミュニケーションの促進
コードに関する議論や意見交換ができると間違いなく楽しいと思います。
そして、コミュニケーションが活発になれば、チームメンバーからの効果的なフィードバックを受けることにも繋がり、自身のさらなら成長が期待できると思います。

## コードリーディング練習方法
得られるメリットが分かれば、あとは練習あるのみ。
ということで、私が実践してきた内容を以下にまとめました。

### 適切なOSSの選定
各々の使用している言語やコードリーディングのスキルにもよるので、「おすすめのOSSはこれ！」と一概には言えませんが、GitHubやGitLabでスターが多いかつ、コードベースが小さくドキュメントが充実しているプロジェクトが良いのかなと思います。
選んでしまえば、あとはコードを読んでいきましょう。

### コードレビュー会に参加する
他の開発者が行ったコードレビューに参加することでも、学びが得られると思います。

### ペアプログラミング
上記と似ている内容にはなりますが、経験豊富な開発者とペアプロを行うことで、彼らの思考プロセスや問題解決のアプローチを学ぶことにも繋がります。

## おわりに
長い間コードを読んでいれば、誰でも知らず知らずのうちに、コードリーディングのスキルが身に付いているとは思います。
ただ、より早く成長するためにも、本記事が誰かの参考になれば幸いです。
野遊び、しつくせ。JINS キャンプ場店のシステムのお話

この投稿は、2023年JINSのアドベントカレンダー23日目の記事です。

## 自己紹介
JINS ITデジタル部の @SergeMA です。主にJINSの店舗フロント系システムを担当しています。前職ではメーカー系SIerでアプリやシステム開発を行っておりましたが、アプリやハード、データ解析までやれるものは何でもやるっていう性分です。

## 紹介内容
JINSでは店舗のメガネ販売だけでなく、これまでも全国各地、様々な場所で催事を行ったりしています。そして何と今回はキャンプ場。しかも４ヶ所同時開催。Tech記事というよりも、こんな仕事もあるんだ的なシステム対応をメンバーを代表してご紹介します。

## 催事は催事でもキャンプ場？
2023年は、アウトドアでおなじみ株式会社スノーピーク様とJINSのコラボレーション企画第２弾がありました。

https://jinsholdings.com/jp/ja/news/jins_snow-peak2/

そして今回は何と、全国のキャンプフィールド４か所に「JINS キャンプ場店」をOPEN
※ 2023年7月15日～17日に実施

![map_event.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622224/68898771-2b43-605b-bcea-e0ac442ad7b2.png)

https://www.snowpeak.co.jp/news/p20230608-4/


企画段階でシステム相談あり。私も若いとき(笑)は、夏はキャンプ、冬は温泉と色々楽しんできましたが、今やソロキャンプやグランピングと、アウトドアレジャーも新しい形で再燃しています。

で、キャンプ場ってもしかして山の中だったり？電源とネットワーク環境って大丈夫なんだっけ？催事といっても、フツーは都市部で行うがこれまで。
場所はどこだっけ？んー、新潟、福島、長野、北海道… 開催場所とキャリアの通信サービスエリアを確認。ん？ここギリギリじゃん。こんな感じでスタート。

催事店舗では、最低限お会計が行えなければならないですが、今やキャッシュレスの時代。出先でメガネやサングラスを購入する金額を現金で持ち歩いている方は少ないのが現状。なので、現金でザル会計という訳にはいきません。

JINSではiPad上で動く自社POSで直接QR決済を可能にしており、クレジットカード決済はCATを簡易連動させたりもしています。また、領収証や保証書の印刷にはレシートプリンターも必要です（さいあく手書きって方法もあるけれど…）いずれも社内のネットワークに接続するためVPN Clientを使用し接続。機器の電源は当然必須です。

事前に現地に持っていって動作確認すればいいじゃん、って思った矢先、本社の引っ越しや他の催事が重なったりして、機材が他で利用されていて直ぐに調達できないという…
事業部が現地キャンプ場に下見に行き、Snow Peakさんにも協力をいただきながら現地の通信状況を確認。色々とすったもんだありながら各場所のキャリアを選定し、無事不安を解消しました。


## 度付きメガネもその場で提供。移動販売車「JINS GO」
今回、Snow Peak HEADQUARTERS Campfieldには、移動販売車、その名も「JINS GO」が現地に行きました。

この「JINS GO」。2023年1月よりサービスを開始し、現地に赴き、メガネ選びから視力測定、お会計、加工を行うことができ、メガネの当日お渡しを可能にする代物です。

![jins_go.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622224/15d23527-e725-5a61-ced0-b0310e3229dd.png)

https://www.jins.com/jp/jinsgo/

この移動販売車にも機器の電源供給からネットワーク環境、そして１つの店舗として同じシステムが使用可能なように構築されています。

あなたの街で見かけたら、是非立ち寄ってみて下さい。


## まとめ
ITメンバーの中でもキャンプ好きなメンバーは現地に赴き、無事システム障害もなく、「JINS キャンプ場店」を通して出会った人と会話をしながら、商品の魅力を伝えることができたようで何よりでした。

メガネやサングラスが生活に根付いた商品であるからこそ、こういった仕事を支えるシステム構築も、私たち事業会社の大切なITの仕事の一つです。
JSXの中でaria属性やdata属性がキャメルケースではなくケバブケースで記述される理由

Reactの公式ドキュメントを読んでいて気になったので調べてみました。

https://react.dev/learn/writing-markup-with-jsx#3-camelcase-salls-most-of-the-things

## JSXの中で一部属性名がケバブケースで記述される理由

公式ドキュメントに下記のように記載されています。

> 歴史的な理由から、aria-*属性data-*は HTML のようにダッシュを付けて記述されます。

調べてみて下記のようなことがわかりました。

- ケバブケースでの属性名記述はHTML規格であること
- 属性名はASCII文字のみを使用し、大文字と小文字を区別しないこと
- XMLベースの言語と互換性を持つため、ハイフン区切り（kebab-case）を使用していること
- Webページが異なるプラットフォームやデバイス間で一貫して表示されるようにするための規格であること

## まとめ
歴史的背景というのはHTMLの規格のことなのか自信はありませんが、なんとなくそれっぽい答えに辿り着いたので調べたことを理由だと思っておくことにします。

違うよ！ってことであればぜひコメントください！
Database操作#SELECT編

# SELECT文
`SELECT`は`CRUD`における`Read`にあたるもの

### 基本
#### 使用方法
```sql
SELECT column_name FROM table_name;
```
#### 解説
`column_name`：カラム名、データを入れる箱の名前
`table_name`：テーブル名、カラムという箱をたくさん入れた部屋の名前

### 応用
#### 全件取得
ユーザーテーブルから全件を取得
```sql
SELECT * FROM user;
```
#### 複数取得
ユーザーテーブルから名前と年齢を取得
```sql
SELECT name, age FROM user;
```
#### 条件取得
ユーザーテーブルからjohnの年齢と住所を取得
```sql
SELECT age, address FROM user WHERE name = 'john';
```
ペンギンからつよつよエンジニアを学ぶ

## はじめに
　今回はペンギンに関する記事を書きたいと思います。


　イメージとなるペンギンをimage Generaterで作成してもらいました。
![penginpoteto.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3601651/5e207c72-f75a-5373-dc30-5811d3127953.jpeg)

## ペンギンの特徴を知ってみる
まずはペンギンの特徴を挙げていきたいと思います。
- 飛べない鳥
- 水陸両用
- 極地や寒冷地に生息
- 社会性が高い
- 保護色

こんな感じでしょうか。ペンギンの特徴的な白と黒の配色は、水中で捕食者から身を守るための保護色であるらしいです。

## ペンギンの特徴からつよつよエンジニアを知る
　
### 飛べない鳥
　強いエンジニアは、ある専門のスキル高度に特化しています。全ての技術領域に精通することは不可能ですので専門をもっています。あるエンジニアはデータベース管理に長けているかもしれませんが、別のエンジニアはフロントエンド開発に特化しているかもしれません。これはペンギンが飛ぶ能力を持たない代わりに水中での能力を発達させたことに似ています。

　ペンギンが飛べないという「制限」は、水中での優れた能力という「強み」に変換されました。同様に、エンジニアも自分の弱点を認識し、それを補うために他のスキルを磨くことが重要です。たとえば、プログラミングスキルが平均的である場合、プロジェクト管理やチームワークといった他の能力を向上させることができます。

ペンギンが特定の環境に適応するように、エンジニアも特定のニッチな領域や技術に深く専門化することで、その分野で高く評価されるエキスパートになることができます。

### 水陸両用
　ペンギンが水中と陸上の両方で生活できるように、優れたエンジニアは複数の技術分野にまたがるスキルを持ち、異なる環境やプロジェクトに柔軟に適応できる必要があります。例えば、フロントエンド開発だけでなくバックエンド開発のスキルも持つ、またはデータベース管理と同時にネットワークセキュリティにも精通しているなどです。
 　水中と陸上で異なる戦略を取るペンギンのように、エンジニアも様々な問題に対して柔軟かつ適応的なアプローチを取る能力が重要です。異なるプロジェクトや状況において最適なソリューションを見つけることができます。
  
### 極地に生息している
　つよつよエンジニアは技術の急速な進化、高い期待、タイトなスケジュールなど、厳しい業界環境に適応し、その中で成果を出す必要があります。ペンギンが極寒の環境に適応するように、エンジニアも変化する技術の流れや業界のプレッシャーに柔軟に対応する能力が求められます。
 　極地で生きるためにペンギンは特殊なスキルを発達させました。同様に、エンジニアも特定の技術領域や問題解決の技術において独自の専門性を開発することで、競争の激しい業界での地位を確立できます。
　ペンギンが極地の環境に適応しているように、エンジニアも新しい技術、ツール、業界の標準に迅速に適応し、これらを自分の仕事に組み込む能力が重要です。

### 保護色
　ペンギンの保護色が身を守る手段であるように、エンジニアはプロジェクトやシステムのリスクを事前に識別し、予防する能力が必要です。これはセキュリティの強化、データのバックアップ、災害対策計画などを通じて実現されます。
　ペンギンの保護色が目立たない効果をもたらすように、エンジニアも時には裏方としてシステムを支える重要な役割を果たします。表舞台に出ることなく、システムの安定性や効率性を高めることが求められます。

## おわりに
　ペンギンの可愛さとは裏腹に、かなりのスキルをもっていることがわかりました。皆様もつよつよエンジニアになるために、ペンギンさんを見習ってはいかがでしょうか。
AWS CopilotでARM利用時のpipelineのpost_deploymentとpre_deploymentのcopilotコマンド利用時のハマりどころ

この記事は **[リンクバルアドベントカレンダー2023](https://qiita.com/advent-calendar/2023/linkbal)** の20日目の記事です。

昨日は @Thang_TQ さんの記事です！

https://qiita.com/Thang_TQ/items/acad14dbbc0500fc9d5f


## はじめに
AWS Copilotで、ARMのFargate利用時に、Pipelineの `pre_deployment` と `post_deployment` で copilotコマンドを使うことがあり、少しハマったことと解決策を紹介します。


## 前提
ARMのFargateを使う(Serviceのmanifest.ymlの `platform` で `linux/arm64` にしている)場合の話です。

詳細は私の次の記事をご覧ください。

https://qiita.com/kinchiki/items/4331e0ebe43abfd3a24e

とはいえ要点は以下の2点なので、とりあえずこれだけ把握してもらえればOKです。

1. pipelineの manifest.yml で、CodeBuildのイメージにARMのイメージを指定する
1. copilot/pipelines/xxx/buildspec.yml のcopilotコマンドのインストールは、ARM版のURLを指定する


## ハマったことと原因
- `pre_deployment` と `post_deployment` では `build.image` を指定できない（v1.32.1時点）
- そのため、`pre_deployment` と `post_deployment` でcopilotコマンドを使うとき、該当のbuildspecファイルを `copilot/pipelines/xxx/manifest.yml` と同じにしてしまうと、copilotコマンドがエラーになる
    - ARMのcopilotコマンドなのに、x86のCodeBuildが実行しようとするため
        - copilotコマンドをARM版にしている理由は、`前提` に記載した私の記事をご覧ください
- また、AWSマネジメントコンソールやaws-cliで `pre_deployment` や `post_deployment` のCodeBuildのイメージを変えても、`copilot pipeline deploy` すると、イメージがデフォルトの `aws/codebuild/amazonlinux2-x86_64-standard:4.0` に変わってしまう
    - つまり、x86のイメージになってしまう


## 解決方法
**`pre_deployment` と `post_deployment` の CodeBuildのyamlでは、copilotコマンドはx86版を使う**

```sh
# ARMではなく
wget -q https://ecs-cli-v2-release.s3.amazonaws.com/copilot-linux-arm64 -O copilot-linux

# x86をインストールする
wget -q https://ecs-cli-v2-release.s3.amazonaws.com/copilot-linux -O copilot-linux
```

FargateがARMでも、`docker build` が動くコマンドでなければ、ほとんどはx86版のcopilotコマンドでも動きます！

### `copilot run task` をしたい場合
`--platform-arch` というオプションがあるので、そちらを使いましょう！


**以下はすべて2023年12月23日時点です。**

指定できる値は、GitHubのファイルを見てください。
公式ドキュメントで一覧を見つけることは私はできませんでした。

https://github.com/aws/copilot-cli/blob/6baf5b93bf78f3f32ae6cd26bd1150ce08e8a4b9/internal/pkg/template/workload.go

該当箇所のコード

```go:copilot-cli/internal/pkg/template/workload.go
// Constants for workload options.
const (
	// AWS VPC networking configuration.
	EnablePublicIP          = "ENABLED"
	DisablePublicIP         = "DISABLED"
	PublicSubnetsPlacement  = "PublicSubnets"
	PrivateSubnetsPlacement = "PrivateSubnets"

	// RuntimePlatform configuration.
	OSLinux                 = "LINUX"
	OSWindowsServerFull     = OSWindowsServer2019Full // Alias 2019 as Default WindowsSever Full platform.
	OSWindowsServerCore     = OSWindowsServer2019Core // Alias 2019 as Default WindowsSever Core platform.
	OSWindowsServer2019Full = "WINDOWS_SERVER_2019_FULL"
	OSWindowsServer2019Core = "WINDOWS_SERVER_2019_CORE"
	OSWindowsServer2022Full = "WINDOWS_SERVER_2022_FULL"
	OSWindowsServer2022Core = "WINDOWS_SERVER_2022_CORE"

	ArchX86   = "X86_64"
	ArchARM64 = "ARM64"
)
```

いずれコードは変わるでしょうから、上記リンク先に記載が場合は、copilot-cliのリポジトリで `WINDOWS_SERVER_2022_CORE` で検索してみてください！
以下は検索結果のURLです。

https://github.com/search?q=repo%3Aaws%2Fcopilot-cli%20WINDOWS_SERVER_2022_CORE&type=code

## おわりに
ARMを使うとコストは減るが苦労が増える・・・
Pythonで家計予算自動配分プログラムを作ってみる

# はじめに

　毎月入ってくる給与をもとに、自動で予算配分を行なってくれるプログラムを作ってみました。
　自分で計算するのは面倒だけど、Pythonの計算なら簡単！

↓ 元ネタはこちらのUdemy講座　2日目の内容です。

https://www.udemy.com/course/100-days-of-code/

# Pythonで家計予算自動配分プログラムを作ってみる

## 一般的な家計予算の配分を調べる

>2022年の単身世帯・民営借家の生活費は、平均178,138円でした。割合の多い項目順では住居費（家賃）が約30％、食費が約20%となっており、その他（交際費など）が約12%、交通・通信費、娯楽費が約10%です。

https://www.bk.mufg.jp/column/others/b0050.html

整理すると…

* 住宅費　→30%
* 食費　→20%
* その他（交際費）　→12%
* 交通・通信費　→10%
* 娯楽費　→10%

## コード

:::note info
家賃は地域によって相場の変動がありそうなので、入力式にしました！
:::

### その月の給与と家賃を入力すると、各費目の予算配分と貯金額が表示される

~~~Python
print("お仕事お疲れ様でした！　予算配分をしましょう！")
print("先月の給与を教えてください。")
salary = int(input())
print("家賃（月額）を教えてください")
rent = int(input())

food = int(salary * 0.2) # 食費
communication = int(salary * 0.12) # 交際費
transportation = int(salary *0.1) # 交通費
hobbys = int(salary *0.1) # 娯楽費
savings = int(salary - (rent + food +communication + transportation + hobbys)) # 貯金（給与から各費目を差し引き）

# 出力
print("ご入力ありがとうございます！\n")
print(f"今月の予算配分は\n家賃　：{rent:,}円\n食費　：{food:,}円\n交際費：{communication:,}円\n交通費：{transportation:,}円\n娯楽費：{hobbys:,}円\n貯金　：{savings:,}円\nです！" )
print("今月も頑張りましょうね！")

~~~

### 出力イメージ

#### パターン1（給与：180,000円、家賃60,000円）

>お仕事お疲れ様でした！　予算配分をしましょう！
先月の給与を教えてください。
180000
家賃（月額）を教えてください
60000

>ご入力ありがとうございます！
今月の予算配分は
家賃　：60,000円
食費　：36,000円
交際費：21,600円
交通費：18,000円
娯楽費：18,000円
貯金　：26,400円
です！
今月も頑張りましょうね！

#### パターン2（給与：210,000円、家賃70,000円）

>お仕事お疲れ様でした！　予算配分をしましょう！
先月の給与を教えてください。
210000
家賃（月額）を教えてください
70000

>ご入力ありがとうございます！
今月の予算配分は
家賃　：70,000円
食費　：42,000円
交際費：25,200円
交通費：21,000円
娯楽費：21,000円
貯金　：30,800円
です！
今月も頑張りましょうね！

# まとめ

　簡単な計算を組み合わせただけですが、いろいろできて面白いです！

　実はGUIも挑戦してみたくて、tkinter版もうんうん唸りながら今作っているので、別の記事で書きたいと思います！

:::note info
書きました！　が、まだ計算結果の表示が未実装です…。
:::

 https://qiita.com/awonohata/items/e2797a8e4f8ea5e8ef9d

 将来的には金融庁のこんなWEBアプリみたいなものも作ってみたいですね！　美しいです。

 https://www.fsa.go.jp/teach/simulation/household_spending.html
RumiCarとは!?

![RumiCarロゴ](https://www.rumicar.com/wp-content/uploads/2020/08/IMG_0184.png "RumiCarロゴ")

RumiCarのプロジェクトオーナーの千葉　瑠実佳と申します。

アドベントカレンダーへの参加を提案してくださった方、ありがとうございます。

(自分向けの備忘録以外では)初めて公にQiitaを書きます。

今までメモ程度にしかQuiitaで記事を書いたことがないため、見た目がシンプルすぎるかもしれませんが、よろしくお願いします！

私は10年前にRumiCarというプロジェクトを立ち上げてから今に至るまで活動しています。

# RumiCarとは
RumiCarの目標は、「誰もが自動運転の開発ができるようにする」ことです。

RumiCarでは主に、ラジコンを基にした小さな自動運転車で、自動運転の開発ができるようにしています。

以下は5分で分かる、RumiCarの紹介動画です。
もしかすると、この記事よりピンと来ると思うので、是非ご覧ください。
[![RumiCar紹介動画](http://img.youtube.com/vi/DxaY2eCzJzo/0.jpg)](https://www.youtube.com/watch?v=DxaY2eCzJzo "RumiCar紹介動画")

公道での自動運転車の試験走行は大変です。
しかし、RumiCarであればオフィスや自宅の中でも自動運転の試験が可能です。
小さい自動運転であれば、壁に衝突したとしても大丈夫です。

RumiCarを使うことで自動運転に携わる人が増え、自動運転の実現ができると思います。
自動運転の開発をしている企業や学校に勤めていなくても、専門知識がなくても、手軽に自動運転を始めることができます。

今までRumiCarは様々な機関や企業にも、採用されています。
株式会社R2さんとRumiCarでは自動運転の遠隔監視・操作に必要な通信の共同開発をしています。
以下はそれに関するプレスリリースです。
https://newsrelea.se/w5pxYd

また、トヨタ技術会様にはRumiCarを50台購入していただきました。
2023年の7月から12月のわくわくワールドに向けて、トヨタ技術会の方が発明クラブの小学6年生たちに、RumiCarでのプログラムを教えました。
https://autonomous-minicar-battle.studio.site/dev-2

本番である、わくわくワールドに向けた活動の動画は以下です。
子供たちが粘土で装飾したRumiCarの車体が映っています。
[![RumiCar紹介動画](http://img.youtube.com/vi/KIfhfMIYbKE/0.jpg)](https://www.youtube.com/watch?v=KIfhfMIYbKE "RumiCar紹介動画")

# RumiCar関連メディア
RumiCarのプログラム、車体の組み立て方やなどはGitHubに公開されています。
ここに公開されている情報や知識は、誰でも自由に利用することができます。

もしRumiCar Facebook groupへのご参加がまだでしたら、是非ご参加ください。
2023年12月現在では、400人以上のメンバーが参加しています。
こちらで質問や自動運転に関するディスカッションを自由にできます。

YouTubeチャンネルにはRumiCarに限らず自動運転のイベントや試乗の動画もあります。
チャンネル登録とイイねもお願いします。

- YouTube: https://m.youtube.com/c/RumiCar
- Facebook: https://www.facebook.com/groups/rumicar
- GitHub: https://github.com/RumiCar-group/RumiCar
- Event page: https://rumicar.connpass.com
- Website: https://www.rumicar.com

# 最後に
RumiCarに関わりたい人を募集しています。
プログラミング、基板、イベント運営などのボランティアを募集しています。
一緒にRumiCarしませんか？

それでは、メリークリスマス！

![RumiCar写真](https://www.rumicar.com/wp-content/uploads/2020/05/rumicar_logo.jpg "RumiCar写真")
［クソアプリ］ダイエットの進捗を要求してくる鬼教官（LINE bot）


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

## （２回目だけど）毎年やってしまうギリギリに作るクソ野郎
去年もギリギリに作って、次はUnityで！とか宣言しておきながら1年間あったのに結局当日までグズグズして作らずに簡易なものに逃げてしまうクソアプリもといクソ野郎が私です。はい、追い詰められないと手を動かさないので反論ありません。。。


# 今回作ったもの
### ダイエットの進捗を要求してくる鬼教官（LINE bot）
という事で、万年ダイエッターでもある私ですが、リマインダーがあれば少しはやるキッカケになるんじゃないかなという事で、以前に参加したLINE API x chatGPTの遺産を使った省エネで今回対応することにしました。（来年ちゃんとやります。多分。きっと。）

## どんなことをするアプリで、どうやって実装したか
機能としては
1. 定期的に進捗を聞いてくる
1. 返事をしなかったら追いLINEをしてくる
1. 進捗の報告をしているのにどうでもいい情報を伝えてくる（クソポイント）

実装は
- LINEでメッセージを送るとGASが動いてスプシにやり取りを記録する
- chatGPTが過去のやり取りを見て鬼教官とどうでもいい情報を伝える
- botからのLINEメッセージはGASのタイマーを使う

という感じです。

## 動きのイメージ
（今回用に通知は手動で送ってますが、通常はGASのトリガーを使っています）

https://youtu.be/8R3V3ZA9u6g



## 最後に
2024年2月にスパルタンレースに出場するので、このbotと共に痩せたいと思います。
https://spartanracejapan.jp/

botからの通知はLINE IDを事前取得して指定しているのですが、本当はやり取りの中で
・botからの通知ON/OFF
・通知の送信間隔

とかを制御できたらと思ってましたがタイムアップしました。
そこまで出来たら公開してもいいかなとは・・・　とはいえLINE ID取得しちゃうのでお遊びとはいえプラポリてきにどうかなと。

スパルタンレースのUnityゲーム作ろうかな・・・きっとやらない。

保護動物のお世話しながら個人開発でいろいろ遊ぶ世界線に早く行けるように2024年も頑張ります。

2023年もクソアプリアドベントカレンダーに参加できてよかったです！！
LambdaとSNSで日本語の通知メールを送る

# はじめに
CloudWatchLogsに転送しているログの中に特定の文字列が含まれている場合、
予め用意された日本語の件名・文言で通知メールを送信したいという要件があり、
今回はLambdaとSNSで実装した例をご紹介したいと思います。
主にメインの機能を担うLambda関数のコード(Python)解説になります。

# 構成図
![Qiita_Japanese_SNS.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740559/6898958f-0090-0085-c797-6b44783d0c20.png)

# 作成手順
必要な作業は下記の通りになります。

1. SNS設定
 1-1. トピック作成
 1-2. サブスクリプション作成

2. Lambda関数作成
 2-1. Lambda関数用IAMロール作成
 2-2. Lambda関数・コード作成

 3. CloudWatch Logs サブスクリプション設定
  3-1. 検出する文字列指定&検出したら起動するLambda関数の設定


今回はLambda関数のコードを解説します。
その他の詳細な手順については、省略します。

```python
from __future__ import print_function

import base64
import json
import zlib
import boto3

sns = boto3.client('sns')

print('Loading function')

def lambda_handler(event, context):
    #CloudWatchLogsから連携されたJSONをデコード&展開
    data = zlib.decompress(base64.b64decode(event['awslogs']['data']), 16+zlib.MAX_WBITS)
    data_json = json.loads(data)
    log_json = json.loads(json.dumps(data_json["logEvents"][0], ensure_ascii=False))
    log_message = log_json['message']
    
    #検知文字列を含むログの内容をprint
    print(log_message)
    
    #SNSトピック設定
    topic = '{SNSトピックのARNを指定する}'
    
    #メール本文・件名の設定 & 宛先のSNSトピックの指定
    message = "運用担当者様各位" + "\n" + "\n"
    message = message + "なんか検知したよ"
        response = sns.publish(
            TopicArn=topic,
            Message = message,
            Subject="がんばって対応してね※自動送信"
        )  
```

messageにメール本文の文言を設定します。
"\n"は改行コードです。
Subjectに件名を設定します。
冒頭のデコード&展開はメール本文にログを記載する必要がなければ、不要です。
今回の場合も不要ですが、デバッグ用にLambdaのログに吐くようにしています。

# 実際に届く通知メール
![Qiita_sns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740559/7ee0b73f-0478-b9ba-5e1e-ac17435f2da6.png)

上記Lambda関数を実行したら、この通知メールが届きます。
件名とメール本文に、Lambda関数のコード内で指定した文言が記載されています。

# さいごに
通知メールなので、SESは使わずにSNSで実現したいと思ったものの、
任意の日本語の文言を件名・本文に設定できるのかわからず、検証してみたら可能でした。
ログをそのまま貼り付けただけだと、わかりにくい場合が多いと思うので、
既知のエラーであれば、通知メールに対応手順資料のリンク等が記載されていると、
すごく運用フレンドリーな通知メールになるなぁ、なんてことも思いました。
ご参考になれば幸いです。
Raspberry Pi Zero 2 W と morse コマンドで、モールス信号クリスマス

# led デバイスノードは奥が深い

FreeBSD Advent Calendar 2023 一日目の記事で最後に Raspberry Pi Zero W のオンボードの LED を点滅させてみました。

https://qiita.com/s_mitu/items/96f3b28dacdac90de5b6

オンボードの LED は /dev/led/ACT デバイスノードに対して

```sh
# echo 1 > /dev/led/ACT (点灯)
# echo 0 > /dev/led/ACT (消灯)
```

という形で使用しました。
しかしこの led デバイスノードは実は奥が深く、もっと複雑な指定をすることが可能です。led デバイスノードは Raspberry Pi 以外の環境でも使えたりします。以下の説明は led デバイスノードが見えていれば他の環境でも同様ですのでデバイスノードが生えてたら試してみてください。
詳しい使い方は man 4 led に書いてありますが、かいつまんで紹介してみます。

# 具体的な点滅指定法

例えば、

```sh
# echo f1 > /dev/led/ACT
```

と指定すると、1/10 = 0.1 秒でLEDが点滅するようになります。

この f1 を f2 とすると 2/10 = 0.2 秒、f5とすると 5/10 = 0.5 秒というふうに数字の分だけ点滅間隔が長くなります。

無限に繰り返されるので、停止する場合は 

```
echo 0 > /dev/led/ACT
```
とすれば消灯します。

さらに複雑なパターンの点滅は、文字列で指定します。

```
echo s(A-Ja-jのアルファベット)
```

というふうに s から始まる文字列を指定すると、1/10 秒単位で点灯と消灯のパターンを複雑に指定することができます。
大文字 A-J はそれぞれ 1/10 秒間〜 10/10=1 秒間の点灯を指示します。小文字は逆に消灯です。
なので、

```sh
echo sCaJe > /dev/led/ACT
```

と指定すると
<pre>
C=3/10秒点灯 a=1/10秒消灯 J=10/10秒点灯 e=5/10秒消灯
</pre>
を繰り返します。

# モールス信号出力

さらに

```sh
echo 'm(モールス符号)' > /dev/led/ACT
```

で、モールス符号形式を指定することで、LEDでモールス信号を出力することができます。モールス信号は、いにしえの無線や船舶の信号灯などで使用された例の「トンツー」通信です。
"." が短い点滅、 " _ " が長い点滅("."の三倍)で、この２つの符号の組み合わせでアルファベット(A = ._ B= _...)等を表現します。和文モールスもありますが led(4)では対応していません。

[モールス符号について(Wikipedia)](https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%BC%E3%83%AB%E3%82%B9%E7%AC%A6%E5%8F%B7)

これを使えば文字列をモールス信号化できるわけですが、そのためには文字列をモールス符号に変換する必要があります。無線ガチ勢のように符号を覚えている人は楽勝でしょうが、私のように一個も覚えてないような人間にはむずかしいです。
ところが、FreeBSD には標準で /usr/bin/morse という英文をモールス符号に変換してくれるコマンドが存在します。-l オプションを渡せば led デバイスノードが解釈できる m〜 形式の文字列を作成できます。

```
# echo "Merry Christmas" | morse -l 
m-- . .-. .-. -.-- 
-.-. .... .-. .. ... - -- .- ... 
```

実際にコマンドでモールス信号をLEDに出力する動画です。Raspberry Pi Zero 2 W をシリアルコンソール接続でコマンド実行しています。

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

モールス信号わかるならエラーメッセージをモールス信号にすれば画面無しでトラブル状況がわかるなんで使い方ができるかもしれません。
と、まぁここまでやってなんですが、モールス良くわからん勢なので、ちゃんと読める信号が出ているのかよくわからんです...。
maya で円形の位置を取りたい

mayaでちょっと円形に物を配置したくなりまして・・・・

過去にそんなようなツールは作ったんですけども
どこに行ったかなぁ・・・・

(highend3Dとかで放流してた気がするのですが～　こんどHDDを漁ってみよう


雑に考える
-
円形に配置したいので
円を定義して
円周上の位置を取ればいいんでしょー？

雑すぎるのでもう少し正しく


- 円を定義するために、中心と半径が必要
- スタート位置となる円周上の点を定義する
- スタート位置から配置数分-1だけ回転させて位置を取得していく

とかまぁそんなかんじか？

円と言いつつも、
どちらかというと多角形を作るイメージでやった方がよさそう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/9cf9a66a-51d1-6ce8-75c6-2cdeddd9b098.png)


雑に実装
-

ベクトルABをx度回転させる。
ベクトルを回転させるには〜

https://help.autodesk.com/view/MAYAUL/2022/JPN/?guid=Maya_SDK_py_ref_class_open_maya_1_1_m_vector_html

>MVector.rotateBy(rot)

これでできそう
rotは　クォタニオンの値を入れれば良いようなのでそれも用意する。

```python
import maya.api.OpenMaya as om2
import math

def generateCirclePoints(centerPoint,startPoint,num,axis = om2.MVector.kYaxisVector
):
    centerPosition = cmds.xform(centerPoint, q =True,ws =True, t =True)
    startPosition = cmds.xform(startPoint, q =True,ws =True, t =True)
    
    #quat用回転軸ベクトル
    pointMatrix = om2.MMatrix(cmds.getAttr(centerPoint + ".worldMatrix[0]"))
    rotAxis = om2.MTransformationMatrix(pointMatrix).setTranslation(axis,om2.MSpace.kObject).translation(om2.MSpace.kWorld)
    
    #1回あたりの回転値
    degStep = 360.0 / num
    
    centerPosVector = om2.MVector(centerPosition)
    startPosVector = om2.MVector(startPosition)
    startVector = om2.MVector(startPosition) - om2.MVector(centerPosition)
    radStep = math.radians(degStep)
    onCirclePoints = []
        
    for i in range(0, num):    
        if i != 0:
            radStep = math.radians(degStep*i)
            nextVector = startVector.rotateBy(om2.MQuaternion(radStep, rotAxis))
            nextPosition =  nextVector + centerPosVector
    
        else:
            #スタート位置
            nextPosition = startPosition
        
        #とりあえず見やすくjointを生成
        node = cmds.createNode("joint")
        cmds.xform(node, ws = True, t = nextPosition)

centerPoint = "centerPos"
startPoint = "startPos"
axis = om2.MVector.kYaxisVector
num = 35
generateCirclePoints(centerPoint,startPoint,num,axis)
```

さてこんな感じで実行すると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/0d103623-4d50-d0bd-c377-41b74884ac99.png)

こんなかんじですかね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/8a3d093f-7e93-7ebb-6609-d030d87a6f6c.png)
青い空を見上げればいつもそこに白い猫

<!--
2023/12/23
-->
[picoCTF][Forensics][Milkslap]
[picoCTF][Forensics][advanced-potion-making]


## Writeup1
* とりあえずソースコードを確認しても、よく分からない。
`js` `css`を確認して、入手できそうなファイルをダウンロード。
![screenshot 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/90d5cfcc-f500-7eec-6214-9ed2f7232063.png)
![screenshot 6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/a08e99eb-1a12-480c-7d71-5f5c321d5901.png)
<br>

* 青い空を見上げればいつもそこに白い猫
ファイルを読み込んで、ステガノグラフィー解析
![screenshot 4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/0587304c-d9d4-dcff-e22d-f8cb37c4d93a.png)
<br>

* ビット抽出すると、`青色　ビット0抽出`を実施。
画像が見えなくなり、データが表示されているのを確認。
![screenshot 8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/483f020f-396e-24b3-ec88-05b3e9aed846.png)
<br>

* `青色`の`0ビット`のみを表示。
![screenshot 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/8e6abb1c-a4e9-278a-92fd-f1a6056acfa4.png)
<br>

* 以上です。

# 参考情報
* 他のWriteupを見ると`zsteg`で解けるみたい。

https://picoctf2021.haydenhousen.com/forensics/milkslap

<br>

## Writeup2
* `file`コマンドで`data`との結果なので、バイナリを確認
![screenshot 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/18bb6cd7-1aed-8b00-7d75-6f1c86d62181.png)
<br>

* PNGファイルっぽいので、データの書き換えを実施
真っ赤になりました。
![screenshot 10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/194406d5-7cd4-682f-4290-eff3b831c965.png)
![screenshot 11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/19f41e2c-5fa1-b385-6848-c8e586752f68.png)
<br>

* [青い空を見上げればいつもそこに白い猫]でステガノグラフィー解析を実施
![screenshot 12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/81a04ca8-4e9d-0171-4f43-8628bda34f5b.png)
<br>

* 以上です。

## 参考情報
https://qiita.com/spc_ehara/items/c748ec636283df805926
WSUS関連のリンク

# UUP対応

WSUSでクライアントにそもそもインストールできない場合やダウンロードで止まってしまう場合、MIMEが追加されていない場合がある

https://learn.microsoft.com/ja-jp/windows-server/administration/windows-server-update-services/plan/plan-your-wsus-deployment#uup-considerations

- 
https://jpmem.github.io/blog/wsus/2019-04-16_01/

https://learn.microsoft.com/ja-jp/windows-server/administration/windows-server-update-services/deploy/4-configure-group-policy-settings-for-automatic-updates

https://learn.microsoft.com/ja-jp/windows/deployment/update/waas-wu-settings


- 自動更新停止

https://jpmem.github.io/blog/wsus/2017-09-08_01/

https://jpmem.github.io/blog/mecm/20230220_01/

https://learn.microsoft.com/ja-jp/windows/privacy/manage-connections-from-windows-operating-system-components-to-microsoft-services#29-windows-update

- Windows11で見直しが必要な点

https://techcommunity.microsoft.com/t5/windows-it-pro-blog/the-windows-update-policies-you-should-set-and-why/ba-p/3270914

https://techcommunity.microsoft.com/t5/windows-it-pro-blog/why-you-shouldn-t-set-these-25-windows-policies/ba-p/3066178

https://learn.microsoft.com/ja-jp/windows/deployment/update/wufb-wsus

- デュアルスキャン
Win11でデュアルスキャン設定していると動作不具合になるらしい

https://jpmem.github.io/blog/mecm/20231102_02/

https://zenn.dev/8chikuwa3/articles/9fefd6883b12d1

https://a-zs.net/mcm-win11-updateerror/

https://patchtuesday.com/blog/critical-patches/windows-11-fails-to-detect-updates-after-julys-cumulative-update/

- 配信の最適化

配信の最適化は使用しないので、ダウンロードモードに「簡易 (99)」を指定

https://learn.microsoft.com/ja-jp/windows/deployment/do/waas-delivery-optimization-reference

https://learn.microsoft.com/ja-jp/windows/deployment/do/waas-delivery-optimization-reference

https://jpwinsup.github.io/blog/2022/02/28/WindowsUpdate/DO/AboutDO_1/

https://jpwinsup.github.io/blog/2022/02/28/WindowsUpdate/DO/AboutDO_2/

- LEDBAT
 
https://techcommunity.microsoft.com/t5/networking-blog/ledbat-background-data-transfer-for-windows/ba-p/3639278

https://techcommunity.microsoft.com/t5/networking-blog/support-for-ledbat-public-service-announcement/ba-p/339796

https://techcommunity.microsoft.com/t5/networking-blog/tcp-templates-for-windows-server-2019-8211-how-to-tune-your/ba-p/339795
25日間のまとめ -OpenChain Japan Advent Calendar 2023-

こんにちは！
昨日に続き、3度目の登場の遠藤です。
今年のアドベントカレンダーもいよいよ最終日です。
そこで、本日はこの25日のまとめをやっていきたいと思います。
![IMG_3589.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537313/de1f863f-4098-ad3a-69b1-f4f14b9aebbb.jpeg)

# 生成AIの衝撃
なんといっても2023年のテック業界のキーワードは生成AI（GAI）でしょう。
その可能性についてはここで語るまでもありませんが、そのポテンシャルの高さがゆえにビジネス活用時の課題などもたくさん出てきており、まさに過渡期という感じです。
OSSのライセンスコンプライアンスに関わる課題も出てきているので引き続き私たちも注目していきたいと思います。
[生成AIの知財リスク](https://qiita.com/MasatoENDO/items/c482dde9216385f3dba4)
[生成AIにおけるライセンスリスク及びセキュリティリスク](https://qiita.com/youhMO/items/cda6efc284e171f58230)
[生成AI活用に伴うリスクを軽減するTips](https://qiita.com/AyumiWatanabe/items/4685a1130fa8577e6dca)

# 引き続きトレンドのSBOM & OSPO
昨年から引き続き今年もSBOMやOSPOについては非常にホットでした。
SBOM(Software Bill Of Materials)の主要フォーマットの一つであるSPDXがメジャーアップデートということで、私たちOpenChain Japan WGの貢献も含めて紹介しています。
[SPDX v3.0 概要と仕様の理解](https://qiita.com/nori0428/items/8c2485b2585e4800fc1a)
[SPDX v3.0 に向けた Lite Profile の紹介](https://qiita.com/Yoshiyuki_Ito/items/36187ca5616c22e1b176)
[標準SBOMフォーマットについての解説](https://qiita.com/AyumiWatanabe/items/52bb71d5cecad1614851)
<br>
また、SBOMはライセンスコンプライアンスだけでなく、セキュリティ的な文脈でも非常に重要なものになってきており、各国政府の動きも見逃せないものになってきています。
[SBOM - リスクマネジメントからその先へ- (OWS2023から)](https://qiita.com/TakashiNinjouji/items/4e6db373f4988e495c02)
[サイバーレジリエンス法（CRA:Cyber Resilience Act）の概要](https://qiita.com/sekiguchi_ta/items/ac2432387e98845782e1)
[経産省のSBOM導入に関する手引きについて](https://qiita.com/AyumiWatanabe/items/e8414a2f35dca2b4b956)
<br>
OSPO(Open Source Program Office)についても少しづつではありますが、日本企業での設置例が増えてきており、コロナが落ち着いてきたこともあって国内のコミュニティ活動が活発になってきました。
[OSPO SWG(第2週)の紹介](https://qiita.com/hiromotai7/items/68f5f8f64e0e01b9b60f)
[OSPO SWG(第4週)の紹介](https://qiita.com/owada-k/items/017d1b98d0e437766bd0)
OSPOについては、2024年に新たな連載企画なども計画しているのでお楽しみに！

# 最後に
このほかにも、17日から23日は最近行われたイベントをライブ感を持って紹介してますので要注目です！
今年のアドベントカレンダーも様々なトピックで25日間走りぬくことができました。
執筆者の皆様、コミュニティの皆様そして読者の皆様本当にありがとうございました！
来年もここで皆様にお会いできることを楽しみにしています。
良いお年を！

# English Summury
Notable new topics this year were related to generative AI.
Also, interest in SBOM and OSPO continues to grow in Japan, as it did last year.
In addition to this, from the 17th to the 23rd, we also provided preliminary reports on recent events, please check out！
This year's Advent Calendar also ran for 25 days with a variety of topics.
Thank you to all of our authors, our community, and our readers.
We look forward to seeing you here again next year.
Have a Happy New Year!
Rubyの学習について

# はじめに
こんにちは、最近プログラミング学習をガッツリとやり始めた人です。
まだ、学んだ言語はRuby,HTML,CSS,JavaScriptぐらいですが、これからもっとできることを増やしていきたいなと思います。
さて、直近2週間はRubyを学んだので、今日はRubyについて記事を書いていきます。
Rubyを学習する上で大変になりそうなことがオブジェクト指向なのでそれについて書いていきます。

# オブジェクト指向について
オブジェクト指向とは、コードを一つずつ書いていくみたいなニュアンスです。
Rubyでコードを書く上で、一番難しかったのが、オブジェクト指向です。
オブジェクト指向には4大要素があります。（自分が勝手に呼んでいる）それが、
1\.カプセル化（クラス）
2\.継承
3\.ポリモーフィズム
4\.単一責任の原則

## カプセル化（クラス）
カプセル化とは、オブジェクトの情報などを特定の場合にしか使えなくすることで、悪質な操作などを、できなくする仕組みのことです。これを隠匿化といいます。

## 継承
継承とは作ったクラスを引き継いで、新たに、クラスを作ることを言います。これをすると、複数の同じ操作をするクラスなどがあった場合に、2回も同じコードを書く必要がなくなる便利なものです。（難しいけど）

## ポリモーフィズム
ポリもーフィズムとは、汎用的に使えるようにしようねというものです。例えば、ブラックジャックゲームで"あなたの得点は〜〜です"みたいな感じで書くのではなく、"#{name}の得点は〜〜です"のように、名前を変数でおいたりして、いつでも変えられるような仕組みを作ることを言います。

## 単一責任の原則
単一責任の原則とは、一つのメソッドやクラスには、一つの役割を入れるというやつです。例えば、ブラックジャックゲームでは、カードのクラス、トランプの山札のクラス、プレイヤーやディーラーのクラス、などなど、クラス一つに付き一つの役割を入れることを言います。

## Rubyを学習する人へのアドバイス
Rubyで実際にコードを書いてみて思ったのがオブジェクト指向はめっちゃ大事です。
これを無視して書いていると、機能の追加や仕様の変更があったときに、まじで苦労します。自分は、オブジェクト指向をガン無視して書いた結果、コードを書いては消し、書いては消し、を繰り返していたので、動画やwebの記事を見て、大体のイメージをしてから取り組んだほうがいいです。

## さいごに
なんか、Rubyの学習について書くつもりが、ほとんどオブジェクト指向についての記事になってしまいましたが、それだけ大事で、学んでいて印象深いことだったと今になって思います。
最後に、ここまで記事を呼んでくださってありがとうございます。記事を書くのは初めてですが、これからも、学んだことがあれば、記事を書いていきたいと思います。
ohsome「OSM Quality Analyses」機能の紹介とOSM日本の建物数統計2023

今回もハイデルベルグ大学が提供する[ohsomeのダッシュボード](https://dashboard.ohsome.org/#backend=oqtApi&topic=building-count&indicators=mapping-saturation)を感謝とともに利用させてもらいます。今年リリースされた下記「OSM Quality Analyses」機能で建物の統計を拾ってみました。

![](https://i.imgur.com/wafT4v2.jpg)
出典：ohsome DASHBOARD Easy access to OSM History and Quality Analyses

マップ上で対象エリアを指定し（エリアをクリック後、選択されるまでやや時間が掛かるので気長にお待ち下さい）「Topic」で統計を取る対象物を指定し「Completeness（コンプリート率）」、「Currentness（最新性）」のいずれを分析するかを選びます。ここでは建物件数を指定し、両方を分析するように選んでいます。

「Run Query」ボタンでクエリーが走り、しばらく経つと下部にそのエリアの集計・分析結果が表示されます。
![](https://i.imgur.com/7v4aLYc.jpg)
出典：ohsome DASHBOARD Easy access to OSM History and Quality Analyses
## Mapping Saturation (マッピング飽和度)
飽和曲線というのか[成長曲線](http://www.kogures.com/hitoshi/webtext/stat-seicho-kyokusen/)というのかよく分かっていませんが、マッッピングが時系列で栄枯盛衰的に進展していく様をS字カーブの曲線モデルにあてはめて、現在どの段階にあるか、最終的には伸び率がゼロに近づいて飽和する見通しはどうか、といった内容を可視化しようとしているもののように思えました。（違っていたらご指摘を）

上記左側の日本全国の折れ線グラフでは（マウスカーソルを近づけると数字が読み取れます）以下のような結果でした。
・2023/11現在のOSMから抽出した建物数：20,729,330件
・ツールが見積もった建物総数：23,413,610件
・S字カーブから読み取れる直近3年の飽和率：72.53%

この数字を元にすると、日本全国の建物のコンプリート率は
20,729,330÷23,413,610✕100=88.5%
となりますが、個人的にはまだまだマッピングされていない建物は多いと感じているので少し違和感のある数字です。

調べてみると[2016年現在の日本の建物数が3千9百万件](https://www.zenrin-ms.co.jp/blog/2017/002/)という調査がありました。仮に4千万件を基準にすると
20,729,330÷40,000,000✕100=51.8%
となり、実感と近いと思えるため、以後コンプリート率はこちらを基準に計算してみます。

## Currentness (最新性)
こちらは対象の地物がどれだけ更新されているかの目安を示すものです。上記右側の棒グラフの緑の部分が直近の3年間で追加・更新されたものでその割合が高いほどデータの鮮度が高いということになります。

棒グラフ上部の解説部分に直近の3年間での更新率が35%と書かれています。covid-19と重なる時期に約1/3の建物が新しくなったということになります。

ちなみに[以前の記事](https://qiita.com/higa4/items/7d44c4090a71aa9656a8)では2016年時点での建物マッピング数は日本全国で約490万件とあり、7年間で4倍に増えています。いつまでたってもゴールの見えない感のあった建物マッピングですが、折り返し点に来たということは言えるんじゃないでしょうか。

## 都道府県別の比較
![](https://i.imgur.com/GGyxBb6.jpg)
![](https://i.imgur.com/QRu9k3q.jpg)
都道府県によりかなり特徴が異なっています。みなさまの地元はいかがでしょうか。実感に近い数字でしょうか。それとも。。
スプレッドシートは[こちら](https://docs.google.com/spreadsheets/d/1tyN-y8abUB9UP5qLQ3ujOKw4eGzyZpUf27ofpt1lI38/edit?usp=sharing)に置いてありますので分析してみたい方はご自由にお使いください。

## さいごに
このS字曲線での飽和率の考え方がもし[ロジスティック方程式](https://ja.wikipedia.org/wiki/%E3%83%AD%E3%82%B8%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E6%96%B9%E7%A8%8B%E5%BC%8F)のようなものを当てはめているものだとすると、それがマッピング量の増加を測る手法として適当かどうかはかなり実験的な試みなんじゃないかと感じました。今後ともハイデルベルグ大学のチャレンジには期待・応援しています。
Vagrant環境の引き継ぎ

# 旧PC⇒新PCにVagrant開発環境をVM毎引き継ぐ。
　開発環境移行時に、Vagrantで立ち上げてPCをどうしても新PCに引き継ぎたくなった場合の方法。（本当は新たにVagrantで作り直した方がいいが、どうしてもとなった場合）

## ◎方法

1. VMを作成。
```
vagrant up
```

1. 立ち上げに成功したらでシャットダウン。
```
vagrant halt
```

1. VirtualBoxを起動し、ストレージの参照先を変更する。

1. VMを立ち上げ。   
→うまくSSHで繋がらないが立ち上げには成功している（はず）。
```
vagrant up
```

1. VMをシャットダウン。
```
vagrant halt
```

1. 認証だけ失敗しているようなので、
```
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
```
旧PCから.vagrant内のprivate_idをコピーしてきて、新PCのvagrant内のprivate_keyを書き換える。
AtCoder入灰記事

:::note info
この記事は、[木更津高専 Advent Calender 2023](https://qiita.com/advent-calendar/2023/nit_kisarazu) 23日目の記事です。
:::

**おっとぉ？これはやらかしたな！**

## ちょっと今緊急で記事を書いているんですが。

こんにちは、後輩が連日入色記事[^1][^2][^3]を上げている最中、入灰を達成したとれいすです。
[^1]:https://qiita.com/nairoki/items/ec0c8b3ae1e42a842389
[^2]:https://qiita.com/ku_senjan/items/0c07e1aa8af354cbc37f
[^3]:https://qiita.com/toma09to/items/08438b8f92f6b4d21707

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2386109/91c1fdb8-a5ec-71f7-378d-a7d43fd0f1c1.png)


前回参加時（ABC329）にやらかしていて、なんとか茶色で首の皮が繋がっていましたが、久しぶりの1完を達成し、無事入灰しました。

## 反省なさい

精進せずにレート上げられるとか調子こいてRated登録したことを反省します。

方針はわかっていたのに一切コードに起こせ（さ）なかったのが原因です。

# まとめ

日頃から頭で方針を理解するな、書いて覚えろ。

来年は入水レベルまで頑張るぞー！！！！！

ほいではよいクリスマスを。
SnapFlingBehaviorを使ってLazyListのスクロールで要素を常に真ん中に表示する

## SnapFlingBehaviorの紹介

https://developer.android.com/reference/kotlin/androidx/compose/foundation/gestures/snapping/SnapFlingBehavior

LazyRowやLazyColumnにてスクロール後，中心に近い要素がセンターにSnapされるようになります．

![画面収録 2023-12-23 22.37.28.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691046/93c13ae7-04bd-265c-5654-1fba61b3cf91.gif)


## 基本的な形
```kotlin
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun SnapX(){
    val state = rememberLazyListState()
    val flingBehavior = rememberSnapFlingBehavior(state)

    LazyRow(
        state = state,
        flingBehavior = flingBehavior
    ) {
        //items
    }
```

`LazyList`の`flingBehavior`引数に対して，`rememberSnapFlingBehavior(state)`を渡すだけです．

## 実装例

![画面収録 2023-12-23 22.48.50.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691046/48566c0e-4f36-1eed-619e-55222ce5cbb8.gif)

```kotlin
@Preview
@Composable
fun PreviewSnaps(){
    Box(modifier = Modifier.size(120.dp).clip(RoundedCornerShape(10)).background(Color.White), contentAlignment = Alignment.Center){
        Box(modifier = Modifier.width(40.dp).fillMaxHeight().clip(RoundedCornerShape(20)).background(Color.LightGray))
        Column(modifier = Modifier.fillMaxWidth()){
            SnapX()
            SnapX()
            SnapX()
        }
    }
}

@OptIn(ExperimentalFoundationApi::class)
@Composable
fun SnapX(){
    val state = rememberLazyListState()
    val flingBehavior = rememberSnapFlingBehavior(state)

    LazyRow(
        modifier = Modifier.fillMaxWidth(),
        verticalAlignment = Alignment.CenterVertically,
        state = state,
        flingBehavior = flingBehavior
    ) {
        items(50) {
            Box(
                modifier = Modifier
                    .height(40.dp)
                    .width(40.dp)
                    .padding(8.dp)
                    .clip(RoundedCornerShape(20))
                    .background(Color.DarkGray),
                contentAlignment = Alignment.Center
            ) {
                Text(it.toString(), fontSize = 16.sp, color = Color.White)
            }
        }
    }
}
```
チームの重要性

9月8日の夜から関東北部と東北南部海沿いを襲った台風13号と共に発生した線状降水帯。
その日は仕事をしており、最も酷い時間帯に高速道路を走っていた。経験した事のない猛烈な雨に視界はわずか数メートルほど。後続車も先行車も見えず止まることも出来ずにいた。
そして日がのぼり徐々に被害が見えてくる。数年に1度大雨で冠水する地域のため冠水や住宅浸水の被害は想像していたが、酷い状況であった。
内水氾濫が起こりその後河川氾濫も追い討ち。地域によっては胸の高さほどまで水が来た。
しかし、被害が局所的な事もあり、激甚災害には認定されず、地元住民や消防団、多くのボランティアによる復旧作業が続いた。
そこで改めてDRONEBIRDの意義を感じた。今回の災害は豪雨ということもあり、ドローンの飛行条件は非常に悪いと思うが、被災地の撮影を行うことで浸水域の把握、復旧作業の進捗が見えてくるはずである。また現地で活動するボランティアセンターやボランティアチームも活用することが出来るはずである。
発災後しばらくして聞こえて来た声。道路とかはキレイにしてもらったけど、家の中はまだ手付かず。どこに言ったら良いか分からない。私たちなんかがお願いしていいのか分からない。そんな声だった。しかし、ボランティアセンターではマッチングがうまくいかず、来て貰うボランティアを事前登録制にする状況。
そんな時にこそ空から見たリアタイの地図があれば家の周りはキレイになっているのに、庭や車庫には何も運び出されていない。片付け出来ていないのかも。そんな気づきに繋がる活動にならはいかと思い、近く市役所の防災担当部署に活動紹介に行きたいと思っている。
そしてドローンの操作やマッピングなど能力向上の課題も感じる。
メールサーバー構築まとめ

参考記事

Gmail

https://www.lab-infra.com/mail/postfix-dovecot

または以下の記事を参考してください↓

https://centossrv.com/postfix.shtml

ポート解除

https://qiita.com/tatsuya_1995/items/7e9b83c631f2f50d4b46

DNS設定

https://blog.supersonico.info/archives/1453/
【vue3+TypeScript】favicon設定でハマった

## はじめに
Webサイトを開発する中で、faviconの設定をする機会はあると思います。設定する機会は頻繁にはないと思いますし、更新されることもあまりないと思いますが笑
faviconの設定手順はとても簡単なのですが、今回中々faviconが表示されずに時間がかかってしまったのでその時の解決方法を書き残そうと思います。


## Faviconを設定

faviconを設定する手順は3ステップだけです。
1. favicon.icoを`/public`の直下に配置
2. index.htmlにfaviconのパスを記載
3. 開発サーバーの再起動


```:ディレクトリ
project/
  ├─ .vscode
  ├─ node_modules/
  .
  .
  .
  ├─ public/           // 静的なファイルやリソース（画像、フォント、外部ライブラリなど）
  │   ├─ images/
  │   │      └─ logo.png
  │   └─ favicon.ico
  .
  .
  index.html
```

```html:index.html
<html lang="en">
<head>
  <!-- favicon.ico を参照するリンク要素を追加 -->
  <link rel="icon" href="/favicon.ico">
  
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Your App Title</title>
</head>
<body>
  <div id="app"></div>
</body>
</html>
```


とても簡単ですよね？
でもこの手順を踏んでもfaviconが全く表示されなかったんです。

## 考えた原因①hrefのリソースが間違っている?
vue+Typescriptのfavicon設定方法を調べると以下のように`<%= BASE_URL %>`を使った相対パスを設定する記事が出てきます。やっぱり`<%= BASE_URL %>`を使わないとダメなのかな？と思ったのですが、 Vite(vite.config.ts)にルートパスを正しく解釈する設定があったのでここは問題ではないようでした。

```html:index.html
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
```

※ `<%= BASE_URL %>`はVue CLIが提供する変数で、ビルド時に正しいパスに変換されます。

## 考えた原因②ファイルのパスが違う？
faviconのパスを絶対パスにしていますが、そこが読み込まれていないのかと思いました。
そこで、hrefのリソースをポート番号を含む絶対パスに変更してみました。
以下のように変更してもfaviconは表示されませんでした
...ということはネットワークエラーかブラウザのキャッシュが原因...?

```html:index.html
<link rel="icon" href="http://localhost:3000/favicon.ico">
```






## 解決方法
`ブラウザのキャッシュ`が原因でした。
それまでGoogle Chromeで確認していたのですが、キャッシュを消して確認したらfaviconが表示されました！
10万を超えるレコード数のExcelエクスポート方法（Dynamics365）

10万件を超えるレコードをExcelにエクスポートする方法を紹介します。

・標準のExcelエクスポートでしたら、10万件の制限があります。
　非常に優れている機能ですが、10万件の制限は少しい残念ですね。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/854324/5a8981a8-3b90-f7f6-8cff-b4586786e748.png)

そしたら、、、
Xrmtoolboxの「Export To Excel」を使えましょう。
XrmtoolboxのTool Libraryからダウンロード可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/854324/ff682aec-ec7a-251a-7e0e-a546a9687f85.png)

レコード数の上限はないですが、大量のデータを一気にエクスポートする場合はメモリに負荷かけるので、注意しましょう。
https://www.xrmtoolbox.com/plugins/Ryr.XrmToolBox.ExportToExcel/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/854324/454343de-da08-3021-d2f6-fc9bbe1cf826.png)
社内システム屋の心構え「光あるところに影もあり」

# はじめに
私は現在、エイチームライフデザインの社内システムの開発を担当しています。
エイチームに来るまでも、いろんな現場で社内システム屋として生きてきました。
今回の記事は、どんな現場でも見てきた社内のシステム化で起きる課題について説明します。
エンジニア以外の方でも「社内システム」を「エクセル」に置き換えて読んでいただくとハッとすることがあるかもしれません。

# 社内システムの光
基本的には大体この3つかと
- スピードアップ：マニュアル作業よ、さようなら！
- 作業者のマルチ化：職人技・属人化を一掃せよ！
- ミスの減少：ヒューマンエラーを駆逐！
つまり複雑でわかりにくく、作業量や注意すべき点が多い作業をシステムの力で簡単にする
それが社内システムの力であり光です。
しかし、光あるところに影はあり・・・

# 社内システムが落とす影
上記のようにシステム化が一定の作業を担うことで、多くの利点を享受できますが、同時にいくつかの課題も引き起こします。

### 1. まず、”根本”が見えなくなる
自動化すると、作業がどのように行われ、結果がどう出るのかという背景や、
この数字は何と何を使って、どう作られているのかなどの成り立ちが見えにくくなります。つまり、作業の背景やデータの意味がブラックボックス化するのです。

### 2. 根本が見えないから変化に耐えられなくなる
背景や成り立ちといった根本の部分がブラックボックスの状態で、何か変更を強いられると・・・。
蓋を開けられるのはエンジニアだけです。
結果として、その変化に対応するための修正が、既存のシステムの上に重ねて行われることになります。
このような上塗りの修正は、システムに新たな手順を加え、本来の目的から乖離していく原因にも・・・・

### 3.上塗り修正の果て〜手順の煩雑化と目的の乖離
上塗り修正が繰り返されると、システムは肥大化し、手順が煩雑になっていきます。
システムの目的が本来何であったのかが見えにくくなり、更には作業の効率性を損なうことにも繋がります。
うん。煩雑な手順を簡単にスピーディーに誰にでもできるようにするためにやってたのにね・・・・

まとめ
社内システムの導入は、多くのメリットをもたらしますが、一方で作業の透明性を失い、修正の積み重ねによって手順が煩雑化し、システムの本来の目的から逸脱してしまうリスクもあります。
システム化の進行に伴い、定期的な見直しと、その目的を常にクリアに保つことが大切だと思います。
そして、透明性を確保し持続可能なシステムを維持するためには、数値のメトリクスやタスクのフロー図など適切なドキュメントと知識の共有が不可欠です。

以上、社内システム屋の心構えでした！