OmniAICreator/Qiita-1.07M huggingface dataset:
ChatGPT の Dall-E 3 で生成した画像の画風を変えたり部分的な修正をやってみたりする【面倒なことはChatGPTにやらせよう（Adventar）】

この記事は、[Adventar の「面倒なことはChatGPTにやらせよう Advent Calendar 2024](https://adventar.org/calendars/10145)」の 24日目の記事です。

## はじめに
今回の記事では、[「面倒なことはChatGPTにやらせよう」の 6.2 画像生成](https://www.youtube.com/watch?v=vxL5k0LMAaY&t=1822s)に関連する内容のお試しです。

最近、以下の記事を書いた際に生成した画像の一部を利用します。

●ChatGPT の Dall-E 3 でプレゼン資料用アイコンを生成しようとしてみる（そこで似た見た目を作ろうとしてみる）【LT・プレゼン】 - Qiita
　https://qiita.com/youtoy/items/9c10383c87ca2830e675

:::note alert 
今回も前の記事と同様、Dall-E 3 の機能のお試しだけを扱う内容であり、生成したものの利用可否に関する内容は扱っていません。
画像生成AI で出力した画像の実際の利用に関しては、ご自身でご確認ください。
:::

## 書籍にあった内容のお試し
まずは、書籍で紹介されていた内容のお試しです。

以下は、前に書いた記事で生成していた画像です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/b15b8798-5e61-6dcb-1371-cd5b995e3b12.png)

### サイバーパンク風に変える
これを、書籍に合った「サイバーパンク風」に変えてもらいます。それを実行した結果は以下のとおりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9f480cd4-5f7f-bdfb-8aa8-2e9faea1dee9.png)

元の内容をある程度反映しつつの、サイバーパンク風の画像になりました。

### 漫画風に変える
次は漫画風にしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1e799381-c405-26f4-16be-7302e0c32007.png)

それぞれ元画像を、別の画風に良い感じに変えてくれました。

## 書籍になかった内容のお試し
書籍が出た後に追加された機能も試してみます。

### 部分的な修正
試してみる内容は、部分的な修正です。

#### メガネを着用
以下の画像のように、犬と猫の目のまわりを選択した上で「可愛いメガネをかけた絵にして」という指示を出しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6754d475-ef4a-e521-2f6b-a49c7a4062b0.png)

その結果は以下のように、選択した部分以外は維持されつつ、メガネをかけたイラストに変わりました（微妙に猫の鼻とかが変な感じですが...）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/cd5542d9-285b-2f34-6461-2848d7d494ff.png)

あと、猫のキャラ全体を選択して、ウサギに変えてもらうような指示を出すというのも試したのですが、それについてはなぜかキャラを消す修正が行われたということもありました。

#### 帽子を着用
次は帽子をかぶせる指示を出してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6ccdd941-2332-a3b1-fa5b-94267dba81e8.png)

結果は、以下のとおりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/45ed1474-b64e-1651-85d1-a3ae8bfb0548.png)

パンダは帽子をかぶってない状態になってしまったのが謎ですが、犬と猫には帽子をかぶせることができました。
法務省登記所備付地図データから古道・水路を抽出

こんにちは。
「法務省登記所備付地図データのG空間情報センター配信；地図データ変換済」というデータを見つけました。

それから、（古）道（濃黄色）および水路（水色）を抽出し、地図上に拡大表示した例です：
* ただし今回の方法ではかえって最近の新しい道が抽出できない場合があるようです。

![スクリーンショット.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54617/8b08e968-2dbf-a259-75ee-b73a99de5c42.jpeg)

![スクリーンショット.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54617/0e442c56-55b1-0c88-6d19-5b58a6f52a65.jpeg)

### データ
上記例は、香川県小豆郡小豆島町・土庄町 2024年のGeojsonデータを用いたものです。
* https://www.geospatial.jp/ckan/dataset/aigid-moj-37324/resource/37191a00-2a5c-47d2-b0ff-38f7ef5ddbcb  
* https://www.geospatial.jp/ckan/dataset/aigid-moj-37322/resource/81f191f8-09ae-4774-9e7d-0072b637c680

### シェルスクリプト
抽出には下記を用いました。
```console
$ ./extract_path.sh *.geojson > path_extracted.jsonl
```

```extract_path.sh
#!/bin/sh

# function
jq_f() {
  case "$2" in
    道) color="#909000";;
    水) color="#00ffff";;
     *) return;;
 esac
 jq -c '.features[]' "$1" | grep -e "$2"- | sed -r 's/(},\"geometry\":)/,\ \"color\":\ \"'"$color"'\"\1/'
}

# main
for file_geojson in "$@"; do
  jq_f "$file_geojson" 道
  jq_f "$file_geojson" 水
done
```
Jetson Orin Nano Super 開発者キットがほしい

エッジAIプロジェクトに使えそうなGPU付きの小型コンピュータ．
249USDとお手頃で，LocalLLM, 画像認識とか可能性が広がりそうで気になっていました．

## どこで買える？

直接Nvidiaから買うのではなく[Nvidiaのページ][Nvidia_website_link] には 

[Nvidia_website_link]: https://blogs.nvidia.co.jp/blog/jetson-generative-ai-supercomputer/

”日本国内において、Jetson Orin Nano Super 開発者キットは、販売パートナーである菱洋エレクトロ株式会社と株式会社マクニカから12月18日より販売される予定です。”

たしかに菱洋エレクトロ株式会社には42480円で売っていました．(マクニカのページは見積？をしないとだめで面倒くさそうだった)

なかなか購入の決心がつかずに放置した挙句
改めて，今日2024年12月24日見てみると．．．


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117133/cc405e8f-a3a7-9ed9-69ec-8cdec652da97.png)
https://ryoyo-direct.jp/shopping/jetson-orinnano/jetson-orinnanosuper

うーーん．

どないしょ．


## 海外のサイトで見つければいい？！

ということで友人がいる国の販路をさぐってみた．

### Hong Kong
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117133/afc625e7-b871-2c68-93c3-7ca0ac70c22c.png)
https://hken.rs-online.com/web/p/processor-development-tools/2647384?srsltid=AfmBOoqHViozhGEgNyJIFqnb3oO44xM02Haiv1sHe0rOZzKg8KxyrLU1 


HK$ 1964.79 = JPY 39724.01 (2024.12.24のレート）

香港で買う方が安い！！

でもよく読むと"Temporarily out of stock" もっと恐ろしいことに
**”back order for despatch 18/02/2025”** (2025年2月18日発送分の取り寄せ)

ご近所 香港でこれなら，日本に来るのも2月中旬？？


### アメリカ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117133/c27b806d-125f-6cff-84d9-039eefdfcc67.png)
https://www.amazon.com/dp/B0BZJTQ5YP

"Currently unavailable" 
"We don't know when ..."
Amazonも他のアメリカの販売サイトもいつ入荷するか分からないって
じゃあなんで香港のサイトは．．

他にもタイ，英国, ルーマニア..と調べましたがどこも在庫切れ．

どないしょ．
【デザイン】配色系の参考リンクをまとめる

# はじめに

デザインの知見がまったくないので今月からちょっとずつ勉強を始めたいなと思ってやっている。

ランダムに配色を提案してくれる系のサイトは本当に好き
見てるだけで楽しい

そこで、今まで勉強で使ってみたサイトとこれから使いたいとと思っている配色系のサイトをまとめておく。

## Colorable

https://colorable.jxnblk.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667288/75622582-acf2-0db9-4c5b-b37256867791.png)

- Aaの部分が見やすさの評価になっている
- Randomボタンを押すとランダムに配色を提案してくれる
- Textの下のバーを調節するとテキストの色を調整できる
- Backgroundを調整すると背景色を調整できる


テキストと背景を調整することでコントラストを確認できる
コントラストの評価が低いと数値が低くなる


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667288/188bea3a-aff7-5865-eb69-517e5dff22ee.png)

例えばこれは `1.34Fail`と表示される
逆に1枚目の写真は見やすいので`7.84AAA`と表示されている

配色や見やすさ大丈夫かな？という確認に使えそう(V)o￥o(V)


## RandomA11y

https://randoma11y.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667288/c31856ee-7111-cafb-5336-1edc24e85fc7.png)


名前の通りアクセシビリティを考慮した配色をランダムで提案してくれる
これはもう見た目がかっこよくて好き

グラフが表示されていたりするので、プレゼン資料の参考になりそう。


- 右上のGenerate→ボタンを押すとランダムで表示される
- Pinned colorに設定したカラーを基準に配色をランダムで提案してくれる


Pinned colorを`#000`にしてみた
黒をベースに何色か提案してくれる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667288/cd3771b3-636a-fb12-abe1-ae1c1f199f5a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667288/88a15a73-65eb-8720-2826-c8b98ecd99ee.png)

## Pigment

https://pigment.shapefactory.co/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667288/92e844d3-f6cd-740d-a9f5-a4c849a77975.png)

これまた見ているだけで楽しいやつ・・・！

カラーコードをクリックするとコピーできて、そのままサイトデザインに反映できる。

## Colors

https://coolors.co/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667288/ecca822d-d54d-e6e5-852a-d0dc0bf1007b.png)

5色の組み合わせを試してみることができる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667288/0ae5725f-1e3d-3b51-0e1f-6ff439b470fb.png)

クリックすると近しい色を選択でき、簡単にグラデーションを試すことができる。

## ColorSpace

https://mycolor.space/

1色選択するとランダムに配色を提案してくれる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667288/2d615bf3-2d97-02b0-e40a-6fde131c43d3.png)

`#235B75`を選択して生成してみた


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667288/ace19813-f3b5-c7c9-d0f7-fdc0dea553f0.png)

他にもドットを描くときにおすすめな`Dotting Palette`とか親しみのある`Friend palette`とかが、いろんなテーマで生成される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667288/9c3cd902-bd9e-50d5-5d9b-f675ebc5ad77.png)

なんかWebデザインだけでなく、ネイルとかの配色の参考にもなりそうな感じ👀

## さいごに
今月からデザインに触れ始めて配色とかデザインは本当に難しいと感じたので、こういう便利なツールに頼れるのはよい。
米田の補題 #10 結合則 補足　近道を選ぶなら

# 米田の補題は、圏論でもっとも重要な定理です（繰り返し）
圏論は、数学の基礎理論です。いままで、[万物の理論](https://amzn.to/3ZLmCJH)
といわれていましたが、[数理科学 11月号](https://amzn.to/4iz6NgM)では、なんと　<font color="Red">万物・万事・万人</font>のための数学理論とまでいわれるようになりました
このAdventCalendar は、体験的に圏論の最も重要な定理である米田の補題を体験的に理解してもらうためにかいています

参考にしているのは、[圏論の道案内](https://amzn.to/4iH2Rus)です

# 結合則 補足　どんな事例がおいしいか？
並列可能な射の場合には、当然便利ですが、前工程を合成することで、後工程が楽になる場合はとくにそうです。トヨタの事例で言えば、外段取りを上手に行い、金型の交換時間を大幅に節約する場合です。順番に処理しないと行けない事例への対応です。

**米田の補題川柳 合成で効率あがるいいことだ**
合成で効率があがることは、いわゆる改善です。加工過程をまとめるとかいろいろあります。プログラミングの世界では、環境構築をDocker にまとめるとかです。自然数からかなり離れた世界で圏のていもなしていませんが、役に立つのでいいとしましょう
経験10年以上のCTOが、入社してやったこと

クリスマスですね！[Schoo Advent Calendar2024](https://qiita.com/advent-calendar/2024/schoo "Schoo Advent Calendar2024")最終日の記事になります。

今回、新卒1年目の見事なリードでAdvent Calendarが始まり、開発だけでなく様々なメンバーの協力のお陰で、とてもあたたかいカレンダーとなりました。本当にありがとうございます！

最終日は、株式会社Schoo CTO加藤からお届けさせていただきます。今年の4月より参画したのですが、それまでの10年以上のCTO経験から入社して実施したことの一部を紹介いたします。

本記事は、これからCTOとして中期的な取り組みを始められる方の参考になれば幸いです。

# 最初の施策として
まず、開発の中長期ビジョン策定に着手することを決定しました。短期的な目標も重要ですが、長期的な視点で方向性を定め、ビジョンに基づいた戦略的な資源配分やリスク管理を行うことが、企業の持続的な成長に不可欠だと考えたためです。具体的には、人材育成、技術投資、組織構造の最適化など、様々な側面から検討し、将来の成長を支えるための指針を確立することを目指します。

今回ご紹介する内容は、このビジョン策定の前段階として実施した『プロダクト開発と開発組織における現状分析』についてです。

## なぜその施策を選んだのか？
中長期ビジョンを策定するためには、現在の状況を正確に把握し、課題を明確にすることが不可欠です。そのため、プロダクト開発と開発組織の現状分析を最も初期のステップとして実施しました。この分析を通じて、今後の開発の方向性を定めるための羅針盤となる情報を集めることを目的としました。

## 施策の具体的な内容（何をどのように行ったか）
プロダクト開発と開発組織では、全く要素が異なるため、それぞれで必要な項目を洗い出しました。

プロダクト開発の評価項目としては
- チーム構成とスキルセットの現状
- 開発プロセスの現状
- 技術スタックとツールの現状
- コード品質とテストの現状
- デリバリーとリリースの現状
- 保守と運用の現状
- 改善とイノベーションの現状

開発組織としては
- チーム構成の現状
- コミュニケーションとコラボレーションの現状
- 文化とモチベーションの現状
- トレーニングと成長機会の現状
- パフォーマンス評価の現状
- リーダーシップの現状

次に、項目が荒すぎて具体に落とし辛かったため、サブ項目を設定しました。

- プロダクト開発

| 項目 | サブ項目 |
|:---------------------|:------------|
|チーム構成とスキルセット|チームの規模と構成|
| |スキルマトリックス|
| |経験と背景|
| |多様性と包括性|
| |教育とトレーニング|
|開発プロセス|開発手法の適用度|
| |プロジェクト管理の成熟度|
| |スプリント計画と実行の精度|
|技術スタックとツール|最新技術の採用度|
| |技術的負債の有無|
| |開発ツールの適用度|
|コード品質とテスト|コードレビュープロセスの有無|
| |テストカバレッジ|
| |バグ管理|
|デリバリーとリリース|リリース頻度|
| |デプロイメントの安定性|
| |リリース判定|
|保守と運用|運用プロセスの整備度|
| |障害/不具合の対応/管理|
|改善とイノベーション|フィードバックループの効率性|
| |新技術の導入|

- 開発組織

| 項目 | サブ項目 |
|:---------------------|:------------|
|チーム構成|チームのサイズと役割|
| |各メンバーの責任範囲|
| |採用力|
|コミュニケーションとコラボレーション|コミュニケーションの質|
| |クロスファンクショナルなコラボレーション|
| |内部コミュニケーションの方法|
| |情報共有のプロセス|
|文化とモチベーション|社内文化の評価|
| |社員のモチベーション向上策|
|トレーニングと成長機会|成長機会の提供|
| |キャリアパスの明確化|
|パフォーマンス評価|評価基準の透明性|
| |フィードバックの質|
|リーダーシップ|リーダーシップのスタイルと評価|
| |マネジメントの効率性|

と項目を細分化したものに対して、1-5点で採点をしつつ、ヒアリングした内容や競合の調査状況も踏まえてコメントも記載していきました。

## 施策実施の目的（何を達成したかったか）
本施策を通しての達成したかった目的としては、以下の内容になります。

- 現状把握
    - 現在のプロダクト開発と開発組織の詳細な評価を通じて、強みと弱みを明確にする
    - 評価項目ごとに点数化し、データに基づいた分析を行う
- 課題の特定
    - 各評価項目における課題を具体的に特定し、影響度を評価する
    - 他社との比較を通じて、競争力の強化ポイントを明らかにする
- 改善の方向性提示
    - 明確に特定された課題に対する改善策を提案し、実行可能なアクションプランを示す
    - 短期、中期、長期の視点での改善計画を策定するための基礎データとする
- 将来の戦略策定への基盤構築
    - 中期(3年)の開発戦略策定のための基盤を構築し、今後の方向性を明確にする
    - 持続可能な成長を実現するための戦略的アプローチを支援する
- 関係者への情報提供
    - 経営層や関連部署への明確な情報提供を通じて、組織全体の理解と協力を促進する

特に課題の特定には大きく寄与でき、優先順位を定めて順次課題を進めていくことが出来たと感じており、この施策の効果の大きさを実感できました。

# 最後に
繰り返しにはなってしまいますが、CTOとして中期的な取り組みを始められる方の参考になることを考え、内容をお伝えしました。この施策は起点となり、実施の目的に記載した通り、次のステップにつながる大きな取り組みとなります。まずは、現在地点を正しく"知る"ことがとても重要であり、この取り組みを定点で実施していくことにより、プロダクト開発と開発組織が成長しているのか、停滞しているのかなども把握することができるでしょう。皆さまが今後も良いプロダクト、良い組織作りをしていけること願ってます！最後までお読みいただき、ありがとうございました！

---
Schooでは一緒に働く仲間を募集しています！

https://corp.schoo.jp/careers/graduates

https://corp.schoo.jp/careers
【Liquid】オブジェクトとは

# オブジェクトとは
テーマの構築に使用できる変数のこと。
オブジェクトの種類には、Shopifyの標準的なコンテンツ、インタラクティブ性を構築するのに役立つ機能的な要素が含まれる。
単一のデータポイントを表すこともあれば、複数のプロパティを含むこともある。
プロパティによっては、コレクション内の商品など、関連するオブジェクトを表す場合もある。
※リキッドオブジェクトはリキッド変数とも呼ばれる。
[参考](https://shopify.dev/docs/api/liquid/objects)

# 使用方法
オブジェクトとそのプロパティは、中括弧 {{ }} で囲んで使用する。
たとえば、「product」 オブジェクトには「title」というプロパティがあり、これを使うと商品のタイトルを出力することがでる。

```:Data
{
  "product": {
    "title": "仙豆"
  }
}
```
```:Code
[[ product.title ]]
```
```:Output
仙豆
```

# オブジェクトへのアクセス
オブジェクトにアクセスする方法は、そのオブジェクトとアクセスしたいコンテキストによって異なる。
オブジェクトへのアクセス方法は以下。

**・Globally**
Tcheckout.liquidとLiquidアセットファイルを除く、Liquidテーマファイルから直接アクセス可能。

**・In a template**
オブジェクトは特定のテンプレート、またはテンプレートに含まれるセクションやブロックで直接アクセスできる。
例えば、商品テンプレートや、商品テンプレートで参照されるセクションで、商品オブジェクトに直接アクセスできる。

**・Through a parent object**
多くのオブジェクトは、別のオブジェクトによって、あるいは、親オブジェクトのプロパティとして返される。
例えば、グローバルarticlesオブジェクトを通して、あるいはblogオブジェクトのarticlesプロパティを通して、articleオブジェクトにアクセスすることができる。

# 変数の作成
変数タグを使って独自の変数を作成することもできる。
変数は構文的にオブジェクトのように扱われる。
```:Code
{% assign my_variable = 'My custom string.' %}
{{ my_variable }}
```
```:Output
My custom string.
```

#### コードの解説
```
{% assign my_variable = 'My custom string.' %}


{% assign ... %}：
Liquidの制御タグで、新しい変数を作成し値を割り当てる。
assignを使うと、文字列や計算結果を変数に格納できる。

my_variable：
作成する変数の名前。
この例では、my_variableという名前が付けている。

'My custom string.'：
変数に代入される値。
ここでは単純な文字列「My custom string.」を格納している。
```

```
{{ my_variable }}


{{ ... }}：
Liquidの出力タグで、指定した変数や計算結果をページに出力できる。

my_variable：
先ほどassignで作成した変数の値を指す。
この例では、my_variableに代入された'My custom string.'が出力される。
```

各オブジェクトの詳細は[こちら](https://shopify.dev/docs/api/liquid/objects)から確認できる。
FlutterでFirebaseのCRUDのやり方

## はじめに
初めてFirebaseを実装したので、操作の仕方を忘れないようにCRUD(Create Read Update Delete)のやり方をアウトプットしようと思います。

## データの挿入

```
Future addFirebaseData() async{
    await FirebaseFirestore.instance.collection("posts").add({//インスタンスを取得しコレクションを指定
      'name': 'Flutter',//追加するデータはmap型で指定
      'text': newWord,
      'createdAt': DateTime.now(),
    });
  }
```


## データの表示
```
Future _fetchFirebaseData() async{
await FirebaseFirestore.instance.collection("posts").orderBy('createdAt').get().then((event) {//コールバック関数を渡す
  final docs = event.docs;//取得したドキュメントのリスト
  
    setState(() {//画面を更新する
      posts = docs.map((doc){//各要素に対して処理を行う。docは現在のドキュメント
        final data = doc.data();//現在のドキュメントのデータを取得
        final id = doc.id;
        final text = data['text'] as String;
        final createdAt = data['createdAt'].toDate();//Timestamp型をDateTime型(日付や時間)に変換
        final updatedAt = data['updatedAt']?.toDate();

        return Post(//取得したデータを使用し、Postオブジェクトを生成し返す
          id:id,//左がPostクラスのフィールド、右が取得したデータ
          text:text,
          createdAt:createdAt,
          updatedAt:updatedAt
        );},
        ).toList();//Listに変換する
        
    });  
});
}
  ```

## データの更新

```
Future updateFirebaseData() async{
await FirebaseFirestore.instance.collection("posts").doc(widget.post.id).update({//ドキュメントIDを使用して、特定のドキュメントを参照
  'name': 'Flutter',
  'text': updatedWord,
  'updatedAt': DateTime.now(),
});
}
```

## データの削除

```
Future deleteFirebaseData(String id) async{
await FirebaseFirestore.instance.collection("posts").doc(id).delete();//ドキュメントIDを指定して削除 。引数はいらない
}
```

## 実装したコード
https://github.com/tsuchida-y/firebase_learning

## 参考資料
[【Flutter×Firebase2024】Firestoreの値を表示](https://www.youtube.com/watch?v=boVsCv410Fk&list=PLuLRJz1UnJzEWRQKMMcNd2qlHqEaT6oXX&index=2)

[【Flutter×Firebase2024】Firestoreに値を追加](https://www.youtube.com/watch?v=GyKzZfKy0Iw&list=PLuLRJz1UnJzEWRQKMMcNd2qlHqEaT6oXX&index=3)

[【Flutter×Firebase2024】Firestoreの値を更新](https://www.youtube.com/watch?v=boVsCv410Fk&list=PLuLRJz1UnJzEWRQKMMcNd2qlHqEaT6oXX&index=4)

[【Flutter×Firebase2024】Firestoreの値を削除](https://www.youtube.com/watch?v=boVsCv410Fk&list=PLuLRJz1UnJzEWRQKMMcNd2qlHqEaT6oXX&index=5)
セキュリティ1年生、セキュリティを勉強すると見える世界が少しずつ広がる気がする

# はじめに
ちょうど昨年の秋頃から、製品セキュリティに携わり始め、2024年はセキュリティ１年生、変化の多い1年だったなぁ～という気持ちで、アドベントカレンダーに便乗して振り返ってみます。
何かOutputしたい気持ちはありつつ、スタートに乗り遅れ、忙しい時期と、12/24という恐れ多い日付しか空いておらず、思い切って24日目に手を挙げました。

# 自己紹介
* 情報系高専卒、組み込みエンジニア歴10年目
* 職場や業界に、女の子が増えたら嬉しいな～の気持ちで日々仕事をしている女性エンジニア
* 30歳目前で、自分のスキルセットにセキュリティを入れようと思い立ち、昨年秋にプロジェクト異動

中学卒業後すぐ15歳からEmacsでC言語を書かされた環境って、もしかして相当異端だった？と、『[プログラマに寄せすぎた粗品「最悪やEmacsや」](https://www.youtube.com/watch?v=LguxePqBcCY&t=8s)』のネタとコメント欄を見て今更思いました。どうなんでしょうか？

高専1年の頃からC言語を触り続け、就職してからもずっと組み込みなのでCかC++を使っていて、あんまりスキルセットに変化がないなぁと数年もやもやしていました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512506/7d638997-7536-85eb-0695-da239ef3d7c4.png" width="40%">

10年近く働いていると、
* 派生開発がほとんどの環境で、組み込みエンジニアのスペシャリストを目指すのは難しい
* 少し上や同世代が妊娠・出産でお休みすることが増えたり、体調を崩して休職する同僚がいたり、1つの仕事をずっと続けることってあまりない

みたいな現実が見えてきて、正直仕事が急に変わっても使えるようなスキルセットを何か足したいな……と。

そんな時、ちょうどよく目に留まって、現実的に社内でプロジェクトを異動できそうだったのが『製品セキュリティ』の仕事でした。ソフトウェア開発の会社で働いているので、この先何をやることになっても『セキュリティ』なら使えるだろ、くらいの気持ちでした。
思い返せば、15歳以来の大きなスキルセット見直しかもしれません。（現在30歳）


# 1年と少し『セキュリティ』勉強してみて、
## 勉強したいこと、『積ん読』が増えた
『セキュリティ』ってめっちゃ広い。
セキュリティって200職あんねん、とのアンミカさんのオマージュを最近たびたび耳にしますが、日々知らないことが増えていきます。その結果、どんどん読みたい本が増える増える……。


今年一番世界が広げるきっかけになった1冊は、『7日間でハッキングをはじめる本』だったと思います。

https://kmrn8.hateblo.jp/entry/2024/09/26/200504

この本を入り口に、その後もTryHackMeを継続できていて、今はTryHackMeクリスマスイベントの『Advent of Cyber2024』に挑戦したりしています。

https://tryhackme.com/r/christmas

初心者向けのコンテンツではありますが、200職の色んなスキルの上澄みに触れると、これ全然知らないな、もう少し詳しく知りたいなが湯水のように湧いてきます。
この一年、人生で一番『積ん読』を増やしました。読むペースより、買うペースが上回っています。困った。


今は、この2冊読んでる最中で、

https://www.shoeisha.co.jp/book/detail/9784798177847

https://www.oreilly.co.jp/books/9784814400423/

今年の年末年始は、お休みがうまくつながったので、ハッキングラボに挑戦しようかなと思ってます。

https://www.shoeisha.co.jp/book/detail/9784798185996

せっかく組み込みエンジニアとして働いているので、来年はIoTのハッキングも挑戦してみたいです。
全然体系的ではないですが、『セキュリティ』って広いからこそ、どこかしらが気になって、気になったところを勉強すればいいじゃないと気軽にInputする癖がつきました。Outputも意識して増やしていきたいです。

## ニュースを見るようになった
製品のセキュリティに携わっていると、
「EUサイバーレジリエンス法は、どうなるだろうか」「日本のIoTセキュリティ要件適合評価及びラベリング制度（JC-STAR）は？」「アメリカ大統領選はどう影響するのかしら」と、日本や世界のいろいろなニュースにアンテナを張るようになってきました。

https://www.cyberresilienceact.eu/ja/

https://www.ipa.go.jp/pressrelease/2024/press20240930.html

政治や経済のニュースって、セキュリティに関わるまでほとんど興味がなかったけど、思いのほか地続きで自分たちの日常につながっているなぁと思うようになりました。


## (おまけ)日常で気になることも増えた
10年ぶりに車を買い換えました。
田舎の寒い県に住んでいるのでエンジンスターターほしいなぁと思って聞いてみたら、ディーラーに、
「新しい車は、スマホからエンジンもかけられるし、エアコン操作もできますよ！便利ですよ！」
と言われました。
（一体どんな仕組みで、どんなセキュリティ対策をしているんだ）とめちゃめちゃ気になりましたが、目の前の営業さんはどう便利に機能を使えるかを説明をする人だな…と質問はぐっとこらえました。いい大人なので。

あとから一緒に話を聞いていた夫にそのことを話したら、「職業病だと思うよ」と苦笑いされました。
詳しいシステム構成図などは当然公開されていなかったので、操作説明書をみたり、納車時のセットアップを経て、少しだけ仕組みを想像して納得しました。

日常の見方も変わったんだな～と、感じた出来事でした。便利ですよ、と言われると若干身構えます。

# おわりに
セキュリティをスキルセットに追加したいな、と思い立ったところから、2024年はセキュリティ1年生でした。
勉強すればするほど、知らないことが山ほど出てきて時間が足りません。いろんな切り口があって、セキュリティ面白いです。

セキュリティ2年生は、興味を持った勉強は継続でどんどん広げて、できれば勉強会とかにも積極的に参加してコミュニティも広げていきたいなと思ってます。
フットワーク軽く東京とかも行きたいです。東京は勉強会たくさんあってうらやましい。
【個人開発】v0でクリスマスにいい感じのカードを送れるアプリを作った

https://christmas-card-maker.vercel.app/cards/christmas-card-1734970479372.png

こんな感じである。

## カード作成機能

![スクリーンショット 2024-12-24 1.18.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1869061/f22886f1-4455-90e1-4c7b-9b8ef53dfb89.png)

こんな感じでドラッグしたり文字サイズ / 色を変えたりできる。

![スクリーンショット 2024-12-24 1.20.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1869061/a1057b74-4469-aba4-2424-2cd5439e21ff.png)

画像をアップロード・透過してみたり

![スクリーンショット 2024-12-24 1.21.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1869061/4688420f-fcb1-d848-0085-07c1eeb104f6.png)

フレームを追加してみたりも出来る。

## カードの詳細view

![スクリーンショット 2024-12-24 1.23.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1869061/0e9be667-5868-d68b-1904-9b6678043ebb.png)

作った画像をこんな感じで表示も出来る。

https://christmas-card-maker.vercel.app/cards/christmas-card-1734970971242.png

OGP対応。

---

良かったら遊んでみてね

（v0の凄さに慄くと同時に、作りたいものがある程度はっきりしてて、かつ機能がいくつかある場合はプロンプトを結構頑張ってやり取りしなければいけなかった。
が、事実数時間でこれだけの機能のアプリをnode環境すらローカルに構築せずにデプロイ出来るのである。
エンジニアリング能力よりも、やって欲しいことの言語化能力や、思い浮かぶ機能を端的に表現するための語彙、理解が今後は必要になっていくのだろうと感じた。廃業。）
Next.js 15でのparams非同期化への対応方法【App router】

## 概要
Next.js 15から、以下の動的APIが非同期化されました：
- `params`
- `searchParams`
- `headers()`
- `cookies()`
- `draftMode()`

これに伴い、これらのAPIの使用方法が変更されています。今回は`params`の非同期化への対応方法をご紹介します。

**注意**：一時的に同期的なアクセスも可能ですが、警告が表示されます。将来のバージョンでは完全に非同期化されるため、早めの対応が推奨されます。



## デプロイ時に発生したエラー
Next.js 15へのアップグレード後、デプロイ時に以下のエラーが発生する場合があります：

```jsx
Types of property 'params' are incompatible.
Type '{ resultId: string; }' is missing the following properties 
from type 'Promise<any>': then, catch, finally, [Symbol.toStringTag]

Error: Command "npm run build" exited with 1
```

このエラーはparamsが非同期オブジェクトであることを正しく処理していないことが原因です。

## エラー解消方法

### 方法1: 自動修正（公式コードモッドを使用）
Next.js 15では、公式のコードモッドを利用して非同期化への対応を自動化できます。

以下のコマンドを実行してください：

```bash
npx @next/codemod@canary upgrade latest
```

コードモッドは以下の作業を自動的に行います：
- 非同期化された`params`の型定義を更新
- 必要な箇所に`await`を追加
- 非同期関数に`async`キーワードを付与

コード量が多い場合におすすめの方法です。

---

### 方法2: 手動修正
自動修正が難しい場合や細かい調整が必要な場合、以下の手順で対応できます。

１. `params`の型定義を`Promise`型に変更
型定義を以下のように変更します：
  
```jsx
params: Promise<{ resultId: string }>;
```

２. 非同期処理を`await`で待機
非同期オブジェクト`params`を展開するために`await`を使用します：

```jsx
const { resultId } = await params;
```



## 使用例
以下は非同期化に対応したコンポーネントの例です：

```jsx
// 非同期対応したコンポーネント
const ResultPage = async ({
  params,
}: {
  params: Promise<{ id: string }>; // Promiseを付与
}) => {
  const { id } = await params; // 非同期的にparamsを展開
  const result = await fetchUserData(id); // 非同期処理
  return (
    <div>
      <h1>ID: {id}</h1>
      <p>Result Data: {JSON.stringify(result)}</p>
    </div>
  );
};

export default ResultPage;
```



## まとめ
Next.js 15の非同期化対応は、今後のバージョンでの変更を見据えた重要なアップデートです。公式コードモッドを利用することで効率的に対応できますが、必要に応じて手動で調整することも可能です！



## 参照リンク
- [Next.js公式ドキュメント - Version 15へのアップグレード](https://nextjs.org/docs/app/building-your-application/upgrading/version-15)
OpenAI 12日間連続発表まとめ

こんにちわ、@takz2001 です。
この記事は[ARIアドベントカレンダー](https://qiita.com/advent-calendar/2024/ari-group)の最終日25日目の記事です。

 なおこの記事内容は私が[note](https://note.com/)で毎週発信している [AI/人工知能ニュースまとめ](https://note.com/takz2001/m/md582a4420fe4)に投稿した内容から加筆修正したものです。

## OpenAI 12日間連続発表とは？
OpenAIが2024/12/5(日本時間12/6)から連続12営業日にAI関連の発表をしました。
アドベントカレンダー的なものですかね。

## [Day 1](https://youtu.be/iBfQTnA2n2s) o1 & ChatGPT Pro
　OpenAIの最高モデルChatGPT Pro（月額200ドル）発表
　このProには「o1 pro mode」も含む全モデルに無制限アクセスが可能

## [Day 2](https://youtu.be/yCIYS9fx56U) OpenAI's Reinforcement Fine-Tuning Research Program
　o1モデルの強化学習ファインチューニング
　従来のファインチューニングで得られなかった「推論能力」が可能

## [Day 3](https://youtu.be/2jKVx2vyZOY) Sora
　ついに有料版加入者向けに一般公開されましたね。
　なかなか自分の作りたい動画を言語化（プロンプト化）が難しいですね。
　そこで、参考事例動画をもとに編集したり、リミックスしたり、ブレンドしていいものを作れる機能が追加されてます。

## [Day 4](https://youtu.be/qZ0ImE41pVs) Canvas
　Canvas機能アップデート
　無料ユーザも利用可能で、コメント機能や直接Pythonのコードを実行する機能も追加
　またGPTsからも利用が可能

## [Day 5](https://youtu.be/mBhkD0iFf4w) ChatGPT in Apple Intelligence
　Apple IntelligenceからChatGPT利用ができる
　Siriに相談して対応できないときにChatGPTが代わりに回答する
　カメラ利用中もChatGPTに相談が可能　など
→ちなみにこの機能リリースの影響かChatGPTがダウンしましたね。
 　[公式発表X](https://x.com/OpenAI/status/1867000372826607627?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1867000372826607627%7Ctwgr%5Eec25b5ee36cc79e807ee1f4cadd4b21388b13520%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Fascii.jp%2Felem%2F000%2F004%2F240%2F4240529%2F)
 
## [Day 6](https://youtu.be/NIQDnWlwYyQ) Advanced voice with video & Santa mode
　ChatGPTの Advanced voice mode で映像共有やスクリーン共有がリアルタイムでできる

## [Day 7](https://youtu.be/FcB97h3vrzk) Projects in ChatGPT
　ChatGPTにProjects機能がリリース
 過去のチャットをプロジェクト（フォルダ）ごとに分けられる
 プロジェクトのカスタム指示を設定すると、それ以降の全チャットに反映が可能
→ちなみにこのDay7やDay5内でAGIの匂わせがあったようですね。

## [Day 8](https://youtu.be/OzgNJJ2ErEE) Search
　ChatGPTの検索（Search）が高速化、新機能追加。無料ユーザにも開放など機能追加されました。

## [Day 9](https://youtu.be/14leJ1fg4Pw) Holiday treats for developers
　開発者向け、 OpenAI o1、Realtime API の改善、新しい微調整方法などの発表でした。
　[OpenAI開発者フォーラム]（https://community.openai.com/）
 
## [Day 10](https://youtu.be/LWa6OHeNK3s) 1-800-CHATGPT
ChatGPTが電話番？！米国内で開始ですが、電話番号”1-800-242-8478"に電話するとChatGPTが応答してくれるようです。
サービス名称は"1-800-CHAT-GPT"で、月15分までの無料通話が可能だそうです。

これでChatGPTコールセンターが誕生しそうですね。
さらに電話対応が苦手な人が増えそうですね。

また米国外のユーザーでも、インスタントメッセージソフトWhatAppでChatGPTとテキストで会話できるようになりました。テキスト会話は日本語にも対応しており、将来的には画像にも対応予定のようです。

## [Day 11](https://youtu.be/g_qxoznfa7E) Work with apps
MacOSアプリ版のChatGPTが大幅なアップデートされ、各アプリと連携できるようになりました。
コーディングはWarp/Xcodeなど、ノートアプリはApple Notes / Notionなどと連携しました。
デモ操作してますので、ぜひ動画で確認してください。
Window版アプリは近日中にリリース予定とのことです。

## [Day 12](https://youtu.be/SKBG1sqdyIU) o3 preview & call for safety researchers
AGIへの初めの1歩かもしれないですね。
o3 と o3 mini previewの紹介でした。
コード生成や数学の解き方が進化、推論のベンチマーク値がo1より上がってましたね。
ARC財団の方も出てきて、ARC-AGIというテストで87.5%を達成、人間の平均値が85%程度とのことなので、”人間越え”と言えそうです。
「ARC-AGI」とは人間の常識的推論能力や知的柔軟性を計測する高度なテストの一種らしいです。
本格的にAIが推論の時代になっていきますね。

ただ一般公開はminiが1月末予定だそうです。
今は安全性テストを行っている段階で、一緒に安全性評価をしてくれる人の募集がされてました。

## おわりに
毎日早起きして発表情報を確認して大変でしたw
[IDMC]パラメータファイルとパラメータセットの使い分け

## はじめに
IDMCを利用したプロジェクトの支援において、InformaticaのETLになじみがある方もそうでない方も、IDMCデータ統合のパラメータの利用方法でつまづくケースが少なくありません。今回は、パラメータファイルとパラメータセットについて基本的な内容について、マニュアルの内容を補足して説明します。

## パラメータファイルとパラメータセットの基本と使い分け
IDMCのデータ統合では、パラメータを様々な箇所で利用することが出来ます。
そして、パラメータを記載する方法として、パラメータファイルとパラメータセットという概念があります。
+ パラメータファイル
    + マッピングタスクで使用可能な、複数のパラメータを定義したファイルです。Secure Agentサーバからアクセスできる場所に配置します。
+ パラメータセット
    + タスクフローで使用可能な、複数のパラメータを定義したものです。マッピングタスクだけではなく、その他のタスクフローにおけるコンポーネントにパラメータを渡すことが可能です。
    + [ParamSetCliユーティリティ](https://docs.informatica.com/ja_jp/integration-cloud/cloud-platform/current-version/_rest-api-reference_cloud-platform_current-version_ditamap/GUID-EA09710C-99C3-4110-BB25-145FECD38872.html)を利用して、クラウドのリポジトリにアップロードして利用します。なお、アップロードできるファイルサイズは最大5MBです。
    
ParamSetCliユーティリティでファイルをアップロードするには次の構文を利用します。
```
 paramsetcli.bat runParamSetCli -un <unique_param_set_name> -pf <parameter_file_name> -pd <parameter_directory> -a <action>
```

以下に例を示します。

```
paramsetcli.bat runParamSetCli -un Paramset.params -pf Paramsetfile.params -pd C:\files -a upload
```

パラメータファイルとパラメータセットのいずれも以下のような形式で、パラメータ名の最初に$$をつけるルールとなっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988146/09114a83-e2eb-ca62-b091-c255e7ef0c12.png)

マッピングタスクでは、ランタイムオプション > パラメータファイルの場所 でパラメータファイルを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988146/9cc0213b-bb11-4483-643e-824aa82131e2.png)

また、タスクフローでは開始 > 開始 > パラメータセット でパラメータセットを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988146/ea568929-c0d2-da58-cd64-8dbfdcfb5d11.png)

そして、これらのマッピングタスクやタスクフローは、[runAJobCliユーティリティ](https://docs.informatica.com/integration-cloud/data-integration/current-version/rest-api-reference/runajob-utility/using-the-runajob-utility.html)を利用してコマンドで実行するのが一般的です。マッピングタスクはパラメータファイル、タスクフローはパラメータセットを引数に指定することで、並列実行を行うことが可能です。


runAjobユーティリティでタスクフローを実行するには、次の構文を利用します。
```
cli.bat runAJobCli -t TASKFLOW -un <taskflow_name> -fp <folder_path> -pun <unique_param_set_name>
```

以下に例を示します。
```
cli.bat runAJobCli -t TASKFLOW -un myTaskflow -fp myproject/folder1 -pun sampleParamSet
```
runAjobCliユーティリティの引数の詳細は、[RunAJob utility arguments](https://docs.informatica.com/integration-cloud/data-integration/current-version/rest-api-reference/runajob-utility/using-the-runajob-utility/runajob-utility-arguments.html)を参照してください。

## 最後に
あらかじめ複数のパラメータファイルおよびパラメータセットを用意し、使い分けるケースもありますが、複雑な場合はコマンドタスクを利用して動的にそれらを生成、利用、削除するケースもあります。
上記の内容を参考にして、用途に応じて使い分けてください。

## 参考
[Data Integration : Parameter files](https://docs.informatica.com/integration-cloud/data-integration/current-version/mappings/parameters/parameter-files.html)
[Data Integration : Parameter set](https://docs.informatica.com/integration-cloud/data-integration/current-version/taskflows/taskflows/parameter-set.html)
競プロ日記#24/12/23

# [ABC082_B-TwoAnagrams](https://atcoder.jp/contests/abc082/tasks/abc082_b)

- C++で文字列に対して比較演算子(<や>)を使えば辞書順で判定してくれる→辞書順配列のアルゴリズムまで考慮する必要はない

- sの方を昇順、tを降順にソートしてs < tを確認すればよい
localhostで公開しているページをスマホのブラウザで見る方法

# はじめに

今回はlocalhostで公開しているページをスマホのブラウザで見る方法を紹介します。

## 前提

- PCとスマホが同じネットワークに接続されていること

## 手順

### 1. PCのIPアドレスを調べる

- Windowsの場合
  コマンドプロンプトで以下のコマンドを実行します。

```cmd
ipconfig
```

- Macの場合
ターミナルで以下のコマンドを実行します。
ipv6を使用している場合違うかもしれません🙇‍♂️

```bash
ipconfig getifaddr en0
```

このとき表示されるIPアドレスがPCのローカルIPアドレスです。

### 2. localhostで公開しているポートを調べる
   PCで起動しているサーバーのポート番号を調べます。
   reactの場合はデフォルトで3000番ポート、viteの場合はデフォルトで5173番ポートです。
   わからない場合、大抵はフレームワークなどでデフォルトのポート番号が指定されているので、そのポート番号を調べます。

### 3. スマホのブラウザでアドレスバーにURLを入力する
   `http://<PCのローカルIP>:<ポート番号>`というフォーマットでアドレスバーに入力します。

例えば、PCのローカルIPアドレスが`192.168.0.223`で、ポート番号が`3000`の場合、以下のように入力します。

```txt
http://192.168.0.223:3000
```

これで、PCで公開しているページをスマホのブラウザで見ることができます。
WEBフロントエンド開発の場合、実際にスマホで確認することは大事ですのでぜひ今回紹介した方法をお試しください！
【あまった時間で】エンジニアのスキマ時間活用術【なにしよう】

# あまった時間でなにしよう？

業務の途中で、唐突にスキマ時間ができること、ありませんか？

例えば...

- アプリケーションのインストールやビルドの時間
- CIでテストが通るのを待っている時間
- ミーティングとミーティングの間の微妙な時間

などなど。

次の作業を始めようにも、中途半端なタイミングで中断されそうで始めにくいです。

何をするか考えているうちに次の予定の時間が来てしまうのは少しもったいないですよね。

この記事では、そんな **スキマ時間を活用してできること** を思いつく限りまとめました。

スキマ時間にやることを事前に用意したり、スキマ時間ができたときにこの記事を見て何するか考えるなど、皆様のお役に立てたら幸いです。

# 業務関連

## メール・チャット

エンジニアに限らず、誰もがやっていることだと思いますが、一応候補として書いておきます。メールやチャットが来ていないか確認したり、返信するだけです。

中には返信内容を考えるのに時間がかかりそうなチャットが来ることもありますが、「あとで返信します」のように一旦返信だけしておくと、相手も安心すると思います。

## GitHub・GitLab 等の通知

作成したプルリクエストにレビューが来ていたり、逆にレビューの依頼が来ていたりします。

メールやチャットと同様に、短時間で返せる内容なら返してしまいましょう。

時間がかかりそうなレビューはやることリストに追加しておいて、わすれないようにしましょう。

## リファクタリング

あなたのプロジェクトのコードは読みやすいですか？技術的負債はどんどん溜まっていくものなので、時間があったらどんどんやりましょう！

大がかりなリファクタリングはスキマ時間では難しいですが、Typoの修正や、ファイル末尾の改行漏れの修正などならできると思います。

https://qiita.com/diescake/items/98c5a099e85775cd917d

## ライブラリアップデート・Dependabot

ライブラリの更新はできていますか？言語のバージョンを上げたいときに、ライブラリが古くて上げられない、みたいな経験はありませんか？

Dependabot などのツールで自動で更新のプルリクエストが作成されるようにしておいて、スキマ時間でどんどんマージしちゃいましょう。

## プルリクエストやブランチの整理

プルリクエストを作成したものの、不採用になったり、ブランチを push したものの、 マージされなかったりすると、一覧にずっと残ってしまいます。定期的に不要なものは削除して、きれいにしましょう。

ちょうど年末なので、システムの大掃除をしてもいいかもしれないですね。

# インプット系

## 記事を読む

次々と新しい技術が登場していく現代に、インプットは必須ですよね。

Qiita などの記事ならスキマ時間でも読めると思うので、オススメです。

長い記事を見つけたときはストックしておいて、あとで読みましょう。

## コードリーディング

他の人が書いたソースコードを読むと、様々な気づきが得られるのでオススメです。

普段触らない機能のソースコードを読んでプロダクトの理解を深めたり、使用しているライブラリのソースコードを読んで、知らなかった機能があることに気づいたり。

世の中にはオープンソースのアプリケーションが大量に転がっているので、それらを参考にしてみてはいかがでしょうか？

## 本を読む

技術書でもいいし、ビジネス書でもいいと思います。今の自分に必要なこと、それを解決する手掛かりになる本がきっとあると思います。

# アウトプット系

## 記事を書く

業務で得た知識を記事として公開してみませんか？自分が理解してると思っていた知識でも、記事にしようとすると意外とちゃんと知らない部分なども見つかるので、インプットに加えてアウトプットも行うことで、より理解が深まります。

Qiita の Organization 機能を活用して、企業の活動を外部にアピールするのもオススメです。

https://help.qiita.com/ja/articles/qiita-org-1

## ドキュメントを書く

暗黙知や、俗人化してしまっているこのはありませんか？

ミーティングの議事録や仕様をまとめたドキュメント、特定の作業の手順や使っている技術など、残しておくことで、新しく入社したメンバーや今後引き継いでいくメンバーの役にたつと思います。

# 休憩

## トイレ

行きましょう。

## 飲み物・お菓子

水分補給は大事です。1日に2リットルくらい飲んだ方がいいらしいです。
僕も気を抜くと1日に500ml のペットボトルを飲み切るまえに一日が終わってしまうので、飲みましょう。

お菓子を食べるのもオススメです。
お菓子の種類によりますが、疲労回復やストレス解消、集中力の向上につながります。

## ストレッチ・運動

長時間同じ姿勢で作業をしていると、肩や腰に負担が蓄積され、最悪健康に影響が出る可能性もあります。健康が一番大事です。定期的にストレッチしたり、正しい姿勢を意識してみたりしましょう。

ストレッチだけでなく、立ち上がったり少し歩いたりするとリフレッシュできるのでオススメです。

## ダンス？

<iframe width="560" height="315" src="https://www.youtube.com/embed/hymOcFUkCHU" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" loading="lazy" allowfullscreen></iframe>
laravel キュードライバを変更したのにジョブの処理が同期実行されてしまう

## 概要

laravelのキューを使ってバッチコマンド処理を記載したジョブを動かそうとした。
.envの`QUEUE_CONNECTION`はsyncからdatabaseに変更したのに同期実行されてしまって若干詰まったので知見をまとめておく。
原因は笑っちゃうくらいしょうもないことだった。

## 筆者の場合の原因と解消方法

.envの`QUEUE_CONNECTION`はsyncからdatabaseに変更した後にconfigのキャッシュクリアを忘れていた。

`$ php artisan config:cache`を実行し`$ php artisan queue:work`を実行してジョブをディスパッチする処理を画面上のボタン起因で実行してみたら正常に動作した。

## 原因特定までの流れ

1. .envの`QUEUE_CONNECTION`はsyncからdatabaseに変更
1. 「configのキャッシュをクリアしないとなあ」と思いつつ、configキャッシュクリアを失念
1. 画面上のボタンでジョブをディスパッチ、うまく動作
1. 本当に非同期で動作しているか不安になり、ジョブの一部の処理に`sleep(20);`を仕込む
1. 画面上のボタンでジョブをディスパッチ、画面のリダイレクト処理が20秒待たされて実行（ということは非同期処理になっていない）
1. 解消方法を試し、問題は解消
【UiPath】タイマー系アクティビティとTimer変数

ここでは、バージョン「22.10」にて追加されたタイマー系アクティビティとそれに関連する`Timer`変数について紹介する。

https://qiita.com/miya_gis/items/f49cb3da00c2e36ecbd0


## タイマー系アクティビティ
「**タイマーを開始**」、「**タイマーを再開**」、「**タイマーを停止**」、「**タイマーをリセット**」の4種類で、プロパティはいずれも入力または出力変数に`Timer`変数を指定するだけのシンプルなもの。機能もアクティビティ名からイメージ出来る通りである。なお、「タイマーを開始」の説明には「新しいタイマーを作成するか、引数として受け取った既存のタイマーを再開します。」と表示されるが、v24.10.7時点では引数のプロパティはなく再開機能もない。いずれ「タイマーを開始」と「タイマーを再開」を統合するのだろうか。

https://docs.uipath.com/ja/activities/other/latest/workflow/start-timer

https://docs.uipath.com/ja/activities/other/latest/workflow/resume-timer

https://docs.uipath.com/ja/activities/other/latest/workflow/stop-timer

https://docs.uipath.com/ja/activities/other/latest/workflow/reset-timer

## Timer変数のメソッド
タイマー系アクティビティの入出力変数として、`UiPath.Core.Timer`型の変数を使用する。この変数では以下4つのメソッドが使用できる。

- `Elapsed`：タイマーの値をTimeSpan形式で返す
- `ElapsedMilliseconds`：タイマーの値をミリ秒（Long形式）で返す
- `ElapsedTicks`：タイマー刻みの値（Long形式）を返す
- `IsRunning`：タイマーが稼働している場合はTrue、停止している場合はFalseを返す

タイマーの値を取得するアクティビティは用意されていないので、これらのメソッドを使用してタイマーの値を読んでいくことになる。

## 実行例

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/6dac8f25-fb39-f1ff-aa21-ac7256819eb6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/bb71b066-1887-ab52-766d-40bc33405ff1.png)

注意点としては、「タイマーのリセット」をかけるとタイマーが停止することだろうか。再度計測を始めたい場合は「タイマーを開始」で改めて実行する必要がある。

## 動作環境
UiPath.System.Activity v24.10.7
Xオススメアカウント

## はじめに
SNSの影響力は日増しに増加しています
即効性のある情報はSNSで得るパターンが増えてきました
また著名な方がSNSで投稿する内容は砕けた表現ゆえにわかりやすいという場合もあります
そのためSNSを適切に運用できれば技術の最先端の情報へのアンテナが拡がります
この記事ではそんなアンテナを拡げるために役立つアカウントをピックアップして紹介します
なお個人の方をご紹介するのは何かとはばかれる部分が多いため基本的には公的な情報になります

### 技術系

https://x.com/elixirlang

https://x.com/Blender

https://x.com/RealTryHackMe

### 企業系
好きな技術を使っている会社さんや活動が活発な企業のアカウントはフォローしておくことで面白い情報を仕入れることができます。
また宣伝に力を入れる傾向が強いので動画や画像が盛り込まれていたりSNSに最適化された情報が流れる傾向が強いです。

https://x.com/FrameSynthesisJ

https://x.com/WeaverseLab

https://x.com/HoloLabInc

https://x.com/imacreate

### 公的機関
公的機関や研究機関のアカウント情報になります
短く情報がまとめられているので興味を持った内容はそれぞれの公式サイトから情報を確認されるといいかと思います
主張や要点の背景を知るにはサイトから詳細に記載がされているページにアクセスする必要がありますが、隙間時間や忙しい時にささっと情報を確認するには有益です

https://x.com/jouhouken

## 最後に
これらの情報は2024年12月時点の物となります
SNS情勢の変化による運営の取りやめや体制の変化による内容の陳腐化などが生じているかもしれません
どんな情報もただ仕入れるだけで終わらせるのでなく活用することを意識して取捨選択が必要になるかと思います
情報の取得方法もエンジニアリングと同様に洗練させカスタマイズする必要があるかと思います
ここまで読んでいただきありがとうございました
米田の補題 #9 圏の定義③　結合則

# 米田の補題は、圏論でもっとも重要な定理です（繰り返し）
圏論は、数学の基礎理論です。いままで、[万物の理論](https://amzn.to/3ZLmCJH)
といわれていましたが、[数理科学 11月号](https://amzn.to/4iz6NgM)では、なんと　<font color="Red">万物・万事・万人</font>のための数学理論とまでいわれるようになりました
このAdventCalendar は、体験的に圏論の最も重要な定理である米田の補題を体験的に理解してもらうためにかいています

参考にしているのは、[圏論の道案内](https://amzn.to/4iH2Rus)です

# 結合則　定義　難しい
射f 射g 射h があって、射f 射g を合成して、次に射hを合成できるなら射g 射h を合成してその前になる射fを合成しても同じものになる。つまり、射が同じものになるということです。射の合成が一意の延長線上ですね。
でも、なにいっているかわかりにくいですよね。
自然数＋加法　では簡単に定義できます。a+b+c は、a+bをさきに計算して、c を足した結果と、b+cをさきにけいさんして、a に b+c の結果をくわえても同じものになるということです。射の値が自然数になっているのでわかりやすいです。射が、+a,+b,+c になります。最初の域は、0 ですね。余域は、+a になります。
射が
図式では、こんなかんじかな　２行目と３行目の射が同じものになるということですね　射のならべ方は、すみません　慣例に反しています。この書き方なんで、違和感があるので揃えました。
```mermaid
graph LR;
a[a]-.->|f|b-.->|g|c-.->|h|d;
a1[a]-.->|f|b1[b]-.->|g∘h|d1[d];
a2[a]-.->|f∘g|b2[c]-.->|h|d2[d];
```
先とか後のように、時系列でつい考えてしまいますが、圏論の図式は、時系列を考慮しないですむ方向に導いてくれます。では、米田の補題川柳です

**米田の補題川柳 合成はどこでもできる便利だな**
どこを合成しても同じなら、一番最後だけを合成することもできます。そして一番最後だけを合成すればいいなら、前工程はやらなくてすみます。残念ながら、自然数でかんがえればわかるように、前工程の計算は必要になります。ただ、時間稼ぎをするには、便利です。時間のかかる射はゆっくりで、簡単なものからどんどん処理していきます。無駄な処理待ち時間を減らせるので便利ですね。いずれにしろ並列作業が可能な前提にはなります。
DynamicDNS (DDNS)についての備忘録

## 前置き
DynamicDNS (DDNS),通称 **DDNS** ついての備忘録です。
通常のDNSと何が違うのか、まとめます。

## Dynamic DNSとは？
Dynamic DNSは、自身の所持しているDBに変更があると、即座に通知や変更部分の転送を行う機能を持つDNSのこと！

## 通常DNSとの違い
通常のDNSと異なり、即座に変更が通知されます！
変更内容が世界的に反映されるまで時間を要しない！

:::note info
Q. 通常DNSはどう動くの？
A. 内容に変更があっても、事前に設定した一定期間が経過しないと下位サーバへは通知しない。
➡だいたい正解的に反映させるのに3日程度時間を要していた。
:::

## 即時反映のメリットって何？
この機能を利用したサブドメインの発行サービスを利用すると、ADSLのようにIPアドレスが変化する環境でも、固定のドメインを使って、外部からアクセスさせることが出来るようになる！

:::note info
Q. 即時反映しないとインターネットへ接続できないの？
A. ADSLのような、接続の度にIPアドレスが変更してしまうと、外部の利用者からはどのアドレスへアクセスすればよいかわからなくなる。

:::

以上、簡易的備忘録
オリジナルの地図デザインを作る！その２（伊能図風マップ）

![スクリーンショット 2024-12-24 0.29.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2705702/1036ffa8-9161-79f0-ad32-d7bc017d6600.png)

前回は夜景風のマップをMaptunik、そしてMapLibreで作成しましたが、今回は江戸時代に伊能忠敬の作った「伊能図風」のマップを作りたいと思います！

▼ 完成した地図はコチラ！

https://chizutodesign.github.io/map-styles/#inozu

本記事は前回の記事の続きになっています。まだご覧になっていない方は、ぜひ以下の記事からどうぞ！

https://qiita.com/chizutodesign/items/5510dade193a6a817332


## 伊能図について
ご存知の方は多いかと思いますが、伊能忠敬（いのうただたか）は、江戸時代後期に日本全国を測量し、精密な地図を作り上げた人物です。その成果である「伊能図」は、緻密な測量技術と芸術的な美しさを兼ね備えた、日本地図史に残る傑作とも言えるかと思います。

実際の伊能図は、国土地理院の「古地図コレクション」などで閲覧できます。

https://kochizu.gsi.go.jp/inouzu

今回もMaputnikを使って、当時の地図の雰囲気を再現した「伊能図風」の地図スタイルを作成します。

## Maputikで書体を変える

伊能図（当時の地図はそうですが）の特徴といえば、やはり筆で描かれた文字でしょう。この雰囲気を再現するため、筆書体を取り入れてみます。
今回使用したのはGoogle Fontsの「Yuji Syuku」という書体です。

https://fonts.google.com/specimen/Yuji+Syuku

### 1. フォントをpbf形式に変換

まずはフォントファイル（otf, ttf）をpbf形式に変換します。以下のサイトを利用しました。

https://maplibre.org/font-maker/

### 2. Maputnikにフォントを設定する

変換したフォントをMaputnikで設定します。`style.json`内に以下を追加します。

```
"glyphs": "https://ウェブサイト名/fonts/{fontstack}/{range}.pbf"
```
これで日本語書体が表示される、はずでした…

### 3. 日本語書体が表示されない！？

![スクリーンショット 2024-12-19 14.41.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2705702/6d3238f7-a108-d7ce-2f1c-c1daf935cc79.png)

よく見ると欧文のみ書体が適用されているようです。
色々調べたところ、こちらのQiita記事に答えが書いてありました。

https://qiita.com/Kanahiro/items/a0203848356721a1a16c

`style.json` の設定で、`localIdeographFontFamily: false` を追記します。この変更により、日本語書体が正しく反映されるようになりました！

![スクリーンショット 2024-12-24 0.26.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2705702/159ad881-4c56-c0ba-5536-607abce415c0.png)


## 地図スタイルを整える

最後に、伊能図の特徴である道路線を赤く塗り、主要道路には黄色いぼかしを追加しました。色合いを調整し、完成です！

![スクリーンショット 2024-12-24 0.29.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2705702/3ca166d9-afdf-c184-55b8-a0ec8c07752f.png)

▼▼ 完成した地図はこちらからご覧いただけます！ ▼▼

https://chizutodesign.github.io/map-styles/#inozu

## おわりに

今回は日本語書体を変えることで、地図の印象をがらりと変化させることができました。
文字をpbf形式に変換する一手間が必要とはなりますが、地図の表現の幅が大きく広がることは間違いないでしょう。

例えば明朝体を使えば、このような昔の地図（旧版地図）風のデザインだって作れてしまいます！

![スクリーンショット 2024-12-24 0.31.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2705702/4b258404-e585-c4c2-e68b-55d3ebca965e.png)

ぜひ、オリジナルの地図デザインを楽しんでみてください！


※今回もオープンデータであるOpenMapTiles, OpenStreetMapを利用しています。MapLibre, Maputnikも含めオープンソースに携わっている方々へ、重ねてお礼申し上げます🙏
©OpenStreetMap contributors

### 参考文献

- [MapLibre Styleの構成要素（タイル・フォント・アイコン）](https://qiita.com/Kanahiro/items/a0203848356721a1a16c)
Excelで内部結合・外部結合

# はじめに
DBを使うほどではないデータ処理では、多くの方がExcelを使うと思います。
Excel関数で内部結合、外部結合を行う際の備忘録として書いておきます。

基本的に「XLOOKUP」を使っての結合になります。
PowerQueryは追々…

# 結合
### サンプルデータ
<table>
<caption>table_a</caption>
<thead>
<tr><th>code</th><th>data</th></tr>
</thead>
<tr><td>101</td><td>…a…101…</td></tr>
<tr><td>102</td><td>…a…102…</td></tr>
<tr><td>103</td><td>…a…103…</td></tr>
<tr><td>201</td><td>…a…201…</td></tr>
<tr><td>202</td><td>…a…202…</td></tr>
<tr><td>203</td><td>…a…203…</td></tr>
</table>
　
<table>
<caption>table_b</caption>
<thead>
<tr><th>code</th><th>data</th></tr>
</thead>
<tr><td>201</td><td>…b…201…</td></tr>
<tr><td>202</td><td>…b…202…</td></tr>
<tr><td>203</td><td>…b…203…</td></tr>
<tr><td>204</td><td>…b…204…</td></tr>
<tr><td>205</td><td>…b…205…</td></tr>
<tr><td>206</td><td>…b…206…</td></tr>
</table>

Excel上はこのようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779420/eb3df865-9c0c-b666-64be-d3f48155f352.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779420/cea41d58-8be6-e93b-0b4c-6b2f0ed9d724.png)

## LEFT JOIN

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779420/110b130b-fefa-1d6b-40e8-4bba64a176ee.png" width=50%>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779420/0ec0c188-cdd6-a7d3-cda2-a5e1a2287e40.png)

１．A、B列は「table_a」のデータを張り付ける
２．C2セルに以下の式を入力　⇒　C2:D7にコピーする
>=XLOOKUP(\\$A2,table_b\!\\$A:$A,table_b!A:A,"NULL")

## RIGHT JOIN

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779420/8505acf8-ae29-3ac8-f958-7c80790bb322.png" width=50%>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779420/89b37b9c-a743-71dc-680d-c425cbb3e05f.png)

１．C、D列は「table_b」のデータを張り付ける
２．A2セルに以下の式を入力　⇒　A2:B7にコピーする
>=XLOOKUP(\\$C2,table_a\!\\$A:$A,table_a!A:A,"NULL")

## INNER JOIN

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779420/f9e52d8f-aaa9-2184-131d-e6e55d6942d2.png" width=50%>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779420/d81428bc-c807-8450-7850-78d3f40679de.png)

１．LEFT JOINの「table_b.code」がNULLのデータを除外する

## NOT EXISTS

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779420/3ecfdc4e-00ed-2160-62ba-ac046cb77f2d.png" width=50%>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779420/a4c59849-e4c8-2c22-5244-c4154c86b243.png)

１．LEFT JOINの「table_b.code」がNULLのデータ以外を除外する



## FULL JOIN

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779420/8aabdfd7-1064-95a9-6e14-5a25d6b482db.png" width=50%>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779420/d34ade6e-558d-7593-a0fa-e7f3b2661e49.png)

１．「RIGHT JOIN」のデータと「NOT EXISTS」のデータを合わせる
pythonのjsonモジュールを使用してJSON文字列を整形

json.loads: JSON文字列をPythonオブジェクト（辞書やリストなど）に変換します。
json.dumps: PythonオブジェクトをJSON文字列に変換します。
indent=4: インデントを4スペースで整形します。
ensure_ascii=False: 日本語などの非ASCII文字をそのまま出力します。

```jsonsample.py
import json

# 元のJSON文字列
json_str = '{"name":"Alice","age":25,"hobbies":["reading","cycling"],"is_student":false}'

# JSON文字列をPythonオブジェクトに変換
data = json.loads(json_str)

# 整形して出力
pretty_json = json.dumps(data, indent=4, ensure_ascii=False)
print(pretty_json)
```

```sh
{
    "name": "Alice",
    "age": 25,
    "hobbies": [
        "reading",
        "cycling"
    ],
    "is_student": false
}
```
Snowflakeで数理最適化の問題（整数計画問題）を解いてみる

# やること
[Snowflakeで数理最適化の問題を解いてみる](https://qiita.com/mshdtksk/items/30bf74d959b2a7177ab4)で解いた最適化問題の中でも少し難しい整数計画問題をSnowflake を用いて解いてみる．少し難しい理由は，こちら[明日から役立つ「オペレーションズ・リサーチ概論」](https://www.udemy.com/course/ortkskmshd/?couponCode=V2JPLETSLEARN)を視聴いただければ幸いである．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/1f18b10e-4efd-cee9-0391-cbc3af0a7aff.png)

# サンプルコード
以下，Python on Snowflake で動作するサンプルコードである．
Snowflake のデータベースへのアクセスは行っていないが，応用すれば，Snowflake のデータベースからデータを入力し，結果を書き込むことも可能である．
```Python
import snowflake.snowpark as snowpark
from snowflake.snowpark.functions import col
from pulp import LpMaximize, LpProblem, LpVariable, value
import pandas as pd

def main(session: snowpark.Session): 

    m = LpProblem(sense=LpMaximize)  # 数理モデル
    x = LpVariable("x", lowBound=0, cat="Integer")  # 変数
    y = LpVariable("y", lowBound=0, cat="Integer")  # 変数
    m += x + y                       # 目的関数
    m += x + 4 * y <= 8              # 制約条件1
    m += 2 * x + y <= 8              # 制約条件2    
    m.solve()  # ソルバーの実行
    results = [{'var': v.name, 'val': v.varValue} for v in m.variables()]
    df_results = pd.DataFrame(results)
    df_results.loc[len(df_results)] = ['opt',value(m.objective)]
    dataframe = session.create_dataframe(df_results)
    
    return dataframe
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/7bc24ba0-a669-c330-ab56-ade5b2bb329c.png)

問題規模が小さいため，あまり比較にはならないが，線形計画問題に比べ，整数計画問題のほうが計算時間が少し大きいことがわかる．計算量が大きな問題（NP困難問題）では，この比にならない計算時間がかかる（問題規模が小さい場合においても，現実的な時間では解けないことが多い）．
- 線形計画問題
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/7e45074a-4dc9-3d9a-bb15-8a66c018cf54.png)
- 整数計画問題
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/b6272e88-e649-0db5-7c65-ebac54a64600.png)
第１回　初めてのQiita

## 第１回　初めてのQiita

### 自己紹介
初めまして、IT業界の３年目がもうすぐ終わろうとしているnomenです。最強の勉強方法はアウトプットと感じてるこの頃、自学研鑽した内容をアウトプットしていこう！というコンセプトで初めて始めてみました。さっそく経歴から。

■高卒⇒自衛隊生活
普通科高校で将来の決まらないまま大学受験シーズン前を迎える。
そんな中、国家公務員募集のお話が来る。
消防：「一緒に働きませんか？」
nomen：「はい！是非働きたいです！」
警察：「やりがいのある仕事ですよ。どうですか？」
nomen：「はい！是非働きたいです！」
自衛隊：「君、体格・成績（首から下の方）・内申点優秀じゃないか！」
　　　　「一緒に働かないかい？」
nomen：「はい！是非働きたいです！」

とまあ、こんな感じで最後のタイミングが自衛隊だったので入隊。
野戦特化部隊で４年間心身共に可愛がられました。新隊員課程の助教になって可愛がる方の
立場も経験。災害派遣に参加し、さっきまで使用できなかったネットがもう復旧していることに強い関心を持ち、いかにITが生活を支えているか痛感する。「よし、専門学校に行ったろ。」

■IT専門学校
Webアプリ開発専攻(Java)したり、基本情報の資格をとって２年間ITを勉強。本当はインフラコースに行きたかったけど、生徒層がヤンキーだったためビビッてアプリ開発に。でも災害派遣で痛感したインフラ技術に興味は尽きず、ラズパイ４とsleePi3購入して電源復旧ごっごしたり、PythonでWebアプリを作って遊ぶ。

■初めてのIT業界へ転職
「専門学校はアプリ開発だったけど、インフラやりたいからインフラエンジニアになろ。」
やっとインフラを本格的に触り始める。主にオンプレの新規構築とリプレース作業を１年間経験する。「オンプレより、時代ってクラウドじゃね？クラウドエンジニアなろ。かっこいいし。」その後AWS SAAを取得。

■思い切ってクラウドインフラを扱う会社に転職
日本の寿司職人は数年の見取り稽古を経て寿司職人になる。でも素人が海外に出て寿司を握って一人前なっている。実務経験１年ちょいだけど、この理論でAWSエンジニアを目指し始める。

■現在
気づけばインフラエンジニア３年目。来年４月で４年目に。
今の現場で毎日AWSを触れててAWSゴリゴリに増えてます。
せっかく利用した知識・技術をアウトプットして備忘録にしよう！という訳です。


### 今後作成していく記事について

主に下記を作成していこうかなと思います。まずは備忘録としてアウトプット。
・AWSの技術・資格・イベント関連など
・インフラに特化すると思うけど、ITのお勉強内容
・ラズパイでこんなもの作ってみた
・目指せ、フルスタックエンジニア！




## おわりに・まとめ
初回にも関わらず、ここまで読んでいただきありがとうございました！
nomenは走ってから考える人なので、とにかくアウトプットして備忘録を作成していきます！いつかは誰かの参考記事になることを祈って。
【AtCoder】ABC223 B問題 復習【Golang】

A問題、B問題を早く解けるように精進しています。
その中で、ABC223 B問題がスムーズに解けなかったので、復習として記事にしたいと思います。

問題リンク：https://atcoder.jp/contests/abc223/tasks/abc223_b

# shift問題というやつらしい
問題では、先頭文字を末尾に移動させる、または、末尾の文字を先頭に移動させる操作を0回以上の好きな回数繰り返して、辞書順で小さい文字、大きい文字を出力することが求められています。

# YouTube解説を見て復習したコード：
```go
package main

import (
	"fmt"
)

func main() {
	var s string
	fmt.Scan(&s)

	n := len(s)
	// 最小文字列と最大文字列を初期化
	minStr := s
	maxStr := s
	for i := 1; i < n; i++ {
		// シフトさせる
		shifted := s[i:] + s[:i]
		// シフトさせた文字が最小文字列よりも小さい場合
		if shifted < minStr {
			minStr = shifted
		}
		// シフトさせた文字が最大文字列よりも大きい場合
		if shifted > maxStr {
			maxStr = shifted
		}
	}

	fmt.Println(minStr)
	fmt.Println(maxStr)

}
```

### コードの説明：

1. 左シフトの生成：
    - 部分文字列を結合して、すべての左シフト結果を生成する
    - 例えば、文字列abcdeの場合、左シフトはbcdea, cdeab, deabc, eabcd を順に作る
2. 辞書順比較：
    - 生成した各シフト結果を、現在の最小文字列(minStr)と最大文字列(maxStr)と比較する

### お絵描き：入力例1について
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771904/a9d68d4d-bec7-0408-31c0-e3b0c4287afc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771904/d059a0b7-ce3f-782b-b61c-3f0fa91b3f9b.png)

切り取る部分をずらしながら、文字列を取得していることが見えました。

## 最後に
正直、全然わかりませんでした。
最初は、2重ループですべての文字列を作ろうとしたのですが(答えでないに決まってるやん...)、すべての文字列ができない上に、正解の文字列もないという...散々な結果でした。
まだまだ思考力が足りないので、1つ1つ丁寧に復習して、理解に繋げたいと思います。
他にも考え方があれば、ご共有いただけると嬉しいです。
よろしくお願いいたします。
Pythonのxml.etree.ElementTreeモジュールを使ってXMLを整形

```xmlsample.py
import xml.etree.ElementTree as ET

def indent(elem, level=0):
    """ElementTreeのXMLツリーをインデントして整形する関数"""
    i = "\n" + "  " * level
    if len(elem):  # 子要素がある場合
        if not elem.text or not elem.text.strip():
            elem.text = i + "  "
        for child in elem:
            indent(child, level + 1)
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
    else:  # 子要素がない場合
        if level and (not elem.tail or not elem.tail.strip()):
            elem.tail = i

# サンプルのXMLデータ
data = """
<root>  <child>    <subchild>data</subchild>  </child>  <child>    <subchild>data2</subchild>  </child></root>
"""

# XMLデータをパース
tree = ET.ElementTree(ET.fromstring(data))
root = tree.getroot()

# インデントを追加
indent(root)

# 整形されたXMLを出力
print(ET.tostring(root, encoding="unicode"))
```

```sh
python xmlsample.py

<root>
  <child>
    <subchild>data</subchild>
    </child>
  <child>
    <subchild>data2</subchild>
    </child>
  </root>

```
ERPコンサルタント(PMO支援)のBIツール導入奮闘記

1. はじめに
    技術というより、経験をつらつらと記事にさせていただきたいと思います。システム刷新の中でBIツールの導入に携わっているので、そこでの経験を記事にさせていただき、皆さまに新しいPJ・システム・技術に立ち向かう際のヒントになればと思います。
    
    
1. 自己紹介
    23年に新卒でLTSに入社し、新卒研修終了から現在まで、ERP刷新PJの販売領域のPMO支援をしております。大学時代は社会学を学んでいて、ITには全くかかわりなかったです。ITの知識というよりはPMOとしてプロジェクトの課題推進を武器にできるコンサルタントになっていくのではないかとキャリアを考えております。もちろんIT分野についても必死に行っている自己研鑽とPJの中でキャッチアップをしております。
1. 経緯
    半年前ごろからERP刷新PJの中でも後回しにされて続けてきたBIの検討が本格的にスタートしました。ERP刷新PJ本流の基本設計工程でツールの選定、詳細設計開始と同時期にBIツールの導入の本格的な検討をスタートさせました。ここからBI導入を主に推進する役割になり、現在はBIツール導入に向けて奮闘しております。
    <dl>
      <dt>経験したBI導入の流れ</dt>
          <dd>1. BIツールの選定</dd>
          <dd>2. 対象帳票の洗い出し</dd>
           <dd>3. 要件の整理</dd>
          <dd>4. データベース設計/ビュー設計</dd>
          <dd>5. 定義作成　※現在対応部分
          <dd>6. お客様レビュー　※現在対応部分
 1.  難しい点
     難しかったのは「データベースの設計/ビューの設計」と「定義作成」です。
     「データベースの設計/ビューの設計」は私自身が実際に手を動かして対応したわけではないですが、お客様からの業務的な要望をかみ砕いて、BIツールを設計をしていただいているベンダーさんにお伝えするのに非常に苦労しました。BI担当になった直後はお客様の業務の中でどのようにERPに情報を入力するのか、どのようにデータが作成されるのかなどの、ERPへのインプットの理解はできていたところでした。BIツールの話しは、インプットしたデータがERP上どのように保存されているのか。そのデータがどのマスタとどの項目をキーに紐づいているのかとまるでERPシステムの腹の中を見ているようで、なかなか理解できませんでした。その上、帳票定義作成には1つのデータテーブルの項目からしか参照できないという話しも聞き、「1つのデータテーブルとは？」「とにかくBIツール便利じゃないってことか」と思っておりました。
     また「定義作成」は実際に定義作成するというよりも、その進め方と管理の仕方が難しかったです。大量の帳票定義をスピーディーに作成する、またデータベースの設計が五月雨的に進んでいくことを加味してアジャイルの手法をとりました。ERP刷新PJ側はウォーターフォールでシステム導入をしていたので、アジャイルでPJを管理、タスク推進していくのは流れに乗るまで難しかったです。（初めての経験だったし…）管理方法としては「かんばん」を採用しました。すべて定義作成対象帳票をかきだして、各ステータスの列に移動させていく手法をで管理しております。多数の帳票を五月雨に進める上でかなり有用な管理をできていると思います。

1. 奮闘
    打ち合わせの中でベンダーさんとお客さんを上手く橋渡しができていないことを感じ、入社前に取得したITパスポートの参考書を引っ張り出して、データベースの知識を再復習しました。すると「1つのデータテーブル」「大福帳」「ビュー」「SQL」等のデータベースの言葉が分かるようになり、「システム的に難しい」の理解と「業務要件からこういう対応してほしい。データをこう紐づける/このように配置できればできるでしょ！」とコミュニケーションとることがだんだんできるようになりました。
    また、初めてのアジャイルでのPJの推進の推進でしたが、幸運なことにCAPM(Certified Associate in Project Management)の資格取得に向けて会社が研修を用意してくれていて、そこでアジャイルの手法や様々な管理方法について基本をインプットした直後でした。そのため、「アジャイルの手法で～」「かんばん用いて～」というコミュニケーションに苦が無かったなく、今後の進め方、管理方法をイメージすることができました。それでも、自分たちがどのぐらいでAsIsの項目とToBeのシステムの項目の帳票項目の突合せを実施できるのか、定義作成をどのくらいの時間で完了できるか流れをつかむことが難しかったですが、最近は予実が一致するようになってきました。また、「かんばん」を用いた管理ですが、帳票1つ1つの管理の進捗がかなり見えますが、仕掛中のものが増えてしまって、何から手を付けるかの優先順位が上手く決められなかったと思います。ここは修正と次回に学びをつなげることが重要です…
1. まなび_共通言語の重要性
    難しいことを大きく2点共有させていただきましたが、初めての事でもその領域や進め方について共通言語を理解できる。特定の単語に対して共通のイメージができることで、何とか推進できているかなと思います。私はコンサルタントのキャリアで今のお客様で今の案件以外のPJにアサインされたことは無いですが、今後新規アサインされるPJに対しては、いち早くコミュニケーションをとる人と共通言語を用いて話すことが重要だと思いました。
    エンジニアの方はプログラミングをするのに複数の言語があると思います。様々な言語で同じ結果のプログラミングをすることはできるかと思いますが、同じ言語で同じプロセスをイメージできる方同士の方が仕事しやすかったりするものなのですかね…外国に行くと明らかに共通言語で話した方が相手の事よく知れますよね！