OmniAICreator/Qiita-1.07M huggingface dataset:
レッドオーシャンなTo-Doアプリをリリースした話

# はじめに
初めての個人開発でCool To DoというTo-Doアプリをリリースしました。

https://note.com/renka_1123/n/nce800286be07

https://apps.apple.com/jp/app/cool-to-do/id6497715739


# アプリのモチベ

* リリース経験を積みたい。
* 競合からのおこぼれで広告打たなくても流入がありそう。

# 収益
収益はAdmobからの広告収入になります。 サブスクは導入していません。Admob実装は公式ドキュメントとQiita記事を睨めっこしながら進めました。

2024/05/17時点で総ダウンロード数14件に対して80円の収益です。
以下Admobの画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1782522/2a27ceac-bf59-b40a-7eb4-6186204d6a54.png)

:::note info
現在Admobが「No Ad to show」とエラーを吐いて収益が止まっていて悩んでいます（泣）公式が提供しているTESTバナーの表示はシミュレーターと実機で確認できており、バナー再作成も試したけど変わらず・・・・・DL数が足りず広告自体がないと思われる・・・
:::
Intune の キオスクモード を使った AVD 用 簡易シンクライアント

# はじめに
Intune の キオスクモード を使って、サインインした環境では、Azure Virtual Desktop の Web サインイン画面 のみが表示されるように構成してみました。
※任意の Web サイトにカスタマイズして 特定のWebサイトだけにアクセスする専用端末にも仕立てられます。

# 画面イメージ

**サインイン画面**
PC を起動すると、この画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/c0f4afd6-c5a4-2e3a-975d-c89194aceacf.png)

**サインイン後**
サインインして AVD に接続すると、こんな感じで使えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/d8cd846b-09f8-1d39-bab9-669245411eae.png)

:::note info
**ポイント**
InPrivate モードが使われているため、終了後に ブラウザを閉じると、トークンが破棄されて、新しい サインイン画面 が再び表示されます。
:::

# 前提事項
この記事で紹介している手順を実施するためには、Intune と AVD の環境が必要です。

**Intune の構成**

https://qiita.com/carol0226/items/e75b04f2a6a99fa6bcf7

**AVD の構成**
以下の記事のうち、全項目は必要ありませんが、セッションホスト をデプロイして、通常のクライアントで接続できるようになっていれば OK です。

https://qiita.com/carol0226/items/7318fdd7aff780f5177c


# 構成手順
0. Intune 管理センターを開き、左ペイン **デバイス** から **構成プロフィル** を選び **新しいポリシー** を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a30d9a36-7e42-c04d-0768-6adc31484145.png)
　<br>
0. 下図を参考に、**テンプレート** 内の **キオスク** を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f60dd358-15ec-1413-93ab-d5a3ee5ce5d8.png)
　<br>
0. **基本** タブでは、任意の名前を付与して **次へ** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/fe0dd86a-9009-a40a-1787-14a0e60ee5b5.png)
　<br>
0. **構成設定** タブでは、下図のとおり **シングルアプリ、全画面表示キオスク** にして **自動ログオン** にするのがポイントです。URL で、 AVD のブラウザアクセス先を指定します。**次へ** を押して進めます。
**URL 欄のテキスト：** https://client.wvd.microsoft.com/arm/webclient/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/d892135a-367a-418f-7ee2-43570deb87d5.png)
　<br>
0. 以下を参考に、キオスク端末 にするデバイスを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/39825c18-f83b-a165-79a9-8425c38a5983.png)
　<br>
0. 割り当てが完了したら **次へ** を押して進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a9470730-033c-fa2d-a515-4b391208bc15.png)
　<br>
0. 以下の画面は、そのまま **次へ** を押して進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6a010d45-9dee-28ea-d92f-1a5120ac11ec.png)
　<br>
0. **確認および作成** タブでは、内容を確認して **作成** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b4f8a6e3-e3f8-ee17-faf0-a599de72bade.png)
　<br>
0. 以下のように、一覧に表示されれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/aa568767-afa6-5b16-3c26-99cafb8fcdab.png)

以上の構成で、プロファイルが適用された デバイスは 起動時に 自動サインインが行われて ブラウザ上に AVD のサインイン画面が表示されます。

この画面から、任意のアカウントで サインインすることで、AVD が利用できるため、シンクライアントのように利用することができます。
自分が考える最高のエンジニアライフプランについて！

これからエンジニアになる人も、すでにエンジニアになっている人も、1度はこんな感じで働きたい～！と考えたことがあると思います✨
ただ、会社員として働いていると実現が難しいとあきらめてしまったり、そもそも日々の忙しさでそんなこと考えたことあったなぁ...と忘却の彼方に置き去りにしていませんか❓
僕自身、学生時代には、エンジニアになって素敵在宅ワークをしたい✨という思いがあり、この業界に飛び込みました。しかし、現実は甘くなく、コロナで監禁から毎日マスクの生きづらい生活がスタートでした...
そんな日々を過ごしていくと、自分はどうしたいのか？どういう将来を過ごしたいのか日々考える時間が増えてきました。
そこで、僕が今実践していることと、これから僕が実現したいライフプランについて紹介します！

# 簡単な自己紹介
- 2020年大手SIer会社に就職
- 2022年退職し、独立してフリーランスへ
- メインの案件はSAP関連、他でWeb系の案件等を行う
- 日々自由気ままに勉強してます

# ライフプランの考え方
結論、まずは自分が実現したい、やりたいことを書き出していくのが一番いいです！
皆さん、ライフプランを考えるにあたり、様々な要素があると思います。
そんな中でライフプランを考える際、今の現状からできることで考えていませんか❓
例えば、会社規定で住む場所が決められていたり、家庭があるので自分のやりたいことよりも家庭のこと優先して考えたり...等々多くのしがらみがあると思います。
ただ、考えるのであれば一度それを横において考え欲しいです。
大事なことは***そのライフプランに自分はわくわくしているか❓***ということです。
私が好きな漫画の１つに「ゾン100 〜ゾンビになるまでにしたい100のこと」があるのですがその中に「ゾンビになるまでにしたい100のこと」というものがあります。

https://urasunday.com/title/1176

この漫画は突如、世界にゾンビがあふれかえり、日常が壊されていく中で、主人公たちが前向きに自分たちの「ゾンビになるまでにしたい100のこと」をかなえていくものになっています。
この漫画見ていて、どうせライフプランを書くのであれば、 ***書いた自分が実現したい！実現した自分を想像したらわくわくする！*** と思うものが書きたいと思いました。

# 私が考える最高のエンジニアライフプラン
上記踏まえ、私が考える最高のエンジニアライフプランをいくつか紹介します✨
- 地方であれ、都心であれ電波さえ届くのであれば働く場所はどこでも自由！
たまには仕事終わりに温泉に行ったり、都心のビルではなく自然を眺めながら仕事したいですよね！
- 技術書が読み放題の図書館が近くにある！
技術書が読み放題になれば好きなだけインプットできるので最高じゃないですか！？電子書籍でもいいのでそんなサブスクできないかなぁ...
- 近くにエンジニアが集まるBarがある
最近、エンジニアBarなるものが少しづつ増えているので近くにあればいいなぁ！
- 健康！
シンプルですけどめちゃくちゃ大事✨
座り仕事が多いので日々無理しない範囲で運動であったり、健康にいいおいしいごはんが食べれたりすれば最高ですね✨
- 物怖じせず、社交的な性格になる
これは私自身の問題で、フリーランスとして活動していく中で、初対面の人との関りや交渉事がまだまだ未熟ですので、もっと上達したいですね...
- 友人同士でアプリを作成してリリース
これはフリーランスになる前から考えていたのですが、自分ひとりでではなく、友人同士で何かアプリリリースしたら楽しそうだなぁと思いライフプランの1つに入っています
- 趣味の時間を確保！
私の趣味として、ボードゲームがあるのですがなかなか時間の確保ができていないので、ボードゲーム会に参加or開催できる時間を毎月確保したいですね✨

考えれば考えるほどたくさん出てきますが、私の場合、たまにリフレッシュにどこか行きたい程度で、自分の生活圏内で最高のことができるようになればいいなぁという願望がほとんどでした！

# 最後に
皆さんも、様々なライフプランを考えていると思います。
私自身も、ライフプランを書き出したときに、「これ実現させるにはどうしたらいいだろう？」と実際の解決手段を考えてみたり、ふとした時に過去書いたやつを見ると、「これ？ほぼほぼ実現してない！？」といつの間にか書いたことを実践していた時もありました。
一度書き出すことで自分がどうしたいのか考えるきっかけになりますし、自分の潜在意識にしたいことを刷り込むことができればいつの間にか実現しているときもあります！
皆さんも、一度、書き出してみてはどうでしょうか？そして定期的に見直してみると、あの時自分はこんなこと考えていたのか...！となり、とても面白いですよ♪
Form の失敗時に次の処理が動いてしまう事象について

Power Apps で アプリを作製する際に Form を使用してデータを保存する場合、
データの保存が成功・失敗に係わらず、次の処理が動いてしまうというご相談をいただくことがあります。

今回は、そのようなケースの解決方法をご紹介したいと思います。

# サンプルアプリ(解決前)
例えば次のように、1つの Form とその Form の情報を保存するための登録ボタンがあるとします。
登録ボタンの OnSelect プロパティは次のようになっており、保存完了後にデータ登録成功後画面に遷移するといった処理になります。
``` OnSelect プロパティ
SubmitForm(Form1);
Navigate(データ登録成功後画面)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/3db07737-9f62-b40b-39f6-9cf71a9fc1c8.png)

ですが、このような作り方だと必須であるテキストフィールドに何も入力されていなくても成功画面に遷移されてしまいます。

例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/af65aa68-74bc-f237-f8ff-0faeafd50cac.png)

# 解決方法
登録ボタンの OnSelect プロパティに記載していた Navigate 関数を、
Form コントロールの OnSuccess プロパティに移すことで、
データ保存が成功した場合にのみ画面遷移が行われるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/695c34e7-6a3e-9277-dd42-b8a2297e155f.png)

# サンプルアプリ(解決後)
### 成功した場合
データ保存が成功したときのみ、指定した画面に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/7b37a158-9b53-6a94-e5c4-b06147eeec47.png)

### 失敗した場合
データ保存が失敗すると、画面遷移は行われません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/b9e3c1e0-db0f-147d-3dbd-9bc973c335bb.png)

# まとめ
登録や保存といったボタンの処理に、データの保存や保存後の処理、画面遷移といった処理を一緒に実装してしまうことはよくありますが、今回のようにすることで正常に保存されたときの処理とそうでなかった時の処理を明確に分けることができます。
Form を使ってデータを登録するアプリを作成するときは、ぜひお試しください。
Amazon Bedrockの新機能「Prompt Flows」におけるノードの説明と、旅行プランを提示するアプリケーションの実行

# はじめに

今回はAmazon Bedrockの新機能「Prompt Flows」におけるノードの説明と、
旅行したい場所と期間を入力するだけで、おすすめの旅行プランを提示してくれるアプリケーションを作成しました。

「Prompt Flows」は、ノードを配置して生成AIのワークフローを開発・管理できるサービスです。

https://aws.amazon.com/jp/bedrock/prompt-flows/ 

# 「Prompt Flows」におけるノードの説明
以下のサイトを参考にしました。

https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/flows-nodes.html

**・開始と終了**
**Flow input**
フローのスタート地点です。

**Flow output**
フローの処理結果の出力です。

**・Logic**
**Collector**
複数の入力を収集し、配列として返します。arrayItem入力に複数の項目を接続することができ、入力として配列のサイズを指定することもできます。出力は、配列項目が配列に追加された配列です。


**Condition**
フロー内のさまざまなパスにつながる条件を定義します。ノードに入力を提供し、評価する条件を追加します。条件が満たされない場合のデフォルト ブランチを含む各条件を、入力を送信するノードに接続します。


**Iterator**
配列を受け取り、配列のサイズとともに出力内の各項目を反復的に反復して次のノードに返します。配列内の各項目は、フローの出力で個別の応答を生成します。1 つの応答を生成するには、下流のコレクターノードを使用して項目を 1 つの配列に収集します。


**・Orchestration**
**Agents**
エージェント ノードは、入力と付随するセッションおよびプロンプト セッション属性を使用してエージェントを呼び出します。エージェントとそのエイリアスを選択します。次に、エージェントを呼び出すためのプロンプトとして使用する入力の部分と、オプションでセッションおよびプロンプト セッション属性を定義します。

**Prompts**
使用するLLMのモデルと、プロンプトを定義します。
生成された応答が出力部分に出力されます。


**・Code**
**Lambda function**
Lambda 関数を呼び出して、ビジネスロジックを実行するコードを定義できます。


**・Data**
**Knowledge base**
独自の情報を生成AIアプリケーションに統合することができます。
検索拡張生成（RAG）技術を用いて、ナレッジベースはあなたのデータを検索し、最も有用な情報を見つけ出し、それを使って自然言語の質問に答えます。

**S3 Retrieval**
Amazon S3 の場所からデータを取得し、フローに導入できます。
設定では、データを取得する S3 バケットを指定し、ノードは S3 ロケーション内のコンテンツを出力として返します。
※注記
<INS>現在、S3 の場所のデータは UTF-8 でエンコードされた文字列である必要があるようです。</INS>

**S3 Storage**
S3ストレージノードを使用すると、フロー内のデータを、Amazon S3 の場所に保存できます。
データを保存する S3 バケットを選択し、オブジェクトキーに加えて、保存前に入力データを変更する方法を指定します。


**・AI Services**
**Lex**
Lexノードを使用すると、Amazon Lexボットを呼び出して、自然言語処理を使用して発話を処理し、ボット定義に基づいてインテントを識別できます。


# 導入
アプリケーションの全体像は以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806967/9e01c271-e162-45cc-7604-d1470d261d28.png)


Flow inputは、フローのスタート地点です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806967/bcd4bbcf-026b-22ca-4a2f-7b956b0231fa.png)

Promptsの部分では、
LLMのモデルの設定と、プロンプトの定義をおこないます。

Define in node を選択し、使いたいLLMのモデルを設定してください。
今回は、Claude 3 Haiku を使用しています。

今回プロンプトは以下のように定義します。
```
{{place}} に{{day}}日間、旅行に行きます。 良い旅のプランを紹介してください。
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806967/a1c13266-3459-d6c2-40df-b516dd713753.png)


Flow outputは、フローの処理結果の出力です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806967/635565c7-41ef-7740-d209-788779dc1655.png)


# LLMの実行結果
```
{"place": "京都", "day": 3}
```
と入力してみたところ、以下のような出力結果を得ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806967/c7f63df9-477d-88ec-cbdb-dbe1e53bff4e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806967/80374e5c-f0db-d52c-e5b4-dd09a2fef918.png)


# まとめ
今回はAmazon Bedrockの新機能「Prompt Flows」におけるノードの説明と、
おすすめの旅行プランを提示してくれるアプリケーションを作成しました。
この新しい機能を使いこなすためにも、今後様々なアプリケーションを作成できればなと思います。
【GoogleCloud認定資格】アソシエイトすっ飛ばしてプロフェッショナル資格を受験する【IT系資格無保時】

# 初めまして
pandasistaと申します。[株式会社 Panta Rhei](https://www.pantarhei.co.jp)という会社でCEOをやったりデータ周りをやったりしています。

# Google CloudのProfessional Cloud Architectを受ける！

https://cloud.google.com/learn/certification?hl=ja

当方、Google Cloudの認定資格である「Professional Cloud Architect」を受験することになりました。しかもアソシエイト資格をすっ飛ばして。

基本的に認定資格系の受験ロードマップとしては
1. 基本情報
1. 応用情報
1. パブリッククラウドアソシエイト資格
1. パブリッククラウドプロフェッショナル資格

が一般的です。

【参考】

https://zenn.dev/cloud_ace/articles/9d3d496f9a7213

しかし筆者、アソシエイト資格どころが、基本情報も持っていません。

なぜいきなりProfessional資格を受験するのか

# すっ飛ばす理由
1. <B><font color="red">アソシエイトの受験費が高い！！！</font></B>
1. Professional Cloud ArchitectとAssociate Cloud Engineerの出題範囲がほぼ一緒
1. 意外とUdemy丸暗記でいけるらしい
1. BQとかVPCとかVMとか基本的なサービスは触ったことある

アソシエイト資格、<B>125ドル</B>です。しかも諸々の諸経費込みで<B>2万円</B>を超えるみたいです。
弊社インターンがアソシエイトを受験して発覚しました。高いです。

https://qiita.com/nr_20xx/items/22e89a210edb91948dfc

また弊社のインフラ担当、[Google Cloud全冠erである岸本](https://qiita.com/Antonnion)が「Udemyで行ける、Professional資格と出題範囲一緒」

という旨を聞いて、「これアソシエイト資格受けんでよくないか？」となりました。

# 勉強方法

1. <B><font color="red">徹底的な写経</font></B>
2. <B><font color="red">Udemyの出題範囲を丸暗記</font></B>

## 徹底的な写経

マイバイブル<B>「徹底攻略 Google Cloud認定資格教科書　」</B>を徹底的に写経しました。

![IMG_0984.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540865/9187b7cf-c407-368a-4086-37aa57646112.jpeg)


写経の仕方が少しコツがいるのですが、
<B><font color="gree">「丸写しではなく要約&構造化しながら写経」</font></B>
となっています。以下が例です。

#### 【原文】
「ファイアウォールポリシーとは、複数のファイアウォールルールを1つのリソースとしてグループ化して管理するための機能です。通常のファイアウォールルールは特定のBPCネットワークに属しますが、ファイアウォールポリシーは組織やフォルダ、プロジェクトに属します。そのため、複数のVPCネットワークに対して同時にルールを適用できます。またファイアウォールポリシーはポリシーを適用する対象の違いによって、次のような種類に...」(徹底攻略Google Cloud認定資格 Assosicate Cloud Engineer教科書 初版 p156)

#### 【要約&構造化後】
|ファイアウォールポリシー|>|〃　ルール|
|---|---|---|
|組織フォルダプロジェクト||各VPC|

みたいな感じです。
社会人は勉強に割ける時間がかなり少ないです。
<B>しっかり理解しつつ高速にインプットしていく</B>ことが重要です。

<B><font color="gree">「雑に要約&構造化して写経」</font></B>はそれを叶える手段の一つです！
おすすめです！


## Udemyの出題範囲を丸暗記

https://www.udemy.com/course/google-cloud-professional-cloud-architect-i/?couponCode=JPLETSLEARNNOW

この内容を丸暗記すればいいそう。
出題のまま出てくるらしいです！

前述のバイブルを写経1周回、流し読み1周回したらUdemyに臨みましょう。
その内容を暗記すればいけます。

# 結果は...
Qiita Engineer Festa2024が終わったら受験します。しばし結果をお待ちください！

# 紹介
[株式会社 Panta Rhei](https://www.pantarhei.co.jp)では「Everything Analysable」を標榜とし、世の中にあるあらゆる定性的な対象をAIによって定量化する事業をおこなっております。
AIに召し上がっていただく綺麗なデータを作る、データフローを整形するなどの課題や、そもそものAIの内製化等、ご相談があればぜひご一報ください！

よろしくお願いします！
【ChatGPT＋Code Interpreter】でシンプルな図形を描く。


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

　今回は、シンプルな図形を描きます。そういえば、まだやったことがありませんでしたね😅

:::note info
本記事は、ChatGPT（有料版）
で行なっております。画像が
あります。あしからず。
:::

　まずは、ニュース。

　AnthropicのClaudeの
　　Androidアプリが登場しました。
　　　[Anthropicポスト](https://x.com/AnthropicAI/status/1813237754081251573?t=eBwBQ498LNFUmDvpimgO7w&s=03)

　使い方は
　　Web版と同じです。

　Artifactsが使えるかは
　　確認できていません。
　　　私は課金をしていませんからね。

***
　さて、本題です。

　Code Interpreterで
　　シンプルな図形を描きます。

　もちろん、
　　グラフ等ではありません。

　ここでは、
　　横棒、横長の楕円、円を
　　　描きます。

　では、手順です。
　❶GPT-4oであることを確認
　❷Prompt入力
```Text:シンプル図形三つPrompt
CodeInterpreterを使って、全面黒い画像を作成してください。ただし、下記の要素も含みます。

作成する画像は、以下のとおり。
・白い横棒
・白い丸
・白い横長の楕円

なお、画像は別々に作成してください。
```

　❹送信
　❺ダウンロードリンクが表示

　ダウンロードすると
　　以下のような画像になります。
![white_bar_image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/9a08c4d3-42ee-8cc5-65c0-4bc1581fef9c.png)
![white_circle_image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/3460ce74-a4c9-95e4-bedc-6c2a12cad540.png)
![white_ellipse_image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/7b83cd2e-5711-0ce6-0cb4-610f258c028f.png)
***
　気を付けてもらいたいのは、
　　図形のサイズ（線の太さや長さ）を
　　　指定していないため、
　　　　Pythonコードを作成する
　　　　　ChatGPT次第になる点です。

　もちろん、
　　画像サイズも含めて指定すれば、
　　　それでいいわけですがね。

　とりあえず、
　　ChatGPTさんに
　　　尋ねてみました。
***
***user***
各種のサイズ指定について教えてください。
こちらで指定したいのです。
コードの必要はありません。

***ChatGPT***
サイズを指定するには、各画像要素の位置やサイズを変更するためのパラメータを設定する必要があります。以下に、各要素のサイズ指定に関するポイントを説明します。

### 白い横棒
- **位置:** 画像の中で横棒を表示する位置（例：中央、上部、下部）。
- **幅:** 横棒の高さ（例：10ピクセル）。
- **長さ:** 画像の幅全体にするか、特定の長さにするか。

### 白い丸
- **中心位置:** 画像内で丸の中心となる座標（例：画像の中央、左上、右下）。
- **半径:** 丸の半径（例：30ピクセル）。

### 白い横長の楕円
- **中心位置:** 画像内で楕円の中心となる座標（例：画像の中央、左上、右下）。
- **高さ:** 楕円の縦の高さ（例：20ピクセル）。
- **幅:** 楕円の横の幅（例：50ピクセル）。

### 画像全体のサイズ
- **画像サイズ:** 画像全体の縦横のサイズ（例：200x200ピクセル）。

これらの要素を指定することで、希望するサイズや位置に要素を配置することができます。具体的な数値を提供いただければ、それに基づいて画像を作成することができます。

***user***
言葉での指定方法を教えてください。
コードは必要ありません。

***ChatGPT***
以下のように言葉で指定することができます。

### 画像全体のサイズ
- 画像サイズ: 幅200ピクセル、高さ200ピクセル

### 白い横棒
- 位置: 画像の中央
- 幅: 10ピクセル
- 長さ: 画像の幅全体

例: 「画像全体のサイズは200x200ピクセルで、白い横棒は画像の中央に幅10ピクセル、長さは画像の幅全体。」

### 白い丸
- 中心位置: 画像の中央
- 半径: 30ピクセル

例: 「画像全体のサイズは200x200ピクセルで、白い丸は画像の中央に半径30ピクセル。」

### 白い横長の楕円
- 中心位置: 画像の中央
- 高さ: 20ピクセル
- 幅: 50ピクセル

例: 「画像全体のサイズは200x200ピクセルで、白い横長の楕円は画像の中央に高さ20ピクセル、幅50ピクセル。」

具体的な例としては、以下のように指定できます：

「画像サイズは300x300ピクセルで、白い横棒は画像の上部に幅15ピクセル、長さは150ピクセルでお願いします。」
「画像サイズは250x250ピクセルで、白い丸は画像の左上に半径40ピクセルでお願いします。」
「画像サイズは400x400ピクセルで、白い横長の楕円は画像の右下に高さ30ピクセル、幅100ピクセルでお願いします。」

このように指定していただければ、希望するサイズや位置に要素を配置する画像を作成できます。

***user***
CodeInterpreterで描けるシンプルな図形を教えてください。
コードは必要ありません。

***ChatGPT***
CodeInterpreterで描けるシンプルな図形には以下のものがあります。

### 基本的な図形
1. **線（直線、斜線）**
2. **矩形（長方形、正方形）**
3. **円**
4. **楕円**
5. **三角形**
6. **ポリゴン（多角形）**

### 組み合わせや応用
1. **矢印**
2. **グリッド（格子）**
3. **点（ドット）**
4. **波線**
5. **テキスト（文字やラベル）**

これらの図形を組み合わせて、複雑なパターンやデザインを作成することも可能です。各図形の位置やサイズ、色などを細かく指定することで、希望するビジュアルを実現できます。
***

　まぁ、言葉での指定で
　　複雑な図形を描くことは
　　　ツールを使うことに比べたら
　　　　手間が掛かり過ぎる
　　　　　気がしますがね😅

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

　今回は、ここまで。
#1 Reactの基本的なコードの枠組み

## Reactの基本的なコードの枠組みを理解する

以下のコードを用いて、それぞれのコードがどのような役割をしているのか整理していこうと思います。

```
import React from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';

class Hogehoge extends React.Component {
  constructor(props) {
    super(props);
    this.state = { ...INITIAL_STATE };
  }

  componentDidMount() {
    
  }

  render() {
    const { aaa } = this.state;

    return (
    );
  }
}

export default connect(
  (state) => state,
  (dispatch) => ({
    dispatch,
    ...bindActionCreators(
      {
        call
      },
      dispatch
    ),
  })
)(Hogehoge);
```



#### importエリア
必要なライブラリなどを用意するエリア。
```
import React from 'react';
```
Reactライブラリをインポートする。
```
import { connect } from 'react-redux';
```
ReduxとReactを接続するための関数をインポートする。
```
import { bindActionCreators } from 'redux';
```
アクションクリエイターをディスパッチにバインドするための関数をインポートする。


#### クラス定義エリア
```
class Hogehoge extends React.Component {
```
このコンポーネントはReactのComponentクラスを継承しているよっていうのを宣言しているだけ。

#### コンストラクタエリア

そもそもコンストラクタってなんですかと言うと、クラスのインスタンスが作成されたときに自動的に呼び出される特別なメソッドのこと。
①初期化: オブジェクトの初期状態の設定
②依存関係の注入: 必要な依存関係の提供
のために使用するよ。

```
  constructor(props) {
```
constructor: コンストラクタメソッドの定義。
props: 親コンポーネントから渡されたプロパティを受け取りますという記載。これにより、コンポーネントがそのプロパティを使って初期化されるようになるよ。

```
super(props);
```
親クラスのコンストラクタを呼び出すためのもの。つまり、React.Componentのコンストラクタを呼び出し、propsを親クラスに渡す。これによって、this.propsがコンポーネント内で正しく利用できるようになるのです。

 ```
this.state = { ...INITIAL_STATE };
 ```
this.stateっていうのはコンポーネントの状態（state）を表していて、スプレッド構文（...）を使用して、INITIAL_STATEのすべてのプロパティをthis.stateにコピーしているよ。


#### componentDidMountエリア
```
  componentDidMount() {
}
```
コンポーネントがDOMに追加されたとき（簡単にいうとブラウザに表示される時）に呼び出されるライフサイクルメソッドです。APIコールやデータのフェッチなどの副作用をここで行うことが一般的。
①データの取得: APIからデータを取得したり、サーバーにリクエストを送信します。
②サブスクリプションの設定: イベントリスナーやタイマーを設定します。
などの処理を行うよ。

#### renderエリア
 Reactコンポーネントのライフサイクルメソッドの一つであり、UIを描画するためのもの。このメソッドは、Reactがコンポーネントを描画する際に呼び出されます。

```
   render() {
    const { aaa } = this.state;
```
 render()メソッドの上部では、表示する内容を動的に決定するための変数やロジックを定義したり、条件レンダリングを記載したりします。

#### returnエリア
render()メソッド内のreturn文は、実際に描画されるJSX（JavaScript XML）を返します。return文の中で、コンポーネントのUIを定義するということだね。

```
    return (
      // JSXのレンダリング
    );
```

return文内で、コンポーネントが描画するJSXを返します。ここにはHTMLタグや他のReactコンポーネントを含むことができます。

#### Reduxとの接続エリア
connect: HogehogeコンポーネントをReduxストアに接続します。
(state) => state: Reduxストアの状態をコンポーネントのpropsとしてマッピングします。
(dispatch) => ({ ... }): Reduxのdispatchメソッドをコンポーネントのpropsとしてマッピングします。ここでは、dispatchとbindActionCreatorsを使って、アクションクリエイターcallをバインドしています。

```
export default connect(
  (state) => state,
  (dispatch) => ({
    dispatch,
    ...bindActionCreators(
      {
        call
      },
      dispatch
    ),
  })
)(Hogehoge);
```
#### アクションクリエイターのバインドエリア
bindActionCreators: アクションクリエイターをディスパッチにバインドします。これにより、コンポーネントからthis.props.callのようにしてアクションを呼び出すことができます。
    
    ...bindActionCreators(
      {
        call
      },
      dispatch
    ),
【VBA】Wordをhtmで保存するマクロ

WordをHTML形式で保存するためのExcelマクロを作成するためには、Excel VBAを使ってWordを操作する必要があります。以下の手順で実装できます：

1. Excel VBAのエディタを開きます。（Alt + F11）
2. 新しいモジュールを挿入します。（挿入 > モジュール）
3. 以下のコードをコピーして貼り付けます。

```vba
Sub SaveWordAsHTML()
    Dim wdApp As Object
    Dim wdDoc As Object
    Dim filePath As String
    Dim savePath As String
    
    ' Wordアプリケーションを起動または取得
    On Error Resume Next
    Set wdApp = GetObject(, "Word.Application")
    If wdApp Is Nothing Then
        Set wdApp = CreateObject("Word.Application")
    End If
    On Error GoTo 0
    
    ' 保存したいWordファイルのパスを設定
    filePath = "C:\path\to\your\document.docx"
    
    ' 保存先のパスを設定
    savePath = "C:\path\to\save\document.html"
    
    ' Word文書を開く
    Set wdDoc = wdApp.Documents.Open(filePath)
    
    ' HTML形式で保存
    wdDoc.SaveAs2 savePath, 8 ' 8はwdFormatHTML
    
    ' 文書を閉じる
    wdDoc.Close False
    
    ' Wordアプリケーションを終了
    wdApp.Quit
    
    ' オブジェクトを解放
    Set wdDoc = Nothing
    Set wdApp = Nothing
    
    MsgBox "保存が完了しました。", vbInformation
End Sub
```

### コードのポイント
- `filePath`に変換したいWordファイルのパスを指定します。
- `savePath`にHTML形式で保存するファイルのパスを指定します。
- `SaveAs2`メソッドの第二引数に8を渡すことで、HTML形式で保存します。

このコードを実行すると、指定したWordファイルがHTML形式で保存されます。パスを必要に応じて変更してください。
Pine64にバッテリーを実装

## はじめに
こんにちは、低浮上になっていたbockringです。Pine64 A+をバッテリー駆動できるように改造して来ました(事後報告)ので、記事にしました。

とはいえ、実装したバッテリーは小容量(680mAh)の物ですので、ガンガン使用する、と言うよりは瞬停・瞬低やケーブルの一時的な抜き差しに耐えるためのものになります。気が向いたら大容量のものに換装しますが今は取り敢えずで。

## 使用するもの
バッテリー:Canon IXY互換バッテリー(680mAh;ROWA･JAPAN輸入)
ワイヤ:そこら辺に転がっているもの
ビニールテープ:絶縁用(これは絶対必要！)
両面接着スポンジテープ:バッテリー接着用(ビニテで代用OK)

そして…

**Your Soldering Skill!!!(あなたの半田付けの技術力)**

が必要になります。自信のない方はコネクタタイプのバッテリーを購入してください。

バッテリーはプラスマイナスの端子に加え、**サーミスタ内蔵**の3端子のタイプにしましょう。ということでカメラの3端子バッテリーを使用した訳です。

バッテリーの容量については、Pine64 Aの場合、約2~3Whですから、それを元に選択してください。3.7V=700mAhあたり1時間程度使用可能になります。

## 実装
まず、バッテリーにワイヤを半田付けします。

写真がどうもパッとしなかったので手描きです。おそらくこれからは手描き図が登場する機会が多くなると思います。
![IMG_1634.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/b0eb488a-6e97-60e9-66e7-9cf9410fe09e.jpeg)
これをボードに接続します。パッドに半田付けするだけなのでカットです。

## 実使用
キーボードとWi-Fiドングルのみアクセサリとして使用します。

問題(?)発覚。使用したバッテリーはサーミスタ対応品です。温度や電流保護で落ちてしまいます。

加えて、Minetestでテストしましたが、GPUキャッシュのオーバーフローによるブラックアウトの発生頻度が上がりました。

## おわりに
バッテリーは停電時のバックアップ程度と考えるのが賢明そうです。安全にシャットダウンできるだけマシです。これでハード使用はしませんし、バッテリー拡張もやめておきます。

それではまた〜
picoGym Exclusive writeup GDB baby step 2

## GDB baby step 2 (Reverse Engineering)

Can you figure out what is in the eax register at the end of the main function? Put your answer in the picoCTF flag format: picoCTF{n} where n is the contents of the eax register in the decimal number base. If the answer was 0x11 your flag would be picoCTF{17}. Debug this.

添付ファイル
・debugger0_b

`chmod +x debugger0_b`でdebugger0_bを実行可能にする。gdbを起動して逆アセンブルする。
```
(gdb) disassemble main
Dump of assembler code for function main:
   0x0000000000401106 <+0>:     endbr64 
   0x000000000040110a <+4>:     push   rbp
   0x000000000040110b <+5>:     mov    rbp,rsp
   0x000000000040110e <+8>:     mov    DWORD PTR [rbp-0x14],edi
   0x0000000000401111 <+11>:    mov    QWORD PTR [rbp-0x20],rsi
   0x0000000000401115 <+15>:    mov    DWORD PTR [rbp-0x4],0x1e0da
   0x000000000040111c <+22>:    mov    DWORD PTR [rbp-0xc],0x25f
   0x0000000000401123 <+29>:    mov    DWORD PTR [rbp-0x8],0x0
   0x000000000040112a <+36>:    jmp    0x401136 <main+48>
   0x000000000040112c <+38>:    mov    eax,DWORD PTR [rbp-0x8]
   0x000000000040112f <+41>:    add    DWORD PTR [rbp-0x4],eax
   0x0000000000401132 <+44>:    add    DWORD PTR [rbp-0x8],0x1
   0x0000000000401136 <+48>:    mov    eax,DWORD PTR [rbp-0x8]
   0x0000000000401139 <+51>:    cmp    eax,DWORD PTR [rbp-0xc]
   0x000000000040113c <+54>:    jl     0x40112c <main+38>
   0x000000000040113e <+56>:    mov    eax,DWORD PTR [rbp-0x4]
   0x0000000000401141 <+59>:    pop    rbp
   0x0000000000401142 <+60>:    ret    
End of assembler dump.
```
movが続いたあと、\<main+48\>にjmpして、何らかの計算をして\<main+38\>にjmpするループがあり、その後eaxに演算結果を格納している。
\<main+56\>の実行後のeaxを確認したいので、\<main+59\>にブレイクポイントを設定して実行したあと、eaxレジスタの情報を確認する。
```
(gdb) break *main+59
Breakpoint 1 at 0x401141
(gdb) r
Breakpoint 1, 0x0000000000401141 in main ()
(gdb) info registers eax
eax            0x4af4b             307019
```

`picoCTF{307019}`
AWS Certified Solutions Architect - Professional（SAP-C02）合格体験記（2024/07）

## はじめに
2023年からAWS資格取得にチャレンジしています。
アソシエイトは取り終えたため（新設除く）、2024年はプロフェッショナル資格にチャレンジしています。
今回は目標資格の最後の1つ、SAPを受験してきました。

## まずは結果から
苦戦しましたが、なんとか合格しました。
点数は834点でした。（思ったより取れてたという感触です…）

## 試験の傾向
SAAの上位資格となりますが、個人的な感覚としては、
SAAが実務寄りのサービスの組み合わせを問われた印象でしたが、
SAPはもっとクラウド戦略的？なところの分野かなと思いました。

技術面はこれまで学習したことがベースにはなりますが、範囲が広いため覚えることも多かったです。
特に以下の観点やサービスは多かった気がします。
（ネットワーク関連の理解には苦労しました）

- DR戦略：アクティブ・アクティブ／ウォームスタンバイ／パイロットライト​／バックアップ・リカバリ
- ネットワーク：VPCエンドポイント・DirectConnect・TransitGateway・仮想インターフェース・Route53Resolver・…
- 組織の管理：ServiceCatalog・ControlTower・Organization・ResourceAccessManager・Budgets…
- 移行：ApplicationDiscoveryService・MigrationHub・MigrationService・Datasync・SnowballEdge…

試験自体の特徴としては、とても文章が長い（問題も回答も）です。
もともと集中力のない私は、学習中も本番の試験でも集中力を保つのが大変でした。
ふと気が抜けてしまって、また最初から読み直さないといけないという場面が何度もありました。
先輩からは悟りを開けという有難いアドバイスをいただいてました。

## 学習方法
### WEB問題集
-  CloudLicense

https://cloud-license.com/

いつも通りお世話になりました。
#13以降のセクションのみ行いました。

今回はモチベーション保つのが難しかったので、7問単位のセクションがちょうど良かったです。1セクションやってちょっと休憩、みたいな感じで進めました。

学習方法も、こんな感じ（いつも通り）で進めました。
1. とりあえず1周。知らない・分からない問題にはとりあえずマーク。
（1周目の正答率は58%）
1. 間違った問題に対して再挑戦して復習
1. 1と2をもう1回最初から。
（2周目になると80%。間違えた箇所は繰り返してほぼ100%の状態にしました）
1. 本試験モードを3回くらい
（9割は取れるレベルまで）
<br>

- 公式問題集

https://explore.skillbuilder.aws/learn/course/external/view/elearning/13272/aws-certified-solutions-architect-professional-official-practice-question-set-sap-c02-japanese

公式問題集です。こちらは毎回実施しておくといいと思います。


## 試験当日
制限時間180分で75問。これまでのテストではかなり時間が余ったのですが、
今回は非常に苦戦しまして、初めてラスト3分まで使いました。
長文問題が厄介で、問題文・選択肢を何回か読み直して、何分か答え悩んで一旦見直しマーク、、問題集で見慣れたような問題は即答して時間を稼ぎました。（即答できた問題は7割くらい）
一通り終わった時点で残り40分。

ここから見直しタイムで制限時間いっぱいまで。マーク付けたのは15問程度。
普段見直しはあまりしないのですが
今回は選んだ選択肢に自信が無かったものが多かったので、改めて長文の中から正解に繋がるヒントを探すために何度か読み返しました。
見直しして回答変えたものもあるので、結果として良かったかなと思います。

結果は19時過ぎにでました。
ちょっと心配だったのですが、合格していてよかったです。
今回はちゃんと合格を確認してから祝杯あげました。

## 感想
試験の難易度もモチベーション保つのも難しかったです。
長い文章にめげず、文章中のポイントを探しだすテクニックというのが重要だなと思いました。
また、今回はCloudLicenseのみで挑んでみたのですが、ソリューションアーキテクトの試験対策としては、色んな問題を数多く解くことが大事だったなと思いました。他の問題集もこなしておけば、より安全に臨めたかなと思いました。（モチベーションが保てたならば…）

次回更新する意欲でるのか…という懸念もありますが、それはまた3年後に考えたいと思います。
ひとまず目標としていたところまでは取得できたので良かったです。

## 次は
まだちゃんと調べてない状態ですが、新設のデータ分析アソシエイトを狙えたらなと思います。
（スペシャリティも視野に入れつつ…）

最後まで読んでいただき、ありがとうございました！

## AWSの相談・お困りごとありましたら、、、
AWSの活用方法や、お困りごとの相談、随時、お仕事の受付しております。

https://www.cs-cloud-aid.com/
1分でTypeScript のコードを試すためのローカル環境を作る

2024 年 7 月時点でのメモです
Node.js の環境準備はできていることを想定しています。


## インストール

```bash:ターミナル
npm init -y
npm i -D typescript ts-node-dev @types/node
```

## 設定ファイルの作成

```bash:ターミナル
npx tsc --init
npm i -D @tsconfig/recommended
```

```json:tsconfig.json
{
  "extends": "@tsconfig/recommended/tsconfig.json"
}
```

## npm scripts の登録

```json:package.json
{
  ...
  "scripts": {
    "start": "ts-node-dev --respawn --transpile-only index.ts"
  },
  ...
}
```

## コードを試す

```ts:index.ts
console.log('Hello World!!');
```

```bash:ターミナル
npm run start
```

## 番外編

ExpressでREST APIサーバーをたてる

```bash:ターミナル
npm i express
npm i -D @types/express
```

```typescript:index.ts
import express from "express";

const PORT_NUMBER = 3000;

const app = express();

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.post("/", (req,res) => {
  if (req.body) {
    console.dir(req.body);
    return;
  }
  console.log("error");
});

app.listen(PORT_NUMBER, () => {
  console.log(`Server is running on http://localhost:${PORT_NUMBER}`);
});

```

## 参考サイト

<https://typescriptbook.jp/reference/tsconfig/tsconfig.json-settings#%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AEtsconfigjson>
<https://github.com/tsconfig/bases>
<https://github.com/wclr/ts-node-dev#readme>
成功するアプリケーション開発者のための実践的なアプローチ

### はじめに
**本記事はQmonus Value Streamの投稿キャンペーン記事です**

プログラマーとして働き始めてから、数々のプロジェクトに携わってきました。
しかし、ある時期に、特に忙しいプロジェクトに従事していた時に、ふと「現状よりさらに効率よく、さらに集中して開発に取り組む方法はないだろうか」と考えるようになりました。
今回は、私自身が試行錯誤しながら考えた、開発に注力するための工夫についてご紹介させていただきます。
もちろん人によって最適解な方法は変わるものだと思いますので参考までに見ていただき、また皆様のご意見もいただけますと幸いです。

### 1. 目標の明確化

プロジェクトの最初に行うべきは、目標を明確にすることだと思いました。
聞く人によっては至極当然な話かと思いますが、私が以前関わったプロジェクトでは、目標が曖昧であったために、何度か方向性を見失い、無駄な作業が増えてしまいました。（実際経験にはなるので完全に無駄にはならないと思いますが、円滑なプロジェクト遂行上では無駄かと思いました）
それ以来、プロジェクトの開始時には必ずチームで目標を共有し、細かいタスクに分解してから取り組むようにしています。これにより、何を優先すべきかが明確になり、以前と比較すると効率よく作業を進めることができていると思います。

### 2. 作業環境の整備

私が集中できる環境を作るために行った工夫の一つに、作業環境の整備があります。これに関しては人それぞれのこだわりであったり合う合わないが顕著に出る部分だと思います。
私の場合は、椅子や座面クッションにこだわり、正しい姿勢をできるだけキープできるようにしています。所感ではありますが、集中の持続時間が伸びているように思います。
また、私はあまり合わなかったため取り入れておりませんが、BGMを流すことで集中力が高まるという意見もよく耳にします。様々な工夫があると思いますが、自分に合った環境を見つけることはとても重要であると思います。

### 3. タイムマネジメントの徹底

時間の使い方も大きな鍵になると考えています。私は「ポモドーロ・テクニック」を取り入れることで、集中力を維持しやすくなりました。25分間集中して作業し、5分間の休憩を取る。このサイクルを繰り返すことで、長時間集中することができるようになり、生産性が向上しました。

### 4. 適度な休息とリフレッシュ

長時間の作業は体と心に大きな負担をかけます。幸い私はまだ経験しておりませんが、プロジェクトの締め切りに追われ、休む間もなく働くことで心身ともに体調を崩し、逆に効率が落ちてしまうこともあると思います。
そのような事態にならないために、適度な休息とリフレッシュを心がけるようにしています。
例えば、昼食後に少し散歩をしたり、週末には趣味に時間を使ったりすることで、リフレッシュし、心身ともに回復することで次の週も全力で取り組むことができるようになると思います。

### 5. チームワークの強化

アプリケーション開発はチームで行うことが多いため、チームワークの強化も重要です。
私は定期的にチームメンバーとコミュニケーションを取り、問題点や進捗状況を共有するようにしています。また、チーム内での役割分担を明確にし、お互いの強みを活かすことができるように工夫しています。これにより、チーム全体のパフォーマンスが向上し、プロジェクトがスムーズに進行するようになりました。

### 6. 継続的な学習と改善

最後に、これは一番当たり前であり、そして一番難しい問題かもしれません。
継続的な学習と問題の改善です。この職業を続けるうえで、勉強をしなくても良くなることは無いと思っています。
たとえ現状でどんなにエキスパートであっても、技術が目まぐるしく進歩する界隈であるがゆえに、技術の流行りや廃りにも敏感に対応していかなければならないと思います。
私は新しい技術やツールを積極的に学び、自分のスキルを向上させることを心がけています。
プロジェクト終了後には振り返りを行い、何がうまくいったのか、何が改善できるのかを考えるようにしています。
このプロセスを繰り返すことで、常に自分自身をアップデートし、次のプロジェクトに活かすことができるよう考えることを続けています。

### おわりに

今回、アプリケーション開発に注力するための工夫を自身の経験から振り返ってみて紹介させていただきました。

・目標の明確化
・作業環境の整備
・タイムマネジメントの徹底
・適度な休息とリフレッシュ
・チームワークの強化
・継続的な学習と改善。

このように書き出してみると、どれも月並みなものばかりだと思います。
しかし、今まであまりこのような視点を考えてこなかった方は、これらの工夫を取り入れることで、より効率よく、効果的にアプリケーション開発に取り組むことができるようになると思います。

あまり考える機会のなかった方々はぜひ、これらの工夫を参考にして、自分に合った方法を見つけてみてください。
そして、皆様の工夫等もぜひ紹介いただけますと幸いです。
Rustのビルドでいろいろエラーが出る場合

Rustの、Tcl/Tkラッパーである「tcl」と「tk」クレートをWindowsでビルドしようとしたら、libclangが見つからないなど、いろいろなエラーが出て、解決が難しかったので、ここにメモしておきます。

### 再現するかのテスト

まず、WindowsのRustで、[ActiveTcl](https://www.activestate.com/products/tcl/)をインストールした後で、ターミナルから、Tcl/Tkのラッパーをインストールして、ビルドするだけでlibclangが見つからないというエラーが出ます。

```sh
# Tcl/Tkをラップするクレートのインストール
cargo add tcl tk
# ビルドを実行
rust build
```

次のようなエラーです。

```
thread 'main' panicked at 'Unable to find libclang: "couldn't find any valid shared libraries matching: ['clang.dll', 'libclang.dll'] …
```

前提条件ですが...

- Windows版のRust(ネイティブコンパイラ)を使用している
- `rustup -v`で見ると、1.27.1 であるが、もっと低いバージョンでも同じエラーが出ている
  - rustup 1.27.1 (54dd3d00f 2024-04-24)
- `rustup show`で見ると、`stable-x86_64-pc-windows-msvc (default)`が選択されている


### エラーの原因は？

そして、エラーメッセージからいろいろ調べてみると、最新版のRustのLLVMのバージョンがうまくマッチしていないのが原因？のようです。

ChocolateyでLLVMの最新版をインストールすると解決するというヒントを見つけました。

- (参考) https://users.rust-lang.org/t/visual-studios-libclang-dll-inaccessible-to-rust/91363

### 直接的な解決策

Chocolatey (https://chocolatey.org/) をインストールして、管理者権限でPowerShellを起動して以下のコマンドを実行します。

```sh
choco install llvm
```

その後、`cargo run`を実行すると、正しくビルドが行われました。

### 「stdio.hがない」とエラーが出る場合

以下のように`stdio.h` がないというエラーが出る場合があります。

```
thread 'main' panicked at 'bindgen builder constructed.: ClangDiagnostic(
… fatal error: 'stdio.h' file not found\n")
```

この場合、[Visual Studioをインストール](https://visualstudio.microsoft.com/ja/vs/community/)して、「C++によるデスクトップ開発」にチェックを付けてインストールする必要があります。

![スクリーンショット 2024-07-18 8.53.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33180/7f671376-478e-4a8f-5064-b89819b66515.png)


### その他 Tcl/Tkのパスの問題

また、[本家Rustのtkクレートの情報](https://oooutlk.github.io/tk/installing_tk_on_windows.html)によると、ActiveTclのインストール先をデフォルトでインストールする必要があるようです。

1. インストール先を以下にしなくてはならない
実行ファイルが、以下のパスにあること
`C:\ActiveTcl\bin\wish.exe`

2. 上記を実行して、バージョンが表示されること
`% info patchlevel`

### 表示された！

問題なくTcl/Tkのビルドがうまくいって、適当なサンプルをビルド売ると、下記のように表示されます。

![スクリーンショット 2024-07-17 10.18.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33180/92f8d51b-1a8c-4249-f234-781de49576e7.png)

### まとめ

Rustの中だけで全てが解決する場合は、ビルドにそれほど問題がないのですが、C++で作ったライブラリをリンクしようと思う場合には、環境の構築などのそれなりにノウハウが必要となるようです。
picoGym Exclusive writeup GDB baby step 1

## GDB baby step 1 (Reverse Engineering)

Can you figure out what is in the eax register at the end of the main function? Put your answer in the picoCTF flag format: picoCTF{n} where n is the contents of the eax register in the decimal number base. If the answer was 0x11 your flag would be picoCTF{17}. Disassemble this.

添付ファイル
・debugger0_a

debugger0_aはELFファイル。`objdmp`を使っても良いが、タイトルにGDBと入っているので、`gdb`を使う。
```
> gdb debugger0_a
(gdb) disassemble main
Dump of assembler code for function main:
   0x0000000000001129 <+0>:     endbr64 
   0x000000000000112d <+4>:     push   %rbp
   0x000000000000112e <+5>:     mov    %rsp,%rbp
   0x0000000000001131 <+8>:     mov    %edi,-0x4(%rbp)
   0x0000000000001134 <+11>:    mov    %rsi,-0x10(%rbp)
   0x0000000000001138 <+15>:    mov    $0x86342,%eax
   0x000000000000113d <+20>:    pop    %rbp
   0x000000000000113e <+21>:    ret    
End of assembler dump.
```
Intel記法が良ければ`set disassembly-flavor intel`を実行。
```
0x0000000000001129 <+0>:     endbr64 
0x000000000000112d <+4>:     push   rbp
0x000000000000112e <+5>:     mov    rbp,rsp
0x0000000000001131 <+8>:     mov    DWORD PTR [rbp-0x4],edi
0x0000000000001134 <+11>:    mov    QWORD PTR [rbp-0x10],rsi
0x0000000000001138 <+15>:    mov    eax,0x86342
0x000000000000113d <+20>:    pop    rbp
0x000000000000113e <+21>:    ret
```
eaxレジスタに0x86342を格納していることが分かる。

`picoCTF{549698}`
Microsoft Wordの数式のフォント

Microsoft Wordで数式を書くとき、フォントがTimes (New) Romanにならなくて困ることがたまにあります。 Word内でフォントを変更しようとしても変更できません。解決方法はググると見つかりますが、以下のフォントをインストールして利用することで解決します。

- [Latin Modern Math](https://ctan.org/tex-archive/fonts/lm-math/opentype)
- [XITS Math](https://ctan.org/tex-archive/fonts/xits/)

上の二つを比べるとXITS Mathの方がTimes New Romanに近いと思います。

年に1度くらいしか必要なことが無いのでフォント名を忘れしまうので、自分用noteとして書きました。

良い機会なので、毎回数式のフォントを変更するのが面倒なので、以下のようにデフォルトのフォントを設定しておきました。

1. メニューバーのFormat>Equation Options...を選択
1. Equationsパネルの"Default font for equations"をXITS Mathに設定
準備ほぼゼロ！「さらっと一通り学習したい」に応えるアジャイル・スクラム基礎勉強会

# はじめに
スクラムマスターとして現チームにジョインして2ヶ月。開発者から「アジャイル・スクラムの基礎を、さらっと一通り学習（復習）したい！」とリクエストをもらい、チームで勉強会を実施しました。参加は私含めて4人のプチ勉強会です。
# 教材どうするか
- 想定時間：３〜４時間
- 形式：インタラクティブに感想・知識・経験のシェアをしながら学びを深めたい

この２点と、「さらっと一通り」が叶うようにということで、永和システムマネジメントさんのアジャイル動画を使わせていただきました！

https://agile-douga.tv/collections/learning-agile?page=1
# なんと素敵！miroのテンプレートが提供されている
![スクリーンショット 2024-07-16 20.44.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3815995/cca451df-ee85-58bb-56a9-dac41593811f.png)


![スクリーンショット 2024-07-16 20.42.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3815995/46223330-e996-0537-223f-46e1a8aa42d8.png)

https://miro.com/app/dashboard/?tpTemplate=1a559294-8e6a-4d65-ae0f-73d3d573e876&isCustom=false&share_link_id=344141702452

まさに神です。
無料動画だけでもありがたいのに、miroのテンプレートまで！大変ありがたいです。
miroのアカウントがあれば、こちらを使わせていただけます。

私が準備に要した時間は、ほぼゼロです。空のボードを用意して、このテンプレートをインポートしたのと、２〜３の動画を見てみただけです。

# 実施してみて
２２本の動画で、各動画は長くても１０分程度、多くは5分程度になっています。
#### 進め方
1. みんなで動画を見ながら、各自感想や質問をふせんにあげていく（その間、SMの私は補足になるような図や資料をさがしておく）
2. 見終わったら発表。発表に対して経験や理解をシェアしたり、自由にコメントする（必要に応じて補足資料をmiroに置いて説明）
3. 繰り返す
※１回の時間枠内で進められるところまで繰り返し、続きは次回

参加者のフィードバックも踏まえ、よかった点とよくなかった点を紹介します。
#### よかった点
- 各動画が短く、考えてアウトプットするサイクルが小さく回せ、飽きないし集中しやすい
- 基礎的な内容だからこそ、振り返ったり考えたりすることに集中できた。それぞれの経験と結びつけてシェアしやすかった
- 参加者のこれまでの経験・知識を知ることができ、様々な視点から意見を聞くことができた
- 参加者それぞれが何からしらの誤っていた知識を修正できた
- 少人数で話しやすかった
#### よくなかった点
- 当初宣言していた想定時間（3〜4時間）よりも時間がかかった。最終的に５〜６時間かかった
    - ディスカッションにかかる時間を適切に見積もれていなかった 
    - 似たテーマを２〜３動画続けて見るなど効率的にできたかも
- 実施日の間隔が空いてしまう（1週間以上空いた回があった）と少しモチベーションが下がってしまう
    - 空いても３日以内にするとか

#### 念の為
- 教材は基礎的な内容のため、経験者が新しい知識を身につけたい場合は別途適したものを検討したほうがよいです
# おわりに
チームでのアジャイル・スクラムの学習として、スクラムガイドの読み合わせはよく行われると思います。今回の「基礎をさらっと一通り学習したい」という要望には、この教材もぴったりだったと思います。
永和システムマネジメントさん、活用させていただきありがとうございました！！
また、ディスカッションをメインにしたのでよいチームビルディングにもなったと思います。

![スクリーンショット 2024-07-16 22.50.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3815995/a86f62a4-cc4f-6f54-88f3-19c327020fc5.png)
Mojoコマンドの人違い

Mojo🔥という優秀な言語がリリースされました(遅い)。サブPCで遊んでいたとある日、Mojoコマンドが動作しませんでした。
## 出力
```bash
$ mojo
Usage: APPLICATION COMMAND [OPTIONS]

  mojo version
  mojo generate lite-app
  ./myapp.pl daemon -m production -l http://*:8080
  ./myapp.pl get /foo
  ./myapp.pl routes -v

Tip: CGI and PSGI environments can be automatically detected very often and
     work without commands.

Options (for all commands):
  -h, --help          Get more information on a specific command
      --home <path>   Path to home directory of your application, defaults to
                      the value of MOJO_HOME or auto-detection
  -m, --mode <name>   Operating mode for your application, defaults to the
                      value of MOJO_MODE/PLACK_ENV or "development"

Commands:
 cgi       Start application with CGI
 cpanify   Upload distribution to CPAN
 daemon    Start application with HTTP and WebSocket server
 eval      Run code against application
 fastcgi   Start application with FastCGI.
 generate  Generate files and directories from templates
 get       Perform HTTP request
 inflate   Inflate embedded files to real files
 prefork   Start application with pre-forking HTTP and WebSocket server
 psgi      Start application with PSGI
 routes    Show available routes
 version   Show versions of available modules

See 'APPLICATION help COMMAND' for more information on a specific command.
```
このような出力がされたことから、MojoliciousというPerlで書かれたリアルタイムWebフレームワークだとわかりました。
Mojoliciousは、シンプルかつ強力なウェブアプリケーションを構築するためのフレームワークで、非同期I/O、WebSocket、JSON、テンプレートエンジンなどの機能があるそうです。

## 結論
結論をいうと、もう一度Mojo🔥のパスを通してあげるだけでいいです。
```bash
MOJO_PATH=$(modular config mojo.path) \
  && BASHRC=$( [ -f "$HOME/.bash_profile" ] && echo "$HOME/.bash_profile" || echo "$HOME/.bashrc" ) \
  && echo 'export MODULAR_HOME="'$HOME'/.modular"' >> "$BASHRC" \
  && echo 'export PATH="'$MOJO_PATH'/bin:$PATH"' >> "$BASHRC" \
  && source "$BASHRC"
  ```
## おわり
なぜMojoliciousくんが私のUbuntuにお邪魔していたのかは不明です。おそらく何かしらの依存関係？じゃあパス無効にしちゃまずいか。
今のところ問題が発生していないので、様子見します。

## 参考文献

https://docs.modular.com/mojo/manual/get-started

https://www.mojolicious.org/
picoCTF 2022 writeup file-run1

## file-run1 (Reverse Engineering)

A program has been provided to you, what happens if you try to run it on the command line? Download the program here.

添付ファイル
・run

`wget https://artifacts.picoctf.net/c/219/run`でファイルをダウンロード。
`chmod +x run`でrunを実行可能にする。
`./run`でrunを実行。
フラグが出てくる。

`picoCTF{U51N6_Y0Ur_F1r57_F113_e5559d46}`
STUDIOでサイトを作ってみたのでまとめ

## これは何

初めてノーコードツールであるSTUDIOでサイトを作ってみたので、つまづいた点や気づきなどをまとめてみました。

## 便利ポイント

まずはSTUDIOを使ってみてめちゃくちゃ便利だと思ったところを紹介します。

### 無料でサクッとサイトの公開ができる

なんといってもこれが楽です。
サーバーとかドメインとかお金とか色々と面倒なことを考えなくても、STUDIO上でぽちぽち作って「公開」を押せばサイトの公開ができちゃいます。
Webの制作に詳しくなくても、OGPやtitleやDescriptionを入れる場所が用意されているので、こういう部分も忘れづらいです。

もちろん無料プランだと使える機能は制限されているので、この辺は必要に応じてプランを確認してください。

https://studio.design/ja/pricing

### Figmaからインポートできるプラグインが便利

Figma to STUDIO というプラグインを使うと、FigmaのデータをSTUDIOにインポートできます。
特に私はSTUDIOの操作に慣れていなかったので、STUDIOでデザインを再現していくのが結構大変でした。
このプラグインを使うとそこをサクッとできるのでかなり時短になります。

https://www.figma.com/community/plugin/1274345780965443906/figma-to-studio

Figmaのデータを作るときに「Auto layout」を使っておけば、だいたい狙い通りに生成されてくれます。

また、ページを丸ごとインポートすると重くなったり崩れたりするので、セクションごとなどに分割してインポートするとうまくいきやすいです。

https://studio.design/features/figma-to-studio

### 作りながらデザインを調整できる

STUDIOはノーコードツールなので「作りながらデザインする」みたいなことがしやすく、簡単めのデザイン調整ならFigmaを挟まずできたのが楽でした。

もちろんデザインツールではないのでデザインするならFigmaの方が楽なんですが、「実際のデータを反映しみたらちょっと変」みたいなときにSTUDIOでサクッとデザインの調整ができるのが便利でした。

とはいえ便利だからといってなんでもSTUDIO上でやりすぎると、「先にFigmaでちゃんと考えてから反映した方が早かったな」になるので、ラインは注意が必要です。

### 速い

ここまでのポイントを踏まえて、サイトをとにかくスピーディに作るとができました。

1枚もののページとかだとすごく便利な感じがします。

### アクセシビリティへの取り組み

代替テキストや`aria-label`と`aria-hidden`を設定できたり、見出しやリストなど必要なタグをきちんと設定できる点も良かったです。
また、STUDIOがアクセシビリティの取り組みを公開・発信しているので安心して使うことができました。

https://studio.design/ja/accessibility

### STUDIO Communityが便利

STUIDIOに関する機能改善のQ&Aが投稿されていて、STUDIOを使っていて詰まったところの答えが見つけやすくて助かりました。
「この機能ないのかな？」とかも大体欲しいと思うやつは要望がすでに出ているので、「まだない機能なんだな」というのがわかりやすくて沼にハマらずすみました。

https://community-ja.studio.design/home

## 個人的に使いづらかったところ

逆に使ってみて使いづらいと感じた点をまとめます。

### diffが見づらい

当たり前ですがノーコードツールなので、diffが見づらいと感じることがありました。

STUDIOはbreak pointを設定してレスポンシブデザインができるのですが、「どの要素をどのブレイクポイントで変更してるんだっけ？」がパッとわからないのがちょっと面倒でした。

また、公開済みのサイトを更新するときも、diffが見れないので「間違えていらないところ触っちゃってないかな..」と不安でした。

この辺はうまいコツとか知ってる方いたら教えて欲しいです...

## 詰まったところ

最後にちょっと詰まったところをメモしておきます

### 画像のサイズが `auto` にできない

画像のサイズに`auto`を指定したかったのですが、どこからするのかわからなくて少し詰まりました。

以下のヘルプ記事を参考に、`auto`を設定したい辺をダブルクリックすることで`auto`にできました

https://help.studio.design/ja/articles/9267520-%E7%94%BB%E5%83%8F%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AEimg%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A7%E7%B8%A6%E6%A8%AA%E6%AF%94%E7%8E%87%E3%81%8C%E5%B4%A9%E3%82%8C%E3%81%BE%E3%81%99

### 「ボックスの親子関係が保存できる最大の深さを超えたためデータを保存できません」

Figma to STUDIOを使ってFigmaからデータをインポートしたところ、「ボックスの親子関係が保存できる最大の深さを超えたためデータを保存できません」というエラーが出てしまいました。

:::note warn
このエラーが出た時はデータが保存できてないので、リロードとかすると変更が消えます
:::

私の場合原因はFigmaで余白をRectangleで作っていたり、下線をつけるためにFrame増やしたり、Figma上で見た目を実現するために増やしたレイヤーでした。

Figma to STUDIOを使うときは、なるべく小さい単位でインポートしてエラーが出たら丁寧に造りを直していけば基本大丈夫です。

https://help.studio.design/ja/articles/2680848-%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AF%E4%BD%95%E9%87%8D%E3%81%8F%E3%82%89%E3%81%84%E3%81%BE%E3%81%A7%E5%85%A5%E3%82%8C%E5%AD%90%E3%81%AB%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B
PDF翻訳ツール、どれが一番良いのでしょうか？

　インターネットが発達した時代、さまざまな言語の資料を手に入れるようになりました。でも、たくさんの英語の資料やPDF文書を読むと、いくら英語が得意でも、母国語で読むのが一番スムーズですね。そこで、今日は無料で利用できるAI PDF翻訳ツール「Doclingo」を紹介します。

### 1. まず、ホームページで翻訳したい文書をアップロードします。

![スクリーンショット_11-7-2024_231045_www.doclingo.ai.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3825442/f6e40819-147b-0330-7079-f5d34aff6bd5.jpeg)

### 2. 次に、翻訳言語を設定します。設定が完了したら、翻訳エンジンを選択して「翻訳」をクリックします。
![スクリーンショット_11-7-2024_231247_www.doclingo.ai.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3825442/2e403584-490f-5b4e-0383-638cdfd556ae.jpeg)

### 3. 翻訳が完了すると、プレビュー画面に翻訳結果が表示されます。翻訳文書を保存したい場合は、「ダウンロード」をクリックするだけでいいです。
![スクリーンショット_11-7-2024_231931_www.doclingo.ai.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3825442/2ed54018-9d4d-835d-0bcc-4a8a18ebaf12.jpeg)

　どうでしょう。簡単ですね:relaxed:。[doclingo.ai]("https://www.doclingo.ai/ja/")
picoGym Exclusive writeup Bit-O-Asm-4

## Bit-O-Asm-4 (Reverse Engineering)

Can you figure out what is in the eax register? Put your answer in the picoCTF flag format: picoCTF{n} where n is the contents of the eax register in the decimal number base. If the answer was 0x11 your flag would be picoCTF{17}. Download the assembly dump here.

添付ファイル
・disassembler-dump0_d.txt

disassembler-dump0_d.txtをテキストエディタで開く。
```
<+15>:    mov    DWORD PTR [rbp-0x4],0x9fe1a
<+22>:    cmp    DWORD PTR [rbp-0x4],0x2710
<+29>:    jle    0x55555555514e <main+37>
<+31>:    sub    DWORD PTR [rbp-0x4],0x65
<+35>:    jmp    0x555555555152 <main+41>
<+37>:    add    DWORD PTR [rbp-0x4],0x65
<+41>:    mov    eax,DWORD PTR [rbp-0x4]
```
cmpで0x9fe1aと0x2710を比較。jleはless or equalであるから、`0x9fe1a > 0x2710`より、jmpしない。
subで`0x9fe1a - 0x65 = 0x9fdb5`をDWORD PTR [rbp-0x4]に格納。jmpで<+41>に移動してmovで0x9fdb5をeaxに格納。よってeaxレジスタには`0x9fdb5 = 654773`が入っている。

`picoCTF{654773}`
Redshift Serverless の RPU の使用量の推移をみる

## SQL

```SQL
-- where句は JST に変換してる
SELECT * FROM SYS_SERVERLESS_USAGE 
where start_time >= (timestamp '2024-07-10 15:00:00' - time '09:00:00') 
  and end_time <= (timestamp '2024-07-10 17:00:00' - time '09:00:00')
order by start_time asc limit 200;
```

## リンク

* [テーブルのカラム毎の役割とか](https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/SYS_SERVERLESS_USAGE.html)
※割り当てられた RPU 以外にも実際に計算した時間とかも見れる
Unityを再生した時、タイムラインでキャラクター表示したときに揺れ物がファサーってするのを抑えるスクリプト

普段から映像作品を制作するときに意外と厄介な揺れものがファサーっとなるやつを抑制するスクリプトです。
VRMのキャラクターモデルにcomponentするだけで抑制できるので、困っていた人は使ってみてください。

### スクリプトなしバージョン
![Movie_021.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609493/8023ee34-0ad4-8c1c-791b-3e1f0f5b8c13.gif)

### スクリプトありバージョン
![Movie_022.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609493/21ea4e21-7723-458d-0391-62a0582bcda8.gif)

    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    using VRM;
    
    public class SpringBoneController : MonoBehaviour
    {
        public float stabilizationDuration = 0.5f; // 安定化する時間（秒）
        
        private VRMSpringBone[] springBones;
        private Dictionary<VRMSpringBone, (float stiffness, float dragForce)> originalParameters;
        private bool wasInactive = true;
        private Coroutine stabilizeCoroutine;
    
        private void Awake()
        {
            springBones = GetComponentsInChildren<VRMSpringBone>(true);
            originalParameters = new Dictionary<VRMSpringBone, (float, float)>();
    
            foreach (var springBone in springBones)
            {
                originalParameters[springBone] = (springBone.m_stiffnessForce, springBone.m_dragForce);
            }
        }
    
        private void OnEnable()
        {
            if (wasInactive)
            {
                wasInactive = false;
                if (stabilizeCoroutine != null)
                {
                    StopCoroutine(stabilizeCoroutine);
                }
                stabilizeCoroutine = StartCoroutine(StabilizeSpringBones());
            }
        }
    
        private void OnDisable()
        {
            wasInactive = true;
            if (stabilizeCoroutine != null)
            {
                StopCoroutine(stabilizeCoroutine);
                stabilizeCoroutine = null;
            }
            RestoreOriginalParameters();
        }
    
        private IEnumerator StabilizeSpringBones()
        {
            foreach (var springBone in springBones)
            {
                springBone.m_stiffnessForce = 1000f; // 非常に高い剛性
                springBone.m_dragForce = 1f; // 最大のドラッグフォース
            }
    
            yield return new WaitForSeconds(stabilizationDuration);
    
            RestoreOriginalParameters();
            stabilizeCoroutine = null;
        }
    
        private void RestoreOriginalParameters()
        {
            foreach (var springBone in springBones)
            {
                if (originalParameters.TryGetValue(springBone, out var originalValues))
                {
                    springBone.m_stiffnessForce = originalValues.stiffness;
                    springBone.m_dragForce = originalValues.dragForce;
                }
            }
        }
    }
robloxでassistant その131

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
スクリプトだけで、箱にサウンドエフェクトせよ。

# 手順
- ReplicatedFirstに、LocalScriptを追加。
- スクリプトを書く。

```

local RunService = game:GetService("RunService")
local part = Instance.new("Part")
part.Position = Vector3.new(-5, 6, -10)
part.Parent = workspace
local sound;
local function createSound(id, volume)
	local sound = Instance.new("Sound")
	sound.SoundId = "rbxassetid://" .. id
	sound.Volume = volume or 5
	sound.Parent = part
	return sound
end
local function updateColor(deltaTime)
	local hue = sound.PlaybackLoudness / 1000
	part.Color = Color3.fromHSV(hue, 1, 1)
end
sound = createSound(3308152153)
sound:Play()
RunService.RenderStepped:Connect(updateColor)



```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/2953bdae-89db-b828-b95a-7f642276f621.png)


以上。
【2024年7月版】Ubuntu22.04のカーネルが最新にならないときのおまじないメモ【HWE】

# はじめに

各開発PCのパッチのあたりぐあいを確認していたら、

あれ？ カーネルのバージョンが違うぞ？
あれ？ apt update && apt upgrade してもカーネルが古いままだぞ？

となった方向けのメモ

たぶん、HWEがあたってない

# 環境

以下の `pc1` と `pc2` の２台の間で、カーネルのバージョンが違う、5系と6系で違う。
他のマシンをみても`6.5`なので、 `pc1` の `6.5` が採用したいバージョン。あわせたい。

- pc1
```terminal
$ uname -a
Linux pc1 6.5.0-44-generic #44~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Jun 18 14:36:16 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
```

- pc2
```terminal
$ uname -a
Linux pc2 5.15.0-116-generic #126-Ubuntu SMP Mon Jul 1 10:14:24 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
```


# `uname` の出力の読み方

この情報からわかる主な違いは以下の通り。

## カーネルバージョン

- pc1: 6.5.0-44-generic
- pc2: 5.15.0-116-generic

pc1のカーネルバージョンは6.5.0であり、pc2のカーネルバージョンは5.15.0。

## ビルド番号

- pc1: #44~22.04.1-Ubuntu
- pc2: #126-Ubuntu

pc1のビルド番号は#44~22.04.1で、pc2のビルド番号は#126です。これは、pc2がより多くのビルドを経ていることを示している。

## SMPとPREEMPT

- pc1: SMP PREEMPT_DYNAMIC
- pc2: SMP

pc1にはPREEMPT_DYNAMICの記述があり、これはカーネルがプリエンプション（割り込み処理）を動的に調整できることを示している。これにより、リアルタイム性が要求されるアプリケーションに対して柔軟性が向上する。pc2にはこの記述はないので未対応。

## ビルド日時

- pc1: Tue Jun 18 14:36:16 UTC
- pc2: Mon Jul 1 10:14:24 UTC 2024

# 対応方法

HWE (Hardware Enablement) スタックを利用する。
以下のコマンドでインストールするだけ。

:::note info
HWEスタック（Hardware Enablement Stack）は、UbuntuのLTS（Long Term Support）リリースにおいて、新しいハードウェアサポートやカーネルアップデートを提供する仕組みです。


LTSリリースは通常5年間のサポートが提供されますが、その間に新しいハードウェアが登場します。HWEスタックを使用することで、LTSリリースでも最新のハードウェアをサポートする新しいカーネルやXサーバー、ドライバなどを利用できるようになります。


通常、HWEスタックは次のLTSリリースやその中間リリースがリリースされた際に更新されます。
:::

```terminal
$ sudo apt install --install-recommends linux-generic-hwe-22.04
```

インストールがおわったら再起動します。

```terminal
$ sudo reboot
```

# 確認

- pc1
```terminal
$ uname -a
Linux pc1 6.5.0-44-generic #44~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Jun 18 14:36:16 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
```

- pc2
```terminal
$ uname -a
Linux pc2 6.5.0-44-generic #44~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Jun 18 14:36:16 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
```

# さいごに

かんたんでしたね
PythonスクリプトがLambdaにアップロード出来ない問題について

# 発生した問題について
Pythonでスクリプトを作成し、AWS Lambda上で実行するような検証を行っていた。
スクリプトの概要としては、Python SeleniumでWebサービスのログイン画面をスクレイピングして、各XPathに必要な項目を入力するというもの。

いざ作成したスクリプトをLambdaにアップロードしようとすると…
~~~AWS CLI:エラーメッセージ
An error occurred (RequestEntityTooLargeException) when calling the PublishLayerVersion operation: Request must be smaller than 70167211 bytes for the PublishLayerVersion operation
~~~
どうもZipのファイルサイズが70167211バイト（約66.92MB）より大きくアップロード出来ないようです。
このあと何度も不要なファイルやディレクトリを削除し、Zip化して、アップロードを繰り返すわけですが、一向に上手くいかず…

# 解決案について
Xで呟いたところ、同僚がアドバイスをくれました:pray:（いい会社…）

「Docker ImageをECRに格納して、そのImageをLambdaで実行するといいよ」とのこと

![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636130/922eb222-7fa6-549a-5cf2-4c65b00245b7.png)
イメージとしてはこんな感じのはず

AWSコンソールでLambdaを確認してみると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636130/63975de6-a0fd-06b9-a48d-6bea506d893c.png)
確かにコンテナイメージを選択する画面があるではないか！！

というものの、Dockerをほぼ触ったことがないので、ここからは一度Dockerについての学習を挟むことに

続きの記事が完成したらアップデートします！