OmniAICreator/Qiita-1.07M huggingface dataset:
Power Query の Number.ToText 関数

# 構文

https://learn.microsoft.com/ja-jp/powerquery-m/number-totext

```text:構文
Number.ToText(
    number as nullable number, 
    optional format as nullable text,  // ※１
    optional culture as nullable text  // ※２
) as nullable text
```

```text:単純な例
Number.ToText(4)    // 数値４を文字列４に変換します
```

### ※１．第２引数 format
　第２引数は、以下の記述ができます。

- **"C" or "c"** :
    - (通貨) 通貨記号、グループ区切り記号を含む。小数点以下は四捨五入される。（※Learnに載ってないが使える）
- **"D" or "d"** :
    - (10 進数) 結果の形式を整数の桁数として設定します。 有効桁数指定子によって出力の桁数が制御されます。
- **"E" or "e"** : 
    - (指数/科学的表記) 指数表記。 有効桁数指定子によって、小数点以下の最大桁数が制御されます (既定値は 6)。
- **"F" or "f"** :
    -  (固定小数点) 整数および小数点以下の桁数。
- **"G" or "g"** : 
    - (標準) 固定小数点または科学的表記のうち、最もコンパクトな形式。
- **"N" or "n"** : 
    - (数値) グループ区切りの記号および小数点の記号を含む整数および小数点以下の桁数。
- **"P" or "p"** : 
    - (パーセント) 100 を乗算し、パーセント記号付きで表示される数値。
- **"R" or "r"** : 
    - (ラウンドトリップ) 同一の数値をラウンドトリップできるテキスト値。 有効桁数指定子は無視されます。
- **"X" or "x"** : 
    - (16 進数) 16 進テキスト値。
- **[カスタム数値書式指定文字列](https://qiita.com/spumoni/items/e396c163512ca61e9f25)** :
    - カスタム文字列を使用して任意の書式を適用することができます。

```text:format
Number.ToText(123, "D5")               // 00123
Number.ToText(123.456, "E3")           // 1.235E+002
Number.ToText(123.456, "e3")           // 1.235e+002
Number.ToText(1234.5678, "F2")         // 1234.57
Number.ToText(1234.5678, "G6")         // 1234.57
Number.ToText(1234.5678, "N2")         // 1,234.57
Number.ToText(0.123, "P1")             // 12.3%
Number.ToText(1234, "X")               // 4D2
Number.ToText(1234, "#,0")             // 1,234
Number.ToText(1234, "00-000")          // 01-234
Number.ToText(1234.5678, "△ #,0.##;▼ #,0.##;'-'", "ja-JP") // △ 1,234.57
```

### ※２．第３引数 culture
　第３引数のcultureを設定することで、区切り記号と小数点の記号、通貨型の表示を変えることができます。（参照　「[サポートされる言語識別文字列](https://learn.microsoft.com/ja-jp/cpp/c-runtime-library/language-strings?view=msvc-170#supported-language-strings)」）

```text:culture
Number.ToText(1234.56, "#,0.##", "ja_JP") // 1,234.56  日本の書式
Number.ToText(1234.56, "#,0.##", "fr-FR") // 1 234,56　フランスの書式
Number.ToText(1234.56, "#,0.##", "de-CH") // 1’234.56　スイスの書式
Number.ToText(1234.5678, "C", "ja-JP")    // ¥1,235    日本円 
Number.ToText(1234.5678, "C", "en-US")    // $1,234.57 米ドル
Number.ToText(1234.56, "C", "fr-FR")      // 1 234,56 €　フランス・フラン
```
API GatewayとStep Functionsの連携で GETエンドポイントを使用してリクエスト受信する。

# 備忘録
注意点、この記事は備忘録でありHHKB 入力の練習でもある。

# 概要
APIGatewayとStep Funcitionsを連携させる際、APIGatewayはPOSTメソッドを使う事が基本的だが、どうしてもGETで使用したかったのでGETでも行った。

おおまかなややり方や、Step Funcitionsの内容を下記のページと同じである
https://masayuki031.com/api-gateway-lambda-stepfunction/


# 一番のポイント
APIGatewayのマッピングテンプレートを下記のようにセットする
```
#set($allParams = $input.params())
{
    "input" : "{#foreach($type in $allParams.keySet()) #set($params = $allParams.get($type)) \"$type\" : { #foreach($paramName in $params.keySet()) \"$paramName\" : \"$util.escapeJavaScript($params.get($paramName))\" #if($foreach.hasNext),#end #end } #if($foreach.hasNext),#end #end }",
    "stateMachineArn" : "Step FuncitionsのARN"
}
```
input部分は、改行すると「SerializationException」になってしまうので、この形式にしている。
Codeigniter3で 実行したSQLを確認する方法

# 最初に結論から言うと

データベース設定の **save_query = true** にして
model で `$this->db->last_query()` を実行すれば取れる。

# 解説
## SQLの取得方法

公式のドキュメントには以下のように書いてあります

>$this->db->last_query()
>
> 最後に実行されたクエリを返します （クエリの文字列で、結果ではありません）。例:
>```
>$str = $this->db->last_query();
>
>// 次のように生成されます:  SELECT * FROM sometable....
>```

## でも出ないんだよ！！！

Modelの中で以下のように実行しても画面に表示される事がありませんでした。

```php
echo $this->db->last_query();
```

## どうやったら取得できるようになるの？？

### そんなときには・・・

#### application/config/database.php の中身を確認して！

インストールした当初に書かれているconfigの中に書かれている説明文にはこう書かれています。

```
|	['save_queries'] TRUE/FALSE - Whether to "save" all executed queries.
| 				NOTE: Disabling this will also effectively disable both
| 				$this->db->last_query() and profiling of DB queries.
| 				When you run a query, with this setting set to TRUE (default),
| 				CodeIgniter will store the SQL statement for debugging purposes.
| 				However, this may cause high memory usage, especially if you run
| 				a lot of SQL queries ... disable this to avoid that problem.
```

(英語ができない私が適当に）要約すると
こいつがTrueじゃないと$this->db->last_query()を実行しても 効力は無効になりますよと。
ただ、Trueにすると メモリ圧迫するかもしれないから気をつけてねと。

なので、
該当のパラメータを tureにしてあげてください。

```php
$db['default'] = ['save_queries' => false];
```

## 公式には書いてないんだけどな

application/config/database.php の冒頭には下記のような記載が。

```
| -------------------------------------------------------------------
| DATABASE CONNECTIVITY SETTINGS
| -------------------------------------------------------------------
| This file will contain the settings needed to access your database.
|
| For complete instructions please consult the 'Database Connection'
| page of the User Guide.
|
```
(英語ができない私が適当に）要約すると
完全な手順については公式ガイドみてね

ってかいてあるわけさ。

だけど
公式のデータベース接続設定についてのページは以下

https://codeigniter.jp/user_guide/3/database/configuration.html

save_query のパラメータについては、落としてきたdatabase.phpの中にしか書かれていないという罠。

## 特定の環境にだけ適用させるほうがいいと思うよ！


>CodeIgniter には、データベース接続用項目（ユーザ名、パスワード、データベース名など）を保存できる設定ファイルがあります。 設定ファイルは application/config/database.php にあります。また、特定の 環境 のためのデータベース接続用項目を設定をするため に、それぞれの環境の設定フォルダの中に database.php を置くこともできます。
>
> https://codeigniter.jp/user_guide/3/database/configuration.html

公式にこう書いてあるとおり、
環境ごとに設定できるとあるので、本番でメモリ圧迫で動かないなんてことが発生しないように
開発環境だけに適用させるのをおすすめします！


# 最後に
みんなも気をつけてね！

クエリ見たかったら データベース設定の save_query を確認しようね！
LPICレベル3になったので、ひとりQ&Aする

この度LPICレベル3になりました。  
LPICに関するありそうな質問とか、自分がLPIC始めるときに気になってた事とかをまとめました。
これからLPIC始めるひとの参考になれば嬉しいです。  
&ensp;  
## 取得するまでの時間は？
|LPIC|予定|実績|時間|
|:--|:--:|:--:|:--:|
|101|30日|30日|50h|
|102|30日|30日|50h|
|201|30日|40日|50h|
|202|30日|20日|40h|
|304|30日|10日|25h|   

※時間はなんとなくの計算です
おおむね予定通り、後半は試験に慣れたのでちょっと短縮できた。  
地方だからなのか、試験場が平日しか空いてなくてスケ調整が大変だった。  
on.vueできるパソコンがほしい。  
&ensp;  
## 何の資格？
Linuxの知識を証明するLPIの資格です。  
[Linux Professional Institute](https://www.lpi.org/ja)
&ensp;  
## 環境は？
MacBook(M1,2020)だけ
中古PC買ってCentOS入れたりしましたがほぼ使いませんでした。  
ハンズオンは全てAWS EC2で行いました。  
&ensp;  
## 難易度は？どれが一番難しい？
すごく難しいわけではないけど、ノー勉では受からないかも  
1→2→3の順で受験するなら3(304)が一番簡単でした。  ※他の3を受けてないので参考程度に  
202が1番難しかった。  
注意：[LPIC304は廃止されます。](https://www.lpi.org/ja/blog/2021/12/03/ピラミッドに登る)
&ensp;  
## 1日の勉強時間は？
目安ですが...  
平日は仕事、昼休みに30分くらいと業後に1〜3時間  
休日は3〜5時間くらい  
&ensp;  
## 最短取得について
ブログ、Twitterで1週間で取得！などよく見ます。  
ですが学習の飲み込み悪い自覚がある人は注意が必要です。（自分のことです）  
一回落ち着いて、時間かかってもいいと思いましょう。  
時間かかっても７日→30日とかなので焦らなくても良くないですか？？  
この資格を取りたいと思ってる人はLinuxをこれから使う、使いたい人だと思います。  
時間がかかってもハンズオンを交えながら実機で学ぶことがいいんではないかなと思うわけです。  
早く取れるならそれに越した事はないです。はい...
&ensp;  
## 役に立った教材は？（5点満点）
自信ない人は全部やった方がいいです。  
|教材|LPIC|評価|感想|
|:--|:--:|:--:|:--|
|[ Ping-t](https://mondai.ping-t.com/g)|1,2,3|4|これベースで学習、基礎学習用|
|スピマス|[1](https://www.amazon.co.jp/dp/4798160857/ref=cm_sw_em_r_mt_dp_1GZ5ZM27QDY6DP1P87F2?_encoding=UTF8&psc=1),[2](https://www.amazon.co.jp/dp/4798151238/ref=cm_sw_em_r_mt_dp_2GDABSNM8KHT52ZJXDM4?_encoding=UTF8&psc=1)|5|模試は絶対にやるべき|
|udemy|[1](https://www.udemy.com/share/106cum3@biCKq3-yaz6ZKX29TZrntt19uG8jpUiE6qxBqZY47nvAwIJZ9kPqsUGbh2epruSIzA==/),[202](https://www.udemy.com/share/105knO3@QpOevC6ttgzl9vUpcz9gQE9r-YlD25o7p8gJEotoJ_DErnm11Giw8ZM7XnOZeD-N7g==/)  |2|時間ある人は問題数確保に使うと良し|
|[学易](https://gakuyasu.byaku.jp)|202|3|202の問題数確保に使いました|
|[黒本](https://www.amazon.co.jp/dp/4844380540/ref=cm_sw_em_r_mt_dp_A1D2ZPRT576KXDPHSXEJ)|304|5|これとPing-tだけでOKでした| 

&ensp;  
## スクールいる？
検討したことないけど、モチベ維持が難しい場合はいるかな？
&ensp;  
## モチベは？
キャリアへの不安・焦り  
- 30歳でまともな実務経験なし
- SES2年目だけど仕事での成長感がない
- なんかやってないと病みそう
- とりあえずLPIC取るかみたいな感じです  
- 転職したいです
&ensp;  
## 仕事が忙しくても取れる？
ノー勉では無理なので時間の確保は必要  
体感では１試験１ヶ月で40hくらい取れれば大丈夫な感じ  
&ensp;  
## 楽しい？
ハンズオンしてみるのは楽しい。レベルが上がるほど楽しい。  
試験前の詰め込みは楽しくない。必要だけど  
&ensp;  
## とって意味ある？
意味あると思います。  
実際にSESの採用担当してる方に聞いたところ  
求職者の50人に1人くらいしかレベル3までやってるいないみたいですよ。※数値は体感値らしいです  
最低でも勉強してない人たちとの差別化はできるんじゃないでしょうか。
&ensp;  
## 半年前の自分へのアドバイス
・有給使うのめんどくさいので早めにon.vue環境作ってください。  
・Ping-tは2周もやらなくていいので模試3回やって8割取れたら予約してください。  
・シェルの画面に圧倒されるけど、慣れなので睨めっこしてください。  
・ハンズオン中のエラーはまず和訳してください。  
・LPIC1をしっかりやると後が楽です。  
・LPIC1だけ取るつもりだったけど意外と3までいけます。  
・Twitter見てると焦る気持ちが募るけど、自分のペースでいきましょう。  
・頑張ったら普通に取れます。頑張ろう  
&ensp;  
## 今後は？
AWSの認定資格を頑張ります。まずはSAAから
Rails7でimportmapを利用してflatpickrを導入後、日本語に対応する

importmap+flatpickrの情報はあったけど、Localeを設定する情報がなかったので記録しておく。

Rails 7, importmaps, Stimulusは導入済みとする。

↓importmapでpinする
```
$ ./bin/importmap pin flatpickr
$ ./bin/importmap pin flatpickr/dist/l10n/ja
```


↓こんなのが出来上がる。
```config/importmap.rb
pin "application", preload: true
pin "@hotwired/stimulus", to: "stimulus.min.js", preload: true
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js", preload: true
pin_all_from "app/javascript/controllers", under: "controllers"

pin "flatpickr", to: "https://ga.jspm.io/npm:flatpickr@4.6.13/dist/esm/index.js", preload: true
pin "flatpickr/dist/l10n/ja", to: "https://ga.jspm.io/npm:flatpickr@4.6.13/dist/l10n/ja.js"
```


↓こんなのを作る。
```app/javascript/controllers/flatpickr_controller.js
import { Controller } from "@hotwired/stimulus"
import flatpickr from "flatpickr";
import { Japanese } from "flatpickr/dist/l10n/ja";

export default class extends Controller {
  connect() {
    var config = { locale: Japanese, dateFormat: "Y-m-d" }
    flatpickr(this.element, config);
  }
}
```

↓使いたいところにこんな感じにする。
```_form.html.erb
    <%= form.text_field :date, data: { controller: "flatpickr" } %>
```

↓完成。わーい
![flatpickr_ja.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489/e35ea6d3-551c-9ee3-2b21-66fdd2ef0da5.png)
Ansible firewalldモジュールのdirectルールについて調べてみた

# 一番伝えたいこと
- Ansibleのfirewalldモジュールではdirectルールを追加/削除することができない
- ただし、directルールを追加/削除できるようにするためのPRはあるが反映されていない

# はじめに
- firewalldとは
    - Linux上でファイアウォールを実装するためのツール
    - inbound通信のルールはrich ruleと呼ばれ、outbound通信はdirect ruleと呼ばれている
- Ansibleのfirewalldモジュールとは
    - その名の通り、firewalldを操作するためのモジュール
    - 現状、richルールの改廃はできるが、directルールの改廃はできない
    - `shell`モジュールで直接`firewall-cmd`を実行するしかない

# firewalldモジュールでdirectルールも書きたいが・・・
GitHubのissueを探索してみると、それらしきissueを発見。2018年に起票されてるから、ansible collectionsが出る前か。
- https://github.com/ansible/ansible/pull/49514
- https://github.com/ansible/ansible/pull/63772

実装もテストも完了して、後はマージするだけって状態のはずだが、なんやかんやで時が過ぎ、ansible collectionsが登場したことによりマージ先が変わって、このissueは一旦クローズされている模様。

そんなこんなで時が過ぎ、ansible-collections側のリポジトリで新たなissueが起票されていた。
- https://github.com/ansible-collections/ansible.posix/issues/164

> It was already done in a few PRs, the last one was ansible/ansible#63772
Somebody needs to submit it again.

「PR出てるからあとは再度submitするだけじゃん」ってコメントもあるが、今年の5月以降アクティビティがない。

# おわりに
issueを追いかけるだけで記事を書くか迷いましたが、現状整理という目的で書いてみました。
OSS活動したことないですけど、これを機会にコントリビュートしてみたいなと思いました。今後の自分に期待。
ImTui でテキスト UI を極めたいメモ

## 背景

GPU サーバーで機械学習とかしたり, レンダリングしたり,...
設定パラメータとか, 画像/音声とか可視化したい...
そんなに複雑なものはいらないのでぱぱっと確認できればよい...

しかし X11 とか RDP がめんどいし, 多くの場合はうまく動かぬ...
web UI も Docker とか多段 proxy やっていると設定めんどい..

Text based UI ImTui がありました!

https://github.com/ggerganov/imtui

ありがとうございます.

## tmux で使う

https://github.com/ggerganov/imtui/issues/10

TERM を設定する必要があります.

## 画像を表示する

T.B.W.

### その他

画像表示だけであれば imcat を使う手もあるでしょう　

https://github.com/stolk/imcat
認定スクラムマスター資格をとるまでの流れ

# 始めに

本記事は、資格取得に関する内容で、スクラムに関する内容は含みません。また、内容は私が取得したRSM (Registered Scrum Master)に基づいて記載しています。本記事が資格取得の助けになれば幸いです。

# 注意事項

本内容は記事を記載した時点での情報となりますので、申し込み時には実際のサイトで最新の内容を確認する事をお勧めします。

# 目次

基本的な流れは以下になります。

1. 取る資格を決める。
1. 日付を決める。
1. 料金を振り込む。
1. トレーニングに参加する。
1. テストを受ける。
1. 証明書を発行する。
1. 費用を精算する。

# 手順

## 取る資格を決める

### 資格の種類

有名な認定スクラムマスターの資格は3種類あります。

#### PSM (Professional Scrum Master™) / Scrum org.

1時間程度のテストのみで、費用も数万円と安いです。ただし、英語のみのようです。

https://www.scrum.org/assessments/professional-scrum-master-i-certification

#### CSM (Certified Scrum Master®)/ Scrum Alliance®

本家サイトはこちらです。

https://www.scrumalliance.org/get-certified/scrum-master-track/certified-scrummaster

研修はこちらから。3～5日の研修で、3,200ドルの費用が掛かるようです。

https://www.odd-e.jp/ja/service_scrumalliance/#service_csm

#### RSM (Registered Scrum Master™) / Scrum Inc.

旧LSM(Licensed Scrum Master)です。名前が変わったようです。
2日の研修で、20万円の費用が掛かります。

https://scruminc.jp/training/master/

##### 選択理由

私が選択したのはRSMでした。理由は以下です。

- 同僚がRSMを取っていたので実態が把握できた。
- 5日間業務を明けるのは厳しい。
- 一度通しで研修を受けたかった。
- 資格の取得ができると会社で全額補助して貰える。
- 英語でのテストは辛い。
- CSMは厳しいと言う[記事](https://note.com/otossy/n/n1839dfd2760b)を幾つか見た。

と言う事で、一番~~甘そう~~優しそうな資格にしました。

## 日付を決めて、申し込む

- [サイト](https://scruminc.jp/training/master/)を開く。
- トレーニングの候補日を確認する。
- 2日間9-18時を明けられる日を選択する。
    - 15日以上前までであれば日程は変更できるそうです。
- 詳細を記載し、申し込みをする。

## 料金を振り込む

- 申し込みをするとメールに請求書のPDFが送られる。
- 記載された内容に基づいて振り込みをする。
    - 通常14日前までに振り込まないと、キャンセルされてしまうようです。
- 振り込みが完了したメールが来るので確認する。

## トレーニングに参加する

- 事前にメールが送付されるので確認する。
    - オンラインミーティングのURL
    - 資料のURL
        - 可能なら事前に読んでおく。
- 当日、オンラインミーティングのURLにアクセスする。

## テストを受ける

- 研修の後半でテストを受けるサイトへの登録を一緒にする。
- 研修が終わったら、登録したサイトでテストを受ける。
    - 資料を見ながら受験をする事ができる。
    - 1回までは無料で再受験できる。
    - 最悪で２回落ちても相談すると何しかしてもらえるかも？
    - テストの結果は受講後直ぐに分かります。
 
個人的な感想ですが、真面目に研修を受けて、資料で確認しながら受験すれば落ちる確率は低い内容だと思いました。

## 証明書を発行する

- 無事にテストに受かると先ほど登録したサイトから証明書を発行する事ができます。

## 費用を精算する

会社で受験する場合、費用の精算が必要になる事が多いので、必要な場合は忘れずに。

- 領収書の発行を依頼する。
    - 依頼方法は[こちら](
https://scrumincjapan.zendesk.com/hc/ja/articles/360050665714-%E9%A0%98%E5%8F%8E%E6%9B%B8%E3%81%AF%E3%81%84%E3%81%9F%E3%81%A0%E3%81%91%E3%81%BE%E3%81%99%E3%81%8B-)で案内されています。
- 領収書を受領する。
    - 依頼してから数営業日でメールに送られてきます。
    - 繁忙によって変わると思うので、必要なら早めに依頼しておきましょう。
- 経費申請をする。
    - 会社ごとでやり方が異なるので、そのやり方で。

# 最後に

簡単ですが、認定スクラムマスター資格をとるまでの流れについて紹介をさせて頂きました。スクラムは非常に有用な方法ですので、改めてもっと広がると良いと思いました。その為にも今回の記事が参考になれば幸いです。
Fastlane導入メモ（mac編）

何度も繰り返してやっていたため、メモで残しておく。

## brewインストール
すでにインストールされたら省略

```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
```

## rubyバージョン確認、rbenvインストール
すでに`ruby`が2.７以上の場合インストールされたら省略。
バージョンが古い場合は`rbenv`インストールして2.7以上の`ruby`をインストール

```
brew install rbenv ruby-build rbenv-gem-rehash readline
```

## `.bash_profile` や `.zprofile` にPATH の設定を追加
```
vi ~/.bash_profile or vi ~/.zprofile
```

追加内容(.zprofile)
```
export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"
```

## source コマンドで profile を再読み込み

```
source ~/.bash_profile
```
## rubyインストール
```
rbenv install -l　　　　　//　インストール可能なリスト確認

rbenv install 2.7.1    // インストール
```

## システム全体のruby のバージョンをインストールしたものに変更
```
rbenv global 2.7.1
```

## bundlerインストール
```
gem install bundler

bundle init
```

## Gemfileを編集
```
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

# gem "rails"

gem "fastlane"
```

## fastlane導入
```
sudo bundle update
```

## fastlane設定
マニュアルでとりあえず実行し手動でFastfileを変更する(4.を選択)

```
bundle exec fastlane init
```
Databricksにおける検索

[Search Databricks \| Databricks on AWS](https://docs.databricks.com/search/index.html) [2022/10/3時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

本書では、Databricksワークスペースにおけるノートブック、クエリー、ダッシュボード、アラート、ファイル、フォルダー、ライブラリ、リポジトリの検索方法を説明します。

また、Unity Catalogに登録されているテーブルの検索方法も説明します。

:::note info
**注意**
このセクションで説明されている検索の挙動は、顧客管理の暗号化キーを用いているワークスペースではサポートされていません。これらのワークスペースでは、サイドバーの![](https://docs.databricks.com/_images/search-icon.png)**Search**をクリックし、**Search Workspace**フィールドに検索文字列を入力します。入力すると、名前に検索文字列を含むオブジェクトが一覧されます。リストに表示される名称をクリックすることで、ワークスペースのオブジェクトをオープンします。
:::

# 検索ダイアログへのアクセス

ワークスペースを検索するには、Databricksワークスペースのトップバーの**Search**フィールドをクリックするか、キーボードショートカットCommand-Pを使用します。**Search**ダイアログが表示されます。
![](https://docs.databricks.com/_images/search-dialog.png)

テキスト文字列やオブジェクトタイプ、その両方で検索することができます。検索条件を入力した後にEnterを押すと、システムはあなたがワークスペースでアクセスできる全てのクエリー、ダッシュボード、アラート、ファイル、フォルダー、ノートブック、ライブラリ、リポジトリを検索します。ワークスペースで[Unity Catalogが有効化](https://docs.databricks.com/data-governance/unity-catalog/enable-workspaces.html)されている場合には、テーブル名、テーブルのコメント、カラム名、カラムのコメントを検索することもできます。

検索結果のアイテムをクリックすると、適切なペルソナベースの環境で自動的にアイテムがオープンされます。例えば、クエリーをクリックするとDatabricks SQLでオープンされます。

# テキスト文字列による検索

検索フィールドにタイプすることでテキスト文字列による検索を行うことができます。システムは、ワークスペースでアクセスできる全てのオブジェクトの名前を検索します。また、ノートブックコマンドのテキストに対しても検索しますが、非ノートブックのファイルの中身は検索しません。
![](https://docs.databricks.com/_images/search-text.png)

# 検索を特定のオブジェクトタイプに限定する

特定のタイプのアイテムに検索を限定(ノートブックのみ等)するには、対応するタブをクリックします。テキストフィールドを空のままにしておくと、指定されたタイプの全てのオブジェクトを検索します。また、オーナーや最終更新日のドロップダウンメニューを使用して検索することができます。
![](https://docs.databricks.com/_images/search-type.png)

# Unity Catalogが有効化されたワークスペースのテーブルを検索する

[Unity Catalogが有効化](https://docs.databricks.com/data-governance/unity-catalog/enable-workspaces.html)されたワークスペースでは、Unity Cata logに登録されたテーブルを検索することができます。テーブル名、テーブルのコメント、カラム名、カラムのコメントを検索することができます。親のカタログ、データベース(スキーマ)で検索結果をフィルタリングすることができます。

検索結果には以下は含まれません。

- 参照権限を持たないテーブル。

    言い換えると、検索結果に表示されるテーブルに対しては、あなたは当該テーブルに対する`SELECT`権限、親のスキーマとカタログに対する`USAGE`権限を持っている必要があります。アカウント管理者とメタストア管理者はデフォルトでこれらの権限を持っています。他のすべてのユーザーは、これらの権限を付与してもらう必要があります。[Unity Catalog privileges and securable objects](https://docs.databricks.com/data-governance/unity-catalog/manage-privileges/privileges.html)をご覧ください。

- レガシーなHiveメタストアのテーブル(すなわち、`hive_metastore`カタログのテーブル)。

    これらのテーブルをUnity Catalogにアップグレードし、検索できる様にするには、[テーブルとビューをUnity Catalogにアップグレードする](https://qiita.com/taka_yayoi/items/5e896b50b915b9de8fb3)をご覧ください。

また、[Data Explorer](https://docs.databricks.com/data/search.html)を用いてテーブルを検索することができます。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)
pythonライブラリのversion管理（not best practice）

pythonのライブラリを個人で作成していて、バージョン管理方法に悩みました。

解決したい課題は
・setup.py中のversionと__version__.pyのversionが二重管理になること
・出来れば、ビルドするごとに自動でバージョンが挙がってほしい
　の2点です。



## 検討した方法
 ベストプラクティクスとは思いませんが、以下の様な形式にしました。
黒魔術感はありますが、出来るだけ自然な形にしたつもり

①setup.cfgファイルで__version__.pyを参照する
②__version__.pyのヴァージョンをビルドごとに+1する


__version__.py
 ```
__version__ = "0.1.5" 
 ```

setup.cfg
 ```
[metadata]
version = attr: library.__version__.__version__ 
```

setup.py
```
from setuptools import setup
setup()
```

update_build.py
```
import library_name.__version__ as v

__major__ = int(v.__version__.split(".")[0])
__minor__ = int(v.__version__.split(".")[1])
__build__ = int(v.__version__.split(".")[2])
__build__ += 1
__version__ = ".".join([f"{__major__}", f"{__minor__}", f"{__build__}"])
with open("library_name/__version__.py", "w") as f:
     f.write(f"__version__ = \"{__version__}\"")
with open("version.txt", "w") as f:
    f.write(__version__)
```

setup.bat
```
@setlocal enabledelayedexpansion
call conda activate env_test
for /f %%a in (version.txt) do (
   set version=%%a)
call python setup.py sdist
call pip uninstall library_name --yes
call pip install  dist\library_name-%version%.tar.gz
call python update_build.py
```

pip installする際のアーカイブ名を指定するために、version.txtを利用していますが
これは__version__.pyを用いても良いと思います。

setup.batを実行することで、自動でビルド番号の更新ができます。


## 参考にしたリンク
https://qiita.com/tonluqclml/items/6da162d8af1534bf5e6e
https://qiita.com/utkamioka/items/b62d0e03f1bc1aed5df7
https://qiita.com/gyu-don/items/c047098e1a58dc8d8d96
https://astropengu.in/posts/23/
CDKTF で New Relic Provider を使ってみる

どこにもサンプルがなかったので残しておきます。

## まず Project を作成

こちらの公式マニュアルを参考に Project を作成します。
今回は TypeScript を使用します。

https://learn.hashicorp.com/tutorials/terraform/cdktf-install?in=terraform/cdktf

```
npm install --global cdktf-cli@latest
```

```
cdktf init --template=typescript --local
```

## New Relic Provider を導入

README に記載された通りに New Relic の Provider をインストールします。

https://github.com/cdktf/cdktf-provider-newrelic

```
npm install @cdktf/provider-newrelic
```

main.ts に必要なライブラリを import してきます。

```ts:main.ts
import { Construct } from "constructs";
import { App, TerraformStack } from "cdktf";
import { NewrelicProvider } from "@cdktf/provider-newrelic/lib/provider"

class MyStack extends TerraformStack {
  constructor(scope: Construct, name: string) {
    super(scope, name);

    // define resources here
    new NewrelicProvider(this, "test", {
      accountId: 12345,
      apiKey: "test",
      region: "US"
    });
  }
}

const app = new App();
new MyStack(app, "test_cdktf");
app.synth();
```

`NewrelicProvider` は Terraform での `provider  "newrelic"` に対応しています。

```hcl:main.tf
provider "newrelic" {
  account_id = 12345
  api_key = "test"
  region = "US"
}
```

## 他のやり方も
`./.gen` 配下にソースを落として利用する方法もあるようです。
どちらの方がよいのかは分かりませんが、こちらで紹介されてた手順に倣ってやってみます。

https://blog.ojisan.io/terraform-cdk-gcp/#genprovidersgoogle-というやり方がある

下記のように provider 名と version を記載する。 

```json:cdktf.json
{
  "language": "typescript",
  "app": "npx ts-node main.ts",
  "projectId": "8d351fea-f8e5-41c7-9b72-3348eecf3f8e",
  "sendCrashReports": "false",
  "terraformProviders": [
    "newrelic/newrelic@~> 3.4.4"
  ],
  "terraformModules": [],
  "context": {
    "excludeStackIdFromLogicalIds": "true",
    "allowSepCharsInLogicalIds": "true"
  }
}
```

コマンドを叩いてゲットしてくる。

```
npm run get
```

`./.gen` 配下からライブラリを取得してくる。

```ts:main.ts
import { Construct } from "constructs";
import { App, TerraformStack } from "cdktf";
import { NewrelicProvider } from "./.gen/providers/newrelic/provider";

class MyStack extends TerraformStack {
  constructor(scope: Construct, name: string) {
    super(scope, name);

    // define resources here
    new NewrelicProvider(this, "test", {
      accountId: 12345,
      apiKey: "test",
      region: "US"
    });
  }
}

const app = new App();
new MyStack(app, "test_cdktf");
app.synth();
```

以上です。
Google UXデザイン：共感マップを作る

# はじめに

わたしが[Google UX Design Certificateで得られた素晴らしい体験][google]を、特に重要だと思われるポイントを小さく分割して、わかりやすく簡潔に紹介していきます。

興味があれば、ぜひ Google UX Design Certificateを受講してみてください。

[google]: https://qiita.com/mapami/items/7a0d0a3d4661c50f8bec

https://www.coursera.org/professional-certificates/google-ux-design

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/3729adea-8dba-b2a3-6127-9b0bf6886e54.png" width="800">

# 共感マップ（エンパシーマップ）とは

共感マップは、UXデザイナーがユーザーに共感するためのツールの１つであり、インタビューによって、特定のタイプのユーザーについて学んだことを説明する、わかりやすいチャートです。

# 共感マップの作り方

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/e3ac7414-4e01-8f37-6d08-167b421458fd.png" width="600">

### ステップ1：USER

インタビューされたユーザの名前を記入します。

名前がついていると、元の調査を見返す必要があるときに役立ちますし、他のマップと区別することができます。

### ステップ2：SAYS

インタビューからそのままの引用をします。

つまり、相手が言ったことをそのまま書くのであって、自分の言葉で要約しないことです。引用を要約してしまうと、誤ってユーザーの意味を間違って解釈してしまう可能性があります。

また、インタビュー中にユーザーが同じ問題を何度も繰り返すようであれば、それはおそらく大きな問題点でしょう。

ユーザーが述べている課題には特に注意を払い、ユーザーが口にした望ましい利益や期待を記録しましょう。

### ステップ3：THINKS

ここでは、ユーザーが表現した考えをまとめます。

ユーザーが言葉で表現していなくても、ボディランゲージやトーンなど、目に付く指標で伝えた感情を追加してください。これらの感情のいくつかは推論することができますが、ユーザーについて仮定しないように注意する必要があります。

### ステップ4：DOES

ユーザが課題を克服するために取る手順や行動について、すべて「DOES」のマスに入れることができます。

### ステップ5：FEELS

ユーザーが感じたことを列挙してください。

このメモは、「THINKS」マスに書いたものと重複している場合があります。それでもかまいません。

このプロセスは、あなたの観察を徹底的に文書化することを意図しています。あなたがインタビューを行う人であれば、怒りや不満、興奮などの感情のサインに気づくかもしれません。インタビュー中にユーザーが明確に感情を口にしない場合、質問で感情を探ることができます。

# サンプル

犬の散歩を予約するための新しいアプリに関するユーザインタビューより

### SAYS

- "家に入れるのに安全な人、犬の扱いがうまい人をどうやって知ったらいいのかわからない"
- "事前にスクリーニングできるドッグウォーカーを見つけたい。"
- "一貫して誰かを予約する方法が欲しいです。"
- "理想は、私は事前に犬の世話をする日をスケジュールすることができます。"
- ・・・頼める人があまりいない"
- "少し高くてもいいから...これを手に入れたい"

### THINKS

- 定期的にドッグウォーカーを予約したい
- ドッグウォーカーを事前にスクリーニングしたい
- 事前にドッグウォーカーを探したい
- 犬の散歩は高価である
- 動物とのふれあいの経験がある人にお願いしたい
- 犬の散歩を依頼できるほど知り合いがいない
- より一貫したドッグウォーカーを望んでいる

### DOES

- フルタイムの教師として働いている
- 朝一番と夕方に犬を散歩させている
- 近所の17歳の高校生に犬の散歩を頼んでいる

### FEELS

- 犬を散歩に連れて行けない罪悪感
- 愛犬ともっと一緒にいられないのが悲しい
- 休暇に犬を連れていけないのが悲しい
- 彼女のスケジュールにコミットすることができます一貫性のある、専用のドッグウォーカーを見つけることが心配
- 大型犬の散歩が心配
- 愛犬が急病になったとき、現在のドッグウォーカーが対応してくれるか心配

# 共感マップの種類

共感マップには、次の２種類があります。
- ワンユーザー・エンパシーマップ
- アグリゲーション・エンパシーマップ（マルチユーザー・エンパシーマップ）

### ワンユーザー・エンパシーマップ

1人のユーザーのインタビューからデータを取ってエンパシーマップにすることで作成されます。

この方法は、デザイナーが1人のユーザーの考えや感情、特徴を抽出し、データを集めやすい形式にするのに役立ちます。

### アグリゲーション・エンパシーマップ

同じような考え、意見、または品質を共有するユーザーのグループを表します。

まずは複数のワンユーザーエンパシーマップを作成し、ユーザーが同じようなことを表現したマップを組み合わせて新しいエンパシーマップにします。

これは、デザイナーが製品を使用するセグメント、つまり似たような傾向を持つ人々のグループを特定するのに役立ちます。それにより、デザイナーはテーマを特定することができ、デザインするグループにより共感することができるようになります。

# さいごに

ユーザーに共感することの意味が分かってきたのではないでしょうか。

潜在的なユーザーと対話するたびに、彼らの視点や痛みのポイントを理解することに少しずつ近づいています。
Antiselect(項目の不選択機能)

[Teradata Vantage™ - Advanced SQL Engine分析関数](https://docs.teradata.com/r/RVMbmlSIX4ytgHN2lHwj7w/root) [リリース日:2022/7 リリース番号：17.10]の翻訳です。

> Vantageアナリティクス マシンラーニング関数シリーズのコンテンツです。

#### 説明
Antiselectは、多数の列を持つテーブルからデータを選択するときに不要な列のセットを指定して、必要な列のセットのみにすることができます。

#### ユースケース
機械学習を行う前などで、一部の列を除いて、それ以外の多数の列を持つデータセットを作成が必要な場合に利用します。

#### 入力データ
|ID|SRCE|AGE|GENDER|RACE|NUM BUYS|NUM SELLS|
|:-:|:-|-:|:-|:-|-:|-:|
|1|Site A|62|Male|White|30|40|
|2|Site B|29|Female|Asian|33|23|

#### 関数の記入例1 :　列名を指定する場合
```Antiselect1.sql
SELECT * FROM Antiselect (
  ON Table_Name /* 入力テーブル名の記入 */
  USING
  Exclude ('SRCE', 'AGE', 'RACE')   /* 不選択にする列のリスト */
) AS Alias;
```

#### 関数の記入例2 ： 列のポジションを指定する場合
```Antiselect2.sql
SELECT * FROM Antiselect (
  ON Table_Name /* 入力テーブル名の記入
  USING
  Exclude ('[1:2]','RACE')   /* ポイントは０から開始する
) AS Alias;
````

#### 出力データ
|ID|GENDER|NUM BUYS|NUM SELLS|
|:-:|:-|-:|-:|
|1|Male|30|40|
|2|Female|33|23|

## おわりに
:::note warn
警告
この本書は[Teradata Vantageドキュメンテーション](https://docs.teradata.com/)よりトピックに必要な情報を抜粋したものです。掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。正確な内容については、原本をご参照下さい。
また、修正が必要な箇所や、ご要望についてはコメントをよろしくお願いします。
:::

#### Teradata Vantageへのお問合せ
[Teradata Vantage へのお問合せ](https://www.teradata.jp/About-Us/Contact)
s3に10万ファイルをアップロードするには534秒かかる(僕の環境では)

めもです

wslで10万ファイル作成(5分くらい?)

```sh
mkdir ~/many-files; cd many-files
for i in `seq 1 1000000`; do touch dummy$i.txt; done
```

(```touch {...```コマンドで作成する方法だと、10万ファイル対象では数が多すぎるエラーがでて作成できなかったので、for/seqでやりました)

アップロード

```sh
cd ~
date; time aws s3 cp many-files s3://bucketname/ --recursive > /dev/null; date
```

(標準出力にアップロード状況ががーっと出力されるのがいやなのとスピードに影響しそうなのでnullに送っています)

しばらく経過後

```
Fri Oct  7 16:30:13 JST 2022

________________________________________________________
Executed in  534.17 secs    fish           external
   usr time  394.02 secs  234.00 micros  394.02 secs
   sys time  109.78 secs  256.00 micros  109.78 secs

Fri Oct  7 16:39:07 JST 2022
```

# アップロード中のローカルPCのパフォーマンス

- wsl
    - CPU使用率95%継続(awsプロセス)
- windows
    - CPU使用率30%継続(vmmem)
    - ディスク
        - read: 0または10～150KB程度で推移, max1.5MB
        - write: 0または150～1MB程度で推移, max15MB
    - NW
        - 送信: 3Mbps(400KB弱)前後で推移
        - 受信: 1Mbps(125KB)前後で推移
            - なぜか意外と受信もあるのだな..
Azure DevOpsのPipeline実行時にパラメーターを渡す

Pipelineのyamlに対して以下のように定義する
手動実行以外のトリガーから実行されたり、パラメーターを渡さずにPipelineが実行された場合は`default`の値が使われる
```yaml
parameters:
  - name: Boolean
    type: boolean
    default: false
  - name: String
    type: string
    default: sample text
```

Azure DevOpsのWeb画面から、対象のPipelineで「Run Pipeline」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/6b535573-3756-b20b-ccc1-33dbbaed1e74.png)

先程定義したBooleanとStringを設定することができる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/76f56bc9-8c00-4b3a-2e17-6eedf6827b07.png)

yaml内では、```${{ parameters.xxxx }}```で参照できる
AZ-900合格への道「Microsoft Azure Virtual Training Day：基礎」を受講

株式会社船井総研デジタルの梅津と申します。
9月からMicrosoft Azure Fundamentals(AZ-900)合格に向けて学習しつつ、試験合格に向けて参考となる情報を日々投稿しております。
今回は「Microsoft Azure Virtual Training Day：基礎」を受講しましたので、紹介いたします。
なお、この他にもAZ-900の試験範囲(日本語版)やMicosoft Learnを使用した学習のまとめも投稿しておりますので、もしよければそちらも併せてご活用ください。

https://qiita.com/fsd-jume/items/e4ec76959adb547ac5e8

## セミナーについて
[「Microsoft Virtual Training Days」](https://www.microsoft.com/ja-jp/events/top/training-days)はMicrosoft社が提供するオンラインセミナーであり無料で受講できます。
そのうち、[「Microsoft Azure Virtual Training Day：基礎」](https://www.microsoft.com/ja-jp/events/top/training-days/azure?activetab=a1%3aprimaryr4)については、Azureだけでなくクラウド自体が初めての方も対象としたセミナーとなっており、AZ-900の試験範囲に含まれる内容を学習できるものとなっております。
また、このセミナーを受講することで、[「Microsoft Azure Fundamentals 認定試験」](https://learn.microsoft.com/ja-jp/certifications/azure-fundamentals/)をセミナー受講から90日以内に無料で受験ができるようになります。
そのため、これからAZ-900試験を受けようと考えている方に、特におすすめのセミナーとなっております。
決められた日程の中から選択して受講することができ、期間は2日間でそれぞれ9:30-13:00までの3時間30分のセミナーとなっております。※開始時間と終了時間は会によって変わる可能性があります

## セミナーの内容
**◆パート1(1日目)**
・Azureクラウドの概念
・Azureのコアサービス
・Azureソリューションと管理ツール

**◆パート2(2日目)**
・Azureのセキュリティとネットワークセキュリティ
・ID、ガバナンス、プライバシー、コンプライアンス
・Azureの価格とライフサイクル

## セミナーの感想
・投影して説明していただける資料が簡潔で分かりやすいため、初めて聞く用語でも理解がしやすい
・実際にAzure Portal上で操作して説明していただけるので、視覚的にも理解しやすい
・日本語で説明していただけるので、英語が苦手でも安心
・AZ-900合格に向けた最初の一歩として非常に効果的で、Azure含めたクラウドにあまり詳しくなくとも充分に理解しやすい
・セミナーだけではAZ-900の合格は難しいと思われるため、その後理解を深める必要がある(90日以内に)

## セミナー後の学習方法について
AZ-900の合格に向けて無料で学習できる方法をご紹介します。

・**Microsoft Learn**で学習
試験範囲をきちんと網羅しているだけでなく、無料で実際にAzureを操作できます。
[Microsoft Certified: Azure Fundamentals](https://learn.microsoft.com/ja-jp/certifications/azure-fundamentals/)

・**試験対策オンデマンド講座**で学習
試験対策に特化した内容となっており、試験の概要や位置づけ、各試験問題の特徴や解説、回答のポイントなどを紹介しています。
[AZ-900 : Microsoft Azure Fundamentals 試験対策](https://info.microsoft.com/JA-HCSAzureHybridInfra-WBNR-FY21-02Feb-11-AZ900PrepSession-SRDEM61308_LP02OnDemandRegistration-ForminBody.html)

・**Qiitaに投稿された学習内容のまとめ**で学習
Micosoft Learnで学習した内容をできるだけ簡潔にまとめた投稿です。もしよければご活用ください。
[Azure Fundamentals(AZ-900)：試験合格に向けた学習内容のまとめ](https://qiita.com/fsd-jume/items/e4ec76959adb547ac5e8)

******
最後まで読んでいただき、ありがとうございました。
皆様のAZ-900合格に向けて少しでもお力になれれば幸いです。
Boot Strap集


色々使えそうなBootstrapを集めてみました

## 1.Material Kit
https://demos.creative-tim.com/material-kit/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2893241/c3bc6522-9106-f218-4ee0-0c4e00d5ca7e.png)


ピンク基調な感じで意外と好印象。トップページにありかも

## 2.Gentelella
https://colorlib.com/polygon/gentelella/index3.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2893241/9b5b008b-ebce-3465-3556-f7c63053cd8c.png)


割とお気に入りの１つです。ダッシュボードがまさに求めていたこれ感

## ３.Marble
https://freehtml5.co/preview/?item=marble-free-html5-bootstrap-template-for-portfolio-or-multi-purpose-websites

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2893241/95005fa1-ba5b-71ed-def0-6317bffc4080.png)


これはNavバーが左にあるのがとても面白いです。色が好みですね

## ４.Mountain King
https://themeinthebox.com/demo/mountain-king-html/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2893241/65b7229e-31db-1c3e-4d8c-47ab98e7ba59.png)


写真を活かした感じのトップページがかっこいい（画像頼りなとこある）

## ５.UIkit
https://getuikit.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2893241/ab0c0a80-3bab-98a8-09f4-600cbef70900.png)


シンプルイズザベストのど真ん中をいくスタイル。嫌いじゃないぜ

## 6.Now Ui Kit
https://demos.creative-tim.com/now-ui-kit/index.html?_ga=2.71849115.981086525.1665124162-1303463858.1665124162#pablo

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2893241/2f4e614a-c7aa-fce6-ba80-7835e19661c6.png)


ボタンとかが好きかな

## 7.Click By ThemeWagon
https://technext.github.io/click/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2893241/2cf60f27-5db1-83d6-fed3-10f587bd1a8c.png)


ポートフォリオのページ作るなら割と便利かも

## 8.Cyborg
https://technext.github.io/cyborg/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2893241/d2f25784-f08e-4f6d-bbec-517293641abb.png)

近未来感あってお気に入り

## 9.HOME
https://technext.github.io/cyborg/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2893241/e2843e98-8e89-17ab-775a-27e545c1718f.png)

EC用bootstrap


# 参考資料
https://themewagon.com/

# 随時更新予定です
Deviseのデフォルトバリデーション

# はじめに
こちらは、deviseにてデフォルトでかかっているバリデーションを忘れないために記載。

## バリデーションの種類
以下の項目に関しては、モデルで新たにバリデーションを実装する必要はない。
（Deviseにデフォルトでバリデーションが備わっているため）。
・メールアドレスが必須であること。
・メールアドレスが一意性であること。
・メールアドレスは、@を含む必要があること。
・パスワードが必須であること。
・パスワードは、6文字以上での入力が必須であること。
・パスワードは、129文字以上では登録できない。
・パスワードとパスワード（確認）は、値の一致が必須であること。
Manjaro の使い方

インストールの為に次のファイルをダウンロードします。

```text
2528M  8月 16 21:39 manjaro-xfce-21.3.7-minimal-220816-linux515.iso
```

USB に書き込みます。

```text
# dd if=manjaro-xfce-21.3.7-minimal-220816-linux515.iso of=/dev/sda  oflag=direct bs=1048576
2527+1 レコード入力
2527+1 レコード出力
2650228736 bytes (2.7 GB, 2.5 GiB) copied, 376.585 s, 7.0 MB/s
```

USB ブートで、インストールをすすめます。

## 日本語の入力
こちらのページの通りに行います。
[Manjaro Linux for Japanese Users: はじめの第一歩](https://zenn.dev/phoepsilonix/articles/manjaro-linux-for-japanese-users-01)

ミラーサーバーを日本にする。

```bash
sudo pacman-mirrors --geoip
```

日本語フォントと日本語入力をインストール

```bash
sudo pacman -S ipa-fonts noto-fonts-cjk
sudo pacman -S fcitx-mozc fcitx-configtool fcitx-table-other fcitx-table-extra
```

.xprofile で入力方法を指定

```text:.xprofile
export LANG="ja_JP.UTF-8"
export XMODIFIERS="@im=fcitx"
export XMODIFIER="@im=fcitx"
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export DefaultIMModule=fcitx
```

ログインしなおします。
ITエンジニアを採用しよう～対外向け情報発信の重要性について～

シリーズ：最近のトレンドで「セキュリティ強化」や「内製化」が挙げられます。私の会社のようにIT会社ではない会社がどうやってIT人材を集めるのかを考えていきたいと思います。
※私の個人的意見です。

## なぜ対外向け情報発信が重要なのか

* IT会社がよく技術ブログやってるから。
　自分は転職組でIT会社にいたので普通のように思っていましたが、そもそも情報を発信する文化がないんです。でも、ないなら作ればいいのです。ということで、その第一歩としてQiitaに記事を書いてみることを始めました。
何がいいのかというと、技術アピールができることはもちろん、会社の強み弱みから雰囲気まで伝えられます。採用HPなんかより、実際に手を動かしてる人の方が信ぴょう性や現実味ありますよね。(アドベントカレンダーとか企画系は特に)

* Z世代に受けるから。(たぶん)
　個人的に「〇〇世代」という言い方は嫌いです。(ゆとり言うな！頑固世代め！笑)Z世代という1998年ぐらいか2012年辺りの世代は技術がある程度確立された状態で育ってきているので、「調べりゃ分かる」ができるということです。
頑固世代では考えられないことでしょうが、採用HPよりもリアルな声を探してくるのです。探した先にたどり着くのが企業の対外向け情報発信サイトだったりするわけです。そりゃあった方でいいですよね。

* うちの会社の技術を見せびらかしても損をしないから。(むしろ得しかない)
　会社が辞める人を見て「人材流出が～」「技術が～」なんて言ってますが、本当に技術が海外に漏れてやばい会社は一握りです。うちの会社はそんなレベルの足元にも及びません。ご安心ください。
どうあがいても環境構築の仕方だったり、エラーの回避の仕方だったりをチームの雰囲気を交えて情報発信するだけしかできません。文句を言う前に手を動かせと教わったはずなのですが・・・

* ナレッジ代わりになるから
　書いていったものは内外問わずナレッジとして蓄積されます。自分の振り返りにもなります。社外の人に読んでもらって、「こうした方がいいんじゃない？」や「同じ問題抱えてましたが解決しました！」なんてコメントもらったら嬉しいじゃないですか。他所の有識者がうちのナレッジを書いてくれているようなものです。変にワードやエクセルでまとめられる方が管理しにくいです。

## まとめ
いつでもどこでも情報を集められる時代に閉鎖的空間にとどまっていることは「損」でしかありません。普通、会社の口コミとかを見て「給料低そう」「休暇取りにくいのか」を見てある程度会社のイメージしてから応募するかしないかを決めると思います。採用HPや求人票だけ見て「ここは自分に絶対合ってる」なんて思う人いないわけです。
公式の情報として発信していくことでIT人材が反応してくれるのではないかと期待しています。
（さっそく社内体制整えるぞ～！）

P.S.
ITエンジニアって幅広すぎて募集時はNGワードだと思っているのですが私だけでしょうか・・・
スマホアプリエンジニアとかインフラエンジニアとか細かい分野がありますし。
私は「どの」エンジニアだよってツッコミいれる人です。


https://qiita.com/Waddy675/items/d394698fd0810835a135

https://qiita.com/Waddy675/items/2e003e05dd6ffa1f482f
Homebrewを入れ直ししたらrails g scaffoldでつまづく理屈を調べてみた

自分の覚書として残します。

## 環境

OS macOS 12.3.1（M1チップ）
Ruby 3.0.1
Rails 6.1.6
Postgresql 14.5

## 経緯

```bash
$ rails g scaffold 〜
```
を実行したところ、エラー発生。
```bash
/Users/user_name/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require': dlopen(/Users/user_name/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/pg-1.4.3/lib/pg_ext.bundle, 0x0009): Library not loaded: '/usr/local/opt/postgresql/lib/libpq.5.dylib'
  Referenced from: '/Users/user_name/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/pg-1.4.3/lib/pg_ext.bundle'
  Reason: tried: '/usr/local/opt/postgresql/lib/libpq.5.dylib' (no such file), '/usr/local/lib/libpq.5.dylib' (no such file), '/usr/lib/libpq.5.dylib' (no such file) - /Users/user_name/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/pg-1.4.3/lib/pg_ext.bundle (LoadError)
```

## 解決への道のり
まず注目したのが、以下のパス。
```
/usr/local/opt/postgresql/lib/libpq.5.dylib (no such file)
```
```
/usr/local/lib/libpq.5.dylib (no such file)
```
いずれも `/user/local/` を見にいって `no such file` と言われて失敗している。
なぜこのパスを見にいっているのか？

### 1. これってあれかも？
気づいたのが、Homebrewのこと。
私はM1 macbookを使っていますが、Intelチップモードでターミナルを起動したままHomebrewをインストールしたことがありました。その結果、 `/usr/local/` 配下にインストールされたHomebrewで、Rubyをはじめ、RailsやPostgreSQLなどもインストール。
途中で気づき、ターミナルをM1チップモードに切り替えて、Homebrewを入れ直ししたことがあったのです。

今回のエラーメッセージに出てくる `/user/local/` とは、この名残では？

### 2. 仮説を立ててみた
エラーメッセージにある
```bash
Referenced from: '/Users/user_name/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/pg-1.4.3/lib/pg_ext.bundle'
```
というメッセージから、以下のような仮説を立てました。
- `Referenced from` とあるように、 `pg_ext.bundle` という（謎の）ファイルが、見に行くパス情報を持っているのではないか。
- このgemは、Homebrewが `/user/local/` 配下にある時にインストールしたgem。だから、 `/user/local/` のパスを見にいこうとしているではないか。
- であれば、Homebrewが `/user/local/` 配下にある時にインストールしたgemを入れ直しをすれば解決するのではないか。


### 3. 検証してみた
①rbenvを削除
②しかし、ディレクトリはそのまま残っていた
③パス情報を持っているファイルが残っているといけないので、 `.rbenv` ディレクトリごと削除
![スクリーンショット 2022-10-07 11.10.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159704/09cb8d06-8e9b-04cb-b52f-7949ed774104.png)

その上で、
```bash
$ brew install rbenv ruby-build
```
から始まり、Ruby、PostgreSQL、Railsをインストール。

その結果、当初のエラーは発生しなくなりました。

### 4. もっと簡単に解決する方法があった
[@uasiさんからいただいたコメント](https://qiita.com/taraontara/items/2126538faf285bfc7156#comment-ad00ccf77f58d7602b44) にあるように、
```bash
$ bundle pristine
```
を実行すれば、`.rbenv` ディレクトリごとの削除などは不要だったようです。
こんなコマンド、知らなかった！
`@uasi` さん、ありがとうございました！
WindowsのSSH接続でPermission Denied (publickey)エラーのときの対処

# はじめに
Windowsのサーバに、Windowsのクライアントから、鍵認証sshで接続しています。
ところが最近、チームのメンバーから

奴：なぜかとつぜん、接続できなくなっちゃった。なんにもしてないのにぃ…、接続できないとお仕事できないよぅ…ﾋﾟｴﾝ
俺：なんもしてないのに壊れるわけないやんけ…

# エラーの追求
とりあえずpowershellで接続してエラーメッセージを確認します。`-v`オプションを重ね掛けしてデバッグメッセージも確認します。
```powershell
ssh <hostname>　-l <username> -p <port> -i <privatekeypath> -v -v -v
```

passphraseを入力した後、以下のようなメッセージが出て拒絶されます
```
debug3: send packet: type 50
debug2: we sent as publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
<USER>@<HOST>:Permission denied (publickey)
```
通常は`type 52`のパケットを受け取って、認証がうまく行くはずですが、`type 51`を受け取っています。
ともかくpublickeyのアクセス権限周りが怪しそうなので色々考えます。
ちなみにlinuxやmacだと`chmod`で権限変えられますが、`icacls`で変更できます。
が、私は「エクスプローラが使えるのであればそっちの方がラクじゃん…」とおもってしまうぐらいITリテラシーの低い人なので察してください。

# 原因
よくよく確認したら、サーバ側の`~/.ssh/`のアクセス権限がいつの間にか変更されていました。
具体的には、『当該ユーザ以外のユーザも、`~/.ssh/`にアクセスできる状態』になってしまっていました。

きっと我思うに…
1. 誰かがそのユーザの何かしらのドキュメントをエクスプローラで引っこ抜こうとした
1. よう知らんけど管理者権限ユーザとか何かでログインして、`C:\Users\<USERNAME>`にアクセスしようとして、
1. 知らんうちにディレクトリのアクセス権限を書き変えてしまって、
1. それが子ディレクトリにも権限が継承されてしまって、
1. 結果、`~/.ssh/`の権限も書き変わってしまったがために、
1. `Permission denied (publickey)`の原因になった

のではないかと推測します。

# 復旧と対策
1. `~/.ssh/`をエクスプローラのプロパティで開き
1. 「セキュリティタブ」から「詳細設定」を開いて
1. 権限の継承を無効化し
1. 不要なユーザの権限を削除する

# おわりに
なんもしてなくないやんけ！いいかげんにしろ！
[wsl] 地味に便利なmspaint.exeでの画像ファイル表示

こちらの記事が(自分の記事の中では)好評だったので、似たようなやつ見つけたので書いてみます。
[[wsl] 地味に便利なclip.exeでのテキストコピー](https://qiita.com/sasaki_hir/items/45885960b46f87226fd8)

WSL上で画像ファイルを直接表示したいなと思うことがあります。
Linuxで画像ファイルを表示するにはソフトウェアが必要そうで、ちょっと面倒そうでした
で、Windows標準のペイントソフト使えるのか試してみたら普通に使えたので、これでいいじゃんって感じです。
使い方これだけです。

```bat
mspaint.exe <ファイル名>
```

また何か気づいたら書いてみます。

# その他

本当はWindowsのフォトアプリで開きたいのですが、フォトアプリはなんか特殊なフォルダにあるようで(C:¥Program Files¥WindowsApps)、WSLからアクセスできませんでした(Windowsで開こうとしてもセキュリティエラーがでる)

```
ls: cannot open directory '/mnt/c/Program Files/WindowsApps/': Permission denied
```
ExcelでSUMIFのように条件に一致するセルを文字列連結する

# はじめに

評価とか、何かしら社員番号毎に、コメントをもらうようなことがあります。
それを、社員別にコメントを集計したいケースが出てきました。

残念ながら、Excelの標準関数ではできません。ということで少し考えて
スピル関数であるFilter関数と、TEXTJOIN関数を組み合わせることで実現できました。

# 対象データ

|# |A |B  |C  |
|---|---|---|---|
|1|001  |佐藤  |foo  |
|2|002  |鈴木  |bar  |
|3|003  |田中  |baz  |
|4|002  |鈴木  |qux  |
|5|003  |田中  |quux  |

# 実現方法

TEXTJOIN関数と、FILTER関数を組み合わせて実現します。
TEXTJOIN関数は、指定された配列を、指定された区切り文字で連結します。
FILTER関数は、指定された条件に一致するセルを配列で返却します。

|# |F |G  |
|---|---|---|
|1|佐藤  |=TEXTJOIN(", ",TRUE,FILTER(C1:C5,B1:B5=F1,"")) |
|2|鈴木  |=TEXTJOIN(", ",TRUE,FILTER(C2:C6,B2:B6=F2,"")) |
|3|田中  |=TEXTJOIN(", ",TRUE,FILTER(C3:C7,B3:B7=F3,"")) |

組み合わせるといい感じ。こんな実行結果になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132118/ff92ae7b-9806-dc83-1578-547f11d0cf5b.png)

# 参考

https://support.microsoft.com/ja-jp/office/filter-%E9%96%A2%E6%95%B0-f4f7cb66-82eb-4767-8f7c-4877ad80c759

https://support.microsoft.com/ja-jp/office/textjoin-%E9%96%A2%E6%95%B0-357b449a-ec91-49d0-80c3-0e8fc845691c
SOQLのベストプラクティス

# SOQL
- 予約語(SELECT, FROM, WHERE 等)は大文字で記述すること
- SOQLインジェクションを防ぐため、動的SOQLで、変数を文字列結合させる場合、String.escapeSingleQuotesメソッドでエスケープすること。またはローカル変数をバインドさせること。（例：WHERE fooField = :fieldValue）
- 結果が0件であることを考慮して、配列で受け取るよう実装する（ただし、複数件や０件のときに例外をcatchする目的がある場合を除く）
- 抽出件数のガバナ制限（５万件）を考え、クエリの抽出件数のガバナ制限に抵触しないよう実装する
- 実行回数のガバナ制限（200回）を考え、クエリ実行回数のガバナ制限に抵触しないよう、一括で抽出するよう実装する
静止画から動画の作成をFFmpegで行う

## はじめに
FFmpegというソフトを使って、連続した静止画から動画を作成しました。
[別記事](https://qiita.com/ogatoshi/items/deaf7799f9ae98b581af)で紹介しているKC4-C-100Aを使って連続撮影した静止画から動画を作成するということがきっかけの為、[KC4-C-100A](https://www.kyocera.co.jp/prdct/telecom/office/iot/products/kc4-c-100a.html?qiita)のツールが対応してるWindows®を前提とした説明にしていますが、KC4-C-100Aに関係無くお読みいただけます。

![静止画から動画.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843234/b40635ed-d599-b163-dc6c-86a94e226bea.gif)


## 動画作成手順


### 1. FFmpegダウンロード
以下の手順でFFmpegのインストーラーをダウンロードしてください。
1. [FFmpeg公式サイト](http://ffmpeg.org/)に行く
1. 右側にある「Download」ボタン ⇒ Windowsマーク ⇒ 「Windows builds from gyan.dev」を順にクリックして別サイトに飛ぶ
1. 下にスクロールし「ffmpeg-release-full.7z」からファイルをダウンロード

### 2. FFmpeg起動
1. 解凍
ダウンロードした7zファイルを解凍してください。7zファイルを解凍できない場合は[こちら](https://sevenzip.osdn.jp/)から解凍ソフトの「7-Zip」をダウンロードして解凍してください。

1. フォルダ移動
解凍したファイルを任意の場所に保存してください。本記事では「ドキュメント」の下に作成した「FFmpeg」というフォルダに保存します。解凍したフォルダの中に「bin」というフォルダがあるので、コマンドプロンプトを立上げ、「bin」フォルダに移動してください。コマンドプロンプトでのフォルダ移動は下記を貼付け「Enter」キー押下にて移動出来ます。
※「ffmpeg-5.1.2-full_build」はダウンロードしたバージョンにより異なります。
   ```
   cd %USERPROFILE%\Documents\FFmpeg\ffmpeg-5.1.2-full_build\bin
   ```

1. 起動確認
フォルダ移動後、コマンドプロンプトに`ffmpeg`と入力し「Enter」キーを押して下図のようにFFmpeg情報が表示されば、正常に起動することが確認できます。
![ffmpeg1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843234/2c7b508d-bb57-ddc2-a48e-b47f9f47732b.png)

### 3. 動画の作成

1. 静止画ファイル準備
FFmpegの「bin」フォルダの下に「image」というフォルダを作成し、動画の元になる静止画をコピーし、ファイル名を「001.jpg」から始まる3桁連番にリネームしてください。
   <img width=640 alt=explorer.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843234/57e82a4f-e383-e555-051d-c2309883e0c0.png>


1. 動画作成コマンド実行
以下のコマンドをコマンドプロンプトに貼付け「Enter」キーを押すと「bin」フォルダに「output.avi」という名前の動画が作成されます。
   ```
   ffmpeg.exe -r 10 -i image/%03d.jpg -vcodec mjpeg -qscale:v 0 output.avi
   ```
   各オプションの説明を下表にまとめます。
   | オプション | 説明 |
   |:-:|:-|
   | **-r** 10 | 1秒間に入れる画像の枚数(フレームレート)の設定。<br>別記事で0.1秒毎に撮影した画像を用い、等速動画を作成するために10を指定しましたが、例えば50を指定し5倍速動画を作成することなども可能です。 |
   | **-i** image/%03d.jpg | 動画の元になる静止画ファイルの設定。<br>ここでは「image」フォルダにある「001.jpg」から始まる3桁のJPEGファイルを指定しました。 |
   | **-vcodec** mjpeg | コーデックの設定。<br>`mjpeg`や`libx264`などを指定します。 |
   | **-qscale:v** 0 | 出力する動画品質の設定。<br>値を小さくすると高品質ですが、ファイルサイズは大きくなります。 |


## 結果
完成した動画です！
<img width=480 alt=output_10.gif src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843234/be175d87-701b-e569-d108-da02ad53c922.gif>
5倍速で作成した動画はこちら
<img width=480 alt=output_50.gif src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843234/6b9c9afb-36f4-6641-8bbe-4a8278472535.gif>

## 最後に
いかがでしたでしょうか？

別記事では倍速動画を応用した、[KC4-C-100A](https://www.kyocera.co.jp/prdct/telecom/office/iot/products/kc4-c-100a.html?qiita)を使ったタイムラプス動画作成を紹介しています。こちらも是非ご確認ください。
[タイムラプス動画をLTEゲートウェイ「KC4-C-100A」を使って作成](https://qiita.com/ogatoshi/items/35b55b1d321bd069361d)

## 注記
- 商標
    - Windows®は米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。Microsoft® Windows® の正式名称は、Microsoft® Windows® Operating Systemです。
    - その他本文中に記載されている会社名および商品名は、各社の商標または登録商標です。
Arduino UNOとSSD1306にアイテムを表示する(スペルは、「40-66」...)



x OLED096UNO-Aです。
x Arduino UNO互換機

目的
OLEDのテスト


![o_con869.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/38aa3ae4-116f-d3dc-e885-8421672751eb.jpeg)



```c++



//ssd1306_int_071_1

#include <Arduino.h>
#include <Wire.h>

void write_s(uint8_t *str1, uint8_t len1) {

  Wire.beginTransmission(   0x3c  );

  for (int ii = 0; ii < len1; ii++) {

    //一文字出力
    Wire.write(*str1 ++);

  }//for

  Wire.endTransmission();

}//eeprom_write_s

//初期化
void setup() {

  //I2Cの初期化
  Wire.begin(); //071
  delay(200);

  //0x80,0x8d,0x80,0x14,0x80,0xAF
  write_s( (uint8_t*) "\200\215\200\024\200\257", 6);
  delay(100);

#define DATA_MODE                  0x40

    uint8_t databytes[][2] = 

{

{DATA_MODE,0b01100110},
{DATA_MODE,0b10101111},
{DATA_MODE,0b10111111},
{DATA_MODE,0b11011111},

{DATA_MODE,0b01111110},
{DATA_MODE,0b01111110},
{DATA_MODE,0b00111100},
{DATA_MODE,0b00011000}

};
    
    for (int icount = 0; icount < 8; icount++) {
        write_s(databytes[icount], 2);
    }//for


}//setup

//無限ループ
void loop() {
}//loop



```


![o_con886.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/43cc3559-d631-8336-33ad-abdaef16ff1c.jpeg)
【Node.js】ファイル処理周りで調べたことmemo【Buffer, Stream...】


# はじめに
expressでファイル関連の処理を実装する際に前提知識がなさすぎたので初歩的なことを調べました。
その際にメモしたものをつらつらと書いていきます（雑です

## バイナリデータ

- コンピュータが見て分かる/扱えるデータ
    - `binary`は「2進法の」という意味
    - 具体的には画像、音楽、動画、圧縮されたファイルなど
- 一般的には人間が読めるテキストデータ**以外**のデータを指すことが多い
    - バイナリとテキストは対比の意である

## バイト

- 1byte = 8bit
- 1か0を並べた数値の1個をbitと言う

## Buffer

- Node上でバイナリデータを扱うためのクラス
    - 文字列とは全く別ものであるバイナリデータ（バイト列）を扱う
    - ちなみに文、字列を扱うクラスは`String`
    - ちなみに、C言語ではこの両者を同じ型として扱える
- `new Buffer(128)`のような形で書くと128バイトのバッファを作成できる

## ArrayBuffer

- JavaScriptでバイナリを扱うためのオブジェクトである
    - 他の言語ではバイト配列と呼ばれていたりする
- `const buffer = new ArrayBuffer(30);`みたいな形で宣言できる
    - 引数で指定した長さの物理のメモリ空間がバイナリ保存用として確保される
- **確保されるだけで直接読み書き等の操作はできない**
    - 操作したい場合は`DataView`または`TypedArray`というオブジェクトをインターフェースとして使用する
- 例えばBase64やローカルファイルから配列バッファーを取得できる
- 参考
    - [ArrayBuffer](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)

## TypedArray

- 型付き配列を指す
- `Float32Array`や`Uint8Array` など型を指定して、バッファから配列を生成する
- 通常の配列（Array）のように添字によってバッファにアクセス可能で「高速に」読み書きが行える
- 参考
    - [[JavaScript] ArrayBufferについて調べてみた](https://qiita.com/edo_m18/items/612d2b31498d22d13b7b#typedarray)

## Dataview

- TypedArrayよりも高機能なバッファ操作用クラス

## Blob（Binary Large OBject）

- ① ブラウザ（WebAPI）で実装されているバイナリデータを扱うクラス
    - テキストやバイナリデータとして読み込んだり、[ReadableStream](https://developer.mozilla.org/ja/docs/Web/API/ReadableStream) に変換してそのメソッドを使ったデータ処理をしたりすることができる
    - [`File`](https://developer.mozilla.org/ja/docs/Web/API/File)インターフェースは`Blob`を継承していて、ファイル操作を拡張している
- ② データベースで用いられるデータ型の1つで、ビデオや音声、圧縮ファイル、実行ファイルなどの非構造化データ、プレーンテキスト（平文の文字数字）以外のバイナリデータを格納する際に用いられる
- 参考
    - [Blob](https://developer.mozilla.org/ja/docs/Web/API/Blob)

## Stream

- Node上でデータストリームを扱うためのオブジェクト
- ファイル全体をメモリに乗せて、オブジェクトに書き込むため、メモリリークやパフォーマンス問題が発生する時に使われる
- データを小分けにして順番に扱うので、同じようなデータをどっかに流したいだけ（順次読みこんで、順次書き込む）とか、配列のような順序の決まったものに対して逐次計算をしていくとかの時に使う
- 参考
    - [Node.jsのstreamのしくみまとめ](https://zenn.dev/xxpiyomaruxx/articles/ab10b64fa3b17b)

## Base64

- 64進数を意味する言葉で、64文字で表す**エンコード方式＝データの変換方式**
    - エンコードとは、ルールに基づいて変換することで、エンコードすることでデータを扱いしやすくしたり、使用している言語やツールで扱える形にしている
- なぜ使うか
    - リクエスト数を減らす ([【JavaScript入門】Base64でサイトのパフォーマンスをアップさせよう](https://www.sejuku.net/blog/64100))
        - より詳しく: [base64ってなんぞ？？理解のために実装してみた](https://qiita.com/PlanetMeron/items/2905e2d0aa7fe46a36d4#%E3%81%AA%E3%81%9Cbase64%E3%82%92%E3%81%A4%E3%81%8B%E3%81%86%E3%81%AE)
- 処理の流れ
    - エンコードしたいファイルのバイナリデータを6bitずつ取り出す(足りない分は0を追加する)
    - 6ビットとAscii文字の変換表を用いて、4文字ずつにする(4文字に満たない場合は`=`を追加する)
- 参考
    - [https://developer.mozilla.org/ja/docs/Glossary/Base64](https://developer.mozilla.org/ja/docs/Glossary/Base64)
    - [https://qiita.com/PlanetMeron/items/2905e2d0aa7fe46a36d4#base64とは](https://qiita.com/PlanetMeron/items/2905e2d0aa7fe46a36d4#base64%E3%81%A8%E3%81%AF)

## その他分かりやすかった資料

- [バイナリデータ、ファイル](https://ja.javascript.info/binary)
投稿一覧画面からlink_toで会員詳細画面遷移しようとした際、開ける画面と開けない画面があり、開けない画面では「Couldn't find User with 'id'=6」のエラーが出ている

# １．前提条件
#### 開発環境
Ruby：ruby 3.1.2
Rails：Rails 6.1.6.1
OS：Windows11 Home

#### 実装状況
・deviceを導入し、ログイン機能実装
・ゲストログイン機能実装
・投稿機能実装(投稿一覧、投稿詳細ページ作成)
・会員詳細画面実装　<font color=red>←今ココ</font>

#### やりたいこと
投稿一覧画面にて投稿者の名前をそれぞれ押下すると、その会員の会員詳細画面へ遷移するようにしたい。

#### 発生している事象
投稿一覧画面にて投稿者の名前をそれぞれ押下すると、開ける画面と開けない画面がある。
そして開けている画面は開きたい画面になっていない。
また開けない画面についてはエラーが発生している状況。

# ２．エラーメッセージの内容

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823804/2bfaab10-af5b-6619-633f-088a3b7a6f28.png)


#### ②エラーメッセージ翻訳
エラーメッセージを翻訳する
　
　”「id」=6 のユーザーが見つかりませんでした”

#### ③エラーの原因を考える　
今回のエラーはidが見つからないよというエラーである。
発生している事象から考えてルーティングかlink_toが怪しそう。。。



# ３．エラー解決までの流れ

#### ①ルーティングの記述を確認する

```
resources :users, only: [:show, :edit, :update]
```
問題なさそう。。

#### ②サーバー起動し、「/rails/info/route」でルーティングを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823804/56441fd5-52f6-aff6-8135-c125ccd358b4.png)
これも問題なさそう。。

#### ③URLに直接「users/○○(1～6の数字)」を順番に入力し、挙動確認する
　users/1からusers/5までは開けたが、やはりusers/6が開けない
　しかも、<font color=red>その会員(その投稿をした会員)</font>の会員詳細画面を表示したいのに、<font color=red>登録した会員id順</font>で会員詳細画面が表示されている

#### ④link_toの記述を確認する
```
 投稿者：<%= link_to outfit.user.nickname, user_path(outfit.id) %>
```
`user_path`で持ってくるidが`outfit.id`(服装のid)になっている！！
持ってきたいのは`outfit.id`(服装のid)ではなくて、<font color=red>その投稿をした会員のid</font>であるため、`outfit.user.id`ですね！！

#### ④link_toの記述を変更する
```
 投稿者：<%= link_to outfit.user.nickname, user_path(outfit.user.id) %>
```
この記述に変更したことでエラーは解除され、正しい画面が表示されるようになりました！

# ４．最後に

解決するのに2時間以上かかりました。。パスに渡すidによっては表示されたり表示されなかったりすることがわかりました。
そのため遷移先で正しい表示がされているかを確認したり、1ヵ所だけでなく複数箇所のリンクをクリックしてみて、確認した方が良いと感じました。
まだまだ理解不足と感じた1日でした。。引き続きコツコツと頑張ります！
最後まで読んでくださり、ありがとうございました！