OmniAICreator/Qiita-1.07M huggingface dataset:
Tongyi Lingma x Function Compute: 効率的な開発プロセスを構築し、プロジェクトの納品を加速させる

> 本記事は[こちらのブログ](https://www.alibabacloud.com/blog/tongyi-lingma-x-function-compute-build-an-efficient-development-process-to-accelerate-project-delivery_602071?spm=a2c65.11461433.0.0.4ee35355MSxyUr)を参考にしています。
> 翻訳にはアリババクラウドの[ModelStudio](https://www.alibabacloud.com/en/product/modelstudio)([Qwen](https://www.alibabacloud.com/en/solutions/generative-ai/qwen))を使用しております。

# Tongyi LingmaとApsara DevOpsを活用したインテリジェントな開発ソリューション

このソリューションは、Tongyi大規模言語モデルの一部であるTongyi Lingmaに基づいて、コード生成、補完、最適化、および単体テスト生成を提供し、コーディングの効率と品質を向上させます。さらに、Apsara DevOpsと[Function Compute](https://www.alibabacloud.com/product/function-compute?spm=a3c0i.8274236.6791778070.127.3f0a145cWr85hk)（FC）を統合して、コード管理、継続的インテグレーション、デプロイメント、およびリリースを実現します。これにより、プロジェクトの納品が加速され、開発者にインテリジェントなコーディング、CI/CD、オンライン体験のデプロイメントが提供され、製品の反復が促進されます。

## 手順
開発者は、Apsara DevOpsを使用してコードのホスティングと継続的インテグレーションを行います。その後、Apsara DevOpsからコードをローカル環境にプルし、Tongyi Lingmaを使用してコードの生成や最適化を行います。これには、バグの修正、コードコメントの追加、単体テストの生成などが含まれます。最適化されたコードはApsara DevOpsにコミットされ、これが自動化パイプラインをトリガーします。このパイプラインは、自動的にコードチェックと単体テストを実行します。最後に、検証済みのコードがFCにデプロイされます。
![1](https://yqintl.alicdn.com/c32a7d958091790b6549da816cb6af153bd98ed8.png)

## 利点
- **インテリジェントな研究開発支援**: 大量の高品質なオープンソースコードデータでトレーニングされたTongyi Lingmaは、行レベルまたは関数レベルのコード、単体テスト、最適化提案を迅速に生成し、開発者がコーディングタスクを効率的に完了するのを支援します。
- **効率的なプロジェクト開発と管理**: Apsara DevOpsは、タスク管理からコードホスティング、CI/CDまでをカバーする完全なDevOpsツールチェーンを提供します。これにより、研究開発の協力効率が向上し、タイムリーで高品質なソフトウェアの提供が保証されます。
- **自動スケーリングと従量課金制**: 開発チームは、FCの自動スケーリングと従量課金機能をフル活用できます。これにより、柔軟なリソース管理と迅速なアプリケーションリリースが可能になり、運用保守（O&M）の複雑さが軽減され、コスト効率が向上します。
![Gif](https://video-intl.alicdn.com/2025/Blog/640.gif)

## 対象顧客:
- **ソフトウェア開発チーム**: コード作成効率を向上させ、高品質なアウトプットを維持する必要があります。
- **技術チーム**: インテリジェントなツールを通じて開発を合理化し、製品の反復を加速することを目指しています。

## 主な機能と価値:
- **ソフトウェア開発者**: Tongyi Lingmaは、インテリジェントなコード生成、研究開発におけるインテリジェントなQ&A、独立したタスク実行を提供し、開発者にインテリジェントな研究開発体験をもたらします。
- **O&Mチーム**: FCは自動的にスケーリングと負荷分散を処理し、O&Mの負担を軽減します。リアルタイムログ記録とモニタリング機能により、チームは潜在的な問題を迅速に特定し解決できます。
- **ソフトウェア研究開発チーム**: Apsara DevOpsは、包括的なプロジェクト管理、タスク管理、コード管理、製品管理、およびCI/CDツールを提供し、チームが効率的かつ高品質な研究開発の協力をサポートします。
PythonでWord文書のフォントを変更する

デジタル化が進むビジネス環境において、Word文書は多くのビジネス文書や学術資料を扱う主要なファイル形式です。しかし、手動でフォントを調整する作業は、複数の文書を一括処理したり、動的にコンテンツを生成したりする場面では非効率的です。Pythonを使用してWord文書のフォントをプログラムで制御することで、統一されたフォーマットの適用や大量の文書の効率的な処理が可能になります。本記事では、**Pythonを使用してWord文書の段落や特定のテキストのフォントを変更する方法**について解説します。

- Word文書の段落のフォントを変更する
- Word文書内の特定のテキストを検索してフォントを変更する

本記事で使用する方法には、無料の[Free Spire.Doc for Python](https://jp.e-iceblue.com/introduce/introduce-free-doc-for-python.html)ライブラリを使用します。PyPIよりインストールできます：
```sh
pip install spire.doc.free
```

---

### Word文書の段落のフォントを変更する
特定の段落のフォントを変更するには、新しい段落スタイルを作成し、それを指定の段落に適用します。以下の手順で実装できます。

#### 手順
1. `Document` オブジェクトを作成し、`LoadFromFile` メソッドでWord文書を読み込む。
2. `Sections.get_Item(0)` メソッドで最初のセクションを取得し、`Paragraphs.get_Item(2)` で対象の段落を取得する。
3. `ParagraphStyle` クラスを使用して新しい段落スタイルを作成し、`FontName`、`Bold`、`Italic`、`TextColor` プロパティを設定する。
4. `Styles.Add` メソッドで作成したスタイルを文書に追加し、`ApplyStyle` メソッドで対象の段落に適用する。
5. `SaveToFile` メソッドでWord文書を保存する。
6. `Dispose` メソッドでリソースを解放する。

#### コード例
```python
from spire.doc import Document, ParagraphStyle, Color

# Documentオブジェクトを作成
doc = Document()

# Word文書を読み込む
doc.LoadFromFile('Sample.docx')

# 最初のセクションを取得
section = doc.Sections.get_Item(0)

# 対象の段落を取得
paragraph = section.Paragraphs.get_Item(2)

# 新しい段落スタイルを作成
style = ParagraphStyle(doc)
style.Name = 'CustomStyle'
style.CharacterFormat.FontName = 'Arial'
style.CharacterFormat.Bold = True
style.CharacterFormat.Italic = True
style.CharacterFormat.TextColor = Color.get_Red()
doc.Styles.Add(style)

# 段落にスタイルを適用
paragraph.ApplyStyle(style.Name)

# Word文書を保存
doc.SaveToFile('output/ChangedParagraphFont.docx')
doc.Dispose()
```
![2025-03-21_175559.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/a4d550f7-887c-482a-b483-5e62d9a3d60e.png)

---

### Word文書内の特定のテキストを検索してフォントを変更する
`Document.FindAllString()` メソッドを使用すると、文書内の特定のテキストを検索できます。検索結果の各テキストに対して `CharacterFormat` プロパティを使用し、フォントのスタイルを変更できます。

#### 手順
1. `Document` オブジェクトを作成し、`LoadFromFile` メソッドでWord文書を読み込む。
2. `FindAllString` メソッドで指定したテキストを検索する。
3. 検索結果のリストをループ処理し、`TextSelection.GetAsOneRange()` メソッドで対象テキストを取得する。
4. `CharacterFormat` プロパティを使用してフォントスタイルを変更する。
5. `SaveToFile` メソッドでWord文書を保存する。
6. `Dispose` メソッドでリソースを解放する。

#### コード例
```python
from spire.doc import Document, Color

# Documentオブジェクトを作成
doc = Document()

# Word文書を読み込む
doc.LoadFromFile('Sample.docx')

# 指定のテキストを検索
textSelections = doc.FindAllString('transformed workplace dynamics', False, True)

# 検索結果のフォントを変更
for selection in textSelections:
    textRange = selection.GetAsOneRange()
    textRange.CharacterFormat.TextColor = Color.get_Red()
    textRange.CharacterFormat.Bold = True

# Word文書を保存
doc.SaveToFile('output/ChangedTextFont.docx')
doc.Dispose()
```
![2025-03-21_180124.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/96202137-1379-4bda-b2e4-b0d7fbb15c7c.png)

以上の方法を活用することで、Word文書のフォント設定を柔軟にカスタマイズし、一括でフォーマットを適用できます。
RuteJabar: AIを活用して公共交通機関をより安全に

> 本記事は[こちらのブログ](https://www.alibabacloud.com/blog/rutejabar-making-public-transportation-safer-through-ai_602077?spm=a2c65.11461433.0.0.4ee35355MSxyUr)を参考にしています。
> 翻訳にはアリババクラウドの[ModelStudio](https://www.alibabacloud.com/en/product/modelstudio)([Qwen](https://www.alibabacloud.com/en/solutions/generative-ai/qwen))を使用しております。

# Team FATAの紹介

![1](https://yqintl.alicdn.com/d7fbcf80b4ed79a3842a33c4272cf93dc6d16252.png)

Team FATAは、2024年にインドネシアで開催されたアリババクラウドGenAIハッカソン中に結成された協力グループで、フェキ・パンゲストゥ・ウィジャヤ、アフマド・サティヤ・ウィチャクサナ、トミー、アンナ・クリスティナ・シトゥモランの4人の専門家で構成されています。ハッカソンで初めて出会ったにもかかわらず、私たちの多様な背景と共有するビジョンにより、現実世界の交通問題に対処する革新的なソリューションを作り上げることができました。

# RuteJabar（LaporPak）の紹介

RuteJabarは、AIを活用した公共交通機関の安全性推奨アプリで、旅行計画を変革することを目指しています。このアプリケーションは、任意の2地点間のルートに関する重要な情報を提供し、その道中の犯罪率やインターネット接続のカバレッジを強調します。これら2つの要素は、旅行の安全性と利便性に大きな影響を与えます。

# 価値提案

現代において、公共交通機関は持続可能な都市開発と気候変動対策において重要な役割を果たしています。しかし、安全性への懸念が人々がこれらのサービスを利用する妨げになることがよくあります。RuteJabarは、以下の方法でこの課題に対応します：

- データ駆動型のルート推奨を通じて乗客の安全性を向上させる
- 旅行者が旅の途中でも常に接続を維持できるよう、リアルタイムのインターネット接続情報を提供する
- 気候変動イニシアチブを支援するため、公共交通機関の利用促進
- 利用者が情報に基づいた旅行決定を行えるようにする

# 私たちのソリューション：AIによる安全インテリジェンス

[動画リンク](https://video-intl.alicdn.com/2025/Blog/hackaton-app.mp4)

RuteJabarの中核には、安全性指標と接続データに焦点を当てた包括的なルート情報を生成する高度なAIシステムがあります。このプラットフォームは、さまざまなデータポイントを分析して、ユーザーが旅程を始める前に実行可能な洞察を提供します。このアプリケーションは、距離や時間だけでなく、安全性評価や接続レベルに基づいて異なるルートや交通手段を比較できる直感的なインターフェースで情報を提示します。

# アリババクラウド技術の活用

私たちのソリューションは、信頼性と拡張性のあるサービスを提供するために、いくつかのアリババクラウド製品の力を活用しています：

## 主要技術
- **Model Studio**: AI機能を強化し、道路の安全性やインターネット接続に関する情報を生成します。また、バハサ・インドネシア語への翻訳を可能にし、シームレスな統合のためにJSON形式でデータを返します。
- **ECS（Elastic Compute Service）**: アプリケーションを効率的に実行するために必要な計算インフラを提供します。
- **OSS（Object Storage Service）**: データやメディア資産の保存を管理します。
- **ApsaraDB**: データベースのニーズを処理し、重要な情報への迅速なアクセスを確保します。

## 技術的ハイライト

RuteJabarの背後にある技術革新は、主にそのAI機能に焦点を当てています。これにより以下を可能にします：

- **インテリジェントなルート分析**: システムは、過去の犯罪データや接続情報を基に潜在的なルートを評価します。
- **多言語サポート**: バハサ・インドネシア語の翻訳機能により、アプリケーションは地元住民に効果的にサービスを提供できます。
- **構造化データ出力**: JSONフォーマットにより、データをアプリケーションのさまざまなコンポーネントが簡単に利用できます。
- **ユーザー中心の設計**: この技術は、ユーザーの意思決定と安全性に直接影響を与える情報を提供することを最優先にしています。

# 今後の展望

RuteJabarは、2024年のインドネシアでのアリババクラウドGenAIハッカソンで考案され、開発され、コンペティションの受賞作品の一つとして認められたプロジェクトです。これは、より安全な公共交通機関の促進と、気候変動イニシアチブを支援するための公共交通機関の採用を奨励するための重要な一歩を表しています。安全性と接続性に関する主要な懸念に対処することで、私たちは日常の通勤者や旅行者にとって公共交通機関をより魅力的な選択肢にしたいと考えています。私たちのビジョンは、単に情報を提供することにとどまらず、公共の交通機関の使用を増やして広範な環境目標をサポートしながら、より安全な通勤体験を積極的に貢献するプラットフォームを作ることを目指しています。

RuteJabarは、アリババクラウドGenAIハッカソン2024インドネシアの受賞プロジェクトの一つです。
comelang version 24.0.0

うーん、コードを生成しないコレクションの機能は削除しました。動的にいくつか関数ポインタが必要になるため、速度がかなり低下したためです。あとスマートポインタも削除しました。普通のポインタでいいでしょ？あとは、リストとマップの[]での範囲外アクセスを0clearした値を返すようにしました。??などは必要ありません。まあ、これも範囲外アクセスしたい場合はitemメソッド使ってくださいということです。まあ、シンプルさにこだわりました。あとはメソッドブロックのネストした場合のバグとCHANNEL THREADによる並列処理でヒープがスレッドセーフになり手元のテストではバグがなくなり実用的になったと思います。comelangの適用範囲はGOと一緒でUNIXのシステムプログラミングだと思います。マイコンでも使えますが、マイコンの場合ヒープよりスタック使う場合が多いと思うので、そのままのC言語の方がいいと思います。まあ、データベースサーバー作ったりwebサーバー作ったりWAF作ったり、とかですかね。並列処理もできるので、サーバー作るのに便利かもしれません。出力コードの速度についてはBOEHMGC+Cよりは速いみたいです。GOより速いかは知りませんが。

コンパイル速度についてはもう少し改善させたいです。めちゃくちゃ遅くはありませんが、無駄な処理が多く、速くはありません。デバッグとリファクタリングとコンパイル速度アップに注力したいと思います。C言語の勉強にちょうどよかったです。Cはマスターできたと思います。まあ、プログラミングは余暇でやっているので、本気じゃなくて遊びなので、こっちは余裕です。負け惜しみですが。ボロ負けしているの見て涙流して笑ってます。技術力をアップさせ、世間的にも評価されるものが作りたいですねぇ、、、。
アリババクラウド Apsara RDSにおけるデータマスキングとTransparent Data Encryption (TDE)の比較

> 本記事は[こちらのブログ](https://www.alibabacloud.com/blog/data-masking-vs-transparent-data-encryption-tde-on-alibaba-cloud-apsara-rds_602078?spm=a2c65.11461433.0.0.4ee35355MSxyUr)を参考にしています。
> 翻訳にはアリババクラウドの[ModelStudio](https://www.alibabacloud.com/en/product/modelstudio)([Qwen](https://www.alibabacloud.com/en/solutions/generative-ai/qwen))を使用しております。

# データベースの機密データを保護するためのData MaskingとTransparent Data Encryption (TDE)  
written by Andre Kramadibrata, Solution Architect Alibaba Cloud Indonesia  

データベース内の機密データを保護する際に、Data Masking（データマスキング）とTransparent Data Encryption（TDE）は、Alibaba Cloud Apsara RDSで利用可能な強力なツールです。これらはどちらもセキュリティを向上させますが、異なる目的を持ち、データ保護スタックの異なるレイヤーで動作します。

## Data Maskingとは？  
Data Maskingは、不正なユーザーから機密情報を隠すために使用される技術です。これにより、許可された人員のみが実際のデータを表示でき、他のユーザーにはマスクされたデータまたは部分的なデータが表示されます。  

- **仕組み**: Alibaba Cloud Apsara RDSでは、Data Maskingはデータベース内の基盤となるデータを変更することなく、非特権ユーザーに対して機密データの外観を動的に変更します。  
- **ユースケース**: 開発者、テスター、またはアナリストが本番環境に似たデータにアクセスする必要があるが、クレジットカード番号、個人識別番号、健康情報などの機密情報を見ることができない環境に最適です。  
- **例**: ソーシャルセキュリティ番号（SSN）「123-45-6789」が、不正なユーザーに対して「XXX-XX-6789」として表示される場合があります。  

## Transparent Data Encryption（TDE）とは？  
Transparent Data Encryption（TDE）は、ディスク上に保存されているデータを暗号化し、誰かがストレージメディアへの物理的アクセスを得たとしても、復号化キーなしではデータを読むことができないようにします。  

- **仕組み**: TDEは、データをディスクに書き込む前に自動的に暗号化し、ディスクから読み取る際に復号化します。このプロセスは、データベースにアクセスするアプリケーションに対して透過的です。  
- **ユースケース**: 特にGDPRやHIPAAなどのコンプライアンス規制で機密データの暗号化が求められる場合など、保存データの保護に最適です。  
- **例**: 攻撃者が暗号化されたデータを含むバックアップテープやハードドライブを盗んだとしても、暗号化キーなしでは内容を解読できません。  

## Data MaskingとTDEの主な違い  

| 機能 | Data Masking | Transparent Data Encryption (TDE) |  
|------|--------------|------------------------------------|  
| **目的** | アプリケーション層内で不正なユーザーによる機密データの閲覧を防ぎます。 | ストレージメディアへの不正アクセスからデータを保護するために保存データを暗号化します。 |  
| **範囲** | アプリケーション/クエリレベルで動作し、特定の列やフィールドに適用されます。 | ストレージレベルで動作し、データベース全体、バックアップ、ログを暗号化します。 |  
| **データへの影響** | 特定のユーザーに対してデータの見え方を変更しますが、データベース内の実際のデータは変更しません。 | ディスク上に保存されている実際のデータを暗号化し、使用時には復号化が必要です。 |  
| **コンプライアンス** | 役割ベースのアクセス制御に関する内部ポリシーに役立ちます。 | 保存データのセキュリティに関連する規制コンプライアンスに必要な場合があります。 |  

Data MaskingとTDEは、Alibaba Cloud Apsara RDSにおける機密情報の保護において重要な役割を果たしますが、それぞれがデータセキュリティの異なる側面に対応しています。Data Maskingを使用して組織内の誰が何を見ることができるかを制御し、TDEを実装して物理メディアが誤った手に渡った場合でもデータが安全であることを確保してください。これらの機能を組み合わせることで、貴重なデータ資産を保護するための堅牢な防御戦略を提供します。  

## 参考資料  
[Manage Sensitive Data](https://www.alibabacloud.com/help/en/dms/manage-sensitive-data)  
[TDE on Apsara RDS PostgreSQL](https://www.alibabacloud.com/help/en/rds/apsaradb-rds-for-postgresql/enable-tde-for-an-apsaradb-rds-for-postgresql-instance-and-use-tde)
スマートWDD: AIによる廃棄物投棄検出

> 本記事は[こちらのブログ](https://www.alibabacloud.com/blog/smart-wdd-ai-powered-waste-dump-detection_602081?spm=a2c65.11461433.0.0.4ee35355MSxyUr)を参考にしています。
> 翻訳にはアリババクラウドの[ModelStudio](https://www.alibabacloud.com/en/product/modelstudio)([Qwen](https://www.alibabacloud.com/en/solutions/generative-ai/qwen))を使用しております。

# Team Tahu Bulat

想像してみてください。ハッカソンの会場に見知らぬ人たちが集まり、数時間後には地球規模の環境危機に対する潜在的な解決策を手にしている様子を。それがまさにTeam Tahu Bulatに起こったことです。「その日が始まった時にはお互いの名前さえ知らなかったんだよね」と、私たちのチームは後に冗談交じりに話しました。JABAR Digital ServicesとKomdigiが廃棄物管理を主要な問題提起の一つとして提示したとき、私たちは使命を見つけました。このハッカソンは、私たちにとって自発的なスタート地点となりました。このオンサイト競技会というプレッシャーのかかる環境の中で、私たちは最先端技術で現実の問題に取り組むという共通の情熱によって結びつきました。数時間で見知らぬ人同士が協力者となり、ハッカソンの終わりには「Smart WDD」が誕生しました。

## チームメンバー:
- Aldo Leofiro Irfiansyah  
- Mishka Alditya Priatna  
- Muhammmad Tsabit Darmawan  
- Fitriyanty Dwi Lestary  

---

## プロジェクト概要

**プロジェクト名:** Smart WDD (Waste Dump Detection)  
**デモリンク:** [Smart WDD Demo](https://drive.google.com/drive/u/0/folders/1xx_a4Yef_Iir2jEDuN8XEAcGTeY5atgL)

---

## 足元に潜む危機

ハッカソン中、JABAR Digital ServicesとKomdigiが提示した問題提起の一つがすぐに私たちの注意を引きました。それは廃棄物管理です。これは単なる理論的な課題ではありませんでした。現代社会が直面している現実的で差し迫った挑戦を象徴していました。毎年、何百万トンもの廃棄物が正当な処理経路から姿を消し、森林や水路、放置された空き地に再び現れます。これらの不法投棄場所は単なる景観を損ねるものではなく、環境時限爆弾とも言えるものです：

- 有毒化学物質が地下水に浸透する  
- 野生生物の生息地が死の罠となる  
- 地域社会が健康リスクの増加に直面する  
- 清掃費用が公共資源を圧迫する  

---

## 私たちのソリューション

Smart WDDは、シンプルながら強力なアプローチを通じて、不法投棄の検出と対応方法を変革します：

- **衛星監視:** 広範囲にわたる継続的な監視  
- **AI検出:** 機械学習モデルが廃棄物投棄の特徴を特定  
- **インテリジェントレポート:** 生成AIが詳細な分析レポートを作成  
- **アクションダッシュボード:** 環境機関向けの直感的なインターフェース  

---

## アリババクラウドのテクノロジー

Smart WDDのパワーは、独自の技術の組み合わせに由来し、その基盤はAlibaba Cloudが提供しています。私たちの検出エンジンは、Alibaba Model Studio上で動作しており、Qwenモデルを微調整して、衛星画像から廃棄物投棄の特徴を識別する専門家に育て上げました。これらのモデルは単に検出するだけでなく、学習し改善し続け、分析ごとに精度が向上します。Alibaba Cloudエコシステムは、私たちのビジョンを実現するために必要なすべてを提供してくれました。Model StudioはAIモデルを開発・訓練するための包括的な環境を提供し、Qwenの高度な自然言語能力により、生の検出データを明確な説明付きの実行可能な洞察に変換することが可能になりました。今後の実装では以下を含む予定です：

- [Platform for AI](https://www.alibabacloud.com/product/machine-learning) (PAI) によるモデル機能の強化  
- [Elastic Compute Service](https://www.alibabacloud.com/product/ecs) (ECS) によるスケーリング  
- 複数のデータソースを処理するための大規模データおよびデータ分析ツール  
- データ保護のためのセキュリティサービス  

---

## 技術的ハイライト

- 多源衛星データの統合  
- 不法投棄場所の特定のための転移学習  
- 将来の不法投棄候補地を予測する能力  
- 発見結果を人間が読める形式で説明する解釈可能なAI  

Team Tahu Bulat（ハッカソンで見知らぬ人たちがイノベーターとなったグループ）として、私たちは、情熱を持った問題解決者が技術を活用することで、地球を守る方法を一変させることができると信じています。一枚の衛星画像ごとに、少しずつです。Team Tahu Bulatは、このプロジェクトを2024年のAlibaba Cloud GenAI Hackathon Indonesiaで作成しました。
WasteWise: アリババクラウドを活用した廃棄物管理の革新

> 本記事は[こちらのブログ](https://www.alibabacloud.com/blog/wastewise-harnessing-alibaba-cloud-to-revolutionize-waste-management_602082?spm=a2c65.11461433.0.0.4ee35355MSxyUr)を参考にしています。
> 翻訳にはアリババクラウドの[ModelStudio](https://www.alibabacloud.com/en/product/modelstudio)([Qwen](https://www.alibabacloud.com/en/solutions/generative-ai/qwen))を使用しております。

# コラボレーションから生まれた革新的なソリューション

アリババクラウドでは、私たちの技術を活用して差し迫った現実の問題を解決する開発者の独創性に常に驚かされています。Team Apulgonが「Alibaba Cloud GenAI Hackathon 2024」で立ち上げたWasteWiseプロジェクトは、この革新精神を体現しています。バンドン出身の4人の才能ある開発者、ダッファ・ラマダン氏、ムハンマド・ファフクリザ氏、ラディガ・グバルダ氏、アリエフ・パルグノ氏で構成されるTeam Apulgonは、彼らのコミュニティが直面している重要な課題を特定しました。それは、バンドン市の深刻な廃棄物管理危機です。年間2万5千トンのゴミが川を汚染し、処分場が溢れる中、チームはクラウドコンピューティングが大きな違いをもたらす可能性があると認識しました。

## 都市の課題に対するクラウドネイティブなソリューション

![1](https://yqintl.alicdn.com/621b1fe6b60f79549977f979fa1825b7d9589c85.png)

WasteWiseプラットフォームは、アリババクラウドが都市インフラを変革する力を示しています。このウェブベースのソリューションにより、バンドン市の清掃部門は以下を実現できます：

- 高度な分析を使用して廃棄物発生パターンを予測
- データ駆動型の洞察に基づいてリソースを効率的に展開
- AI搭載のアシスタントを通じてシームレスなコミュニケーション

このソリューションの特に印象的な点は、Team Apulgonが複数のアリババクラウドサービスを統合し、一つのまとまったプラットフォームとして機能させたことです。チームはModel Studioを使用して廃棄物のパターンを分析し、Qwen Maxモデルをカスタマイズして洞察を提供しました。一方、Elastic Compute Service（ECS）は一貫したパフォーマンスを支える信頼できる基盤を提供しました。

![2](https://yqintl.alicdn.com/c7bee53f4f8f04d3cc06a69f029b723fd4fbeb3b.png)

## 変化をもたらすテクノロジー

WasteWiseの技術的実装は、私たちのクラウドエコシステムの多様性を示しています：

- **予測インテリジェンス**: クラウドインフラストラクチャを通じて過去の廃棄物データを処理することで、プラットフォームはオーバーフロー状況を事前に予測します。
- **インタラクティブAI**: Qwenモデルによって動作する統合チャットボットは、清掃作業員が重要な情報を直感的にアクセスできるインターフェースを提供します。
- **拡張可能なアーキテクチャ**: Alibaba Cloud ECS上に構築されたこのソリューションは、バンドン市の拡大するニーズに合わせて成長可能です。

## テクノロジーを通じた革新の促進

このハッカソンのプロトタイプは、アリババクラウドの技術が都市の課題に対する創造的な解決策をどのように可能にするかを示しています。WasteWiseを通じて、Team ApulgonはクラウドコンピューティングとAIが廃棄物管理の慣行を変革する可能性を示しました。私たちは、東南アジア全体でより清潔で持続可能な都市を作り上げるのに役立つこのような革新的なコンセプトをサポートできることを誇りに思います。WasteWiseは、現実世界の環境問題に対処するテクノロジーを育むという私たちのコミットメントを体現しています。アリババクラウドは、包括的なクラウドサービスと開発プラットフォームを通じて、持続可能でAI駆動型のソリューションを構築する開発者を引き続きサポートしていきます。

Video: [https://www.youtube.com/watch?v=_x_sS8YP6Tw](https://www.youtube.com/watch?v=_x_sS8YP6Tw)

### ルール遵守確認：
1. **マークダウン形式の画像リンク**はそのまま保持されています。（例：`![1](https://yqintl.alicdn.com/...`）
2. **YouTubeリンク**はそのまま保持され、その他の埋め込み不可のリンクはテキストリンクに変換されています。
3. **Markdown形式**に適切に変換されています。（タイトル、リスト、改行など）
4. **要約せず、原文を忠実に翻訳**しています。
5. **アリババクラウドのプロダクト名やIT用語**は翻訳せず、そのまま表記されています。
6. **日本語に完全に翻訳**されています。
[備忘録] Issac Labのインストール

# Isaac Labのインストール

## 1. はじめに
Genesisで強化学習について興味を持ち、色々調べた結果、Isaac Lab（旧Isaac Gym）の方が情報が多そうなので、備忘録の意味を含め、Isaac Labのインストール手順をまとめました。

## 2. 使用環境
OS：Ubuntu 24.04
GPU: NVIDIA RTX A4500
CPU: Intel® Xeon® w3-2423
メモリ：64GB

## 3. インストール手順
以下の公式Docuentを参考にしました

https://isaac-sim.github.io/IsaacLab/main/source/setup/installation/pip_installation.html

### 3.1 Python3.10のインストール
ドキュメントがPython3.10で進めていたので、まずはPython3.10をインストールします。
### aptパッケージの更新
```sh
sudo apt update
sudo apt upgrade -y
```

#### pipのインストール
```sh
sudo apt install -y python3-pip
pip3 -V
```

#### リポジトリ追加
```sh
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
```
途中、press [ENTER]と出たら`Enter`キーを押す。

#### インストール可能なPythonバージョンを確認
```sh
sudo apt update
sudo apt list python3.*
```
ここでpython3.10が表示されればOK。

#### python3.10のインストール
```sh
sudo apt install -y python3.10 python3.10-venv
```
venvで仮想環境を作るため、venvも同時にインストールする。

#### 仮想環境の作成
```sh
python3.10 -m venv isaac_sim_env
```
#### 作成した仮想巻環境の有効化
```sh
python3.10 -m venv isaac_sim_env
```
#### Pytorchのインストール
※使用しているGPUのCUDAのバージョンにあったPytorchを使用してください
```sh
pip3 install torch torchvision torchaudio
```
### 3.2 Isaac Simのインストール
Isaac Labを使用するには、Isaac Simのインストールが必要です。
#### pipの更新
```sh
pip install --upgrade pip
```
#### Isaac Simのインストール
```sh
pip install 'isaacsim[all,extscache]==4.5.0' --extra-index-url https://pypi.nvidia.com
```
#### インストールできたかの確認
```sh
isaacsim
```
※初回起動には時間がかかります。応答がないと警告があっても気長に待ちましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3860884/86572f10-3376-47d6-aa89-6f0b2c6337a2.png)


### 3.3 Isac Labのインストール
本題のIsac Labをインストールします。
任意のディレクトリでIsaac Labのリポジトリをクローンします
```sh
git clone git@github.com:isaac-sim/IsaacLab.git
```

#### 依存のインストール
```sh
sudo apt install cmake build-essential
```
#### インストールスクリプトの実行
```sh
./isaaclab.sh --install # or "./isaaclab.sh -i"
```

#### 起動の確認
```sh
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task=Isaac-Velocity-Rough-Anymal-C-v0
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3860884/baab30f4-0887-4504-98af-dc574bc242ba.png)

## 4. 終わりに
意外とすんなり導入できて驚いてます
あとGenesisは処理が速いことがわかりました
0からエンジニアになるまでの記録【Day1】

現在、社会人としてフルタイムで勤務をしながらwebエンジニアへの転職を目指して勉強中です。

予備知識は何もなく、元々歯科衛生士だった私が0からwebエンジニアを目指し、転職するまでの記録を綴ります。

学習中に分からなかったこと等の記録を残すための記事がほとんどになると思うので、自分が分かりやすい言葉で記載していきます。

専門的なことは恐らく暫く書けません。でも私と同じような状況で頑張っている人の励みになればとても嬉しいです。

私は今年38歳になります。今の年齢で未経験からのエンジニア転職はかなり厳しいと思います。

なので、出来る限りの準備をして転職に望んでいくつもりです。

2024年12月より、平日月曜日から金曜日まで夜間3時間のプログラミングのブートキャンプのクラスを受講中です。

ワーキングホリデーでオーストラリアに滞在していた経験があり、元々英語や海外に対する興味が強く、英語のレベルがとても高い訳ではないですが、英語を使ってエンジニアとして働いてみたいという目標があり、ブートキャンプは英語で受講できるものを選びました。

現在まで学んできたことは、
html
css
bootstrap
php
laravel(現在学習中)

2025年4月より、ブートキャンプの授業の一環としてチームで共同開発を行う予定です。

フルタイムで仕事をしながらの受講で、正直授業の内容を全て理解は出来ていない状況です。
仕事と授業のない週末の時間はほぼ復習に充てています。

それでも分からないことだらけで不安が尽きないため、せめて分からないことを自分の言葉でまとめて、記録して、継続することを習慣にするためここのプラットフォームに来ました。

目標はブートキャンプ終了後半年以内、2025年の間にはエンジニアとして転職すること。

最後まで読んで頂きありがとうございました。
join("\n") で改行出力！もう console.log() 連打しない

今日も基礎問題演習！普通に`console.log()` を10回書いても解けるけど、そんなの面倒すぎる！
配列＋ `join("\n")` を使えば、スッキリ1行で解決できるぞ！

## <br>問題概要
以下の`10` 個の整数を改行区切りで出力
```
813, 1, 2, 923874, 23648, 782356, 3256, 2342, 24324, 112
```

## <BR>❌ NG例: `console.log()` 連打
```js
console.log(813);
console.log(1);
console.log(2);
console.log(923874);
// 以下、延々と続く…
```
👎 問題点：
- 10個ならまだしも、100個あったら… 修行か？
- 追加・修正が めんどくさすぎる
- for ループ で回すのも書くのがダルい

## <br>✅ OK例: join("\n") で一発
```js
const numbers = [813, 1, 2, 923874, 23648, 782356, 3256, 2342, 24324, 112];
console.log(numbers.join("\n"));
```
👍 改善点
- たった2行 でスッキリ
- 配列に追加・削除するだけでOK
- 100個でも1000個でも楽勝！

## <Br>🔍 `join("\n")` の役割

`join("\n")` を使うと、配列の各要素を改行で連結できる！
```js
const fruits = ["apple", "banana", "grape"];
console.log(fruits.join("\n"));
```
🔽 出力
```
apple
banana
grape
```
<br>🌟 これもできる
```js
["H", "e", "l", "l", "o"].join("");  // "Hello"
["A", "B", "C"].join(", ");  // "A, B, C"
```

### <br>⚡ join() の良いところ！
✅ 配列の要素を1つの文字列に変換できる
✅ 区切り文字を自由に設定できる（, や – や \n など）
✅ 改行にも使える（join(“\n”)）
✅ コードの可読性とメンテナンス性が向上する


## <br>⚡ 結論
改行して出力するなら `join("\n")` を使う！

[📌 僕の失敗談と解決話！](https://paizabeginner.wordpress.com/2025/03/21/paiza%e3%81%a7%e5%9f%ba%e6%9c%ac%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%ef%bc%9ajoinn-%e3%81%a710%e8%a1%8c%e5%87%ba%e5%8a%9b%e3%82%92%e4%b8%80%e7%9e%ac%e3%81%a7/)
Kyverno Certified Associate (KCA)受験記

## はじめに

CNCF主催の認定試験 **Kyverno Certified Associate (KCA)** を受験し合格したので、受験記を記載します。同認定試験の受験を考えている方の参考になれば幸いです。

## 免責事項(Disclamer)

:::note warn
* 本投稿は受験当時の情報となります。受験を検討する際は最新の情報の確認をお願いします。
* 本投稿は個人の所感です。
    * 所属する企業や団体は関係ありません。
    * 情報の利用は自己責任でお願いします。
:::

## 試験概要

* Kubernetesで用いるポリシー管理エンジンKyvernoに関する認定試験です。
* 受験日：2025/1/20
* 試験形式
    * オンライン試験
    * 1回再受験可能
    * 多肢選択式
    * 試験時間90分
    * 試験言語は英語のみ提供
    * 100点満点中75点以上で合格

## Kyvernoとは

* Kubernetes上のポリシー管理エンジンです。
* 社内のセキュリティポリシーに準拠するために、マニフェストに必要な設定を強制するなどができます。
* Kyvernoで設定できるポリシーの種類毎に以下のような活用シーンが考えられます。
    * Validate（設定確認）
        * セキュリティ上入っているべき設定が入っていない場合、マニフェストのデプロイを拒否する
    * Mutate（変更）
        * 例えば、リソースに必ずつけるラベルがある場合、リソースデプロイ時にラベルを追加する
    * Generate（生成）
        * 例えば、ネームスペースがデプロイされた際、デフォルト全拒否のネットワークポリシーをデプロイする
* OPA(Open Policy Agent)とできることは似ているが、OPAはREGO言語で書かれており学習コストがかかるが、KyvernoはYAMLなので読みやすいのがメリットです。
* Kubernetes APIリクエスト処理時のアドミッションコントローラーを使って動作します。

## 勉強方法

### 参考にした受験記

[Sajeeva Lakmalさんの受験記](https://medium.com/@nvsajeeva/how-to-pass-kca-kyverno-certified-associate-exam-c22d9ab91d5c)

### 学習リソース

* 他のCNCF認定だと無料のトレーニングコースがありましたが、Kyvernoは無料コースはなくこちらの[有料コース](https://training.linuxfoundation.org/training/mastering-kubernetes-security-with-kyverno-lfs255/)のみのようです。
* 私は上記のコースは使わず、[公式ドキュメント](https://kyverno.io/docs/)で学習しました。
* [カリキュラム](https://training.linuxfoundation.org/certification/kyverno-certified-associate-kca/)と[公式ドキュメント](https://kyverno.io/docs/)の項目がマッピングしやすいので、カリキュラムにある項目をカバーするように公式ドキュメントを見て学習していきました。
* [Kyvernoプレイグラウンド](https://playground.kyverno.io/#/)も公開されているので、動かしてみてポリシーを理解するのにも役立ちます。

 ## 受験してみての所感

 * 試験の難易度は全体的に高くはありません。
 * 試験では各設定の概要が問われることが多く、具体的な設定方法の詳細は問われることはほとんどなかったです。
     * 各設定がどのようなことを実現する設定なのか、というところを重点的に覚えておきましょう。
     * Kyvernoポリシーは適用対象を絞るオプションなどが多くありますが、この適用対象を絞るオプションや、マニフェストから適用対象を問われるような問題は少なかったです。
* 私の予想より[Configuring Kyverno](https://kyverno.io/docs/installation/customization/)についての問題が多く問われました。
    * Kyvernoがインストール時に作る証明書やロールなどは把握しておきましょう。
箱庭でUnityを動かしてみる（7日目）

# 2025/03/21(7日目)実施内容
### OutOfRangeExceptionの解決
6日目では確認しなかったが，射撃の実装でOutOfRangeのエラーが出ていたので解決する
-> 既にDestroyしたオブジェクトを参照している部分があった（順序論理エラー）
-> 修正完了

## センサは後回しで先にゲームルールを作りたくなった
### ゲーム名考えてなかったので考える
ゲーム名は「**FlowBot**」で

### 構成
元のROS2シミュレータの `WorldController.cs` へ繋げて構成する

1. ゲーム開始
2. 自分と相手のロボット，ロボットのHPは100，フローチャートの命令通りに動く
3. いずれかのロボットのHPが0になったら終了
4. 結果表示

この部分をScriptで構成すると

root. `GameMaster`
1. `InitGame`
2. `GamePlaying`
3. `FinishGame`
4. `ShowResult`

これを組んでいく

### GameMaster
- プレイヤー情報とゲーム進行を持つ
- 都度，子に情報を提供して処理させる

### InitGame
- ロボットを初期配置に配置する
- プレイヤー情報のインスタンス生成

とりあえずここまで決めた

# 次回やること
ルールを組んでいく
とりあえず，Unityで完結して動けるように頑張る
CSSで縦書きする

1. writing-modeの基本
writing-modeを使うと、Webページのテキストを縦書きに変更できる。
デフォルト（横書き）: horizontal-tb
一般的な縦書き（右→左）: vertical-rl
珍しい縦書き（左→右）: vertical-lr
横向きのまま縦書き: sideways-rl, sideways-lr（デザイン向き）
2. 縦書きのレイアウト調整
位置調整（Flexboxを利用）
右寄せ: justify-content: flex-end;
中央寄せ: justify-content: center;
左寄せ: justify-content: flex-start;
行間調整: line-heightで調整し、行が広がりすぎるのを防ぐ。
3. 縦書き特有の課題と解決策
英数字や記号の回転: text-orientation: upright; を使用。
数字や英字を1文字幅で表示: text-combine-upright: all; で対応。
ルビの付け方: <ruby> タグと ruby-position: over; を使う。
4. ブラウザ対応
Chrome, Firefox, Safari, Edge で基本的にサポート。
互換性を確保するためにベンダープレフィックスを使用：
css
.vertical-text {
  -webkit-writing-mode: vertical-rl;
  -moz-writing-mode: vertical-rl;
  -ms-writing-mode: tb-rl;
  writing-mode: vertical-rl;
}
5. まとめ
writing-modeを活用すれば簡単に縦書きを実現できる。
flexbox でテキスト位置を調整。
text-orientation で英数字の表示を最適化。
ruby タグでルビ対応も可能。
ブラウザ対応を考慮してコーディングする。

参考記事
https://wmlnote.jp/css-writing-mode/
ローカルでErlangを実行する時の注意点

# はじめに
Livebookでは問題なく機能するErlangのモジュールが動かないケースがあります。
elixir_を付けたモジュール名にすることで解消します。
当記事では実際のコードを参考にelixir_モジュールを付けた書き方について解説します。


# 環境
windows11
wsl2
Ubuntu24.04
Erlang/OTP 26 [erts-14.2.5] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [jit:ns]
Elixir 1.18.2 (compiled with Erlang/OTP 25)

# 実行結果
モジュール名を変化させないで通る場合
```elixir
iex > :timer.tc(Process, :sleep, [1000])
{1000246, :ok}
```

特殊なケース
```elixir
iex > :json.decode("1")
** (UndefinedFunctionError) function :json.decode/1 is undefined (module :json is not available). Did you mean:

      * :elixir_json.decode/1

    :json.decode("1")
    iex:2: (file)
```
モジュール名にelixir_を付けることで解消
```elixir
iex > :elixir_json.decode("1")
1
```

なおelixir_をつければいいというわけではないのが以下の検証結果からわかる
```elixir
iex > :elixir_timer.tc(Process, :sleep, [1000])
** (UndefinedFunctionError) function :elixir_timer.tc/3 is undefined (module :elixir_timer is not available)
    :elixir_timer.tc(Process, :sleep, [1000])
    iex:2: (file)
```

# 終わりに
elixir_を付けないと機能しない理由についてはドキュメントにも書かれていませんでした。
またこのやり方について記載された記事をすぐに見つけることもできず解消に時間がかかってしまいました。
冷静にエラーメッセージに指摘されている書き方を真似すれば問題はありませんが視野が狭くなると思わぬミスを誘発する可能性があります。
他のモジュールについてもelixir_が必要なパターンと必要でないパターンがあるかもしれないため上手く動かない時はエラーメッセージに記載されているモジュール名を採用することを強くオススメします。
なおLivebook上ではこの問題は発生しなかったため、iexで実行する時限定の問題と考えられます。
Raspberry pi + インバータでBLモータを回転させる（BLモータの絶対角計測）

# 1. はじめに
私を含め、Raspberry piを買ったはいいものの、何をやったらいいかわからず、持て余している方は多いのではないでしょうか。
特に私の感覚では、「ハードウェアを動かすこと」に困っている方が多いように思います。
それに加え、私は仕事でBLモータを使ってはいるものの、BLモータが回転するメカニズムがわかっていなかったので、Raspberry piでBLモータを回転させる実験機を作ることにしました。

実験機を作りにあたり、ESCではなくインバータ（本記事ではIHM07M1）を使うことで、
より正確にBLモータが回転するメカニズムを理解できるように努めました。

# 2. 本記事で参考にしたサイト
本記事は以下サイトを参考にしております。作成者の方にはこの場を借りて、お礼を申し上げます。
- [BLモータのベクトル制御を実装する手順](https://qiita.com/fumiya_sato/items/ecc9f22c6f137f9dc0ac#6%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E5%88%B6%E5%BE%A1)
- [Raspberry PiでBLDCモータを120°通電制御する]( https://negligible.hatenablog.com/entry/2021/03/26/035001)

# 3. 本記事のゴールと注意点
BLモータの回転に最もよく使われる方法は「ベクトル制御」だと思われ、私も当初はベクトル制御実装を目指していましたが、
Raspberry piはPWMチャンネルが2つしかなく、BLモータの3相を独立で制御することができません。
よって本記事では「センサード120°制御+電流計測」までを解説します。

# 4. 本記事の構成
前述の「センサード120°制御+電流計測」を全て解説すると本文が膨大となるため、タスクとに、下記のように記事を分けます。

1. BLモータの絶対角計測（本記事の範囲）
2. [インバータ（IHM07M1）からのPWM出力](https://qiita.com/hiyo_control/items/12f9591ebb9531184250)
3. [BLモータの3相電流のAD変換と読み取り](https://qiita.com/hiyo_control/items/dc1b8c25310a649aa647)
4. [実験機製作と動作確認](https://qiita.com/hiyo_control/items/b629c0979d1acaa26784)

前半1章～3章で必要な機能の実装方法を述べ、後半4章と5章ではどのように実験機とプログラムを作ったかを述べます。

# 5. BLモータの絶対角計測
## 5.1. 使用する機器と配線図
本記事で使用する機器を以下に示します。

|機器名|型番
|---|---|
|角度センサ     | [AS5048A](https://www.switch-science.com/products/3140)
|コンピュータ   | Raspberry pi 4 Model B

AS5048Aの通信仕様は[SPI](https://emb.macnica.co.jp/articles/8191/)なので、Raspberry piと下図のように接続します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839547/89a064ec-aa37-40c5-9d69-2dd99a5e3648.png" width=70%>

## 5.2. AS5048A～Raspberry pi間の通信フロー
AS5048AとRaspberry piの通信フローを下図に示します。通信仕様はSPIであるため、CSがLowである間のみAS5048AとRaspberry piとのデータのやり取りが発生します。AS5048AはRaspberry piからRead CMDを受信した後に、Angle dataを返します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839547/383f53d7-7a9e-4db4-89d5-b43545e1e666.png" width=70%>

AS5048Aのデータは14bitなので、Angle dataに下記係数を掛けるとdegreeに変換することができます。
$$
0.0219\ \text{deg/LSB}
$$

「SPI通信」と「AS5048Aの仕様」については下記をご参照ください。
- [SPI通信](https://emb.macnica.co.jp/articles/8191/)
- [AS5048Aの仕様](https://media.digikey.com/pdf/Data%20Sheets/Austriamicrosystems%20PDFs/AS5048A,B.pdf)

## 5.3. 絶対角計測プログラム
著者の作成したAS5048Aのプログラムは以下Githubリンクにて公開しております。
https://github.com/hiyo-control/02_BL_motor/tree/main/Chapter1_AS5048A_program

プログラム作成では下記Githubで公開されているコードを参考しました。
https://github.com/eborghi10/AS5048A/tree/master/src

## 5.4. 動作の様子
プログラムを実行すると、下図のようにモータ角度が表示されます。
![30_angle.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839547/e9660f23-0f60-4e8c-b0c8-51c484bb11b0.png)
Linux Foundation Certified System Administrator(LFCS)受験記

## はじめに

CNCF主催の認定試験 **Linux Foundation Certified System Administrator (LFCS)** を受験し合格したので、受験記を記載します。同認定試験の受験を考えている方の参考になれば幸いです。

## 免責事項(Disclamer)

:::note warn
* 本投稿は受験当時の情報となります。受験を検討する際は最新の情報の確認をお願いします。
* 本投稿は個人の所感です。
    * 所属する企業や団体は関係ありません。
    * 情報の利用は自己責任でお願いします。
:::

## 試験概要

* Linuxのシステム管理に関する認定試験です。
* 受験日：2025/3/14
* 試験形式
    * オンライン試験
    * 1回再受験可能
    * 実機オペレーション形式
    * 試験時間120分
    * 試験言語は日本語、英語が提供
    * 100点満点中67点以上で合格
    * 試験中はmanコマンドを使ってコマンドヘルプを参照することができます。Kubernetes試験のように公式ドキュメントページ等は参照できません。

## LFCSとは

* Linuxのシステム管理全般について問われる試験です。具体的な内容は[カリキュラム](https://training.linuxfoundation.org/ja/certification/linux-foundation-certified-sysadmin-lfcs/)を確認しましょう。

## 勉強方法

### 参考にした受験記

[Sajeeva Lakmalさんの受験記](https://medium.com/@nvsajeeva/how-to-pass-lfcs-linux-foundation-certified-system-administrator-exam-c8e2c4520782)

### 学習リソース

* まずはUdemyの[LFCSコース](https://www.udemy.com/course/linux-foundation-certified-systems-administrator-lfcs/?srsltid=AfmBOoo5tMhmofDAM7--QFei-oReMO3a9012NVa19fsdcwjXO0vb9KLs&couponCode=V2JPLETSLEARN)でカリキュラムに沿った内容を学習しました。
* LFCSは実機オペレーションベースの試験なので、上記座学だけだと合格は厳しいです。
* そこで、上記Udemyコースを使うと、[KodeKloudのラボコース](https://kodekloud.com/courses/linux-foundation-certified-system-administrator-lfcs)も追加費用なしで利用することができます。
* まずはUdemyで各カリキュラムの問われる内容を学び、それをラボでコマンドを打って習得していくという形で学習を進めました。

## 受験してみての所感

* Udemyコースを通して学んだので時間がかかりましたが、実際試験を受けてみると割と基本的な操作（ユーザ作成やGit操作）の問題が多く出て、難易度は高くない印象です。
* Linuxに慣れ親しんでいる人であれば、勉強なしでも合格できる可能性はありそうです。
* ラボ操作を通して、どのようにmanコマンドを使って必要なコマンドを組み立てるかは慣れておいたほうがよさそうです。
    * 普段はわからないことがあったら検索してしまうと思うので。
* 私は以下のような内容がこれまでなじみがなかったので、そこは学んでおいてよかったなと思いました。
    * 仮想マシンの管理 (libvirt)
    * LVM ストレージの構成と管理
    * iptables設定
Cilium Certified Associate (CCA)受験記

## はじめに

CNCF主催の認定試験 **Cilium Certified Associate (CCA)** を受験し合格したので、受験記を記載します。同認定試験の受験を考えている方の参考になれば幸いです。

## 免責事項(Disclamer)

:::note warn
* 本投稿は受験当時の情報となります。受験を検討する際は最新の情報の確認をお願いします。
* 本投稿は個人の所感です。
    * 所属する企業や団体は関係ありません。
    * 情報の利用は自己責任でお願いします。
:::

## 試験概要

* Kubernetesで用いるネットワークプラグインCiliumに関する認定試験です。
* 受験日：2024/11/19
* 試験形式
    * オンライン試験
    * 1回再受験可能
    * 多肢選択式
    * 試験時間90分
    * 試験言語は英語のみ提供
    * 100点満点中75点以上で合格

## Ciliumとは

* CiliumではKubernetesで用いられるCNI用のネットワークプラグインです。
    * Kubernetesがネットワーク通信を行う際に使うコンポーネントであり、プラグイン的に変更することが可能です。パソコンでいうとネットワークドライバのようなイメージでしょうか。
* eBPFを用いてプロセスとカーネルの間に位置し、ネットワークトラフィックが来た時にフックされて動作します。
    * [このあたり](https://ebpf.io/ja/what-is-ebpf/#%E3%83%95%E3%83%83%E3%82%AF%E3%81%AE%E6%A6%82%E8%A6%81)がイメージつきやすいかなと思います。
* 以下のような機能を持っています。
    * L3レイヤーでのネットワークポリシーの適用
    * Kubernetesのサービスメッシュとして動作
    * Cilium内での透過的な暗号化
    * クラスターメッシュを使うことで異なるk8sクラスター間でも通信可能。異なるリージョンのクラスター間も接続可能。
    * Hubbleを使ったトラフィックフローの可視化
* 上記のように非常に多くの機能を持つため、覚えることが多く大変でした。

## 勉強方法

### 参考にした受験記

[Sajeeva Lakmalさんの受験記](https://medium.com/@nvsajeeva/how-to-pass-cca-cilium-certified-associate-exam-5a1b4f6ca63b)

### 学習リソース

* まずはLinuxFoundation提供の無料トレーニング [Introduction to Cilium (LFS146)](https://training.linuxfoundation.org/training/introduction-to-cilium-lfs146/) を受けましょう。Ciliumの概要や主な機能などを学習できます。
* 次に [認定の公式ページ](https://training.linuxfoundation.org/certification/cilium-certified-associate-cca/) を見て認定のカリキュラムを把握し、先ほどのトレーニングでカバーできていない範囲を[Ciliumドキュメント](https://docs.cilium.io/en/stable/index.html)で確認します。
* 具体的は以下あたりが該当すると思います。
    * IP Address Management (IPAM) with Cilium
    * Datapath Models
    * Policy Enforcement Modes
    * Know How to use Ingress or Gateway API for Ingress Routing
    * Understand the Benefits of Gateway API over Ingress
    * Encrypting Traffic in Transit with Cilium
    * Egress Connectivity Requirements
    * Understand Options to Connect Cilium-managed Clusters with External Networks
* 認定カリキュラムとドキュメントの対応は[こちら](https://ravikirans.com/cca-cilium-certified-associate-exam-study-guide/)も参考になりました。

 ## 上記でカバーしきれず本番で戸惑った項目

* 各IPAMモードでどの機能が使えるかは、[こちらの表](https://docs.cilium.io/en/stable/network/concepts/ipam/index.html)を覚えておきましょう。
* CNI, IPAMを切り替える際に無停止で切り替えができるか。
* Ingressトラフィックのルーティング方法には 1.Kubernetes Ingress API, 2.Cilium Gateway API, 3.Kubernetes Gateway API(1の後継機能)の3種類があります。試験で主に聞かれるのはCiliumの機能である2ですが、3についてもマニフェストの書き方の概要は知っておいたほうがよいです。
* Cilium ClusterMeshのIDが競合した際の動作。
* 以下は(beta)となっている機能なので試験に出ないかなと思いつつ、問われることがありました。
    * [VXLAN Tunnel Endpoint (VTEP) Integration (beta)](https://docs.cilium.io/en/stable/network/vtep/)
    * [L2 Announcements / L2 Aware LB (Beta)](https://docs.cilium.io/en/stable/network/l2-announcements/)
* [BIG TCPとMTU](https://docs.cilium.io/en/stable/operations/performance/tuning/)について。

## その他Tips

* ドキュメントを見てもわかりづらい点については、ChatGPTなどを使って説明してもらうのも有用でした。（ただし、情報の正確さは裏どりした方がよいです。Cilium関連は比較的正確だったと感じます）
クラウド系資格 受験記目次

## はじめに

趣味と実益を兼ねてクラウドネイティブ系の資格を取得したので、その受験記を残しておきます。同じ資格を取得する人の参考になれば幸いです。

## 免責事項(Disclamer)

:::note warn
* 本投稿は受験当時の情報となります。受験を検討する際は最新の情報の確認をお願いします。
* 本投稿は個人の所感です。
    * 所属する企業や団体は関係ありません。
    * 情報の利用は自己責任でお願いします。
:::

## AWS系資格 受験記目次

## CNCF, Kubernetes系資格 受験記目次

* [Certified Kubernetes Administrator (CKA), Certified Kubernetes Application Developer (CKAD)](https://qiita.com/synn/items/a802d083cf7da1b21666)
* [Certified Kubernetes Security Specialist (CKS)](https://qiita.com/synn/items/c86a5d5e3de532171933)
* [Kubernetes and Cloud Native Associate (KCNA), Kubernetes and Cloud Native Security Associate (KCSA)](https://qiita.com/synn/items/dcb5e29e8cfa6d661e25)
* [Prometheus Certified Associate (PCA)](https://qiita.com/synn/items/4041c726a1b2eaa46112)
* [Certified GitOps Associate (CGOA)](https://qiita.com/synn/items/d7c3299ea02af5c68113)
* [Certified Argo Project Associate (CAPA)](https://qiita.com/synn/items/6d44bae7b093f7f42908)
* [Cilium Certified Associate (CCA)](https://qiita.com/synn/items/e50a4e46879e559211c1)
* [OpenTelemetry Certified Associate (OTCA)](https://qiita.com/synn/items/b161cfd25aaa94a828f8)
* [Certified Backstage Associate (CBA)](https://qiita.com/synn/items/6741758928ef5f4dcb03)
* [Istio Certified Associate (ICA)](https://qiita.com/synn/items/dc7d872c92d1bf2440b5)
* [Kyverno Certified Associate (KCA)](https://qiita.com/synn/items/deeb9bbb8d249a364567)
* [Linux Foundation Certified System Administrator (LFCS)](https://qiita.com/synn/items/1ad422a093c3b1407b37)

## 認定試験をお得に受ける方法

* [認定試験をお得に受ける方法](https://qiita.com/synn/items/5414cf0bcd1587e22cdf)
Reactで状態をホイスティング(巻き上げ)する

ほぼ Material の TreeView 専用かも

# 何を解決したいか

[以前のReactデモアプリ](https://qiita.com/daredeshow/items/0381e6dcb1f87f9aefd4)ではツリー構造の部署を選択すると部署に所属する社員が表示される際に、ツリーの展開状態は失われてしまう。以下のような感じ。

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

この状態（改善前）のデモコードは以下のリポジトリから参照することができる

https://github.com/mkiuchi/qiita20240503/tree/main

これを改善し、部署選択時にもツリーの展開状態を保持できるようにしたい

# コンポーネントの構造と問題の起きる仕組み

デモアプリのコンポーネントは以下のような構造になっている。

![Qiita20250321-Reactの状態ホイスティング.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52237/d6ebd285-3c10-4e18-83ed-dfff9404f3fe.png)

部署を選択したときの挙動は以下のようになる

- Folderコンポーネントをクリックして部署を選択すると、propで渡されている`setOrg()`が呼び出される
- `setOrg()`は定義元であるAppコンポーネント上で実行され、`org` stateが更新される
- stateが更新されると、Appコンポーネントは再描画され、子コンポーネントは破棄再作成される
- 再作成されたコンポーネントのstateは初期状態、つまり閉じている状態になる

図にすると以下のようになる

![Qiita20250321-Reactの状態ホイスティング (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52237/82cd448d-7515-47fb-a446-a8a378022085.png)

# 状態のホイスティング(巻き上げ)による解決

これを解決するには、Folderコンポーネントが持っている開閉状態を、破棄されないコンポーネントつまりAppコンポーネントに移譲することで行うことができる。本来のコンポーネントが持つ状態を親に渡すので、**状態のホイスティング、巻き上げ**と呼ぶ。

具体的には以下のようにする

- AppコンポーネントにuseMemoを使って関数 `stateStore` を作る。`stateStore` の中のプライベート変数に実際の状態が保存される
- `stateStore` をpropでFolderまで伝播させる
- Folderコンポーネントでは `setState(stateStore.get(パス名))` とすることで`stateStore`に保存された値をstateの初期値とする
- ツリーが開閉されるたびに `stateStore.set(パス名, 開閉状態)` を呼び出すことで、親コンポーネント内に状態を保存することができる

図にすると以下のようになる

![Qiita20250321-Reactの状態ホイスティング (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52237/606a6c87-3538-421c-b139-a62da094aca1.png)

上記を実装したコードは以下の場所で見ることができる(branch: 20250321_hoisted)

https://github.com/mkiuchi/qiita20240503/tree/20250321_hoisted

修正後の動作は以下のようになる

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

# 余談

[状態のホイスティング(巻き上げ)は Android JetPack Compose の開発の際に出てくるプログラミングパターン](https://developer.android.com/develop/ui/compose/state?hl=ja#state-hoisting)だが、[MDNでも言及されている](https://developer.mozilla.org/ja/docs/Glossary/Hoisting)。

理解しているのであればMDNの解説でもわからなくもないかもしれないけど、全く知らない人は読んでも何がいいのかよくわからないと思う。

# おわりです

[Jotai](https://www.npmjs.com/package/jotai)使うのでももちろんいいと思う。ちょっとした状態保存なら別のライブラリ使わなくてもできますよってことを言いたかったです。
【JS】数値「0」がfalsyな値として評価される

**背景**
下記のようなデータがある。
```javascript
const data = { success: true, linemode: 1, xmode: 0 };
```
それぞれ「１」、「０」のために分岐操作を作ったが、
「0」のほうはうまくいかなかった。
```javascript
if (data.xmode&&data.xmode===1) {
    console.log('xmode is 1');
} else if (data.xmode&&data.xmode===0) {
    console.log('xmode is 0');//実行されない
} 
```
```javascript
console.log(data.xmode);//出力：0
if (data.xmode&&data.xmode===1) {
    console.log('xmode is 1');
} else if (data.xmode&&data.xmode===0) {
    console.log('xmode is 0');//出力されない
} else{
   console.log('xmode is falsy');//出力：'xmode is falsy'
} 
```
**原因**
JSでは、`0` は「**falsy**」として評価され、`if` 文の条件式で 、`data.xmode&&data.xmode==0`の`data.xmode`が`falsy`*で後続の条件が評価されない。`&&`演算子によってこの条件は`false`と評価される。
*条件式で評価されると `false` と同じ扱いをされる値のこと

**対策**
①条件式を変える
```javascript
const data = { success: true, linemode: 1, xmode: 0 };
console.log(data.xmode);//出力：0
if (data.xmode===1) {
    console.log('xmode is 1');
} else if (data.xmode===0) {
    console.log('xmode is 0');//出力：'xmode is 0'
} else{
   console.log('data.xmode is falsy');//実行されない
}
```
②数値だったデータを文字列に変える
```javascript
const data = { success: true, linemode: "1", xmode: "0" };
console.log(data.xmode);//出力：0
if (data.xmode&&data.xmode==="1") {
    console.log('xmode is string 1');
} else if (data.xmode&&data.xmode==="0") {
    console.log('xmode is string 0');;//出力：'xmode is string 0'
} else{
   console.log('data.xmode is falsy');//実行されない
}
```
AzureでExaDB-XSの利用が可能に

## はじめに
この記事は以下の英語のブログを要約したものです。

https://blogs.oracle.com/database/post/get-all-exadata-benefits-for-less-on-oracle-databaseazure


## 1. 概要
- Oracle Database@Azure にて、**Exadata Database Service on Exascale Infrastructure** が提供開始。
- 既存の Dedicated Infrastructure に加え、より柔軟でコスト効率の高い選択肢。
- Exadata のパフォーマンスと機能を Azure 上で活用可能。

## 2. Exascale Infrastructureとは？
- Oracle Exadata の性能・信頼性・可用性・セキュリティを備えた **共有型クラウド基盤**。
- 主な特長：
  - **低コストで開始可能**（最小構成が小さい）
  - **IOPS課金なし**で予測可能なコスト
  - **スケーラブルなリソースプール**
  - **Oracle Database 23ai**専用：AIベクトル検索、JSON Relational Duality 対応
  - **高速なクローン作成**で開発効率アップ

## 3. Azure上でのメリット
- OCIと同等の価格体系で **Azureデータセンター内での稼働**。
- **Azure Marketplace** から：
  - プライベートオファー or 従量課金で購入可能
  - Oracle/Microsoft のライセンスや割引も活用可

## 4. 柔軟なスケーリングと構成
- **最小構成例**：
  - VM 2台（各8 ECPU、22 GB メモリ、300 GB ストレージ）
- **スケールアップ／ダウンが簡単**：
  - VM数やECPU数を柔軟に調整可能
  - 追加ECPUを予約して即時拡張対応

## 5. データベース作成と設定
- Azureコンソールから Exascale VM クラスタを簡単にプロビジョニング
- OCIコンソール経由で Oracle Database 23ai を作成
- **バックアップ設定**：
  - Autonomous Recovery Service または OCI Object Storage を選択
  - スケジュール設定と保持期間に応じた自動削除

## 6. データベース移行オプション
- 以下の Oracle 標準ツールで移行可能：
  - **Oracle Data Guard**（物理コピー）
  - **Oracle GoldenGate**（レプリケーション）
  - **Data Pump**（エクスポート／インポート）

## 7. まとめ：Exascale on Oracle Database@Azure の利点
- Exadata の力を **Azure 環境で最大限に活用**。
- 最小構成での **低コストスタート**が可能。
- **スケーラブルかつ柔軟**なクラウドデータベースサービス。
- 開発者向けに **迅速なDBクローン作成** 機能を提供。
- **アプリ変更不要で移行可能**。オンプレミスとの互換性維持。

---

👉 詳しくは [公式ブログ記事](https://blogs.oracle.com/database/post/get-all-exadata-benefits-for-less-on-oracle-databaseazure) を参照してください。
Obsidianのサイドバーのファイル名の横にアイコン表示したい


## この記事でできること

サイドバーのファイル名・フォルダ名の横にそれぞれのアイコンを表示できます。かわいいね。
指定するurlなどを変えればお好きなアイコンに変えられます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665424/bb1aa036-3456-495b-bad1-83a1e96c81ee.png)

## 背景

以下の記事を大いに~~パクリ~~参考にしています。
参考：[27 Awesome CSS Snippets For Customizing Obsidian](https://prakashjoshipax.com/obsidian-css-snippets/#folder--fileicon)

ただ本記事の方法ではアイコンをフォルダ展開・格納に応じて変わるようにしています。
またアイコンのデザインにこだわれるように、urlで指定できるようにしました。

## やりかた

まず`VaultName/.obsidian/snippets`内に適当な名前のcssファイルを作成してください（`folder-file-icons.css`とか。`snippets`フォルダがないなら作ってください）。できたらそのcssファイルをメモアプリなどで開いて、以下のcssをコピペ・saveして閉じてください。
HEX値からfilter値を導出したい場合は以下のサービスを利用してください：[CSS Color Filter Generator](https://angel-rs.github.io/css-color-filter-generator/)

```css:folder-file-icons.css
:root {
    /* アイコン関連の定数 */
    --icon-spacing: " ";
    --icon-file-url: url(https://icongr.am/fontawesome/file.svg?size=12);
    --icon-folder-url: url(https://icongr.am/fontawesome/folder.svg?size=12);
    --icon-folder-open-url: url(https://icongr.am/fontawesome/folder-open.svg?size=12);
}

/* ダークテーマのアイコンフィルター（#c0caf5） */
.theme-dark {
    --icon-filter: brightness(0) saturate(100%) invert(81%) sepia(2%) saturate(6294%) hue-rotate(196deg) brightness(102%) contrast(92%);
}

/* ライトテーマのアイコンフィルター（#343c59） */
.theme-light {
    --icon-filter: brightness(0) saturate(100%) invert(20%) sepia(42%) saturate(503%) hue-rotate(190deg) brightness(97%) contrast(91%);
}

/* 共通のアイコンスタイル */
.theme-dark,
.theme-light {
    /* ファイルアイコンのスタイル */
    .nav-file .nav-file-title-content::before,
    .nav-folder-children .nav-file-title-content:first-child::before {
        content: var(--icon-file-url) var(--icon-spacing);
        filter: var(--icon-filter);
    }

    /* 折りたたまれたフォルダアイコンのスタイル */
    .nav-folder.is-collapsed .nav-folder-title-content::before,
    .nav-folder-children.is-collapsed .nav-folder-title-content::before {
        content: var(--icon-folder-url) var(--icon-spacing);
        filter: var(--icon-filter);
    }

    /* 開いたフォルダアイコンのスタイル */
    .nav-folder .nav-folder-title-content::before,
    .nav-folder-children .nav-folder-title-content::before {
        content: var(--icon-folder-open-url) var(--icon-spacing);
        filter: var(--icon-filter);
    }
}
```

次にObsidianを開き、設定（`ctrl + ,`）→外観の一番下`CSSスニペット`に先ほど作ったcssファイルが表示されていれば、それをONにしてください。ないならフォルダアイコンを押して参照してください。

上手く反映されていれば、ファイル名・フォルダ名の横にアイコンが表示されているはずです。

## まとめ

素敵なObsidianライフを🖖。
コード不要でAIエージェントを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917980/9399073d-fbdb-43a0-9c15-eacb0e6ba53f.png)


最近のAI技術の進化により、プログラミングなしでAIエージェントを作成できるプラットフォームが増えています。

本記事では、"AIエージェント" の概要や、コードを一切書かずに簡単に作れるツール、そして実際の使い方を詳細に解説します。

---

## そもそも「AIエージェントを作る」とは？

AIエージェントとは、特定のターゲットに対して、自分で思考し行動するシステムまたはプログラムのことです。
例：自動メールレスポンダー、ウェブサーファーバー、データ分析ツール等

当初はプログラミングによる開発が必須でしたが、最近は「ノーコードツール」の登場により、コード書けない人でもAIエージェントを構築できるようになりました。

---

## なぜノーコードのAIエージェントが良いの？

- プログラミング知識が不要
- 手間や設定が簡単
- ビジネス解決に対応したツールも多数
- コストを押さえられる

---

## 代表的なノーコードAIエージェントビルダー

### 1. GenFuse AI
- ドラッグアンドドロップUI
- 多層な作業をまとめて管理
- 多復辞書検索や知識ベース検索に対応
- 複数エージェントの分業も可能
- 公式サイト：[https://genfuseai.com](https://genfuseai.com)

### 2. MindPal
- 100%無料
- UIが楽しく簡単
- チャットボットやテーマブレーンなどの作成も簡単
- 公式サイト：[https://mindpal.space/tool/ai-agent-builder](https://mindpal.space/tool/ai-agent-builder)

### 3. CrewAI
- テンプレートあり
- すぐに使える実用的デザイン
- 公式サイト：[https://research.aimultiple.com/ai-agent-builders](https://research.aimultiple.com/ai-agent-builders)

### 4. Relevance AI
- ビジネスオートメーション向け
- API連携も簡単
- GPT、Claudeなどの大所と連携
- 公式サイト：[https://usefulai.com/tools/ai-agents](https://usefulai.com/tools/ai-agents)

### 5. AutoAgent
- LLMを基盤にした自実行型AI
- OSのように各機能を分離
- コマンドラインで指示するだけでOK
- 公式情報：[https://arxiv.org/abs/2502.05957](https://arxiv.org/abs/2502.05957)

### 6. AutoGen Studio
- GUI + Python APIの両方対応
- デバッグ機能もあり
- 再利用可能なコンポーネントも一覧あり
- 公式情報：[https://arxiv.org/abs/2408.15247](https://arxiv.org/abs/2408.15247)

---

## 作成のステップ例 (MindPal)

1. サイトにアクセス
2. "Create New Agent"を選択
3. やりたい件に合わせてテンプレートを選ぶ
4. 自分のデータを入力
5. テストして使用

---

## まとめ

- コード不要でも高機能なAIエージェントが作れる時代
- ビジネス解決や個人用にも有用
- 無料のオプションも多数
- 簡単なステップで自分だけのエージェントを作ろう

このようなノーコードプラットフォームを活用することで、もはやAIは専門家だけの技術ではなく、誰もが自由に使いこなせるツールになりつつあります。

さあ、あなたの手で「パーソナルAIエージェント」を生み出しましょう!
なぜpip freezeすると余計なものまで出力されるの？

簡単に言うと：

:::note
`pip freeze` は「インストールされたすべてのパッケージ（依存含む）」を出力するからです。
:::


## ✅ 詳しく解説

### 🎯 `requirements.txt` に書いた内容
```txt
pandas
streamlit
azure-cosmos
...
```

これは **直接使いたいライブラリ（トップレベルの依存）** です。



### 💡 一方で `pip freeze` が出力するのは…

```bash
aiohttp==3.9.3
altair==5.5.0
attrs==23.1.0
blinker==1.6.2
cachetools==5.3.1
...
```

これは：
- 直接指定したパッケージ **＋**
- 内部的に依存している **サブパッケージ（依存関係）すべて**

を出力しているんです。



## ✅ 例：`streamlit` の依存

たとえば、あなたが `streamlit` を入れただけでも、以下のようなパッケージが自動でインストールされます：

```bash
altair
blinker
cachetools
click
protobuf
pyarrow
pympler
...
```

これは `streamlit` 自体が `setup.py` に「これが必要です」と書いてあるから、**pipが勝手に入れてくれる**わけです。


---

### `pip freeze > requirements.txt` はロックファイルとして扱う（本番向け）

このやり方は本来、**本番環境でまったく同じバージョンを再現したいとき用**です。

- ❌ 開発用に使うとパッケージが膨れ上がる
- ✅ 再現性はバツグン



## ✅ まとめ

| 行動 | 結果 | よくある用途 |
|------|------|------------|
| `pip freeze > requirements.txt` | **すべてのパッケージとそのバージョンが出力される** | デプロイ／本番環境の再現 |
| 手書きで管理 | **トップレベルの依存だけ記載** | 管理は楽だが漏れに注意 |

---

**なので、`pip freeze` で余計なものまで出力されてるのは全く正常な挙動なのです**
Cloudflare Tunnelで手元のサービスを公開

# Cloudflare Tunnelって何？
TunnelはパブリックIPやポート解放を必要とせず、外部からサービスにアクセスできる便利なサービスです。
これはCloudflare ZeroTrustのサービスで、無料で利用できます。
# PagesとTunnelの比較
| | 料金 | リクエスト制限 | サーバーレス | 柔軟性 | 難しさ |
| :---: | :---: | :---: | :---: | :---: | :---: |
| Pages | Free ~ | 100,000 /day | ⚪︎ | △ | 低 |
| Tunnel | Free | 無制限 | × | ⚪︎ | 高 |
- **Pages**
Pagesはサーバーレス重視な代わり柔軟性が低い印象。
大量のリクエストを捌くAPIとかは従量課金のためおすすめできない。
- **Tunnel**
Tunnelはサーバーが必要だが、柔軟性が高い印象。
完全無料のため、サーバーさえ確保できていればこちらの方がおすすめ。
ただし、インフラ等のプログラミング以外の知識もある程度必要。

# 手元でTunnelを起動
以下のスクリプトを任意の場所に設置し、`chmod +x`で実行権限をつけます
実行方法は`./cftunnel.sh <tunnel name> <domain> <url>`です
例：`./cftunnel.sh test test.example.com http://localhost:3000`

注意書き：
- `cloudflared`は適宜インストールする必要があります。
  https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/
- すでにあるtunnelと同じ名前を指定した場合、上書きされます。DNSも同様です。
- 実行終了後、tunnelの削除、DNSの削除はされないので手動でする必要があります。
```bash
#!/bin/bash

GREEN='\033[0;32m'
RESET='\033[0m'
PS4="[  ${GREEN}OK${RESET}  ] "
set -x

if [ ! -e "$HOME/.cloudflared/cert.pem" ]; then
    cloudflared tunnel login
fi

if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
	cloudflared tunnel delete "$1" 2> /dev/null
    cloudflared tunnel create "$1" 2>&1 \
		| sed -nE 's/.*([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}).*/\1/p;q' \
		| xargs -I{} mv $HOME/.cloudflared/{}.json "$HOME/.cloudflared/${1}.json"
	cloudflared tunnel route dns -f "$1" "$2"
	cat <<-EOF | tee $HOME/.cloudflared/${1}-config.yaml
		tunnel: ${1}
		credentials-file: $HOME/.cloudflared/${1}.json
		no-autoupdate: true
		ingress:
		- hostname: ${2}
		  service: ${3}
		- service: http_status:404
	EOF
fi;

if [ -e "$HOME/.cloudflared/${1}-config.yaml" ]; then
	cloudflared tunnel --config $HOME/.cloudflared/${1}-config.yaml run
fi
```
【AWS運用者必見】Amazon Linux 2からAmazon Linux 2023への移行時に注意すべき削除パッケージ一覧


Amazon Linux 2023（AL2023）のリリースに伴い、Amazon Linux 2（AL2）から移行する企業・開発者が増えています。しかし、AL2023では多くのパッケージや機能が廃止されており、移行時には注意が必要です。

本記事では、AL2に存在していたが、AL2023で削除された主なパッケージを一覧でまとめました。

---

## 🎯 この記事はこんな人におすすめ

- AL2からAL2023への移行を検討している方
- EC2やECSなどでAmazon Linuxを使用しているAWS運用者
- 移行時のトラブルを未然に防ぎたいインフラエンジニア

---

## ❌ AL2にあってAL2023にないもの一覧

### 1. cron系パッケージ
- `cronie`（従来のcronデーモン）
  - AL2023ではデフォルトで未インストール、代わりにsystemdタイマー推奨

### 2. ログ・システムツール
- `rsyslog`
- `rsyslog-openssl`
- `lsb_release`
- `system-lsb-core`

### 3. 古い互換性・レガシー系
- `compat-*` 系パッケージ
- `32bit i686`パッケージ全般
- `Network Information Service (NIS) / yp`

### 4. 言語・ランタイム系
- `OpenJDK 7 (java-1.7.0-openjdk)`
- `Python 2.7`
- `mcrypt`（暗号化ライブラリ）
- `pcre`（pcre1バージョンは削除、pcre2へ移行）

### 5. AWS関連ツール
- `aws-apitools-*`（AWS CLIに統合）
- `awslogs`（CloudWatch Logs エージェントに統合）

### 6. その他
- `bzr`（Bazaar VCS）
- `cloud-init`（インスタンス初期化ツール）
- MATEデスクトップ環境

---

## 🔍 なぜこれらが削除されたのか？

AL2023は、セキュリティと最新化を重視した設計方針のため、**レガシー機能やサポート終了パッケージ**を排除し、より軽量かつモダンな構成になっています。

---

## 🚩 移行時のポイント

- **移行前にAL2023上で必要パッケージが利用可能か確認する**
- **不要な依存パッケージを整理・リファクタリングする**
- **systemdタイマーや新しいCLIを積極的に導入する**

---

## 📝 まとめ

Amazon Linux 2023は、よりモダンでセキュアな設計になっていますが、  
これまでAL2で利用していたパッケージが使えないケースも多いです。

移行時には、上記リストを参考に「依存パッケージの棚卸し」をぜひ行ってください。

---

## 📚 参考リンク

- [Amazon Linux 2023 公式ドキュメント - Deprecated Features](https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/deprecated-al2.html)
- [AL2023 リリースノート（削除パッケージ一覧）](https://docs.aws.amazon.com/linux/al2023/release-notes/removed-AL2023.6-AL2.html)
ゼロから勉強始めました

私はYouTubeの動画を見たり、ネットで勉強したりしてHTMLを始めました。パソコンスキルはゼロでしたが、HTMLは上達しました。でも嬉しかったです。他の仕事をしながら1ヶ月くらいで終わらせて、次にCSSを始めました。CSSはさらに難しかったです。でも続けて、毎日2時間くらい練習して勉強しました。でも他の仕事をしながらは大変でした。CSSを理解するのに時間がかかりました。3ヶ月くらいかかりました。CSSも頑張りました。CSSの時は諦めようかと思いました。でも続けました。みなさんもこういう時は最初は我慢してください。連絡は大事です。