OmniAICreator/Qiita-1.07M huggingface dataset:
pandas pythonの個人的メモ

import pandas as pd

## CSVファイルにデータフレームを保存・呼び出しする。
df.to_csv('data/test.csv')　保存するときは、データフレームにto_csvメソッドを適用するだけ。
df=pd.read_csv('data/test.csv') 読み込むときは、pd.read_csvとして、作成されたデータフレームに名前を付ける。（インスタンス作成）

参考　https://note.nkmk.me/python-pandas-to-csv/
ソリューションアーキテクト対策_ECS,EKS篇

## はじめに
試験勉強した際のメモを自分用に記事化。
内容は公式やBlack Beltの写経ですので目新しいことはありません:pray:

## ECS
### コスト最適化について
ECSではタスク定義を分けることでコスト最適化が可能。
具体的には以下の通り。

・クリティカルなジョブを実行するコンテナはリザーブドインスタンスを使用
・簡単だったり一時的なジョブ実行など、ミッションクリティカルではないタスクにはスポットインスタンスを用いる

ちなみにEKSでも同じことができる。

## おわりに
引き続き追記します！

簡単ですが以上です。
【Python】pass と Ellipsis の使い分けを検討する

## はじめに

Pythonを書く上際に、処理を省略・仮実装・抽象化する場合があると思います。  
その際に、`pass`文を使うべきか`Ellipsis`を使うべきか検討したいと思います。

※ 本稿は、部内のLTでプレゼンされる内容の忘備録です。

## 環境

- Python 3.10.6

## 結論

:::note info
下記のように使い分けるのが良さそう
`pass`文: 「何も実行しないこと」がその処理として本質的な場合に利用する。
`Ellipsis`: 「未実装な処理」や「コンテナデータ型の拡張表現」として利用する。
:::

## pass

誰もが知っているおなじみの`pass`文です。

> pass はヌル操作 (null operation) です --- pass が実行されても、何も起きません。  
> pass は、構文法的には文が必要だが、コードとしては何も実行したくない場合のプレースホルダとして有用です。[^1]

公式ドキュメント曰く、下記のように未実装関数の仮置きに使えます。

```py
def hoge():
    pass
```

また、処理内で何もしないことを明記したい場合にも活躍します。

```py
try:
    hoge + 2
except TypeError:
    pass
```

```py
if hoge == 2:
    return hoge
elif hoge == 3:
    pass
else:
    return 1
```

## Ellipsis

そもそも`Ellipsis`ってなんですか？みたいな人が多数いると思うのですが、`...`のことです。

```py
print(...)
>>> Ellipsis
```

これを見ても？？？な方がいるかもしれないので公式ドキュメントの説明を翻訳します。

> 省略記号リテラル「...」と同じ。主にユーザー定義のコンテナデータ型の拡張スライス構文と組み合わせて使用される特別な値です。  
> Ellipsisは、types.EllipsisType型の唯一のインスタンスです。[^2]

つまり、省略を表すオブジェクトです。passと異なり、文ではなく単なる**値**です。  
ドキュメントでは、コンテナデータ型の拡張スライス文で使用されると書いてありますが、主に`Numpy`のことです。

```py
import numpy as np

arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(arr[..., 0])
>>> [[1 3] 
>>> [5 7]]
```

ほかにも、可変長タプルの型アノテーションを書く際に利用します。

```py
def hoge(count) -> tuple[int, ...]:
    return (i for i in range(count))

a, b, c = hoge(3)
print(a, b, c)
>>> 0 1 2
```

## pass と Ellipsis の使い分け

それぞれの公式ドキュメントの見解とよくある使い方を見てきました。  
そこでですが、下記のような表記はどう思いますか？

```py
try:
    hoge + 2
except TypeError:
    ...
```

「違和感を感じる」、「気持ち悪い」、「どっちでも分かる」みたいな否定的な感じでしょうか？  
もちろん、`Ellipsis`自身は何もしないので、`pass`文と同等のヌル操作として捉えることが出来ます。

ここで公式ドキュメントの話を振り返ってみると、それぞれ以下のような意味合いの違いを感じます。  
(一旦公式ドキュメントの推奨している利用方法は無視し、説明を元に検討します)

- `pass`: 操作としてのイメージ
- `Ellipsis`: 何かを省略したいイメージ

そのため、下記ようなコメントアウトがあると**あり**だと感じます。

```py
try:
    hoge + 2
except TypeError:
    # TODO 後で型エラーについての処理を記載します。
    ...
```

この書き方であれば「何か**省略**されているので今後実装される」ように見えます。  
また、確定した処理の場合は`pass`を使って「何も実行しないことが操作である」ように見せた方が分かりやすいと感じます。

```py
try:
    hoge + 2
except TypeError:
    pass
```

未実装関数・クラスにも同様のことが言えます。  

```py
# 未実装関数
def hoge():
    ...

# 未実装class
def Hoge:
    ...

# おまけ、変数の仮置きにも使えます
hoge: int = ...
```

では、インターフェースを作成する時は、pass, Ellipsisのどちらを使いますか？

```py
from typing import Protocol

class Animal(Protocol)
    def bark(self) -> str:
        ...
```

`Ellipsis`ですね。理由は、将来的に実装クラスで**省略**された処理が実装されるからです。  
こう見ると、`pass`文は本当に何もしないとき以外はあまり使わない方が良いかもしれませんね。

※ 上記の検討は「Python Pass vs. Ellipsis[^3]」という記事でも題材として扱われていました。こちらも一読おすすめです。

## おわりに

結局のところ、こういった考え方があるといっただけで`Python`自体には強制力はありません。  
大事なのは、チームや個人がこのような一貫した考え方を持って開発できるかにあると思います。  
本稿がそういった考え方の一助になると嬉しいです。

## 参考文献

[^1]: https://docs.python.org/ja/3/reference/simple_stmts.html#the-pass-statement  
[^2]: https://docs.python.org/ja/3/library/constants.html#Ellipsis
[^3]: https://tuxtimo.me/posts/2021/11/05/python-pass-vs.-ellipsis/
STM32F767ZIとSSD1306でデモ(Adafruit SSD1306,Adafruit GFX)



x ライブラリのインストール方法は、めんどいので省略
x I2CのIDアドレスは、3Dから3Cに変更した。
x サイズは、約49KB

x OLED096UNO-Aです。
x NUCLEO-F767ZI

目的
OLEDのテスト

変更箇所


```c++


#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32



```

![o_con783.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/ef78eb97-88fb-be6c-0581-4c6e00387a0a.jpeg)



![o_con782.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/8dd7493c-1f91-7dff-e47e-2bb89260e1bf.jpeg)
ADX for Unityで、3Dサウンドを実装する

# はじめに

3Dゲームにおいて3Dサウンドは非常に重要です。プレイヤーとオブジェクトの距離によって音の大きさを変化させる事ができれば、敵の足音で位置を推理させたり、爆弾のタイマーやセーブポイントのようなオブジェクトを強調したり、工場エリアのような環境音を設定できたりします。

Unityにも3Dサウンド機能はありますが、ADX用サウンドオーサリングツール「AtomCraft」で実際の聞こえ方を確認しながら音の調整が可能です。

本記事ではUnityとサウンドミドルウェア「ADX for Unity」を用い、3Dサウンドの基本的な実装例を紹介します。

この記事は「ADX2とUE4で3Dサウンドを実装する」のUnity版です。元記事作者のSigさん ( https://qiita.com/SigRem )の許可を得て作成しています。

https://qiita.com/SigRem/items/61202791968bfd168bd2

# 前提

### 動作確認環境

Windows 10 Home 20H2
Unity 2020.3.27f1  + ADX LE Unity SDK 3.06.03
CRI ADX LE Tools for Windows 3.46.09

### 前提記事

CRI ADXの導入方法や基本的な操作については、以下の記事を参照して下さい。

https://qiita.com/Takaaki_Ichijo/items/16e6501fc07f5b3b3377

# やること

- AtomCraftでキューを作成
- 3Dサウンドのパラメータ設定
- Unityにインポート、テストシーンを作成

# 実装

## AtomCraft側

まずは、再生する音データの作成を行います。ADXにおいては、再生用のデータはUnityとは別のツール「AtomCraft」を使います。その手順については、元の記事（UE4向け記事）の同名の項と同じになりますので省略しています。

本記事の手順を試す場合は、まず元の記事の[該当項目](https://qiita.com/SigRem/items/61202791968bfd168bd2#atomcraft%E5%81%B4)を進めてから本記事を進めてください。UE4版との違いとして以下の3点に気をつけて下さい。

- バージョン違いにより、インスペクターの表記がパン[3D]→3Dポジショニングとなっています
    
    ![2022-04-19 16.23.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576800/0bf6e0ad-f58c-fa23-ae7f-f5fd5ec2dc6c.png)
    
- 距離減衰は最小20最大100くらいにして下さい。この値の単位はUnity内でのメートルと同程度となります
- 「Atomキューシートバイナリのビルド」画面で、一番左下のオプション「UnityAssets出力」にチェックを入れるのを忘れないようにして下さい

## Unity側の実装

### キューシートのインポート

AtomCraftからエクスポートしたファイルをインポートします。

### テストシーンの作成

以下のようなシーンを作成します。

![2022-04-19 16.27.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576800/bbfa9e9f-8f85-e364-8418-2a223f5fa521.png)

- CriWareLibraryInitializer、CriWareErrorHandler
    - 基本コンポーネント、GameObject＞CRIWAREから作成
- CRIWARE
    - 自動生成
- BGS_Env(CriAtomSource)
    - 前項でインポートした音源
    - PlayOnStartにチェックを入れる
- Plane
    - デフォルトでOK、色を変えると見分けやすい
- Cube
    - CRI Atom Listenerをアタッチする
    - BGS_Env(CriAtomSource)と座標を揃える

### テストシーンの実行

出来たら忘れずに保存し、実行しましょう。
CubeまたはBGS_Env(CriAtomSource)を動かすことにより、聞こえ方が変化するのが確認できます。

### 応用

今回はプレイヤー代わりのCubeにListenerをアタッチしましたが、カメラにアタッチしたほうが自然になる場合も多いので、自身のゲームにあった方法を選ぶとよいでしょう。
また今回は減衰だけ設定しましたが、AtomCraftでは音の出る向き（有効角度）やドップラー効果のかかり具合を調整することも可能です。
Google UXデザイン：ユーザを知る

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

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

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

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

# ユーザ中心設計

なぜ、ユーザーを中心としたデザインが重要なのでしょうか？

***「ユーザーは製品を購入し、使用する」***

Googleの創業者の一人であるラリー・ペイジが語った次の言葉は、現在のGoogleのコアバリューのひとつです。

***"There is no replace to personally watch and listen to real people "***

ユーザー中心設計は、ユーザーを前面に押し出しています。ユーザーに焦点を当てるということは、彼らのストーリー、感情、そして彼らについて集めた洞察を考慮することです。

# 4つのプロセス

ユーザー中心設計のプロセスには、4つのステップがあります。
このフレームワークにより、ユーザが実際に使いたいと思う製品を作ることができます。

### １．Understand:理解する

ユーザがその製品や類似製品をどのように体験しているかを理解します。そのためにはリサーチが必要です。

### 2.Specify:特定する

ユーザのニーズを特定します。リサーチに基づいて、どのユーザの問題を解決するのか最も重要なのかを絞り込みます。

### 3.Design:設計する

解決策を設計します。多くのアイデアを出し、実際に製品を作り始めます。

### 4.Evaluate:評価する

あなたのデザインは、ユーザーの問題を本当に解決しているかどうか、ユーザとテストすることで、それを知ります。

### イテレーションする

このプロセスで重要なことは、イテレーション（反復）です。以前のバージョンに微調整を加えていきます。

# ユーザとは誰？

ユーザエクスペリエンスとは、ユーザがその製品やサービスとともに歩む旅です。ユーザーを理解することは、デザインする力を与えてくれます。

プロジェクトの初期に行うUXリサーチのほとんどは、以下を知ることに重点を置いています。
- ***ユーザーの特徴***
- ***ユーザーの目標***
- ***ユーザーのペインポイント***

ここで注意点があります。ユーザーを狭く決めつけないことです。できるだけ多くのユーザーを考慮するために、下記の質問をしてみます。
- ユーザーには、一時的、状況的、恒久的にかかわらず、考慮すべき障害や障がいがあるか？
- ユーザーはテクノロジーにどの程度慣れているか？
- ユーザーはどのように製品やサービスにアクセスしているか？
- ユーザーはいつ、どこで、その製品やサービスにアクセスしていますか？
- すべての潜在的なユーザを考慮しましたか?
Node.JS忘備録 ~簡易Webサイト公開方法

Node.JSかつ静的なサイト限定の方法です。
Surgeという無料サービスを用います。
Herokuに似ています。
# npmにてライブラリインストール
```bash
sudo npm install -global surge
```
# Node.JSのデプロイしたいディレクトリにて...(package.json)があるところ
```bash
surge デプロイするディレクトリのパス 任意URL.surge.sh
(例) surge ./ namaeportofolio.surge.sh
```
初回メールアドレスとパスワード聞かれますので入力してください。
最後にSuccedという表示が出たらOKです。

出なかったらURLが世界中の誰かと被っていたのかもです。
誰もやってなさそうなURLに変えてみてください。
ffmpegの進捗率、予測残り時間、その他もろもろを表示する方法

ffmpegの出力は邪魔なので今まで捨ててましたが、進捗率が表示できるという記事を見つけたので、それを参考に加工してみました。
個人的には、いつ頃終わるか分かるようになったのが良かったです。

## 使い方
パイプでawkに渡してください。
```sh:shell
$ ffmpeg -i <入力ファイル> <出力ファイル> | awk -f progress.awk
```
パイプを使うので、`$?`でステータスが取れなくなります。
`$[PIPESTATUS[0]]`などで拾ってください。

## 呼び出されるスクリプト
gawk 前提です。5% 進むごとに表示します。
```awk:progress.awk
BEGIN{RS="frame="}
/Duration: /{
    match($0, /[0-2][0-3]:[0-5][0-9]:[0-5][0-9]/)
    TIME=substr($0, RSTART, RLENGTH)
    split(TIME, array, ":")
    Dura=array[1]*3600+array[2]*60+array[3]
    Start=systime()
    Old=-1
}
/time=/{
    match($0, /[0-2][0-3]:[0-5][0-9]:[0-5][0-9]/)
    Now=substr($0, RSTART, RLENGTH)
    split(Now, array1, ":")
    Prog=array1[1]*3600+array1[2]*60+array1[3]
    Ratio=int(Prog/Dura*100)
    if ( Ratio != Old ) {
      if ( Ratio % 5 == 0 ) {
        Current=systime()
        px=Current-Start
        Remain=""
        if ( Prog != 0 ) {
          rx=(Dura*px)/Prog-px
          Remain=sprintf(" 予測残: %02d:%02d:%02d", int(int(rx)/3600), int(int(rx)/60)%60, int(rx)%60)
        }
        printf ("  全体: %s 進捗: %s 進捗率: %3d%% 経過: %02d:%02d:%02d%s\n", TIME, Now, Ratio, int(int(px)/3600), int(int(px)/60)%60, int(px)%60, Remain)
        system("")
      }
      Old=Ratio
    }
}
```

## 実行結果
実行結果はこんな感じです。
```terminal:実行結果
  全体: 00:30:08 進捗: 00:00:00 進捗率:   0% 経過: 00:00:00
  全体: 00:30:08 進捗: 00:01:31 進捗率:   5% 経過: 00:03:58 予測残: 01:14:50
  全体: 00:30:08 進捗: 00:03:01 進捗率:  10% 経過: 00:08:08 予測残: 01:13:06
  全体: 00:30:08 進捗: 00:04:32 進捗率:  15% 経過: 00:12:22 予測残: 01:09:50
  全体: 00:30:08 進捗: 00:06:02 進捗率:  20% 経過: 00:16:41 予測残: 01:06:38
    ・
    ・
    ・
```
それぞれの項目の意味は次のとおり
<dl>
<dt>全体</dt><dd>動画全体の長さ</dd>
<dt>進捗</dt><dd>どこまで変換したか</dd>
<dt>進捗率</dt><dd>率で表したもの</dd>
<dt>経過</dt><dd>経過時間</dd>
<dt>予測残</dt><dd>あとどれくらいで終わるかの予測値</dd>
</dl>

## 参考にしたサイト
https://azaharblanca.blogspot.com/2020/11/ffmpeg-awk.html

https://syutaku.blog/bash-get-rc-pipe/
新UX指標であるINPについて簡単にまとめてみた

以前、チーム内の勉強会で少し調べたことがあったのでそれをまとめてみました。
## INPとは
- Interaction to Next Paint の略称
- ユーザーが起こした操作に対する反応（interaction）の遅延を計測
※ユーザーの操作に対する視覚的な反応が発生するまでにかかる時間を示す

例えば、下のビデオでは、右のアコーディオンはクリックすれば開くという視覚的な反応がすぐに得られます。
しかし、左側のアコーディオンをクリックしたとしてもその際にすぐ反応を得られる訳ではないのでユーザーが壊れていると考え何度もクリックすることが予想されます。
その場合処理が実行されると、遅れた入力を処理するため、アコーディオンが予期せず開いたり閉じたりします。
![Videotogif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603884/b2f50347-6958-8e78-3da1-e201e26d8628.gif)

要するに、ユーザーにとってそのサイトの中にある要素ひとつひとつが違和感のない挙動になっているかを評価する指標であると言えます。


### FID（First Input Delay）との違い
FID：ユーザーが最初に入力をした際にブラウザが入力の処理を開始するまでの遅延時間を計測
INP：全てのInteractionが計測対象


### INPが関係するinteraction
- マウスのクリックに反応する要素
- タッチスクリーンデバイスのタップに反応する要素
- キーボードの押下に反応する要素

### INPの判定基準
- Interactionが50未満：最も遅延が大きいInteractionが判定対象
- Interactionが50以上：98パーセンタイルのInteractionの遅延が判定対象

下の図が対象となるInteractionへの反応の遅延の判定に使われる基準になります。
![スクリーンショット 2022-09-20 18.41.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603884/28982b04-ce48-4002-f89c-918dbedb46e6.png)

### INPの計測方法
![スクリーンショット 2022-09-20 19.04.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603884/ea63a0c1-8b53-85a7-e869-e8b87c324dc9.png)
既にGoogleがいくつかのツールを提供していますが、<a href="https://pagespeed.web.dev/">PageSpeed Insights</a> を用いて計測することをお勧めします。INP のスコアを調べられるようになっているためとても便利です。

### INPを改善する方法
- <a href="https://developer.chrome.com/docs/devtools/coverage/">coverage tool</a>を使用して未使用のコードを削除
- メソッドを切り分けて読み込み中に不要なJavaScriptを呼び出さない
- 低速のサードパーティーJavaScriptを特定する
- 処理の長いJavaScriptを最適化する
- 画像、CSSの改善

## まとめ
普段は、バックエンドエンジニアとしてフロント部分の細かなUXについて調べたりという経験はありませんでしたが調べてみるとなかなか面白く今後もコアウェブバイタル（Core Web Vitals）について色々と調べてみたいなと思います。
STM32G071でI2CのIDのスキャニング


目的
OLEDのアドレスをさがす。
たぶん3Cだから3Cが表示されたら当たり



![o_con781.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/23fe7188-b552-867d-a94d-6b4cee19b9d2.jpeg)



```c++



//i2c_scanner_071_1

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

//初期化
void setup() {

  Wire.begin();

  Serial.begin(9600);

  char hex1[] = {
    '0', '1', '2', '3', '4', '5', '6', '7',
    '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
  };

  for (int ii = 1;  ii < 127; ii++ )
  {

    Wire.beginTransmission(ii);

    if (Wire.endTransmission() == 0)
    {
      Serial.print( hex1[  (ii >> 4) ]  );
      Serial.print( hex1[  (ii & 15) ]  );
      Serial.print(",");
    }//if

  }//for

}//setup

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



```
Next.jsでのFirestoreのデータから個別ページを作成する方法


この記事では、Next.jsでのFirestoreのデータから個別ページを作成する方法を紹介します。
現在自分はポートフォリオを作成しており、その過程で投稿記事の個別ページが必要になりました。

FireStoreのデータから個別ページを作る方法が書かれていた記事が少なかったので、作成しました。

URL
https://manga-kousatu-net.vercel.app/
Github
https://github.com/takoyan33/manga-kousatu.net


### 個別ページの作成方法

まずNext.jsのダイナミックルーティング機能を用いて、個別ページを作ります。
公式記事はこちらです。

https://nextjs-ja-translation-docs.vercel.app/docs/routing/dynamic-routes

記事によるとダイナミックルーティングでページを作るには、
【】で囲んだファイルorフォルダを作る必要があります。

今回は、firestoreのtitleを使いたかったので、【title】.jsxを使います。
そして、【title】.jsxを作り、
queryでtitleを取得できるか確認します。

```JavaScript
#【title】.jsx
const Post = () => {
〜省略〜
  const { title } = router.query;
  console.log({ title });

```

これでtitleが取得できれば、
今回の場合だと、titleが一致した記事のみを表示するという方法を使って、記事を表示します。
（これよりも良い方法があると思いますが、実装できていないのでこの方法で実装します。）

```JavaScript

  const getData = async () => {
    //firestoreからデータ取得
    await getDocs(databaseRef).then((response) => {
      //コレクションのドキュメントを取得
      setFiredata(
        response.docs
          .map((data) => {
            //配列なので、mapで展開する
            return { ...data.data(), id: data.id };
            //スプレッド構文で展開して、新しい配列を作成
          })
          .filter((data) => {
            if (data.title === title) {
              return data;
              //そのまま返す
            } else if (
              data.title.toLowerCase().includes(title)
              //valのnameが含んでいたら小文字で返す　含んでいないvalは返さない
            ) {
              return data;
            }
          })
      );
    });
  };


```

fillterで一致したものを取得しています。
これで、後はmapで表示すれば完成です！

慣れると実装しやすいのでおすすめです。
ソリューションアーキテクト対策_BIツール篇

## はじめに
試験勉強した際のメモを自分用に記事化。
内容は公式やBlack Beltの写経ですので目新しいことはありません:pray:

## Amazon QuickSight
クラウド型のBIツールを提供する可視化ツールで、ML Insightを含むインタラクティブなダッシュボードを簡単に作成して公開できる。
ダッシュボードはあらゆるデバイスからアクセス可能で、アプリケーション・ポータル・ウェブサイトに埋め込むことができる。

![スクリーンショット 2022-09-20 18.57.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/738ce360-68c4-2d89-266d-d4367a65d7c8.png)

### 類似のサービス
#### Redshift
AWS上にDWHを提供するデータベースで、QuickSightなど様々なツールと連携することで可視化を行うが、BIツール自体ではない。

#### EMR
ApacheのHadoopやSparkを使用して膨大な量のデータを迅速かつコスト効率よく処理して分析するサービス。
DWHであってBIツールではない。

## おわりに
引き続き追加します！

簡単ですが以上です。
ズンドコキヨシ on LISP

ふと [SICP をやろう！](https://qiita.com/hisawotakase/items/8327d7f28b9fe0820abe) と思い立って LISP / Scheme にふれる機会が増えたので、練習で [ズンドコ](https://twitter.com/kumiromilk/status/707437861881180160) してみました。

まず、若干は慣れているLISPから。Emacs の Scratch バッファ上で動かしながら書きましたが、Common Lisp でも動作しました。

```lisp
;; 検出パターン
(setq zdk-list '("ズン" "ズン" "ズン" "ズン" "ドコ"))

;; "ズン" "ドコ" のリストを生成
(defun zd-gen (zd-list count)
  (defun zd ()
    (cond ((= (random 2) 0) '("ズン"))
          (t '("ドコ"))))
  (cond ((< count 1)
         zd-list)
        (t (zd-gen (append zd-list (zd)) (- count 1)))))

;; 与えられたズンドコリストが zdk-list にマッチしたら "キ☆ヨ☆シ！" を加えて返却して終了
(defun zdk (src carry)
  (cond ((equal (list (car src) (cadr src) (caddr src) (cadddr src) (car (cddddr src)))
                zdk-list)
         (append carry zdk-list (list "キ☆ヨ☆シ！")))
        ((cdr src) (zdk (cdr src) (append carry (list (car src)))))))

;; 実行
(zdk (zd-gen '() 100) '())
```

実行すると、こんな感じです。

```lisp
[4]> (zdk (zd-gen '() 100) '())
("ズン" "ズン" "ドコ" "ズン" "ズン" "ドコ" "ズン" "ズン" "ズン" "ドコ" "ドコ" "ドコ" "ドコ"
 "ズン" "ドコ" "ズン" "ドコ" "ドコ" "ドコ" "ドコ" "ドコ" "ズン" "ドコ" "ズン" "ズン" "ドコ"
 "ドコ" "ズン" "ズン" "ズン" "ズン" "ドコ" "キ☆ヨ☆シ！")
[5]>
```

無限ループの方法がわからず最大回数を初期値で与えたり、無理矢理なマッチ判定や出力リスト生成など初心者っぽさ全開ですが、ご笑納ください！

＃ そして本題の Scheme 版で行き詰まってます。。
step関数の使い方

# step関数の使い方

勉強風記事を書いてみたくなったので、glslでよく使われるstep関数の使い方について書いてみる。

# step関数とは

基準値aと比較される値xの二つの値を引数とする関数step(a,x)のことである。
返り値は、0または1であり、前者の値は「x<=aの時」、後者は「a<xの時」返る。
こんな関数何に使うの？と最初は思っていたのだが・・・・。

# 連続的なものを不連続にする

ちょっとshaderを書いてみると、連続な値を取って欲しくない時がたまにある。
例えば以下のような場合だ。

```glsl
    #ifdef GL_ES
    precision mediump float;
    #endif
    
    uniform vec2 u_resolution;
    uniform vec2 u_mouse;
    uniform float u_time;
    
    void main() {
        vec2 st = gl_FragCoord.xy/u_resolution.xy;
        st.x *= u_resolution.x/u_resolution.y;
    
        float gray = sin((length(st-0.5)*20.0-u_time)*1.0);
        gl_FragColor = vec4(vec3(gray) , 1.0);
    
    }
```
![スクリーンショット 2022-09-20 18.23.32のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576323/dbcad666-6133-0002-664a-f58ca07bd0ea.png)

境目のぼやけた部分がとても気持ち悪い。step関数を使えば、このぼやけた部分をくっきりとした縞模様にできるのではないか？と思い、やってみた。

# step関数を適用

要するに、上のコードにおける、grayの値が連続的に変化するゆえにこのようなことが起きているのだから、例えば、0.0という（grayの値域の半分の値）値を取って、以下のようにコードを変更してみる。


```glsl
    float gray = sin((length(st-0.5)*20.0-u_time)*1.0);
    float gray_after = step(0.0,gray);
    gl_FragColor = vec4(vec3(gray_after) , 1.0);
```
![スクリーンショット 2022-09-20 18.23.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576323/2f9bf614-9535-6b37-d5cd-cfc6afc778ca.png)

　見事くっきりとした境目に変更することが出来た。
目標

# やりたいこと
## ROSの学習
ロボット制御の幅が広がると思うので勉強したい。
いろいろなセンサーを制御するのに便利そう。
### 勉強方法
あんまりよい教材がなさそう。一番は英語のwikiを見ることだと思うけど、難しそう。
少しずつ地道に勉強していくのがベストかな
## 予定


## 機械学習
純粋に面白そう。また、具体的なアルゴリズムが分からない時には、役立ちそう。
勉強するためのリソースが多いのは良い。
pythonのライブラリを用いて機械学習をするのは簡単だけど、やっぱりそのアルゴリズムがどうなっているのかは気になる。

## ゲーム作りたい
３Dのゲームを作りたい。
どうやって作るのだろう？

## web系の言語
1つくらいマスターしたいね

## Java
マイクラのmod作りたい

## python
マスターしたい
## C++
コンテナクラスらへんを勉強する
あの本やる

## 資格取得
### 電検3種
電気電子だし資格ほしいな
### 基本技術者試験
経産省の国家試験
### PHP技術者認定試験
PHPプログラムの試験
PHPはサーバー側プログラミング言語
### Ruby技術者認定試験
Rubyっていう名前がいいよね
### C言語プログラミング能力認定試験
持っているといいかも
### ORACLE MASTER Bronze DBA 2019
よくわからん
### Javaプログラミング能力認定試験
java勉強したいね
### Javaプログラミング能力認定試験
### 応用情報技術者試験
【UE4・UE5】永遠の時を繰り返そう()・ループノードを解説


【**結論**】処理を繰り返します

この3種類のノードはそれぞれ、処理をどれだけ繰り返すかの違いが出てきます
（上から順に説明します）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843707/6d4980e9-e7ed-6ed6-4794-00418bcb3fbd.png)

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
「ForLoop」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843707/72521c3b-9ccb-c517-42c1-c52842f0510b.png)



「Index」で繰り返す回数を自分で変えられる
例えば「First index」に「1」、「Last index」に「10」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843707/f57771ba-4640-32b3-0f7d-f0ba13b05a6f.png)


こうすると処理が10回繰り返される

＿＿＿＿

３回繰り返したい場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843707/7d85b1f0-6aba-3b10-c244-ca1ee8122625.png)
こうですね？？　(今これを書いている自分へ)

＿＿＿＿＿＿＿＿＿＿＿＿
「ForeanhLoop」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843707/816291a3-081f-7d99-a271-6d982f583f67.png)


「ForeanhLoop」は配列の要素数だけ繰り返される
例えば、print string(赤、青、緑に設定)にノードを繋げば赤、青、緑がでるよ！
やってみた方が分かりやすいよ！


（「F・左クリック」でショートカット）

＿＿＿＿＿＿＿＿＿＿＿＿
「WhileLoop」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843707/15c7fa52-c6b8-157c-a572-d7690fcfaf4b.png)

「Condition（ブーリアン）」があるのでなんとなく分かると思いますが
（思いますよね？過去の自分？）

「WhileLoop」は与えらた条件をクリアするまで処理を繰り返す処理
上の2つと違って、条件をクリアしないと、無限ループしてしまうノードなので
扱いには気をつけてください。

他にもいろいろありますが、今回は一例です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843707/1f51fe61-e07d-648b-ad28-6284833eccea.png)

**「時を戻そう！！」**　


(ｱﾄ.....♡ ｲｲﾈ.....♡ ｼﾃﾈ....♡♡ ｹﾞｰﾑﾂｸﾙ..... ♡ﾓﾁﾍﾞｶﾞｱｶﾞﾙﾝﾃﾞ.....♡　多分)

＿＿＿＿＿＿＿＿＿＿

お借りした画像
(https://www.pakutaso.com/20220138028post-38630.html)

＿＿＿＿＿＿

Twitter　 https://twitter.com/MapleSyrup77
Noto　 https://note.com/ggrks_ue4

＿＿＿＿＿＿＿＿＿＿

（注意！・この記事はUE4歴4ヶ月の人間が書いた記事です、
参考にする場合は気をつけてください、多分大丈夫なはずです、多分）

＿＿＿＿＿＿＿＿＿＿＿
【Jetpack Compose】2重ループで1から15までのボタンを作成する

# 概要
こんな感じで1から15までのボタンを縦横3×5で表示させたい
![スクリーンショット 2022-09-20 18.12.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524029/cfde1bdf-0fd6-8d9f-2955-8ff54fd6dfb1.png)

# コード
二重ループを使います。

```Kotlin:button.kt
                for(i in 1..11 step 5){
                    Row(modifier = Modifier.padding(top = 20.dp)) {
                        for (j in i..i+4) {
                            Column(modifier = Modifier.padding(start = 10.dp)) {
                                    CardButton(
                                        Number = j,
                                    )
                            }
                        }
                    }
                }
```
CardButtonはInt型の引数を表示する丸型のボタンで、自作したComponentです。

この書き方だとfor文の繰り返しをとびとびにできるので、
1段目は1から始まる時、2段目は6から始まる時、3段目11から始まる時で、それぞれの段に5つずつボタンを表示しました。

こうすることで無事、1から15までのボタンを縦横3×5で表示させることができました。
Salesforce認定アドミニストレーター試験の公式練習問題を解説してみた-その029

こんにちは。本橋孝昭です。

Salesforce認定アドミニストレーター試験の公式練習問題があるのはご存じでしょうか。
Trailheadにフラッシュカードとして何度も解ける練習問題がございます。

今回はTrailhead
アドミニストレーター認定の準備: アプリケーションと活動
生産性とコラボレーションの学習

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

https://trailhead.salesforce.com/ja/content/learn/modules/administrator-certification-prep-applications-activities-and-mobile/study-up-on-activity-management-and-collaboration?trail_id=administrator-certification-prep

今回の内容は動画でも解説しております

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

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

問題はこちらです

![０２９.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/0ed98e40-148a-066e-df15-0987287e0892.png)

正解はAとDです

内容を説明すると
・Chatterの権限はどのように付与するか　ということですね

この権限付与はプロファイルか権限セットで付与することが可能です

まずCについて見ていきましょう

参考になるヘルプはこちらです

ユーザプロファイルを使用した Chatter アクセス権の制御

https://help.salesforce.com/s/articleView?id=sf.collab_pbr_profiles.htm&type=5

以下の画像のように「プロファイル」権限に「Chatter有効化」を設定すればChatterアクセス権が付与できることが書かれていますね
なのでCは正解です

![Chatter有効化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/e14aef61-bcc4-7e99-9a20-7ff7297d1196.png)


もう１つの方法として権限セットの付与方法です

権限セットではこちらのヘルプをご確認ください

権限セットを使用した Chatter アクセス権の制御

https://help.salesforce.com/s/articleView?id=sf.collab_pbr_perm_sets.htm&type=5


こちらのヘルプには以下の画像のように権限セットの設定で「Chatterを有効化」を選択するとChatterアクセス権が付与することができます


![権限セット01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/50a5a648-53c2-0a81-3e06-f03c90983977.png)



権限セットとプロファイルの関係もこちらのヘルプで記載されてますね

![権限03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/a5d98dfb-c043-5555-cc5f-6d0e97e0fd41.png)


要するに、権限セットで「Chatterの有効化」の権限がある場合かプロファイルで「Chatterの有効化」の権限がある場合のどちらかでChatterが使えるようになる　という意味ですね

なお、今回の問題で「サブセット」という言葉がありますが、
この場合「一部の」ユーザのことを表しているようです。

なのでこのヘルプにもあるように

＞対象となるユーザのサブセットに対する適切な必須の Chatter 権限が既存の権限セットに含まれていることを確認します。

のような文章は
＞設定の必要な一部のユーザにて設定が必要な場合は、適切な必須の Chatter 権限が既存の権限セットに含まれていることを確認します。

のように言い換えたほうが分かりやすいですね

いかがでしょうか


いっけんすると今回の問題は「サブセットって何なんだ？」みたいな感じで混乱してしまたっかと思いますが、大事なことは
・特定の権限を付与するには権限セットかプロファイルで付与できる

ということかと思います

本日の内容はここまでです


みなさん楽しく元気にSalesforceを学びましょう
AWSコンソールを開くとキーボード入力が出来なくなるとき

## カスペルスキーの設定を変えたら動作しました。

カスペルスキー＞設定マーク＞詳細＞「物理キーボードの入力をキーロガーから保護する」＞「除外リストの管理」＞コンソールのURLを追加
Rubyは死んでないし、終わってないし、稼げる言語（RubyKaigi2022に参加しました）

# はじめに

エンジニアです。Rubyでの開発は3年です。
Qiita初投稿＋RubyKaigi初参加なので、色々慣れていないです。
この記事は優しい気持ちで眺めていただけると🙏

# この記事は何か

RubyKaigi2022 で三重に行って松坂牛を食べてきた話です。
Rubyの諸々の話も聞いてきました。

# このイベントで理解した（であろう）こと

コンテンツ盛りだくさんすぎて、~~（全然、頭に入らなかった）~~
メモするためのPCのバッテリーが枯渇して全然メモ取れなかった ~~（言い訳）~~
ので理解度は低めなのですが、

- 松坂牛は美味しい。
- 赤福は美味しい。
- RubyはWebAssemblyに対応してブラウザで動くようになったらしい
- Rubyはマルチスレッドの処理を M:Nモデルで扱えるようになるらしい
- RubyはRust製のコンパイラによって早く＋メモリ効率良くなるらしい
- 古いバージョンのRubyは最新のmacOSでビルドできない
- Rubyのパパはネット上のRuby批判を憂いている

***!!!! Rubyは死んでないし、終わってないし、稼げる言語 !!!!***
***!!!! RUBY IS STILL ALIVE, ACTIVE, AND EARNABLE LANGUAGE !!!!***

(私はRubyが好きと言うわけではないです。)

# RubyKaigiとは

https://rubykaigi.org/2022/

Rubyを主題とするイベントです。
言語の話をするので、コンパイラ周りの話が多かった印象です。

## 会場

「三重県総合文化センター」

![Screen Shot 2022-09-20 at 12.24.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922170/bfee53b9-9ec6-e616-76a2-fa959e081f0b.png)

## 看板

![IMG_0804.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922170/cc2be8b5-3dfb-6759-2195-fe645ad7c07c.jpeg)


## ご飯

（私にとってのメイン）

![IMG_0800.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922170/d17d339a-52e4-b7d5-4a92-f3d2c913b786.jpeg)

松坂牛。美味しかったです。

# １日目のスケジュール

https://rubykaigi.org/2022/schedule/

私が注目したのは

## WebAssembly対応

https://rubykaigi.org/2022/presentations/kateinoigakukun.html#day1

Rubyでスクリプト書くの楽なので、開発力速度上がりそうだと思いました。

## マルチスレッド処理がM:Nモデルで動くようになる

https://rubykaigi.org/2022/presentations/ko1.html#day1

処理を早くする手段が増えるようなので嬉しいです。

# 2日目のスケジュール

https://rubykaigi.org/2022/schedule/#day2

私が注目したのは

## Rubyが死んでない話

https://rubykaigi.org/2022/presentations/yukihiro_matz.html#day2

Rubyは何年も死んだと言われ続けている。つまり、死んでいない。
Rubyを使って世界レベルたくさん儲けている会社がちゃんとある。

## Rubyの未来予想図

https://rubykaigi.org/2022/presentations/rubylangorg.html#day2

RubyのCommitterがRubyをどうして行きたいのか、未来予想図を語っていました。

# 3日目のスケジュール

https://rubykaigi.org/2022/schedule/#day3

私が注目したのは

## ソフトウェアは何もしないと壊れる

https://rubykaigi.org/2022/presentations/hsbt.html#day3

サポート終了したものを使っていると使えなくなることもあるのでサポートされているバージョンに上げていこう。

# スポンサーブース

https://rubykaigi.org/2022/sponsors/

人が賑わっていてました。
見知らぬ人と仲良くなれました。
シャツや靴下やエコバックがもらえました。
ハチミツや苺大福ももらえました。

# おわりに

夕食時に津周辺を散策していたら、知らないおじさんがご飯を奢ってくれました。
お店で飲んでたら知らないおじさんがお酒を奢ってくれました。
三重は太っ腹でいいところでした。

当然のことですがOSSがサポートされているのは陰で頑張っている人たちがいて、
その人たちにお金儲けさせてもらっていることは忘れてはいけないなと思いました。

この記事には取り上げていないセッションがいくつもありますが、
コンパイラやネットワーク周りに関しては、ちょうど学び直しをやっていたところだったので、
知識がつながる瞬間が何度かあって少し嬉しくなりました。
勉強って大事ですね。

ちゃんと勉強していれば、もっとワクワクできたのかなと想像してます。

ほぼ読んでいないのですが、
読んで理解しておくと、セッションで「それなそれな」って言えた気がする本群

https://www.sbcr.jp/product/4797390711/

https://book.mynavi.jp/ec/products/detail/id=22078

https://www.shoeisha.co.jp/book/detail/9784798167930

https://www.shoeisha.co.jp/book/detail/9784798134208

https://www.shoeisha.co.jp/book/detail/9784798114682

（私はキャンペーンいっぱいやってくれる翔泳社が好きです。）
読んでいつか会話できるようになりたい。
ソリューションアーキテクト対策_DR篇

## はじめに
試験勉強した際のメモを自分用に記事化。
内容は公式やBlack Beltの写経ですので目新しいことはありません:pray:

## 他リージョンのバックアップに切り替える場合(ホット＆ウォーム)
### 要件
アプリケーションは事前に作成されたAMIを利用して東京リージョンにEC2を起動している

### 要件に対応するための方法
・AMIを別リージョンにコピーして、アプリケーション構成に利用可能にする

・Route53のフェールオーバー設定(アクティブ/パッシブ)によって、東京リージョンと別リージョンをルーティングする
→これによりプライマリ構成とセカンダリ構成をルーティングすることが可能になる
→ルーティング先の振り分けはRoute53のヘルスチェックに基づく

アクティブ/アクティブだと複数リージョンでアプリケーションを常に利用することになるため注意すること。

・AMIの代わりにスナップショットを用いるのは要件を満たさない。スナップショットはあくまでEBSのコピーであるため。
AMIにはEBSのコピーとインスタンスの設定両方が含まれているため、AMIを利用する。

・ホットスタンバイなどの即時起動が要件でない場合は、CloudFormationに別リージョンにおけるAMI IDをセットアップすることで、別リージョンでのインフラ構成を展開するための準備を行うことが可能。

## おわりに
引き続き追記します！

簡単ですが以上です。
【AWS】 list-user-policies が動かないとき

## ハマって悔しかったので書きます

解決方法は、似て非なる「list-attached-user-policies」を使う事。
違いは、こちらは管理ポリシーを表示するのに対して、タイトルのコマンドはインラインポリシーを表示する。

今からでもいいので、「list-user-managed-policies」に変更してくれ！
～以上～
AWS S3に画像をアップロードできない

# はじめに
PHP Laravelを使ってwebアプリを開発しようとしてたところAWS S3に画像をpublicで保存をしようとしたところエラーが出てきてしまいました。
S3の設定の方で変更をすることで直すことが出来たので、そちらの方法を説明いたします。

# AWS S3に画像をアップロード(エラー)
LaravelのControllerに以下のコードで保存をします。
```
public function store(PlanRequest $request, Plan $plan) {
        $input = $request['plan']; 
        $input += ['user_id' => $request->user()->id];
        $image = $request->file('image');
        // S3に画像を保存
        $path = Storage::disk('s3')->putFile('/', $image, 'public');
        $input += ['image' => Storage::disk('s3')->url($path)];
        
        $plan->fill($input)->save();
        return redirect('/plans/'.$plan->id);
    }
```
input等には他の保存するべきデータを入れています。
pathの文でS3にpublicで保存を行なうようにしています。

ここで実行をしようとすると、
![スクリーンショット 2022-09-20 17.57.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821384/6924c9f8-d763-c4e2-b508-9ef9a18f6861.png)
このようなエラー文が表示されました。

ここで注目していただきたいのは`The bucket does not allow ACLs`という部分です。
ACLの設定に何かあるということでS3を見てみます。

# AWS S3の設定を確認してみる
ACLの設定を開きます。
AWS S3→バケット→アクセス許可　から下の方にスクロールするとオブジェクト所有者の編集画面が出てきます。
![スクリーンショット 2022-09-20 18.01.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821384/8e32ee9d-ca12-a713-1c6f-1aa0439bab76.png)
ここをよく見てみると、ACLは無効になっていますと書いてあります。
編集からACLを有効にしてください。
![スクリーンショット 2022-09-20 18.04.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821384/c2c5f05a-bc9f-f9e9-6c3b-952cc43083c0.png)
(推奨されてるとはいえ、自分でACLの変更を行わないと使えないのは初めての人には優しくない気がしました)

この変更を行うことで画像をアップロードできるようになっていると思います。

# 最後に
今回のことから、まだまだ自分はAWSに慣れていないなと感じました。すごい便利で助かる機能ではあるのですが、覚えることが多くて大変です。今後少しずつ慣れていこうと思います。
paizaラーニング レベルアップ問題集 Aランクレベルアップメニュー JavaScript 盤面の情報変更

盤面の情報変更 

https://paiza.jp/works/mondai/a_rank_level_up_problems/a_rank_snake_map_step2

JavaScriptで解いてみました。

解答例
```javascript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
//盤面の行数を表す整数 H , 盤面の列数を表す整数 W , 与えられる座標の数を表す整数 N 
const [H,W,N] = lines[0].split(" ").map((num) => Number(num));
//盤面
const board = [];
for (let i = 1; i <= H; i++) {
    board.push(lines[i].split(""));
}
//盤面の与えられた座標の文字を "#" に書き換えた後の盤面を出力
for (let i = 1; i <= N; i++) {
    const [y,x] = lines[i + H].split(" ").map(Number);
    board[y][x] = "#";
}

console.log(board.map(row => row.join("")).join("\n"));
```
盤面はsliceでも書けます。
```javascript
//盤面
const board = lines.slice(1, H + 1).map(line => line.split(""));
```
paizaラーニング レベルアップ問題集 Aランクレベルアップメニュー JavaScript 盤面の情報取得

盤面の情報取得 (paizaランク C 相当)

https://paiza.jp/works/mondai/a_rank_level_up_problems/a_rank_snake_map_step1

JavaScriptで解いてみました。

# 解答例
```javascript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
//盤面の行数を表す整数 H , 盤面の列数を表す整数 W , 与えられる座標の数を表す整数 N 
const [H,W,N] = lines[0].split(" ").map((num) => Number(num));
//盤面
const board = [];
for (let i = 1; i <= H; i++) {
    board.push(lines[i]);
}
//与えられた座標の盤面を出力
for (let i = 1; i <= N; i++) {
    const [y,x] = lines[i + H].split(" ").map(Number);
    console.log(board[y][x]);
}
```
盤面はsliceで一行でも書けます。
```javascript
//盤面
const board = lines.slice(1, H + 1).map(line => line.split(""));
```
ソリューションアーキテクト対策_EC2のAutoScalling篇

## はじめに
試験勉強した際のメモを自分用に記事化。
内容は公式やBlack Beltの写経ですので目新しいことはありません:pray:

## EC2のAutoScalling
### AutoScallingのプロセスについて
閾値を超えてAutoScallingが起動すると、24hはスケーリングプロセスが動作する。
24hを超えるとプロセスは停止する。


### AutoScallingの種類
#### 動的スケーリング
・簡易スケーリングポリシー
通常の設定。アラーム設定に基づいて1段階のスケーリングを行う

・ステップスケーリングポリシー
アラーム超過のサイズに基づいてインスタンス数を動的にスケーリングする。
1つ以上のステップ調整値を指定して、複数回の段階的なスケーリングを実施。

・手動スケーリング
希望する容量を調整して、手動でスケーリングを実施する
 
・スケジュールされたスケーリング
スケーリングをする日時を指定して、スケーリングを実行する。そのままの意味


### スケーリングアクティビティ(抽象的なのでもっと調べる)
スケーリングアクティビティは、グループのサイズを変えるなどのAuto Scalingへの変更を実装した、長期間動作するプロセス。 
それは、インスタンスを置き換えるとか、サービスによってサポートされた処理を長時間実行するプロセスだったりするかもしれません。

全然わからないw

### AutoScallingの終了ポリシー
OldestInstance：最も古いインスタンスから順番に終了
NewestInstance：最も新しい起動時刻のインスタンスから終了
OldestLaunchConfiguration：最も古い起動時刻により起動しているインスタンスから終了
ClosestToNextInstanceHour：次の課金が始まるタイミングが最も近いインスタンスから終了

### AutoScallingのクールダウン
クールダウン期間では、AutoScallingグループが追加のインスタンスを起動または削除することができなくなる。
この期間はインスタンスのウォームアップ期間やその他のアプリケーションのニーズに基づいて設定できる。
AutoScallingグループは、単純なスケーリングポリシーを使用して動的にスケーリングした後、スケーリングアクティビティを再開する前にクールダウン期間が完了するのを待つ。

クールダウン期間はデフォルトで設定されており、期間の変更が可能。

### クールダウン期間の例外
クールダウン中、スケジュールされたアクションが開始されるか、ターゲット追跡またはステップスケーリングポリシーによりスケーリングアクティビティが開始されると、クールダウン期間が終了するのを待たずに実行する。

また、インスタンスが正常でなくなった場合、EC2 AutoScallingはクールダウン期間の完了を待つことなく、異常のあるインスタンスを置き換える。

## AutoScallingが起動しない時は
・AutoScallingグループの最大サイズのEC２インスタンスが既に起動済み
・vCPUの制限以上のオンデマンドインスタンスを起動させている
→2019年9月までリージョン内で実行できるオンデマンドインスタンス数の上限は20台に制限されていたが、同月から変更された。
→変更後はvCPUベースのオンデマンドインスタンス制限が適用されるようになった。

・スケールダウンポリシーはスケールアップ時の台数に影響を与えない。スケールダウンする時の基準や台数の設定は可能。
・スケールアップポリシーの最大値に達していないのであれば、台数を増やすことは可能

## おわりに
引き続き追記します！

以上です。
ローカルファイルにrequestsしてBeautifulsoupを使いたいとき

移動中のWifiない(あるいは貧弱な)環境で思いつきました。
結論はローカルファイルにあるhtmlファイルをopenしてreadするというだけの話です。

下記サンプルを実行するためには、 "http://quotes.toscrape.com/" へあらかじめアクセスして、ブラウザ上でctrl+Sしてhtmlファイルをローカルファイル"Quote  Quotes to Scrape.html"へダウンロードしておく必要があります。
また、当然のことながら、ネットワークアクセスがない状態で試すためにLANケーブルを抜くなり、フライトモードにして実行してください。

```python
import requests
from bs4 import BeautifulSoup

WIFI = False

if WIFI:  # Wifiアクセスできるときはインターネットから取得
    base_url = "http://quotes.toscrape.com/"
    r = requests.get(url).text
else:  # Wifiアクセスできないときはローカルファイルから取得
    base_url = "./Quotes to Scrape.html"
    with open(base_url) as f:
        r = f.read()

soup = Beautifulsoup(r, "html.parser")
# >>> soup.li.a
# => <a href="http://quotes.toscrape.com/page/2/">Next <span aria-hidden="true">→</span></a>
```

WIFIがあるときはrequestsでインターネットへアクセスし、
WIFIがないときはローカルファイルからHTMLをstrとして読み込みます。

WIFIがあるかどうかも自動化するなら、pingコマンドをsubprocessから打つなり、Ping3, Pingsモジュールを使って実行するとよいそうです。
DWIN ヒューマンマシン インターフェイス。 序章

DWIN は国内市場の新参者です。しかし、中国市場で広く普及し、すでに5万社以上の企業と提携しています。 DWIN の大きな利点の 1 つは、ディスプレイの操作全体を担当する独自に開発された中央プロセッサです。これにより、半導体の危機、特にプロセッサの不足が回避される可能性が高くなります。同社は250,000平方メートルの面積をカバーし、生産および科学ブロックを含み、生産用コンポーネントの主要サプライヤーもサイエンスパークにあります。このおかげで、DWIN は美容機器、家電製品、スマート ホーム コントローラー、充電器、産業用アプリケーションなどの分野におけるディスプレイ製造のリーダーの 1 つです。 Nextionに比べてディスプレイの幅が広く、サイズも2インチから21.5インチまであります。 RS-485、RS-232、TT などの接続インターフェイスの豊富なセットがあり、会社の独自のクラウドに接続してモノのインターネット システムを形成できる Wi-Fi を備えたバージョンがあります。 Nextion ディスプレイと比較して価格が 2 倍安いのは朗報です。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784141/f50f2af9-aa44-8c8a-8c3f-f81623cd880d.png)
DWIN ディスプレイ ソフトウェアは、独自の DGUS ソフトウェアを使用して作成されます。 プログラムにはエントリーのしきい値がありますが、実際にはそれを操作することは難しくありません。 アプリケーションのマニュアルがあり、かなり詳細な説明があり、プログラム ブロックを簡単に操作できます。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784141/bbbaa2c5-bda0-34c1-d6a3-9130bf0aaca1.png)
DWIN は企業向けに無料サンプルを提供しています。 サンプル、大量購入、個人割引、技術サポート、および一般的なお問い合わせについては、次の連絡先までご連絡ください。
電子メール: wenfang@dwin.com.cn
LINE: +86 16673685762
AliExpress公式ストアの5ドル割引クーポン - DWINNW
https://www.aliexpress.com/store/1101578880?spm=a2g0o.productlist.0.0.d5eb496b2QXCsu
偶数の数をカウントして出力するメソッド

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


### プログラム内容
配列にある値の中から偶数の数をカウントして出力する。
対象の数値が偶数かどうかを判断するeven?メソッドを使用する。

### 記述内容
```
def count_evens(nums)
  count = 0
  nums.each do |num|
    if num.even?
      count += 1
    end     
  end
  puts count
end

count_evens([5,6,8,12,14,19])
count_evens([1,3,7,10,13])
```
```:出力結果
4
1
```

列の中の偶数の数を出力するためにカウントした数を保持するための変数が必要なので、変数countを用意する。
ここで注意するのは変数countを書く場所。
配列から値を取り出す為のeach分の中にcount = ０を書くとループ処理で毎回数字が０に上書きされてしまうのでeach分の外に書く。

配列に入っている数字をeach文で取り出し、even?メソッドで一つずつ偶数かどうかを確認し、偶数だった場合はcountに1を足していく。

以上になります。

ちなみに奇数かどうか判断するメソッドはodd?メソッドでした。
AWS EC2で既存のインスタンスのネットワークインターフェイスにもう1つのグローバルIPアドレスを割り当てる

前回はS３を使ってWebページの公開まで実施しました。
https://qiita.com/sa125sa/items/f1f22fc81e4977bfbae4

しかし、前回のままだとWebページにIPアドレスが割り当てられていないため、S3の静的ウェブサイトホスティングに記載されている「エンドポイント」のURLでしかアクセスできない。
![静的URL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684763/6ca75fe8-10a6-f901-a279-8d31424f692e.png)


そこで、IPアドレスを割り当ててIPアドレスからアクセスできるようにする。
しかし、運用するWebページは同一のため、管理するインスタンスは少なくしたい。
じゃあ既存のインスタンスに複数のIPアドレスを割り当てられないのか？と考えました。

### 結論から言うと、可能でした！
下記にはその経緯を記載していきます。

# EC2でElasticIPアドレスの取得
まず初めにIPアドレスを取得します。
下記の記事の「IPアドレスの設定」までを参考に実施しました！
https://hiyowa-na-engineer.com/aws-how-to-eip/#Elastic_IP

1. EC2にアクセスして、左のメニューからElastic IPをクリック
1. Elastic IP アドレスを割り当てるをクリック
1. タグのキーに「Name」、値に「ドメイン名」を入力
1. 割り当てをクリック
1. 自分が指定したドメイン名にIPアドレスが割り当てられていることを確認

以上で、Elastic IPアドレスの取得は完了です。

# 既存のインスタンスのネットワークインターフェイスにもう1つのグローバルIPアドレスを割り当てる
下記の記事を参考にしました。
https://blog.serverworks.co.jp/tech/2016/11/01/attach_eip/

## ①新しいプライベートIPを追加
1. 左のメニューからネットワークインターフェイスを選択
1. 既にあるネットワークインターフェイスを選択しアクションから「IPアドレスの管理」を選択
1. 新しいIPアドレスの割り当てをクリック
1. プライベートIPアドレス欄に任意のIPアドレスを入力

## ②追加したプライベートIPに先程取得したElastic IPを割り当て
1. 左のメニューから「Elastic IP」を選択
1. まだ割り当てられていないElastic IPを選択し、アクションから「Elastic IPアドレスの関連付け」を選択
1. リソースタイプは「ネットワークインターフェイス」を選択
1. ネットワークインターフェイスに先ほど作成した「ネットワークインターフェイス ID」を選択
1. プライベートIPアドレスに先ほど入力したIPアドレスを選択
1. 「関連づける」をクリック
![ElasticIPアドレスの関連付け.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684763/04f43c8d-cf53-a67f-1a98-2c107517afbe.png)

最終的にインスタンスのElastic IPアドレスを確認して2つのパブリックIPアドレスが割り当てられていればOKです。
Windows10でどうしても消せないソフトでもレジストリにひと手間加えたセーフモードならアンインストールできる

# 概要

1. 停止できないサービスがある為に※※というソフトをアンインストールできない。
1. Windows10をセーフモードで起動すれば、該当サービスは起動しない。
1. しかし、セーフモードだと『Windowsのインストーラーサービス』が起動しないため、『※※のアンインストーラーをそもそも起動できない』という問題が発生する。
1. なので『セーフモードでもWindowsのインストーラーサービスを起動するように』とレジストリを変更。
1. そうすることで、 セーフモード起動⇒※※のアンインストーラー起動　が可能になる。

# やり方

レジストリエディタで
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal
まで行く。

『MSIServer』という名前のサブキーを作成。

作成したMSIServerのデフォルト値を『Service』に設定。

下記は設定が終了した状態。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/30cb7665-f1de-39e8-2798-4f4f495675ac.png)

『ファイル名を指定して実行』で『msconfig』と検索。

セーフブートにチェックを入れて適用⇒OK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/0f750826-e957-cb60-ee0f-f00b91ebb327.png)

再起動。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/2f0801d0-f642-8d45-7c27-5772bfbc7c7e.png)

セーフモードでのアンインストールが終了したら、 **レジストリとセーフブートの設定切り戻しを忘れないように注意。**

# 参考サイトさん

https://ja.macspots.com/enable-windows-installer-safe-mode-remove-apps

https://www.pc-koubou.jp/magazine/40168

# バージョン

Windows 10 Pro 21H2 OSビルド 19044.2006
Discord Botの作り方 node.jp

## はじめに
Discordでオウム返しするbotのコードを載せます。
[Discord Botの作り方、まとめ（Node）](https://qiita.com/kiririri/items/845da86f95f0e3472953)
をそのまま実行しようとしたら、うまくいきませんでした。そこで、
[【discord.js】TypeErrorを解決したい。](https://teratail.com/questions/360420?link=qa_related_pc)
を参考に修正したらうまく動きました。
コードの修正箇所以外は、参照元と同じです。

## コード

```javascript
const Discord = require("discord.js");
const client = new Discord.Client({intents: Object.values(Discord.IntentsBitField.Flags)});    
const token = "your token id ";

client.on("ready", ()=> {
    console.log("ready...");
});

client.on("messageCreate",async message => {
    if(message.author.bot){
        return;
    }else{
        let msg = message.content;
        let channel = message.channel;
        let author = message.author.username;
        message.reply(msg)
            .then(message => console.log(`Sent message: ${msg}`))
            .catch(console.error);
        return;
   }
}
);

client.login(token);
```
SQLite3::SQLException: table "users" already exists というエラーが出た時の解決方法

# 結論：　Usersテーブル削除する

ターミナルで
```terminal
$ rails db

 .tables　　    ###テーブルの一覧表示

 drop table users ### usersテーブル削除

ctrl + d で抜けられる
````
以上
Laravelのデバッグ方法について

#### Laravelのデバッグ方法について

#### ddヘルパーを使って、値を出力する

Laravelでもvar_dumpを使うことができますが、もっと見やすく出力できるddヘルパーというものが用意されています。

```
dd($hogo)
```

ddヘルパーに変数を渡して値を出力する

#### loggerヘルパーを使って、ログを出力する

loggerヘルパーを使うと簡単にログを出力することができます。

これを使うと、ファイルに出力してくれるので、こちらもデバッグや変数の内容を確認したい時には使うことができます。

```
logger($hoge)
```

渡す引数はddヘルパーと同じで、クラスのインスタンス変数でも文字列でも大丈夫です。

storage/logs/laravel.logにログが出力されます。

storage/logs/laravel.logファイルについては、Laravelでエラーが出た時にもログが出力されるので解決する時に役に立ちます。

ログ出力する際には、他にも下記のようなメソッドが使用できるようになっています。

ログ出力する時の重要度に合わせて、メソッドを使いわけましょう。どのログレベルで出力するかは作成者が決めて使うようにします。

```
メソッド	内容
emergency システムが使用不可なレベル
alert	 緊急に対処すべきレベル
critical 致命的なエラーレベル
error 一般的なエラーレベル
warning	警告レベル
notice	通知レベル
info	システム情報レベル
debug	デバッグ情報レベル
```
また、ログ出力するのにloggerヘルパー以外にも、Illuminate\Support\Facades\Logクラスを使用することも可能です。

こちらを使用する場合も、同じように記述することができます。

ヘルパーを使用せずにLogクラスを使うようにする場合はuse文を入れた後に、Log::debug($hoge);となります。
Db2地理空間分析: Db2の地理空間分析機能

`Db2地理空間分析`シリーズ


当記事は「1. Db2の地理空間分析機能」です。具体的な操作の前の基礎知識の説明です。

1. [**Db2の地理空間分析機能**](https://qiita.com/nishikyon/items/2f8bc4858e2d54bf9b1a)
1. [地理空間分析機能を有効にする](https://qiita.com/nishikyon/items/4cd0430e4ebb7d541a82)
1. [JGD2011座標系の設定](https://qiita.com/nishikyon/items/fc97391f02b4e9e4bb9c)
1. [SHAPEファイルのインポート](https://qiita.com/nishikyon/items/fd6d166fdbf6523930d4)
1. [緯度・経度情報をインポート](https://qiita.com/nishikyon/items/cf90796a13fa7d2cf769)
1. [DBeaverでDb2の地理空間情報を表示してみる](https://qiita.com/nishikyon/items/60e23324b1ec1f65deb5)
1. [空間処理変数を使ってみる](https://qiita.com/nishikyon/items/7eeb7ee541e7d4f76a7f)


- - -
# 1. Db2の地理空間分析機能

Db2の地理空間分析機能はDb2 Spatial Analyticsとして以下にドキュメントがあります：
https://www.ibm.com/docs/ja/db2/11.5?topic=data-db2-spatial-analytics

簡単に説明すると以下ができる機能です：

- 空間データ・タイプで地理空間データを保管
   - 最大 4 MB まで保持できる特殊なデータ・タイプ(BLOB)

- 空間処理関数を使用して、テーブルに保管されている空間データ・タイプのデータを分析


対応製品は以下です(2022/08/22現在):

- Db2 (SW版・コンテナ版)
- Db2 Warehouse
- Db2 Warehouse on Cloud

Db2 on Cloud(StandardプランとEnterpriseプラン)は一部機能が使えませんでした。サポートに問い合わせたところ、Db2 Spatial Analyticsはサポートしていないとのことでした。また無料のDb2 on Cloud　**Liteプラン**は権限が足りないため、地理空間分析機能を有効にすることができず、地理空間分析機能は使用できません。

なので、無料で試してみたい、という場合は、Db2　Community Edition(SW版またはコンテナ版)を使用するがよいかと思います。コンテナ版については[こちら](https://hub.docker.com/r/ibmcom/db2)のDocker hubから導入可能です。　


# 2. Db2の空間データ・タイプ

ドキュメントURL: https://www.ibm.com/docs/ja/db2/11.5?topic=concepts-spatial-data-types

以下のタイプで列定義が可能です。
- Point(点): ST_Point, ST_MultiPoint 
- Line(線): ST_Linestring, ST_MultiLineString
- Polygon(面): ST_Polygon, ST_MultiPolygon


Point, Line, Polygonが複数の場合は**ST_Multi**xxxxを使います。
またPoint, Line, Polygon　どれでも入れられるのがST_Geometry です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/1eb1ee9a-8463-12ac-dd88-152ec04e4a73.png)


# 3. Db2の空間処理関数
ドキュメントURL: https://www.ibm.com/docs/ja/db2/11.5?topic=analytics-spatial-functions

空間処理関数を使用して、形状間の距離やある形状が別の形状に含まれるかどうかの判別などが可能です。 これをSQLのWHERE句として使用することができます。

例1：　日本IBM箱崎事業所(139.7869482 35.6783300)から距離1km以内のLOCATION:
[ST_Distance関数](https://www.ibm.com/docs/ja/db2/11.5?topic=sf-st-distance)　　 (↓LOCATIONはST_Point属性の列)
```sql
WHERE ST_Distance(
ST_Point (139.7869482, 35.6783300), LOCATION, 'KILOMETER') <= 1
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/4a406401-47e8-7bb1-17d7-9c0ebb827143.png)



例2：　中央区内のLOCATION:
[ST_Within関数　　](https://www.ibm.com/docs/ja/db2/11.5?topic=sf-st-within)　　 

(↓LOCATIONはST_Point属性の列、中央区の形状はSHAPEにあるとする)(↓LOCATIONはST_Point属性の列)
```sql
WHERE ST_Within (LOCATION, SHAPE)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/1813aaf2-1858-ade9-eb4d-78b1fbb09477.png)

# 4. Db2で地理空間分析の利点

専用GISツールなどもありますが、利点は以下のようなとこかと思います。

- いつも使っているテーブルのデータと位置情報を組み合わせた分析がDb2にデータを置いたままできる
- 空間分析のワークロードをDb2サーバー上で実行できる
	


以上が基礎知識となります。
今後のシリーズで具体的な操作を説明予定です。
初心者がGoogleの検索結果をあてにしてmicroCMSを動かしてみたら動かなかった話。

「ヘッドレスCMS」というものを利用したくてmicroCMSを使ってみましたが、
１箇所だけ詰まったところがあったので、Qiitaに残しておきます。

ある程度の経験者ならすぐに分かることは無いと思いますが、
初心者なら確認するのに時間がかかりそうな内容でした。

# 私のスキル
- WEBデザイナー。元Wordpress専門エンジニア
- Vue.jsを勉強中。(PHPのようにHTMLの中に変数を組み込めるので。)
- 環境構築が億劫な人間なので、Node.jsは使わずにCDNを使っちゃう。

# 開発環境
- microCMS
国産で、編集画面がWordpressのクラシックエディタに似ているので、一番受け入れやすそう。
- Vue.js
HTMLに直接タグを書いてJavascriptを挿入できるのが便利なので使っています。
- axios
Node.jsのパッケージの一つ。axiosを使わなくてもできるけど、シンプルに書けるのが利点。

ちなみVue CLIを使わず、CDNで読み込ませています。

# 詰まったところ
microCMSのAPIは「APIプレビュー」で出てくるURLをそのまま表示させても動きません。
なぜなら**APIキーをヘッダーに含める必要があるから**です。

ということで`microcms axios`と検索をかけて、ヘッダーに含めるやり方を実践。
しかし、動かない。401エラー。

```javascript:動かない書き方
...
},
mounted(){
    axios.get(this.url, {
        headers: { 'X-API-KEY': this.apikey },
    })
    .then(
        response =>　console.log(response)
    )
    .catch(error => console.log(error))
},
...
```

headerの書き方には間違いはなさそう。
401エラーはAPIが違うことが多いらしいが、何度みても一致している。

原因が分からずに調べていると、APIがリニューアルされた公式ブログを発見。

https://blog.microcms.io/renew-x-microcms-api-key/

私は知識がなかったので、
これを読んでも「なんのこと？」とはてなマークを浮かべていました。

試行錯誤していくうちにようやく判明。

**`X-API-KEY`を`X-MICROCMS-API-KEY`に変更するだけでした！！**

```javascript:実際に動いた書き方
...
},
mounted(){
    axios.get(this.url, {
        headers: { 'X-MICROCMS-API-KEY': this.apikey },
    })
    .then(
        response =>　console.log(response)
    )
    .catch(error => console.log(error))
},
...
```

これで、やっと表示される様になりました！！！！
AWS S3を使ってWebページを外部から見れるように（公開）する

現在知り合いのWebページを保守運用しているのだが、新たにWebページを作成する必要ができた。
そのため、以前と同じ方法で公開しようとしたのだが、だいぶ前に公開していたこともありほとんど覚えていない。
なので、備忘録も兼ねてここに記載します。


# 前提として
すでにHTMLファイルとCSSファイルは作成済みです。

主にこちらの記事を参考にさせていただきました！
https://opt-p.co.jp/blog/aws/post-693/#outline__3_4

というか、上記のページだけで大丈夫でしたね（笑）

# S3でバケットの作成
1. S3からバケットを作成をクリック
1. バケット名には自分が取得したドメイン名を入力
1. AWSリージョンは東京or大阪を選択
1. 「このバケットのブロックパブリックアクセス設定」で「パブリックアクセスをすべて ブロック」のチェックを外す
1. 「パブリックアクセスのブロックをすべてオフにすると、このバケットとバケット内のオブジェクトが公開される可能性があります。」のはチェックを入れる
1. バケットを作成をクリック

以上でバケットの作成は完了

# 静的ウェブサイトホスティングの設定
1. 先ほど作成したバケットをクリック
1. プロパティタブをクリック
1. 「静的ウェブサイトホスティング」の編集をクリック
1. 「静的ウェブサイトホスティング」は「有効にする」を選択
1. 「ホスティングタイプ」は「静的ウェブサイトをホストする」を選択
1. 「インデックスドキュメント」は公開したいWebサイトのホームとなるページ名を入力
1. 「変更の保存」をクリック

以上で静的ウェブサイトホスティングの設定は完了

# バケットのアクセスポリシーの設定
1. アクセス許可タブを選択
2. バケットポリシーの編集押し、以下のポリシーを設定
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::バケット名/*"
        }
}
```
3.変更の保存をクリック

以上でバケットのアクセスポリシーの設定完了

# htmlファイル等をアップロード
1. オブジェクトタブを選択
1. アップロードをクリック
1. ファイルを追加をクリック
1. アップロードしたいファイルを選んでアップロード

以上でファイルのアップロード完了

# Webページへのアクセスを確認
1. プロパティタブを選択
1. 「静的ウェブサイトホスティング」にある「バケットウェブサイトエンドポイント」のURLをクリック

### 無事Webページが表示されました！
インターネット オプションをワンクリックで起動する。

# What is this？
インターネット オプション (inetcpl.cpl) を単純起動するショートカットもどきです。

# VBScript Code
```vbscript:inetcpl.vbs
Set objWShell = CreateObject("Wscript.Shell") 
objWShell.run "cmd /c inetcpl.cpl", vbHide
```

# Other
なんでデフォルトで SC 作れないのか (各種メニューとかにも入れられないのか) 問い詰めたい。
プログラミング

# 問題１の気づき
## コーディングの規約
### 局所変数とは？
「ローカル変数」のこと。
出典 https://wa3.i-3-i.info/word15734.html

コンピュータプログラム中のあるコードブロック（関数やメソッドなど）の内部で宣言され、その範囲内でのみ有効な変数。
出典 https://e-words.jp/w/%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E5%A4%89%E6%95%B0.html#:~:text=%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E5%A4%89%E6%95%B0%E3%81%A8%E3%81%AF%E3%80%81%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF,%E3%81%A7%E3%81%AE%E3%81%BF%E6%9C%89%E5%8A%B9%E3%81%AA%E5%A4%89%E6%95%B0%E3%80%82

#### 気づき
用途ごとに提起することでわかりやすさにつながるために、用途が異なる場合は使うのは控える。

### ループの制御変数には不動小数点変数を使用しない。

浮動小数点数は実数値を表現しているため、```単純な有理数などは正確に表現できると考えられがちであるが、これは間違いである```。浮動小数点数には整数と同様に精度の限界があり、全ての実数を厳密に表現できるわけではない。```10進数としては小さい桁数で表現できる値が、2進数の浮動小数点数としては正確に表現できない場合がある。```

加えて、浮動小数点数は大きな値を表現できるため、そのような大きな値の有効桁数全てを表現できると考えられることが多いが、これもまた間違いである。浮動小数点数は固定長の精度ビット(significand とも呼ばれる)と指数ビット(exponent)を使って広い範囲の値を表現するため、有効桁数はごく限られたものになる。

処理系によって精度の限界は異なる。コードの可搬性を維持するためには、```ループカウンタに浮動小数点変数を使ってはいけない```。
出典 https://www.jpcert.or.jp/sc-rules/c-flp30-c.html

### サブルーチンとは？
関数やサブルーチンを用いれば良い。


コンピュータプログラムの中で```特定の機能や処理をひとまとまりの集合として定義```し、他の箇所から呼び出して実行できるようにしたもの。単に「ルーチン」とも呼ばれる。
出典 https://e-words.jp/w/%E3%82%B5%E3%83%96%E3%83%AB%E3%83%BC%E3%83%81%E3%83%B3.html#:~:text=%E3%82%B5%E3%83%96%E3%83%AB%E3%83%BC%E3%83%81%E3%83%B3%20%E3%80%90subroutine%E3%80%91%20%E3%82%B5%E3%83%96%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3,%E5%8D%98%E3%81%AB%E3%80%8C%E3%83%AB%E3%83%BC%E3%83%81%E3%83%B3%E3%80%8D%E3%81%A8%E3%82%82%E5%91%BC%E3%81%B0%E3%82%8C%E3%82%8B%E3%80%82

### 領域割付け関数とは？
領域割り付け関数とは```特定のメモリ領域を取得するための関数```です。メモリ領域は有限なため必ず確保できるとは限らないので```領域確保ができなかった際のエラー処理を記述する必要があります```。
出典 https://pczama.com/blog/?p=2349

# 問題２の気づき
参照渡しのためサブルーチン(幅プログラム）で変更するとメインルーチン(主プログラム)でも変更される。

## 参照渡しとは？
コンピュータプログラム中で```関数やプロシージャなどに渡す引数として変数```などを指定する際、```呼び出し先でも同じ実体を参照するように渡す````方式。```渡された引数に変更を加えると呼び出し元にも同じように反映```される。

プログラム中で関数などを呼び出す際に、処理に反映させる```パラメータなどを呼び出し元が指定することができる```。```呼び出し元が呼び出し文中で指定するものを実引数```、```呼び出された側が実引数を受け取るために用いる変数などを仮引数```という。

実引数として定数やリテラルを渡す場合には、仮引数にその値が代入されて処理に用いられるだけだが、```実引数に呼び出し側が使用している変数やオブジェクトなどを指定```する場合、実引数の変数名で表される実体と仮引数の変数名で表される実体との関係をどのように扱うかという問題がある。

```参照渡しは仮引数と実引数が完全に同じ実体を表すように引数を受け渡す方式```で、呼び出し先が仮引数に新しい値を代入するなどの変更を行うと、呼び出し元の実引数に指定された変数などにも変更が反映される。

一方、```実引数から仮引数へ値のみを複製して渡し、両者が異なる実体として扱われる引き渡し方法を「値渡し」```（call by value）という。値渡しか参照渡しかはプログラミング言語によって決まっているが、参照渡しが可能な言語では値渡しも選択できるようになっていることが多い。

出典 https://e-words.jp/w/%E5%8F%82%E7%85%A7%E6%B8%A1%E3%81%97.html#:~:text=%E5%8F%82%E7%85%A7%E6%B8%A1%E3%81%97%E3%81%A8%E3%81%AF%E3%80%81%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF,%E3%82%88%E3%81%86%E3%81%AB%E5%8F%8D%E6%98%A0%E3%81%95%E3%82%8C%E3%82%8B%E3%80%82

### リテラルとは？
コンピュータプログラムのソースコードなどの中に、特定のデータ型の値を直に記載したもの。また、そのように値をコードに書き入れるために定められている書式。

表記の仕方によってデータ型を識別できるよう、例えば文字列を表記する際は必ず前後を「"」で括る、といった書式が言語仕様によって定められている。各データ型のリテラルを、型名を先頭につけて「文字列リテラル」「整数リテラル」「日付リテラル」などと呼ぶ。
出典 https://e-words.jp/w/%E3%83%AA%E3%83%86%E3%83%A9%E3%83%AB.html

### 気づき
メインルーチンとサブルーチンの間で渡される引数の扱い方の問題か。
参照値渡しはサブルーチンで変更されたらメインルーチンでも変更される。
値渡しは、サブルーチンで変更されてもメインルーチンには変更されない。

知らないことばかりだな。

# 出典 
https://qiita.com/masatom86650860/items/ef54a07fd29bc451887b

https://gihyo.jp/book/2022/978-4-297-12375-8