OmniAICreator/Qiita-1.07M huggingface dataset:
Microsoft Tech Brief : Fabric と Databricks のコラボレーションが生み出す生成AI時代の新たなデータ活用戦略 (5月アップデート版)受講の感想書き

# Fabricとデータブリックスの連携と最新技術

2024年5月24日にMicrosoft Tech Brief : Fabric と Databricks のコラボレーションが生み出す生成AI時代の新たなデータ活用戦略 (5月アップデート版)を受講したので、その内容を共有しようと思います!
注 : 勉強中の者がウェビナーで聞いた内容をまとめただけなので、詳しくは公式情報を参照いただければと思います。




当日の内容に入る前に･･･
## Fabricとは

**Microsoft Fabric**は、データインテリジェンスプラットフォームです。データの収集、管理、分析、共有を一元化し、ビジネスインテリジェンス（BI）と分析のプロセスを簡素化することを目的としています。Fabricは、データサイエンティスト、アナリスト、ビジネスユーザーが協力して作業できる統合環境を提供しています。

## データブリックスとは

**データブリックス**は、Apache Sparkをベースとしたデータ分析プラットフォームで、ビッグデータと機械学習のワークフローを効率化します。データの統合、処理、分析、機械学習モデルのトレーニングとデプロイを一元化し、企業がデータから価値を引き出すための強力なツールセットを提供します。

## Fabricとデータブリックスの連携(ざっくり)

Fabricとデータブリックスは、シームレスな連携を提供することで、データ管理と分析の効率を飛躍的に向上させます(つまり凄いってことです)。以下のようなメリットがあります。

1. **データの一元管理**: データのクローンを作成する必要がなく、Fabricとデータブリックス間で直接データを共有・操作できます。
2. **統合環境**: データサイエンティストやアナリストが利用するツールを一元化し、データの収集から分析、共有までのプロセスをスムーズに行えます。
3. **柔軟なデータ操作**: Fabricからデータブリックスのカタログを選択し、自分の接続権限を持つデータを操作することができます。



## 最近のアップデート内容

### 生成AIを活用したレポートの深掘り

作成したレポートを共有｢された側｣も、生成AIを使ってレポートの内容をさらに深掘りすることができます。レポートの中から特に報告したいポイントを絞って生成AIに相談し、そこからさらに表形式でまとめる依頼も可能です。例えば、もらったレポートを使って上司の報告する機会があったとして、特にどのポイントに注目すべきとか、どのポイントを深くおさえておかないといけないとか、レポートをさらにまとめるとかいう対策ができるということです。

### データクレンジングのサポート

ユーザーの「自分の見たい形でデータをクレンジングしたい」という要望にも対応しています。Copilot機能を使って、対象データの取得、特定の年数に絞る、不要な列を省く、グルーピングするなどのフィルタリングを自然言語で指示することができます。

### EXPLAIN機能とオートフィックス機能

データクエリに対して、EXPLAINボタンを押すとSQLのコードに説明文が追加され、視認性が向上します。また、エラーのオートフィックス機能もあり、自動で修正してくれます。

## データに直接チャットする機能

データブリックスには、データに直接チャットする機能もあります。AIスキルのチャットルームを作成し、対象のデータを選択して検索すると、生成AIが裏でSQL文を作成して回答してくれます。例えば、「昨日の売上を教えて」といった質問に対して、すぐに必要な情報を取得できます。SQLなどがかけない方でも自然言語で質問できるのはメリット大きいですよね。

## 自然言語でダッシュボードやグラフを作成

自然言語を使ってダッシュボードやグラフを簡単に作成することができます。例えば、「昨年の売上推移をグラフにして」といった指示を出すことで、生成AIが自動的にデータを解析し、視覚的に分かりやすい形式で情報を提供します。これにより、データ分析の専門知識がなくても、直感的にデータの洞察を得ることが可能です。個人的に私はグラフ作るの下手くそ(お手本のようなクソダサグラフが爆誕する)なので、この機能いいなぁと思いました。

## データブリックスとFabricのシームレスな連携

データブリックスは、Fabricとシームレスに連携できます!!データをクローンする必要がなく、簡単にデータの共有と操作が可能です。また、以下のような新機能も提供されています。

1. **データモデルの共有**: ワンクリックでデータモデルを公開・共有できます。UnityCatalogを通じて、FabricやBigQuery、Snowflakeとも連携可能です。
2. **Power BI Desktopとの連携**: Power BI Desktopをダウンロードし、FabricやDatabricksのデータを操作できます。
3. **カタログ選択**: FabricからDatabricksのカタログを選択し、自分の接続権限を持つデータを操作できます。

## まとめ

データブリックスとFabricの連携は、強力なプラットフォームを提供しているようです。Microsoftは最近Fabricにかなり力を入れているらしいと聞いているので、今後もどんどんアップデートがあるものかと思います。楽しみですね!
今データ関係の勉強をしている途中なので、どんどん情報を仕入れようと思ってます。
PythonでPowerPoint PPT/PPTXをHTMLに変換する

PowerPointドキュメントは、情報伝達、プレゼンテーションの作成、製品プロモーションのための重要なツールです。しかし、より多くの人がアクセスしたり共有したりするために、これらのよくデザインされたプレゼンテーションをウェブに公開する必要があることもあります。この記事では、PythonでPowerPointドキュメントをHTML形式に変換する方法を紹介します。

2つの例が含まれています：
:one: PythonでPowerPointをHTMLに変換する
:two: Pythonで特定のスライドをHTMLに変換する

## Python PowerPoint変換ライブラリ
PythonでPowerPointをHTMLに変換するには、[**Spire.Presentation for Python**](https://www.e-iceblue.com/Introduce/presentation-for-python.html)ライブラリが必要です。pipコマンドでインストールできます：
`pip install Spire.Presentation`

## PythonでPowerPointをHTMLに変換する
この変換を行うには、単に.pptまたは.pptxドキュメントをロードし、**Presentation.SaveToFile()** メソッドを使用してHTML形式として保存します。
Pythonコード:
```python
from spire.presentation.common import *
from spire.presentation import *
 
# PowerPointドキュメントの読み込み
ppt = Presentation()
ppt.LoadFromFile("sample.pptx")
 
# ドキュメントをHTMLとして保存する
ppt.SaveToFile("PPTXtoHTML.html", FileFormat.Html)
ppt.Dispose()
```
出力結果:
![PowerPointToHTML.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/6020596c-24e9-d4e7-2e01-fa92deae9e09.png)


## Pythonで特定のスライドをHTMLに変換する
特定のスライドだけをHTML形式に変換したい場合は、まず**Presentation.Slides[]** プロパティで指定したスライドを取得してから変換します。
Pythonコード:
```python
from spire.presentation.common import *
from spire.presentation import *
 
# PowerPointドキュメントの読み込み
ppt = Presentation()
ppt.LoadFromFile(("sample.pptx"))
 
# 3枚目のスライドを入手
slide = ppt.Slides[2]
 
# スライドをHTML形式で保存する
slide.SaveToFile("SlideToHTML.html", FileFormat.Html)
ppt.Dispose()
```
上の簡単なコードを使用すると、ロードされたPowerPointドキュメントをHTML形式に変換できます。PythonとSpire.Presentationライブラリを組み合わせることで、カスタムスクリプトを作成して変換プロセスを自動化できます。

>[フォーラム](https://www.e-iceblue.com/forum/spire-presentation-f14.html)に行って、遭遇する可能性のある問題について議論してください。
コマンド1行でローカル環境に任意のポートでHTTPサーバを立てる方法

リバースプロキシを開発するにあたって複数のポートでリクエストを返してくれるプログラムを立てる必要があったときに使ったもの。
```shell:zsh
% python -m http.server 8081
```
以上。あらかじめローカルにpythonが導入されていることが必要。
トラブルシュートについて考える

## はじめに
イレギュラーなことが起きてパニックに陥ると誰しも普段通りのパフォーマンスが出せなかったりしますよね。
インフラ障害に直面した時の僕もそんな気がします。
今回は影響の有無やエラー内容にかかわらず少しでも普段の実力が発揮できるよう
手順化してみました。

最初にほぼ結論ですが、エラーや障害に直面した際のやる事の優先順位として、
概要をつかむ＞問題の切り分けをする＞実際に対応する＞再発防止策を考える
↓
この優先順位で取り組んでいくのがいいのかなと思っています。
意見やアドバイスあればコメントくださると嬉しいです。

## 1,概要を掴む
問題に直面した際に、急いでいきなり原因を突き止めようとするのはやめて概要をつかむことが大切です。
慣れてくると英語が出来なくても、エラー文見ると何となく何を言われているかわかったりするかと思います。
「failed」とかの単語を見ると何か失敗している、何だろうと色々とコードやコマンド、ファイルパスなどに誤字が無いかとりあえず見に行ったりするかと思います。(これは僕の癖です…)

これをやると、振出しに戻る回数が多くなる気がしてます。
なので「１，概要をつかむ」の結論としてまずは、ログを見に行ったり英語が苦手な場合は、
エラーメッセージをきちんと翻訳することが大事です。

翻訳アプリはこれがおすすめです。Google翻訳よりも精度が高い為こちらを僕は使用しています。
https://www.deepl.com/ja/translator
 
また、分からないことを聞かれたりサポート的な立ち位置の場合は、
相手からエラーメッセージやエラー画面のキャプチャを貰うことを優先しましょう。

## 問題の切り分け
ログやエラーメッセージを確認した所で、問題の切り分けができるようになると思います。
SSHエラーはとてもいい例かと思います。
種類が多いので一部見てみましょう。

```
Warning: Identity file /* not accessible : No such file or directory.
```

こちらのエラーはsshコマンドでよく-iオプションで秘密鍵のパスを指定することが多いと思います。
その指定したパスに該当の秘密鍵のファイルが無いというエラーになります。
この場合はサーバ側では無く、ユーザ側に問題があるという事が分かると思います。

```
ssh: connect to host 〇〇〇.〇〇〇.〇〇〇.〇〇〇 port 22: Connection refused
```
〇〇〇.〇〇〇.〇〇〇.〇〇〇のIPのサーバにport 22でアクセスしようとしたけど接続が拒否されたというエラーになります。
この場合はサーバ側の問題の可能性が高い為サーバ側の設定を確認する必要が有るという事が分かると思います。
 
このようにエラーメッセージを見ればどこの何を調べればよいかが分かってきたと思います。

## 実際に対応する
ここはあまり書くことはありません。言葉のままです。
しかし、時にはエラーメッセージの通り対応しても解決できない時があるかと思います。
前述した、SSHエラーの場合ですと秘密鍵のパスの指定を修正して実行したら、
今度は、portのエラーが出たという事もあるかと思います。
 
要するにユーザ側でもサーバ側でもエラーの原因があったという事ですね。
エラーを解決したらまたエラーか…となってしまう気持ちもとても分かります。
 
ですが、エラーメッセージが変化したとは、すなわち解決に向けて前進しているともとらえられます！
時にはエラーに対して、ポジティブにいきましょう！

## 再発防止策を考える
トラブルシュートをした後には再発防止策を考えていく事が大切です。
気にするべき事を書いていきます。

１、そもそも起きた障害を意識する必要がないようにする事はできるか
例えばAWSの場合は、「責任共有モデル」というものがあります。
ユーザ側かAWS側か管理の所在を使用するサービスによって気にする必要があります。
これを考慮して、AWS側管理にできる所はないか等、考えてみると良いかと思います。
ユーザ管理の範囲が小さいとミスも減らすことに繋がります。

２、早期検知はできているか
障害は起きてしまった場合は、どれだけいち早く気づけるかが重要です。
かなり既出なものではありますがアラームの通知設定を、メールアドレス宛にするのではなく、普段コミニュケーションツールとして使用しているチャットルーム宛に通知する方法が考えられます。
その方が多くのメンバーの目につきやすくなるため早期検知に繋がります。

３、自動復旧は可能か
セカンダリの環境を作成する余裕があるのならこの項目も検討する必要があります。
障害が起きてもユーザにサービスを提供し続けることができるに越したことはありません。

## 最後に
読み返してみると当たり前のことしか書いていないですが、障害やエラーを目の当たりにするとできていない事もあるので、記事として残してみました。
自分用な所もありますが、誰かの役に立てれば幸いです。

参考：
https://atmarkit.itmedia.co.jp/ait/articles/2009/07/news007.html
https://qiita.com/hirokidaichi/items/f9f4549c88aaf8b38bda#%E5%86%8D%E7%99%BA%E9%98%B2%E6%AD%A2%E7%AD%96

お疲れ様でした。
ECサイト開発におけるdestroy_allの使用例

# はじめに
チーム開発が無事終了し、振り返りに躓いたところをアウトプットしています。
今回はECサイトを作成する中で、カートの中身を空にするために、destroy_allを使用しました。
検索しても良い記事が見当たらず…実装するのにものすごく時間がかかってしまったので使用例を紹介しようと思います。

# destroy_allとは

Railsにはdestroy_allというActiveRecordのメソッドが用意されています。
<details><summary>ActiveRecordとは</summary>

Ruby on Rails で使用されるデザインパターンの一つです。
主な機能は下記です（まだまだあります）
①データベーステーブルとオブジェクトのマッピング
②CRUD操作のサポート
③バリデーション

今回は削除機能なので、②のCRUD操作サポートになります！

</details>

destroy_allは文字通り指定したレコードを全て削除することができるメソッドです。
例えば、データベース上の全てのItemを削除する場合は以下です。

```
Item.destroy_all
```
ログイン中のユーザーの全ての商品を削除したい場合は以下です。
```
current_customer.cart_items.destroy_all
```
モデル名などは調整してみてください。
cutomer→user? items→books?

では早速実際の記述内容に進みましょう！

# モデル設定
商品(item)とカート内商品(cart_item)をリレーションします
item:cart_item = 1:N

[ER図についてはこちら](https://qiita.com/3rarara/items/65ebbbcc6962d8403b80)

```model/item.rb
class Item < ApplicationRecord
   :
    has_many :cart_items
   :
    validates :price, presence: true

end
```

```model/cart_item.rb
class CartItem < ApplicationRecord
    belongs_to :item
end
```

# ルーティング
```routes.rb
Rails.application.routes.draw do
  scope module: :public do
    resources :cart_items, only: [:index, :update, :destroy, :create] do
      collection do
        delete 'destroy_all'
      end
    end
end
```

このルーティングで、パスが「destroy_all_cart_items_path」になります。

# コントローラー
```cart_item.controller.rb
# 通常の削除機能
  def destroy
    cart_item = CartItem.find(params[:id])
    if cart_item.destroy
    flash[:notice] = "商品を削除しました。"
    redirect_to request.referer
    else
      flash.now[:alert] = "商品を削除できませんでした。"
      render 'index'
    end
  end

  # 全て削除
  def destroy_all
    if current_customer.cart_items.destroy_all
      flash[:notice] = "全ての商品を削除しました。"
      redirect_to request.referer
    else
      render 'index'
    end
  end
  ```
  ifやflashはフラッシュメッセージを表示するための記述のため
  省略しても機能に影響はございません。（省略Ver↓）
  
  ```cart_item.controller.rb
def destroy_all
    current_customer.cart_items.destroy_all
    redirect_to request.referer
  end
  ```

  # View
  最後にView画面にカートを空にするボタンを表示させます
  ```cart_item/index.html.erb
  :
  <%= link_to 'カートを空にする', destroy_all_cart_items_path , method: :delete , "data-confirm" => "カート内にある全ての商品が削除されます。\n本当に削除しますか？" , class: "btn btn-sm btn-danger" %>
  :
  ```
  ![スクリーンショット 2024-05-28 16.38.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/26b65a02-517c-48a1-3e1d-f91469a9edbd.png)

・link_to 'カートを空にする', destroy_all_cart_items_path , method: :delete
の記述により、Item全削除機能が実装され、

・"data-confirm" => "カート内にある全ての商品が削除されます。\n本当に削除しますか？"
の記述により、アラートポップアップが表示され、

・class: "btn btn-sm btn-danger"
の記述により、bootstrapを導入しているためレイアウトが整えられました

# 最後に
いかがでしたでしょうか？
以下の記事を参考にさせていただきました！
ありがとうございます！

https://pikawaka.com/rails/destroy_all

https://pikawaka.com/rails/resources
【iOS SwiftUI ↔ Android Jetpack Compose】今こそ移行のタイミングかもしれません 🔥

私の場合、

Java から Kotlin、Jetpack Compose とやってきましたが。

SwiftUI / SwiftData の Apple 公式チュートリアルをやったあと、

書いてみたら、意外とできたことに驚きました。

![](https://i0.wp.com/android.benigumo.com/wp-content/uploads/2023/11/sc-2023-11-29-at-15.47.24.gif)

移行や両方覚えるのチャンスです。

直感的に書けます。似ています。

一晩でとりあえずはできます。

https://gist.github.com/benigumocom/bd35b6e395ef8e18bd59d92086081dbc

本質的な流儀やテクニックは置いておくとして、

移行や二股のタイミングかもしれません。

それぞれの深さは、

まずは嬉しがったあとに苦しむとして。

https://android.benigumo.com/20231128/swiftui-swiftdata-todo/
[Rails7]application.bootstrap.scssの変更が反映されない

## 目的
Rails７でbin/devコマンドでサーバーを起動させた際に、エラーが起きたのでその解決方法を共有しつつ備忘録として残します。
<br>

## 開発環境
- rails 7.0.4.3
- ruby 3.1.2
- Bootstrap 5.3.3
- Popper.js 2.11.8
<br>

## 解決方法
#### 事の始まり
下記の記事を参考にRails７にBootstrap５を導入しました。

https://qiita.com/PJZ9n/items/03341f942c2c84713c99

無事bootstrapの導入が終わって動作確認をしていた際に、`application.bootstrap.scss`の変更がブラウザに反映されないことに気づきました。
これはおかしいと思って色々調べたり、試してみました。


#### Rails7では`bin/dev`を使う
投稿者は開発途中でrails6からrails7にアップデートしました。
アップデート後も`rails s`コマンドで何も問題なくサーバーが起動されていたので、そのまま`rails s`コマンドを使ってました。

しかし、rails7では`bin/dev`コマンドが推奨されています。

その理由がUIを整えようとBootstrapを使い始めた際にわかりました。
bin/bevを使う事でJavaScript/CSSの変更反映や最適化を行ってくれるので、それを使っていなかった投稿者は当然

`application.bootstrap.scss`の変更が反映されなかった

という事です。

`application.bootstrap.scss`が反映されない根本的な原因はこれです。
`bin/dev`コマンドを実行してエラーが出なければ変更がブラウザに反映されると思います。

<br>
bin/devについては下記の記事に詳しく書いてます

https://qiita.com/eichann/items/38968db7c7aa13c1f978


#### `bin/dev`を使ってみる
ということでbin/devを使い始めたのですがエラーが発生しました。こういう新しいものを使ったり、環境構築にエラーはつきものですね。
<br>
**foreman: command not found**

まず出たエラーがこちら。これは簡単に直りました。
ターミナルで`gem install foreman`でforemanをインストールすれば直ります。

```:ターミナル
gem install foreman
```
<br>

**error Command "watch:css" not found**

次に出たエラーがこれです。
ここでハマったのですが、ふとBootstrapを導入した際のことを思い出しました。

bootstrap導入時に`rails css:install:bootstrap`を実行すると`package.json`に下のコードが追加されます

```package.json
"scripts":{
    "build:css": "yarn build:css:compile && yarn build:css:prefix",
    "build": "esbuild app/javascript/*.* --bundle --sourcemap --outdir=app/assets/builds",
    "build:css:compile": "sass ./app/assets/stylesheets/application.bootstrap.scss:./app/assets/builds/application.css --no-source-map --load-path=node_modules",
    "build:css:prefix": "postcss ./app/assets/builds/application.css --use=autoprefixer --output=./app/assets/builds/application.css",
    "watch:css": "nodemon --watch ./app/assets/stylesheets/ --ext scss --exec \"yarn build:css\""
}
```

投稿者は先ほど紹介したBootstrap5導入の記事のように下のように書き換えました。
これがダメだったみたいです。
```package.json
"scripts":{
    "build:css": "sass ./app/assets/stylesheets/application.bootstrap.scss:./app/assets/builds/application.css --no-source-map --load-path=node_modules",
}
```

これで`bin/dev`コマンドを実行すると`error Command "watch:css" not found`のエラーが出ました。

そこで下のように修正。

```package.json
    "scripts":{
    "build:css": "sass ./app/assets/stylesheets/application.bootstrap.scss:./app/assets/builds/application.css --no-source-map --load-path=node_modules",
    "watch:css": "nodemon --watch ./app/assets/stylesheets/ --ext scss --exec \"yarn build:css\""
}
```

これで再度`bin/dev`を実行すると無事サーバーを起動でき、`application.bootstrap.scss`の変更も反映されるようになりました。

めでたし。めでたし。

間違いや補足説明があればコメントいただけると嬉しいです。
Python　自身のファイルのディレクトリパスを求める

## コード

```python
import pathlib
import sys


# 1番目
# このファイルのディレクトリ
myDirPath = pathlib.Path(__file__).parent
# 設定ファイルなど
setting = myDirPath / 'setting.json'
print(setting)

# 2番目
# このファイルのディレクトリ
myDirPath = sys.path[0]
# 設定ファイルなど
setting = f'{myDirPath}/setting.json'
print(setting)

# 3番目
# このファイルのディレクトリ
myDirPath = pathlib.Path(sys.path[0])
# 設定ファイルなど
setting = myDirPath / 'setting.json'
print(setting)
```

※ `os.path`は使わないものとする。

`sys.path`はモジュールを検索するパスを示す文字列のリストで、pythonでスクリプトの実行時にスクリプトファイルのディレクトリが0番目に記載されるため、今回の目的と一致する。  
スクリプトファイルがimport文で呼び出される場合は当然呼び出し元のディレクトリパスになるので、他から呼び出されないスクリプトに限って使用するべきでしょう。  

※コメントで簡単な書き方を教えてもらいました。ありがとうございます。


# 参考
- https://docs.python.org/ja/3/library/sys.html#sys.path
- https://docs.python.org/ja/3/reference/import.html#file__
snapなしにskypeをlinuxにインストール

# ダウンロード

[配布サイト](https://repo.skype.com/rpm/)に行く

アドレスをコピって
wgetでダウンロードする

```
wget https://repo.skype.com/rpm/stable/skypeforlinux_8.109.0.209-1.x86_64.rpm
```


# インストール

```
sudo yum localinstall skypeforlinux_8.109.0.209-1.x86_64.rpm
```
ページキャッシュ

キャッシュメモリがメモリのデータをキャッシュするのに対して、ページキャッシュは、`ファイルのデータをメモリにキャッシュ`します。
...
ページキャッシュにおいては`ページ単位でデータを扱います`。それ以外にもダーティなページを表す「`ダーティページ`」、ダーティページのディスクへの書き込みを表す「ライトバック」という概念があります。
...
カーネルのメモリ上にあるページキャッシュという領域にコピーしてから、そのデータをプロセスのメモリにコピーします。

### ライトバック
ダーティページ上のデータは、後述する所定のタイミングでストレージデバイスに反映します。これをライトバック処理と言います。この時ダーティページであるという印も消します。
...
マシンの電源が急に落ちてしまった場合は、どうなるのでしょうか？
この場合、```ページキャッシュ上のデータはなくなります```。このようなことを許容できない場合は、open()システムコールでファイルを開く際にO_SYNCフラグを設定します。こうするとファイルに対してwrite()システムコールを発行するときに、````ページキャッシュだけではなくストレージデバイスにも同期的にデータを書き込みます```。

### 気づき
ページキャッシュはキャッシュメモリと同様に扱うのがページというだけで処理されたらダーティページの印がつき
ライトバックなどで書き込まれる。
ライトバックには特定のタイミングのなので注意する

# ページキャッシュを見てみる
### ディスクと同時に書き込むかどうか 
```
root@***********:***************# dd if=/dev/zero of=testfile oflag=sync bs=1G count=1
1+0 レコード入力
1+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 3.21185 s, 334 MB/s
root@***********:***************# dd if=/dev/zero of=testfile bs=1G count=1
1+0 レコード入力
1+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.41615 s, 758 MB/s
```
### 気づき
実験用ファイルを作成、`oflag=sync`というオプションをつける、つけないの２パターンを行い、処理時間を見てみたら()早い
### さっき作成したファイルがページキャッシュにある。
```
root@***********:***************# free
              total        used        free      shared  buff/cache   available
Mem:        3907956      931228     1139296        6268     1837432     2713740
Swap:       1190340        1036     1189304
```
### 気づき
メモリ使用状況を見てみるとページキャッシュなどを表す`buff/cache`が大きい
```
root@***********:***************# echo 3 >/proc/sys/vm/drop_caches 
root@***********:***************# free
              total        used        free      shared  buff/cache   available
Mem:        3907956      985308     2454036        6268      468612     2684532
Swap:       1190340        1036     1189304
```
### 気づき
別のファイルに別の書き込みをすると`buff/cache`の領域が解放されて少なくなっている。
### もう一回メモリから削除したファイルを読み出す
```
root@***********:***************# dd if=testfile of=/dev/null bs=1G count=1
1+0 レコード入力
1+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.363174 s, 3.0 GB/s
root@***********:***************# echo 3 >/proc/sys/vm/drop_caches 
root@***********:***************# dd if=testfile of=/dev/null bs=1G count=1
1+0 レコード入力
1+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.713631 s, 1.5 GB/s
```
### 気づき
ニ回目より一回目の方が早くなっている。（順番間違えました）
キャッシュから読み込んだのか。

# 出典
https://gihyo.jp/book/2022/978-4-297-13148-7

# 感想
ページキャッシュとキャッシュメモリの違いがわからなくなってきた。
ページキャッシュはファイルを扱って、キャッシュメモリは値を扱うのかな。
とりあえず進む
PHPで先頭や末尾の改行コードを取り除く

PHPの勉強始めました。
今までなんとなくで使っていたので、初心に戻って1つづつ学んでいます。
## trim()を使う
変数をechoした時に、謎の改行が出ていたので取り除く方法を探しました。
見つかったのがtrim()、文字列の先頭及び末尾の空白文字を削除します。
```
trim( "対応の文字列", "削除したい文字列" );
```

第2引数に何も指定しない場合は、以下の文字コードが削除されます。
今回削除したいのは、改行だったのでちょうど良い。
```
" " (ASCII 32 (0x20)), 通常の空白。
"\t" (ASCII 9 (0x09)), タブ。
"\n" (ASCII 10 (0x0A)), リターン。
"\r" (ASCII 13 (0x0D)), 改行。
"\0" (ASCII 0 (0x00)), NULバイト
"\v" (ASCII 11 (0x0B)), 垂直タブ

```

始めての技術アウトプット、終わり。

## 参考記事
https://www.php.net/manual/ja/function.trim.php
iRICv4：グラフィックボードを搭載していないマシンで、ソルバーを選択した瞬間にiRICが落ちるという問題-->推奨ハードウェア要件

久々に記事を投稿します。今回は2023年にリリースされたiRIC version4について、「ソフトウェア起動直後、ソルバーを選択すると落ちる」という問題の解決方法について紹介します。

# ■問題について

iRIC v4を起動後、「新しいプロジェクト」でソルバーを選択すると、ソフトウェア全体が落ちる。という非常にクリティカルな問題です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90108/1b66f4ab-4319-62aa-98a5-debb0265ef1c.png)

はじめこの症状を聞いたときは「またiRIC更新に伴うバグか…」と思いましたが、私が利用しているマシンでは全くその症状が生じておらず、特定のマシンでのみ生じる問題ということが確認できました。


### 問題が生じるマシンについて
調査を進めていくと、 **グラフィックボードを搭載していないマシン** で問題が生じることを確認できました。

# ■原因
原因は、ソルバーを選択した直後に行われる可視化画面等の初期化処理の中にありました。

- プリ・ポストの可視化には、[vtk](https://vtk.org/)というライブラリを利用しています
- iRIC v4では、vtk8.xを利用しています
- ソルバーを選択した直後、プリ・ポスト画面の初期化が行われるのですが、そのタイミングでvtkの初期化が行われます
- vtk8.xではレンダリング機能のパフォーマンス向上のためOpenGL 2バックエンドが導入されており、グラフィックボードの性能を引き出すための仕様が実装されているようです（推奨はOpenGL 4.5以上をサポートするGPUだそうです）
- そのため、グラフィックボードを搭載していないマシンではvtkの初期化処理で「あれっ、グラフィックボードがない。。。」という状態になり、上記のような問題が発生したようです

vtkは可視化専用のライブラリですので、グラフィックボードが必要なことは理解できますが、グラフィックボードがなかったら落ちるという状態はイケてませんね。


>vtkについて
vtkはデータ可視化と処理のためのオープンソースのライブラリで、様々なプログラミング言語から利用でき、マルチプラットフォームで動作し、コンターやベクトルなどiRICソフトウェアの様々可視化を実現するのに利用しています。
ハードウェアの進化とともに、vtkも日々、高度化、高速化、多機能化され、バージョンが更新されています。iRIC v3からiRIC v4へのバージョンアップにともない、利用しているvtkのバージョンを6.xから8.xに更新しました。



# ■問題解決方法
調べていくと、グラフィクボードがない環境でも、性能は落ちるものの、vtk 8のレンダリングできることがわかりました。以下にMesa3Dというソフトウェアレンダリングを利用することで問題解決する方法を紹介します。

- １．以下のリンクからMesa3Dをダウンロードする
 https://github.com/pal1000/mesa-dist-win/releases/download/24.1.0/mesa3d-24.0.8-release-msvc.7z

- ２．ダウンロードしたファイルを解凍し、x64フォルダの中に格納されているファイルを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90108/5a00d3b7-b416-a3f3-d7c3-d4f7c63f4998.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90108/a774ecda-f4ac-0024-726a-310313945730.png)


- ３．x64フォルダの中に格納されているすべてのファイルをコピーし、iRIC v4の"iRIC.exe"が格納されているフォルダにペーストする。

```
%userprofile%\iRIC_v4\guis\prepost
```

以上で問題を解決できるはずです。お試しください。

# ■iRIC v4 推奨ハードウェア要件
改めてiRIC v4を利用するための推奨ハードウェア要件を整理ました。ご参考まで。

### グラフィックボード (GPU)
<span style="color: red; ">グラフィックボードがない場合は、上記の対応をお願いします。</span>

- 推奨モデル: NVIDIA GeForce GTXシリーズなどの最新世代のGPU
- メモリ: 4GB以上のVRAM（大規模なデータセットを扱う場合は8GB以上を推奨）
- OpenGLサポート: OpenGL 4.5以上をサポートするGPU
 
### プロセッサ (CPU)
多くのソルバーがIntel One APIでコンパイルされていますので、Intel系のCPUを推奨します

- コア数: 4コア以上のマルチコアプロセッサ（Intel Core i7以上を推奨）
- クロック速度: 3.0GHz以上のクロック速度を推奨
    
### メモリ (RAM)
- 容量: 16GB以上（大規模なデータセットを扱う場合は32GB以上を推奨）
- タイプ: DDR4 RAM

### ストレージ
- タイプ: SSD（ソリッドステートドライブ）を推奨
- 容量: 講習会では500GBもあれば十分ですが、業務では必要に応じて容量を増やしてください

### ディスプレイ
- 解像度: フルHD (1920x1080) 以上の解像度を持つディスプレイ
- 4Kなど高解像度ディスプレイは問題が生じる場合があります
- サイズ: 24インチ以上のディスプレイを推奨

### マウス
- iRICでは左クリック、右クリック、ホイールクリックなどさまざまなマウス操作がありますので、必須です


以上です。
wslのディスクのダイエット

ext4.vhdxのある場所の検索。
```powershell
> (Get-ChildItem "C:\" -recurse -force | Select-Object Fullname,Length | Sort-Object Length -descending )[0..29] 2>$null
```

最適化
```powershell
> wsl --shutdown
> diskpart
DISKPART> select vdisk file="C:\Users\onnoyu1012\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx"
DISKPART> attach vdisk readonly
DISKPART> compact vdisk
DISKPART> detach vdisk
DISKPART> exit
```
階層的なシェルスクリプトにおいて、childプロセスの終了を待つ

shell scriptで３階層の入れ子状のスクリプトを走らせたい。
また、i番目のchild process の全ての処理が終了してから、(i+1)番目のchild processを行いたい。

# ナイーブなイメージ1 

```shell
'000_parent.sh'
sh child_100.sh
# child_100.shの全ての処理が終わるまで待つ。
sh child_200.sh
# child_200.shの全ての処理が終わるまで待つ。
```

```shell
'child_100.sh'
sh grandchild_101.sh
sh grandchild_102.sh
sh grandchild_103.sh
# 101-103は同時に実行されて良い。101-103が全て終わるまで待つ。
```

```shell
'child_200.sh'
sh grandchild_201.sh
sh grandchild_202.sh
sh grandchild_203.sh
# 201-203は同時に実行されて良い。201-203が全て終わるまで待つ。
```

# 実装例1 cdを伴わないシンプルな場合


```shell
'000_parent.sh'
(
  sh child_100.sh
) &
PID100=$!
wait $PID100

(
  sh child_200.sh
) &
PID200=$!
wait $PID200
```

```shell
'child_100.sh'
(
  sh grandchild_101.sh
) &
PID101=$!

(
  sh grandchild_102.sh
) &
PID102=$!

(
  sh grandchild_103.sh
) &
PID103=$!

wait $PID101 $PID102 $PID103
```

```shell
'child_200.sh'
(
  sh grandchild_201.sh
) &
PID201=$!

(
  sh grandchild_202.sh
) &
PID202=$!

(
  sh grandchild_203.sh
) &
PID203=$!

wait $PID201 $PID202 $PID203
```

# 実装

```shell
'child_100.sh'
(
  cd d1
  sh 3_script.sh
  cd ../
  exit 111
) &
PID1=$!
wait $PID1
echo $?

(
  cd d2
  sh 3_script.sh
  cd ../
  exit 222
) &
PID2=$!
wait $PID2
echo $?
```


# ナイーブなイメージ2 (cd を伴う場合) 

```shell
'000_parent.sh'
sh child_100.sh
# child_100.shの全ての処理が終わるまで待つ。

sh child_200.sh
# child_200.shの全ての処理が終わるまで待つ。
```

```shell
'child_100.sh'
cd directory_101
sh grandchild_101.sh

cd ../directory_102
sh grandchild_102.sh

cd ../directory_103
sh grandchild_103.sh
# 101-103は同時に実行されて良い。101-103が全て終わるまで待つ。
cd ../
```

```shell
'child_200.sh'
cd directory_201
sh grandchild_201.sh

cd ../directory_202
sh grandchild_202.sh

cd ../directory_203
sh grandchild_203.sh
# 201-203は同時に実行されて良い。201-203が全て終わるまで待つ。
cd ../
```
# 実装例2 cdを伴なう場合

```shell
'000_parent.sh'
(
  sh child_100.sh
) &
PID100=$!
wait $PID100

(
  sh child_200.sh
) &
PID200=$!
wait $PID200
```

```shell
'child_100.sh'
(
  cd directory_101
  sh grandchild_101.sh
) &
PID101=$!

(
  cd directory_102
  sh grandchild_102.sh
) &
PID102=$!

(
  cd directory_103
  sh grandchild_103.sh
) &
PID103=$!

wait $PID101 $PID102 $PID103
```

```shell
'child_200.sh'
(
  cd directory_201
  sh grandchild_201.sh
) &
PID201=$!

(
  cd directory_202
  sh grandchild_202.sh
) &
PID202=$!

(
  cd directory_203
  sh grandchild_203.sh
) &
PID203=$!

wait $PID201 $PID202 $PID203
```


参考
https://qiita.com/blueskyarea/items/f07466393ccb5efb3dc5
毎日ABC day5【c++】ABC341 A-C問題解説【ACコード付き】

# AtCoder Beginner Contest 341

https://atcoder.jp/contests/abc341

## A - Print 341
正整数$N$が与えられるので、 $N$個の 0 と$N+1$個の 1 からなる、0 と 1 が交互に並んだ文字列を出力せよ、という問題。

順番に1と0を出力すればOK。

```cpp
int N;

int main()
{
	// 入力
	cin >> N;
	// 出力
	for (int i = 0; i < N; i++)
	{
		cout << 1 << 0;
	}
	cout << 1 << endl;
	return 0;
}
```

## B - Foreign Exchange

指定のレートで$i$番目の国と$i+1$番目の国の通貨が何回でも両替できる。最終的に$N$番目の国の通貨を最大いくら所持できるか、という問題。

昇順で両替できるだけして行って、最終的に$N-1$番目と$N$番目の国の通貨を限界まで両替したらOK.

```cpp
int N;
long long A[200009];
long long S[200009];
long long T[200009];

int main()
{
	// 入力
	cin >> N;
	for (int i = 1; i <= N; i++) cin >> A[i];
	for (int i = 1; i <= N - 1; i++) cin >> S[i] >> T[i];
	// 両替
	for (int i = 1; i <= N - 1; i++)
	{
		A[i + 1] += (A[i] / S[i]) * T[i]; 
	}
	// 出力
	cout << A[N] << endl;
}
```

## C - Takahashi Gets Lost
$H * W$のマス目が海と陸に分かれている。指定の上下左右の動きをした時に、常に陸を通ることができるスタート地点は何ヶ所あるか、という問題。

難しく考えなくても、全ての陸地のマスをスタート地点として全探索すればOKだった。

```cpp
int H, W, N;
string T;
char S[509][509];

int main()
{
    // 入力
    cin >> H >> W >> N >> T;
    for (int i = 0; i < H; i++)
    {
        for (int j = 0; j < W; j++) cin >> S[i][j];
    }
    int ans = 0;
    for (int start_i = 0; start_i < H; start_i++)
    {
        for (int start_j = 0; start_j < W; start_j++)
        {
            if (S[start_i][start_j] == '.')
            {
                int i = start_i, j = start_j;
                bool valid = true;
                for (int k = 0; k < T.size(); k++)
                {
                    if (T[k] == 'U' && i > 0) i--;
                    else if (T[k] == 'D' && i < H - 1) i++;
                    else if (T[k] == 'L' && j > 0) j--;
                    else if (T[k] == 'R' && j < W - 1) j++;
                    if (S[i][j] == '#')
                    {
                        valid = false;
                        break;
                    }
                }
                if (valid) ans++;
            }
        }
    }
    cout << ans << endl;
    return 0;
}
```
Dockerコンテナにbashで入りたいけど名前が分からない時

# 概要

テストコードを実行しようと思ったけれど初めて入るサーバだったのでWebサーバの名前が分からなかった。
Dockerコンテナにbashで入りたいけど名前が分からない時の対処法。

# 方法

実行中のコンテナを確認。

```
docker ps
```

コンテナ名（またはID）を指定するとコンテナにbashで入ることができる。

```text:例：コンテナ名が「web_server」の時
docker exec -it web_server bash
```

```text:例：Dockerに入った後、Ruby（rspecを使用）でのテストを実行
bundle exec rspec テストファイル名
```

# 補足：そもそもDockerに入ってテストコードを実行するのはなぜ？

個人の設定に依存せず、再現性高くテストを実行できるため。


具体的には、
* コンテナ内でテストコードを実行することで、ローカルマシンやCI/CDパイプライン上での環境の違いによる問題を回避
* 依存関係のバージョン違いやインストール漏れによるテスト失敗を防げる
* 特定のバージョンのソフトウェアや設定が含まれたコンテナイメージを使用することで、どこで実行しても同じ結果が得られるようになる
* 多くのCI/CDツールは、テストをコンテナ内で実行することを前提としており、ビルド、テスト、デプロイの各ステージが一貫した環境で実行されるため、パイプライン全体の信頼性が向上する
* ドッカーコンテナがホストシステム（自分が使っているPCやサーバー）から独立して動作するため、コンテナ内で行われる操作や設定がホストシステムに直接影響を与えないようにすることができる
【超初心者向け】 VSCODE で Python をテストしたときに起こる「カレントズレ」の対処法

Pythonプログラムをファイルに書き込んでテストする際
「 ***実行パスがファイルのある場所と違う*** 場合」に起こる不具合の対処法です。

# 不具合の例
* `open()` を使用するなどしてファイルを操作する場合に、
ファイルを使用できない。あるいは、書き込み時にエラーを吐く。
* `import` を使用して自作のpythonファイルを呼び出そうとするが
読み込まれない。
* 上記いずれかが **VSCODEのみ** で発生する

# 原因と対策
**VSCODE** では
「**Python を実行しているフォルダ**( 以降 **カレント** と呼ぶ )」が
「**Python の実行ファイルのあるフォルダ**( 以降 **ファイルパス** と呼ぶ )」と違う場合があります。

```
[ディレクトリ構造の例]

root/
 ┣━ フォルダ1/    #カレント
 ┗━ フォルダ2/    #ファイルパス
    ┣━ 実行ファイル.py
    ┣━ module.py
    ┗━ example.txt
```

この**ファイルパス**と**カレント**が違う場合。
Python は呼び出そうとするファイル名( ```example.txt```など )を、そのまま記述すると
**カレント** からファイルを探そうとします。

当然場所が違うわけですから**ファイルパス** にある
「```module.py```」や「```example.txt```」は読み込まれません。

そこで本格的な処理を始める前に
**カレント** と **ファイルパス** を同じ場所にしてあげる必要があります。

# 実際のコード

```python current.py
import os

current = __file__
current = current.split("\\")
current.pop()
current = "\\".join(current)+"\\"
os.chdir(current)
```

* `__file__` : これは予約語と呼ばれる変数の一つで、ここに実行ファイルの **絶対パス** が格納されます。
絶対パスは`C://`や`https://`など、**これ以上さかのぼれない場所** からファイル名を記述する方法で、この方法で記述する場合はパスの間違いは起こりません。
* `os.chidr()` : これはカレントの位置を移動させる関数です。

`__file__` から実行ファイルの絶対パスを取得して、ファイル名のみを`.pop()`で削除して、`os.chdir()` を使ってパスを指定してあげることで、**カレント** を **ファイルパス** と同じ位置に移動させることが出来ます。

~~もうちょっと うまい書き方があった気がす...~~
WhatsApp for Service Cloud


+ [WhatsApp for Service Cloud](https://trailhead.salesforce.com/content/learn/modules/whatsapp-for-service-cloud?trail_id=expand-service-cloud-with-digital-engagement)

# Get Started with WhatsApp

全く意味が分からん

Eらしいがどこに書いてあったか全然分からん

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/54aa1bf5-fee9-7520-7afb-7112d4bfff49.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/ac270fcd-38a5-e4a3-5103-e11a1b937d3e.png)

# Fine-Tune Your WhatsApp Channel

A

C

# Extend WhatsApp with Messaging Components

C

D

# Help Customers in WhatsApp

ここもさっぱり分からん。本当どこに書いているんだろう。英語だから余計に意味が分からない。
Simultaneous Multi Threading(SMT)

# CPU使用時間の内訳
CPUの計算処理時間の所要時間に比べて、メモリアクセスの所要時間の方が、はるかに長いです。それに加えて、キャッシュメモリへのアクセスの所要時間も、CPUの計算処理に比べると、若干遅いです。
..
メモリあるいはキャッシュメモリからのデータ転送を待っているだけで、CPUの計算リソースは空いている状態ということもあります。

# SMT
Simultaneous Multithreading (SMT) は、```1つの物理CPUコアで複数の実行スレッドを実行```する技術です。この技術は、Hyper-Threading など、さまざまな名前で知られていますが、同様の原理で動作します。

### 出典
https://access.redhat.com/ja/solutions/5458061#:~:text=Simultaneous%20Multithreading%20(SMT)%20%E3%81%AF%E3%80%811%E3%81%A4%E3%81%AE%E7%89%A9%E7%90%86CPU%E3%82%B3%E3%82%A2%E3%81%A7%E8%A4%87%E6%95%B0%E3%81%AE%E5%AE%9F%E8%A1%8C%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%8A%80%E8%A1%93%E3%81%A7%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%E6%8A%80%E8%A1%93%E3%81%AF%E3%80%81Hyper%2DThreading%20%E3%81%AA%E3%81%A9%E3%80%81%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E5%90%8D%E5%89%8D%E3%81%A7%E7%9F%A5%E3%82%89%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E5%90%8C%E6%A7%98%E3%81%AE%E5%8E%9F%E7%90%86%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

Ⅲ,スレッド数
「４コア８スレッド」のように、コア数と並んで表記されていることの多いスレッド数は
「論理コア数」とも呼ばれており、```パソコンから認識されているコア数```のことを表しています。
#### 出典
https://shop.applied-net.co.jp/blog/app_news/15288/#:~:text=%E2%85%A2%2C%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E6%95%B0%0A%E3%80%8C%EF%BC%94%E3%82%B3%E3%82%A2%EF%BC%98%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%80%8D%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E3%80%81%E3%82%B3%E3%82%A2%E6%95%B0%E3%81%A8%E4%B8%A6%E3%82%93%E3%81%A7%E8%A1%A8%E8%A8%98%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AE%E5%A4%9A%E3%81%84%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E6%95%B0%E3%81%AF%0A%E3%80%8C%E8%AB%96%E7%90%86%E3%82%B3%E3%82%A2%E6%95%B0%E3%80%8D%E3%81%A8%E3%82%82%E5%91%BC%E3%81%B0%E3%82%8C%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E3%81%8B%E3%82%89%E8%AA%8D%E8%AD%98%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%82%B3%E3%82%A2%E6%95%B0%E3%81%AE%E3%81%93%E3%81%A8%E3%82%92%E8%A1%A8%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

# 出典
https://gihyo.jp/book/2022/978-4-297-13148-7

# 感想
あたかも複数あるように一つのCPUで複数を実行させるのか。
SMTの効果が多ければプロセスが複数になってもターンアラウンドタイムが低く抑えられ、スループットも大きくなるのか。
しかしタイミングが悪くなるとSMTは使わない時よりも性能が低くなるらしい。
2024年版[R] セルフドキュメント

## 参考

## 予備知識
| 語句 | 説明 | 英単語 |
|:-:|:-:|:-:|
|  `seq` |  連続する値 |  sequence |
|   |   ||

## 命名規則

## 変数

参考は[こちら](https://htsuda.net/stats/
)です。

### [データ型](https://htsuda.net/stats/data-basics.html)
データ型は4つです。
|   | データ型 | 説明 |
|:-:|:-:|:-:|
|  1 |  numeric |  数値型 |
|  2 |  character |  文字列型 |
|  3 |  factor |  因子型 |
|  4 |  logical |  論理値型 |

### [データ構造](https://htsuda.net/stats/data-basics.html)
データ構造は6つです。
主に使用されるのは、`vector` と `data frame` の2つです。
|  | データ構造 | 説明 |詳細|  使用方法 |
|:-:|:-:|:-:|:-:|:-:|
|  1 |  **vector** |  ベクトル |  ベクトルは、1次元の配列です。要素が1つだけのベクトルは Scalar (スカラー) とも呼ばれます。 |  c() |
|  2 |  matrix  |  行列 |||
|  3 |  array |  配列 |||
|  4 |  **data frame** |  データフレーム |||
|  5 |  list |  リスト |||
|  6 |  table |  テーブル |||

## 関数

データの「中心」を計算する関数
| 関数 | 説明 | 引数 |
|:-:|:-:|:-:|
|  `mean()` |  平均値を計算します。 ||
|  `median()` |  中央値を計算します。 ||
|  `summary()` |  平均値・中央値などまとめて計算します。Min. 1st Qu.  Median    Mean 3rd Qu.    Max. の計算です。 |   |

データの「ばらつき」を計算する関数
| 関数 | 説明 | 引数 |
|:-:|:-:|:-:|
|  `var()` |  不偏分散を計算します。 ||
|  `sd()` |  標準偏差を計算します。 ||
|  `IQR()` |  四分位偏差を計算します。 ||

データの「関連」を計算する関数
| 関数 | 説明 | 引数 |
|:-:|:-:|:-:|
|  `cov()` |  共分散を計算します。 |   |
|  `cor()` |  相関係数を計算します。 |   |
|  `lsfit()` |  最小二乗法を用いた回帰分析です。 |   |
|  `lm()` |  線形モデルを用いた回帰分析です。 Estimate Std. Error t value Pr(>|t|)     |  fomula, data, ... |
|  `glm()` |  一般線形モデルを用いた回帰分析です。 |   |

その他
| 関数 | 説明 | 引数 |
|:-:|:-:|:-:|
|  `sqrt()` |  平方根を計算します。 ||
|  `hist()` |  ヒストグラムを作成します。標準では「値1より大きくて値2以下」という階級を設定します。第一引数にデータベクトル、breaksでヒストグラムのビン（区間）の境界、mainでタイトル、xlabでx軸のラベル、ylabでy軸のラベル、その他の引数でさらにパラメータを与えます。 |  `hist(x, breaks, main, xlab, ylab, ...)
` |
|  `seq()` |  データを与えられた間隔で分割します。第一引数に開始値、第二引数に終了値、第三引数に間隔を与える。 |  `seq(from, to, by)` |
|  `scale()` |  データをz得点に変換します。 |   |
|  `log()` |  対数変換をします。 |   |
|  `ifelse()` |  ダミー変数の作成に使用します。 |   |

### `hist_object[["element"]]`
`hist()` メソッドで作成されたヒストグラムオブジェクトは、いくつかのプロパティをもちます。利用可能なキー（プロパティ）には以下のようなものがあります：
| プロパティ | 説明 |
|:-:|:-:|
|  `breaks` |  ビンの境界値のベクトル。 |   
|  `counts` |  各ビンに含まれるデータの数（度数）。 |   
|  `density` |  各ビンの密度。 |   
|  `mids` |  各ビンの中心値。 |   
|  `xname` |  元のデータの名前。 |
|  `equidist` |  ビンが等間隔かどうかを示す論理値。 |
robloxでassistant その85

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

# 練習問題
LoadAnimationせよ。

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


local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local kickAnimation = Instance.new("Animation")
kickAnimation.AnimationId = "rbxassetid://507770677"
wait(5)
local kickAnimationTrack = animator:LoadAnimation(kickAnimation)
kickAnimationTrack:Play()
kickAnimationTrack:GetMarkerReachedSignal("KickEnd"):Connect(function(paramString)
	print(paramString)
end)


```



以上。
APIとバッチ処理のリソース管理のポイント

## 1. バッチ処理はリソース管理の優先度が低い
バッチ処理については、APIほどリソース管理に神経を使う必要はありません。
バッチ処理はリクエスト数に左右されず、一定の速度で処理が進むため、秒あたりの処理数が安定しています。これにより、処理時間が長くなることはあっても、リソースの振幅が大きくなることはありません。

そのため、リソース設定においてバッチ処理はそれほど気にする必要がないのです。


## 2. APIはリソースの振幅が大きい
一方、APIはリソースの使用量が大きく変動する可能性があります。

リクエスト数が急増した場合、リソースの消費も急激に増えるため、適切なリソース設定が重要です。
特に、requestsが多すぎると、起動できずにペンディング状態になる恐れがあります。


## 3. RequestsとLimitsの設定の違い
リソース設定には、requestsとlimitsという概念があります。

requestsは最小限必要なリソース量を指定し、
これが満たされないとコンテナは起動しません。

一方、limitsは最大限使用可能なリソース量を指定しますが、
これはクラスタに余裕があれば利用できるという設定です。

つまり、requestsで確保されたリソースの範囲内で動作し、
クラスタに余裕がある場合はlimitsまで利用できるという理解が必要です。


## 4. 平均値と最大値の乖離が小さい場合のリソース設定
アプリケーションの平均リソース使用量（avg）と最大リソース使用量（max）の乖離が小さい場合、requestsとlimitsに近しい値を設定することで、効率的なリソース利用が可能になります。


## 5. 平均値と最大値の乖離が大きい場合の悩み
しかし、平均値と最大値の乖離が大きい場合、リソース設定は悩ましい問題になります。乖離が大きいと、どれだけのリソースをrequestsとして確保し、limitsをどの程度に設定するかを慎重に判断する必要があります。適切なバランスを見つけることが重要であり、リソースの無駄遣いを防ぎつつ、必要な時に十分なリソースを確保することが求められます。
TypeScriptって「構造的部分型」なんだ。っていう話

実装していて **「構造的部分型」** なんて意識していなかったけど、「構造的部分型」をちょっと理解していると、下記のサンプルがなんで実装エラー（静的型チェックエラー）にならず、実行できるのか理解できるよ、っていう話。
```javascript
class Person {
  public talk() {
    console.log('こんちは');
  }
}
 
class Dog {
  public talk() {
    console.log('ワン！');
  }
}

const person = new Person();

const dog: Dog = person; // ←これエラーにならないよ！！

dog.talk();
```
実行結果
```console
こんにちは
```

PersonクラスってDogクラスから派生してるわけでもなく、なんでエラーにならないんだ？？ :thinking:
Javaなら間違いなくエラーになりますよね。

このエラーにならない理由が、**TypeScriptが「構造的部分型（構造的型付け）」型システム**を採用しているからです。

**<mark>構造的部分型は、型の「名前」や「継承関係」ではなく、オブジェクトが持っている「プロパティ」が互換しているかどうか、つまり構造が一致しているかどうかで判断します。</mark>**

先ほどの例では、PersonもDocもtalkメソッドを持っているので、構造的に一致している為エラーになりませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477554/3ecbbd9e-0f6c-e2c6-4bc9-9ce5a82b95e6.png)

なので、こちらはエラーになります。
```javascript
class Person {
  public talk() {
    console.log('こんちは');
  }
}
 
class Dog {
  public bark() {
    console.log('ワン！');
  }
}

const person = new Person();
// エラー: Property 'bark' is missing in type 'Person' but required in type 'Dog'.ts(2741)
const dog: Dog = person; 
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477554/5627d27b-0a7b-ad18-d457-124710639daf.png)



構造的部分型について詳細を理解したい方は、[こちら](https://typescriptbook.jp/reference/values-types-variables/structural-subtyping)をどうぞ。

ところで、**<mark>Javaは「公称型（名前的型付け）」型システムを採用し、型の「名前」、「継承関係」で型が互換しているかどうか判断します。</mark>**

公称型については、[こちら](https://qiita.com/suin/items/52cf80021361168f6b0e)をどうぞ。

TypeScriptもクラスを**公称型クラス**にすることは可能です。
公称型クラスにすることによって、構造が同じでも型不一致になります。

公称型クラスにするには、**非publicなプロパティが1つでもある**と公称型クラスになります。

以下のサンプルは、公称型クラスなので、PersonクラスのインスタンスをDogクラスの変数に代入すると実装エラーになります。
```javascript
class Person {
  private _name: string;

  public constructor(name: string) {
    this._name = name;
  }

  public talk() {
    console.log('こんちは');
  }
}
 
class Dog {
  private _name: string;

  public constructor(name: string) {
    this._name = name;
  }

  public talk() {
    console.log('ワン！');
  }
}

const person = new Person('あおき');
// エラー： Type 'Person' is not assignable to type 'Dog'.  Types have separate declarations of a private property '_name'.ts(2322) 
const dog: Dog = person; 
```

interfaceで公称型にすることができるそうなのですが、TypeScriptの仕様ではなく、テクニックで実現できるようです。
興味がある方は、[こちら](https://qiita.com/suin/items/ae9ed911ebab48c98835)をどうぞ。
国語が苦手、読み書きが辛い

## 国語が苦手

ソフトウェアエンジニアの中には、国語が苦手で、どちらかというと理系科目のほうが好きだった人が多いのではないかと思います。

私も子供の頃から国語が苦手で、筆者の意図や出題者の意図がわからなかったり、少し洒落た言い回し、暗喩がどのようにかかっているか理解できず苦労しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/277166da-bc6e-b487-a389-7154e1ca9ff0.png)


## 社会人になって

社会人になっても、やはり苦手意識はあり自分にはそういう仕事は向いていないと考えていました。

一方で、好きか苦手かは別として、仕事として要求されることはあるので、ちょっとした提案書、現状の分析の資料、打ち合わせ用の補足資料などをつくる機会は多くありました。

20代前半のころ、いつものように資料をつくり、顧客訪問する道中で営業担当に
「自分なんかではなく、他の人に提案資料などを書いてもらったほうが良いのでは？」
という旨を話をしたことがあります。

そのときに
「いや、山内くんの資料は他の人に比べて、とても読みやすく、わかりやすいよ。」
と言われ、長年の国語に対するコンプレックスが少し軽減されるきっかけになりました。

## テクニックや文才がないからこそ

文学の世界と、ビジネス資料の世界では求められるものが異なります。
テクニックや文才がないからこそ、難しい表現ができず、平坦でフローチャートのようなシンプルな構造の文書しか書けませんが、むしろそれが喜ばれることがあります。

ときにはエモーショナルなキャッチコピーや文書が求められることもあるでしょうが、エンジニアが普段つくる文書にそれらの要素が強く求められることは稀でしょうし、そこは分業しやすいポイントでもあります。

## 自ら話をするなら自ら資料をつくるほうがよい

私は国語が苦手であると同様に、人前で話をするのも苦手です。
先の話と同じく、自分がどう捉えているかは別として、社会人になると仕事として要求される機会が多く発生します。

これも苦手だからこそ、テクニックがないからこそのアプローチがあります。

若手時代は上手にできない、アドリブが下手くそだからこそ何度も練習やイメージトレーニングを行いました。
また、他人が書いた提案や補足資料を説明するときにストーリーをうまく組み立てられない、意図を十分に汲み取れないため、自分が話を組み立てやすいよう自らが資料をつくることを心がけました。

説明と資料のどちらか一方を他の人に依頼したときの結果と両方を自分で手掛けるときの結果では、明らかにフィードバックや場の空気が変わります。

私のように、どちらか一方またはその両方に自信がない人こそ、話のポイントがぶれないように自ら資料の作成と説明を行うべきでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/0d5abb02-949b-db94-511b-8c7372436f0e.png)

## 文章を書くのはプログラムを書くのと同じ

小説家でありプログラマーでもある石井大地氏がテレ東のビジネス番組で小説とプログラムを書くのは同じである旨を話していました。
最初に聞いたときは少しぎょっとして、沢山勉強をしてきた賢い人にとってはそうか、くらいに捉えていましたが、数日間その言葉が頭から離れず、よくよく考えると確かにそうだなと思うようになりました。

プログラム言語というように、言語であり機械との意思疎通の手段ではありますが、人にとってもわかりやすく、読み取れるものでなければなりません。

一般文書もプログラムコードも下記の部分においては同一です。

* 文体、コーディングルールを統一する
* 「章・節・段落」、「モジュール・ファイル・メソッド・関数」を適切な粒度で分割する
* 「登場人物・時代背景」、「モジュールや依存クラス」など後に出てくる要素は予め宣言する


石井大地氏の話も、私の国語の苦手意識軽減につながりました。

## でも、未だに苦手

何かを学ぶとき、特にエンジニアが技術要素や考え方を学ぶときは読書やそれに準ずる行為が効果的で合理的な手段です。
動画や外部セミナーなどもありますが、あくまで補足的役割にしかならないと考えています。

本当は漫画や動画をみて過ごせるとよいのですが、そうも言ってられないので、たまにぼーっとページを進めてしまいは戻りを繰り返し読書を進めています。

このような文書を書くのも、おそらく一般的な人の何倍か時間がかかっています。

しかし、これまでの経験上、苦手なことも訓練すると少しはマシになってくるので、しばらくは訓練だと割り切って記事作成に励みたいと思います。

## 「苦手なこと」、「取り組むべきこと」を分けて考える

業務をするうえで、やりたい事とやるべき事が一致すれば楽ですが、そうとも限りません。

* やりたくない事
* やる必要がない事
* やりたい事
* 出来る事
* 出来ない事
* やるべき事

それぞれ、相関はありますが分けて考える必要があります。

ときには、苦手だしやりたくないと考えていることを、外部からは「出来ること」と感じてもらう必要が出てくるのが仕事です。

「求められるなら、まぁやるか」と考えられることがこれからの時代を生きる力かなとも考えています。

## add moreでは柔軟なエンジニアを求めています

株式会社add moreでは、「苦手だけどもやってみましょうかね。」と言ってくれるような物事を柔軟に捉えるエンジニアを募集しています。
ご興味のある方は[コーポレートサイト](https://www.add-more.co.jp/recruit/engineer/)または[Wantedly](https://www.wantedly.com/companies/add-more)からご応募ください。
Google Docs でMarkdown風に入力するときのチートシート

こんにちは。
ALJの江口と申します。

ちょっとしたメモを取りたい場合、Markdown記法は便利ですよね。
Markdown記法に対応したツールはいくつかありますが、Google DocsでもMarkdown風に入力することができます。ただし、対応している書式は多くないようなので、あくまでちょっと便利になる程度だと思います。
また、Markdownの文章が作成できるのではなく Google Docs をMarkdown風に入力できるというだけです。
便利なツールはいろいろありますが、Googleの利用頻度が高いので、GoogleDocsの入力の煩わしさが少し軽減されるだけでもメリットはあるかなと思います。

# 機能をONにするだけで利用可能

Googleの告知文書は以下の通り。
[Compose with Markdown in Google Docs on web](https://workspaceupdates.googleblog.com/2022/03/compose-with-markdown-in-google-docs-on.html)

使い方は、[ツール]-[設定]で機能をONにするだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662107/5b50c381-22d1-d874-c77c-8f65013fe7e9.png)

# 出来ること

| 構文　| 書式  |
|:-:|-:|
| 見出し  | # 見出し1<BR>## 見出し2<BR>### 見出し3<BR>#### 見出し4<BR>##### 見出し5 <BR>###### 見出し6  |
| Bold  |   \*\*bold text**<BR>\_\_bold text__ |
| Italic  | \*Italic*<BR>\_Italic_  |
| Bold and Italic  |  \*\*\*Bold and Italic***<BR>\_\_\_Bold and Italic___ |
| Ordered Lists  |  1. 番号付きリスト |
| Unordered Lists(-) | - リスト| 
| Unordered Lists(*) | * リスト| 
| Link | [Link]\(https://aaa.com/)|
| 打消し | \~打消し~|

テーブルやコードブロックなどは対応していないようです。

# 入力シーン
![out.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662107/426fd7ba-7d6b-ba7e-3438-962c39d54877.gif)
TwitterがXになったことに伴うリダイレクトがおかしい

# はじめに
僕は、TwitterのシェアボタンからMisskeyへシェアすることができる拡張機能、[Twishare to Misskey](https://alpaca-honke.github.io/twishare-to-misskey)（以下Twishare）を開発しております。それにあたってひっかかった問題について書きたいと思います。

一つだけ断らせていただきます。僕はネットワークに関してそこまで詳しくないため、この記事内でも不確定な表現や不確実な表現があるかと思います。今後頑張って勉強していくので、温かい目で見ていただくとともに何か間違いがあればコメントやTwitter（頑なにXとは呼ばない）などで指摘していただけると嬉しいです。また、僕自身はおかしいと感じましたが、もしかしたらこれは専門の方々の中では常套手段なのかもしれないので、その場合も教えていただけたら嬉しいです。

# 記事本文
## 経緯
皆さんご存じの通り、2024年5月にとうとうtwitter.comがx.comにリダイレクトされることとなりました。やめてほしいです。俺の魂は永遠にTwitterにある。（だまr

まあ決まっちゃったことは仕方ないので、Twishareを更新していきたいと思います。

### リダイレクトの仕様を調べる
Twishareでは、`twitter.com/intent/tweet`に遷移したらMisskeyにシェアするかどうか確認する画面を出すようにしていました。（`window.confirm`を使ってUIを自作せずに済ましている。[実際のコード](https://github.com/alpaca-honke/twishare-to-misskey/blob/82be79580e252b42326a2ef7af01fefde1107c67/js_and_css/on_twitter_intent.js#L10)）

このファイルを走らせるかどうかはmanifest.jsonのcontent_scriptsで指定しているのですが、そのURLを変更すればx.com対応ができそうです。

実験しましょう。Twishareを無効化したブラウザで、https://twitter.com/intent/tweet にアクセスしてみましょう。アドレスバーを見ていると、
`twitter.com/intent/tweet` -> `x.com/intent/tweet` -> `x.com/intent/post`
と遷移していることがわかります。

### 実装してみる
詳しい仕様はわからないですが、この仕様で`twitter.com/intent/tweet`とmanifest.jsonで指定しても動作しないようなので、最終的に遷移する`x.com/intent/post`を指定してあげればよさそうです。はい。

## おかしい
**以上のように実装してもなんか動かない。**

詳しくリダイレクトを観察します。

リダイレクトとかまじで触ったこともなかった分野なので、調べながら見てみます。
リダイレクトはサーバーサイドとクライアントサイドがあるらしい。サーバーサイドの場合はステータスコードが30xになるらしい。

以下はURLが`x.com/intent/post`に変わったあたりまでのスクショです。下のほうはたぶん画面描画に関連する取得っぽいのであんま関係なさそうですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2819245/c0f6da07-d8ba-98b6-2714-d7dfd77c13a4.png)

なってますね。
...ところで、ステータスコード302は一時的な移動らしい。もしかしたらtwitter.comに戻ることがあるのかも？コロコロ変えるのやめてほしいなぁ

その後、`x.com/intent/tweet`を取得してますね。
...ん？？`/intent/post` は取得していない？？？

## 仮説
**`x.com/intent/tweet` と `/intent/post`は実体は同じで、前者を読み込んでからアドレスバーだけ何らかで書き換えてるのかもしれない？？？**
そんなことできるのか？

この場合、`x.com/intent/post`にリクエストを送ったという事実はないので、（それはデベロッパーツールを見てもわかる）いくらmanifest.jsonにcontent_scripts指定を書いても実行されませんね。

ということでmanifest.jsonには`x.com/intent/tweet`と記述します。 

## 検証
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2819245/c73fb1a3-0b81-426a-d4b6-3cce9a6652a6.png)

できた。

# さいごに
なんでcontent_scriptsに `twitter.com/intent/tweet` と `x.com/intent/tweet` と `x.com/intent/post` 3つ指定しないのか、と聞かれるかもしれませんが、これするとリダイレクトが実行されるたびに確認画面が出てくるので普通にUXが悪いんです。

Misskeyユーザーの方、ぜひ使ってね。

https://alpaca-honke.github.io/twishare-to-misskey
Power Automate Free ライセンスの自動付与を禁止した場合のフロー実行について

# はじめに
「Power Automateは一部の社員だけが作成できるようにしたいので、それ以外の社員がむやみに作成できないようライセンスをオフにしたい」、「ただしSharePoint上に組み込むフローの実行は、全社員に使わせたい」というお客様の声から色々と調べた内容をまとめました。

# M365テナントに勝手に追加されるライセンス
テナント内の1人以上のユーザーが一度でもPower Automateにアクセスすると、M365テナントに「Microsoft Power Automate Free」という無償ライセンスが自動追加され、テナント内のユーザーにも付与されます。

例えば、Microsoft 365 E3などのライセンスオプションで「Power Automate」のチェックをオフにしていたとしても、この無償ライセンスが付与されることでユーザーのアプリ起動ツールやすべてのアプリの一覧に「Power Automate」のアイコンが表示されるようになってしまいます。

Microsoftの公開情報によると、このライセンスは追跡目的でのみ使用されるとありますが、無償ライセンスが付与されたユーザーはフローの作成、実行などの機能を利用することができます。
ただし無償ライセンスは個人利用が前提のライセンスのため、以下の制限があるとのことです。

<strong>
・SLA 保証がなし<br>
・月間フロー実行回数 750 回<br>
・実行間隔 最大 15 分<br>
・プレミアム機能利用不可（プレミアム コネクタ、UI フロー、Common Data Service 等）<br>
・チーム フロー利用不可<br>
</strong>
※ 2021年1月時点の情報です

# 調査および検証内容
①Microsoft Power Automate Freeライセンスの自動付与を禁止する方法
②Freeライセンスを禁止した状態での各種フローの動作

## ①Microsoft Power Automate Freeライセンスの自動付与を禁止する方法
「ユーザーにMicrosoft Power Automate Freeライセンスが自動付与されるのは困る」、「そもそもテナントに付与されるのも禁止したい」という場合は、PowerShellコマンドで自動的にサインアップされることを禁止することができます。

### 設定コマンド
以下のコマンドを実行することで、Microsoft Power Automate Freeライセンスがテナントに自動サインアップされることを禁止できます。
ただしこのコマンドを実行すると、Power Apps、Power Virtual Agentsの試用版、無償版ライセンスのサインアップもブロックされます。

```PowerShell
# モジュールのインストール（初回のみ）
Install-Module -Name Microsoft.PowerApps.Administration.PowerShell
Install-Module -Name Microsoft.PowerApps.PowerShell -AllowClobber

# 設定コマンド
Remove-AllowedConsentPlans -Types "Internal"
Remove-AllowedConsentPlans -Types "Viral"

# 確認コマンド
Get-AllowedConsentPlans
```
上記の設定コマンドを実施した場合、確認コマンドの実行結果（type）が｛｝（値なし）となります。

詳細は「[参考リンク](#参考リンク)」に記載しているMicrosoftのサイトもご確認ください。

## ②Freeライセンスを禁止した状態での各種フローの動作
「ユーザーにむやみに無償版ライセンスの付与はしたくないけど、SharePoint上のフローは全社的に使わせたい」
そんな要望があった場合に、①の自動付与禁止が適用された状態でどこまで対応できるのか実際に検証してみました。

### 作成したフローと前提
動作確認のために、以下の3パターンのフローを作成しました。
各フロー内で使用している接続は、Power Automate専用アカウント（利用するSharePointサイトやTeamsのチームへの権限あり）で実施しています。

|フローの種類|フローの内容|
| :-- | :-- |
|自動化フロー|SharePointリストにアイテムが新規投稿されたら、特定の列の値を更新する|
|スケジュール済みフロー|1時間ごとに指定したチャネルにリマインドメッセージを投稿する|
|インスタントフロー|選択したSharePointリストアイテムの特定の列の値を更新する|

### テストユーザーの前提
・ライセンスオプションの「Power Automate」のチェックをはずした状態でM365 E3ライセンスを付与
・一般ユーザー想定で、SharePointは投稿権限付与、Teamsはメンバーとして設定

### 実行結果
|フローの種類|結果|
| :-- | :-- |
|自動化フロー|検証用ユーザーが新規投稿したアイテムに対してフローが実行され、エラーなく終了|
|スケジュール済みフロー|検証用ユーザーのアクションに依存しないため、正常にフローが実行|
|インスタントフロー|<font color="red">検証用ユーザーが作成したアイテムを選択してフローを実行しようとすると「失敗しました」のメッセージが表示され実行不可</font>|

エラーになった際の画面イメージは以下のようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3587034/5e454bb8-0f40-eac3-bdb5-9a9f54d545f5.png)

# まとめ
検証の結果より、利用したいフローがインスタントフロー以外であれば、Power Automateライセンスが付与されていない状態でも利用できることがわかりました。
インスタントフローを全社的に利用する必要がある場合は、少なくとも利用対象者に付与するライセンスに内包されているPower Automateのオプションを有効化いただくか、無償ライセンスの自動付与を許容いただく必要がありそうです。

# 参考リンク
[Power Apps と Power Automate の PowerShell サポート：試用ライセンスのブロックコマンド](https://learn.microsoft.com/ja-jp/power-platform/admin/powerapps-powershell#block-trial-licenses-commands)
パラレルクエリとは？


## パラレルクエリとは
重いクエリを１つのプロセスで実行すると時間がかかってしまう為、
複数のプロセスに分散して処理速度を向上させる方法

クエリの実行を並列化することで複数のCPUを使用、性能向上を目指す仕組み
大量のデータに対して集計/分析を行うような場合に効果が期待できる

## 実行方法

1. スキャン
    1. テーブルをいくつかの部分に分けて、それぞれの部分を同時に調べる（スキャンする）
2. ジョイン
    2. 複数のテーブルを組み合わせる操作を、複数のプロセスで分担して同時に行う
3. 集計
    3. データの集計を複数の部分に分けて同時に行い、最後に結果をまとめる

## 使い方

### Oracleの場合

```sql
SELECT /*+ PARALLEL(hoge, n) */ * FROM hoge;
```
https://docs.oracle.com/cd/E15817_01/server.111/e05763/usingpe.htm

### PostgreSQLの場合

```sql
SET max_parallel_workers_per_gather = n;
SELECT * FROM hoge;
```

https://www.postgresql.jp/document/9.6/html/runtime-config-resource.html#guc-max-parallel-workers-per-gather

### Microsoft SQL Serverの場合

SQL Serverは自動的に並列クエリを実行するが、以下を指定することもできる

- 　max degree of parallelism
    - 　クエリが使用できる最大のプロセッサ数を指定する
    - 　デフォルト値は0で、利用可能なすべてのプロセッサを使用する
- 　cost threshold for parallelism
    - 　クエリのコストがこのしきい値を超えた場　合にのみ実行される

https://learn.microsoft.com/ja-jp/sql/database-engine/configure-windows/configure-the-max-degree-of-parallelism-server-configuration-option?view=sql-server-ver16

https://learn.microsoft.com/ja-jp/sql/database-engine/configure-windows/configure-the-cost-threshold-for-parallelism-server-configuration-option?view=sql-server-ver16

### MySQLの場合

ユーザーからのクエリやDDL操作(ALTER,CREATEなど)はシングルスレッドで処理されます
MySQL 8.0以降から[InnoDB](https://qiita.com/s_szk/items/e6f9304c662c6c62ce4c)のクラスタインデックスのページを同時に読み取る機能がパラレルで処理されるようになりました

##### クラスタインデックスとは？
テーブルにプライマリキーが設定されている場合、そのプライマリキーのこと

## 注意点

- 並列処理にはオーバーヘッドが発生するため、常に性能が向上するわけではない
- 多くのクエリが一度に実行されると、リソースの競合が発生することもある
    - スロークエリとか
- 小さなデータセットや単純なクエリにはかえって逆効果となることがある
プルリクエスト　テンプレート　見直し用

# プルリクエストについて
###
## プルリクエストとは
変更したコードをレビュワーに確認してもらうこと
## 記述例
```
## 変更点の概要

どんな変更をしたのか簡単に説明

## 今回変更した点（追加した機能など）

- 変更点
- 変更点
- 変更点

## 今回やらなかったこと（次回プルリクで行うものなど）

なければないでOK

## この変更でできるようになること

何ができるようになるのか

## できなくなること

出来なくなることがあれば記入

## 動作確認

どのような動作確認を行ったか。UIなら画像などあるとありがたい

## その他・疑問点など

伝えておくべきことがあれば記入
```
::: note info
**できるだけ細かくプルリクエストを行う！**
:::
- レビュワーがレビューするコードが多くなりすぎないようにするため
- 問題があったときに素早く対応できる

::: note warn
**マージ先に注意！**
:::
- mainブランチにマージしてはいけない
## レビュー依頼
- ``Reviewers`` : レビュー依頼する人を指定
- ``Assignees`` : 担当者を指定（自分を指定）

# 最後に
ご指摘などあればぜひお願いします！
VSCodeでカッコの色付けが部分的にうまくいかない問題の対処法

# 症状
VSCodeでカッコ(ブラケット)の色付け`editor.bracketPairColorization.enabled`を有効にしていて、一部はうまく色が対応するが一部はそうもいかず、なぜか赤い開きカッコになっていた
ついでに、対応するカッコへの移動(`Ctrl+Shift+\`)も変な場所に移動する

# 原因
不等号記号`>,<`がカッコとして認識されるため。おそらく、`a<b`のような式があると閉じカッコ`>`がないと認識されて周辺のカッコまでバグるのでは

# 対処法
`>,<`をカッコとして認識しないようにする
`Ctrl+Shift+P`>「基本設定: ユーザー設定を開く (JSON)」>setting.jsonの`editor.language.colorizedBracketPairs`を以下のように変更
```setting.json
    "editor.language.colorizedBracketPairs": [
        [
            "[",
            "]"
        ],
        [
            "(",
            ")"
        ],
        [
            "{",
            "}"
        ],
    ],
```
HTMLでのみ`>,<`も対応させたいといった場合は「言語固有の設定」で設定できる

# 参考リンク
https://qiita.com/sentyaanko/items/07e2fb05214ab01dc7b4

https://github.com/microsoft/vscode/issues/149006
【初投稿】はじめまして。えるいーです

## はじめに
閲覧いただきありがとうございます。
ゲームプログラマーを目指す専門学生です。以下、自己紹介をさせていただきます。

## 自己紹介

・生年月日: 2004年5月

・出身地: 三重県鈴鹿市


## 学歴
・卒業: 工業高校（23年3月）

・入学: トライデントコンピュータ専門学校のゲームサイエンス学科（23年4月）

## 趣味
・カードゲーム: 全国大会に1回出場経験あり

・ゲーム: 「格闘」「FPS」「マルチゲーム」など

・外食: 全国各地の料理を楽しむのが好きです！


## ゲーム開発歴
・C++:
24年4月~: 「DXライブラリ」を使って3本のゲームを制作
現在「DirectXtk」を使用して1本のゲームを開発中

・C#:
24年7月~: UnityのScriptをC#で学習中

・Unity:
24年7月~: Unityの使用を開始

## イベント参加履歴

・`23年7月: 学生チーム対抗ゲームジャム2023に参加
公式HPから詳細を確認できます。>https://sgj.pickle.ne.jp/

・`23年9月: 学内コンペティションにて作品を発表

・`23年10月: 学内ゲームジャムに参加し、最優秀賞を受賞
学校公式HPで詳細が確認できます。>https://computer.trident.ac.jp/news/537/

・`24年2月: 進級展にて作品を展示（１年生）

・`24年3月: 学内の１年生ゲームジャムに参加し、最優秀賞を受賞

## これからの展望
・今後は、これまでの開発経験で得た知識や技術を活かしてさらに成長していきたいと考えています。