OmniAICreator/Qiita-1.07M huggingface dataset:
SendGridのドメイン認証による、icloudドメインへのメールレピュテーション改善

# 概要
icloudドメインへのメールがBlockされる事象が発生したシステムから、
ユーザーへ送信するメールのMTAとしてSendGridを利用しています。
その解決までを本記事に記載していきます。

# 構成
今回紹介する事象が発生したシステムからユーザーへ送信するメールのMTAとして、SendGridを利用中です。
<dl>
<dt>
SendGridとは
</dt>
</dl>
SendGridは全世界で利用されているメール配信サービスです。<br>
クラウドサービスの為アカウントを作成するだけで即日メールを送信でき、<br>
メールサーバの構築が不要。弊社の運用コストも大きく削減されました。<br>



https://sendgrid.kke.co.jp/about/

# 事象
2023/05/11からApple icloudドメインへのメール送信率が低下し始める事象が確認。
1日平均**300**通ほどがBlockされ受信者の元へ届かない状態にありました。
(**2割~3割程度のBlock**)
<dt>SendGridに表示されたBlock時の詳細</dt>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582633/b36bcafb-becd-4b17-1b48-8d3b7321bfa5.png)
<dt>Apple公式のアナウンス</dt>

公式のベストプラクティスがいくつか紹介されていますが、
SPFやDKIM等の一般的なメール認証も要因として上げられておりました。

https://support.apple.com/en-us/102322

# 対応
まずSendGridへ対応を相談。

<dt>回答</dt>
参考情報となりますが、
Sender Authenticationが未設定の場合は設定の上、<br>
エラー状況が変わるかどうか確認いただければと存じます。<br>
こちらはApple社のリンク先にございます確認ポイントの1つである、<br>
SPFやDKIMに対応する為の機能です。<br>

https://sendgrid.kke.co.jp/docs/Tutorials/D_Improve_Deliverability/using_whitelabel.html

# メールレピュテーション確認
SendGridの機能を試す前段として、
まず、システムで利用しているメールのレピュテーションに問題が無いか確認を実施。

メールテスターにて確認
SendGridが推奨しているメールのレピュテーションチェックにて確認。
テスターURL：https://www.mail-tester.com/

システムから送信したところ満点に近いスコアとなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582633/850b547c-a0ff-993d-8094-593d5b933964.png)

別ドメインに送信した場合の到達率や
いずれのメールも同様のスコアだった点からメール自体の問題ではないと想定しました。

# 検証

メール自体は問題無かった点からSendGridが提供しているドメイン認証
Domain Authenticationを設定

<dl>
<dt>Domain Authenticationとは<dt/>
Sender Authenticationで設定可能なドメイン認証設定。<br>
SPFやDKIMのレコードの認証と同様に認証強度を高めるもので、<br>
DNSレコードによるドメイン認証を行い、送信元ドメインの認証強度を高める事ができます。
</dl> 

https://sendgrid.kke.co.jp/docs/User_Manual_JP/Settings/Sender_authentication/How_to_set_up_domain_authentication.html#:~:text=%E8%A8%AD%E5%AE%9A%E3%81%AE%E7%A7%BB%E8%A1%8C-,Domain%20Authentication%E3%81%A8%E3%81%AF,-Domain%20Authentication%E3%81%AF

<dl>
<dt>Domain Authentication設定<dt/>
</dl> 

手順は下記を参照

https://sendgrid.kke.co.jp/docs/Tutorials/D_Improve_Deliverability/using_whitelabel.html#-Domain-Whitelabel-Create:~:text=%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82-,Domain%20Authentication(SPF/DKIM%E8%A8%AD%E5%AE%9A),-SPF%E3%82%84DKIM

対応としては、
独自ドメインを発行し、DNSに登録、認証を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582633/b80f6a8d-0bcd-d201-7106-b989dffdd83c.png)

# 結果

即時効果は薄かったが、設定後1週間程度でBlock率が減少傾向に。
**3割**程度のBlockから**1割台**へ。
その後も下がり続け、2週間後にはBlock率**1%台**を推移し、
問題が表面化し始めた以前よりもBlock率が減少した結果になりました。


<dl>
<dt>改善前の到達率</dt>
</dl>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582633/33b5db09-5400-e9a7-48ca-4d1058bd19d7.png)



<dl>
<dt>設定実施直後の到達率</dt>
</dl>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582633/26c42283-9d7a-c042-cdfe-7a6d99d63ecf.png)



<dl>
<dt>現在の到達率</dt>
</dl>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582633/ca1e8b68-d118-894b-9ef4-58a7cc5559c1.png)


# まとめ

今回経験した対応を通じて、システムからメールを送信する場合、<br>メール配信のレピュテーションは常に気を配らなければならない事を再確認できました。<br>問題が起きてから改善に向かうまでの時間も多くかかるため、
日頃からその対策を意識することが重要だと感じました。<br>
AIを駆使する人ほど孤独である

2023/06/12に、[No Person Is an Island: Unpacking the Work and After-Work Consequences of Interacting With Artificial Intelligence](https://www.apa.org/pubs/journals/releases/apl-apl0001103.pdf)という論文が発表されました。

以下、[該当論文のプレスリリース](https://www.apa.org/news/press/releases/2023/06/loneliness-insomnia-ai-systems)を紹介してみます。


# Loneliness, insomnia linked to work with AI systems

AIと頻繁に接する従業員ほど、孤独を感じやすく、不眠症や飲酒量が増える傾向がある、という研究結果がアメリカ心理学会より発表されました。
研究者はアメリカ、台湾、インドネシア、マレーシアでそれぞれ実験を行いましたが、文化圏を超えて同じような結果となりました。
この研究結果はJournal of Applied Psychologyのオンライン版に掲載されました。

研究主任であるPok Man Tang博士は、前職の投資銀行でAIを利用しており、それがこのタイムリーな研究に興味を持つきっかけになりました。

現在はジョージア大学経営学部の助教授であるTangは言います。
「AIの急速な発展は、新たな産業革命を引き起こし、多くの利益と雇用をもたらしています。しかし同時に、それは社員の精神・肉体に未知のダメージを与える可能性を孕んでいます。」
「人間は社会的動物であり、AIによって社員を孤立させることは、社員の私生活に有害な影響をもたらします。」

AIを使った仕事にはいくつかの有効な効果もありました。
研究者らは、AIをよく使う社員ほど同僚に相談する傾向が強いことを発見しました。
しかしそれは、孤独感や疎外感の裏返しによるものである可能性があります。

また、愛着不安の度合いが高い被験者ほど、他者を助けるといったポジティブな反応と、孤独感や俯瞰といったネガティブな反応の両方がより強く現れる傾向がありました。
愛着不安とは、社会と自分の繋がりに不安や焦燥を感じる性質のことです。

ある実験では、台湾のバイオメディカル企業でAIを扱うエンジニア166人を対象に、3週間の調査を行いました。
調査対象は孤独感、愛着不安、そして企業への帰属意識です。
また同僚には、被験者の行動を評価してもらい、さらに家族には被験者の睡眠や飲酒について報告してもらいました。
その結果、AIシステムの使用頻度が高い被験者ほど、孤独感や不眠、そしてアルコール摂取度合いが高くなりましたが、同時に同僚への援助行動も多く見られました。

また別の、インドネシアの不動産企業のコンサルタント126人を対象とした実験では、被験者の半分はAIの使用を3日間禁止され、もう半分はAIをできるかぎり使用するよう指示されました。
この結論は、上記の実験結果とほとんど同じようになりましたが、ただし飲酒量についてだけは関連が見られませんでした。

さらにアメリカのフルタイム労働者214人と、マレーシアのハイテク企業294人を対象とした実験も行われ、いずれも同様の結果になりました。

この研究結果は、決してAIの仕事が孤独を引き起こすことを証明したわけではなく、単にAIと孤独感に相関関係があるということを示したにすぎません。

Tang博士は、人間相手のコミュニケーションをエミュレートするために、AIシステムに声を付けるといった社会的機能を検討すべきだと主張しました。
また、雇用主はAIシステムを使う仕事の頻度を制限し、従業員に交流の機会を提供すべきだとも。

チームでの意思決定や、社会的なコネクションが重要な仕事などは人間が行うことで、AIシステムは退屈な反復作業に集中できるだろう、とTang博士は付け加えました。
「マインドフルネスやその他の積極的な介入も、孤独感を和らげるのに役立つかもしれません。」
「AIは今後も拡大し続けるから、AIに関わる人たちへの悪影響を軽減するためにも、我々は今行動しなければなりません。」


# 感想

ふむ、私はAIを使いこなしていないので安心だな。

[論文](https://www.apa.org/pubs/journals/releases/apl-apl0001103.pdf)はさすがに全部読めてはいませんが、人間はこれまで何千年も社会的相互作用をしながら生きてきたわけだから、それが突然失われたら当然心理的影響も出るだろうという極めて妥当な推測から研究が始まったようです。
そして実際に統計的に負の影響が出ていることを確認したと。
もちろん全ての人がそうではなく、中にはずっとAIと相対しているだけで幸せな人もいるでしょうが、どちらかというとそうではない人間の方が多いということがわかりました。

それはそうと実験期間が一週間と短すぎるのでたとえば離職率との関係は調べられなかったみたいなことが書いてあって、もっと期間を取れたら調べる気だったんだろうか。

また、AIに声を付けるというのは現在の技術で可能なので、実際それをやったときの調査もやってほしいですね。
可能というかボイロ(的なやつ)通すだけだから誰でもいとも簡単にできますね。
これを調査する際は、ゆかりマキ葵茜等とタカハシまろん吉田くん弓鶴くんあたりで孤独感に差があるのかも調べてみてほしいところです。
Pythonで「JupyterLabとは？特徴やインストール、起動手順を解説！」の動作を確認してみた

# 概要

Pythonで「JupyterLabとは？特徴やインストール、起動手順を解説！」の動作を確認してみました。以下のページを参考にしました。

https://and-engineer.com/articles/Y-xMRhAAACIAR-e5

# 動作確認

以下のコマンドを実行しました。
```
$ pip install jupyterlab-language-pack-ja-JP
$ jupyter lab
```

実行画面は以下の通りです。メニューが日本語になりました。
![Screenshot from 2023-10-23 19-11-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/d3164767-54ce-26ae-4277-3edb20cf7688.png)

# まとめ

何かの役に立てばと。
Google スライドのプレゼンテーションに進行状況バーを表示する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63607/e35dce3c-f602-3094-2b8c-77ec02443470.png)

プレゼンテーションのスライドの下部に進行状況バーを追加します。
公式サイトがとてもわかりやすいです。

https://developers.google.com/apps-script/add-ons/editors/slides/quickstart/progress-bar?hl=ja

記事内容は以上です。

以下はソースコードとドキュメントを読んだログを記載します。

## 読みログ

### onOpen

```js
  SlidesApp.getUi().createAddonMenu()
      .addItem('Show progress bar', 'createBars')
      .addItem('Hide progress bar', 'deleteBars')
      .addToUi();
```

アドオンボタン追加がとてもわかりやすくてGAS好き。

### createBars

```js
function createBars() {
  deleteBars(); // Delete any existing progress bars
  ...
```

実行ごとに全部作り直すの好き。GASで時間トリガーの処理とかもよくこの書き方見る。

```js
      const bar = slides[i].insertShape(SlidesApp.ShapeType.RECTANGLE, x, y,
          barWidth, BAR_HEIGHT);
      bar.getBorder().setTransparent();
      bar.setLinkUrl(BAR_ID);
```

バー追加部分
`insertShape(shapeType, left, top, width, height)` 
shapeType がかなり多い。テキストボックス、長方形、矢印...、以下参照。

https://developers.google.com/apps-script/reference/slides/shape-type?hl=ja

`setLinkUrl` で URL に ID を載せている。このスクリプトでの生成物のキーにしている。公式でハック的な使い方しているの面白さ感じる。
色を変えるときはこの場所で行う。例: `bar.getFill().setSolidFill(255, 0, 0, 0.8);`

`insertImage` を使えばテクスチャ的にできるかと考えたが、画像の一部切り抜きに使えそうなメソッドがなさそうで断念。Transform でスケーリングはできた。

### Slides

https://developers.google.com/apps-script/reference/slides?hl=ja

親子関係理解

```mermaid
erDiagram
  Presentation ||--o{ Slides : contains
  Slides ||--o{ PageElements : contains
```

PageElement の実体には Group, Image, Line, Shape, SheetsChart(スプレッドシートから図の埋め込み), Table, Video, WordArt がある。それぞれクラスごとの操作ができる。

スクリプトから十分な操作ができそう。他のスクリプトも考えてみたい。
コマンドプロンプトでJavaプログラムを実行した際に文字化けで困った話

皆様こんにちは。
Javaを勉強し始めの方は、初めてのアウトプットとしてまず[^1]コマンドラインアプリを制作することが多いのではないでしょうか。
先日Javaで作ったプログラムを初めてコマンドプロンプトで実行した所、一部が文字化けしてしまったのですが、一先ずは解決できたためその時のことを書いていきたいと思います。

# Javaプログラムを作ってみる
まず前提として、私はEclipseという[^2]IDEを用いて開発しています。
Java開発においてはポピュラーな環境なので使われている方も多いのではないでしょうか。
Visual Studio Code等他のコードエディタで開発している場合は状況が異なるかもしれませんのでその点ご了承ください。

さて、では名前を入力すると挨拶を返してくれる簡単なプログラムを作ってみます。
下記のようにコーディングします。
```Java:Main.java
public class Main {

	public static void main(String[] args) {
		System.out.println("あなたの名前を教えてください");

		String name = new java.util.Scanner(System.in).nextLine();
		
		System.out.println("こんにちは！" + name + "さん！");
	}

}
```
次にこのプログラムをEclipse上のコンソールとWindowsのコマンドプロンプトそれぞれで実行してみます。

**Eclipse**
![挨拶アプリEclipse.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2150221/47524e12-bd09-db4c-a72c-c0486a000e32.gif)

**コマンドプロンプト**
![挨拶アプリcmd.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2150221/952d78b9-671a-94d9-3c47-10e359b39d63.gif)

このようにEclipseのコンソールでは入力した名前が問題なく表示されましたが、コマンドプロンプトでは文字化けで表示されてしまいます。
どうすれば解決できるでしょうか？

# 標準入力(System.in)の文字コードを明示的に指定する
ネットで調べてみたところ、Javaのデフォルト文字コードとコマンドプロンプトの文字コードが異なっていることが原因のようです。
Javaのデフォルト文字コードとコマンドプロンプトの文字コードはそれぞれ、

:::note
**Java：Unicode(UTF-16)**
**コマンドプロンプト：Shift_JIS**
:::

となっています。
そのためJavaに入力(System.in)する際、文字コードがShift_JISであることを明示的に指定すれば解決できそうです。
下記のようにコードを修正します。
```Java:Main.java
public class Main {

	public static void main(String[] args) {
		System.out.println("あなたの名前を教えてください");

		//System.inの後に「, "Shift-JIS"」を追記
		String name = new java.util.Scanner(System.in, "Shift-JIS").nextLine();
		
		System.out.println("こんにちは！" + name + "さん！");
	}

}
```
では、改めてコマンドプロンプトで実行してみましょう。

**コマンドプロンプト**
![挨拶アプリcmd修正.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2150221/937262df-89aa-5b66-831f-77646800808c.gif)

文字化けせずに表示させることができました。

# まとめ
いかがだったでしょうか。
こういった文字化けへの対処方法は色々とあるようですが、今回はコードに追記することで解決することができました。
ただし、開発環境と実行環境の違い等に対する理解が私自身まだ乏しく、根本的な解決のためにはより学習を深めていく必要があると実感しました。
今回はここで終わりになりますが、少しでも皆様の参考になれば幸いです。

# 参考
* [javaのScannerクラスでString入力を実装した場合、abcなどの英数字はコマンドプロンプト上で入出力できますが、日本語では入力はできても出力されません。](https://ja.stackoverflow.com/questions/94675/java%E3%81%AEscanner%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%A7string%E5%85%A5%E5%8A%9B%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88-abc%E3%81%AA%E3%81%A9%E3%81%AE%E8%8B%B1%E6%95%B0%E5%AD%97%E3%81%AF%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E4%B8%8A%E3%81%A7%E5%85%A5%E5%87%BA%E5%8A%9B%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8C-%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%A7%E3%81%AF%E5%85%A5%E5%8A%9B%E3%81%AF%E3%81%A7%E3%81%8D%E3%81%A6%E3%82%82%E5%87%BA%E5%8A%9B%E3%81%95%E3%82%8C%E3%81%BE%E3%81%9B)
* [【2022年最新】Java開発がはかどる!おすすめのIDE(統合開発環境)5選](https://sync-g.co.jp/sjobs/java-ide/)

[^1]:コマンドプロンプトやPowerShell等を使用し、文字によって操作や表示を行うアプリケーション。
[^2]:統合開発環境(Integrated Development Environment)。コーディング、実行、デバッグ等、開発に必要な作業を一つのソフトウェアで完結できるため効率がよく、多くの現場で採用されている。
AWS認定資格　ソリューションアーキテクトプロフェッショナル（SAP-C02）

AWS認定資格　ソリューションアーキテクトプロフェッショナル（SAP-C02）の対策用メモです。

| 項目 | 内容|
|:-|:-|
| 回答タイプ | 選択問題（一つを選ぶ問題と、複数を選ぶ問題がある） |
| 試験時間 | 180分 |
| 試験範囲 | 複雑な組織に対応するソリューションの設計（26%）<BR>新しいソリューションのための設計（29%）<BR>既存のソリューションの継続的な改善（25%）<br>ワークロードの移行とモダナイゼーションの加速（20%） |
| 合格基準 | 750点以上（1000点満点） |

### AWSの試験ガイドは１度はしっかり読んでおこう。
https://d1.awsstatic.com/ja_JP/training-and-certification/docs-sa-pro/AWS-Certified-Solutions-Architect-Professional_Exam-Guide.pdf
スッキリわかるJava入門 実践編 第３版 まとめ -part17-ユーザーインターフェース制御

# はじめに
こんにちは　◤●ㅅ●◥ﾉ

今回はグラフィカルなアプリケーション開発について学びました！

## 第１７章　ユーザーインターフェース制御
### 1.ユーザーインターフェース
__ユーザーインターフェイス__　とは
コンピュータと人との接点のこと
マウスや、キーボードなど
代表的なものは画面

### 2.ウィンドウUIの基礎
文字を使ってやり取りする方式... __CUI__
グラフィックを用いる方式... __GUI__

画面全体で文字や点を描ける...キャンバス
テキストボックスやボタンなどの部品...ウィジェット

### 3.SwingAPIの基礎
「OSに依存しない」「高水準な命令や豊富なウェジェット」を備えた次世代API
→ __Swing__

利用することで画面上に簡単にウィンドウを表示することができる
大きく３種類のウィンドウと実現のためのクラスが存在する
1.狭義のウィンドウ(javax.swing.JWindow)：枠やツールバーがない
2.フレーム(javax.swing.JFrame)：枠やツールバーがある
3.ダイアログ(javax.swing.JDialog)：対話入力用の小さなもの

特に2.3は使われている

### 4.レイアウト
数種類の部品配列のルールが決められておりそれを __レイアウト__　という

レイアウトを選ぶとフレームなどウィジェットの配置先である __コンテナ__
に指定すると自動的に制御してくれる

代表的なレイアウト
BorderLayout,BoxLayout,GridLayout,FlowLayout

### 5.イベントハンドリング
ボタンなど押されたときに処理をして動いていくこと... __イベント__
イベント時に実行する処理のことを __イベントハンドラ__、イベントリスナ、コールバックと呼ぶ

## まとめ
ユーザーインターフェースとはキーボードや画面などの人と機械との接点のこと
文字を使ってやり取りする方式...CUI
グラフィックを用いる方式...GUI
「OSに依存しない」「高水準な命令や豊富なウェジェット」を備えた次世代API
→ Swing
利用することで画面上に簡単にウィンドウを表示することができる


今回もありがとうございました！
ではまた〜　◤●ㅅ●◥ﾉ"
スッキリわかるJava入門 実践編 第３版 まとめ -part16-スレッドによる並列処理

# はじめに
こんにちは　◤●ㅅ●◥ﾉ

今回は複数の処理を同時並行で実行するスレッドの考え方について学びました！

## 第１６章　スレッドによる並列処理
### 1.処理効率の追求
:star:  Java実行の大原則
JVMは、命令を１つずつ順番に実行する
ある命令を完全に実行し終えてから次の命令を実行する

__スレッド__
JVM内でプログラムを１命令ずつ実行していくJVMのようなもの
→JVM君が増える

### 2.Javaにおける並列処理
スレッドにはThreadクラスを利用する

:star: スレッドの使い方
1.Threadクラスを継承してrun()をオーバーライドする
　run()には別のスレッドで処理したい内容を書き込む
2.別のスレッドの実行を開始したい場所で1のクラスをインスタンス化し、
　start()を呼び出す

:warning: 注意点
1.スレッドはrun()を実行し終えると自動消滅する
run()に定義された処理内容をすべて実行し終えると自動的に消滅する
2.stop()の利用は御法度
　JVMの内部が以上な状態になってしまう可能性があることから、利用してはならない
3.JVMは全スレッドの終了をもって終了する
　１つでも実行中のスレッドが残っているとJVMは終了しない
4.join()で別スレッドの終了を待つことができる
5.OSによって動作に違いが生じる可能性がある
6.例外は他のスレッドに伝播しない
7.同時に１つの変数を利用するとデータが壊れる


### 3.スレッドセーフな設計
複数のスレッドを利用したプログラミングのこと
→ __マルチスレッドプログラミング__

複数のスレッドを使うときの注意点
複数のスレッドが同時にアクセスしてデータが壊れる「スレッドの競合」

競合を避けるためにスレッドをコントロールすること
→スレッドの同期、調停、排他制御と呼ぶ
Javaにはスレッドを調停するための文法が複数用意されており、それらを上手く活用する
「複数のスレッドから同時に利用しても安全なクラスやメソッド」は　__スレッドセーフ__　な設計

スレッドの調停を行うにはsynchronizedブロックを利用する
:pencil2: スレッド調停を行うブロックの指定
```
synchronized （対象インスタンス）{
    スレッドの競合から保護したい処理
}
```
※実行できるのは１つのスレッドだけ

## まとめ
スレッドを用いることで、複数の処理を同時に実行できる
スレッド内で例外が発生しても他のスレッドには伝播しない
同一の変数やメソッドを複数のスレッドから同時に利用すると、データが破壊される恐れがある

今回もありがとうございました！
ではまた〜　◤●ㅅ●◥ﾉ"
Mac M1チップでVirtualBoxをインストールする方法

## 概要

今日はMacのM1チップを使ってVirtualBoxをインストールする方法についてシェアしたいと思います。

現在は　Mac M1チップを使っていて、VirtualBoxをインストールしようとしたときに、以下のエラーが出てきました。

```zsh
brew install --cask virtualbox
```

```zsh
==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-cask/8290ef01e26f1fe87714eea55b1175ae1910583b/Casks/v/virtualbox.rb
Already downloaded: /Users/leminhthientoan/Library/Caches/Homebrew/downloads/f8c3d1134ba4b9df0f82b944132ac0b0aca3df829588d69591bf17185b700836--virtualbox.rb
Error: Cask virtualbox depends on hardware architecture being one of [{:type=>:intel, :bits=>64}], but you are running {:type=>:arm, :bits=>64}.
```

原因は、VirtualBoxがIntelアーキテクチャーを必要とし、私のMacはARMアーキテクチャーを使用しているためです。

## 対策

一つの対策は Rosetta を使用してインストールする

Finderで`Terminal`アプリケーションを探し(`ユーティリティ`フォルダの中にある)、それを右クリックして、`情報を見る`を選択します。
`Rosettaを使用して開く`というオプションにチェックを入れます。

![スクリーンショット 2023-10-23 18.18.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35605/b086abc6-df25-6150-369f-0b8812d4391d.png)

新しいTerminalウィンドウを開き、そこで次のコマンドを実行します。

```zsh
brew install --cask virtualbox
```

```zsh
==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-cask/8290ef0
Already downloaded: /Users/leminhthientoan/Library/Caches/Homebrew/downloads/f8c3d1134ba4b9df0f82b944132ac0b0aca3df829588d69591bf17185b700836--virtualbox.rb
==> Downloading https://download.virtualbox.org/virtualbox/7.0.12/VirtualBox-7.0
######################################################################### 100.0%
==> Installing Cask virtualbox
==> Running installer for virtualbox with sudo; the password may be necessary.
Password:
installer: Package name is Oracle VM VirtualBox
installer: choices changes file '/private/tmp/choices20231023-7920-zyiodv.xml' applied
installer: Installing at base path /
installer: The install was successful.
🍺  virtualbox was successfully installed!
```

これで、VirtualBoxのインストールが問題なく完了しました!
Railsでカラムに配列を保存できるようにする

どうもこんにちは。

今回は個人的に勉強になったことをアウトプットします。

# 配列を保存するのはどんな時？

railsで配列を保存する時は、要素数が固定されていないデータ（操作手順など）を保存したい時に使用します。

（例が思いつかなかったので、他にもあるという人は教えてください！）

# 実装方法

## 1. モデル作成

```
rails g model Sample title:string array_columns:text
```

これでモデルとマイグレーションファイルが作成されます。

今回は`array_columns`カラムに配列データを保存します。（注意点として、`text`型でないと配列データを保存することはできません。）

## 2. マイグレーション実行

```
rails db:migrate
```

これでテーブルが作成されました。

## 3. モデルファイルに設定を記述

```ruby
class Sample < ApplicationRecord
    serialize :array_columns, Array
end
```

`serialize`メソッドを使用して、`array_columns`カラムで配列データを使用しますと定義します。

## 4. Viewファイルで配列にデータを保存できるUIを作成する

Viewファイルは各自で作成しておいてください。

フォームのテキストボックスで配列データを入力できるようにします。（html.slimで書いてます。）

```slim
= label :array_columns, '配列データ1', class: 'col-form-label'
= f.text_area :array_columns, name: "sample[array_columns][0]", value: '', autocomplete: "off", class: 'form-control'
```

上記のコードでは配列の先頭に保存するようにしています。
以下のようにすると配列の2番目の要素に保存するようにします。

```slim
= label :array_columns, '配列データ2', class: 'col-form-label'
= f.text_area :array_columns, name: "sample[array_columns][1]", value: '', autocomplete: "off", class: 'form-control'
```

JavascriptやCoffeeScriptを使用することで、フォームを追加したり削除したりすることができるようになります。

# まとめ

Railsでカラムに配列を保存する方法をまとめました。

これでかなり幅の利いたアプリケーションが作れそうです！
子テーマ作成プラグイン「Child Theme Configurator」

# CSS 優先順位
　追加CSS　→  子テーマでのstyle.css → 親テーマでのstyle.css

 親テーマでCSSを追加編集すると、アップデートすると消えることはあり、
  子テーマを作成して追加編集がお勧めです。　

# 子テーマ作成プラグイン「Child Theme Configurator」をインストール・有効化する。

1. ダッシュボード の ツール　→ Child Theme　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592268/279dbc8d-0a34-fd65-f4c8-3b876f4d5b90.png)

2.設定をして子テーマを作成
    ①　CREATE a new Child Theme　を選択
　　②テーマを選択
　　③Analyze ボタンをクリック
    ④Create New Child Themeをクリック


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592268/b2e39663-db80-12e7-b5b1-10f41d1d6222.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592268/eb3bf7eb-6d7e-7b71-66a1-1193ef99c7ce.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592268/d476fb2e-06ea-00c4-40bd-10ecbf92507a.png)

子テーマ作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592268/af40ee4d-bb27-a69f-5c76-e514720d0751.png)


# Style.css 機能確認
1. ダッシュボード　→　外観　→　テーマエディタ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592268/d057f896-3a1c-acb5-e38e-1935261808f1.png)

style.css の最後に以下を追加
```css
.site {
    margin: 0 auto;
}
```

更新されました。
真ん中です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592268/d7906c95-e07f-bf06-8c7d-f9cae73742be.png)
BizRobo!ド初心者の私に役に立つ観念とコツ3つ

## 全体像を掴みましょう
BizRobo!の初心者にはeラーニングで学ぶことを強く推薦していますが、eラーニングをスタートする前に読んでいただくことで、eラーニングの内容が更に分かりやすくなる記事とガイドがあります。
[記事：BizRobo!製品の概要]( https://knowledge.bizrobo.com/hc/ja/articles/360051369052-BizRobo-%E8%A3%BD%E5%93%81%E3%81%AE%E6%A6%82%E8%A6%81)
[ガイド：ファーストステップガイド（要ログイン）]( https://portal.bizrobo.com/ja/%E8%A3%BD%E5%93%81/bizrobo%EF%BC%81-basic/%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88?title=%E3%83%95%E3%82%A1%E3%83%BC%E3%82%B9%E3%83%88%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%82%AC%E3%82%A4%E3%83%89)
記事とガイドの内容はeラーニングの紹介と被っている部分はありますが、一回目を通していただくとより印象に残り、ビデオを見る時に自然に内容が頭に入ってくると個人的に思っています。

## 環境構築について
環境構築は尚更そうです。
MCとは何ですか？RSの存在は？ビデオを見ながら疑問が浮かんできます。そんな時には
[記事：BizRobo! Basic システム構成]( https://knowledge.bizrobo.com/hc/ja/articles/360031100872)
こちらの記事を事前に読み、全体像を把握していきましょう。
環境構築のレッスンはインストールと設定値についてとても詳しく説明してくれており、それはとても有難いです。ですが詳細に入るとBizRoboの運用全体像が逆にふんわりとなりがちな気がします。当記事を読むと両方が頭の中により鮮明に残ると思います。

## 開発のコツ3つ
BizRobo製品構成以外、開発の時も「これは事前に分かれば！」と思ったコツを3つ紹介します！

:::note info
この記事の用語はBizRobo! v11.4.0.2の用語になります。
:::
### 1.ロボットを事前に開かなくてもいい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/523bfac0-17dd-8ee3-e16a-ca0b27195d49.png)
よくベーシックエンジンロボットとペアで作成しているロボット（前のマークが緑のロボット）ですが、今までロボットをデバッグする時は両方を同時に開いてから検証していました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/722c93b6-d150-6766-4a7f-08cfd7d30c62.png)
ですが、実はベーシックエンジンロボットのみを開き、「ロボットにステップ」をクリックすると、設定済みのロボットが開かれます。
これ一見どうでもいいコツですけど、同じベーシックエンジンロボット内で複数のロボットが利用される時があるでしょう。その場合に作業が早くなると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/9f0b5fcf-5a08-e063-0aa6-e395928d06a0.png)
 
ちなみに、eラーニングのようにフォルダーからロボットを新規作成することはできますし、実はベーシックエンジンロボットの中、「ロボットを呼び出し」ステップからも直接新規作成することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/0c38cc91-9e60-c061-238c-6a93f93f1cec.png)
便利ですね！

### 2.画面サイズの変化
ロボット内「参照」ステップを設定する時、「画面サイズ」という選択肢があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/4f9ba93a-20fb-dfe2-e8bd-247200f89e8c.png)
これをクリックすると、開くとき画面のサイズを指定できます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/42bd05ec-808d-5b7e-7bda-158c409eba6c.png)
最大は5000までですが、これでデフォルトのサイズで開くときには隠されるコンテンツが簡単に表示できるようになります。
例えば下記の画像、画面サイズを指定せずデフォルトの幅1920にすると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/c445237c-19ec-94bf-17d2-ff07bcdc7031.png)
表は半分ぐらいしか表示しません。
幅を3000にすると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/e69c349f-09fe-5a0c-676c-c85c1c42c4ff.png)
最後の欄まで表示できます！
これは絶対活用できる機能ですね。

### 3.操作を記録されず画面を操作する
開発する時、画面を操作すると記録されてステップになります。でもステップを作成したいわけではなく、単なる画面を確認したいです。
その時は、右クリックをすると、一番下に「記録されないインスタントクリック」が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/55bb09e8-75c8-95d3-54b0-0798bdf39225.png)
これを使うと、記録されずレコーダービューから画面を操作できます。作成したステップを確認したい時使えそうです。

## まとめ
この記事はBizRobo製品の全体像から、初心者向きでとても小さいポイントをメモしています。でもwindowsのキーボードショートカット（例えばコビー機能のキーボードショートカットctrl+c）のように、知っておけば開発が少し楽になると思いますので共有します。
Unityで作成したゲームキャラクターが自動で動いてしまう問題

[現象]
Unityエディタ上、アプリ共に
キャラクターが自動で斜めに移動するようになった

[解決策]
3Dconnexionを削除する

[内容]
Input.GetAxis("Vertical"),Input.GetAxis("Horizontal")でキー入力を行ってキャラクター操作を行っていたところ、常に1,-1の入力がかかっていた。
十字キーなどの入力もなかったため、3Dマウスのソフトウェアである3DConnexionを削除したところ動作が改善した。

使用していた製品は3Dconnexion SpaceMouse Compact
https://3dconnexion.com/jp/product/spacemouse-compact/
xxx must be exist

タイトルのエラーにかなりハマったのでメモを残します。

## 環境
`rails 6.1.7`
`ruby 3.0.6`

## アソシエーション設定
bookとcategoryが1:nの関係とします。
bookが複数のcategoryを持つのでcategoryテーブルにbook_idという外部キーを設定します。
この時book_idにnot null制約をつけない場合はすこし注意が必要です。

belongs_toの方に`optional: true`を設定する必要があります。


```ruby
class Book < ApplicationRecord
  has_many :categories
end
```

```ruby
class Category < ApplicationRecord
  belongs_to :book, optional: true
end
```
【GIS】Cloud Optimized フォーマットについてまとめる

# Cloud Optimized フォーマットについて
> 特別なサーバー実装を必要とせずに、大きな位置情報データの一部を配信することを可能とするファイル形式の総称です
[現場のプロがわかりやすく教える位置情報エンジニアの養成講座](https://www.shuwasystem.co.jp/book/9784798068923.html)より引用

つまり、実装が非常に簡単なGISデータと言えるだろう。

# どんなフォーマットがあるのか

|  |ラスター|ベクター|特徴
|---|---|---|---|
Cloud Optimized Geotiff（COG）|○||ラスターのデファクトスタンダード
FlatGeobuf|		|○|ベクターではよく使われている
PMTiles|	○|	○|タイル志向
GeoParquest	|	|○|


# 参考サイト
https://qiita.com/Kanahiro/items/577f7828c5a1e323721a

https://qiita.com/wata909/items/d1c443e5c8363cb33179

https://qiita.com/Kanahiro/items/70b3b8b11bd26cbaf30e
Microsoft Formsグループフォームの回答Excelを衆目に晒したくない

ものすごくちょっとした発見の共有です。

# Problem

Microsoft Formsでグループのフォームを作成すると、フォーム回答をExcelファイル形式で収集できる。
このExcelファイルはSharePoint Onlineのグループのサイトのデフォルトのドキュメントライブラリー（「ドキュメント」とか「Shared Documents」とか）の直下に保存される。
つまり、グループ（Teamsの場合チーム）のメンバーであれば誰でもほぼリアルタイムに自他メンバーの回答内容を参照更新できてしまう。。。

グループのサイトの「ドキュメント」ページ。この通り誰でも見放題、書き換え放題：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/a331bc8a-3da8-be73-4551-e195437d6a19.png)

# Solution

Excelファイルは少なくとも同じサイト内なら異なるフォルダやドキュメントライブラリーに移動（退避）できることがわかりました。

ならばせめて、移動しましょう。
100％の解決策ではありません。しかし少なくとも、デフォルトのドキュメントライブラリー直下に堂々と置いていたら、そのファイルに何が起きても文句は言えません。

当該Excelファイルの「…」→「移動」をクリックして、ダイアログを表示、別のドキュメントライブラリーやフォルダに移動します：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/b2f262d8-5395-f6f6-0ea1-5e1a032f4b9e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/b3a60dc9-510d-77c8-37c4-f81e8f4d9b29.png)

試しにフォームで回答をしてみます：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/d155c0e0-70f9-944e-c92b-b1291a9e65cc.png)

1行目は移動前の回答内容、2行目は移動後の回答内容です。きちんと移動先のファイルに書き込みが行われました：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/b3ecaebc-e244-36a9-3e20-4a7de5405c6b.png)
Oracle Analytics Cloud Classic：Answersで分析を作成中、表のセルでテキストを折り返ししたくないとき

はじめに
---
Oracle Analytics Cloud Classic： Answersで分析を編集するときに表やピボットで、テキストを折り返したくないときがあります。
そんな場合には、テーブルタグの折り返しを制御するプロパティ white-spaceを利用します。
カスタムCSS機能で、CSSのプロパティをセットして、テキストを折り返さない方法を紹介します。

記事記載時のOAC ver：Sep 2023 Update

文字数が多いと、文字が折り返されるときがあります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/24b51dbd-dfe5-16c3-bd4d-d6040c827eb5.png)

カスタムCSS機能で、CSSのプロパティをセットして、テキストを折り返さない方法の紹介です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/ec04c760-c699-3891-4244-762fd8aa7074.png)

カスタムCSS機能で、CSSのプロパティをセットする
---
作成している分析で、基準タブを開きます。折り返したくない列で、歯車アイコンをクリックします。メニューから列のプロパティをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/0761a23f-c27d-ce65-eb63-bcce5ef6801e.png)

列のプロパティで、スタイルタブを開きます。
カスタムCSSスタイル・オプションの▼アイコンをクリックします。
カスタムCSSスタイルを使用のチェックボックスをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/cc30a224-0529-3efe-1020-f608a73891de.png" width=70%>

CSSスタイルのプロパティをセットします。
テキストを折り返したくないときは、"white-space:nowrap"を入力します。
入力後、OKをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/773fa9c1-ad86-0908-cb8d-9c6babdcbe4f.png" width=70%>

結果タブをクリックします。結果を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/3437884b-7185-0590-e257-50fbb932be77.png)

折り返したくない列ごとに指定します。
HTMLタグのCSSスタイルで、HTMLタグのプロパティを指定することで細かな制御ができるようになります。

以上
Rust and gRPC | Getting Started

Rust で gRPC を実装する方法を調べる。

現職では、Backend API は、ほとんどが Go。

Go は、書き方を制限されているため、beginner が誤った書き方をすることによる問題が発生しにくくてとても良い。
例えば、Java のような複雑な仕様はない。

しかし、Go 一択というのも問題があると思うので、他の選択肢として Rust を学ぶ。

Rust は、memory safe、性能といった点で、他の言語よりも優れている。
Edge でも動かすことができるくらい 軽量にできる。例えば、Cloudflare Workers など。

## environment
- Devcontainer
   - `Cargo` などの setup が不要。
   - VS Code Extension も default。

## Getting Started
公式の docs を手元で試してみるのが一番分かりやすい。
僕の場合は、Rust で写経して、Go で rewrite してというのを繰り返した。
基本的な syntax は、繰り返し書くことで覚える。

[Programming a Guessing Game](https://doc.rust-lang.org/book/ch02-00-guessing-game-tutorial.html)

https://doc.rust-lang.org/book/ch02-00-guessing-game-tutorial.html

## gRPC
`Connect-Go` で実装した code を Rust で rewrite する。
proto は、超単純なこれ。同じものを使う。

https://github.com/danny-yamamoto/go-connect-greet/blob/main/weather/v1/weather.proto

## generate proto
`build.rs` で generate する。
`build.rs` は、build 時に最初に実行される code。root 直下に置く。
初見では、難しそうに見えるが、1つ1つ見ていくとそうでもない。

https://github.com/danny-yamamoto/rust-grpc/blob/main/Weather/build.rs

GPT-4 の要約。
`weather_descriptor.bin` は、meta 情報を取得するため作成。
>  このコードは、Rustのプログラムで、gRPCのサーバを構築するための設定とコンパイルを行っています。
tonic_buildクレートを使用して、gRPCのサーバ機能を有効にし、ファイル記述子セットのパスを設定し、そして特定のプロトコルバッファファイル（weather.proto）をコンパイルしています。
コードはまた、環境変数 OUT_DIR を使用して出力ディレクトリのパスを取得し、そこに weather_descriptor.bin という名前でファイル記述子セットを保存します。

## HTTP Server

https://github.com/danny-yamamoto/rust-grpc/blob/main/Weather/src/main.rs

GPT-4 の要約。
> このRustプログラムは、gRPCのサーバーを作成し、単純な天気サービスを提供します。次の主な点が含まれています：
> 1. モジュールと依存関係のインポート:
std::net::SocketAddr, tonic, および tonic_reflection などのモジュールと依存関係をインポートします。
> 1. Protocol Buffers定義のインポート:
mod weather {tonic::include_proto!("weather.v1");} で定義されたProtocol Buffersのスキーマをインポートします。
> 1. 天気サービスの実装:
StructWeatherService という名前の構造体を作成し、WeatherService トレイトを実装します。この実装には、weather メソッドが含まれ、WeatherRequest を受け取り、WeatherResponse を返します。
> 1. 非同期メイン関数の定義:
#[tokio::main] アトリビュートを使用して非同期のメイン関数を定義し、gRPCサーバーを起動します。このサーバーは、作成した天気サービスを含み、指定されたアドレスでリッスンします。
> 1. gRPCサーバーの構築と起動:
tonic::transport::Server::builder() を使用してgRPCサーバーを構築し、作成した天気サービスを追加してサーバーを起動します。
> 
> このプログラムは、指定されたアドレスでgRPCサーバーを起動し、クライアントからの天気関連のリクエストに対応するシンプルな天気サービスを提供する例です。

`grpcurl` で操作を確認。
```bash
grpcurl -plaintext -d '{"condition": "Cloudy"}' localhost:8080 weather.v1.WeatherService/Weather
{
  "text": "Today's weather is Cloudy!"
}
```
元週4リモートワークで働いていた私が感じたフル出社勤務のメリット


# こんにちは

昨年まで週4日、リモートワークで働くハイブリッド型勤務形態でした。

しかしハイブリッド型勤務について、デメリットだと感じることも多く、先日以下のような記事を投稿しました。



今回はフル出社勤務に変わって感じたメリットについて書いていきたいと思います。
ハイブリッド型勤務の会社とフル出社の会社で迷っている方の参考になれば幸いです。


## フル出社とはいえ通勤はどんな感じなのか

- 通勤は片道1h

- 自転車10分→電車15分→バス30分→徒歩5分

- バスは座れますが電車は座れません。

# メリットだと思ったこと

## 仲良くなりやすい!
これが一番です。　同期はもちろん、先輩や上司、後輩など…　とにかくフル出社の方が仲良くなりやすいです。
小休止で一日に何度か話す程度でも、リモートワークと比べたら圧倒的だと思います。

## 仕事に必要なコミュニケーションが取りやすい!
会議室やオンラインミーティングで集まるほどではないけど伝えておきたいことなど、簡単に伝えることができます。
当然質問もしやすいですし、仕事に必要なコミュニケーションが取りやすい要因の一つとして、先ほど述べた「仲良くなりやすい」ということも大きく関係していると感じます。

## 仕事環境の整備は全て会社がやってくれる
在宅勤務だと作業デスクやモニターなど、基本的に欲しいと思ったら自分で購入する必用があるかと思います。
(中には全額会社が出してくれる会社もあるかと思いますが、選んで購入する手間はかかりますね)
さらにエアコンなどの空調や、トイレなど。生活費も増えます。
(在宅勤務手当とか出してくれてはいましたが、差し引き赤字でした)

## オフィスのデスクは快適であり、自宅に仕事用のスペースを用意する必要がない
会社に行けば当たり前のようにそれなりの広さのデスクがあり、椅子があります。デスクには仕事道具意外はおかれておらず、スペースとしては申し分ないです。
会社で使用しているデスクを自体に配置したら、確実に邪魔になるサイズです。
かといってデスクを小さくしては、会社のデスクの方が快適です。
フルリモートの方であれば広くて安い家田舎に住めばこの問題は解決するかもしれませんが、ハイブリッド型勤務で都心近郊に住んでいる状態等では、解決することは難しいでしょう。

## 仕事とプライベートのメリハリがつく
出社するだけで仕事モードに切り替えられますし、会社を出たら完全にプライベートです。
リモートワークだと境界線があいまいになってしまったり、気持ちの切り替えのために部屋をわけたりコーヒーを飲んだり、出社していれば必要のない費用が発生しがちです。
会社以外では絶対に仕事をしない/仕事のことを考えないといったことも簡単にできます。

## 寄り道や休日に遊びに行く際に定期利用ができる
定期券代(交通費)は会社から支給されているかと思いますので、途中下車して寄り道してみたり、休日に同路線で遊びに行く際の費用がかかりません。
フル出社でないと定期代を出してくれない会社も少ないかと思います(出社日数 * 交通費分のみ支給など)

### 他にも個人的な細かいメリットはいくつもありますが、かなり限定的なので割愛します。

# 出社するメリットはわかったけど、通勤が楽しくないという方へ

通勤自体もそうですが、通勤するからこそできる楽しみ方はいくつもあります。

## 毎日のランチを楽しむ
毎日出社していれば、当然毎日会社もしくは会社の近くでお昼ごはんを食べることになります。
お気に入りのお店に行ってみたり、日替わりランチを頼んでみたり、新しくできたお店に行ってみたり…
選択肢は色々ありますね。(食費はその分増えますが…)


## 通勤での一人時間を楽しむ
一人暮らしの方にはあまり実感がないかもしれませんが、一人で自由なことをできる時間というのは意外と少ないです。
家にいて1時間もゲームや動画に没頭していては、文句を言われるという方もいるのではないでしょうか。
通勤時間であればずっとゲームしていても動画を見ていても、誰にも何も言われません。(自転車や自動車のならがスマホは禁止なので注意)


## 通勤時間は意外と運動になる
通勤時間というのは思っているより良い運動となっています。
普段意識して運動している方は別ですが、特に運動を行っていない人の場合、通勤がなくなることで一切の運動がなくなると言っても過言ではない状態です。
私の通勤では、片道で大体ごはん一杯分の消費カロリーぐらいの運動だそうです。
運動の記録や消費カロリーを見て楽しむというのも一つの楽しみ方だと思います。

## 本を読んだり資格の勉強をする
まとまった時間を強制的に取らされる通勤時間では、本を読み進めたり、毎日必ずやろうと思っていることを行うのに最適です。
自宅ではなかなかやる気になれない資格の勉強であったり、積み本になっている本を一冊持ち出してみたり。

# andmore...

他にもこんな記事書いてます。

https://qiita.com/SZR/items/8524fe3a22a2faa47b7a

https://qiita.com/SZR/items/3e3a02e6c316438fe5a3

https://qiita.com/SZR/items/1c8a7be4267071f6c295

https://qiita.com/SZR/items/dce75a3d08c5170d4365

https://qiita.com/SZR/items/396533c1b1e14489a782

https://qiita.com/SZR/items/f46822b009fa47e1ca53

https://qiita.com/SZR/items/401a1f839723d89bd7f2

https://qiita.com/SZR/items/176586cde17ea0e9828a

https://qiita.com/SZR/items/a000cbaa583dcd2a344b

https://qiita.com/SZR/items/1d8edaf95fa2f5bbe821

https://qiita.com/SZR/items/1debe21a6759d0067ad7
入社6ヶ月の新人がNuxt3への移行作業にチャレンジした話

## はじめに

今回 Nuxt2 のサポートが12月末で終了するということで、
既存のシステムを Nuxt3 にバージョンアップする作業を担当することになりました。

https://v2.vuejs.org/lts/

スキルレベルは、 Vue のテキストを読んで学習した程度で実装経験はほとんどありません。

今回のバージョンアップ作業は先輩にサポートについてもらいながら、進めていきました。

まずは移行作業に入る前に Vue3 の仕様を理解するため、[公式サイト]を読みました。

## 移行方針

既存の Nuxt2 のソースコードを書き換えるのではなく、 Nuxt3 で新しくプロジェクトを作成し、
コードを移植していく方針にしました。

## 作業規模と実績

今回移行したシステム全体の規模感は以下の通りです。

- pagas : 6ファイル
- components : 10ファイル

移行作業は全 7 日で終了しました。

## 移行作業

### 新規プロジェクトの作成

新たに Nuxt3 の[プロジェクトを作成]します。

```bash
npx nuxi@latest init <project-name>
cd <project-name>
yarn install
```

### Nuxt3 未対応のライブラリの解決

Nuxt2 版で package.json に記載していた依存ライブラリについて、 Nuxt3 版の package.json にコピーし、最新版をインストールするよう変更しました。

[Moment.js](https://momentjs.com) は Vue3 未対応になったので [Day.js](https://github.com/iamkun/dayjs/tree/dev) に移行しました。

Day.js の使い方は[こちら]を参考にしてください。

最新版への更新、およびライブラリの変更によるコードの修正を加えます。

### 静的フォルダの移行

静的フォルダの移行として以下の二つを移行しました。

- assets
- static

`static` は Nuxt3 では `public` に変更されています。

どちらにも画像や css などの静的ファイルだけを置いていたので、
そのまま新しいプロジェクトにコピーしました。

また、[cssを読み込むための処理]を `nuxt.config.ts` に記述しました。

### 共通関数の移行

Nuxt3 で plugins に入っていた共通関数は新たに utils フォルダを作成し移行しました。

### 画面実装

画面の移行は以下の手順で、1画面ずつ完成させていきました。

1. pages 内の .vue ファイルを Nuxt2 のプロジェクトから Nuxt3 のプロジェクトへコピー
1. .vue 内の Composition API を `script setup` 構文に書き換え
1. Vuex から useState への移行（後述）
1. 使用されているコンポーネント、レイアウト、プラグインの共通処理などをマイグレーション
1. 画面の動作確認

#### Vuex から useState への移行

Nuxt2 の状態管理で標準搭載されていた Vuex が非推奨となり、新たに [Pinia] が推奨になりました。

https://nuxt.com/docs/migration/configuration#vuex

ですが、今回は Pinia は使用せず、 useState を使用して状態管理を行いました。
使い方は[こちらの記事]を参考にしてください(大規模プロジェクトの際は Pinia を使う方が良さそうです)。

そのため、store フォルダの処理を useState を使った処理に書き換えました(フォルダはcomposables )。

## 全体の動作確認

各画面の動作については画面実装後に細かく確認をしていたので、画面遷移も含めたシステム全体の動作確認を行いました。

今回のバージョンアップでは Nuxt2 のものと同じ動きをすることが目標だったので、
バージョンアップ前後のシステムを並べて見比べながら、動作確認を行いました。

動作確認後、Nuxt2のものと同じ動きが確認できなかった部分のバグ改修を行いました。
バグの原因で多かったのは、ライブラリの変更に伴う修正の対応漏れでした。

## 移行作業の振り返り

- 初めての移行作業で、調べたり相談したりしながら進めていったので全体的な作業に時間がかかってしまいました。
- 元ソースの理解も浅く Vue もほぼ未経験であったため、コードの書き換えやバグ改修に予定よりも時間がかかりました。
- 今回の移行作業で Vue をしっかり扱ったことで、Vue に対する理解が深まりました。
- 移行作業の流れを把握し、大まかに理解することができました。

[公式サイト]: https://v3-migration.vuejs.org
[プロジェクトを作成]: https://nuxt.com/docs/getting-started/installation
[cssを読み込むための処理]:https://zenn.dev/milkandhoney995/articles/75880432c6c186#nuxt.config.tsに設定を追加
[Pinia]:https://pinia.vuejs.org/
[こちらの記事]:https://zenn.dev/coedo/articles/use-state-nuxt3
[こちら]:https://www.suzunatsu.com/post/nuxtjs-momentjs-to-dayjs/
macOS Ventura で、Electron の DMG がビルドできない

こういうエラー

```
⨯ Exit code: 35. Command failed: hdiutil resize -size 514332406.5 /private/var/folders/xr/jzv85d6n2rxb84sy0xth4llm0000gn/T/t-s2mboe/0.dmg
hdiutil: resize: failed. リソースが一時的に使用できません (35)
```

App Management というのにビルドに使ってるアプリケーションを放り込む必要があるらしい。


https://github.com/electron-userland/electron-builder/issues/5431#issuecomment-1312180989

日本語だと、環境設定＞プライバシーとセキュリティ＞アプリケーション管理にある。
【Google Cloud】サービスアカウントの設定からキーの作成まで

## はじめに
AWS GlueからGoogle Cloudへ接続するためにAWS Secrets ManagerにGoogle Cloudの認証情報を追加する必要がありました。本記事はGoogle CloudにてBigQueryへのアクセス付与したサービスアカウントを設定し、json形式のキーファイルを作成する手順をまとめます。

#### 作業環境
Google Cloudコンソール

## サービスアカウントとは
サービスアカウントとはユーザーではなく、アプリケーションやサービスが他のリソースにアクセスする際に必要な認証情報を持つアカウントのことです。
今回で言えば、Google BigQueryにの読み取り権限を持つサービスアカウントをAWS Glueが使用することによってAWS GlueからBigQueryへの接続が可能になります。

![スクリーンショット 2023-10-23 15.35.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3580229/8a667aa2-d9d7-405a-ab6e-655e55bafbb3.png)


## 設定内容
### STEP1：Google Cloudコンソールからサービスアカウントを設定する
Google Cloudコンソールのハンバーガーメニューから「IAMと管理」→「サービスアカウント」を選択。
「＋サービスアカウントを作成」ボタンからサービスアカウントを作成する。
今回はBigQueryの読み取り権限を与えたいので、「BigQueryデータ閲覧者」を選択。

### STEP2：サービスアカウントのjsonキーを作成する
サービスアカウントの一覧が表示されている画面から、jsonキーを取得したいサービスアカウントを選択する。
「キー」画面から鍵を追加を選択することで、json形式のサービスアカウントキーを作成することができる。


## まとめ
今回はAWS GlueからGoogle BigQueryへのアクセス用サービスアカウントキーの作成方法を紹介しましたが、そもそもサービスアカウントによる連携はベストプラクティスではないようなので、他の方法についても学んでいきたい。
血液スクリーニング市場調査：妊娠の増加、HIVと肝炎の症例増加が牽引ResearchNesterによる世界分析2023-2033

リサーチ・ネスターは次のタイトルのレポートを発表した「<b><a href="https://www.researchnester.jp/reports/blood-screening-market/4480" target"_blank">血液スクリーニング市場調査</a>世界の需要分析と機会展望2033年"</b>この調査レポートは、世界の血液スクリーニング市場を技術別、製品タイプ別、エンドユーザー別、地域別に分類し、その詳細な概要を掲載しています。

さらに、詳細な分析のために、市場の成長に関連する現在と将来の市場動向に関する詳細な議論とともに、業界の成長指標、阻害要因、需給リスクを網羅しています。

世界の血液スクリーニング市場は、予測期間（20232033年）に約6％のCAGRで成長する。また、技術は核酸検査、迅速検査、ウェスタンブロットアッセイ、ELISA、次世代シーケンシングに区分される。なかでもELISA分野は、2033年末までに最も高い収益を獲得する見込みである。このセグメントの成長は、STD有病率の増加、HIVおよび肝炎の症例の増加に起因している。

世界の血液スクリーニング市場は、慢性疾患やCOVID19の症例の増加、献血の増加と血液の必要性の増加、HIVの症例の増加、世界的な妊娠の増加によって上昇すると予想される。
地域別では、市場は北米、欧州、アジア太平洋、ラテンアメリカ、中東・アフリカ地域に区分される。なかでも北米市場は、2033年末までに最大の収益を上げると予想されている。同地域の市場成長は、献血の必要性の増加と妊娠数の増加を理由に予想される。

![Blood Screening Market.jfif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491677/737feedd-f338-b649-c099-4fb511a8a5d8.jpeg)

<b>このレポートの詳細については、こちらをご覧ください:</b>
<b><a href="https://www.researchnester.jp/reports/blood-screening-market/4480" target"_blank">https://www.researchnester.jp/reports/blood-screening-market/4480</a>

この調査はグローバルな性質を持ち、以下の国の市場に関する詳細な分析をカバーしている North America (U.S., Canada), Europe (U.K., Germany, France, Italy, Spain, Hungary, Belgium, Netherlands & Luxembourg, NORDIC [Finland, Sweden, Norway, Denmark], Poland, Turkey, Russia, Rest of Europe), Latin America (Brazil, Mexico, Argentina, Rest of Latin America), Asia-Pacific (China, India, Japan, South Korea, Indonesia, Singapore, Malaysia, Australia, New Zealand, Rest of Asia-Pacific), Middle East and Africa (Israel, GCC [Saudi Arabia, UAE, Bahrain, Kuwait, Qatar, Oman], North Africa, South Africa, Rest of Middle East and Africa). さらに、市場規模、前年比成長率および機会分析、市場プレイヤーの競争調査、投資機会、将来の展望に対する需要などを含む分析も、調査報告書の中で取り上げられ、表示されている。

<b>慢性疾患患者数の増加が市場成長を高める</b>
心臓病、慢性腎臓病、糖尿病などの慢性疾患の普及が進んでいる。慢性疾患の治療を誤ると、心不全や腎不全などを引き起こす可能性がある。死亡者の5人に3人は慢性疾患が原因である。
しかし、専門家の不足、代替技術の開発、インフラの不足は、予測期間中に世界の血液スクリーニング市場の成長の主な阻害要因として作用すると予想されるいくつかの要因である。

また、本レポートは世界の血液スクリーニング市場の主要企業の既存の競争シナリオを提供します Abbott, Grifols, S.A., Quotient Limited, Thermo Fisher Scientific Inc., BD (Becton, Dickinson and Company), Ortho Clinical Diagnostics, DiaSorin S.p.A., Bio-Rad Laboratories, Inc., Danaher Corporation,BeckmanCoulter,Inc.,などがある。プロファイリングでは、事業概要、製品・サービス、主要財務情報、最近のニュースや開発など、企業の重要な情報を掲載しています。全体として、当レポートは世界の血液スクリーニング市場の詳細な概観を描いており、業界コンサルタント、機器メーカー、拡大機会を探している既存企業、可能性を探している新規企業、その他の利害関係者が、現在進行中および今後予想される動向に従って市場中心の戦略を調整するのに役立ちます。

<b>レポートサンプル@を請求する</b>
<b><a href="https://www.researchnester.jp/sample-request-4480" target"_blank">https://www.researchnester.jp/sample-request-4480</a>

<b>について Research Nester</b>
ResearchNesterは戦略的市場調査とコンサルティングのリーディング・サービス・プロバイダーです。業界、コングロマリット、エグゼクティブが将来のマーケティング戦略、事業拡大、投資などのために賢明な決断を下せるよう、偏りのない比類のない市場洞察と業界分析を提供することを目指しています。私たちは、戦略的思考を通じて適切なタイミングで適切なガイダンスを得ることができれば、あらゆるビジネスが新たな地平へと拡大できると信じています。私たちの既成概念にとらわれない思考は、お客様が将来の不確実性を回避するために賢明な決断を下すのに役立ちます。

<b>【お問い合わせ先】</b>
<b>ナオミ コスギ</b>
Eメール: <b>info@researchnester.jp</b>
日本の電話番号: <b>+81 505 050 8480</b>
メモ　viteとrender

Viteを使っているフロントエンドのプロジェクトルートに、.env.developmentと.env.productionという2つのファイルを作成します。
.env.developmentには：
arduino
Copy code
VITE_API_BASE_URL=http://localhost:8001
.env.productionには：
arduino
Copy code
VITE_API_BASE_URL=https://your-production-api-url.com


Reactのコード内（たとえば、APIを呼び出している部分）で、次のようにして環境変数を読み込みます：
javascript
Copy code
const baseURL = import.meta.env.VITE_API_BASE_URL;


Viteの設定により、開発モードでアプリを実行するときは.env.developmentの変数が、本番モードでビルドするときは.env.productionの変数が使用されます。したがって、開発中や本番環境でのAPIエンドポイントのURLを切り替える特別な条件式を書く必要はありません。
これが完了すれば、開発中は自動的にローカルのAPIエンドポイント（http://localhost:8001）が、本番環境では指定した本番のAPIエンドポイント（https://your-production-api-url.com）が使用されるようになります。
再度、knexfile.jsやデータベースの設定は、このAPIエンドポイントの切り替えとは直接関係ありません。フロントエンドとバックエンドの設定は独立していますので、それぞれ別々に考えて設定する必要があります。
Route [log.show] not defined. のエラー解決

エラー解決法保存[Laravel9]使用

エラー名：Route [log.show] not defined.
状況：indexファイルにshowページに遷移するためのコードを記述していた。
index.blade.php
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582585/4914547c-0bbe-9c9b-b557-e0650ee2e44d.png)

web.php
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582585/e1e12b99-2f79-59f2-8a6c-9c873a22ad27.png)


解決策：Route [logs.show] not defined. に変更

route('○○.show')の○○はモデル名ではなく、web.phpでコーディングしているルート名！
MAUI Tips - 戻るボタンの無効化

# 概要
これまでXamarin.Formsで作っていたアプリを、一念発起して.NET MAUIで作り直す中で
調べたことの備忘録。

# 環境
Visual Studio for MAC
.NET MAUI
.NET 7

# 調べたこと
[Microsoft LearnのNavigationPageのページ](https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/pages/navigationpage?wt.mc_id=AZ-MVP-4028478)に、「[戻る] ボタンを無効にする」という項目に記載があります。
ここには、「モーダル ページの Page.OnBackButtonPressed メソッドをオーバーライドします。」とだけ記載されています。
もう少し親切に書いてほしい・・・・。

# 実装内容
こんな感じです。
ContentPageの派生クラスで、OnBackButtonPressed関数をオーバーライド後、
ベースクラスのOnBackButtonPressed関数を呼ばず、
戻り値としてtrueを返すようにします。

```C#
    protected override bool OnBackButtonPressed()
    {
        //return base.OnBackButtonPressed();
        return true;
    }
```
Bootstrapが反映されていない手詰まりが解消できないあなたへ

先日ハッカソンでフロント周りの作成をしていて、少し詰まってしまったことがあったので解決方法とともにメモ程度にここに記載したいと思います:bow_tone2:

## Bootstrap のcssが反映されない原因

フロント周りの開発をする人には有名なtwitter社が開発したBootstrapというフレームワークがあります。Bootstrapを使い始めたばかりの人はBootstrapのcssが反映されていないのでは？:thinking:　といった現象に陥ってしまうことがあります。

Bootstrapが反映されないときの原因は主に2点あります。

- リモート環境でcssを使用している場合
- 初期ファイル中からダウンロードしたcssを反映させるリンクのidがそのままの場合

それではこの2点の場合の対処法に関して話していきたいと思います。

#### リモート環境でcssを使用している場合

この場合はどんな時かというと、Bootstrapの公式ドキュメント内に記載されている内容では下記のhtmlのコードを打ち込んだファイルを作成すればいいと記載があります。

```java:html
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap demo</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
  </head>
  <body>
    <h1>Hello, world!</h1>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
  </body>
</html>
```

ここでcssファイルを読み込むlinkタグには、urlが記載されています。その際、htmlファイルを確認する環境下で状況が変わってしまうことがあります。そのため、ローカルの環境にcssを落としてきて、linkで紐づけするのがベストだと思います！！

ローカルの環境に落としてくる方法は別の記事にまとめようかなと思います。

#### 初期ファイル中からダウンロードしたcssを反映させるリンクのidがそのままの場合

Bootstrapの公式ドキュメントには、初期設定の際に次のような記述があります。

```java:Bootstrap
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap demo</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
  </head>
  <body>
    <h1>Hello, world!</h1>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
  </body>
</html>
```

この環境構築に関してのドキュメントには、このような記載がありますが、cssのリンクを共有する際に、srcをcssファイル名に変えるだけではBootstrapのcssが反映されません。そのため、下記項目に関しては削除してしまいましょう。

```java:link内
integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous"
```

そうすると、Bootstrapのcssが適用できるかなと思います。
Swiftでファイルのリネーム

URL操作をよく忘れるのでメモしておきます。

# ファイルのリネーム
atがリネームしたいファイルのURLで、newFileNameが新しいファイル名(拡張子含)です。
```swift
extension FileManager{
    func rename(at:URL,newFileName:String)throws{
        try self.moveItem(at: at, to: at.deletingLastPathComponent().appendingPathComponent(newFileName))
    }
}
```
moveItemを呼んでファイル移動によってファイル名を変更します。
`deletingLastPathComponent`は、URL(at)からファイル名(拡張子含)を削除します。
削除した後に`appendingPathComponent`で新しいファイル名を追加します。

## 例 ファイル名にアンダースコア(_)をつける
例えばapple.txtを_apple.txtに。
```swift
//
//oldStoreURLは適当なURL
//
let fileManager = FileManager.default

do{
    try fileManager.rename(at: oldStoreURL,newFileName: "_" + oldStoreURL.lastPathComponent)
}catch{
    print("リネームエラー \(error)")
}
```
lastPathComponentはそのURLのファイル名です。
(リンクだけです)「サイクロイド(英: cycloid)」を調べた。

# wikipedia

https://en.wikipedia.org/wiki/Cycloid

https://ja.wikipedia.org/wiki/サイクロイド#外サイクロイド

# 過去問内部検索(外サイクロイド)
・エピサイクロイド(外(がい)サイクロイド)

https://cse.google.com/cse?cx=a8908fbc24340ebc5&q=%22%E5%A4%96%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A4%E3%83%89%22&oq=%22%E5%A4%96%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A4%E3%83%89%22&gs_l=partner-web.12..0i4i37i512j0i512l4.3079.3079.0.5457.1.1.0.0.0.0.122.122.0j1.1.0.csems%2Cnrl%3D10...0....1.34.partner-web..0.1.121.gIEGfwgvCLs

一致する結果はありません

https://www.google.com/search?q=site%3A%2F%2Fkamelink.com+%22%E5%A4%96%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A4%E3%83%89%22&rlz=1CAUHAM_enJP1038JP1038&oq=site%3A%2F%2Fkamelink.com+%22%E5%A4%96%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A4%E3%83%89%22&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIGCAEQRRg60gEIODc2NmowajSoAgCwAgA&sourceid=chrome&ie=UTF-8

https://www.google.com/search?q=site%3A%2F%2Fmathmathmass.exblog.jp+%22%E5%A4%96%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A4%E3%83%89%22&sca_esv=575703562&rlz=1CAUHAM_enJP1038JP1038&sxsrf=AM9HkKlw9IjP8sog9800VHD4t0oBtz1ILA%3A1698039603060&ei=Mwc2ZfqbA-Tg2roPs9utkAE&ved=0ahUKEwi6geu6uouCAxVksFYBHbNtCxIQ4dUDCBA&oq=site%3A%2F%2Fmathmathmass.exblog.jp+%22%E5%A4%96%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A4%E3%83%89%22&gs_lp=Egxnd3Mtd2l6LXNlcnAiNXNpdGU6Ly9tYXRobWF0aG1hc3MuZXhibG9nLmpwICLlpJbjgrXjgqTjgq_jg63jgqTjg4kiMgQQIxgnSP5RUOQoWMFBcAF4AJABAJgBb6AB2wGqAQMwLjK4AQzIAQD4AQHCAgoQIxiuAhiwAxgn4gMEGAEgQYgGAZAGAQ&sclient=gws-wiz-serp

site://mathmathmass.exblog.jp "外サイクロイド"との一致はありません。
＞...”サイクロイド”という曲線はご存知でしょう。...

# 過去問内部検索(エピサイクロイド)

https://cse.google.com/cse?cx=a8908fbc24340ebc5&q=%22%E3%82%A8%E3%83%94%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A4%E3%83%89%22&oq=%22%E3%82%A8%E3%83%94%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A4%E3%83%89%22&gs_l=partner-web.12..0i4i37i512j0i512l8j0i7i30.2624.17909.0.20238.4.4.0.0.0.0.137.372.0j3.3.0.csems%2Cnrl%3D10...0....1.34.partner-web..1.3.372._CiREGamJaY

一致する結果はありません


https://www.google.com/search?q=site%2F%2Fkamelink.com+%22%E3%82%A8%E3%83%94%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A4%E3%83%89%22&rlz=1CAUHAM_enJP1038JP1038&oq=site%2F%2Fkamelink.com+%22%E3%82%A8%E3%83%94%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A4%E3%83%89%22&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIGCAEQRRg60gEJMjI0ODlqMGo0qAIAsAIA&sourceid=chrome&ie=UTF-8

https://www.google.com/search?q=site%3A%2F%2Fmathmathmass.exblog.jp+%22%E3%82%A8%E3%83%94%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A4%E3%83%89%22&sca_esv=575703562&rlz=1CAUHAM_enJP1038JP1038&sxsrf=AM9HkKlw9IjP8sog9800VHD4t0oBtz1ILA%3A1698039603060&ei=Mwc2ZfqbA-Tg2roPs9utkAE&ved=0ahUKEwi6geu6uouCAxVksFYBHbNtCxIQ4dUDCBA&uact=5&oq=site%3A%2F%2Fmathmathmass.exblog.jp+%22%E3%82%A8%E3%83%94%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A4%E3%83%89%22&gs_lp=Egxnd3Mtd2l6LXNlcnAiOHNpdGU6Ly9tYXRobWF0aG1hc3MuZXhibG9nLmpwICLjgqjjg5TjgrXjgqTjgq_jg63jgqTjg4kiMgcQIxiuAhgnSLuLAVCKCFiGgQFwA3gAkAEAmAHqAaAByQmqAQUxLjcuMbgBA8gBAPgBAvgBAcICCBAAGKIEGLADwgIFEAAYogTiAwQYASBBiAYBkAYF&sclient=gws-wiz-serp

site://mathmathmass.exblog.jp "エピサイクロイド"との一致はありません。
定時帰る術-Linuxネットワーク情報（ipコマンド）

### IP情報表示

川口がよくみるのは↓だけです
ip：NICのIPはなんだ（/XXも見るべき）、セカンダリIPが持っているか（IPアドレスが表示されてない場合もある、IPが設定されているか、NICがUPになっているかを確認した方がいい）
inet6：ipv6が有効されているのが
link/ether：MACアドレスはなんだ
MTU：mtuはなんだ
```
[root@test tmp]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:9d:99:92 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
       valid_lft 86399sec preferred_lft 86399sec
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:60:2e:b8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.102/24 brd 192.168.56.255 scope global dynamic noprefixroute enp0s8
       valid_lft 559sec preferred_lft 559sec
    inet6 fe80::a00:27ff:fe60:2eb8/64 scope link
       valid_lft forever preferred_lft forever
```
### ARP情報表示
同セグの場合、pingがとれなかったら、必ずARPを確認する。FWで拒否されたのか、本当にとれないのかが確認できる。
（FWで拒否される場合、対象サーバのMACアドレスが↓に表示される）
```
[root@test tmp]# ip n
192.168.56.100 dev enp0s8 lladdr 08:00:27:f5:8d:95 STALE
10.0.2.2 dev enp0s3 lladdr 52:54:00:12:35:02 REACHABLE
192.168.56.1 dev enp0s8 lladdr 0a:00:27:00:00:07 DELAY
```

### ルーティング情報表示
NWトラブルシューティングする場合、よく使う
```
[root@test tmp]# ip r
default via 10.0.2.2 dev enp0s3 proto dhcp metric 102
1.1.1.0/24 via 1.1.1.254 dev enp0s3 proto static metric 102
1.1.1.254 dev enp0s3 proto static scope link metric 102
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 102
192.168.56.0/24 dev enp0s8 proto kernel scope link src 192.168.56.102 metric 101
```

個人的には↑を目で見るのがめんどくさいし、定時帰られなくなるため、↓もよく使う
8.8.8.8に行くのルーティングを表示される
```
[root@test tmp]# ip route get 8.8.8.8
8.8.8.8 via 10.0.2.2 dev enp0s3 src 10.0.2.15 uid 0
    cache
``` 
    
### ルーティング削除
```
[root@test tmp]# ip route del 1.1.1.0/24 via 1.1.1.254
[root@test tmp]# ip route
default via 10.0.2.2 dev enp0s3 proto dhcp metric 102
1.1.1.254 dev enp0s3 proto static scope link metric 102
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 102
192.168.56.0/24 dev enp0s8 proto kernel scope link src 192.168.56.102 metric 101
```

### ルーティング追加（metric指定）
```
[root@test tmp]# ip route add 1.1.1.0/24 via 1.1.1.254 metric 10
[root@test tmp]# ip route
default via 10.0.2.2 dev enp0s3 proto dhcp metric 102
1.1.1.0/24 via 1.1.1.254 dev enp0s3 metric 10
1.1.1.254 dev enp0s3 proto static scope link metric 102
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 102
192.168.56.0/24 dev enp0s8 proto kernel scope link src 192.168.56.102 metric 1
```