OmniAICreator/Qiita-1.07M huggingface dataset:
もうプレゼン作りで泣かない！AutoPPTのAIが10分で仕上げてくれる秘密

こんにちは！ライターのゆりかです。先週締切に追われていた時、偶然見つけた神ツールが本当に人生を救ってくれたのでシェアします♪

▮出会いはまさかの「AI PowerPoint」
「明日までに30ページの営業資料！」という絶望的な状況で、Google検索で見つけたのがAI PowerPointというキーワード。最初は「またAI系の誇大広告かしら」と思ったのですが...

実際にAutoPPTを開いてみたら、驚きの連続でした！
① キーワード入力（私の場合は「クラウドセキュリティ 導入事例」）
② 3分で完成した目次案をチョイス
③ デザイン自動生成 → 完成！
https://autoppt.com/ja

AutoPPTの操作画面例
![9wxwovcyxg0yuthrd1zje0jl1r6y.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4016113/b6225d85-433a-4a17-ab8d-e5ffdab08c60.png)


▮すごいところベスト3
デザインセンスがプロ級
「文字が多くなるとゴチャつく」という悩みをAIが自動解決。適切なインフォグラフィックを配置してくれます。

アニメーション調整が賢い
「ページ遷移はシンプルに、グラフだけ動かす」といった細かい指示も日本語でOK！

リアルタイム共同編集
チームメンバーと同時編集できるのに、操作が軽い！「重くなってフリーズ」がなくなったのは本当に助かりました。

▮裏側の技術がすごいらしい
開発者ブログを読んでみると、こんな技術を使っているみたい：

自然言語処理：BERT日本語特化モデル
デザインエンジン：GAN＋人間のデザイナー50人の審査データ
クラウドレンダリング：WebGLを活用した軽量化
専門用語はよくわからないけど、とにかく「サクサク動く」のが最高です！

▮ある日の実録ワークフロー
〈15:00〉 テーマ入力
〈15:03〉 構成案から「導入課題→解決策」型を選択
〈15:07〉 デザインテーマ「モダン・ブルー系」に決定
〈15:12〉 追加資料をD&Dでインポート
〈15:15〉 PDF出力して上司に送信！

「え？これだけでいいの？」と逆に不安になるレベルでした（笑）

▮ちょっとした注意点
× 完全日本語対応はまだ90%（たまに英語表記混じる）
× 超マニアックなフォントは非対応
○ ただし常にアップデートされている！

先日追加された「和風テンプレート」がめちゃくちゃ可愛かったです♪

まとめ：もうPPTで時間を奪われない
AutoPPTを使い始めてから、資料作成時間が1/5になりました。本当におすすめしたいのはこんな人：
✓ デザインセンスに自信がない
✓ 複数資料の統一感を出したい
✓ とにかく時短したい！

AI PowerPointの進化は止まらないみたい。次はARプレゼン機能が来るとか...？気になる方はぜひチェックしてみてくださいね☆

Link: https://autoppt.com/ja
JavaScriptにおける Promise.all の並列処理とパフォーマンス最適化


## はじめに

JavaScriptの非同期処理を適切に扱うことはパフォーマンス向上の鍵となります。本記事では、`Promise.all` を活用した並列処理について解説し、どのようにして API リクエストのパフォーマンスを改善できるのかを紹介します。

## `Promise.all` の基本

通常、`await` を使った非同期処理は逐次実行されるため、複数のリクエストを順番に処理すると全体の実行時間が長くなってしまいます。

そのため、データ間に依存関係がない場合は、並列にデータ取得を行うことでパフォーマンスが効率的になります。

例えば、以下のコードでは `getUserProfile` の処理が完了してから `getUserPosts` が実行されるため、両者の合計時間がかかってしまいます。

```javascript
const userProfile = await getUserProfile(userId);
const userPosts = await getUserPosts(userId);
```

これを `Promise.all` を使うことで、両方のリクエストを並列して実行し、パフォーマンスを向上させることができます。

## `Promise.all` を使った並列処理

以下のように `Promise.all` を使用することで、`getUserProfile` と `getUserPosts` を同時に実行し、両者の完了を待つことができます。

```javascript
  const [profile, posts] = await Promise.all([
    getUserProfile(userId),
    getUserPosts(userId),
  ]);
```

これにより、個々の処理を逐次実行するよりも高速にデータを取得できます。

### 実行時間の比較

- **逐次実行 (順番に実行)**: `getUserProfile` に 500ms、`getUserPosts` に 800ms かかる場合、合計 1300ms かかる。
- **並列実行 (`Promise.all`)**: どちらも同時に開始されるため、最大時間である 800ms で完了。

つまり、`Promise.all` を使用することで処理時間を短縮できます。

以下の画像は、Next.jsの[公式ドキュメント](https://nextjs.org/docs/app/building-your-application/data-fetching/fetching#parallel-and-sequential-data-fetching)にあるデータ取得の逐次実行と並列実行によるパフォーマンスのイメージ図です。
![](https://storage.googleapis.com/zenn-user-upload/646dc210538e-20250220.png)

## `Promise.all` の注意点

`Promise.all` を使う際には、以下の点に注意が必要です。

1. **いずれかの処理が失敗すると全体が失敗する**

   - `Promise.all` はすべてのプロミスが成功するまで待機しますが、一つでもエラーが発生すると即座に `catch` に入り、他のプロミスの結果を取得できません。
   - 対策: `Promise.allSettled` を使用することで、すべての処理の結果を取得可能。

   ```javascript
   const results = await Promise.allSettled([
     getUserProfile(userId),
     getUserPosts(userId),
   ]);

   results.forEach((result) => {
     if (result.status === "fulfilled") {
       console.log("Success:", result.value);
     } else {
       console.error("Error:", result.reason);
     }
   });
   ```

2. **API に負荷をかけすぎないようにする**

   - `Promise.all` はすべての処理を並列実行するため、一度に大量のリクエストを送るとサーバーに負荷をかける可能性があります。
   - 対策: `p-limit` などのライブラリを使用して同時リクエスト数を制御する。

## まとめ

`Promise.all` を活用することで、複数の非同期処理を並列実行し、パフォーマンスを大幅に向上させることができます。

本記事が `Promise.all` を活用した効率的な非同期処理の実装に役立てば幸いです。
EC-CUBEプラグインでprocessor機能を追加・上書きする

# processor機能を追加する

```:root/app/Plugin\Hoge\Service\PurchaseFlow\Processor/HogeProcessor.php
<?php

namespace Plugin\Hoge\Service\PurchaseFlow\Processor;

↓アノテーションでフローに追加する
/**
 * カートフローでプロセッサを有効にする
 * 
 * @CartFlow
 */

 /**
 * 購入フローでプロセッサを有効にする
 * 
 * @ShoppingFlow
 */

 /**
 * 管理画面でプロセッサを有効にする
 * 
 * @OrderFlow
 */

  private function {
  
  }
```

複数指定も可能


# processor機能を上書きする

```:root/app/Plugin\Hoge\Service\PurchaseFlow\Processor/HogeProcessor.php
<?php

namespace Plugin\Hoge\Service\PurchaseFlow\Processor;

↓アノテーションでフローに追加する
/**
 * カートフローでプロセッサを有効にする
 * 
 * @CartFlow
 */

 /**
 * 購入フローでプロセッサを有効にする
 * 
 * @ShoppingFlow
 */

 /**
 * 管理画面でプロセッサを有効にする
 * 
 * @OrderFlow
 */
```
ここまでは上と同じ

↓デフォルトのプロセッサも動作してしまい値が重複する場合、デフォルト数値をマイナスする
```
  private function {
  
    $DeliveryFee = $this->deliveryFeeRepository->findOneBy([
    'Delivery' => $Shipping->getDelivery(),
    'Pref' => $Shipping->getPref(),
]);
$fee = is_object($DeliveryFee) ? $DeliveryFee->getFee() : 0

->setPrice($fee + $deliveryFeeProduct)
  
  }
```
↓
```
  private function {
  
    $DeliveryFee = $this->deliveryFeeRepository->findOneBy([
        'Delivery' => $Shipping->getDelivery(),
        'Pref' => $Shipping->getPref(),
    ]);
    $fee = is_object($DeliveryFee) ? $DeliveryFee->getFee() : 0

/* デフォルトプロセッサの送料をマイナスする */
    $DefaultDeliveryFee = $this->deliveryFeeRepository->findOneBy([
        'Delivery' => $Shipping->getDelivery(),
        'Pref' => $Shipping->getPref(),
    ]);
    $defaultFee = is_object($DefaultDeliveryFee) ? $DefaultDeliveryFee->getFee() : 0;

->setPrice($fee + $deliveryFeeProduct - $defaultFee)
  
  }
```
VS Code の拡張機能「GitHub Repositories」でリモートリポジトリにアクセス

## はじめに
この記事は、以下の VS Code の拡張機能「GitHub Repositories」に関する内容です。

●GitHub Repositories - Visual Studio Marketplace
　https://marketplace.visualstudio.com/items?itemName=GitHub.remotehub

![2025-02-15_15-28-47.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0d8b1471-f262-4bcf-9bcc-94ddb8e9faff.jpeg)

### 情報源
上記の拡張機能の情報を見たのは、以下の公式ドキュメントからです。

●Visual Studio Code を使用した GitHub リポジトリのクローン - JavaScript on Azure | Microsoft Learn
　https://learn.microsoft.com/ja-jp/azure/developer/javascript/how-to/with-visual-studio-code/clone-github-repository?tabs=activity-bar

Google検索で、VS Code上でのリモートリポジトリのクローンについて検索している中で見かけました。

#### 過去のニュース記事
あらためて「GitHub Repositories」について、過去のニュース記事を検索してみると以下などが出てきました（2021年6月の記事）。

●Visual Studio CodeでGitHubリポジトリを「読む」のに便利な拡張機能が登場 - 窓の杜
　https://forest.watch.impress.co.jp/docs/news/1331439.html

## リモートリポジトリにアクセスするまでの流れ
リモートリポジトリにアクセスするまでの流れを書いていきます。

### 拡張機能のインストール
まずは、拡張機能「GitHub Repositories」をインストールします。

### 認証
拡張機能のインストール完了後、以下のように VSCode のコマンドパレットから、コマンドを検索します。

とりあえず、「open remote re」くらいまで入れると、一番上に「Remote Repositories: Open Remote Repository ...」という項目が出てきたので、それを選びます。

![2025-02-15_15-26-01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ccfa7f2a-a9ab-416b-acca-3cdb840ab47d.jpeg)

そして、その後に出てきた選択肢で「GitHub からリポジトリを開く」を選びました。

![2025-02-15_15-27-03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/16d6505b-e431-42a0-bb73-0d68ea24c8c0.jpeg)

#### GitHubアカウントでの認証
そうすると、初回はブラウザ経由での認証のステップが入りました。
ここでは、自分の GitHubアカウントでの認証を行いました。

### リモートリポジトリを開く
再度、コマンドパレットを開き、上で実行したコマンドを再度実行しました。

そして、「GitHub からリポジトリを開く」を選択するところまで進んだ後は、以下のように自分の GitHub上のリポジトリ一覧が出てきました。

![2025-02-15_15-44-17.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/cba4af9b-5275-49e0-842a-46ce0ee0da78.jpeg)

ここで、リポジトリを選んでみます。
今回のお試し用に作った以下を選択してみました。

●yo-to/VSCode_GitHubRepositories
　https://github.com/yo-to/VSCode_GitHubRepositories/tree/main

その結果、以下のように VS Code の拡張機能を使い、リモートリポジトリの中身を見ることができました（※ちなみに「ローカルにクローンする・ローカルリポジトリにリモートの中身を持ってくる」という状態とは異なっています）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0735bae5-a25b-44d1-96af-0c251fec87ec.png)


## 【余談】関連する情報の参照など
以下は、今回の話題に関係する情報を探した話です。

### ChatGPT の deep research

今月（2024年2月）に ChatGPT の Plusプランから Proプランへの切り替えを行い、deep research が使える状況になっています。

https://x.com/youtoy/status/1886388898840154452

それを試してみる意味で、最近は調べ物をするときに deep research でも調査を依頼してみるということをやっています。

今回も、例えば以下の内容などを試してみています。

![2025-02-16_02-44-29.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/8b13a740-42c9-498a-991e-85001dca4e19.jpeg)

![2025-02-16_02-44-46.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d4f8cd7f-5ff6-4530-aa3e-f4e02134f035.jpeg)

この後、ここで提示された情報を見つつ、そこで示されたリンク先の確認も行いつつで、さらに「GitHub Repositories」の機能を見ていこうと思います。
KVM + oVirt環境をさくっと作ってみる(インストール編)

最近はVMwareの後継はどうしようかと悩む日々です。
候補の１つであるKVM + oVirt環境をさくっと作ってみたいと思います。
今回はインストール部分だけになります。
## KVM + oVirtとは？
KVMは仮想基盤になります。正直KVMだけでも仮想基盤としては成り立つのですが、コマンドラインオンリーで構築運用するのは厳しい面もあると思いますのでインターフェイス部分になるoVirtを入れていきます。

## 環境
今回はAlma Linux9.5はインストール済みの環境にKVM + oVirtをインストールします。
インターフェイスは冗長化した方が良いとかストレージは共有ディスクが良いとか考慮するべきものは色々あると思いますが、今回はKVM + oVirtをインストールだけに絞って記載します。

## インストール手順
まずはKVMをインストールします。
```
# dnf -y install qemu-kvm libvirt virt-install
```
以上だけでKVMのインストールは完了です。簡単ですね！

## oVirtのインストール
以下のコマンドでovirt45用のリポジトリを追加します。
```
# dnf install -y centos-release-ovirt45
```
次にパッケージマネージャーのキャッシュを更新します。
```
# dnf clean all
# dnf makecache
```
いよいよoVirtをインストールします。
```
# dnf install -y ovirt-engine
```
ここはちょっと時間がかかりますが、終わるまで待ちます。

## oVirtの設定
oVirtの設定は以下のコマンドで始めますが、長くなりそうなので、次回oVirt設定編に持ち越します。
```
# engine-setup
```
プログラム設計開発に活かせる！ヨガの考え方

本記事はエンジニアの方向けに、プログラム設計開発とヨガの関連性について少しでも興味を持っていただきたく、発信します。

巷に溢れるヨガはフィットネスやエクササイズ的な要素が強いことが多いですが、実はヨガは、単に体を動かすだけの運動ではありません。
ヨガという言葉は、サンスクリット語の「ユジュ（Yuj）」に由来し、「結びつける」「統合する」という意味を持ちます。
心と体、そして周囲とのつながりを深めるための哲学でもあります。この考え方は、エンジニアリングの世界においても非常に重要です。

## プログラム設計開発における「つながる」重要性
エンジニアの仕事は、コードを書くことだけではありません。プログラムの設計や開発には、システムの一貫性、モジュール間の結びつき、そしてユーザー体験の統合が求められます。ヨガの持つ「結びつける」という概念は、エンジニアリングの原則にも応用できます。

1. 自分とのつながり

ヨガでは、呼吸と動きを意識的に結びつけることで、自分の内面に意識を向けます。同じように、エンジニアとしても「自分がどんな価値を提供できるのか」「自分が得意なこと、苦手なことは何か」を理解することが重要です。自己理解が深まると、開発の方向性も明確になり、より効果的なプログラム設計が可能になります。

2. システムの一貫性とモジュールの調和

ヨガの実践では、体の各部位の調和を意識することが大切です。
例えば、現在受講しているヨガのインストラクター講座では、解剖生理学を勉強することもあり、そのような知識も求められます。
同じように、エンジニアリングでも、仕様書を理解することや、システム設計において各モジュールが調和するように設計することが不可欠です。

SOLID原則とヨガのバランス: SOLID原則のように、一つのクラスや関数に役割を明確に持たせることは、ヨガのポーズでバランスを取ることと似ています。効果的なアーサナを行うためには、各一つずつの動作を意識し、体の細部まで活用することが求められます。

アーサナ（姿勢）の協調: ヨガでは、一つのポーズに集中することで、全身のバランスを整えます。プログラム開発においても、各コンポーネントが調和を持って動作するように設計することが求められます。

3. チームとのつながり

ヨガの実践では、周囲のエネルギーを感じ取りながらポーズを取ることが求められます。エンジニアリングにおいても、チームメンバーとコミュニケーションを取りながら作業を進めることが不可欠です。

共鳴の姿勢（サンガ）: ヨガでは「サンガ（Sangha）」と呼ばれるコミュニティの概念があり、仲間と支え合いながら学びを深めることを重視します。エンジニアも、チーム内で情報共有を行い、互いに助け合うことでプロジェクトの質を高めることができます。

4. ユーザーとのつながり

ヨガの根底には「すべてはつながっている」という考えがあります。エンジニアが開発するシステムやアプリケーションは、最終的にはユーザーとつながるためのものです。

ユーザー目線を意識し、使いやすいプロダクトを設計する

ユーザーのフィードバックを受け取り、改善を繰り返す

技術的な視点だけでなく、感情的な側面も考慮する

こうした考え方を持つことで、単なる技術の追求ではなく、人と人をつなぐ開発が可能になります。

つながりを深めるためのヨガ実践
エンジニアがヨガの「つながり」の考え方を取り入れるために、以下のアーサナ（ポーズ）を実践することができます。

ナーディ・ショーダナ（片鼻呼吸法）: 頭をクリアにし、冷静な判断力を養う

ヴリクシャーサナ（木のポーズ）: バランスを取りながら、チームとの協調を意識する

パートナーヨガ: 誰かと一緒にポーズを取ることで、信頼関係を築く

## まとめ
ヨガの「つながる」という概念は、プログラム開発においても重要な学びや発見があります。自分とのつながりを深め、システムを一貫性のあるものにし、チームと協力し、ユーザーと共に成長することで、より良い開発ができるはずです。これからも、ヨガの哲学を取り入れながら、エンジニアとしての可能性を広げていきましょう。

今後、エンジニア向けのヨガワークショップも開催予定です。興味がある方は、ぜひ参加してください！
今後もエンジニア向けのヨガ情報や講座の企画を発信していきますので、ぜひチェックしてください！

X（https://x.com/darupu_tech） のフォローはヨガや個人開発に向けた活動の支援となりますので、よろしければ支援いただけると幸いです！
ヨガの意味とエンジニアに活かせる考え方

こんにちは！私は現在、ヨガインストラクターを目指して学んでいるエンジニアです。長年、デスクワーク中心の生活を送ってきましたが、肩こりやストレスの蓄積を感じる中でヨガに出会いました。ヨガを続けることで、単なる運動以上の深い学びがあり、それがエンジニアの仕事にも活かせることに気づきました。

本記事では、ヨガの本来の意味やエンジニアにとってのメリット、「繋がる」考え方の重要性についてお話しします。

## ヨガとは何か？
ヨガと聞くと、体を動かしてポーズを取るイメージが強いかもしれませんが、実はそれだけではありません。ヨガ（Yoga）という言葉は、サンスクリット語の「ユジュ（Yuj）」から来ており、「繋がる」「結びつける」という意味を持ちます。

この「繋がる」という概念は、私たちの日常や仕事においても重要な要素です。特にエンジニアは、技術だけでなく、人との協力やバランスの取れた働き方を考える必要があります。

## エンジニアに活かせるヨガの考え方
1. 集中力の向上（ダーラナー）
ヨガでは「ダーラナー（集中）」という概念があり、心を一点に集中させる訓練をします。エンジニアの仕事では、長時間コードを書く、バグを修正する、複雑な問題を解決するなど、深い集中力が求められます。

ヨガの瞑想や呼吸法を実践することで、雑念を取り払い、集中力を高めることができます。

2. 柔軟な思考（アパリグラハ）
アパリグラハとは「執着しないこと」。エンジニアリングの世界では、技術の移り変わりが激しく、常に新しい知識を受け入れる姿勢が求められます。過去の方法にこだわるのではなく、変化を受け入れ、適応する力を養うことが大切です。

3. ストレスマネジメント（プラーナヤーマ）
納期やバグ対応など、エンジニアの仕事にはストレスがつきものです。ヨガの「プラーナヤーマ（呼吸法）」を活用すれば、意識的に呼吸を整え、副交感神経を優位にし、リラックスすることができます。

短時間の深呼吸を取り入れるだけで、心が落ち着き、冷静に問題を対処できるようになります。

「繋がる」考えの大切さ
ヨガの本質は「繋がる」ことにあります。これはエンジニアの仕事にも通じるものです。

1. チームとの繋がり
プロジェクトを成功させるためには、チームのコミュニケーションが欠かせません。ヨガでは、呼吸や動作を通じて周囲と調和する感覚を養うことができます。これは、円滑なコミュニケーションや協力関係を築くのに役立ちます。

2. ユーザーとの繋がり
エンジニアは技術を使ってサービスを生み出す仕事ですが、最も大切なのは「誰のために作るのか」という視点です。ヨガでは、自分自身と深く向き合う時間を持つことで、本質的な価値を考える習慣が身につきます。

3. 自分との繋がり
仕事に追われていると、自分の体調や精神状態を後回しにしがちです。ヨガを通じて、体や心の状態を観察する習慣を持つことで、無理をしすぎず、持続可能な働き方ができるようになります。

## 今後の活動と支援について
私は現在、エンジニア向けのヨガ講座を企画中で、今後もヨガの哲学を交えた実践の場や完全にヨガ未経験のエンジニアが実践できる講座の場を広める活動を続けていきたいと考えています。

もし、ヨガに興味がある方や、エンジニア向けヨガの活動に関心を持ってくださる方がいれば、ぜひ一緒に学び、実践していきましょう！

ヨガを通じて、より良い働き方と生き方を実現していくために、これからも情報を発信していきますので、どうぞよろしくお願いします！

X（https://x.com/darupu_tech） のフォローはヨガや個人開発に向けた活動の支援となりますので、よろしければ支援いただけると幸いです！
エンジニアがヨガを取り入れると生活の質が向上する理由　姿勢改善＆集中力アップ！

私はこれまで１０年間ほどエンジニアをしており、肩こりや腰痛から整体にお世話になることが多く、２〜３年前から趣味でヨガに取り組み始めました。
好きが高じてこの度ヨガスクールに通い、ヨガインストラクターを目指しています。
そこで皆さんにもヨガを取り入れることでのメリットが非常に大きいことをお伝えしたいと思い、RYT200（全米ヨガアライアンス認定のヨガ資格）を取得した後、エンジニア向けのヨガ講座を開くことを企画しています。

通学を始めてもうすぐ1ヶ月になりますが、ヨガを実践することで肩こりや体の硬さが驚くほど改善され、毎日がとても快適になりました。この素晴らしさを、ぜひ多くのエンジニアの皆さんにも知ってもらいたいと思い、今回の記事を書いています。

## エンジニアこそヨガを取り入れるべき理由
エンジニアの仕事は、長時間のデスクワークが基本。集中力が求められる一方で、姿勢の崩れや運動不足による健康問題がつきものです。
そんなエンジニアこそ、ヨガを取り入れることで次のようなメリットを得られます。

1. 姿勢改善による健康効果
長時間のPC作業はエンジニアと切っても切り離せないもの。
これによって猫背や巻き肩が進み、肩こりや腰痛を引き起こすことがあります。ヨガのポーズを実践することで、正しい姿勢を意識しやすくなり、体の負担を軽減できます。

2. 肩こり・腰痛の改善
長時間の作業で肩や首がガチガチになっていませんか？ ヨガを行うことで、肩や背中の緊張をほぐし、血流を促進できます。これにより、慢性的な肩こりや腰痛が和らぎます。

3. 集中力・生産性の向上と疲労回復
ヨガでは、深い呼吸を意識しながらポーズをとるため、心が落ち着き、頭がクリアになります。バランス感覚を養うと同時に、集中力を高める効果があります。
同時に、適度な疲労感から深い眠りに入ることができるようになり、不眠症の改善にも効果があります。
実際睡眠の質が改善し、以前は睡眠薬を飲んでいたこともありましたが、現在ではスムーズに入眠できると同時に熟睡できるようになり、慢性的な疲労感がなくなりました。

4. ストレス軽減＆メンタルケア
エンジニアの仕事はプレッシャーとの戦い。締め切りやバグ対応など、ストレスが多い環境にさらされることも少なくありません。ヨガの瞑想を実践することで、リラックスし、ストレスをコントロールできるようになります。

5. 柔軟性の向上で疲れにくい体に
「体が硬いからヨガは無理！」と思っている方も多いですが、むしろヨガを始めることで徐々に柔軟性が高まり、疲れにくい体になります。股関節や背骨の可動域が広がり、姿勢も自然と整っていきます。

## エンジニア向けヨガ講座を企画中！
私は、ヨガスクールで学んだ知識を活かし、エンジニア向けのヨガ講座を開く予定です。内容としては、

短時間でできるヨガアーサナ（デスクワークの合間にできるポーズ）

集中力を高める呼吸法（仕事のパフォーマンス向上）

肩こり・腰痛・疲労改善に効果のあるアーサナ などを考えています。

今後、講座の詳細についても発信していくので、興味のある方はぜひチェックしてください！

## まとめ
エンジニアこそ、ヨガを取り入れることで姿勢改善、肩こりや腰痛の解消、集中力向上、ストレス軽減といった効果を得ることができます。私自身もヨガを始めてから体の不調が改善し、日々の生活がとても快適になりました。

これからヨガを取り入れたい方、エンジニア向けヨガ講座に興味のある方は、ぜひ一緒にヨガを楽しみましょう！

今後の情報発信もお楽しみに！
X（https://x.com/darupu_tech） のフォローはヨガや個人開発に向けた活動の支援となりますので、よろしければ支援いただけると幸いです！
【イベントレポート】JAWS-UG東京 ランチタイムLT会 #20 #jawsug_tokyo

いつも記事を読んでいただきありがとうございます！
モブエンジニア（[@mob-engineer](https://qiita.com/mob_engineer))です！

今回は2025.02.20（木）に開催した**JAWS-UG東京 ランチタイムLT会 #20**へ参加したので、アウトプットとしてイベントレポートを執筆しました。

初学者でもサクッと読めるように平易な表現で執筆しておりますので、お気軽に読んでいただければ幸いです。

:::note info
誤字脱字、わかりづらい表現に関しては極力なくすように心がけていますが、リアルタイムで執筆しているため、誤字脱字があるかもしれません。
:::

# 目次
- ETLサービス AWS Glue DataBrewを使ってみた
- ネットワーク初心者がTransitGatewayを使ってみた感想
- CloudWatchメトリクス極めてみた
- Terragrunt使ってみた
- まとめ

## 	ETLサービス AWS Glue DataBrewを使ってみた

#### 参考サイト

https://aws.amazon.com/jp/glue/features/databrew/

- 自己紹介
    - PwCコンサルティング所属の方
    - AWS歴に関しては約1年の方
    - データ分析業務を行ったがコードをバリバリ書けるわけではない
- AWS Glue DataBrew
    - データ分析時のETLをzっ甲できるサービス
    - ノーコードで利用可能
    - プロファイリング機能もあるので品質向上にもつながる
    - JOB単位で管理する
- 気づいたこと
    - ユーザーインターフェースの直観性
        - あまりデータ分析に携わっていない方でもすんなり利用できる
    - レシピ作成時のバージョン管理
        - ガバナンス視点でもありがたい機能
- 類似サービス（Glue Studio）との違い
    - Glue DataBrew：JSON形式で出力される
    - Glue Studio：Sparkなどのコードで出力される
        - エンジニアであればGlue Studioがベター

## 	ネットワーク初心者がTransitGatewayを使ってみた感想

#### 参考サイト

https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/what-is-transit-gateway.html

https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/how-transit-gateways-work.html

https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/network/introduction.html

- 自己紹介
    - クラウドセントリック所属の方
    - AWS資格全冠の方
    - 案件でTrangit Gatewayを触る機会があったため
- Trangit Gateway
    - 同じAZ同士であればルーティングを設定してあげるだけで設定可能
    - 違うAZであれば、アプライアンスモードを有効化する必要がある
- アプライアンスモード
    - フローハッシュアルゴリズムに基づく挙動
    - 有効化しないと、行きと帰りで違うENIを利用するためドロップしまう
- 検証
    - Reachability Analyzerを利用
        - 一方向しか見ないため、Pingの方がいい
    - Default Associate
        - アタッチメントとルートテーブルを関連付けさせる
    - Route Propagete
        - 複数VPNのルーティングをまとめるときに便利

## CloudWatchメトリクス極めてみた

#### 参考サイト

https://qiita.com/Kamibayashi_Mai/items/c2dd000635c49d61326c

- 要点
    - CloudWatchのメトリクスに焦点を当てて説明
- 自己紹介
    - ARI所属の方
    - 新卒3年目のJrチャンピオンの方
- CloudWatchあれこれ
    - メトリクス表示期間：
        - 絶対値：期間を示すイメージ
        - 相対値：現在からの範囲を示すイメージ
    - 粒度：
        - データの取得期間を示している
        - デフォルトだと5分の解像度
        - １秒単位を取得するのであればエージェントインストールが必要
    - ウィジェット
        - グラフ：いわゆる推移を示したもの
        - 数字：稼働台数などが分かりやすい
- まとめ
    - 可視化するためのツールが多数用意されいいる
    - 使いこなせれば最強

## Terragrunt使ってみた

#### 登壇資料

https://speakerdeck.com/kohekohe/lt-terragruntdeawshuan-jing-wogou-zhu-sitemita-20250220

#### 参考サイト

https://terragrunt.gruntwork.io/

https://developer.hashicorp.com/terraform/cdktf

https://zenn.dev/ring_belle/articles/terragrunt-start

- 自己紹介
    - e-dash所属の方
    - 現在はSRE・EMを行っている方
    - 三井物産発のスタートアップ企業
- Terragrunt
    - Terraformのラッパーツール
    - より便利するためのツール
- 複数環境の設定ファイル管理
    - Terraformであれば環境ごとにリソースファイル（TFファイル）を配置する必要がある
    - Terragruntを利用すればモジュールごとにhcl設定ファイルを用意すればいい
        - ほぼコピペで対応可能
- モジュール新規追加時
    - Terraformだと、都度Terraform initを実行しなくてはいけない
    - Terragruntであればいい感じにリソース追加対応もしてくれる

## まとめ

今回のLT会を通じてTerragruntの存在を知ることができたため、キャッチアップ＋アウトプットブログを執筆したいと思いました。（個人的に業務で利用できそうなイメージだったので）

また、CloudWatchに関しても意外と知らない機能があるといった発見がありましたので、非常に有意義な時間を過ごせたと思いました。


最後まで、記事をお読みいただきありがとうございました！
scikit-learnの「カリフォルニア住宅価格」で操作変数法を練習してみた

# はじめに
今回は、「ChatGPTにハンズオンを作らせてみた」の第5弾で、**操作変数法**を勉強しました。

第4弾はこちら↓

https://qiita.com/UKI_datascience/items/72280588d89665a7282e

---

# 操作変数法
「説明変数（$X$）には影響を与えるが、目的変数（$Y$）には直接影響しない」ような操作変数（$Z$）を使って$X$を推定し、その推定値を用いて$Y$を回帰することで、$X$の真の因果効果を求めるための手法。回帰分析の応用手法でありながら、因果推論の文脈でも用いられる。

---

### 使用データ
scikit-learnのデータセットの1つである、カリフォルニアの住宅価格データを使用しました。その中でも、今回は次の3つの変数をピックアップして使用しました。

| 変数  | 説明    |
|------|---------|
| **MedHouseVal** | 住宅価格（目的変数）  |
| **AveRooms** | 平均部屋数（説明変数）  |
| **MedInc** | 世帯の平均年収（交絡因子）  |
| **Population** | 人口密度（操作変数）  |

- 目的変数：説明変数の影響を受ける変数
- 説明変数：目的変数を説明するための変数
- 交絡因子：説明変数と目的変数の両方に影響を与える変数（操作変数法の計算では使わない）
- 操作変数：説明変数には影響を与えるが、目的変数には直接影響しない変数

---

### やること
1. 目的変数（$Y$）と説明変数（$X$）を用いて、通常の回帰分析を実装
2. 操作変数（$Z$）を使って、説明変数（$X$）を推定する回帰分析を実装
3. 2.で得られた推定値（$\hat{X}$）を使い、目的変数（$Y$）に対する回帰を実装
4. 1.で得た回帰係数と3.で得た回帰係数を比較して、因果関係を考察

---

### 使用コード・分析結果
```python
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
from linearmodels.iv import IV2SLS
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import fetch_california_housing
```

```python
# データの取得
california = fetch_california_housing(as_frame=True)
df = california.frame
```

---
目的変数（```MedHouseVal```）と説明変数（```AveRooms```）を用いて、通常の回帰分析を実装します。

```python
# OLS回帰 (部屋数 -> 住宅価格)
ols_model = smf.ols("MedHouseVal ~ AveRooms", data=df).fit()
print(ols_model.summary())
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457746/fc6690ea-0f60-48d5-83ab-ee681ecb308c.png)

- ```AveRooms```の回帰係数0.0709より、「平均部屋数が1部屋増えると、住宅価格が**0.0709**（約7.1%）上昇する」ことを意味する。
- p値が0.000（有意水準1%以下）であるため、```AveRooms```の影響は統計的に有意と判断できる。
- 95%信頼区間は、```[0.065, 0.077]```であり、効果が正であることを示唆している。
- ```R²=0.023```より、```AveRooms```だけでは住宅価格の変動の **約2.3%** しか説明できない。
- モデル全体の説明力が低いため、交絡因子（```MedInc```など）の影響が強いと考えられる。

---
操作変数（```Population```）を用いて、説明変数（```AveRooms```）の予測値を得ます。

```python
first_stage = smf.ols("AveRooms ~ Population", data=df).fit()
df["AveRooms_hat"] = first_stage.predict(df["Population"])
```

---
先ほど得た予測値（```AveRooms_hat```）と目的変数（```MedHouseVal```）を用いて、回帰分析を実装します。

```python
second_stage = smf.ols("MedHouseVal ~ AveRooms_hat", data=df).fit()
print(second_stage.summary())
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457746/c6c792dd-1ab4-4b80-8d38-cdd593845a64.png)

- ```AveRooms_hat```の回帰係数0.1592より、「平均部屋数が1部屋増えると、住宅価格が**0.1592**上昇する」と推定されたことを意味する。
- p値が0.000（有意水準1%以下）であるため、```AveRooms_hat```の影響は統計的に有意と判断できる。
- 95%信頼区間は、```[0.071, 0.247]```であり、効果が正であることを示唆している。

---

```python
print(f"OLSの回帰係数 (AveRooms -> MedHouseVal): {ols_model.params['AveRooms']}")
print(f"IVの回帰係数 (AveRooms -> MedHouseVal): {iv_model.params['AveRooms']}")
```

```
OLSの回帰係数 (AveRooms -> MedHouseVal): 0.07086879328040531
IVの回帰係数 (AveRooms -> MedHouseVal): 0.15920474604229184
```

- OLS（通常の回帰分析）の係数と比べて、IV（操作変数法）の係数が約2.2倍の値になっている。
- OLSで過小評価されていた```AveRooms```の因果効果が、操作変数法によって、正しく推定された可能性がある。
- ただ、ともに決定係数の値が小さいため、住宅価格を決める要因としては```AveRooms```は

---

# おわりに
今回の操作変数法は、これまでの因果推論の手法とは考え方が少し違ったので、理論の理解が難しかったです。
Power Apps おしゃれなレイアウトを作成！！ボタンコントロールや画像の追加について

# はじめに
Power Apps はプログラミングの知識が無くてもローコードで誰でも簡単に業務アプリを作成できるツールです。
しかし、簡単に作成できる一方で複雑なカスタマイズを行うにはかなりの技術や知識が必要となり、レイアウト面でも簡素化しやすくなってしまいがちなのが難点です。
今回は少しでも華やかなアプリが作成できるよう、レイアウト面において画像を追加する方法やボタンコントロールのビジュアルの変化方法について記載します。

## Power Appsのアイコン一例

Power Appsにはデフォルトでアイコンがありますが、シンプルなアイコンが多いのでオシャレな画面を作成したい人にとっては少し味気なく感じてしまうかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/f4fb7988-ac3f-d6b0-ed3e-5ae85bd78bfd.png)

アイコンが物足りないと感じる人は自身で画像を追加して好きなデザインを組み込みましょう！
著作権に引っかかる可能性がありますので、自作のアイコンであったりフリー素材のアイコンを使用するようにしましょう。
素材はダウンロード可能なサイトがあります。下記は一部ですが参考にしてみてください。

**【いらすとや】**

https://www.irasutoya.com/

**【ソコスト】**

https://soco-st.com/

+ アイコンや画像を用意できたら Power Apps に追加します。
サイドバーから `メディア` を選択して `「+メディアの追加」` → `「↑アップロード」` をクリックし、保存してある画像を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/843fef90-f952-445f-8f0c-8c8949901c46.png)

今回は `クラウド.png` `音楽フォルダ.png` を追加しました。
これをキャンバスアプリの画面にドラッグアンドドロップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/a99fcd21-6f02-4b76-84ac-c93cce94846c.png)

そうするとアプリの画面内に追加した画像が張り出されました。`画像` コントロールに設定されています。こちらをアイコンに使用したい場合は `OnSelect` に数式を入力すると使用できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/d7e744da-e9c7-4b1a-ab1d-45254d710442.png)


## ボタンのデザインを工夫してみる
Power Apps のボタンコントロールを置くとこのようにデフォルトでは四角形となります。
こちらを設定を変更することで以下のように変更させることも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/12f98689-8fbf-43b0-82f7-74739bd10c9a.png)


### 各設定方法
+ `RadiusBottomLeft` `RadiusBottomRight` `RadiusTopLeft` `RadiusTopRight`...すべて30
角の丸みを設定します。数字が大きければ多いほど丸みが出ます。

+ `Fill` ...RGBA(255, 255, 255, 1)
背景色を白にします。

+ `Color` `BorderColor` ...RGBA(240, 98, 15, 1)
文字色と罫線を同じ色に設定します。こちらは好きな色に変更していただいて結構です。

+ `FocusedBorderThickness` ... 10
罫線の太さです。こちらも好きな数字で設定していただいて結構です。

+ `PressedBorderColor` `PressedFill` ...ColorFade(Self.Color, -30%)
ボタンを押しているときの罫線の色と背景色の設定です。こちらは文字色`Color`に対して濃淡を設定させています。数値は好きに変更してもらって大丈夫です。

+ `FocusedBorderColor` `HoverFill` ...ColorFade(Self.Color, -10%)
ボタンにカーソルを合わせた時の罫線の色と背景色の設定です。こちらも文字色`Color`に対して濃淡を設定させています。数値は好きに変更してもらって大丈夫です。

上記のようにボタンコントロールを設定すると見た目がグッと変化します！

## まとめ
上記のレイアウト変更例は一部ですがいかがでしたでしょうか？？
デフォルトでのレイアウトには限界がありますが少し工夫するとかなり見た目に変化が出ると思います！！
いろんな小技を駆使して唯一無二のキャンバスアプリを作成してみてください！
Visual Studio Code が Python を見つけてくれなくなった。

ある日突然 VSCode が Python を見つけてくれなくなった。原因はいまだによくわからないがやった事を記録する。現象:

* Python が見つからないエラーが出る。
* 開発ディレクトリの `.venv/bin/python` を指定してもわけのわからないエラーが出る。(もう直ったので正確なエラーがわからない)
* ワークスペースの `settings.json` に以下のように書いてみたがエラーが出る。
    * `  "python.defaultInterpreterPath": "myproject/.venv/bin/python",`
* うろ覚えだが `~/.rye/shims/rye` を実行しようとしてエラーが出ている。
    * python コマンド (`.rye/shims/python`) は `~/.rye/shims/rye` へのリンクになっている。

やった事

* 多分 `> Python: Set Interpreter` で `~/.local/share/uv/python/cpython-3.11.6-macos-aarch64-none/bin/python` を指定したような気がする。
* VSCode を再起動したような気がする。
* `> Python: Set Interpreter で `myproject/.venv/bin/python` が選べるようになった。

想像

* [Python environments in VS Code](https://code.visualstudio.com/docs/python/environments) によれば `python.defaultInterpreterPath` で Python コマンドが選ばれるはワークスペースを最初に開く時だけ、次からは選んだ Python コマンドが選ばれる。
* なので、`python.defaultInterpreterPath` を設定しても意味がない。
* もしかして python のパス設定するには python コマンドの実行が必要で、なぜか現在選択中の Python コマンドが壊れたため設定できなくなったのでは?
* 確実に動く python コマンドを設定したあと VSCode を再起動する事で python コマンドの選択が可能になったのかも。
Databricksのマニュアルサイトがリニューアルされました！

先日、[マニュアルサイト](https://docs.databricks.com/aws/ja/)がリニューアルされました。

**Before**
![Screenshot 2025-02-20 at 11.44.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b76ca9ee-ad2f-46e9-bce5-a3e64a67f59c.png)

**After**
![Screenshot 2025-02-20 at 11.46.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/abefcc71-1f50-440b-8379-e03741a7bb61.png)

こちらでは、変化点にフォーカスしてマニュアルサイトをウォークスルーします。

# ナビゲーションの改善

以前は左のナビゲーションをクリックするとページ全体がリフレッシュされていました。今回のリニューアルで、ナビゲーションをクリックしても右のコンテンツのみが表示されるようになり、アクセシビリティが改善されました。

![Screenshot 2025-02-20 at 12.21.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/33520ade-1529-4297-a59f-eab860e9adc0.png)

また、左下の **<<** をクリックすることで、ナビゲーションを非表示にすることができます。

![Screenshot 2025-02-20 at 11.46.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5adb3b81-3b36-45ea-bc67-3b3cf3ba8ac2.png)
![Screenshot 2025-02-20 at 11.46.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/236c476b-5791-4a99-8dcb-2b7871d45d5e.png)


# ページ内セクションの一覧性の改善

右側にページに含まれるセクションが固定して表示されるようになったので、どのセクションを表示しているのかをより確認しやすくなりました。

![Screenshot 2025-02-20 at 12.22.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/19b47dec-c805-4ac0-889d-7578b3a0df8e.png)

# 頻繁にアクセスする項目へのリンクをページ上部に移動

ユーザーガイドや開発者向けマニュアル、リファレンスなどの項目が画面上部にまとめられました。

![Screenshot 2025-02-20 at 12.23.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/10eeecc8-e234-46a1-88b7-d5e5b85db89d.png)

# ダークモード

ダークモードがサポートされました！

![Screenshot 2025-02-20 at 11.46.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4d29a537-7b8c-4bac-815b-cbdc1168604f.png)
![Screenshot 2025-02-20 at 11.47.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/50c76913-28cb-4ee2-af62-fb1586671d23.png)

是非ご活用ください

あと、(私を含む)日本のDatabricksエンジニアが翻訳をチェックしていますので、引き続き品質改善してまいります。

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
メール文章のみ送りたい

<h3>お決まり文章</h3>

 ```ruby:qiita.rb
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
```

<br>
<h3>注目ポイントは、def関数の中身</h3>

 ```ruby:メール設定
 def send_email_with_pdfs(sender_email, recipient_email, subject, body, app_password):
    msg = MIMEMultipart()  # ← msg を MIMEMultipart() で作成
    msg['From'] = sender_email
    msg['To'] = recipient_email
    msg['Subject'] = subject

    msg.attach(MIMEText(body, 'plain'))

    try:
        with smtplib.SMTP('smtp.gmail.com', 587) as server:
            server.starttls()  # セキュア接続を開始
            server.login(sender_email, app_password)  
            
            server.sendmail(sender_email, recipient_email, msg.as_string())
            print('成功!')
    except Exception as e:
        print(f"メール送れんかったよ: {e}")
```


<br>
<h3>大事ポイント：def関数の中に、一番最初にいるもん</h3>

 ```ruby:qiita.rb
    msg = MIMEMultipart() 
```
ubuntu server 22.04運用記録

## ご注意
### この文章は完全に私的なログです！
#### 読んでもらうための記事ではないので全体的に説明不足です
それでもいいよって方はゆっくりしていってね
※この記事ではVMwareで再現したスクショを載せてます

## インストール時のトラブル
ネットワークの設定で、この画面でManualで左のように設定してもなぜかゲートウェイとDNSの設定が右のように消されてしまう？
これが仕様なのかバグなのかは知りませんが、でもこのままではインターネットに接続できないのは事実。
<img width=49% src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719521/feba9443-f3a7-498a-a911-ee07ccd1c92b.png> <img width=49% src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719521/cc1b5f82-728c-4b4c-9c25-c989e02b56da.png>
このままではインストール作業に支障が出る(？)のでコマンドでムリヤリ設定してみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719521/2c29f931-19f0-4595-b5b1-d51c8a0a03fa.png)
シェルで
```sh
nano /etc/netplan/00-installer-config.yaml
```
←Before After→  (ens33 ってかいてるのはたぶんvmwareのアレ。実機ならenp1s0とか？)
<img width=49% src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719521/2c3a9360-ed84-42d4-868f-fe6920fa4827.png> <img width=49% src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719521/8685611a-c229-4d06-92f0-9825810fc689.png>
でCtrl+O、Enter、Ctrl+X
```sh
netplan apply

exit
```
よくわからんけどこのままインストール完了を迎える。いざ起動してみるとやっぱりネットにつながらない
ということで↑の作業は意味なかったかも

## ネットワークをなんとかする
ということで似たような作業をもっかいやります
```sh
sudo nano /etc/cloud/cloud.cfg.d/90-installer-network.cfg
```
で、
```
routes:
- to: default
  via: 192.168.11.1
```
を書き足しておきます。あと`search: []`とかいうのはいらないと思うんで消しちゃいます。で、
```sh
sudo netplan apply
```
なんか知らんけど`WARNING:root:Cannot call Open vSwitch:`
みたいなのが出ますがよくわからないので無視しておきます
```sh
curl google.com
```
してそれっぽくなってればOKです。(再起動後にも試してください)
（個人メモ）パスワード認証をかけたRedisをDockerで動かす手順

# はじめに
パスワード認証をかけたRedisをDockerで動かす手順です。
Dockerfileとdocker-compose.yaml等を作成して、Redisを動かします。
docker-compose.yamlを用意しておけば、どのコンテナも`docker-compose up`で起動できるので、便利だと思ってます。

# 前提環境（動作確認環境）

- Mac OS
- Rancher Desktop

# セットアップ

- 作業用ディレクトリを作成
```bash
$ mkdir redis
```

- Dockerfileを作成
```bash
$ vi Dockerfile
```

以下の内容を記載

```docker
FROM redis:latest
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]
```

- docker-compose.yamlを作成
```bash
$ vi docker-compose.yaml
```

以下の内容を記載

```yaml
version: '3.8'
services:
 redis:
  image: redis:latest
  container_name: my_redis
  restart: always
  ports:
   - "6379:6379"
  volumes:
   - ./redis_data:/data
   - ./redis.conf:/usr/local/etc/redis/redis.conf
  command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
```

- redis.confを作成
```bash
$vi redis.conf
```
以下の内容を記載
```
user myuser on >mypassword allcommands allkeys
```
→この場合、`myuser`/`mypassword`が認証情報

ここまでの手順で3個ファイルが作成されていることを確認してください

```bash
$ tree
.
├── Dockerfile
├── docker-compose.yaml
└── redis.conf
```


# Redis起動

```bash
$ docker-compose up
```

ポート6379でredisが起動します


# Redis操作

- コンテナにログイン（ホスト側での操作）

```bash
$ docker exec -it my_redis /bin/bash
```

→このコマンドでコンテナ内部にログインします


- redisにログイン（コンテナ内部での操作）

```
$ redis-cli
```

実行例

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191958/77c85d91-581e-4da6-b179-d3efc884f348.png)
NextcloudでGoogleのSAMLログインを構成した時の話

# 筆者について

```
name → Koki Teramoto
age → 18
language → ja_JP, en_US
```

# 本編

今回は題名にある通り、急にぶっ飛んだ話題ですが、何卒ご了承ください。さて、実は今Proxmoxでサーバーを立てているのですが、そのProxmoxにNextcloudのVMを立てて、Cloudflareでアクセスできるようにしました。そして、そのサーバーにCloud Identity経由でログインしましたので、その軌跡を残しておきます。

## 前提

前提条件は以下の通りです。

- Nextcloudが構築されていて、Cloudflareで自分のドメインで公開されている（example.comとします）
- Cloud Identityの設定が終わっている
- NextcloudにSAMLオプションのインストールが終わっている

## 設定（Nextcloud）

1. 一般設定

`username`をUIDにマップするようにします。

![Screenshot 2025-02-20 at 10.59.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583428/af539700-180e-4b5c-b57a-cb846b7d35b6.png)

2. サービスプロバイダデータ

ここですね、基本的には一般的なSAMLの設定と一緒です。ただし、一箇所気をつけていただきたいところが、“URL Location of the IdP where the SP will send the SLO Request”ですね。ここを設定しないとログアウトボタンが表示されなくします。なので、ここにログアウトURLを設定する必要があります。僕は、ログインページに飛ぶようにしていますので`https://nextcloud.tba-lab.tech/index.php/apps/user_saml/saml/selectUserBackEnd?redirectUrl=`に設定しました。

![Screenshot 2025-02-20 at 11.01.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583428/338038a1-9b57-41ff-8894-a1d18398bddd.png)　

## 設定（Cloud Identity/Google Workspace）

1. URL

URLはそれぞれACSは`https://example.com/index.php/apps/user_saml/saml/acs`、エントリーIDは`https://example.com/index.php/apps/user_saml/saml/metadata`に設定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583428/df7defa8-1e6f-4110-83b4-6a162774f032.png)

2. マッピング

マッピングは次のように設定ください。また、ここに関しては適宜変更していただいたほうがいいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583428/a4ae57dd-426a-47ba-98b0-85394d2e0492.png)

# 最後に

SAMLの設定は奥が深いですね！今後ともNextcloudとともに研究していきたいと思います。
Mujoco (python)レンダリングサイズによるシミュレーション時間の検証

# はじめに
レンダリングの有無、画像サイズによってのシミュレーション時間の変化が知りたい
# 環境
mujoco　python
```
Name: mujoco
Version: 3.1.4
```
パソコン
```
Intel(R) Core(TM) i7-10875H CPU @ 2.30GHz
NVIDIA Corporation TU106 [GeForce RTX 2060]
```
# プログラム
レンダリングのオンオフ、レンダリングサイズを切り替えられるように作成

```python
import mujoco
import cv2

TOTAL_TIME = 3.0  # (seconds)
FRAMERATE = 20.0  # (Hz)
IS_RENDERING = True # レンダリングを行なうかどうか
WIDTH = 96
HEIGHT = 96

def show_image(img):
    cv2.imshow('Image', img)
    key = cv2.waitKey(0)
    cv2.destroyAllWindows()

def show_video(frames, fps):
    print(f"Frame size : {len(frames)}, fps : {fps}")
    for img in frames:
        cv2.imshow('Video', img)
        key = cv2.waitKey(int(1.0/fps*1000))

    cv2.destroyAllWindows()

xml = """
<mujoco>

  <worldbody>
    <light name="top" pos="0 0 1"/>
    <body name="box_and_sphere" euler="0 0 -30">
      <joint name="swing" type="hinge" axis="1 -1 0" pos="-.2 -.2 -.2"/>
      <geom name="red_box" type="box" size=".2 .2 .2" rgba="1 0 0 1"/>
      <geom name="green_sphere" pos=".2 .2 .2" size=".1" rgba="0 1 0 1"/>
    </body>
  </worldbody>

  <visual>
    <global offwidth="2000" offheight="2000"/>
  </visual>
</mujoco>
"""

model = mujoco.MjModel.from_xml_string(xml)
data = mujoco.MjData(model)
renderer = mujoco.Renderer(model)

print("Time step", model.opt.timestep)

timestep = model.opt.timestep
total_steps = TOTAL_TIME/timestep
skip_frames = 1.0/FRAMERATE/timestep
if skip_frames < 1:
   print("Too fast framerate")
   exit()
print("Durattion", TOTAL_TIME)
print("Framerate", FRAMERATE)
print("Total steps", total_steps)
print("Skip frames", skip_frames)

frames = []
mujoco.mj_resetData(model, data)

count = 0
import time
print("Sim start")
start_time = time.perf_counter()
while count < total_steps:
  count += 1
  mujoco.mj_step(model, data)

  if IS_RENDERING:
    if count%int(skip_frames) == 0:
        with mujoco.Renderer(model, HEIGHT, WIDTH) as r:
            r.update_scene(data)
            pixels = r.render()
            frames.append(pixels)
print("Sim stop", time.perf_counter() - start_time)

show_video(frames, fps=60)

```
# 実験
処理時間は実行毎に少し変動あり

設定１
```
TOTAL_TIME = 3.0  # (seconds)
FRAMERATE = 20.0  # (Hz)
IS_RENDERING = True
WIDTH = 96
HEIGHT = 96

Sim stop 4.019544602999304
```

設定２
```
TOTAL_TIME = 3.0  # (seconds)
FRAMERATE = 20.0  # (Hz)
IS_RENDERING = True
WIDTH = 640
HEIGHT = 480

Sim stop 3.9852752740007418
```

設定３
```
TOTAL_TIME = 3.0  # (seconds)
FRAMERATE = 20.0  # (Hz)
IS_RENDERING = True
WIDTH = 2000
HEIGHT = 2000

Sim stop 5.18554060400038
```

設定４
```
TOTAL_TIME = 3.0  # (seconds)
FRAMERATE = 20.0  # (Hz)
IS_RENDERING = False

Sim stop 0.002062821000436088
```

# 結論
レンダリングサイズの変更では大きく変化しない。
レンダリングの有無により100倍近く早くなる。

センサ系についてもためしてみたい
検証ツール　copy機能メモ

コピーする際に出てくる選択肢の意味をAIに来てみたのでメモします


Copy Element: 選択されたHTML要素をクリップボードにコピーします。要素とその子要素全体がコピーされます。

Copy OuterHTML: 選択された要素の外側のHTMLをコピーします。つまり、開きタグ、内容、および閉じタグが含まれます。

Copy InnerHTML: 選択された要素の内部のHTMLをコピーします。つまり、要素の開きタグと閉じタグの間に含まれる内容がコピーされます。

Copy Selector: 選択された要素のCSSセレクタをコピーします。これにより、その要素を特定するためのCSSパスが得られます。

Copy Styles: 選択された要素のインラインスタイル（もしあれば）をコピーします。

Copy XPath: 選択された要素のXPathをコピーします。これはXMLドキュメント内の特定の場所を示すパス表現です。

Copy JS Path: 選択された要素をJavaScriptでアクセスするためのパスをコピーします。
[Sharepoint] リストのフォームをセクション分けする

参照リンク：
https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/list-form-configuration

リストの任意のレコードを選択し、フォームを開く、
右上の「フォームの編集」⇒「レイアウトの構成」を選択する。

![{B812AF6D-6BF4-4491-BE99-8CA5686AAC7B}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159211/544bd85c-2ba2-456e-b3d5-14464d524501.png)

書式の適用先をクリックして、本文を選ぶ

![{E046BEB2-15E3-4EC0-BCAD-016B5D514578}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159211/3ff7c107-414c-4d0a-9b7d-bd71f3db0107.png)

参照先リンクの内容を元に
必要に応じてセクションを追加し、カラムを配置する。

基本構文：
```JSON
{
  "sections": [
    {
      //give a display name for the section
      "displayname": "",
      "fields": [
        //reference your fields here using their display name
        "Title"
      ]
    },
    {
      //give a display name for the section
      "displayname": "",
      "fields": [
        //reference your fields here using their display name
      ]
    }
  ]
}
```
※セクション内で指定した列が1行に並んで表示される。
※displaynameを省略するとセクション名がないので、複数セクションを1セッションぽっく見せることができる。
※カラムの表示順番は「リストの設定」の「列の順序」で指定する。

![{78BC8BD2-BBCE-487D-AD0D-EC40024D81D9}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159211/849124aa-a4cf-4e7f-8dd6-a2c81027f4ec.png)


こんなイメージになりますよ（かなり適当に作った）：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159211/9dc6877d-d914-4d35-934a-95f6e69a7665.png)
個人的備忘録：GitHub Actions のワークフローを CI/CD の観点から分析し、体系的にまとめてみた

## はじめに
CI/CD（Continuous Integration / Continuous Deployment or Delivery）は、現代のソフトウェア開発において重要なプロセスです。

今回は、以下のGitHub ActionsのワークフローがCI（継続的インテグレーション）なのか、それともCD（継続的デプロイ/継続的デリバリー）なのかを分析します。

個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。

## 対象のGitHub Actionsワークフロー

以下のワークフローは `main` ブランチへの `Go` ファイルの変更時にトリガーされ、Dockerイメージをビルドして Amazon ECR にプッシュするものです。

```yaml
name: Push to ECR

on:
  push:
    branches:
      - main
    paths:
      - '**/*.go' # Goファイルに変更があった場合のみ実行

jobs:
  build-and-push:
    runs-on: ubuntu-latest

    steps:
      # リポジトリのクローン
      - name: Checkout code
        uses: actions/checkout@v3

      # AWS CLI のセットアップ
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v3
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      # Dockerログイン
      - name: Log in to Amazon ECR
        run: |
          aws ecr get-login-password --region ${{ secrets.AWS_REGION }} \
            | docker login --username AWS --password-stdin \
              $(aws sts get-caller-identity --query 'Account' --output text).dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com

      # Dockerイメージのビルド
      - name: Build Docker image
        run: |
          docker build -t ${{ secrets.ECR_REPOSITORY }}:${{ secrets.IMAGE_TAG }} -f Dockerfile.prod .

      # Dockerイメージのタグ付け
      - name: Tag Docker image
        run: |
          docker tag ${{ secrets.ECR_REPOSITORY }}:${{ secrets.IMAGE_TAG }} \
          $(aws sts get-caller-identity --query 'Account' --output text).dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/${{ secrets.ECR_REPOSITORY }}:${{ secrets.IMAGE_TAG }}

      # Dockerイメージのプッシュ
      - name: Push Docker image to Amazon ECR
        run: |
          docker push \
          $(aws sts get-caller-identity --query 'Account' --output text).dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/${{ secrets.ECR_REPOSITORY }}:${{ secrets.IMAGE_TAG }}
```

## CI/CDのどちらに該当するのか？

### CI（継続的インテグレーション）とは？
CIは、コードの変更を自動でテスト・ビルドし、品質を担保するプロセスを指します。一般的なCIのワークフローには以下のステップが含まれます。
- **コードの静的解析**（例：Lintチェック）
- **ユニットテストの実行**
- **ビルドの確認**

### CD（継続的デリバリー/継続的デプロイ）とは？
CDは、ビルド済みのアプリケーションを本番または準本番環境へ継続的にデプロイするプロセスです。
- **継続的デリバリー（Continuous Delivery）**: 手動承認を経てデプロイ
- **継続的デプロイメント（Continuous Deployment）**: 自動でデプロイ

### 今回のワークフローの分析
上記のワークフローでは、以下の処理を行っています。
- **AWS ECR へのDockerイメージのビルド＆プッシュ**
  - `docker build`
  - `docker push`
- **CIに必要なテストや静的解析の処理がない**

このことから、**このワークフローはCD（継続的デプロイ/デリバリー）に該当** します。

## CIを追加するには？
このワークフローにCIの要素を加えるには、以下のようなユニットテストやLintチェックを追加するのがよいと思います。

```yaml
      # ユニットテストの実行（CIの要素）
      - name: Run tests
        run: go test -v ./...
```

このようなテストが組み込まれることで、CI/CDパイプラインの完全な構築が可能になります。

## まとめ
- **現在のワークフローはCD（継続的デリバリー/デプロイメント）** に該当する
- **CI（テストやLintチェック）の要素は含まれていない**
- **CI/CDのフルパイプラインにするには、テストを追加することが望ましい**

GitHub Actionsを活用することで、効率的なCI/CDパイプラインを構築できます。

今後の開発では、CIとCDをバランスよく組み合わせて、より安定した開発環境を整えていきます。
HANADB再起動後 メモリ内のローストア再利用について

# はじめに
<!-- 発端や概要を記載 -->
同じ環境でHANADB単体のみ再起動した場合と、OS再起動後にHANADBを起動した場合で起動時間が異なるので、その原因を調査してみました。
※確認した環境 OS:SUSE15 SP4 DB:HANA2.0 SPS05 メモリ 123GB

# 起動時間が異なる原因
Note 2159435曰く、HANA再起動後にはメモリ内のローストアが再利用され、HANA再起動する際に起動時間が短縮されるようです。
SAP HANA 2.0 SPS04以降であれば、異常終了、クラッシュした場合でも、HANA再起動時にメモリが再利用されます。

>2159435 - How-To: Keeping SAP HANA Row Store in Memory when restarting
Starting with SAP HANA 2.0 SPS 04 the row store in memory is re-used, even in case of a dirty shutdown / crash - only dirty pages are reloaded from disk. The re-use ratio is written to the database trace (SAP Note 2380176):
Service_Startup SharedMemoryUtil.cc(01971) : 1 RS segments loaded in 1.25 sec (51.05MB/s), 277 pages in 1 segments, <strong>reuse ratio: 93%<strong>

HANADB単体のみ再起動した場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552891/dbea9e39-e2a2-4469-a4f9-be78da8f3997.png)

OS再起動後にHANADBを起動した場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552891/56b62b9d-525b-4872-bf88-b428c5e60617.png)

上記ログにも記載されている通り、HANAを再起動した場合には、Service_Startup SharedMemoryUtil.cc の行に reuse ratio の記載があり、メモリ内のローストアが再利用されていることが確認できます。一方で、OSを再起動した後にDBを起動した場合には、reuse ratio の記載がなく、ローストアが再利用されていないようです。

# DBパラメータ(keep_shared_memory_over_restart)
>2159435 - How-To: Keeping SAP HANA Row Store in Memory when restarting
<strong>indexserver.ini -> [row_engine] -> keep_shared_memory_over_restart</strong>
1.0 SPS 09 and higher true
If set to true, SAP HANA will keep the row store in memory when the technical preconditions are fulfilled. If set to false, the row store is generally recreated from scratch during a startup.

SAP HANA 1.0 SPS 09以降ではkeep_shared_memory_over_restartというDBパラメータで、DB再起動後のメモリ内のローストア再利用が制御されており、デフォルト値がtrueとなっていました。(Note2159435参照)
→SAP HANA 1.0 SPS 09以降では、デフォルトでDB再起動後にメモリ内のローストアが再利用される設定になっている。

# 起動時間比較
今回実施した環境ではローストアのロード処理時間(RowStorePageAcce AbsolutePageAccessImpl.cpp)は以下の通りでした。HANADB単体のみ再起動した場合はメモリ内のローストアが再利用されるので、その分起動時間が短縮されていました。今回下記それぞれの場合での差は約3分半程度でしたが、再利用するメモリのデータ量が多くなれば、そのぶん差は広がることが考えられます。
　HANADB単体のみ再起動した場合 30秒程度
　OS再起動後にHANADBを起動した場合 4分程度


HANAの仕様上、ローストアは起動時にすべてメモリ内にロードされます。一方、カラムストアは起動時にすべてメモリ内にロードされるわけではなく、起動後も徐々にメモリにロードされていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552891/4baa7441-e4a7-47dc-be53-6de84e36f1e6.png)
画像は下記sap learningのリンクから引用
https://learning.sap.com/learning-journeys/installing-and-administering-sap-hana/starting-and-stopping-sap-hana

# おわりに
<!-- 発端や概要を記載 -->

誰かの参考になれば幸いです。
IBM Cloud上のVPC Windowsサーバーにおけるセーフモードの起動方法

# はじめに

正常に機能していないWindowsの仮想サーバーをリモートでトラブルシューティングする方法として、制限された状態で起動する機能であるセーフモードが利用できます。

セーフモードは環境によって起動のやり方が異なるため、本稿ではIBM Cloud上に構築したVPCのWindowsサーバーにおけるセーフモードの起動方法を記載します。

# 手順

対象のwindowsサーバーのポータル画面から右上の`アクション`から`VNCコンソールを開く`を選択し、VNCコンソールを開きます。

![スクリーンショット_2025-02-20_10_35_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/4cd0d819-8ab7-4459-a282-da0310cdbb14.png)

VCNコンソールが開けましたら、右上 `︙` から`リブート`を選択しサーバーのリブートを実行します。

![スクリーンショット_2025-02-20_10_39_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/f3c64813-6c44-476a-9ea8-0dd270cf628e.png)

リブート完了し、サーバーが上がってきたら再び先ほどと同様の手順で**サーバーのリブートをさらに2回実行します。(合計3回実行)**

3回目のリブートした際、下記画像の画面が表示されたらF8key(Macだとfn+f8key)を押すことでAdvanced Boot Optionsの画面へ移行することができます。

![スクリーンショット_2025-02-18_13_41_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/5600edfa-1daa-4b69-a054-fc61bac6258e.png)

Advanced Boot Optionsから`Safe Mode`を選択することでサーバーをセーフモードで起動することができます。


![スクリーンショット_2025-02-18_12_26_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/63d2cacf-ab45-465a-9b9d-2ee0d2528e3b.png)

:::note warn
残念ながらコンピュータの修復(Repair Your Computer)は選択できません
:::


Safe Modeを選択後、サーバーにログインすると下の画面の様に背景が黒く画面四隅にSafe Modeと表示される画面が表示される様になりました。

![スクリーンショット 2025-02-19 15.09.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/82149391-370d-4d3f-a2ec-b78b583489d1.png)


# まとめ
本稿ではIBM Cloud上に構築したVPCのWindowsサーバーにおけるセーフモードの起動方法を記載しました。

サーバーにアクセスできる場合はmsconfigファイルから実行することで同様にセーフモードを起動できますが、サーバーがうまく起動しない場合は本項の通りにVCNコンソールからセーフモードを起動する必要があります。

F8keyを押すタイミングがシビアなので3回リブート後もうまくいかないことが多々ありますが、根気強く試してみてください。
[UTM]Apple Silicon MacにてWindows環境を作る

# 内容
表題の通りです。
UTMを使ってWindows環境を作成します。


# 環境
- MacBook Pro M3
- UTM
- windows11

# やり方
## UTMをインストール。起動

https://mac.getutm.app/


## 環境を作成。仮想化を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727564/05a5390c-4dd4-4478-80ac-acefa010d307.png)



## Windowsを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727564/2bb5e5d6-80dc-42cd-ad58-1fd9371b45c6.png)


## 各種設定
### 最新のWindowsインストーラーを取得するをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727564/57521618-baae-41f6-a104-2e89b3386300.png)

### Windows11,Appleシリコンを選択。ダウンロードする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727564/b6e15c48-27ca-46df-8187-00cd7bf79daf.png)




### 先ほどダウンロードしたISOファイルを使用するように設定。あとはデフォルトです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727564/0e8e4aff-2b05-4fb8-becc-daca8a405fde.png)

## ハードウェア設定
メモリは多い方がいいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727564/44598806-fca0-477c-9c85-94bb5e3b01bd.png)


## ストレージ設定
デフォルトです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727564/6f71a12b-03d7-4d4c-962b-8fa0ce0e7f37.png)

## 共有ディレクトリ
指定なしです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727564/994275ed-270c-4a8b-85fa-696ec72efe53.png)


## 概要
保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727564/490def0c-10fb-4923-99ce-30caddb823b1.png)


## 仮想環境を起動する。
再生ボタンをクリックして環境を立ち上げてください。
Windows設定は公式通りなので割愛します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727564/bb05c5ab-20d2-4178-84d3-4237eef34532.png)


# 終わり
Intel環境を作りたいんですが、どの方法でも今のところうまく行っていないです。

そのうち解決したいっすねぇ。
推測統計学での母数と標本統計量の記号について

## はじめに
推測統計学での母数（母集団の値）と標本統計量（標本の値）の記号についてまとめてみました。

## 表
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/fc26a437-dd6b-4ae2-a73d-99b7e4f31f41.png)


## おわりに
ここまで読んでいただきありがとうございます！
paiza.ioでc# その16

# 概要
paiza.ioでc#、やってみた。
練習問題やってみた。

# 習問題
HTMLをゲットせよ。

# サンプルコード

```

using System;
using System.IO;
using System.Net;
using System.Text;

namespace App 
{
	class test {
		static void Wget(string url) {
			WebRequest req = WebRequest.Create(url);
			WebResponse res = req.GetResponse();
			Stream st = res.GetResponseStream();
			StreamReader sr = new StreamReader(st);
			string txt = sr.ReadToEnd();
			sr.Close();
			st.Close();
			string name = "index.html";
			StreamWriter sw = new StreamWriter(name, false);
			sw.Write(txt);
			sw.Close();
			Console.WriteLine(txt);
		}
		static void Main() {
			Wget("https://qiita.com");
		}
	}
}





```

# 成果物

https://paiza.io/projects/DI7eBr77xcJw0u6uJk7c-g?language=csharp

以上。
【Java if文 論理型と浮動小数点型】

## 論理型のデータは比較演算子なしで条件式に使える

※論理型のデータは比較演算子なしで条件式に使える
```java
boolean isAdult = false; //成人かどうか

if(idAdult) {
    //年齢が18歳以上の場合
    System.out.println("成人です");
} else {
    //年齢が１８歳未満の場合
    System.out.println("未成年です");
}    
```
上記コードの実行結果➡「未成年です」
※論理型の変数isAdultであれば変数名を（）内に書くだけでよい。

またboolean型変数の頭に!をつけると条件式を反転できる
つまり「boolean型変数がfalseかどうか」という条件になる

```java
if(!isAdult) {
    //年齢が１８歳未満の場合
    System.out.printiln("未成年です");
} else {
    //年齢が18歳以上の場合
    System.out.println("成人です");
}    
```
変数isAdultがtrueなら、条件式は成立しないことになり２つ目の{}内が実行される
上記コード実行結果➡「成人です」

## 浮動小数点型のデータをそのまま比較するのはNG

◆理由
浮動小数点型は誤差が発生する場合があり正確に比較ができないから
```java
float valFloat = 12.3F;
double valDouble = 12.3;

System.out.println(valFloat == valDouble);
```
それぞれ12.3を代入。そして２つの変数の値が等しいかどうか。という条件式の結果を表示している
条件式が成立しtrueが表示されそうだが実行すると
```java
false
```
と表示される

## 浮動小数点型の２つのデータを比較する場合

①比較する2データの差を取り、誤差が許容範囲であることを確認する
②2データを整数型に変換してから比較する（小数部分が無視できる場合）
③数値を文字列のように扱える「BigDecimalクラス」を使用する

以下、1つ目の方法で誤差をケアするサンプルコードです
valFloatとvalDoubleの差をabs()メソッドで求め、許容範囲（0.0001）以内かチェックします。

```java
float  valFloat = 12.3F;
double valDouble = 12.3;

//0.0001までの誤差は許容範囲とみなし等しいと判断する
if(Math.abs(valFloat - valDouble) <= 0.0001) {
    System.out.println("2つの変数値は等しいです（誤差は許容範囲）");
} else {
    System.out.println(""2つの変数値は等しくありません);
}    
```
abs()メソッドは絶対値（マイナスを取った値）を求めるもの
上記を実行すると、誤差が許容されて、2データは同じ値と判定されます。
```java
2つの変数値は等しいです(誤差は許容範囲)
```
「日本語タイピングゲームのためのローマ字入力正誤判定JavaScriptライブラリ」のバグ


元記事

https://qiita.com/toyohisa/items/17c8c0c8342b894e2470

以下のサイトで動作確認した。

https://www.pecode.com/typing/simple_typing_game_maker.html

## その1

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/649673/45506d23-d72e-4a89-8177-f002d484ca24.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/649673/c35fc9b2-7e04-4cdc-89cf-e263a5800387.png)

「xxa」「lla」が入力できない。

## その2

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/649673/3b2db146-f857-42b0-8058-187ab6e75fd6.png)

「xxn」が入力できない。

## その3

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/649673/fb3305df-9164-475b-bbad-bced0220b442.png)

「xkaxke」「lkalke」が正しい。

## その4

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/649673/9804f870-916c-464b-800c-f1da16a88604.png)

「んん」で開始できない。

## 終わりに

そこまで重度なバグではないが、似たようなライブラリを作った身としては気になった（宣伝）。

https://www.npmjs.com/package/@mogamoga1024/typing-jp

こういうのは出鱈目な問題を出題するプログラムを組んでテストするのがよいと思う。

https://mogamoga1024.github.io/typing-jp/test/monkey_test.html