OmniAICreator/Qiita-1.07M huggingface dataset:
Slackリマインダーのチートシート

# 目次
[リマインダーを設定する](#リマインダーを設定する)
[リマインダーを削除する](#リマインダーを削除する)
[リマインダーを編集する](#リマインダーを編集する)
[リマインダーを表示する](#リマインダーを表示する)

# リマインダーを設定する
以下のコマンドをSlackにコピペして送信するだけ。
```
/remind @here テストリマインダーです every monday 09:45
```
<b>実行結果↓</b>
![スクリーンショット 2022-10-25 15.34.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526938/98739323-7db1-2d82-b48e-9a260ca5ae7c.png)
<b>コマンド解説</b>
`@here`：メンション。 個人宛（@〇〇さん）にも書けるし、何も書かなくてもいい。
`テストリマインダーです`：リマインダーの内容。自由に書いてね。
`every monday 09:45`：リマインダーのタイミング指定。例では「毎週 月曜 09:45」にリマインドしてる。

:::note warn
※後述するが、Slackのリマインダーには **編集機能がない** ので設定したコマンドをメモ等に残しておくと便利
:::
<br>

# リマインダーを削除する
以下のコマンドをSlackにコピペして送信し、「削除」ボタンをクリックする。
```
/remind list
```
<b>実行結果↓</b>
![スクリーンショット 2022-10-25 15.48.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526938/226b3994-a105-3393-f4f3-a14460afcb26.png)
<br>

# リマインダーを編集する
**編集機能はない！！！** ので編集したいリマインダーを一旦削除して再度設定する必要がある。
そのため、リマインダーを設定する度にコマンドをメモしておこう。再度設定するときにコピペできるので便利だよ。
<br>

# リマインダーを表示する
リマインダー削除のコマンドと一緒。以下をSlackにコピペして送信するだけ。
```
/remind list
```
<b>実行結果↓</b>
![スクリーンショット 2022-10-25 15.48.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526938/30730e14-ad05-13c4-c1fe-6f4dcf55a732.png)
R: パイプの使い方

デジタル庁の [新型コロナワクチンの接種状況](https://info.vrs.digital.go.jp/dashboard) のデータを使って、栃木県の	4回目接種数を調べます。

## プログラム

```r:tochigi_fourth.R
library(tidyverse)
file_csv <- "https://data.vrs.digital.go.jp/vaccination/opendata/latest/summary_
by_prefecture.csv"
df <- readr::read_csv(file_csv,locale=locale(encoding = "CP932"))
#
df_tochigi <- df %>% select ("date", "prefecture_code" ,"prefecture_name","count
_fourth_shot_general" ) %>% filter(prefecture_name == "栃木県")
head(df_tochigi)
```

パッケージのインストール

```text
install.packages("tidyverse")
```

## 実行結果

```text
$ Rscript tochigi_fourth.R 
── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.3.6     ✔ purrr   0.3.4
✔ tibble  3.1.8     ✔ dplyr   1.0.9
✔ tidyr   1.2.0     ✔ stringr 1.4.1
✔ readr   2.1.2     ✔ forcats 0.5.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
Rows: 47 Columns: 11
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr  (2): prefecture_code, prefecture_name
dbl  (8): count_first_shot_general, count_second_shot_general, count_third_s...
date (1): date

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# A tibble: 1 × 4
  date       prefecture_code prefecture_name count_fourth_shot_general
  <date>     <chr>           <chr>                               <dbl>
1 2022-10-25 09              栃木県                             655209
```
Raspberry Pi 4B Buster をヘッドレスでVNC

# はじめに
いまさらBusterの設定記事？　ってな感じですが、Buster環境が必要だったのでメモ。
RPiをヘッドレスで運用したいけどVNCでGUI使いたいっていうとき、HDMIケーブルを接続せずにRPiを起動してVNC接続すると、Cannot currently show the desktopって出ちゃうので対策

# 設定する

## とりあえずVNCで画面が映るようにする
config.sysを書き換えると、映ります。
```
sudo nano /boot/config.txt 
```
ファイル編集画面を開いて次のコメントアウトを外して有効にします。
```
#hdmi_force_hotplug=1
```
↓
```
hdmi_force_hotplug=1
```

とりあえずこれでVNCでも画面は写るのですが、画面サイズが小さいです。

## 1920x1080にする
つぎのコマンドでnewmodeで指定する呪文を確認。
```
cvt 1920 1080
```
すると
```
# 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
Modeline "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
```
こんな回答が返ってきます。使うのはModelineよりも後ろの部分。
```
xrandr --newmode "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
xrandr --addmode HDMI-1 1920x1080_60.00
xrandr --output HDMI-1 --mode 1920x1080_60.00
```
この3行を実行するとFHD表示になります。

## 自動実行する
起動のたびに自動実行したいけどうまくうごかぬ💦
/etc/rc.localでやろうとしたけど、実行タイミングが悪いのかな？


※追記
crontabだとうまく動きました。
前項のxrandrの3行をシェルスクリプトにしてcrontabで実行します。

ここでは、/home/pi/change_resolution_1920x1080.sh というスクリプトファイルとして保存します。
```
$ cd $home
$ nano change_resolution_1920x1080.sh
```
としてコマンド3行を入力したうえでctl+xで保存終了します。

続いて
```
$ crontab -e
```
で編集画面を開きます。
初めてcrontabを編集する際はエディターに何を使うかを聞かれますので、よくわからない方はnanoにしましょう。
エディターが開くと、通常のテキスト編集画面になるため、作ったファイルを指定します。
```
@reboot /home/pi/change_resolution_1920x1080.sh
```
の様に、フルパスで指定します。


## 2023/6/20追記

/boot/config.txt の hdmi_force_hotplug=1 を有効化

raspi-config の [2 Display Options] -> [01 Resolution] -> [DMT Mode 82 1920x1080 60Hz 16:9]

reboot

VNCでログインしてメニューから、[設定]->[Screen configuration]->[Configure]->[Screens]->[HDMI-1]->[解像度]->[1920x1080]
でできた。
hdmi_force_hotplug=1は不要かも。
Windows:「下に表示されているWebサイトのコンテンツは～」というメッセージの対処方法

皆さんこんにちは！haruです。

本日は以下のようなメッセージの対処方法を共有します。

## メッセージ内容
このメッセージを出さないように設定します。
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/ab9df0f7-06ff-7f72-7b22-9ecbfa5d257d.png)

## 対処方法
「Windows マーク」→ 「サーバーマネージャー」を起動します。
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/c3f140f0-a44c-23d7-7a9e-632c4902b134.png)
サーバーマネージャーを起動したら、「ローカルサーバー」→「プロパティ」→ 「IEセキュリティ強化の構成」の「有効」をクリックします。
![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/dbef837e-b3b7-33bf-0e3f-e8023cef9ba2.png)
するとセキュリティを有効にするか選択ができる画面になるため、
これをオフにすることでメッセージが出ません。
![4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/5238caa3-ccfa-fba0-9571-0ecf6abd1449.png)

以上です！
Azure Fundamentals(AZ-900)：Azure の基礎: Azure のアーキテクチャとサービスについて説明する「Azureのファイル移動オプション」

Microsoft Learnを用いたMicrosoft Azure Fundamentals(AZ-900)の試験内容をまとめる投稿です。
この投稿ではMicrosoft Learnで学ぶ内容をできるだけ簡潔にまとめております。
Azureの勉強を一から始める方の参考になれば幸いです。

## 今回の学習内容
**◆「Azureのファイル移動オプション」**
◇対応するMicrosoft Learn ラーニングパス
[Azure の基礎: Azure のアーキテクチャとサービスについて説明する](https://learn.microsoft.com/ja-jp/training/paths/azure-fundamentals-describe-azure-architecture-services/)
◇対応するモジュール
[Azure のファイル移動オプションを特定する](https://learn.microsoft.com/ja-jp/training/modules/describe-azure-storage-services/7-identify-azure-file-movement-options)

※前回の投稿は下記から確認できます。
[Azure Fundamentals(AZ-900)：Azure の基礎: Azure のアーキテクチャとサービスについて説明する「Azureのデータ移行オプション」](https://qiita.com/fsd-jume/items/a470401648d1863e81f2)

## Azureのファイル移動オプション
**個々のファイルや小さなファイルグループの移動や操作に役立つツール**

### AzCopy
**ストレージアカウント間でBLOB/ファイルをコピーするために使用できるCUI**
・ファイルのアップロード/ダウンロード、ストレージアカウント間でのファイルのコピー、ファイル同期が可能
・他のクラウド間でファイルを移動できるようにすることも可能
※同期は一方向(同期元と同期先を選択する必要がある)

### Azure Storage Explorer
**ストレージアカウント内のファイルとBLOBを管理するためのGUIを提供するスタンドアロンアプリ**
・Windows、macOS、Linuxで動作し、バックエンドではAzCopyを使用
・AzureへのアップロードやAzureからのダウンロード、ストレージ間の移動が可能

### Azure File Sync
**オンプレミス(またはクラウド)のWindowsサーバがAzureファイル共有の高速キャッシュに変換される**
※Windowsサーバ内にAzure File Syncをインストールした場合に可能
⇒Azureファイル共有内のデータとWindowsサーバ内のファイルが同期する
⇒オンプレミスのサーバで加えた変更がAzureファイル共有にも同期される

**・利用可能なプロトコル：** SMB、NFS、FTPSなど、Windowsサーバ上で利用できるプロトコルで、オンプレミスのサーバにアクセス可能
**・マルチサイトアクセス：** 1つのAzureファイル共有と複数のWindowsサーバを同期可能
例)オフィスAのサーバがAzureファイル共有を通して、オフィスBのサーバと同期可能
**・ディザスターリカバリ：** 同じデータセンター内の新しいサーバにAzure File Syncをインストールして、障害が発生したサーバの置き換えが可能
**・クラウドの階層化：** 最も頻繁にアクセスするファイルがローカルサーバにキャッシュされ、アクセス頻度が低いファイルは要求されるまでクラウドに保持
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851723/6c975600-279b-dc1d-fce1-49338a67ab13.png)

## 次の学習内容
**◆Azure ディレクトリサービス**

https://qiita.com/fsd-jume/items/7d919c2192d2e47d29f2

## 学習内容をまとめたページの一覧

https://qiita.com/fsd-jume/items/e4ec76959adb547ac5e8
WSLでS3コマンドを打つと An error occurred (RequestTimeTooSkewed) when calling the ListObjectsV2 operation: The difference between the request time and the current time is too large.

### 答え

以下のコマンドを実行してシステムの日付を揃えろ。

```
hwclock --hctosys
```

### 現象と原因と対応方法

WSL上で`aws s3 ls` を実行すると以下のエラーがでることがある。

> An error occurred (RequestTimeTooSkewed) when calling the ListObjectsV2 operation: The difference between the request time and the current time is too large.

このエラーは日付がずれてることが原因。

dateコマンドを実行すると現在システムが認識している日付が出力される。

```
$ date
Tue Oct 25 07:25:15 JST 2022
```

一方でハードウェアクロックに正しく接続すると以下の正確な日付が帰ってくる

```
$  hwclock
2022-10-25 14:42:53.937959+09:00
```

システムに正確な日付を書き込む

```
$ hwclock --hctosys
```

日付を再度確認

```
$ date
Tue Oct 25 14:43:34 JST 2022
```

こうすることで、`aws s3 ls` を実行しても冒頭のエラーは出ずに実行できた
paiza.ioでelixir その13

# 概要
paiza.ioでelixirやってみた。
tcpでserver,clientやってみた。

# サンプルコード

```


defmodule Server do
	require Logger
	use GenServer
	@port 8000
	def start do
		GenServer.start(__MODULE__, %{socket: nil})
	end
	def init(state) do
		{:ok, socket} = :gen_tcp.listen(@port, [:binary, active: true])
		send(self(), :accept)
		Logger.info "Accepting connection on port #{@port}..."
		{:ok, %{state | socket: socket}}
	end
	def handle_info(:accept, %{socket: socket} = state) do
		{:ok, _} = :gen_tcp.accept(socket)
		Logger.info "Client connected"
		{:noreply, state}
	end
	def handle_info({:tcp, socket, data}, state) do
		Logger.info "Received #{data}"
		Logger.info "Sending it back"
		:ok = :gen_tcp.send(socket, data)
		{:noreply, state}
	end
	def handle_info({:tcp_closed, _}, state), do: {:stop, :normal, state}
	def handle_info({:tcp_error, _}, state), do: {:stop, :normal, state}
end

Server.start
IO.puts "ok0"
{:ok, socket} = :gen_tcp.connect('localhost', 8000, [:binary, active: false])
IO.puts "ok1"
:ok = :gen_tcp.send(socket, "msg")
IO.puts "ok2"
{:ok, data} = :gen_tcp.recv(socket, 0)
data
|> IO.puts




```

# 実行結果

```

05:56:00.149 [info]  Accepting connection on port 8000...
ok0
ok1

05:56:00.153 [info]  Client connected
ok2
msg

05:56:00.153 [info]  Received msg

05:56:00.153 [info]  Sending it back
```

# 成果物

https://paiza.io/projects/iVJ93rMvv_Z0KNZzXXy0Bg

以上。
WindowsOS で明示的なIPアドレスに変更する方法(Windows Server 2019)

皆さんこんにちは！

医療業界から IT にチャレンジして2年目のharuです。
本日は WindowsOS のIPアドレスの変更を行います。

## 前提知識
**IPアドレス**
TCP/IPで通信する機器のことを「ホスト」と呼び、そのホストを識別するためのアドレスです。
明示的に設定しなかった場合も DHCP によって自動的にIPアドレスが設定されます。

**DHCP(Synamic Host Configuration Protocol)**
TCP/IP 設定を自動で設定してくれるプロトコルです。
DHCP サーバーから使えるアドレスを一定期間リースしてもらう仕組みです。

**サブネットマスク**
どこまでがインターネットアドレスでどこまでがホストアドレスなのかを決定します。

**デフォルトゲートウェイ**
他のネットワークと通信する際に入り口となるルータのことです。
他のネットワークにデータを送信する際には、まずはデフォルトゲートウェイへ転送を行います。

**DNS(Domain Name System)**
ホスト名とIPアドレスの対応付けを行う仕組みのことです。
この対応付けを「名前解決」といいます。DNS はこの名前解決方法の1つです。
DNSによる名前解決は、DNS サーバーにネームクエリーを送信して、
目的のホスト名とIPアドレスの対応を問い合わせます。

## Windows Server 2019 のインストール

まずは Windows Server 2019 のインストールから行います。
ディスクをセットしPC(仮想)を起動します。

黒い画面で動きそうにないときは、Enter キーを押すと次に進んだりします。

出てきましたね。
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/fcf67f28-ef48-8905-bf0c-6d88355d6e51.png)
次に進みます。

今すぐインストールをクリック。
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/34020841-cbf1-aae9-ea47-8b4d12e7d4f1.png)
今回は、Datacenter Evaluation(デスクトップエクス...)を選択します。
![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/5d1b5232-9851-581f-3694-c880d9282da4.png)
同意します。
![4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/c80f15c9-c24e-ac26-671d-ff5dbee5175c.png)
「Window のみをインストールする(詳細設定)」を選択します。
![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/1b43256c-fd44-03a7-80c9-00989d26565e.png)
Windows OS のインストール場所を選択して次へ
![6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/58dfac26-a9ea-41e9-fb72-ff926b0e9092.png)
インストールファイルのコピーが始まりました。
![7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/08243b05-0a12-e722-0b60-e12bde7d45df.png)
しばらくすると、見慣れたマークが出てきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/b58880b9-65b6-c745-2523-71461e68e16c.png)
管理者パスワードを設定し、「完了(F)」をクリック。
![9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/d739c404-78ee-37f0-e4b1-cb5c39dcdef1.png)
あっという間にインストールが完了しました。
![10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/3cbbeff9-d053-2938-99ff-e19bd761993e.png)

## IPアドレスの変更

「スタート」→ 「Windowsシステムツール」→「コントロールパネル」をクリック。
![11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/6a6119b6-ec7f-486d-150d-ffaf3e32a80a.png)
次に「ネットワークと共有センター」→ 「アダプターの設定の変更」→ インターネット接続のアイコンを右クリックし、「プロパティ」を選択。
![12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/68560353-a512-51ec-11cb-7cbd5651e33d.png)
次に「この接続は次の項目を使用します」の一覧から、「インターネット プロトコル バージョン 4（TCP/IPv4）」をクリックします。
![13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/db69f810-eeeb-730a-630a-04e0ec7db00f.png)
「次のIPアドレスを使う」と「次のDNS サーバーのアドレスを使う」を選択し、
それぞれに該当するアドレスを入力し、OK をクリック。
![14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/935cc74d-35e2-3176-91ec-aa527a686ef0.png)

その後、コマンドプロンプトで ipconfig を実行すると、IPアドレスが変更されていることが確認できます。

以上です！
Salesforce認定Platformアプリケーションビルダー試験の公式サンプル問題解説してみた-05

こんにちは

Salesforce認定Platformアプリケーションビルダー試験の公式練習問題があるのはご存じでしょうか。
Trailheadにフラッシュカードとして何度も解ける練習問題がございます。

https://trailhead.salesforce.com/ja/content/learn/modules/platform-app-builder-pt1


今回はTrailhead

認定 Platform アプリケーションビルダー資格の受験準備: Fundamentals and User Interface (基本事項とユーザインターフェース)
Salesforce の基本事項の学習

にある練習問題5問目をご紹介します

なお今回の内容は動画でも公開しております

https://www.youtube.com/watch?v=gpQTrXxrzXE

<iframe width="560" height="315" src="https://www.youtube.com/embed/gpQTrXxrzXE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

今回の内容はこちらです


正解はDです


今回はこのようなロール設定がありますね

![ロール01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/60bce818-e77b-9204-7a0e-4b8a06cd45b4.png)



今回はマネージャーがレコードを作成した際、どのロールそうまで見れるか
ということですね
レコードが参照できるのはそのレコードの所有者と上位のロールであるディレクターなのでDが正解です
驚くほど簡単、シンプル。JMP 17の新機能「ナビ付きDOE」

![ナビ付きDOEヘッダー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/9dda5e1b-0558-b493-acd7-1c01ac9e0fbb.png)
### ■実験計画、苦手にしていませんか？
製造業を中心に幅広い業界で活用されている実験計画ですが、知識や経験に乏しい初心者の方が実施するのは簡単ではありませんよね。そこで、もっと分かりやすく、手軽に実験計画を始めたいという方々に向けて、最新版JMP 17では実験計画法のナビゲーションに従って、初心者でも簡単に実験計画を進められる新機能<font color="Red">**「ナビ付きDOE」**</font>を提供しています。

### ■２つのモードで強力サポート「ナビ付きDOE」
「ナビ付きDOE」には２つのモードがあります。
初心者向けの **「ナビに従い設定」** モードは、ガイドが親切で、何をやればよいのか分かりやすく明確です。入力欄に数値等を入れていくだけで、とてもスムーズに、悩むことなく、実験計画のフローにあわせて、初めから最後まで流れるように実験計画を行うことができます。

他方、 **「自分で細かく設定」** モードは、その名称のとおり自分で細かくカスタマイズができるので、初心者だけでなくJMPに慣れている方や実験計画に詳しい方でも十分活用できる新機能になっています。

どちらも魅力的な機能ですが、今回の記事では、実験計画の初心者の方々にとって非常に使い勝手がよく、強力なサポートとなる **「ナビに従い設定」** モードについてご紹介します。

#### ▶ポイント１：簡単、シンプル、驚くほどの使いやすさ
今までの実験計画では、データ入力から分析まで何度かクリックする必要があり、実験計画を行ったウィンドウと結果のウィンドウが、下の画像のように分かれて表示されていました。
![画像１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/a0e33dfd-6b85-5a9f-948c-963f77399fdd.png)
一方、「ナビ付きDOE」では、実験計画のフローを1つのウィンドウで実施できるのが大きなポイントです。
![画像２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/3e980e7f-06b1-9fe2-ee5e-db0d430d4a4b.png)
たとえ実験計画に詳しくない方でも、左下の「ナビのコントロール」のボタンを押していくだけで、実験計画のフローに従って進めていけます。因子、応答、モデルの種類や実験回数を指定することで、それにあった計画ができるので、あとは得られた計画に従って実験を行い、結果（応答）を入力するだけです。
![画像３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/d3fb883f-967a-d969-1c0c-b7cf85751a50.png)
入力後に、「分析」のタブに移れば、実施した実験計画の分析を同じウィンドウで行えます。また、「最良のモデル」ボタンをクリックすることで、効果がない項（因子）がモデルから削除され、最適なモデルを構成してくれます。
![画像４.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/2108b68f-ff67-3445-c78b-ab332fdf951c.png)
#### ▶ポイント2：ファイルの共有が同僚とのコラボレーションの幅を広げる
「ナビ付きDOE」では、作業内容をJMPに関連付けられた「*.jmpdoe」ファイルとして保存できます。これによって前回の業務の続きを再開できるのはもちろん、JMPユーザーの同僚にファイルを共有することも可能です。

「.jmpdoe」ファイルを同僚のJMPユーザーと共有すれば、それまでどんな実験計画を行ってきたのかを共有相手が簡単に確認できるため、そこからスムーズに業務の引継ぎやディスカッションを進めることができます。

また、受け取ったファイルを元に考察を深めたい場合には、「データ入力」タブ内の「データの書き出し」をクリックすることで、JMPデータテーブルとして表示ができるので、従来の実験計画の機能を活用して自分で考察も進められます。
![画像5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/b43c60bf-635e-897e-19b5-0c4fafc843d3.png)
以上２点が「ナビ付きDOE」の推しの機能です。いかがだったでしょうか。実験計画の初心者の方や、今まで苦手意識を感じていた方に是非とも活用していただきたい新機能をご紹介しました。

少しでも関心を持たれたなら、ぜひ**最新JMP 17のトライアル版**や**体験セミナー**をご検討ください。

**・JMPの全機能を３０日間使い放題！無料トライアル版**
https://www.jmp.com/ja_jp/download-jmp-free-trial.html

**・「ナビ付きDOE」体験セミナー**
https://www.jmp.com/ja_jp/events/live-webinars/non-series/easydoe-2022-11.html

### ■7歳児でも実験計画を実施できる時代に（ただし、パパの手助けアリ）
おまけですが、弊社USスタッフが7歳の娘さんと一緒に「ナビ付きDOE」を使ってみた動画も公開しています。７歳児でもお父さんのサポートを受けながら使える「ナビ付きDOE」、皆さんもぜひお試しください！

**Easy DOE: Easy Enough for a Seven Year Old?（英語）**
https://community.jmp.com/t5/Discovery-Summit-Americas-2022/Easy-DOE-Easy-Enough-for-a-Seven-Year-Old-2022-US-30MP-1163/ta-p/505869
Progate Web開発コース終了

<h1>Webアプリ開発完了</h1>
Nodejsを用いてデータベース型のWebアプリを作成した。

<br>・スマホから見やすい画面を作る
・ユーザごとに別の買い物メモを作れるようにする

のような機能を追加していきたいなと思った。

とりあえず基礎的なWebアプリを制作した。自分の現状は、レシピを見て料理ができる人に過ぎないのでもっと積極的に知的好奇心をこのまま探求し続けて頑張っていく。どんどん作りたいものが増えていく一方で学ばなければならないことが追い付いていない状況なので物事を順序だてて考えていきたい。(下書きに入れっぱなしで投稿が遅れてしまった)

<h2>Next>>My Portfolio webサイトの作成</h2>
トライデントコンピューター専門学校ウェブデザイン学科の生徒さんたちのPortfolioをざっと見て、このようなWebサイトを1か月未満で作成したい。以下にリンク。

[Webトライデントコンピュータ専門学校](https://tridentwebdesign.blog.fc2.com/e/protfolio2022?sp)
Azure Fundamentals(AZ-900)に合格するための勉強方法

先日、AzureのFundamentals資格の登竜門となるAZ-900の試験に合格しましたので、備忘録兼ねて勉強方法をまとめておきます。
下記内容は2022年10月現在の情報で、今後試験内容が改訂されることもありますので、その点ご了承ください。

# 試験範囲
- クラウドの概念の説明 (25–30%)
- Azure のアーキテクチャとサービスの説明 (35–40%)
- Azure の管理とガバナンスの説明 (30–35%)

# 試験形式
- 問題数 : 35問程度
- 時間 : 65分
- 合格点 : 700／1000点

# 回答形式
- 選択問題（はい／いいえ）※１問の中で複数問題あり
- 選択問題（ラジオボタン選択式）
- 選択問題（チェックボックス型複数選択式）
- 選択問題（コンボボックス型選択式）
- ドラッグアンドドロップ問題
- ホットスポット問題

# 受験までにやるべきこと
<strong>1. Virtual Training Daysの受講</strong>
まずはMicrosoftが提供する無料ウェビナーを受講して概要と試験範囲を抑えることが大事です。
ウェビナーはこちらの [URL](https://www.microsoft.com/ja-jp/events/top/training-days/azure?activetab=a1:primaryr4 "https://www.microsoft.com/ja-jp/events/top/training-days/azure?activetab=a1:primaryr4") から申し込めます。

平日のみ2日間受講する必要がありますが、試験に出題されるポイントなども教えてくれますし、何より試験が無料で受けられるバウチャーが手に入ります。👈これが一番重要(笑)
受講後、数日するとバウチャーチケットの案内とウェビナーで使用したプレゼン資料もダウンロードすることができますので、できるだけ受講することをおすすめします。


<strong>2. Microsoft Learnのラーニングパスで勉強</strong>
試験範囲に対応した [ラーニングパス](https://learn.microsoft.com/ja-jp/certifications/azure-fundamentals/ "https://learn.microsoft.com/ja-jp/certifications/azure-fundamentals/")をじっくり読むことが大事です。ラーニングパスをひととおり受講した後には [コレクション](https://learn.microsoft.com/ja-jp/users/23110622/collections/0kjyh8rn5x76j6 "https://learn.microsoft.com/ja-jp/users/23110622/collections/0kjyh8rn5x76j6")の内容も見ておいたほうがよさそうです。
受講中にサンドボックスを利用して演習もできるので、単に知識を詰め込むだけでなく、動かして自分の目で確認することも大事と思います。


<strong>3. 試験対策On Demand講座の問題を解く</strong>
MSのサイトから必要な情報を登録したら [ダウンロード](https://info.microsoft.com/JA-HCSAzureHybridInfra-WBNR-FY21-02Feb-11-AZ900PrepSession-SRDEM61308_LP02OnDemandRegistration-ForminBody.html "https://info.microsoft.com/JA-HCSAzureHybridInfra-WBNR-FY21-02Feb-11-AZ900PrepSession-SRDEM61308_LP02OnDemandRegistration-ForminBody.html")できます。
ただし、こちらの問題は2020年時点の若干情報が古いので、改訂前の情報も含まれております。が、やっておくに越したことはないと思います。
MS Learnの中に [サンプル質問](https://learn.microsoft.com/ja-jp/certifications/resources/az-900-sample-questions?source=recommendations)も含まれているので、こちらも一通り演習しておいたほうがいいです。



<strong>4. 過去問をひたすら解く(無料)</strong>
こちらの [サイト](https://www.examtopics.com/exams/microsoft/az-900/view/ "https://www.examtopics.com/exams/microsoft/az-900/view/")は英語のみですが、過去問の種類が豊富です。※社内メンバーに教えてもらいました
議論が多めでいいのですが、正解を書いてくれてないので、答えは自分で調べる必要があります。そこだけが欠点です・・



<strong>5. 過去問をひたすら解く(有料)</strong>
Udemyのサイトで、Azure Fundamentals AZ-900 試験対策問題集を買いました。
私はMCP試験を受けるときは、とにかく演習数をこなして自信もって臨む派なので、少しだけ投資してこちらの [問題集](https://www.udemy.com/course/microsoft-azure-az900-exam/ "https://www.udemy.com/course/microsoft-azure-az900-exam/") を購入しました。

実はこちらの問題集は改定後の試験範囲に合わせて2022年7月に更新済みになっているので、ものすごく助かりました。
実際受けた試験の50％程度は、同じ問題が出題されていました。


# 感想など
私は805／1000点でなんとか無事に合格できました。
本当は900点超えを狙っていたのですが(笑)、苦手なネットワーク系の問題が多めで、出鼻くじかれて試験開始直後はちょっと焦っておりました。
ただ、Udemyと同じ内容の問題を見たところでようやく地に足がついたような感じ。
何度も演習を解いて、間違ったところは解説を読んで理解に努める。これをひたすら繰り返していけば合格できると思います。

ここまで読んでいただきありがとうございました。
私自身は次回はDP-900の合格を目指して勉強していくつもりです。
この記事がこれから試験を受ける方のお役に立てれば幸いです。
JUnit私的テスト

★★★ 私的メソッド取得
Class[] argType = {String.class};
String oStMQSTMT  = "oStMQSTMT";
Object[] arg = {oStMQSTMT};

Method method = oUbTarget.getClass().getDeclaredMethod("outputVal", argType);
method.setAccessible(true);
String ret = (String) method.invoke(oUbTarget, arg);

★★★ 私的変数値取得
// テスト対象クラス生成
UBTEservClient oUbTarget = new UBTEservClient();	
Field field = UBTEservClient.class.getDeclaredField("oScSchema");      
import java.lang.reflect.Field;

//フィールドにアクセスできるようにする。
field.setAccessible(true);

//フィールド名（変数名）を出力。
System.out.println("変数名：" + field.getName());

//フィールドの値を出力。
System.out.println("値：" + field.get(oUbTarget));


★★★  表示順指定
import org.junit.runners.MethodSorters;
import org.junit.Test;
import org.junit.FixMethodOrder;
@FixMethodOrder(MethodSorters.JVM)
@Test
【機械学習】SVMとランダムフォレストについての解説

### 目次
[1.はじめに](#はじめに)
[2.教師あり学習について](#教師あり学習について)
[3.分類問題](#分類問題)
ここから本題↓
[4.サポートベクターマシン](#サポートベクターマシン)
[5.ランダムフォレスト](#ランダムフォレスト)
[6.おまけ　決定木の特徴](#決定木の特徴)

## はじめに
今回は教師あり学習の特に分類問題について解説しようと思います。
特に
- サポートベクターマシン
- ランダムフォレスト
についてフォーカスします。

## まず教師あり学習について
まずは少しだけ
1. 回帰問題
1. 分類問題
この２つについて軽くおさらいしておきましょう。

### 回帰問題
回帰問題とは予測する値が連続値である場合これに該当します。
### 分類問題
これはさらに2値分類、多値分類に分けることができます。
すなわち予測する値が0 or 1のとき分類問題といえます。これを特に2値分類といいます。
また0 or 1の２つのラベルではなく3つ以上に増えたときに特に多値分類と呼ばれるものになります。

さて次から本格的に分類問題について考えてみようと思います。

## 分類問題

![IMG_2576.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2728563/4d38bdca-283a-f271-9f7b-7796861fd78c.jpeg)

上図のように二次元平面上のデータを直線で分けられる場合を**線形分離可能**といい、そのアルゴリズムを**線形分類器**といいます。
有名なものとしては以下のようなものが挙げられます。
- 単純パーセプトロン
- 線形サポートベクタマシン
- ロジスティック回帰
etc.

![IMG_2577.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2728563/3ef94119-b775-9225-164d-e2f619152db9.jpeg)

また一般に図２のように直線を組み合わせて考えることが多いのも事実です。このような線形ではない形で分類するアルゴリズムを**非線形分類器**といいます。有名なものは
- k-近傍法
- 決定木（分類木）
- ランダムフォレスト
- 非線形サポートベクターマシン
- ニューラルネットワーク
etc.
があります。

# 【SVMとランダムフォレスト】
少し前置きが長くなりましたが、それぞれ説明致します。

## サポートベクターマシン
### 境界線を作り最適な超平面を見つけ出す
まずSVMのアルゴリズムの目的としてはあるクラスのデータを、別のクラスのデータからできる限り距離を取ることを指します。
例えば図を書くを下図のようになります。
![IMG_2579.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2728563/4ba593e0-a193-b710-7a7d-dc47626ed446.jpeg)
図３をご覧ください。この場合の青い破線の中に書かれている矢印を**Margin**といいます。この距離が最大になるようにサポートベクターマシンは学習を進めていきます。


## ランダムフォレスト
### 決定木の集まりがランダムフォレスト
木が集まって森になるのは言葉として面白いですね。

ランダムフォレストはアンサンブル学習の中でもバギングを用いたアルゴリズムです。

#### アンサンブル学習とは
察しのいい人ならお気づきかも知れません。
アンサンブル学習とは複数の学習器を組合わせた１つのモデルのことを言います。

アルゴリズムの世界でも３人寄れば文殊の知恵なわけですね。

#### バギングとは
モデルの予測結果のバリアンスを低くすることで予測精度の改善をする手法のことを言います。

バギングでは重複を許して学習データを復元抽出することでデータに多様性をもたせることを言います。

すなわちランダムフォレストとは、**決定木を組合わせ多様性を持たせたアルゴリズム**だと言えます。


ちなみに
#### 決定木の特徴
決定木は説明力が高いことが知られています。
すなわち重要な特徴量がわかるということです。

それがどうした。というわけですが、これはビジネスで非常に重要です。
ビジネスでは超精度のアルゴリズムより理論付けられた提案をするほうが重要です。

つまり**どの変数が重要かわかりやすいため説得力をもたせやすい**という点が決定木の特徴であり、強みであると言えます。

専門でなくともわかりやすい長所があるので、ビジネスでは+αで決定木も実装できると良いかも知れませんね。

ここまで読んで頂きありがとうございます。
ぜひ、いいねとブックマークしていただけると嬉しいです。
【データ抽出/BigQuery】スカラーサブクエリを使用して、STRUCT型のデータの中の指定した一つのデータを取り出す

# 前提
社内でGoogleAnalyticsのデータを、
BigQueryのテーブルでSTRUCT型で保持している。

各`event_name`毎にSTRUCT型で、複数の`event_params`（パラメータ）が格納されているのだが、
そこから`event_params.key`が`content_id`のデータだけを、
各`event_name`毎に一つだけ取り出した。

※STRUCT型は下記のような構造になっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883573/6312cce7-14e1-7aec-e1e6-57fb05a6c2bf.png)



## 使用したクエリ
スカラーサブクエリでunnestを使用し、
STRUCT型のデータの中の一つのデータを取り出すというやり方で行った。
```SQL
select
    event_date
    , event_times
    , event_name
    , (select value.string_value from unnest(event_params) as event_params where event_params.key = "content_id") as content_id]
from
    `GoogleAnatyticsのデータを格納しているテーブル`
```
`event_name`の各パラメータは`event_params`の中にSTRUCT型で格納されている。
上記のクエリを使用することで、
各`event_name`の`event_params.key`が`content_id`のデータだけを抽出することができた。

※参考記事
・[event_paramsについて（BigQueryのGoogle Analytics 4プロパティ）](https://note.com/macmuko/n/n5cdd63031513)
・[Google Analytics の データを細かく分析したい](https://zenn.dev/mjunya1030/articles/20210510-analyze-ga4-by-bigquery)

## 上記のクエリを分解して理解する
上記のスカラーサブクエリで、
何故`event_params`の中の`content_id`のデータだけを抽出することができたのか。

1. スカラサブクエリ内のFROM句で`unnest(event_params)`と記述し、
配列の`event_params`を並列に展開する。

2. スカラサブクエリ内のWHERE句で`event_params.key = "content_id"`と記述して、
`event_params`の`key`が`content_id`のデータを抽出するようにフィルタリングする。
※`event_params`には`content_id`や`ga_session_id`や`work_id`などパラメータの種類の名称が格納されている。

3. スカラサブクエリ内のSELECT句で`value.string_value`と記述して、
`content_id`に対応する値が格納されている`event_params.value.srting_value`を呼び出した。
※`event_params.value.string_value`には、
`event_params.key`に対応する文字列型のデータが格納されている。

# 【2022/11/24追記】BigQueryでJSON型が使えるようになった
今までSTRUCT型のデータをJSON形式で抽出する時は、
`TO_JSON_STRING`を使用して文字列型で抽出していたが、
JSON型でも抽出できるようになっていたためメモ。
※参考
・[Google標準SQLのJSONデータでの操作(公式ドキュメント)](https://cloud.google.com/bigquery/docs/reference/standard-sql/json-data)
・[【新機能】BigQueryでJSON型が使えます！](https://dev.classmethod.jp/articles/bq-json-ga-pubsub/)
Zoom Japan Developer Workshop 2022 - Business Day の収録動画を公開！

:::note info
2022年の9月/10月に開催した、Zoom Japan Developer Workshop 2022 - Business Dayの収録動画を一挙公開します。日本語で初めてZoomのAPIやSDKのビジネスおよびライセンスについて詳しく解説しました。Zoomとの連携や、ビデオ通信の組込/実装に取り組まれている方の参考にあれば幸いです。感想やコメントもQiitaやTwitterでお寄せいただければと思います。
:::

![Developer Workshop 2022 Biz1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123955/a8db4628-3589-530e-bdc5-049a9c0bc929.png)

* Zoom Japan Developer Workshop 2022 - Business Day
    * 2022年9月15日開催
    * ZoomのDevleoper Platformの概要と、APIやSDKを使う際のライセンスや料金について解説しています。ぜひご確認ください。
    * 収録動画への[リンク(Dropbox)](https://www.dropbox.com/s/nzvlokfsr32tgkw/Business_Day_20220915.mp4?dl=0) 約60分
    * ビジネスに関しては、こちらのQiita Zineの下記記事もよろしければご覧ください。
        * [「Zoomの拡張機能！？シームレス連携が出来るAPIとSDKについて中の人に聞いてみた」](https://zine.qiita.com/interview/202205-zoom/)


:::note info
* (参考情報) Zoom Japan Developer Workshop 2022 - Engineer Day
    * 2022年10月13日開催
    * ZoomのDevleoper Platformのを構成する、APIやSDKを実際に扱う際の手続きや実装について詳しく解説しています。実装方法などについてはぜひ下記の記事を参考にしてください。
    * https://qiita.com/kensano/items/4e43f229e96bffe51677
:::
:::note warn
本収録動画の内容は2022年9月/10月時点のZoom Developer Platformの仕様に準拠していますので、ご視聴時の仕様と異なっている可能性があります。最新の情報は当社ウェブサイト（英語）でご確認ください。
https://marketplace.zoom.us/docs/guides/

QiitaのOraganizationページで日本語でも一部情報提供を行っています。ぜひこちらも併せてご確認ください。
https://qiita.com/organizations/zvc
:::
Tableauでダッシュボード作る時にオフにした方が良いかもしれない機能一覧

Tableauでダッシュボードを作成するときに、場合によってはオフにしておいた方が良い機能がいくつか存在します。そういう機能についてもっと知りたい！と思って以下のTweetをしたところたくさんのTipsが寄せられましたので、ここにまとめたいと思います。みなさん情報ありがとうございます！まだまだ募集していますので、ぜひTwitterでリプライいただけると幸いです。

https://twitter.com/unbosoms/status/1582365161582911493?s=20&t=8UwTAxEMSFQxaWQPT4GMcQ

# オフにした方が良いかもしれない機能たち

## ツールヒントのコマンドボタンをオフにする

ツールヒントには選択した値を除外したりグループを作ったりするコマンドボタンがついています。しかしダッシュボード利用者が不用意に触ってしまってフィルターされて戻せなくなってしまうこともあるので、使ってもらう想定でない場合はオフにしておいた方がよいです。

https://twitter.com/unbosoms/status/1582365166234402816?s=20&t=8UwTAxEMSFQxaWQPT4GMcQ

https://twitter.com/DATA_Saber/status/1582612522548744194?s=20&t=8UwTAxEMSFQxaWQPT4GMcQ

## ツールヒントをオフにする

BANsのようにKPI値を数字としてドンと表示するときは、そもそもツールヒントをオフにしてしまう方が良い場合もありますよね。BANsの場合は、後ほど出てくる[空白のオブジェジェクトでクリックを禁止する](#空白のオブジェジェクトでクリックを禁止する)を使ってそもそも触らせなくするのもありです。

https://twitter.com/antipop1/status/1584887217469939712?s=20&t=dGMpgml4ebYm1pRhFAtYmA

## 地図のパンとズームをオフにする

地図表現はとても魅力的ですが、デザイン性の高いVizであったり、閲覧範囲を細かく調整している時は地図のパンやズームをしてほしくない場合もあります。その方法をご紹介しています。

https://twitter.com/unbosoms/status/1582365171624050695?s=20&t=8UwTAxEMSFQxaWQPT4GMcQ

## ソートコントロールの非表示

軸をクリックすると並び替えの順序を切り替えることができますが、ランキングを表示している時は並び順を変えて欲しくない場合もあります。そんな時の設定方法です。

https://twitter.com/unbosoms/status/1582365832403091457?s=20&t=8UwTAxEMSFQxaWQPT4GMcQ

Rikaさんのブログでも詳しく説明されていますので、こちらも是非ご覧ください。

https://twitter.com/Rika_Olga_F/status/1582567734575259649?s=20&t=8UwTAxEMSFQxaWQPT4GMcQ

## アニメーションをオフにする

動作が思いダッシュボードではオフにした方が軽くなるシーンがあるかもしれません。

https://twitter.com/noookooon/status/1582579745371262976?s=20&t=8UwTAxEMSFQxaWQPT4GMcQ

## ハイライト機能をオフにする

デフォルトだとクリックすると同じディメンションのマークがハイライトされるのですが、それをオフにするというもの。利用者の性質や利用シーンによってはない方がわかりやすいこともあると思うので覚えておきたいですね。

https://twitter.com/proj_aquabellus/status/1582529988938473472?s=20&t=8UwTAxEMSFQxaWQPT4GMcQ

## 空白のオブジェジェクトでクリックを禁止する

ダッシュボードでクリックして欲しくない領域があった場合は、左下のメニューにある「空白」というオブジェクトを浮動で配置して、さわってほしくないところに置くだけでクリックを禁止することができます。とても手軽なので覚えておきたいテクニックです。

https://twitter.com/Tab1leau/status/1582555813075640320?s=20&t=8UwTAxEMSFQxaWQPT4GMcQ

## モバイルレイアウトが追加されるのをオフにする

ダッシュボードを作成するとデフォルトでモバイル用のレイアウトが追加されます。私もPublic活動する上でよく直面するのですが、デスクトップ用にデザインしたダッシュボードがスマホでみるとモバイルレイアウトが適用されてレイアウトが崩れてしまうことがあります。モバイルを想定していない場合はオフにしておいた方がよさそうです。

https://twitter.com/ishiaki_tab/status/1582559351360757760?s=20&t=8UwTAxEMSFQxaWQPT4GMcQ

## ドリルアップ/ドリルダウンボタンをオフにしたい（方法不明）

日付や階層設定をしたディメンジョンではドリルアップ/ドリルダウンのボタンがつきますが。不用意に触ってしまうと粒度が変わってしまって、想定と異なる見辛い表示になってしまう可能性があります。これをオフにする方法は私もわかっていないのですが、もしご存知の方いらっしゃれば教えていただけると幸いです。

https://twitter.com/hiroakimo_tw/status/1582406235172634633?s=20&t=8UwTAxEMSFQxaWQPT4GMcQ

# おわりに

Tableauは分析者を助けるために多くの機能を有しています。しかしことダッシュボードを閲覧する人（いわゆるViewer）にとっては不用意に触ってしまってダッシュボードの表示が崩れてしまう場合もあります。ダッシュボード設計者としてはこれらの点も考慮して、使いやすいダッシュボードを作っていきたいですね。
Javaのswitch文について

今日も学んだ事を忘れない為にメモします

## switch文とは
if分と同じように条件分岐の際に用いる。
if文は分岐が何パターンもあるとき、ソースが読みにくくなってしまうというデメリットがあるがswitch文は複数の分岐パターンがあってもわかりやすく書くことができる。

分岐が少ない場合ならif文を使い、分岐が多い場合ならswitch文を使うようにした方が可読性が上がる。

## 基本構文
```:構文１
switch(式){
 case 値1:
  処理1
  break;
 case 値2:
  処理2
  break;
 case 値3:
  処理3
  break;
 default:
  処理4
  break;
}
```
```:構文２
switch ( 式 ) {
	case 値1:
	case 値2:
		処理１;
		break;
	case 値3:
	case 値4:
		処理２
		break;
　　　　　　　default:
  　　　　　　　　　　　　処理３
  　　　　　　　　　　　　break;
}
```

switchのカッコ内に式を書く。そして、その式を比較する値を「case ◯◯」と記述する。
その下に、式と値が一致した場合に行う処理を記述する。そして最後に「break」を記述する。このようにして複数の「case ◯◯」を記述していく。

上から順に「case」が処理、式と値が一致した場合に実行されたら「break」によりswitch文が強制的に終了となるため、以降に書かれている処理は実行されない。

構文２の場合はどちらか一方の「case」が一致したしていれば処理が実行される。

どの値にも一致しなかった場合は「default」の処理が実行される。

## 例文
```:構文1
int num = １;

 switch(num){
  case 1:
   System.out.println("一等賞");
  break;
  case 2:
   System.out.println("二等賞");
  break;
  default:
	System.out.println("残念賞");
  }
```
```:構文２
int num = 2;

　　switch(num){
　　　　　case 1:
　　　　　case 2:
	System.out.println("一等賞");
　　　　　break;
　　　　　case 3:
　　　　　case 4:
	System.out.println("二等賞");
   break;
　　　　　default:
	System.out.println("残念賞");  
　　　　　}
```

以上になります。
mimemagicインストール時のエラー

# 前提
```
$ ruby -v
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-darwin21]
$ uname -m
x86_64
```

# 起きたエラー
```
An error occurred while installing mimemagic (0.3.10), and Bundler cannot continue.
```


## エラー詳細
```
$ bundle install
Fetching gem metadata from https://rubygems.org/..........
Using rake 13.0.6
Using minitest 5.16.3
Using thread_safe 0.3.6
＜略＞
Fetching sassc-rails 2.1.2
Installing mimemagic 0.3.10 with native extensions
Installing sassc-rails 2.1.2
Fetching sass-rails 6.0.0
Installing sass-rails 6.0.0
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory: /Users/kkosuke/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/mimemagic-0.3.10/ext/mimemagic
＜略＞
An error occurred while installing mimemagic (0.3.10), and Bundler cannot continue.

In Gemfile:
  rails was resolved to 6.0.3, which depends on
    actionmailbox was resolved to 6.0.3, which depends on
      activestorage was resolved to 6.0.3, which depends on
        marcel was resolved to 0.3.3, which depends on
          mimemagic
```


# とりあえず検索
## ヒットした記事
https://techblg.app/articles/handle-error-occurred-while-installing-mimemagic/


# 解決策
```
$ brew install shared-mime-info
```

## 試してみた。
```
$ brew install shared-mime-info
Running `brew update --auto-update`...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> New Formulae
pinocchio
==> New Casks
＜略＞
==> Upgrading libidn2
  2.3.2 -> 2.3.4

==> Pouring libidn2--2.3.4.monterey.bottle.tar.gz
🍺  /usr/local/Cellar/libidn2/2.3.4: 79 files, 1.2MB
==> Running `brew cleanup libidn2`...
Removing: /usr/local/Cellar/libidn2/2.3.2... (77 files, 846.7KB)
==> Checking for dependents of upgraded formulae...
==> No broken dependents found!
```
出来たっぽい。

## もう一度、bundle installを試してみる。
```
$ bundle install
Fetching gem metadata from https://rubygems.org/..........
Using rake 13.0.6
Using concurrent-ruby 1.1.10
＜略＞
Using sass-rails 6.0.0
Installing mimemagic 0.3.10 with native extensions
Fetching marcel 0.3.3
Installing marcel 0.3.3
Fetching activestorage 6.0.3
Installing activestorage 6.0.3
Fetching actiontext 6.0.3
Fetching actionmailbox 6.0.3
Installing actiontext 6.0.3
Installing actionmailbox 6.0.3
Fetching rails 6.0.3
Installing rails 6.0.3
Bundle complete! 17 Gemfile dependencies, 77 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
```

解決しました！
コードレビューを受ける時に意識していること

株式会社GoQSystemでフロントエンドを担当しています、@iwata-goqです。

私自身、業務上レビューしていただく場面が多くあります。レビューを受けるときは自分のコードがどう評価されるか不安を感じます。
そんな私が普段コードレビューを受ける上で意識していることをまとめてみました。

個人としての意見になりますが、これから現場で働く方への助けになれば幸いです。

![computer_mob_programming.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882125/55bf82ad-eb33-2c77-9d0f-3baf57b49daf.png)

## レビューは何のためにあるのか
まずはここから整理しましょう。
**レビューはコードをより良くするため**、にあります。

ここでのより良くするというのは以下の視点を持ちます。
- 見通しのよいコードを保つ。
- 今後の機能追加・修正に対応できるようにする。
- 個人の技術向上を図る。

それぞれ詳しくみていきましょう。

### 見通しのよいコードを保つ
プロジェクトには必ずコーディング規則が存在しています。
コーディング規則は、**チーム内で共通した認識をもち、コードを統一させる役割**があります。
また、どのように書けばいいのかわからない場合でも規則があれば迷う時間はなくなり、無駄な時間はなくなります。

### 今後の機能追加・修正に対応できるようにする
例えば、機能追加した内容がその場限りのコードで、他の場所で必要になった場合を想像してみてください。
もちろんその場限りなので、もう一度そのコードを書くといった状態が発生してしまいます。

そうならないように、**共通して使えるようなコードを書いていく**必要があります。

また共通化することで修正時にも修正し忘れなどのヒューマンエラーを防止することができます。

### 個人の技術向上を図る
自分の視点とは違った視点を学ぶ機会が生まれます。
そのことで幅広い視点を見つけやすくなり、自分の経験として蓄えていくことができます。

## レビューを受けるときの意識
先述したレビューの意義を踏まえて、どのような心構えでレビューを受けていけば良いか考えていきます。

### 感謝の気持ちを持つ
レビューをしてくれる方は自分の時間を削っています。
してくれるのが当たり前、ではなく感謝を忘れずレビューを受けましょう。

レビューする方・される方の関係が良好になるようにしていきたいところです。

### 流れ作業にならないようにする
レビューが多くなってくると、ついつい指摘されている部分だけを直しがちになります。
もしかしたら、共通して直す部分が他にもあるかもしれません。

常に自分で考えるようにしましょう。
指摘された部分から新しい疑問が生まれてくるようになればなお良いです。

### わからない部分は聞く
この真意は**レビューする人との考えの差異をなくすこと**になります。

わからない状態のまま進めてしまい、意図とは違った場合に出戻りが発生し無駄な時間が発生します。レビューする人にも負担がかかります。

わからなければ素直に聞く癖をつけましょう。

### 休憩時間をとる
指摘部分が多いと混乱する場面も多くなります。急いで修正すると思わぬバグが発生する可能性もあります。
そんなとき、休憩することで頭が整理され、狭まった視野を再度リセットしてくれます。
時間を空けることで、冷静になる時間を設けましょう。

## 最後に
いかがでしょうか。
レビューは自分のためでもあり、チームのためにあります。
私自身も、今日まとめたことを忘れず意識してレビューに臨んでいきたいです。

## GoQSystemでは一緒に働いてくれる仲間を募集中です！
ご興味がある方は以下リンクよりご確認ください。

https://goqsystem.recruit.site?qiita=ca42da27a7eb68470310
WindowsでLinux(WSL2)+Docker+VSCodeでの開発環境を構築

# 目的
- Windows環境で、Linux+Docker+VSCodeを使って開発をする準備を整える
- イメージ
![スクリーンショット 2022-10-22 184227.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109639/d70327c6-d116-ba20-a5ee-27391b0620be.png)

# 環境
- Windows 11 Home
# 手順
## 1. WSL2インストール
1. PowerShellを管理者として実行
    - Windowsキーを押下
    - 「PowerShell」と入力
    - 「管理者として実行する」をクリック
![スクリーンショット 2022-10-22 163117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109639/d0c19252-7314-7a02-9d9f-c4b1bf6df956.png)

2. PowerShell上で下記のコマンドを実行
    `wsl --install`
3. PCを再起動

## 2. WSL2セットアップ
1. Ubuntuを開く
    - Windowsキーを押下、「Ubuntu」と入力
    - Ubuntu on Windowsを選択し、「開く」をクリック
2. ユーザー名、パスワードを設定
    - 表示された通りに設定

## 3. Dockerインストール
Ubuntuで下記のコマンドを順次実行
1. パッケージ一覧をアップデート
`$ sudo apt-get update`
`$ sudo apt-get install ca-certificates curl gnupg lsb-release`
2. DockerのGPGキーを取得
`$ sudo mkdir -p /etc/apt/keyrings`
`$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg`
3. リポジトリ更新
`$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null`
`$ sudo apt-get update`
4. Docker Engineのインストール
`$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin`
`$ sudo apt update`
5. 権限設定
`$ sudo usermod -aG docker $USER`
6. Ubuntuを終了
`$ exit`

## 4. VSCodeの準備と動作確認
1. VSCodeをインストールしていなければ、下記のサイトからインストーラをダウンロードし、実行する
[Download Visual Studio Code](https://code.visualstudio.com/download)
2. VSCodeの拡張機能「WSL」をインストール
    - VSCodeのウインドウ左側のExtension（拡張機能）のアイコンをクリック
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109639/79301ea2-fdbd-f950-f701-9de294af0b8b.png)

    - 検索ボックスに「wsl」と入力し、下記のExtensionをインストールする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109639/ceba4c92-cb19-ba51-4eb0-98c0d6f4631d.png)
3. 左下の><マークをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109639/8fcf80ad-193b-f390-e22e-962ef330694c.png)
4. 「新しいWSLウインドウ」を選択
    - 左下が「><WSL: Ubuntu」の新しいウインドウが開くことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109639/a0641ce0-f932-cb37-0072-f36eb5e6e108.png)
5. 上のメニューバーから、Terminal > New Terminalを選択
    - VSCodeウインドウ下部にTerminalが現れる
    - 下記のコマンドを実行し、dockerの動作確認
    `$ docker container run --rm hello-world`
    - 成功の場合、下記のメッセージが出る
```
…（略）…
Hello from Docker!
This message shows that your installation appears to be working correctly.
…（略）…
```

6. VSCodeの拡張機能「Dev Containers」をインストール
    - VSCodeのウインドウ左側のExtension（拡張機能）のアイコンをクリック
    - 検索ボックスに「dev con」と入力し、下記のExtensionをインストールする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109639/477169fa-697c-6eb6-5b54-c64e65fdeeb0.png)

## 5. 開発開始
1. Dev Containers用のConfiguration Fileを作成
    - 左下の「><WSL: Ubuntu」をクリック
    - Add Dev Container Configuration Files …をクリック
    - 必要な環境を選んでいく
　　　AdaloのCustom Componentを作成する際の環境例はこちら：[Docker内でAdaloのカスタムコンポーネントを作成](https://lethediana.sakura.ne.jp/tech/archives/steps-ja/1183/)
転載　【Visual Studio】Python-Djangoのプロジェクトを開こうとすると”Microsoft.PythonTools.Django.targets が見つかりませんでした”エラーが出る

消えているので転載記事です。

問題
Visual StudioでPython-Djangoを利用するプロジェクトを開こうとすると以下のエラーが出た。
![image-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175440/637bd1d2-1eaf-c484-5129-62fdc64502c3.png)

C:SampleDjangoWebAppWithSQLDB\SampleDjangoWebAppWithSQLDB.pyproj : error  : インポートされたプロジェクト "C:\Program Files (x86)\Microsoft Visual Studio19\Community\MSBuild\Microsoft\VisualStudio\v16.0\Python Tools\Microsoft.PythonTools.Django.targets" が見つかりませんでした。また、$(MSBuildExtensionsPath32) - "C:\Program Files (x86)\MSBuild" に対してフォールバック検索パスで "Microsoft\VisualStudio\v16.0\Python Tools\Microsoft.PythonTools.Django.targets" の検索が試行されました。これらの検索パスは "C:\Users\xxxx\AppData\Local\Microsoft\VisualStudio.0_d68c9ee8\devenv.exe.config" で定義されています。<Import> 宣言のパスが正しいこと、およびファイルが検索パスのいずれかのディスク上に存在することを確認してください。  C:\Users\xxx\source\repos\SampleDjangoWebAppWithSQLDB\SampleDjangoWebAppWithSQLDB.pyproj

このプロジェクトは、もともと別のローカル端末上のVisual Studioで開発したもの。プロジェクトフォルダだけ今の端末にコピーしてきて開こうとしたところエラーが出た状況。

原因と解決方法
このStack Overflowが役立ちました。

https://stackoverflow.com/questions/69004041/cant-load-visual-studio-project-due-to-missing-microsoft-pythontools-django-tar

というわけで、Visual StudioのPython Webモジュールが不足していたようです。

Visual Studio Installerを開き、変更をクリック。

個別のコンポーネントからPythonで検索すると、Python Web サポートが出てくるので、それを追加インストール。

そしてVisual Studioを再起動すると・・・開いた！
![image-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175440/795e1aec-e611-3200-88cd-0159349c1fb7.png)

出展
https://www.simpletraveler.jp/2021/10/20/visualstudio-pythondjango-error/
https://web.archive.org/web/20211129002456/https://www.simpletraveler.jp/2021/10/20/visualstudio-pythondjango-error/
[ROS] turtlebot3のgazeboとrvizを使う

# [ROS] turtlebot3のgazeboとrvizを使う

`Turtlebot3`のシュミレーターの`gazebo`と`rviz`を使う方法を説明する。

## 動作環境
+ Ubuntu 18.04
+ ROS (melodic)

## パッケージのインストールと起動
* パッケージのインストール
`turtlebot3`のパッケージをインストールしてください
なお、`turtlebot3`の`model`は`burger`です。他の`model`を使いたい場合は`~/.bashrc`を編集してください。

```shell
$ git clone https://github.com/HHorimoto/install_pkg.git
$ cd install_pkg
$ ./ros_turtlebot3.bash
INSTALL ROS TURTLEBOT3 PKG
・
・
・
****************************
* do the following command *
* $ source ~/.bashrc       *
****************************
$ source ~/.bashrc
```

* パッケージの起動
`turtlebot3`のパッケージを起動してください。なお２つのコマンドは別々の端末で起動してください。
コマンドの1行目は`gazebo`を起動します。2行目は起動した`gazebo`に対応した`rviz`を起動します。

```shell
$ roslaunch turtlebot3_gazebo turtlebot3_world.launch
$ roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch 
```
検索コマンド【Chrome】【Yahoo】

## 検索コマンドとは？？
検索する際にコマンドを指定してあげることで、検索の精度を高めることができる。つまり、自分の必要な知識だけを効率よく集めることができる（知らなかった…）

ここでは今後使いそうだなと思うコマンドを紹介しようと思う。

***1. siteコマンド***
例えば「TypeScript」を検索したときは↓のような検索結果が出力される
![スクリーンショット 2022-10-25 114948.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884542/520913dd-a73e-09f5-5e33-d8eb841dc8c0.png)

☆これをQiitaの記事だけに絞ってみる
![スクリーンショット 2022-10-25 115207.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884542/ff57689f-f3cf-70f4-671f-e2ed8ecc8eef.png)

検索欄に「site:ドメイン名」を指定してあげることで特定のサイトだけの検索結果を表示することができる

***2\. afterコマンド***
afterコマンドは指定した年数以降の記事に絞ることができる
![スクリーンショット 2022-10-25 120129.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884542/88becbb5-e805-5ba8-1524-b0014f3fd166.png)

「after:年数」のように指定してあげることでその年数以降の検索結果を表示できる
※2022年現在では「2022」を指定することはできない
また、日付も指定することができる
2022/09/01以降であれば「2022-09-01」とする（このようにすれば2022年以降の検索結果に絞ることもできる）

***3\.キーワードを必ず含めるコマンド***
キーワードを必ず含めるためには「""」で囲う
![スクリーンショット 2022-10-25 120910.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884542/81948663-a441-0579-a88e-713ee5552106.png)

TypeScriptで「初心者」について調べたい場合は「"初心者"」とすることで絞り込むことができる

***4\.キーワードを含めない***
キーワードを含めないためには「-」を付ける
![スクリーンショット 2022-10-25 121205.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884542/613f657c-af24-86a0-0cc7-95fd523475a3.png)

「JavaScript」を含めたくない場合は「-JavaScript」とすることで絞り込むことができる

「site」コマンドでも同じことができる
![スクリーンショット 2022-10-25 121427.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884542/ab6740d9-d8ec-eac8-e435-130d79711169.png)

「-site:ドメイン名」とすることで絞り込み可能


他にも便利そうなコマンドがあるので必要な時に使ってみる
参考：https://www.siteengine.co.jp/blog/content-marketing/google-search-command/
[python] カタカナを全角と半角をパッケージ使わずに交換する

```python
# 半角カナと全角カナを交換
def conversion_kana(kana):
    zen = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ"
    han = "ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝｧｨｩｪｫｯｬｭｮ"
    zen_da = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"
    han_da = "ｶﾞｷﾞｸﾞｹﾞｺﾞｻﾞｼﾞｽﾞｾﾞｿﾞﾀﾞﾁﾞﾂﾞﾃﾞﾄﾞﾊﾞﾋﾞﾌﾞﾍﾞﾎﾞﾊﾟﾋﾟﾌﾟﾍﾟﾎﾟｳﾞ"
    kana_dic = {
        zen: han,
        han: zen,
        zen_da: han_da,
        han_da: zen_da
    }
    res = ""
    # 入力文字を一文字づつ走査する
    for i, k in enumerate(kana):
        if k[0] in ['ﾞ', 'ﾟ']:
            continue

        # 文字が半角の濁点なら次の一文字を追加する
        han_d_flg = False
        if not len(kana) == i+1:
            if kana[i+1] in ['ﾞ', 'ﾟ']:
                k += kana[i+1]
                han_d_flg = True

        # 文字が所属するキーを探す
        zen_d_flg = False
        ok_flg = False
        for key in kana_dic.keys():
            if key[0] == "ガ":
                zen_d_flg = True

            # キーを一文字づつ走査する
            if k in key:
                # 半角濁点はインデックスを半分にする、全角濁点はインデックスを倍にする、それ以外はそのまま
                if han_d_flg:
                    int_key = int(key.find(k)/2)
                    if not len(kana_dic[key]) == int_key:
                        res += kana_dic[key][int_key]
                elif zen_d_flg:
                    res += kana_dic[key][key.find(k)*2] + kana_dic[key][key.find(k)*2+1]
                else:
                    res += kana_dic[key][key.find(k)]

                ok_flg = True
                break

        # 文字が見つからない場合はそのまま代入する
        if not ok_flg:
            res += k

    return res

```
Laravelの基礎を身につける

## 概要
初心者の方向けに、Laravelの基本構造を具体的なコードを用いて理解するための記事です。

## 前提条件
```Laravel Framework 9.35.1```

## Larabelの基本
LaravelとはPHPのフレームワークの１つであり、PCのブラウザで動作するWeb開発に用いられるものです。Webの仕組みの１つとして、MVCモデルというものがあります。<br>MVCモデルとは、ユーザーがサーバーにリクエストし、サーバーがユーザーにレスポンスをする基本的な仕組みを実現するための仕組みです。例えば、Modelであればデータベースとの役割、Viewであればユーザーに表示する役割、ControllerであればModelやViewを繋ぐ役割をしています。

## Laravelにおける一連の流れ

```web.php
use App\Http\Controllers\TableController;

Route::get('/', 'index')->name('index');
```

```TableController.php
use App\Http\Controllers\TableController;

class TableController extends Controller
{
    public function index(Table $table)
    {
        return view('tables/index')->with([
            'id' => $table->getfirstid()
        ]);
    }
}
```

```index.blade.php
$id
```

```Table.php
public function getfirstid()
    {
        return $this->orderBy('created_at', 'ASC')->first();
    }
}
```

## 出力結果
Tableテーブルにあるレコードの一番初めのidが出力されます。
iOSビルドが遅い, Xcodeビルドが遅い場合の対処法　 ビルドを短くする方法

# なぜ時間がかかるのか
現在、Firestore iOS SDKは約50万行のC++のコードに依存しており、Xcodeのビルドの一部としてコンパイルすると、長い時間がかかります（CI環境ではなおさらです）。
***公式ドキュメント***
https://github.com/invertase/firestore-ios-sdk-frameworks


# どれほど変わるのか
Mac mini (2018) 6 cores:

導入前:    ~ 240s
導入後:     ~  45s

GitHub Action CI 2 cores:

導入前:    ~ 551s
導入後:     ~ 174s (公式情報)

# 導入方法
以下のコードをios/Podfile　に下記のように追記する
``` 
pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '10.0.0'
```
![](https://storage.googleapis.com/zenn-user-upload/a4f147df87f1-20221023.png)

記述後以下のコードをそれぞれ実行し、ビルドできれば成功。
flutter clean
flutter pub get 
flutter run

# 注意点
エラーが出る場合は tag => '10.0.0'のところが使用している環境のバージョンにあっていないことで起こることがある。
エラー文に使用すべきバージョンが書いてあることが多いので英文が苦手でもきちんと読むべし。
もしくは最新バージョンを使っている場合は上記の公式ドキュメントを確認し、一番上のバージョン番号をtag => '' ⇦ **ここ**に記述すればよい

例えば執筆日の最新バージョンは10.0.0である
![](https://storage.googleapis.com/zenn-user-upload/6a9bbac4c5a6-20221023.png)
paiza.ioでelixir その12

# 概要
paiza.ioでelixirやってみた。
sha256やってみた。

# 検証するsha256
""
変換後
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
出処　wikiペディア

# サンプルコード

```

IO.puts "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
:crypto.hash(:sha256, "") 
|> Base.encode16(case: :lower)
|> IO.puts


```

# 実行結果

```
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
```

# 成果物

https://paiza.io/projects/xcY6RAv5drCkUinJKWXVHA

以上。
【Athena】指定期間の日付一覧を取得する【Presto】

# 指定期間の日付一覧が欲しい
自分の場合は作成した時系列データに抜けている日付がないかのチェックのために日付一覧が欲しくなったため調べました。
以下のSQLで取得できます。timestamp型で取得可能です。

```sql
SELECT timestamp AS DAY
FROM UNNEST(
      SEQUENCE(
        cast('2022-01-01' AS date), 
        cast('2022-12-31' AS date), 
        INTERVAL '1' DAY
      ) 
    ) AS t1(timestamp)
```

参考

https://stackoverflow.com/questions/51401047/prestodb-select-all-dates-between-two-dates
paiza.ioでelixir その11

# 概要
paiza.ioでelixirやってみた。
base64やってみた。

# 検証するbase64

ABCDEFG
変換後
QUJDREVGRw==
出処　wikiペディア

# サンプルコード

```


IO.puts "ABCDEFG"
IO.puts "QUJDREVGRw=="

{:ok, res} = Base.decode64 "QUJDREVGRw=="
res
|> IO.puts

Base.encode64("ABCDEFG", case: :lower)
|> IO.puts


```

# 実行結果

```
ABCDEFG
QUJDREVGRw==
ABCDEFG
QUJDREVGRw==

```

# 成果物

https://paiza.io/projects/kQxYhB_A2i5fmmwWCbzUIg

以上。
Timeクラスを色々と使ってみる

## 環境
Ruby 2.6

## はじめに
システム開発をする上で、日付に関する操作は避けて通ることはできません。他言語（VBです）からRubyに移行した人からすれば、日付を扱うクラスに、Timeクラス、Dateクラス、DateTimeクラスの３種類もあることに驚いてしまいます。しかし、Ruby3.0からDateTimeクラスが非推奨となっているため、これからは、ほぼほぼ、TimeクラスとDateクラスさえ知っていればいいということになりそうです。まずは、Timeクラスの使い方について、システム開発でよく使いそうなメソッドをいくつか確認してみます。

## 確認
システム日付を取得する方法です。Time.nowを使っても、Time.newを使っても同じです。
```test.rb
puts Time.now                                         # => 2022-10-24 15:15:53 +0900
puts Time.new                                         # => 2022-10-24 15:15:53 +0900
```

データ型を確認すると確かに、Time型になっています。
```test.rb
puts Time.now.class                                   # => Time
```

Time型を文字列（String型）に変換したい場合は、to_sをしてやればOKです。
```test.rb
puts Time.now.to_s.class                              # => String
```

取得したシステム日付にフォーマットを掛けて、年月の形式（YYYY-MM）にする場合です。注意する必要があるのが、月を%mにするところです。%Mにしてしまうと秒が取得されます。また、年を%yにすると、西暦の下２桁が取得されます。例）2022 → 22
```test.rb
puts Time.now.year.to_s + "-" + Time.now.month.to_s     # => 2022-10
puts Time.now.strftime("%Y-%m")                         # => 2022-10
puts Time.now.strftime("20" + "%y-%m")                  # => 2022-10
```

文字列からTime型に変換する場合です。引数は、文字列でも整数型でもどちらでも使えます。
```test.rb
puts Time.local("2022","10")                            # => 2022-10-01 00:00:00 +0900
puts Time.local("2022","10","21")                       # => 2022-10-21 00:00:00 +0900
puts Time.local(2022,11)                                # => 2022-11-01 00:00:00 +0900
puts Time.local(2022,11,10)                             # => 2022-11-10 00:00:00 +0900
```


日付の大小比較をするときは、日付を整数型に置き換えて行うこともできますが、Time型のままで大小を行ってもOKです。
```test.rb
strymd = Time.local(2022,11,2)
endymd = Time.local(2022,11,1)
puts "strymdの方が大きい" if strymd > endymd            # => strymdの方が大きい
```

```test.rb
strymd = Time.local(2022,11,1)
endymd = Time.local(2022,11,1)
puts "同じ日付" if strymd == endymd                     # => 同じ日付
```

```test.rb
strymd = Time.local(2022,11,1)
endymd = Time.local(2022,11,2)
puts "endymdの方が大きい" if strymd < endymd            # => endymdの方が大きい
```

１桁の月日を先頭０埋めにする場合です。Time型に変換してから、month、dayメソッドで取得すると、先頭０埋めがされない形で取得されるため、注意が必要です。
```test.rb
y = 2022; m = 1; d = 3
puts y.to_s + format("%02d", m) + format("%02d", d)     # => 20220103
puts Time.local(y, m, d).strftime("%Y%m%d")             # => 20220103

ymd = Time.local(y, m, d)
puts ymd.year.to_s + ymd.month.to_s + ymd.day.to_s      # => 202213
```