OmniAICreator/Qiita-1.07M huggingface dataset:
出来ないって言っても良くね？

> —新卒の皆さん、社会は辛いですか？

ええ、そうですよね。社会は辛いです。
私も社会の荒波から外れてビーチで浮き輪浮かべて青い飲み物を飲んで一生を終えたいです。

![epi_photo_11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028663/d78fc602-8369-a266-ef2e-8753c3aa3dc6.jpeg)
（イメージ図）

ですが、その辛さって必ず「社会」が作ってるものですか？
それは少なからず自分に原因があるとしたら・・・？


はい、どうも！
またまた便乗して書いてみました。
今回は会議や業務の進め方、減らし方についてご説明していければと思います。
エンジニアの方もそうでない方もタメになる内容かと思います。

## できない事や難しい事は「できない」という

あなたの上司は夢を語っているのではありません。現実的に達成可能な目標についてです。
それを教えてあげるのは業務を執行する側の責任でもあります。
例えば…

:::note warn
上司
1ヶ月以内にアプリを作れ！
:::

:::note alert
アナタ
は、無理くね？アホじゃね？
:::

ある意味正論です。
ただ状況に応じて、きちんと自分の意見は述べましょう。
ここでやってはいけないのが「そう思ったのにもかかわらず、できます」といったパターンです。
それで1週間後に責められても100%アナタが悪い状況になってしまいます。（無論状況にもよりますが）

なのでこのような思考法で議論しましょう

:::note
アナタ
* 何故1ヶ月なのか？
* 画面だったらできるが、それではダメなのか？
* スケジュールをこうしたらできそうだが、それは可能か？
* 品質は一旦無視していいのか？
:::
他にもありますが、観点としては大事です。
共通する事は「オーダーには添えないけど、できる為に前向きに考えている」という事です。

アナタがお洋服を買いたいと思っていて
* 「ありません」の一言で終了されるパターン
* 「あります」って言われて背汗びっしょりで裏でミシン縫われてるパターン

どちらもいい印象は抱かないと思います。
ならば
* 今ここにはないが、いつまでに/何故欲しいのか？
    * 冠婚葬祭で着るの？デートがあるの？とか目的を聞く
* 他の店舗の取り寄せでも構わないか？

こういった回答をしてくれた方が良いと思います。
最初にできませんと突っぱねるよりかは大分理解を示してくれると思います。（そうじゃなきゃクソブラックなので弊社にでも転職してください）

### むしろ大事なのはできないという事実より、何故できなかったの検証が大事

何故できなかったのでしょうか。予算、スキル、チーム体制、環境。色々とあると思います。

例えば

* 企画から執行できなかった→タスク化されていない
* なあなあになってしまった→進捗管理をしていなかった
* どうしたら進捗管理できる→定例を開く等

ただ馬鹿正直に定例を開くことが善と言ってるわけではありません。
意味もなく定例をするのは悪ですが、目的を持って何かをするのは社員のモチベーションに繋がるし、あなたが下がったら意味を聞けばいいのです。

また、社内の状態や体調に応じて必要の可否も変わります。
> 昔はメールで回答してたけど、今はSlackになった。

こういうのもその典型例です。技術の進歩などでも状況が変わってきます。その時の状態で100点の定義が変わります。
その為に現場からのコミュニケーションが非常に大事になってきますし、あなたのプライベートを守り仕事のストレスから解放される手助けになります。

## できない事は悪ではない

むしろ納得して業務をしない事が一番の悪です。
納得できない場合は議論してみて、納得できるように頭を進めてみてください。
無論リーダーはそれを伝える責任がありますが、伝えられた上で理解できなかったら有耶無耶にせず確認を取る必要があります。

## チーム連携を必ず意識する

あなたは1人じゃありません。
同僚や先輩、上司などがいると思います（違ったらスミマセン）
これは困ったぞという時は必ず周りに目を向けてみましょう。

* 誰かに頼れるタスクはないか
* 誰か巻き取ってくれないか
* 巻き取ってもらったら、その借りをどう返すのか？

利用される人間と感謝される人間の違いは「本当に困ってるときに助けになってくれる人かどうか」です。

困ってないのに巻き取っても相手はラッキー位にしか感じません。
しかもそれが生産性のない作業だったら、ただのボランティアです。

これらを意識して貸しを沢山作って、いざという時にお願いしましょう。素敵な人であれば必ず助ける方向で考えてくれるはずです。

貸しを作れてない人はそこから始めてみましょう。
（押し付けだけしてくる上司はクソブラックなので弊社にでもry）

## 目標を高望みしない

疲れます。
やめましょう。

モチベーションタイプの人間あるあるなんですが、海賊王に俺はなる！と言い放った一ヶ月後に海にすら出てないパターンがあります。

ちゃんと階段があってそれを細かく千切りすることが大事です。

* 海に出る船もないのに海賊王になれますか？
* 船ってどうやって手に入れるか分かってますか？

ちゃんと実務ベースで落とし込まないと一生悩みます。
どう実現させるか、今は何ができるか、できないかを理解しましょう。
（無論無茶ぶりだけ言って丸投げ上司はry)

ちゃんと自分の過去の振る舞いを見直しをして、弱点を把握してそれを人に共有することが大事です。

過去面倒を見ていた社員（今は上流エンジニアです）の話ですが、以前プレゼンが未経験だったのですが

> 「過去の自分を振り返ると、本番に強くないからゲネプロを見て欲しい」

と私が言う前に伝えてくれました。恐らく彼が成長できているのは自分の弱点を知り、それを未然に対策を取っていたからですね。

万能な人間などいません。
自分を知り相手に伝えるのは悪いことではありません。


## まとめ
右も左も分からずに困ってる方の助けになればと思い、書かせて頂きました。
* 具体的にどうやって上司に相談するの？
* 顧客の場合はどうするの？
* 他にはどんな考え方が大事なの？

などなど。
事象をあげてくだされば詳細にお答えすることが可能なので、新人さんや学生さんの手助けになれればと思っています。


その際はお気軽に[弊社公式TwitterのDM](https://twitter.com/obg_ocr)や[マシュマロ](https://marshmallow-qa.com/obg_ocr?utm_medium=twitter&utm_source=promotion)でお答えしますので、お気軽にご連絡いただければ幸いです。

ここまでお読み頂きありがとうございました！
RubyでProxy経由でファイルをPOSTする時のサンプル

RubyでProxy経由でファイルをPOSTする時のサンプル。

ステージング環境がプロキシ経由じゃないと接続できない&Null Byte Injectionの検証のため、NULLを持ったファイルパスを送信する必要があり、cURLではなくプログラムからファイルを送信する必要があったため。

```Shell
$ ruby --version
ruby 3.2.0 (2022-12-25 revision a528908271) [x86_64-darwin20]
```

```Ruby
require("net/http")
require("uri")

uri = URI.parse("http://localhost:8080") # 接続先のURLはダミーです
uri.path = '/testpath'

image_file = File.open("image_file_path.png", "rb")
begin
  data = [
    [ "image_file", image_file, { filename: "image_file_path.png", content_type: "image/png" } ]
  ]

  proxy = Net::HTTP::Proxy("111.111.111.111", 1111) # プロキシはダミーです
  https = proxy.new(uri.host, uri.port)
  https.use_ssl = true # HTTPSで接続する場合

  req = Net::HTTP::Post.new(uri.path)
  req.set_form(data, "multipart/form-data")

  res = https.start do
    https.request(req)
  end
  puts res
ensure
  image_file.close
end
```

HTTPS接続の設定わすれてて少しハマった。。
伝えたいことを確実に伝えるためのプレゼン資料作り


# はじめに

伝わるプレゼン資料を作るには、どういう思考回路で全体のストーリーを考えたらよいか？について、経験をベースに方法論を書いています。

# この記事の対象者

- プレゼン資料の内容を構成するのが苦手な人

# 資料作成プロセス

資料を作るときに私が意識しているポイントです。

:::note info

1. プレゼンで**1番伝えたいこと**を決める。（プレゼンのメインメッセージ、相手にどういう状態になって欲しいか（承認をもらう、買ってもらうなど）？を意識する）

1. **メインメッセージを的確に伝えるための要素**を考える。

1. ２で出した要素を優先順位付けし、どの順番で話すか考える
:::

## プレゼンで1番伝えたいことを決める

プレゼンで何をメインメッセージとするか？を決めます。これがプレゼン内容の軸になるため、これを見誤ると資料の手戻りが発生しやすいです。

:::note info
資料作成中も**常にこのメッセージが伝わる内容になっているか？** を意識しなければなりません。
:::

# メインメッセージを的確に伝えるための要素を考える

例えば、「新しくポケモンをはじめて欲しい」というメインメッセージを掲げて、ポケモンの魅力を伝える例を考えてみましょう。

魅力を伝えるためには、

- 豊富なキャラクター
- ゲームのストーリー
- キャラクターの魅力
- ポケモンのタイプや能力、特性など
- ゲームやカードの対戦
etc...

などのように話す要素が色々あります。ポケモンのゲームの魅力を伝えたいのであれば、ストーリーの話があった方が興味を持ってもらえるかも？などのように考えていきます。

このように、伝えたいことを伝えるために必要なエピソードをたくさん出していくフェーズです。

## エピソードの優先順位・構成を考える

伝えたいことを伝えるために必要なエピソードが出たら、それらを優先順位付けしてどういった順で話すと効果的か？を考えます。

不要なエピソードが乱立しないように、各スライドの意図を言語化しながらストーリー構成を考えていくと効果的です。
また、最終的にメインメッセージが伝わる構成にできているか常に注意が必要です。

:::note info
スライドの内容を考えていると、結局何を言いたいのか分からなくなることがあります。そんな時は、メインメッセージを思い出して、自分は何を伝えたいのか？を振り返りましょう。
:::

![ストーリー構成の考え方.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518403/281a2f36-b6b9-7446-e7f8-f3f63b05f42e.png)


メインメッセージを常に意識して資料を作成することで、プレゼンのストーリーがしっかりしたものになるので、伝えたいことが相手に的確に伝わるようになりやすいです。

# まとめ

伝えたいことを確実に伝えるためのプレゼン資料作りについて書きました。
プレゼン資料の構成を練るのが苦手な人は是非トライしてみてください。
自身の成長を促すための効果的な振り返り

# はじめに

この記事では、振り返りの重要性、具体的に振り返りをどうやったかを経験則で書きます。

メンター、およびメンティー両方の経験をベースに新入社員時代から身に着けるべき振り返りのノウハウを紹介します。

※ 内容はSE色が強い部分があります。

# この記事の対象者

- 新入社員
- 新入社員のメンターになったがどういうアドバイスをしていくべきか分からない人
- 振り返りが大事な理由がピンとこない人

# そもそも振り返りとは？

仕事などの経験には２種類あり、自ら学習して身に着けていく経験、普段の業務などで知らず知らずのうちに身に付いた経験があります。

振り返りは、知らず知らずのうちに身に付いた経験を認知することで、スキルアップのスピードを上げるためのアクションとここでは定義します。


:::note info
自身ができたこと、できなかったことを整理して次どういうアクションを取るべきかを明確にすることで、自身のロードマップを描きやすくなります。
:::

# 振り返りによって目指す長期的なゴールを決める

- 自分の理想の働き方（または人生）を手に入れること

振り返りの究極的なゴールはこれではないかと個人的には考えています。

:::note info
上記ゴールが正解ではないので「私はこうありたいんだ！」というゴールを自分で定義しましょう。
振り返りの効果を実感するためにはゴールの設定が効果的です。
:::

# 振り返りによって目指す直近のゴールを決める

- 自身のタスクを効率的に行えるようになる
- 自身の担当できる範囲を拡げる
etc...

:::note info
理想に近づくためのチェックポイントに到達することを直近のゴールにします。
達成感を感じやすくするとモチベーションアップになります。
:::

# 振り返りは継続が命

:::note alert
自分の理想の状態になっていくには、一度振り返れば十分というわけにはいきません。
:::

:::note info
**日々の業務の学びをピックアップして、次どうするべきか？を考えることを繰り返して、業務のパフォーマンスを上げていく必要があります。そうすると、結果的にできることが増えていた、所定の領域に自信が付いたという状態になります。**
:::


理想は振り返りを習慣化することです。毎週特定の曜日の何時から振り返りを行うなど、生活や業務の中に根付かせることができれば良いです。


継続的な振り返りを行うためのコツは以下の記事が参考になりました。

- [「振り返りって意味あるの？」に答えます](https://aruga.site/posts/media-reflection-mean)



# 振り返りの具体的なプロセス

振り返りをするときは、こんな風に実施すると良いという例を出します。

:::note info

1. **網羅的**に自身の業務について振り返る。

1. タスクごとに**良かった点**、**伸びしろ**を深掘りする。深掘りの帰結として **結局何を学んだのか？次何をするべきか？** をアウトプット（言語化）する。

1. 学んだことを**カテゴライズ**する。（テクニカルスキル、ヒューマンスキルとか。適宜カテゴリ項目は考える。）

1. 可能であれば先輩などに見てもらい**フィードバック**をもらう
:::

各セクションの詳細は後述します。

## 網羅的に自身の業務について振り返る

**網羅的**であることがポイントです。網羅的に振り返りを行うことで、自身が何をできるようになったか、何ができていないかを洗いざらい可視化できます。


## タスクごとに良かった点、伸びしろを深掘りする


網羅的にリストアップした経験を深堀していきます。タスク単位当たりの振り返りフォーマットとして、以下のように振り返ると学んだことを引き出しやすかったです。

- **成功体験に関する振り返り**
:::note info
失敗ばかり振り返るとメンタル的に辛くなるので、自分ができたことにフォーカスするのも大切です。
普段気付かなかった自身の強みが見えてくるかもしれません。
:::
![成功体験.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518403/f7440c08-0328-c746-a93d-80f7730b11b2.png)

- **つまづいた経験（伸びしろ）に関する振り返り**
:::note warn
以下のようなフォーマットにしていますが、改善アクションを講じる必要がない学びもあると思います。（先輩の姿をみて感じたことなど）
必ず次のアクションが必要というわけではないので、匙加減は自信で決める必要があります。
:::

![つまづいた経験.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518403/d768be2c-0bdc-975a-5ade-b8b0ada237c7.png)


## 学んだことをカテゴライズする

網羅的な振り返りを通して、学んだことが複数出てくるはずです。アウトプットした学びをカテゴライズすることで、自身の強みと弱点を整理しやすくなります。

- **カテゴリー例**
    - テクニカル的な学び
    - 自身の取り組みに対する気づき
    - 足りていない知識・経験
    etc..

## 可能であれば先輩などに見てもらいフィードバックをもらう
:::note info
自己完結の振り返りだと、**自分では気づいていないポテンシャルや弱み**を放置したままになる可能性があります。メンターなどの先輩に振り返り結果をレビューしてもらうことで、**自分では思いつけなかったの観点**を知ることができるかもしれません。
:::

# 振り返りに有効なツール

振り返りを行う上で有効だったツールをいくつか紹介します。

## 自己完結な振り返りを行う場合

- [Xmind](https://jp.xmind.net/)
マインドマップを作成できるツールです。中心となるキーワードから樹形図的に思考をめぐらしていきます。
他者に自分の振り返りを共有するには使いづらい側面があったので、自分だけで振り返りをしたい場合に有効ではないかと思います。

## メンターなどに振り返り内容をレビューしてもらう場合

- [Mural](https://www.mural.co/)
ホワイトボードツールで、オンライン上で複数人で編集しながら付箋を貼っていけるツールです。メンターとメンティーがディスカッションしながら振り返りを行う場合などに有効でした。


# まとめ

メンター、およびメンティー両方の経験をベースに新入社員時代から身に着けるべき振り返りのノウハウを紹介しました。
振り返り方法で悩んでいる方は是非トライしてみてください。
B2C Commerce のその他 Salesforce 製品との接続 - Commerce Cloud Tableau Connector


※ これから記載する事項は、私が所属する会社とは切関係のない事柄です。

今回は[「B2C Commerce のその他 Salesforce 製品との接続」シリーズ](https://qiita.com/syunyama/items/366fcbc315be5e5c252f)として B2C Commerce と Tableau の接続について紹介したいと思います。

![Cross Cloud (15) (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/0517233a-0a90-2d89-efa2-f5dd759ce73f.jpeg)





## 接続内容とポイント

* B2C Commerce のデータを Tableau に送信し、そのデータを利用して分析を行えます。
* Tableau Desktop を利用します。ダウンロードは[こちら](https://www.tableau.com/ja-jp/support/releases)から可能です。



## 接続方法

接続の方法は下記の２つの手順で行います


#### 1. Account Manager からAPI Client の作成（[ヘルプ](https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/analytics/b2c_generate_api_client_id.html?cp=0_5_18_0_4_0)）

* [Account Manager](https://account.demandware.com/) にアクセス
* 「API Client 」タブに切り替え、「Add API Client」ボタンをクリック
* 下記のように入力し、「Save」ボタンをクリック。
    * 入力時のポイント
        * Organizations 自分の組織を設定
        * Roles に「Salesforce Commerce API」と自分が利用している B2B Commerce のインスタンスを設定する
        * Default Scope に「tenantFilter」と「roles」の入力
        * Token Endpoint Auth Method に「client_secret_post」を選択
    * ここで入力したパスワードは後に利用するので控えておく
    * ![FireShot Capture 001 - Commerce Cloud Account Manager - account.demandware.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/696f1f1e-3176-6978-331d-13184564d822.png)

* 保存後は ID が表示されるので、それも控えておく。
![スクリーンショット 2023-04-14 16.40.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/b5d2e93a-4157-b1fc-e89c-d9a07c37203d.png)


#### 2.  Tableau Connector の設定（[ヘルプ](https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/analytics/b2c_launch_the_tableau_commector.html?cp=0_5_18_0_4_1)）

* Tableau Desktop を開いて「Web データコネクタ」を選択します
![スクリーンショット 2023-04-14 17.00.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/cfefbe93-ce90-ce82-2562-952b31bad383.png)


* `https://ccac.analytics.demandware.com/twdc/` へアクセスし、上記の API Client 作成時に控えておいた ID、パスワードを入力します
![スクリーンショット 2023-04-14 17.01.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/d056b0f3-46f1-45e9-2998-81e9d31013e8.png)



* 連携させたい属性とメトリックスを選択してデータソースを作成します

![スクリーンショット 2023-04-14 17.03.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/f0b897e7-b209-106b-f0af-67ababa57803.png)



## 接続データとポイント

* 接続できるデータは「[Commerce Cloud Data Subject Areas](https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/analytics/b2c_commerce_cloud_data_subject_areas.html?cp=0_5_18_0_3)」から確認してください



## リソース

* [【動画】Connect Commerce to Tableau](https://salesforce.vidyard.com/watch/kQnWc4aG3L2Gjtm3dzTQbZ)
* [Tableau Desktop の使い方](https://www.tableau.com/ja-jp/support/desktop)
単体テストでチェックすること

正常値テスト: 期待される正しい入力値を使用して、機能が正常に動作するかを確認します。

異常値テスト: 不正な入力値を使用して、エラーハンドリングが適切に行われるかを確認します。

境界値テスト: 入力値の範囲の境界でテストを行い、範囲内と範囲外の入力値が適切に処理されるかを確認します。

空入力テスト: 入力が空の場合に、適切なエラーメッセージが表示されるかや、機能が正常に動作しないことを確認します。

長さチェック: 入力値の長さが最大値や最小値を超えた場合に、適切なエラーメッセージが表示されるかを確認します。

文字種チェック: 入力値に使用できる文字種が制限されている場合、制限に従った入力値で機能が正常に動作するかを確認します。

書式チェック: 入力値が特定の書式に従っているかを確認し、従っていない場合に適切なエラーメッセージが表示されるかを確認します。例えば、電話番号やメールアドレスなど。

数値範囲チェック: 入力値が数値の場合、最大値や最小値を超えていないかを確認し、超えている場合に適切なエラーメッセージが表示されるかを確認します。
dockerコマンド

## 書いた目的

- Dockerのコマンドの役割とまとめ
- mermaid記法の学習

## コンセプト

- dockerのライフタイムサイクルの観点から見た場合のそれぞれのコマンドの役割

```mermaid
graph LR
A[Docker ライフタイムサイクル]
A --> B1[イメージの作成]
B1 --> C1[Dockerfile]
B1 --> C2[docker build コマンド]

A --> B2[イメージの保存と共有]
B2 --> C3[Docker Hub]
B2 --> C4[プライベートレジストリ]

A --> B3[コンテナの作成]
B3 --> C5[docker run コマンド]

A --> B4[コンテナの起動]
B4 --> C6[docker start コマンド]

A --> B5[コンテナの停止]
B5 --> C7[docker stop コマンド]

A --> B6[コンテナの再起動]
B6 --> C8[docker restart コマンド]

A --> B7[コンテナの削除]
B7 --> C9[docker rm コマンド]

A --> B8[イメージの削除]
B8 --> C10[docker rmi コマンド]

A --> B9[コンテナの監視とログ]
B9 --> C11[docker logs コマンド]
B9 --> C12[docker stats コマンド]

A --> B10[ネットワーキング]
B10 --> C13[ブリッジネットワーク]
B10 --> C14[ホストネットワーク]

A --> B11[ボリュームとデータ管理]
B11 --> C15[ボリュームの作成]
B11 --> C16[ボリュームのマウント]
```


```mermaid
graph LR
A[Docker ライフタイムサイクル]
A --> B1[イメージの作成]
B1 --> C1[Dockerfile]
B1 --> C2[docker build コマンド]

B1 --> B2[イメージの保存と共有]
B2 --> C3[Docker Hub]
B2 --> C4[プライベートレジストリ]

B2 --> B3[コンテナの作成]
B3 --> C5[docker run コマンド]

B3 --> B4[コンテナの起動]
B4 --> C6[docker start コマンド]

B4 --> B5[コンテナの停止]
B5 --> C7[docker stop コマンド]

B5 --> B6[コンテナの再起動]
B6 --> C8[docker restart コマンド]

B6 --> B7[コンテナの削除]
B7 --> C9[docker rm コマンド]

B7 --> B8[イメージの削除]
B8 --> C10[docker rmi コマンド]

B8 --> B9[コンテナの監視とログ]
B9 --> C11[docker logs コマンド]
B9 --> C12[docker stats コマンド]

B9 --> B10[ネットワーキング]
B10 --> C13[ブリッジネットワーク]
B10 --> C14[ホストネットワーク]

B10 --> B11[ボリュームとデータ管理]
B11 --> C15[ボリュームの作成]
B11 --> C16[ボリュームのマウント]

```
ラズパイ TimeCapsule - Netatalk `Local name collision` エラー

`Failed to add service: Local name collision` の修正をしていく。

```
root@myCloud:/home/r-goto# service netatalk status
● netatalk.service - Netatalk AFP fileserver for Macintosh clients
   Loaded: loaded (/lib/systemd/system/netatalk.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
~
Apr 14 16:40:22 myCloud netatalk[7780]: Failed to add service: Local name collision
Apr 14 16:40:22 myCloud netatalk[7780]: Registered with Zeroconf
```


> zeroconf name = name (G)
登録サービスをユニークに表した、人間が読めるnameを設定する。このzeroconf nameは最大長63オクテット（バイト）のUTF-8で宣伝される。netatalkがZeroconfをサポートしなければならないことに注意してください。


上記引用文`netatalk.conf` [ドキュメント](https://netatalk-doc-ja.osdn.jp/3.1/htmldocs/afp.conf.5.html)の通り以下のようにすることで、collision エラーを解消することができる。

```
[Global]
; Global server settings
  mimic model = TimeCapsule6,106
  mac charset = MAC_JAPANESE
  zeroconf name = ZeroTime
```

正常に起動でき、無事バックアップ作成することができた。

```
root@myCloud:/home/r-goto# service netatalk status
● netatalk.service - Netatalk AFP fileserver for Macintosh clients
   Loaded: loaded (/lib/systemd/system/netatalk.service; disabled; vendor preset: enabled)
   Active: active (running) since Fri 2023-04-14 16:40:59 JST; 5s ago
     Docs: man:afp.conf(5)
           man:netatalk(8)
           man:afpd(8)
           man:cnid_metad(8)
           man:cnid_dbd(8)
           http://netatalk.sourceforge.net/
  Process: 7868 ExecStart=/usr/sbin/netatalk (code=exited, status=0/SUCCESS)
 Main PID: 7870 (netatalk)
    Tasks: 4 (limit: 4915)
   CGroup: /system.slice/netatalk.service
           ├─7870 /usr/sbin/netatalk
           ├─7871 /usr/sbin/afpd -d -F /etc/netatalk/afp.conf
           └─7872 /usr/sbin/cnid_metad -d -F /etc/netatalk/afp.conf

Apr 14 16:40:59 myCloud systemd[1]: Starting Netatalk AFP fileserver for Macintosh clients...
Apr 14 16:40:59 myCloud systemd[1]: netatalk.service: Can't open PID file /var/lock/netatalk (ye
Apr 14 16:40:59 myCloud netatalk[7870]: Netatalk AFP server starting
Apr 14 16:40:59 myCloud systemd[1]: Started Netatalk AFP fileserver for Macintosh clients.
Apr 14 16:40:59 myCloud netatalk[7870]: Registered with Zeroconf
Apr 14 16:40:59 myCloud cnid_metad[7872]: CNID Server listening on localhost:4700
Apr 14 16:41:04 myCloud afpd[7871]: Netatalk AFP/TCP listening on 192.168.0.202:548
```

- バージョン情報
```
root@myCloud:/home/r-goto# netatalk -V 
netatalk 3.1.12 - Netatalk AFP server service controller daemon
```
```
root@myCloud:/home/r-goto# lsb_release -a
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 10 (buster)
Release:	10
Codename:	buster
```
```
root@myCloud:/home/r-goto# uname -a
Linux myCloud 5.10.103-v7l+ #1529 SMP Tue Mar 8 12:24:00 GMT 2022 armv7l GNU/Linux
```
```
root@myCloud:/home/r-goto# cat /proc/device-tree/model
Raspberry Pi 4 Model B Rev 1.2
```
【Unity】WebGLでjslib内の共通メソッドを呼び出す

# はじめに
Unity WebGLでブラウザの機能を呼び出す際はJavaScriptとは少し異なるjslib（JavaScript Library）を利用することになりますが、jslib内で同一スコープ内の共通メソッド呼び出し時には特殊な手続きが必要となるため、その方法について説明します。

# 基本ルール
1. 呼び出し時のみ関数名のプレフィックスにアンダースコアが必要（例: _FancCommon）
    * メソッド名はビルド後にプレフィックスが付与される
    * メソッド定義はアンダースコアの記述は不要
1. C#から呼び出されない共通メソッドはコンパイル時に削除されるため、依存性の宣言が必要（例: FancA__deps: ['FancCommon']）
    * 依存性の宣言は１メソッドあたり一つがあればストリッピング対象から外れるため、以下のサンプルコードの様に２箇所に`***__deｐｓ`を記述しなくても動作する
# サンプルコード
以下に、jslibで共通メソッドを呼び出すサンプルコードを示します。
```js:SampleJslib.jslib
var LibraryMyPlugin = {
    // 依存関係の宣言でメソッドの削除を抑制
    FancA__deps: ['_FancCommon'],
    FancB__deps: ['_FancCommon'], // こちらは省略可能

    FancCommon: function (value) {
        // 共通の処理
        console.log("共通メソッドが呼び出されました: " + value);
    },

    FancA: function (param) {
        console.log("FancAが呼び出されました");
        // 共通メソッドの呼び出し
        _FancCommon(param);
    },

    FancB: function (param) {
        console.log("FancBが呼び出されました");
        // 共通メソッドの呼び出し
        _FancCommon(param);
    },
};

mergeInto(LibraryManager.library, LibraryMyPlugin);
```

# 【おまけ】C#からjslibの関数を呼び出す部分
jslibの関数をC#から呼び出すためには、C#内で外部関数を宣言し、DllImport属性を使用します。
以下に、C#から先ほどのサンプルコード内のFancAとFancBを呼び出す方法を示します。

```cs
using System.Runtime.InteropServices;
using UnityEngine;

public class SamplePluginCaller : MonoBehaviour
{
    // jslibの関数を宣言
    [DllImport("__Internal")]
    private static extern void FancA(int param);

    [DllImport("__Internal")]
    private static extern void FancB(int param);

    void Start()
    {
        // jslibの関数を呼び出す
        FancA(10);
        FancB(20);
    }
}
```
Laravel Sail使用時にStorage内の画像を表示させるには

定期的に詰まるのでメモ

# 　結論：コンテナ内で``php artisan storage:link``をする

## 　手順
+ ホストPCのpublic内のsymlinkを削除する
+ VScodeのリモートエクスプローラーなど好きな方法でコンテナに入る
+ コンテナ内で``php artisan storage:link``をする

左がホストPC、右がコンテナの/var/www/html内のpublicとなれば成功（作業前はこれが逆になっている）
![Code36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302698/9ffb13bf-e782-93d2-bcea-b03120c1a1f7.png)![Code37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302698/9ba27876-c961-ebf9-7e26-2f3b801499d5.png)



## 　理由
　symlinkはStorageと異なりホストとコンテナで同期せず、コンテナ内のサーバーは/var/www/html以下のpublic内のsymlinkから画像などを探そうとするため。

### 　ペイントで作った雑な図
![public symlink.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302698/88984cb0-65b1-4ec6-aedd-41c998467625.png)
HTML版カウントアップ・ダウンタイマーアプリを作成する

### 前提
本資料は、カウントアップタイマーとカウントダウンタイマーを表示するアプリの設計書である。
アプリは、HTML、CSS、Javascriptを用いて実装する。
また、以下の3つの機能をもつ。　　
1. 0秒から1秒ずつ、59分59分までカウントアップする
1. 1分から1秒ずつ、0秒までカウントダウンする
1. 切り替えボタンの押下によって、カウントアップタイマー画面とカウントダウンタイマー画面を切り替える


### 目次
1. 画面設計
1. 機能設計　　　　　
1. データ設計


### 1. 画面設計
今回作成する画面の構成要素と、作成イメージの設計書を記載する。
画面は以下の2つの要素を持つ。
|No. |項目名|I/O|部品種別|初期値|説明|
|---|---|---|---|---|---|
|1  |タイトル|O  |ラベル |タイマー  |タイトル|
|2  |時間|I/O  |ラベル |00:00 |表示される値は機能1、2によって更新する|
|3  |切り替えボタン |I |ボタン|カウントダウン |機能3によってカウントダウン画面が表示されているときの設定値は「カウントアップ」である|

画面のイメージ図は以下である。
■初期画面・カウントアップ画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329691/a02a0ca8-9a2e-fe1b-87a7-5908c5ecfc6a.png)

■カウントダウン画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329691/550f3c91-e26c-d80f-d625-97d37e44ca5c.png)


### 2. 機能設計
今回作成するアプリがもつ、3つの機能の設計を記載する。

|No. |機能名|いつ実行するか|どういう機能|
|---|---|---|---|
|1  |カウントアップタイマー機能|ページが表示された時 |・0秒から1秒ずつカウントアップ<br>・59分59秒で処理が止まる<br>・タイマーが切り替わっても、カウントアップし続ける |
|2  |カウントダウンタイマー機能|切り替えボタン押下時 |・1分0秒から1秒ずつカウントダウン<br>・0分0秒で処理が止まる<br>・タイマーが切り替わっても、カウントダウンし続ける|
|3  |画面切り替え機能 |切り替えボタン押下時 |・カウントアップタイマー画面とカウントダウンタイマー画面を切り替える|

### 3. データ設計
今回作成するアプリが保持する2つの情報の設計を記載する。

|No. |論理名|物理名|型|どこで使われるか|説明|
|---|---|---|---|---|---|
|1  |timeInSeconds|タイマーの秒 |string|機能1、機能2|タイマーが表示する秒数|
|2  |isCountingUp|表示中の画面 |boolean|機能3|表示中の画面を表すフラグ<br>trueの場合: カウントアップタイマー画面<br>falseの場合: カウントダウンタイマー画面|
DatabricksでDolly 2.0を動かしてみる


こちらの続編です。

https://qiita.com/taka_yayoi/items/d60200adac75812b69ad

すでに動かして、チャットサーバーまで立てられている方もいらっしゃいます。

https://qiita.com/riversun/items/7c45580f1a098b041528

こちらのモデルを使用します。なお、より小規模なGPUで動作する[dolly-v2-3b](https://huggingface.co/databricks/dolly-v2-3b)、[dolly-v2-7b](https://huggingface.co/databricks/dolly-v2-7b)も公開されています。

https://huggingface.co/databricks/dolly-v2-12b

`g5-48xlarge`のスペックのクラスターを使っています。
![Screenshot 2023-04-14 at 16.21.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2b7bcfec-54f7-a9c0-865a-bc544a742b50.png)

```
%pip install accelerate>=0.12.0 transformers[torch]==4.25.1
```

```py:Python
import torch
from transformers import pipeline

generate_text = pipeline(model="databricks/dolly-v2-12b", torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto")
```

核分裂と核融合の違いを説明してください。

```py:Python
generate_text("Explain to me the difference between nuclear fission and fusion.")
```

> Out[2]: "Nuclear fission and fusion is how the nucleus of an atom splits and combines itself into a more reduced size. Nuclear fission is how material was split from an element during it'sBreakdown into simpler elements. Nuclear fusion is how two simpler elements were combined to make a new more complex element. Nuclear fission is most common in radioactive isotopes of Uranium and Plutonium, these isotopes have a nuclear structure that can split into two smaller isotopes. Nuclear fusion is how the nuclei of the two lighter isotopes of hydrogen (deuterium and tritium) can join to create a stable isotope of helium, Helium-3."

> 核分裂と核融合は、原子核が分裂する、あるいは、自身をより小さいサイズに結合する過程を意味します。核分裂は、よりシンプルな元素へのブレークダウンを通じて要素から物質が分割される過程です。核融合は、新たなより複雑な元素を作り出すために、二つのシンプルな元素が結合される過程です。核分裂は、ウラニウムとプルトニウムの放射性アイソトープでは最も一般的で、これらのアイソトープは二つのより小さいアイソトープに分割できる核構造を有しています。核融合は、ヘリウムやHelium-3の安定したアイソトープを作成するために、より軽い水素のアイソトープ(デューテリウム、トリチウム)の原子核が結合する過程です。

Databricksとはなんですか？

```py:Python
generate_text("What is databricks?")
```

> Out[6]: 'Databricks is an American software company headquartered in San Francisco that develops a cross-platform data platform. The company was founded in 2013 by Ali Ghodsi, Andy Konwinski, Arsalan Tavakoli-Shiraji, Ion Stoica, Matei Zaharia, Patrick Wendell and Reynold Xin.'

> Databricksはクロスプラットフォームのデータプラットフォームを開発する、サンフランシスコに本社があるアメリカの企業です。この企業はAli Ghodsi, Andy Konwinski, Arsalan Tavakoli-Shiraji, Ion Stoica, Matei Zaharia, Patrick Wendell and Reynold Xinによって2013年に創業されました。

人工知能とはなんですか？

```py:Python
generate_text("What is artificial intelligence?")
```

> Out[7]: 'AI is a branch of computer science that focuses on how to create computers that can think and do what is equivalent to human intelligence. AI is most commonly used in mobile phones and virtual assistants like Alexa.'

> AIは、考えることができ、人間の知性と同じことを行えるコンピューターを作成する方法にフォーカスするコンピューターサイエンスの１分派です。

英語だと結構きちんとした回答が返ってきます。

続きはこちら。

https://qiita.com/taka_yayoi/items/e82af6a504dce3d0be1f

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
Djangoスタートアップ その9 (mediaフォルダ編)

# mediaフォルダとは
ユーザーがアップロードした画像ファイルを保存しておくフォルダ

# `settings.py`に`media`ルートの設定
- MEDIA_URL : ブラウザからアクセスする際のアドレス
- MEDIA_ROOT : 画像ファイルを読み込みに行く先のフォルダ


```python:settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
```

# アプリケーション直下のurls.pyに追記
```python:urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
```

# template側でメディアファイルを扱えるように設定する
```python:settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                ・・・
                'django.template.context_processors.media'
            ],
        },
    },
]
```

# テンプレートファイルから画像のパスを取得
```html
<img src="{{object.image.url}}" alt="not">
```
`object.image`のみでは正しいURLをしゅとくできないのでちゅうい

----
参考記事
https://qiita.com/j54854/items/1f0560142e39d888251c
https://itc.tokyo/django/setup-media-root/
PowerAutomate でカーソル型ページネーションを使う

カーソル型ページネーションが用いられた API を PowerAutomate で操作する方法です。

Do until のコントロールで、Cursor の情報を使って、複数ページに分割された情報を取得します。

## Power Automate のクラウドフロー
### cursor と Do until を抜けるための変数
cursor の情報を格納する変数を初期化します。
また、最後のページの情報を取得した際に、Do until を抜けるのに用いる変数も初期化します。
![l_1517737_2424_7d3b744ceb068877ce71150f0a4151da.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/f06bff62-f184-e608-20e8-357f2cc16c79.png)
![l_1517737_2425_561598bcdbbb4b9c707ee2bb1c0d7f61.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/b4f251fe-7f40-cecc-665e-50b7add53d85.png)

### Do until のコントロールで複数ページの情報を取得
![l_1517737_2426_c33092ecb19fcb0264882a2ba73f4eb2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/2f4f8ee5-4611-3553-05fa-987461dbc040.png)
Do until を抜けるための条件を設定します。
![l_1517737_2431_01d2131c943f918bf993e08602987f6c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/0d607214-3e35-a972-c34a-00b460cbe400.png)
HTTP コネクタで API リクエストを設定します。クエリに cursor を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/62f1908e-d039-a9fc-13ad-e5cf5cfe7e22.png)
JSON の解析で API のレスポンスを処理します。ページネーションのカーソルの情報を取り出します。

### 条件のコントロール
![l_1517737_2429_905ce6a96f8e37a750328ac1715b8d48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/1f3e141e-f127-4683-15bb-2af4461e1639.png)
最終ページに到達しカーソルの値が null の場合は Do until を抜けるための変数の値を変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/46b530d4-6ae4-e52c-597e-879fec682f96.png)

次ページのためのカーソルの情報が存在する場合は cursor の変数に値を設定します。

これによりページネーションされた情報の取得が可能です。
自分のためのtypescriptデータ変換備忘録

# 何回調べても何回書いても忘れる馬鹿な自分のための備忘録
いやね、忘れるんですよ。何回書いても。
ということで2回以上同じこと調べた場合に私が次に参照できるようにしておく記事です。
発生するたびに追記していきます。

## データ変換編

### HashMapの値をArrayに変換
```typescript
Array.from(mapObject.values()) // 例1
[...mapObject.values()] // 例2

```
Mikatype



# 初めに

Windowsのタッチタイプ練習ソフトとして定評のあるMikatypeがMacでも動くことを確認しました．

Windows版も含めてインストールと練習注意を書きます．


# 手順<code>[/]</code>

-   [ ] インストール
-   [ ] ホームポジション
-   [ ] 視線追跡
-   [ ] 運指，手の形，
-   [ ] 5時間の意味，自動車教習所（軍隊）方式


# インストール

-   [美佳のタイプトレーナ](https://www.asahi-net.or.jp/~bg8j-immr/)


## windows 手順

[Mikatypeのホームページ](https://www.asahi-net.or.jp/~bg8j-immr/) へ行き，MIKATYPE.LZHをクリック

![d21_download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151211/54852c1b-85f0-e88f-3ae7-c7d2d82f75b1.png)

ダウンロードが始まりますので，終わったら「ファイルを開く」をクリック

![d22_download_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151211/9f307015-4b08-abba-1c27-8da4089420a3.png)

エクスポローラが開きますので，ここでMIKATYPE.EXEをダブルクリック．

![d23_explorer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151211/9d853daf-87fe-fe1e-7458-05a877387ac9.png)

Mikatypeのホーム画面が表示されます．


## mac 手順

まず「[この手順](https://qiita.com/daddygongon/items/af68bc1baf3adda22493)」に従ってJavaをインストールします．

[Mikatypeのホームページ](https://www.asahi-net.or.jp/~bg8j-immr/) へ行き，MIKATYPE\_JAVA.zipをクリック

![dm21_safari_mikatype_home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151211/b72a0d9c-b5ef-dfab-bbcf-5e5bbdd1ca6f.png)

ダウンロードを許可します．

![dm22_safari_mikatype_home_permit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151211/711a1c44-db3e-5ddd-2f84-e0fc8b14ec88.png)

ダウンロードフォルダーをデスクトップへドラッグ&ドロップします．

![dm23_download_select.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151211/01a8959a-4412-dfa3-c7b3-a9b1ef2a577c.jpeg)

ファインダーを開いて，アプリケーションの下の方にあるユーティリティを開き，さらにターミナルをダブルクリックします．

![dm24_finder_terminal_select.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151211/47b88abf-dad7-adb8-52e4-6498599795c8.png)

ターミナル上で

```bash
> cd Desktop/mikatype_java
> javac MIKATYPE.java
> java MIKATYPE
```

と打ち込みます．

![dm25_terminal_commands.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151211/dea3767d-9a0f-a594-52cf-ff716ae4b399.png)

これでwindowsと同じようなMikatypeアプリのホーム画面が現れます．

![dm26_mikatype_home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151211/30e24304-f764-c85c-2d58-4d03918b853a.png)


# 練習手順

![d24_mikatype_home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151211/823c1cfc-4a8f-ba66-ea10-efe3513deb3d.png)

どれかキーを押すと，練習選択画面が出てきますので，

-   3.英単語練習 -> 1.基本英単語練習を選択
-   4.ローマ字練習 -> 2. ローマ字単語練習

で最初に時間を測って書き留めておいてください．後で，提出してもらいます．

![d25_mikatype_select.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151211/97865580-9323-f1a2-7035-1da02a2ba0be.png)

次に，

-   1. ポジション練習

を開けてさらに，ホームポジションを選んで，練習してください．

最後に練習選択画面で6.終了を必ず押して終了してください．練習記録が保存されます．


# 最終試験

最終試験は6/26にこの時間で行います．

-   1. ポジション練習-> 6.ホーム＋上一段＋下一段

でspace keyでヒントを消した状態で45秒を切れば合格です．

英単語とかローマ字で練習していると速く打つことを追いかけてしまいます．タッチタイピングは，速さよりも正確性とか，リズムが大切で，キーの位置を覚えることを心がけてください．タッチタイプは，プログラマの仲間になる第一歩です．



------
 - **source** ~/Desktop/lecture_24s/comp_a24/d1_6_learning/d2_mikatype/d21_mikatype.org
Truyện chữ 247 - Website đọc truyện chữ 247 miễn phí

https://truyenchu247.com/ Đọc truyện chữ online✔️Truyện hay✔️Truyện Chữ 247 luôn tổng hợp và cập nhật các chương truyện một cách nhanh nhất.
truyenchuvn247@gmail.com
285 Cách Mạng Tháng Tám Phường 12, Quận 10, Thành phố Hồ Chí Minh
https://padlet.com/truyenchuvn247
https://ameblo.jp/truyenchuvn247
https://500px.com/p/truyenchuvn247
https://www.behance.net/truyenchuvn247
https://wellfound.com/u/truyenchuvn247
https://flipboard.com/@truyenchuvn247
https://www.quora.com/profile/Truy%E1%BB%87n-Ch%E1%BB%AF-247
VBAでitextやAcrobatを使わずにPDFからテキストを取得する

<h1>VBAが使えるならWORDが使えるのでは</h1>
エクセル上で裏でWORDを立ち上げ　PDF変換しエクセルに持ってくるイメージ

iTextSharp.dll　の導入は結果、管理者権限必要だし



Acrobatはインストール必要だし経費かかるし
ワードでPDFをテキスト化してエクセルに持ってきています。
ワードの参照設定が必要です。
Microsoft Word {ver} Object Library


```VBA get_text_from_pf
'******** 要参照設定 Microsoft Word {ver} Object Library *******
Sub get_text_from_pdf()
    '**** 宣言＆清掃 ****
    Dim fd As Office.FileDialog
    Dim wordApp As Word.Application
    Dim outputFolder As String
    Dim extractedTextFileName As String
    Cells.ClearContents


    '**** ファイル選択ダイアログ ****
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    fd.AllowMultiSelect = False
    fd.Filters.Clear
    fd.Filters.Add "PDFファイル", "*.pdf"
    If fd.Show = -1 Then
        pdfFileName = fd.SelectedItems(1)
        outputFolder = Left(pdfFileName, InStrRev(pdfFileName, "\"))
        extractedTextFileName = "ExtractedText" & Format(Now, "yyyymmddhhnnss") & ".txt"
    Else
        Exit Sub
    End If
    
    
    '**** ワード非表示起動 *****
    Set wordApp = CreateObject("Word.Application")
    wordApp.Visible = False

    
    '**** テキストを抽出しファイルに保存する ****
    With wordApp
        .Documents.Add
        .Documents.Open Filename:=pdfFileName, ReadOnly:=True
        .ActiveDocument.SaveAs2 Filename:=outputFolder & extractedTextFileName, FileFormat:=wdFormatText
    End With
    wordApp.Quit

    
    '**** テキストを開き1行ずつ読み込み、セルに書き込む ****
    RowNum = 3
    Open outputFolder & extractedTextFileName For Input As #1
        Do While Not EOF(1)
            Line Input #1, TextLine
            Cells(RowNum, 1).Value = TextLine
            RowNum = RowNum + 1
        Loop
    Close #1

End Sub
```


<h1>念のため</h1>
テキストファイルが産まれてしまいます。

不要であればDeleteロジック入れてみてください。
LookerStudioの時系列グラフで[年, 月]をディメンションに指定する方法

ググってもなかなか見つけられなかったので備忘録です
2023/04時点

# 経緯

* 1年以上の範囲をグラフで見ようと思ったときデフォルトだと[月]しか無く，[月]だけだと各年の月がマージされてしまうので `年` と `月` をあわせたフィールドをディメンションに指定したい


# 前提

* データソースとしてGA4を指定

# HowTo

1. 時系列グラフのディメンションの直下にあるドリルダウンをONにする
1. 何故かディメンションに`[年, 月]`が生えてくる


以上.
【Linux】出力結果を引数として扱いたいとき

`xargs`コマンドを使用する。
```
xargs (オプション)　コマンド　　(コマンドの引数)
```

例えば以下のようなディレクトリがあった時
```:ターミナル
$ ls ~/
Downloads    Pictures    Public    Movies
```
実行結果を`xargs`に代入して表示
```:ターミナル
$ ls ~/ | xargs echo
Downloads    Pictures    Public    Movies
```

## 参考
https://atmarkit.itmedia.co.jp/ait/articles/1801/19/news014.html
ITIL4 CPDポイントについて

# はじめに
ITIL4のCPDポイント取得およびその申請方法についてIT＆ストラテジーコンサルティング社およびPerpleCert社から公開されました。
自分のリマインドとしてもこちらに記載させて頂きます。

# Who am i ?
しがないエンジニアです。

# 本題
ITIL4認定資格更新制度のCPDポイント取得およびその申請方法についてです。ITIL4 Foundationなどを取得されている方は対象です。

https://itstrategy.jp/archives/23824

なお、PerpleCert社からも公開されています。

https://peoplecert.jp/MyAxelos_CPD.html

ざっくり概要をまとめると以下です。

 - MyAxelosにアクセスできるようにする（いわゆる会費のようなものが必要）
 - MyAxelosからCPDの情報を記入してCPDポイントの取得を申請（ただし、英語での記載が必要）

MyAxelosはこちらです。年会費とCPDポイントの取得申請はこちらから行います。
年会費は99.00ポンドです。（もちろんクレジットカード払い）

https://www.axelos.com/for-professionals/my-axelos

# CPDポイントの申請について

CPDポイントの申請についてですが、少なくとも年間20ポイントを申請して受理されなければいけません。以下がキーポイントとなる要素です。
```
CPDポイントは、個別または複数の認定に対して記録できます。
各プロダクトスイートについて、異なるCPDカテゴリにわたって、3年間連続して、毎年少なくとも20CPDポイント
（内、５CPDポイントはProfessional Experience(職務経験)が必須）を提出する必要があります。
この3年の記録期間が終了すると、当該認定の更新期限が3年延長され、このサイクルが繰り返されます。 
これらのポイントは、プロダクトスイート内の最初の試験に最初に合格した日までに提出する必要があります。
たとえば、プロダクトファミリーの最新の認定資格に4月1日に試験に合格した場合、
毎年4月1日までに 20 CPD ポイントを記録する必要があります。 
また、各12ヶ月の余剰ポイントは、次の年には繰り越しされません。
次の12ヶ月でのアクティビティのみがその年のポイントとなります。
```
繰り越しはされないというのも頭の片隅においておくと良いかもしれません。また職務経験もCPDポイントの対象になるとのことです。（必須）

CPDの提出については以下のカテゴリ・アクティビティが該当する一例です。PeopleCert社のページより引用させて頂きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227947/8ebc3dec-86cf-bc71-16b2-fa5ab153e80d.png)

こちらのPDFに、より詳細な情報が記載されています。

https://peoplecert.jp/doc/PC_JPN_MyAxelos_CPD_202303a.pdf

5ポイントは職務経験（必須）、あとの15ポイントはWebinarなどの参加で補うというのが一般的かもしれませんね。

（追記）

公開されているPDFファイルは更新が入る可能性があるので、こちらのページで確認しておいたほうが無難かもしれません。

https://peoplecert.jp/MyAxelos_CPD.html

# 補足

新制度の概要についてはこちらに記載をしています。

https://qiita.com/forest_moririri/items/e9095ab8f3d3aa509b40

ITIL4 Foundation合格体験記も記載しています。

https://qiita.com/forest_moririri/items/e4a00f8dea5a563c39f6


# 最後に
CPDポイント申請の一助となれば幸いです。
S3互換のminioをdocker-composeで起動(今更)

# 使い方

S3 をローカルで建てる用
急いでる人は[github](https://github.com/takashiAg/minio-template)を読んでくれ

## 経緯(TL;DR)

S3 が世界標準になりつつある。
互換のあるシステムがたくさん出てきた。
ローカルで建てれるものが必要になる機会も増えた。
OSS の minio を使うことが増えた
そこでテンプレ化しましょう。
[minio](https://min.io/)を読んでください

## 依存

依存してるライブラリは以下です

- docker-compose
- docker

## 結論

以下の構成で動かすのが最小構成

```tree:tree
.
├── .env
└── docker-compose.yml
```

### 設定ファイル

以下のようにすると良い

```yaml:docker-compose.yml
version: "3"
services:
  minio:
    image: minio/minio:latest
    ports:
      - ${MINIO_PORT:-9000}:9000
      - ${MINIO_CONSOLE_PORT:-9001}:9001
    volumes:
      - ./.data/minio/data:/export
      - ./.data/minio/config:/root/.minio
    environment:
      MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minio}
      MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minio123}
    command: server /export --console-address ":9001"
  createbuckets:
    image: minio/mc
    depends_on:
      - minio
    entrypoint: >
      /bin/sh -c "
      until (/usr/bin/mc config host add myminio http://minio:9000 ${MINIO_ACCESS_KEY:-minio} ${MINIO_SECRET_KEY:-minio123}) do echo '...waiting...' && sleep 1; done;
      /usr/bin/mc mb myminio/${MINIO_BUCKET_NAME:-mybucket};
      /usr/bin/mc policy download myminio/${MINIO_BUCKET_NAME:-mybucket};
      exit 0;
      "

```

### 環境変数

.env ファイルを用意しましょう。
`MINIO_ACCESS_KEY` `MINIO_SECRET_KEY` は秘匿情報なので、適宜変えてください。
[password generator](https://www.graviness.com/app/pwg/)とかでも良いので。

```.env:.env
MINIO_ACCESS_KEY=bbFJoygjrP5BdqnQ
MINIO_SECRET_KEY=CAMHACH4bFlr0R2E
MINIO_BUCKET_NAME=mybucket
MINIO_PORT=9000
MINIO_CONSOLE_PORT=9001
```

## 起動

裏で実行する場合は`-d`をつけて！

```bash:bash
## cd /path/to/app

docker-compose up
## macの場合は以下
## docker compose up

## 裏で実行する場合は-d をつけて！
## docker-compose up -d
```

## 確認

ブラウザから[http://localhost:9000](http://localhost:9000)を開きましょう
`username` と `password` は `MINIO_ACCESS_KEY` と `MINIO_SECRET_KEY`で設定した値です
![Screenshot 2023-04-14 at 14.25.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195504/44629796-4e3e-c59b-1354-b289ca643620.png)
C++でjsonファイルの読み込み/書き込みをやってみた

# 概要
この記事は筆者がゲームのデータを外部ファイルで扱うためにjsonの読み込み/書き込みの方法を模索した際の記録になります。

:::note warn
注意
個人的に行ったもののため誤っている点があるかもしれません。参考程度になれば幸いです。
:::
# 目次
1.必要なファイル
2.書き込み
3.読み込み
4.まとめ

# 1.必要なファイル
そのままjsonを扱おうとすると面倒くさいので、GitHubにあったライブラリを使用します。
この中にある「json.cpp」をソースコードの入っているフォルダに追加してください。

[GitHub](https://github.com/nlohmann/json "使用ライブラリ")
# 2.書き込み

### json型のオブジェクトを作成
まずはjson型のオブジェクトを作成します。(json.cppを使うことで作成できるようになります)
```C++:オブジェクト作成
/*
  iostream:実行画面上に文字を表示したり文字を入力するのに必要
  json.hpp:jsonの作成読み込みを楽にしてくれる
  fstream:ファイルの読み込みや書き込みに必要
*/

#include <iostream>
#include "json.hpp"
#include <fstream>

//書き込むjsonファイルの内容を書く
		json m_json = {
		{"Name","Normal"},
		{"Speed",2.5f},
		{"Firingangle",0.0f}
		};
```

### 作成したオブジェクトを外部ファイルに書き込む
作成したデータを外部ファイルに書き込みます。
```C++:ファイル書き込み
//ここでファイルを作成
		string filename = m_json["Name"];
		string Extension = ".json";
		filename += Extension;

//作成したファイルに内容を書き込む
		ofstream writing_file;
		writing_file.open(filename, ios::out);
		writing_file << m_json.dump() << endl;
		writing_file.close();
```
json型のファイルはそのままでは書き込めないため、シリアライズを行います
```C++
m_json.dunp()
```
これだけでシリアライズを行うことが出来ます。

:::note info
シリアライズとは
シリアライズとは、複数の要素を一列に並べる操作や処理のこと。単にシリアライズといった場合には、プログラムの実行状態や複雑なデータ構造などを一つの文字列やバイト列で表現する「直列化」を指すことが多い。(IT用語辞典引用)
>IT用語辞典引用元
>https://e-words.jp/w/%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%A9%E3%82%A4%E3%82%BA.html
:::
以上でファイルの書き込みが完了し、ソリューション直下にjsonファイルが作成されます。
(このプログラムの場合、jsonオブジェクト内のnameのデータをそのままファイル名としています。)

# 3.読み込み
書き込みが行えたので今度は読み込みを行います。
試しに先ほど作成した「Normal.json」を読み込んでみます。
```C++:ファイル読み込み
//読み込むファイルの名前を作成
		string filename = "Normal.json";

		//ファイルを読み込んで内容を画面に表示する
		//読み込みに失敗した場合はエラーを表示する
		ifstream ifs(filename.c_str());
		if (ifs.good())
		{
			json m_json;
			ifs >> m_json
            
            //読み込んだデータをそれぞれの変数に代入する
			string name = m_json["Name"];
			float speed = m_json["Speed"];
			float firingangle = m_json["Firingangle"];

            //代入されたデータを表示する
			cout << "Name:" << name << endl;
			cout << "Speed:" << speed << endl;
			cout << "Firingangle:" << firingangle << endl;
		}
		else
		{
			cout << "ファイルの読み込みに失敗しました" << endl;
		}
```
```:実行結果
Name:Normal
Speed:2.5
Firingangle:0
```
上記の様に読み込んだデータが表示されます。
### ファイル名を入力できるようにする
複数のファイルがソリューション直下に入っていても使えるようにファイル名を入力できるようにすると使いやすいと思います。
```C++:ファイル名入力
//読み込むファイルの名前を入力する(拡張子は不要)
		string filename;
		cout << "ファイル名を入力してください" << endl;
		cin >> filename;
		string Extension = ".json";
		filename += Extension;
```

# 4.まとめ
ライブラリを使用することでほとんど手間をかけずに外部ファイルを利用できるようになるので、外部ファイルからデータを取り込むようにしたい場合は活用してみてください。
kali-linuxでapt updateがReleaseがどうこうでできねぇ対策

# 環境
Description:    Kali GNU/Linux Rolling
Release:        2023.1

## リポジトリ http://http.debian.net/debian wheezy-backports Release には Release ファイルがありません。
### 現象
* `apt-get update`および`apt update`が上記エラーによって完了しない
### 解決
* `/etc/apt/sources.d/backports.list`に記載されているミラーサイトURLを削除
IT用語における日本語と英語の読み方の違い

IT用語における日本語と英語の読み方の違いをまとめてみました（随時更新）。各用語の日本語読みに関して、全て間違った発音というわけではないですが、英語と発音がだいぶ異なる場合があるので、その違いを覚えておくと良いかもしれません。

# SQL
- 日本語：エスキューエル
- 英語：ˈsiːkwəl　シークェル（エスキューエルと読む人もいるでしょうが、基本的にシークェル）

# DB
- 日本語：デービー（データベースだからデービーか、ディービーと読む人も一定数いる）
- 英語：基本的にディービーと読む

# Linux
- 日本語：リナックス
- 英語：ˈlɪnəks リヌックス（英語圏では主流の読み方）
※開発者のリーナス・トーバルズ氏は「どのように呼んでもらっても構わない」と言っていたらしい

# async 
- 日本語：アシンク
- 英語：eisíŋk　エイシンク

# cron
- 日本語：クーロン（クローンだとcloneと誤解されるため敢えてクーロンと呼んでいるかもしれないが、経緯はわからない）
- 英語：krɑ́n　クローン、クロン

# null
- 日本語：ヌル
- 英語：nʌ́l　ナル

# ping
- 日本語：ピング、ピン
- 英語：píŋ　ピン
AzureDevOpsのリポジトリからクローンする際のパスワードって？

# はじめに
この記事ではAzureDevOpsのリポジトリからクローンを作成する際に、入力するパスワードについて記載しています。
内容はとても短いです。

# 結論
ズバリこの画像のPasswordの部分です！
![結論](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3321193/1ecc8a13-ef2b-87b6-b9c4-f1f56e7fa7f0.png)

# どういうこと？
WSLでUbuntuを立てて、AzureDevOpsのリポジトリからgit cloneコマンドでローカルリポジトリを作ろうとしたときに、画像の2行目のようにパスワードの入力を求められました。
![パスワード入力](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3321193/3709b5c4-05ed-5024-a7dc-682485d25052.png)
はじめはAzureDevOpsユーザのパスワードかと思って入れましたがはずれ。
じゃあなんだろうと色々探しているうちに、「結論」の内容を発見しました。

# 表示の仕方
パスワード表示までの手順です。

１：AzureDevOpsのリポジトリからCloneを選択
![Clone選択](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3321193/bcc12681-ad8d-150a-a045-03e2f1210b8c.png)
２：Generate Git Credentialsをクリック
クリックしてからパスワード表示まで数秒かかります。
![Generate Git Credentials](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3321193/1d3a7fe7-1911-b83b-2d79-8dc48ed21f20.png)
３：パスワードをコピーして使用する
冒頭画像のようにパスワードが表示されるので、コピーアイコン（テキストボックス横の紙が重なっているようなアイコン）をクリックしてコピーします。
その後、Ubuntuコンソールに貼り付ければＯＫです。
コンソールに貼り付けた際に特に何も表示されませんが、そのままEnterで大丈夫でした。

# 最後に
「Generate Git Credentials」は「Git資格情報生成」という意味になるので、よくよく考えるとすぐわかるのかもしれませんが、CredentialsとPasswordが同じものだと認識できなかったため、？となった出来事でした。
もし、同じようなことで困った方がいれば、一助になればと思います。
Dolly2.0をGoogle Colabで動かしてみた

# はじめに
Open SorceのLanguage Larage Model（LLM)であるDolly 2.0が発表された (https://www.databricks.com/blog/2023/04/12/dolly-first-open-commercially-viable-instruction-tuned-llm) ので、Google Colabで試してみました。

2023/04/14現在、以下の3つのモデルが用意されていました (https://huggingface.co/databricks) が、無料のCollab環境では、12b,7bはメモリオーバーになってしまったので、3bを使用しました。
・databricks/dolly-v2-12b
・databricks/dolly-v2-7b
・databricks/dolly-v2-3b

# 実施内容
モデルの説明の手順 (https://huggingface.co/databricks/dolly-v2-3b) に従って実施しました。

1.google colabで新規ファイルを作成

2.pytorch等ライブラリのインストール
```
!pip install accelerate>=0.12.0 transformers[torch]==4.25.1
```

3.モデルを呼び込んだpipelineの作成
```
import torch
from transformers import pipeline

generate_text = pipeline(model="databricks/dolly-v2-3b", torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto")
```

4.パイプラインに指示文を与え、実行
```
generate_text("Explain to me the difference between nuclear fission and fusion.")

'Nuclear fission is the splitting of the nucleus of an atom by the action of a strong force. It occurs when a large enough heavy nucleus, such as uranium 235, tries to split itself in two. When two sufficiently small nuclei collide, they may fuse together to form a larger, more stable nucleus. Nuclear fusion is the process by which two or more light nuclei combine to form a heavier one. Nuclear fusion releases enormous amounts of energy that is readily usable to produce electricity or propulsion.'
```

※同じ質問を日本語で入力してみた結果は以下のようになりました。日本語対応は現状不十分なようです。
```
generate_text("核分裂と核融合の違いについて説明してください。")

'核分裂とは原子核を結合させた構成要素が成分ぎ instead of molecules, つまり原子核となる element-235 のことです。核融合には核融合物 (nucleus-dipping material) のことと付けます。さらに核融合物は核の指数関係で構成要素をやり取りします。イオンが地球温暖化が原因とされる一因の 1/5 程度が核融合物によってして地球の 20% 程度とも言われています。現在の地球温暖化についても核融合物によって予想されていますが、現在の地球温暖化カーブも変化します。'
```
【2023年】WEB制作に使えるChromeおすすめ拡張機能



![firmbee-com-eMemmpUojlw-unsplash.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3286936/9de9ef4d-1d01-eb91-249e-0746015d969a.jpeg)
WEB制作や情報収集などでChromeをメインブラウザとして使用している方は多いと思います。今回はWEB制作をより快適にして、生産性をアップさせてくれるChrome拡張機能をご紹介します。

## WhatFont

![システム開発・WEB制作「マイスター・ギルド」-_2_.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3286936/e83aa93e-1bb3-c3f2-7209-86eea0a4041e.gif)
**サイトに使用されているフォントが確認できる**拡張機能です。
デベロッパーツールを開かなくてもクリックすればフォント情報を一覧で見ることができます。
ワンクリックで簡単に確認することができるので、気になるフォントを見つけたら、すぐにチェックしましょう。

https://chrome.google.com/webstore/detail/whatfont/jabopobgcpjmedljpbcaablpmlmfcogm?hl=ja


## Google Analytics オプトアウトアドオン

![unnamed.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3286936/de0d3948-476c-9a9e-9a16-18391e011279.jpeg)
オプトアウトアドオンは、ブラウザにインストールするだけでサイトにアクセスした場合の情報を無効化して、**Googleアナリティクスに情報が送信されないようにする**拡張機能です。

https://chrome.google.com/webstore/detail/google-analytics-opt-out/fllaojicojecljbmefodhfapmkghcbnh?hl=ja

## Responsive Viewer

![https-www-m-gild-com.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3286936/a8bd7b3e-f51f-0a91-ad73-7b612bc87a2d.gif)
**さまざまなデバイスの画面サイズにてサイトの表示確認ができる**拡張機能です。
デベロッパーツールで複数の画面を切り替えながら確認している人も多いのではないかと思いますが、Responsive Viewerを使うと切り替える手間を省けるようになります。

https://chrome.google.com/webstore/detail/responsive-viewer/inmopeiepgfljkpkidclfgbgbmfcennb

## Wappalyzer

![unnamed.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3286936/f89debfd-752b-541f-43be-bbed5e2d512c.jpeg)
**サイトで使用されているCMS・プラグイン・ライブラリなどを確認できる**拡張機能です。
対象のサイトがどのような技術を使用しているか簡単に確認することができます。

https://chrome.google.com/webstore/detail/wappalyzer-technology-pro/gppongmhjkpfnbhagpmjfkannfbllamg

## Copy All Urls

![unnamed.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3286936/d3cd234a-f0af-e5d1-cf4b-53b5fe0e1662.jpeg)
**開いているすべてのタブのURLを簡単にコピーできる**拡張機能です。
複数のタブで開いているサイトやページを共有する際に一つずつコピーする手間を省けるようになります。

https://chrome.google.com/webstore/detail/copy-all-urls/djdmadneanknadilpjiknlnanaolmbfk?hl=ja

## Pasty

**クリップボードのURLを一括で表示することができる**拡張機能です。
URLをまとめてコピーして、Pastyのアイコンをクリックするだけで、まとめてページを開くことが可能です。

https://chrome.google.com/webstore/detail/pasty/hdjihnnclpjhfdbbinmgoiehhoehhlgf?hl=ja

## TDK Meta Checker

**メタタグを簡単に確認できる**拡張機能です。
タイトル・ディスクリプション以外にもOGP、Faviconも確認できます。

https://chrome.google.com/webstore/detail/tdk-meta-checker/kjiieeppkcjgdigogiafneikdhpagpbc?hl=ja

## HTMLエラーチェッカー

ページのレイアウト崩れや表示不具合の原因となる、**エラーや問題を検出してくれる**拡張機能です。
問題箇所をリスト化し、該当箇所へリンクのリンクがあるのでスピーディーな対応が可能になります。

https://chrome.google.com/webstore/detail/html%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%81%E3%82%A7%E3%83%83%E3%82%AB%E3%83%BC/ohdllebchmmponnofchalfkegpjojcaf?hl=ja

## ato-ichinen

**Googleの検索結果を1年以内に制限できる**拡張機能です。

https://chrome.google.com/webstore/detail/ato-ichinen/pojaolkbbklmcifckclknpolncdmbaph/related?hl=ja

## EditThisCookie

閲覧したサイトのCookieを簡単に確認、編集、削除することができる拡張機能です。
**特定のWebサイトのCookieだけを、ワンクリックで削除**することができるので検証の際に使用します。

https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg

## まとめ
実用的なものなどChromeの拡張機能を使用することで効率化や生産性向上に繋がります。
みなさんの快適なWEB制作の助けになりますように。
Oracle Database 用 Red Hat Enterprise Linux のカーネル・パラメーター設定を比較する

# インストールに必要なカーネル・パラメーター
Red Hat Enterprise Linux/Oracle Linux に Oracle Database のインストールする際にはカーネル・パラメーターの変更が必要です。[Oracle Database Installation Guide (23c)](https://docs.oracle.com/en/database/oracle/oracle-database/23/xeinl/index.html) には、インストールに必要なカーネル・パラメーターが記載されています。しかしインストレーション・ガイドにはインストールに「必要」なパラメーターしか記載されていません。下記はインストレーション・ガイドに記載されたカーネル・パラメーターです。

|カーネル・パラメーター|必要な値|
|:---|---:|
|semmsl |250|
|semmns |32000|
|semopm |100|
|semmni |128|
|shmmax |4398046511104|
|shmmni |4096|
|shmall |1073741824|
|file-max| 6815744|
|aio-max-nr| 1048576|
|ip_local_port_range| 9000–65500|
|panic_on_oops| 1|
|rmem_default|  262144|
|rmem_max| 4194304|
|wmem_default|  262144|
|wmem_max|  1048576|

# 推奨されるカーネル・パラメーター

最小限変更が必要なパラメーター以外にいくつかのパラメーター変更が推奨されています。推奨値として参考になる情報は以下の３つです。

- Tuned Profile for Oracle
　Oracle Database 用の Tuned Profile は Red Hat Enterprise Linux に同梱されている tuned-profiles-oracle-2.19.0-1.el8.noarch.rpm になります。このプロファイルを適用することでカーネル・パラメーターの設定を変更します。/usr/lib/tuned/oracle/tuned.conf ファイルが実体です。

- Oracle Preinstallation RPM
　Oracle Preinstallation RPM は Oracle が提供する RPM パッケージです。
  検証では [oracle-database-preinstall-23c-1.0-0.5.el8.x86_64.rpm](https://yum.oracle.com/repo/OracleLinux/OL8/developer/x86_64/getPackage/oracle-database-preinstall-23c-1.0-0.5.el8.x86_64.rpm) を使っています。カーネル・パラメーターの設定以外に、ユーザーの作成やその他の OS 設定も自動的に行ってくれます。

- ORAchk ユーティリティ
  ORAchk ユーティリティは Oracle が提供するツールで、稼働中の Oracle Database や OS 設定をチェックしてベストプラクティスと比較しレポートを出力するツールです。カーネル・パラメーターだけでなく、Oracle Database の初期化パラメーター、NIC のボンディング設定有無まで非常に広い範囲のチェックを行うことができます。
　ただし ORAchk ユーティリティは設定変更までは行いません。今回は最新の ORAchk 23.3 を使ってチェックしました。

Red Hat Enterprise Linux 8 Update 7 に対してこれら３つのツールを導入し、チェックを行った結果、以下のような値になりました。

|カーネル・パラメーター| Tuned 設定値 | PreInstall 設定値| ORAchk推奨値|備考|
|:---|---:|---:|---:|:---|
|vm.swappiness|10||||
|vm.dirty_background_ratio|3||||
|vm.dirty_ratio|40||||
|vm.dirty_expire_centisecs|500||||
|vm.dirty_writeback_centisecs|100||||
|kernel.shmmax|4398046511104|4398046511104|計算値||
|kernel.shmall|1073741824|1073741824|1073741824||
|kernel.shmmni|4096|4096|4096||
|kernel.sem|250 32000 100 128|250 32000 100 128|250 32000 100 128||
|fs.file-max|6815744|6815744|計算値||
|fs.aio-max-nr|1048576|1048576|1048576||
|net.ipv4.ip_local_port_range|9000 65499|9000 65500|9000 65499||
|net.core.rmem_default|262144|262144|262144||
|net.core.rmem_max|4194304|4194304|4194304||
|net.core.wmem_default|262144|262144|262144||
|net.core.wmem_max|1048576|1048576|1048576||
|kernel.panic_on_oops|1|1|1||
|kernel.numa_balancing|0||0||
|net.ipv4.conf.all.rp_filter||2|||
|net.ipv4.conf.default.rp_filter||2|||
|vm.min_free_kbytes|||計算値||
|net.ipv4.tcp_dsack|||1||
|net.ipv4.tcp_sack|||1||

インストレーション・ガイドに掲載されたパラメーターはほぼ差が出ませんでしたが、それ以外では差が見られます。PreInstall RPM は比較的デフォルトのままが多く、Tunedプロファイルはメモリー管理系のパラメーターを積極的に変更していることがわかります。

Author: Noriyoshi Shinoda / Date: April 14, 2023