OmniAICreator/Qiita-1.07M huggingface dataset:
Hansontableのdataをオブジェクトで取得したい


[Class: Core \- Handsontable Documentation](https://handsontable.com/docs/8.3.1/Core.html#getData)

getData()で二次元配列として取得できるが、オブジェクトとして欲しいときはどうするのか？

どうやらそういうメソッドは無いっぽい

[How to get the data object in the handsontable, not a two\-dimensional array \- Getting help / Questions \- Handsontable Forum](https://forum.handsontable.com/t/how-to-get-the-data-object-in-the-handsontable-not-a-two-dimensional-array/3612)

```js

  var visualObjectRow = function(row) {
      var obj = {};
      for (var i = 0; i < hot.countCols(); i++) {
        obj[hot.colToProp(i)] = hot.getDataAtCell(row, i);
      }
      return obj
    }
```
進捗

疑問点以外にも取り組みを残しておこうと思います。

1■HTML&CSS 3/11,12
-
apacheを使ってみようということで、色々と考えてみたところそもそもWEBサイトを作らなければいけないことに気づき、Progateと模写を開始。
学生時代に一時やる気が出て、上級までやったことはあったのでprogate自体に苦労はなかったです。
しかし、progateを終えて実際に模写を初めてみると中々苦戦しました。
具体的にはatomをインストールしてから、ヘッダーが模写できるまで5時間はかかりました。
このままHTMLにこだわると本来の目的(apaceの利用)からずれそうだったので、一旦そこで学習を終了しました。
隙間時間で学習は続けますが、今後はapacheに入れ込むためのとても簡単なサイトをまず作ろうと思います。

2■ネットワークスペシャリスト 3/13
-
業務との兼ね合いもあり、手は動かさないですがネットワークとセキュリティの理解を求められることが多いので、ネットワークスペシャリストの受験を春に予定しています。
ので、ネットワークスペシャリストの過去問を解いてみました。
結果は26年度6割前後　30年度後(午後1のみ)3割
かなりまずいです。
先月の頭にやったときは、出来ていたので調子に乗って他の学習に時間を割きすぎた感が否めないです。今日からもう少しネットワークの勉強時間を増やしていこうかなと思います。
資格勉強は終盤の詰めが嫌いです。

3■AWS 3/13
-
AWSの学習を本格的に開始しました。
これには背景があります。
具体的には、ネットワークの実務的な能力向上のためciscoのルーターをある時期から触っていたんですが、自宅のネットワーク環境の影響からルータをデフォルトゲートウェイにできず学習がとん挫していました。せっかく勉強したので、活かしたく思いAWSの勉強をすることにしました。
今後は以前少し読んだ「AWS認定ソリューションアーキテクト」と「AWSで始めるインフラ構築入門」を手に頑張ります。
Raspberry PiにSoftetherVPNをインストール

<h2>はじめに</h2>
Raspberry PI 4を買ったので、こいつをVPNのサーバーにする。
消費電力が少なく鯖メンテをしても切り分けできる。

以下の環境が構築済みとします。

+ Raspberry Pi OS Lite
+ OpneMediaVault 5.x

<h6>SSHクライアント</h6>

+ Tera Termとか

※実機にキーボードさして作業しても可

<h2>Softetherインストール方法


以下のコマンドを実行

 ```

$ sudo apt install git libssl-dev libreadline-dev -y
$ cd /usr/local/src
$ sudo git clone https://github.com/SoftEtherVPN/SoftEtherVPN_Stable
$ cd SoftEtherVPN_Stable/
$ sudo ./configure
 ```
 ```
$ sudo vi Makefile
 ```
vimでMakefile開いて下記を上書き

 ```
INSTALL_BINDIR=/usr/local/bin/
INSTALL_VPNSERVER_DIR=/usr/local/vpn/vpnserver/
INSTALL_VPNBRIDGE_DIR=/usr/local/vpn/vpnbridge/
INSTALL_VPNCLIENT_DIR=/usr/local/vpn/vpnclient/
INSTALL_VPNCMD_DIR=/usr/local/vpn/vpncmd/
 ```
「:wq」で上書きしてVimを閉じる。
下記を実行してインストールする。

 ```
$ sudo make
$ sudo make install
$ sudo vpnserver start
$ sudo vpnserver stop
 ```

ここまででとりあえずの起動完了
※stopで終了

このままだと自動起動しないので以下の設定を行い、デーモン化する。

 ```
$ sudo vi /etc/init.d/vpnserver
 ```
Vim開いて下記を記入し、「:wq」で上書き保存する。

 ```
#!/bin/sh
### BEGIN INIT INFO
# Provides:                 vpnserver
# Required-Start:           $local_fs $network
# Required-Stop:            $local_fs $network
# Default-Start:            2 3 4 5
# Default-Stop:             0 1 6
# Short-Description:        SoftEther VPN Server
# Description:              Start vpnserver daemon SoftEther VPN Server
### END INIT INFO

DAEMON=/usr/local/vpn/vpnserver/vpnserver
LOCK=/var/lock/vpnserver

. /lib/lsb/init-functions
test -x $DAEMON || exit 0

case "$1" in
start)
sleep 3
log_daemon_msg "Starting SoftEther VPN Server" "vpnserver"
$DAEMON start >/dev/null 2>&1
touch $LOCK
log_end_msg 0
sleep 3
tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'`
/sbin/brctl addif br0 tap_se0
;;

stop)
log_daemon_msg "Stopping SoftEther VPN Server" "vpnserver"
$DAEMON stop >/dev/null 2>&1
rm $LOCK
log_end_msg 0
sleep 2
;;

restart)
$DAEMON stop
sleep 2

$DAEMON start
sleep 5
tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'`
/sbin/brctl addif br0 tap_se0
;;

status)
    if [ -e $LOCK ]
    then
        echo "vpnserver is running."
    else
        echo "vpnserver is not running."
    fi
;;
*)

echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0
 ```

デーモン登録して完了。

 ```
$ sudo chmod +x /etc/init.d/vpnserver
$ sudo update-rc.d vpnserver defaults
$ sudo systemctl daemon-reload
$ sudo vpnserver stop
$ sudo service vpnserver start
 ```

VPNサーバーの設定は、WindowsなどのSoftetherVPNサーバーマネージャー（GUI）でやった方が
圧倒的に楽なのでそちらを使用。



<h6>参考記事（引用元）</h6>
https://www.labohyt.net/blog/server/post-5154/
[andlabs / ui] Windows GUI examples

GoでWindowsなGUIを作れるものを見つけたので、
exampleを動かして確認してみます。

今回紹介するのは、andlabs/ui です。

https://github.com/andlabs/ui

この記事を書いている時点では、
まだ安定版ではなさそうなので使用される場合はご注意を。

GoでWindowsなGUIを作成したいときは、
すこし安定している walk をオススメします。

https://qiita.com/hiro_nico/items/08af4c01394527836fff

## examples

サンプルとなるコードは、以下のURLにあります。
https://github.com/andlabs/ui/tree/master/examples

* Control Gallery
    * テキストボックス・ボタン・ダイアログ・スライダー など
* Draw Text
    * 様々なテキストの表示方法
* Histogram
    * 折れ線グラフ
* Table
    * 表（行内に画像・ボタン・プログレスバーがある）
* UpdateUI
    * UIを更新するサンプル？

では順番に見てみましょう。

### Control Gallery

controlgallery.go
https://github.com/andlabs/ui/blob/master/examples/controlgallery.go

ボタン・チェックボックス・ラベル・テキストボックス など

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238600/3ade2c87-3c5a-44e1-32a6-ecb88e8c63d0.png)

スライダーをグリグリすると、プログレスバーが連動して動きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238600/32dfe65d-91c5-4f70-a895-1dde32f2d9d7.png)

Dateピッカーやファイルパスの指定（読み込み先・保存先）・ダイアログ など

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238600/9ee5ef05-9f16-cf0e-358f-e8a21100b51b.png)

### Draw Text

drawtext.go
https://github.com/andlabs/ui/blob/master/examples/drawtext.go

フォントの修飾・サイズ・位置・フォント変更 など
結構きめ細かに指定できます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238600/97286d26-0652-877a-26d3-56774a5680fb.png)

### Histogram

histogram.go
https://github.com/andlabs/ui/blob/master/examples/histogram.go

数値を変えると折れ線グラフが連動して動く！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238600/d75ce23e-d83d-08af-4925-38ff658b0e20.png)

### Table

table.go
https://github.com/andlabs/ui/blob/master/examples/table.go

行内でいろいろカスタムができるみたいですね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238600/daac0493-ff74-ed6b-289f-4baa2eb4d059.png)


### UpdateUI

動かなかった、、、

## まとめ

動かしてみた感じ、ちょっと気になるとこがありましたがそれなりには使えそう感。
あとビルド自体は少し遅めかなという印象(とはいえ数秒ですが)
コード自体はスッキリしていて書きやすい気がします。

気になる部品があったらソースコードを覗いて触ってみてくださいね～！
Linux　プロセス、ファイル管理　を勉強した。

##プロセスとは
Linuxでは実行中のプログラムを管理する単位をプロセスという。

###スケジューラとは
プロセスの実行順序を管理する
　
###ジョブ
シェルが管理するプログラムの単位

###バックグラウンドジョブ
同時に同じ端末から別のコマンドを実行する

###プロセスID
プロセスには一意のIDであるプロセスIDが存在する

###シグナル
プロセスを制御する機能
シグナルにはシグナル番号、シグナル名が割り当ている。

###topコマンド、pstreeコマンド
プロセスの状態を表示する

###プロセス間通信
複数のプロセスが連携し、一つの処理をする　
Linux上である処理を完了するのに、１つにプロセスでは完結しない場合が多々ある。

##ファイル管理
ファイルシステムの概念と管理操作を学習する。
###Linuxのファイル管理の必要知識
ファイル管理には
・ハードディスク
・ファイルシステム
・ディレクトリ構造の知識が必要

###パーティション
ハードディスクを区切った単位

###ファイルシステム
ファイル、ディレクトリの情報、保存場所を管理

###マウント
ファイル、ディレクトリの読み書き書き込みが可能となる
CD,DVD,USBにもマウントできる

###スワップ領域
メインメモリが不足しているときにメインメモリのかわりとして使用できる領域

###自動マウント
コンピュータ起動時に自動的にマウントできる

###iノード
ファイルやディレクトリに対し番号を振りけることができる。
その番号にはiノード領域という場所が確保されている。
メモリ不足になりやすい。

###リンク機能
ファイルをコピーしたり、移動させたりせず別のディレクトリであるように扱う
よく使うファイルをホームに置いてあるように扱うことができる。
種類
・ハードリンク
・シンボリックリング

###ハードディスクを管理するコマンド
fask　ファイルシステムをチェックし、修復する。
du　ファイル、ディレクトリが使っているディスク容量を調べる。



これを深く理解したい。
アウトプットをするようになって変わったこと5つ

#経緯
web系企業に転職して２週間が経ちました。
社員数10名程の会社なのですが、
一人一人の技術に対する向上心が高い。めっちゃ高い。

そうかー、だからみんな爆速で成長しているのか！！
...僕もQiitaに毎日アウトプットをはじめました。


5日しか経っていませんが、アウトプットしてみて既に感じたことがあるので
5項目に絞って素直に書き残しておこうと思います。

#アウトプットして感じたこと

①読者のことを思いやって書かないといけない
↓
②頭の中が整理されてその日の学習理解度UP
↓
③備忘録代わりとなる
↓
④自分の成長を感じることができる。
↓
⑤自分のオリジナルコンテンツとして残る

###①読者のことを思いやって書かないといけない

自分だけのメモとして書くなら暗号レベルで雑に書いてもいいんだけど、
こんな記事でも見てくれる人がいると思うと、
不器用なりに見やすくしてしまう。（他の記事が見にくかったらまじですまん）

基本的なことかもしれないけど、
どの人とコミュニケーションする上でもすごく大事なスキルなんじゃないかと思った。

###②頭の中が整理されてその日の学習理解度UP
教材とか見てインプットしただけだと、全ての内容が網羅できたかわからない。
アウトプットすると、やった内容を最初から思い出していく作業が発生。
→　自分がどこまでわかってるのか確認作業ができる。

###③備忘録代わりとなる
②で記憶を定着させたつもりでていても、
ふとした時に、「この前何やったっけ？」と忘れる。すでに僕はなった。
そのときに自分の投稿した記事を見直して解決できる。
自分の書いた物だから見ればすぐ思い出せる。

###④自分の成長を感じることができる。
過去５記事が形となってマイページに保存されているだけで
すでに成長を感じている。
これを１年、２年と続けていったら。。。
昔の自分と未来の自分の成長度合いが一目瞭然となるのは
間違いない。(頼むぞ自分)
ワクワクが止まらないっす。

###⑤自分のオリジナルコンテンツとして残る
今はまだまだだが、地道な継続でオリジナルコンテンツができる。
Qiitaの読者に読んで頂くのはもちろん、
人脈形成時に自己紹介として盛り込むのも有効じゃないかと思っている。


#終わりに
たぶん今の会社からきっかけを頂かなければアウトプットの凄さを実感できなかったと思う。
毎日アウトプットを継続するのはめちゃくちゃ大変だけど、少しずつ楽しいとも思えるようになった。
最高の環境に入社できたんだなと改めて実感させてもらっております。
少しでも早くスキルをつけ、戦力の一員になれるよう全力を尽くしていきたい。
【Ruby】クラス、メソッドの定義とインスタンス変数について



## はじめに

この記事は、Ruby/Railsの学習期間約１ヶ月の著者が書いたものです。
初投稿となりますので、誤った解釈があるかもしれません。その場合は、コメント等頂けますと幸いですm(_ _)m

今回は、Ruby学習中によく分からなくなりがちな、クラス、メソッドの定義、インスタンス変数について説明します。


## 独自のクラスを定義する

まず、Rubyではクラスを定義します。
クラスとは、設計図のようなもので、`class`から始まり、`end`で終わります。

クラス名は、`ClassName`というように、単語の先頭を大文字で定義します。
ラクダのコブのようであることから、`CamelCase`と表現します。

```ruby:class.rb

#クラスの定義
class ClassName
end
```


## クラスにメソッドを定義する

クラスの設計図の中にメソッドを定義することで、そのクラス独自が持っているメソッドとして認識されます。

メソッドとは、何らかの処理を示しており、処理内容を`def`と`end`で囲みます。
メソッド名は、`method_name`のように２単語目以降は、アンダーバーで示しますので注意しましょう。
（このことを蛇に例えて、`snake_case`と呼びます。）


```ruby:method.rb

#メソッドの定義
class ClassName
  def method_name
  # メソッドの処理を書く
  end
end

#クラスのインスタンスを作成し、メソッドで呼び出す
instance = ClassName.new
instance.method_name
```

Rubyのオブジェクトは何らかのメソッドを持っていて、そのメソッドを定義することで、処理を返してくれるようになります。


## ローカル変数とインスタンス変数について

次に、ローカル変数とインスタンス変数の違いを見てみましょう。

###ローカル変数

ローカル変数は、使い回しできる範囲が他の変数よりも限られています。
例えば、メソッド内で定義した場合は、そのメソッド内でしか使えず、同じクラス内であっても使い回しができません。

試しに、以下のローカル変数`message`を、`say_morning`のメソッドの処理として定義し、
`say_good_morning`のメソッド内で使い回してみましょう。


```ruby:local_variable.rb
class Greeting
  def say_morning
    message = "morning!"
    puts message
  end

  def say_good_morning
    puts "Good #{message}"
  end
end

instance = Greeting.new
instance.say_morning
instance.say_good_morning
```

以下のようなエラーが出てしまいました。

```
`say_good_morning': undefined local variable or method `message' for #<Greeting:0x00007fe5b1984038> (NameError)
```
つまり、`say_good_morning`のメソッドの中で、`message`というローカル変数やメソッドは定義されてませんよ、と言っているわけです。
このように、ローカル変数は、あるメソッド内で定義した変数は、他のメソッド内で使い回すことができません。

###インスタンス変数

一方、インスタンス変数とは、同じオブジェクト内（同クラス内）で使い回せる変数のことをいいます。
変数の先頭に@をつけて定義します。

先程のローカル変数`message`を、インスタンス変数`@message`に置き換えて見てみましょう。

```ruby:instance_variable.rb
class Greeting
  def say_morning
    @message = "morning!"
    puts @message
  end

  def say_good_morning
    puts "Good #{@message}"
  end
end

instance = Greeting.new
instance.say_morning
instance.say_good_morning
```

結果は以下の通り。

```
morning!
Good morning!
```

欲しい結果が出ましたね！
つまり、インスタンス変数とは、同じクラス内であれば、異なるメソッド内であっても何度でも使い回せる変数である、ということが証明されました。


##おわりに

今回はRubyの基本であるクラス、メソッドの定義とローカル変数とインスタンス変数の違いについて、説明しました。
今後も、Ruby/Railsを学習する上で、皆様に有益な情報を発信できればと思いますので、良ければLGTMお願いします。

##参考記事

[ローカル変数・インスタンス変数・クラス変数の違い(Ruby)](https://qiita.com/mary_new_programmer/items/4c4353c3d1df7242f515)
【Unity】スマホアプリでカメラロールへの保存・SNSにシェアができるアセット NatShareのメモ

#はじめに
**【Unity】簡単にビデオ録画ができるアセット NatCorderのメモ**という記事の続きになります。
https://qiita.com/Formi/items/4b1ea2c53e25033436ea

スマホアプリ内で作成した画像や動画ファイルをカメラロールへ保存・SNSへシェアしたかったので利用しました。
NatCorderと違い無料のAssetになのがありがたいですね！

#NatShare
> NatShare は、軽量で使いやすい Unity Engine 用のソーシャル共有 API です。NatShare を使用すると、わずか 3 つのステップでクロスプラットフォームのテキスト、画像、メディアの共有が可能になります。

**公式API**
https://docs.natsuite.io/natshare/
![スクリーンショット 2021-03-07 23.41.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293639/3279e0ff-77b6-b581-3632-4d5877ae5f32.png)

こちらからインポートできます。
https://assetstore.unity.com/packages/tools/integration/natshare-mobile-sharing-api-117705

##Share方法
###SharePayloadクラス
SharePayloadクラスを生成します。
名前の通りこのオブジェクトを使ってシェアをすることになります。

```C#
var sharePayload = new SharePayload();
```

####SharePayload.AddText
シェアするときに利用するテキストを設定する関数です。
引数にはstring型で渡してあげます。

```C#
sharePayload.AddText(stringText);
```

####SharePayload.AddMedia
シェアしたい「音声・画像・ビデオ」ファイルを設定する関数です。
引数にはstring型でpathを渡してあげます。

```C#
sharePayload.AddMedia(mediaPath);
```

####SharePayload.AddImage
シェアしたい「画像」ファイルを設定する関数です。
引数にはTexture2D型で直接ファイルを指定します。(NatCorderと合わせて使う場合はpathが吐き出されるのでAddMediaでいい気がします)

```C#
sharePayload.AddMedia(mediaPath);
```

####SharePayload.Commit
上記関数で設定した情報をもとにShereをします。
プラットフォーム判別はいい感じにやってくれるので気にしなくても良いです。

```C#
sharePayload.Commit();
```

##カメラロールへの保存方法
###SavePayloadクラス
SharePayloadクラスを生成します。
オブジェクト生成時に保存するフォルダー名を指定します。
用意されている関数がSherePayLoadと同じなので簡単に使えます！

```C#
var savePayload = new SavePayload(FOLDER_NAME);
```

####SavePayload.AddMedia
シェアしたい「音声・画像・ビデオ」ファイルを設定する関数です。
引数にはstring型でpathを渡してあげます。

```C#
savePayload.AddMedia(mediaPath);
```

####SavePayload.AddImage
シェアしたい「画像」ファイルを設定する関数です。
引数にはTexture2D型で直接ファイルを指定します。

```C#
savePayload.AddMedia(mediaPath);
```

####SavePayload.Commit
上記関数で設定した情報をもとにカメラロールでフォルダの作成・保存をします。
プラットフォーム判別はこいつがいい感じにやってくれるので気にしなくても良いです。

```C#
savePayload.Commit();
```

##使い方
使いたいクラスのオブジェクトにAddしてCommitするだけで使えます。
Commit関数はTaskになっていて成功したかどうかをreturnしてくれるので、ちゃんと使いたい方は公式APIをのぞいてみてください。

#まとめ
NatCorderと合わせて使うことでMediaを扱う幅がグッと広がりました！
APIもしっかり用意されていて神Assetだと思います。
CentOS7/AmazonLinux2にPostfix3系をインストールする

CentOS7/AmazonLinux2にPostfix3系をインストールするときの手順です。
どちらのOSも同じ手順です。


デフォルトでは2系がインストールされています。

```
[root@amzn2 ~]# yum info postfix
Loaded plugins: dkms-build-requires, langpacks, priorities, update-motd
Installed Packages
Name        : postfix
Arch        : x86_64
Epoch       : 2
Version     : 2.10.1
Release     : 6.amzn2.0.3
Size        : 12 M
Repo        : installed
Summary     : Postfix Mail Transport Agent
URL         : http://www.postfix.org
License     : IBM and GPLv2+
Description : Postfix is a Mail Transport Agent (MTA), supporting LDAP, SMTP AUTH
            : (SASL), TLS
```

## 既存のpostfixをアンインストール

```
[root@amzn2 ~]# systemctl stop postfix.service
[root@amzn2 ~]# yum remove postfix
```

## GhettoForgeリポジトリの追加
```
[root@amzn2 ~]# yum install http://mirror.ghettoforge.org/distributions/gf/gf-release-latest.gf.el7.noarch.rpm
```

## GhettoForgeリポジトリの無効化

```
/etc/yum.repos.d/gf.repo

enabled=1
↓
enabled=0
```

## インストールされるバージョンを確認
```
[root@amzn2 ~]# yum --enablerepo=gf-plus info postfix3
Loaded plugins: dkms-build-requires, langpacks, priorities, update-motd
gf-plus                                                   | 2.9 kB  00:00:00     
gf-plus/x86_64/primary_db                                 | 104 kB  00:00:01     
65 packages excluded due to repository priority protections
Available Packages
Name        : postfix3
Arch        : x86_64
Epoch       : 2
Version     : 3.5.8
Release     : 1.gf.el7
Size        : 3.1 M
Repo        : gf-plus/x86_64
Summary     : Postfix Mail Transport Agent
URL         : http://www.postfix.org
License     : IBM
Description : Postfix is a Mail Transport Agent (MTA), supporting LDAP, SMTP AUTH
            : (SASL), TLS
```

## インストール
```
[root@amzn2 ~]# yum --enablerepo=gf-plus install postfix3

[root@amzn2 ~]# postconf | grep mail_version
mail_version = 3.5.8
```
【学習メモ】AWS　CloudFront

CloudFront:
AWSが提供するCDN（Content　Delivery Network）サービス

#CDSとは
CDNはWEBコンテンツ配信処理を高速化するためのサービス。
スタバを例としてあげると、
例）A市にスタバのお店が設置されていない、A市市民がスタバコーヒーを飲みたい時、
スタバのあるB市に行かないと飲めない。B市への往復時間は3時間。
もしA市にスタバを設置したら、そのB市への往復時間を省ける。

CDNの話に戻ると、CDNはbranch officeみたいな役割で、CDNがあれば、
ユーザーがウェブにアクセスする際に、距離が一番近いノードにアクセスして、そのアクセスの時間を短縮可能。

CDSのメリット：
・異なる地域にアクセスする際、遅延時間が短くなる。
・requestはCDNノードで完了。オリジンサーバーの負荷軽減。

#CloudFront
大規模なアクセスも世界中にあるエッジのキャパシティを活用して効率的かつ高速にコンテツ配信が可能なサービス。

・210以上のエッジロケーションがあるため、多数のエッジサーバーが用意される。それによって、全世界に高性能、高いパフォーマンスで配信可能。
・AWSWAF／AWS Certificate Managerとの連携やDDoS対策によるセキュリティ機能。
・オリジンに対してHeader／Cookie／QueryStringsによるフォワード指定で、静的なページだけでなく、動的なページ配信が可能。

現在のアーキテクチャはリージョナルエッジキャッシュが追加されより効率的な配信処理が可能になった。

##Distribution設定
CloudFrontの設定において、まずはDistribution設定。

・各配信先となるドメインに割り当てるCloudFrontを設定する。
・WEB DistributionとRTMP Distribution、この二つの形式を選べる。
・使用量が最大40Gbps／10万RPS超は上限緩和申請を実施する。
・独自ドメインを指定可能。

各種設定：
・コンテンツオリジン設定：CloudFrontの配信ファイルの取得先の設定
・アクセス設定：ファイルアクセスの許可設定
・セキュリティ設定：アクセスにHTTPSを利用するかどうかの設定
・Cookie またはクエリ文字列転送の設定：オリジンへのCookie／クエリ文字列転送の要否を設定
・地域制限：特定の国のユーザーからのアクセス拒否設定
・アクセスログ設定：アクセスログを作成するかどうかの設定

※通常はWEBディストリビューションを利用するが、
Adobeメディアの場合：RTMPディストリビューションを利用する。

##セキュリティー機能
CloudFrontは様々なセキュリティー設定によって、セキュアなコンテンツ配信が可能になる。

・SSL証明書の設定：コンテンツ配信のHTTPSに対応してり、配信時の暗号化通信が可能。

・オリジンカスタムヘッダーによる通信制御。
（リクエストユーザーを識別可能。）

・AWS　WAFによるファイアーウォールと連携し、
　ディストリビューションに対するウェブリクエストを許可、ブロックが可能。

・AWS　ShieldによるDDoS対応。
　CLoudFrontを利用すると、DDoS対応のスタンダード版が自動で設定される。

・署名付きURL/Cookieによる有効期間指定。

・GEOリストリクションによる地域情報でアクセス判定。
【Rails】Cloud9で送信メールのプレビュー時の自分のホスト名と指定のURLの指定方法【Railsチュートリアル11章】

<h2>自分がつまづいた時の状況</h2>
<a href"https://railstutorial.jp/chapters/account_activation?version=6.0#code-generated_application_mailer">Railsチュートリアル第11章アカウントの有効化</a>でHTMLメールとテキストメールのプレビューをする際に、アプリケーションのdevelopment環境の設定ファイルの設定と、Railsサーバー起動時のURLが分からず、送信メールのプレビューが表示できませんでした。

・クラウドIDE:AWS Cloud9
・Rails:v6.0.3
・OS:Win


```config/environments/development.rb
Rails.application.configure do
  .
  .
  .
  config.action_mailer.raise_delivery_errors = false

  host = 'example.com' # ここの指定方法が分からなかった(自分のホスト名を指定する)
  config.action_mailer.default_url_options = { host: host, protocol: 'https' }
  .
  .
  .
end
```

<h2>自分のホスト名の調べ方</h2>
まず、<b>自分のホスト名</B>を調べる方法ですが、
Cloud9のPreview PreviewRunning Applicationを押下し、アドレスバーがついているpreviewタブを表示させます。
その後、そのアドレスバーに表示されているlocalhost以下の文字列が自分のアドレスになります。

その自分のホスト名の中でも<b>https</b>から<b>.vsf</b>の間の文字列を先ほどのdevelop環境の設定ファイルに反映します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/927880/aef5366f-9d7d-d22a-e522-28d707c2f6cb.png)

```config/environments/development.rb
config.action_mailer.raise_delivery_errors = false
  
  host = 'hoge.vfs.cloud9.us-east-2.amazonaws.com'     # クラウドIDE
  config.action_mailer.default_url_options = { host: host, protocol: 'https' }
```

設定ファイルを変更したら、Railsサーバーは再起動してください。

<h2>送信メールのプレビューのURL</h2>
URLですが、下記でプレビューが表示されました。
ホストの後ろに<b>「/rails/mailers/user_mailer」</b>とつけるだけでした。

```
https://hogehoge.vfs.cloud9.ap-northeast-1.amazonaws.com/rails/mailers/user_mailer
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/927880/28895f60-0417-7c79-f9a9-a387cf515613.png)


<h2>参考</h2>
<a href"https://railstutorial.jp/chapters/account_activation?version=6.0#code-generated_application_mailer">Railsチュートリアル第11章アカウントの有効化</a>
<a href="https://teratail.com/questions/169742">rails tutorial にて　送信メールのプレビューができない</a>
<a href="https://teratail.com/questions/125713">rails チュートリアルの１１章の２・２にてクラウドIDEのホスト名がわからない</a>
リザーブドインスタンスの種類について(スタンダード・コンバーティブル)

## 勉強前イメージ

リザーブドインスタンスはわかるけど、
種類があるのん・・？

## 調査

### まずリザーブドインスタンスとは？

リザーブドインスタンスとは
1年・3年単位で購入するインスタンスのことで、時間単価の割引が行われます。
ものによっては前払いが必要なこともあります。

詳細は [こちら](https://qiita.com/miyuki_samitani/items/b257f9337600ec7ff515) をご確認ください。

### 種類について

種類がどこで見れるかというと、
リザーブドインスタンスの購入の画面で以下のようにどのようなインスタンスを購入するか選ぶ画面で確認することが出来ます。

![提供クラスEC2 Management Console - Google Chrome 2021-03-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/1397698c-426d-ec46-2887-5dd39d7b12b5.png)


画像にある通り、種類には `スタンダード` と `コンバーティブル` の2種類あります。

### 種類を詳細に

#### スタンダード

- 平均割引率 : 1年(40%) 3年(60%)
- 交換 : 交換は出来ません
- マーケットプレイスでの販売・購入 : 販売・購入できます

#### コンバーティブル

- 平均割引率 : 1年(31%) 3年(54%)
- 交換 : 期間内であれば、インスタンスファミリー・インスタンスタイプ・プラットフォームなど違う属性の別のリザーブドインスタンスに交換することができます
- マーケットプレイスでの販売 : 販売・購入できません

#### まとめ

`スタンダード` と `コンバーティブル` の違いとしては、

- スタンダード : 割引率は高いが、インスタンスタイプなど違ったときに交換してもらえない。ただし、マーケットプレイスで販売・購入出来る
- コンバーティブル : 割引率は低いが、インスタンスタイプなど違ったときに交換してもらえる。

必ずこのインスタンスタイプ・インスタンスファミリー使うんだ！ってときはスタンダード使えばより安くなるが、
もしかしたら変更あり得るかも・・・ってときはコンバーティブルを使えば万が一のときは交換してもらえる。
スタンダードは、マーケットプレイスで販売・購入出来るらしいけど、めんどくさそうな気がする。

## 勉強後イメージ

リザーブドインスタンスにもいろいろ種類があるのね・・・・
選択肢がどんどん広がって便利になる分、選ぶの大変そうだなぁ

## 参考

- [リザーブドインスタンス のタイプ (提供しているクラス)](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/reserved-instances-types.html)
- [Amazon EC2 リザーブドインスタンス](https://aws.amazon.com/jp/ec2/pricing/reserved-instances/)
【SwiftUI】Listを横方向にスクロールさせる

SwiftUIのListで、Listを横方向（水平方向）にスクロールさせるコードの紹介です。

![sample1](https://user-images.githubusercontent.com/5576470/111033354-31a5c980-8454-11eb-9cc1-9edbf90adb27.gif)

「```SwiftUI List Horizontal```」等で検索すると

```swift
ScrollView (.horizontal) {
     HStack {
         ...
     }
}
```

のような```ScrollView```を使用したものが多くヒットしますが、この場合は巨大なデータの場合に問題が出ます（Rowのデータが最初に全て作成されてしまうためです）。
そこで```List```を```rotationEffect```で90度回転させて横スクロールを実現します。

# 環境

- Swift: 5.3.2
- Xcode: 12.4 (12D4e)
- macOS: Big Sur 11.1 (20C69)

# コード

```swift:ContentView.swift
import SwiftUI

struct ContentView: View {
	var body: some View {
		VStack {
			ItemList(items: (0..<100).map { ItemData(index: $0) })
				.frame(height: 100)
			ItemList(items: (500..<600).map { ItemData(index: $0) })
			ItemList(items: (1000..<1100).map { ItemData(index: $0) })
		}
	}
}

struct ItemData {
	var index = 0
	var check = false
}

struct ItemList: View {
	@State var items: [ItemData]

	var body: some View {
		GeometryReader { geo in
			List(0..<items.count) { i in
				ItemRow(item: $items[i])
					.frame(height: 100)
					.contentShape(Rectangle())
			}
			.frame(width: geo.size.height, height: geo.size.width)
			.rotationEffect(.degrees(-90), anchor: .bottomLeading)
			.transformEffect(.init(translationX: geo.size.width, y: 0))
			.scaleEffect(x: 1, y: -1)
		}
	}
}

struct ItemRow: View {
	@Binding var item: ItemData

	var body: some View {
		GeometryReader { geo in
			ZStack {
				Color.blue.opacity(item.check ? 0.5 : 0.3)
					.cornerRadius(8)
				Text("\(item.index)")
			}
			.frame(width: geo.size.height, height: geo.size.width)
			.rotationEffect(.degrees(90), anchor: .topTrailing)
			.transformEffect(.init(translationX: 0, y: geo.size.height))
			.scaleEffect(x: -1, y: 1)
			.onTapGesture {
				item.check.toggle()
			}
		}
	}
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
```

# リポジトリ

https://github.com/sugiharam2-samples/SwiftUIList02

# 問題点
- 文字数によるRowの幅の自動設定がうまくできない
NetlifyのReactアプリのデプロイが恐ろしく簡単だった。。

個人で開発したアプリ（大したモノではないです）をサーバーにあげる必要があり、普段毎日コードは書いてますが、デプロイとなると、、3年前プログラミング勉強してた時にNuxtで作ったアプリをFirebaseでデプロイした以来で、（しかも結構ややこしかった）何か簡単にできる方法はないかと探した結果Netlifyが簡単そうだったので、使ってみることにした。

で、結果は拍子抜けするほど簡単でした。。

自分で何かアプリとかを作ってるけど、デプロイの仕方がわからない方はぜひ参考にしてほしい。

参考にした記事
https://crieit.net/posts/React-Netlify

必要な事前作業はたったの２つだけ
・Githubに作ったアプリを上げておく
・Netlifyに会員登録 https://www.netlify.com/

アプリはReact, VueなんでもOKだと思います。自分はReactです。

1. まずNetlifyのマイページ右上に「New site from Git」をクリック
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/b70b4642-3ffa-b865-72be-6cb22458e9ed.png)

2. 次にGitのProviderを選びます。自分はGitHubでした。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/101d2e78-9b55-6304-d179-465fca92c865.png)

3. Netlifyと接続OKかの認証なので、「Authorize Netlify」で許可します
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/f4f2668d-ddd6-7c70-114c-7300b7c9c768.png)

4. 次はレポジトリを選ぶのですが、通常はここにレポジトリが出るらしいのですが、新規アカウントだとそうならない仕様みたいで、「Configure Netlify on GitHub」をクリックします
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/f28caf23-5982-1168-e6e7-426a6a6096d6.png)

5. するとこんな画面が開きますので、デプロイしたいレポジトリを選択しましょう。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/016885c0-571d-e8e2-577e-9fe6258017fe.png)

6. 最後は内容を確認し、スクショ撮り忘れましたが、、下の方に確定ボタンがあったはずです。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/a23ee809-d3a2-1821-8d39-521fc85fc4a8.png)

7. するとこんな画面になります。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/05e457d2-6ad4-30b6-1096-d4a7c09c5149.png)

8. 完了するとURLが表示されます。これで終わりでURLを開くとばっちりデプロイされてます！
![スクリーンショット 2021-03-13 22.28.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/adc7652d-b093-3c10-423f-7e6296085bdb.png)

以上です。Firebaseの時はもっとややこしかった気がしますが、Netlifyは超絶簡単です。

さらに、ただデプロイするだけではなく、GitHubのレポジトリとNetlifyが接続したので、今後レポジトリに変更が加わると自動でデプロイし直してくれる優れものです。

私の場合は、エラーが出て修正コミットを上げたのですが、自動で再ビルドがかかり無事にデプロイされました。

このNetlify、独自ドメインを使ったり、それ以外にも使い方が色々あるっぽいのでまた何か学びがあったら記事にします。
ラズパイのOSを「Raspberry Pi Imager」で簡単インストール

## 本記事の内容
- Windows 10 PCに「Raspberry Pi Imager」をインストール。
- ラズパイのOSを、microSDカードに簡単に書き込む。
- 例としてUbuntu Server 20.04.2 LTS 64bitをインストール。

## 前提条件
- Windows 10 PC（本記事はバージョン 20H2で作成）
- microSDカード（以後SDカード）およびカードリーダー

※macOSやUbuntu版もあるが動作未確認。

## 作業手順
### 1. Raspberry Pi Imager のダウンロードとインストール
下記サイトより、[Download for Windows]を選択してインストーラーをダウンロード後に実行。（本記事作成時点でのファイル名は imager_1.5.exe）
[Raspberry Pi OS – Raspberry Pi](https://www.raspberrypi.org/software/)

設定は変更せず、インストールを進める。

完了後、Raspberry Pi Imagerが起動する。
詳細は後述するが、下記画面からOSとSDカードを選択してWRITEを押すだけで、ラズパイ用のOSが書き込まれる。

<img width="80%" alt="raspberry-pi-imager-01-001.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1010477/9ce609bc-deb5-47f1-6a7e-98fd47f5e4b2.png">

### 2. OSの選択
[CHOOSE OS]より、SDカードに書き込むOSを選択する。
例えば、UbuntuのLTS（長期サポート版）をインストールする場合は、下記を選択する。
[Other general purpose OS] > [Ubuntu] > [Ubuntu Server 20.04.2 LTS (RPi 3/4/400)] 64-bit

※最新版の20.10は、サポートが2021年7月までと短い。20.04 LTSは2025年4月まで。
※`(RPi 3/4/400)`のように、対応するラズパイが記載されている。64bit版はラズパイ2には未対応。

### 3. SDカードの選択
SDカードを接続後、[CHOOSE SD CARD]より選択する。

### 4. 書き込み開始
[WRITE]を選択。
SDカード内のデータは全て削除されるため、問題なければ[YES]を選択。

### 5. 書き込み完了
しばらく待ち、書き込みが完了すると[Write Successful]のダイアログが表示される。
SDカードを取り外し、[CONTINUE]を選択。
Notionで＠を使ったショートカット

#はじめに
ショートカットの`@`も便利な機能がいくつかあったので、紹介します。

##`@`を使ってできること

1. リマインダーを設定できます
2. 他の人にメンションをつけることができます
3. ページのリンクを作成することができます

全てに共通することですが、
ブロックの初めでも、
ブロックの途中でも、`@`の前に半角スペースや全角スペースを入れることで、
上記の機能を使うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/741816/7d78320a-0eb5-489a-bdd1-696b02bc0fa5.png)


###リマインダーを設定

詳しくは、こちらの記事から↓
[使ってる？Notionのリマインダー機能！
](https://qiita.com/TerToEer_sho/items/22665f0ebe2a4557b807)

###他の人にメンション

すみません、一人で使っているので、便利さがわかりません。

###ページのリンクを作成

これは、便利です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/741816/bc1136b7-ec9f-ba2a-d84c-0c36914ca418.png)

参照ページを貼ることで、探す手間を減らすことができそうです。
文の途中にも挿入することができます。
UbuntuでAndroidのミラーリングをする

## 環境

- Ubuntu20.4(PC)
- Android11(スマホ)

## スマホの開発者モードを有効化する

[公式ドキュメント](https://developer.android.com/studio/debug/dev-options?hl=JA#enable)にそのものズバリの手順が載っている。

## 画面をミラーリングする

- [scrcpy](https://github.com/Genymobile/scrcpy)

1. USBでPCとスマホを有線接続
2. ターミナルで`scrcpy`を実行(ここはエラーが出る)
3. スマホ側に、デバッグ許可の確認が出るので、許可する
4. 再度、`scrcpy`を実行

## 音声をミラーリングする(Android10以上限定)

- [sndcpy](https://github.com/rom1v/sndcpy)

### 準備

1. [GitHub](https://github.com/rom1v/sndcpy#get-the-app)のリンクから、[sndcpy-v1.0.zip](https://github.com/rom1v/sndcpy/releases/download/v1.0/sndcpy-v1.0.zip)をダウンロードする
2. `sndcpy-v1.0.zip`を解凍する

### 実行


1. ターミナルで、`cd "sndcpy-v1.0.zipを解凍したディレクトリ"`を実行する
2. USBでPCとスマホを有線接続
3. ターミナルで`sndcpy`を実行
4. スマホに、ミラーリング許可の確認が出るので、許可する
5. ターミナルで`Enter`を押す

### おまけ

`sndcpy`の実行で毎回カレントを移動するのは面倒なので、`.bash_rc`などでパスを設定しておく
(普通は`.bash_profile`だが、GUIだと読み込まれない？)

- 環境変数`PAHT`に`sndcpy`があるパスを追加する

```sh:.bash_rcなど
export PATH=sndcpy-v1.0.zipを解凍したディレクトリ:$PATH
```

- `sndcpy.apk`へのパスを、環境変数`SNDCPY_APK`に設定する

```sh:.bash_rcなど
export SNDCPY_APK=sndcpy-v1.0.zipを解凍したディレクトリ/sndcpy.apk
```

## wifiで接続する

### 準備

- adbをインストール

```sh
sudo apt install adb
```

- USBでスマホとPCを有線接続する
- スマホの接続モードをTCP/IPに切り替える

```sh
adb tcpip 5555
``` 

- USB接続を解除する
- スマホのIPアドレスを指定して接続する(IPアドレスは設定アプリ内の検索で`ip`とかで検索すれば確認できる)

```sh
adb connect スマホのipアドレス:5555
```


## 参考にしたサイト

- [Androidの開発者オプション表示](https://developer.android.com/studio/debug/dev-options?hl=JA)
- [sndcpy - GitHub](https://github.com/rom1v/sndcpy)
- [sndcpyの利用手順](https://www.linuxuprising.com/2020/06/sndcpy-forwards-audio-from-android-10.html)
- [scrcpyのwifi接続](https://www.genymotion.com/blog/open-source-project-scrcpy-now-works-wirelessly/)
Unity でプラットフォーム依存コンパイル内がグレーアウトされるときの対処法

## 何があったか

Unity で Build Settings を「Universal Windows Platform」にした状態で、
スクリプトファイルで「#if WINDOWS_UWP」を使用して下記のコードを書いたが、
「#if WINDOWS_UWP」内がグレーアウトされてしまいました。
このため、オートコンプリートが一切機能しない！
結構実装がつらい状態でした。

```csharp
#if WINDOWS_UWP
using Windows.Storage; // この行がグレーアウト
#endif
```

この状態を可決する方法がわかりましたので、
自分の備忘録として残しておきます。

## 環境
- Unity 2019.4.20f1
- Visual Studio 2019 Version 16.8.5

## 対処法
1. Unity で [Edit] > [Preferences] を開く
2. [External Tools] を開く
3. [External Script Editor] が Visual Studio であることを確認
4. [Player projects] にチェックを入れる
    ![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460904/02c71c78-f9a5-db00-eb27-17e38dd46d1e.png)

5. [Regenerate project files] を選択
    ![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460904/fa069687-3974-bb71-0c7d-7baa4e583dd7.png)

6. スクリプトを開く
7. プロジェクトが [Assembly-CSharp] であることを確認（これだとグレーアウトされる）
    ![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460904/88089f24-93e3-f5ea-caf0-a12457c7a97d.png)

8. プロジェクトを [Assembly-CSharp.Player] に変更（グレーアウトされない）
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/460904/da9c6b49-f2a1-d171-a908-8f2e8d1db309.png)

## 参考サイト
- [Help Wanted - Migrating from Windows Standalone to UWP - Unity Forum](https://forum.unity.com/threads/migrating-from-windows-standalone-to-uwp.1045375/#post-6777581)
GitHubへの公開鍵の登録で躓いた箇所

自分がGitHubへ公開鍵を登録する際に躓いた箇所のメモ

#環境
•mac book pro(2020 M1)
•macOS Big Sur 11.2.3

#前提
基本的にはこちらの記事参照

https://eh-career.com/engineerhub/entry/2017/01/31/110000#Git%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A8%E6%BA%96%E5%82%99

#vim画面の終了

```
$ vim ~/.ssh/config
```

でvimの挿入(?)画面へ

```
Host github
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_github
```
上記の設定を入力後、入力を終われなくなりました。


設定を入力し
``esc``を押してから

```
:wq
```
と打つと内容を保存して終了します。
もう一度`` vim ~/.ssh/config``を入力して確認してみるといいかもしれません。

#GitHubのSSH keysに入力するkeyの確認
finderだと``.ssh``などのファイルが表示されませんね😭
自分もwindowsユーザーだったのでかなりfinderには悩まされています。


```
cd ~/.ssh
```
で``.ssh``フォルダに移動します。その状態で

```
ls
```
と打つと``.ssh``フォルダ内のファイルの一覧が表示されるはずです。

```
.ssh % ls
config			id_rsa_github.pub
id_rsa_github		known_hosts
```

ここにある``id_rsa_github.pub(或いはid_rsa.pub)``を開きたいので

```
cat id_rsa_github.pub
```
と打つと``ssh-rsa ~~``というキーが表示されると思うのでそれをコピーしてGitHubの設定画面に貼り付ければ完了です。
【初心者は気を付けて】Chromeの検証ツールはあくまで検証用、必ずデバイスで確認！

#どうも7noteです。検証ツールは便利ですが知らないと罠にハマってしまいます。

検証ツールは便利で多機能なのでついつい便りガチですが、頼りすぎずに節度ある距離感で付き合っていきたいものです。

まだまだWEB開発者初心者の方向けに検証ツールで注意すべき点をまとめました。

## 注意点①：フォントはデバイスに依存する

WEBフォントを入れていれば大丈夫ですが、デフォルト規定のフォントの場合PCとスマホではフォントが違うことが多いです。

フォントによって、幅や文字の大きさが違うので思っていた改行にならなかったり。
改行具合を綺麗に見せたいのであれば、あらかじめ余裕をもったところで改行させるか、実際にスマホでチェックするようにしましょう！

## 注意点②：検証ツールでピッタリだと、実機では1文字ズレることがある。

これは体験談なのですが、**検証ツール上で375pxのデバイスで見ていても、実際に375pxのデバイスで見ると1文字分ズレていたりします。**

(例：検証ツールでは↓)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661092/e6f0ecd5-9ba8-7b23-2c84-4118caa3abd6.png)

(例：実際のデバイスでみると↓)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661092/aa921ff3-6696-02dd-0a10-37e07e70cad2.png)
こうなることがあります。

原因はおそらくWEBフォントで、必要なフォントサイズを読み込めていなければPCとスマホではフォントの太さの指定が異なり、がじゃっっっかんのズレが生じて1文字ずれてしまうことが。。
やっぱりデベロッパーツールは**あくまで検証用**なので、必ず実際のデバイスでチェックが必要ですね。

## 注意点③：iosのinputやbuttonはiosデフォルトのCSSが効いているので見た目が崩れる

iosのデバイスを持っていなければ絶対に気づけないのですが、iosにはデフォルトでinputなどにcssが当てられています。
無効化するために以下の設定をreset.cssなどで必ずしておきましょう。

```reset.css
input, button, select, textarea {
  -webkit-appearance: none;
}
```

## 注意点④：他にもiosだとなぜか効かないCSSだったり、スクリプトが存在する

これは稀に起こるのですが、ネットのソースを持ってきたりしたら実はiosだけ効きませんみたいなことがあります。
そういう場合はgoogle先生に「○○○○ ios 効かない」とかで検索して助けを求めましょう。
それでも原因が不明の場合は、書き方が間違っているか、ほんとに原因が不明なので、違う方法を探しましょう。

## 注意点⑤：固定ヘッダーやフッターがあると、本文のリンクやボタンが隠れて押せなくなるかも

固定ヘッダーやフッターはユーザーの誘導にとても便利ですが、それがあるせいで**文章の最後にある誘導ボタン等が押しにくかったり、押せなかったり、見えなかったりしてしまうかも**しれません。
実際にスマホで確認して固定した要素のせいで見えないものがないかチェックしておきましょう。

## おまけで注意

スマホはキャッシュクリアがやりにくいです。そのためCSSを変えたつもりでリロードしてもキャッシュが残ったままで最新のCSSが効かない場合があります。
**スマホのキャッシュクリアを忘れずに。**



## 参考になるかも

実機のスマートフォンデバイスで検証する方法について書いたQiitaの記事がありましたのでご紹介。
https://qiita.com/aqril_1132/items/4789bc12a511136d8bfa

スマホでも`view-source:`を使う方法は私も初めて知ったので参考にしてみたいと思います。


#### おそまつ！
~ Qiitaで毎日投稿中!! ~
[【初心者向け】WEB制作のちょいテク詰め合わせ](https://qiita.com/7note)
パナソニックプログラミングコンテスト (AtCoder Beginner Contest 195) 参戦記

# パナソニックプログラミングコンテスト (AtCoder Beginner Contest 195) 参戦記

20:58まで気づかずウマ娘をやってたので開始直後30秒くらい準備で無駄にしてしまった.

## [ABC195A - Health M Death](https://atcoder.jp/contests/abc195/tasks/abc195_a)

2分で突破. 書くだけ.

```python
M, H = map(int, input().split())

if H % M == 0:
    print('Yes')
else:
    print('No')
```

## [ABC195C - Comma](https://atcoder.jp/contests/abc195/tasks/abc195_c)

Bが難しかったので先にこちらを. 10分くらい? 一発で答えが合ってびっくりした.

```python
N = int(input())

t = 1
c = 0
while t <= N:
    t *= 1000
    c += 1
t //= 1000
c -= 1

result = 0
while t != 1:
    result += c * (N - t + 1)
    N = t - 1
    t //= 1000
    c -= 1
print(result)
```

## [ABC195B - Many Oranges](https://atcoder.jp/contests/abc195/tasks/abc195_b)

20分くらい?、WA1. B問題とは思えない難しさと思ったけど、解いた後は似たような問題どこかで解いたことあるようなってなった. off by one エラーをしまくった.

```python
A, B, W = map(int, input().split())

w = W * 1000
min_x = (w + B - 1) // B
max_x = w // A
if w < min_x * A or w > max_x * B:
    print('UNSATISFIABLE')
    exit()
print(min_x, max_x)
```

## [ABC195E - Lucky 7 Battle](https://atcoder.jp/contests/abc195/tasks/abc195_e)

Dの解き方がぱっと思いつかなかったが、こちらはぱっと見解けそうだったのでこちらから. 20分くらい? 持ち回さないといけないのは7で割った余りだけなので、メモ化再帰一発ですよね.

```python
from sys import setrecursionlimit
from functools import lru_cache


@lru_cache(maxsize=None)
def f(i, r):
    if i == N:
        return r == 0

    if X[i] == 'A':
        if not f(i + 1, r * 10 % 7):
            return False
        return f(i + 1, (r * 10 + int(S[i])) % 7)
    elif X[i] == 'T':
        if f(i + 1, r * 10 % 7):
            return True
        return f(i + 1, (r * 10 + int(S[i])) % 7)


setrecursionlimit(10 ** 6)

N = int(input())
S = input()
X = input()

if f(0, 0):
    print("Takahashi")
else:
    print("Aoki")
```

## [ABC195D - Shipping Center](https://atcoder.jp/contests/abc195/tasks/abc195_d)

25分くらい?、WA1. 難しく考えすぎてしまってドツボにハマった. 座圧+セグ木で実装してWAを出して、同じサイズの箱が複数あったらダメじゃんってなった後に制約を見て *O*(*NMQ*) でいいやんけーと5分で実装して AC. 数百パフォをドブに投げ込んでしまった…….

```python
N, M, Q = map(int, input().split())
WV = [list(map(int, input().split())) for _ in range(N)]
X = list(map(int, input().split()))

WV.sort(key=lambda x: x[1], reverse=True)
for _ in range(Q):
    L, R = map(lambda x: int(x) - 1, input().split())
    boxes = X[:L] + X[R + 1:]
    boxes.sort()
    result = 0
    for W, V in WV:
        for i in len(boxes):
            if boxes[i] >= W:
                result += V
                boxes = boxes[:i] + boxes[i+1:]
                break
    print(result)
```
streamlitでfoliumの地図を表示したい

# はじめに

streamlitでは[緯度と経度のリストを渡すだけで地図を表示できるメソッド](https://docs.streamlit.io/en/stable/api.html#streamlit.map)が用意されており、かんたんに綺麗な地図をつくれますが、ポップアップを表示したり、地図やマーカーの色を変えたりなどより機能の多いfoliumを使いたい場合の話です

streamlit==0.76.0
folium==0.11.0

# streamlit-foliumモジュール

https://github.com/randyzwitch/streamlit-folium

このモジュールを用いて、Example通り、folium_staticというメソッドにfoium.Mapのオブジェクトを渡せば表示ができます

ですがこの関数、widthとheightを固定値で指定する必要があります

```python
# https://github.com/randyzwitch/streamlit-folium/blob/master/streamlit_folium/__init__.py#L79

def folium_static(fig, width=700, height=500):
    # if Map, wrap in Figure
    if isinstance(fig, folium.Map):
        fig = folium.Figure().add_child(fig)
        return components.html(
            fig.render(), height=(fig.height or height) + 10, width=width
            )

    # if DualMap, get HTML representation
    elif isinstance(fig, plugins.DualMap):
        return components.html(
            fig._repr_html_(), height=height + 10, width=width
        )
```

# MapのHTMLを直接渡して、widthを可変にする

heightならまだしも、あらゆる画面幅が考えられる状況でwidthをピクセルで固定するのはちょっと...ということで、この関数の中身をそのまま実装して、widthを指定しなければいい感じに可変になるので次のように書けます

```python

st.components.v1.html(folium.Figure().add_child(map_).render(), height=500)
```


# 参考

- https://discuss.streamlit.io/t/ann-streamlit-folium-a-component-for-rendering-folium-maps/4367
AZ-900:Microsoft Azure Fundamentals合格体験記

# はじめに
2021年3月にAZ-900:Microsoft Azure Fundamentalsを受験し合格したので、
どのような勉強をして試験に挑んだのか、
どうしたらもう少し点がとれたのかをまとめます。
ちなみに私はSIerで、クラウドの実務経験はゼロです。
プロジェクトではAzureが使われているので、
資格をもっていれば業務でAzureを触るチャンスがあるかも...ということで今回AZ-900にチャレンジしました。


# AZ-900:Microsoft Azure Fundamentalsとは
AZ-900はAzure資格の中で最も基本的な資格になります。
出題範囲は、公式ページにて以下のように記されています。

>
Azure Fundamentals 試験は、クラウドの概念、 Azure サービス、 Azure ワークロード、 Azure のセキュリティとプライバシー、 Azure の価格とサポートに関する知識を証明する機会です。
受験者は、ネットワーキング、ストレージ、コンピューティング、アプリケーション サポート、アプリケーション開発の概念を含む一般的なテクノロジの概念に精通している必要があります。


# 勉強方法
### 1. ウェビナーに参加
[Microsoft Azure Virtual Training Days](https://www.microsoft.com/ja-jp/events/top/training-days.aspx?activetab=a1:primaryr4)と呼ばれる2日間（各日午前中のみ）の研修に参加し、
AZ-900の試験範囲をざっくり勉強しました。
とはいってもこのウェビナーに参加をしたのは試験日の3ヶ月前でした。
試験まで時間が空いてしまったこともあり、
...正直ここで学んだことは今回の合格には関与してなさそうです。汗
でもこの研修に参加したことで、AZ-900を無料で受けることができるバウチャーをゲットできました！
AZ-900は通常通り受けると12500円かかるところ、無料で受験できるようになるので、
ウェビナーに参加することを強くおすすめします。


### 2. 対策本を読み込む
今のところAZ-900の対策本はこの一冊のみです。

https://www.amazon.co.jp/dp/B0872LVYD6/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1


私はこの対策本を受験日の2週間前からパラパラと読み始めました。
各章と巻末に問題があるので、それを繰り返し解きました。

### 3. ネット上の問題サイトをひたすら解く
テスト1週間前になり、さすがにテキスト本だけでは受からないのではと思い、
仕事の合間をぬって以下問題サイトをひたすら解きました。

https://learn-azure.cafe/


https://simple-was-best.com/az-900


特に２つ目のサイトはおすすめです。
ここに載っている問題が何個か本番の試験にも出ました。
回答説明がないものや、選択肢で迷ったものについては、
テキストを読み返すことで理解を深めました。
どちらのサイトも基本的にテキストに出ている情報の問題が多かったので、
この２つのサイトの問題演習を経て、テキストに書かれている情報のほとんどは頭に入りました。

### 4. 「Azureの基礎」のラーニングパスを読む
色んな方が合格体験記でやったと書いている[ラーニングパス](https://docs.microsoft.com/ja-jp/learn/paths/az-900-describe-cloud-concepts/)。
テスト2週間前から読み始めましたが、何しろ量が多く、私は途中で諦めてしまいました。
そして試験当日、テキストの内容はもう頭に入っていたこともあり、
最後にやっとくか...と、「Azureの基礎」の全モジュールの知識チェックのみ確認しました。
が、知識チェックを解いていたところ、
テキストに載ってない情報の問題が多く不正解ばかりになってしまいました。。
なんとか試験時間までに、知識チェックだけは100%回答できるように情報を頭に詰め込みました。笑

# 受験してみて

はい、ぎりぎり合格でした。笑

![iOS の画像 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88533/0d4b985f-42a5-4820-3c98-928d060259a2.jpeg)

ラーニングパスをまともに勉強せず、テキスト中心に勉強してきましたが、
当日の試験ではテキストには載っていない問題がいくつも出てきました。
ぎりぎり合格だったのはラーニングパスにしっかり目を通していなかったからと思います。
ラーニングパスをやらずともぎりぎり合格はできるかもしれませんが、
これから受験される方はテキストのみならず、
ラーニングパスもしっかり取り組むことをおすすめします。

また、本番の問題でははいorいいえの問題形式が多かったです。
感覚的には全体の20%ほど出題されていたように思います。
はいorいいえの問題は、一設の中に３つの問題が詰まっており、それぞれにはいorいいえで回答します。
テキストの模擬試験でもこの種のケースは少なかったです。

なんとか合格はできましたが、Azureは参考書や問題演習できるものが少なく、
試験当日にひやっとすることが多々あったので、私のこの赤裸々な体験記が誰かの役に立てれば良いなと思います！
AWS Solution Architecht(SAA-C02)に受かったので合格マップ書いてみる

# 0.背景
会社でAWS認定資格の取得を推進していく、みたいな話が持ち上がったので、せっかくなのでと思い挑戦してみました。
普段業務ではインフラエンジニアとして、やっていて、クラウドサービスを扱うことも増えてきたことから、知識を
つけて損にはなるまい、と思いまずは受験に向けた準備を進めていくことにしました。

|  前提知識  |  理由 |
| ---- | ---- |
| ネットワーク  |  プロトコルの話とか、XXX番ポートは何に使う、サブネットとは、ロードバランシングとは、あたりの話は押さえていないと無謀です。  |
| ITパスポートに出てくる程度の用語 |  理解の際に基本的な用語を押さえていないと、こちらも勉強しなければいけなくなります。  |
|金をかけるという意気込み|お金をかけずに、も不可能ではないです。ですが、よほど勉強の意識が高くないと情報を見つけるだけで疲れるのではないかな、と思います。Architechting on AWSを受けなければそれほどお金はかかりませんので、|

# 1.Architecting on AWS
まず第一に研修を受けました。
3日間で一通りのサービスを網羅する形で研修をしていき、この時点でいわゆる「完全に理解した」状態
になりました。そのノリのまま模擬を解くと、「40%」という悲惨な結果に…現実は甘くない、ということを
思い知りました。（というかそもそもこの研修の使い方はある程度勉強したうえでの知識固めだと思います。）
まあまあ高いので受講は慎重に。

# 2.サービスを一通り把握
下記の書籍を購入して、まずはサービスの把握に努めました。この本の強いところは「試験に必要なサービスが網羅されている」ところです。
この本のおかげもあってか「あれ…SNS…SQS…うーん」みたいなことはまずなくなりました。

https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-AWS%E8%AA%8D%E5%AE%9A-%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88-%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88-NRI%E3%83%8D%E3%83%83%E3%83%88%E3%82%B3%E3%83%A0%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE/dp/479739739X/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=SAA+aws&qid=1615642319&sr=8-3

ただ、一つの間違いは「この本では受かりません」。2度言います。「この本では受かりません。」
なんて言うとこの本のネガキャンに聞こえますがそれは書籍の中にも書いてあることです。
AWS Solution Architechtは「サービスの知識」を前提としたうえで「どのサービスを使えばよいのか」
「どういう構成にすればよいのか」を問う試験です。したがって、

私はここで調子に乗って試験で撃沈しました。私の二の舞にならないよう君たちは勘違いしないように。

# 3.アーキテクトに関する知識をつける
ブラックベルト？ホワイトペーパー？Well Architected Framework？
消化不良を起こすのでやめましょう。（この時点ではまず読むことすら難しいです。）

一番簡単なのは下記を一通り読むことです。非常によくまとまっていること、問題がついていることで
読みながら理解を進めることができます。図が挟み込まれていたり、資料構成も、必要な項目が抜き出されているので、
非常に優秀な本だと思います。

https://www.amazon.co.jp/%E6%A8%A1%E6%93%AC%E5%95%8F%E9%A1%8C%E4%BB%98%E3%81%8D-AWS%E8%AA%8D%E5%AE%9A-%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88-%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88%E6%95%99%E7%A7%91%E6%9B%B8-SAA-C02/dp/4295010650/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=SAA+aws&qid=1615642319&sr=8-1

項目２、項目３を読んだ時点で、おそらく模試で合格ラインが多少見えてくるぐらいの得点率になっているかと思います。

# 4.問題を解く

　https://aws.koiwaclub.com/

上記のサービスを使って、とにかく演習量を増やしました。
多少のお金を払うだけで膨大な量の問題をゲットできるので、試験対策にうってつけのサービスです。
また、koiwaclubは解答例にAWSのサービス説明の動画を載せていたりするので、
間違った時に聴くだけで「間違った問題」→「実際のユースケース」という感じの勉強ができます。

Udemyの問題集も問題量が多いのでお勧めですが、試験に近いこと、網羅的であることを考えると、koiwaclubの方が
私は使いやすく感じました。koiwaclubで練習、Udemyで本試験形式の演習、という感じです。


# 5.受験
以上を終わらせたうえで受験したところ、合格となりました。

# 6.勉強時間について
全体でおおよそ40時間程度、前述の前提知識がない場合は2倍強を見て90時間~100時間
を考えていただければよいと思います。

# 7.おわりに
巷で「一週間で合格！」みたいな話がありますが、1週間で数十時間の勉強時間を確保できる特殊なケース、
業務ですでに経験を積んでいるケース、など、通常のケースとは少し違うのではないかなと思います。
1ヶ月、忙しい場合は2ヶ月程度を見て、準備を進めていただければ、間違いはないかと思います。
是非、受験者の皆様が合格することを祈って、これで終わらせていただきます。
【Java】AtCoderのABC-195に参加しました（レート：230→251）。

こんばんは。

2021/3/13に、AtCoderのABC-195に参加しました。
レートは以下の通りとなっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/f7341a3b-a83d-d381-6954-ee0ffdad4f7e.png)


https://atcoder.jp/users/ishikawaryou

C問題は、意外と余裕をもって解けました。
しかしながらB問題が解けなかったという、初めての展開・・。

レートは230→251に更新！
Bでしくじったけどレートが下がらなくてよかった。順位は4606位となっています。
しかしこのペースだと、茶色まで半年近くかかりそうだ・・。頑張らねば。

###A問題

M、Hを入力。
HがMの倍数であればYes、でなければNoを出力。
問題文上は、モンスター云々が書いてありましたが、分かりにくくなるので割愛します。

```java
import java.util.Scanner;

public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
  int m = sc.nextInt();
  int h = sc.nextInt();
  if(h%m==0){
  System.out.println("Yes");
  }else{
  System.out.println("No");
  }

}
}

```

###B問題

A、B、Wを入力。
みかんが複数あり、重さがAグラム以上、Bグラム以下。
任意の個数を取り出したところ、Wキログラムになった。
ありえるミカンの最小個数、最大個数を求める。

→解けなかったです。結果を見ると、解けている人も多そう。
何か観点が足りなかったのかな。

###C問題

ある数字Nを入力。
1からNまで順番に数字を記載した時、整数入力時の桁区切り（1,000とか）のカンマを打った回数。
桁区切りは3桁ごとに行われるので、1000の累乗を求めて、
1000の0乗（1）より大きいかどうか
  →1000の1乗-1（1000-1=999）まではカンマ0個を打つ。

1000の1乗（1000）より大きいかどうか
  →1000の2乗-1（1,000,000-1=999,999）まではカンマ1個を打つ。
:
:
といったループのプログラムにしました。
これまでのTLEの教訓を踏まえ、1から愚直に1個ずつ処理するプログラムは書かないと決め、何とか1発でACを取りました。。

```java
import java.util.Scanner;

public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
  long n = sc.nextLong();
  long nzan = n;
  long conrui = 0;
  long ruijo = 1;
  long point = 1;
  for(long i=0;i<=7;i++){
    if(nzan>999*ruijo){
      conrui = conrui + (i * (((ruijo*1000)-1) - point + 1));
    }else{
      conrui = conrui + (i * (nzan - point + 1));
      break;
    }
    point = ruijo*1000;
    ruijo = ruijo*1000;
  }
 System.out.println(conrui);

}
}

```

###感想

Bにはまるとは思いませんでした。悔しいです。今後精進します。
これからもコツコツ取り組んで、茶色を目指したいと思います！
同じく灰色レベルで頑張っている方、お互い頑張りましょう！
DjangoでHerokuデプロイ後にローカル環境で出るエラー


##エラー内容
アプリをHerokuにデプロイしたのちにローカルで修正を加えようとしたところ以下のエラーが出でしまいました。settings.pyを修正したらエラーが解消されたので、メモ。

（エラー文）
django.core.exceptions.ImproperlyConfigured: WSGI application 'myapp.wsgi.application' could not be loaded; Error importing module.

##対処法
ぐぐると、wsgi.pyから Whitenoise関連の行を削除して以下をsettings.pyに追加と出てきます。

```
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.middleware.security.SecurityMiddleware',
```
（参考）https://stackoverflow.com/questions/47624099/django-error-myproject-wsgi-application-could-not-be-loaded

上記実行しても同じエラーが出続けてましたが、settings.pyから以下３行を削除したらうまくいきました。

```
    # 'whitenoise.middleware.WhiteNoiseMiddleware',
    # WSGI_APPLICATION = 'mappi.wsgi.application'
```

DjangoとHerokuの中の動きはあまりわかってないのですが、WSGIはWebサーバとWebアプリケーションの実装に関係しているようだったので、ローカルで動かしたければこの辺は使用しなくていいのかな、、ということでコメントアウトしました。
この辺りの認識違うよとか、こうだよとかありましたらコメントくださると嬉しいです。
中国の動画サイトBilibiliでのプログラミング学習環境を調べてみた

<h1>動画サイトBilibili上の教材

###結論
少なくとも動画に限ると中国のほうが圧倒的に無料教材に恵まれており、中国語はプログラミング学習において英語の次に重要な物といっても良いのではないだろうか。（しかし中国語の字幕すらついていないものが殆どで、ネイティブレベルでないと聞き取ることは困難である。）そもそも日本でYoutubeにプログラミング入門講座を公開しても視聴者数は数万人程度である。一方の中国では数百万～1千万人の視聴者があつまる。この時点で投稿者のモチベも違ってくる。（Bilibiliは中国国内では4番目に利用者数が多い動画投稿サイトである。より利用者が多い動画投稿サイトとしては腾讯视频/youku/爱奇艺などもあるが今回は割愛する。）

###Pythonを例に見てみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631703/609739ef-3392-2589-6ce5-23a7e1c5c323.png)
上位10のみのスクリーンショットである。一番視聴者数が多いのは1400万回再生のリストである。合計で30時間、動画ひとつあたり20分程度なので大体100個の動画があると考えて良い。
そして驚いたことに合計330時間、動画数700の再生リストがある。これを無料で学べるのはなかなか恵まれていると思う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631703/87de2e70-f592-6cad-2ce9-4bad6dfc3bac.png)
詰まったときは弾幕を見ると理解が進むこともあるし、仲間意識が生まれ挫折しにくくなる。弾幕が邪魔なら消すことも可能である。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631703/592f5dc4-6da9-893a-4274-b878c90e2655.png)
※ちなみに弾幕の中の「从入门到入土」の意味：「入門から入土」という意味で教材名がPython入門であるのに330時間もあることを揶揄している。
###講師の特徴
自分は中国語に関してはネイティブなので2倍速で聞いても全く問題ない。日本のプログラミング動画も中国のプログラミング動画も数本見てきたが、中国人講師は全体的にカジュアルな雰囲気で例え話なども面白いものを採用したり、重要なポイントになると興奮して声が大きくなったりと感情的である。（ある講師は毎回重要ポイントになると声が大きくなり、視聴者たちから弾幕で「イヤホン組死亡」と非難されている笑）
日本人の講師はしっかりとしていて礼儀正しい人が多い印象である。
人それぞれ好みがあると思うが自分は中国の動画のほうが飽きにくく感じた。また弾幕も面白い。

###ややマイナーな言語やフレームワークで威力を発揮する
PythonやJavaなら日本でもそれなりに完成度の高い無料動画が存在する。しかしLaravelなどの最近人気になっているものなどに関しては中国のほうが多い印象である。（例えばLaravelはYoutube上だと合計で3時間未満の基礎中の基礎程度の物が多いがBilibiliだと20時間以上のものが複数ある。）

###不便に感じたところ
Bilibiliには唯一の難点がある。それは1.75倍速がないことだ。なぜ1.25倍速があるのに1.75倍速はないのだろうか。講師によっては2倍速じゃ速すぎることがある（中国人は早口な人が多い）。1.5倍速だとちょっと遅いが2倍速じゃところどころ聞き取れなくなる。そういったときに1.75倍速が欲しいものだ。

###ハズレ動画もある
もちろん中にはわかりにくいものや上級者向けのものも紛れている。しかし選択肢が多いのでマイナー言語でない限り10～100以上の再生リストがある。その中から好きな講師、レベルのものを選べば良い。自分は弾幕を見るのが好きなので視聴者数が多いもので古すぎないものを選んでいた。

###一部言語・フレームワークは中国語情報が多い
例えば中国人が開発したVueとかは良い例であろう。中国ではVueの動画には困らないであろうし基本的にPHP・Python・Java・フロントエンド言語・C系などの有名言語は腐るほどの情報がある。逆にRubyの動画は他の言語と比べて少ない印象である。

###中国語情報がほしいときはGoogle＋Youtubeじゃなくて百度+Bilibiliで！
一応YoutubeとGoogleは中国で使えないことになっている（しかし実際問題中国人でもプログラマーなら誰もがYoutubeとGoogleを使っているはず。翻墙という技術で簡単に規制を突破できる。中国政府もGoogleをプログラマーに使わせないと国家としても巨大な損失になることは十分承知であるはず。）しかしあくまでそれは英語情報を収集するための利用であり、中国語情報は百度と中国の大手動画投稿サイトに多い。中国語がある程度分かるor翻訳ソフトを使ってでも参考にしたい時はGoogle以外でも検索してみるのはどうだろうか。
addresses.ymlの秘密鍵の暗号化解読

**Symbol bootstrap**のv0.4.5 より、**addresses.yml** の秘密鍵記述の部分が暗号化される様になった。

addresses.yml の秘密鍵情報を読むためには、作業ディレクトリ（home/ユーザー名/任意）で

```
symbol-bootstrap decrypt --source target/addresses.yml --destination ad.yml
```

を実行し、

```
less ad.yml
```

で暗号解除されたファイル"ad.yml"の内容を確認。
その後忘れずに、直ちに

```
rm ad.yml
```

を実行し、サーバーから削除する。


#＜　宣　伝　＞

デリゲートハーベスティングには、是非とも以下のノードのご利用を❣

　```000-harvest-symbol.ml```
　```0-0-0-high-performance.harvest-node.com```
　```0-0-high-performance.harvest-node.com```
　```00.high-performance.harvest-node.com```
　```0-speedy-harvest.ml```
　```0-0-1-high-performance.harvest-node.com```
AWS クラウドプラクティショナー2021年合格記録

・AWS実務経験なし。
・プログラミング経験なし。
でも合格することはできたので、次のアソシエイトに向けて勉強方法を覚書します。

受験日：2021年3月6日
試験センターで受験しました。

当日必要なものは、身分証明書を2つ(免許証とクレジットカードなど)のみでした。
念のため受験内容を印刷していきましたが、受付の人に口頭で資格名と受験者名を伝えたら署名や写真撮影など行いました。

制限時間は100分ですが、50分程度で終わりました。

#勉強時間
毎日1~2時間程度を1か月程度

#勉強方法
(オンライン)
・Udemy
　基礎と応用を何度も繰り返し解いた。(それぞれ10回以上)

・AWS認定資格 無料WEB問題集＆徹底解説
　https://aws-exam.net/clf/clf_question.php
　間違った問題は解説コメントが参考になった。

・AWS CloudTech
　https://aws-cloud-tech.com
　無料枠の閲覧のみ。
　資格取得だけで終わらないように、実際に使ってみたいと思うので、その際に有料会員になることを検討中。

(参考書)
・AWS認定資格試験テキスト AWS認定 クラウドプラクティショナー
www.amazon.co.jp/dp/4797397403

2週読んだけど、次のSAA教科書の方が詳しく知ることできたと思う。
この本では、各サービスの概要を覚えることに活用した。
問題集は比較的簡単な内容と思う。

・AWS認定 ソリューションアーキテクト − アソシエイト教科書
www.amazon.co.jp/dp/4295010650

試験直前に購入したので、1週しか読めなかったけど、各サービスを詳しく覚えるのに使った。
こちらも問題集は比較的簡単な内容と思う。

最後に、問題文の単語の意味を調べるレベルでも合格することはできる内容です。